From bdae744a6e4386a5ef257ffcc995ffbc505d37ee Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 1 Sep 2023 16:49:10 +0700 Subject: [PATCH 001/283] first init texlib --- TexLib.py | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++ __init__.py | 5 +- 2 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 TexLib.py diff --git a/TexLib.py b/TexLib.py new file mode 100644 index 00000000..bf1801d3 --- /dev/null +++ b/TexLib.py @@ -0,0 +1,188 @@ +from .common import * +from .lib import * + +import bpy, threading, os, requests +from bpy.props import * + + +dl_threads = [] +addon_folder = os.path.dirname(__file__) +global previews_collection +preview_items = [] + +def preview_enums(self, context): + return preview_items + + +class TexLibProps(bpy.types.PropertyGroup): + page: IntProperty(name="page", default= 0) + input_search:StringProperty(name="Search") + persen:StringProperty() + progress : IntProperty( + default = 0, + min = 0, + max = 100, + description = 'Progress of the download', + subtype = 'PERCENTAGE' + ) + shaders_previews : EnumProperty( + name = 'PBR Shader', + items = preview_enums, + ) + +class AmbientOp(bpy.types.Operator): + bl_label = "Ambient Op" + bl_idname = "texlib.op" + + + def execute(self, context): + scene = context.scene + amb_br = scene.ambient_browser + content = amb_br.input_search + + thread = threading.Thread(target=download_stream, args=("https://acg-download.struffelproductions.com/file/ambientCG-Web/download/Ground068_c5MREyAu/Ground068_1K-JPG.zip", 30)) + thread.progress = 0.0 + dl_threads.append(thread) + + thread.start() + print("setar = "+content) + return {'FINISHED'} + + +class TexLibBrowser(bpy.types.Panel): + bl_label = "Texlib Browser" + bl_idname = "TEXLIB_PT_AmbientCG" + bl_space_type = "VIEW_3D" + bl_region_type = "UI" + bl_category = "Ucupaint" + + + def draw(self, context): + layout = self.layout + amb_br = context.scene.ambient_browser + layout.prop(amb_br, "input_search") + layout.operator("texlib.op") + layout.prop(amb_br, "progress", slider=True, text="Download") + + layout.template_icon_view(amb_br, "shaders_previews", show_labels=True,scale = 7, scale_popup = 5) + + layout.label(text="download "+str(amb_br.persen)) + +classes = [TexLibProps, TexLibBrowser, AmbientOp] +def register(): + for cl in classes: + bpy.utils.register_class(cl) + + print("INIT TexLIB") + previews_collection = bpy.utils.previews.new() + + file_path = get_addon_filepath() + + print(">> fp = "+file_path) + + dir_name = os.path.join(file_path, "previews") + os.sep + + print(">> fp = "+dir_name) + file00 = dir_name + 'Asphalt001.png' + file01 = dir_name + 'Asphalt002.png' + print(">> fp = ", file00) + + as0 = previews_collection.load('Asphalt001', file00, 'IMAGE') + as1 = previews_collection.load('Asphalt002', file01, 'IMAGE') + + preview_items.append(('Asphalt001.png', 'Asphalt001.png', "", as0.icon_id, 0)) + preview_items.append(('Asphalt002.png', 'Asphalt002.png', "", as1.icon_id, 1)) + + + bpy.types.Scene.ambient_browser = bpy.props.PointerProperty(type= TexLibProps) + + # bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) + +def unregister(): + for cl in classes: + bpy.utils.unregister_class(cl) + del bpy.types.Scene.ambient_browser + # Unregister the downloads timer + # if bpy.app.timers.is_registered(monitor_downloads): + # bpy.app.timers.unregister(monitor_downloads) + + +def monitor_downloads(): + + interval = 0.5 # execute every x seconds, 2 times a second in our case + # update_progress = False + if not hasattr(bpy, 'context'): + return 2 + + scn = bpy.context.scene + + for area in bpy.context.screen.areas: + # print("area type "+area.type) + + if not area.type == 'VIEW_3D': + continue + area.tag_redraw() + for sp in area.spaces: + print("redraw ",sp.type) + # if area.spaces[0].tree_type == "ShaderNodeTree": + # update_progress = True + # area.tag_redraw() + + amb = scn.ambient_browser + amb.progress += 1 + if amb.progress >= 100: + amb.progress = 0 + amb.persen = str(amb.progress) + "%" + # for dl_thread in dl_threads: + # if dl_thread and dl_thread.is_alive(): + # progg = int(dl_thread.progress) + # print("cek cek",progg) + # amb.progress = progg + # amb.persen = str(progg) + "%" + # print("monitor download "+str(interval)) + + return interval + +def download_stream(link, timeout, skipExisting = False): + directory = bpy.path.abspath("//textures") + + file_name = bpy.path.basename(link) + file_name = os.path.join(directory, file_name) + print("url = "+link) + print("base name = "+file_name) + + # if not skipExisting and os.path.exists(file_name): + # print("EXIST "+file_name) + # return file_name + prog = 0 + with open(file_name, "wb") as f: + try: + response = requests.get(link, stream=True, timeout = timeout) + # session seems to be a little bit faster + #session = requests.Session() + #response = session.get(link, stream=True, timeout = timeout) + total_length = response.headers.get('content-length') + print("total size = "+total_length) + if not total_length: + print('Error #1 while downloading', link, ':', "Empty Response.") + return + + dl = 0 + total_length = int(total_length) + # TODO a way for calculating the chunk size + for data in response.iter_content(chunk_size = 4096): + + dl += len(data) + f.write(data) + + prog = int(100 * dl / total_length) + dl_threads[0].progress = prog + + # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) + dl_threads.pop(0) + except Exception as e: + print('Error #2 while downloading', link, ':', e) + + +if __name__ == "__main__": + register() \ No newline at end of file diff --git a/__init__.py b/__init__.py index ba6d443a..d2830c3b 100644 --- a/__init__.py +++ b/__init__.py @@ -40,12 +40,13 @@ imp.reload(Bake) imp.reload(BakeToLayer) imp.reload(Root) + imp.reload(TexLib) imp.reload(load_blend_updates) imp.reload(addon_updater_ops) else: from . import Localization from . import image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences - from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, load_blend_updates, addon_updater_ops + from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, load_blend_updates, addon_updater_ops, TexLib import bpy @@ -70,6 +71,7 @@ def register(): Bake.register() BakeToLayer.register() Root.register() + TexLib.register() load_blend_updates.register() addon_updater_ops.register(bl_info) @@ -96,6 +98,7 @@ def unregister(): Bake.unregister() BakeToLayer.unregister() Root.unregister() + TexLib.unregister() load_blend_updates.unregister() addon_updater_ops.unregister() From 69046ab4b6d7fb0c80f5362487b9c56ac220bb64 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 4 Sep 2023 14:26:28 +0700 Subject: [PATCH 002/283] setup ui list --- TexLib.py | 163 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 137 insertions(+), 26 deletions(-) diff --git a/TexLib.py b/TexLib.py index bf1801d3..948a9437 100644 --- a/TexLib.py +++ b/TexLib.py @@ -1,8 +1,11 @@ +import typing +from bpy.types import AnyType, Context, UILayout from .common import * from .lib import * import bpy, threading, os, requests from bpy.props import * +from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene dl_threads = [] @@ -30,7 +33,7 @@ class TexLibProps(bpy.types.PropertyGroup): items = preview_enums, ) -class AmbientOp(bpy.types.Operator): +class TexLibDownloadOp(Operator): bl_label = "Ambient Op" bl_idname = "texlib.op" @@ -49,7 +52,7 @@ def execute(self, context): return {'FINISHED'} -class TexLibBrowser(bpy.types.Panel): +class TexLibBrowser(Panel): bl_label = "Texlib Browser" bl_idname = "TEXLIB_PT_AmbientCG" bl_space_type = "VIEW_3D" @@ -59,42 +62,126 @@ class TexLibBrowser(bpy.types.Panel): def draw(self, context): layout = self.layout - amb_br = context.scene.ambient_browser + scene = context.scene + amb_br = scene.ambient_browser + sel_index = scene.material_index + my_list = scene.material_items + layout.prop(amb_br, "input_search") - layout.operator("texlib.op") - layout.prop(amb_br, "progress", slider=True, text="Download") + layout.operator("texlib.new_material") + layout.operator("texlib.refresh_material") + layout.operator("texlib.rem_material") + # layout.prop(amb_br, "progress", slider=True, text="Download") + # layout.template_icon_view(amb_br, "shaders_previews", show_labels=True,scale = 7, scale_popup = 5) + # layout.label(text="download "+str(amb_br.persen)) + layout.template_list("TexLibMaterialUIList", "material_list", scene, "material_items", scene, "material_index") + + sel_mat = my_list[sel_index] + layout.separator() + prev = layout.column(align=True) + prev.alignment = "CENTER" + prev.template_icon(icon_value=sel_mat.thumb, scale=5.0) + prev.label(text=sel_mat.name) + +class MaterialItem(PropertyGroup): + name: StringProperty( name="Name", description="Material name", default="Untitled") + thumb: IntProperty( name="thumbnail", description="", default=0) + + +class TexLibMaterialUIList(UIList): + + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + """Demo UIList.""" + + # We could write some code to decide which icon to use here... + thumb = preview_items[index % 4][3] + + # print("tipe ",self.layout_type) + row = layout.row(align=True) + # row.alignment = "CENTER" + # Make sure your code supports all 3 layout types + if self.layout_type in {'DEFAULT', 'COMPACT'}: + row.template_icon(icon_value = thumb, scale = 1.0) + row.label(text=item.name) + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label(text=item.name, icon_value = thumb) + +class TexLibRefreshItems(Operator): + """Add a new item to the list.""" + + bl_idname = "texlib.refresh_material" + bl_label = "Refresh material" + + + def execute(self, context): + scene = context.scene + amb_br = scene.ambient_browser + context.scene.material_items.clear() + for index, item in enumerate(preview_items): + new_item = context.scene.material_items.add() + new_item.name = item[0] + new_item.thumb = item[3] + + return{'FINISHED'} + +class TexLibMaterialNewItem(Operator): + """Add a new item to the list.""" + + bl_idname = "texlib.new_material" + bl_label = "Add material" + @classmethod + def poll(cls, context: Context): + return context.scene.ambient_browser.input_search + + def execute(self, context): + scene = context.scene + amb_br = scene.ambient_browser + content = amb_br.input_search - layout.template_icon_view(amb_br, "shaders_previews", show_labels=True,scale = 7, scale_popup = 5) + new_item = context.scene.material_items.add() - layout.label(text="download "+str(amb_br.persen)) + print("add content "+content) + new_item.name = content -classes = [TexLibProps, TexLibBrowser, AmbientOp] -def register(): - for cl in classes: - bpy.utils.register_class(cl) + amb_br.input_search = "" - print("INIT TexLIB") - previews_collection = bpy.utils.previews.new() + return{'FINISHED'} - file_path = get_addon_filepath() +class TexLibMaterialDelItem(Operator): + """remove item to the list.""" + + bl_idname = "texlib.rem_material" + bl_label = "Remove material" + + @classmethod + def poll(cls, context: Context): + return context.scene.material_items - print(">> fp = "+file_path) + def execute(self, context): + scene = context.scene + index = scene.material_index + my_list = scene.material_items - dir_name = os.path.join(file_path, "previews") + os.sep + my_list.remove(index) - print(">> fp = "+dir_name) - file00 = dir_name + 'Asphalt001.png' - file01 = dir_name + 'Asphalt002.png' - print(">> fp = ", file00) + context.scene.material_index = 0 - as0 = previews_collection.load('Asphalt001', file00, 'IMAGE') - as1 = previews_collection.load('Asphalt002', file01, 'IMAGE') + return{'FINISHED'} + +classes = [TexLibProps, TexLibBrowser, TexLibDownloadOp, MaterialItem, TexLibMaterialUIList + ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibRefreshItems] - preview_items.append(('Asphalt001.png', 'Asphalt001.png', "", as0.icon_id, 0)) - preview_items.append(('Asphalt002.png', 'Asphalt002.png', "", as1.icon_id, 1)) +def register(): + for cl in classes: + bpy.utils.register_class(cl) + Scene.material_items = CollectionProperty(type=MaterialItem) + Scene.material_index = IntProperty(default=0, name="Material index") + Scene.ambient_browser = PointerProperty(type= TexLibProps) - bpy.types.Scene.ambient_browser = bpy.props.PointerProperty(type= TexLibProps) + init_test_thumbnails() # bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) @@ -102,10 +189,34 @@ def unregister(): for cl in classes: bpy.utils.unregister_class(cl) del bpy.types.Scene.ambient_browser - # Unregister the downloads timer + del Scene.material_items + del Scene.material_index + # if bpy.app.timers.is_registered(monitor_downloads): # bpy.app.timers.unregister(monitor_downloads) +def init_test_thumbnails(): + print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") + previews_collection = bpy.utils.previews.new() + + file_path = get_addon_filepath() + + mat_items = ("Asphalt001.png", "Asphalt002.png", "Candy001.png", "Candy002.png") + + print(">> fp = "+file_path) + + dir_name = os.path.join(file_path, "previews") + os.sep + + for index, item in enumerate(mat_items): + file = dir_name + item + print(">> fp = ", file) + + loaded = previews_collection.load(item, file, 'IMAGE') + + + preview_items.append((item.split(".")[0], item, "", loaded.icon_id, index)) + + # Scene.ambient_browser.shaders_previews. def monitor_downloads(): From 53f4d83f7274b18ff6e2acead1d4b179c5d5c903 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 5 Sep 2023 19:31:07 +0700 Subject: [PATCH 003/283] download preview assets add download buttons per attribute --- .gitignore | 2 +- TexLib.py | 237 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 190 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index c350ed59..43d85fb9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /__pycache__ -ucupaint_updater/ucupaint_updater_status.json \ No newline at end of file +ucupaint_updater/ucupaint_updater_status.json diff --git a/TexLib.py b/TexLib.py index 948a9437..3d956c8f 100644 --- a/TexLib.py +++ b/TexLib.py @@ -3,18 +3,19 @@ from .common import * from .lib import * -import bpy, threading, os, requests +import bpy, threading, os, requests, json from bpy.props import * from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene dl_threads = [] addon_folder = os.path.dirname(__file__) -global previews_collection -preview_items = [] +# global previews_collection +# preview_items = [] +assets_lib = {} def preview_enums(self, context): - return preview_items + return previews_collection.preview_items class TexLibProps(bpy.types.PropertyGroup): @@ -33,22 +34,30 @@ class TexLibProps(bpy.types.PropertyGroup): items = preview_enums, ) -class TexLibDownloadOp(Operator): - bl_label = "Ambient Op" - bl_idname = "texlib.op" - +class TexLibDownload(Operator): + bl_label = "texlib Download" + bl_idname = "texlib.download" + + attribute:bpy.props.StringProperty() + id:bpy.props.StringProperty() def execute(self, context): - scene = context.scene - amb_br = scene.ambient_browser - content = amb_br.input_search - - thread = threading.Thread(target=download_stream, args=("https://acg-download.struffelproductions.com/file/ambientCG-Web/download/Ground068_c5MREyAu/Ground068_1K-JPG.zip", 30)) - thread.progress = 0.0 - dl_threads.append(thread) - - thread.start() - print("setar = "+content) + # scene = context.scene + # sel_index = scene.material_index + # my_list = scene.material_items + # if sel_index < len(my_list): + + # scene = context.scene + # amb_br = scene.ambient_browser + # content = amb_br.input_search + + # thread = threading.Thread(target=download_stream, args=("https://acg-download.struffelproductions.com/file/ambientCG-Web/download/Ground068_c5MREyAu/Ground068_1K-JPG.zip", 30)) + # thread.progress = 0.0 + # dl_threads.append(thread) + + # thread.start() + lib = assets_lib[self.id] + print("setar =",self.attribute, "selected = "+self.id, "lib =", lib["downloads"][self.attribute]["link"]) return {'FINISHED'} @@ -68,20 +77,30 @@ def draw(self, context): my_list = scene.material_items layout.prop(amb_br, "input_search") - layout.operator("texlib.new_material") - layout.operator("texlib.refresh_material") - layout.operator("texlib.rem_material") + layout.operator("texlib.search_material") + layout.operator("texlib.refresh_previews") + # layout.operator("texlib.rem_material") # layout.prop(amb_br, "progress", slider=True, text="Download") # layout.template_icon_view(amb_br, "shaders_previews", show_labels=True,scale = 7, scale_popup = 5) # layout.label(text="download "+str(amb_br.persen)) layout.template_list("TexLibMaterialUIList", "material_list", scene, "material_items", scene, "material_index") - sel_mat = my_list[sel_index] - layout.separator() - prev = layout.column(align=True) - prev.alignment = "CENTER" - prev.template_icon(icon_value=sel_mat.thumb, scale=5.0) - prev.label(text=sel_mat.name) + # print("index ", sel_index, "my list", len(my_list)) + + if sel_index < len(my_list): + sel_mat = my_list[sel_index] + + layout.separator() + selected_mat = layout.column(align=True) + selected_mat.alignment = "CENTER" + selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) + selected_mat.label(text=sel_mat.name) + downloads = assets_lib[sel_mat.name]["downloads"] + + for d in downloads: + op = layout.operator("texlib.download", text=d) + op.attribute = d + op.id = sel_mat.name class MaterialItem(PropertyGroup): name: StringProperty( name="Name", description="Material name", default="Untitled") @@ -94,7 +113,7 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn """Demo UIList.""" # We could write some code to decide which icon to use here... - thumb = preview_items[index % 4][3] + thumb = previews_collection.preview_items[index % 4][3] # print("tipe ",self.layout_type) row = layout.row(align=True) @@ -109,21 +128,38 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn layout.label(text=item.name, icon_value = thumb) class TexLibRefreshItems(Operator): - """Add a new item to the list.""" - - bl_idname = "texlib.refresh_material" - bl_label = "Refresh material" + bl_idname = "texlib.refresh_previews" + bl_label = "Refresh previews" def execute(self, context): scene = context.scene amb_br = scene.ambient_browser context.scene.material_items.clear() - for index, item in enumerate(preview_items): + if not read_asset_info(): + retrieve_assets_info(0, 10) + + # new_t = threading.Thread(target=download_previews, args=(False ,)) + # new_t.start() + download_previews(False) + load_previews() + for index, item in enumerate(previews_collection.preview_items): new_item = context.scene.material_items.add() new_item.name = item[0] new_item.thumb = item[3] - + + return{'FINISHED'} + +class TexLibSearchMaterial(Operator): + bl_idname = "texlib.search_material" + bl_label = "Search Materials" + + + def execute(self, context): + scene = context.scene + amb_br = scene.ambient_browser + retrieve_assets_info(0, 10) + return{'FINISHED'} class TexLibMaterialNewItem(Operator): @@ -170,18 +206,22 @@ def execute(self, context): return{'FINISHED'} -classes = [TexLibProps, TexLibBrowser, TexLibDownloadOp, MaterialItem, TexLibMaterialUIList - ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibRefreshItems] +classes = [TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TexLibMaterialUIList + ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibRefreshItems, TexLibSearchMaterial] def register(): for cl in classes: bpy.utils.register_class(cl) - Scene.material_items = CollectionProperty(type=MaterialItem) + Scene.material_items = CollectionProperty(type= MaterialItem) Scene.material_index = IntProperty(default=0, name="Material index") + Scene.material_attr_index = IntProperty(default=0, name="Attribute index") Scene.ambient_browser = PointerProperty(type= TexLibProps) - init_test_thumbnails() + global previews_collection + previews_collection = bpy.utils.previews.new() + + # load_previews() # bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) @@ -191,32 +231,37 @@ def unregister(): del bpy.types.Scene.ambient_browser del Scene.material_items del Scene.material_index + del Scene.material_attr_index + + bpy.utils.previews.remove(previews_collection) # if bpy.app.timers.is_registered(monitor_downloads): # bpy.app.timers.unregister(monitor_downloads) -def init_test_thumbnails(): +def load_previews(): print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") - previews_collection = bpy.utils.previews.new() - - file_path = get_addon_filepath() - mat_items = ("Asphalt001.png", "Asphalt002.png", "Candy001.png", "Candy002.png") + # mat_items = ("Asphalt001.png", "Asphalt002.png", "Candy001.png", "Candy002.png") - print(">> fp = "+file_path) - - dir_name = os.path.join(file_path, "previews") + os.sep - for index, item in enumerate(mat_items): + dir_name = _get_preview_dir() + print("fp = "+dir_name) + files = os.listdir(dir_name) + + previews_collection.clear() + preview_items = [] + # for index, item in enumerate(mat_items): + for index, item in enumerate(files): file = dir_name + item print(">> fp = ", file) - loaded = previews_collection.load(item, file, 'IMAGE') + loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) preview_items.append((item.split(".")[0], item, "", loaded.icon_id, index)) # Scene.ambient_browser.shaders_previews. + previews_collection.preview_items = preview_items def monitor_downloads(): @@ -294,6 +339,102 @@ def download_stream(link, timeout, skipExisting = False): except Exception as e: print('Error #2 while downloading', link, ':', e) +def download_previews(overwrite_existing:bool): + directory = _get_preview_dir() + print("download to ",directory) + print("asset",assets_lib) + for ast in assets_lib: + link = assets_lib[ast]["preview"] + file_name = bpy.path.basename(link) + file_name = os.path.join(directory, file_name) + + if not overwrite_existing and os.path.exists(file_name): + print("EXIST "+file_name) + continue + print("url = ",link, file_name) + with open(file_name, "wb") as f: + try: + response = requests.get(link, stream=True) + total_length = response.headers.get('content-length') + if not total_length: + print('Error #1 while downloading', link, ':', "Empty Response.") + return + dl = 0 + total_length = int(total_length) + for data in response.iter_content(chunk_size = 4096): + dl += len(data) + f.write(data) + except Exception as e: + print('Error #2 while downloading', link, ':', e) + +def read_asset_info() -> bool: + dir_name = get_addon_filepath() + file_name = os.path.join(dir_name, "lib.json") + + if os.path.exists(file_name): + file = open(file_name, 'r') + content = file.read() + jsn = json.loads(content) + assets_lib.update(jsn) + file.close() + print("read ", content) + return True + return False + +def retrieve_assets_info(page:int, limit:int): + base_link = "https://ambientCG.com/api/v2/full_json" + params = { + 'type': 'Material', + 'include':'imageData,downloadData', + 'limit': str(limit), + 'offset': str(limit * page) + } + + + + dir_name = get_addon_filepath() + file_name = os.path.join(dir_name, "lib.json") + file_name_ori = os.path.join(dir_name, "lib-ori.json") + + + + + response = requests.get(base_link, params=params) + if not response.status_code == 200: + print("Can't download, Code: " + str(response.status_code)) + return None + + assets = response.json()["foundAssets"] + file = open(file_name, 'w') + + assets_lib = {} + for asst in assets: + asset_obj = {} + asset_obj["id"] = asst["assetId"] + asset_obj["preview"] = asst["previewImage"]["256-PNG"] + + zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] + downloads = {} + for k in zip_assets: + downloads[k["attribute"]] = { + "link" : k["downloadLink"], + "fileName" : k["fileName"] + } + asset_obj["downloads"] = downloads + assets_lib[asst["assetId"]] = asset_obj + + file.write(json.dumps(assets_lib)) + file.close() + print("stored to ", file_name) + # print("content to ", str(assets_lib)) + + file_ori = open(file_name_ori, 'w') + file_ori.write(json.dumps({"foundAssets":assets})) + file_ori.close() + +def _get_preview_dir(): + file_path = get_addon_filepath() + return os.path.join(file_path, "previews") + os.sep if __name__ == "__main__": register() \ No newline at end of file From 2993e0dd92c76ac1b32d5c70c22441c505bb0016 Mon Sep 17 00:00:00 2001 From: ahmad rifai Date: Wed, 6 Sep 2023 18:24:12 +0700 Subject: [PATCH 004/283] add search feature material by keyword --- TexLib.py | 118 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 46 deletions(-) diff --git a/TexLib.py b/TexLib.py index 3d956c8f..15f00d58 100644 --- a/TexLib.py +++ b/TexLib.py @@ -13,14 +13,36 @@ # global previews_collection # preview_items = [] assets_lib = {} +last_search = {} -def preview_enums(self, context): - return previews_collection.preview_items +# def preview_enums(self, context): +# return previews_collection.preview_items + +def update_input_search(self, context): + scene = context.scene + retrieve_assets_info(self.input_search) + if not read_asset_info(): + retrieve_assets_info() + # new_t = threading.Thread(target=download_previews, args=(False ,)) + # new_t.start() + download_previews(False) + load_previews() + + scene.material_items.clear() + for i in last_search: + # for index, item in enumerate(previews_collection.preview_items): + new_item = scene.material_items.add() + item_id = last_search[i]["id"] + new_item.name = item_id + # new_item.thumb = lib.custom_icons["input"].icon_id # previews_collection.preview_items[item_id][3] + new_item.thumb = previews_collection.preview_items[item_id][3] class TexLibProps(bpy.types.PropertyGroup): page: IntProperty(name="page", default= 0) - input_search:StringProperty(name="Search") + input_search:StringProperty(name="Search", update=update_input_search) + searching:BoolProperty(default=False) + persen:StringProperty() progress : IntProperty( default = 0, @@ -29,10 +51,10 @@ class TexLibProps(bpy.types.PropertyGroup): description = 'Progress of the download', subtype = 'PERCENTAGE' ) - shaders_previews : EnumProperty( - name = 'PBR Shader', - items = preview_enums, - ) + # shaders_previews : EnumProperty( + # name = 'PBR Shader', + # items = preview_enums, + # ) class TexLibDownload(Operator): bl_label = "texlib Download" @@ -77,8 +99,7 @@ def draw(self, context): my_list = scene.material_items layout.prop(amb_br, "input_search") - layout.operator("texlib.search_material") - layout.operator("texlib.refresh_previews") + # layout.operator("texlib.refresh_previews") # layout.operator("texlib.rem_material") # layout.prop(amb_br, "progress", slider=True, text="Download") # layout.template_icon_view(amb_br, "shaders_previews", show_labels=True,scale = 7, scale_popup = 5) @@ -112,20 +133,22 @@ class TexLibMaterialUIList(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): """Demo UIList.""" - # We could write some code to decide which icon to use here... - thumb = previews_collection.preview_items[index % 4][3] +# index = scene.material_index + scene = context.scene + my_list = scene.material_items + # print("tipe ",self.layout_type) row = layout.row(align=True) # row.alignment = "CENTER" # Make sure your code supports all 3 layout types if self.layout_type in {'DEFAULT', 'COMPACT'}: - row.template_icon(icon_value = thumb, scale = 1.0) + row.template_icon(icon_value = item.thumb, scale = 1.0) row.label(text=item.name) elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' - layout.label(text=item.name, icon_value = thumb) + layout.label(text=item.name, icon_value = item.thumb) class TexLibRefreshItems(Operator): bl_idname = "texlib.refresh_previews" @@ -137,30 +160,22 @@ def execute(self, context): amb_br = scene.ambient_browser context.scene.material_items.clear() if not read_asset_info(): - retrieve_assets_info(0, 10) + retrieve_assets_info() # new_t = threading.Thread(target=download_previews, args=(False ,)) # new_t.start() download_previews(False) load_previews() - for index, item in enumerate(previews_collection.preview_items): + + for i in last_search: + # for index, item in enumerate(previews_collection.preview_items): new_item = context.scene.material_items.add() - new_item.name = item[0] - new_item.thumb = item[3] - - return{'FINISHED'} - -class TexLibSearchMaterial(Operator): - bl_idname = "texlib.search_material" - bl_label = "Search Materials" - - - def execute(self, context): - scene = context.scene - amb_br = scene.ambient_browser - retrieve_assets_info(0, 10) + item_id = last_search[i]["id"] + new_item.name = item_id + new_item.thumb = previews_collection.preview_items[item_id][3] return{'FINISHED'} + class TexLibMaterialNewItem(Operator): """Add a new item to the list.""" @@ -207,7 +222,7 @@ def execute(self, context): return{'FINISHED'} classes = [TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TexLibMaterialUIList - ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibRefreshItems, TexLibSearchMaterial] + ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibRefreshItems] def register(): for cl in classes: @@ -249,16 +264,14 @@ def load_previews(): files = os.listdir(dir_name) previews_collection.clear() - preview_items = [] + preview_items = {} # for index, item in enumerate(mat_items): for index, item in enumerate(files): file = dir_name + item print(">> fp = ", file) - + my_id = item.split(".")[0] loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) - - - preview_items.append((item.split(".")[0], item, "", loaded.icon_id, index)) + preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) # Scene.ambient_browser.shaders_previews. previews_collection.preview_items = preview_items @@ -341,6 +354,8 @@ def download_stream(link, timeout, skipExisting = False): def download_previews(overwrite_existing:bool): directory = _get_preview_dir() + if not os.path.exists(directory): + os.mkdir(directory) print("download to ",directory) print("asset",assets_lib) for ast in assets_lib: @@ -368,7 +383,7 @@ def download_previews(overwrite_existing:bool): print('Error #2 while downloading', link, ':', e) def read_asset_info() -> bool: - dir_name = get_addon_filepath() + dir_name = _get_lib_dir() file_name = os.path.join(dir_name, "lib.json") if os.path.exists(file_name): @@ -381,7 +396,7 @@ def read_asset_info() -> bool: return True return False -def retrieve_assets_info(page:int, limit:int): +def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): base_link = "https://ambientCG.com/api/v2/full_json" params = { 'type': 'Material', @@ -389,16 +404,14 @@ def retrieve_assets_info(page:int, limit:int): 'limit': str(limit), 'offset': str(limit * page) } - - - dir_name = get_addon_filepath() + if keyword != '': + params['q'] = keyword + + dir_name = _get_lib_dir() file_name = os.path.join(dir_name, "lib.json") file_name_ori = os.path.join(dir_name, "lib-ori.json") - - - response = requests.get(base_link, params=params) if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) @@ -407,7 +420,8 @@ def retrieve_assets_info(page:int, limit:int): assets = response.json()["foundAssets"] file = open(file_name, 'w') - assets_lib = {} + # assets_lib = {} + last_search.clear() for asst in assets: asset_obj = {} asset_obj["id"] = asst["assetId"] @@ -422,6 +436,7 @@ def retrieve_assets_info(page:int, limit:int): } asset_obj["downloads"] = downloads assets_lib[asst["assetId"]] = asset_obj + last_search[asst["assetId"]] = asset_obj file.write(json.dumps(assets_lib)) file.close() @@ -432,9 +447,20 @@ def retrieve_assets_info(page:int, limit:int): file_ori.write(json.dumps({"foundAssets":assets})) file_ori.close() -def _get_preview_dir(): + +def _get_preview_dir() -> str: + file_path = _get_lib_dir() + retval = os.path.join(file_path, "previews") + os.sep + if not os.path.exists(retval): + os.mkdir(retval) + return retval + +def _get_lib_dir() -> str: file_path = get_addon_filepath() - return os.path.join(file_path, "previews") + os.sep + retval = os.path.join(file_path, "library") + os.sep + if not os.path.exists(retval): + os.mkdir(retval) + return retval if __name__ == "__main__": register() \ No newline at end of file From ddaee4a6f52d9320e1a342304ff99ce746973ef2 Mon Sep 17 00:00:00 2001 From: ahmad rifai Date: Thu, 7 Sep 2023 16:31:28 +0700 Subject: [PATCH 005/283] search material with threading --- TexLib.py | 297 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 169 insertions(+), 128 deletions(-) diff --git a/TexLib.py b/TexLib.py index 15f00d58..9f446e09 100644 --- a/TexLib.py +++ b/TexLib.py @@ -8,7 +8,7 @@ from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene -dl_threads = [] +# thread_search:threading.Thread # progress:int addon_folder = os.path.dirname(__file__) # global previews_collection # preview_items = [] @@ -19,42 +19,84 @@ # return previews_collection.preview_items def update_input_search(self, context): - scene = context.scene - retrieve_assets_info(self.input_search) - if not read_asset_info(): - retrieve_assets_info() + if self.input_last == self.input_search: + print("no search:"+self.input_search) + return - # new_t = threading.Thread(target=download_previews, args=(False ,)) - # new_t.start() - download_previews(False) + self.input_last = self.input_search + + context.scene.material_items.clear() + + if self.input_search == '': + last_search.clear() + return + + global thread_search + thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) + thread_search.progress = 0 + thread_search.stop = False + thread_search.start() + + self.progress = 0 + +def searching_material(keyword:str, context:Context): + scene = context.scene + + retrieve_assets_info(keyword) + thread_search.progress = 10 + load_material_items(scene.material_items) + + download_previews(False, scene.material_items) + thread_search.progress = 90 load_previews() + thread_search.progress = 95 + - scene.material_items.clear() + load_material_items(scene.material_items) + # scene.material_items.clear() + # for i in last_search: + # new_item = scene.material_items.add() + # item_id = last_search[i]["id"] + # new_item.name = item_id + # # new_item.thumb = lib.custom_icons["input"].icon_id # previews_collection.preview_items[item_id][3] + # new_item.thumb = previews_collection.preview_items[item_id][3] + thread_search.progress = 100 + + print("finish search") + +def load_material_items(material_items): + material_items.clear() for i in last_search: - # for index, item in enumerate(previews_collection.preview_items): - new_item = scene.material_items.add() + new_item = material_items.add() item_id = last_search[i]["id"] new_item.name = item_id - # new_item.thumb = lib.custom_icons["input"].icon_id # previews_collection.preview_items[item_id][3] - new_item.thumb = previews_collection.preview_items[item_id][3] + if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: + new_item.thumb = previews_collection.preview_items[item_id][3] + else: + new_item.thumb = lib.custom_icons["input"].icon_id + +def load_per_material(file_name, material_item): + item = os.path.basename(file_name) + + my_id = item.split(".")[0] + # print(">>item",item,"file",file_name, "my_id", my_id) + loaded = previews_collection.load(item, file_name, 'IMAGE', force_reload=True) + + previews_collection.preview_items[my_id] = (my_id, item, "", loaded.icon_id, len(previews_collection.preview_items)) + material_item.thumb = loaded.icon_id class TexLibProps(bpy.types.PropertyGroup): page: IntProperty(name="page", default= 0) input_search:StringProperty(name="Search", update=update_input_search) - searching:BoolProperty(default=False) - - persen:StringProperty() + input_last:StringProperty() progress : IntProperty( - default = 0, - min = 0, + default = -1, + min = -1, max = 100, description = 'Progress of the download', subtype = 'PERCENTAGE' ) - # shaders_previews : EnumProperty( - # name = 'PBR Shader', - # items = preview_enums, - # ) + class TexLibDownload(Operator): bl_label = "texlib Download" @@ -82,7 +124,6 @@ def execute(self, context): print("setar =",self.attribute, "selected = "+self.id, "lib =", lib["downloads"][self.attribute]["link"]) return {'FINISHED'} - class TexLibBrowser(Panel): bl_label = "Texlib Browser" bl_idname = "TEXLIB_PT_AmbientCG" @@ -99,36 +140,40 @@ def draw(self, context): my_list = scene.material_items layout.prop(amb_br, "input_search") + + if amb_br.progress >= 0: + layout.label(text="Searching..."+str(amb_br.progress)+"%") + layout.operator("texlib.cancel_search") # layout.operator("texlib.refresh_previews") # layout.operator("texlib.rem_material") # layout.prop(amb_br, "progress", slider=True, text="Download") # layout.template_icon_view(amb_br, "shaders_previews", show_labels=True,scale = 7, scale_popup = 5) # layout.label(text="download "+str(amb_br.persen)) - layout.template_list("TexLibMaterialUIList", "material_list", scene, "material_items", scene, "material_index") - - # print("index ", sel_index, "my list", len(my_list)) - if sel_index < len(my_list): - sel_mat = my_list[sel_index] - - layout.separator() - selected_mat = layout.column(align=True) - selected_mat.alignment = "CENTER" - selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) - selected_mat.label(text=sel_mat.name) - downloads = assets_lib[sel_mat.name]["downloads"] - - for d in downloads: - op = layout.operator("texlib.download", text=d) - op.attribute = d - op.id = sel_mat.name + if len(my_list) > 0: + layout.template_list("TEXLIB_UL_Material", "material_list", scene, "material_items", scene, "material_index") + # print("index ", sel_index, "my list", len(my_list)) + if sel_index < len(my_list): + sel_mat = my_list[sel_index] + + layout.separator() + selected_mat = layout.column(align=True) + selected_mat.alignment = "CENTER" + selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) + selected_mat.label(text=sel_mat.name) + downloads = assets_lib[sel_mat.name]["downloads"] + + for d in downloads: + op = layout.operator("texlib.download", text=d) + op.attribute = d + op.id = sel_mat.name class MaterialItem(PropertyGroup): name: StringProperty( name="Name", description="Material name", default="Untitled") thumb: IntProperty( name="thumbnail", description="", default=0) -class TexLibMaterialUIList(UIList): +class TEXLIB_UL_Material(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): """Demo UIList.""" @@ -150,30 +195,14 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn layout.alignment = 'CENTER' layout.label(text=item.name, icon_value = item.thumb) -class TexLibRefreshItems(Operator): - bl_idname = "texlib.refresh_previews" - bl_label = "Refresh previews" +class TexLibCancelSearch(Operator): + bl_idname = "texlib.cancel_search" + bl_label = "Cancel" def execute(self, context): - scene = context.scene - amb_br = scene.ambient_browser - context.scene.material_items.clear() - if not read_asset_info(): - retrieve_assets_info() - - # new_t = threading.Thread(target=download_previews, args=(False ,)) - # new_t.start() - download_previews(False) - load_previews() - - for i in last_search: - # for index, item in enumerate(previews_collection.preview_items): - new_item = context.scene.material_items.add() - item_id = last_search[i]["id"] - new_item.name = item_id - new_item.thumb = previews_collection.preview_items[item_id][3] - + thread_search.stop = True + return{'FINISHED'} @@ -221,94 +250,62 @@ def execute(self, context): return{'FINISHED'} -classes = [TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TexLibMaterialUIList - ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibRefreshItems] - -def register(): - for cl in classes: - bpy.utils.register_class(cl) - - Scene.material_items = CollectionProperty(type= MaterialItem) - Scene.material_index = IntProperty(default=0, name="Material index") - Scene.material_attr_index = IntProperty(default=0, name="Attribute index") - Scene.ambient_browser = PointerProperty(type= TexLibProps) - - global previews_collection - previews_collection = bpy.utils.previews.new() - - # load_previews() - - # bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) - -def unregister(): - for cl in classes: - bpy.utils.unregister_class(cl) - del bpy.types.Scene.ambient_browser - del Scene.material_items - del Scene.material_index - del Scene.material_attr_index - bpy.utils.previews.remove(previews_collection) - - # if bpy.app.timers.is_registered(monitor_downloads): - # bpy.app.timers.unregister(monitor_downloads) def load_previews(): - print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") - - # mat_items = ("Asphalt001.png", "Asphalt002.png", "Candy001.png", "Candy002.png") - - + # print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") dir_name = _get_preview_dir() - print("fp = "+dir_name) files = os.listdir(dir_name) previews_collection.clear() preview_items = {} - # for index, item in enumerate(mat_items): for index, item in enumerate(files): file = dir_name + item - print(">> fp = ", file) my_id = item.split(".")[0] + print(">>item",item,"file",file) loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) - # Scene.ambient_browser.shaders_previews. - previews_collection.preview_items = preview_items + previews_collection.preview_items.update(preview_items) def monitor_downloads(): - interval = 0.5 # execute every x seconds, 2 times a second in our case - # update_progress = False + interval = 0.1 + + + try: + thread_search + except: + return 1 + + if not thread_search.is_alive() and thread_search.progress < 0: + return 1 + if not hasattr(bpy, 'context'): return 2 - scn = bpy.context.scene for area in bpy.context.screen.areas: - # print("area type "+area.type) - if not area.type == 'VIEW_3D': continue area.tag_redraw() - for sp in area.spaces: - print("redraw ",sp.type) + # for sp in area.spaces: + # print("redraw ",sp.type) # if area.spaces[0].tree_type == "ShaderNodeTree": # update_progress = True # area.tag_redraw() + + if thread_search.progress == 100: + thread_search.progress = -1 + amb = scn.ambient_browser - amb.progress += 1 - if amb.progress >= 100: - amb.progress = 0 - amb.persen = str(amb.progress) + "%" - # for dl_thread in dl_threads: - # if dl_thread and dl_thread.is_alive(): - # progg = int(dl_thread.progress) - # print("cek cek",progg) - # amb.progress = progg - # amb.persen = str(progg) + "%" - # print("monitor download "+str(interval)) + amb.progress = thread_search.progress + + + + # if thread_search.is_alive(): + # thread_search.progress return interval @@ -345,28 +342,35 @@ def download_stream(link, timeout, skipExisting = False): f.write(data) prog = int(100 * dl / total_length) - dl_threads[0].progress = prog + # dl_threads[0].progress = prog # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) - dl_threads.pop(0) + # dl_threads.pop(0) except Exception as e: print('Error #2 while downloading', link, ':', e) -def download_previews(overwrite_existing:bool): +def download_previews(overwrite_existing:bool, material_items): directory = _get_preview_dir() if not os.path.exists(directory): os.mkdir(directory) print("download to ",directory) - print("asset",assets_lib) - for ast in assets_lib: - link = assets_lib[ast]["preview"] + # print("asset",assets_lib) + + progress_initial = thread_search.progress + progress_max = 90 + span = progress_max - progress_initial + item_count = len(last_search) + + for index,ast in enumerate(last_search): + if thread_search.stop: + break + link = last_search[ast]["preview"] file_name = bpy.path.basename(link) file_name = os.path.join(directory, file_name) if not overwrite_existing and os.path.exists(file_name): print("EXIST "+file_name) continue - print("url = ",link, file_name) with open(file_name, "wb") as f: try: response = requests.get(link, stream=True) @@ -381,6 +385,12 @@ def download_previews(overwrite_existing:bool): f.write(data) except Exception as e: print('Error #2 while downloading', link, ':', e) + prog = (index + 1) / item_count + print("url = ",prog, ' | ',link,' | ', file_name) + # refresh list + load_per_material(file_name, material_items[index]) + + thread_search.progress = (int) (progress_initial + prog * span) def read_asset_info() -> bool: dir_name = _get_lib_dir() @@ -447,7 +457,6 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): file_ori.write(json.dumps({"foundAssets":assets})) file_ori.close() - def _get_preview_dir() -> str: file_path = _get_lib_dir() retval = os.path.join(file_path, "previews") + os.sep @@ -462,5 +471,37 @@ def _get_lib_dir() -> str: os.mkdir(retval) return retval +classes = [TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TEXLIB_UL_Material + ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibCancelSearch] + +def register(): + for cl in classes: + bpy.utils.register_class(cl) + + Scene.material_items = CollectionProperty(type= MaterialItem) + Scene.material_index = IntProperty(default=0, name="Material index") + Scene.material_attr_index = IntProperty(default=0, name="Attribute index") + Scene.ambient_browser = PointerProperty(type= TexLibProps) + + global previews_collection + previews_collection = bpy.utils.previews.new() + previews_collection.preview_items = {} + # load_previews() + + bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) + +def unregister(): + for cl in classes: + bpy.utils.unregister_class(cl) + del bpy.types.Scene.ambient_browser + del Scene.material_items + del Scene.material_index + del Scene.material_attr_index + + bpy.utils.previews.remove(previews_collection) + + if bpy.app.timers.is_registered(monitor_downloads): + bpy.app.timers.unregister(monitor_downloads) + if __name__ == "__main__": register() \ No newline at end of file From 8a1cfbb5253f0a7f3d86185063e34f22c2c0a496 Mon Sep 17 00:00:00 2001 From: ahmad rifai Date: Mon, 11 Sep 2023 13:30:54 +0700 Subject: [PATCH 006/283] downloadable files --- TexLib.py | 144 +++++++++++++++++++++++------------------------------- 1 file changed, 61 insertions(+), 83 deletions(-) diff --git a/TexLib.py b/TexLib.py index 9f446e09..2ddd8e1d 100644 --- a/TexLib.py +++ b/TexLib.py @@ -1,22 +1,20 @@ -import typing -from bpy.types import AnyType, Context, UILayout +from bpy.types import Context from .common import * from .lib import * +from zipfile import ZipFile import bpy, threading, os, requests, json from bpy.props import * from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene - +THREAD_SEARCHING = "thread_searching" # thread_search:threading.Thread # progress:int -addon_folder = os.path.dirname(__file__) # global previews_collection # preview_items = [] assets_lib = {} last_search = {} -# def preview_enums(self, context): -# return previews_collection.preview_items +threads = {} # progress:int, def update_input_search(self, context): if self.input_last == self.input_search: @@ -31,10 +29,11 @@ def update_input_search(self, context): last_search.clear() return - global thread_search thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) thread_search.progress = 0 - thread_search.stop = False + thread_search.cancel = False + threads[THREAD_SEARCHING] = thread_search + thread_search.start() self.progress = 0 @@ -42,6 +41,8 @@ def update_input_search(self, context): def searching_material(keyword:str, context:Context): scene = context.scene + thread_search = threads[THREAD_SEARCHING] + retrieve_assets_info(keyword) thread_search.progress = 10 load_material_items(scene.material_items) @@ -121,7 +122,16 @@ def execute(self, context): # thread.start() lib = assets_lib[self.id] - print("setar =",self.attribute, "selected = "+self.id, "lib =", lib["downloads"][self.attribute]["link"]) + link = lib["downloads"][self.attribute]["link"] + file_name = lib["downloads"][self.attribute]["fileName"] + print("setar =",self.attribute, "selected = "+self.id, "lib =", link) + + file = download_stream(link, self.id, self.attribute, file_name) + if file != None: + extract_file(file) + os.remove(file) + else: + print("not found",file) return {'FINISHED'} class TexLibBrowser(Panel): @@ -142,7 +152,11 @@ def draw(self, context): layout.prop(amb_br, "input_search") if amb_br.progress >= 0: - layout.label(text="Searching..."+str(amb_br.progress)+"%") + prog = amb_br.progress + if prog < 10: + layout.label(text="Searching..."+str(prog)+"%") + else: + layout.label(text="Retrieving thumbnails..."+str(prog)+"%") layout.operator("texlib.cancel_search") # layout.operator("texlib.refresh_previews") # layout.operator("texlib.rem_material") @@ -201,57 +215,11 @@ class TexLibCancelSearch(Operator): def execute(self, context): - thread_search.stop = True + thread_search = threading[THREAD_SEARCHING] + thread_search.cancel = True return{'FINISHED'} - -class TexLibMaterialNewItem(Operator): - """Add a new item to the list.""" - - bl_idname = "texlib.new_material" - bl_label = "Add material" - @classmethod - def poll(cls, context: Context): - return context.scene.ambient_browser.input_search - - def execute(self, context): - scene = context.scene - amb_br = scene.ambient_browser - content = amb_br.input_search - - new_item = context.scene.material_items.add() - - print("add content "+content) - new_item.name = content - - amb_br.input_search = "" - - return{'FINISHED'} - -class TexLibMaterialDelItem(Operator): - """remove item to the list.""" - - bl_idname = "texlib.rem_material" - bl_label = "Remove material" - - @classmethod - def poll(cls, context: Context): - return context.scene.material_items - - def execute(self, context): - scene = context.scene - index = scene.material_index - my_list = scene.material_items - - my_list.remove(index) - - context.scene.material_index = 0 - - return{'FINISHED'} - - - def load_previews(): # print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") dir_name = _get_preview_dir() @@ -272,9 +240,8 @@ def monitor_downloads(): interval = 0.1 - try: - thread_search + thread_search = threads[THREAD_SEARCHING] except: return 1 @@ -289,12 +256,6 @@ def monitor_downloads(): if not area.type == 'VIEW_3D': continue area.tag_redraw() - # for sp in area.spaces: - # print("redraw ",sp.type) - # if area.spaces[0].tree_type == "ShaderNodeTree": - # update_progress = True - # area.tag_redraw() - if thread_search.progress == 100: thread_search.progress = -1 @@ -302,21 +263,29 @@ def monitor_downloads(): amb = scn.ambient_browser amb.progress = thread_search.progress - - - # if thread_search.is_alive(): - # thread_search.progress - return interval -def download_stream(link, timeout, skipExisting = False): - directory = bpy.path.abspath("//textures") +def extract_file(my_file): + with ZipFile(my_file, 'r') as zObject: - file_name = bpy.path.basename(link) - file_name = os.path.join(directory, file_name) - print("url = "+link) - print("base name = "+file_name) + dir_name = os.path.dirname(my_file) + # new_folder = os.path.basename(my_file).split('.')[0] + # dir_name = os.path.join(dir_name, new_folder) + print("extract "+my_file+" to "+dir_name) + zObject.extractall(path=dir_name) + return dir_name + +def download_stream(link:str,id:str,attribute:str,file_name:str, + timeout:int = 10,skipExisting:bool = False) -> str: + directory = _get_textures_dir() + location = os.path.join(id, attribute) + directory = os.path.join(directory, location) + file_name = os.path.join(directory, file_name) + print("url = ",link, "directory", directory, "filename", file_name) + if not os.path.exists(directory): + print("make dir "+directory) + os.makedirs(directory) # if not skipExisting and os.path.exists(file_name): # print("EXIST "+file_name) # return file_name @@ -344,25 +313,27 @@ def download_stream(link, timeout, skipExisting = False): prog = int(100 * dl / total_length) # dl_threads[0].progress = prog - # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) + print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) # dl_threads.pop(0) + return file_name except Exception as e: print('Error #2 while downloading', link, ':', e) - + return None def download_previews(overwrite_existing:bool, material_items): directory = _get_preview_dir() if not os.path.exists(directory): os.mkdir(directory) print("download to ",directory) # print("asset",assets_lib) - + thread_search = threads[THREAD_SEARCHING] + progress_initial = thread_search.progress progress_max = 90 span = progress_max - progress_initial item_count = len(last_search) for index,ast in enumerate(last_search): - if thread_search.stop: + if thread_search.cancel: break link = last_search[ast]["preview"] file_name = bpy.path.basename(link) @@ -422,7 +393,7 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): file_name = os.path.join(dir_name, "lib.json") file_name_ori = os.path.join(dir_name, "lib-ori.json") - response = requests.get(base_link, params=params) + response = requests.get(base_link, params=params, verify=False) if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) return None @@ -457,6 +428,13 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): file_ori.write(json.dumps({"foundAssets":assets})) file_ori.close() +def _get_textures_dir() -> str: + file_path = _get_lib_dir() + retval = os.path.join(file_path, "textures") + os.sep + if not os.path.exists(retval): + os.mkdir(retval) + return retval + def _get_preview_dir() -> str: file_path = _get_lib_dir() retval = os.path.join(file_path, "previews") + os.sep @@ -472,7 +450,7 @@ def _get_lib_dir() -> str: return retval classes = [TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TEXLIB_UL_Material - ,TexLibMaterialNewItem, TexLibMaterialDelItem, TexLibCancelSearch] + ,TexLibCancelSearch] def register(): for cl in classes: From 61ad86384416dadf6ea044e43ec6171cae557ba1 Mon Sep 17 00:00:00 2001 From: ahmad rifai Date: Mon, 11 Sep 2023 17:37:00 +0700 Subject: [PATCH 007/283] add downloadable textures with threading --- TexLib.py | 221 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 152 insertions(+), 69 deletions(-) diff --git a/TexLib.py b/TexLib.py index 2ddd8e1d..1af016a9 100644 --- a/TexLib.py +++ b/TexLib.py @@ -36,7 +36,8 @@ def update_input_search(self, context): thread_search.start() - self.progress = 0 + self.searching_download.progress = 0 + self.searching_download.alive = True def searching_material(keyword:str, context:Context): scene = context.scene @@ -86,18 +87,27 @@ def load_per_material(file_name, material_item): previews_collection.preview_items[my_id] = (my_id, item, "", loaded.icon_id, len(previews_collection.preview_items)) material_item.thumb = loaded.icon_id -class TexLibProps(bpy.types.PropertyGroup): - page: IntProperty(name="page", default= 0) - input_search:StringProperty(name="Search", update=update_input_search) - input_last:StringProperty() +class DownloadThread(PropertyGroup): + asset_id : StringProperty() + asset_attribute: StringProperty() + file_path : StringProperty() + alive : BoolProperty(default = False) progress : IntProperty( - default = -1, - min = -1, + default = 0, + min = 0, max = 100, description = 'Progress of the download', subtype = 'PERCENTAGE' ) +class TexLibProps(bpy.types.PropertyGroup): + page: IntProperty(name="page", default= 0) + input_search:StringProperty(name="Search", update=update_input_search) + input_last:StringProperty() + downloads:CollectionProperty(type=DownloadThread) + searching_download:PointerProperty(type=DownloadThread) + selected_download_item:IntProperty(default=0) + class TexLibDownload(Operator): bl_label = "texlib Download" @@ -107,31 +117,43 @@ class TexLibDownload(Operator): id:bpy.props.StringProperty() def execute(self, context): - # scene = context.scene - # sel_index = scene.material_index - # my_list = scene.material_items - # if sel_index < len(my_list): - - # scene = context.scene - # amb_br = scene.ambient_browser - # content = amb_br.input_search - - # thread = threading.Thread(target=download_stream, args=("https://acg-download.struffelproductions.com/file/ambientCG-Web/download/Ground068_c5MREyAu/Ground068_1K-JPG.zip", 30)) - # thread.progress = 0.0 - # dl_threads.append(thread) - - # thread.start() + lib = assets_lib[self.id] link = lib["downloads"][self.attribute]["link"] file_name = lib["downloads"][self.attribute]["fileName"] print("setar =",self.attribute, "selected = "+self.id, "lib =", link) - file = download_stream(link, self.id, self.attribute, file_name) - if file != None: - extract_file(file) - os.remove(file) - else: - print("not found",file) + # file = download_stream(link, self.id, self.attribute, file_name) + # if file != None: + # extract_file(file) + # os.remove(file) + # else: + # print("not found",file) + + directory = _get_textures_dir() + location = os.path.join(self.id, self.attribute) + directory = os.path.join(directory, location) + file_name = os.path.join(directory, file_name) + + if not os.path.exists(directory): + print("make dir "+directory) + os.makedirs(directory) + thread_id = _get_thread_id(self.id, self.attribute) + new_thread = threading.Thread(target=download_stream, args=(link,file_name,thread_id,)) + new_thread.progress = 0 + new_thread.cancel = False + threads[_get_thread_id(self.id, self.attribute)] = new_thread + + new_thread.start() + + amb_br = context.scene.ambient_browser + new_dwn = amb_br.downloads.add() + new_dwn.asset_id = self.id + new_dwn.file_path = file_name + new_dwn.asset_attribute = self.attribute + new_dwn.alive = True + new_dwn.progress = 0 + return {'FINISHED'} class TexLibBrowser(Panel): @@ -150,14 +172,16 @@ def draw(self, context): my_list = scene.material_items layout.prop(amb_br, "input_search") - - if amb_br.progress >= 0: - prog = amb_br.progress - if prog < 10: - layout.label(text="Searching..."+str(prog)+"%") - else: - layout.label(text="Retrieving thumbnails..."+str(prog)+"%") + searching_dwn = amb_br.searching_download + + if searching_dwn.alive: layout.operator("texlib.cancel_search") + prog = searching_dwn.progress + if prog >= 0: + if prog < 10: + layout.label(text="Searching..."+str(prog)+"%") + else: + layout.label(text="Retrieving thumbnails..."+str(prog)+"%") # layout.operator("texlib.refresh_previews") # layout.operator("texlib.rem_material") # layout.prop(amb_br, "progress", slider=True, text="Download") @@ -181,26 +205,34 @@ def draw(self, context): op = layout.operator("texlib.download", text=d) op.attribute = d op.id = sel_mat.name + layout.template_list("TEXLIB_UL_Downloads", "download_list", amb_br, "downloads", amb_br, "selected_download_item") + class MaterialItem(PropertyGroup): name: StringProperty( name="Name", description="Material name", default="Untitled") thumb: IntProperty( name="thumbnail", description="", default=0) - -class TEXLIB_UL_Material(UIList): +class TEXLIB_UL_Downloads(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): """Demo UIList.""" -# index = scene.material_index - scene = context.scene - my_list = scene.material_items - - # print("tipe ",self.layout_type) row = layout.row(align=True) # row.alignment = "CENTER" # Make sure your code supports all 3 layout types + if self.layout_type in {'DEFAULT', 'COMPACT'}: + row.label(text=item.asset_id+" | "+item.asset_attribute+"="+str(item.progress)) + # layout.prop(amb_br, "progress", slider=True, text="Download") + + + +class TEXLIB_UL_Material(UIList): + + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + """Demo UIList.""" + + row = layout.row(align=True) if self.layout_type in {'DEFAULT', 'COMPACT'}: row.template_icon(icon_value = item.thumb, scale = 1.0) row.label(text=item.name) @@ -215,8 +247,12 @@ class TexLibCancelSearch(Operator): def execute(self, context): - thread_search = threading[THREAD_SEARCHING] + thread_search = threads[THREAD_SEARCHING] thread_search.cancel = True + ambr = context.scene.ambient_browser + + searching_dwn = ambr.searching_download + searching_dwn.alive = False return{'FINISHED'} @@ -239,14 +275,14 @@ def load_previews(): def monitor_downloads(): interval = 0.1 - - try: - thread_search = threads[THREAD_SEARCHING] - except: - return 1 + - if not thread_search.is_alive() and thread_search.progress < 0: - return 1 + searching = False + if THREAD_SEARCHING in threads: + thread_search = threads[THREAD_SEARCHING] + searching = True + # else: + # return 1 if not hasattr(bpy, 'context'): return 2 @@ -256,13 +292,47 @@ def monitor_downloads(): if not area.type == 'VIEW_3D': continue area.tag_redraw() - - if thread_search.progress == 100: - thread_search.progress = -1 + # if thread_search.progress == 100: + # thread_search.progress = -1 amb = scn.ambient_browser - amb.progress = thread_search.progress + downloads = amb.downloads + + if len(downloads) == 0 and not searching: + # print("KOSONG") + return 1 + + if searching: + prog_search = thread_search.progress + amb.searching_download.progress = prog_search + if thread_search.progress >= 100: + amb.searching_download.alive = False + + if not thread_search.is_alive(): + del threads[THREAD_SEARCHING] + + for index, dwn in enumerate(downloads): + + thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) + thread = _get_thread(thread_id) + if thread == None: + extract_file(dwn.file_path) + delete_zip(dwn.file_path) + downloads.remove(index) + # extract + continue + + prog = thread.progress + + dwn.progress = prog + if thread.progress >= 100: + dwn.alive = False + if not thread.is_alive(): + del threads[thread_id] + + + return interval def extract_file(my_file): @@ -276,19 +346,25 @@ def extract_file(my_file): zObject.extractall(path=dir_name) return dir_name -def download_stream(link:str,id:str,attribute:str,file_name:str, - timeout:int = 10,skipExisting:bool = False) -> str: - directory = _get_textures_dir() - location = os.path.join(id, attribute) - directory = os.path.join(directory, location) - file_name = os.path.join(directory, file_name) - print("url = ",link, "directory", directory, "filename", file_name) - if not os.path.exists(directory): - print("make dir "+directory) - os.makedirs(directory) +# Delete the zip file +def delete_zip(file_path): + if not os.path.exists(file_path): + #print(file_path + " Zip file doesn't exists") + return + try: + os.remove(file_path) + except Exception as e: + print('Error while deleting zip file:', e) + +def download_stream(link:str, file_name:str, thread_id:str, + timeout:int = 10,skipExisting:bool = False): + print("url = ",link, "filename", file_name) # if not skipExisting and os.path.exists(file_name): # print("EXIST "+file_name) # return file_name + + thread = _get_thread(thread_id) + prog = 0 with open(file_name, "wb") as f: try: @@ -312,13 +388,12 @@ def download_stream(link:str,id:str,attribute:str,file_name:str, prog = int(100 * dl / total_length) # dl_threads[0].progress = prog - - print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) + thread.progress = prog + # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) # dl_threads.pop(0) - return file_name except Exception as e: print('Error #2 while downloading', link, ':', e) - return None + def download_previews(overwrite_existing:bool, material_items): directory = _get_preview_dir() if not os.path.exists(directory): @@ -449,8 +524,16 @@ def _get_lib_dir() -> str: os.mkdir(retval) return retval -classes = [TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TEXLIB_UL_Material - ,TexLibCancelSearch] +def _get_thread_id(asset_id:str, asset_attribute:str): + return asset_id+"_"+asset_attribute + +def _get_thread(id:str): + if id in threads: + return threads[id] + return None + +classes = [DownloadThread, TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TEXLIB_UL_Material + ,TexLibCancelSearch, TEXLIB_UL_Downloads] def register(): for cl in classes: From fa3c698fb74a06e79f450b4627c6c515b9184e63 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 13 Sep 2023 17:00:09 +0700 Subject: [PATCH 008/283] show file size progress download --- TexLib.py | 164 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 107 insertions(+), 57 deletions(-) diff --git a/TexLib.py b/TexLib.py index 1af016a9..0734a78a 100644 --- a/TexLib.py +++ b/TexLib.py @@ -92,6 +92,7 @@ class DownloadThread(PropertyGroup): asset_attribute: StringProperty() file_path : StringProperty() alive : BoolProperty(default = False) + file_size:IntProperty() progress : IntProperty( default = 0, min = 0, @@ -110,34 +111,28 @@ class TexLibProps(bpy.types.PropertyGroup): class TexLibDownload(Operator): - bl_label = "texlib Download" + bl_label = "Download" bl_idname = "texlib.download" - - attribute:bpy.props.StringProperty() - id:bpy.props.StringProperty() + + attribute:StringProperty() + id:StringProperty() + file_size:IntProperty + def execute(self, context): lib = assets_lib[self.id] - link = lib["downloads"][self.attribute]["link"] - file_name = lib["downloads"][self.attribute]["fileName"] - print("setar =",self.attribute, "selected = "+self.id, "lib =", link) + attr_dwn = lib["downloads"][self.attribute] + link = attr_dwn["link"] + directory = attr_dwn["location"] + file_name = os.path.join(directory, attr_dwn["fileName"]) - # file = download_stream(link, self.id, self.attribute, file_name) - # if file != None: - # extract_file(file) - # os.remove(file) - # else: - # print("not found",file) - - directory = _get_textures_dir() - location = os.path.join(self.id, self.attribute) - directory = os.path.join(directory, location) - file_name = os.path.join(directory, file_name) + print("setar =",self.attribute, "selected = "+self.id, "lib =", link) if not os.path.exists(directory): - print("make dir "+directory) + # print("make dir "+directory) os.makedirs(directory) + thread_id = _get_thread_id(self.id, self.attribute) new_thread = threading.Thread(target=download_stream, args=(link,file_name,thread_id,)) new_thread.progress = 0 @@ -147,11 +142,12 @@ def execute(self, context): new_thread.start() amb_br = context.scene.ambient_browser - new_dwn = amb_br.downloads.add() + new_dwn:DownloadThread = amb_br.downloads.add() new_dwn.asset_id = self.id new_dwn.file_path = file_name new_dwn.asset_attribute = self.attribute new_dwn.alive = True + new_dwn.file_size = attr_dwn["size"] new_dwn.progress = 0 return {'FINISHED'} @@ -167,7 +163,7 @@ class TexLibBrowser(Panel): def draw(self, context): layout = self.layout scene = context.scene - amb_br = scene.ambient_browser + amb_br:TexLibProps = scene.ambient_browser sel_index = scene.material_index my_list = scene.material_items @@ -179,7 +175,7 @@ def draw(self, context): prog = searching_dwn.progress if prog >= 0: if prog < 10: - layout.label(text="Searching..."+str(prog)+"%") + layout.label(text="Searching...") else: layout.label(text="Retrieving thumbnails..."+str(prog)+"%") # layout.operator("texlib.refresh_previews") @@ -189,23 +185,60 @@ def draw(self, context): # layout.label(text="download "+str(amb_br.persen)) if len(my_list) > 0: + layout.separator() + layout.label(text="Textures:") layout.template_list("TEXLIB_UL_Material", "material_list", scene, "material_items", scene, "material_index") - # print("index ", sel_index, "my list", len(my_list)) if sel_index < len(my_list): sel_mat = my_list[sel_index] - + mat_id:str = sel_mat.name layout.separator() + layout.label(text="Preview:") selected_mat = layout.column(align=True) selected_mat.alignment = "CENTER" selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) - selected_mat.label(text=sel_mat.name) - downloads = assets_lib[sel_mat.name]["downloads"] + selected_mat.label(text=mat_id) + downloads = assets_lib[mat_id]["downloads"] + layout.separator() + layout.label(text="Attributes:") for d in downloads: - op = layout.operator("texlib.download", text=d) - op.attribute = d - op.id = sel_mat.name - layout.template_list("TEXLIB_UL_Downloads", "download_list", amb_br, "downloads", amb_br, "selected_download_item") + dwn = downloads[d] + row = layout.row() + ukuran = round(dwn["size"] / 1000000,2) + + + + check_exist:bool = False + lokasi = dwn["location"] + if os.path.exists(lokasi): + files = os.listdir(lokasi) + for f in files: + if mat_id in f: + check_exist = True + break + else: + check_exist = False + + row.label(text=d) + row.label(text=str(ukuran)+ "MB") + + thread_id = _get_thread_id(mat_id, d) + dwn_thread = _get_thread(thread_id) + + if dwn_thread != None: + row.label(text=str(dwn_thread.progress)+"%") + else: + if check_exist: + row.label(text="Downloaded") + else: + op:TexLibDownload = row.operator("texlib.download", icon="IMPORT", text="") + op.attribute = d + op.id = sel_mat.name + + if len(amb_br.downloads): + layout.separator() + layout.label(text="Downloads:") + layout.template_list("TEXLIB_UL_Downloads", "download_list", amb_br, "downloads", amb_br, "selected_download_item") class MaterialItem(PropertyGroup): @@ -266,7 +299,7 @@ def load_previews(): for index, item in enumerate(files): file = dir_name + item my_id = item.split(".")[0] - print(">>item",item,"file",file) + # print(">>item",item,"file",file) loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) @@ -311,45 +344,50 @@ def monitor_downloads(): if not thread_search.is_alive(): del threads[THREAD_SEARCHING] + # print("downloadku", len(downloads)) + # for index, dwn in enumerate(downloads): + # print("cek aja",dwn.asset_id," | ",dwn.asset_attribute) + + to_remove = [] for index, dwn in enumerate(downloads): thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) thread = _get_thread(thread_id) if thread == None: + print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) extract_file(dwn.file_path) delete_zip(dwn.file_path) - downloads.remove(index) - # extract - continue - - prog = thread.progress + to_remove.append(index) - dwn.progress = prog - if thread.progress >= 100: - dwn.alive = False + else: + prog = thread.progress - if not thread.is_alive(): - del threads[thread_id] + dwn.progress = prog + if thread.progress >= 100: + dwn.alive = False + + if not thread.is_alive(): + del threads[thread_id] + + for i in to_remove: + downloads.remove(i) - return interval def extract_file(my_file): - with ZipFile(my_file, 'r') as zObject: + dir_name = os.path.dirname(my_file) + # new_folder = os.path.basename(my_file).split('.')[0] + # dir_name = os.path.join(dir_name, new_folder) + print("extract "+my_file+" to "+dir_name) - dir_name = os.path.dirname(my_file) - # new_folder = os.path.basename(my_file).split('.')[0] - # dir_name = os.path.join(dir_name, new_folder) - - print("extract "+my_file+" to "+dir_name) + with ZipFile(my_file, 'r') as zObject: zObject.extractall(path=dir_name) return dir_name # Delete the zip file def delete_zip(file_path): if not os.path.exists(file_path): - #print(file_path + " Zip file doesn't exists") return try: os.remove(file_path) @@ -358,10 +396,7 @@ def delete_zip(file_path): def download_stream(link:str, file_name:str, thread_id:str, timeout:int = 10,skipExisting:bool = False): - print("url = ",link, "filename", file_name) - # if not skipExisting and os.path.exists(file_name): - # print("EXIST "+file_name) - # return file_name + # print("url = ",link, "filename", file_name) thread = _get_thread(thread_id) @@ -478,21 +513,35 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): # assets_lib = {} last_search.clear() + + tex_directory = _get_textures_dir() + + for asst in assets: asset_obj = {} - asset_obj["id"] = asst["assetId"] + asset_id = asst["assetId"] + asset_obj["id"] = asset_id asset_obj["preview"] = asst["previewImage"]["256-PNG"] zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] + + + + downloads = {} for k in zip_assets: + location = os.path.join(asset_id, k["attribute"]) + directory = os.path.join(tex_directory, location) + downloads[k["attribute"]] = { "link" : k["downloadLink"], - "fileName" : k["fileName"] + "fileName" : k["fileName"], + "location" : directory+os.sep, + "size" : k["size"] } asset_obj["downloads"] = downloads - assets_lib[asst["assetId"]] = asset_obj - last_search[asst["assetId"]] = asset_obj + assets_lib[asset_id] = asset_obj + last_search[asset_id] = asset_obj file.write(json.dumps(assets_lib)) file.close() @@ -539,6 +588,7 @@ def register(): for cl in classes: bpy.utils.register_class(cl) + Scene.material_items = CollectionProperty(type= MaterialItem) Scene.material_index = IntProperty(default=0, name="Material index") Scene.material_attr_index = IntProperty(default=0, name="Attribute index") From 92532f6fcf8a45e5fc750546dd86eb3375e35cd1 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 14 Sep 2023 15:46:14 +0700 Subject: [PATCH 009/283] checking on blender 2.80 redraw only when active --- TexLib.py | 107 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 46 deletions(-) diff --git a/TexLib.py b/TexLib.py index 0734a78a..5f001dc1 100644 --- a/TexLib.py +++ b/TexLib.py @@ -101,7 +101,7 @@ class DownloadThread(PropertyGroup): subtype = 'PERCENTAGE' ) -class TexLibProps(bpy.types.PropertyGroup): +class TexLibProps(PropertyGroup): page: IntProperty(name="page", default= 0) input_search:StringProperty(name="Search", update=update_input_search) input_last:StringProperty() @@ -109,6 +109,17 @@ class TexLibProps(bpy.types.PropertyGroup): searching_download:PointerProperty(type=DownloadThread) selected_download_item:IntProperty(default=0) +class TexLibRemove(Operator): + bl_label = "Remove" + bl_idname = "texlib.remove" + attribute:StringProperty() + id:StringProperty() + +class TexLibCancelDownload(Operator): + bl_label = "Remove" + bl_idname = "texlib.cancel" + attribute:StringProperty() + id:StringProperty() class TexLibDownload(Operator): bl_label = "Download" @@ -230,10 +241,13 @@ def draw(self, context): else: if check_exist: row.label(text="Downloaded") - else: - op:TexLibDownload = row.operator("texlib.download", icon="IMPORT", text="") + op:TexLibRemove = row.operator("texlib.remove", icon="TRASH", text="") op.attribute = d op.id = sel_mat.name + + op:TexLibDownload = row.operator("texlib.download", icon="IMPORT", text="") + op.attribute = d + op.id = sel_mat.name if len(amb_br.downloads): layout.separator() @@ -306,34 +320,23 @@ def load_previews(): previews_collection.preview_items.update(preview_items) def monitor_downloads(): - - interval = 0.1 - - + searching = False if THREAD_SEARCHING in threads: thread_search = threads[THREAD_SEARCHING] searching = True - # else: - # return 1 - + if not hasattr(bpy, 'context'): + print("no context") return 2 - scn = bpy.context.scene - for area in bpy.context.screen.areas: - if not area.type == 'VIEW_3D': - continue - area.tag_redraw() - # if thread_search.progress == 100: - # thread_search.progress = -1 - + scn = bpy.context.scene amb = scn.ambient_browser downloads = amb.downloads if len(downloads) == 0 and not searching: # print("KOSONG") - return 1 + return 2 if searching: prog_search = thread_search.progress @@ -348,32 +351,44 @@ def monitor_downloads(): # for index, dwn in enumerate(downloads): # print("cek aja",dwn.asset_id," | ",dwn.asset_attribute) - to_remove = [] - for index, dwn in enumerate(downloads): - - thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) - thread = _get_thread(thread_id) - if thread == None: - print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) - extract_file(dwn.file_path) - delete_zip(dwn.file_path) - to_remove.append(index) - - else: - prog = thread.progress - - dwn.progress = prog - if thread.progress >= 100: - dwn.alive = False - - if not thread.is_alive(): - del threads[thread_id] - - for i in to_remove: - downloads.remove(i) - - - return interval + if len(downloads): + to_remove = [] + for index, dwn in enumerate(downloads): + + thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) + thread = _get_thread(thread_id) + if thread == None: + print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) + extract_file(dwn.file_path) + delete_zip(dwn.file_path) + to_remove.append(index) + + else: + prog = thread.progress + + dwn.progress = prog + if thread.progress >= 100: + dwn.alive = False + + if not thread.is_alive(): + del threads[thread_id] + + for i in to_remove: + downloads.remove(i) + + for window in bpy.context.window_manager.windows: + # print("==============windoss ", window) + for area in window.screen.areas: + if area.type == 'VIEW_3D': + for reg in area.regions: + # print("region",reg.type, "width", reg.width) + open_tab = reg.width > 1 + if reg.type == "UI" and open_tab: + print("redraw area", area.type, "reg", reg.type) + reg.tag_redraw() + return 0.1 + + return 1.0 def extract_file(my_file): dir_name = os.path.dirname(my_file) @@ -581,7 +596,7 @@ def _get_thread(id:str): return threads[id] return None -classes = [DownloadThread, TexLibProps, TexLibBrowser, TexLibDownload, MaterialItem, TEXLIB_UL_Material +classes = [DownloadThread, TexLibProps, TexLibBrowser, TexLibDownload, TexLibRemove, TexLibCancelDownload, MaterialItem, TEXLIB_UL_Material ,TexLibCancelSearch, TEXLIB_UL_Downloads] def register(): From da1175538ff505ef38bad296c26397c5e6f1802a Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 15 Sep 2023 14:36:02 +0700 Subject: [PATCH 010/283] change downloads layout --- TexLib.py | 87 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 37 deletions(-) diff --git a/TexLib.py b/TexLib.py index 5f001dc1..d2b68bf6 100644 --- a/TexLib.py +++ b/TexLib.py @@ -69,7 +69,7 @@ def searching_material(keyword:str, context:Context): def load_material_items(material_items): material_items.clear() for i in last_search: - new_item = material_items.add() + new_item:MaterialItem = material_items.add() item_id = last_search[i]["id"] new_item.name = item_id if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: @@ -77,7 +77,7 @@ def load_material_items(material_items): else: new_item.thumb = lib.custom_icons["input"].icon_id -def load_per_material(file_name, material_item): +def load_per_material(file_name:str, material_item): item = os.path.basename(file_name) my_id = item.split(".")[0] @@ -109,26 +109,38 @@ class TexLibProps(PropertyGroup): searching_download:PointerProperty(type=DownloadThread) selected_download_item:IntProperty(default=0) -class TexLibRemove(Operator): - bl_label = "Remove" - bl_idname = "texlib.remove" +class TexLibAddToUcupaint(Operator): + bl_label = "" + bl_idname = "texlib.add_to_ucupaint" attribute:StringProperty() id:StringProperty() + def execute(self, context): + print("tambah tambah") + + return {'FINISHED'} + class TexLibCancelDownload(Operator): - bl_label = "Remove" + bl_label = "" bl_idname = "texlib.cancel" attribute:StringProperty() id:StringProperty() + def execute(self, context): + print("cancel cancel") + + return {'FINISHED'} + + class TexLibDownload(Operator): - bl_label = "Download" + bl_label = "" bl_idname = "texlib.download" attribute:StringProperty() id:StringProperty() file_size:IntProperty + file_exist:BoolProperty(default=False) def execute(self, context): @@ -178,33 +190,33 @@ def draw(self, context): sel_index = scene.material_index my_list = scene.material_items + layout.prop(amb_br, "input_search") searching_dwn = amb_br.searching_download if searching_dwn.alive: - layout.operator("texlib.cancel_search") prog = searching_dwn.progress + if prog >= 0: + row_search = layout.row() + if prog < 10: - layout.label(text="Searching...") + row_search.label(text="Searching...") else: - layout.label(text="Retrieving thumbnails..."+str(prog)+"%") - # layout.operator("texlib.refresh_previews") - # layout.operator("texlib.rem_material") - # layout.prop(amb_br, "progress", slider=True, text="Download") - # layout.template_icon_view(amb_br, "shaders_previews", show_labels=True,scale = 7, scale_popup = 5) - # layout.label(text="download "+str(amb_br.persen)) + row_search.label(text="Retrieving thumbnails..."+str(prog)+"%") + row_search.operator("texlib.cancel_search", icon="CANCEL") if len(my_list) > 0: layout.separator() layout.label(text="Textures:") layout.template_list("TEXLIB_UL_Material", "material_list", scene, "material_items", scene, "material_index") if sel_index < len(my_list): - sel_mat = my_list[sel_index] + sel_mat:MaterialItem = my_list[sel_index] mat_id:str = sel_mat.name layout.separator() layout.label(text="Preview:") - selected_mat = layout.column(align=True) + prev_box = layout.box() + selected_mat = prev_box.column(align=True) selected_mat.alignment = "CENTER" selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) selected_mat.label(text=mat_id) @@ -214,10 +226,10 @@ def draw(self, context): layout.label(text="Attributes:") for d in downloads: dwn = downloads[d] - row = layout.row() - ukuran = round(dwn["size"] / 1000000,2) + ui_attr = layout.split(factor=0.7) + # row.alignment = "LEFT" - + ukuran = round(dwn["size"] / 1000000,2) check_exist:bool = False lokasi = dwn["location"] @@ -229,25 +241,32 @@ def draw(self, context): break else: check_exist = False + + row = ui_attr.row() - row.label(text=d) + row.label(text=d, ) + # rr.label(text=d, ) row.label(text=str(ukuran)+ "MB") thread_id = _get_thread_id(mat_id, d) dwn_thread = _get_thread(thread_id) + btn_row = ui_attr.row() + btn_row.alignment = "RIGHT" + if dwn_thread != None: - row.label(text=str(dwn_thread.progress)+"%") + btn_row.label(text=str(dwn_thread.progress)+"%") + btn_row.operator("texlib.cancel", icon="X") else: if check_exist: - row.label(text="Downloaded") - op:TexLibRemove = row.operator("texlib.remove", icon="TRASH", text="") + op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") op.attribute = d op.id = sel_mat.name - op:TexLibDownload = row.operator("texlib.download", icon="IMPORT", text="") + op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") op.attribute = d op.id = sel_mat.name + op.file_exist = check_exist if len(amb_br.downloads): layout.separator() @@ -263,15 +282,10 @@ class TEXLIB_UL_Downloads(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): """Demo UIList.""" - - # print("tipe ",self.layout_type) - row = layout.row(align=True) - # row.alignment = "CENTER" - # Make sure your code supports all 3 layout types if self.layout_type in {'DEFAULT', 'COMPACT'}: - row.label(text=item.asset_id+" | "+item.asset_attribute+"="+str(item.progress)) - # layout.prop(amb_br, "progress", slider=True, text="Download") - + row = layout.row(align=True) + row.prop(item, "progress", slider=True, text=item.asset_id+" | "+item.asset_attribute) + row.operator("texlib.cancel", icon="X") class TEXLIB_UL_Material(UIList): @@ -290,7 +304,7 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn class TexLibCancelSearch(Operator): bl_idname = "texlib.cancel_search" - bl_label = "Cancel" + bl_label = "" def execute(self, context): @@ -384,7 +398,7 @@ def monitor_downloads(): # print("region",reg.type, "width", reg.width) open_tab = reg.width > 1 if reg.type == "UI" and open_tab: - print("redraw area", area.type, "reg", reg.type) + # print("redraw area", area.type, "reg", reg.type) reg.tag_redraw() return 0.1 @@ -465,7 +479,6 @@ def download_previews(overwrite_existing:bool, material_items): file_name = os.path.join(directory, file_name) if not overwrite_existing and os.path.exists(file_name): - print("EXIST "+file_name) continue with open(file_name, "wb") as f: try: @@ -596,7 +609,7 @@ def _get_thread(id:str): return threads[id] return None -classes = [DownloadThread, TexLibProps, TexLibBrowser, TexLibDownload, TexLibRemove, TexLibCancelDownload, MaterialItem, TEXLIB_UL_Material +classes = [DownloadThread, TexLibProps, TexLibBrowser, TexLibDownload, TexLibAddToUcupaint, TexLibCancelDownload, MaterialItem, TEXLIB_UL_Material ,TexLibCancelSearch, TEXLIB_UL_Downloads] def register(): From d1467fa3715d2f0b7e842d5deea92a936472862c Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 15 Sep 2023 16:56:56 +0700 Subject: [PATCH 011/283] refactor variables first attempt to integrate to ucupaint --- TexLib.py | 380 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 287 insertions(+), 93 deletions(-) diff --git a/TexLib.py b/TexLib.py index d2b68bf6..a8e79541 100644 --- a/TexLib.py +++ b/TexLib.py @@ -2,6 +2,9 @@ from .common import * from .lib import * from zipfile import ZipFile +from bpy_extras.image_utils import load_image + +from . import lib, Layer import bpy, threading, os, requests, json from bpy.props import * @@ -15,6 +18,25 @@ last_search = {} threads = {} # progress:int, + +class MaterialItem(PropertyGroup): + name: StringProperty( name="Name", description="Material name", default="Untitled") + thumb: IntProperty( name="thumbnail", description="", default=0) + +class DownloadThread(PropertyGroup): + asset_id : StringProperty() + asset_attribute: StringProperty() + file_path : StringProperty() + alive : BoolProperty(default = False) + file_size:IntProperty() + progress : IntProperty( + default = 0, + min = 0, + max = 100, + description = 'Progress of the download', + subtype = 'PERCENTAGE' + ) + def update_input_search(self, context): if self.input_last == self.input_search: @@ -23,7 +45,8 @@ def update_input_search(self, context): self.input_last = self.input_search - context.scene.material_items.clear() + txlib = context.scene.texlib + txlib.material_items.clear() if self.input_search == '': last_search.clear() @@ -38,89 +61,221 @@ def update_input_search(self, context): self.searching_download.progress = 0 self.searching_download.alive = True - -def searching_material(keyword:str, context:Context): - scene = context.scene - - thread_search = threads[THREAD_SEARCHING] - - retrieve_assets_info(keyword) - thread_search.progress = 10 - load_material_items(scene.material_items) - - download_previews(False, scene.material_items) - thread_search.progress = 90 - load_previews() - thread_search.progress = 95 - - - load_material_items(scene.material_items) - # scene.material_items.clear() - # for i in last_search: - # new_item = scene.material_items.add() - # item_id = last_search[i]["id"] - # new_item.name = item_id - # # new_item.thumb = lib.custom_icons["input"].icon_id # previews_collection.preview_items[item_id][3] - # new_item.thumb = previews_collection.preview_items[item_id][3] - thread_search.progress = 100 - - print("finish search") - -def load_material_items(material_items): - material_items.clear() - for i in last_search: - new_item:MaterialItem = material_items.add() - item_id = last_search[i]["id"] - new_item.name = item_id - if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: - new_item.thumb = previews_collection.preview_items[item_id][3] - else: - new_item.thumb = lib.custom_icons["input"].icon_id - -def load_per_material(file_name:str, material_item): - item = os.path.basename(file_name) - - my_id = item.split(".")[0] - # print(">>item",item,"file",file_name, "my_id", my_id) - loaded = previews_collection.load(item, file_name, 'IMAGE', force_reload=True) - - previews_collection.preview_items[my_id] = (my_id, item, "", loaded.icon_id, len(previews_collection.preview_items)) - material_item.thumb = loaded.icon_id - -class DownloadThread(PropertyGroup): - asset_id : StringProperty() - asset_attribute: StringProperty() - file_path : StringProperty() - alive : BoolProperty(default = False) - file_size:IntProperty() - progress : IntProperty( - default = 0, - min = 0, - max = 100, - description = 'Progress of the download', - subtype = 'PERCENTAGE' - ) class TexLibProps(PropertyGroup): page: IntProperty(name="page", default= 0) input_search:StringProperty(name="Search", update=update_input_search) input_last:StringProperty() + material_items:CollectionProperty(type= MaterialItem) + material_index:IntProperty(default=0, name="Material index") + downloads:CollectionProperty(type=DownloadThread) searching_download:PointerProperty(type=DownloadThread) selected_download_item:IntProperty(default=0) class TexLibAddToUcupaint(Operator): + """Open Multiple Textures to Layer Ucupaint""" + bl_label = "" bl_idname = "texlib.add_to_ucupaint" attribute:StringProperty() id:StringProperty() + @classmethod + def poll(cls, context): + return get_active_ypaint_node() + def execute(self, context): + T = time.time() + print("tambah tambah") + lib = assets_lib[self.id] + attr_dwn = lib["downloads"][self.attribute] + directory = attr_dwn["location"] + print("== location", directory) + import_list = os.listdir(directory) + + images = list(load_image(path, directory) for path in import_list) + + for fl in images: + print(">>",fl) + + wm = context.window_manager + node = get_active_ypaint_node() + yp = node.node_tree.yp + + + valid_channels = [] + valid_images = [] + valid_synonyms = [] + + synonym_libs = { + 'color' : ['albedo', 'diffuse', 'base color'], + 'ambient occlusion' : ['ao'], + 'roughness' : ['glossiness'], + 'normal' : ['displacement', 'height', 'bump'], # Prioritize displacement/bump before actual normal map + } + + + for ch in yp.channels: + + # One channel will only use one image + if ch in valid_channels: continue + + ch_name = ch.name.lower() + + # Get synonyms + synonyms = [] + if ch_name in synonym_libs: + synonyms = synonym_libs[ch_name] + synonyms.append(ch_name) + + # Normal channel can use two override images, this flag will check it + secondary_imgae_found = False + main_image_found = False + + for syname in synonyms: + + # Break if channel already used + #if ch in valid_channels: break + if main_image_found: break + + # Get channel name possible variation + initial = syname[0] + + if len(ch.name) > 3: + threes = syname[:3] + else: threes = '' + + no_whitespace = syname.replace(' ', '') + underscore = syname.replace(' ', '_') + + for image in images: + + # One image will only use one channel + if image in valid_images: continue + + # Get filename without extension + img_name = os.path.splitext(os.path.basename(image.filepath))[0].lower() + + if ( + ## Check image name suffix and match it with channel name + #(img_name.endswith(syname)) or + + #(img_name.endswith(no_whitespace)) or + + #(img_name.endswith(underscore)) or + + # Check if synonym is in image name + (syname in img_name) or + + (no_whitespace in img_name) or + + (underscore in img_name) or + + # Check image name suffix and match it with channel initial first threes + (threes != '' and img_name.endswith(('_' + threes, '.' + threes))) or + + # Check image name suffix and match it with channel initial name + # Avoid initial a because it's too common + (initial != 'a' and img_name.endswith(('_' + initial, '.' + initial))) + + ): + valid_images.append(image) + valid_channels.append(ch) + valid_synonyms.append(syname) + + if ch.type != 'NORMAL' or secondary_imgae_found: + main_image_found = True + break + + secondary_imgae_found = True + + for i, image in enumerate(valid_images): + #print(image.name, yp.channels[channel_ids[i]].name) + print(image.name, valid_channels[i].name, valid_synonyms[i]) + + if not valid_images: + # Remove loaded images + for image in images: + #if image not in exist_images: + bpy.data.images.remove(image) + self.report({'ERROR'}, "Images should have channel name as suffix!") + return {'CANCELLED'} + + # Check if found more than 1 images for normal channel + + if len([ch for ch in valid_channels if ch.type == 'NORMAL']) >= 2: + normal_map_type = 'BUMP_NORMAL_MAP' + elif any([ch for i, ch in enumerate(valid_channels) if ch.type == 'NORMAL' and valid_synonyms[i] == 'normal']): + normal_map_type = 'NORMAL_MAP' + else: normal_map_type = 'BUMP_MAP' + + #if valid_channels and valid_channels[0] + layer = None + for i, image in enumerate(valid_images): + root_ch = valid_channels[i] + syname = valid_synonyms[i] + + # Set image to linear + #if image.colorspace_settings.name != 'Non-Color': + # image.colorspace_settings.name = 'Non-Color' + + m = re.match(r'^yp\.channels\[(\d+)\].*', root_ch.path_from_id()) + ch_idx = int(m.group(1)) + + # Use image directly to layer for the first index + if i == 0: + yp.halt_update = True + #layer = add_new_layer(node.node_tree, image.name, 'IMAGE', int(ch_idx), 'MIX', + # 'MIX', normal_map_type, self.texcoord_type, self.uv_map, + # image, None, None, + # ) + + layer = Layer.add_new_layer(node.node_tree, image.name, 'IMAGE', + int(ch_idx), 'MIX', 'MIX', + normal_map_type, 'UV') + + yp.halt_update = False + #reconnect_yp_nodes(node.node_tree) + #rearrange_yp_nodes(node.node_tree) + tree = get_tree(layer) + else: + ch = layer.channels[ch_idx] + ch.enable = True + if root_ch.type == 'NORMAL' and syname == 'normal': + image_node, dirty = check_new_node(tree, ch, 'cache_1_image', 'ShaderNodeTexImage', '', True) + image_node.image = image + ch.override_1 = True + ch.override_1_type = 'IMAGE' + else: + image_node, dirty = check_new_node(tree, ch, 'cache_image', 'ShaderNodeTexImage', '', True) + image_node.image = image + ch.override = True + ch.override_type = 'IMAGE' + + ## Reconnect and rearrange nodes + reconnect_yp_nodes(node.node_tree) + rearrange_yp_nodes(node.node_tree) + + # Remove unused images + for image in images: + if image not in valid_images: # and image not in exist_images: + bpy.data.images.remove(image) + + # Update UI + wm.ypui.need_update = True + print('INFO: Image(s) is opened at', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') + wm.yptimer.time = str(time.time()) + + # Make sure to expand channels so it can be obvious which channels are active + wm.ypui.expand_channels = True return {'FINISHED'} class TexLibCancelDownload(Operator): + """Cancel downloading textures""" + bl_label = "" bl_idname = "texlib.cancel" attribute:StringProperty() @@ -133,6 +288,8 @@ def execute(self, context): class TexLibDownload(Operator): + """Download textures from source""" + bl_label = "" bl_idname = "texlib.download" @@ -164,8 +321,8 @@ def execute(self, context): new_thread.start() - amb_br = context.scene.ambient_browser - new_dwn:DownloadThread = amb_br.downloads.add() + texlib = context.scene.texlib + new_dwn:DownloadThread = texlib.downloads.add() new_dwn.asset_id = self.id new_dwn.file_path = file_name new_dwn.asset_attribute = self.attribute @@ -177,7 +334,7 @@ def execute(self, context): class TexLibBrowser(Panel): bl_label = "Texlib Browser" - bl_idname = "TEXLIB_PT_AmbientCG" + bl_idname = "TEXLIB_PT_Browser" bl_space_type = "VIEW_3D" bl_region_type = "UI" bl_category = "Ucupaint" @@ -186,13 +343,12 @@ class TexLibBrowser(Panel): def draw(self, context): layout = self.layout scene = context.scene - amb_br:TexLibProps = scene.ambient_browser - sel_index = scene.material_index - my_list = scene.material_items + texlib:TexLibProps = scene.texlib + sel_index = texlib.material_index - layout.prop(amb_br, "input_search") - searching_dwn = amb_br.searching_download + layout.prop(texlib, "input_search") + searching_dwn = texlib.searching_download if searching_dwn.alive: prog = searching_dwn.progress @@ -206,10 +362,12 @@ def draw(self, context): row_search.label(text="Retrieving thumbnails..."+str(prog)+"%") row_search.operator("texlib.cancel_search", icon="CANCEL") - if len(my_list) > 0: + if len(texlib.material_items): + my_list = texlib.material_items + layout.separator() layout.label(text="Textures:") - layout.template_list("TEXLIB_UL_Material", "material_list", scene, "material_items", scene, "material_index") + layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") if sel_index < len(my_list): sel_mat:MaterialItem = my_list[sel_index] mat_id:str = sel_mat.name @@ -268,15 +426,13 @@ def draw(self, context): op.id = sel_mat.name op.file_exist = check_exist - if len(amb_br.downloads): + if len(texlib.downloads): layout.separator() layout.label(text="Downloads:") - layout.template_list("TEXLIB_UL_Downloads", "download_list", amb_br, "downloads", amb_br, "selected_download_item") + layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") + -class MaterialItem(PropertyGroup): - name: StringProperty( name="Name", description="Material name", default="Untitled") - thumb: IntProperty( name="thumbnail", description="", default=0) class TEXLIB_UL_Downloads(UIList): @@ -310,13 +466,56 @@ class TexLibCancelSearch(Operator): def execute(self, context): thread_search = threads[THREAD_SEARCHING] thread_search.cancel = True - ambr = context.scene.ambient_browser + texlib = context.scene.texlib - searching_dwn = ambr.searching_download + searching_dwn = texlib.searching_download searching_dwn.alive = False return{'FINISHED'} + +def load_material_items(material_items): + material_items.clear() + for i in last_search: + new_item:MaterialItem = material_items.add() + item_id = last_search[i]["id"] + new_item.name = item_id + if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: + new_item.thumb = previews_collection.preview_items[item_id][3] + else: + new_item.thumb = lib.custom_icons["input"].icon_id + +def load_per_material(file_name:str, material_item): + item = os.path.basename(file_name) + + my_id = item.split(".")[0] + # print(">>item",item,"file",file_name, "my_id", my_id) + loaded = previews_collection.load(item, file_name, 'IMAGE', force_reload=True) + + previews_collection.preview_items[my_id] = (my_id, item, "", loaded.icon_id, len(previews_collection.preview_items)) + material_item.thumb = loaded.icon_id + + +def searching_material(keyword:str, context:Context): + scene = context.scene + txlib = scene.texlib + + thread_search = threads[THREAD_SEARCHING] + + retrieve_assets_info(keyword) + thread_search.progress = 10 + load_material_items(txlib.material_items) + + download_previews(False, txlib.material_items) + thread_search.progress = 90 + load_previews() + thread_search.progress = 95 + + + load_material_items(txlib.material_items) + thread_search.progress = 100 + + def load_previews(): # print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") dir_name = _get_preview_dir() @@ -345,8 +544,8 @@ def monitor_downloads(): return 2 scn = bpy.context.scene - amb = scn.ambient_browser - downloads = amb.downloads + txlb = scn.texlib + downloads = txlb.downloads if len(downloads) == 0 and not searching: # print("KOSONG") @@ -354,9 +553,9 @@ def monitor_downloads(): if searching: prog_search = thread_search.progress - amb.searching_download.progress = prog_search + txlb.searching_download.progress = prog_search if thread_search.progress >= 100: - amb.searching_download.alive = False + txlb.searching_download.alive = False if not thread_search.is_alive(): del threads[THREAD_SEARCHING] @@ -609,7 +808,7 @@ def _get_thread(id:str): return threads[id] return None -classes = [DownloadThread, TexLibProps, TexLibBrowser, TexLibDownload, TexLibAddToUcupaint, TexLibCancelDownload, MaterialItem, TEXLIB_UL_Material +classes = [DownloadThread, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibAddToUcupaint, TexLibCancelDownload,TEXLIB_UL_Material ,TexLibCancelSearch, TEXLIB_UL_Downloads] def register(): @@ -617,10 +816,8 @@ def register(): bpy.utils.register_class(cl) - Scene.material_items = CollectionProperty(type= MaterialItem) - Scene.material_index = IntProperty(default=0, name="Material index") - Scene.material_attr_index = IntProperty(default=0, name="Attribute index") - Scene.ambient_browser = PointerProperty(type= TexLibProps) + + Scene.texlib = PointerProperty(type= TexLibProps) global previews_collection previews_collection = bpy.utils.previews.new() @@ -632,10 +829,7 @@ def register(): def unregister(): for cl in classes: bpy.utils.unregister_class(cl) - del bpy.types.Scene.ambient_browser - del Scene.material_items - del Scene.material_index - del Scene.material_attr_index + del bpy.types.Scene.texlib bpy.utils.previews.remove(previews_collection) From 5d31abb39f03d9b99b4390b65f7faafc8d51b939 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 18 Sep 2023 13:36:47 +0700 Subject: [PATCH 012/283] refactor opening multiple images in layer.py --- Layer.py | 214 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ TexLib.py | 175 +------------------------------------------- 2 files changed, 215 insertions(+), 174 deletions(-) diff --git a/Layer.py b/Layer.py index 2645ee57..5ac601e7 100644 --- a/Layer.py +++ b/Layer.py @@ -55,6 +55,220 @@ def load_hemi_props(layer, source): trans = source.node_tree.nodes.get('Vector Transform') if trans: trans.convert_from = layer.hemi_space + +def open_images_to_single_layer(context, directory:str, import_list:list[str], texcoord_type, uv_name, + add_mask=False, mask_type='IMAGE', mask_color='BLACK', mask_use_hdr=False, + mask_uv_name = '', mask_width=1024, mask_height=1024, use_image_atlas_for_mask=False, use_udim_for_mask=False) -> bool: + + T = time.time() + + #images = tuple(load_image(path, directory) for path in import_list) + images = list(load_image(path, directory) for path in import_list) + + # Check existing images + #exist_images = [] + #for i, new_img in enumerate(images): + # for old_img in bpy.data.images: + # if old_img.filepath == new_img.filepath: + # exist_images.append(old_img) + # break + + #print(images) + + valid_channels = [] + valid_images = [] + valid_synonyms = [] + #channel_ids = [] + + # Dict + + # Check image names + #for image in images: + + # # Get filename without extension + # name = os.path.splitext(os.path.basename(image.filepath))[0] + # #print(name) + + # for i, ch in enumerate(yp.channels): + + # # Check image name suffix and match it with channel name + # if name.lower().endswith(ch.name.lower()): + # valid_images.append(image) + # channel_ids.append(i) + + # # Check displacement + # elif name.lower().endswith('displacement') and ch.type == 'NORMAL': + # valid_images.append(image) + # channel_ids.append(i) + + synonym_libs = { + 'color' : ['albedo', 'diffuse', 'base color'], + 'ambient occlusion' : ['ao'], + 'roughness' : ['glossiness'], + 'normal' : ['displacement', 'height', 'bump'], # Prioritize displacement/bump before actual normal map + } + + wm = context.window_manager + node = get_active_ypaint_node() + yp = node.node_tree.yp + + for ch in yp.channels: + + # One channel will only use one image + if ch in valid_channels: continue + + ch_name = ch.name.lower() + + # Get synonyms + synonyms = [] + if ch_name in synonym_libs: + synonyms = synonym_libs[ch_name] + synonyms.append(ch_name) + + # Normal channel can use two override images, this flag will check it + secondary_imgae_found = False + main_image_found = False + + for syname in synonyms: + + # Break if channel already used + #if ch in valid_channels: break + if main_image_found: break + + # Get channel name possible variation + initial = syname[0] + + if len(ch.name) > 3: + threes = syname[:3] + else: threes = '' + + no_whitespace = syname.replace(' ', '') + underscore = syname.replace(' ', '_') + + for image in images: + + # One image will only use one channel + if image in valid_images: continue + + # Get filename without extension + img_name = os.path.splitext(os.path.basename(image.filepath))[0].lower() + + if ( + ## Check image name suffix and match it with channel name + #(img_name.endswith(syname)) or + + #(img_name.endswith(no_whitespace)) or + + #(img_name.endswith(underscore)) or + + # Check if synonym is in image name + (syname in img_name) or + + (no_whitespace in img_name) or + + (underscore in img_name) or + + # Check image name suffix and match it with channel initial first threes + (threes != '' and img_name.endswith(('_' + threes, '.' + threes))) or + + # Check image name suffix and match it with channel initial name + # Avoid initial a because it's too common + (initial != 'a' and img_name.endswith(('_' + initial, '.' + initial))) + + ): + valid_images.append(image) + valid_channels.append(ch) + valid_synonyms.append(syname) + + if ch.type != 'NORMAL' or secondary_imgae_found: + main_image_found = True + break + + secondary_imgae_found = True + + for i, image in enumerate(valid_images): + #print(image.name, yp.channels[channel_ids[i]].name) + print(image.name, valid_channels[i].name, valid_synonyms[i]) + + if not valid_images: + # Remove loaded images + for image in images: + #if image not in exist_images: + bpy.data.images.remove(image) + return False + + # Check if found more than 1 images for normal channel + + if len([ch for ch in valid_channels if ch.type == 'NORMAL']) >= 2: + normal_map_type = 'BUMP_NORMAL_MAP' + elif any([ch for i, ch in enumerate(valid_channels) if ch.type == 'NORMAL' and valid_synonyms[i] == 'normal']): + normal_map_type = 'NORMAL_MAP' + else: normal_map_type = 'BUMP_MAP' + + #if valid_channels and valid_channels[0] + layer = None + for i, image in enumerate(valid_images): + root_ch = valid_channels[i] + syname = valid_synonyms[i] + + # Set image to linear + #if image.colorspace_settings.name != 'Non-Color': + # image.colorspace_settings.name = 'Non-Color' + + m = re.match(r'^yp\.channels\[(\d+)\].*', root_ch.path_from_id()) + ch_idx = int(m.group(1)) + + # Use image directly to layer for the first index + if i == 0: + yp.halt_update = True + #layer = add_new_layer(node.node_tree, image.name, 'IMAGE', int(ch_idx), 'MIX', + # 'MIX', normal_map_type, self.texcoord_type, self.uv_map, + # image, None, None, + # ) + + layer = add_new_layer(node.node_tree, image.name, 'IMAGE', + int(ch_idx), 'MIX', 'MIX', + normal_map_type, texcoord_type, uv_name, image, None, None, + (1,1,1), + add_mask, mask_type, mask_color, mask_use_hdr, + mask_uv_name, mask_width, mask_height, use_image_atlas_for_mask, + use_udim_for_mask=use_udim_for_mask) + + yp.halt_update = False + #reconnect_yp_nodes(node.node_tree) + #rearrange_yp_nodes(node.node_tree) + tree = get_tree(layer) + else: + ch = layer.channels[ch_idx] + ch.enable = True + if root_ch.type == 'NORMAL' and syname == 'normal': + image_node, dirty = check_new_node(tree, ch, 'cache_1_image', 'ShaderNodeTexImage', '', True) + image_node.image = image + ch.override_1 = True + ch.override_1_type = 'IMAGE' + else: + image_node, dirty = check_new_node(tree, ch, 'cache_image', 'ShaderNodeTexImage', '', True) + image_node.image = image + ch.override = True + ch.override_type = 'IMAGE' + + ## Reconnect and rearrange nodes + reconnect_yp_nodes(node.node_tree) + rearrange_yp_nodes(node.node_tree) + + # Remove unused images + for image in images: + if image not in valid_images: # and image not in exist_images: + bpy.data.images.remove(image) + + # Update UI + wm.ypui.need_update = True + print('INFO: Image(s) is opened at', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') + wm.yptimer.time = str(time.time()) + + # Make sure to expand channels so it can be obvious which channels are active + wm.ypui.expand_channels = True + def add_new_layer(group_tree, layer_name, layer_type, channel_idx, blend_type, normal_blend_type, normal_map_type, texcoord_type, uv_name='', image=None, vcol=None, segment=None, diff --git a/TexLib.py b/TexLib.py index a8e79541..3fea45c7 100644 --- a/TexLib.py +++ b/TexLib.py @@ -88,189 +88,16 @@ def poll(cls, context): def execute(self, context): T = time.time() - print("tambah tambah") lib = assets_lib[self.id] attr_dwn = lib["downloads"][self.attribute] directory = attr_dwn["location"] - print("== location", directory) import_list = os.listdir(directory) images = list(load_image(path, directory) for path in import_list) - for fl in images: - print(">>",fl) - - wm = context.window_manager - node = get_active_ypaint_node() - yp = node.node_tree.yp - - - valid_channels = [] - valid_images = [] - valid_synonyms = [] - - synonym_libs = { - 'color' : ['albedo', 'diffuse', 'base color'], - 'ambient occlusion' : ['ao'], - 'roughness' : ['glossiness'], - 'normal' : ['displacement', 'height', 'bump'], # Prioritize displacement/bump before actual normal map - } - - - for ch in yp.channels: - - # One channel will only use one image - if ch in valid_channels: continue - - ch_name = ch.name.lower() - - # Get synonyms - synonyms = [] - if ch_name in synonym_libs: - synonyms = synonym_libs[ch_name] - synonyms.append(ch_name) - - # Normal channel can use two override images, this flag will check it - secondary_imgae_found = False - main_image_found = False - - for syname in synonyms: - - # Break if channel already used - #if ch in valid_channels: break - if main_image_found: break - - # Get channel name possible variation - initial = syname[0] - - if len(ch.name) > 3: - threes = syname[:3] - else: threes = '' - - no_whitespace = syname.replace(' ', '') - underscore = syname.replace(' ', '_') - - for image in images: - - # One image will only use one channel - if image in valid_images: continue - - # Get filename without extension - img_name = os.path.splitext(os.path.basename(image.filepath))[0].lower() - - if ( - ## Check image name suffix and match it with channel name - #(img_name.endswith(syname)) or - - #(img_name.endswith(no_whitespace)) or - - #(img_name.endswith(underscore)) or - - # Check if synonym is in image name - (syname in img_name) or - - (no_whitespace in img_name) or - - (underscore in img_name) or - - # Check image name suffix and match it with channel initial first threes - (threes != '' and img_name.endswith(('_' + threes, '.' + threes))) or - - # Check image name suffix and match it with channel initial name - # Avoid initial a because it's too common - (initial != 'a' and img_name.endswith(('_' + initial, '.' + initial))) - - ): - valid_images.append(image) - valid_channels.append(ch) - valid_synonyms.append(syname) - - if ch.type != 'NORMAL' or secondary_imgae_found: - main_image_found = True - break - - secondary_imgae_found = True - - for i, image in enumerate(valid_images): - #print(image.name, yp.channels[channel_ids[i]].name) - print(image.name, valid_channels[i].name, valid_synonyms[i]) - - if not valid_images: - # Remove loaded images - for image in images: - #if image not in exist_images: - bpy.data.images.remove(image) - self.report({'ERROR'}, "Images should have channel name as suffix!") + if not Layer.open_images_to_single_layer(context, directory, import_list, 'UV', 'UVMap'): return {'CANCELLED'} - # Check if found more than 1 images for normal channel - - if len([ch for ch in valid_channels if ch.type == 'NORMAL']) >= 2: - normal_map_type = 'BUMP_NORMAL_MAP' - elif any([ch for i, ch in enumerate(valid_channels) if ch.type == 'NORMAL' and valid_synonyms[i] == 'normal']): - normal_map_type = 'NORMAL_MAP' - else: normal_map_type = 'BUMP_MAP' - - #if valid_channels and valid_channels[0] - layer = None - for i, image in enumerate(valid_images): - root_ch = valid_channels[i] - syname = valid_synonyms[i] - - # Set image to linear - #if image.colorspace_settings.name != 'Non-Color': - # image.colorspace_settings.name = 'Non-Color' - - m = re.match(r'^yp\.channels\[(\d+)\].*', root_ch.path_from_id()) - ch_idx = int(m.group(1)) - - # Use image directly to layer for the first index - if i == 0: - yp.halt_update = True - #layer = add_new_layer(node.node_tree, image.name, 'IMAGE', int(ch_idx), 'MIX', - # 'MIX', normal_map_type, self.texcoord_type, self.uv_map, - # image, None, None, - # ) - - layer = Layer.add_new_layer(node.node_tree, image.name, 'IMAGE', - int(ch_idx), 'MIX', 'MIX', - normal_map_type, 'UV') - - yp.halt_update = False - #reconnect_yp_nodes(node.node_tree) - #rearrange_yp_nodes(node.node_tree) - tree = get_tree(layer) - else: - ch = layer.channels[ch_idx] - ch.enable = True - if root_ch.type == 'NORMAL' and syname == 'normal': - image_node, dirty = check_new_node(tree, ch, 'cache_1_image', 'ShaderNodeTexImage', '', True) - image_node.image = image - ch.override_1 = True - ch.override_1_type = 'IMAGE' - else: - image_node, dirty = check_new_node(tree, ch, 'cache_image', 'ShaderNodeTexImage', '', True) - image_node.image = image - ch.override = True - ch.override_type = 'IMAGE' - - ## Reconnect and rearrange nodes - reconnect_yp_nodes(node.node_tree) - rearrange_yp_nodes(node.node_tree) - - # Remove unused images - for image in images: - if image not in valid_images: # and image not in exist_images: - bpy.data.images.remove(image) - - # Update UI - wm.ypui.need_update = True - print('INFO: Image(s) is opened at', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') - wm.yptimer.time = str(time.time()) - - # Make sure to expand channels so it can be obvious which channels are active - wm.ypui.expand_channels = True - return {'FINISHED'} class TexLibCancelDownload(Operator): From 0b2bb64dae93ad58e82b657d534576fd6578288f Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 18 Sep 2023 16:44:39 +0700 Subject: [PATCH 013/283] add masking option --- TexLib.py | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 154 insertions(+), 4 deletions(-) diff --git a/TexLib.py b/TexLib.py index 3fea45c7..177c2a3a 100644 --- a/TexLib.py +++ b/TexLib.py @@ -4,7 +4,7 @@ from zipfile import ZipFile from bpy_extras.image_utils import load_image -from . import lib, Layer +from . import lib, Layer, UDIM import bpy, threading, os, requests, json from bpy.props import * @@ -81,10 +81,153 @@ class TexLibAddToUcupaint(Operator): attribute:StringProperty() id:StringProperty() + texcoord_type : EnumProperty( + name = 'Texture Coordinate Type', + items = texcoord_type_items, + default = 'UV') + + uv_map : StringProperty(default='') + uv_map_coll : CollectionProperty(type=bpy.types.PropertyGroup) + + add_mask : BoolProperty( + name = 'Add Mask', + description = 'Add mask to new layer', + default = False) + + mask_type : EnumProperty( + name = 'Mask Type', + description = 'Mask type', + items = (('IMAGE', 'Image', '', 'IMAGE_DATA', 0), + ('VCOL', 'Vertex Color', '', 'GROUP_VCOL', 1)), + default = 'IMAGE') + + mask_color : EnumProperty( + name = 'Mask Color', + description = 'Mask Color', + items = ( + ('WHITE', 'White (Full Opacity)', ''), + ('BLACK', 'Black (Full Transparency)', ''), + ), + default='BLACK') + + mask_width : IntProperty(name='Mask Width', default = 1234, min=1, max=4096) + mask_height : IntProperty(name='Mask Height', default = 1234, min=1, max=4096) + + mask_uv_name : StringProperty(default='', update=Layer.update_new_layer_mask_uv_map) + mask_use_hdr : BoolProperty(name='32 bit Float', default=False) + + use_udim_for_mask : BoolProperty( + name = 'Use UDIM Tiles for Mask', + description='Use UDIM Tiles for Mask', + default=False) + + use_image_atlas_for_mask : BoolProperty( + name = 'Use Image Atlas for Mask', + description='Use Image Atlas for Mask', + default=False) + @classmethod def poll(cls, context): return get_active_ypaint_node() + def invoke(self, context, event): + obj = context.object + node = get_active_ypaint_node() + yp = node.node_tree.yp + ypup = get_user_preferences() + + # Use user preference default image size if input uses default image size + if self.mask_width == 1234 and self.mask_height == 1234: + self.mask_width = self.mask_height = ypup.default_new_image_size + + if obj.type != 'MESH': + self.texcoord_type = 'Object' + + # Use active uv layer name by default + if obj.type == 'MESH': + uv_name = get_default_uv_name(obj, yp) + self.uv_map = uv_name + if self.add_mask and self.mask_type == 'IMAGE': self.mask_uv_name = uv_name + + # UV Map collections update + self.uv_map_coll.clear() + for uv in obj.data.uv_layers: + if not uv.name.startswith(TEMP_UV): + self.uv_map_coll.add().name = uv.name + + # Normal map is the default + #self.normal_map_type = 'NORMAL_MAP' + + #return context.window_manager.invoke_props_dialog(self) + # context.window_manager.fileselect_add(self) + return context.window_manager.invoke_props_dialog(self, width=320) + + def check(self, context): + ypup = get_user_preferences() + + # New image cannot use more pixels than the image atlas + if self.is_mask_using_image_atlas(): + if self.mask_use_hdr: mask_max_size = ypup.hdr_image_atlas_size + else: mask_max_size = ypup.image_atlas_size + if self.mask_width > mask_max_size: self.mask_width = mask_max_size + if self.mask_height > mask_max_size: self.mask_height = mask_max_size + + # Init mask uv name + if self.add_mask and self.mask_uv_name == '': + + node = get_active_ypaint_node() + yp = node.node_tree.yp + obj = context.object + + uv_name = get_default_uv_name(obj, yp) + self.mask_uv_name = uv_name + + return True + + def draw(self, context): + obj = context.object + + row = self.layout.row() + + col = row.column() + col.label(text='Vector:') + + col.label(text='') + if self.add_mask: + col.label(text='Mask Type:') + col.label(text='Mask Color:') + if self.mask_type == 'IMAGE': + col.label(text='') + col.label(text='Mask Width:') + col.label(text='Mask Height:') + col.label(text='Mask UV Map:') + col.label(text='') + + col = row.column() + crow = col.row(align=True) + crow.prop(self, 'texcoord_type', text='') + if obj.type == 'MESH' and self.texcoord_type == 'UV': + #crow.prop_search(self, "uv_map", obj.data, "uv_layers", text='', icon='GROUP_UVS') + crow.prop_search(self, "uv_map", self, "uv_map_coll", text='', icon='GROUP_UVS') + + col.prop(self, 'add_mask', text='Add Mask') + if self.add_mask: + col.prop(self, 'mask_type', text='') + col.prop(self, 'mask_color', text='') + if self.mask_type == 'IMAGE': + col.prop(self, 'mask_use_hdr') + col.prop(self, 'mask_width', text='') + col.prop(self, 'mask_height', text='') + #col.prop_search(self, "mask_uv_name", obj.data, "uv_layers", text='', icon='GROUP_UVS') + col.prop_search(self, "mask_uv_name", self, "uv_map_coll", text='', icon='GROUP_UVS') + if UDIM.is_udim_supported(): + col.prop(self, 'use_udim_for_mask') + ccol = col.column() + ccol.active = not self.use_udim_for_mask + ccol.prop(self, 'use_image_atlas_for_mask', text='Use Image Atlas') + + # self.layout.prop(self, 'relative') + def execute(self, context): T = time.time() @@ -93,12 +236,19 @@ def execute(self, context): directory = attr_dwn["location"] import_list = os.listdir(directory) - images = list(load_image(path, directory) for path in import_list) - - if not Layer.open_images_to_single_layer(context, directory, import_list, 'UV', 'UVMap'): + if not Layer.open_images_to_single_layer(context, directory, import_list, self.texcoord_type, self.uv_map + ,self.add_mask, self.mask_type, self.mask_color, self.mask_use_hdr, + self.mask_uv_name, self.mask_width, self.mask_height, self.use_image_atlas_for_mask, + use_udim_for_mask=self.is_mask_using_udim()): return {'CANCELLED'} return {'FINISHED'} + + def is_mask_using_udim(self): + return self.use_udim_for_mask and UDIM.is_udim_supported() + + def is_mask_using_image_atlas(self): + return self.use_image_atlas_for_mask and not self.is_mask_using_udim() class TexLibCancelDownload(Operator): """Cancel downloading textures""" From a2cb56bc5df3b2d95aba7ce57c23b72248d6772e Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 19 Sep 2023 16:20:14 +0700 Subject: [PATCH 014/283] add base class for multple images to layer --- Layer.py | 212 +----------------------------------------------------- TexLib.py | 171 +++---------------------------------------- 2 files changed, 10 insertions(+), 373 deletions(-) diff --git a/Layer.py b/Layer.py index 5ac601e7..db6e0efd 100644 --- a/Layer.py +++ b/Layer.py @@ -56,218 +56,7 @@ def load_hemi_props(layer, source): if trans: trans.convert_from = layer.hemi_space -def open_images_to_single_layer(context, directory:str, import_list:list[str], texcoord_type, uv_name, - add_mask=False, mask_type='IMAGE', mask_color='BLACK', mask_use_hdr=False, - mask_uv_name = '', mask_width=1024, mask_height=1024, use_image_atlas_for_mask=False, use_udim_for_mask=False) -> bool: - - T = time.time() - - #images = tuple(load_image(path, directory) for path in import_list) - images = list(load_image(path, directory) for path in import_list) - - # Check existing images - #exist_images = [] - #for i, new_img in enumerate(images): - # for old_img in bpy.data.images: - # if old_img.filepath == new_img.filepath: - # exist_images.append(old_img) - # break - - #print(images) - - valid_channels = [] - valid_images = [] - valid_synonyms = [] - #channel_ids = [] - - # Dict - - # Check image names - #for image in images: - - # # Get filename without extension - # name = os.path.splitext(os.path.basename(image.filepath))[0] - # #print(name) - - # for i, ch in enumerate(yp.channels): - - # # Check image name suffix and match it with channel name - # if name.lower().endswith(ch.name.lower()): - # valid_images.append(image) - # channel_ids.append(i) - - # # Check displacement - # elif name.lower().endswith('displacement') and ch.type == 'NORMAL': - # valid_images.append(image) - # channel_ids.append(i) - - synonym_libs = { - 'color' : ['albedo', 'diffuse', 'base color'], - 'ambient occlusion' : ['ao'], - 'roughness' : ['glossiness'], - 'normal' : ['displacement', 'height', 'bump'], # Prioritize displacement/bump before actual normal map - } - - wm = context.window_manager - node = get_active_ypaint_node() - yp = node.node_tree.yp - - for ch in yp.channels: - - # One channel will only use one image - if ch in valid_channels: continue - - ch_name = ch.name.lower() - - # Get synonyms - synonyms = [] - if ch_name in synonym_libs: - synonyms = synonym_libs[ch_name] - synonyms.append(ch_name) - - # Normal channel can use two override images, this flag will check it - secondary_imgae_found = False - main_image_found = False - - for syname in synonyms: - - # Break if channel already used - #if ch in valid_channels: break - if main_image_found: break - - # Get channel name possible variation - initial = syname[0] - - if len(ch.name) > 3: - threes = syname[:3] - else: threes = '' - - no_whitespace = syname.replace(' ', '') - underscore = syname.replace(' ', '_') - - for image in images: - - # One image will only use one channel - if image in valid_images: continue - - # Get filename without extension - img_name = os.path.splitext(os.path.basename(image.filepath))[0].lower() - - if ( - ## Check image name suffix and match it with channel name - #(img_name.endswith(syname)) or - - #(img_name.endswith(no_whitespace)) or - #(img_name.endswith(underscore)) or - - # Check if synonym is in image name - (syname in img_name) or - - (no_whitespace in img_name) or - - (underscore in img_name) or - - # Check image name suffix and match it with channel initial first threes - (threes != '' and img_name.endswith(('_' + threes, '.' + threes))) or - - # Check image name suffix and match it with channel initial name - # Avoid initial a because it's too common - (initial != 'a' and img_name.endswith(('_' + initial, '.' + initial))) - - ): - valid_images.append(image) - valid_channels.append(ch) - valid_synonyms.append(syname) - - if ch.type != 'NORMAL' or secondary_imgae_found: - main_image_found = True - break - - secondary_imgae_found = True - - for i, image in enumerate(valid_images): - #print(image.name, yp.channels[channel_ids[i]].name) - print(image.name, valid_channels[i].name, valid_synonyms[i]) - - if not valid_images: - # Remove loaded images - for image in images: - #if image not in exist_images: - bpy.data.images.remove(image) - return False - - # Check if found more than 1 images for normal channel - - if len([ch for ch in valid_channels if ch.type == 'NORMAL']) >= 2: - normal_map_type = 'BUMP_NORMAL_MAP' - elif any([ch for i, ch in enumerate(valid_channels) if ch.type == 'NORMAL' and valid_synonyms[i] == 'normal']): - normal_map_type = 'NORMAL_MAP' - else: normal_map_type = 'BUMP_MAP' - - #if valid_channels and valid_channels[0] - layer = None - for i, image in enumerate(valid_images): - root_ch = valid_channels[i] - syname = valid_synonyms[i] - - # Set image to linear - #if image.colorspace_settings.name != 'Non-Color': - # image.colorspace_settings.name = 'Non-Color' - - m = re.match(r'^yp\.channels\[(\d+)\].*', root_ch.path_from_id()) - ch_idx = int(m.group(1)) - - # Use image directly to layer for the first index - if i == 0: - yp.halt_update = True - #layer = add_new_layer(node.node_tree, image.name, 'IMAGE', int(ch_idx), 'MIX', - # 'MIX', normal_map_type, self.texcoord_type, self.uv_map, - # image, None, None, - # ) - - layer = add_new_layer(node.node_tree, image.name, 'IMAGE', - int(ch_idx), 'MIX', 'MIX', - normal_map_type, texcoord_type, uv_name, image, None, None, - (1,1,1), - add_mask, mask_type, mask_color, mask_use_hdr, - mask_uv_name, mask_width, mask_height, use_image_atlas_for_mask, - use_udim_for_mask=use_udim_for_mask) - - yp.halt_update = False - #reconnect_yp_nodes(node.node_tree) - #rearrange_yp_nodes(node.node_tree) - tree = get_tree(layer) - else: - ch = layer.channels[ch_idx] - ch.enable = True - if root_ch.type == 'NORMAL' and syname == 'normal': - image_node, dirty = check_new_node(tree, ch, 'cache_1_image', 'ShaderNodeTexImage', '', True) - image_node.image = image - ch.override_1 = True - ch.override_1_type = 'IMAGE' - else: - image_node, dirty = check_new_node(tree, ch, 'cache_image', 'ShaderNodeTexImage', '', True) - image_node.image = image - ch.override = True - ch.override_type = 'IMAGE' - - ## Reconnect and rearrange nodes - reconnect_yp_nodes(node.node_tree) - rearrange_yp_nodes(node.node_tree) - - # Remove unused images - for image in images: - if image not in valid_images: # and image not in exist_images: - bpy.data.images.remove(image) - - # Update UI - wm.ypui.need_update = True - print('INFO: Image(s) is opened at', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') - wm.yptimer.time = str(time.time()) - - # Make sure to expand channels so it can be obvious which channels are active - wm.ypui.expand_channels = True def add_new_layer(group_tree, layer_name, layer_type, channel_idx, blend_type, normal_blend_type, normal_map_type, @@ -1582,6 +1371,7 @@ def execute(self, context): wm.yptimer.time = str(time.time()) return {'FINISHED'} + class BaseMultipleImagesLayer(): # File related diff --git a/TexLib.py b/TexLib.py index 177c2a3a..4164f53e 100644 --- a/TexLib.py +++ b/TexLib.py @@ -73,182 +73,39 @@ class TexLibProps(PropertyGroup): searching_download:PointerProperty(type=DownloadThread) selected_download_item:IntProperty(default=0) -class TexLibAddToUcupaint(Operator): +class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" bl_label = "" bl_idname = "texlib.add_to_ucupaint" + attribute:StringProperty() id:StringProperty() - - texcoord_type : EnumProperty( - name = 'Texture Coordinate Type', - items = texcoord_type_items, - default = 'UV') - - uv_map : StringProperty(default='') - uv_map_coll : CollectionProperty(type=bpy.types.PropertyGroup) - - add_mask : BoolProperty( - name = 'Add Mask', - description = 'Add mask to new layer', - default = False) - - mask_type : EnumProperty( - name = 'Mask Type', - description = 'Mask type', - items = (('IMAGE', 'Image', '', 'IMAGE_DATA', 0), - ('VCOL', 'Vertex Color', '', 'GROUP_VCOL', 1)), - default = 'IMAGE') - - mask_color : EnumProperty( - name = 'Mask Color', - description = 'Mask Color', - items = ( - ('WHITE', 'White (Full Opacity)', ''), - ('BLACK', 'Black (Full Transparency)', ''), - ), - default='BLACK') - - mask_width : IntProperty(name='Mask Width', default = 1234, min=1, max=4096) - mask_height : IntProperty(name='Mask Height', default = 1234, min=1, max=4096) - - mask_uv_name : StringProperty(default='', update=Layer.update_new_layer_mask_uv_map) - mask_use_hdr : BoolProperty(name='32 bit Float', default=False) - - use_udim_for_mask : BoolProperty( - name = 'Use UDIM Tiles for Mask', - description='Use UDIM Tiles for Mask', - default=False) - - use_image_atlas_for_mask : BoolProperty( - name = 'Use Image Atlas for Mask', - description='Use Image Atlas for Mask', - default=False) - + @classmethod def poll(cls, context): return get_active_ypaint_node() def invoke(self, context, event): - obj = context.object - node = get_active_ypaint_node() - yp = node.node_tree.yp - ypup = get_user_preferences() - - # Use user preference default image size if input uses default image size - if self.mask_width == 1234 and self.mask_height == 1234: - self.mask_width = self.mask_height = ypup.default_new_image_size - - if obj.type != 'MESH': - self.texcoord_type = 'Object' - - # Use active uv layer name by default - if obj.type == 'MESH': - uv_name = get_default_uv_name(obj, yp) - self.uv_map = uv_name - if self.add_mask and self.mask_type == 'IMAGE': self.mask_uv_name = uv_name - - # UV Map collections update - self.uv_map_coll.clear() - for uv in obj.data.uv_layers: - if not uv.name.startswith(TEMP_UV): - self.uv_map_coll.add().name = uv.name - - # Normal map is the default - #self.normal_map_type = 'NORMAL_MAP' - - #return context.window_manager.invoke_props_dialog(self) - # context.window_manager.fileselect_add(self) + self.invoke_operator(context) return context.window_manager.invoke_props_dialog(self, width=320) def check(self, context): - ypup = get_user_preferences() - - # New image cannot use more pixels than the image atlas - if self.is_mask_using_image_atlas(): - if self.mask_use_hdr: mask_max_size = ypup.hdr_image_atlas_size - else: mask_max_size = ypup.image_atlas_size - if self.mask_width > mask_max_size: self.mask_width = mask_max_size - if self.mask_height > mask_max_size: self.mask_height = mask_max_size - - # Init mask uv name - if self.add_mask and self.mask_uv_name == '': - - node = get_active_ypaint_node() - yp = node.node_tree.yp - obj = context.object + return self.check_operator(context) - uv_name = get_default_uv_name(obj, yp) - self.mask_uv_name = uv_name - - return True - def draw(self, context): - obj = context.object - - row = self.layout.row() - - col = row.column() - col.label(text='Vector:') - - col.label(text='') - if self.add_mask: - col.label(text='Mask Type:') - col.label(text='Mask Color:') - if self.mask_type == 'IMAGE': - col.label(text='') - col.label(text='Mask Width:') - col.label(text='Mask Height:') - col.label(text='Mask UV Map:') - col.label(text='') - - col = row.column() - crow = col.row(align=True) - crow.prop(self, 'texcoord_type', text='') - if obj.type == 'MESH' and self.texcoord_type == 'UV': - #crow.prop_search(self, "uv_map", obj.data, "uv_layers", text='', icon='GROUP_UVS') - crow.prop_search(self, "uv_map", self, "uv_map_coll", text='', icon='GROUP_UVS') - - col.prop(self, 'add_mask', text='Add Mask') - if self.add_mask: - col.prop(self, 'mask_type', text='') - col.prop(self, 'mask_color', text='') - if self.mask_type == 'IMAGE': - col.prop(self, 'mask_use_hdr') - col.prop(self, 'mask_width', text='') - col.prop(self, 'mask_height', text='') - #col.prop_search(self, "mask_uv_name", obj.data, "uv_layers", text='', icon='GROUP_UVS') - col.prop_search(self, "mask_uv_name", self, "uv_map_coll", text='', icon='GROUP_UVS') - if UDIM.is_udim_supported(): - col.prop(self, 'use_udim_for_mask') - ccol = col.column() - ccol.active = not self.use_udim_for_mask - ccol.prop(self, 'use_image_atlas_for_mask', text='Use Image Atlas') - - # self.layout.prop(self, 'relative') - + self.draw_operator(context) + def execute(self, context): - T = time.time() - lib = assets_lib[self.id] attr_dwn = lib["downloads"][self.attribute] directory = attr_dwn["location"] import_list = os.listdir(directory) - if not Layer.open_images_to_single_layer(context, directory, import_list, self.texcoord_type, self.uv_map - ,self.add_mask, self.mask_type, self.mask_color, self.mask_use_hdr, - self.mask_uv_name, self.mask_width, self.mask_height, self.use_image_atlas_for_mask, - use_udim_for_mask=self.is_mask_using_udim()): + if not self.open_images_to_single_layer(context, directory, import_list): return {'CANCELLED'} return {'FINISHED'} - - def is_mask_using_udim(self): - return self.use_udim_for_mask and UDIM.is_udim_supported() - - def is_mask_using_image_atlas(self): - return self.use_image_atlas_for_mask and not self.is_mask_using_udim() class TexLibCancelDownload(Operator): """Cancel downloading textures""" @@ -263,14 +120,12 @@ def execute(self, context): return {'FINISHED'} - class TexLibDownload(Operator): """Download textures from source""" bl_label = "" bl_idname = "texlib.download" - attribute:StringProperty() id:StringProperty() file_size:IntProperty @@ -408,9 +263,6 @@ def draw(self, context): layout.label(text="Downloads:") layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") - - - class TEXLIB_UL_Downloads(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): @@ -418,8 +270,7 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn if self.layout_type in {'DEFAULT', 'COMPACT'}: row = layout.row(align=True) row.prop(item, "progress", slider=True, text=item.asset_id+" | "+item.asset_attribute) - row.operator("texlib.cancel", icon="X") - + row.operator("texlib.cancel", icon="X") class TEXLIB_UL_Material(UIList): @@ -450,7 +301,6 @@ def execute(self, context): return{'FINISHED'} - def load_material_items(material_items): material_items.clear() for i in last_search: @@ -492,7 +342,6 @@ def searching_material(keyword:str, context:Context): load_material_items(txlib.material_items) thread_search.progress = 100 - def load_previews(): # print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") dir_name = _get_preview_dir() @@ -792,8 +641,6 @@ def register(): for cl in classes: bpy.utils.register_class(cl) - - Scene.texlib = PointerProperty(type= TexLibProps) global previews_collection From b6e9734d6a71c4216665a3cebb3365ece780a389 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 20 Sep 2023 14:00:50 +0700 Subject: [PATCH 015/283] add cancelling downloads --- TexLib.py | 82 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 26 deletions(-) diff --git a/TexLib.py b/TexLib.py index 4164f53e..a51e7575 100644 --- a/TexLib.py +++ b/TexLib.py @@ -1,15 +1,11 @@ from bpy.types import Context from .common import * -from .lib import * -from zipfile import ZipFile -from bpy_extras.image_utils import load_image - -from . import lib, Layer, UDIM - -import bpy, threading, os, requests, json +from . import lib, Layer from bpy.props import * from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene +import bpy, threading, os, requests, json, zipfile + THREAD_SEARCHING = "thread_searching" # thread_search:threading.Thread # progress:int # global previews_collection @@ -23,7 +19,7 @@ class MaterialItem(PropertyGroup): name: StringProperty( name="Name", description="Material name", default="Untitled") thumb: IntProperty( name="thumbnail", description="", default=0) -class DownloadThread(PropertyGroup): +class DownloadQueue(PropertyGroup): asset_id : StringProperty() asset_attribute: StringProperty() file_path : StringProperty() @@ -69,8 +65,8 @@ class TexLibProps(PropertyGroup): material_items:CollectionProperty(type= MaterialItem) material_index:IntProperty(default=0, name="Material index") - downloads:CollectionProperty(type=DownloadThread) - searching_download:PointerProperty(type=DownloadThread) + downloads:CollectionProperty(type=DownloadQueue) + searching_download:PointerProperty(type=DownloadQueue) selected_download_item:IntProperty(default=0) class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): @@ -115,10 +111,29 @@ class TexLibCancelDownload(Operator): attribute:StringProperty() id:StringProperty() - def execute(self, context): - print("cancel cancel") + def execute(self, context:bpy.context): + print("cancel", self.id, "| attr",self.attribute) - return {'FINISHED'} + thread_id = _get_thread_id(self.id, self.attribute) + thread = _get_thread(thread_id) + + if thread == None: + print("cancel false", thread_id) + return {'CANCELLED'} + + print("cancel true", thread_id) + thread.cancel = True + + + texlib:TexLibProps = context.scene.texlib + dwn:DownloadQueue + for dwn in texlib.downloads: + if dwn.asset_id == self.id and dwn.asset_attribute == self.attribute: + dwn.alive = False + print("cancelling >> "+dwn.asset_id) + return {'FINISHED'} + + return {'CANCELLED'} class TexLibDownload(Operator): """Download textures from source""" @@ -154,7 +169,7 @@ def execute(self, context): new_thread.start() texlib = context.scene.texlib - new_dwn:DownloadThread = texlib.downloads.add() + new_dwn:DownloadQueue = texlib.downloads.add() new_dwn.asset_id = self.id new_dwn.file_path = file_name new_dwn.asset_attribute = self.attribute @@ -193,7 +208,8 @@ def draw(self, context): else: row_search.label(text="Retrieving thumbnails..."+str(prog)+"%") row_search.operator("texlib.cancel_search", icon="CANCEL") - + + if len(texlib.material_items): my_list = texlib.material_items @@ -246,7 +262,9 @@ def draw(self, context): if dwn_thread != None: btn_row.label(text=str(dwn_thread.progress)+"%") - btn_row.operator("texlib.cancel", icon="X") + op:TexLibCancelDownload = btn_row.operator("texlib.cancel", icon="X") + op.attribute = d + op.id = mat_id else: if check_exist: op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") @@ -265,12 +283,17 @@ def draw(self, context): class TEXLIB_UL_Downloads(UIList): - def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + def draw_item(self, context, layout, data, item:DownloadQueue, icon, active_data, active_propname, index): """Demo UIList.""" if self.layout_type in {'DEFAULT', 'COMPACT'}: row = layout.row(align=True) - row.prop(item, "progress", slider=True, text=item.asset_id+" | "+item.asset_attribute) - row.operator("texlib.cancel", icon="X") + if item.alive: + row.prop(item, "progress", slider=True, text=item.asset_id+" | "+item.asset_attribute) + op:TexLibCancelDownload = row.operator("texlib.cancel", icon="X") + op.attribute = item.asset_attribute + op.id = item.asset_id + else: + row.label(text="cancelling") class TEXLIB_UL_Material(UIList): @@ -370,7 +393,7 @@ def monitor_downloads(): return 2 scn = bpy.context.scene - txlb = scn.texlib + txlb:TexLibProps = scn.texlib downloads = txlb.downloads if len(downloads) == 0 and not searching: @@ -392,6 +415,7 @@ def monitor_downloads(): if len(downloads): to_remove = [] + dwn:DownloadQueue for index, dwn in enumerate(downloads): thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) @@ -429,16 +453,19 @@ def monitor_downloads(): return 1.0 -def extract_file(my_file): +def extract_file(my_file:str) -> bool: dir_name = os.path.dirname(my_file) # new_folder = os.path.basename(my_file).split('.')[0] # dir_name = os.path.join(dir_name, new_folder) print("extract "+my_file+" to "+dir_name) - with ZipFile(my_file, 'r') as zObject: - zObject.extractall(path=dir_name) - return dir_name - + try: + with zipfile.ZipFile(my_file, 'r') as zObject: + zObject.extractall(path=dir_name) + return True + except zipfile.BadZipFile: + return False + # Delete the zip file def delete_zip(file_path): if not os.path.exists(file_path): @@ -471,6 +498,9 @@ def download_stream(link:str, file_name:str, thread_id:str, total_length = int(total_length) # TODO a way for calculating the chunk size for data in response.iter_content(chunk_size = 4096): + if thread is not None and thread.cancel: + response.close() + break dl += len(data) f.write(data) @@ -634,7 +664,7 @@ def _get_thread(id:str): return threads[id] return None -classes = [DownloadThread, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibAddToUcupaint, TexLibCancelDownload,TEXLIB_UL_Material +classes = [DownloadQueue, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibAddToUcupaint, TexLibCancelDownload, TEXLIB_UL_Material ,TexLibCancelSearch, TEXLIB_UL_Downloads] def register(): From 35c8ad0ee0877cdb2329429639136fa44c5b2405 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 20 Sep 2023 15:02:51 +0700 Subject: [PATCH 016/283] add overwrite popup --- TexLib.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/TexLib.py b/TexLib.py index a51e7575..c15a912a 100644 --- a/TexLib.py +++ b/TexLib.py @@ -146,8 +146,17 @@ class TexLibDownload(Operator): file_size:IntProperty file_exist:BoolProperty(default=False) + def invoke(self, context, event): + if self.file_exist: + return context.window_manager.invoke_props_dialog(self) + return self.execute(context) + + def draw(self, context:bpy.context): + layout = self.layout + + layout.label(text="Already downloaded. Overwrite?", icon="QUESTION") + def execute(self, context): - lib = assets_lib[self.id] attr_dwn = lib["downloads"][self.attribute] link = attr_dwn["link"] @@ -237,16 +246,9 @@ def draw(self, context): ukuran = round(dwn["size"] / 1000000,2) - check_exist:bool = False lokasi = dwn["location"] - if os.path.exists(lokasi): - files = os.listdir(lokasi) - for f in files: - if mat_id in f: - check_exist = True - break - else: - check_exist = False + + check_exist:bool = _texture_exist(mat_id, lokasi) row = ui_attr.row() @@ -313,7 +315,6 @@ class TexLibCancelSearch(Operator): bl_idname = "texlib.cancel_search" bl_label = "" - def execute(self, context): thread_search = threads[THREAD_SEARCHING] thread_search.cancel = True @@ -635,6 +636,15 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): file_ori.write(json.dumps({"foundAssets":assets})) file_ori.close() +def _texture_exist(asset_id:str, location:str) -> bool: + if os.path.exists(location): + files = os.listdir(location) + for f in files: + if asset_id in f: + return True + + return False + def _get_textures_dir() -> str: file_path = _get_lib_dir() retval = os.path.join(file_path, "textures") + os.sep From 536acf5e87f454d195f3262e3d7058e75fa3a3db Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 21 Sep 2023 16:42:25 +0700 Subject: [PATCH 017/283] add list of downloaded textures --- TexLib.py | 114 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 89 insertions(+), 25 deletions(-) diff --git a/TexLib.py b/TexLib.py index c15a912a..5c39d988 100644 --- a/TexLib.py +++ b/TexLib.py @@ -58,6 +58,47 @@ def update_input_search(self, context): self.searching_download.progress = 0 self.searching_download.alive = True +def change_mode_asset(self, context): + if not len(assets_lib): + read_asset_info() + + last_search.clear() + self.input_search = "" + self.material_items.clear() + + if self.mode_asset == "ONLINE": + pass + else: + if THREAD_SEARCHING in threads: + thread_search = threads[THREAD_SEARCHING] + thread_search.cancel = True + + searching_dwn = self.searching_download + searching_dwn.alive = False + + textures_dir = _get_textures_dir() + tex_lis = os.listdir(textures_dir) + + for tx in tex_lis: + tx_dir = os.path.join(textures_dir, tx) + # print(tx) + attr_lis = os.listdir(tx_dir) + + for att in attr_lis: + attr_dir = os.path.join(tx_dir, att) + # print("--", att) + if _texture_exist(tx, attr_dir): + last_search[tx] = assets_lib[tx] + break + + load_material_items(self.material_items) + # download_previews(False, self.material_items) + load_previews() + load_material_items(self.material_items) + + # print(last_search) + + class TexLibProps(PropertyGroup): page: IntProperty(name="page", default= 0) input_search:StringProperty(name="Search", update=update_input_search) @@ -65,6 +106,16 @@ class TexLibProps(PropertyGroup): material_items:CollectionProperty(type= MaterialItem) material_index:IntProperty(default=0, name="Material index") + mode_asset:EnumProperty( + items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), + name = 'Location', + default = 'ONLINE', + description = 'Location of the PBR Texture.\n' + ' Local: the assets that you have already downloaded.\n' + ' Online: available for download on AmbientCG.com.\n', + update=change_mode_asset + ) + downloads:CollectionProperty(type=DownloadQueue) searching_download:PointerProperty(type=DownloadQueue) selected_download_item:IntProperty(default=0) @@ -202,23 +253,26 @@ def draw(self, context): texlib:TexLibProps = scene.texlib sel_index = texlib.material_index + layout.prop(texlib, "mode_asset", expand=True) - layout.prop(texlib, "input_search") - searching_dwn = texlib.searching_download - - if searching_dwn.alive: - prog = searching_dwn.progress + if texlib.mode_asset == "ONLINE": + layout.prop(texlib, "input_search") + searching_dwn = texlib.searching_download + + if searching_dwn.alive: + prog = searching_dwn.progress - if prog >= 0: - row_search = layout.row() + if prog >= 0: + row_search = layout.row() - if prog < 10: - row_search.label(text="Searching...") - else: - row_search.label(text="Retrieving thumbnails..."+str(prog)+"%") - row_search.operator("texlib.cancel_search", icon="CANCEL") - - + if prog < 10: + row_search.label(text="Searching...") + else: + row_search.prop(searching_dwn, "progress", slider=True, text="Retrieving thumbnails.") + # row_search.label(text="Retrieving thumbnails..."+str(prog)+"%") + row_search.operator("texlib.cancel_search", icon="CANCEL") + + if len(texlib.material_items): my_list = texlib.material_items @@ -278,10 +332,10 @@ def draw(self, context): op.id = sel_mat.name op.file_exist = check_exist - if len(texlib.downloads): - layout.separator() - layout.label(text="Downloads:") - layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") + if len(texlib.downloads): + layout.separator() + layout.label(text="Downloads:") + layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") class TEXLIB_UL_Downloads(UIList): @@ -349,10 +403,13 @@ def load_per_material(file_name:str, material_item): def searching_material(keyword:str, context:Context): scene = context.scene - txlib = scene.texlib + txlib:TexLibProps = scene.texlib thread_search = threads[THREAD_SEARCHING] + if not len(assets_lib): + read_asset_info() + retrieve_assets_info(keyword) thread_search.progress = 10 load_material_items(txlib.material_items) @@ -546,6 +603,9 @@ def download_previews(overwrite_existing:bool, material_items): dl = 0 total_length = int(total_length) for data in response.iter_content(chunk_size = 4096): + if thread_search is not None and thread_search.cancel: + response.close() + return dl += len(data) f.write(data) except Exception as e: @@ -567,11 +627,11 @@ def read_asset_info() -> bool: jsn = json.loads(content) assets_lib.update(jsn) file.close() - print("read ", content) + # print("read ", content) return True return False -def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): +def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 100): base_link = "https://ambientCG.com/api/v2/full_json" params = { 'type': 'Material', @@ -585,7 +645,6 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): dir_name = _get_lib_dir() file_name = os.path.join(dir_name, "lib.json") - file_name_ori = os.path.join(dir_name, "lib-ori.json") response = requests.get(base_link, params=params, verify=False) if not response.status_code == 200: @@ -593,6 +652,9 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): return None assets = response.json()["foundAssets"] + + print("Found ",len(assets), "textures") + file = open(file_name, 'w') # assets_lib = {} @@ -632,9 +694,11 @@ def retrieve_assets_info(keyword:str = '', page:int = 0, limit:int = 10): print("stored to ", file_name) # print("content to ", str(assets_lib)) - file_ori = open(file_name_ori, 'w') - file_ori.write(json.dumps({"foundAssets":assets})) - file_ori.close() + if save_ori: + file_name_ori = os.path.join(dir_name, "lib-ori.json") + file_ori = open(file_name_ori, 'w') + file_ori.write(json.dumps({"foundAssets":assets})) + file_ori.close() def _texture_exist(asset_id:str, location:str) -> bool: if os.path.exists(location): From 32796f94cbe5a2c031753316070aa6045614c762 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 26 Sep 2023 16:08:57 +0700 Subject: [PATCH 018/283] add preference for library path --- TexLib.py | 23 ++++++++++++----------- preferences.py | 31 ++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/TexLib.py b/TexLib.py index 5c39d988..88e4221e 100644 --- a/TexLib.py +++ b/TexLib.py @@ -1,5 +1,6 @@ from bpy.types import Context from .common import * +from .preferences import * from . import lib, Layer from bpy.props import * from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene @@ -92,12 +93,9 @@ def change_mode_asset(self, context): break load_material_items(self.material_items) - # download_previews(False, self.material_items) load_previews() load_material_items(self.material_items) - # print(last_search) - class TexLibProps(PropertyGroup): page: IntProperty(name="page", default= 0) @@ -254,8 +252,9 @@ def draw(self, context): sel_index = texlib.material_index layout.prop(texlib, "mode_asset", expand=True) + local_files_mode = texlib.mode_asset == "DOWNLOADED" - if texlib.mode_asset == "ONLINE": + if not local_files_mode: layout.prop(texlib, "input_search") searching_dwn = texlib.searching_download @@ -295,15 +294,17 @@ def draw(self, context): layout.label(text="Attributes:") for d in downloads: dwn = downloads[d] - ui_attr = layout.split(factor=0.7) # row.alignment = "LEFT" - ukuran = round(dwn["size"] / 1000000,2) - lokasi = dwn["location"] check_exist:bool = _texture_exist(mat_id, lokasi) - + + # if local_files_mode and not check_exist: + # continue + + ui_attr = layout.split(factor=0.7) + row = ui_attr.row() row.label(text=d, ) @@ -326,7 +327,7 @@ def draw(self, context): op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") op.attribute = d op.id = sel_mat.name - + # if not local_files_mode: op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") op.attribute = d op.id = sel_mat.name @@ -724,8 +725,8 @@ def _get_preview_dir() -> str: return retval def _get_lib_dir() -> str: - file_path = get_addon_filepath() - retval = os.path.join(file_path, "library") + os.sep + ypup:YPaintPreferences = get_user_preferences() + retval = ypup.library_location if not os.path.exists(retval): os.mkdir(retval) return retval diff --git a/preferences.py b/preferences.py index 1e074af8..a31c257a 100644 --- a/preferences.py +++ b/preferences.py @@ -97,6 +97,12 @@ class YPaintPreferences(AddonPreferences): min=0, max=59) + library_location : StringProperty( + name = 'Texture library path', + description = 'Location of texture library', + subtype='DIR_PATH', + ) + def draw(self, context): self.layout.prop(self, 'default_new_image_size') self.layout.prop(self, 'image_atlas_size') @@ -109,6 +115,29 @@ def draw(self, context): self.layout.prop(self, 'eevee_next_displacement') self.layout.prop(self, 'developer_mode') self.layout.prop(self, 'parallax_without_baked') + addon_updater_ops.update_settings_ui(self, context) + self.layout.prop(self, 'library_location') + if not self.library_location.strip(): + self.layout.label(text = "Please select the folder of textures library", icon = 'INFO') + +@persistent +def setup_library(scene): + bpy.app.handlers.load_post.remove(setup_library) + ypup:YPaintPreferences = get_user_preferences() + + if not ypup.library_location: + libraries = bpy.context.preferences.filepaths.asset_libraries + if len(libraries): + for lib in libraries: + if os.path.exists(lib.path): + ypup.library_location = lib.path + break + if not ypup.library_location: + home = os.path.expanduser("~") + new_path = os.path.join(home, "ucupaint-library") + os.sep + if not os.path.exists(new_path): + os.mkdir(new_path) + ypup.library_location = new_path if self.developer_mode: box = self.layout.box() @@ -166,8 +195,8 @@ def refresh_float_image_hack(scene): def register(): bpy.utils.register_class(YPaintPreferences) - bpy.app.handlers.save_pre.append(auto_save_images) + bpy.app.handlers.load_post.append(setup_library) bpy.app.handlers.save_post.append(refresh_float_image_hack) def unregister(): From d3f596ec6ba27046349e7852bda685aefe318411 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 27 Sep 2023 13:46:56 +0700 Subject: [PATCH 019/283] add version check --- preferences.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/preferences.py b/preferences.py index a31c257a..f76a6402 100644 --- a/preferences.py +++ b/preferences.py @@ -125,7 +125,7 @@ def setup_library(scene): bpy.app.handlers.load_post.remove(setup_library) ypup:YPaintPreferences = get_user_preferences() - if not ypup.library_location: + if is_greater_than_300() and not ypup.library_location: libraries = bpy.context.preferences.filepaths.asset_libraries if len(libraries): for lib in libraries: From 9100b2f348db855fca7f73be8701fb4489eceebf Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 28 Sep 2023 14:40:51 +0700 Subject: [PATCH 020/283] initial setup of library location --- preferences.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/preferences.py b/preferences.py index f76a6402..ca299ccf 100644 --- a/preferences.py +++ b/preferences.py @@ -117,27 +117,29 @@ def draw(self, context): self.layout.prop(self, 'parallax_without_baked') addon_updater_ops.update_settings_ui(self, context) self.layout.prop(self, 'library_location') - if not self.library_location.strip(): + if self.library_location.strip() == '': self.layout.label(text = "Please select the folder of textures library", icon = 'INFO') -@persistent -def setup_library(scene): - bpy.app.handlers.load_post.remove(setup_library) +def initial_setup_library(): ypup:YPaintPreferences = get_user_preferences() - - if is_greater_than_300() and not ypup.library_location: + if ypup.library_location != '': + return + new_path = '' + default_dir = "ucupaint-library" + + if is_greater_than_300(): libraries = bpy.context.preferences.filepaths.asset_libraries if len(libraries): for lib in libraries: - if os.path.exists(lib.path): - ypup.library_location = lib.path - break - if not ypup.library_location: + new_path = os.path.join(lib.path, default_dir) + os.sep + break + if new_path == '': home = os.path.expanduser("~") - new_path = os.path.join(home, "ucupaint-library") + os.sep - if not os.path.exists(new_path): - os.mkdir(new_path) - ypup.library_location = new_path + new_path = os.path.join(home, default_dir) + os.sep + + if not os.path.exists(new_path): + os.makedirs(new_path) + ypup.library_location = new_path if self.developer_mode: box = self.layout.box() @@ -195,8 +197,8 @@ def refresh_float_image_hack(scene): def register(): bpy.utils.register_class(YPaintPreferences) + initial_setup_library() bpy.app.handlers.save_pre.append(auto_save_images) - bpy.app.handlers.load_post.append(setup_library) bpy.app.handlers.save_post.append(refresh_float_image_hack) def unregister(): From 1ebc0b229daf4e521c7587d16221e27dad37bad1 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 29 Sep 2023 15:05:55 +0700 Subject: [PATCH 021/283] differentiate item list for online and offline --- TexLib.py | 77 ++++++++++++++++++++++++------------------------------- 1 file changed, 33 insertions(+), 44 deletions(-) diff --git a/TexLib.py b/TexLib.py index 88e4221e..3f2e2db2 100644 --- a/TexLib.py +++ b/TexLib.py @@ -62,40 +62,26 @@ def update_input_search(self, context): def change_mode_asset(self, context): if not len(assets_lib): read_asset_info() - - last_search.clear() - self.input_search = "" - self.material_items.clear() + load_previews() if self.mode_asset == "ONLINE": pass else: - if THREAD_SEARCHING in threads: - thread_search = threads[THREAD_SEARCHING] - thread_search.cancel = True - - searching_dwn = self.searching_download - searching_dwn.alive = False - textures_dir = _get_textures_dir() tex_lis = os.listdir(textures_dir) + _offline_files = {} for tx in tex_lis: tx_dir = os.path.join(textures_dir, tx) - # print(tx) attr_lis = os.listdir(tx_dir) for att in attr_lis: attr_dir = os.path.join(tx_dir, att) - # print("--", att) if _texture_exist(tx, attr_dir): - last_search[tx] = assets_lib[tx] - break - - load_material_items(self.material_items) - load_previews() - load_material_items(self.material_items) + _offline_files[tx] = assets_lib[tx] + break + load_material_items(self.downloaded_material_items, _offline_files) class TexLibProps(PropertyGroup): page: IntProperty(name="page", default= 0) @@ -103,6 +89,8 @@ class TexLibProps(PropertyGroup): input_last:StringProperty() material_items:CollectionProperty(type= MaterialItem) material_index:IntProperty(default=0, name="Material index") + downloaded_material_items:CollectionProperty(type= MaterialItem) + downloaded_material_index:IntProperty(default=0, name="Material index") mode_asset:EnumProperty( items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), @@ -161,25 +149,18 @@ class TexLibCancelDownload(Operator): id:StringProperty() def execute(self, context:bpy.context): - print("cancel", self.id, "| attr",self.attribute) - thread_id = _get_thread_id(self.id, self.attribute) thread = _get_thread(thread_id) if thread == None: - print("cancel false", thread_id) return {'CANCELLED'} - - print("cancel true", thread_id) thread.cancel = True - texlib:TexLibProps = context.scene.texlib dwn:DownloadQueue for dwn in texlib.downloads: if dwn.asset_id == self.id and dwn.asset_attribute == self.attribute: dwn.alive = False - print("cancelling >> "+dwn.asset_id) return {'FINISHED'} return {'CANCELLED'} @@ -212,8 +193,6 @@ def execute(self, context): directory = attr_dwn["location"] file_name = os.path.join(directory, attr_dwn["fileName"]) - print("setar =",self.attribute, "selected = "+self.id, "lib =", link) - if not os.path.exists(directory): # print("make dir "+directory) os.makedirs(directory) @@ -249,12 +228,17 @@ def draw(self, context): layout = self.layout scene = context.scene texlib:TexLibProps = scene.texlib - sel_index = texlib.material_index layout.prop(texlib, "mode_asset", expand=True) local_files_mode = texlib.mode_asset == "DOWNLOADED" - if not local_files_mode: + if local_files_mode: + sel_index = texlib.downloaded_material_index + my_list = texlib.downloaded_material_items + else: + sel_index = texlib.material_index + my_list = texlib.material_items + layout.prop(texlib, "input_search") searching_dwn = texlib.searching_download @@ -271,13 +255,17 @@ def draw(self, context): # row_search.label(text="Retrieving thumbnails..."+str(prog)+"%") row_search.operator("texlib.cancel_search", icon="CANCEL") - - if len(texlib.material_items): - my_list = texlib.material_items + # print("list", local_files_mode, ":",sel_index,"/",len(my_list)) + # print("list", local_files_mode, ":",texlib.material_index,"/",len(texlib.material_items)," | ", texlib.downloaded_material_index,"/",len(texlib.downloaded_material_items)) + if len(my_list): layout.separator() layout.label(text="Textures:") - layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") + if local_files_mode: + layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "downloaded_material_items", texlib, "downloaded_material_index") + else: + layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") + if sel_index < len(my_list): sel_mat:MaterialItem = my_list[sel_index] mat_id:str = sel_mat.name @@ -380,11 +368,11 @@ def execute(self, context): return{'FINISHED'} -def load_material_items(material_items): +def load_material_items(material_items, list_tex): material_items.clear() - for i in last_search: + for i in list_tex: new_item:MaterialItem = material_items.add() - item_id = last_search[i]["id"] + item_id = list_tex[i]["id"] new_item.name = item_id if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: new_item.thumb = previews_collection.preview_items[item_id][3] @@ -413,15 +401,14 @@ def searching_material(keyword:str, context:Context): retrieve_assets_info(keyword) thread_search.progress = 10 - load_material_items(txlib.material_items) + load_material_items(txlib.material_items, last_search) download_previews(False, txlib.material_items) thread_search.progress = 90 load_previews() thread_search.progress = 95 - - load_material_items(txlib.material_items) + load_material_items(txlib.material_items, last_search) thread_search.progress = 100 def load_previews(): @@ -434,7 +421,11 @@ def load_previews(): for index, item in enumerate(files): file = dir_name + item my_id = item.split(".")[0] - # print(">>item",item,"file",file) + sizefile = os.path.getsize(file) + # print(">>item",item,"file",file,"size", sizefile) + if sizefile == 0: # detect corrupt image + os.remove(file) + continue loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) @@ -576,8 +567,6 @@ def download_previews(overwrite_existing:bool, material_items): directory = _get_preview_dir() if not os.path.exists(directory): os.mkdir(directory) - print("download to ",directory) - # print("asset",assets_lib) thread_search = threads[THREAD_SEARCHING] progress_initial = thread_search.progress @@ -612,7 +601,7 @@ def download_previews(overwrite_existing:bool, material_items): except Exception as e: print('Error #2 while downloading', link, ':', e) prog = (index + 1) / item_count - print("url = ",prog, ' | ',link,' | ', file_name) + # print("url = ",prog, ' | ',link,' | ', file_name) # refresh list load_per_material(file_name, material_items[index]) From a562cf3c23814cd1803b8a50dfe56cc710f1252c Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 25 Jul 2024 17:18:19 +0700 Subject: [PATCH 022/283] fix rebase problem --- preferences.py | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/preferences.py b/preferences.py index ca299ccf..46e65921 100644 --- a/preferences.py +++ b/preferences.py @@ -115,31 +115,6 @@ def draw(self, context): self.layout.prop(self, 'eevee_next_displacement') self.layout.prop(self, 'developer_mode') self.layout.prop(self, 'parallax_without_baked') - addon_updater_ops.update_settings_ui(self, context) - self.layout.prop(self, 'library_location') - if self.library_location.strip() == '': - self.layout.label(text = "Please select the folder of textures library", icon = 'INFO') - -def initial_setup_library(): - ypup:YPaintPreferences = get_user_preferences() - if ypup.library_location != '': - return - new_path = '' - default_dir = "ucupaint-library" - - if is_greater_than_300(): - libraries = bpy.context.preferences.filepaths.asset_libraries - if len(libraries): - for lib in libraries: - new_path = os.path.join(lib.path, default_dir) + os.sep - break - if new_path == '': - home = os.path.expanduser("~") - new_path = os.path.join(home, default_dir) + os.sep - - if not os.path.exists(new_path): - os.makedirs(new_path) - ypup.library_location = new_path if self.developer_mode: box = self.layout.box() @@ -158,6 +133,29 @@ def initial_setup_library(): check_col = sub_row.column(align=True) check_col.prop(self, "updater_interval_minutes") check_col = sub_row.column(align=True) + + addon_updater_ops.update_settings_ui(self, context) + self.layout.prop(self, 'library_location') + if not self.library_location.strip(): + self.layout.label(text = "Please select the folder of textures library", icon = 'INFO') +@persistent +def setup_library(scene): + bpy.app.handlers.load_post.remove(setup_library) + ypup:YPaintPreferences = get_user_preferences() + + if not ypup.library_location: + libraries = bpy.context.preferences.filepaths.asset_libraries + if len(libraries): + for lib in libraries: + if os.path.exists(lib.path): + ypup.library_location = lib.path + break + if not ypup.library_location: + home = os.path.expanduser("~") + new_path = os.path.join(home, "ucupaint-library") + os.sep + if not os.path.exists(new_path): + os.mkdir(new_path) + ypup.library_location = new_path @persistent def auto_save_images(scene): @@ -197,8 +195,8 @@ def refresh_float_image_hack(scene): def register(): bpy.utils.register_class(YPaintPreferences) - initial_setup_library() bpy.app.handlers.save_pre.append(auto_save_images) + bpy.app.handlers.load_post.append(setup_library) bpy.app.handlers.save_post.append(refresh_float_image_hack) def unregister(): From 0a3d4fc9f2414df527dde13c14a1d441babde03d Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 29 Jul 2024 17:32:22 +0700 Subject: [PATCH 023/283] remove texture attribute with confirmation --- TexLib.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/TexLib.py b/TexLib.py index 3f2e2db2..ead0c7f0 100644 --- a/TexLib.py +++ b/TexLib.py @@ -165,6 +165,35 @@ def execute(self, context:bpy.context): return {'CANCELLED'} +class TexLibRemoveTexture(Operator): + """Remove existing textures""" + + bl_label = "" + bl_idname = "texlib.remove" + attribute:StringProperty() + id:StringProperty() + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + layout = self.layout + layout.label(text="Are you sure to remove this texture?") + + def execute(self, context:bpy.context): + dir = _get_textures_dir() + self.id + os.sep + self.attribute + print("item", self.id," | attr", self.attribute, " | file ", dir) + # remove folder + if os.path.exists(dir): + for root, dirs, files in os.walk(dir, topdown=False): + for name in files: + os.remove(os.path.join(root, name)) + for name in dirs: + os.rmdir(os.path.join(root, name)) + os.rmdir(dir) + return {'FINISHED'} + return {'CANCELLED'} + class TexLibDownload(Operator): """Download textures from source""" @@ -315,7 +344,11 @@ def draw(self, context): op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") op.attribute = d op.id = sel_mat.name - # if not local_files_mode: + + op_remove:TexLibRemoveTexture = btn_row.operator("texlib.remove", icon="REMOVE") + op_remove.attribute = d + op_remove.id = sel_mat.name + op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") op.attribute = d op.id = sel_mat.name @@ -349,6 +382,8 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn if self.layout_type in {'DEFAULT', 'COMPACT'}: row.template_icon(icon_value = item.thumb, scale = 1.0) row.label(text=item.name) + row.label(text="hapus") + elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' @@ -728,7 +763,7 @@ def _get_thread(id:str): return threads[id] return None -classes = [DownloadQueue, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibAddToUcupaint, TexLibCancelDownload, TEXLIB_UL_Material +classes = [DownloadQueue, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibRemoveTexture, TexLibAddToUcupaint, TexLibCancelDownload, TEXLIB_UL_Material ,TexLibCancelSearch, TEXLIB_UL_Downloads] def register(): From e64752b1406f722b81fbe05b29fff2f1d0b85874 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 30 Jul 2024 16:13:29 +0700 Subject: [PATCH 024/283] remove all textures type handle error on search --- TexLib.py | 82 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/TexLib.py b/TexLib.py index ead0c7f0..24ad49a0 100644 --- a/TexLib.py +++ b/TexLib.py @@ -49,6 +49,10 @@ def update_input_search(self, context): last_search.clear() return + # cancel previous search + if THREAD_SEARCHING in threads: + cancel_searching(context) + thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) thread_search.progress = 0 thread_search.cancel = False @@ -165,11 +169,11 @@ def execute(self, context:bpy.context): return {'CANCELLED'} -class TexLibRemoveTexture(Operator): +class TexLibRemoveTextureAttribute(Operator): """Remove existing textures""" bl_label = "" - bl_idname = "texlib.remove" + bl_idname = "texlib.remove_attribute" attribute:StringProperty() id:StringProperty() @@ -181,8 +185,9 @@ def draw(self, context): layout.label(text="Are you sure to remove this texture?") def execute(self, context:bpy.context): - dir = _get_textures_dir() + self.id + os.sep + self.attribute - print("item", self.id," | attr", self.attribute, " | file ", dir) + dir_up = _get_textures_dir() + self.id + dir = dir_up + os.sep + self.attribute + # print("item", self.id," | attr", self.attribute, " | file ", dir) # remove folder if os.path.exists(dir): for root, dirs, files in os.walk(dir, topdown=False): @@ -191,6 +196,12 @@ def execute(self, context:bpy.context): for name in dirs: os.rmdir(os.path.join(root, name)) os.rmdir(dir) + + # remove parent folder if empty + if not os.listdir(dir_up): + os.rmdir(dir_up) + my_list = context.scene.texlib.downloaded_material_items + my_list.remove(my_list.find(self.id)) return {'FINISHED'} return {'CANCELLED'} @@ -290,14 +301,20 @@ def draw(self, context): layout.separator() layout.label(text="Textures:") + col_lay = layout.row() if local_files_mode: - layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "downloaded_material_items", texlib, "downloaded_material_index") + col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "downloaded_material_items", texlib, "downloaded_material_index") else: - layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") + col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") if sel_index < len(my_list): sel_mat:MaterialItem = my_list[sel_index] mat_id:str = sel_mat.name + + if local_files_mode: + del_it = col_lay.operator("texlib.remove_attributes", icon="REMOVE") + del_it.id = mat_id + layout.separator() layout.label(text="Preview:") prev_box = layout.box() @@ -345,7 +362,7 @@ def draw(self, context): op.attribute = d op.id = sel_mat.name - op_remove:TexLibRemoveTexture = btn_row.operator("texlib.remove", icon="REMOVE") + op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") op_remove.attribute = d op_remove.id = sel_mat.name @@ -382,8 +399,6 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn if self.layout_type in {'DEFAULT', 'COMPACT'}: row.template_icon(icon_value = item.thumb, scale = 1.0) row.label(text=item.name) - row.label(text="hapus") - elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' @@ -394,14 +409,45 @@ class TexLibCancelSearch(Operator): bl_label = "" def execute(self, context): - thread_search = threads[THREAD_SEARCHING] - thread_search.cancel = True - texlib = context.scene.texlib - - searching_dwn = texlib.searching_download - searching_dwn.alive = False - + cancel_searching(context) return{'FINISHED'} + +class TexLibRemoveTextureAllAttributes(Operator): + bl_idname = "texlib.remove_attributes" + bl_label = "" + id:StringProperty() + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + layout = self.layout + layout.label(text="Are you sure to remove this textures?") + + def execute(self, context:bpy.context): + dir = _get_textures_dir() + self.id + print("item", self.id, " | file ", dir) + my_list = context.scene.texlib.downloaded_material_items + my_list.remove(my_list.find(self.id)) + # remove folder + if os.path.exists(dir): + for root, dirs, files in os.walk(dir, topdown=False): + for name in files: + os.remove(os.path.join(root, name)) + for name in dirs: + os.rmdir(os.path.join(root, name)) + os.rmdir(dir) + return {'FINISHED'} + + return {'CANCELLED'} + +def cancel_searching(context): + thread_search = threads[THREAD_SEARCHING] + thread_search.cancel = True + texlib = context.scene.texlib + + searching_dwn = texlib.searching_download + searching_dwn.alive = False def load_material_items(material_items, list_tex): material_items.clear() @@ -763,8 +809,8 @@ def _get_thread(id:str): return threads[id] return None -classes = [DownloadQueue, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibRemoveTexture, TexLibAddToUcupaint, TexLibCancelDownload, TEXLIB_UL_Material - ,TexLibCancelSearch, TEXLIB_UL_Downloads] +classes = [DownloadQueue, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibRemoveTextureAttribute, TexLibRemoveTextureAllAttributes, + TexLibAddToUcupaint, TexLibCancelDownload, TEXLIB_UL_Material,TexLibCancelSearch, TEXLIB_UL_Downloads] def register(): for cl in classes: From 3713a826d86605b8981ad62743bead2c2d69cfb4 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 31 Jul 2024 17:26:33 +0700 Subject: [PATCH 025/283] save basic shader to file --- Godot.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ __init__.py | 5 ++++- ui.py | 1 + 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 Godot.py diff --git a/Godot.py b/Godot.py new file mode 100644 index 00000000..f67c4ab7 --- /dev/null +++ b/Godot.py @@ -0,0 +1,53 @@ +from bpy.types import Context +from .common import * +from .preferences import * +from . import lib, Layer +from bpy.props import * +from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene + +import bpy + +# export shader, choose location, save file +class ExportShader(Operator): + """Export to godot shader""" + + bl_label = "Export Shader" + bl_idname = "godot.export" + + filepath: StringProperty(subtype='FILE_PATH', options={'SKIP_SAVE'}) + + def invoke(self, context, event): + context.window_manager.fileselect_add(self) + return {'RUNNING_MODAL'} + + def execute(self, context:bpy.context): + print("Exporting to godot >> "+self.filepath) + content_shader = ''' +shader_type spatial; + +void fragment() { + ALBEDO = vec3(1.0); + } + ''' + + + file = open(self.filepath, "w") + file.write(content_shader) + file.close() + + return {'FINISHED'} + +classes = [ExportShader] + +def register(): + for cl in classes: + bpy.utils.register_class(cl) + + +def unregister(): + for cl in classes: + bpy.utils.unregister_class(cl) + + +if __name__ == "__main__": + register() \ No newline at end of file diff --git a/__init__.py b/__init__.py index b4505436..448d3796 100644 --- a/__init__.py +++ b/__init__.py @@ -43,13 +43,14 @@ imp.reload(BakeToLayer) imp.reload(Root) imp.reload(TexLib) + imp.reload(Godot) imp.reload(load_blend_updates) imp.reload(addon_updater_ops) else: from . import Localization from . import image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences from . import vector_displacement_lib, vector_displacement - from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, load_blend_updates, TexLib + from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, load_blend_updates, TexLib, Godot from . import addon_updater_ops import bpy @@ -77,6 +78,7 @@ def register(): BakeToLayer.register() Root.register() TexLib.register() + Godot.register() load_blend_updates.register() addon_updater_ops.register() @@ -105,6 +107,7 @@ def unregister(): BakeToLayer.unregister() Root.unregister() TexLib.unregister() + Godot.unregister() load_blend_updates.unregister() addon_updater_ops.unregister() diff --git a/ui.py b/ui.py index ddf18512..89bc4690 100644 --- a/ui.py +++ b/ui.py @@ -4063,6 +4063,7 @@ def draw(self, context): col = row.column() col.operator('node.y_bake_channels', text='Bake All Channels', icon_value=lib.get_icon('bake')).only_active_channel = False + col.operator('godot.export', text='Export to godot shader', icon_value=lib.get_icon('color')) col.operator('node.y_rename_ypaint_tree', text='Rename Tree', icon_value=lib.get_icon('rename')) col.separator() From 34a180f9bbabcc0ec95affe6ee3f1f682e689aa7 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 5 Aug 2024 17:39:25 +0700 Subject: [PATCH 026/283] script generation with string format --- Godot.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++--------- TexLib.py | 4 ++- 2 files changed, 72 insertions(+), 14 deletions(-) diff --git a/Godot.py b/Godot.py index f67c4ab7..7d1a2288 100644 --- a/Godot.py +++ b/Godot.py @@ -15,28 +15,84 @@ class ExportShader(Operator): bl_idname = "godot.export" filepath: StringProperty(subtype='FILE_PATH', options={'SKIP_SAVE'}) + - def invoke(self, context, event): - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} - def execute(self, context:bpy.context): - print("Exporting to godot >> "+self.filepath) - content_shader = ''' + script_top = ''' shader_type spatial; -void fragment() { - ALBEDO = vec3(1.0); - } - ''' +''' + script_vars = ''' +uniform sampler2D {0}; +uniform vec2 {1} = vec2({2},{3}); +''' + script_mask_vars = "uniform sampler2D {0};" + script_method = ''' + +void fragment() {{ + vec2 scaled_uv = UV * {}0; + vec4 albedo = texture({}0, scaled_uv); + + ALBEDO = albedo.rgb; +}} +''' + + def execute(self, context): + node = get_active_ypaint_node() + yp = node.node_tree.yp + - file = open(self.filepath, "w") - file.write(content_shader) - file.close() + content_shader = self.script_top + + index = 0 + layer:Layer.YLayer + + for layer in yp.layers: + if layer.enable: + mapping = get_layer_mapping(layer) + + layer_var = "layer_"+str(index) + + scale_var = layer_var + "_scale" + print("pos", mapping.inputs[1].default_value) + print("rot", mapping.inputs[2].default_value) + print("scl", mapping.inputs[3].default_value) + + skala = mapping.inputs[3].default_value + content_shader += self.script_vars.format(layer_var, scale_var, skala.x, skala.y) + + mask_var = layer_var + "_mask" + for idx, msk in enumerate(layer.masks): + mask_scale_var = mask_var + "_scale_"+str(idx) + content_shader += self.script_mask_vars.format(mask_scale_var) + index += 1 + + content_shader += self.script_method.format(scale_var, layer_var) + print(content_shader) return {'FINISHED'} +# def invoke(self, context, event): +# context.window_manager.fileselect_add(self) +# return {'RUNNING_MODAL'} + +# def execute(self, context:bpy.context): +# print("Exporting to godot >> "+self.filepath) +# content_shader = ''' +# shader_type spatial; + +# void fragment() { +# ALBEDO = vec3(1.0); +# } +# ''' + +# file = open(self.filepath, "w") +# file.write(content_shader) +# file.close() + +# return {'FINISHED'} + classes = [ExportShader] def register(): diff --git a/TexLib.py b/TexLib.py index 24ad49a0..5ef3e4ad 100644 --- a/TexLib.py +++ b/TexLib.py @@ -821,7 +821,9 @@ def register(): global previews_collection previews_collection = bpy.utils.previews.new() previews_collection.preview_items = {} - # load_previews() + + if read_asset_info(): + load_previews() bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) From 495575665a29cf4d31adc45c821a23ecfff34a02 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 6 Aug 2024 16:43:05 +0700 Subject: [PATCH 027/283] converter shader script oke --- Godot.py | 65 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/Godot.py b/Godot.py index 7d1a2288..b6e99635 100644 --- a/Godot.py +++ b/Godot.py @@ -18,24 +18,42 @@ class ExportShader(Operator): - script_top = ''' + script_template = ''' shader_type spatial; +{0}vec4 layer(vec4 foreground, vec4 background) {{ + return foreground * foreground.a + background * (1.0 - foreground.a); +}} + +void fragment() {{ +{1} + ALBEDO = mix_all.rgb; +}} ''' + script_vars = ''' uniform sampler2D {0}; uniform vec2 {1} = vec2({2},{3}); ''' script_mask_vars = "uniform sampler2D {0};" - script_method = ''' - -void fragment() {{ - vec2 scaled_uv = UV * {}0; - vec4 albedo = texture({}0, scaled_uv); - ALBEDO = albedo.rgb; -}} -''' + script_fragment_var = ''' + vec2 scaled_uv_{0} = UV * {1}; + vec4 albedo_{0} = texture({2}, scaled_uv_{0});''' + + script_mask_fragment_var = ''' + vec4 mask_{0} = texture({1}, UV); + albedo_{0}.a = mask_{0}.r; +''' + + script_layer_combine_0 = ''' + + vec4 mix_all = layer(albedo_0, albedo_1);''' + + script_layer_combine_next = ''' + mix_all = layer(mix_all, albedo_{0}); +''' + #vec4 albedo = texture({1}, scaled_uv_{0}); def execute(self, context): node = get_active_ypaint_node() @@ -43,11 +61,14 @@ def execute(self, context): - content_shader = self.script_top + # content_shader = self.script_top index = 0 layer:Layer.YLayer + global_vars = "" + fragment_vars = "" + combine_content = "" for layer in yp.layers: if layer.enable: mapping = get_layer_mapping(layer) @@ -61,15 +82,29 @@ def execute(self, context): print("scl", mapping.inputs[3].default_value) skala = mapping.inputs[3].default_value - content_shader += self.script_vars.format(layer_var, scale_var, skala.x, skala.y) + global_vars += self.script_vars.format(layer_var, scale_var, skala.x, skala.y) - mask_var = layer_var + "_mask" + fragment_vars += self.script_fragment_var.format(index, scale_var, layer_var) for idx, msk in enumerate(layer.masks): - mask_scale_var = mask_var + "_scale_"+str(idx) - content_shader += self.script_mask_vars.format(mask_scale_var) + mask_var = layer_var + "_mask_" + str(idx) + # mask_scale_var = mask_var + "_scale_"+str(idx) + global_vars += self.script_mask_vars.format(mask_var) + fragment_vars += self.script_mask_fragment_var.format(index, mask_var) + + global_vars += "\n" + + if index == 1: + combine_content += self.script_layer_combine_0 + elif index > 1: + combine_content += self.script_layer_combine_next.format(index) + index += 1 - content_shader += self.script_method.format(scale_var, layer_var) + fragment_vars += combine_content + + content_shader = self.script_template.format(global_vars, fragment_vars) + + # content_shader += self.script_fragment.format(fragment_vars, "coba") print(content_shader) return {'FINISHED'} From 3d8f92bc47c8c7bce80cd78eff1515a89056b386 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 6 Aug 2024 17:29:37 +0700 Subject: [PATCH 028/283] copy textures --- Godot.py | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/Godot.py b/Godot.py index b6e99635..24af2152 100644 --- a/Godot.py +++ b/Godot.py @@ -1,3 +1,4 @@ +import shutil from bpy.types import Context from .common import * from .preferences import * @@ -58,10 +59,6 @@ class ExportShader(Operator): def execute(self, context): node = get_active_ypaint_node() yp = node.node_tree.yp - - - - # content_shader = self.script_top index = 0 layer:Layer.YLayer @@ -69,6 +66,12 @@ def execute(self, context): global_vars = "" fragment_vars = "" combine_content = "" + + # get directory of filepath + my_directory = os.path.dirname(self.filepath) + if not os.path.exists(my_directory): + os.makedirs(my_directory) + for layer in yp.layers: if layer.enable: mapping = get_layer_mapping(layer) @@ -83,8 +86,23 @@ def execute(self, context): skala = mapping.inputs[3].default_value global_vars += self.script_vars.format(layer_var, scale_var, skala.x, skala.y) - fragment_vars += self.script_fragment_var.format(index, scale_var, layer_var) + + source = get_layer_source(layer) + + image_path = source.image.filepath_from_user() + + # copy to directory + print("copy ", image_path, " to ", my_directory) + shutil.copy(image_path, my_directory) + + print("filepath ", index, " = ",source.image.filepath_from_user()) + print("rawpath ", index, " = ",source.image.filepath) + print("path user ", index, " = ",source.image.filepath_raw) + # if source == 'FILE': + # else: + # print("layer ", index, " = ",source) + for idx, msk in enumerate(layer.masks): mask_var = layer_var + "_mask_" + str(idx) # mask_scale_var = mask_var + "_scale_"+str(idx) @@ -106,11 +124,16 @@ def execute(self, context): # content_shader += self.script_fragment.format(fragment_vars, "coba") print(content_shader) + + file = open(self.filepath, "w") + file.write(content_shader) + file.close() + return {'FINISHED'} -# def invoke(self, context, event): -# context.window_manager.fileselect_add(self) -# return {'RUNNING_MODAL'} + def invoke(self, context, event): + context.window_manager.fileselect_add(self) + return {'RUNNING_MODAL'} # def execute(self, context:bpy.context): # print("Exporting to godot >> "+self.filepath) From 3c8f5959e38b6a406ba99db6665da403c515894a Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 7 Aug 2024 16:47:17 +0700 Subject: [PATCH 029/283] generate godot's material --- Godot.py | 119 ++++++++++++++++++++++--------- godot4/scripts/blender_import.gd | 43 +++++++++++ 2 files changed, 128 insertions(+), 34 deletions(-) create mode 100644 godot4/scripts/blender_import.gd diff --git a/Godot.py b/Godot.py index 24af2152..2c0709c1 100644 --- a/Godot.py +++ b/Godot.py @@ -1,8 +1,9 @@ import shutil +import subprocess from bpy.types import Context from .common import * from .preferences import * -from . import lib, Layer +from . import lib, Layer, Mask from bpy.props import * from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene @@ -17,7 +18,9 @@ class ExportShader(Operator): filepath: StringProperty(subtype='FILE_PATH', options={'SKIP_SAVE'}) - + use_shortcut = True + + temp_godot = "godot4/" script_template = ''' shader_type spatial; @@ -34,7 +37,7 @@ class ExportShader(Operator): script_vars = ''' uniform sampler2D {0}; -uniform vec2 {1} = vec2({2},{3}); +uniform vec2 {1} = vec2({2},{3}); ''' script_mask_vars = "uniform sampler2D {0};" @@ -59,6 +62,7 @@ class ExportShader(Operator): def execute(self, context): node = get_active_ypaint_node() yp = node.node_tree.yp + index = 0 layer:Layer.YLayer @@ -68,9 +72,17 @@ def execute(self, context): combine_content = "" # get directory of filepath - my_directory = os.path.dirname(self.filepath) - if not os.path.exists(my_directory): - os.makedirs(my_directory) + my_directory = "/home/bocilmania/Documents/projects/blender/ekspor/" + # addon directory + addon_dir = os.path.dirname(os.path.realpath(__file__)) + + base_arg = ["godot", "--headless", "--path", os.path.join(addon_dir, self.temp_godot)] + asset_args = [] + + if not self.use_shortcut: + my_directory = os.path.dirname(self.filepath) + if not os.path.exists(my_directory): + os.makedirs(my_directory) for layer in yp.layers: if layer.enable: @@ -80,9 +92,9 @@ def execute(self, context): scale_var = layer_var + "_scale" - print("pos", mapping.inputs[1].default_value) - print("rot", mapping.inputs[2].default_value) - print("scl", mapping.inputs[3].default_value) + # print("pos", mapping.inputs[1].default_value) + # print("rot", mapping.inputs[2].default_value) + # print("scl", mapping.inputs[3].default_value) skala = mapping.inputs[3].default_value global_vars += self.script_vars.format(layer_var, scale_var, skala.x, skala.y) @@ -92,23 +104,39 @@ def execute(self, context): image_path = source.image.filepath_from_user() + asset_args.append(layer_var) + asset_args.append(bpy.path.basename(image_path)) + # copy to directory print("copy ", image_path, " to ", my_directory) shutil.copy(image_path, my_directory) - print("filepath ", index, " = ",source.image.filepath_from_user()) - print("rawpath ", index, " = ",source.image.filepath) - print("path user ", index, " = ",source.image.filepath_raw) - # if source == 'FILE': - # else: - # print("layer ", index, " = ",source) - + # print("filepath ", index, " = ",source.image.filepath_from_user()) + # print("rawpath ", index, " = ",source.image.filepath) + # print("path user ", index, " = ",source.image.filepath_raw) + msk:Mask.YLayerMask for idx, msk in enumerate(layer.masks): mask_var = layer_var + "_mask_" + str(idx) - # mask_scale_var = mask_var + "_scale_"+str(idx) global_vars += self.script_mask_vars.format(mask_var) fragment_vars += self.script_mask_fragment_var.format(index, mask_var) + mask_tree = get_mask_tree(msk) + mask_source = mask_tree.nodes.get(msk.source) + + mask_image_path = mask_source.image.filepath_from_user() + + if mask_image_path == "": + print("unpack item ", msk.name) + bpy.ops.file.unpack_item(id_name=msk.name, method='WRITE_ORIGINAL') + mask_image_path = mask_source.image.filepath_from_user() + else: + print("mask path exist ", mask_image_path) + + asset_args.append(mask_var) + asset_args.append(bpy.path.basename(mask_image_path)) + + shutil.copy(mask_image_path, my_directory) + print("copy ", mask_image_path, " to ", my_directory) global_vars += "\n" if index == 1: @@ -118,6 +146,7 @@ def execute(self, context): index += 1 + # print("parameter ", asset_args) fragment_vars += combine_content content_shader = self.script_template.format(global_vars, fragment_vars) @@ -125,31 +154,53 @@ def execute(self, context): # content_shader += self.script_fragment.format(fragment_vars, "coba") print(content_shader) + if self.use_shortcut: + self.filepath = os.path.join(my_directory, "box.gdshader") + + temp_folder = os.path.join(addon_dir, self.temp_godot, "assets") + + # delete content of temp folder + for filename in os.listdir(temp_folder): + file_path = os.path.join(temp_folder, filename) + try: + if os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + except Exception as e: + print('Failed to delete %s. Reason: %s' % (file_path, e)) + + # copy to temp folder + for filename in os.listdir(my_directory): + file_path = os.path.join(my_directory, filename) + shutil.copy(file_path, temp_folder) + + print("addon dir ", addon_dir) + + name_asset = bpy.path.display_name_from_filepath(self.filepath) + + print("file name", name_asset) + file = open(self.filepath, "w") file.write(content_shader) file.close() + all_params = base_arg + ["-s", "scripts/blender_import.gd", "--", name_asset] + asset_args + print("all params ", all_params) + + print(subprocess.run(base_arg + ["--import"], capture_output=True)) + print(subprocess.run(all_params, capture_output=True)) + print(subprocess.run(base_arg + ["--import"], capture_output=True)) + return {'FINISHED'} def invoke(self, context, event): - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} - -# def execute(self, context:bpy.context): -# print("Exporting to godot >> "+self.filepath) -# content_shader = ''' -# shader_type spatial; - -# void fragment() { -# ALBEDO = vec3(1.0); -# } -# ''' + if self.use_shortcut: + return self.execute(context) + else: + context.window_manager.fileselect_add(self) + return {'FINISHED'} -# file = open(self.filepath, "w") -# file.write(content_shader) -# file.close() - -# return {'FINISHED'} classes = [ExportShader] diff --git a/godot4/scripts/blender_import.gd b/godot4/scripts/blender_import.gd new file mode 100644 index 00000000..cf9031f4 --- /dev/null +++ b/godot4/scripts/blender_import.gd @@ -0,0 +1,43 @@ +extends SceneTree + + +func _init(): + print("init blender_import") + + var asset_dir = "res://assets" + + var args = OS.get_cmdline_user_args() + + print("argss "+str(args)) + if args.size() == 0: + print("No arguments passed") + quit() + return + + for arg in args: + print(arg) + + var name_asset = args[0] + + var new_material = ShaderMaterial.new() + var shader = load(asset_dir+"/%s.gdshader" % name_asset) + + # set shader to material + new_material.shader = shader + + var dict = {} + for i in range(0, round(args.size() - 1)/2): + var idx_key = 1 + i * 2 + var idx_val = idx_key + 1 + dict[args[idx_key]] = args[idx_val] + print(dict) + + for key in dict: + new_material.set_shader_parameter(key, load(asset_dir+"/"+dict[key])) + # new_material.set_shader_parameter("layer_0", load("./Bricks094_1K-JPG_Color.jpg")) + + ResourceSaver.save(new_material, asset_dir+"/%s.tres" % name_asset) + quit() + + + From df3a9d8d346c04a45fe6672cd6ba9d3289287a29 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 8 Aug 2024 17:37:37 +0700 Subject: [PATCH 030/283] export to godot project --- Godot.py | 115 +++++++++++++++++++++++++-------------- godot4/blender_import.gd | 43 +++++++++++++++ 2 files changed, 118 insertions(+), 40 deletions(-) create mode 100644 godot4/blender_import.gd diff --git a/Godot.py b/Godot.py index 2c0709c1..6c79eebb 100644 --- a/Godot.py +++ b/Godot.py @@ -18,9 +18,9 @@ class ExportShader(Operator): filepath: StringProperty(subtype='FILE_PATH', options={'SKIP_SAVE'}) - use_shortcut = True + use_shortcut = False - temp_godot = "godot4/" + godot_directory = "/home/bocilmania/Documents/projects/godot/witch/" script_template = ''' shader_type spatial; @@ -58,12 +58,48 @@ class ExportShader(Operator): mix_all = layer(mix_all, albedo_{0}); ''' #vec4 albedo = texture({1}, scaled_uv_{0}); + + def get_godot_directory(self, path:str): + + current_dir = os.path.dirname(path) + godot_project_dir = "" + + while godot_project_dir == "": + for filename in os.listdir(current_dir): + fl = os.path.join(current_dir, filename) + if os.path.isfile(fl): + if filename == "project.godot": + godot_project_dir = current_dir + break + # print("check ", filename, " = ", fl) + # move up directory + + parent_dir = os.path.dirname(current_dir) + if parent_dir == current_dir: + # print("break here ", current_dir) + break + current_dir = parent_dir + print("godot project ", godot_project_dir) + + return godot_project_dir + def fix_filename(self, filename:str): + base, ext = os.path.splitext(filename) + retval = filename + + if ext != ".gdshader": + retval = base + ".gdshader" + else: + print("File extension is already .gdshader") + + print(f"File extension changed to: {retval}") + return retval + def execute(self, context): node = get_active_ypaint_node() yp = node.node_tree.yp - + print("====================================") index = 0 layer:Layer.YLayer @@ -72,17 +108,40 @@ def execute(self, context): combine_content = "" # get directory of filepath - my_directory = "/home/bocilmania/Documents/projects/blender/ekspor/" + my_directory = "/home/bocilmania/Documents/projects/godot/witch/models/box" # addon directory addon_dir = os.path.dirname(os.path.realpath(__file__)) - base_arg = ["godot", "--headless", "--path", os.path.join(addon_dir, self.temp_godot)] - asset_args = [] + + self.godot_directory = self.get_godot_directory(self.filepath) - if not self.use_shortcut: + if self.godot_directory == "": + self.report({'ERROR'}, "This is not a godot directory") + return {'CANCELLED'} + + if self.use_shortcut: + self.filepath = os.path.join(my_directory, "box.gdshader") + else: my_directory = os.path.dirname(self.filepath) - if not os.path.exists(my_directory): - os.makedirs(my_directory) + + + self.filepath = self.fix_filename(self.filepath) + + print("save to ", self.filepath, " in ", self.godot_directory) + + base_arg = ["godot", "--headless", "--path", self.godot_directory] + asset_args = [] + + relative_path = os.path.relpath(self.filepath, self.godot_directory) + relative_path = os.path.dirname(relative_path) + + print(f"Relative path: {relative_path}") + + if not os.path.exists(my_directory): + print("create directory ", my_directory) + os.makedirs(my_directory) + else: + print("directory exist ", my_directory) for layer in yp.layers: if layer.enable: @@ -92,10 +151,6 @@ def execute(self, context): scale_var = layer_var + "_scale" - # print("pos", mapping.inputs[1].default_value) - # print("rot", mapping.inputs[2].default_value) - # print("scl", mapping.inputs[3].default_value) - skala = mapping.inputs[3].default_value global_vars += self.script_vars.format(layer_var, scale_var, skala.x, skala.y) fragment_vars += self.script_fragment_var.format(index, scale_var, layer_var) @@ -151,31 +206,10 @@ def execute(self, context): content_shader = self.script_template.format(global_vars, fragment_vars) - # content_shader += self.script_fragment.format(fragment_vars, "coba") print(content_shader) - if self.use_shortcut: - self.filepath = os.path.join(my_directory, "box.gdshader") - - temp_folder = os.path.join(addon_dir, self.temp_godot, "assets") - - # delete content of temp folder - for filename in os.listdir(temp_folder): - file_path = os.path.join(temp_folder, filename) - try: - if os.path.isfile(file_path) or os.path.islink(file_path): - os.unlink(file_path) - elif os.path.isdir(file_path): - shutil.rmtree(file_path) - except Exception as e: - print('Failed to delete %s. Reason: %s' % (file_path, e)) - - # copy to temp folder - for filename in os.listdir(my_directory): - file_path = os.path.join(my_directory, filename) - shutil.copy(file_path, temp_folder) - - print("addon dir ", addon_dir) + script_location = os.path.join(addon_dir, "godot4", "blender_import.gd") + print("addon dir ", script_location) name_asset = bpy.path.display_name_from_filepath(self.filepath) @@ -185,10 +219,11 @@ def execute(self, context): file.write(content_shader) file.close() - all_params = base_arg + ["-s", "scripts/blender_import.gd", "--", name_asset] + asset_args - print("all params ", all_params) - + all_params = base_arg + ["-s", script_location, "--", name_asset, relative_path] + asset_args + print("all params=", " ".join(all_params)) + print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") print(subprocess.run(base_arg + ["--import"], capture_output=True)) + print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") print(subprocess.run(all_params, capture_output=True)) print(subprocess.run(base_arg + ["--import"], capture_output=True)) @@ -199,7 +234,7 @@ def invoke(self, context, event): return self.execute(context) else: context.window_manager.fileselect_add(self) - return {'FINISHED'} + return {'RUNNING_MODAL'} classes = [ExportShader] diff --git a/godot4/blender_import.gd b/godot4/blender_import.gd new file mode 100644 index 00000000..5c87003b --- /dev/null +++ b/godot4/blender_import.gd @@ -0,0 +1,43 @@ +extends SceneTree + + +func _init(): + print("init blender_import") + + + var args = OS.get_cmdline_user_args() + + print("argss "+str(args)) + if args.size() == 0: + print("No arguments passed") + quit() + return + + for arg in args: + print(arg) + + var asset_dir = "res://" + args[1] + var name_asset = args[0] + + var new_material = ShaderMaterial.new() + var shader = load(asset_dir+"/%s.gdshader" % name_asset) + + # set shader to material + new_material.shader = shader + + var dict = {} + for i in range(1, round(args.size())/2): + var idx_key = i * 2 + var idx_val = idx_key + 1 + dict[args[idx_key]] = args[idx_val] + print(dict) + + for key in dict: + new_material.set_shader_parameter(key, load(asset_dir+"/"+dict[key])) + # new_material.set_shader_parameter("layer_0", load("./Bricks094_1K-JPG_Color.jpg")) + + ResourceSaver.save(new_material, asset_dir+"/%s.tres" % name_asset) + quit() + + + From e3b3bf70741edf7513130ce5f51b1ba8aec60f46 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 9 Aug 2024 17:38:31 +0700 Subject: [PATCH 031/283] roughness not done --- Godot.py | 127 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 95 insertions(+), 32 deletions(-) diff --git a/Godot.py b/Godot.py index 6c79eebb..de6673a2 100644 --- a/Godot.py +++ b/Godot.py @@ -18,7 +18,8 @@ class ExportShader(Operator): filepath: StringProperty(subtype='FILE_PATH', options={'SKIP_SAVE'}) - use_shortcut = False + use_shortcut = True + shader_generation_test = True godot_directory = "/home/bocilmania/Documents/projects/godot/witch/" @@ -30,7 +31,7 @@ class ExportShader(Operator): void fragment() {{ {1} - ALBEDO = mix_all.rgb; + ALBEDO = albedo_all.rgb; }} ''' @@ -39,6 +40,10 @@ class ExportShader(Operator): uniform sampler2D {0}; uniform vec2 {1} = vec2({2},{3}); ''' + script_vars_roughness = "uniform sampler2D {}_roughness;\n" + + script_vars_normal = "uniform sampler2D {}_normal;\n" + script_mask_vars = "uniform sampler2D {0};" script_fragment_var = ''' @@ -50,12 +55,27 @@ class ExportShader(Operator): albedo_{0}.a = mask_{0}.r; ''' - script_layer_combine_0 = ''' + script_albedo_combine_0 = ''' - vec4 mix_all = layer(albedo_0, albedo_1);''' + vec4 albedo_all = layer(albedo_0, albedo_1);''' - script_layer_combine_next = ''' - mix_all = layer(mix_all, albedo_{0}); + script_albedo_combine_next = ''' + albedo_all = layer(albedo_all, albedo_{0}); +''' + + + script_roughness_combine_0 = ''' + + vec4 roughness_all = layer(roughness_{0}, roughness_{1});''' + + script_roughness_combine_next = ''' + roughness_all = layer(roughness_all, roughness_{0}); +''' + script_roughness_fragment = ''' + vec4 roughness_texture_channel = vec4(0.33, 0.33, 0.33, 0.0); + float rough = dot(roughness_all, roughness_texture_channel); + + ROUGHNESS = rough; ''' #vec4 albedo = texture({1}, scaled_uv_{0}); @@ -112,18 +132,22 @@ def execute(self, context): # addon directory addon_dir = os.path.dirname(os.path.realpath(__file__)) - - self.godot_directory = self.get_godot_directory(self.filepath) - - if self.godot_directory == "": - self.report({'ERROR'}, "This is not a godot directory") - return {'CANCELLED'} - if self.use_shortcut: self.filepath = os.path.join(my_directory, "box.gdshader") else: my_directory = os.path.dirname(self.filepath) + if not os.path.exists(my_directory): + print("create directory ", my_directory) + os.makedirs(my_directory) + else: + print("directory exist ", my_directory) + + self.godot_directory = self.get_godot_directory(self.filepath) + + if self.godot_directory == "": + self.report({'ERROR'}, "This is not a godot directory") + return {'CANCELLED'} self.filepath = self.fix_filename(self.filepath) @@ -137,13 +161,10 @@ def execute(self, context): print(f"Relative path: {relative_path}") - if not os.path.exists(my_directory): - print("create directory ", my_directory) - os.makedirs(my_directory) - else: - print("directory exist ", my_directory) + + roughness_overrides = [] - for layer in yp.layers: + for layer_idx, layer in enumerate(yp.layers): if layer.enable: mapping = get_layer_mapping(layer) @@ -166,6 +187,39 @@ def execute(self, context): print("copy ", image_path, " to ", my_directory) shutil.copy(image_path, my_directory) + yp = layer.id_data.yp + + channel:Layer.YLayerChannel + for id_ch, channel in enumerate(layer.channels): + ch_name = yp.channels[id_ch].name + print("channel ", channel.name, " enable ", channel.enable, " name_", yp.channels[id_ch].name) + if channel.enable: + ch_image_path = "" + ch_image_path_1 = "" + + if channel.override: + source_ch = get_channel_source(channel, layer) + ch_image_path = source_ch.image.filepath_from_user() + + print("channel path ", id_ch, " = ",ch_image_path) + + if channel.override_1: + source_ch_1 = get_channel_source_1(channel, layer) + ch_image_path_1 = source_ch_1.image.filepath_from_user() + + print("channel path 1", id_ch, " = ",ch_image_path_1) + + if ch_image_path != "": + shutil.copy(ch_image_path, my_directory) + if ch_image_path_1 != "": + shutil.copy(ch_image_path_1, my_directory) + + if ch_name == "Roughness": + global_vars += self.script_vars_roughness.format(layer_var) + roughness_overrides.append(layer_idx) + elif ch_name == "Normal": + global_vars += self.script_vars_normal.format(layer_var) + # print("filepath ", index, " = ",source.image.filepath_from_user()) # print("rawpath ", index, " = ",source.image.filepath) # print("path user ", index, " = ",source.image.filepath_raw) @@ -195,12 +249,20 @@ def execute(self, context): global_vars += "\n" if index == 1: - combine_content += self.script_layer_combine_0 + combine_content += self.script_albedo_combine_0 elif index > 1: - combine_content += self.script_layer_combine_next.format(index) + combine_content += self.script_albedo_combine_next.format(index) index += 1 + if len(roughness_overrides) > 0: + if len(roughness_overrides) == 1: + combine_content += ''' + vec4 roughness_all = roughness_{}; +'''.format(roughness_overrides[0]) + for lyr_idx, lyr in enumerate(roughness_overrides): + pass + # print("parameter ", asset_args) fragment_vars += combine_content @@ -215,17 +277,18 @@ def execute(self, context): print("file name", name_asset) - file = open(self.filepath, "w") - file.write(content_shader) - file.close() - - all_params = base_arg + ["-s", script_location, "--", name_asset, relative_path] + asset_args - print("all params=", " ".join(all_params)) - print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - print(subprocess.run(base_arg + ["--import"], capture_output=True)) - print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - print(subprocess.run(all_params, capture_output=True)) - print(subprocess.run(base_arg + ["--import"], capture_output=True)) + if not self.shader_generation_test: + file = open(self.filepath, "w") + file.write(content_shader) + file.close() + + all_params = base_arg + ["-s", script_location, "--", name_asset, relative_path] + asset_args + print("all params=", " ".join(all_params)) + print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + print(subprocess.run(base_arg + ["--import"], capture_output=True)) + print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + print(subprocess.run(all_params, capture_output=True)) + print(subprocess.run(base_arg + ["--import"], capture_output=True)) return {'FINISHED'} From c458e21f8e64fad79d741dae6819d04785633994 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 12 Aug 2024 15:20:51 +0700 Subject: [PATCH 032/283] rougness & normal --- Godot.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 14 deletions(-) diff --git a/Godot.py b/Godot.py index de6673a2..56738cca 100644 --- a/Godot.py +++ b/Godot.py @@ -19,18 +19,19 @@ class ExportShader(Operator): filepath: StringProperty(subtype='FILE_PATH', options={'SKIP_SAVE'}) use_shortcut = True - shader_generation_test = True + shader_generation_test = False godot_directory = "/home/bocilmania/Documents/projects/godot/witch/" script_template = ''' shader_type spatial; + +uniform float normal_depth = 1.0; {0}vec4 layer(vec4 foreground, vec4 background) {{ return foreground * foreground.a + background * (1.0 - foreground.a); }} -void fragment() {{ -{1} +void fragment() {{ {1} ALBEDO = albedo_all.rgb; }} @@ -47,13 +48,23 @@ class ExportShader(Operator): script_mask_vars = "uniform sampler2D {0};" script_fragment_var = ''' + vec2 scaled_uv_{0} = UV * {1}; vec4 albedo_{0} = texture({2}, scaled_uv_{0});''' + script_fragment_roughness_var = ''' + vec4 roughness_{0} = texture({1}, scaled_uv_{0});''' + script_fragment_normal_var = ''' + vec4 normal_{0} = texture({1}, scaled_uv_{0});''' + script_mask_fragment_var = ''' vec4 mask_{0} = texture({1}, UV); - albedo_{0}.a = mask_{0}.r; -''' + albedo_{0}.a = mask_{0}.r;''' + script_mask_normal_var = ''' + normal_{0}.a = mask_{0}.r;''' + script_mask_roughness_var = ''' + roughness_{0}.a = mask_{0}.r;''' + script_albedo_combine_0 = ''' @@ -63,9 +74,10 @@ class ExportShader(Operator): albedo_all = layer(albedo_all, albedo_{0}); ''' - + script_roughness_1 = ''' + vec4 roughness_all = roughness_{}; +''' script_roughness_combine_0 = ''' - vec4 roughness_all = layer(roughness_{0}, roughness_{1});''' script_roughness_combine_next = ''' @@ -77,6 +89,20 @@ class ExportShader(Operator): ROUGHNESS = rough; ''' + + script_normal_1 = ''' + vec4 normal_all = normal_{}; +''' + script_normal_combine_0 = ''' + vec4 normal_all = layer(normal_{0}, normal_{1});''' + + script_normal_combine_next = ''' + normal_all = layer(normal_all, normal_{0}); +''' + script_normal_fragment = ''' + NORMAL_MAP = normal_all.rgb; + NORMAL_MAP_DEPTH = normal_depth; +''' #vec4 albedo = texture({1}, scaled_uv_{0}); def get_godot_directory(self, path:str): @@ -163,6 +189,7 @@ def execute(self, context): roughness_overrides = [] + normal_overrides = [] for layer_idx, layer in enumerate(yp.layers): if layer.enable: @@ -217,8 +244,21 @@ def execute(self, context): if ch_name == "Roughness": global_vars += self.script_vars_roughness.format(layer_var) roughness_overrides.append(layer_idx) + + layer_roughness = layer_var + "_roughness" + asset_args.append(layer_roughness) + asset_args.append(bpy.path.basename(ch_image_path)) + fragment_vars += self.script_fragment_roughness_var.format(index, layer_roughness) + elif ch_name == "Normal": global_vars += self.script_vars_normal.format(layer_var) + normal_overrides.append(layer_idx) + + layer_normal = layer_var + "_normal" + asset_args.append(layer_normal) + asset_args.append(bpy.path.basename(ch_image_path_1)) # todo : override 0 or override 1 + fragment_vars += self.script_fragment_normal_var.format(index, layer_normal) + # print("filepath ", index, " = ",source.image.filepath_from_user()) # print("rawpath ", index, " = ",source.image.filepath) @@ -229,6 +269,12 @@ def execute(self, context): global_vars += self.script_mask_vars.format(mask_var) fragment_vars += self.script_mask_fragment_var.format(index, mask_var) + if layer_idx in roughness_overrides: + fragment_vars += self.script_mask_roughness_var.format(index) + if layer_idx in normal_overrides: + fragment_vars += self.script_mask_normal_var.format(index) + + mask_tree = get_mask_tree(msk) mask_source = mask_tree.nodes.get(msk.source) @@ -257,13 +303,29 @@ def execute(self, context): if len(roughness_overrides) > 0: if len(roughness_overrides) == 1: - combine_content += ''' - vec4 roughness_all = roughness_{}; -'''.format(roughness_overrides[0]) - for lyr_idx, lyr in enumerate(roughness_overrides): - pass - - # print("parameter ", asset_args) + combine_content += self.script_roughness_1.format(roughness_overrides[0]) + else: + for lyr_idx, lyr in enumerate(roughness_overrides): + if lyr_idx == 1: + combine_content += self.script_roughness_combine_0.format(roughness_overrides[lyr_idx - 1], roughness_overrides[lyr_idx]) + elif lyr_idx > 1: + combine_content += self.script_roughness_combine_next.format(lyr) + + combine_content += self.script_roughness_fragment + + if len(normal_overrides) > 0: + if len(normal_overrides) == 1: + combine_content += self.script_normal_1.format(normal_overrides[0]) + else: + for lyr_idx, lyr in enumerate(normal_overrides): + if lyr_idx == 1: + combine_content += self.script_normal_combine_0.format(normal_overrides[lyr_idx - 1], normal_overrides[lyr_idx]) + elif lyr_idx > 1: + combine_content += self.script_normal_combine_next.format(lyr) + + combine_content += self.script_normal_fragment + + print("parameter ", asset_args) fragment_vars += combine_content content_shader = self.script_template.format(global_vars, fragment_vars) From 58f2b9f6be927d8a76f486e3ba4c0e6b5554d21f Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 16 Aug 2024 17:12:47 +0700 Subject: [PATCH 033/283] check choices --- TexLib.py | 143 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 85 insertions(+), 58 deletions(-) diff --git a/TexLib.py b/TexLib.py index 5ef3e4ad..b69c360b 100644 --- a/TexLib.py +++ b/TexLib.py @@ -34,7 +34,11 @@ class DownloadQueue(PropertyGroup): subtype = 'PERCENTAGE' ) - +def update_check_all(self, context): + self.check_local = self.check_all + self.check_ambiencg = self.check_all + self.check_polyhaven = self.check_all + def update_input_search(self, context): if self.input_last == self.input_search: print("no search:"+self.input_search) @@ -68,43 +72,48 @@ def change_mode_asset(self, context): read_asset_info() load_previews() - if self.mode_asset == "ONLINE": - pass - else: - textures_dir = _get_textures_dir() - tex_lis = os.listdir(textures_dir) + # if self.mode_asset == "ONLINE": + # pass + # else: + # textures_dir = _get_textures_dir() + # tex_lis = os.listdir(textures_dir) - _offline_files = {} - for tx in tex_lis: - tx_dir = os.path.join(textures_dir, tx) - attr_lis = os.listdir(tx_dir) + # _offline_files = {} + # for tx in tex_lis: + # tx_dir = os.path.join(textures_dir, tx) + # attr_lis = os.listdir(tx_dir) - for att in attr_lis: - attr_dir = os.path.join(tx_dir, att) - if _texture_exist(tx, attr_dir): - _offline_files[tx] = assets_lib[tx] - break + # for att in attr_lis: + # attr_dir = os.path.join(tx_dir, att) + # if _texture_exist(tx, attr_dir): + # _offline_files[tx] = assets_lib[tx] + # break - load_material_items(self.downloaded_material_items, _offline_files) + # load_material_items(self.downloaded_material_items, _offline_files) class TexLibProps(PropertyGroup): page: IntProperty(name="page", default= 0) input_search:StringProperty(name="Search", update=update_input_search) + check_all:BoolProperty(name="Check All", default=True, update=update_check_all) + check_local:BoolProperty(name="Local", default=True) + check_ambiencg:BoolProperty(name="AmbientCG", default=True) + check_polyhaven:BoolProperty(name="Polyhaven", default=True) + input_last:StringProperty() material_items:CollectionProperty(type= MaterialItem) material_index:IntProperty(default=0, name="Material index") downloaded_material_items:CollectionProperty(type= MaterialItem) downloaded_material_index:IntProperty(default=0, name="Material index") - mode_asset:EnumProperty( - items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), - name = 'Location', - default = 'ONLINE', - description = 'Location of the PBR Texture.\n' - ' Local: the assets that you have already downloaded.\n' - ' Online: available for download on AmbientCG.com.\n', - update=change_mode_asset - ) + # mode_asset:EnumProperty( + # items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), + # name = 'Location', + # default = 'ONLINE', + # description = 'Location of the PBR Texture.\n' + # ' Local: the assets that you have already downloaded.\n' + # ' Online: available for download on AmbientCG.com.\n', + # update=change_mode_asset + # ) downloads:CollectionProperty(type=DownloadQueue) searching_download:PointerProperty(type=DownloadQueue) @@ -269,31 +278,36 @@ def draw(self, context): scene = context.scene texlib:TexLibProps = scene.texlib - layout.prop(texlib, "mode_asset", expand=True) - local_files_mode = texlib.mode_asset == "DOWNLOADED" + # layout.prop(texlib, "mode_asset", expand=True) + # local_files_mode = texlib.mode_asset == "DOWNLOADED" - if local_files_mode: - sel_index = texlib.downloaded_material_index - my_list = texlib.downloaded_material_items - else: - sel_index = texlib.material_index - my_list = texlib.material_items + # if local_files_mode: + # sel_index = texlib.downloaded_material_index + # my_list = texlib.downloaded_material_items + # else: + sel_index = texlib.material_index + my_list = texlib.material_items - layout.prop(texlib, "input_search") - searching_dwn = texlib.searching_download - - if searching_dwn.alive: - prog = searching_dwn.progress + layout.prop(texlib, "input_search") + source_search = layout.row() + source_search.prop(texlib, "check_all") + source_search.prop(texlib, "check_local") + source_search.prop(texlib, "check_ambiencg") + source_search.prop(texlib, "check_polyhaven") - if prog >= 0: - row_search = layout.row() + searching_dwn = texlib.searching_download + + if searching_dwn.alive: + prog = searching_dwn.progress - if prog < 10: - row_search.label(text="Searching...") - else: - row_search.prop(searching_dwn, "progress", slider=True, text="Retrieving thumbnails.") - # row_search.label(text="Retrieving thumbnails..."+str(prog)+"%") - row_search.operator("texlib.cancel_search", icon="CANCEL") + if prog >= 0: + row_search = layout.row() + + if prog < 10: + row_search.label(text="Searching...") + else: + row_search.prop(searching_dwn, "progress", slider=True, text="Retrieving thumbnails.") + row_search.operator("texlib.cancel_search", icon="CANCEL") # print("list", local_files_mode, ":",sel_index,"/",len(my_list)) # print("list", local_files_mode, ":",texlib.material_index,"/",len(texlib.material_items)," | ", texlib.downloaded_material_index,"/",len(texlib.downloaded_material_items)) @@ -302,18 +316,14 @@ def draw(self, context): layout.separator() layout.label(text="Textures:") col_lay = layout.row() - if local_files_mode: - col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "downloaded_material_items", texlib, "downloaded_material_index") - else: - col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") + + col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") if sel_index < len(my_list): sel_mat:MaterialItem = my_list[sel_index] mat_id:str = sel_mat.name - if local_files_mode: - del_it = col_lay.operator("texlib.remove_attributes", icon="REMOVE") - del_it.id = mat_id + layout.separator() layout.label(text="Preview:") @@ -395,14 +405,20 @@ class TEXLIB_UL_Material(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): """Demo UIList.""" + item_id = item.name + if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: + thumb = previews_collection.preview_items[item_id][3] + else: + thumb = lib.custom_icons["input"].icon_id + row = layout.row(align=True) if self.layout_type in {'DEFAULT', 'COMPACT'}: - row.template_icon(icon_value = item.thumb, scale = 1.0) + row.template_icon(icon_value = thumb, scale = 1.0) row.label(text=item.name) elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' - layout.label(text=item.name, icon_value = item.thumb) + layout.label(text=item.name, icon_value = thumb) class TexLibCancelSearch(Operator): bl_idname = "texlib.cancel_search" @@ -460,6 +476,15 @@ def load_material_items(material_items, list_tex): else: new_item.thumb = lib.custom_icons["input"].icon_id +def load_saved_material_items(): + material_items = bpy.context.scene.texlib.material_items + for new_item in material_items: + item_id = new_item.name + if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: + new_item.thumb = previews_collection.preview_items[item_id][3] + else: + new_item.thumb = lib.custom_icons["input"].icon_id + def load_per_material(file_name:str, material_item): item = os.path.basename(file_name) @@ -493,7 +518,7 @@ def searching_material(keyword:str, context:Context): thread_search.progress = 100 def load_previews(): - # print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") + print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") dir_name = _get_preview_dir() files = os.listdir(dir_name) @@ -503,11 +528,12 @@ def load_previews(): file = dir_name + item my_id = item.split(".")[0] sizefile = os.path.getsize(file) - # print(">>item",item,"file",file,"size", sizefile) if sizefile == 0: # detect corrupt image os.remove(file) continue loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) + print(">>item",item,"file",file,"size", sizefile, "id", loaded.icon_id) + preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) previews_collection.preview_items.update(preview_items) @@ -702,7 +728,7 @@ def read_asset_info() -> bool: return True return False -def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 100): +def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 20): base_link = "https://ambientCG.com/api/v2/full_json" params = { 'type': 'Material', @@ -824,6 +850,7 @@ def register(): if read_asset_info(): load_previews() + # load_saved_material_items() bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) From 2bc0ff41b7ad981973386925d109c8b57857e387 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 19 Aug 2024 14:36:20 +0700 Subject: [PATCH 034/283] split library into multiple files --- __init__.py | 8 +- textures_lib/__init__.py | 24 + textures_lib/operators.py | 211 ++++++ TexLib.py => textures_lib/properties.py | 858 +++++++----------------- textures_lib/ui.py | 183 +++++ 5 files changed, 683 insertions(+), 601 deletions(-) create mode 100644 textures_lib/__init__.py create mode 100644 textures_lib/operators.py rename TexLib.py => textures_lib/properties.py (55%) create mode 100644 textures_lib/ui.py diff --git a/__init__.py b/__init__.py index be66d697..33dac5f0 100644 --- a/__init__.py +++ b/__init__.py @@ -42,7 +42,7 @@ imp.reload(Bake) imp.reload(BakeToLayer) imp.reload(Root) - imp.reload(TexLib) + imp.reload(textures_lib) imp.reload(Godot) imp.reload(load_blend_updates) imp.reload(addon_updater_ops) @@ -50,7 +50,7 @@ from . import Localization from . import image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences from . import vector_displacement_lib, vector_displacement - from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, load_blend_updates, TexLib, Godot + from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, load_blend_updates, Godot, textures_lib from . import addon_updater_ops import bpy @@ -77,7 +77,7 @@ def register(): Bake.register() BakeToLayer.register() Root.register() - TexLib.register() + textures_lib.register() Godot.register() load_blend_updates.register() addon_updater_ops.register() @@ -106,7 +106,7 @@ def unregister(): Bake.unregister() BakeToLayer.unregister() Root.unregister() - TexLib.unregister() + textures_lib.unregister() Godot.unregister() load_blend_updates.unregister() addon_updater_ops.unregister() diff --git a/textures_lib/__init__.py b/textures_lib/__init__.py new file mode 100644 index 00000000..3e7cf45c --- /dev/null +++ b/textures_lib/__init__.py @@ -0,0 +1,24 @@ + +# if "bpy" not in locals(): +from . import properties +from . import operators +from . import ui +# else: +# import importlib + +# importlib.reload(properties) +# importlib.reload(ui) +# importlib.reload(operators) + +def register(): + properties.register() + operators.register() + ui.register() + +def unregister(): + properties.unregister() + operators.unregister() + ui.unregister() + +if __name__ == "__main__": + register() \ No newline at end of file diff --git a/textures_lib/operators.py b/textures_lib/operators.py new file mode 100644 index 00000000..17684a21 --- /dev/null +++ b/textures_lib/operators.py @@ -0,0 +1,211 @@ + +import bpy, threading, os + +from bpy.types import Operator +from bpy.props import StringProperty, IntProperty, BoolProperty + +from .. import Layer +from ..common import * + +from .properties import assets_lib, TexLibProps, DownloadQueue, _get_thread_id, _get_thread, _get_textures_dir, download_stream, cancel_searching, _texture_exist, threads + +class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): + """Open Multiple Textures to Layer Ucupaint""" + + bl_label = "" + bl_idname = "texlib.add_to_ucupaint" + + attribute:StringProperty() + id:StringProperty() + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() + + def invoke(self, context, event): + self.invoke_operator(context) + return context.window_manager.invoke_props_dialog(self, width=320) + + def check(self, context): + return self.check_operator(context) + + def draw(self, context): + self.draw_operator(context) + + def execute(self, context): + lib = assets_lib[self.id] + attr_dwn = lib["downloads"][self.attribute] + directory = attr_dwn["location"] + import_list = os.listdir(directory) + + if not self.open_images_to_single_layer(context, directory, import_list): + return {'CANCELLED'} + + return {'FINISHED'} + +class TexLibCancelDownload(Operator): + """Cancel downloading textures""" + + bl_label = "" + bl_idname = "texlib.cancel" + attribute:StringProperty() + id:StringProperty() + + def execute(self, context:bpy.context): + thread_id = _get_thread_id(self.id, self.attribute) + thread = _get_thread(thread_id) + + if thread == None: + return {'CANCELLED'} + thread.cancel = True + + texlib:TexLibProps = context.scene.texlib + dwn:DownloadQueue + for dwn in texlib.downloads: + if dwn.asset_id == self.id and dwn.asset_attribute == self.attribute: + dwn.alive = False + return {'FINISHED'} + + return {'CANCELLED'} + +class TexLibRemoveTextureAttribute(Operator): + """Remove existing textures""" + + bl_label = "" + bl_idname = "texlib.remove_attribute" + attribute:StringProperty() + id:StringProperty() + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + layout = self.layout + layout.label(text="Are you sure to remove this texture?") + + def execute(self, context:bpy.context): + dir_up = _get_textures_dir() + self.id + dir = dir_up + os.sep + self.attribute + # print("item", self.id," | attr", self.attribute, " | file ", dir) + # remove folder + if os.path.exists(dir): + for root, dirs, files in os.walk(dir, topdown=False): + for name in files: + os.remove(os.path.join(root, name)) + for name in dirs: + os.rmdir(os.path.join(root, name)) + os.rmdir(dir) + + # remove parent folder if empty + if not os.listdir(dir_up): + os.rmdir(dir_up) + my_list = context.scene.texlib.downloaded_material_items + my_list.remove(my_list.find(self.id)) + return {'FINISHED'} + return {'CANCELLED'} + +class TexLibDownload(Operator): + """Download textures from source""" + + bl_label = "" + bl_idname = "texlib.download" + + attribute:StringProperty() + id:StringProperty() + file_size:IntProperty + file_exist:BoolProperty(default=False) + + def invoke(self, context, event): + if self.file_exist: + return context.window_manager.invoke_props_dialog(self) + return self.execute(context) + + def draw(self, context:bpy.context): + layout = self.layout + + layout.label(text="Already downloaded. Overwrite?", icon="QUESTION") + + def execute(self, context): + lib = assets_lib[self.id] + attr_dwn = lib["downloads"][self.attribute] + link = attr_dwn["link"] + directory = attr_dwn["location"] + file_name = os.path.join(directory, attr_dwn["fileName"]) + + if not os.path.exists(directory): + # print("make dir "+directory) + os.makedirs(directory) + + thread_id = _get_thread_id(self.id, self.attribute) + new_thread = threading.Thread(target=download_stream, args=(link,file_name,thread_id,)) + new_thread.progress = 0 + new_thread.cancel = False + threads[_get_thread_id(self.id, self.attribute)] = new_thread + + new_thread.start() + + texlib = context.scene.texlib + new_dwn:DownloadQueue = texlib.downloads.add() + new_dwn.asset_id = self.id + new_dwn.file_path = file_name + new_dwn.asset_attribute = self.attribute + new_dwn.alive = True + new_dwn.file_size = attr_dwn["size"] + new_dwn.progress = 0 + + return {'FINISHED'} + +class TexLibCancelSearch(Operator): + bl_idname = "texlib.cancel_search" + bl_label = "" + + def execute(self, context): + cancel_searching(context) + return{'FINISHED'} + +class TexLibRemoveTextureAllAttributes(Operator): + bl_idname = "texlib.remove_attributes" + bl_label = "" + id:StringProperty() + + def invoke(self, context, event): + return context.window_manager.invoke_props_dialog(self) + + def draw(self, context): + layout = self.layout + layout.label(text="Are you sure to remove this textures?") + + def execute(self, context:bpy.context): + dir = _get_textures_dir() + self.id + print("item", self.id, " | file ", dir) + my_list = context.scene.texlib.downloaded_material_items + my_list.remove(my_list.find(self.id)) + # remove folder + if os.path.exists(dir): + for root, dirs, files in os.walk(dir, topdown=False): + for name in files: + os.remove(os.path.join(root, name)) + for name in dirs: + os.rmdir(os.path.join(root, name)) + os.rmdir(dir) + return {'FINISHED'} + + return {'CANCELLED'} + + +classes = [ + TexLibAddToUcupaint, + TexLibCancelDownload, + TexLibRemoveTextureAttribute, + TexLibDownload, + TexLibCancelSearch, + TexLibRemoveTextureAllAttributes +] + +def register(): + for cls in classes: + bpy.utils.register_class(cls) + +def unregister(): + for cls in classes: + bpy.utils.unregister_class(cls) \ No newline at end of file diff --git a/TexLib.py b/textures_lib/properties.py similarity index 55% rename from TexLib.py rename to textures_lib/properties.py index b69c360b..23d1336c 100644 --- a/TexLib.py +++ b/textures_lib/properties.py @@ -1,469 +1,21 @@ -from bpy.types import Context -from .common import * -from .preferences import * -from . import lib, Layer -from bpy.props import * -from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene +import bpy, threading, os, json, zipfile, requests + +from bpy.props import StringProperty, IntProperty, BoolProperty, CollectionProperty, PointerProperty +from bpy.types import PropertyGroup, Context, Scene + +from ..preferences import * +from .. import lib -import bpy, threading, os, requests, json, zipfile THREAD_SEARCHING = "thread_searching" # thread_search:threading.Thread # progress:int -# global previews_collection +# previews_collection:bpy.utils.previews # preview_items = [] assets_lib = {} last_search = {} threads = {} # progress:int, - -class MaterialItem(PropertyGroup): - name: StringProperty( name="Name", description="Material name", default="Untitled") - thumb: IntProperty( name="thumbnail", description="", default=0) - -class DownloadQueue(PropertyGroup): - asset_id : StringProperty() - asset_attribute: StringProperty() - file_path : StringProperty() - alive : BoolProperty(default = False) - file_size:IntProperty() - progress : IntProperty( - default = 0, - min = 0, - max = 100, - description = 'Progress of the download', - subtype = 'PERCENTAGE' - ) - -def update_check_all(self, context): - self.check_local = self.check_all - self.check_ambiencg = self.check_all - self.check_polyhaven = self.check_all - -def update_input_search(self, context): - if self.input_last == self.input_search: - print("no search:"+self.input_search) - return - - self.input_last = self.input_search - - txlib = context.scene.texlib - txlib.material_items.clear() - - if self.input_search == '': - last_search.clear() - return - - # cancel previous search - if THREAD_SEARCHING in threads: - cancel_searching(context) - - thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) - thread_search.progress = 0 - thread_search.cancel = False - threads[THREAD_SEARCHING] = thread_search - - thread_search.start() - - self.searching_download.progress = 0 - self.searching_download.alive = True - -def change_mode_asset(self, context): - if not len(assets_lib): - read_asset_info() - load_previews() - - # if self.mode_asset == "ONLINE": - # pass - # else: - # textures_dir = _get_textures_dir() - # tex_lis = os.listdir(textures_dir) - - # _offline_files = {} - # for tx in tex_lis: - # tx_dir = os.path.join(textures_dir, tx) - # attr_lis = os.listdir(tx_dir) - # for att in attr_lis: - # attr_dir = os.path.join(tx_dir, att) - # if _texture_exist(tx, attr_dir): - # _offline_files[tx] = assets_lib[tx] - # break - - # load_material_items(self.downloaded_material_items, _offline_files) - -class TexLibProps(PropertyGroup): - page: IntProperty(name="page", default= 0) - input_search:StringProperty(name="Search", update=update_input_search) - check_all:BoolProperty(name="Check All", default=True, update=update_check_all) - check_local:BoolProperty(name="Local", default=True) - check_ambiencg:BoolProperty(name="AmbientCG", default=True) - check_polyhaven:BoolProperty(name="Polyhaven", default=True) - - input_last:StringProperty() - material_items:CollectionProperty(type= MaterialItem) - material_index:IntProperty(default=0, name="Material index") - downloaded_material_items:CollectionProperty(type= MaterialItem) - downloaded_material_index:IntProperty(default=0, name="Material index") - - # mode_asset:EnumProperty( - # items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), - # name = 'Location', - # default = 'ONLINE', - # description = 'Location of the PBR Texture.\n' - # ' Local: the assets that you have already downloaded.\n' - # ' Online: available for download on AmbientCG.com.\n', - # update=change_mode_asset - # ) - - downloads:CollectionProperty(type=DownloadQueue) - searching_download:PointerProperty(type=DownloadQueue) - selected_download_item:IntProperty(default=0) - -class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): - """Open Multiple Textures to Layer Ucupaint""" - - bl_label = "" - bl_idname = "texlib.add_to_ucupaint" - - attribute:StringProperty() - id:StringProperty() - - @classmethod - def poll(cls, context): - return get_active_ypaint_node() - - def invoke(self, context, event): - self.invoke_operator(context) - return context.window_manager.invoke_props_dialog(self, width=320) - - def check(self, context): - return self.check_operator(context) - - def draw(self, context): - self.draw_operator(context) - - def execute(self, context): - lib = assets_lib[self.id] - attr_dwn = lib["downloads"][self.attribute] - directory = attr_dwn["location"] - import_list = os.listdir(directory) - - if not self.open_images_to_single_layer(context, directory, import_list): - return {'CANCELLED'} - - return {'FINISHED'} - -class TexLibCancelDownload(Operator): - """Cancel downloading textures""" - - bl_label = "" - bl_idname = "texlib.cancel" - attribute:StringProperty() - id:StringProperty() - - def execute(self, context:bpy.context): - thread_id = _get_thread_id(self.id, self.attribute) - thread = _get_thread(thread_id) - - if thread == None: - return {'CANCELLED'} - thread.cancel = True - - texlib:TexLibProps = context.scene.texlib - dwn:DownloadQueue - for dwn in texlib.downloads: - if dwn.asset_id == self.id and dwn.asset_attribute == self.attribute: - dwn.alive = False - return {'FINISHED'} - - return {'CANCELLED'} - -class TexLibRemoveTextureAttribute(Operator): - """Remove existing textures""" - - bl_label = "" - bl_idname = "texlib.remove_attribute" - attribute:StringProperty() - id:StringProperty() - - def invoke(self, context, event): - return context.window_manager.invoke_props_dialog(self) - - def draw(self, context): - layout = self.layout - layout.label(text="Are you sure to remove this texture?") - - def execute(self, context:bpy.context): - dir_up = _get_textures_dir() + self.id - dir = dir_up + os.sep + self.attribute - # print("item", self.id," | attr", self.attribute, " | file ", dir) - # remove folder - if os.path.exists(dir): - for root, dirs, files in os.walk(dir, topdown=False): - for name in files: - os.remove(os.path.join(root, name)) - for name in dirs: - os.rmdir(os.path.join(root, name)) - os.rmdir(dir) - - # remove parent folder if empty - if not os.listdir(dir_up): - os.rmdir(dir_up) - my_list = context.scene.texlib.downloaded_material_items - my_list.remove(my_list.find(self.id)) - return {'FINISHED'} - return {'CANCELLED'} - -class TexLibDownload(Operator): - """Download textures from source""" - - bl_label = "" - bl_idname = "texlib.download" - - attribute:StringProperty() - id:StringProperty() - file_size:IntProperty - file_exist:BoolProperty(default=False) - - def invoke(self, context, event): - if self.file_exist: - return context.window_manager.invoke_props_dialog(self) - return self.execute(context) - - def draw(self, context:bpy.context): - layout = self.layout - - layout.label(text="Already downloaded. Overwrite?", icon="QUESTION") - - def execute(self, context): - lib = assets_lib[self.id] - attr_dwn = lib["downloads"][self.attribute] - link = attr_dwn["link"] - directory = attr_dwn["location"] - file_name = os.path.join(directory, attr_dwn["fileName"]) - - if not os.path.exists(directory): - # print("make dir "+directory) - os.makedirs(directory) - - thread_id = _get_thread_id(self.id, self.attribute) - new_thread = threading.Thread(target=download_stream, args=(link,file_name,thread_id,)) - new_thread.progress = 0 - new_thread.cancel = False - threads[_get_thread_id(self.id, self.attribute)] = new_thread - - new_thread.start() - - texlib = context.scene.texlib - new_dwn:DownloadQueue = texlib.downloads.add() - new_dwn.asset_id = self.id - new_dwn.file_path = file_name - new_dwn.asset_attribute = self.attribute - new_dwn.alive = True - new_dwn.file_size = attr_dwn["size"] - new_dwn.progress = 0 - - return {'FINISHED'} - -class TexLibBrowser(Panel): - bl_label = "Texlib Browser" - bl_idname = "TEXLIB_PT_Browser" - bl_space_type = "VIEW_3D" - bl_region_type = "UI" - bl_category = "Ucupaint" - - - def draw(self, context): - layout = self.layout - scene = context.scene - texlib:TexLibProps = scene.texlib - - # layout.prop(texlib, "mode_asset", expand=True) - # local_files_mode = texlib.mode_asset == "DOWNLOADED" - - # if local_files_mode: - # sel_index = texlib.downloaded_material_index - # my_list = texlib.downloaded_material_items - # else: - sel_index = texlib.material_index - my_list = texlib.material_items - - layout.prop(texlib, "input_search") - source_search = layout.row() - source_search.prop(texlib, "check_all") - source_search.prop(texlib, "check_local") - source_search.prop(texlib, "check_ambiencg") - source_search.prop(texlib, "check_polyhaven") - - searching_dwn = texlib.searching_download - - if searching_dwn.alive: - prog = searching_dwn.progress - - if prog >= 0: - row_search = layout.row() - - if prog < 10: - row_search.label(text="Searching...") - else: - row_search.prop(searching_dwn, "progress", slider=True, text="Retrieving thumbnails.") - row_search.operator("texlib.cancel_search", icon="CANCEL") - - # print("list", local_files_mode, ":",sel_index,"/",len(my_list)) - # print("list", local_files_mode, ":",texlib.material_index,"/",len(texlib.material_items)," | ", texlib.downloaded_material_index,"/",len(texlib.downloaded_material_items)) - if len(my_list): - - layout.separator() - layout.label(text="Textures:") - col_lay = layout.row() - - col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") - - if sel_index < len(my_list): - sel_mat:MaterialItem = my_list[sel_index] - mat_id:str = sel_mat.name - - - - layout.separator() - layout.label(text="Preview:") - prev_box = layout.box() - selected_mat = prev_box.column(align=True) - selected_mat.alignment = "CENTER" - selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) - selected_mat.label(text=mat_id) - downloads = assets_lib[mat_id]["downloads"] - - layout.separator() - layout.label(text="Attributes:") - for d in downloads: - dwn = downloads[d] - # row.alignment = "LEFT" - ukuran = round(dwn["size"] / 1000000,2) - lokasi = dwn["location"] - - check_exist:bool = _texture_exist(mat_id, lokasi) - - # if local_files_mode and not check_exist: - # continue - - ui_attr = layout.split(factor=0.7) - - row = ui_attr.row() - - row.label(text=d, ) - # rr.label(text=d, ) - row.label(text=str(ukuran)+ "MB") - - thread_id = _get_thread_id(mat_id, d) - dwn_thread = _get_thread(thread_id) - - btn_row = ui_attr.row() - btn_row.alignment = "RIGHT" - - if dwn_thread != None: - btn_row.label(text=str(dwn_thread.progress)+"%") - op:TexLibCancelDownload = btn_row.operator("texlib.cancel", icon="X") - op.attribute = d - op.id = mat_id - else: - if check_exist: - op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") - op.attribute = d - op.id = sel_mat.name - - op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") - op_remove.attribute = d - op_remove.id = sel_mat.name - - op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") - op.attribute = d - op.id = sel_mat.name - op.file_exist = check_exist - - if len(texlib.downloads): - layout.separator() - layout.label(text="Downloads:") - layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") - -class TEXLIB_UL_Downloads(UIList): - - def draw_item(self, context, layout, data, item:DownloadQueue, icon, active_data, active_propname, index): - """Demo UIList.""" - if self.layout_type in {'DEFAULT', 'COMPACT'}: - row = layout.row(align=True) - if item.alive: - row.prop(item, "progress", slider=True, text=item.asset_id+" | "+item.asset_attribute) - op:TexLibCancelDownload = row.operator("texlib.cancel", icon="X") - op.attribute = item.asset_attribute - op.id = item.asset_id - else: - row.label(text="cancelling") - -class TEXLIB_UL_Material(UIList): - - def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): - """Demo UIList.""" - - item_id = item.name - if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: - thumb = previews_collection.preview_items[item_id][3] - else: - thumb = lib.custom_icons["input"].icon_id - - row = layout.row(align=True) - if self.layout_type in {'DEFAULT', 'COMPACT'}: - row.template_icon(icon_value = thumb, scale = 1.0) - row.label(text=item.name) - - elif self.layout_type in {'GRID'}: - layout.alignment = 'CENTER' - layout.label(text=item.name, icon_value = thumb) - -class TexLibCancelSearch(Operator): - bl_idname = "texlib.cancel_search" - bl_label = "" - - def execute(self, context): - cancel_searching(context) - return{'FINISHED'} - -class TexLibRemoveTextureAllAttributes(Operator): - bl_idname = "texlib.remove_attributes" - bl_label = "" - id:StringProperty() - - def invoke(self, context, event): - return context.window_manager.invoke_props_dialog(self) - - def draw(self, context): - layout = self.layout - layout.label(text="Are you sure to remove this textures?") - - def execute(self, context:bpy.context): - dir = _get_textures_dir() + self.id - print("item", self.id, " | file ", dir) - my_list = context.scene.texlib.downloaded_material_items - my_list.remove(my_list.find(self.id)) - # remove folder - if os.path.exists(dir): - for root, dirs, files in os.walk(dir, topdown=False): - for name in files: - os.remove(os.path.join(root, name)) - for name in dirs: - os.rmdir(os.path.join(root, name)) - os.rmdir(dir) - return {'FINISHED'} - - return {'CANCELLED'} - -def cancel_searching(context): - thread_search = threads[THREAD_SEARCHING] - thread_search.cancel = True - texlib = context.scene.texlib - - searching_dwn = texlib.searching_download - searching_dwn.alive = False def load_material_items(material_items, list_tex): material_items.clear() @@ -476,15 +28,6 @@ def load_material_items(material_items, list_tex): else: new_item.thumb = lib.custom_icons["input"].icon_id -def load_saved_material_items(): - material_items = bpy.context.scene.texlib.material_items - for new_item in material_items: - item_id = new_item.name - if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: - new_item.thumb = previews_collection.preview_items[item_id][3] - else: - new_item.thumb = lib.custom_icons["input"].icon_id - def load_per_material(file_name:str, material_item): item = os.path.basename(file_name) @@ -496,119 +39,6 @@ def load_per_material(file_name:str, material_item): material_item.thumb = loaded.icon_id -def searching_material(keyword:str, context:Context): - scene = context.scene - txlib:TexLibProps = scene.texlib - - thread_search = threads[THREAD_SEARCHING] - - if not len(assets_lib): - read_asset_info() - - retrieve_assets_info(keyword) - thread_search.progress = 10 - load_material_items(txlib.material_items, last_search) - - download_previews(False, txlib.material_items) - thread_search.progress = 90 - load_previews() - thread_search.progress = 95 - - load_material_items(txlib.material_items, last_search) - thread_search.progress = 100 - -def load_previews(): - print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") - dir_name = _get_preview_dir() - files = os.listdir(dir_name) - - previews_collection.clear() - preview_items = {} - for index, item in enumerate(files): - file = dir_name + item - my_id = item.split(".")[0] - sizefile = os.path.getsize(file) - if sizefile == 0: # detect corrupt image - os.remove(file) - continue - loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) - print(">>item",item,"file",file,"size", sizefile, "id", loaded.icon_id) - - preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) - - previews_collection.preview_items.update(preview_items) - -def monitor_downloads(): - - searching = False - if THREAD_SEARCHING in threads: - thread_search = threads[THREAD_SEARCHING] - searching = True - - if not hasattr(bpy, 'context'): - print("no context") - return 2 - - scn = bpy.context.scene - txlb:TexLibProps = scn.texlib - downloads = txlb.downloads - - if len(downloads) == 0 and not searching: - # print("KOSONG") - return 2 - - if searching: - prog_search = thread_search.progress - txlb.searching_download.progress = prog_search - if thread_search.progress >= 100: - txlb.searching_download.alive = False - - if not thread_search.is_alive(): - del threads[THREAD_SEARCHING] - - # print("downloadku", len(downloads)) - # for index, dwn in enumerate(downloads): - # print("cek aja",dwn.asset_id," | ",dwn.asset_attribute) - - if len(downloads): - to_remove = [] - dwn:DownloadQueue - for index, dwn in enumerate(downloads): - - thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) - thread = _get_thread(thread_id) - if thread == None: - print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) - extract_file(dwn.file_path) - delete_zip(dwn.file_path) - to_remove.append(index) - - else: - prog = thread.progress - - dwn.progress = prog - if thread.progress >= 100: - dwn.alive = False - - if not thread.is_alive(): - del threads[thread_id] - - for i in to_remove: - downloads.remove(i) - - for window in bpy.context.window_manager.windows: - # print("==============windoss ", window) - for area in window.screen.areas: - if area.type == 'VIEW_3D': - for reg in area.regions: - # print("region",reg.type, "width", reg.width) - open_tab = reg.width > 1 - if reg.type == "UI" and open_tab: - # print("redraw area", area.type, "reg", reg.type) - reg.tag_redraw() - return 0.1 - - return 1.0 def extract_file(my_file:str) -> bool: dir_name = os.path.dirname(my_file) @@ -714,19 +144,7 @@ def download_previews(overwrite_existing:bool, material_items): thread_search.progress = (int) (progress_initial + prog * span) -def read_asset_info() -> bool: - dir_name = _get_lib_dir() - file_name = os.path.join(dir_name, "lib.json") - if os.path.exists(file_name): - file = open(file_name, 'r') - content = file.read() - jsn = json.loads(content) - assets_lib.update(jsn) - file.close() - # print("read ", content) - return True - return False def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 20): base_link = "https://ambientCG.com/api/v2/full_json" @@ -835,8 +253,256 @@ def _get_thread(id:str): return threads[id] return None -classes = [DownloadQueue, MaterialItem, TexLibProps, TexLibBrowser, TexLibDownload, TexLibRemoveTextureAttribute, TexLibRemoveTextureAllAttributes, - TexLibAddToUcupaint, TexLibCancelDownload, TEXLIB_UL_Material,TexLibCancelSearch, TEXLIB_UL_Downloads] +def read_asset_info() -> bool: + dir_name = _get_lib_dir() + file_name = os.path.join(dir_name, "lib.json") + + if os.path.exists(file_name): + file = open(file_name, 'r') + content = file.read() + jsn = json.loads(content) + assets_lib.update(jsn) + file.close() + # print("read ", content) + return True + return False + +def cancel_searching(context): + thread_search = threads[THREAD_SEARCHING] + thread_search.cancel = True + texlib = context.scene.texlib + + searching_dwn = texlib.searching_download + searching_dwn.alive = False + +def update_check_all(self, context): + self.check_local = self.check_all + self.check_ambiencg = self.check_all + self.check_polyhaven = self.check_all + +def searching_material(keyword:str, context:Context): + scene = context.scene + txlib:TexLibProps = scene.texlib + + thread_search = threads[THREAD_SEARCHING] + + if not len(assets_lib): + read_asset_info() + + retrieve_assets_info(keyword) + thread_search.progress = 10 + load_material_items(txlib.material_items, last_search) + + download_previews(False, txlib.material_items) + thread_search.progress = 90 + load_previews() + thread_search.progress = 95 + + load_material_items(txlib.material_items, last_search) + thread_search.progress = 100 + +def load_previews(): + print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") + dir_name = _get_preview_dir() + files = os.listdir(dir_name) + + previews_collection.clear() + preview_items = {} + for index, item in enumerate(files): + file = dir_name + item + my_id = item.split(".")[0] + sizefile = os.path.getsize(file) + if sizefile == 0: # detect corrupt image + os.remove(file) + continue + loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) + # print(">>item",item,"file",file,"size", sizefile, "id", loaded.icon_id) + + preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) + + previews_collection.preview_items.update(preview_items) + +def monitor_downloads(): + + searching = False + if THREAD_SEARCHING in threads: + thread_search = threads[THREAD_SEARCHING] + searching = True + + if not hasattr(bpy, 'context'): + print("no context") + return 2 + + scn = bpy.context.scene + txlb:TexLibProps = scn.texlib + downloads = txlb.downloads + + if len(downloads) == 0 and not searching: + # print("KOSONG") + return 2 + + if searching: + prog_search = thread_search.progress + txlb.searching_download.progress = prog_search + if thread_search.progress >= 100: + txlb.searching_download.alive = False + + if not thread_search.is_alive(): + del threads[THREAD_SEARCHING] + + # print("downloadku", len(downloads)) + # for index, dwn in enumerate(downloads): + # print("cek aja",dwn.asset_id," | ",dwn.asset_attribute) + + if len(downloads): + to_remove = [] + dwn:DownloadQueue + for index, dwn in enumerate(downloads): + + thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) + thread = _get_thread(thread_id) + if thread == None: + print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) + extract_file(dwn.file_path) + delete_zip(dwn.file_path) + to_remove.append(index) + + else: + prog = thread.progress + + dwn.progress = prog + if thread.progress >= 100: + dwn.alive = False + + if not thread.is_alive(): + del threads[thread_id] + + for i in to_remove: + downloads.remove(i) + + for window in bpy.context.window_manager.windows: + # print("==============windoss ", window) + for area in window.screen.areas: + if area.type == 'VIEW_3D': + for reg in area.regions: + # print("region",reg.type, "width", reg.width) + open_tab = reg.width > 1 + if reg.type == "UI" and open_tab: + # print("redraw area", area.type, "reg", reg.type) + reg.tag_redraw() + return 0.1 + + return 1.0 + +def update_input_search(self, context): + if self.input_last == self.input_search: + print("no search:"+self.input_search) + return + + self.input_last = self.input_search + + txlib = context.scene.texlib + txlib.material_items.clear() + + if self.input_search == '': + last_search.clear() + return + + # cancel previous search + if THREAD_SEARCHING in threads: + cancel_searching(context) + + thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) + thread_search.progress = 0 + thread_search.cancel = False + threads[THREAD_SEARCHING] = thread_search + + thread_search.start() + + self.searching_download.progress = 0 + self.searching_download.alive = True + + + +def change_mode_asset(self, context): + if not len(assets_lib): + read_asset_info() + load_previews() + + # if self.mode_asset == "ONLINE": + # pass + # else: + # textures_dir = _get_textures_dir() + # tex_lis = os.listdir(textures_dir) + + # _offline_files = {} + # for tx in tex_lis: + # tx_dir = os.path.join(textures_dir, tx) + # attr_lis = os.listdir(tx_dir) + + # for att in attr_lis: + # attr_dir = os.path.join(tx_dir, att) + # if _texture_exist(tx, attr_dir): + # _offline_files[tx] = assets_lib[tx] + # break + + # load_material_items(self.downloaded_material_items, _offline_files) + +class TextureItem (PropertyGroup): + texture_id: StringProperty(name="Texture ID") + location: StringProperty(name="Location", subtype="FILE_PATH") + thumbnail: StringProperty(name="Thumbnail", subtype="FILE_PATH") + blend_file: StringProperty(name="Blend File", subtype="FILE_PATH") + +class MaterialItem(PropertyGroup): + name: StringProperty( name="Name", description="Material name", default="Untitled") + thumb: IntProperty( name="thumbnail", description="", default=0) + +class DownloadQueue(PropertyGroup): + asset_id : StringProperty() + asset_attribute: StringProperty() + file_path : StringProperty() + alive : BoolProperty(default = False) + file_size:IntProperty() + progress : IntProperty( + default = 0, + min = 0, + max = 100, + description = 'Progress of the download', + subtype = 'PERCENTAGE' + ) + +class TexLibProps(PropertyGroup): + page: IntProperty(name="page", default= 0) + input_search:StringProperty(name="Search", update=update_input_search) + check_all:BoolProperty(name="Check All", default=True, update=update_check_all) + check_local:BoolProperty(name="Local", default=True) + check_ambiencg:BoolProperty(name="AmbientCG", default=True) + check_polyhaven:BoolProperty(name="Polyhaven", default=True) + + input_last:StringProperty() + material_items:CollectionProperty(type= MaterialItem) + material_index:IntProperty(default=0, name="Material index") + downloaded_material_items:CollectionProperty(type= MaterialItem) + downloaded_material_index:IntProperty(default=0, name="Material index") + + # mode_asset:EnumProperty( + # items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), + # name = 'Location', + # default = 'ONLINE', + # description = 'Location of the PBR Texture.\n' + # ' Local: the assets that you have already downloaded.\n' + # ' Online: available for download on AmbientCG.com.\n', + # update=change_mode_asset + # ) + + downloads:CollectionProperty(type=DownloadQueue) + searching_download:PointerProperty(type=DownloadQueue) + selected_download_item:IntProperty(default=0) + +classes = [ + TextureItem, MaterialItem, DownloadQueue, TexLibProps +] def register(): for cl in classes: @@ -850,19 +516,17 @@ def register(): if read_asset_info(): load_previews() - # load_saved_material_items() bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) + def unregister(): for cl in classes: bpy.utils.unregister_class(cl) + del bpy.types.Scene.texlib bpy.utils.previews.remove(previews_collection) if bpy.app.timers.is_registered(monitor_downloads): - bpy.app.timers.unregister(monitor_downloads) - -if __name__ == "__main__": - register() \ No newline at end of file + bpy.app.timers.unregister(monitor_downloads) \ No newline at end of file diff --git a/textures_lib/ui.py b/textures_lib/ui.py new file mode 100644 index 00000000..c72d3f94 --- /dev/null +++ b/textures_lib/ui.py @@ -0,0 +1,183 @@ +import bpy + +from bpy.types import Panel, UIList + +from .. import lib + +from .properties import assets_lib +from .properties import TexLibProps, MaterialItem, DownloadQueue + +from .operators import TexLibAddToUcupaint, TexLibCancelDownload, TexLibDownload, TexLibRemoveTextureAttribute +from .operators import _get_thread, _get_thread_id, _texture_exist + +class TexLibBrowser(Panel): + bl_label = "Texlib Browser" + bl_idname = "TEXLIB_PT_Browser" + bl_space_type = "VIEW_3D" + bl_region_type = "UI" + bl_category = "Ucupaint" + + + def draw(self, context): + layout = self.layout + scene = context.scene + texlib:TexLibProps = scene.texlib + + # layout.prop(texlib, "mode_asset", expand=True) + # local_files_mode = texlib.mode_asset == "DOWNLOADED" + + # if local_files_mode: + # sel_index = texlib.downloaded_material_index + # my_list = texlib.downloaded_material_items + # else: + sel_index = texlib.material_index + my_list = texlib.material_items + + layout.prop(texlib, "input_search") + source_search = layout.row() + source_search.prop(texlib, "check_all") + source_search.prop(texlib, "check_local") + source_search.prop(texlib, "check_ambiencg") + source_search.prop(texlib, "check_polyhaven") + + searching_dwn = texlib.searching_download + + if searching_dwn.alive: + prog = searching_dwn.progress + + if prog >= 0: + row_search = layout.row() + + if prog < 10: + row_search.label(text="Searching...") + else: + row_search.prop(searching_dwn, "progress", slider=True, text="Retrieving thumbnails.") + row_search.operator("texlib.cancel_search", icon="CANCEL") + + # print("list", local_files_mode, ":",sel_index,"/",len(my_list)) + # print("list", local_files_mode, ":",texlib.material_index,"/",len(texlib.material_items)," | ", texlib.downloaded_material_index,"/",len(texlib.downloaded_material_items)) + if len(my_list): + + layout.separator() + layout.label(text="Textures:") + col_lay = layout.row() + + col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") + + if sel_index < len(my_list): + sel_mat:MaterialItem = my_list[sel_index] + mat_id:str = sel_mat.name + + + + layout.separator() + layout.label(text="Preview:") + prev_box = layout.box() + selected_mat = prev_box.column(align=True) + selected_mat.alignment = "CENTER" + selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) + selected_mat.label(text=mat_id) + downloads = assets_lib[mat_id]["downloads"] + + layout.separator() + layout.label(text="Attributes:") + for d in downloads: + dwn = downloads[d] + # row.alignment = "LEFT" + ukuran = round(dwn["size"] / 1000000,2) + lokasi = dwn["location"] + + check_exist:bool = _texture_exist(mat_id, lokasi) + + # if local_files_mode and not check_exist: + # continue + + ui_attr = layout.split(factor=0.7) + + row = ui_attr.row() + + row.label(text=d, ) + # rr.label(text=d, ) + row.label(text=str(ukuran)+ "MB") + + thread_id = _get_thread_id(mat_id, d) + dwn_thread = _get_thread(thread_id) + + btn_row = ui_attr.row() + btn_row.alignment = "RIGHT" + + if dwn_thread != None: + btn_row.label(text=str(dwn_thread.progress)+"%") + op:TexLibCancelDownload = btn_row.operator("texlib.cancel", icon="X") + op.attribute = d + op.id = mat_id + else: + if check_exist: + op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") + op.attribute = d + op.id = sel_mat.name + + op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") + op_remove.attribute = d + op_remove.id = sel_mat.name + + op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") + op.attribute = d + op.id = sel_mat.name + op.file_exist = check_exist + + if len(texlib.downloads): + layout.separator() + layout.label(text="Downloads:") + layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") + +class TEXLIB_UL_Downloads(UIList): + + def draw_item(self, context, layout, data, item:DownloadQueue, icon, active_data, active_propname, index): + """Demo UIList.""" + if self.layout_type in {'DEFAULT', 'COMPACT'}: + row = layout.row(align=True) + if item.alive: + row.prop(item, "progress", slider=True, text=item.asset_id+" | "+item.asset_attribute) + op:TexLibCancelDownload = row.operator("texlib.cancel", icon="X") + op.attribute = item.asset_attribute + op.id = item.asset_id + else: + row.label(text="cancelling") + +class TEXLIB_UL_Material(UIList): + + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + """Demo UIList.""" + + from .properties import previews_collection + + item_id = item.name + if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: + thumb = previews_collection.preview_items[item_id][3] + else: + thumb = lib.custom_icons["input"].icon_id + + row = layout.row(align=True) + if self.layout_type in {'DEFAULT', 'COMPACT'}: + row.template_icon(icon_value = thumb, scale = 1.0) + row.label(text=item.name) + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label(text=item.name, icon_value = thumb) + + +classes = [ + TexLibBrowser, + TEXLIB_UL_Material, + TEXLIB_UL_Downloads +] + +def register(): + for cls in classes: + bpy.utils.register_class(cls) + +def unregister(): + for cls in classes: + bpy.utils.unregister_class(cls) \ No newline at end of file From 6414edf0c095a3be04d200bee18e94889c0d62c2 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 20 Aug 2024 11:15:23 +0700 Subject: [PATCH 035/283] separate downloader file --- .gitignore | 2 +- textures_lib/__init__.py | 23 ++- textures_lib/downloader.py | 292 +++++++++++++++++++++++++++++ textures_lib/operators.py | 17 +- textures_lib/properties.py | 363 +++++-------------------------------- textures_lib/ui.py | 9 +- 6 files changed, 368 insertions(+), 338 deletions(-) create mode 100644 textures_lib/downloader.py diff --git a/.gitignore b/.gitignore index 43d85fb9..bcbdd529 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/__pycache__ +*__pycache__ ucupaint_updater/ucupaint_updater_status.json diff --git a/textures_lib/__init__.py b/textures_lib/__init__.py index 3e7cf45c..e5f01583 100644 --- a/textures_lib/__init__.py +++ b/textures_lib/__init__.py @@ -1,21 +1,24 @@ -# if "bpy" not in locals(): -from . import properties -from . import operators -from . import ui -# else: -# import importlib - -# importlib.reload(properties) -# importlib.reload(ui) -# importlib.reload(operators) +if "bpy" not in locals(): + from . import downloader + from . import properties + from . import operators + from . import ui +else: + import importlib + importlib.reload(downloader) + importlib.reload(properties) + importlib.reload(operators) + importlib.reload(ui) def register(): + downloader.register() properties.register() operators.register() ui.register() def unregister(): + downloader.unregister() properties.unregister() operators.unregister() ui.unregister() diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py new file mode 100644 index 00000000..992a6d77 --- /dev/null +++ b/textures_lib/downloader.py @@ -0,0 +1,292 @@ +import bpy, threading, os, json, zipfile, requests + +from ..preferences import * + +THREAD_SEARCHING = "thread_searching" +threads = {} # progress:int, + +def get_thread_id(asset_id:str, asset_attribute:str): + return asset_id+"_"+asset_attribute + +def get_thread(id:str): + if id in threads: + return threads[id] + return None + +def get_searching_thread(): + if THREAD_SEARCHING in threads: + return threads[THREAD_SEARCHING] + return None + +def set_searching_thread(thread:threading.Thread): + threads[THREAD_SEARCHING] = thread + +def download_stream(link:str, file_name:str, thread_id:str, + timeout:int = 10,skipExisting:bool = False): + # print("url = ",link, "filename", file_name) + + thread = get_thread(thread_id) + + prog = 0 + with open(file_name, "wb") as f: + try: + response = requests.get(link, stream=True, timeout = timeout) + # session seems to be a little bit faster + #session = requests.Session() + #response = session.get(link, stream=True, timeout = timeout) + total_length = response.headers.get('content-length') + print("total size = "+total_length) + if not total_length: + print('Error #1 while downloading', link, ':', "Empty Response.") + return + + dl = 0 + total_length = int(total_length) + # TODO a way for calculating the chunk size + for data in response.iter_content(chunk_size = 4096): + if thread is not None and thread.cancel: + response.close() + break + + dl += len(data) + f.write(data) + + prog = int(100 * dl / total_length) + # dl_threads[0].progress = prog + thread.progress = prog + # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) + # dl_threads.pop(0) + except Exception as e: + print('Error #2 while downloading', link, ':', e) + +def monitor_downloads(): + + searching = False + if THREAD_SEARCHING in threads: + thread_search = threads[THREAD_SEARCHING] + searching = True + + if not hasattr(bpy, 'context'): + print("no context") + return 2 + + scn = bpy.context.scene + + from .properties import TexLibProps + + txlb:TexLibProps = scn.texlib + downloads = txlb.downloads + + if len(downloads) == 0 and not searching: + # print("KOSONG") + return 2 + + if searching: + prog_search = thread_search.progress + txlb.searching_download.progress = prog_search + if thread_search.progress >= 100: + txlb.searching_download.alive = False + + if not thread_search.is_alive(): + del threads[THREAD_SEARCHING] + + # print("downloadku", len(downloads)) + # for index, dwn in enumerate(downloads): + # print("cek aja",dwn.asset_id," | ",dwn.asset_attribute) + + if len(downloads): + to_remove = [] + dwn:DownloadQueue + for index, dwn in enumerate(downloads): + + thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute) + thread = get_thread(thread_id) + if thread == None: + print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) + extract_file(dwn.file_path) + delete_zip(dwn.file_path) + to_remove.append(index) + + else: + prog = thread.progress + + dwn.progress = prog + if thread.progress >= 100: + dwn.alive = False + + if not thread.is_alive(): + del threads[thread_id] + + for i in to_remove: + downloads.remove(i) + + for window in bpy.context.window_manager.windows: + # print("==============windoss ", window) + for area in window.screen.areas: + if area.type == 'VIEW_3D': + for reg in area.regions: + # print("region",reg.type, "width", reg.width) + open_tab = reg.width > 1 + if reg.type == "UI" and open_tab: + # print("redraw area", area.type, "reg", reg.type) + reg.tag_redraw() + return 0.1 + + return 1.0 + +def download_previews(overwrite_existing:bool, material_items): + from .properties import get_preview_dir, load_per_material + from .properties import last_search + + directory = get_preview_dir() + + if not os.path.exists(directory): + os.mkdir(directory) + thread_search = threads[THREAD_SEARCHING] + + + progress_initial = thread_search.progress + progress_max = 90 + span = progress_max - progress_initial + item_count = len(last_search) + + for index,ast in enumerate(last_search): + if thread_search.cancel: + break + link = last_search[ast]["preview"] + file_name = bpy.path.basename(link) + file_name = os.path.join(directory, file_name) + + if not overwrite_existing and os.path.exists(file_name): + continue + with open(file_name, "wb") as f: + try: + response = requests.get(link, stream=True) + total_length = response.headers.get('content-length') + if not total_length: + print('Error #1 while downloading', link, ':', "Empty Response.") + return + dl = 0 + total_length = int(total_length) + for data in response.iter_content(chunk_size = 4096): + if thread_search is not None and thread_search.cancel: + response.close() + return + dl += len(data) + f.write(data) + except Exception as e: + print('Error #2 while downloading', link, ':', e) + prog = (index + 1) / item_count + # print("url = ",prog, ' | ',link,' | ', file_name) + # refresh list + load_per_material(file_name, material_items[index]) + + thread_search.progress = (int) (progress_initial + prog * span) + +def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 20): + from .properties import assets_lib, last_search + from .properties import get_lib_dir, get_textures_dir + + base_link = "https://ambientCG.com/api/v2/full_json" + params = { + 'type': 'Material', + 'include':'imageData,downloadData', + 'limit': str(limit), + 'offset': str(limit * page) + } + + if keyword != '': + params['q'] = keyword + + dir_name = get_lib_dir() + file_name = os.path.join(dir_name, "lib.json") + + response = requests.get(base_link, params=params, verify=False) + if not response.status_code == 200: + print("Can't download, Code: " + str(response.status_code)) + return None + + assets = response.json()["foundAssets"] + + print("Found ",len(assets), "textures") + + file = open(file_name, 'w') + + # assets_lib = {} + last_search.clear() + + tex_directory = get_textures_dir() + + + for asst in assets: + asset_obj = {} + asset_id = asst["assetId"] + asset_obj["id"] = asset_id + asset_obj["preview"] = asst["previewImage"]["256-PNG"] + + zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] + + downloads = {} + for k in zip_assets: + location = os.path.join(asset_id, k["attribute"]) + directory = os.path.join(tex_directory, location) + + downloads[k["attribute"]] = { + "link" : k["downloadLink"], + "fileName" : k["fileName"], + "location" : directory+os.sep, + "size" : k["size"] + } + asset_obj["downloads"] = downloads + assets_lib[asset_id] = asset_obj + last_search[asset_id] = asset_obj + + file.write(json.dumps(assets_lib)) + file.close() + print("stored to ", file_name) + # print("content to ", str(assets_lib)) + + if save_ori: + file_name_ori = os.path.join(dir_name, "lib-ori.json") + file_ori = open(file_name_ori, 'w') + file_ori.write(json.dumps({"foundAssets":assets})) + file_ori.close() + +def texture_exist(asset_id:str, location:str) -> bool: + if os.path.exists(location): + files = os.listdir(location) + for f in files: + if asset_id in f: + return True + + return False + +def extract_file(my_file:str) -> bool: + dir_name = os.path.dirname(my_file) + # new_folder = os.path.basename(my_file).split('.')[0] + # dir_name = os.path.join(dir_name, new_folder) + print("extract "+my_file+" to "+dir_name) + + try: + with zipfile.ZipFile(my_file, 'r') as zObject: + zObject.extractall(path=dir_name) + return True + except zipfile.BadZipFile: + return False + +# Delete the zip file +def delete_zip(file_path): + if not os.path.exists(file_path): + return + try: + os.remove(file_path) + except Exception as e: + print('Error while deleting zip file:', e) + + +def register(): + bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) + +def unregister(): + if bpy.app.timers.is_registered(monitor_downloads): + bpy.app.timers.unregister(monitor_downloads) \ No newline at end of file diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 17684a21..b1d68b74 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -7,7 +7,10 @@ from .. import Layer from ..common import * -from .properties import assets_lib, TexLibProps, DownloadQueue, _get_thread_id, _get_thread, _get_textures_dir, download_stream, cancel_searching, _texture_exist, threads +from .downloader import download_stream, get_thread_id, get_thread +from .downloader import threads + +from .properties import assets_lib, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" @@ -52,8 +55,8 @@ class TexLibCancelDownload(Operator): id:StringProperty() def execute(self, context:bpy.context): - thread_id = _get_thread_id(self.id, self.attribute) - thread = _get_thread(thread_id) + thread_id = get_thread_id(self.id, self.attribute) + thread = get_thread(thread_id) if thread == None: return {'CANCELLED'} @@ -84,7 +87,7 @@ def draw(self, context): layout.label(text="Are you sure to remove this texture?") def execute(self, context:bpy.context): - dir_up = _get_textures_dir() + self.id + dir_up = get_textures_dir() + self.id dir = dir_up + os.sep + self.attribute # print("item", self.id," | attr", self.attribute, " | file ", dir) # remove folder @@ -136,11 +139,11 @@ def execute(self, context): # print("make dir "+directory) os.makedirs(directory) - thread_id = _get_thread_id(self.id, self.attribute) + thread_id = get_thread_id(self.id, self.attribute) new_thread = threading.Thread(target=download_stream, args=(link,file_name,thread_id,)) new_thread.progress = 0 new_thread.cancel = False - threads[_get_thread_id(self.id, self.attribute)] = new_thread + threads[get_thread_id(self.id, self.attribute)] = new_thread new_thread.start() @@ -176,7 +179,7 @@ def draw(self, context): layout.label(text="Are you sure to remove this textures?") def execute(self, context:bpy.context): - dir = _get_textures_dir() + self.id + dir = get_textures_dir() + self.id print("item", self.id, " | file ", dir) my_list = context.scene.texlib.downloaded_material_items my_list.remove(my_list.find(self.id)) diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 23d1336c..1d12379f 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -1,4 +1,4 @@ -import bpy, threading, os, json, zipfile, requests +import bpy, threading, os, json from bpy.props import StringProperty, IntProperty, BoolProperty, CollectionProperty, PointerProperty from bpy.types import PropertyGroup, Context, Scene @@ -6,17 +6,15 @@ from ..preferences import * from .. import lib +from .downloader import get_searching_thread, set_searching_thread, retrieve_assets_info, download_previews + -THREAD_SEARCHING = "thread_searching" # thread_search:threading.Thread # progress:int # previews_collection:bpy.utils.previews # preview_items = [] assets_lib = {} last_search = {} -threads = {} # progress:int, - - def load_material_items(material_items, list_tex): material_items.clear() for i in list_tex: @@ -39,236 +37,9 @@ def load_per_material(file_name:str, material_item): material_item.thumb = loaded.icon_id - -def extract_file(my_file:str) -> bool: - dir_name = os.path.dirname(my_file) - # new_folder = os.path.basename(my_file).split('.')[0] - # dir_name = os.path.join(dir_name, new_folder) - print("extract "+my_file+" to "+dir_name) - - try: - with zipfile.ZipFile(my_file, 'r') as zObject: - zObject.extractall(path=dir_name) - return True - except zipfile.BadZipFile: - return False - -# Delete the zip file -def delete_zip(file_path): - if not os.path.exists(file_path): - return - try: - os.remove(file_path) - except Exception as e: - print('Error while deleting zip file:', e) - -def download_stream(link:str, file_name:str, thread_id:str, - timeout:int = 10,skipExisting:bool = False): - # print("url = ",link, "filename", file_name) - - thread = _get_thread(thread_id) - - prog = 0 - with open(file_name, "wb") as f: - try: - response = requests.get(link, stream=True, timeout = timeout) - # session seems to be a little bit faster - #session = requests.Session() - #response = session.get(link, stream=True, timeout = timeout) - total_length = response.headers.get('content-length') - print("total size = "+total_length) - if not total_length: - print('Error #1 while downloading', link, ':', "Empty Response.") - return - - dl = 0 - total_length = int(total_length) - # TODO a way for calculating the chunk size - for data in response.iter_content(chunk_size = 4096): - if thread is not None and thread.cancel: - response.close() - break - - dl += len(data) - f.write(data) - - prog = int(100 * dl / total_length) - # dl_threads[0].progress = prog - thread.progress = prog - # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) - # dl_threads.pop(0) - except Exception as e: - print('Error #2 while downloading', link, ':', e) - -def download_previews(overwrite_existing:bool, material_items): - directory = _get_preview_dir() - if not os.path.exists(directory): - os.mkdir(directory) - thread_search = threads[THREAD_SEARCHING] - - progress_initial = thread_search.progress - progress_max = 90 - span = progress_max - progress_initial - item_count = len(last_search) - - for index,ast in enumerate(last_search): - if thread_search.cancel: - break - link = last_search[ast]["preview"] - file_name = bpy.path.basename(link) - file_name = os.path.join(directory, file_name) - - if not overwrite_existing and os.path.exists(file_name): - continue - with open(file_name, "wb") as f: - try: - response = requests.get(link, stream=True) - total_length = response.headers.get('content-length') - if not total_length: - print('Error #1 while downloading', link, ':', "Empty Response.") - return - dl = 0 - total_length = int(total_length) - for data in response.iter_content(chunk_size = 4096): - if thread_search is not None and thread_search.cancel: - response.close() - return - dl += len(data) - f.write(data) - except Exception as e: - print('Error #2 while downloading', link, ':', e) - prog = (index + 1) / item_count - # print("url = ",prog, ' | ',link,' | ', file_name) - # refresh list - load_per_material(file_name, material_items[index]) - - thread_search.progress = (int) (progress_initial + prog * span) - - - -def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 20): - base_link = "https://ambientCG.com/api/v2/full_json" - params = { - 'type': 'Material', - 'include':'imageData,downloadData', - 'limit': str(limit), - 'offset': str(limit * page) - } - - if keyword != '': - params['q'] = keyword - - dir_name = _get_lib_dir() - file_name = os.path.join(dir_name, "lib.json") - - response = requests.get(base_link, params=params, verify=False) - if not response.status_code == 200: - print("Can't download, Code: " + str(response.status_code)) - return None - - assets = response.json()["foundAssets"] - - print("Found ",len(assets), "textures") - - file = open(file_name, 'w') - - # assets_lib = {} - last_search.clear() - - tex_directory = _get_textures_dir() - - - for asst in assets: - asset_obj = {} - asset_id = asst["assetId"] - asset_obj["id"] = asset_id - asset_obj["preview"] = asst["previewImage"]["256-PNG"] - - zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] - - - - - downloads = {} - for k in zip_assets: - location = os.path.join(asset_id, k["attribute"]) - directory = os.path.join(tex_directory, location) - - downloads[k["attribute"]] = { - "link" : k["downloadLink"], - "fileName" : k["fileName"], - "location" : directory+os.sep, - "size" : k["size"] - } - asset_obj["downloads"] = downloads - assets_lib[asset_id] = asset_obj - last_search[asset_id] = asset_obj - - file.write(json.dumps(assets_lib)) - file.close() - print("stored to ", file_name) - # print("content to ", str(assets_lib)) - - if save_ori: - file_name_ori = os.path.join(dir_name, "lib-ori.json") - file_ori = open(file_name_ori, 'w') - file_ori.write(json.dumps({"foundAssets":assets})) - file_ori.close() - -def _texture_exist(asset_id:str, location:str) -> bool: - if os.path.exists(location): - files = os.listdir(location) - for f in files: - if asset_id in f: - return True - - return False - -def _get_textures_dir() -> str: - file_path = _get_lib_dir() - retval = os.path.join(file_path, "textures") + os.sep - if not os.path.exists(retval): - os.mkdir(retval) - return retval - -def _get_preview_dir() -> str: - file_path = _get_lib_dir() - retval = os.path.join(file_path, "previews") + os.sep - if not os.path.exists(retval): - os.mkdir(retval) - return retval - -def _get_lib_dir() -> str: - ypup:YPaintPreferences = get_user_preferences() - retval = ypup.library_location - if not os.path.exists(retval): - os.mkdir(retval) - return retval - -def _get_thread_id(asset_id:str, asset_attribute:str): - return asset_id+"_"+asset_attribute - -def _get_thread(id:str): - if id in threads: - return threads[id] - return None - -def read_asset_info() -> bool: - dir_name = _get_lib_dir() - file_name = os.path.join(dir_name, "lib.json") - - if os.path.exists(file_name): - file = open(file_name, 'r') - content = file.read() - jsn = json.loads(content) - assets_lib.update(jsn) - file.close() - # print("read ", content) - return True - return False - def cancel_searching(context): - thread_search = threads[THREAD_SEARCHING] + + thread_search = get_searching_thread() thread_search.cancel = True texlib = context.scene.texlib @@ -280,11 +51,47 @@ def update_check_all(self, context): self.check_ambiencg = self.check_all self.check_polyhaven = self.check_all +def get_textures_dir() -> str: + file_path = get_lib_dir() + retval = os.path.join(file_path, "textures") + os.sep + if not os.path.exists(retval): + os.mkdir(retval) + return retval + +def get_preview_dir() -> str: + file_path = get_lib_dir() + retval = os.path.join(file_path, "previews") + os.sep + if not os.path.exists(retval): + os.mkdir(retval) + return retval + +def get_lib_dir() -> str: + ypup:YPaintPreferences = get_user_preferences() + retval = ypup.library_location + if not os.path.exists(retval): + os.mkdir(retval) + return retval + +def read_asset_info() -> bool: + dir_name = get_lib_dir() + file_name = os.path.join(dir_name, "lib.json") + + if os.path.exists(file_name): + file = open(file_name, 'r') + content = file.read() + jsn = json.loads(content) + assets_lib.update(jsn) + file.close() + # print("read ", content) + return True + return False + def searching_material(keyword:str, context:Context): + scene = context.scene txlib:TexLibProps = scene.texlib - thread_search = threads[THREAD_SEARCHING] + thread_search = get_searching_thread() if not len(assets_lib): read_asset_info() @@ -303,7 +110,7 @@ def searching_material(keyword:str, context:Context): def load_previews(): print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") - dir_name = _get_preview_dir() + dir_name = get_preview_dir() files = os.listdir(dir_name) previews_collection.clear() @@ -322,79 +129,10 @@ def load_previews(): previews_collection.preview_items.update(preview_items) -def monitor_downloads(): - - searching = False - if THREAD_SEARCHING in threads: - thread_search = threads[THREAD_SEARCHING] - searching = True - - if not hasattr(bpy, 'context'): - print("no context") - return 2 - scn = bpy.context.scene - txlb:TexLibProps = scn.texlib - downloads = txlb.downloads - - if len(downloads) == 0 and not searching: - # print("KOSONG") - return 2 - - if searching: - prog_search = thread_search.progress - txlb.searching_download.progress = prog_search - if thread_search.progress >= 100: - txlb.searching_download.alive = False - - if not thread_search.is_alive(): - del threads[THREAD_SEARCHING] - - # print("downloadku", len(downloads)) - # for index, dwn in enumerate(downloads): - # print("cek aja",dwn.asset_id," | ",dwn.asset_attribute) - - if len(downloads): - to_remove = [] - dwn:DownloadQueue - for index, dwn in enumerate(downloads): - - thread_id = _get_thread_id(dwn.asset_id, dwn.asset_attribute) - thread = _get_thread(thread_id) - if thread == None: - print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) - extract_file(dwn.file_path) - delete_zip(dwn.file_path) - to_remove.append(index) - - else: - prog = thread.progress - - dwn.progress = prog - if thread.progress >= 100: - dwn.alive = False - - if not thread.is_alive(): - del threads[thread_id] - - for i in to_remove: - downloads.remove(i) - - for window in bpy.context.window_manager.windows: - # print("==============windoss ", window) - for area in window.screen.areas: - if area.type == 'VIEW_3D': - for reg in area.regions: - # print("region",reg.type, "width", reg.width) - open_tab = reg.width > 1 - if reg.type == "UI" and open_tab: - # print("redraw area", area.type, "reg", reg.type) - reg.tag_redraw() - return 0.1 - - return 1.0 def update_input_search(self, context): + if self.input_last == self.input_search: print("no search:"+self.input_search) return @@ -409,21 +147,19 @@ def update_input_search(self, context): return # cancel previous search - if THREAD_SEARCHING in threads: + if get_searching_thread() != None: cancel_searching(context) thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) thread_search.progress = 0 thread_search.cancel = False - threads[THREAD_SEARCHING] = thread_search + set_searching_thread(thread_search) thread_search.start() self.searching_download.progress = 0 self.searching_download.alive = True - - def change_mode_asset(self, context): if not len(assets_lib): read_asset_info() @@ -517,7 +253,6 @@ def register(): if read_asset_info(): load_previews() - bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) def unregister(): @@ -525,8 +260,4 @@ def unregister(): bpy.utils.unregister_class(cl) del bpy.types.Scene.texlib - - bpy.utils.previews.remove(previews_collection) - - if bpy.app.timers.is_registered(monitor_downloads): - bpy.app.timers.unregister(monitor_downloads) \ No newline at end of file + bpy.utils.previews.remove(previews_collection) \ No newline at end of file diff --git a/textures_lib/ui.py b/textures_lib/ui.py index c72d3f94..8f20a261 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -8,7 +8,8 @@ from .properties import TexLibProps, MaterialItem, DownloadQueue from .operators import TexLibAddToUcupaint, TexLibCancelDownload, TexLibDownload, TexLibRemoveTextureAttribute -from .operators import _get_thread, _get_thread_id, _texture_exist +from .operators import get_thread, get_thread_id +from .downloader import texture_exist class TexLibBrowser(Panel): bl_label = "Texlib Browser" @@ -87,7 +88,7 @@ def draw(self, context): ukuran = round(dwn["size"] / 1000000,2) lokasi = dwn["location"] - check_exist:bool = _texture_exist(mat_id, lokasi) + check_exist:bool = texture_exist(mat_id, lokasi) # if local_files_mode and not check_exist: # continue @@ -100,8 +101,8 @@ def draw(self, context): # rr.label(text=d, ) row.label(text=str(ukuran)+ "MB") - thread_id = _get_thread_id(mat_id, d) - dwn_thread = _get_thread(thread_id) + thread_id = get_thread_id(mat_id, d) + dwn_thread = get_thread(thread_id) btn_row = ui_attr.row() btn_row.alignment = "RIGHT" From 70915d778801ad9767d4a330032000fd998c539d Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 21 Aug 2024 15:44:30 +0700 Subject: [PATCH 036/283] retrieve from 2 sources --- textures_lib/data.py | 82 +++++++++++++++++++++++ textures_lib/downloader.py | 132 ++++++++++++++++++++++++++++++++++++- textures_lib/properties.py | 34 ++++++++-- textures_lib/ui.py | 26 ++++---- 4 files changed, 256 insertions(+), 18 deletions(-) create mode 100644 textures_lib/data.py diff --git a/textures_lib/data.py b/textures_lib/data.py new file mode 100644 index 00000000..e949adf7 --- /dev/null +++ b/textures_lib/data.py @@ -0,0 +1,82 @@ +import json +from typing import Any + +class SourceType: + SOURCE_AMBIENTCG = "ambientcg" + SOURCE_TEXTUREHAVEN = "texturehaven" + +class AssetItem: + def __init__(self): + self.id = "" + self.name = "" + self.thumbnail = "" + self.source_type = "" + + self.attributes:dict[str, AssetAttribute] = {} + + def add_attribute(self, attribute:str, link:str) -> 'AssetAttribute': + new_attribute = AssetAttribute() + new_attribute.attribute = attribute + new_attribute.link = link + + self.attributes[attribute] = new_attribute + return new_attribute + + def to_dict(self) -> dict[str, Any]: + return { + "id": self.id, + "name": self.name, + "thumbnail": self.thumbnail, + "source_type": self.source_type, + "attributes": {k: v.to_dict() for k, v in self.attributes.items()} + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> 'AssetItem': + instance = cls() + instance.id = data.get("id", "") + instance.name = data.get("name", "") + instance.thumbnail = data.get("thumbnail", "") + instance.attributes = {k: AssetAttribute.from_dict(v) for k, v in data.get("attributes", {}).items()} + return instance + + def to_json(self) -> str: + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> 'AssetItem': + data = json.loads(json_str) + return cls.from_dict(data) + +class AssetAttribute: + def __init__(self): + self.attribute = "" + self.link = "" # zip file for ambientcg, blend file for texturehaven + self.textures = [] # texture files for texturehaven + + def add_texture(self, texture:str): + self.textures.append(texture) + + def to_dict(self) -> dict[str, Any]: + return { + "attribute": self.attribute, + "link": self.link, + "textures": self.textures + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> 'AssetAttribute': + instance = cls() + instance.attribute = data.get("attribute", "") + instance.link = data.get("link", "") + instance.textures = data.get("textures", []) + return instance + + def to_json(self) -> str: + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> 'AssetAttribute': + data = json.loads(json_str) + return cls.from_dict(data) + \ No newline at end of file diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 992a6d77..44c05304 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -252,6 +252,137 @@ def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, file_ori.write(json.dumps({"foundAssets":assets})) file_ori.close() +from .data import AssetItem, SourceType +def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[str, AssetItem]: + from .properties import get_lib_dir, get_textures_dir + + base_link = "https://ambientCG.com/api/v2/full_json" + params = { + 'type': 'Material', + 'include':'imageData,downloadData', + 'limit': str(limit), + 'offset': str(limit * page) + } + + if keyword != '': + params['q'] = keyword + + response = requests.get(base_link, params=params, verify=False) + if not response.status_code == 200: + print("Can't download, Code: " + str(response.status_code)) + return None + + assets = response.json()["foundAssets"] + + print("Found ",len(assets), "textures") + + + tex_directory = get_textures_dir() + + retval:dict[str, AssetItem] = {} + + for asst in assets: + asset_id = asst["assetId"] + thumbnail = asst["previewImage"]["256-PNG"] + + zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] + + downloads = {} + + new_item = AssetItem() + new_item.id = asset_id + new_item.name = asset_id + new_item.thumbnail = thumbnail + new_item.source_type = SourceType.SOURCE_AMBIENTCG + + for k in zip_assets: + attr = k["attribute"] + location = os.path.join(asset_id, attr) + directory = os.path.join(tex_directory, location) + + downloads[attr] = { + "link" : k["downloadLink"], + "fileName" : k["fileName"], + "location" : directory+os.sep, + "size" : k["size"] + } + + new_item.add_attribute(attr, k["downloadLink"]) + + retval[new_item.id] = new_item + + return retval + +def retrieve_polyhaven_asset(id:str, thumb_url:str)->AssetItem: + base_link = "https://api.polyhaven.com/files/"+id + response = requests.get(base_link, verify=False) + + if not response.status_code == 200: + print("Can't download, Code: " + str(response.status_code)) + return None + + retval = AssetItem() + retval.source_type = SourceType.SOURCE_TEXTUREHAVEN + retval.id = id + retval.name = id + retval.thumbnail = thumb_url + + obj = response.json() + blend_obj = obj["blend"] + for k in blend_obj.keys(): + blend_attr = blend_obj[k]["blend"] + blnd_url = blend_attr["url"] + includes = blend_attr["include"] + + new_attr = retval.add_attribute(k, blnd_url) + + print("k ", k, " content ", includes) + + for ic in includes.keys(): + inc_itm = includes[ic] + # print("ic ", ic, " content ", inc_itm) + new_attr.add_texture(inc_itm["url"]) + + return retval + + +def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[str, AssetItem]: + + base_link = "https://api.polyhaven.com/assets" + params = { + 'type': 'textures', + # 'limit': str(limit), + # 'offset': str(limit * page) + } + + if keyword != '': + params['c'] = keyword + + print("retrieve_polyhaven", base_link, params) + response = requests.get(base_link, params=params, verify=False) + if not response.status_code == 200: + print("Can't download, Code: " + str(response.status_code)) + return None + + + retval:dict[str, AssetItem] = {} + + obj_assets = response.json() + # print("response ", json.dumps(obj_assets)) + + for i, id in enumerate(obj_assets.keys()): + # print("index ", i, "id ", id) + if i >= limit: + break + + it = obj_assets[id] + # print("index ", i, "id ", id, "name ", it["name"], "thumb ", it["thumbnail_url"]) + new_item = retrieve_polyhaven_asset(id, it["thumbnail_url"]) + retval[new_item.id] = new_item + + return retval + + def texture_exist(asset_id:str, location:str) -> bool: if os.path.exists(location): files = os.listdir(location) @@ -283,7 +414,6 @@ def delete_zip(file_path): except Exception as e: print('Error while deleting zip file:', e) - def register(): bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 1d12379f..207b98a6 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -6,13 +6,12 @@ from ..preferences import * from .. import lib -from .downloader import get_searching_thread, set_searching_thread, retrieve_assets_info, download_previews +from .downloader import get_searching_thread, set_searching_thread, retrieve_ambientcg, retrieve_assets_info, download_previews, retrieve_polyhaven +from .data import AssetItem +assets_lib = {} -# thread_search:threading.Thread # progress:int -# previews_collection:bpy.utils.previews -# preview_items = [] -assets_lib = {} +assets_library:dict[str, AssetItem] = {} last_search = {} def load_material_items(material_items, list_tex): @@ -96,6 +95,14 @@ def searching_material(keyword:str, context:Context): if not len(assets_lib): read_asset_info() + list_ambient = retrieve_ambientcg(keyword) + assets_library.update(list_ambient) + list_polyhaven = retrieve_polyhaven(keyword) + assets_library.update(list_polyhaven) + + + save_library_to_file() + retrieve_assets_info(keyword) thread_search.progress = 10 load_material_items(txlib.material_items, last_search) @@ -108,6 +115,21 @@ def searching_material(keyword:str, context:Context): load_material_items(txlib.material_items, last_search) thread_search.progress = 100 +def save_library_to_file(): + dir_name = get_lib_dir() + file_name = os.path.join(dir_name, "assets.json") + + file = open(file_name, 'w') + + to_write = {} + for key in assets_library: + to_write[key] = assets_library[key].to_dict() + + file.write(json.dumps(to_write)) + file.close() + print("stored to ", file_name) + + def load_previews(): print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") dir_name = get_preview_dir() @@ -192,7 +214,7 @@ class TextureItem (PropertyGroup): class MaterialItem(PropertyGroup): name: StringProperty( name="Name", description="Material name", default="Untitled") - thumb: IntProperty( name="thumbnail", description="", default=0) + # thumb: IntProperty( name="thumbnail", description="", default=0) class DownloadQueue(PropertyGroup): asset_id : StringProperty() diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 8f20a261..cf5b0bea 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -8,8 +8,8 @@ from .properties import TexLibProps, MaterialItem, DownloadQueue from .operators import TexLibAddToUcupaint, TexLibCancelDownload, TexLibDownload, TexLibRemoveTextureAttribute -from .operators import get_thread, get_thread_id -from .downloader import texture_exist + +from .downloader import texture_exist, get_thread, get_thread_id class TexLibBrowser(Panel): bl_label = "Texlib Browser" @@ -69,14 +69,15 @@ def draw(self, context): sel_mat:MaterialItem = my_list[sel_index] mat_id:str = sel_mat.name - + thumb = _get_asset_preview(mat_id) + layout.separator() layout.label(text="Preview:") prev_box = layout.box() selected_mat = prev_box.column(align=True) selected_mat.alignment = "CENTER" - selected_mat.template_icon(icon_value=sel_mat.thumb, scale=5.0) + selected_mat.template_icon(icon_value=thumb, scale=5.0) selected_mat.label(text=mat_id) downloads = assets_lib[mat_id]["downloads"] @@ -151,13 +152,7 @@ class TEXLIB_UL_Material(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): """Demo UIList.""" - from .properties import previews_collection - - item_id = item.name - if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: - thumb = previews_collection.preview_items[item_id][3] - else: - thumb = lib.custom_icons["input"].icon_id + thumb = _get_asset_preview(item.name) row = layout.row(align=True) if self.layout_type in {'DEFAULT', 'COMPACT'}: @@ -175,6 +170,15 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn TEXLIB_UL_Downloads ] +def _get_asset_preview(item_id:str): + from .properties import previews_collection + + if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: + thumb = previews_collection.preview_items[item_id][3] + else: + thumb = lib.custom_icons["input"].icon_id + return thumb + def register(): for cls in classes: bpy.utils.register_class(cls) From 3f81cf56fe8f4aec4fee5e31154214e0036900c1 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 21 Aug 2024 16:43:35 +0700 Subject: [PATCH 037/283] new search system --- textures_lib/downloader.py | 65 +++++++++++++++++++++++++++--- textures_lib/properties.py | 33 +++++++++++----- textures_lib/ui.py | 81 +++++++++++++++++++------------------- 3 files changed, 124 insertions(+), 55 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 44c05304..734e91fa 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -134,6 +134,61 @@ def monitor_downloads(): return 1.0 +from .data import AssetItem + +def download_asset_previews(overwrite_existing:bool, search_results:dict[str, AssetItem], search_items): + from .properties import get_preview_dir, load_per_material + + directory = get_preview_dir() + + if not os.path.exists(directory): + os.mkdir(directory) + + thread_search = threads[THREAD_SEARCHING] + + progress_initial = thread_search.progress + progress_max = 90 + span = progress_max - progress_initial + item_count = len(search_results) + + for index,ast in enumerate(search_results.keys()): + if thread_search.cancel: + break + + link = search_results[ast].thumbnail + file_name = bpy.path.basename(link) + # remove parameters + file_name = file_name.split("?")[0] + file_name = os.path.join(directory, file_name) + + if not overwrite_existing and os.path.exists(file_name): + continue + + with open(file_name, "wb") as f: + try: + print("download "+link+" to "+file_name) + response = requests.get(link, stream=True) + total_length = response.headers.get('content-length') + if not total_length: + print('Error #1 while downloading', link, ':', "Empty Response.") + return + dl = 0 + total_length = int(total_length) + for data in response.iter_content(chunk_size = 4096): + if thread_search is not None and thread_search.cancel: + response.close() + return + dl += len(data) + f.write(data) + except Exception as e: + print('Error #2 while downloading', link, ':', e) + prog = (index + 1) / item_count + # print("url = ",prog, ' | ',link,' | ', file_name) + # refresh list + load_per_material(file_name, search_items[index]) + + thread_search.progress = (int) (progress_initial + prog * span) + def download_previews(overwrite_existing:bool, material_items): from .properties import get_preview_dir, load_per_material from .properties import last_search @@ -313,7 +368,7 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s return retval -def retrieve_polyhaven_asset(id:str, thumb_url:str)->AssetItem: +def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str)->AssetItem: base_link = "https://api.polyhaven.com/files/"+id response = requests.get(base_link, verify=False) @@ -324,7 +379,7 @@ def retrieve_polyhaven_asset(id:str, thumb_url:str)->AssetItem: retval = AssetItem() retval.source_type = SourceType.SOURCE_TEXTUREHAVEN retval.id = id - retval.name = id + retval.name = asset_name retval.thumbnail = thumb_url obj = response.json() @@ -335,9 +390,7 @@ def retrieve_polyhaven_asset(id:str, thumb_url:str)->AssetItem: includes = blend_attr["include"] new_attr = retval.add_attribute(k, blnd_url) - - print("k ", k, " content ", includes) - + # print("k ", k, " content ", includes) for ic in includes.keys(): inc_itm = includes[ic] # print("ic ", ic, " content ", inc_itm) @@ -377,7 +430,7 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s it = obj_assets[id] # print("index ", i, "id ", id, "name ", it["name"], "thumb ", it["thumbnail_url"]) - new_item = retrieve_polyhaven_asset(id, it["thumbnail_url"]) + new_item = retrieve_polyhaven_asset(id, it["name"], it["thumbnail_url"]) retval[new_item.id] = new_item return retval diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 207b98a6..9eb4e95b 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -6,7 +6,7 @@ from ..preferences import * from .. import lib -from .downloader import get_searching_thread, set_searching_thread, retrieve_ambientcg, retrieve_assets_info, download_previews, retrieve_polyhaven +from .downloader import get_searching_thread, set_searching_thread, retrieve_ambientcg, retrieve_assets_info, download_previews, retrieve_polyhaven, download_asset_previews from .data import AssetItem assets_lib = {} @@ -95,17 +95,27 @@ def searching_material(keyword:str, context:Context): if not len(assets_lib): read_asset_info() - list_ambient = retrieve_ambientcg(keyword) - assets_library.update(list_ambient) + search_results:dict[str, AssetItem] + search_results = retrieve_ambientcg(keyword) list_polyhaven = retrieve_polyhaven(keyword) - assets_library.update(list_polyhaven) + search_results.update(list_polyhaven) + save_library_to_file(search_results, "last-search.json") - save_library_to_file() + txlib.search_items.clear() + for key in search_results: + new_item:MaterialItem = txlib.search_items.add() + asst_item = search_results[key] + new_item.name = asst_item.name + new_item.asset_id = asst_item.id + new_item.source_type = asst_item.source_type + + download_asset_previews(False, search_results, txlib.search_items) retrieve_assets_info(keyword) thread_search.progress = 10 load_material_items(txlib.material_items, last_search) + download_previews(False, txlib.material_items) thread_search.progress = 90 @@ -115,15 +125,15 @@ def searching_material(keyword:str, context:Context): load_material_items(txlib.material_items, last_search) thread_search.progress = 100 -def save_library_to_file(): +def save_library_to_file(list:dict[str, AssetItem], file_name:str): dir_name = get_lib_dir() - file_name = os.path.join(dir_name, "assets.json") + file_name = os.path.join(dir_name, file_name) file = open(file_name, 'w') to_write = {} - for key in assets_library: - to_write[key] = assets_library[key].to_dict() + for key in list: + to_write[key] = list[key].to_dict() file.write(json.dumps(to_write)) file.close() @@ -213,7 +223,9 @@ class TextureItem (PropertyGroup): blend_file: StringProperty(name="Blend File", subtype="FILE_PATH") class MaterialItem(PropertyGroup): + asset_id: StringProperty(name="Asset ID") name: StringProperty( name="Name", description="Material name", default="Untitled") + source_type: StringProperty( name="Source Type", description="Source type", default="") # thumb: IntProperty( name="thumbnail", description="", default=0) class DownloadQueue(PropertyGroup): @@ -244,6 +256,9 @@ class TexLibProps(PropertyGroup): downloaded_material_items:CollectionProperty(type= MaterialItem) downloaded_material_index:IntProperty(default=0, name="Material index") + + search_items:CollectionProperty(type= MaterialItem) + search_index:IntProperty(default=0, name="Search index") # mode_asset:EnumProperty( # items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), # name = 'Location', diff --git a/textures_lib/ui.py b/textures_lib/ui.py index cf5b0bea..7e881f6f 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -31,8 +31,8 @@ def draw(self, context): # sel_index = texlib.downloaded_material_index # my_list = texlib.downloaded_material_items # else: - sel_index = texlib.material_index - my_list = texlib.material_items + sel_index = texlib.search_index + my_list = texlib.search_items layout.prop(texlib, "input_search") source_search = layout.row() @@ -63,11 +63,11 @@ def draw(self, context): layout.label(text="Textures:") col_lay = layout.row() - col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "material_items", texlib, "material_index") + col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "search_items", texlib, "search_index") if sel_index < len(my_list): sel_mat:MaterialItem = my_list[sel_index] - mat_id:str = sel_mat.name + mat_id:str = sel_mat.asset_id thumb = _get_asset_preview(mat_id) @@ -79,54 +79,54 @@ def draw(self, context): selected_mat.alignment = "CENTER" selected_mat.template_icon(icon_value=thumb, scale=5.0) selected_mat.label(text=mat_id) - downloads = assets_lib[mat_id]["downloads"] + # downloads = assets_lib[mat_id]["downloads"] layout.separator() layout.label(text="Attributes:") - for d in downloads: - dwn = downloads[d] - # row.alignment = "LEFT" - ukuran = round(dwn["size"] / 1000000,2) - lokasi = dwn["location"] + # for d in downloads: + # dwn = downloads[d] + # # row.alignment = "LEFT" + # ukuran = round(dwn["size"] / 1000000,2) + # lokasi = dwn["location"] - check_exist:bool = texture_exist(mat_id, lokasi) + # check_exist:bool = texture_exist(mat_id, lokasi) - # if local_files_mode and not check_exist: - # continue + # # if local_files_mode and not check_exist: + # # continue - ui_attr = layout.split(factor=0.7) + # ui_attr = layout.split(factor=0.7) - row = ui_attr.row() + # row = ui_attr.row() - row.label(text=d, ) - # rr.label(text=d, ) - row.label(text=str(ukuran)+ "MB") + # row.label(text=d, ) + # # rr.label(text=d, ) + # row.label(text=str(ukuran)+ "MB") - thread_id = get_thread_id(mat_id, d) - dwn_thread = get_thread(thread_id) + # thread_id = get_thread_id(mat_id, d) + # dwn_thread = get_thread(thread_id) - btn_row = ui_attr.row() - btn_row.alignment = "RIGHT" + # btn_row = ui_attr.row() + # btn_row.alignment = "RIGHT" - if dwn_thread != None: - btn_row.label(text=str(dwn_thread.progress)+"%") - op:TexLibCancelDownload = btn_row.operator("texlib.cancel", icon="X") - op.attribute = d - op.id = mat_id - else: - if check_exist: - op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") - op.attribute = d - op.id = sel_mat.name + # if dwn_thread != None: + # btn_row.label(text=str(dwn_thread.progress)+"%") + # op:TexLibCancelDownload = btn_row.operator("texlib.cancel", icon="X") + # op.attribute = d + # op.id = mat_id + # else: + # if check_exist: + # op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") + # op.attribute = d + # op.id = sel_mat.name - op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") - op_remove.attribute = d - op_remove.id = sel_mat.name + # op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") + # op_remove.attribute = d + # op_remove.id = sel_mat.name - op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") - op.attribute = d - op.id = sel_mat.name - op.file_exist = check_exist + # op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") + # op.attribute = d + # op.id = sel_mat.name + # op.file_exist = check_exist if len(texlib.downloads): layout.separator() @@ -152,12 +152,13 @@ class TEXLIB_UL_Material(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): """Demo UIList.""" - thumb = _get_asset_preview(item.name) + thumb = _get_asset_preview(item.asset_id) row = layout.row(align=True) if self.layout_type in {'DEFAULT', 'COMPACT'}: row.template_icon(icon_value = thumb, scale = 1.0) row.label(text=item.name) + row.label(text="("+item.source_type+")") elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' From 587e3a0ea635bec8c89290fb9218118a15052f97 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 21 Aug 2024 17:37:54 +0700 Subject: [PATCH 038/283] typo --- textures_lib/data.py | 6 +++--- textures_lib/downloader.py | 2 +- textures_lib/properties.py | 5 ++++- textures_lib/ui.py | 4 ++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/textures_lib/data.py b/textures_lib/data.py index e949adf7..50bd9c17 100644 --- a/textures_lib/data.py +++ b/textures_lib/data.py @@ -3,7 +3,7 @@ class SourceType: SOURCE_AMBIENTCG = "ambientcg" - SOURCE_TEXTUREHAVEN = "texturehaven" + SOURCE_POLYHAVEN = "polyhaven" class AssetItem: def __init__(self): @@ -51,8 +51,8 @@ def from_json(cls, json_str: str) -> 'AssetItem': class AssetAttribute: def __init__(self): self.attribute = "" - self.link = "" # zip file for ambientcg, blend file for texturehaven - self.textures = [] # texture files for texturehaven + self.link = "" # zip file for ambientcg, blend file for + self.textures = [] # texture files for def add_texture(self, texture:str): self.textures.append(texture) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 734e91fa..a4ce69d8 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -377,7 +377,7 @@ def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str)->AssetItem: return None retval = AssetItem() - retval.source_type = SourceType.SOURCE_TEXTUREHAVEN + retval.source_type = SourceType.SOURCE_POLYHAVEN retval.id = id retval.name = asset_name retval.thumbnail = thumb_url diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 9eb4e95b..34d66ec9 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -100,6 +100,8 @@ def searching_material(keyword:str, context:Context): list_polyhaven = retrieve_polyhaven(keyword) search_results.update(list_polyhaven) + assets_library.update(search_results) + save_library_to_file(search_results, "last-search.json") txlib.search_items.clear() @@ -171,8 +173,9 @@ def update_input_search(self, context): self.input_last = self.input_search - txlib = context.scene.texlib + txlib:TexLibProps = context.scene.texlib txlib.material_items.clear() + txlib.search_items.clear() if self.input_search == '': last_search.clear() diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 7e881f6f..918a7c90 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -4,7 +4,7 @@ from .. import lib -from .properties import assets_lib +from .properties import assets_library from .properties import TexLibProps, MaterialItem, DownloadQueue from .operators import TexLibAddToUcupaint, TexLibCancelDownload, TexLibDownload, TexLibRemoveTextureAttribute @@ -79,7 +79,7 @@ def draw(self, context): selected_mat.alignment = "CENTER" selected_mat.template_icon(icon_value=thumb, scale=5.0) selected_mat.label(text=mat_id) - # downloads = assets_lib[mat_id]["downloads"] + downloads = assets_library[mat_id] layout.separator() layout.label(text="Attributes:") From 9983077155faae890057350c94dc0e1d6da6eda8 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 22 Aug 2024 13:52:07 +0700 Subject: [PATCH 039/283] can download ambientcg --- textures_lib/data.py | 45 ++++++++++++++++++----- textures_lib/downloader.py | 29 +++++---------- textures_lib/operators.py | 20 +++++----- textures_lib/ui.py | 75 +++++++++++++++++++------------------- 4 files changed, 92 insertions(+), 77 deletions(-) diff --git a/textures_lib/data.py b/textures_lib/data.py index 50bd9c17..5b041215 100644 --- a/textures_lib/data.py +++ b/textures_lib/data.py @@ -14,10 +14,10 @@ def __init__(self): self.attributes:dict[str, AssetAttribute] = {} - def add_attribute(self, attribute:str, link:str) -> 'AssetAttribute': + def add_attribute(self, attribute:str, link:str, file_name:str, size:int) -> 'AssetAttribute': new_attribute = AssetAttribute() new_attribute.attribute = attribute - new_attribute.link = link + new_attribute.asset = AssetDownload(link, file_name, size) self.attributes[attribute] = new_attribute return new_attribute @@ -51,19 +51,20 @@ def from_json(cls, json_str: str) -> 'AssetItem': class AssetAttribute: def __init__(self): self.attribute = "" - self.link = "" # zip file for ambientcg, blend file for - self.textures = [] # texture files for + self.asset:AssetDownload = None + self.textures:list[AssetDownload] = [] # texture files for - def add_texture(self, texture:str): - self.textures.append(texture) + def add_texture(self, texture:str, size:int) -> None: + file_name:str = texture.split("/")[-1] + self.textures.append(AssetDownload(texture, file_name, size)) def to_dict(self) -> dict[str, Any]: return { "attribute": self.attribute, - "link": self.link, - "textures": self.textures + "asset": self.asset.to_dict() if self.asset else None, + "textures": [t.to_dict() for t in self.textures] } - + @classmethod def from_dict(cls, data: dict[str, Any]) -> 'AssetAttribute': instance = cls() @@ -79,4 +80,30 @@ def to_json(self) -> str: def from_json(cls, json_str: str) -> 'AssetAttribute': data = json.loads(json_str) return cls.from_dict(data) + +class AssetDownload: + def __init__(self, link:str, file_name:str, size:int): + self.size = size + self.link = link + self.file_name = file_name + + def to_dict(self) -> dict[str, Any]: + return { + "size": self.size, + "link": self.link, + "file_name": self.file_name + } + + @classmethod + def from_dict(cls, data: dict[str, Any]) -> 'AssetDownload': + instance = cls(data.get("link", ""), data.get("file_name", ""), data.get("size", 0)) + return instance + + def to_json(self) -> str: + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> 'AssetDownload': + data = json.loads(json_str) + return cls.from_dict(data) \ No newline at end of file diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index a4ce69d8..9703b21a 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -331,9 +331,6 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s print("Found ",len(assets), "textures") - - tex_directory = get_textures_dir() - retval:dict[str, AssetItem] = {} for asst in assets: @@ -342,7 +339,6 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] - downloads = {} new_item = AssetItem() new_item.id = asset_id @@ -352,18 +348,7 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s for k in zip_assets: attr = k["attribute"] - location = os.path.join(asset_id, attr) - directory = os.path.join(tex_directory, location) - - downloads[attr] = { - "link" : k["downloadLink"], - "fileName" : k["fileName"], - "location" : directory+os.sep, - "size" : k["size"] - } - - new_item.add_attribute(attr, k["downloadLink"]) - + new_item.add_attribute(attr, k["downloadLink"], k["fileName"], k["size"]) retval[new_item.id] = new_item return retval @@ -388,13 +373,15 @@ def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str)->AssetItem: blend_attr = blend_obj[k]["blend"] blnd_url = blend_attr["url"] includes = blend_attr["include"] + file_name = blnd_url.split("/")[-1] - new_attr = retval.add_attribute(k, blnd_url) + new_attr = retval.add_attribute(k, blnd_url, file_name, blend_attr["size"]) # print("k ", k, " content ", includes) for ic in includes.keys(): inc_itm = includes[ic] - # print("ic ", ic, " content ", inc_itm) - new_attr.add_texture(inc_itm["url"]) + url = inc_itm["url"] + # get file name from url + new_attr.add_texture(url, inc_itm["size"]) return retval @@ -436,7 +423,9 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s return retval -def texture_exist(asset_id:str, location:str) -> bool: +from .properties import get_textures_dir +def texture_exist(asset_id:str, attribute:str) -> bool: + location = os.path.join(get_textures_dir(), asset_id, attribute) if os.path.exists(location): files = os.listdir(location) for f in files: diff --git a/textures_lib/operators.py b/textures_lib/operators.py index b1d68b74..17201a6e 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -10,7 +10,7 @@ from .downloader import download_stream, get_thread_id, get_thread from .downloader import threads -from .properties import assets_lib, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching +from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" @@ -36,9 +36,7 @@ def draw(self, context): self.draw_operator(context) def execute(self, context): - lib = assets_lib[self.id] - attr_dwn = lib["downloads"][self.attribute] - directory = attr_dwn["location"] + directory = os.path.join(get_textures_dir(), self.id, self.attribute) import_list = os.listdir(directory) if not self.open_images_to_single_layer(context, directory, import_list): @@ -114,8 +112,8 @@ class TexLibDownload(Operator): bl_idname = "texlib.download" attribute:StringProperty() + path_download:StringProperty() id:StringProperty() - file_size:IntProperty file_exist:BoolProperty(default=False) def invoke(self, context, event): @@ -129,11 +127,11 @@ def draw(self, context:bpy.context): layout.label(text="Already downloaded. Overwrite?", icon="QUESTION") def execute(self, context): - lib = assets_lib[self.id] - attr_dwn = lib["downloads"][self.attribute] - link = attr_dwn["link"] - directory = attr_dwn["location"] - file_name = os.path.join(directory, attr_dwn["fileName"]) + asset_item = assets_library[self.id] + attribute_item = asset_item.attributes[self.attribute] + link = attribute_item.asset.link + directory = os.path.join( get_textures_dir(), self.id, self.attribute) + file_name = os.path.join(directory, attribute_item.asset.file_name) if not os.path.exists(directory): # print("make dir "+directory) @@ -153,7 +151,7 @@ def execute(self, context): new_dwn.file_path = file_name new_dwn.asset_attribute = self.attribute new_dwn.alive = True - new_dwn.file_size = attr_dwn["size"] + new_dwn.file_size = attribute_item.asset.size new_dwn.progress = 0 return {'FINISHED'} diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 918a7c90..1754401d 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -79,54 +79,55 @@ def draw(self, context): selected_mat.alignment = "CENTER" selected_mat.template_icon(icon_value=thumb, scale=5.0) selected_mat.label(text=mat_id) - downloads = assets_library[mat_id] + download = assets_library[mat_id] layout.separator() layout.label(text="Attributes:") - # for d in downloads: - # dwn = downloads[d] - # # row.alignment = "LEFT" - # ukuran = round(dwn["size"] / 1000000,2) - # lokasi = dwn["location"] + for d in download.attributes: + attribute = download.attributes[d] + current_asset = attribute.asset + # row.alignment = "LEFT" + total_size = current_asset.size + for t in attribute.textures: + total_size += t.size + + ukuran = round(total_size / 1000000,2) - # check_exist:bool = texture_exist(mat_id, lokasi) + check_exist:bool = texture_exist(mat_id, d) - # # if local_files_mode and not check_exist: - # # continue + ui_attr = layout.split(factor=0.7) - # ui_attr = layout.split(factor=0.7) + row = ui_attr.row() - # row = ui_attr.row() + row.label(text=d, ) + # rr.label(text=d, ) + row.label(text=str(ukuran)+ "MB") - # row.label(text=d, ) - # # rr.label(text=d, ) - # row.label(text=str(ukuran)+ "MB") + thread_id = get_thread_id(mat_id, d) + dwn_thread = get_thread(thread_id) - # thread_id = get_thread_id(mat_id, d) - # dwn_thread = get_thread(thread_id) + btn_row = ui_attr.row() + btn_row.alignment = "RIGHT" - # btn_row = ui_attr.row() - # btn_row.alignment = "RIGHT" + if dwn_thread != None: + btn_row.label(text=str(dwn_thread.progress)+"%") + op:TexLibCancelDownload = btn_row.operator("texlib.cancel", icon="X") + op.attribute = d + op.id = mat_id + else: + if check_exist: + op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") + op.attribute = d + op.id = sel_mat.name - # if dwn_thread != None: - # btn_row.label(text=str(dwn_thread.progress)+"%") - # op:TexLibCancelDownload = btn_row.operator("texlib.cancel", icon="X") - # op.attribute = d - # op.id = mat_id - # else: - # if check_exist: - # op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") - # op.attribute = d - # op.id = sel_mat.name + op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") + op_remove.attribute = d + op_remove.id = sel_mat.name - # op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") - # op_remove.attribute = d - # op_remove.id = sel_mat.name - - # op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") - # op.attribute = d - # op.id = sel_mat.name - # op.file_exist = check_exist + op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") + op.id = sel_mat.asset_id + op.attribute = d + op.file_exist = check_exist if len(texlib.downloads): layout.separator() @@ -158,7 +159,7 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn if self.layout_type in {'DEFAULT', 'COMPACT'}: row.template_icon(icon_value = thumb, scale = 1.0) row.label(text=item.name) - row.label(text="("+item.source_type+")") + row.label(text=item.source_type) elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' From 0a695769c1e1df4dcb7d4e4b0e58d86e4b9e3bf0 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 22 Aug 2024 16:49:31 +0700 Subject: [PATCH 040/283] can download textures of polyhaven --- textures_lib/data.py | 6 +++--- textures_lib/downloader.py | 25 +++++++++++++++++-------- textures_lib/operators.py | 31 +++++++++++++++++++++++++++++-- textures_lib/properties.py | 2 ++ 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/textures_lib/data.py b/textures_lib/data.py index 5b041215..c96cd612 100644 --- a/textures_lib/data.py +++ b/textures_lib/data.py @@ -4,6 +4,7 @@ class SourceType: SOURCE_AMBIENTCG = "ambientcg" SOURCE_POLYHAVEN = "polyhaven" + SOURCE_POLYHAVEN_TEXTURE = "polyhaven-texture" class AssetItem: def __init__(self): @@ -54,8 +55,7 @@ def __init__(self): self.asset:AssetDownload = None self.textures:list[AssetDownload] = [] # texture files for - def add_texture(self, texture:str, size:int) -> None: - file_name:str = texture.split("/")[-1] + def add_texture(self, texture:str, file_name:str, size:int) -> None: self.textures.append(AssetDownload(texture, file_name, size)) def to_dict(self) -> dict[str, Any]: @@ -69,7 +69,7 @@ def to_dict(self) -> dict[str, Any]: def from_dict(cls, data: dict[str, Any]) -> 'AssetAttribute': instance = cls() instance.attribute = data.get("attribute", "") - instance.link = data.get("link", "") + instance.asset = AssetDownload.from_dict(data.get("asset", {})) instance.textures = data.get("textures", []) return instance diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 9703b21a..51dffffc 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -5,8 +5,11 @@ THREAD_SEARCHING = "thread_searching" threads = {} # progress:int, -def get_thread_id(asset_id:str, asset_attribute:str): - return asset_id+"_"+asset_attribute +def get_thread_id(asset_id:str, asset_attribute:str, texture_index:int = -1): + if texture_index >= 0: + return asset_id+"_"+asset_attribute+"_"+str(texture_index) + else: + return asset_id+"_"+asset_attribute def get_thread(id:str): if id in threads: @@ -98,15 +101,21 @@ def monitor_downloads(): to_remove = [] dwn:DownloadQueue for index, dwn in enumerate(downloads): - - thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute) + if dwn.source_type == SourceType.SOURCE_POLYHAVEN_TEXTURE: + txt_idx = dwn.texture_index + thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute, txt_idx) + else: + thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute) + thread = get_thread(thread_id) if thread == None: print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) - extract_file(dwn.file_path) - delete_zip(dwn.file_path) + if dwn.source_type == SourceType.SOURCE_AMBIENTCG: + extract_file(dwn.file_path) + delete_zip(dwn.file_path) + elif dwn.source_type == SourceType.SOURCE_POLYHAVEN_TEXTURE: + pass to_remove.append(index) - else: prog = thread.progress @@ -381,7 +390,7 @@ def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str)->AssetItem: inc_itm = includes[ic] url = inc_itm["url"] # get file name from url - new_attr.add_texture(url, inc_itm["size"]) + new_attr.add_texture(url, ic, inc_itm["size"]) return retval diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 17201a6e..6c273730 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -141,19 +141,46 @@ def execute(self, context): new_thread = threading.Thread(target=download_stream, args=(link,file_name,thread_id,)) new_thread.progress = 0 new_thread.cancel = False - threads[get_thread_id(self.id, self.attribute)] = new_thread + threads[thread_id] = new_thread new_thread.start() - texlib = context.scene.texlib + texlib:TexLibProps = context.scene.texlib new_dwn:DownloadQueue = texlib.downloads.add() new_dwn.asset_id = self.id new_dwn.file_path = file_name + new_dwn.source_type = asset_item.source_type new_dwn.asset_attribute = self.attribute new_dwn.alive = True new_dwn.file_size = attribute_item.asset.size new_dwn.progress = 0 + from .data import SourceType + for idx, attr in enumerate(attribute_item.textures): + + txt_file = os.path.join(directory, attr.file_name) + txr_dir = os.path.dirname(txt_file) + if not os.path.exists(txr_dir): + os.makedirs(txr_dir) + + thread_txt_id = get_thread_id(self.id, self.attribute, idx) + new_thread_txt = threading.Thread(target=download_stream, args=(attr.link, txt_file, thread_txt_id,)) + new_thread_txt.progress = 0 + new_thread_txt.cancel = False + threads[thread_txt_id] = new_thread_txt + + new_thread_txt.start() + + new_dwn_txt:DownloadQueue = texlib.downloads.add() + new_dwn_txt.asset_id = self.id + new_dwn_txt.file_path = txt_file + new_dwn_txt.source_type = SourceType.SOURCE_POLYHAVEN_TEXTURE + new_dwn_txt.asset_attribute = self.attribute + new_dwn_txt.texture_index = idx + new_dwn_txt.alive = True + new_dwn_txt.file_size = attr.size + new_dwn_txt.progress = 0 + return {'FINISHED'} class TexLibCancelSearch(Operator): diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 34d66ec9..6fe78f7a 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -234,7 +234,9 @@ class MaterialItem(PropertyGroup): class DownloadQueue(PropertyGroup): asset_id : StringProperty() asset_attribute: StringProperty() + texture_index: IntProperty(default=-1) file_path : StringProperty() + source_type: StringProperty() alive : BoolProperty(default = False) file_size:IntProperty() progress : IntProperty( From 30ab5f4a02335713eebdd56736a20334a1f237f1 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 23 Aug 2024 17:41:04 +0700 Subject: [PATCH 041/283] setup asset library --- textures_lib/data.py | 11 +- textures_lib/downloader.py | 28 +-- textures_lib/operators.py | 21 +- textures_lib/properties.py | 412 ++++++++++++++++++++----------------- textures_lib/ui.py | 15 +- 5 files changed, 267 insertions(+), 220 deletions(-) diff --git a/textures_lib/data.py b/textures_lib/data.py index c96cd612..272d2327 100644 --- a/textures_lib/data.py +++ b/textures_lib/data.py @@ -38,7 +38,9 @@ def from_dict(cls, data: dict[str, Any]) -> 'AssetItem': instance.id = data.get("id", "") instance.name = data.get("name", "") instance.thumbnail = data.get("thumbnail", "") + instance.source_type = data.get("source_type", "") instance.attributes = {k: AssetAttribute.from_dict(v) for k, v in data.get("attributes", {}).items()} + return instance def to_json(self) -> str: @@ -60,9 +62,12 @@ def add_texture(self, texture:str, file_name:str, size:int) -> None: def to_dict(self) -> dict[str, Any]: return { + # "attribute": self.attribute, + # "asset": self.asset.to_dict() if self.asset else None, + # "textures": [t.to_dict() for t in self.textures] "attribute": self.attribute, - "asset": self.asset.to_dict() if self.asset else None, - "textures": [t.to_dict() for t in self.textures] + "asset": self.asset.to_dict(), + "textures": [t.to_dict() for t in self.textures] } @classmethod @@ -70,7 +75,7 @@ def from_dict(cls, data: dict[str, Any]) -> 'AssetAttribute': instance = cls() instance.attribute = data.get("attribute", "") instance.asset = AssetDownload.from_dict(data.get("asset", {})) - instance.textures = data.get("textures", []) + instance.textures = [AssetDownload.from_dict(t) for t in data.get("textures", [])] return instance def to_json(self) -> str: diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 51dffffc..6f3c5f8f 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -113,6 +113,8 @@ def monitor_downloads(): if dwn.source_type == SourceType.SOURCE_AMBIENTCG: extract_file(dwn.file_path) delete_zip(dwn.file_path) + dir_file = os.path.dirname(dwn.file_path) + convert_ambientcg_asset(dir_file) elif dwn.source_type == SourceType.SOURCE_POLYHAVEN_TEXTURE: pass to_remove.append(index) @@ -144,11 +146,10 @@ def monitor_downloads(): return 1.0 from .data import AssetItem - -def download_asset_previews(overwrite_existing:bool, search_results:dict[str, AssetItem], search_items): +def download_asset_previews(context, overwrite_existing:bool, search_results:dict[str, AssetItem], search_items): from .properties import get_preview_dir, load_per_material - directory = get_preview_dir() + directory = get_preview_dir(context) if not os.path.exists(directory): os.mkdir(directory) @@ -198,11 +199,11 @@ def download_asset_previews(overwrite_existing:bool, search_results:dict[str, As thread_search.progress = (int) (progress_initial + prog * span) -def download_previews(overwrite_existing:bool, material_items): +def download_previews(context, overwrite_existing:bool, material_items): from .properties import get_preview_dir, load_per_material from .properties import last_search - directory = get_preview_dir() + directory = get_preview_dir(context) if not os.path.exists(directory): os.mkdir(directory) @@ -247,7 +248,7 @@ def download_previews(overwrite_existing:bool, material_items): thread_search.progress = (int) (progress_initial + prog * span) -def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 20): +def retrieve_assets_info(context, keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 20): from .properties import assets_lib, last_search from .properties import get_lib_dir, get_textures_dir @@ -262,7 +263,7 @@ def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, if keyword != '': params['q'] = keyword - dir_name = get_lib_dir() + dir_name = get_lib_dir(context) file_name = os.path.join(dir_name, "lib.json") response = requests.get(base_link, params=params, verify=False) @@ -279,7 +280,7 @@ def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, # assets_lib = {} last_search.clear() - tex_directory = get_textures_dir() + tex_directory = get_textures_dir(context) for asst in assets: @@ -318,8 +319,6 @@ def retrieve_assets_info(keyword:str = '', save_ori:bool = False, page:int = 0, from .data import AssetItem, SourceType def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[str, AssetItem]: - from .properties import get_lib_dir, get_textures_dir - base_link = "https://ambientCG.com/api/v2/full_json" params = { 'type': 'Material', @@ -394,7 +393,6 @@ def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str)->AssetItem: return retval - def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[str, AssetItem]: base_link = "https://api.polyhaven.com/assets" @@ -431,10 +429,9 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s return retval - from .properties import get_textures_dir -def texture_exist(asset_id:str, attribute:str) -> bool: - location = os.path.join(get_textures_dir(), asset_id, attribute) +def texture_exist(context, asset_id:str, attribute:str) -> bool: + location = os.path.join(get_textures_dir(context), asset_id, attribute) if os.path.exists(location): files = os.listdir(location) for f in files: @@ -465,6 +462,9 @@ def delete_zip(file_path): except Exception as e: print('Error while deleting zip file:', e) +def convert_ambientcg_asset(ambient_dir:str): + pass + def register(): bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 6c273730..6409371f 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -36,7 +36,7 @@ def draw(self, context): self.draw_operator(context) def execute(self, context): - directory = os.path.join(get_textures_dir(), self.id, self.attribute) + directory = os.path.join(get_textures_dir(context), self.id, self.attribute) import_list = os.listdir(directory) if not self.open_images_to_single_layer(context, directory, import_list): @@ -85,7 +85,7 @@ def draw(self, context): layout.label(text="Are you sure to remove this texture?") def execute(self, context:bpy.context): - dir_up = get_textures_dir() + self.id + dir_up = get_textures_dir(context) + self.id dir = dir_up + os.sep + self.attribute # print("item", self.id," | attr", self.attribute, " | file ", dir) # remove folder @@ -130,7 +130,7 @@ def execute(self, context): asset_item = assets_library[self.id] attribute_item = asset_item.attributes[self.attribute] link = attribute_item.asset.link - directory = os.path.join( get_textures_dir(), self.id, self.attribute) + directory = os.path.join( get_textures_dir(context), self.id, self.attribute) file_name = os.path.join(directory, attribute_item.asset.file_name) if not os.path.exists(directory): @@ -203,8 +203,8 @@ def draw(self, context): layout = self.layout layout.label(text="Are you sure to remove this textures?") - def execute(self, context:bpy.context): - dir = get_textures_dir() + self.id + def execute(self, context): + dir = get_textures_dir(context) + self.id print("item", self.id, " | file ", dir) my_list = context.scene.texlib.downloaded_material_items my_list.remove(my_list.find(self.id)) @@ -220,6 +220,14 @@ def execute(self, context:bpy.context): return {'CANCELLED'} +class ShowFilePathPreference(Operator): + bl_idname = "texlib.show_pref" + bl_label = "Show Preference" + + def execute(self, context): + bpy.ops.screen.userpref_show('INVOKE_DEFAULT') + bpy.context.preferences.active_section = 'FILE_PATHS' + return{'FINISHED'} classes = [ TexLibAddToUcupaint, @@ -227,7 +235,8 @@ def execute(self, context:bpy.context): TexLibRemoveTextureAttribute, TexLibDownload, TexLibCancelSearch, - TexLibRemoveTextureAllAttributes + TexLibRemoveTextureAllAttributes, + ShowFilePathPreference ] def register(): diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 6fe78f7a..9e13db79 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -15,209 +15,224 @@ last_search = {} def load_material_items(material_items, list_tex): - material_items.clear() - for i in list_tex: - new_item:MaterialItem = material_items.add() - item_id = list_tex[i]["id"] - new_item.name = item_id - if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: - new_item.thumb = previews_collection.preview_items[item_id][3] - else: - new_item.thumb = lib.custom_icons["input"].icon_id + material_items.clear() + for i in list_tex: + new_item:MaterialItem = material_items.add() + item_id = list_tex[i]["id"] + new_item.name = item_id + if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: + new_item.thumb = previews_collection.preview_items[item_id][3] + else: + new_item.thumb = lib.custom_icons["input"].icon_id def load_per_material(file_name:str, material_item): - item = os.path.basename(file_name) + item = os.path.basename(file_name) - my_id = item.split(".")[0] - # print(">>item",item,"file",file_name, "my_id", my_id) - loaded = previews_collection.load(item, file_name, 'IMAGE', force_reload=True) + my_id = item.split(".")[0] + # print(">>item",item,"file",file_name, "my_id", my_id) + loaded = previews_collection.load(item, file_name, 'IMAGE', force_reload=True) - previews_collection.preview_items[my_id] = (my_id, item, "", loaded.icon_id, len(previews_collection.preview_items)) - material_item.thumb = loaded.icon_id + previews_collection.preview_items[my_id] = (my_id, item, "", loaded.icon_id, len(previews_collection.preview_items)) + material_item.thumb = loaded.icon_id - + def cancel_searching(context): - thread_search = get_searching_thread() - thread_search.cancel = True - texlib = context.scene.texlib - - searching_dwn = texlib.searching_download - searching_dwn.alive = False + thread_search = get_searching_thread() + thread_search.cancel = True + texlib = context.scene.texlib + + searching_dwn = texlib.searching_download + searching_dwn.alive = False def update_check_all(self, context): - self.check_local = self.check_all - self.check_ambiencg = self.check_all - self.check_polyhaven = self.check_all + self.check_local = self.check_all + self.check_ambiencg = self.check_all + self.check_polyhaven = self.check_all -def get_textures_dir() -> str: - file_path = get_lib_dir() +def get_textures_dir(context) -> str: + file_path = get_lib_dir(context) retval = os.path.join(file_path, "textures") + os.sep if not os.path.exists(retval): os.mkdir(retval) return retval -def get_preview_dir() -> str: - file_path = get_lib_dir() +def get_preview_dir(context) -> str: + file_path = get_lib_dir(context) retval = os.path.join(file_path, "previews") + os.sep if not os.path.exists(retval): os.mkdir(retval) return retval -def get_lib_dir() -> str: - ypup:YPaintPreferences = get_user_preferences() - retval = ypup.library_location +def get_asset_lib(context, lib_name) -> bpy.types.UserAssetLibrary: + for l in context.preferences.filepaths.asset_libraries: + # print("find lib", l.name) + if l.name == lib_name: + return l + return None + +def get_lib_dir(context) -> str: + # ypup:YPaintPreferences = get_user_preferences() + asset_lib = get_asset_lib(context, "TextureLibrary") + if asset_lib == None: + return None + + retval = asset_lib.path if not os.path.exists(retval): os.mkdir(retval) return retval -def read_asset_info() -> bool: - dir_name = get_lib_dir() - file_name = os.path.join(dir_name, "lib.json") +def read_asset_info(context) -> bool: + dir_name = get_lib_dir(context) + file_name = os.path.join(dir_name, "last-search.json") if os.path.exists(file_name): file = open(file_name, 'r') content = file.read() jsn = json.loads(content) - assets_lib.update(jsn) + # new_dict = {k: v.to_dict() for k, v in jsn} + for key in jsn: + assets_library[key] = AssetItem.from_dict(jsn[key]) + # if assets_library[key].source_type == "polyhaven": + # print("\n>>>>>>",jsn[key]) + # assets_library.update(new_dict) file.close() - # print("read ", content) return True return False def searching_material(keyword:str, context:Context): - scene = context.scene - txlib:TexLibProps = scene.texlib + scene = context.scene + txlib:TexLibProps = scene.texlib - thread_search = get_searching_thread() + thread_search = get_searching_thread() - if not len(assets_lib): - read_asset_info() + if not len(assets_library): + read_asset_info(context) - search_results:dict[str, AssetItem] - search_results = retrieve_ambientcg(keyword) - list_polyhaven = retrieve_polyhaven(keyword) - search_results.update(list_polyhaven) + search_results:dict[str, AssetItem] + search_results = retrieve_ambientcg(keyword) + list_polyhaven = retrieve_polyhaven(keyword) + search_results.update(list_polyhaven) - assets_library.update(search_results) + assets_library.update(search_results) - save_library_to_file(search_results, "last-search.json") + save_library_to_file(context, search_results, "last-search.json") - txlib.search_items.clear() - for key in search_results: - new_item:MaterialItem = txlib.search_items.add() - asst_item = search_results[key] - new_item.name = asst_item.name - new_item.asset_id = asst_item.id - new_item.source_type = asst_item.source_type + txlib.search_items.clear() + for key in search_results: + new_item:MaterialItem = txlib.search_items.add() + asst_item = search_results[key] + new_item.name = asst_item.name + new_item.asset_id = asst_item.id + new_item.source_type = asst_item.source_type - download_asset_previews(False, search_results, txlib.search_items) + download_asset_previews(context, False, search_results, txlib.search_items) - retrieve_assets_info(keyword) - thread_search.progress = 10 - load_material_items(txlib.material_items, last_search) - + retrieve_assets_info(context, keyword) + thread_search.progress = 10 + load_material_items(txlib.material_items, last_search) + - download_previews(False, txlib.material_items) - thread_search.progress = 90 - load_previews() - thread_search.progress = 95 + download_previews(context, False, txlib.material_items) + thread_search.progress = 90 + load_previews(context) + thread_search.progress = 95 - load_material_items(txlib.material_items, last_search) - thread_search.progress = 100 + load_material_items(txlib.material_items, last_search) + thread_search.progress = 100 -def save_library_to_file(list:dict[str, AssetItem], file_name:str): - dir_name = get_lib_dir() - file_name = os.path.join(dir_name, file_name) +def save_library_to_file(context, list:dict[str, AssetItem], file_name:str): + dir_name = get_lib_dir(context) + file_name = os.path.join(dir_name, file_name) - file = open(file_name, 'w') + file = open(file_name, 'w') - to_write = {} - for key in list: - to_write[key] = list[key].to_dict() + to_write = {} + for key in list: + to_write[key] = list[key].to_dict() - file.write(json.dumps(to_write)) - file.close() - print("stored to ", file_name) + file.write(json.dumps(to_write)) + file.close() + print("stored to ", file_name) -def load_previews(): - print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") - dir_name = get_preview_dir() - files = os.listdir(dir_name) - - previews_collection.clear() - preview_items = {} - for index, item in enumerate(files): - file = dir_name + item - my_id = item.split(".")[0] - sizefile = os.path.getsize(file) - if sizefile == 0: # detect corrupt image - os.remove(file) - continue - loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) - # print(">>item",item,"file",file,"size", sizefile, "id", loaded.icon_id) +def load_previews(context): + print(">>>>>>>>>>>>>>>>>>>>>>> INIT TexLIB") + dir_name = get_preview_dir(context) + files = os.listdir(dir_name) + + previews_collection.clear() + preview_items = {} + for index, item in enumerate(files): + file = dir_name + item + my_id = item.split(".")[0] + sizefile = os.path.getsize(file) + if sizefile == 0: # detect corrupt image + os.remove(file) + continue + loaded = previews_collection.load(item, file, 'IMAGE', force_reload=True) + # print(">>item",item,"file",file,"size", sizefile, "id", loaded.icon_id) - preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) + preview_items[my_id] = (my_id, item, "", loaded.icon_id, index) - previews_collection.preview_items.update(preview_items) + previews_collection.preview_items.update(preview_items) - + def update_input_search(self, context): - if self.input_last == self.input_search: - print("no search:"+self.input_search) - return - - self.input_last = self.input_search + if self.input_last == self.input_search: + print("no search:"+self.input_search) + return + + self.input_last = self.input_search - txlib:TexLibProps = context.scene.texlib - txlib.material_items.clear() - txlib.search_items.clear() + txlib:TexLibProps = context.scene.texlib + txlib.material_items.clear() + txlib.search_items.clear() - if self.input_search == '': - last_search.clear() - return + if self.input_search == '': + last_search.clear() + return - # cancel previous search - if get_searching_thread() != None: - cancel_searching(context) + # cancel previous search + if get_searching_thread() != None: + cancel_searching(context) - thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) - thread_search.progress = 0 - thread_search.cancel = False - set_searching_thread(thread_search) + thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) + thread_search.progress = 0 + thread_search.cancel = False + set_searching_thread(thread_search) - thread_search.start() + thread_search.start() - self.searching_download.progress = 0 - self.searching_download.alive = True + self.searching_download.progress = 0 + self.searching_download.alive = True def change_mode_asset(self, context): - if not len(assets_lib): - read_asset_info() - load_previews() + if not len(assets_lib): + read_asset_info() + load_previews() - # if self.mode_asset == "ONLINE": - # pass - # else: - # textures_dir = _get_textures_dir() - # tex_lis = os.listdir(textures_dir) + # if self.mode_asset == "ONLINE": + # pass + # else: + # textures_dir = _get_textures_dir() + # tex_lis = os.listdir(textures_dir) - # _offline_files = {} - # for tx in tex_lis: - # tx_dir = os.path.join(textures_dir, tx) - # attr_lis = os.listdir(tx_dir) + # _offline_files = {} + # for tx in tex_lis: + # tx_dir = os.path.join(textures_dir, tx) + # attr_lis = os.listdir(tx_dir) - # for att in attr_lis: - # attr_dir = os.path.join(tx_dir, att) - # if _texture_exist(tx, attr_dir): - # _offline_files[tx] = assets_lib[tx] - # break + # for att in attr_lis: + # attr_dir = os.path.join(tx_dir, att) + # if _texture_exist(tx, attr_dir): + # _offline_files[tx] = assets_lib[tx] + # break - # load_material_items(self.downloaded_material_items, _offline_files) + # load_material_items(self.downloaded_material_items, _offline_files) class TextureItem (PropertyGroup): texture_id: StringProperty(name="Texture ID") @@ -226,80 +241,89 @@ class TextureItem (PropertyGroup): blend_file: StringProperty(name="Blend File", subtype="FILE_PATH") class MaterialItem(PropertyGroup): - asset_id: StringProperty(name="Asset ID") - name: StringProperty( name="Name", description="Material name", default="Untitled") - source_type: StringProperty( name="Source Type", description="Source type", default="") - # thumb: IntProperty( name="thumbnail", description="", default=0) + asset_id: StringProperty(name="Asset ID") + name: StringProperty( name="Name", description="Material name", default="Untitled") + source_type: StringProperty( name="Source Type", description="Source type", default="") + # thumb: IntProperty( name="thumbnail", description="", default=0) class DownloadQueue(PropertyGroup): - asset_id : StringProperty() - asset_attribute: StringProperty() - texture_index: IntProperty(default=-1) - file_path : StringProperty() - source_type: StringProperty() - alive : BoolProperty(default = False) - file_size:IntProperty() - progress : IntProperty( - default = 0, - min = 0, - max = 100, - description = 'Progress of the download', - subtype = 'PERCENTAGE' - ) + asset_id : StringProperty() + asset_attribute: StringProperty() + texture_index: IntProperty(default=-1) + file_path : StringProperty() + source_type: StringProperty() + alive : BoolProperty(default = False) + file_size:IntProperty() + progress : IntProperty( + default = 0, + min = 0, + max = 100, + description = 'Progress of the download', + subtype = 'PERCENTAGE' + ) class TexLibProps(PropertyGroup): - page: IntProperty(name="page", default= 0) - input_search:StringProperty(name="Search", update=update_input_search) - check_all:BoolProperty(name="Check All", default=True, update=update_check_all) - check_local:BoolProperty(name="Local", default=True) - check_ambiencg:BoolProperty(name="AmbientCG", default=True) - check_polyhaven:BoolProperty(name="Polyhaven", default=True) - - input_last:StringProperty() - material_items:CollectionProperty(type= MaterialItem) - material_index:IntProperty(default=0, name="Material index") - downloaded_material_items:CollectionProperty(type= MaterialItem) - downloaded_material_index:IntProperty(default=0, name="Material index") - - - search_items:CollectionProperty(type= MaterialItem) - search_index:IntProperty(default=0, name="Search index") - # mode_asset:EnumProperty( - # items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), - # name = 'Location', - # default = 'ONLINE', - # description = 'Location of the PBR Texture.\n' - # ' Local: the assets that you have already downloaded.\n' - # ' Online: available for download on AmbientCG.com.\n', - # update=change_mode_asset - # ) - - downloads:CollectionProperty(type=DownloadQueue) - searching_download:PointerProperty(type=DownloadQueue) - selected_download_item:IntProperty(default=0) + page: IntProperty(name="page", default= 0) + input_search:StringProperty(name="Search", update=update_input_search) + check_all:BoolProperty(name="Check All", default=True, update=update_check_all) + check_local:BoolProperty(name="Local", default=True) + check_ambiencg:BoolProperty(name="AmbientCG", default=True) + check_polyhaven:BoolProperty(name="Polyhaven", default=True) + + input_last:StringProperty() + material_items:CollectionProperty(type= MaterialItem) + material_index:IntProperty(default=0, name="Material index") + downloaded_material_items:CollectionProperty(type= MaterialItem) + downloaded_material_index:IntProperty(default=0, name="Material index") + + + search_items:CollectionProperty(type= MaterialItem) + search_index:IntProperty(default=0, name="Search index") + # mode_asset:EnumProperty( + # items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), + # name = 'Location', + # default = 'ONLINE', + # description = 'Location of the PBR Texture.\n' + # ' Local: the assets that you have already downloaded.\n' + # ' Online: available for download on AmbientCG.com.\n', + # update=change_mode_asset + # ) + + downloads:CollectionProperty(type=DownloadQueue) + searching_download:PointerProperty(type=DownloadQueue) + selected_download_item:IntProperty(default=0) classes = [ - TextureItem, MaterialItem, DownloadQueue, TexLibProps + TextureItem, MaterialItem, DownloadQueue, TexLibProps ] def register(): - for cl in classes: - bpy.utils.register_class(cl) + for cl in classes: + bpy.utils.register_class(cl) - Scene.texlib = PointerProperty(type= TexLibProps) + Scene.texlib = PointerProperty(type= TexLibProps) - global previews_collection - previews_collection = bpy.utils.previews.new() - previews_collection.preview_items = {} + global previews_collection + previews_collection = bpy.utils.previews.new() + previews_collection.preview_items = {} - if read_asset_info(): - load_previews() + if read_asset_info(bpy.context): + load_previews(bpy.context) + # from .data import SourceType + # for idx, lb in enumerate(assets_library): + # item = assets_library[lb] + # if item.source_type == SourceType.SOURCE_POLYHAVEN: + # print(item.id, item.name, item.thumbnail, item.source_type) + # for at in item.attributes: + # print(">>", at) + # for tx in item.attributes[at].textures: + # print(">>>",tx.file_name, tx.size) def unregister(): - for cl in classes: - bpy.utils.unregister_class(cl) + for cl in classes: + bpy.utils.unregister_class(cl) - del bpy.types.Scene.texlib - bpy.utils.previews.remove(previews_collection) \ No newline at end of file + del bpy.types.Scene.texlib + bpy.utils.previews.remove(previews_collection) \ No newline at end of file diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 1754401d..483873f8 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -5,7 +5,7 @@ from .. import lib from .properties import assets_library -from .properties import TexLibProps, MaterialItem, DownloadQueue +from .properties import TexLibProps, MaterialItem, DownloadQueue, get_asset_lib from .operators import TexLibAddToUcupaint, TexLibCancelDownload, TexLibDownload, TexLibRemoveTextureAttribute @@ -34,6 +34,13 @@ def draw(self, context): sel_index = texlib.search_index my_list = texlib.search_items + lib_name = "TextureLibrary" + ass_lib = get_asset_lib(context,lib_name) + if ass_lib == None: + layout.label(text="Warning! Create an asset library named {}".format(lib_name)) + layout.operator("texlib.show_pref") + return + layout.prop(texlib, "input_search") source_search = layout.row() source_search.prop(texlib, "check_all") @@ -78,7 +85,9 @@ def draw(self, context): selected_mat = prev_box.column(align=True) selected_mat.alignment = "CENTER" selected_mat.template_icon(icon_value=thumb, scale=5.0) - selected_mat.label(text=mat_id) + selected_mat.label(text=sel_mat.name) + + # print("len ", len(assets_library.keys())) download = assets_library[mat_id] layout.separator() @@ -93,7 +102,7 @@ def draw(self, context): ukuran = round(total_size / 1000000,2) - check_exist:bool = texture_exist(mat_id, d) + check_exist:bool = texture_exist(context, mat_id, d) ui_attr = layout.split(factor=0.7) From c584ef735aceda6fa595e13d8c45f4d178634866 Mon Sep 17 00:00:00 2001 From: ahmad rifai Date: Sun, 25 Aug 2024 14:24:39 +0700 Subject: [PATCH 042/283] download multiple files --- textures_lib/downloader.py | 79 +++++++++++++++++++------------------- textures_lib/operators.py | 40 +++++++------------ textures_lib/properties.py | 3 ++ 3 files changed, 56 insertions(+), 66 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 6f3c5f8f..e05dc066 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -3,64 +3,65 @@ from ..preferences import * THREAD_SEARCHING = "thread_searching" -threads = {} # progress:int, +threads:dict[str, threading.Thread] = {} # progress:int, def get_thread_id(asset_id:str, asset_attribute:str, texture_index:int = -1): if texture_index >= 0: return asset_id+"_"+asset_attribute+"_"+str(texture_index) else: return asset_id+"_"+asset_attribute - -def get_thread(id:str): + +def get_thread(id:str) -> threading.Thread: if id in threads: return threads[id] return None -def get_searching_thread(): +def get_searching_thread() -> threading.Thread: if THREAD_SEARCHING in threads: return threads[THREAD_SEARCHING] return None def set_searching_thread(thread:threading.Thread): threads[THREAD_SEARCHING] = thread - -def download_stream(link:str, file_name:str, thread_id:str, - timeout:int = 10,skipExisting:bool = False): - # print("url = ",link, "filename", file_name) +def download_stream(links:list[str], file_names:list[str], thread_id:str, + timeout:int = 10,skipExisting:bool = False): thread = get_thread(thread_id) - - prog = 0 - with open(file_name, "wb") as f: - try: - response = requests.get(link, stream=True, timeout = timeout) - # session seems to be a little bit faster - #session = requests.Session() - #response = session.get(link, stream=True, timeout = timeout) - total_length = response.headers.get('content-length') - print("total size = "+total_length) - if not total_length: - print('Error #1 while downloading', link, ':', "Empty Response.") - return - - dl = 0 - total_length = int(total_length) - # TODO a way for calculating the chunk size - for data in response.iter_content(chunk_size = 4096): - if thread is not None and thread.cancel: - response.close() - break - - dl += len(data) - f.write(data) + file_num = len(file_names) + # percent_per_file = 100/file_num + + prog_total = 0 + for idx, file_name in enumerate(file_names): + link = links[idx] + prog = 0 + with open(file_name, "wb") as f: + try: + response = requests.get(link, stream=True, timeout = timeout) + total_length = response.headers.get('content-length') + print("total size = "+total_length) + if not total_length: + print('Error #1 while downloading', link, ':', "Empty Response.") + return - prog = int(100 * dl / total_length) - # dl_threads[0].progress = prog - thread.progress = prog - # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) - # dl_threads.pop(0) - except Exception as e: - print('Error #2 while downloading', link, ':', e) + dl = 0 + total_length = int(total_length) + # TODO a way for calculating the chunk size + for data in response.iter_content(chunk_size = 4096): + if thread is not None and thread.cancel: + response.close() + break + + dl += len(data) + f.write(data) + + prog = int((100 * dl) / (total_length * file_num)) + # dl_threads[0].progress = prog + thread.progress = prog_total + prog + # print("proggg "+str(prog)+"% "+str(dl)+"/"+str(total_length)) + # dl_threads.pop(0) + except Exception as e: + print('Error #2 while downloading', link, ':', e) + prog_total += prog def monitor_downloads(): diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 6409371f..1d4751fa 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -137,8 +137,20 @@ def execute(self, context): # print("make dir "+directory) os.makedirs(directory) + links = [link] + file_names = [file_name] + + for idx, attr in enumerate(attribute_item.textures): + txt_file = os.path.join(directory, attr.file_name) + txr_dir = os.path.dirname(txt_file) + if not os.path.exists(txr_dir): + os.makedirs(txr_dir) + + links.append(attr.link) + file_names.append(txt_file) + thread_id = get_thread_id(self.id, self.attribute) - new_thread = threading.Thread(target=download_stream, args=(link,file_name,thread_id,)) + new_thread = threading.Thread(target=download_stream, args=(links,file_names,thread_id,)) new_thread.progress = 0 new_thread.cancel = False threads[thread_id] = new_thread @@ -155,32 +167,6 @@ def execute(self, context): new_dwn.file_size = attribute_item.asset.size new_dwn.progress = 0 - from .data import SourceType - for idx, attr in enumerate(attribute_item.textures): - - txt_file = os.path.join(directory, attr.file_name) - txr_dir = os.path.dirname(txt_file) - if not os.path.exists(txr_dir): - os.makedirs(txr_dir) - - thread_txt_id = get_thread_id(self.id, self.attribute, idx) - new_thread_txt = threading.Thread(target=download_stream, args=(attr.link, txt_file, thread_txt_id,)) - new_thread_txt.progress = 0 - new_thread_txt.cancel = False - threads[thread_txt_id] = new_thread_txt - - new_thread_txt.start() - - new_dwn_txt:DownloadQueue = texlib.downloads.add() - new_dwn_txt.asset_id = self.id - new_dwn_txt.file_path = txt_file - new_dwn_txt.source_type = SourceType.SOURCE_POLYHAVEN_TEXTURE - new_dwn_txt.asset_attribute = self.attribute - new_dwn_txt.texture_index = idx - new_dwn_txt.alive = True - new_dwn_txt.file_size = attr.size - new_dwn_txt.progress = 0 - return {'FINISHED'} class TexLibCancelSearch(Operator): diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 9e13db79..e58c6533 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -84,6 +84,9 @@ def get_lib_dir(context) -> str: def read_asset_info(context) -> bool: dir_name = get_lib_dir(context) + if dir_name == None: + return False + file_name = os.path.join(dir_name, "last-search.json") if os.path.exists(file_name): From b34e7aef9aefe6ddcf05aaa00886bfc5f3f1415b Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 26 Aug 2024 13:15:16 +0700 Subject: [PATCH 043/283] blend creator for ambientcg --- textures_lib/create_blend.py | 131 +++++++++++++++++++++++++++++++++++ textures_lib/downloader.py | 43 +++++++++++- 2 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 textures_lib/create_blend.py diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py new file mode 100644 index 00000000..4789f125 --- /dev/null +++ b/textures_lib/create_blend.py @@ -0,0 +1,131 @@ +import sys, bpy, os +import shutil + + +argv = sys.argv +argv = argv[argv.index("--") + 1 :] # get all args after "--" + +arg_dict = {} + +for i, content in enumerate(argv): + print(i, " >> ",argv[i]) + + +# parse arguments +for i in range(0, len(argv), 2): + key = argv[i] + key = key.replace("--", "") + + arg_dict[key] = argv[i + 1] + +print(arg_dict) + + +dir_target = arg_dict["target"] #os.path.join(arg_dict["target"], arg_dict["id"]) +# dir_source = arg_dict["source"] + +# check dir exist or make dir +if not os.path.exists(dir_target): + os.makedirs(dir_target) + +# remove existing directory files +# for filename in os.listdir(dir_target): +# file_path = os.path.join(dir_target, filename) +# try: +# if os.path.isfile(file_path) or os.path.islink(file_path): +# os.unlink(file_path) +# elif os.path.isdir(file_path): +# shutil.rmtree(file_path) +# except Exception as e: +# print('Failed to delete %s. Reason: %s' % (file_path, e)) + +# # copy files or directories +# for filename in os.listdir(dir_source): +# file_path = os.path.join(dir_source, filename) +# if os.path.isfile(file_path) or os.path.islink(file_path): +# shutil.copy(file_path, dir_target) +# elif os.path.isdir(file_path): +# shutil.copytree(file_path, os.path.join(dir_target, filename)) + +# create blend file +bpy.ops.wm.read_factory_settings(use_empty=True) + + +# save to blend file +target_path = os.path.join(dir_target, arg_dict["id"]+".blend") +print("target path: ", target_path) +bpy.ops.wm.save_as_mainfile(filepath=target_path) + + +# Load image textures and create materials +image_paths = [] +for f in os.listdir(dir_target): + image_paths.append(f) +print("image paths: ", image_paths) + +# materials = [] + +# print current directory +print("current directory: ", os.getcwd()) +# change active directory +os.chdir(dir_target) + +new_material = bpy.data.materials.new(name=arg_dict["id"]) +# Create material +new_material.use_nodes = True +bsdf = new_material.node_tree.nodes["Principled BSDF"] + + +for image_path in image_paths: + + print("load image: ", image_path) + # Load image + image = bpy.data.images.load("//"+image_path) + + # Create texture + base_name = os.path.basename(image_path) + + texture = bpy.data.textures.new(name=base_name, type='IMAGE') + texture.image = image + + check_name = base_name.lower() + if "color" in check_name: + tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') + tex_image.image = image + new_material.node_tree.links.new(bsdf.inputs['Base Color'], tex_image.outputs['Color']) + elif "normal" in check_name: + tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') + tex_image.image = image + new_material.node_tree.links.new(bsdf.inputs['Normal'], tex_image.outputs['Color']) + elif "roughness" in check_name: + tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') + tex_image.image = image + new_material.node_tree.links.new(bsdf.inputs['Roughness'], tex_image.outputs['Color']) + +thumbnail_file = arg_dict["id"]+".png" +new_material.asset_mark() + +override = bpy.context.copy() +override["id"] = new_material +with bpy.context.temp_override(**override): + bpy.ops.ed.lib_id_load_custom_preview(filepath=thumbnail_file) + +bpy.ops.mesh.primitive_plane_add(size=2) +obj = bpy.context.active_object +obj.name = arg_dict["id"] +if obj.data.materials: + obj.data.materials[0] = new_material +else: + obj.data.materials.append(new_material) + +# Create objects and assign materials +# for i, material in enumerate(materials): +# bpy.ops.mesh.primitive_plane_add(size=2, location=(i * 3, 0, 0)) +# obj = bpy.context.active_object +# if obj.data.materials: +# obj.data.materials[0] = material +# else: +# obj.data.materials.append(material) + +bpy.context.preferences.filepaths.save_version = 0 # Avoid .blend1 +bpy.ops.wm.save_mainfile(relative_remap=True) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 6f3c5f8f..aa97dd9f 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -114,7 +114,7 @@ def monitor_downloads(): extract_file(dwn.file_path) delete_zip(dwn.file_path) dir_file = os.path.dirname(dwn.file_path) - convert_ambientcg_asset(dir_file) + convert_ambientcg_asset(dir_file, dwn.asset_id) elif dwn.source_type == SourceType.SOURCE_POLYHAVEN_TEXTURE: pass to_remove.append(index) @@ -462,8 +462,45 @@ def delete_zip(file_path): except Exception as e: print('Error while deleting zip file:', e) -def convert_ambientcg_asset(ambient_dir:str): - pass +def convert_ambientcg_asset(ambient_dir:str, id:str): + import subprocess + print("current directory: ", os.getcwd()) + print("data: ", ambient_dir, " | ", id) + + subprocess.call( + [ + bpy.app.binary_path, + "--background", + "--factory-startup", + "--python", + "textures_lib/create_blend.py", + "--", + "--target", + ambient_dir, + "--id", + id + ] + ) + +# def mark_polyhaven_asset(ambient_dir:str, id:str): +# import subprocess +# print("current directory: ", os.getcwd()) +# print("data: ", ambient_dir, " | ", id) + +# subprocess.call( +# [ +# bpy.app.binary_path, +# "--background", +# "--factory-startup", +# "--python", +# "textures_lib/mark_blend.py", +# "--", +# "--target", +# ambient_dir, +# "--id", +# id +# ] +# ) def register(): bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) From 9b1c659da2ec914d95ad1d057ff818766aab5526 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 26 Aug 2024 14:28:29 +0700 Subject: [PATCH 044/283] mark asset for polyhaven --- textures_lib/downloader.py | 80 +++++++++++++++++++++++++------------- textures_lib/mark_blend.py | 51 ++++++++++++++++++++++++ textures_lib/operators.py | 12 +++++- 3 files changed, 113 insertions(+), 30 deletions(-) create mode 100644 textures_lib/mark_blend.py diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index ad1b1548..7e539c31 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -102,12 +102,11 @@ def monitor_downloads(): to_remove = [] dwn:DownloadQueue for index, dwn in enumerate(downloads): - if dwn.source_type == SourceType.SOURCE_POLYHAVEN_TEXTURE: - txt_idx = dwn.texture_index - thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute, txt_idx) - else: - thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute) - + # if dwn.source_type == SourceType.SOURCE_POLYHAVEN_TEXTURE: + # txt_idx = dwn.texture_index + # thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute, txt_idx) + # else: + thread_id = get_thread_id(dwn.asset_id, dwn.asset_attribute) thread = get_thread(thread_id) if thread == None: print("thread id", thread_id, ">",dwn.asset_id,">", dwn.asset_attribute) @@ -116,8 +115,12 @@ def monitor_downloads(): delete_zip(dwn.file_path) dir_file = os.path.dirname(dwn.file_path) convert_ambientcg_asset(dir_file, dwn.asset_id) - elif dwn.source_type == SourceType.SOURCE_POLYHAVEN_TEXTURE: - pass + else: + print("finishhh ", dwn.asset_id, " | ", dwn.asset_attribute) + dir_file = os.path.dirname(dwn.file_path) + # up + # dir_file = os.path.dirname(dir_file) + mark_polyhaven_asset(dir_file, dwn.asset_id) to_remove.append(index) else: prog = thread.progress @@ -467,6 +470,9 @@ def convert_ambientcg_asset(ambient_dir:str, id:str): import subprocess print("current directory: ", os.getcwd()) print("data: ", ambient_dir, " | ", id) + addon_dir = get_addon_dir() + os.chdir(addon_dir) + print("current directory next: ", os.getcwd()) subprocess.call( [ @@ -474,7 +480,7 @@ def convert_ambientcg_asset(ambient_dir:str, id:str): "--background", "--factory-startup", "--python", - "textures_lib/create_blend.py", + os.path.join(addon_dir, "create_blend.py"), "--", "--target", ambient_dir, @@ -483,25 +489,43 @@ def convert_ambientcg_asset(ambient_dir:str, id:str): ] ) -# def mark_polyhaven_asset(ambient_dir:str, id:str): -# import subprocess -# print("current directory: ", os.getcwd()) -# print("data: ", ambient_dir, " | ", id) - -# subprocess.call( -# [ -# bpy.app.binary_path, -# "--background", -# "--factory-startup", -# "--python", -# "textures_lib/mark_blend.py", -# "--", -# "--target", -# ambient_dir, -# "--id", -# id -# ] -# ) +def mark_polyhaven_asset(dir:str, id:str): + import subprocess + + file_blend = "" + for i in os.listdir(dir): + # get blend file + if i.endswith(".blend"): + file_blend = os.path.join(dir, i) + break + print("file ", i) + print("current directory: ", os.getcwd()) + print("data: ", dir, " | ", id, " | ", file_blend) + addon_dir = get_addon_dir() + os.chdir(addon_dir) + print("current directory next: ", os.getcwd()) + + if file_blend == "": + print("failed") + return + + subprocess.call( + [ + bpy.app.binary_path, + "--background", + "--factory-startup", + file_blend, + "--python", + os.path.join(addon_dir, "mark_blend.py"), + "--", + "--id", + id + ] + ) + +def get_addon_dir() -> str: + return os.path.dirname(os.path.realpath(__file__)) + def register(): bpy.app.timers.register(monitor_downloads, first_interval=1, persistent=True) diff --git a/textures_lib/mark_blend.py b/textures_lib/mark_blend.py new file mode 100644 index 00000000..b01953d4 --- /dev/null +++ b/textures_lib/mark_blend.py @@ -0,0 +1,51 @@ +import sys, bpy, os +import shutil + + +argv = sys.argv +argv = argv[argv.index("--") + 1 :] # get all args after "--" + +arg_dict = {} + +for i, content in enumerate(argv): + print(i, " >> ",argv[i]) + + +# parse arguments +for i in range(0, len(argv), 2): + key = argv[i] + key = key.replace("--", "") + + arg_dict[key] = argv[i + 1] + +print(arg_dict) + +id = arg_dict["id"] + +# file path +blend_file = bpy.data.filepath +os.chdir(os.path.dirname(blend_file)) + +# print("current directory: ", os.getcwd()) +# for m in bpy.data.materials.keys(): +# print("material: ", m) + +try: + asset = bpy.data.materials[id] +except KeyError as e: + if len(bpy.data.materials) == 1: + asset = bpy.data.materials[0] + else: + raise e + +asset.asset_mark() + +override = bpy.context.copy() +override["id"] = asset + +thumbnail_file = arg_dict["id"]+".png" +with bpy.context.temp_override(**override): + bpy.ops.ed.lib_id_load_custom_preview(filepath=thumbnail_file) + +bpy.context.preferences.filepaths.save_version = 0 # Avoid .blend1 +bpy.ops.wm.save_mainfile(relative_remap=True) diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 1d4751fa..2618e292 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -1,5 +1,5 @@ -import bpy, threading, os +import bpy, threading, os, shutil from bpy.types import Operator from bpy.props import StringProperty, IntProperty, BoolProperty @@ -10,7 +10,7 @@ from .downloader import download_stream, get_thread_id, get_thread from .downloader import threads -from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching +from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching, get_preview_dir class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" @@ -137,6 +137,14 @@ def execute(self, context): # print("make dir "+directory) os.makedirs(directory) + prev_dir = get_preview_dir(context) + thumb_file = os.path.join(prev_dir, self.id+".png") + # copy preview file + if os.path.exists(thumb_file): + dest_thumb = os.path.join(directory, self.id+".png") + print("copy file ", thumb_file, " to ", dest_thumb) + shutil.copyfile(thumb_file, dest_thumb) + links = [link] file_names = [file_name] From 1f66cdaae71166ebc2048548d25ee7c52de220dc Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 26 Aug 2024 15:38:43 +0700 Subject: [PATCH 045/283] fix thumbnails on windows --- textures_lib/create_blend.py | 6 +++++- textures_lib/mark_blend.py | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index 4789f125..5ebd4f7a 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -60,6 +60,8 @@ # Load image textures and create materials image_paths = [] for f in os.listdir(dir_target): + if f.endswith(".blend"): + continue image_paths.append(f) print("image paths: ", image_paths) @@ -69,6 +71,7 @@ print("current directory: ", os.getcwd()) # change active directory os.chdir(dir_target) +print("current directory next: ", os.getcwd()) new_material = bpy.data.materials.new(name=arg_dict["id"]) # Create material @@ -102,11 +105,12 @@ tex_image.image = image new_material.node_tree.links.new(bsdf.inputs['Roughness'], tex_image.outputs['Color']) -thumbnail_file = arg_dict["id"]+".png" +thumbnail_file = os.path.join(dir_target, arg_dict["id"]+".png") new_material.asset_mark() override = bpy.context.copy() override["id"] = new_material +print("thumbfile: ", thumbnail_file) with bpy.context.temp_override(**override): bpy.ops.ed.lib_id_load_custom_preview(filepath=thumbnail_file) diff --git a/textures_lib/mark_blend.py b/textures_lib/mark_blend.py index b01953d4..1d939cae 100644 --- a/textures_lib/mark_blend.py +++ b/textures_lib/mark_blend.py @@ -24,7 +24,8 @@ # file path blend_file = bpy.data.filepath -os.chdir(os.path.dirname(blend_file)) +blend_dir = os.path.dirname(blend_file) +os.chdir(blend_dir) # print("current directory: ", os.getcwd()) # for m in bpy.data.materials.keys(): @@ -43,7 +44,10 @@ override = bpy.context.copy() override["id"] = asset -thumbnail_file = arg_dict["id"]+".png" +# thumbnail_file = arg_dict["id"]+".png" +thumbnail_file = os.path.join(blend_dir, arg_dict["id"]+".png") +print("thumbfile: ", thumbnail_file) + with bpy.context.temp_override(**override): bpy.ops.ed.lib_id_load_custom_preview(filepath=thumbnail_file) From 5af6080059b9d83840f1c455817fb486b1a397be Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 27 Aug 2024 13:13:18 +0700 Subject: [PATCH 046/283] show library area --- textures_lib/operators.py | 39 ++++++++++++++++++++++++++++++++++++++- textures_lib/ui.py | 1 + 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 2618e292..e22a5d4c 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -223,6 +223,42 @@ def execute(self, context): bpy.context.preferences.active_section = 'FILE_PATHS' return{'FINISHED'} +class ShowLibrary(Operator): + bl_idname = "texlib.show_lib" + bl_label = "Show Library" + + area_type = "FILE_BROWSER" + area_ui_type = "ASSETS" + + @classmethod + def poll(cls, context): + existing_lib = False + for area in context.screen.areas: + if area.type == ShowLibrary.area_type and area.ui_type == ShowLibrary.area_ui_type: # 'VIEW_3D', 'CONSOLE', 'INFO' etc. + existing_lib = True + break + return not existing_lib + + def execute(self, context): + existing_lib = False + for area in context.screen.areas: + if area.type == self.area_type and area.ui_type == self.area_ui_type: # 'VIEW_3D', 'CONSOLE', 'INFO' etc. + existing_lib = True + break + + # for area in context.screen.areas: + # print(area.type, " >> ", area.ui_type) + if not existing_lib: + # with context.temp_override(area=area): + bpy.ops.screen.area_split(direction='HORIZONTAL', factor=0.3) + # Get the new area + new_area = bpy.context.screen.areas[-1] + + # Change the type of the new area to FILE_BROWSER + new_area.type = self.area_type + new_area.ui_type = self.area_ui_type + + return{'FINISHED'} classes = [ TexLibAddToUcupaint, TexLibCancelDownload, @@ -230,7 +266,8 @@ def execute(self, context): TexLibDownload, TexLibCancelSearch, TexLibRemoveTextureAllAttributes, - ShowFilePathPreference + ShowFilePathPreference, + ShowLibrary ] def register(): diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 483873f8..e6492291 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -47,6 +47,7 @@ def draw(self, context): source_search.prop(texlib, "check_local") source_search.prop(texlib, "check_ambiencg") source_search.prop(texlib, "check_polyhaven") + layout.operator("texlib.show_lib") searching_dwn = texlib.searching_download From d15748d03a9a166a0a18d8ad9c45e5725faf02e3 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 27 Aug 2024 16:00:08 +0700 Subject: [PATCH 047/283] material name by attribute bug remove textures only use first asset library --- textures_lib/create_blend.py | 2 +- textures_lib/data.py | 1 - textures_lib/downloader.py | 16 ++++++++++------ textures_lib/mark_blend.py | 3 ++- textures_lib/operators.py | 6 ++++-- textures_lib/properties.py | 17 +++++++++-------- textures_lib/ui.py | 9 ++++----- 7 files changed, 30 insertions(+), 24 deletions(-) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index 5ebd4f7a..ccac6598 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -73,7 +73,7 @@ os.chdir(dir_target) print("current directory next: ", os.getcwd()) -new_material = bpy.data.materials.new(name=arg_dict["id"]) +new_material = bpy.data.materials.new(name=arg_dict["id"]+"_"+arg_dict["attribute"]) # Create material new_material.use_nodes = True bsdf = new_material.node_tree.nodes["Principled BSDF"] diff --git a/textures_lib/data.py b/textures_lib/data.py index 272d2327..2be4a1df 100644 --- a/textures_lib/data.py +++ b/textures_lib/data.py @@ -4,7 +4,6 @@ class SourceType: SOURCE_AMBIENTCG = "ambientcg" SOURCE_POLYHAVEN = "polyhaven" - SOURCE_POLYHAVEN_TEXTURE = "polyhaven-texture" class AssetItem: def __init__(self): diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 7e539c31..b0159e27 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -114,13 +114,13 @@ def monitor_downloads(): extract_file(dwn.file_path) delete_zip(dwn.file_path) dir_file = os.path.dirname(dwn.file_path) - convert_ambientcg_asset(dir_file, dwn.asset_id) + convert_ambientcg_asset(dir_file, dwn.asset_id, dwn.asset_attribute) else: print("finishhh ", dwn.asset_id, " | ", dwn.asset_attribute) dir_file = os.path.dirname(dwn.file_path) # up # dir_file = os.path.dirname(dir_file) - mark_polyhaven_asset(dir_file, dwn.asset_id) + mark_polyhaven_asset(dir_file, dwn.asset_id, dwn.asset_attribute) to_remove.append(index) else: prog = thread.progress @@ -466,7 +466,7 @@ def delete_zip(file_path): except Exception as e: print('Error while deleting zip file:', e) -def convert_ambientcg_asset(ambient_dir:str, id:str): +def convert_ambientcg_asset(ambient_dir:str, id:str, attribute:str): import subprocess print("current directory: ", os.getcwd()) print("data: ", ambient_dir, " | ", id) @@ -485,11 +485,13 @@ def convert_ambientcg_asset(ambient_dir:str, id:str): "--target", ambient_dir, "--id", - id + id, + "--attribute", + attribute ] ) -def mark_polyhaven_asset(dir:str, id:str): +def mark_polyhaven_asset(dir:str, id:str, attribute:str): import subprocess file_blend = "" @@ -519,7 +521,9 @@ def mark_polyhaven_asset(dir:str, id:str): os.path.join(addon_dir, "mark_blend.py"), "--", "--id", - id + id, + "--attribute", + attribute ] ) diff --git a/textures_lib/mark_blend.py b/textures_lib/mark_blend.py index 1d939cae..1210982b 100644 --- a/textures_lib/mark_blend.py +++ b/textures_lib/mark_blend.py @@ -38,7 +38,8 @@ asset = bpy.data.materials[0] else: raise e - + +asset.name = id + "_" + arg_dict["attribute"] asset.asset_mark() override = bpy.context.copy() diff --git a/textures_lib/operators.py b/textures_lib/operators.py index e22a5d4c..99aecb76 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -85,9 +85,11 @@ def draw(self, context): layout.label(text="Are you sure to remove this texture?") def execute(self, context:bpy.context): - dir_up = get_textures_dir(context) + self.id - dir = dir_up + os.sep + self.attribute + dir_up = os.path.join(get_textures_dir(context), self.id) + dir = os.path.join(dir_up, self.attribute) # print("item", self.id," | attr", self.attribute, " | file ", dir) + print("remove dir: ", dir) + print("remove parent: ", dir_up) # remove folder if os.path.exists(dir): for root, dirs, files in os.walk(dir, topdown=False): diff --git a/textures_lib/properties.py b/textures_lib/properties.py index e58c6533..4414d566 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -64,20 +64,21 @@ def get_preview_dir(context) -> str: os.mkdir(retval) return retval -def get_asset_lib(context, lib_name) -> bpy.types.UserAssetLibrary: - for l in context.preferences.filepaths.asset_libraries: - # print("find lib", l.name) - if l.name == lib_name: - return l - return None +def get_asset_lib(context) -> bpy.types.UserAssetLibrary: + num_lib = len(context.preferences.filepaths.asset_libraries) + if num_lib == 0: + return None + + return context.preferences.filepaths.asset_libraries[0] def get_lib_dir(context) -> str: # ypup:YPaintPreferences = get_user_preferences() - asset_lib = get_asset_lib(context, "TextureLibrary") + asset_lib = get_asset_lib(context) if asset_lib == None: return None - retval = asset_lib.path + retval = os.path.join(asset_lib.path, "Materials") + if not os.path.exists(retval): os.mkdir(retval) return retval diff --git a/textures_lib/ui.py b/textures_lib/ui.py index e6492291..e9ab28d2 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -34,10 +34,9 @@ def draw(self, context): sel_index = texlib.search_index my_list = texlib.search_items - lib_name = "TextureLibrary" - ass_lib = get_asset_lib(context,lib_name) + ass_lib = get_asset_lib(context) if ass_lib == None: - layout.label(text="Warning! Create an asset library named {}".format(lib_name)) + layout.label(text="Warning! Create an asset library") layout.operator("texlib.show_pref") return @@ -128,11 +127,11 @@ def draw(self, context): if check_exist: op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") op.attribute = d - op.id = sel_mat.name + op.id = sel_mat.asset_id op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") op_remove.attribute = d - op_remove.id = sel_mat.name + op_remove.id = sel_mat.asset_id op:TexLibDownload = btn_row.operator("texlib.download", icon="IMPORT") op.id = sel_mat.asset_id From 17cc08daf1d55c4ef54f3b5808455c5bee646d57 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 29 Aug 2024 14:44:11 +0700 Subject: [PATCH 048/283] can assign category "materials" to asset --- textures_lib/blender_assets.cats.txt | 9 ++++ textures_lib/create_blend.py | 30 ++--------- textures_lib/downloader.py | 16 +++--- textures_lib/mark_blend.py | 11 ++-- textures_lib/operators.py | 75 ++++++++++++++++++++++++++-- textures_lib/properties.py | 10 ++++ 6 files changed, 108 insertions(+), 43 deletions(-) create mode 100644 textures_lib/blender_assets.cats.txt diff --git a/textures_lib/blender_assets.cats.txt b/textures_lib/blender_assets.cats.txt new file mode 100644 index 00000000..92519530 --- /dev/null +++ b/textures_lib/blender_assets.cats.txt @@ -0,0 +1,9 @@ +# This is an Asset Catalog Definition file for Blender. +# +# Empty lines and lines starting with `#` will be ignored. +# The first non-ignored line should be the version indicator. +# Other lines are of the format "UUID:catalog/path/for/assets:simple catalog name" + +VERSION 1 + +89d938da-d2cf-420d-b837-c396e2f5f825:Materials:Materials diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index ccac6598..a3d03c5a 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -1,5 +1,4 @@ import sys, bpy, os -import shutil argv = sys.argv @@ -28,24 +27,7 @@ if not os.path.exists(dir_target): os.makedirs(dir_target) -# remove existing directory files -# for filename in os.listdir(dir_target): -# file_path = os.path.join(dir_target, filename) -# try: -# if os.path.isfile(file_path) or os.path.islink(file_path): -# os.unlink(file_path) -# elif os.path.isdir(file_path): -# shutil.rmtree(file_path) -# except Exception as e: -# print('Failed to delete %s. Reason: %s' % (file_path, e)) - -# # copy files or directories -# for filename in os.listdir(dir_source): -# file_path = os.path.join(dir_source, filename) -# if os.path.isfile(file_path) or os.path.islink(file_path): -# shutil.copy(file_path, dir_target) -# elif os.path.isdir(file_path): -# shutil.copytree(file_path, os.path.join(dir_target, filename)) +cat_id = arg_dict["category_id"] # create blend file bpy.ops.wm.read_factory_settings(use_empty=True) @@ -107,6 +89,8 @@ thumbnail_file = os.path.join(dir_target, arg_dict["id"]+".png") new_material.asset_mark() +if cat_id: + new_material.asset_data.catalog_id = cat_id override = bpy.context.copy() override["id"] = new_material @@ -122,14 +106,6 @@ else: obj.data.materials.append(new_material) -# Create objects and assign materials -# for i, material in enumerate(materials): -# bpy.ops.mesh.primitive_plane_add(size=2, location=(i * 3, 0, 0)) -# obj = bpy.context.active_object -# if obj.data.materials: -# obj.data.materials[0] = material -# else: -# obj.data.materials.append(material) bpy.context.preferences.filepaths.save_version = 0 # Avoid .blend1 bpy.ops.wm.save_mainfile(relative_remap=True) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index b0159e27..58bb6953 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -114,13 +114,13 @@ def monitor_downloads(): extract_file(dwn.file_path) delete_zip(dwn.file_path) dir_file = os.path.dirname(dwn.file_path) - convert_ambientcg_asset(dir_file, dwn.asset_id, dwn.asset_attribute) + convert_ambientcg_asset(dir_file, dwn.asset_id, dwn.asset_attribute, dwn.asset_cat_id) else: print("finishhh ", dwn.asset_id, " | ", dwn.asset_attribute) dir_file = os.path.dirname(dwn.file_path) # up # dir_file = os.path.dirname(dir_file) - mark_polyhaven_asset(dir_file, dwn.asset_id, dwn.asset_attribute) + mark_polyhaven_asset(dir_file, dwn.asset_id, dwn.asset_attribute, dwn.asset_cat_id) to_remove.append(index) else: prog = thread.progress @@ -466,7 +466,7 @@ def delete_zip(file_path): except Exception as e: print('Error while deleting zip file:', e) -def convert_ambientcg_asset(ambient_dir:str, id:str, attribute:str): +def convert_ambientcg_asset(ambient_dir:str, id:str, attribute:str, cat_id:str): import subprocess print("current directory: ", os.getcwd()) print("data: ", ambient_dir, " | ", id) @@ -487,11 +487,13 @@ def convert_ambientcg_asset(ambient_dir:str, id:str, attribute:str): "--id", id, "--attribute", - attribute + attribute, + "--category_id", + cat_id ] ) -def mark_polyhaven_asset(dir:str, id:str, attribute:str): +def mark_polyhaven_asset(dir:str, id:str, attribute:str, cat_id:str): import subprocess file_blend = "" @@ -523,7 +525,9 @@ def mark_polyhaven_asset(dir:str, id:str, attribute:str): "--id", id, "--attribute", - attribute + attribute, + "--category_id", + cat_id ] ) diff --git a/textures_lib/mark_blend.py b/textures_lib/mark_blend.py index 1210982b..103e9d2c 100644 --- a/textures_lib/mark_blend.py +++ b/textures_lib/mark_blend.py @@ -1,6 +1,4 @@ import sys, bpy, os -import shutil - argv = sys.argv argv = argv[argv.index("--") + 1 :] # get all args after "--" @@ -21,16 +19,13 @@ print(arg_dict) id = arg_dict["id"] +cat_id = arg_dict["category_id"] # file path blend_file = bpy.data.filepath blend_dir = os.path.dirname(blend_file) os.chdir(blend_dir) -# print("current directory: ", os.getcwd()) -# for m in bpy.data.materials.keys(): -# print("material: ", m) - try: asset = bpy.data.materials[id] except KeyError as e: @@ -42,10 +37,12 @@ asset.name = id + "_" + arg_dict["attribute"] asset.asset_mark() +if cat_id: + asset.asset_data.catalog_id = cat_id + override = bpy.context.copy() override["id"] = asset -# thumbnail_file = arg_dict["id"]+".png" thumbnail_file = os.path.join(blend_dir, arg_dict["id"]+".png") print("thumbfile: ", thumbnail_file) diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 99aecb76..1a9675dd 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -7,10 +7,10 @@ from .. import Layer from ..common import * -from .downloader import download_stream, get_thread_id, get_thread +from .downloader import download_stream, get_thread_id, get_thread, get_addon_dir from .downloader import threads -from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching, get_preview_dir +from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching, get_cat_asset_lib, get_preview_dir class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" @@ -135,6 +135,21 @@ def execute(self, context): directory = os.path.join( get_textures_dir(context), self.id, self.attribute) file_name = os.path.join(directory, attribute_item.asset.file_name) + asset_cats_file = get_cat_asset_lib(context) + print("asset cat file: ", asset_cats_file) + has_cat_id = False + + if os.path.exists(asset_cats_file): + cat_id = get_cat_id(asset_cats_file) + has_cat_id = cat_id != "" # replace existing with template cat + + if not has_cat_id: + template_asst = os.path.join(get_addon_dir(), "blender_assets.cats.txt") + shutil.copy(template_asst, asset_cats_file) + + cat_id = get_cat_id(asset_cats_file) + print("cat id: ", cat_id) + if not os.path.exists(directory): # print("make dir "+directory) os.makedirs(directory) @@ -169,6 +184,7 @@ def execute(self, context): texlib:TexLibProps = context.scene.texlib new_dwn:DownloadQueue = texlib.downloads.add() + new_dwn.asset_cat_id = cat_id new_dwn.asset_id = self.id new_dwn.file_path = file_name new_dwn.source_type = asset_item.source_type @@ -261,6 +277,58 @@ def execute(self, context): new_area.ui_type = self.area_ui_type return{'FINISHED'} + +class DebugOp(Operator): + bl_idname = "texlib.debug" + bl_label = "Check Debug" + + def execute(self, context): + lib_dir = get_cat_asset_lib(context) + + content = get_cat_id(lib_dir) + print("lib dir: ", lib_dir, "=", content) + return{'FINISHED'} + +def get_cat_id(file_path:str, category:str = "Materials") -> str: + retval = "" + print("read file: ", file_path) + + # read file + with open(file_path, "r") as file: + lines = file.readlines() + for line in lines: + # print(line) + line = line.strip() + if not line: + continue # Empty lines + if line.startswith("#"): + continue + if line.startswith("VERSION"): + continue + + parts = line.split(":") + uuid, path = parts[:2] + crumbs = path.split("/") + + retval = uuid # In case the asset is not in any categories, revert to top level type catalog + + if len(crumbs) == 1: + # Ignore top level type catalog from here on + continue + + # Match catalog only if asset has all categories in its tree + match = True + for cat in crumbs[1:]: + if cat.lower() != category.lower(): + match = False + + if not match: + continue + + return uuid + + return retval + classes = [ TexLibAddToUcupaint, TexLibCancelDownload, @@ -269,7 +337,8 @@ def execute(self, context): TexLibCancelSearch, TexLibRemoveTextureAllAttributes, ShowFilePathPreference, - ShowLibrary + ShowLibrary, + DebugOp ] def register(): diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 4414d566..c7ce99a9 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -71,6 +71,15 @@ def get_asset_lib(context) -> bpy.types.UserAssetLibrary: return context.preferences.filepaths.asset_libraries[0] +def get_cat_asset_lib(context) -> str: + asset_lib = get_asset_lib(context) + if asset_lib == None: + return None + + retval = os.path.join(asset_lib.path, "blender_assets.cats.txt") + + return retval + def get_lib_dir(context) -> str: # ypup:YPaintPreferences = get_user_preferences() asset_lib = get_asset_lib(context) @@ -253,6 +262,7 @@ class MaterialItem(PropertyGroup): class DownloadQueue(PropertyGroup): asset_id : StringProperty() asset_attribute: StringProperty() + asset_cat_id: StringProperty() texture_index: IntProperty(default=-1) file_path : StringProperty() source_type: StringProperty() From 7832b1b5b923e0a39f3ab38eb0aebc46c8230966 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 29 Aug 2024 15:11:49 +0700 Subject: [PATCH 049/283] search by source --- textures_lib/downloader.py | 69 -------------------------------------- textures_lib/properties.py | 49 ++++++++++++--------------- textures_lib/ui.py | 2 +- 3 files changed, 23 insertions(+), 97 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 58bb6953..5f919960 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -252,75 +252,6 @@ def download_previews(context, overwrite_existing:bool, material_items): thread_search.progress = (int) (progress_initial + prog * span) -def retrieve_assets_info(context, keyword:str = '', save_ori:bool = False, page:int = 0, limit:int = 20): - from .properties import assets_lib, last_search - from .properties import get_lib_dir, get_textures_dir - - base_link = "https://ambientCG.com/api/v2/full_json" - params = { - 'type': 'Material', - 'include':'imageData,downloadData', - 'limit': str(limit), - 'offset': str(limit * page) - } - - if keyword != '': - params['q'] = keyword - - dir_name = get_lib_dir(context) - file_name = os.path.join(dir_name, "lib.json") - - response = requests.get(base_link, params=params, verify=False) - if not response.status_code == 200: - print("Can't download, Code: " + str(response.status_code)) - return None - - assets = response.json()["foundAssets"] - - print("Found ",len(assets), "textures") - - file = open(file_name, 'w') - - # assets_lib = {} - last_search.clear() - - tex_directory = get_textures_dir(context) - - - for asst in assets: - asset_obj = {} - asset_id = asst["assetId"] - asset_obj["id"] = asset_id - asset_obj["preview"] = asst["previewImage"]["256-PNG"] - - zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] - - downloads = {} - for k in zip_assets: - location = os.path.join(asset_id, k["attribute"]) - directory = os.path.join(tex_directory, location) - - downloads[k["attribute"]] = { - "link" : k["downloadLink"], - "fileName" : k["fileName"], - "location" : directory+os.sep, - "size" : k["size"] - } - asset_obj["downloads"] = downloads - assets_lib[asset_id] = asset_obj - last_search[asset_id] = asset_obj - - file.write(json.dumps(assets_lib)) - file.close() - print("stored to ", file_name) - # print("content to ", str(assets_lib)) - - if save_ori: - file_name_ori = os.path.join(dir_name, "lib-ori.json") - file_ori = open(file_name_ori, 'w') - file_ori.write(json.dumps({"foundAssets":assets})) - file_ori.close() - from .data import AssetItem, SourceType def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[str, AssetItem]: base_link = "https://ambientCG.com/api/v2/full_json" diff --git a/textures_lib/properties.py b/textures_lib/properties.py index c7ce99a9..2ad86d2f 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -6,7 +6,7 @@ from ..preferences import * from .. import lib -from .downloader import get_searching_thread, set_searching_thread, retrieve_ambientcg, retrieve_assets_info, download_previews, retrieve_polyhaven, download_asset_previews +from .downloader import get_searching_thread, set_searching_thread, retrieve_ambientcg, retrieve_polyhaven, download_asset_previews from .data import AssetItem assets_lib = {} @@ -14,16 +14,7 @@ assets_library:dict[str, AssetItem] = {} last_search = {} -def load_material_items(material_items, list_tex): - material_items.clear() - for i in list_tex: - new_item:MaterialItem = material_items.add() - item_id = list_tex[i]["id"] - new_item.name = item_id - if hasattr(previews_collection, "preview_items") and item_id in previews_collection.preview_items: - new_item.thumb = previews_collection.preview_items[item_id][3] - else: - new_item.thumb = lib.custom_icons["input"].icon_id + def load_per_material(file_name:str, material_item): item = os.path.basename(file_name) @@ -97,7 +88,7 @@ def read_asset_info(context) -> bool: if dir_name == None: return False - file_name = os.path.join(dir_name, "last-search.json") + file_name = os.path.join(dir_name, "assets.json") if os.path.exists(file_name): file = open(file_name, 'r') @@ -113,7 +104,7 @@ def read_asset_info(context) -> bool: return True return False -def searching_material(keyword:str, context:Context): +def searching_material(context:Context, keyword:str, search_ambientcg:bool = True, search_polyhaven:bool = True): scene = context.scene txlib:TexLibProps = scene.texlib @@ -123,14 +114,25 @@ def searching_material(keyword:str, context:Context): if not len(assets_library): read_asset_info(context) - search_results:dict[str, AssetItem] - search_results = retrieve_ambientcg(keyword) - list_polyhaven = retrieve_polyhaven(keyword) - search_results.update(list_polyhaven) + thread_search.progress = 10 + + search_results:dict[str, AssetItem] = {} + if search_ambientcg: + search_results = retrieve_ambientcg(keyword) + thread_search.progress = 30 + + if search_polyhaven: + list_polyhaven = retrieve_polyhaven(keyword) + search_results.update(list_polyhaven) + thread_search.progress = 60 + assets_library.update(search_results) save_library_to_file(context, search_results, "last-search.json") + save_library_to_file(context, assets_library, "assets.json") + + thread_search.progress = 80 txlib.search_items.clear() for key in search_results: @@ -142,19 +144,12 @@ def searching_material(keyword:str, context:Context): download_asset_previews(context, False, search_results, txlib.search_items) - retrieve_assets_info(context, keyword) - thread_search.progress = 10 - load_material_items(txlib.material_items, last_search) + # retrieve_assets_info(context, keyword) - - download_previews(context, False, txlib.material_items) - thread_search.progress = 90 load_previews(context) - thread_search.progress = 95 - - load_material_items(txlib.material_items, last_search) thread_search.progress = 100 + def save_library_to_file(context, list:dict[str, AssetItem], file_name:str): dir_name = get_lib_dir(context) file_name = os.path.join(dir_name, file_name) @@ -213,7 +208,7 @@ def update_input_search(self, context): if get_searching_thread() != None: cancel_searching(context) - thread_search = threading.Thread(target=searching_material, args=(self.input_search,context)) + thread_search = threading.Thread(target=searching_material, args=(context, self.input_search, self.check_ambiencg, self.check_polyhaven)) thread_search.progress = 0 thread_search.cancel = False set_searching_thread(thread_search) diff --git a/textures_lib/ui.py b/textures_lib/ui.py index e9ab28d2..3f0b5530 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -43,7 +43,7 @@ def draw(self, context): layout.prop(texlib, "input_search") source_search = layout.row() source_search.prop(texlib, "check_all") - source_search.prop(texlib, "check_local") + # source_search.prop(texlib, "check_local") source_search.prop(texlib, "check_ambiencg") source_search.prop(texlib, "check_polyhaven") layout.operator("texlib.show_lib") From 013b000274d95079cfe0a92705e7497722cc59af Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 29 Aug 2024 17:39:19 +0700 Subject: [PATCH 050/283] new library tabs --- textures_lib/operators.py | 4 +- textures_lib/properties.py | 77 ++++++++++++++++++++++---------------- textures_lib/ui.py | 26 +++++++++---- 3 files changed, 66 insertions(+), 41 deletions(-) diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 1a9675dd..b74b9aae 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -10,7 +10,7 @@ from .downloader import download_stream, get_thread_id, get_thread, get_addon_dir from .downloader import threads -from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching, get_cat_asset_lib, get_preview_dir +from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching, get_cat_asset_lib, get_preview_dir, retrieve_asset_library class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" @@ -287,6 +287,8 @@ def execute(self, context): content = get_cat_id(lib_dir) print("lib dir: ", lib_dir, "=", content) + + retrieve_asset_library(context) return{'FINISHED'} def get_cat_id(file_path:str, category:str = "Materials") -> str: diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 2ad86d2f..18816933 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -1,4 +1,4 @@ -import bpy, threading, os, json +import bpy, threading, os, json, pathlib from bpy.props import StringProperty, IntProperty, BoolProperty, CollectionProperty, PointerProperty from bpy.types import PropertyGroup, Context, Scene @@ -9,13 +9,10 @@ from .downloader import get_searching_thread, set_searching_thread, retrieve_ambientcg, retrieve_polyhaven, download_asset_previews from .data import AssetItem -assets_lib = {} - assets_library:dict[str, AssetItem] = {} last_search = {} - def load_per_material(file_name:str, material_item): item = os.path.basename(file_name) @@ -104,6 +101,34 @@ def read_asset_info(context) -> bool: return True return False +def retrieve_asset_library(context:Context): + asset_path = get_lib_dir(context) + if asset_path == None: + return None + + scene = context.scene + txlib:TexLibProps = scene.texlib + + print("asset_lib=", asset_path) + txlib.library_items.clear() + + library_path = pathlib.Path(asset_path) + blend_files = [fp for fp in library_path.glob("**/*.blend") if fp.is_file()] + for blend_file in blend_files: + with bpy.data.libraries.load(str(blend_file), assets_only=True) as (data_from, data_to): + for mat in data_from.materials: + print("mat=", mat) + new_item:MaterialItem = txlib.library_items.add() + new_item.name = mat + new_item.source_type = "" + + nama = mat + # split string and remove last index + split_name = nama.split("_")[:-1] + # combine array string into one string + new_id = "_".join(split_name) + new_item.asset_id = new_id + def searching_material(context:Context, keyword:str, search_ambientcg:bool = True, search_polyhaven:bool = True): scene = context.scene @@ -219,28 +244,9 @@ def update_input_search(self, context): self.searching_download.alive = True def change_mode_asset(self, context): - if not len(assets_lib): - read_asset_info() - load_previews() - - # if self.mode_asset == "ONLINE": - # pass - # else: - # textures_dir = _get_textures_dir() - # tex_lis = os.listdir(textures_dir) - - # _offline_files = {} - # for tx in tex_lis: - # tx_dir = os.path.join(textures_dir, tx) - # attr_lis = os.listdir(tx_dir) - # for att in attr_lis: - # attr_dir = os.path.join(tx_dir, att) - # if _texture_exist(tx, attr_dir): - # _offline_files[tx] = assets_lib[tx] - # break + retrieve_asset_library(context) - # load_material_items(self.downloaded_material_items, _offline_files) class TextureItem (PropertyGroup): texture_id: StringProperty(name="Texture ID") @@ -278,6 +284,15 @@ class TexLibProps(PropertyGroup): check_local:BoolProperty(name="Local", default=True) check_ambiencg:BoolProperty(name="AmbientCG", default=True) check_polyhaven:BoolProperty(name="Polyhaven", default=True) + mode_asset:EnumProperty( + items = (('SEARCH', 'Search', ''), ('LIBRARY', 'Library', '')), + name = 'Location', + default = 'SEARCH', + # description = 'Location of the PBR Texture.\n' + # ' Local: the assets that you have already downloaded.\n' + # ' Online: available for download on AmbientCG.com.\n', + update=change_mode_asset + ) input_last:StringProperty() material_items:CollectionProperty(type= MaterialItem) @@ -288,15 +303,9 @@ class TexLibProps(PropertyGroup): search_items:CollectionProperty(type= MaterialItem) search_index:IntProperty(default=0, name="Search index") - # mode_asset:EnumProperty( - # items = (('ONLINE', 'Online', ''), ('DOWNLOADED', 'Downloaded', '')), - # name = 'Location', - # default = 'ONLINE', - # description = 'Location of the PBR Texture.\n' - # ' Local: the assets that you have already downloaded.\n' - # ' Online: available for download on AmbientCG.com.\n', - # update=change_mode_asset - # ) + + library_items:CollectionProperty(type= MaterialItem) + library_index:IntProperty(default=0, name="Search index") downloads:CollectionProperty(type=DownloadQueue) searching_download:PointerProperty(type=DownloadQueue) @@ -318,6 +327,8 @@ def register(): if read_asset_info(bpy.context): load_previews(bpy.context) + + # retrieve_asset_library(bpy.context) # from .data import SourceType # for idx, lb in enumerate(assets_library): diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 3f0b5530..74efc9c5 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -24,13 +24,17 @@ def draw(self, context): scene = context.scene texlib:TexLibProps = scene.texlib - # layout.prop(texlib, "mode_asset", expand=True) - # local_files_mode = texlib.mode_asset == "DOWNLOADED" + layout.prop(texlib, "mode_asset", expand=True) + search_mode = texlib.mode_asset == "SEARCH" + + if search_mode: + self.draw_search(context, texlib) + else: + self.draw_library(context, texlib) + + def draw_search(self, context, texlib:TexLibProps): + layout = self.layout - # if local_files_mode: - # sel_index = texlib.downloaded_material_index - # my_list = texlib.downloaded_material_items - # else: sel_index = texlib.search_index my_list = texlib.search_items @@ -39,6 +43,7 @@ def draw(self, context): layout.label(text="Warning! Create an asset library") layout.operator("texlib.show_pref") return + # layout.operator("texlib.debug") layout.prop(texlib, "input_search") source_search = layout.row() @@ -143,6 +148,12 @@ def draw(self, context): layout.label(text="Downloads:") layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") + def draw_library(self, context, texlib:TexLibProps): + layout = self.layout + layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "library_items", texlib, "library_index") + # todo : add preview + # todo : add to ucupaint + class TEXLIB_UL_Downloads(UIList): def draw_item(self, context, layout, data, item:DownloadQueue, icon, active_data, active_propname, index): @@ -168,7 +179,8 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn if self.layout_type in {'DEFAULT', 'COMPACT'}: row.template_icon(icon_value = thumb, scale = 1.0) row.label(text=item.name) - row.label(text=item.source_type) + if item.source_type != "": + row.label(text=item.source_type) elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' From 1508d6341350ca0d1924586389f6b13f19bb8d39 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 30 Aug 2024 11:12:56 +0700 Subject: [PATCH 051/283] add preview and add-to-ucupaint button --- textures_lib/operators.py | 2 +- textures_lib/ui.py | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/textures_lib/operators.py b/textures_lib/operators.py index b74b9aae..f617e9c2 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -15,7 +15,7 @@ class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" - bl_label = "" + bl_label = "Add to Ucupaint" bl_idname = "texlib.add_to_ucupaint" attribute:StringProperty() diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 74efc9c5..516f2923 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -27,6 +27,12 @@ def draw(self, context): layout.prop(texlib, "mode_asset", expand=True) search_mode = texlib.mode_asset == "SEARCH" + ass_lib = get_asset_lib(context) + if ass_lib == None: + layout.label(text="Warning! Create an asset library") + layout.operator("texlib.show_pref") + return + if search_mode: self.draw_search(context, texlib) else: @@ -38,11 +44,6 @@ def draw_search(self, context, texlib:TexLibProps): sel_index = texlib.search_index my_list = texlib.search_items - ass_lib = get_asset_lib(context) - if ass_lib == None: - layout.label(text="Warning! Create an asset library") - layout.operator("texlib.show_pref") - return # layout.operator("texlib.debug") layout.prop(texlib, "input_search") @@ -51,7 +52,6 @@ def draw_search(self, context, texlib:TexLibProps): # source_search.prop(texlib, "check_local") source_search.prop(texlib, "check_ambiencg") source_search.prop(texlib, "check_polyhaven") - layout.operator("texlib.show_lib") searching_dwn = texlib.searching_download @@ -149,10 +149,31 @@ def draw_search(self, context, texlib:TexLibProps): layout.template_list("TEXLIB_UL_Downloads", "download_list", texlib, "downloads", texlib, "selected_download_item") def draw_library(self, context, texlib:TexLibProps): + sel_index = texlib.library_index + my_list = texlib.library_items + selected:MaterialItem = my_list[sel_index] + layout = self.layout layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "library_items", texlib, "library_index") - # todo : add preview - # todo : add to ucupaint + layout.operator("texlib.show_lib") + + layout.separator() + layout.label(text="Preview:") + mat_name = selected.name + prev_box = layout.box() + selected_mat = prev_box.column(align=True) + selected_mat.alignment = "CENTER" + thumb = _get_asset_preview(selected.asset_id) + selected_mat.template_icon(icon_value=thumb, scale=5.0) + selected_mat.label(text=mat_name) + + split_names = mat_name.split("_") + if len(split_names) > 1: + attr = split_names[-1] + + op:TexLibAddToUcupaint = layout.operator("texlib.add_to_ucupaint", icon="ADD") + op.attribute = attr + op.id = selected.asset_id class TEXLIB_UL_Downloads(UIList): From fffc2910f6ba88c612ff36949bd09107c473f299 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 30 Aug 2024 16:48:02 +0700 Subject: [PATCH 052/283] add tags and description --- textures_lib/create_blend.py | 6 ++++++ textures_lib/data.py | 3 +++ textures_lib/downloader.py | 28 +++++++++++++++++----------- textures_lib/mark_blend.py | 7 +++++++ textures_lib/operators.py | 5 +++++ textures_lib/properties.py | 1 + textures_lib/ui.py | 6 +++++- 7 files changed, 44 insertions(+), 12 deletions(-) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index a3d03c5a..972dbf2c 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -22,6 +22,7 @@ dir_target = arg_dict["target"] #os.path.join(arg_dict["target"], arg_dict["id"]) # dir_source = arg_dict["source"] +tags = arg_dict["tags"].split(";") # check dir exist or make dir if not os.path.exists(dir_target): @@ -92,6 +93,11 @@ if cat_id: new_material.asset_data.catalog_id = cat_id +if tags: + for t in tags: + new_material.asset_data.tags.new(t, skip_if_exists=True) +new_material.asset_data.description = "Material by ambientcg.com" + override = bpy.context.copy() override["id"] = new_material print("thumbfile: ", thumbnail_file) diff --git a/textures_lib/data.py b/textures_lib/data.py index 2be4a1df..ef7da1a1 100644 --- a/textures_lib/data.py +++ b/textures_lib/data.py @@ -10,6 +10,7 @@ def __init__(self): self.id = "" self.name = "" self.thumbnail = "" + self.tags:list[str] = [] self.source_type = "" self.attributes:dict[str, AssetAttribute] = {} @@ -28,6 +29,7 @@ def to_dict(self) -> dict[str, Any]: "name": self.name, "thumbnail": self.thumbnail, "source_type": self.source_type, + "tags": self.tags, "attributes": {k: v.to_dict() for k, v in self.attributes.items()} } @@ -38,6 +40,7 @@ def from_dict(cls, data: dict[str, Any]) -> 'AssetItem': instance.name = data.get("name", "") instance.thumbnail = data.get("thumbnail", "") instance.source_type = data.get("source_type", "") + instance.tags = data.get("tags", []) instance.attributes = {k: AssetAttribute.from_dict(v) for k, v in data.get("attributes", {}).items()} return instance diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 5f919960..a88a1d44 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -114,13 +114,13 @@ def monitor_downloads(): extract_file(dwn.file_path) delete_zip(dwn.file_path) dir_file = os.path.dirname(dwn.file_path) - convert_ambientcg_asset(dir_file, dwn.asset_id, dwn.asset_attribute, dwn.asset_cat_id) + convert_ambientcg_asset(dir_file, dwn.asset_id, dwn.asset_attribute, dwn.asset_cat_id, dwn.tags) else: print("finishhh ", dwn.asset_id, " | ", dwn.asset_attribute) dir_file = os.path.dirname(dwn.file_path) # up # dir_file = os.path.dirname(dir_file) - mark_polyhaven_asset(dir_file, dwn.asset_id, dwn.asset_attribute, dwn.asset_cat_id) + mark_polyhaven_asset(dir_file, dwn.asset_id, dwn.asset_attribute, dwn.asset_cat_id, dwn.tags) to_remove.append(index) else: prog = thread.progress @@ -257,7 +257,7 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s base_link = "https://ambientCG.com/api/v2/full_json" params = { 'type': 'Material', - 'include':'imageData,downloadData', + 'include':'imageData,downloadData,tagData,displayData', 'limit': str(limit), 'offset': str(limit * page) } @@ -277,17 +277,18 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s retval:dict[str, AssetItem] = {} for asst in assets: + # print(json.dumps(asst, indent=4)) asset_id = asst["assetId"] thumbnail = asst["previewImage"]["256-PNG"] zip_assets = asst["downloadFolders"]["default"]["downloadFiletypeCategories"]["zip"]["downloads"] - new_item = AssetItem() new_item.id = asset_id - new_item.name = asset_id + new_item.name = asst["displayName"] new_item.thumbnail = thumbnail new_item.source_type = SourceType.SOURCE_AMBIENTCG + new_item.tags = asst["tags"] for k in zip_assets: attr = k["attribute"] @@ -296,7 +297,7 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s return retval -def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str)->AssetItem: +def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str, tags:list[str])->AssetItem: base_link = "https://api.polyhaven.com/files/"+id response = requests.get(base_link, verify=False) @@ -309,6 +310,7 @@ def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str)->AssetItem: retval.id = id retval.name = asset_name retval.thumbnail = thumb_url + retval.tags = tags obj = response.json() blend_obj = obj["blend"] @@ -359,7 +361,7 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s it = obj_assets[id] # print("index ", i, "id ", id, "name ", it["name"], "thumb ", it["thumbnail_url"]) - new_item = retrieve_polyhaven_asset(id, it["name"], it["thumbnail_url"]) + new_item = retrieve_polyhaven_asset(id, it["name"], it["thumbnail_url"], it["tags"]) retval[new_item.id] = new_item return retval @@ -397,7 +399,7 @@ def delete_zip(file_path): except Exception as e: print('Error while deleting zip file:', e) -def convert_ambientcg_asset(ambient_dir:str, id:str, attribute:str, cat_id:str): +def convert_ambientcg_asset(ambient_dir:str, id:str, attribute:str, cat_id:str, tags:str): import subprocess print("current directory: ", os.getcwd()) print("data: ", ambient_dir, " | ", id) @@ -420,11 +422,13 @@ def convert_ambientcg_asset(ambient_dir:str, id:str, attribute:str, cat_id:str): "--attribute", attribute, "--category_id", - cat_id + cat_id, + "--tags", + tags ] ) -def mark_polyhaven_asset(dir:str, id:str, attribute:str, cat_id:str): +def mark_polyhaven_asset(dir:str, id:str, attribute:str, cat_id:str, tags:str): import subprocess file_blend = "" @@ -458,7 +462,9 @@ def mark_polyhaven_asset(dir:str, id:str, attribute:str, cat_id:str): "--attribute", attribute, "--category_id", - cat_id + cat_id, + "--tags", + tags ] ) diff --git a/textures_lib/mark_blend.py b/textures_lib/mark_blend.py index 103e9d2c..1e2e40e7 100644 --- a/textures_lib/mark_blend.py +++ b/textures_lib/mark_blend.py @@ -40,6 +40,13 @@ if cat_id: asset.asset_data.catalog_id = cat_id +tags = arg_dict["tags"].split(";") + +if tags: + for t in tags: + asset.asset_data.tags.new(t, skip_if_exists=True) +asset.asset_data.description = "Material by polyhaven.com" + override = bpy.context.copy() override["id"] = asset diff --git a/textures_lib/operators.py b/textures_lib/operators.py index ef7794b3..285b15c2 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -185,6 +185,11 @@ def execute(self, context): texlib:TexLibProps = context.scene.texlib new_dwn:DownloadQueue = texlib.downloads.add() new_dwn.asset_cat_id = cat_id + if len(asset_item.tags) > 0: + new_dwn.tags = ";".join(asset_item.tags) + else: + new_dwn.tags = "" + new_dwn.asset_id = self.id new_dwn.file_path = file_name new_dwn.source_type = asset_item.source_type diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 18816933..2fda516e 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -264,6 +264,7 @@ class DownloadQueue(PropertyGroup): asset_id : StringProperty() asset_attribute: StringProperty() asset_cat_id: StringProperty() + tags: StringProperty() texture_index: IntProperty(default=-1) file_path : StringProperty() source_type: StringProperty() diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 516f2923..25870aa3 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -151,9 +151,13 @@ def draw_search(self, context, texlib:TexLibProps): def draw_library(self, context, texlib:TexLibProps): sel_index = texlib.library_index my_list = texlib.library_items + layout = self.layout + + if sel_index >= len(my_list): + layout.operator("texlib.show_lib") + return selected:MaterialItem = my_list[sel_index] - layout = self.layout layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "library_items", texlib, "library_index") layout.operator("texlib.show_lib") From 88f20617557e573ea62f18f565878734c8d63708 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Sat, 31 Aug 2024 15:31:40 +0700 Subject: [PATCH 053/283] fix download and cancel button --- textures_lib/downloader.py | 12 ++++++++++++ textures_lib/properties.py | 11 +++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index a88a1d44..e028d0df 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -341,19 +341,27 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s if keyword != '': params['c'] = keyword + + thread_search = get_searching_thread() print("retrieve_polyhaven", base_link, params) response = requests.get(base_link, params=params, verify=False) if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) return None + thread_search.progress = 35 + progress_initial = thread_search.progress + progress_max = 60 + span = progress_max - progress_initial retval:dict[str, AssetItem] = {} obj_assets = response.json() # print("response ", json.dumps(obj_assets)) + item_count = len(obj_assets.keys()) + for i, id in enumerate(obj_assets.keys()): # print("index ", i, "id ", id) if i >= limit: @@ -363,6 +371,10 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s # print("index ", i, "id ", id, "name ", it["name"], "thumb ", it["thumbnail_url"]) new_item = retrieve_polyhaven_asset(id, it["name"], it["thumbnail_url"], it["tags"]) retval[new_item.id] = new_item + + prog = (i + 1) / item_count + + thread_search.progress = (int) (progress_initial + prog * span) return retval diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 2fda516e..cf970077 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -27,8 +27,10 @@ def load_per_material(file_name:str, material_item): def cancel_searching(context): thread_search = get_searching_thread() - thread_search.cancel = True - texlib = context.scene.texlib + if thread_search != None: + thread_search.cancel = True + + texlib:TexLibProps = context.scene.texlib searching_dwn = texlib.searching_download searching_dwn.alive = False @@ -151,13 +153,14 @@ def searching_material(context:Context, keyword:str, search_ambientcg:bool = Tru search_results.update(list_polyhaven) thread_search.progress = 60 - assets_library.update(search_results) save_library_to_file(context, search_results, "last-search.json") + thread_search.progress = 65 + save_library_to_file(context, assets_library, "assets.json") - thread_search.progress = 80 + thread_search.progress = 70 txlib.search_items.clear() for key in search_results: From c2b61e010aec8fe1f7fa578159161f3476303588 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 2 Sep 2024 13:45:56 +0700 Subject: [PATCH 054/283] Deleted all references and code specific to Godot. --- Godot.py | 378 ---------------------------------------------------- __init__.py | 5 +- ui.py | 1 - 3 files changed, 1 insertion(+), 383 deletions(-) delete mode 100644 Godot.py diff --git a/Godot.py b/Godot.py deleted file mode 100644 index 56738cca..00000000 --- a/Godot.py +++ /dev/null @@ -1,378 +0,0 @@ -import shutil -import subprocess -from bpy.types import Context -from .common import * -from .preferences import * -from . import lib, Layer, Mask -from bpy.props import * -from bpy.types import PropertyGroup, Panel, Operator, UIList, Scene - -import bpy - -# export shader, choose location, save file -class ExportShader(Operator): - """Export to godot shader""" - - bl_label = "Export Shader" - bl_idname = "godot.export" - - filepath: StringProperty(subtype='FILE_PATH', options={'SKIP_SAVE'}) - - use_shortcut = True - shader_generation_test = False - - godot_directory = "/home/bocilmania/Documents/projects/godot/witch/" - - script_template = ''' -shader_type spatial; - -uniform float normal_depth = 1.0; -{0}vec4 layer(vec4 foreground, vec4 background) {{ - return foreground * foreground.a + background * (1.0 - foreground.a); -}} - -void fragment() {{ {1} - ALBEDO = albedo_all.rgb; -}} - -''' - - script_vars = ''' -uniform sampler2D {0}; -uniform vec2 {1} = vec2({2},{3}); -''' - script_vars_roughness = "uniform sampler2D {}_roughness;\n" - - script_vars_normal = "uniform sampler2D {}_normal;\n" - - script_mask_vars = "uniform sampler2D {0};" - - script_fragment_var = ''' - - vec2 scaled_uv_{0} = UV * {1}; - vec4 albedo_{0} = texture({2}, scaled_uv_{0});''' - - script_fragment_roughness_var = ''' - vec4 roughness_{0} = texture({1}, scaled_uv_{0});''' - script_fragment_normal_var = ''' - vec4 normal_{0} = texture({1}, scaled_uv_{0});''' - - script_mask_fragment_var = ''' - vec4 mask_{0} = texture({1}, UV); - albedo_{0}.a = mask_{0}.r;''' - script_mask_normal_var = ''' - normal_{0}.a = mask_{0}.r;''' - script_mask_roughness_var = ''' - roughness_{0}.a = mask_{0}.r;''' - - - script_albedo_combine_0 = ''' - - vec4 albedo_all = layer(albedo_0, albedo_1);''' - - script_albedo_combine_next = ''' - albedo_all = layer(albedo_all, albedo_{0}); -''' - - script_roughness_1 = ''' - vec4 roughness_all = roughness_{}; -''' - script_roughness_combine_0 = ''' - vec4 roughness_all = layer(roughness_{0}, roughness_{1});''' - - script_roughness_combine_next = ''' - roughness_all = layer(roughness_all, roughness_{0}); -''' - script_roughness_fragment = ''' - vec4 roughness_texture_channel = vec4(0.33, 0.33, 0.33, 0.0); - float rough = dot(roughness_all, roughness_texture_channel); - - ROUGHNESS = rough; -''' - - script_normal_1 = ''' - vec4 normal_all = normal_{}; -''' - script_normal_combine_0 = ''' - vec4 normal_all = layer(normal_{0}, normal_{1});''' - - script_normal_combine_next = ''' - normal_all = layer(normal_all, normal_{0}); -''' - script_normal_fragment = ''' - NORMAL_MAP = normal_all.rgb; - NORMAL_MAP_DEPTH = normal_depth; -''' - #vec4 albedo = texture({1}, scaled_uv_{0}); - - def get_godot_directory(self, path:str): - - current_dir = os.path.dirname(path) - godot_project_dir = "" - - while godot_project_dir == "": - for filename in os.listdir(current_dir): - fl = os.path.join(current_dir, filename) - if os.path.isfile(fl): - if filename == "project.godot": - godot_project_dir = current_dir - break - # print("check ", filename, " = ", fl) - # move up directory - - parent_dir = os.path.dirname(current_dir) - if parent_dir == current_dir: - # print("break here ", current_dir) - break - current_dir = parent_dir - print("godot project ", godot_project_dir) - - return godot_project_dir - - def fix_filename(self, filename:str): - base, ext = os.path.splitext(filename) - retval = filename - - if ext != ".gdshader": - retval = base + ".gdshader" - else: - print("File extension is already .gdshader") - - print(f"File extension changed to: {retval}") - return retval - - def execute(self, context): - node = get_active_ypaint_node() - yp = node.node_tree.yp - - print("====================================") - index = 0 - layer:Layer.YLayer - - global_vars = "" - fragment_vars = "" - combine_content = "" - - # get directory of filepath - my_directory = "/home/bocilmania/Documents/projects/godot/witch/models/box" - # addon directory - addon_dir = os.path.dirname(os.path.realpath(__file__)) - - if self.use_shortcut: - self.filepath = os.path.join(my_directory, "box.gdshader") - else: - my_directory = os.path.dirname(self.filepath) - - if not os.path.exists(my_directory): - print("create directory ", my_directory) - os.makedirs(my_directory) - else: - print("directory exist ", my_directory) - - self.godot_directory = self.get_godot_directory(self.filepath) - - if self.godot_directory == "": - self.report({'ERROR'}, "This is not a godot directory") - return {'CANCELLED'} - - self.filepath = self.fix_filename(self.filepath) - - print("save to ", self.filepath, " in ", self.godot_directory) - - base_arg = ["godot", "--headless", "--path", self.godot_directory] - asset_args = [] - - relative_path = os.path.relpath(self.filepath, self.godot_directory) - relative_path = os.path.dirname(relative_path) - - print(f"Relative path: {relative_path}") - - - roughness_overrides = [] - normal_overrides = [] - - for layer_idx, layer in enumerate(yp.layers): - if layer.enable: - mapping = get_layer_mapping(layer) - - layer_var = "layer_"+str(index) - - scale_var = layer_var + "_scale" - - skala = mapping.inputs[3].default_value - global_vars += self.script_vars.format(layer_var, scale_var, skala.x, skala.y) - fragment_vars += self.script_fragment_var.format(index, scale_var, layer_var) - - source = get_layer_source(layer) - - image_path = source.image.filepath_from_user() - - asset_args.append(layer_var) - asset_args.append(bpy.path.basename(image_path)) - - # copy to directory - print("copy ", image_path, " to ", my_directory) - shutil.copy(image_path, my_directory) - - yp = layer.id_data.yp - - channel:Layer.YLayerChannel - for id_ch, channel in enumerate(layer.channels): - ch_name = yp.channels[id_ch].name - print("channel ", channel.name, " enable ", channel.enable, " name_", yp.channels[id_ch].name) - if channel.enable: - ch_image_path = "" - ch_image_path_1 = "" - - if channel.override: - source_ch = get_channel_source(channel, layer) - ch_image_path = source_ch.image.filepath_from_user() - - print("channel path ", id_ch, " = ",ch_image_path) - - if channel.override_1: - source_ch_1 = get_channel_source_1(channel, layer) - ch_image_path_1 = source_ch_1.image.filepath_from_user() - - print("channel path 1", id_ch, " = ",ch_image_path_1) - - if ch_image_path != "": - shutil.copy(ch_image_path, my_directory) - if ch_image_path_1 != "": - shutil.copy(ch_image_path_1, my_directory) - - if ch_name == "Roughness": - global_vars += self.script_vars_roughness.format(layer_var) - roughness_overrides.append(layer_idx) - - layer_roughness = layer_var + "_roughness" - asset_args.append(layer_roughness) - asset_args.append(bpy.path.basename(ch_image_path)) - fragment_vars += self.script_fragment_roughness_var.format(index, layer_roughness) - - elif ch_name == "Normal": - global_vars += self.script_vars_normal.format(layer_var) - normal_overrides.append(layer_idx) - - layer_normal = layer_var + "_normal" - asset_args.append(layer_normal) - asset_args.append(bpy.path.basename(ch_image_path_1)) # todo : override 0 or override 1 - fragment_vars += self.script_fragment_normal_var.format(index, layer_normal) - - - # print("filepath ", index, " = ",source.image.filepath_from_user()) - # print("rawpath ", index, " = ",source.image.filepath) - # print("path user ", index, " = ",source.image.filepath_raw) - msk:Mask.YLayerMask - for idx, msk in enumerate(layer.masks): - mask_var = layer_var + "_mask_" + str(idx) - global_vars += self.script_mask_vars.format(mask_var) - fragment_vars += self.script_mask_fragment_var.format(index, mask_var) - - if layer_idx in roughness_overrides: - fragment_vars += self.script_mask_roughness_var.format(index) - if layer_idx in normal_overrides: - fragment_vars += self.script_mask_normal_var.format(index) - - - mask_tree = get_mask_tree(msk) - mask_source = mask_tree.nodes.get(msk.source) - - mask_image_path = mask_source.image.filepath_from_user() - - if mask_image_path == "": - print("unpack item ", msk.name) - bpy.ops.file.unpack_item(id_name=msk.name, method='WRITE_ORIGINAL') - mask_image_path = mask_source.image.filepath_from_user() - else: - print("mask path exist ", mask_image_path) - - asset_args.append(mask_var) - asset_args.append(bpy.path.basename(mask_image_path)) - - shutil.copy(mask_image_path, my_directory) - print("copy ", mask_image_path, " to ", my_directory) - global_vars += "\n" - - if index == 1: - combine_content += self.script_albedo_combine_0 - elif index > 1: - combine_content += self.script_albedo_combine_next.format(index) - - index += 1 - - if len(roughness_overrides) > 0: - if len(roughness_overrides) == 1: - combine_content += self.script_roughness_1.format(roughness_overrides[0]) - else: - for lyr_idx, lyr in enumerate(roughness_overrides): - if lyr_idx == 1: - combine_content += self.script_roughness_combine_0.format(roughness_overrides[lyr_idx - 1], roughness_overrides[lyr_idx]) - elif lyr_idx > 1: - combine_content += self.script_roughness_combine_next.format(lyr) - - combine_content += self.script_roughness_fragment - - if len(normal_overrides) > 0: - if len(normal_overrides) == 1: - combine_content += self.script_normal_1.format(normal_overrides[0]) - else: - for lyr_idx, lyr in enumerate(normal_overrides): - if lyr_idx == 1: - combine_content += self.script_normal_combine_0.format(normal_overrides[lyr_idx - 1], normal_overrides[lyr_idx]) - elif lyr_idx > 1: - combine_content += self.script_normal_combine_next.format(lyr) - - combine_content += self.script_normal_fragment - - print("parameter ", asset_args) - fragment_vars += combine_content - - content_shader = self.script_template.format(global_vars, fragment_vars) - - print(content_shader) - - script_location = os.path.join(addon_dir, "godot4", "blender_import.gd") - print("addon dir ", script_location) - - name_asset = bpy.path.display_name_from_filepath(self.filepath) - - print("file name", name_asset) - - if not self.shader_generation_test: - file = open(self.filepath, "w") - file.write(content_shader) - file.close() - - all_params = base_arg + ["-s", script_location, "--", name_asset, relative_path] + asset_args - print("all params=", " ".join(all_params)) - print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - print(subprocess.run(base_arg + ["--import"], capture_output=True)) - print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - print(subprocess.run(all_params, capture_output=True)) - print(subprocess.run(base_arg + ["--import"], capture_output=True)) - - return {'FINISHED'} - - def invoke(self, context, event): - if self.use_shortcut: - return self.execute(context) - else: - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} - - -classes = [ExportShader] - -def register(): - for cl in classes: - bpy.utils.register_class(cl) - - -def unregister(): - for cl in classes: - bpy.utils.unregister_class(cl) - - -if __name__ == "__main__": - register() \ No newline at end of file diff --git a/__init__.py b/__init__.py index 91e69c8d..d41f2f2b 100644 --- a/__init__.py +++ b/__init__.py @@ -43,14 +43,13 @@ imp.reload(BakeToLayer) imp.reload(Root) imp.reload(textures_lib) - imp.reload(Godot) imp.reload(versioning) imp.reload(addon_updater_ops) else: from . import Localization from . import image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences from . import vector_displacement_lib, vector_displacement - from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, Godot, textures_lib, versioning + from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, Bake, BakeToLayer, Root, textures_lib, versioning from . import addon_updater_ops import bpy @@ -78,7 +77,6 @@ def register(): BakeToLayer.register() Root.register() textures_lib.register() - Godot.register() versioning.register() addon_updater_ops.register() @@ -107,7 +105,6 @@ def unregister(): BakeToLayer.unregister() Root.unregister() textures_lib.unregister() - Godot.unregister() versioning.unregister() addon_updater_ops.unregister() diff --git a/ui.py b/ui.py index 367d3eac..eeccecf1 100644 --- a/ui.py +++ b/ui.py @@ -4126,7 +4126,6 @@ def draw(self, context): col = row.column() col.operator('node.y_bake_channels', text='Bake All Channels', icon_value=lib.get_icon('bake')).only_active_channel = False - col.operator('godot.export', text='Export to godot shader', icon_value=lib.get_icon('color')) col.operator('node.y_rename_ypaint_tree', text='Rename Tree', icon_value=lib.get_icon('rename')) col.separator() From 15b89e4b6db75b4628d81396634651fb645b64f4 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 3 Sep 2024 16:14:47 +0700 Subject: [PATCH 055/283] cancel materials folder --- textures_lib/properties.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/textures_lib/properties.py b/textures_lib/properties.py index cf970077..7be2d42b 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -76,7 +76,7 @@ def get_lib_dir(context) -> str: if asset_lib == None: return None - retval = os.path.join(asset_lib.path, "Materials") + retval = asset_lib.path if not os.path.exists(retval): os.mkdir(retval) From e0b010f92478c5621215379e4b22ee7788d08dd6 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 3 Sep 2024 16:49:54 +0700 Subject: [PATCH 056/283] manual picking asset folder --- textures_lib/properties.py | 16 ++++++++++------ textures_lib/ui.py | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 7be2d42b..e2c8f886 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -54,13 +54,17 @@ def get_preview_dir(context) -> str: os.mkdir(retval) return retval -def get_asset_lib(context) -> bpy.types.UserAssetLibrary: - num_lib = len(context.preferences.filepaths.asset_libraries) - if num_lib == 0: - return None - - return context.preferences.filepaths.asset_libraries[0] +def get_library_name(): + from ..common import get_addon_title + + return get_addon_title()+"Assets" +def get_asset_lib(context) -> bpy.types.UserAssetLibrary: + for l in context.preferences.filepaths.asset_libraries: + if l.name == get_library_name(): + return l + return None + def get_cat_asset_lib(context) -> str: asset_lib = get_asset_lib(context) if asset_lib == None: diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 25870aa3..3fa2ceae 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -5,7 +5,7 @@ from .. import lib from .properties import assets_library -from .properties import TexLibProps, MaterialItem, DownloadQueue, get_asset_lib +from .properties import TexLibProps, MaterialItem, DownloadQueue, get_asset_lib, get_library_name from .operators import TexLibAddToUcupaint, TexLibCancelDownload, TexLibDownload, TexLibRemoveTextureAttribute @@ -29,7 +29,7 @@ def draw(self, context): ass_lib = get_asset_lib(context) if ass_lib == None: - layout.label(text="Warning! Create an asset library") + layout.label(text="Create an asset library named "+get_library_name()) layout.operator("texlib.show_pref") return From 716c594cd3fe10df81bfbe6aec8ff5c610c1ed9d Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 10 Sep 2024 15:26:08 +0700 Subject: [PATCH 057/283] refresh search on same keyword --- textures_lib/properties.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/textures_lib/properties.py b/textures_lib/properties.py index e2c8f886..b30eb11e 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -222,9 +222,9 @@ def load_previews(context): def update_input_search(self, context): - if self.input_last == self.input_search: - print("no search:"+self.input_search) - return + # if self.input_last == self.input_search: + # print("no search:"+self.input_search) + # return self.input_last = self.input_search @@ -234,6 +234,8 @@ def update_input_search(self, context): if self.input_search == '': last_search.clear() + if get_searching_thread() != None: + cancel_searching(context) return # cancel previous search From d9c64bcc16f26a516c7c757c88d8111f97c54a93 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 13 Sep 2024 15:29:03 +0700 Subject: [PATCH 058/283] add remove textures on library fix create_blend to include all textures --- textures_lib/create_blend.py | 3 +++ textures_lib/operators.py | 5 ++++- textures_lib/ui.py | 8 +++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index 972dbf2c..80bc4b26 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -87,6 +87,9 @@ tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image new_material.node_tree.links.new(bsdf.inputs['Roughness'], tex_image.outputs['Color']) + else: + tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') + tex_image.image = image thumbnail_file = os.path.join(dir_target, arg_dict["id"]+".png") new_material.asset_mark() diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 285b15c2..f960a386 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -72,7 +72,7 @@ def execute(self, context:bpy.context): class TexLibRemoveTextureAttribute(Operator): """Remove existing textures""" - bl_label = "" + bl_label = "Remove Textures" bl_idname = "texlib.remove_attribute" attribute:StringProperty() id:StringProperty() @@ -104,6 +104,9 @@ def execute(self, context:bpy.context): os.rmdir(dir_up) my_list = context.scene.texlib.downloaded_material_items my_list.remove(my_list.find(self.id)) + + retrieve_asset_library(context) + return {'FINISHED'} return {'CANCELLED'} diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 3fa2ceae..8a1ff2d4 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -175,10 +175,16 @@ def draw_library(self, context, texlib:TexLibProps): if len(split_names) > 1: attr = split_names[-1] - op:TexLibAddToUcupaint = layout.operator("texlib.add_to_ucupaint", icon="ADD") + btns = layout.row() + + op:TexLibAddToUcupaint = btns.operator("texlib.add_to_ucupaint", icon="ADD") op.attribute = attr op.id = selected.asset_id + remove:TexLibRemoveTextureAttribute = btns.operator("texlib.remove_attribute", icon="REMOVE") + remove.attribute = attr + remove.id = selected.asset_id + class TEXLIB_UL_Downloads(UIList): def draw_item(self, context, layout, data, item:DownloadQueue, icon, active_data, active_propname, index): From abc51bc0c5df9a280945383910d2d16601ecf52b Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 16 Sep 2024 12:25:48 +0700 Subject: [PATCH 059/283] add user-agent fix preview image on polyhaven --- textures_lib/downloader.py | 26 +++++++++++++++++++++++--- textures_lib/properties.py | 3 +-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index e028d0df..f7dc56c3 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -265,7 +265,13 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s if keyword != '': params['q'] = keyword - response = requests.get(base_link, params=params, verify=False) + agent = get_addon_name() + '/' + get_current_version_str() + print("user-agent ", agent) + # add user-agent + req_headers = { + 'User-Agent': agent + } + response = requests.get(base_link, params=params, verify=False, headers=req_headers) if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) return None @@ -299,7 +305,13 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str, tags:list[str])->AssetItem: base_link = "https://api.polyhaven.com/files/"+id - response = requests.get(base_link, verify=False) + agent = get_addon_name() + '/' + get_current_version_str() + print("user-agent ", agent) + # add user-agent + req_headers = { + 'User-Agent': agent + } + response = requests.get(base_link, verify=False, headers=req_headers) if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) @@ -345,7 +357,15 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s thread_search = get_searching_thread() print("retrieve_polyhaven", base_link, params) - response = requests.get(base_link, params=params, verify=False) + + agent = get_addon_name() + '/' + get_current_version_str() + print("user-agent ", agent) + # add user-agent + req_headers = { + 'User-Agent': agent + } + + response = requests.get(base_link, params=params, verify=False, headers=req_headers) if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) return None diff --git a/textures_lib/properties.py b/textures_lib/properties.py index b30eb11e..9a2939ea 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -123,7 +123,6 @@ def retrieve_asset_library(context:Context): for blend_file in blend_files: with bpy.data.libraries.load(str(blend_file), assets_only=True) as (data_from, data_to): for mat in data_from.materials: - print("mat=", mat) new_item:MaterialItem = txlib.library_items.add() new_item.name = mat new_item.source_type = "" @@ -176,7 +175,7 @@ def searching_material(context:Context, keyword:str, search_ambientcg:bool = Tru download_asset_previews(context, False, search_results, txlib.search_items) - # retrieve_assets_info(context, keyword) + read_asset_info(context) load_previews(context) thread_search.progress = 100 From 8917037f494230262179bf07c870e805a758a9ec Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Mon, 16 Sep 2024 15:25:11 +0700 Subject: [PATCH 060/283] add retry on timeout --- textures_lib/downloader.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index f7dc56c3..855ea62e 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -271,7 +271,14 @@ def retrieve_ambientcg(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s req_headers = { 'User-Agent': agent } - response = requests.get(base_link, params=params, verify=False, headers=req_headers) + max_try = 3 + for _ in range(max_try): + try: + response = requests.get(base_link, params=params, verify=False, headers=req_headers, timeout=10) + break + except requests.exceptions.ReadTimeout: + continue + if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) return None @@ -311,7 +318,14 @@ def retrieve_polyhaven_asset(id:str, asset_name:str, thumb_url:str, tags:list[st req_headers = { 'User-Agent': agent } - response = requests.get(base_link, verify=False, headers=req_headers) + max_try = 3 + + for _ in range(max_try): + try: + response = requests.get(base_link, verify=False, headers=req_headers, timeout=10) + break + except requests.exceptions.ReadTimeout: + continue if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) @@ -365,7 +379,7 @@ def retrieve_polyhaven(keyword:str = '', page:int = 0, limit:int = 20) -> dict[s 'User-Agent': agent } - response = requests.get(base_link, params=params, verify=False, headers=req_headers) + response = requests.get(base_link, params=params, verify=False, headers=req_headers, timeout=10) if not response.status_code == 200: print("Can't download, Code: " + str(response.status_code)) return None From c0dd53e91baa97914cc9672c44018580f0188636 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 19 Sep 2024 17:15:44 +0700 Subject: [PATCH 061/283] remove check all --- textures_lib/properties.py | 6 ------ textures_lib/ui.py | 1 - 2 files changed, 7 deletions(-) diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 9a2939ea..30afa1ef 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -35,11 +35,6 @@ def cancel_searching(context): searching_dwn = texlib.searching_download searching_dwn.alive = False -def update_check_all(self, context): - self.check_local = self.check_all - self.check_ambiencg = self.check_all - self.check_polyhaven = self.check_all - def get_textures_dir(context) -> str: file_path = get_lib_dir(context) retval = os.path.join(file_path, "textures") + os.sep @@ -289,7 +284,6 @@ class DownloadQueue(PropertyGroup): class TexLibProps(PropertyGroup): page: IntProperty(name="page", default= 0) input_search:StringProperty(name="Search", update=update_input_search) - check_all:BoolProperty(name="Check All", default=True, update=update_check_all) check_local:BoolProperty(name="Local", default=True) check_ambiencg:BoolProperty(name="AmbientCG", default=True) check_polyhaven:BoolProperty(name="Polyhaven", default=True) diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 8a1ff2d4..94b092a2 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -48,7 +48,6 @@ def draw_search(self, context, texlib:TexLibProps): layout.prop(texlib, "input_search") source_search = layout.row() - source_search.prop(texlib, "check_all") # source_search.prop(texlib, "check_local") source_search.prop(texlib, "check_ambiencg") source_search.prop(texlib, "check_polyhaven") From c9862ac22780b10ba4e4b7a5ad89df8996f5148f Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 27 Sep 2024 15:27:35 +0700 Subject: [PATCH 062/283] no need to pass thumbnail --- textures_lib/create_blend.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index 80bc4b26..f41b8ecf 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -91,7 +91,6 @@ tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image -thumbnail_file = os.path.join(dir_target, arg_dict["id"]+".png") new_material.asset_mark() if cat_id: new_material.asset_data.catalog_id = cat_id @@ -103,9 +102,6 @@ override = bpy.context.copy() override["id"] = new_material -print("thumbfile: ", thumbnail_file) -with bpy.context.temp_override(**override): - bpy.ops.ed.lib_id_load_custom_preview(filepath=thumbnail_file) bpy.ops.mesh.primitive_plane_add(size=2) obj = bpy.context.active_object From 3c22fd1fa90d2d5f919b84da06336492d8f88785 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 19 Feb 2025 15:33:51 +0700 Subject: [PATCH 063/283] create directory for asset directory --- textures_lib/operators.py | 26 +++++++++++++++++++++++++- textures_lib/properties.py | 17 +++++++++++++++++ textures_lib/ui.py | 4 ++-- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/textures_lib/operators.py b/textures_lib/operators.py index f960a386..6c2a0d12 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -10,7 +10,7 @@ from .downloader import download_stream, get_thread_id, get_thread, get_addon_dir from .downloader import threads -from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching, get_cat_asset_lib, get_preview_dir, retrieve_asset_library +from .properties import assets_library, TexLibProps, DownloadQueue, get_textures_dir, cancel_searching, get_cat_asset_lib, get_preview_dir, retrieve_asset_library, get_os_config_dir, get_library_name class TexLibAddToUcupaint(Operator, Layer.BaseMultipleImagesLayer): """Open Multiple Textures to Layer Ucupaint""" @@ -248,6 +248,29 @@ def execute(self, context): bpy.ops.screen.userpref_show('INVOKE_DEFAULT') bpy.context.preferences.active_section = 'FILE_PATHS' return{'FINISHED'} + +class CreateAssetDirectory(Operator): + bl_idname = "texlib.create_dir" + bl_label = "Create Asset Directory" + + def execute(self, context): + print("create asset directory "+get_os_config_dir()) + asset_library_path = get_os_config_dir() + # Create the directory if it doesn't exist + if not os.path.exists(asset_library_path): + os.makedirs(asset_library_path) + print(f"Created directory: {asset_library_path}") + else: + print(f"Directory already exists: {asset_library_path}") + + # Add a new Asset Library + bpy.ops.preferences.asset_library_add(directory=asset_library_path) + context.preferences.filepaths.asset_libraries[-1].name = get_library_name() + + print(f"Added Asset Library: {asset_library_path}") + + return{'FINISHED'} + class ShowLibrary(Operator): bl_idname = "texlib.show_lib" @@ -347,6 +370,7 @@ def get_cat_id(file_path:str, category:str = "Materials") -> str: TexLibCancelSearch, TexLibRemoveTextureAllAttributes, ShowFilePathPreference, + CreateAssetDirectory, ShowLibrary, DebugOp ] diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 30afa1ef..97270831 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -60,6 +60,23 @@ def get_asset_lib(context) -> bpy.types.UserAssetLibrary: return l return None +def get_os_config_dir() -> str: + import platform + + # Get the operating system + os_name = platform.system() + + print("build_platform", os_name) + + if os_name == 'Linux': + default_dir = os.path.expanduser("~/.config") + elif os_name == 'Darwin': + default_dir = os.path.expanduser("~/Library/Application Support") + else: + default_dir = os.path.expanduser("~\\AppData\\Roaming") + + return os.path.join(default_dir, get_addon_title(), "Assets") + def get_cat_asset_lib(context) -> str: asset_lib = get_asset_lib(context) if asset_lib == None: diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 94b092a2..a737f40a 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -29,8 +29,8 @@ def draw(self, context): ass_lib = get_asset_lib(context) if ass_lib == None: - layout.label(text="Create an asset library named "+get_library_name()) - layout.operator("texlib.show_pref") + # layout.label(text="Create an asset library named "+get_library_name()) + layout.operator("texlib.create_dir") return if search_mode: From f870a767c1a7f7c3f815e04eaac6122048835ba3 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 20 Feb 2025 14:50:14 +0700 Subject: [PATCH 064/283] add show texture lib setting in preference --- preferences.py | 7 +++++++ textures_lib/operators.py | 2 +- textures_lib/properties.py | 2 +- textures_lib/ui.py | 18 +++++++++++++----- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/preferences.py b/preferences.py index e85cc72b..4b3b4909 100644 --- a/preferences.py +++ b/preferences.py @@ -52,6 +52,12 @@ class YPaintPreferences(AddonPreferences): default = False ) + show_texlib_browser : BoolProperty( + name = 'Show Textures Library Browser (Experimental)', + description = 'Show textures library browser (experimental)', + default = False + ) + use_image_preview : BoolProperty( name = 'Use Image Preview/Thumbnail', description = 'Use image preview or thumbnail on the layers list', @@ -197,6 +203,7 @@ def draw(self, context): if is_udim_supported(): self.layout.prop(self, 'enable_auto_udim_detection') self.layout.prop(self, 'show_experimental') + self.layout.prop(self, 'show_texlib_browser') self.layout.prop(self, 'developer_mode') #self.layout.prop(self, 'parallax_without_baked') diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 6c2a0d12..036a0f35 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -251,7 +251,7 @@ def execute(self, context): class CreateAssetDirectory(Operator): bl_idname = "texlib.create_dir" - bl_label = "Create Asset Directory" + bl_label = "Setup Asset Directory" def execute(self, context): print("create asset directory "+get_os_config_dir()) diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 97270831..c81f74d8 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -52,7 +52,7 @@ def get_preview_dir(context) -> str: def get_library_name(): from ..common import get_addon_title - return get_addon_title()+"Assets" + return get_addon_title()+" Assets" def get_asset_lib(context) -> bpy.types.UserAssetLibrary: for l in context.preferences.filepaths.asset_libraries: diff --git a/textures_lib/ui.py b/textures_lib/ui.py index a737f40a..b6e4643a 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -11,27 +11,35 @@ from .downloader import texture_exist, get_thread, get_thread_id +from ..common import get_user_preferences + class TexLibBrowser(Panel): bl_label = "Texlib Browser" bl_idname = "TEXLIB_PT_Browser" bl_space_type = "VIEW_3D" bl_region_type = "UI" bl_category = "Ucupaint" - + + @classmethod + def poll(cls, context): + return get_user_preferences().show_texlib_browser def draw(self, context): layout = self.layout scene = context.scene texlib:TexLibProps = scene.texlib - layout.prop(texlib, "mode_asset", expand=True) - search_mode = texlib.mode_asset == "SEARCH" - ass_lib = get_asset_lib(context) if ass_lib == None: # layout.label(text="Create an asset library named "+get_library_name()) - layout.operator("texlib.create_dir") + row = layout.row() + row.alert = True + row.operator("texlib.create_dir", icon="ERROR") return + + layout.prop(texlib, "mode_asset", expand=True) + + search_mode = texlib.mode_asset == "SEARCH" if search_mode: self.draw_search(context, texlib) From 5e5da9e4502013f42cfab2c7d0f645ea1b82f716 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 20 Feb 2025 15:29:26 +0700 Subject: [PATCH 065/283] fix thumbnail problem in asset browser --- textures_lib/create_blend.py | 6 ++++++ textures_lib/properties.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index f41b8ecf..3cbff2f4 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -103,6 +103,12 @@ override = bpy.context.copy() override["id"] = new_material +thumbnail_file = os.path.join(dir_target, arg_dict["id"]+".png") +print("thumbfile: ", thumbnail_file) + +with bpy.context.temp_override(**override): + bpy.ops.ed.lib_id_load_custom_preview(filepath=thumbnail_file) + bpy.ops.mesh.primitive_plane_add(size=2) obj = bpy.context.active_object obj.name = arg_dict["id"] diff --git a/textures_lib/properties.py b/textures_lib/properties.py index c81f74d8..1e1e7ecc 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -21,7 +21,7 @@ def load_per_material(file_name:str, material_item): loaded = previews_collection.load(item, file_name, 'IMAGE', force_reload=True) previews_collection.preview_items[my_id] = (my_id, item, "", loaded.icon_id, len(previews_collection.preview_items)) - material_item.thumb = loaded.icon_id + # material_item.thumb = loaded.icon_id def cancel_searching(context): From ddeeface1153ca9e2183c120c5d7393b81a7566c Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 20 Feb 2025 15:46:48 +0700 Subject: [PATCH 066/283] fix out of bound index --- textures_lib/ui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/textures_lib/ui.py b/textures_lib/ui.py index b6e4643a..607a3a5a 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -161,8 +161,8 @@ def draw_library(self, context, texlib:TexLibProps): layout = self.layout if sel_index >= len(my_list): - layout.operator("texlib.show_lib") - return + sel_index = len(my_list) - 1 + selected:MaterialItem = my_list[sel_index] layout.template_list("TEXLIB_UL_Material", "material_list", texlib, "library_items", texlib, "library_index") From 41159e7f8214b3b6fac0745b5182623e0d9cb015 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Thu, 20 Feb 2025 17:37:50 +0700 Subject: [PATCH 067/283] move texlib variable from scene to window manager --- textures_lib/downloader.py | 4 ++-- textures_lib/operators.py | 8 ++++---- textures_lib/properties.py | 26 ++++++-------------------- textures_lib/ui.py | 3 +-- 4 files changed, 13 insertions(+), 28 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index 855ea62e..aae1c800 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -74,11 +74,11 @@ def monitor_downloads(): print("no context") return 2 - scn = bpy.context.scene + wm = bpy.context.window_manager from .properties import TexLibProps - txlb:TexLibProps = scn.texlib + txlb:TexLibProps = wm.ytexlib downloads = txlb.downloads if len(downloads) == 0 and not searching: diff --git a/textures_lib/operators.py b/textures_lib/operators.py index 036a0f35..61a7d867 100644 --- a/textures_lib/operators.py +++ b/textures_lib/operators.py @@ -60,7 +60,7 @@ def execute(self, context:bpy.context): return {'CANCELLED'} thread.cancel = True - texlib:TexLibProps = context.scene.texlib + texlib:TexLibProps = context.window_manager.ytexlib dwn:DownloadQueue for dwn in texlib.downloads: if dwn.asset_id == self.id and dwn.asset_attribute == self.attribute: @@ -102,7 +102,7 @@ def execute(self, context:bpy.context): # remove parent folder if empty if not os.listdir(dir_up): os.rmdir(dir_up) - my_list = context.scene.texlib.downloaded_material_items + my_list = context.window_manager.ytexlib.downloaded_material_items my_list.remove(my_list.find(self.id)) retrieve_asset_library(context) @@ -185,7 +185,7 @@ def execute(self, context): new_thread.start() - texlib:TexLibProps = context.scene.texlib + texlib:TexLibProps = context.window_manager.ytexlib new_dwn:DownloadQueue = texlib.downloads.add() new_dwn.asset_cat_id = cat_id if len(asset_item.tags) > 0: @@ -226,7 +226,7 @@ def draw(self, context): def execute(self, context): dir = get_textures_dir(context) + self.id print("item", self.id, " | file ", dir) - my_list = context.scene.texlib.downloaded_material_items + my_list = context.window_manager.ytexlib.downloaded_material_items my_list.remove(my_list.find(self.id)) # remove folder if os.path.exists(dir): diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 1e1e7ecc..71ed0640 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -30,7 +30,7 @@ def cancel_searching(context): if thread_search != None: thread_search.cancel = True - texlib:TexLibProps = context.scene.texlib + texlib:TexLibProps = context.window_manager.ytexlib searching_dwn = texlib.searching_download searching_dwn.alive = False @@ -124,8 +124,7 @@ def retrieve_asset_library(context:Context): if asset_path == None: return None - scene = context.scene - txlib:TexLibProps = scene.texlib + txlib:TexLibProps = context.window_manager.ytexlib print("asset_lib=", asset_path) txlib.library_items.clear() @@ -148,8 +147,7 @@ def retrieve_asset_library(context:Context): def searching_material(context:Context, keyword:str, search_ambientcg:bool = True, search_polyhaven:bool = True): - scene = context.scene - txlib:TexLibProps = scene.texlib + txlib:TexLibProps = context.window_manager.ytexlib thread_search = get_searching_thread() @@ -239,7 +237,7 @@ def update_input_search(self, context): self.input_last = self.input_search - txlib:TexLibProps = context.scene.texlib + txlib:TexLibProps = context.window_manager.ytexlib txlib.material_items.clear() txlib.search_items.clear() @@ -339,7 +337,7 @@ def register(): for cl in classes: bpy.utils.register_class(cl) - Scene.texlib = PointerProperty(type= TexLibProps) + bpy.types.WindowManager.ytexlib = PointerProperty(type= TexLibProps) global previews_collection previews_collection = bpy.utils.previews.new() @@ -347,23 +345,11 @@ def register(): if read_asset_info(bpy.context): load_previews(bpy.context) - - # retrieve_asset_library(bpy.context) - - # from .data import SourceType - # for idx, lb in enumerate(assets_library): - # item = assets_library[lb] - # if item.source_type == SourceType.SOURCE_POLYHAVEN: - # print(item.id, item.name, item.thumbnail, item.source_type) - # for at in item.attributes: - # print(">>", at) - # for tx in item.attributes[at].textures: - # print(">>>",tx.file_name, tx.size) def unregister(): for cl in classes: bpy.utils.unregister_class(cl) - del bpy.types.Scene.texlib + del bpy.types.WindowManager.ytexlib bpy.utils.previews.remove(previews_collection) \ No newline at end of file diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 607a3a5a..03c55980 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -26,8 +26,7 @@ def poll(cls, context): def draw(self, context): layout = self.layout - scene = context.scene - texlib:TexLibProps = scene.texlib + texlib:TexLibProps = context.window_manager.ytexlib ass_lib = get_asset_lib(context) if ass_lib == None: From 3025672c88252154858343911db28c0bc453506e Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 21 Feb 2025 01:34:40 +0700 Subject: [PATCH 068/283] Remove extra 's' in image atlas segment class definition --- ImageAtlas.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ImageAtlas.py b/ImageAtlas.py index fa451856..db3b2a19 100644 --- a/ImageAtlas.py +++ b/ImageAtlas.py @@ -733,7 +733,7 @@ def execute(self, context): return {'FINISHED'} -class YImageAtlasSegments(bpy.types.PropertyGroup): +class YImageAtlasSegment(bpy.types.PropertyGroup): name : StringProperty( name = 'Name', @@ -772,7 +772,7 @@ class YImageAtlas(bpy.types.PropertyGroup): #float_buffer : BoolProperty(default=False) - segments : CollectionProperty(type=YImageAtlasSegments) + segments : CollectionProperty(type=YImageAtlasSegment) def register(): #bpy.utils.register_class(YUVTransformTest) @@ -783,7 +783,7 @@ def register(): bpy.utils.register_class(YConvertToStandardImage) #bpy.utils.register_class(YImageSegmentOtherObject) #bpy.utils.register_class(YImageSegmentBakeInfoProps) - bpy.utils.register_class(YImageAtlasSegments) + bpy.utils.register_class(YImageAtlasSegment) bpy.utils.register_class(YImageAtlas) bpy.types.Image.yia = PointerProperty(type=YImageAtlas) @@ -797,5 +797,5 @@ def unregister(): bpy.utils.unregister_class(YConvertToStandardImage) #bpy.utils.unregister_class(YImageSegmentOtherObject) #bpy.utils.unregister_class(YImageSegmentBakeInfoProps) - bpy.utils.unregister_class(YImageAtlasSegments) + bpy.utils.unregister_class(YImageAtlasSegment) bpy.utils.unregister_class(YImageAtlas) From 7299fa47bfeb6e3f97fd6aab30b18d6c22964d5c Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 21 Feb 2025 13:08:45 +0700 Subject: [PATCH 069/283] Make sure layer tree exists to avoid some error while updating versions --- Modifier.py | 2 ++ common.py | 1 + subtree.py | 2 ++ 3 files changed, 5 insertions(+) diff --git a/Modifier.py b/Modifier.py index c719c584..aea1a5a2 100644 --- a/Modifier.py +++ b/Modifier.py @@ -887,6 +887,8 @@ def disable_modifiers_tree(parent, parent_tree=None, rearrange=False): else: return + + if not parent_tree: return # Get modifier group mod_group = parent_tree.nodes.get(parent.mod_group) diff --git a/common.py b/common.py index 70fc5d97..14ff229f 100644 --- a/common.py +++ b/common.py @@ -4174,6 +4174,7 @@ def update_layer_bump_distance(height_ch, height_root_ch, layer, tree=None): yp = layer.id_data.yp if not tree: tree = get_tree(layer) + if not tree: return layer_node = layer.id_data.nodes.get(layer.group_node) height_proc = tree.nodes.get(height_ch.height_proc) diff --git a/subtree.py b/subtree.py index 607c40ab..baa77f58 100644 --- a/subtree.py +++ b/subtree.py @@ -249,6 +249,7 @@ def disable_channel_source_tree(layer, root_ch, ch, rearrange=True, force=False) return layer_tree = get_tree(layer) + if not layer_tree: return #if ch.override_type not in {'DEFAULT'}: source_group = layer_tree.nodes.get(ch.source_group) @@ -580,6 +581,7 @@ def check_mask_mix_nodes(layer, tree=None, specific_mask=None, specific_ch=None) yp = layer.id_data.yp if not tree: tree = get_tree(layer) + if not tree: return False need_reconnect = False From a45f12254639fe4d4e2b81bf723dac6f35b677e4 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Fri, 21 Feb 2025 16:20:51 +0700 Subject: [PATCH 070/283] fix bug scripts can't be reload in blender --- __init__.py | 18 ++++++++++++++---- textures_lib/__init__.py | 27 --------------------------- 2 files changed, 14 insertions(+), 31 deletions(-) delete mode 100644 textures_lib/__init__.py diff --git a/__init__.py b/__init__.py index 387d1f41..20ec15e0 100644 --- a/__init__.py +++ b/__init__.py @@ -43,17 +43,21 @@ imp.reload(Bake) imp.reload(BakeToLayer) imp.reload(Root) - imp.reload(textures_lib) imp.reload(versioning) imp.reload(addon_updater_ops) imp.reload(Test) + imp.reload(downloader) + imp.reload(properties) + imp.reload(operators) + imp.reload(tex_ui) else: from . import Localization from . import image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences from . import vector_displacement_lib, vector_displacement - from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, ListItem, Bake, BakeToLayer, Root, textures_lib, versioning + from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, ListItem, Bake, BakeToLayer, Root, versioning from . import addon_updater_ops from . import Test + from .textures_lib import downloader, properties, operators, ui as tex_ui import bpy @@ -80,10 +84,13 @@ def register(): Bake.register() BakeToLayer.register() Root.register() - textures_lib.register() versioning.register() addon_updater_ops.register() Test.register() + downloader.register() + properties.register() + operators.register() + tex_ui.register() print('INFO: ' + common.get_addon_title() + ' ' + common.get_current_version_str() + ' is registered!') @@ -110,10 +117,13 @@ def unregister(): Bake.unregister() BakeToLayer.unregister() Root.unregister() - textures_lib.unregister() versioning.unregister() addon_updater_ops.unregister() Test.unregister() + downloader.unregister() + properties.unregister() + operators.unregister() + tex_ui.unregister() print('INFO: ' + common.get_addon_title() + ' ' + common.get_current_version_str() + ' is unregistered!') diff --git a/textures_lib/__init__.py b/textures_lib/__init__.py deleted file mode 100644 index e5f01583..00000000 --- a/textures_lib/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ - -if "bpy" not in locals(): - from . import downloader - from . import properties - from . import operators - from . import ui -else: - import importlib - importlib.reload(downloader) - importlib.reload(properties) - importlib.reload(operators) - importlib.reload(ui) - -def register(): - downloader.register() - properties.register() - operators.register() - ui.register() - -def unregister(): - downloader.unregister() - properties.unregister() - operators.unregister() - ui.unregister() - -if __name__ == "__main__": - register() \ No newline at end of file From 89e18c8fd191b6b2b95240d48cbe26b0f12e0129 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:42:35 +0400 Subject: [PATCH 071/283] Remove trailing digits and spaces when checking texture filenames (#241) --- Layer.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Layer.py b/Layer.py index 3b36d23e..cc8fa63c 100644 --- a/Layer.py +++ b/Layer.py @@ -2101,6 +2101,9 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import img_name = os.path.splitext(bpy.path.basename(image.filepath))[0].lower() else: img_name = image.name.lower() + # Remove trailing digits and spaces from the filename + img_name = re.sub(r'[\d\s]+$', '', img_name) + # Check if synonym is in image name if self.is_synonym_in_image_name(syname, img_name): From 1991e9d345a24809eade5c7c90981bb9e91c4a03 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:26:59 +0400 Subject: [PATCH 072/283] Fill selected geometry when ColorID is added (#243) * Fill selected geometry when ColorID is added * Use keyword arguments in add_new_layer calls --- BakeToLayer.py | 7 +++++-- Layer.py | 54 +++++++++++++++++++++++++++++++++++++------------- Mask.py | 26 +++++++++++++++++++++--- 3 files changed, 68 insertions(+), 19 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 2b4590f8..a02141d3 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1787,8 +1787,11 @@ def execute(self, context): yp.halt_update = True layer = Layer.add_new_layer( - node.node_tree, layer_name, 'IMAGE', channel_idx, self.blend_type, - self.normal_blend_type, self.normal_map_type, 'UV', self.uv_map, image, None, segment, + group_tree=node.node_tree, layer_name=layer_name, + layer_type='IMAGE', channel_idx=channel_idx, + blend_type=self.blend_type, normal_blend_type=self.normal_blend_type, + normal_map_type=self.normal_map_type, texcoord_type='UV', + uv_name=self.uv_map, image=image, vcol=None, segment=segment, interpolation = self.interpolation, normal_space = 'OBJECT' if self.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' ) diff --git a/Layer.py b/Layer.py index cc8fa63c..e58bedfb 100644 --- a/Layer.py +++ b/Layer.py @@ -54,7 +54,8 @@ def add_new_layer( mask_texcoord_type='UV', mask_color='BLACK', mask_use_hdr=False, mask_uv_name='', mask_width=1024, mask_height=1024, use_image_atlas_for_mask=False, hemi_space='WORLD', hemi_use_prev_normal=True, - mask_color_id=(1, 0, 1), mask_vcol_data_type='BYTE_COLOR', mask_vcol_domain='CORNER', + mask_color_id=(1, 0, 1), mask_color_id_fill=True, + mask_vcol_data_type='BYTE_COLOR', mask_vcol_domain='CORNER', use_divider_alpha=False, use_udim_for_mask=False, interpolation='Linear', mask_interpolation='Linear', mask_edge_detect_radius=0.05, normal_space = 'TANGENT' @@ -290,6 +291,10 @@ def add_new_layer( elif mask_type == 'COLOR_ID': check_colorid_vcol(objs) + # Fill selected geometry if in edit mode + if mask_color_id_fill and bpy.context.mode == 'EDIT_MESH': + bpy.ops.mesh.y_vcol_fill_face_custom(color=(mask_color_id[0], mask_color_id[1], mask_color_id[2], 1.0)) + mask = Mask.add_new_mask( layer, mask_name, mask_type, mask_texcoord_type, mask_uv_name, mask_image, mask_vcol, mask_segment, @@ -740,9 +745,11 @@ def execute(self, context): yp.halt_update = True layer = add_new_layer( - node.node_tree, self.name, 'IMAGE', - channel_idx, 'MIX', self.blend_type, - 'VECTOR_DISPLACEMENT_MAP', 'UV', self.uv_map, img, + group_tree=node.node_tree, layer_name=self.name, + layer_type='IMAGE', channel_idx=channel_idx, + blend_type='MIX', normal_blend_type=self.blend_type, + normal_map_type='VECTOR_DISPLACEMENT_MAP', + texcoord_type='UV', uv_name=self.uv_map, image=img, interpolation = 'Cubic' ) @@ -903,6 +910,12 @@ class YNewLayer(bpy.types.Operator): subtype = 'COLOR', default=(1.0, 0.0, 1.0), min=0.0, max=1.0 ) + + mask_color_id_fill : BoolProperty( + name = 'Fill Selected Geometry with Color ID', + description = 'Fill selected geometry with color ID', + default = True + ) mask_image_filepath : StringProperty( name = 'Mask Image Path', @@ -1221,6 +1234,8 @@ def draw(self, context): col.label(text='Mask Type:') if self.mask_type == 'COLOR_ID': col.label(text='Mask Color ID:') + if obj.mode == 'EDIT': + col.label(text='Fill Selected:') elif self.mask_type == 'EDGE_DETECT': col.label(text='Edge Detect Radius:') else: @@ -1316,6 +1331,8 @@ def draw(self, context): col.prop(self, 'mask_type', text='') if self.mask_type == 'COLOR_ID': col.prop(self, 'mask_color_id', text='') + if obj.mode == 'EDIT': + col.prop(self, 'mask_color_id_fill', text='') elif self.mask_type == 'EDGE_DETECT': col.prop(self, 'mask_edge_detect_radius', text='') else: @@ -1494,7 +1511,7 @@ def execute(self, context): self.add_mask, self.mask_type, self.mask_image_filepath, self.mask_relative, self.mask_texcoord_type, self.mask_color, self.mask_use_hdr, self.mask_uv_name, self.mask_width, self.mask_height, self.use_image_atlas_for_mask, - self.hemi_space, self.hemi_use_prev_normal, self.mask_color_id, + self.hemi_space, self.hemi_use_prev_normal, self.mask_color_id, self.mask_color_id_fill, self.mask_vcol_data_type, self.mask_vcol_domain, self.use_divider_alpha, self.use_udim_for_mask, self.interpolation, self.mask_interpolation, @@ -2162,9 +2179,12 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import yp.halt_update = True layer = add_new_layer( - node.node_tree, image.name, 'IMAGE', - int(ch_idx), 'MIX', 'MIX', - normal_map_type, self.texcoord_type, self.uv_map, image, None, None, (1, 1, 1), + group_tree=node.node_tree, layer_name=image.name, + layer_type='IMAGE', channel_idx=int(ch_idx), + blend_type='MIX', normal_blend_type='MIX', + normal_map_type=normal_map_type, texcoord_type=self.texcoord_type, + uv_name=self.uv_map, image=image, + vcol=None, segment=None, solid_color=(1, 1, 1), add_mask=self.add_mask, mask_type=self.mask_type, mask_color=self.mask_color, mask_use_hdr=self.mask_use_hdr, mask_uv_name=self.mask_uv_name, mask_width=self.mask_width, mask_height=self.mask_height, use_image_atlas_for_mask=self.use_image_atlas_for_mask, use_udim_for_mask=self.use_udim_for_mask @@ -2780,9 +2800,12 @@ def execute(self, context): except: pass add_new_layer( - node.node_tree, image.name, 'IMAGE', int(self.channel_idx), self.blend_type, - self.normal_blend_type, self.normal_map_type, self.texcoord_type, self.uv_map, - image, None, None, interpolation=self.interpolation, normal_space=self.normal_space + group_tree=node.node_tree, layer_name=image.name, + layer_type='IMAGE', channel_idx=int(self.channel_idx), + blend_type=self.blend_type, normal_blend_type=self.normal_blend_type, + normal_map_type=self.normal_map_type, texcoord_type=self.texcoord_type, + uv_name = self.uv_map, image=image, vcol=None, segment=None, + interpolation=self.interpolation, normal_space=self.normal_space ) node.node_tree.yp.halt_update = False @@ -3298,9 +3321,12 @@ def execute(self, context): set_active_vertex_color(o, other_v) add_new_layer( - node.node_tree, name, self.type, int(self.channel_idx), self.blend_type, - self.normal_blend_type, self.normal_map_type, self.texcoord_type, self.uv_map, - image, vcol, None, interpolation=self.interpolation, normal_space=self.normal_space + group_tree=node.node_tree, layer_name=name, + layer_type=self.type, channel_idx=int(self.channel_idx), + blend_type=self.blend_type, normal_blend_type=self.normal_blend_type, + normal_map_type=self.normal_map_type, texcoord_type=self.texcoord_type, + uv_name=self.uv_map, image=image, vcol=vcol, segment=None, + interpolation=self.interpolation, normal_space=self.normal_space ) node.node_tree.yp.halt_update = False diff --git a/Mask.py b/Mask.py index cee8dea7..5a96bd87 100644 --- a/Mask.py +++ b/Mask.py @@ -575,6 +575,12 @@ class YNewLayerMask(bpy.types.Operator): default=(1.0, 0.0, 1.0), min=0.0, max=1.0, ) + color_id_fill : BoolProperty( + name = 'Fill Selected Geometry with Color ID', + description = 'Fill selected geometry with color ID', + default = True + ) + hdr : BoolProperty(name='32 bit Float', default=False) texcoord_type : EnumProperty( @@ -772,6 +778,8 @@ def draw(self, context): if self.type == 'COLOR_ID': col.label(text='Color ID:') + if obj.mode == 'EDIT': + col.label(text='Fill Selected:') if is_bl_newer_than(3, 2) and self.type == 'VCOL': col.label(text='Domain:') @@ -821,6 +829,8 @@ def draw(self, context): if self.type == 'COLOR_ID': col.prop(self, 'color_id', text='') + if obj.mode == 'EDIT': + col.prop(self, 'color_id_fill', text='') if self.type == 'HEMI': col.prop(self, 'hemi_space', text='') @@ -892,11 +902,17 @@ def execute(self, context): if same_name: if self.type == 'IMAGE': self.report({'ERROR'}, "Image named '" + self.name +"' is already available!") + return {'CANCELLED'} elif self.type == 'VCOL': self.report({'ERROR'}, "Vertex Color named '" + self.name +"' is already available!") - else: self.report({'ERROR'}, "Mask named '" + self.name +"' is already available!") - return {'CANCELLED'} - + return {'CANCELLED'} + elif self.options.is_repeat: + # Remove the mask before re-adding it on operator repeat + remove_mask(layer, same_name[0], obj) + else: + self.report({'ERROR'}, "Mask named '" + self.name +"' is already available!") + return {'CANCELLED'} + alpha = False img = None vcol = None @@ -973,6 +989,10 @@ def execute(self, context): elif self.type == 'COLOR_ID': check_colorid_vcol(objs) + # Fill selected geometry if in edit mode + if self.color_id_fill and bpy.context.mode == 'EDIT_MESH': + bpy.ops.mesh.y_vcol_fill_face_custom(color=(self.color_id[0], self.color_id[1], self.color_id[2], 1.0)) + # Voronoi and noise mask will use grayscale value by default source_input = 'RGB' if self.type not in {'VORONOI', 'NOISE'} else 'ALPHA' From 747ea91875594d7f5f6e15815f068aa845c4a929 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Sun, 23 Feb 2025 19:31:46 +0700 Subject: [PATCH 073/283] Rebake all Images (#245) * Attempting to use function for execute bake to entity * Replace self with bprops (#242) * Remove context passing from bake to entity function * Make overwrite checking outside of bake to entity function * Always reconnect root tree because the uv can change * Fix a comment * Add a button to rebake all baked images (#244) * Add rebake baked images operator and menu button * Fill selected geometry when ColorID is added (#243) * Fill selected geometry when ColorID is added * Use keyword arguments in add_new_layer calls * Use bake_to_entity function * Copy bake info props implicitly * Fix undefined message in bake operator * Do not pass channel_idx when rebaking * Add support for image atlas segments for rebake all images --------- Co-authored-by: passivestar <60579014+passivestar@users.noreply.github.com> --- BakeToLayer.py | 3372 +++++++++++++++++++++++++----------------------- ui.py | 4 +- 2 files changed, 1752 insertions(+), 1624 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index a02141d3..01b26e08 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -140,1925 +140,1991 @@ def update_bake_to_layer_uv_map(self, context): objs = get_all_objects_with_same_materials(mat) self.use_udim = UDIM.is_uvmap_udim(objs, self.uv_map) -class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_bake_to_layer" - bl_label = "Bake To Layer" - bl_description = "Bake something as layer/mask" - bl_options = {'REGISTER', 'UNDO'} +def get_bakeable_objects_and_meshes(mat, cage_object=None): + objs = [] + meshes = [] + + for ob in get_scene_objects(): + if ob.type != 'MESH': continue + if hasattr(ob, 'hide_viewport') and ob.hide_viewport: continue + if len(get_uv_layers(ob)) == 0: continue + if len(ob.data.polygons) == 0: continue + if cage_object and cage_object == ob: continue + + # Do not bake objects with hide_render on + if ob.hide_render: continue + if not in_renderable_layer_collection(ob): continue + + for i, m in enumerate(ob.data.materials): + if m == mat: + ob.active_material_index = i + if ob not in objs and ob.data not in meshes: + objs.append(ob) + meshes.append(ob.data) + + return objs, meshes + +def bake_to_entity(bprops, overwrite_img=None, segment=None): + + T = time.time() + mat = get_active_material() + node = get_active_ypaint_node() + yp = node.node_tree.yp + scene = bpy.context.scene + obj = bpy.context.object + channel_idx = int(bprops['channel_idx']) if 'channel_idx' in bprops and len(yp.channels) > 0 else -1 + + rdict = {} + rdict['message'] = '' + + if bprops['type'] == 'SELECTED_VERTICES' and obj.mode != 'EDIT': + rdict['message'] = "Should be in edit mode!" + return rdict + + if bprops['target_type'] == 'MASK' and len(yp.layers) == 0: + rdict['message'] = "Mask need active layer!" + return rdict + + if bprops['type'] in {'BEVEL_NORMAL', 'BEVEL_MASK'} and not is_bl_newer_than(2, 80): + rdict['message'] = "Blender 2.80+ is needed to use this feature!" + return rdict + + if bprops['type'] in {'MULTIRES_NORMAL', 'MULTIRES_DISPLACEMENT'} and not is_bl_newer_than(2, 80): + rdict['message'] = "Blender 2.80+ is needed to use this feature!" + return rdict + + if (hasattr(obj, 'hide_viewport') and obj.hide_viewport) or obj.hide_render: + rdict['message'] = "Please unhide render and viewport of active object!" + return rdict + + if bprops['type'] == 'FLOW' and (bprops['uv_map'] == '' or bprops['uv_map_1'] == '' or bprops['uv_map'] == bprops['uv_map_1']): + rdict['message'] = "UVMap and Straight UVMap cannot be the same or empty!" + return rdict + + # Get cage object + cage_object = None + if bprops['type'].startswith('OTHER_OBJECT_') and bprops['cage_object_name'] != '': + cage_object = bpy.data.objects.get(bprops['cage_object_name']) + if cage_object: + + if any([mod for mod in cage_object.modifiers if mod.type not in {'ARMATURE'}]) or any([mod for mod in obj.modifiers if mod.type not in {'ARMATURE'}]): + rdict['message'] = "Mesh modifiers is not working with cage object for now!" + return rdict + + if len(cage_object.data.polygons) != len(obj.data.polygons): + rdict['message'] = "Invalid cage object, the cage mesh must have the same number of faces as the active object!" + return rdict + + if mat.users > 1: + objs, meshes = get_bakeable_objects_and_meshes(mat, cage_object) + else: + objs = [obj] + + # Count multires objects + multires_count = 0 + if bprops['type'].startswith('MULTIRES_'): + for ob in objs: + if get_multires_modifier(ob): + multires_count += 1 + + if not objs or (bprops['type'].startswith('MULTIRES_') and multires_count == 0): + rdict['message'] = "No valid objects found to bake!" + return rdict + + do_overwrite = False + overwrite_image_name = '' + if overwrite_img: + do_overwrite = True + overwrite_image_name = overwrite_img.name + + # Get other objects for other object baking + other_objs = [] + + if bprops['type'].startswith('OTHER_OBJECT_'): - name : StringProperty(default='') + # Get other objects based on selected objects with different material + for o in bpy.context.selected_objects: + if o in objs or not o.data or not hasattr(o.data, 'materials'): continue + if mat.name not in o.data.materials: + other_objs.append(o) - uv_map : StringProperty(default='', update=update_bake_to_layer_uv_map) - uv_map_coll : CollectionProperty(type=bpy.types.PropertyGroup) + # Try to get other_objects from bake info + if overwrite_img: - uv_map_1 : StringProperty(default='') + bi = segment.bake_info if segment else overwrite_img.y_bake_info - interpolation : EnumProperty( - name = 'Image Interpolation Type', - description = 'Image interpolation type', - items = interpolation_type_items, - default = 'Linear' - ) + scene_objs = get_scene_objects() + for oo in bi.other_objects: + if is_bl_newer_than(2, 79): + ooo = oo.object + else: ooo = scene_objs.get(oo.object_name) - # For choosing overwrite entity from list - overwrite_choice : BoolProperty( - name = 'Overwrite available layer', - description = 'Overwrite available layer', - default = False - ) + if ooo: + if is_bl_newer_than(2, 80): + # Check if object is on current view layer + layer_cols = get_object_parent_layer_collections([], bpy.context.view_layer.layer_collection, ooo) + if ooo not in other_objs and any(layer_cols): + other_objs.append(ooo) + else: + o = scene_objs.get(ooo.name) + if o and o not in other_objs: + other_objs.append(o) - # For rebake button - overwrite_current : BoolProperty(default=False) + if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) - overwrite_name : StringProperty(default='') - overwrite_coll : CollectionProperty(type=bpy.types.PropertyGroup) + if not other_objs: + if overwrite_img: + rdict['message'] = "No source objects found! They're probably deleted!" + return rdict + else: + rdict['message'] = "Source objects must be selected and it should have different material!" + return rdict - overwrite_image_name : StringProperty(default='') - overwrite_segment_name : StringProperty(default='') + # Get tile numbers + tilenums = [1001] + if bprops['use_udim']: + tilenums = UDIM.get_tile_numbers(objs, bprops['uv_map']) - type : EnumProperty( - name = 'Bake Type', - description = 'Bake Type', - items = bake_type_items, - default = 'AO' - ) + # Remember things + book = remember_before_bake(yp, mat=mat) - # Other objects props - cage_object_name : StringProperty( - name = 'Cage Object', - description = 'Object to use as cage instead of calculating the cage from the active object with cage extrusion', - default = '' - ) + # FXAA doesn't work with hdr image + # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead + use_fxaa = not bprops['hdr'] and bprops['fxaa'] and not bprops['type'].startswith('OTHER_OBJECT_') - cage_object_coll : CollectionProperty(type=bpy.types.PropertyGroup) + # For now SSAA only works with other object baking + use_ssaa = bprops['ssaa'] and bprops['type'].startswith('OTHER_OBJECT_') - cage_extrusion : FloatProperty( - name = 'Cage Extrusion', - description = 'Inflate the active object by the specified distance for baking. This helps matching to points nearer to the outside of the selected object meshes', - default=0.2, min=0.0, max=1.0 - ) + # Denoising only available for AO bake for now + use_denoise = bprops['denoise'] and bprops['type'] in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81) - max_ray_distance : FloatProperty( - name = 'Max Ray Distance', - description = 'The maximum ray distance for matching points between the active and selected objects. If zero, there is no limit', - default=0.2, min=0.0, max=1.0 - ) - - # AO Props - ao_distance : FloatProperty(default=1.0) + # SSAA will multiply size by 2 then resize it back + if use_ssaa: + width = bprops['width'] * 2 + height = bprops['height'] * 2 + else: + width = bprops['width'] + height = bprops['height'] - # Bevel Props - bevel_samples : IntProperty(default=4, min=2, max=16) - bevel_radius : FloatProperty(default=0.05, min=0.0, max=1000.0) + # If use baked disp, need to bake normal and height map first + subdiv_setup_changes = False + height_root_ch = get_root_height_channel(yp) + if height_root_ch and bprops['use_baked_disp'] and not bprops['type'].startswith('MULTIRES_'): - multires_base : IntProperty(default=1, min=0, max=16) + if not height_root_ch.enable_subdiv_setup: + height_root_ch.enable_subdiv_setup = True + subdiv_setup_changes = True - target_type : EnumProperty( - name = 'Target Bake Type', - description = 'Target Bake Type', - items = ( - ('LAYER', 'Layer', ''), - ('MASK', 'Mask', '') - ), - default='LAYER' - ) + # To hold temporary objects + temp_objs = [] - fxaa : BoolProperty( - name = 'Use FXAA', - description = "Use FXAA on baked image (doesn't work with float images)", - default = True - ) + # Sometimes Cavity bake will create temporary objects + if (bprops['type'] == 'CAVITY' and (bprops['subsurf_influence'] or bprops['use_baked_disp'])): - ssaa : BoolProperty( - name = 'Use SSAA', - description = "Use Supersample AA on baked image", - default = False - ) + # NOTE: Baking cavity with subdiv setup can only happen if there's only one object and no UDIM + if is_bl_newer_than(4, 2) and len(objs) == 1 and not bprops['use_udim'] and height_root_ch and height_root_ch.enable_subdiv_setup: - denoise : BoolProperty( - name = 'Use Denoise', - description = "Use Denoise on baked image", - default = True - ) + # Check if there's VDM layer + vdm_layer = get_first_vdm_layer(yp) + vdm_uv_name = vdm_layer.uv_name if vdm_layer else bprops['uv_map'] - channel_idx : EnumProperty( - name = 'Channel', - description = 'Channel of new layer, can be changed later', - items = Layer.channel_items - ) + # Get baked combined vdm image + combined_vdm_image = vector_displacement.get_combined_vdm_image(objs[0], vdm_uv_name, width=bprops['width'], height=bprops['height']) - blend_type : EnumProperty( - name = 'Blend', - items = blend_type_items, - ) + # Bake tangent and bitangent + # NOTE: Only bake the first object tangent since baking combined mesh can cause memory leak at the moment + tanimage, bitimage = vector_displacement.get_tangent_bitangent_images(objs[0], bprops['uv_map']) - normal_blend_type : EnumProperty( - name = 'Normal Blend Type', - items = normal_blend_items, - default = 'MIX' - ) + # Duplicate object + objs = temp_objs = [get_merged_mesh_objects(scene, objs, True, disable_problematic_modifiers=False)] - normal_map_type : EnumProperty( - name = 'Normal Map Type', - description = 'Normal map type of this layer', - items = Layer.get_normal_map_type_items - ) + # Use VDM loader geometry nodes + # NOTE: Geometry nodes currently does not support UDIM, so using UDIM will cause wrong bake result + set_active_object(objs[0]) + vdm_loader = vector_displacement_lib.get_vdm_loader_geotree(bprops['uv_map'], combined_vdm_image, tanimage, bitimage, 1.0) + bpy.ops.object.modifier_add(type='NODES') + geomod = objs[0].modifiers[-1] + geomod.node_group = vdm_loader + bpy.ops.object.modifier_apply(modifier=geomod.name) - hdr : BoolProperty(name='32 bit Float', default=True) + # Remove temporary datas + remove_datablock(bpy.data.node_groups, vdm_loader) + remove_datablock(bpy.data.images, combined_vdm_image) - use_baked_disp : BoolProperty( - name = 'Use Displacement Setup', - description = 'Use displacement setup, this will also apply subdiv setup on object', - default = False - ) + else: + objs = temp_objs = get_duplicated_mesh_objects(scene, objs, True) - flip_normals : BoolProperty( - name = 'Flip Normals', - description = 'Flip normal of mesh', - default = False - ) + # Join objects then extend with other objects + elif bprops['type'].startswith('OTHER_OBJECT_'): + if len(objs) > 1: + objs = [get_merged_mesh_objects(scene, objs)] + temp_objs = objs.copy() - only_local : BoolProperty( - name = 'Only Local', - description = 'Only bake local ambient occlusion', - default = False - ) + objs.extend(other_objs) - subsurf_influence : BoolProperty( - name = 'Subsurf / Multires Influence', - description = 'Take account subsurf or multires when baking cavity', - default = True - ) + # Join objects if the number of objects is higher than one + elif not bprops['type'].startswith('MULTIRES_') and len(objs) > 1 and not is_join_objects_problematic(yp): + objs = temp_objs = [get_merged_mesh_objects(scene, objs, True)] - force_bake_all_polygons : BoolProperty( - name = 'Force Bake all Polygons', - description = 'Force bake all polygons, useful if material is not using direct polygon (ex: solidify material)', - default = False - ) + fill_mode = 'FACE' + obj_vertex_indices = {} + if bprops['type'] == 'SELECTED_VERTICES': + if bpy.context.tool_settings.mesh_select_mode[0] or bpy.context.tool_settings.mesh_select_mode[1]: + fill_mode = 'VERTEX' - use_image_atlas : BoolProperty( - name = 'Use Image Atlas', - description = 'Use Image Atlas', - default = False - ) + if is_bl_newer_than(2, 80): + edit_objs = [o for o in objs if o.mode == 'EDIT'] + else: edit_objs = [obj] - use_udim : BoolProperty( - name = 'Use UDIM Tiles', - description = 'Use UDIM Tiles', - default = False - ) - - @classmethod - def poll(cls, context): - return get_active_ypaint_node() and context.object.type == 'MESH' + for ob in edit_objs: + mesh = ob.data + bm = bmesh.from_edit_mesh(mesh) - @classmethod - def description(self, context, properties): - return get_operator_description(self) + bm.verts.ensure_lookup_table() + #bm.edges.ensure_lookup_table() + bm.faces.ensure_lookup_table() - def invoke(self, context, event): - self.invoke_operator(context) + v_indices = [] + if fill_mode == 'FACE': + for face in bm.faces: + if face.select: + v_indices.append(face.index) + #for loop in face.loops: + # v_indices.append(loop.index) - if hasattr(context, 'entity'): - self.entity = context.entity - else: self.entity = None + else: + for vert in bm.verts: + if vert.select: + v_indices.append(vert.index) - obj = self.obj = context.object - scene = self.scene = context.scene - node = get_active_ypaint_node() - yp = node.node_tree.yp - ypup = get_user_preferences() + obj_vertex_indices[ob.name] = v_indices - # UDIM is turned off by default - #self.use_udim = False + bpy.ops.object.mode_set(mode = 'OBJECT') + for ob in objs: + try: + vcol = new_vertex_color(ob, TEMP_VCOL) + set_obj_vertex_colors(ob, vcol.name, (0.0, 0.0, 0.0, 1.0)) + set_active_vertex_color(ob, vcol) + except: pass + bpy.ops.object.mode_set(mode = 'EDIT') + bpy.ops.mesh.y_vcol_fill(color_option ='WHITE') + bpy.ops.object.mode_set(mode = 'OBJECT') + + # Check if there's channel using alpha + alpha_outp = None + for c in yp.channels: + if c.enable_alpha: + alpha_outp = node.outputs.get(c.name + io_suffix['ALPHA']) + if alpha_outp: break + + # Prepare bake settings + if bprops['type'] == 'AO': + if alpha_outp: + # If there's alpha channel use standard AO bake, which has lesser quality denoising + bake_type = 'AO' + else: + # When there is no alpha channel use combined render bake, which has better denoising + bake_type = 'COMBINED' + elif bprops['type'] == 'MULTIRES_NORMAL': + bake_type = 'NORMALS' + elif bprops['type'] == 'MULTIRES_DISPLACEMENT': + bake_type = 'DISPLACEMENT' + elif bprops['type'] in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + bake_type = 'NORMAL' + else: + bake_type = 'EMIT' - # Default normal map type is bump - self.normal_map_type = 'BUMP_MAP' + # If use only local, hide other objects + hide_other_objs = bprops['type'] != 'AO' or bprops['only_local'] - # Default FXAA is on - #self.fxaa = True + # Fit tilesize to bake resolution if samples is equal 1 + if bprops['samples'] <= 1: + tile_x = width + tile_y = height + else: + tile_x = 256 + tile_y = 256 - # Default samples is 1 - self.samples = 1 + # Cage object only used for other object baking + cage_object_name = bprops['cage_object_name'] if bprops['type'].startswith('OTHER_OBJECT_') else '' - # Set channel to first one, just in case - if len(yp.channels) > 0: - self.channel_idx = str(0) + prepare_bake_settings( + book, objs, yp, samples=bprops['samples'], margin=bprops['margin'], + uv_map=bprops['uv_map'], bake_type=bake_type, #disable_problematic_modifiers=True, + bake_device=bprops['bake_device'], hide_other_objs=hide_other_objs, + bake_from_multires=bprops['type'].startswith('MULTIRES_'), tile_x = tile_x, tile_y = tile_y, + use_selected_to_active=bprops['type'].startswith('OTHER_OBJECT_'), + max_ray_distance=bprops['max_ray_distance'], cage_extrusion=bprops['cage_extrusion'], + source_objs=other_objs, use_denoising=False, margin_type=bprops['margin_type'], + cage_object_name = cage_object_name, + normal_space = 'OBJECT' if bprops['type'] == 'OBJECT_SPACE_NORMAL' else 'TANGENT' + ) + # Set multires level + #ori_multires_levels = {} + if bprops['type'].startswith('MULTIRES_'): #or bprops['type'] == 'AO': + for ob in objs: + mod = get_multires_modifier(ob) - # Get height channel - height_root_ch = get_root_height_channel(yp) + #mod.render_levels = mod.total_levels + if mod and bprops['type'].startswith('MULTIRES_'): + mod.render_levels = bprops['multires_base'] + mod.levels = bprops['multires_base'] - # Set default float image - if self.type in {'POINTINESS', 'MULTIRES_DISPLACEMENT', 'BEVEL_MASK'}: - self.hdr = True - else: - self.hdr = False + #ori_multires_levels[ob.name] = mod.render_levels - # Set name - mat = get_active_material() - if self.type == 'AO': - self.blend_type = 'MULTIPLY' - self.samples = 32 + # Setup for cavity + if bprops['type'] == 'CAVITY': - # Check Ambient occlusion channel if available - for i, c in enumerate(yp.channels): - if c.name in {'Ambient Occlusion', 'AO'}: - self.channel_idx = str(i) - break + tt = time.time() + print('BAKE TO LAYER: Applying subsurf/multires for Cavity bake...') - elif self.type == 'POINTINESS': - self.blend_type = 'ADD' - self.fxaa = False - elif self.type == 'CAVITY': - self.blend_type = 'ADD' - elif self.type == 'DUST': - self.blend_type = 'MIX' - elif self.type == 'PAINT_BASE': - self.blend_type = 'MIX' - elif self.type == 'BEVEL_NORMAL': - self.blend_type = 'MIX' - self.normal_blend_type = 'OVERLAY' - self.use_baked_disp = False - self.samples = 32 + # Set vertex color for cavity + for ob in objs: - if height_root_ch: - self.channel_idx = str(get_channel_index(height_root_ch)) - self.normal_map_type = 'NORMAL_MAP' + set_active_object(ob) - elif self.type == 'BEVEL_MASK': - self.blend_type = 'MIX' - self.use_baked_disp = False - self.samples = 32 + if bprops['subsurf_influence'] or bprops['use_baked_disp']: + need_to_be_applied_modifiers = [] + for m in ob.modifiers: + if m.type in {'SUBSURF', 'MULTIRES'} and m.levels > 0 and m.show_viewport: - elif self.type == 'MULTIRES_NORMAL': - self.blend_type = 'MIX' + # Set multires to the highest level + if m.type == 'MULTIRES': + m.levels = m.total_levels - if height_root_ch: - self.channel_idx = str(get_channel_index(height_root_ch)) - self.normal_map_type = 'NORMAL_MAP' - self.normal_blend_type = 'OVERLAY' + need_to_be_applied_modifiers.append(m) - elif self.type == 'MULTIRES_DISPLACEMENT': - self.blend_type = 'MIX' + # Also apply displace + if m.type == 'DISPLACE' and m.show_viewport: + need_to_be_applied_modifiers.append(m) - if height_root_ch: - self.channel_idx = str(get_channel_index(height_root_ch)) - self.normal_map_type = 'BUMP_MAP' - self.normal_blend_type = 'OVERLAY' + # Apply shape keys and modifiers + if any(need_to_be_applied_modifiers): + if ob.data.shape_keys: + if is_bl_newer_than(3, 3): + bpy.ops.object.shape_key_remove(all=True, apply_mix=True) + else: bpy.ops.object.shape_key_remove(all=True) - elif self.type == 'OTHER_OBJECT_EMISSION': - self.subsurf_influence = False + for m in need_to_be_applied_modifiers: + bpy.ops.object.modifier_apply(modifier=m.name) - self.margin = 0 + # Create new vertex color for dirt + try: + vcol = new_vertex_color(ob, TEMP_VCOL) + set_obj_vertex_colors(ob, vcol.name, (1.0, 1.0, 1.0, 1.0)) + set_active_vertex_color(ob, vcol) + except: pass - elif self.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - self.subsurf_influence = False + bpy.ops.paint.vertex_color_dirt(dirt_angle=math.pi / 2) - if height_root_ch: - self.channel_idx = str(get_channel_index(height_root_ch)) - self.normal_map_type = 'NORMAL_MAP' - self.normal_blend_type = 'OVERLAY' + print('BAKE TO LAYER: Applying subsurf/multires is done in', '{:0.2f}'.format(time.time() - tt), 'seconds!') - if self.type == 'OTHER_OBJECT_NORMAL': - self.margin = 0 + # Setup for flow + if bprops['type'] == 'FLOW': + bpy.ops.object.mode_set(mode = 'OBJECT') + for ob in objs: + uv_layers = get_uv_layers(ob) + main_uv = uv_layers.get(bprops['uv_map']) + straight_uv = uv_layers.get(bprops['uv_map_1']) - elif self.type == 'OTHER_OBJECT_CHANNELS': - self.subsurf_influence = False - self.use_image_atlas = False - self.margin = 0 + if main_uv and straight_uv: + flow_vcol = get_flow_vcol(ob, main_uv, straight_uv) - elif self.type == 'SELECTED_VERTICES': - self.subsurf_influence = False - self.use_baked_disp = False + # Flip normals setup + if bprops['flip_normals']: + #ori_mode[obj.name] = obj.mode + if is_bl_newer_than(2, 80): + # Deselect other objects first + for o in other_objs: + o.select_set(False) + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') + # Reselect other objects + for o in other_objs: + o.select_set(True) + else: + for ob in objs: + if ob in other_objs: continue + scene.objects.active = ob + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') - elif self.type == 'FLOW': - self.blend_type = 'MIX' + # More setup + ori_mods = {} + ori_viewport_mods = {} + ori_mat_ids = {} + ori_loop_locs = {} + ori_multires_levels = {} - # Check flow channel if available - for i, c in enumerate(yp.channels): - if 'flow' in c.name.lower(): - self.channel_idx = str(i) - break + # Do not disable modifiers for surface based bake types + disable_problematic_modifiers = bprops['type'] not in {'CAVITY', 'POINTINESS', 'BEVEL_NORMAL', 'BEVEL_MASK'} - suffix = bake_type_suffixes[self.type] - self.name = get_unique_name(mat.name + ' ' + suffix, bpy.data.images) + for ob in objs: - self.overwrite_choice = False - self.overwrite_name = '' - overwrite_entity = None - - if self.overwrite_current: - overwrite_entity = self.entity + # Disable few modifiers + ori_mods[ob.name] = [m.show_render for m in ob.modifiers] + ori_viewport_mods[ob.name] = [m.show_viewport for m in ob.modifiers] + if bprops['type'].startswith('MULTIRES_'): + mul = get_multires_modifier(ob) + multires_index = 99 + if mul: + for i, m in enumerate(ob.modifiers): + if m == mul: multires_index = i + if i > multires_index: + m.show_render = False + m.show_viewport = False + elif disable_problematic_modifiers and ob not in other_objs: + for m in get_problematic_modifiers(ob): + m.show_render = False + + ori_mat_ids[ob.name] = [] + ori_loop_locs[ob.name] = [] + + if bprops['subsurf_influence'] and not bprops['use_baked_disp'] and not bprops['type'].startswith('MULTIRES_'): + for m in ob.modifiers: + if m.type == 'MULTIRES': + ori_multires_levels[ob.name] = m.render_levels + m.render_levels = m.total_levels + break - # Other object and selected vertices bake will not display overwrite choice - elif not self.type.startswith('OTHER_OBJECT_') and self.type not in {'SELECTED_VERTICES'}: - #else: + if len(ob.data.materials) > 1: + active_mat_id = [i for i, m in enumerate(ob.data.materials) if m == mat] + if active_mat_id: active_mat_id = active_mat_id[0] + else: continue - # Clear overwrite_coll - self.overwrite_coll.clear() + uv_layers = get_uv_layers(ob) + uvl = uv_layers.get(bprops['uv_map']) - # Get overwritable layers - if self.target_type == 'LAYER': - for layer in yp.layers: - if layer.type == 'IMAGE': - source = get_layer_source(layer) - if source.image: - img = source.image - if img.y_bake_info.is_baked and not img.y_bake_info.is_baked_channel and img.y_bake_info.bake_type == self.type: - self.overwrite_coll.add().name = layer.name - elif img.yia.is_image_atlas or img.yua.is_udim_atlas: - if img.yia.is_image_atlas: - segment = img.yia.segments.get(layer.segment_name) - else: segment = img.yua.segments.get(layer.segment_name) - if segment and segment.bake_info.is_baked and segment.bake_info.bake_type == self.type: - self.overwrite_coll.add().name = layer.name + for p in ob.data.polygons: - # Get overwritable masks - elif len(yp.layers) > 0: - active_layer = yp.layers[yp.active_layer_index] - for mask in active_layer.masks: - if mask.type == 'IMAGE': - source = get_mask_source(mask) - if source.image: - img = source.image - if img.y_bake_info.is_baked and not img.y_bake_info.is_baked_channel and img.y_bake_info.bake_type == self.type: - self.overwrite_coll.add().name = mask.name - elif img.yia.is_image_atlas or img.yua.is_udim_atlas: - if img.yia.is_image_atlas: - segment = img.yia.segments.get(mask.segment_name) - else: segment = img.yua.segments.get(mask.segment_name) - if segment and segment.bake_info.is_baked and segment.bake_info.bake_type == self.type: - self.overwrite_coll.add().name = mask.name + # Set uv location to (0,0) if not using current material + if uvl and not bprops['force_bake_all_polygons']: + uv_locs = [] + for li in p.loop_indices: + uv_locs.append(uvl.data[li].uv.copy()) + if p.material_index != active_mat_id: + uvl.data[li].uv = Vector((0.0, 0.0)) - if len(self.overwrite_coll) > 0: + ori_loop_locs[ob.name].append(uv_locs) - self.overwrite_choice = True - if self.target_type == 'LAYER': - overwrite_entity = yp.layers.get(self.overwrite_coll[0].name) - else: - active_layer = yp.layers[yp.active_layer_index] - overwrite_entity = active_layer.masks.get(self.overwrite_coll[0].name) - else: - self.overwrite_choice = False + # Need to assign all polygon to active material if there are multiple materials + ori_mat_ids[ob.name].append(p.material_index) + p.material_index = active_mat_id - self.overwrite_image_name = '' - self.overwrite_segment_name = '' - if overwrite_entity: + # Create bake nodes + tex = mat.node_tree.nodes.new('ShaderNodeTexImage') + bsdf = mat.node_tree.nodes.new('ShaderNodeEmission') + normal_bake = None + geometry = None + vector_math = None + vector_math_1 = None + if bprops['type'] == 'BEVEL_NORMAL': + #bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') + normal_bake = mat.node_tree.nodes.new('ShaderNodeGroup') + normal_bake.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV) + elif bprops['type'] == 'BEVEL_MASK': + geometry = mat.node_tree.nodes.new('ShaderNodeNewGeometry') + vector_math = mat.node_tree.nodes.new('ShaderNodeVectorMath') + vector_math.operation = 'CROSS_PRODUCT' + if is_bl_newer_than(2, 81): + vector_math_1 = mat.node_tree.nodes.new('ShaderNodeVectorMath') + vector_math_1.operation = 'LENGTH' - if self.target_type == 'LAYER': - source = get_layer_source(overwrite_entity) - else: source = get_mask_source(overwrite_entity) + # Get output node and remember original bsdf input + output = get_active_mat_output_node(mat.node_tree) + ori_bsdf = output.inputs[0].links[0].from_socket - bi = None - if overwrite_entity.type == 'IMAGE' and source.image: - self.overwrite_image_name = source.image.name - if not source.image.yia.is_image_atlas and not source.image.yua.is_udim_atlas: - self.overwrite_name = source.image.name - self.width = source.image.size[0] if source.image.size[0] != 0 else int(ypup.default_image_resolution) - self.height = source.image.size[1] if source.image.size[1] != 0 else int(ypup.default_image_resolution) - self.use_image_atlas = False - bi = source.image.y_bake_info - else: - self.overwrite_name = overwrite_entity.name - self.overwrite_segment_name = overwrite_entity.segment_name - if source.image.yia.is_image_atlas: - segment = source.image.yia.segments.get(overwrite_entity.segment_name) - self.width = segment.width - self.height = segment.height - else: - segment = source.image.yua.segments.get(overwrite_entity.segment_name) - tilenums = UDIM.get_udim_segment_tilenums(segment) - if len(tilenums) > 0: - tile = source.image.tiles.get(tilenums[0]) - self.width = tile.size[0] - self.height = tile.size[1] - bi = segment.bake_info - self.use_image_atlas = True - self.hdr = source.image.is_float + if bprops['type'] == 'AO': + # If there's alpha channel use standard AO bake, which has lesser quality denoising + if alpha_outp: + src = None - # Fill settings using bake info stored on image - if bi: - for attr in dir(bi): - if attr in {'other_objects', 'selected_objects'}: continue - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - #if attr in dir(self): - try: setattr(self, attr, getattr(bi, attr)) - except: pass + if hasattr(scene.cycles, 'use_fast_gi'): + scene.cycles.use_fast_gi = True - self.uv_map = overwrite_entity.uv_name - - # Use active uv layer name by default - uv_layers = get_uv_layers(obj) + if scene.world: + scene.world.light_settings.distance = bprops['ao_distance'] + # When there is no alpha channel use combined render bake, which has better denoising + else: + src = mat.node_tree.nodes.new('ShaderNodeAmbientOcclusion') - # UV Map collections update - self.uv_map_coll.clear() - for uv in uv_layers: - if not uv.name.startswith(TEMP_UV): - self.uv_map_coll.add().name = uv.name + if 'Distance' in src.inputs: + src.inputs['Distance'].default_value = bprops['ao_distance'] - if len(self.uv_map_coll) > 0 and not overwrite_entity: #len(self.overwrite_coll) == 0: - self.uv_map = self.uv_map_coll[0].name + # Links + if not is_bl_newer_than(2, 80): + mat.node_tree.links.new(src.outputs[0], output.inputs[0]) + else: + mat.node_tree.links.new(src.outputs['AO'], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - if len(self.uv_map_coll) > 1: - self.uv_map_1 = self.uv_map_coll[1].name + elif bprops['type'] == 'POINTINESS': + src = mat.node_tree.nodes.new('ShaderNodeNewGeometry') - # Cage object collections update - self.cage_object_coll.clear() - for ob in get_scene_objects(): - if ob != obj and ob not in bpy.context.selected_objects and ob.type == 'MESH': - self.cage_object_coll.add().name = ob.name - - requires_popup = self.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_EMISSION', 'OTHER_OBJECT_CHANNELS', 'FLOW'} - if not requires_popup and get_user_preferences().skip_property_popups and not event.shift: - return self.execute(context) + # Links + mat.node_tree.links.new(src.outputs['Pointiness'], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - return context.window_manager.invoke_props_dialog(self, width=320) + elif bprops['type'] == 'CAVITY': + src = mat.node_tree.nodes.new('ShaderNodeGroup') + src.node_tree = get_node_tree_lib(lib.CAVITY) - def check(self, context): - self.check_operator(context) - ypup = get_user_preferences() + # Set vcol + vcol_node = src.node_tree.nodes.get('vcol') + vcol_node.attribute_name = TEMP_VCOL - # New image cannot use more pixels than the image atlas - if self.use_image_atlas: - if self.hdr: max_size = ypup.hdr_image_atlas_size - else: max_size = ypup.image_atlas_size - if self.width > max_size: self.width = max_size - if self.height > max_size: self.height = max_size + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - return True + elif bprops['type'] == 'DUST': + src = mat.node_tree.nodes.new('ShaderNodeGroup') + src.node_tree = get_node_tree_lib(lib.DUST) - def draw(self, context): - node = get_active_ypaint_node() - yp = node.node_tree.yp - mat = get_active_material() + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - channel = yp.channels[int(self.channel_idx)] if self.channel_idx != '-1' else None - height_root_ch = get_root_height_channel(yp) + elif bprops['type'] == 'PAINT_BASE': + src = mat.node_tree.nodes.new('ShaderNodeGroup') + src.node_tree = get_node_tree_lib(lib.PAINT_BASE) - row = split_layout(self.layout, 0.4) + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - show_subsurf_influence = not self.type.startswith('MULTIRES_') and self.type not in {'SELECTED_VERTICES'} - show_use_baked_disp = height_root_ch and not self.type.startswith('MULTIRES_') and self.type not in {'SELECTED_VERTICES'} + elif bprops['type'] == 'BEVEL_NORMAL': + src = mat.node_tree.nodes.new('ShaderNodeBevel') - col = row.column(align=False) + src.samples = bprops['bevel_samples'] + src.inputs[0].default_value = bprops['bevel_radius'] - if not self.overwrite_current: + #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) + mat.node_tree.links.new(src.outputs[0], normal_bake.inputs[0]) + mat.node_tree.links.new(normal_bake.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - if len(self.overwrite_coll) > 0: - col.label(text='Overwrite:') - if len(self.overwrite_coll) > 0 and self.overwrite_choice: - if self.target_type == 'LAYER': - col.label(text='Overwrite Layer:') - else: - col.label(text='Overwrite Mask:') - else: - col.label(text='Name:') + elif bprops['type'] == 'BEVEL_MASK': + src = mat.node_tree.nodes.new('ShaderNodeBevel') - if self.target_type == 'LAYER': - col.label(text='Channel:') - if channel and channel.type == 'NORMAL': - col.label(text='Type:') - else: - col.label(text='Name:') + src.samples = bprops['bevel_samples'] + src.inputs[0].default_value = bprops['bevel_radius'] - if self.type.startswith('OTHER_OBJECT_'): - col.label(text='Cage Object:') - col.label(text='Cage Extrusion:') - if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): - col.label(text='Max Ray Distance:') - elif self.type == 'AO': - col.label(text='AO Distance:') - col.label(text='') - elif self.type in {'BEVEL_NORMAL', 'BEVEL_MASK'}: - col.label(text='Bevel Samples:') - col.label(text='Bevel Radius:') - elif self.type.startswith('MULTIRES_'): - col.label(text='Base Level:') - #elif self.type.startswith('OTHER_OBJECT_'): - # col.label(text='Source Object:') + mat.node_tree.links.new(geometry.outputs['Normal'], vector_math.inputs[0]) + mat.node_tree.links.new(src.outputs[0], vector_math.inputs[1]) + #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) + if is_bl_newer_than(2, 81): + mat.node_tree.links.new(vector_math.outputs[0], vector_math_1.inputs[0]) + mat.node_tree.links.new(vector_math_1.outputs[1], bsdf.inputs[0]) + else: + mat.node_tree.links.new(vector_math.outputs[1], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - col.label(text='') - col.label(text='') - if self.use_custom_resolution == False: - col.label(text='Resolution:') - if self.use_custom_resolution == True: - col.label(text='Width:') - col.label(text='Height:') - col.label(text='Samples:') - col.label(text='UV Map:') - if self.type == 'FLOW': - col.label(text='Straight UV Map:') - col.label(text='Margin:') + elif bprops['type'] == 'SELECTED_VERTICES': if is_bl_newer_than(2, 80): - col.separator() - col.label(text='Bake Device:') - col.label(text='Interpolation:') - col.separator() - col.label(text='') - #col.label(text='') - col.label(text='') + src = mat.node_tree.nodes.new('ShaderNodeVertexColor') + src.layer_name = TEMP_VCOL + else: + src = mat.node_tree.nodes.new('ShaderNodeAttribute') + src.attribute_name = TEMP_VCOL + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - #if not self.type.startswith('MULTIRES_'): - if show_subsurf_influence: - col.label(text='') + elif bprops['type'] == 'FLOW': + # Set vcol + src = mat.node_tree.nodes.new('ShaderNodeAttribute') + src.attribute_name = FLOW_VCOL - #if height_root_ch and not self.type.startswith('MULTIRES_'): - if show_use_baked_disp: - col.label(text='') + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - col.label(text='') - col.label(text='') + else: + src = None + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - if self.type not in {'OTHER_OBJECT_CHANNELS'}: - col.separator() - col.label(text='') + # Get number of target images + ch_ids = [0] + + # Other object channels related + all_other_mats = [] + ori_from_nodes = {} + ori_from_sockets = {} + + if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + ch_ids = [i for i, coo in enumerate(ch_other_objects) if len(coo) > 0] + + # Get all other materials + for oo in other_objs: + for m in oo.data.materials: + if m == None or not m.use_nodes: continue + if m not in all_other_mats: + all_other_mats.append(m) + + # Remember original socket connected to outputs + for m in all_other_mats: + soc = None + from_node = '' + from_socket = '' + mout = get_material_output(m) + if mout: + for l in mout.inputs[0].links: + soc = l.from_socket + from_node = l.from_node.name + from_socket = l.from_socket.name + + # Create temporary emission + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: + temp_emi = m.node_tree.nodes.new('ShaderNodeEmission') + temp_emi.name = TEMP_EMISSION + m.node_tree.links.new(temp_emi.outputs[0], mout.inputs[0]) - col = row.column(align=False) + ori_from_nodes[m.name] = from_node + ori_from_sockets[m.name] = from_socket - if not self.overwrite_current: - if len(self.overwrite_coll) > 0: - col.prop(self, 'overwrite_choice', text='') + # Newly created layer index and image + active_id = None + image = None - if len(self.overwrite_coll) > 0 and self.overwrite_choice: - col.prop_search(self, "overwrite_name", self, "overwrite_coll", text='', icon='IMAGE_DATA') - else: - col.prop(self, 'name', text='') + for idx in ch_ids: - if self.target_type == 'LAYER': - rrow = col.row(align=True) - rrow.prop(self, 'channel_idx', text='') - if channel: - if channel.type == 'NORMAL': - rrow.prop(self, 'normal_blend_type', text='') - col.prop(self, 'normal_map_type', text='') - else: - rrow.prop(self, 'blend_type', text='') - else: - col.label(text=self.overwrite_name) + # Image name and colorspace + image_name = bprops['name'] + colorspace = get_srgb_name() - if self.type.startswith('OTHER_OBJECT_'): - col.prop_search(self, "cage_object_name", self, "cage_object_coll", text='', icon='OBJECT_DATA') - rrow = col.row(align=True) - rrow.active = self.cage_object_name == '' - rrow.prop(self, 'cage_extrusion', text='') - if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): - col.prop(self, 'max_ray_distance', text='') - elif self.type == 'AO': - col.prop(self, 'ao_distance', text='') - col.prop(self, 'only_local') - elif self.type in {'BEVEL_NORMAL', 'BEVEL_MASK'}: - col.prop(self, 'bevel_samples', text='') - col.prop(self, 'bevel_radius', text='') - elif self.type.startswith('MULTIRES_'): - col.prop(self, 'multires_base', text='') + if bprops['type'] == 'OTHER_OBJECT_CHANNELS': - col.prop(self, 'hdr') - col.prop(self, 'use_custom_resolution') - crow = col.row(align=True) - if self.use_custom_resolution == False: - crow.prop(self, 'image_resolution', expand= True,) - elif self.use_custom_resolution == True: - col.prop(self, 'width', text='') - col.prop(self, 'height', text='') - col.prop(self, 'samples', text='') - col.prop_search(self, "uv_map", self, "uv_map_coll", text='', icon='GROUP_UVS') - if self.type == 'FLOW': - col.prop_search(self, "uv_map_1", self, "uv_map_coll", text='', icon='GROUP_UVS') - if is_bl_newer_than(3, 1): - split = split_layout(col, 0.4, align=True) - split.prop(self, 'margin', text='') - split.prop(self, 'margin_type', text='') - else: - col.prop(self, 'margin', text='') + root_ch = yp.channels[idx] + image_name += ' ' + yp.channels[idx].name - if is_bl_newer_than(2, 80): - col.separator() - col.prop(self, 'bake_device', text='') - col.prop(self, 'interpolation', text='') + # Hide irrelevant objects + for oo in other_objs: + if oo not in ch_other_objects[idx]: + oo.hide_render = True + else: oo.hide_render = False - col.separator() - if self.type.startswith('OTHER_OBJECT_'): - col.prop(self, 'ssaa') - else: col.prop(self, 'fxaa') + if root_ch.type == 'NORMAL': + bake_type = 'NORMAL' - if self.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81): - col.prop(self, 'denoise') + # Set back original socket + for m in all_other_mats: + mout = get_material_output(m) + if mout: + nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) + if nod: + soc = nod.outputs.get(ori_from_sockets[m.name]) + if soc: m.node_tree.links.new(soc, mout.inputs[0]) - col.separator() + else: + bake_type = 'EMIT' - #if not self.type.startswith('MULTIRES_') or self.type not in {'SELECTED_VERTICES'}: - if show_subsurf_influence: - r = col.row() - r.active = not self.use_baked_disp - r.prop(self, 'subsurf_influence') + # Set emission connection + for j, m in enumerate(ch_other_mats[idx]): + default = ch_other_defaults[idx][j] + socket = ch_other_sockets[idx][j] - #if height_root_ch and not self.type.startswith('MULTIRES_'): - if show_use_baked_disp: - col.prop(self, 'use_baked_disp') + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: continue + + if default != None: + # Set default + if type(default) == float: + temp_emi.inputs[0].default_value = (default, default, default, 1.0) + else: temp_emi.inputs[0].default_value = (default[0], default[1], default[2], 1.0) + + # Break link + for l in temp_emi.inputs[0].links: + m.node_tree.links.remove(l) + elif socket: + m.node_tree.links.new(socket, temp_emi.inputs[0]) + + colorspace = get_noncolor_name() if root_ch.colorspace == 'LINEAR' else get_srgb_name() + + elif bprops['type'] in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + colorspace = get_noncolor_name() + + # Using float image will always make the image linear/non-color + if bprops['hdr']: + colorspace = get_noncolor_name() + + # Base color of baked image + if bprops['type'] == 'AO': + color = [1.0, 1.0, 1.0, 1.0] + elif bprops['type'] in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + if bprops['hdr']: + color = [0.7354, 0.7354, 1.0, 1.0] + else: + color = [0.5, 0.5, 1.0, 1.0] + elif bprops['type'] == 'FLOW': + color = [0.5, 0.5, 0.0, 1.0] + else: + if bprops['hdr']: + color = [0.7354, 0.7354, 0.7354, 1.0] + else: color = [0.5, 0.5, 0.5, 1.0] + + # Make image transparent if its baked from other objects + if bprops['type'].startswith('OTHER_OBJECT_'): + color[3] = 0.0 + + # New target image + if bprops['use_udim']: + image = bpy.data.images.new( + name=image_name, width=width, height=height, + alpha=True, float_buffer=bprops['hdr'], tiled=True + ) + + # Fill tiles + for tilenum in tilenums: + UDIM.fill_tile(image, tilenum, color, width, height) + UDIM.initial_pack_udim(image, color) + + # Remember base color + image.yui.base_color = color + else: + image = bpy.data.images.new( + name=image_name, width=width, height=height, + alpha=True, float_buffer=bprops['hdr'] + ) + + image.generated_color = color + image.colorspace_settings.name = colorspace + + # Set image filepath if overwrite image is found + if do_overwrite: + # Get overwrite image again to avoid pointer error + overwrite_img = bpy.data.images.get(overwrite_image_name) + #if idx == 0: + if idx == min(ch_ids): + if not overwrite_img.packed_file and overwrite_img.filepath != '': + image.filepath = overwrite_img.filepath + else: + layer = yp.layers[yp.active_layer_index] + root_ch = yp.channels[idx] + ch = layer.channels[idx] - col.prop(self, 'flip_normals') - col.prop(self, 'force_bake_all_polygons') + if root_ch.type == 'NORMAL': + source = get_channel_source_1(ch, layer) + else: source = get_channel_source(ch, layer) - if UDIM.is_udim_supported() or self.type not in {'OTHER_OBJECT_CHANNELS'}: - col.separator() + if source and hasattr(source, 'image') and source.image and not source.image.packed_file and source.image.filepath != '': + image.filepath = source.image.filepath - if UDIM.is_udim_supported(): - ccol = col.column(align=True) - ccol.prop(self, 'use_udim') + # Set bake image + tex.image = image + mat.node_tree.nodes.active = tex - if self.type not in {'OTHER_OBJECT_CHANNELS'}: - ccol = col.column(align=True) - #ccol.active = not self.use_udim - ccol.prop(self, 'use_image_atlas') + # Bake! + try: + if bprops['type'].startswith('MULTIRES_'): + bpy.ops.object.bake_image() + else: + if bake_type != 'EMIT': + bpy.ops.object.bake(type=bake_type) + else: bpy.ops.object.bake() + except Exception as e: + + # Try to use CPU if GPU baking is failed + if bprops['bake_device'] == 'GPU': + print('EXCEPTIION: GPU baking failed! Trying to use CPU...') + bprops['bake_device'] = 'CPU' + scene.cycles.device = 'CPU' + + if bprops['type'].startswith('MULTIRES_'): + bpy.ops.object.bake_image() + else: + if bake_type != 'EMIT': + bpy.ops.object.bake(type=bake_type) + else: bpy.ops.object.bake() + else: + print('EXCEPTIION:', e) - def execute(self, context): - if not self.is_cycles_exist(context): return {'CANCELLED'} + if use_fxaa: fxaa_image(image, False, bake_device=bprops['bake_device']) - T = time.time() - mat = get_active_material() - node = get_active_ypaint_node() - yp = node.node_tree.yp - tree = node.node_tree - ypui = context.window_manager.ypui - scene = context.scene - obj = context.object - ypup = get_user_preferences() - channel_idx = int(self.channel_idx) if len(yp.channels) > 0 else -1 + # Bake other object alpha + if bprops['type'] in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS'}: + + alpha_found = False + if bprops['type'] == 'OTHER_OBJECT_CHANNELS': - active_layer = None - if len(yp.layers) > 0: - active_layer = yp.layers[yp.active_layer_index] + # Set emission connection + for j, m in enumerate(ch_other_mats[idx]): + alpha_default = ch_other_alpha_defaults[idx][j] + alpha_socket = ch_other_alpha_sockets[idx][j] - if self.type == 'SELECTED_VERTICES' and obj.mode != 'EDIT': - self.report({'ERROR'}, "Should be in edit mode!") - return {'CANCELLED'} + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: continue + + if alpha_default != 1.0: + alpha_found = True + # Set alpha_default + if type(alpha_default) == float: + temp_emi.inputs[0].default_value = (alpha_default, alpha_default, alpha_default, 1.0) + else: temp_emi.inputs[0].default_value = (alpha_default[0], alpha_default[1], alpha_default[2], 1.0) + + # Break link + for l in temp_emi.inputs[0].links: + m.node_tree.links.remove(l) + elif alpha_socket: + alpha_found = True + m.node_tree.links.new(alpha_socket, temp_emi.inputs[0]) + else: + alpha_found = True + + if alpha_found: - if self.target_type == 'MASK' and not active_layer: - self.report({'ERROR'}, "Mask need active layer!") - return {'CANCELLED'} + temp_img = image.copy() + temp_img.colorspace_settings.name = get_noncolor_name() + tex.image = temp_img - if (self.overwrite_choice or self.overwrite_current) and self.overwrite_name == '': - self.report({'ERROR'}, "Overwrite layer/mask cannot be empty!") - return {'CANCELLED'} + # Set temp filepath + if image.source == 'TILED': + temp_img.name = '__TEMP__' + UDIM.initial_pack_udim(temp_img) - if self.type in {'BEVEL_NORMAL', 'BEVEL_MASK'} and not is_bl_newer_than(2, 80): - self.report({'ERROR'}, "Blender 2.80+ is needed to use this feature!") - return {'CANCELLED'} + # Need to use clear so there's alpha on the baked image + scene.render.bake.use_clear = True - if self.type in {'MULTIRES_NORMAL', 'MULTIRES_DISPLACEMENT'} and not is_bl_newer_than(2, 80): - #self.report({'ERROR'}, "This feature is not implemented yet in Blender 2.79!") - self.report({'ERROR'}, "Blender 2.80+ is needed to use this feature!") - return {'CANCELLED'} + # Bake emit can will create alpha image + bpy.ops.object.bake(type='EMIT') - if (hasattr(context.object, 'hide_viewport') and context.object.hide_viewport) or context.object.hide_render: - self.report({'ERROR'}, "Please unhide render and viewport of active object!") - return {'CANCELLED'} + # Set tile pixels + for tilenum in tilenums: - if self.type == 'FLOW' and (self.uv_map == '' or self.uv_map_1 == '' or self.uv_map == self.uv_map_1): - self.report({'ERROR'}, "UVMap and Straight UVMap are cannot be the same or empty!") - return {'CANCELLED'} + # Swap tile + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + UDIM.swap_tile(temp_img, 1001, tilenum) - cage_object = None - if self.type.startswith('OTHER_OBJECT_') and self.cage_object_name != '': - cage_object = bpy.data.objects.get(self.cage_object_name) - if cage_object: + # Copy alpha to RGB channel, so it can be fxaa-ed + if bprops['type'] == 'OTHER_OBJECT_NORMAL': + copy_image_channel_pixels(temp_img, temp_img, 3, 0) - if any([mod for mod in cage_object.modifiers if mod.type not in {'ARMATURE'}]) or any([mod for mod in obj.modifiers if mod.type not in {'ARMATURE'}]): - self.report({'ERROR'}, "Mesh modifiers is not working with cage object for now!") - return {'CANCELLED'} + # FXAA alpha + fxaa_image(temp_img, False, bprops['bake_device'], first_tile_only=True) - if len(cage_object.data.polygons) != len(obj.data.polygons): - self.report({'ERROR'}, "Invalid cage object, the cage mesh must have the same number of faces as the active object!") - return {'CANCELLED'} + # Copy alpha to actual image + copy_image_channel_pixels(temp_img, image, 0, 3) - # Get all objects using material - if self.type.startswith('MULTIRES_') and not get_multires_modifier(context.object): - objs = [] - meshes = [] - multires_count = 0 - else: - objs = [context.object] - meshes = [context.object.data] - multires_count = 1 + # Swap tile again to recover + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + UDIM.swap_tile(temp_img, 1001, tilenum) - if mat.users > 1: - # Emptying the lists again in case active object is problematic - objs = [] - meshes = [] - for ob in get_scene_objects(): - if ob.type != 'MESH': continue - if hasattr(ob, 'hide_viewport') and ob.hide_viewport: continue - if len(get_uv_layers(ob)) == 0: continue - if len(ob.data.polygons) == 0: continue - if cage_object and cage_object == ob: continue + # Remove temp image + remove_datablock(bpy.data.images, temp_img, user=tex, user_prop='image') - # Do not bake objects with hide_render on - if ob.hide_render: continue - if not in_renderable_layer_collection(ob): continue + # Back to original size if using SSA + if use_ssaa: + image, temp_segment = resize_image( + image, bprops['width'], bprops['height'], image.colorspace_settings.name, + alpha_aware=True, bake_device=bprops['bake_device'] + ) - if self.type.startswith('MULTIRES_') and get_multires_modifier(ob): - multires_count += 1 + # Denoise AO image + if use_denoise: + image = denoise_image(image) - for i, m in enumerate(ob.data.materials): - if m == mat: - ob.active_material_index = i - if ob not in objs and ob.data not in meshes: - objs.append(ob) - meshes.append(ob.data) + new_segment_created = False - if not objs or (self.type.startswith('MULTIRES_') and multires_count == 0): - self.report({'ERROR'}, "No valid objects found to bake!") - return {'CANCELLED'} + if bprops['use_image_atlas']: - do_overwrite = False - overwrite_img = None - if (self.overwrite_choice or self.overwrite_current) and self.overwrite_image_name != '': - overwrite_img = bpy.data.images.get(self.overwrite_image_name) - do_overwrite = True + need_to_create_new_segment = False + if segment: + ia_image = segment.id_data + if bprops['use_udim']: + need_to_create_new_segment = ia_image.is_float != bprops['hdr'] + if need_to_create_new_segment: + UDIM.remove_udim_atlas_segment_by_name(ia_image, segment.name, yp) + else: + need_to_create_new_segment = bprops['width'] != segment.width or bprops['height'] != segment.height or ia_image.is_float != bprops['hdr'] + if need_to_create_new_segment: + segment.unused = True - segment = None - if overwrite_img: - if overwrite_img.yia.is_image_atlas: - segment = overwrite_img.yia.segments.get(self.overwrite_segment_name) - elif overwrite_img.yua.is_udim_atlas: - segment = overwrite_img.yua.segments.get(self.overwrite_segment_name) + if not segment or need_to_create_new_segment: - # Get other objects for other object baking - other_objs = [] - - if self.type.startswith('OTHER_OBJECT_'): + if bprops['use_udim']: + segment = UDIM.get_set_udim_atlas_segment( + tilenums, color=(0, 0, 0, 0), colorspace=get_srgb_name(), hdr=bprops['hdr'], yp=yp + ) + else: + # Clearing unused image atlas segments + img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'TRANSPARENT', bprops['width'], bprops['height'], bprops['hdr']) + if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) - # Get other objects based on selected objects with different material - for o in context.selected_objects: - if o in objs or not o.data or not hasattr(o.data, 'materials'): continue - if mat.name not in o.data.materials: - other_objs.append(o) + segment = ImageAtlas.get_set_image_atlas_segment( + bprops['width'], bprops['height'], 'TRANSPARENT', bprops['hdr'], yp=yp + ) - # Try to get other_objects from bake info - if overwrite_img: + new_segment_created = True - bi = segment.bake_info if segment else overwrite_img.y_bake_info - - scene_objs = get_scene_objects() - for oo in bi.other_objects: - if is_bl_newer_than(2, 79): - ooo = oo.object - else: ooo = scene_objs.get(oo.object_name) - - if ooo: - if is_bl_newer_than(2, 80): - # Check if object is on current view layer - layer_cols = get_object_parent_layer_collections([], bpy.context.view_layer.layer_collection, ooo) - if ooo not in other_objs and any(layer_cols): - other_objs.append(ooo) - else: - o = scene_objs.get(ooo.name) - if o and o not in other_objs: - other_objs.append(o) - - if self.type == 'OTHER_OBJECT_CHANNELS': - ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) - - if not other_objs: - if overwrite_img: - self.report({'ERROR'}, "No source objects found! They're probably deleted!") - else: self.report({'ERROR'}, "Source objects must be selected and it should have different material!") - return {'CANCELLED'} + ia_image = segment.id_data - # Get tile numbers - tilenums = [1001] - if self.use_udim: - tilenums = UDIM.get_tile_numbers(objs, self.uv_map) + # Set baked image to segment + if bprops['use_udim']: + offset = get_udim_segment_mapping_offset(segment) * 10 + copy_dict = {} + for tilenum in tilenums: + copy_dict[tilenum] = tilenum + offset + UDIM.copy_tiles(image, ia_image, copy_dict) + else: copy_image_pixels(image, ia_image, segment) + temp_img = image + image = ia_image - # Remember things - book = remember_before_bake(yp, mat=mat) + # Remove original baked image + remove_datablock(bpy.data.images, temp_img) - # FXAA doesn't work with hdr image - # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead - use_fxaa = not self.hdr and self.fxaa and not self.type.startswith('OTHER_OBJECT_') + # Index 0 is the main image + if idx == min(ch_ids): + if do_overwrite: - # For now SSAA only works with other object baking - use_ssaa = self.ssaa and self.type.startswith('OTHER_OBJECT_') + # Get overwrite image again to avoid pointer error + overwrite_img = bpy.data.images.get(overwrite_image_name) - # Denoising only available for AO bake for now - use_denoise = self.denoise and self.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81) + active_id = yp.active_layer_index - # SSAA will multiply size by 2 then resize it back - if use_ssaa: - width = self.width * 2 - height = self.height * 2 - else: - width = self.width - height = self.height + if overwrite_img != image: + if segment and not bprops['use_image_atlas']: + entities = ImageAtlas.replace_segment_with_image(yp, segment, image) + segment = None + else: entities = replace_image(overwrite_img, image, yp, bprops['uv_map']) + elif segment: entities = ImageAtlas.get_entities_with_specific_segment(yp, segment) + else: entities = get_entities_with_specific_image(yp, image) - # If use baked disp, need to bake normal and height map first - subdiv_setup_changes = False - height_root_ch = get_root_height_channel(yp) - if height_root_ch and self.use_baked_disp and not self.type.startswith('MULTIRES_'): + for ent in entities: + if new_segment_created: + ent.segment_name = segment.name + ImageAtlas.set_segment_mapping(ent, segment, image) - if not height_root_ch.enable_subdiv_setup: - height_root_ch.enable_subdiv_setup = True - subdiv_setup_changes = True + if ent.uv_name != bprops['uv_map']: + ent.uv_name = bprops['uv_map'] - # To hold temporary objects - temp_objs = [] + if bprops['target_type'] == 'LAYER': + layer_ids = [i for i, l in enumerate(yp.layers) if l in entities] + if entities and yp.active_layer_index not in layer_ids: + active_id = layer_ids[0] - # Sometimes Cavity bake will create temporary objects - if (self.type == 'CAVITY' and (self.subsurf_influence or self.use_baked_disp)): + # Refresh uv + refresh_temp_uv(bpy.context.object, yp.layers[active_id]) - # NOTE: Baking cavity with subdiv setup can only happen if there's only one object and no UDIM - if is_bl_newer_than(4, 2) and len(objs) == 1 and not self.use_udim and height_root_ch and height_root_ch.enable_subdiv_setup: + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(yp.layers[active_id]) - # Check if there's VDM layer - vdm_layer = get_first_vdm_layer(yp) - vdm_uv_name = vdm_layer.uv_name if vdm_layer else self.uv_map + elif bprops['target_type'] == 'MASK': + masks = [] + for l in yp.layers: + masks.extend([m for m in l.masks if m in entities]) + if masks: + masks[0].active_edit = True - # Get baked combined vdm image - combined_vdm_image = vector_displacement.get_combined_vdm_image(objs[0], vdm_uv_name, width=self.width, height=self.height) + # Refresh uv + refresh_temp_uv(bpy.context.object, masks[0]) - # Bake tangent and bitangent - # NOTE: Only bake the first object tangent since baking combined mesh can cause memory leak at the moment - tanimage, bitimage = vector_displacement.get_tangent_bitangent_images(objs[0], self.uv_map) + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(masks[0]) - # Duplicate object - objs = temp_objs = [get_merged_mesh_objects(scene, objs, True, disable_problematic_modifiers=False)] + elif bprops['target_type'] == 'LAYER': - # Use VDM loader geometry nodes - # NOTE: Geometry nodes currently does not support UDIM, so using UDIM will cause wrong bake result - set_active_object(objs[0]) - vdm_loader = vector_displacement_lib.get_vdm_loader_geotree(self.uv_map, combined_vdm_image, tanimage, bitimage, 1.0) - bpy.ops.object.modifier_add(type='NODES') - geomod = objs[0].modifiers[-1] - geomod.node_group = vdm_loader - bpy.ops.object.modifier_apply(modifier=geomod.name) + layer_name = image.name if not bprops['use_image_atlas'] else bprops['name'] - # Remove temporary datas - remove_datablock(bpy.data.node_groups, vdm_loader) - remove_datablock(bpy.data.images, combined_vdm_image) + if bprops['use_image_atlas']: + layer_name = get_unique_name(layer_name, yp.layers) - else: - objs = temp_objs = get_duplicated_mesh_objects(scene, objs, True) + yp.halt_update = True + layer = Layer.add_new_layer( + group_tree=node.node_tree, layer_name=layer_name, + layer_type='IMAGE', channel_idx=channel_idx, + blend_type=bprops['blend_type'], normal_blend_type=bprops['normal_blend_type'], + normal_map_type=bprops['normal_map_type'], texcoord_type='UV', + uv_name=bprops['uv_map'], image=image, vcol=None, segment=segment, + interpolation = bprops['interpolation'], + normal_space = 'OBJECT' if bprops['type'] == 'OBJECT_SPACE_NORMAL' else 'TANGENT' + ) + yp.halt_update = False + active_id = yp.active_layer_index - # Join objects then extend with other objects - elif self.type.startswith('OTHER_OBJECT_'): - if len(objs) > 1: - objs = [get_merged_mesh_objects(scene, objs)] - temp_objs = objs.copy() + if segment: + ImageAtlas.set_segment_mapping(layer, segment, image) - objs.extend(other_objs) + # Refresh uv + refresh_temp_uv(bpy.context.object, layer) - # Join objects if the number of objects is higher than one - elif not self.type.startswith('MULTIRES_') and len(objs) > 1 and not is_join_objects_problematic(yp): - objs = temp_objs = [get_merged_mesh_objects(scene, objs, True)] + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(layer) - fill_mode = 'FACE' - obj_vertex_indices = {} - if self.type == 'SELECTED_VERTICES': - if context.tool_settings.mesh_select_mode[0] or context.tool_settings.mesh_select_mode[1]: - fill_mode = 'VERTEX' - if is_bl_newer_than(2, 80): - edit_objs = [o for o in objs if o.mode == 'EDIT'] - else: edit_objs = [context.object] + else: + active_layer = yp.layers[yp.active_layer_index] - for obj in edit_objs: - mesh = obj.data - bm = bmesh.from_edit_mesh(mesh) + mask_name = image.name if not bprops['use_image_atlas'] else bprops['name'] - bm.verts.ensure_lookup_table() - #bm.edges.ensure_lookup_table() - bm.faces.ensure_lookup_table() + if bprops['use_image_atlas']: + mask_name = get_unique_name(mask_name, active_layer.masks) - v_indices = [] - if fill_mode == 'FACE': - for face in bm.faces: - if face.select: - v_indices.append(face.index) - #for loop in face.loops: - # v_indices.append(loop.index) + mask = Mask.add_new_mask( + active_layer, mask_name, 'IMAGE', 'UV', bprops['uv_map'], + image, None, segment + ) + mask.active_edit = True - else: - for vert in bm.verts: - if vert.select: - v_indices.append(vert.index) - - obj_vertex_indices[obj.name] = v_indices - - bpy.ops.object.mode_set(mode = 'OBJECT') - for obj in objs: - try: - vcol = new_vertex_color(obj, TEMP_VCOL) - set_obj_vertex_colors(obj, vcol.name, (0.0, 0.0, 0.0, 1.0)) - set_active_vertex_color(obj, vcol) - except: pass - bpy.ops.object.mode_set(mode = 'EDIT') - bpy.ops.mesh.y_vcol_fill(color_option ='WHITE') - #return {'FINISHED'} - bpy.ops.object.mode_set(mode = 'OBJECT') + reconnect_layer_nodes(active_layer) + rearrange_layer_nodes(active_layer) - #return {'FINISHED'} + active_id = yp.active_layer_index - # Check if there's channel using alpha - alpha_outp = None - for c in yp.channels: - if c.enable_alpha: - alpha_outp = node.outputs.get(c.name + io_suffix['ALPHA']) - if alpha_outp: break + if segment: + ImageAtlas.set_segment_mapping(mask, segment, image) - # Prepare bake settings - if self.type == 'AO': - if alpha_outp: - # If there's alpha channel use standard AO bake, which has lesser quality denoising - bake_type = 'AO' - else: - # When there is no alpha channel use combined render bake, which has better denoising - bake_type = 'COMBINED' - elif self.type == 'MULTIRES_NORMAL': - bake_type = 'NORMALS' - elif self.type == 'MULTIRES_DISPLACEMENT': - bake_type = 'DISPLACEMENT' - elif self.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - bake_type = 'NORMAL' - else: - bake_type = 'EMIT' + # Refresh uv + refresh_temp_uv(bpy.context.object, mask) - # If use only local, hide other objects - hide_other_objs = self.type != 'AO' or self.only_local + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(mask) - # Fit tilesize to bake resolution if samples is equal 1 - if self.samples <= 1: - tile_x = width - tile_y = height + # Indices > 0 are for channel override images else: - tile_x = 256 - tile_y = 256 - - # Cage object only used for other object baking - cage_object_name = self.cage_object_name if self.type.startswith('OTHER_OBJECT_') else '' - - prepare_bake_settings( - book, objs, yp, samples=self.samples, margin=self.margin, - uv_map=self.uv_map, bake_type=bake_type, #disable_problematic_modifiers=True, - bake_device=self.bake_device, hide_other_objs=hide_other_objs, - bake_from_multires=self.type.startswith('MULTIRES_'), tile_x = tile_x, tile_y = tile_y, - use_selected_to_active=self.type.startswith('OTHER_OBJECT_'), - max_ray_distance=self.max_ray_distance, cage_extrusion=self.cage_extrusion, - source_objs=other_objs, use_denoising=False, margin_type=self.margin_type, - cage_object_name = cage_object_name, - normal_space = 'OBJECT' if self.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' - ) + # Set images to channel override + layer = yp.layers[yp.active_layer_index] + root_ch = yp.channels[idx] + ch = layer.channels[idx] + if not ch.enable: ch.enable = True + + # Normal channel will use second override + if root_ch.type == 'NORMAL': + if ch.normal_map_type != 'NORMAL_MAP': ch.normal_map_type = 'NORMAL_MAP' + if not ch.override_1: ch.override_1 = True + if ch.override_1_type != 'IMAGE': ch.override_1_type = 'IMAGE' + source = get_channel_source_1(ch, layer) + else: + if not ch.override: ch.override = True + if ch.override_type != 'IMAGE': ch.override_type = 'IMAGE' + source = get_channel_source(ch, layer) + + # If image already exists on source + old_image = None + if source.image and image != source.image: + old_image = source.image + source_name = old_image.name + current_name = image.name + + old_image.name = '_____temp' + image.name = source_name + old_image.name = current_name + + # Set image to source + source.image = image + source.interpolation = bprops['interpolation'] + + # Remove image if it's not used anymore + if old_image: safe_remove_image(old_image) + + # Set bake info to image/segment + bi = segment.bake_info if segment else image.y_bake_info + + if not bi.is_baked: bi.is_baked = True + if bi.bake_type != bprops['type']: bi.bake_type = bprops['type'] + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: setattr(bi, attr, bprops[attr]) + except: pass + + if other_objs: + + # Remember other objects to bake info + for o in other_objs: + if is_bl_newer_than(2, 79): + oo_recorded = any([oo for oo in bi.other_objects if oo.object == o]) + else: oo_recorded = any([oo for oo in bi.other_objects if oo.object_name == o.name]) + + if not oo_recorded: + oo = bi.other_objects.add() + if is_bl_newer_than(2, 79): + oo.object = o + oo.object_name = o.name + + # Remove unused other objects on bake info + for i, oo in reversed(list(enumerate(bi.other_objects))): + if is_bl_newer_than(2, 79): + ooo = oo.object + else: ooo = bpy.data.objects.get(oo.object_name) + + if ooo not in other_objs: + bi.other_objects.remove(i) + + if bprops['type'] == 'SELECTED_VERTICES': + #fill_mode = 'FACE' + #obj_vertex_indices = {} + bi.selected_face_mode = True if fill_mode == 'FACE' else False + + # Clear selected objects first + bi.selected_objects.clear() + + # Collect object to bake info + for obj_name, v_indices in obj_vertex_indices.items(): + ob = bpy.data.objects.get(obj_name) + bso = bi.selected_objects.add() + if is_bl_newer_than(2, 79): + bso.object = ob + bso.object_name = ob.name + + # Collect selected vertex data to bake info + for vi in v_indices: + bvi = bso.selected_vertex_indices.add() + bvi.index = vi + + # Recover other yps + if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + for m in all_other_mats: + # Set back original socket + mout = get_material_output(m) + if mout: + nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) + if nod: + soc = nod.outputs.get(ori_from_sockets[m.name]) + if soc: m.node_tree.links.new(soc, mout.inputs[0]) + + # Remove temp emission + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if temp_emi: m.node_tree.nodes.remove(temp_emi) + + # Recover other objects material settings + recover_other_objs_channels(other_objs, ori_mat_no_nodes) + + # Remove temp bake nodes + simple_remove_node(mat.node_tree, tex) + #simple_remove_node(mat.node_tree, srgb2lin) + simple_remove_node(mat.node_tree, bsdf) + if src: simple_remove_node(mat.node_tree, src) + if normal_bake: simple_remove_node(mat.node_tree, normal_bake) + if geometry: simple_remove_node(mat.node_tree, geometry) + if vector_math: simple_remove_node(mat.node_tree, vector_math) + if vector_math_1: simple_remove_node(mat.node_tree, vector_math_1) + + # Recover original bsdf + mat.node_tree.links.new(ori_bsdf, output.inputs[0]) + + for ob in objs: + # Recover modifiers + for i, m in enumerate(ob.modifiers): + #print(ob.name, i) + if i >= len(ori_mods[ob.name]): break + if ori_mods[ob.name][i] != m.show_render: + m.show_render = ori_mods[ob.name][i] + if i >= len(ori_viewport_mods[ob.name]): break + if ori_viewport_mods[ob.name][i] != m.show_render: + m.show_viewport = ori_viewport_mods[ob.name][i] + + # Recover multires levels + for m in ob.modifiers: + if m.type == 'MULTIRES' and ob.name in ori_multires_levels: + m.render_levels = ori_multires_levels[ob.name] + break - # Set multires level - #ori_multires_levels = {} - if self.type.startswith('MULTIRES_'): #or self.type == 'AO': + # Recover material index + if ori_mat_ids[ob.name]: + for i, p in enumerate(ob.data.polygons): + if ori_mat_ids[ob.name][i] != p.material_index: + p.material_index = ori_mat_ids[ob.name][i] + + if ori_loop_locs[ob.name]: + + # Get uv map + uv_layers = get_uv_layers(ob) + uvl = uv_layers.get(bprops['uv_map']) + + # Recover uv locations + if uvl: + for i, p in enumerate(ob.data.polygons): + for j, li in enumerate(p.loop_indices): + uvl.data[li].uv = ori_loop_locs[ob.name][i][j] + + # Delete temp vcol + vcols = get_vertex_colors(ob) + if vcols: + vcol = vcols.get(TEMP_VCOL) + if vcol: vcols.remove(vcol) + + # Recover flip normals setup + if bprops['flip_normals']: + #bpy.ops.object.mode_set(mode = 'EDIT') + #bpy.ops.mesh.flip_normals() + #bpy.ops.mesh.select_all(action='DESELECT') + #bpy.ops.object.mode_set(mode = ori_mode) + if is_bl_newer_than(2, 80): + # Deselect other objects first + for o in other_objs: + o.select_set(False) + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') + # Reselect other objects + for o in other_objs: + o.select_set(True) + else: for ob in objs: - mod = get_multires_modifier(ob) + if ob in other_objs: continue + scene.objects.active = ob + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') - #mod.render_levels = mod.total_levels - if mod and self.type.startswith('MULTIRES_'): - mod.render_levels = self.multires_base - mod.levels = self.multires_base + # Recover subdiv setup + if height_root_ch and subdiv_setup_changes: + height_root_ch.enable_subdiv_setup = not height_root_ch.enable_subdiv_setup - #ori_multires_levels[ob.name] = mod.render_levels + # Remove flow vcols + if bprops['type'] == 'FLOW': + for ob in objs: + vcols = get_vertex_colors(ob) + flow_vcol = vcols.get(FLOW_VCOL) + if flow_vcol: + vcols.remove(flow_vcol) - # Setup for cavity - if self.type == 'CAVITY': + # Recover bake settings + recover_bake_settings(book, yp, mat=mat) - tt = time.time() - print('BAKE TO LAYER: Applying subsurf/multires for Cavity bake...') + # Remove temporary objects + if temp_objs: + for o in temp_objs: + remove_mesh_obj(o) - # Set vertex color for cavity - for obj in objs: + # Check linear nodes becuse sometimes bake results can be linear or srgb + check_yp_linear_nodes(yp, reconnect=True) - set_active_object(obj) + # Reconnect and rearrange nodes + #reconnect_yp_layer_nodes(node.node_tree) + reconnect_yp_nodes(node.node_tree) + rearrange_yp_nodes(node.node_tree) - if self.subsurf_influence or self.use_baked_disp: - need_to_be_applied_modifiers = [] - for m in obj.modifiers: - if m.type in {'SUBSURF', 'MULTIRES'} and m.levels > 0 and m.show_viewport: + # Refresh mapping and stuff + #yp.active_layer_index = yp.active_layer_index - # Set multires to the highest level - if m.type == 'MULTIRES': - m.levels = m.total_levels + if image: print('BAKE TO LAYER: Baking', image.name, 'is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') + else: print('BAKE TO LAYER: No image created! Executed in', '{:0.2f}'.format(time.time() - T), 'seconds!') - need_to_be_applied_modifiers.append(m) + rdict['active_id'] = active_id + rdict['image'] = image - # Also apply displace - if m.type == 'DISPLACE' and m.show_viewport: - need_to_be_applied_modifiers.append(m) + return rdict - # Apply shape keys and modifiers - if any(need_to_be_applied_modifiers): - if obj.data.shape_keys: - if is_bl_newer_than(3, 3): - bpy.ops.object.shape_key_remove(all=True, apply_mix=True) - else: bpy.ops.object.shape_key_remove(all=True) +class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): + bl_idname = "node.y_bake_to_layer" + bl_label = "Bake To Layer" + bl_description = "Bake something as layer/mask" + bl_options = {'REGISTER', 'UNDO'} - for m in need_to_be_applied_modifiers: - bpy.ops.object.modifier_apply(modifier=m.name) + name : StringProperty(default='') - # Create new vertex color for dirt - try: - vcol = new_vertex_color(obj, TEMP_VCOL) - set_obj_vertex_colors(obj, vcol.name, (1.0, 1.0, 1.0, 1.0)) - set_active_vertex_color(obj, vcol) - except: pass + uv_map : StringProperty(default='', update=update_bake_to_layer_uv_map) + uv_map_coll : CollectionProperty(type=bpy.types.PropertyGroup) - bpy.ops.paint.vertex_color_dirt(dirt_angle=math.pi / 2) + uv_map_1 : StringProperty(default='') - print('BAKE TO LAYER: Applying subsurf/multires is done in', '{:0.2f}'.format(time.time() - tt), 'seconds!') + interpolation : EnumProperty( + name = 'Image Interpolation Type', + description = 'Image interpolation type', + items = interpolation_type_items, + default = 'Linear' + ) - # Setup for flow - if self.type == 'FLOW': - bpy.ops.object.mode_set(mode = 'OBJECT') - for obj in objs: - uv_layers = get_uv_layers(obj) - main_uv = uv_layers.get(self.uv_map) - straight_uv = uv_layers.get(self.uv_map_1) - - if main_uv and straight_uv: - flow_vcol = get_flow_vcol(obj, main_uv, straight_uv) - - # Flip normals setup - if self.flip_normals: - #ori_mode[obj.name] = obj.mode - if is_bl_newer_than(2, 80): - # Deselect other objects first - for o in other_objs: - o.select_set(False) - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - # Reselect other objects - for o in other_objs: - o.select_set(True) - else: - for obj in objs: - if obj in other_objs: continue - context.scene.objects.active = obj - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - - # More setup - ori_mods = {} - ori_viewport_mods = {} - ori_mat_ids = {} - ori_loop_locs = {} - ori_multires_levels = {} - - # Do not disable modifiers for surface based bake types - disable_problematic_modifiers = self.type not in {'CAVITY', 'POINTINESS', 'BEVEL_NORMAL', 'BEVEL_MASK'} - - for obj in objs: - - # Disable few modifiers - ori_mods[obj.name] = [m.show_render for m in obj.modifiers] - ori_viewport_mods[obj.name] = [m.show_viewport for m in obj.modifiers] - if self.type.startswith('MULTIRES_'): - mul = get_multires_modifier(obj) - multires_index = 99 - if mul: - for i, m in enumerate(obj.modifiers): - if m == mul: multires_index = i - if i > multires_index: - m.show_render = False - m.show_viewport = False - elif disable_problematic_modifiers and obj not in other_objs: - for m in get_problematic_modifiers(obj): - m.show_render = False - - ori_mat_ids[obj.name] = [] - ori_loop_locs[obj.name] = [] - - if self.subsurf_influence and not self.use_baked_disp and not self.type.startswith('MULTIRES_'): - for m in obj.modifiers: - if m.type == 'MULTIRES': - ori_multires_levels[obj.name] = m.render_levels - m.render_levels = m.total_levels - break - - if len(obj.data.materials) > 1: - active_mat_id = [i for i, m in enumerate(obj.data.materials) if m == mat] - if active_mat_id: active_mat_id = active_mat_id[0] - else: continue - - uv_layers = get_uv_layers(obj) - uvl = uv_layers.get(self.uv_map) - - for p in obj.data.polygons: - - # Set uv location to (0,0) if not using current material - if uvl and not self.force_bake_all_polygons: - uv_locs = [] - for li in p.loop_indices: - uv_locs.append(uvl.data[li].uv.copy()) - if p.material_index != active_mat_id: - uvl.data[li].uv = Vector((0.0, 0.0)) - - ori_loop_locs[obj.name].append(uv_locs) - - # Need to assign all polygon to active material if there are multiple materials - ori_mat_ids[obj.name].append(p.material_index) - p.material_index = active_mat_id - - #return {'FINISHED'} - - # Create bake nodes - tex = mat.node_tree.nodes.new('ShaderNodeTexImage') - bsdf = mat.node_tree.nodes.new('ShaderNodeEmission') - normal_bake = None - geometry = None - vector_math = None - vector_math_1 = None - if self.type == 'BEVEL_NORMAL': - #bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') - normal_bake = mat.node_tree.nodes.new('ShaderNodeGroup') - normal_bake.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV) - elif self.type == 'BEVEL_MASK': - geometry = mat.node_tree.nodes.new('ShaderNodeNewGeometry') - vector_math = mat.node_tree.nodes.new('ShaderNodeVectorMath') - vector_math.operation = 'CROSS_PRODUCT' - if is_bl_newer_than(2, 81): - vector_math_1 = mat.node_tree.nodes.new('ShaderNodeVectorMath') - vector_math_1.operation = 'LENGTH' + # For choosing overwrite entity from list + overwrite_choice : BoolProperty( + name = 'Overwrite available layer', + description = 'Overwrite available layer', + default = False + ) - # Get output node and remember original bsdf input - output = get_active_mat_output_node(mat.node_tree) - ori_bsdf = output.inputs[0].links[0].from_socket + # For rebake button + overwrite_current : BoolProperty(default=False) - if self.type == 'AO': - # If there's alpha channel use standard AO bake, which has lesser quality denoising - if alpha_outp: - src = None + overwrite_name : StringProperty(default='') + overwrite_coll : CollectionProperty(type=bpy.types.PropertyGroup) - if hasattr(context.scene.cycles, 'use_fast_gi'): - context.scene.cycles.use_fast_gi = True + overwrite_image_name : StringProperty(default='') + overwrite_segment_name : StringProperty(default='') - if context.scene.world: - context.scene.world.light_settings.distance = self.ao_distance - # When there is no alpha channel use combined render bake, which has better denoising - else: - src = mat.node_tree.nodes.new('ShaderNodeAmbientOcclusion') + type : EnumProperty( + name = 'Bake Type', + description = 'Bake Type', + items = bake_type_items, + default = 'AO' + ) - if 'Distance' in src.inputs: - src.inputs['Distance'].default_value = self.ao_distance + # Other objects props + cage_object_name : StringProperty( + name = 'Cage Object', + description = 'Object to use as cage instead of calculating the cage from the active object with cage extrusion', + default = '' + ) - # Links - if not is_bl_newer_than(2, 80): - mat.node_tree.links.new(src.outputs[0], output.inputs[0]) - else: - mat.node_tree.links.new(src.outputs['AO'], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + cage_object_coll : CollectionProperty(type=bpy.types.PropertyGroup) - elif self.type == 'POINTINESS': - src = mat.node_tree.nodes.new('ShaderNodeNewGeometry') + cage_extrusion : FloatProperty( + name = 'Cage Extrusion', + description = 'Inflate the active object by the specified distance for baking. This helps matching to points nearer to the outside of the selected object meshes', + default=0.2, min=0.0, max=1.0 + ) - # Links - mat.node_tree.links.new(src.outputs['Pointiness'], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + max_ray_distance : FloatProperty( + name = 'Max Ray Distance', + description = 'The maximum ray distance for matching points between the active and selected objects. If zero, there is no limit', + default=0.2, min=0.0, max=1.0 + ) + + # AO Props + ao_distance : FloatProperty(default=1.0) - elif self.type == 'CAVITY': - src = mat.node_tree.nodes.new('ShaderNodeGroup') - src.node_tree = get_node_tree_lib(lib.CAVITY) + # Bevel Props + bevel_samples : IntProperty(default=4, min=2, max=16) + bevel_radius : FloatProperty(default=0.05, min=0.0, max=1000.0) - # Set vcol - vcol_node = src.node_tree.nodes.get('vcol') - vcol_node.attribute_name = TEMP_VCOL + multires_base : IntProperty(default=1, min=0, max=16) - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + target_type : EnumProperty( + name = 'Target Bake Type', + description = 'Target Bake Type', + items = ( + ('LAYER', 'Layer', ''), + ('MASK', 'Mask', '') + ), + default='LAYER' + ) - elif self.type == 'DUST': - src = mat.node_tree.nodes.new('ShaderNodeGroup') - src.node_tree = get_node_tree_lib(lib.DUST) + fxaa : BoolProperty( + name = 'Use FXAA', + description = "Use FXAA on baked image (doesn't work with float images)", + default = True + ) + + ssaa : BoolProperty( + name = 'Use SSAA', + description = "Use Supersample AA on baked image", + default = False + ) - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + denoise : BoolProperty( + name = 'Use Denoise', + description = "Use Denoise on baked image", + default = True + ) - elif self.type == 'PAINT_BASE': - src = mat.node_tree.nodes.new('ShaderNodeGroup') - src.node_tree = get_node_tree_lib(lib.PAINT_BASE) + channel_idx : EnumProperty( + name = 'Channel', + description = 'Channel of new layer, can be changed later', + items = Layer.channel_items + ) - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + blend_type : EnumProperty( + name = 'Blend', + items = blend_type_items, + ) - elif self.type == 'BEVEL_NORMAL': - src = mat.node_tree.nodes.new('ShaderNodeBevel') + normal_blend_type : EnumProperty( + name = 'Normal Blend Type', + items = normal_blend_items, + default = 'MIX' + ) - src.samples = self.bevel_samples - src.inputs[0].default_value = self.bevel_radius + normal_map_type : EnumProperty( + name = 'Normal Map Type', + description = 'Normal map type of this layer', + items = Layer.get_normal_map_type_items + ) - #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) - mat.node_tree.links.new(src.outputs[0], normal_bake.inputs[0]) - mat.node_tree.links.new(normal_bake.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + hdr : BoolProperty(name='32 bit Float', default=True) - elif self.type == 'BEVEL_MASK': - src = mat.node_tree.nodes.new('ShaderNodeBevel') + use_baked_disp : BoolProperty( + name = 'Use Displacement Setup', + description = 'Use displacement setup, this will also apply subdiv setup on object', + default = False + ) - src.samples = self.bevel_samples - src.inputs[0].default_value = self.bevel_radius + flip_normals : BoolProperty( + name = 'Flip Normals', + description = 'Flip normal of mesh', + default = False + ) - mat.node_tree.links.new(geometry.outputs['Normal'], vector_math.inputs[0]) - mat.node_tree.links.new(src.outputs[0], vector_math.inputs[1]) - #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) - if is_bl_newer_than(2, 81): - mat.node_tree.links.new(vector_math.outputs[0], vector_math_1.inputs[0]) - mat.node_tree.links.new(vector_math_1.outputs[1], bsdf.inputs[0]) - else: - mat.node_tree.links.new(vector_math.outputs[1], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + only_local : BoolProperty( + name = 'Only Local', + description = 'Only bake local ambient occlusion', + default = False + ) - elif self.type == 'SELECTED_VERTICES': - if is_bl_newer_than(2, 80): - src = mat.node_tree.nodes.new('ShaderNodeVertexColor') - src.layer_name = TEMP_VCOL - else: - src = mat.node_tree.nodes.new('ShaderNodeAttribute') - src.attribute_name = TEMP_VCOL - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + subsurf_influence : BoolProperty( + name = 'Subsurf / Multires Influence', + description = 'Take account subsurf or multires when baking cavity', + default = True + ) - elif self.type == 'FLOW': - # Set vcol - src = mat.node_tree.nodes.new('ShaderNodeAttribute') - src.attribute_name = FLOW_VCOL + force_bake_all_polygons : BoolProperty( + name = 'Force Bake all Polygons', + description = 'Force bake all polygons, useful if material is not using direct polygon (ex: solidify material)', + default = False + ) - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + use_image_atlas : BoolProperty( + name = 'Use Image Atlas', + description = 'Use Image Atlas', + default = False + ) - else: - src = None - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + use_udim : BoolProperty( + name = 'Use UDIM Tiles', + description = 'Use UDIM Tiles', + default = False + ) + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() and context.object.type == 'MESH' - # Get number of target images - ch_ids = [0] - - # Other object channels related - all_other_mats = [] - ori_from_nodes = {} - ori_from_sockets = {} + @classmethod + def description(self, context, properties): + return get_operator_description(self) - if self.type == 'OTHER_OBJECT_CHANNELS': - ch_ids = [i for i, coo in enumerate(ch_other_objects) if len(coo) > 0] + def invoke(self, context, event): + self.invoke_operator(context) - # Get all other materials - for oo in other_objs: - for m in oo.data.materials: - if m == None or not m.use_nodes: continue - if m not in all_other_mats: - all_other_mats.append(m) - - # Remember original socket connected to outputs - for m in all_other_mats: - soc = None - from_node = '' - from_socket = '' - mout = get_material_output(m) - if mout: - for l in mout.inputs[0].links: - soc = l.from_socket - from_node = l.from_node.name - from_socket = l.from_socket.name - - # Create temporary emission - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if not temp_emi: - temp_emi = m.node_tree.nodes.new('ShaderNodeEmission') - temp_emi.name = TEMP_EMISSION - m.node_tree.links.new(temp_emi.outputs[0], mout.inputs[0]) + if hasattr(context, 'entity'): + self.entity = context.entity + else: self.entity = None - ori_from_nodes[m.name] = from_node - ori_from_sockets[m.name] = from_socket + obj = self.obj = context.object + scene = self.scene = context.scene + node = get_active_ypaint_node() + yp = node.node_tree.yp + ypup = get_user_preferences() - # Newly created layer index and image - active_id = None - image = None + # UDIM is turned off by default + #self.use_udim = False - for idx in ch_ids: + # Default normal map type is bump + self.normal_map_type = 'BUMP_MAP' - # Image name and colorspace - image_name = self.name - colorspace = get_srgb_name() + # Default FXAA is on + #self.fxaa = True - if self.type == 'OTHER_OBJECT_CHANNELS': + # Default samples is 1 + self.samples = 1 - root_ch = yp.channels[idx] - image_name += ' ' + yp.channels[idx].name + # Set channel to first one, just in case + if len(yp.channels) > 0: + self.channel_idx = str(0) - # Hide irrelevant objects - for oo in other_objs: - if oo not in ch_other_objects[idx]: - oo.hide_render = True - else: oo.hide_render = False + # Get height channel + height_root_ch = get_root_height_channel(yp) - if root_ch.type == 'NORMAL': - bake_type = 'NORMAL' + # Set default float image + if self.type in {'POINTINESS', 'MULTIRES_DISPLACEMENT', 'BEVEL_MASK'}: + self.hdr = True + else: + self.hdr = False - # Set back original socket - for m in all_other_mats: - mout = get_material_output(m) - if mout: - nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) - if nod: - soc = nod.outputs.get(ori_from_sockets[m.name]) - if soc: m.node_tree.links.new(soc, mout.inputs[0]) + # Set name + mat = get_active_material() + if self.type == 'AO': + self.blend_type = 'MULTIPLY' + self.samples = 32 - else: - bake_type = 'EMIT' - - # Set emission connection - for j, m in enumerate(ch_other_mats[idx]): - default = ch_other_defaults[idx][j] - socket = ch_other_sockets[idx][j] - - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if not temp_emi: continue - - if default != None: - # Set default - if type(default) == float: - temp_emi.inputs[0].default_value = (default, default, default, 1.0) - else: temp_emi.inputs[0].default_value = (default[0], default[1], default[2], 1.0) - - # Break link - for l in temp_emi.inputs[0].links: - m.node_tree.links.remove(l) - elif socket: - m.node_tree.links.new(socket, temp_emi.inputs[0]) - - colorspace = get_noncolor_name() if root_ch.colorspace == 'LINEAR' else get_srgb_name() - - elif self.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - colorspace = get_noncolor_name() - - # Using float image will always make the image linear/non-color - if self.hdr: - colorspace = get_noncolor_name() - - # Base color of baked image - if self.type == 'AO': - color = [1.0, 1.0, 1.0, 1.0] - elif self.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - if self.hdr: - color = [0.7354, 0.7354, 1.0, 1.0] - else: - color = [0.5, 0.5, 1.0, 1.0] - elif self.type == 'FLOW': - color = [0.5, 0.5, 0.0, 1.0] - else: - if self.hdr: - color = [0.7354, 0.7354, 0.7354, 1.0] - else: color = [0.5, 0.5, 0.5, 1.0] + # Check Ambient occlusion channel if available + for i, c in enumerate(yp.channels): + if c.name in {'Ambient Occlusion', 'AO'}: + self.channel_idx = str(i) + break - # Make image transparent if its baked from other objects - if self.type.startswith('OTHER_OBJECT_'): - color[3] = 0.0 + elif self.type == 'POINTINESS': + self.blend_type = 'ADD' + self.fxaa = False + elif self.type == 'CAVITY': + self.blend_type = 'ADD' + elif self.type == 'DUST': + self.blend_type = 'MIX' + elif self.type == 'PAINT_BASE': + self.blend_type = 'MIX' + elif self.type == 'BEVEL_NORMAL': + self.blend_type = 'MIX' + self.normal_blend_type = 'OVERLAY' + self.use_baked_disp = False + self.samples = 32 - # New target image - if self.use_udim: - image = bpy.data.images.new( - name=image_name, width=width, height=height, - alpha=True, float_buffer=self.hdr, tiled=True - ) + if height_root_ch: + self.channel_idx = str(get_channel_index(height_root_ch)) + self.normal_map_type = 'NORMAL_MAP' - # Fill tiles - for tilenum in tilenums: - UDIM.fill_tile(image, tilenum, color, width, height) - UDIM.initial_pack_udim(image, color) + elif self.type == 'BEVEL_MASK': + self.blend_type = 'MIX' + self.use_baked_disp = False + self.samples = 32 - # Remember base color - image.yui.base_color = color - else: - image = bpy.data.images.new( - name=image_name, width=width, height=height, - alpha=True, float_buffer=self.hdr - ) + elif self.type == 'MULTIRES_NORMAL': + self.blend_type = 'MIX' - image.generated_color = color - image.colorspace_settings.name = colorspace + if height_root_ch: + self.channel_idx = str(get_channel_index(height_root_ch)) + self.normal_map_type = 'NORMAL_MAP' + self.normal_blend_type = 'OVERLAY' - # Set image filepath if overwrite image is found - if do_overwrite: - # Get overwrite image again to avoid pointer error - overwrite_img = bpy.data.images.get(self.overwrite_image_name) - #if idx == 0: - if idx == min(ch_ids): - if not overwrite_img.packed_file and overwrite_img.filepath != '': - image.filepath = overwrite_img.filepath - else: - layer = yp.layers[yp.active_layer_index] - root_ch = yp.channels[idx] - ch = layer.channels[idx] + elif self.type == 'MULTIRES_DISPLACEMENT': + self.blend_type = 'MIX' - if root_ch.type == 'NORMAL': - source = get_channel_source_1(ch, layer) - else: source = get_channel_source(ch, layer) + if height_root_ch: + self.channel_idx = str(get_channel_index(height_root_ch)) + self.normal_map_type = 'BUMP_MAP' + self.normal_blend_type = 'OVERLAY' - if source and hasattr(source, 'image') and source.image and not source.image.packed_file and source.image.filepath != '': - image.filepath = source.image.filepath + elif self.type == 'OTHER_OBJECT_EMISSION': + self.subsurf_influence = False - # Set bake image - tex.image = image - mat.node_tree.nodes.active = tex + self.margin = 0 - # Bake! - try: - if self.type.startswith('MULTIRES_'): - bpy.ops.object.bake_image() - else: - if bake_type != 'EMIT': - bpy.ops.object.bake(type=bake_type) - else: bpy.ops.object.bake() - except Exception as e: + elif self.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + self.subsurf_influence = False - # Try to use CPU if GPU baking is failed - if self.bake_device == 'GPU': - print('EXCEPTIION: GPU baking failed! Trying to use CPU...') - self.bake_device = 'CPU' - scene.cycles.device = 'CPU' + if height_root_ch: + self.channel_idx = str(get_channel_index(height_root_ch)) + self.normal_map_type = 'NORMAL_MAP' + self.normal_blend_type = 'OVERLAY' - if self.type.startswith('MULTIRES_'): - bpy.ops.object.bake_image() - else: - if bake_type != 'EMIT': - bpy.ops.object.bake(type=bake_type) - else: bpy.ops.object.bake() - else: - print('EXCEPTIION:', e) + if self.type == 'OTHER_OBJECT_NORMAL': + self.margin = 0 - if use_fxaa: fxaa_image(image, False, bake_device=self.bake_device) + elif self.type == 'OTHER_OBJECT_CHANNELS': + self.subsurf_influence = False + self.use_image_atlas = False + self.margin = 0 - # Bake other object alpha - if self.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS'}: - - alpha_found = False - if self.type == 'OTHER_OBJECT_CHANNELS': - - # Set emission connection - for j, m in enumerate(ch_other_mats[idx]): - alpha_default = ch_other_alpha_defaults[idx][j] - alpha_socket = ch_other_alpha_sockets[idx][j] - - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if not temp_emi: continue - - if alpha_default != 1.0: - alpha_found = True - # Set alpha_default - if type(alpha_default) == float: - temp_emi.inputs[0].default_value = (alpha_default, alpha_default, alpha_default, 1.0) - else: temp_emi.inputs[0].default_value = (alpha_default[0], alpha_default[1], alpha_default[2], 1.0) - - # Break link - for l in temp_emi.inputs[0].links: - m.node_tree.links.remove(l) - elif alpha_socket: - alpha_found = True - m.node_tree.links.new(alpha_socket, temp_emi.inputs[0]) - else: - alpha_found = True + elif self.type == 'SELECTED_VERTICES': + self.subsurf_influence = False + self.use_baked_disp = False - if alpha_found: + elif self.type == 'FLOW': + self.blend_type = 'MIX' - temp_img = image.copy() - temp_img.colorspace_settings.name = get_noncolor_name() - tex.image = temp_img + # Check flow channel if available + for i, c in enumerate(yp.channels): + if 'flow' in c.name.lower(): + self.channel_idx = str(i) + break - # Set temp filepath - if image.source == 'TILED': - temp_img.name = '__TEMP__' - UDIM.initial_pack_udim(temp_img) + suffix = bake_type_suffixes[self.type] + self.name = get_unique_name(mat.name + ' ' + suffix, bpy.data.images) - # Need to use clear so there's alpha on the baked image - scene.render.bake.use_clear = True + self.overwrite_choice = False + self.overwrite_name = '' + overwrite_entity = None + + if self.overwrite_current: + overwrite_entity = self.entity - # Bake emit can will create alpha image - bpy.ops.object.bake(type='EMIT') + # Other object and selected vertices bake will not display overwrite choice + elif not self.type.startswith('OTHER_OBJECT_') and self.type not in {'SELECTED_VERTICES'}: + #else: - # Set tile pixels - for tilenum in tilenums: + # Clear overwrite_coll + self.overwrite_coll.clear() - # Swap tile - if tilenum != 1001: - UDIM.swap_tile(image, 1001, tilenum) - UDIM.swap_tile(temp_img, 1001, tilenum) + # Get overwritable layers + if self.target_type == 'LAYER': + for layer in yp.layers: + if layer.type == 'IMAGE': + source = get_layer_source(layer) + if source.image: + img = source.image + if img.y_bake_info.is_baked and not img.y_bake_info.is_baked_channel and img.y_bake_info.bake_type == self.type: + self.overwrite_coll.add().name = layer.name + elif img.yia.is_image_atlas or img.yua.is_udim_atlas: + if img.yia.is_image_atlas: + segment = img.yia.segments.get(layer.segment_name) + else: segment = img.yua.segments.get(layer.segment_name) + if segment and segment.bake_info.is_baked and segment.bake_info.bake_type == self.type: + self.overwrite_coll.add().name = layer.name - # Copy alpha to RGB channel, so it can be fxaa-ed - if self.type == 'OTHER_OBJECT_NORMAL': - copy_image_channel_pixels(temp_img, temp_img, 3, 0) + # Get overwritable masks + elif len(yp.layers) > 0: + active_layer = yp.layers[yp.active_layer_index] + for mask in active_layer.masks: + if mask.type == 'IMAGE': + source = get_mask_source(mask) + if source.image: + img = source.image + if img.y_bake_info.is_baked and not img.y_bake_info.is_baked_channel and img.y_bake_info.bake_type == self.type: + self.overwrite_coll.add().name = mask.name + elif img.yia.is_image_atlas or img.yua.is_udim_atlas: + if img.yia.is_image_atlas: + segment = img.yia.segments.get(mask.segment_name) + else: segment = img.yua.segments.get(mask.segment_name) + if segment and segment.bake_info.is_baked and segment.bake_info.bake_type == self.type: + self.overwrite_coll.add().name = mask.name - # FXAA alpha - fxaa_image(temp_img, False, self.bake_device, first_tile_only=True) + if len(self.overwrite_coll) > 0: - # Copy alpha to actual image - copy_image_channel_pixels(temp_img, image, 0, 3) + self.overwrite_choice = True + if self.target_type == 'LAYER': + overwrite_entity = yp.layers.get(self.overwrite_coll[0].name) + else: + active_layer = yp.layers[yp.active_layer_index] + overwrite_entity = active_layer.masks.get(self.overwrite_coll[0].name) + else: + self.overwrite_choice = False - # Swap tile again to recover - if tilenum != 1001: - UDIM.swap_tile(image, 1001, tilenum) - UDIM.swap_tile(temp_img, 1001, tilenum) + self.overwrite_image_name = '' + self.overwrite_segment_name = '' + if overwrite_entity: - # Remove temp image - remove_datablock(bpy.data.images, temp_img, user=tex, user_prop='image') + if self.target_type == 'LAYER': + source = get_layer_source(overwrite_entity) + else: source = get_mask_source(overwrite_entity) - # Back to original size if using SSA - if use_ssaa: - image, temp_segment = resize_image( - image, self.width, self.height, image.colorspace_settings.name, - alpha_aware=True, bake_device=self.bake_device - ) + bi = None + if overwrite_entity.type == 'IMAGE' and source.image: + self.overwrite_image_name = source.image.name + if not source.image.yia.is_image_atlas and not source.image.yua.is_udim_atlas: + self.overwrite_name = source.image.name + self.width = source.image.size[0] if source.image.size[0] != 0 else int(ypup.default_image_resolution) + self.height = source.image.size[1] if source.image.size[1] != 0 else int(ypup.default_image_resolution) + self.use_image_atlas = False + bi = source.image.y_bake_info + else: + self.overwrite_name = overwrite_entity.name + self.overwrite_segment_name = overwrite_entity.segment_name + if source.image.yia.is_image_atlas: + segment = source.image.yia.segments.get(overwrite_entity.segment_name) + self.width = segment.width + self.height = segment.height + else: + segment = source.image.yua.segments.get(overwrite_entity.segment_name) + tilenums = UDIM.get_udim_segment_tilenums(segment) + if len(tilenums) > 0: + tile = source.image.tiles.get(tilenums[0]) + self.width = tile.size[0] + self.height = tile.size[1] + bi = segment.bake_info + self.use_image_atlas = True + self.hdr = source.image.is_float - # Denoise AO image - if use_denoise: - image = denoise_image(image) + # Fill settings using bake info stored on image + if bi: + for attr in dir(bi): + if attr in {'other_objects', 'selected_objects'}: continue + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + #if attr in dir(self): + try: setattr(self, attr, getattr(bi, attr)) + except: pass - new_segment_created = False + self.uv_map = overwrite_entity.uv_name + + # Use active uv layer name by default + uv_layers = get_uv_layers(obj) - if self.use_image_atlas: + # UV Map collections update + self.uv_map_coll.clear() + for uv in uv_layers: + if not uv.name.startswith(TEMP_UV): + self.uv_map_coll.add().name = uv.name - need_to_create_new_segment = False - if segment: - ia_image = segment.id_data - if self.use_udim: - need_to_create_new_segment = ia_image.is_float != self.hdr - if need_to_create_new_segment: - UDIM.remove_udim_atlas_segment_by_name(ia_image, segment.name, yp) - else: - need_to_create_new_segment = self.width != segment.width or self.height != segment.height or ia_image.is_float != self.hdr - if need_to_create_new_segment: - segment.unused = True + if len(self.uv_map_coll) > 0 and not overwrite_entity: #len(self.overwrite_coll) == 0: + self.uv_map = self.uv_map_coll[0].name - if not segment or need_to_create_new_segment: + if len(self.uv_map_coll) > 1: + self.uv_map_1 = self.uv_map_coll[1].name - if self.use_udim: - segment = UDIM.get_set_udim_atlas_segment( - tilenums, color=(0, 0, 0, 0), colorspace=get_srgb_name(), hdr=self.hdr, yp=yp - ) - else: - # Clearing unused image atlas segments - img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'TRANSPARENT', self.width, self.height, self.hdr) - if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) + # Cage object collections update + self.cage_object_coll.clear() + for ob in get_scene_objects(): + if ob != obj and ob not in bpy.context.selected_objects and ob.type == 'MESH': + self.cage_object_coll.add().name = ob.name + + requires_popup = self.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_EMISSION', 'OTHER_OBJECT_CHANNELS', 'FLOW'} + if not requires_popup and get_user_preferences().skip_property_popups and not event.shift: + return self.execute(context) - segment = ImageAtlas.get_set_image_atlas_segment( - self.width, self.height, 'TRANSPARENT', self.hdr, yp=yp - ) + return context.window_manager.invoke_props_dialog(self, width=320) - new_segment_created = True + def check(self, context): + self.check_operator(context) + ypup = get_user_preferences() - ia_image = segment.id_data + # New image cannot use more pixels than the image atlas + if self.use_image_atlas: + if self.hdr: max_size = ypup.hdr_image_atlas_size + else: max_size = ypup.image_atlas_size + if self.width > max_size: self.width = max_size + if self.height > max_size: self.height = max_size - # Set baked image to segment - if self.use_udim: - offset = get_udim_segment_mapping_offset(segment) * 10 - copy_dict = {} - for tilenum in tilenums: - copy_dict[tilenum] = tilenum + offset - UDIM.copy_tiles(image, ia_image, copy_dict) - else: copy_image_pixels(image, ia_image, segment) - temp_img = image - image = ia_image - - # Remove original baked image - remove_datablock(bpy.data.images, temp_img) - - # Index 0 is the main image - if idx == min(ch_ids): - if do_overwrite: + return True - # Get overwrite image again to avoid pointer error - overwrite_img = bpy.data.images.get(self.overwrite_image_name) + def draw(self, context): + node = get_active_ypaint_node() + yp = node.node_tree.yp + mat = get_active_material() - active_id = yp.active_layer_index + channel = yp.channels[int(self.channel_idx)] if self.channel_idx != '-1' else None + height_root_ch = get_root_height_channel(yp) - if overwrite_img != image: - if segment and not self.use_image_atlas: - entities = ImageAtlas.replace_segment_with_image(yp, segment, image) - segment = None - else: entities = replace_image(overwrite_img, image, yp, self.uv_map) - elif segment: entities = ImageAtlas.get_entities_with_specific_segment(yp, segment) - else: entities = get_entities_with_specific_image(yp, image) + row = split_layout(self.layout, 0.4) - for entity in entities: - if new_segment_created: - entity.segment_name = segment.name - ImageAtlas.set_segment_mapping(entity, segment, image) + show_subsurf_influence = not self.type.startswith('MULTIRES_') and self.type not in {'SELECTED_VERTICES'} + show_use_baked_disp = height_root_ch and not self.type.startswith('MULTIRES_') and self.type not in {'SELECTED_VERTICES'} - if entity.uv_name != self.uv_map: - entity.uv_name = self.uv_map + col = row.column(align=False) - if self.target_type == 'LAYER': - layer_ids = [i for i, l in enumerate(yp.layers) if l in entities] - if entities and yp.active_layer_index not in layer_ids: - active_id = layer_ids[0] + if not self.overwrite_current: - # Refresh uv - refresh_temp_uv(context.object, yp.layers[active_id]) + if len(self.overwrite_coll) > 0: + col.label(text='Overwrite:') + if len(self.overwrite_coll) > 0 and self.overwrite_choice: + if self.target_type == 'LAYER': + col.label(text='Overwrite Layer:') + else: + col.label(text='Overwrite Mask:') + else: + col.label(text='Name:') - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(yp.layers[active_id]) + if self.target_type == 'LAYER': + col.label(text='Channel:') + if channel and channel.type == 'NORMAL': + col.label(text='Type:') + else: + col.label(text='Name:') - elif self.target_type == 'MASK': - masks = [] - for l in yp.layers: - masks.extend([m for m in l.masks if m in entities]) - if masks: - masks[0].active_edit = True + if self.type.startswith('OTHER_OBJECT_'): + col.label(text='Cage Object:') + col.label(text='Cage Extrusion:') + if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): + col.label(text='Max Ray Distance:') + elif self.type == 'AO': + col.label(text='AO Distance:') + col.label(text='') + elif self.type in {'BEVEL_NORMAL', 'BEVEL_MASK'}: + col.label(text='Bevel Samples:') + col.label(text='Bevel Radius:') + elif self.type.startswith('MULTIRES_'): + col.label(text='Base Level:') + #elif self.type.startswith('OTHER_OBJECT_'): + # col.label(text='Source Object:') - # Refresh uv - refresh_temp_uv(context.object, masks[0]) + col.label(text='') + col.label(text='') + if self.use_custom_resolution == False: + col.label(text='Resolution:') + if self.use_custom_resolution == True: + col.label(text='Width:') + col.label(text='Height:') + col.label(text='Samples:') + col.label(text='UV Map:') + if self.type == 'FLOW': + col.label(text='Straight UV Map:') + col.label(text='Margin:') + if is_bl_newer_than(2, 80): + col.separator() + col.label(text='Bake Device:') + col.label(text='Interpolation:') + col.separator() + col.label(text='') + #col.label(text='') + col.label(text='') - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(masks[0]) + #if not self.type.startswith('MULTIRES_'): + if show_subsurf_influence: + col.label(text='') - elif self.target_type == 'LAYER': + #if height_root_ch and not self.type.startswith('MULTIRES_'): + if show_use_baked_disp: + col.label(text='') - layer_name = image.name if not self.use_image_atlas else self.name + col.label(text='') + col.label(text='') - if self.use_image_atlas: - layer_name = get_unique_name(layer_name, yp.layers) + if self.type not in {'OTHER_OBJECT_CHANNELS'}: + col.separator() + col.label(text='') - yp.halt_update = True - layer = Layer.add_new_layer( - group_tree=node.node_tree, layer_name=layer_name, - layer_type='IMAGE', channel_idx=channel_idx, - blend_type=self.blend_type, normal_blend_type=self.normal_blend_type, - normal_map_type=self.normal_map_type, texcoord_type='UV', - uv_name=self.uv_map, image=image, vcol=None, segment=segment, - interpolation = self.interpolation, - normal_space = 'OBJECT' if self.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' - ) - yp.halt_update = False - active_id = yp.active_layer_index + col = row.column(align=False) - if segment: - ImageAtlas.set_segment_mapping(layer, segment, image) + if not self.overwrite_current: + if len(self.overwrite_coll) > 0: + col.prop(self, 'overwrite_choice', text='') - # Refresh uv - refresh_temp_uv(context.object, layer) + if len(self.overwrite_coll) > 0 and self.overwrite_choice: + col.prop_search(self, "overwrite_name", self, "overwrite_coll", text='', icon='IMAGE_DATA') + else: + col.prop(self, 'name', text='') - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(layer) + if self.target_type == 'LAYER': + rrow = col.row(align=True) + rrow.prop(self, 'channel_idx', text='') + if channel: + if channel.type == 'NORMAL': + rrow.prop(self, 'normal_blend_type', text='') + col.prop(self, 'normal_map_type', text='') + else: + rrow.prop(self, 'blend_type', text='') + else: + col.label(text=self.overwrite_name) + if self.type.startswith('OTHER_OBJECT_'): + col.prop_search(self, "cage_object_name", self, "cage_object_coll", text='', icon='OBJECT_DATA') + rrow = col.row(align=True) + rrow.active = self.cage_object_name == '' + rrow.prop(self, 'cage_extrusion', text='') + if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): + col.prop(self, 'max_ray_distance', text='') + elif self.type == 'AO': + col.prop(self, 'ao_distance', text='') + col.prop(self, 'only_local') + elif self.type in {'BEVEL_NORMAL', 'BEVEL_MASK'}: + col.prop(self, 'bevel_samples', text='') + col.prop(self, 'bevel_radius', text='') + elif self.type.startswith('MULTIRES_'): + col.prop(self, 'multires_base', text='') - else: - mask_name = image.name if not self.use_image_atlas else self.name + col.prop(self, 'hdr') + col.prop(self, 'use_custom_resolution') + crow = col.row(align=True) + if self.use_custom_resolution == False: + crow.prop(self, 'image_resolution', expand= True,) + elif self.use_custom_resolution == True: + col.prop(self, 'width', text='') + col.prop(self, 'height', text='') + col.prop(self, 'samples', text='') + col.prop_search(self, "uv_map", self, "uv_map_coll", text='', icon='GROUP_UVS') + if self.type == 'FLOW': + col.prop_search(self, "uv_map_1", self, "uv_map_coll", text='', icon='GROUP_UVS') + if is_bl_newer_than(3, 1): + split = split_layout(col, 0.4, align=True) + split.prop(self, 'margin', text='') + split.prop(self, 'margin_type', text='') + else: + col.prop(self, 'margin', text='') - if self.use_image_atlas: - mask_name = get_unique_name(mask_name, active_layer.masks) + if is_bl_newer_than(2, 80): + col.separator() + col.prop(self, 'bake_device', text='') + col.prop(self, 'interpolation', text='') - mask = Mask.add_new_mask( - active_layer, mask_name, 'IMAGE', 'UV', self.uv_map, - image, None, segment - ) - mask.active_edit = True + col.separator() + if self.type.startswith('OTHER_OBJECT_'): + col.prop(self, 'ssaa') + else: col.prop(self, 'fxaa') - reconnect_layer_nodes(active_layer) - rearrange_layer_nodes(active_layer) + if self.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81): + col.prop(self, 'denoise') - active_id = yp.active_layer_index + col.separator() - if segment: - ImageAtlas.set_segment_mapping(mask, segment, image) + #if not self.type.startswith('MULTIRES_') or self.type not in {'SELECTED_VERTICES'}: + if show_subsurf_influence: + r = col.row() + r.active = not self.use_baked_disp + r.prop(self, 'subsurf_influence') - # Refresh uv - refresh_temp_uv(context.object, mask) + #if height_root_ch and not self.type.startswith('MULTIRES_'): + if show_use_baked_disp: + col.prop(self, 'use_baked_disp') - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(mask) + col.prop(self, 'flip_normals') + col.prop(self, 'force_bake_all_polygons') - # Indices > 0 are for channel override images - else: - # Set images to channel override - layer = yp.layers[yp.active_layer_index] - root_ch = yp.channels[idx] - ch = layer.channels[idx] - if not ch.enable: ch.enable = True + if UDIM.is_udim_supported() or self.type not in {'OTHER_OBJECT_CHANNELS'}: + col.separator() - # Normal channel will use second override - if root_ch.type == 'NORMAL': - if ch.normal_map_type != 'NORMAL_MAP': ch.normal_map_type = 'NORMAL_MAP' - if not ch.override_1: ch.override_1 = True - if ch.override_1_type != 'IMAGE': ch.override_1_type = 'IMAGE' - source = get_channel_source_1(ch, layer) - else: - if not ch.override: ch.override = True - if ch.override_type != 'IMAGE': ch.override_type = 'IMAGE' - source = get_channel_source(ch, layer) - - # If image already exists on source - old_image = None - if source.image and image != source.image: - old_image = source.image - source_name = old_image.name - current_name = image.name - - old_image.name = '_____temp' - image.name = source_name - old_image.name = current_name - - # Set image to source - source.image = image - source.interpolation = self.interpolation - - # Remove image if it's not used anymore - if old_image: safe_remove_image(old_image) - - # Set bake info to image/segment - bi = segment.bake_info if segment else image.y_bake_info - - if not bi.is_baked: bi.is_baked = True - if bi.bake_type != self.type: bi.bake_type = self.type - for attr in dir(bi): - #if attr in dir(self): - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - try: setattr(bi, attr, getattr(self, attr)) - except: pass + if UDIM.is_udim_supported(): + ccol = col.column(align=True) + ccol.prop(self, 'use_udim') - if other_objs: + if self.type not in {'OTHER_OBJECT_CHANNELS'}: + ccol = col.column(align=True) + #ccol.active = not self.use_udim + ccol.prop(self, 'use_image_atlas') - # Remember other objects to bake info - for o in other_objs: - if is_bl_newer_than(2, 79): - oo_recorded = any([oo for oo in bi.other_objects if oo.object == o]) - else: oo_recorded = any([oo for oo in bi.other_objects if oo.object_name == o.name]) - - if not oo_recorded: - oo = bi.other_objects.add() - if is_bl_newer_than(2, 79): - oo.object = o - oo.object_name = o.name - - # Remove unused other objects on bake info - for i, oo in reversed(list(enumerate(bi.other_objects))): - if is_bl_newer_than(2, 79): - ooo = oo.object - else: ooo = bpy.data.objects.get(oo.object_name) - - if ooo not in other_objs: - bi.other_objects.remove(i) - - if self.type == 'SELECTED_VERTICES': - #fill_mode = 'FACE' - #obj_vertex_indices = {} - bi.selected_face_mode = True if fill_mode == 'FACE' else False - - # Clear selected objects first - bi.selected_objects.clear() - - # Collect object to bake info - for obj_name, v_indices in obj_vertex_indices.items(): - obj = bpy.data.objects.get(obj_name) - bso = bi.selected_objects.add() - if is_bl_newer_than(2, 79): - bso.object = obj - bso.object_name = obj.name - - # Collect selected vertex data to bake info - for vi in v_indices: - bvi = bso.selected_vertex_indices.add() - bvi.index = vi - - # Recover other yps - if self.type == 'OTHER_OBJECT_CHANNELS': - for m in all_other_mats: - # Set back original socket - mout = get_material_output(m) - if mout: - nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) - if nod: - soc = nod.outputs.get(ori_from_sockets[m.name]) - if soc: m.node_tree.links.new(soc, mout.inputs[0]) - - # Remove temp emission - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if temp_emi: m.node_tree.nodes.remove(temp_emi) - - # Recover other objects material settings - recover_other_objs_channels(other_objs, ori_mat_no_nodes) - - # Remove temp bake nodes - simple_remove_node(mat.node_tree, tex) - #simple_remove_node(mat.node_tree, srgb2lin) - simple_remove_node(mat.node_tree, bsdf) - if src: simple_remove_node(mat.node_tree, src) - if normal_bake: simple_remove_node(mat.node_tree, normal_bake) - if geometry: simple_remove_node(mat.node_tree, geometry) - if vector_math: simple_remove_node(mat.node_tree, vector_math) - if vector_math_1: simple_remove_node(mat.node_tree, vector_math_1) - - # Recover original bsdf - mat.node_tree.links.new(ori_bsdf, output.inputs[0]) - - #return {'FINISHED'} - - for obj in objs: - # Recover modifiers - for i, m in enumerate(obj.modifiers): - #print(obj.name, i) - if i >= len(ori_mods[obj.name]): break - if ori_mods[obj.name][i] != m.show_render: - m.show_render = ori_mods[obj.name][i] - if i >= len(ori_viewport_mods[obj.name]): break - if ori_viewport_mods[obj.name][i] != m.show_render: - m.show_viewport = ori_viewport_mods[obj.name][i] - - # Recover multires levels - for m in obj.modifiers: - if m.type == 'MULTIRES' and obj.name in ori_multires_levels: - m.render_levels = ori_multires_levels[obj.name] - break + def execute(self, context): + if not self.is_cycles_exist(context): return {'CANCELLED'} - # Recover material index - if ori_mat_ids[obj.name]: - for i, p in enumerate(obj.data.polygons): - if ori_mat_ids[obj.name][i] != p.material_index: - p.material_index = ori_mat_ids[obj.name][i] - - if ori_loop_locs[obj.name]: - - # Get uv map - uv_layers = get_uv_layers(obj) - uvl = uv_layers.get(self.uv_map) - - # Recover uv locations - if uvl: - for i, p in enumerate(obj.data.polygons): - for j, li in enumerate(p.loop_indices): - uvl.data[li].uv = ori_loop_locs[obj.name][i][j] - - # Delete temp vcol - vcols = get_vertex_colors(obj) - if vcols: - vcol = vcols.get(TEMP_VCOL) - if vcol: vcols.remove(vcol) - - # Recover flip normals setup - if self.flip_normals: - #bpy.ops.object.mode_set(mode = 'EDIT') - #bpy.ops.mesh.flip_normals() - #bpy.ops.mesh.select_all(action='DESELECT') - #bpy.ops.object.mode_set(mode = ori_mode) - if is_bl_newer_than(2, 80): - # Deselect other objects first - for o in other_objs: - o.select_set(False) - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - # Reselect other objects - for o in other_objs: - o.select_set(True) - else: - for obj in objs: - if obj in other_objs: continue - context.scene.objects.active = obj - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - - # Recover subdiv setup - if height_root_ch and subdiv_setup_changes: - height_root_ch.enable_subdiv_setup = not height_root_ch.enable_subdiv_setup - - # Remove flow vcols - if self.type == 'FLOW': - for obj in objs: - vcols = get_vertex_colors(obj) - flow_vcol = vcols.get(FLOW_VCOL) - if flow_vcol: - vcols.remove(flow_vcol) + node = get_active_ypaint_node() + yp = node.node_tree.yp - # Recover bake settings - recover_bake_settings(book, yp, mat=mat) + if (self.overwrite_choice or self.overwrite_current) and self.overwrite_name == '': + self.report({'ERROR'}, "Overwrite layer/mask cannot be empty!") + return {'CANCELLED'} - # Remove temporary objects - if temp_objs: - for o in temp_objs: - remove_mesh_obj(o) + # Get overwrite image + overwrite_img = None + segment = None + if (self.overwrite_choice or self.overwrite_current) and self.overwrite_image_name != '': + overwrite_img = bpy.data.images.get(self.overwrite_image_name) - #return {'FINISHED'} + if overwrite_img.yia.is_image_atlas: + segment = overwrite_img.yia.segments.get(self.overwrite_segment_name) + elif overwrite_img.yua.is_udim_atlas: + segment = overwrite_img.yua.segments.get(self.overwrite_segment_name) - # Check linear nodes becuse sometimes bake results can be linear or srgb - check_yp_linear_nodes(yp, reconnect=True) + bprops = {} + #for prop in self.properties.keys(): + # try: bprops[prop] = getattr(self, prop) + # except Exception as e: print(e) + + bprops['bake_device'] = self.bake_device + bprops['samples'] = self.samples + bprops['margin'] = self.margin + bprops['margin_type'] = self.margin_type + bprops['width'] = self.width + bprops['height'] = self.height + bprops['image_resolution'] = self.image_resolution + bprops['use_custom_resolution'] = self.use_custom_resolution + bprops['name'] = self.name + bprops['uv_map'] = self.uv_map + bprops['uv_map_1'] = self.uv_map_1 + bprops['interpolation'] = self.interpolation + #bprops['overwrite_choice'] = self.overwrite_choice + #bprops['overwrite_current'] = self.overwrite_current + #bprops['overwrite_name'] = self.overwrite_name + #bprops['overwrite_image_name'] = self.overwrite_image_name + #bprops['overwrite_segment_name'] = self.overwrite_segment_name + bprops['type'] = self.type + bprops['cage_object_name'] = self.cage_object_name + bprops['cage_extrusion'] = self.cage_extrusion + bprops['max_ray_distance'] = self.max_ray_distance + bprops['ao_distance'] = self.ao_distance + bprops['bevel_samples'] = self.bevel_samples + bprops['bevel_radius'] = self.bevel_radius + bprops['multires_base'] = self.multires_base + bprops['target_type'] = self.target_type + bprops['fxaa'] = self.fxaa + bprops['ssaa'] = self.ssaa + bprops['denoise'] = self.denoise + bprops['channel_idx'] = self.channel_idx + bprops['blend_type'] = self.blend_type + bprops['normal_blend_type'] = self.normal_blend_type + bprops['normal_map_type'] = self.normal_map_type + bprops['hdr'] = self.hdr + bprops['use_baked_disp'] = self.use_baked_disp + bprops['flip_normals'] = self.flip_normals + bprops['only_local'] = self.only_local + bprops['subsurf_influence'] = self.subsurf_influence + bprops['force_bake_all_polygons'] = self.force_bake_all_polygons + bprops['use_image_atlas'] = self.use_image_atlas + bprops['use_udim'] = self.use_udim + + rdict = bake_to_entity(bprops, overwrite_img, segment) + + if rdict['message'] != '': + self.report({'ERROR'}, rdict['message']) + return {'CANCELLED'} - # Reconnect and rearrange nodes - #reconnect_yp_layer_nodes(node.node_tree) - reconnect_yp_nodes(node.node_tree) - rearrange_yp_nodes(node.node_tree) + active_id = rdict['active_id'] + image = rdict['image'] # Refresh active index (only when not overwriting current entity) #if active_id != yp.active_layer_index: @@ -2068,6 +2134,7 @@ def execute(self, context): update_image_editor_image(context, image) # Expand image source to show rebake button + ypui = context.window_manager.ypui if self.target_type == 'MASK': ypui.layer_ui.expand_masks = True else: @@ -2075,12 +2142,69 @@ def execute(self, context): ypui.layer_ui.expand_source = True ypui.need_update = True - # Refresh mapping and stuff - #yp.active_layer_index = yp.active_layer_index + return {'FINISHED'} + +class YRebakeBakedImages(bpy.types.Operator, BaseBakeOperator): + bl_idname = "node.y_rebake_baked_images" + bl_label = "Rebake All Baked Images" + bl_description = "Rebake all of the baked images in all layers" + bl_options = {'REGISTER'} + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() and context.object.type == 'MESH' + + def execute(self, context): + T = time.time() + node = get_active_ypaint_node() + yp = node.node_tree.yp + + entities, images, segment_names, _ = get_yp_entities_images_and_segments(yp) + + for i, image in enumerate(images): + + if image.yia.is_image_atlas: + segment = image.yia.segments.get(segment_names[i]) + elif image.yua.is_udim_atlas: + segment = image.yua.segments.get(segment_names[i]) + else: segment = None + + if ((segment and segment.bake_info.is_baked and not segment.bake_info.is_baked_channel) or + (not segment and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) + ): + + bi = image.y_bake_info if not segment else segment.bake_info + + # Skip outdated bake type + if bi.bake_type == 'SELECTED_VERTICES': + continue + + entity = entities[i][0] + entity_path = entity.path_from_id() + + m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity_path) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.channels\[(\d+)\]$', entity_path) + + bake_properties = {} + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: bake_properties[attr] = getattr(bi, attr) + except: pass + + bake_properties.update({ + 'type': bi.bake_type, + 'target_type': 'LAYER' if m1 or m2 else 'MASK', + 'name': image.name, + 'width': image.size[0] if not segment else segment.width, + 'height': image.size[1] if not segment else segment.height, + 'uv_map': entity.uv_name + }) - if image: print('BAKE TO LAYER: Baking', image.name, 'is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') - else: print('BAKE TO LAYER: No image created! Executed in', '{:0.2f}'.format(time.time() - T), 'seconds!') + bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) + print('REBAKE ALL IMAGES: Rebaking all images is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') return {'FINISHED'} def bake_as_image( @@ -2849,6 +2973,7 @@ def execute(self, context): def register(): bpy.utils.register_class(YBakeToLayer) bpy.utils.register_class(YBakeEntityToImage) + bpy.utils.register_class(YRebakeBakedImages) bpy.utils.register_class(YRemoveBakeInfoOtherObject) bpy.utils.register_class(YTryToSelectBakedVertexSelect) bpy.utils.register_class(YRemoveBakedEntity) @@ -2856,6 +2981,7 @@ def register(): def unregister(): bpy.utils.unregister_class(YBakeToLayer) bpy.utils.unregister_class(YBakeEntityToImage) + bpy.utils.unregister_class(YRebakeBakedImages) bpy.utils.unregister_class(YRemoveBakeInfoOtherObject) bpy.utils.unregister_class(YTryToSelectBakedVertexSelect) bpy.utils.unregister_class(YRemoveBakedEntity) diff --git a/ui.py b/ui.py index 281cc503..5dc639f8 100644 --- a/ui.py +++ b/ui.py @@ -5883,8 +5883,10 @@ def draw(self, context): col.operator('node.y_copy_layer', text='Copy All Layers', icon='COPYDOWN').all_layers = True col.operator('node.y_paste_layer', text='Paste Layer(s)', icon='PASTEDOWN') + col.separator() + col.operator('node.y_rebake_baked_images', text='Rebake All Baked Images', icon_value=lib.get_icon('bake')) + if UDIM.is_udim_supported(): - col.separator() col.operator('node.y_refill_udim_tiles', text='Refill UDIM Tiles', icon_value=lib.get_icon('uv')) #col.prop(yp, 'layer_preview_mode', text='Layer Only Viewer') From 3c70c1ba1a809a7d1c957bdaa0f37cb942100dd3 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 23 Feb 2025 19:49:11 +0700 Subject: [PATCH 074/283] Update color id `Fill Selected` label --- Layer.py | 4 ++-- Mask.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Layer.py b/Layer.py index e58bedfb..f2687bd3 100644 --- a/Layer.py +++ b/Layer.py @@ -1235,7 +1235,7 @@ def draw(self, context): if self.mask_type == 'COLOR_ID': col.label(text='Mask Color ID:') if obj.mode == 'EDIT': - col.label(text='Fill Selected:') + col.label(text='') elif self.mask_type == 'EDGE_DETECT': col.label(text='Edge Detect Radius:') else: @@ -1332,7 +1332,7 @@ def draw(self, context): if self.mask_type == 'COLOR_ID': col.prop(self, 'mask_color_id', text='') if obj.mode == 'EDIT': - col.prop(self, 'mask_color_id_fill', text='') + col.prop(self, 'mask_color_id_fill', text='Fill Selected Faces') elif self.mask_type == 'EDGE_DETECT': col.prop(self, 'mask_edge_detect_radius', text='') else: diff --git a/Mask.py b/Mask.py index 5a96bd87..fef59ddc 100644 --- a/Mask.py +++ b/Mask.py @@ -779,7 +779,7 @@ def draw(self, context): if self.type == 'COLOR_ID': col.label(text='Color ID:') if obj.mode == 'EDIT': - col.label(text='Fill Selected:') + col.label(text='') if is_bl_newer_than(3, 2) and self.type == 'VCOL': col.label(text='Domain:') @@ -830,7 +830,7 @@ def draw(self, context): if self.type == 'COLOR_ID': col.prop(self, 'color_id', text='') if obj.mode == 'EDIT': - col.prop(self, 'color_id_fill', text='') + col.prop(self, 'color_id_fill', text='Fill Selected Faces') if self.type == 'HEMI': col.prop(self, 'hemi_space', text='') From 192171fade0fa900bfe9bf029c55c38438d54cdd Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 25 Feb 2025 16:47:00 +0700 Subject: [PATCH 075/283] Move all operators from node to material to make sure they works with `Assign Shortcut` --- Bake.py | 20 +- BakeTarget.py | 4 +- BakeToLayer.py | 12 +- ImageAtlas.py | 12 +- Layer.py | 82 ++--- ListItem.py | 2 +- Mask.py | 14 +- MaskModifier.py | 6 +- Modifier.py | 6 +- NormalMapModifier.py | 6 +- Root.py | 36 +-- Test.py | 2 +- UDIM.py | 2 +- bake_common.py | 2 +- image_ops.py | 14 +- tests/test_quicksetup.py | 16 +- transition.py | 8 +- ui.py | 644 +++++++++++++++++++-------------------- versioning.py | 2 +- 19 files changed, 445 insertions(+), 445 deletions(-) diff --git a/Bake.py b/Bake.py index 607e2f50..f5a0eda3 100644 --- a/Bake.py +++ b/Bake.py @@ -378,7 +378,7 @@ def get_entities_to_transfer(yp, from_uv_map, to_uv_map): return entities class YTransferSomeLayerUV(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_transfer_some_layer_uv" + bl_idname = "material.y_transfer_some_layer_uv" bl_label = "Transfer Some Layer UV" bl_description = "Transfer some layers/masks UV by baking it to other uv (this will take quite some time to finish)" bl_options = {'REGISTER', 'UNDO'} @@ -551,7 +551,7 @@ def execute(self, context): return {'FINISHED'} class YTransferLayerUV(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_transfer_layer_uv" + bl_idname = "material.y_transfer_layer_uv" bl_label = "Transfer Layer UV" bl_description = "Transfer Layer UV by baking it to other uv (this will take quite some time to finish)" bl_options = {'REGISTER', 'UNDO'} @@ -691,7 +691,7 @@ def update_resize_image_tile_number(self, context): self.height = tile.size[1] class YResizeImage(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_resize_image" + bl_idname = "material.y_resize_image" bl_label = "Resize Image Layer/Mask" bl_description = "Resize image of layer or mask" bl_options = {'REGISTER', 'UNDO'} @@ -855,7 +855,7 @@ def execute(self, context): class YBakeChannelToVcol(bpy.types.Operator, BaseBakeOperator): """Bake Channel to Vertex Color""" - bl_idname = "node.y_bake_channel_to_vcol" + bl_idname = "material.y_bake_channel_to_vcol" bl_label = "Bake channel to vertex color" bl_options = {'REGISTER', 'UNDO'} @@ -1091,7 +1091,7 @@ def execute(self, context): return {'FINISHED'} class YDeleteBakedChannelImages(bpy.types.Operator): - bl_idname = "node.y_delete_baked_channel_images" + bl_idname = "material.y_delete_baked_channel_images" bl_label = "Delete All Baked Channel Images" bl_description = "Delete all baked channel images" bl_options = {'UNDO'} @@ -1202,7 +1202,7 @@ def bake_vcol_channel_items(self, context): class YBakeChannels(bpy.types.Operator, BaseBakeOperator): """Bake Channels to Image(s)""" - bl_idname = "node.y_bake_channels" + bl_idname = "material.y_bake_channels" bl_label = "Bake channels to Image" bl_options = {'REGISTER', 'UNDO'} @@ -2142,7 +2142,7 @@ def remove_layer_modifiers_and_transforms(layer): Mask.remove_mask(layer, m, bpy.context.object) class YMergeLayer(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_merge_layer" + bl_idname = "material.y_merge_layer" bl_label = "Merge layer" bl_description = "Merge Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2510,7 +2510,7 @@ def execute(self, context): return {'FINISHED'} class YMergeMask(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_merge_mask" + bl_idname = "material.y_merge_mask" bl_label = "Merge mask" bl_description = "Merge Mask" bl_options = {'UNDO'} @@ -2758,7 +2758,7 @@ def execute(self, context): return {'FINISHED'} class YBakeTempImage(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_bake_temp_image" + bl_idname = "material.y_bake_temp_image" bl_label = "Bake temporary image of layer" bl_description = "Bake temporary image of layer, can be useful to prefent glitching with cycles" bl_options = {'REGISTER', 'UNDO'} @@ -2861,7 +2861,7 @@ def execute(self, context): return {'FINISHED'} class YDisableTempImage(bpy.types.Operator): - bl_idname = "node.y_disable_temp_image" + bl_idname = "material.y_disable_temp_image" bl_label = "Disable Baked temporary image of layer" bl_description = "Disable bake temporary image of layer" bl_options = {'REGISTER', 'UNDO'} diff --git a/BakeTarget.py b/BakeTarget.py index b2344012..26918661 100644 --- a/BakeTarget.py +++ b/BakeTarget.py @@ -119,7 +119,7 @@ def update_new_bake_target_preset(self, context): self.name = get_unique_name(tree_name + suffix, bpy.data.images) class YNewBakeTarget(bpy.types.Operator): - bl_idname = "node.y_new_bake_target" + bl_idname = "material.y_new_bake_target" bl_label = "New Bake Target" bl_description = "New bake target" bl_options = {'REGISTER', 'UNDO'} @@ -221,7 +221,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveBakeTarget(bpy.types.Operator): - bl_idname = "node.y_remove_bake_target" + bl_idname = "material.y_remove_bake_target" bl_label = "Remove Bake Target" bl_description = "Remove bake target" bl_options = {'REGISTER', 'UNDO'} diff --git a/BakeToLayer.py b/BakeToLayer.py index 01b26e08..6e10d2c6 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -13,7 +13,7 @@ TEMP_EMISSION = '_TEMP_EMI_' class YTryToSelectBakedVertexSelect(bpy.types.Operator): - bl_idname = "node.y_try_to_select_baked_vertex" + bl_idname = "material.y_try_to_select_baked_vertex" bl_label = "Try to reselect baked selected vertex" bl_description = "Try to reselect baked selected vertex. It might give you wrong results if mesh number of vertex changed" bl_options = {'REGISTER', 'UNDO'} @@ -108,7 +108,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveBakeInfoOtherObject(bpy.types.Operator): - bl_idname = "node.y_remove_bake_info_other_object" + bl_idname = "material.y_remove_bake_info_other_object" bl_label = "Remove other object info" bl_description = "Remove other object bake info, so it won't be automatically baked anymore if you choose to rebake" bl_options = {'REGISTER', 'UNDO'} @@ -1417,7 +1417,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): return rdict class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_bake_to_layer" + bl_idname = "material.y_bake_to_layer" bl_label = "Bake To Layer" bl_description = "Bake something as layer/mask" bl_options = {'REGISTER', 'UNDO'} @@ -2145,7 +2145,7 @@ def execute(self, context): return {'FINISHED'} class YRebakeBakedImages(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_rebake_baked_images" + bl_idname = "material.y_rebake_baked_images" bl_label = "Rebake All Baked Images" bl_description = "Rebake all of the baked images in all layers" bl_options = {'REGISTER'} @@ -2387,7 +2387,7 @@ def bake_as_image( return image class YBakeEntityToImage(bpy.types.Operator, BaseBakeOperator): - bl_idname = "node.y_bake_entity_to_image" + bl_idname = "material.y_bake_entity_to_image" bl_label = "Bake Layer/Mask To Image" bl_description = "Bake Layer/Mask to an image" bl_options = {'UNDO'} @@ -2903,7 +2903,7 @@ def execute(self, context): return {"FINISHED"} class YRemoveBakedEntity(bpy.types.Operator): - bl_idname = "node.y_remove_baked_entity" + bl_idname = "material.y_remove_baked_entity" bl_label = "Remove Baked Layer/Mask" bl_description = "Remove baked layer/mask" bl_options = {'REGISTER', 'UNDO'} diff --git a/ImageAtlas.py b/ImageAtlas.py index db3b2a19..63ffdc68 100644 --- a/ImageAtlas.py +++ b/ImageAtlas.py @@ -216,7 +216,7 @@ def replace_segment_with_image(yp, segment, image, uv_name=''): return entities #class YUVTransformTest(bpy.types.Operator): -# bl_idname = "node.y_uv_transform_test" +# bl_idname = "material.y_uv_transform_test" # bl_label = "UV Transform Test" # bl_description = "UV Transform Test" # bl_options = {'REGISTER', 'UNDO'} @@ -285,7 +285,7 @@ def set_segment_mapping(entity, segment, image, use_baked=False): mapping.translation[1] = offset_y class YNewImageAtlasSegmentTest(bpy.types.Operator): - bl_idname = "node.y_new_image_atlas_segment_test" + bl_idname = "material.y_new_image_atlas_segment_test" bl_label = "New Image Atlas Segment Test" bl_description = "New Image Atlas segment test" bl_options = {'REGISTER', 'UNDO'} @@ -389,7 +389,7 @@ def execute(self, context): return {'FINISHED'} class YRefreshTransformedLayerUV(bpy.types.Operator): - bl_idname = "node.y_refresh_transformed_uv" + bl_idname = "material.y_refresh_transformed_uv" bl_label = "Refresh Layer UV with Custom Transformation" bl_description = "Refresh layer UV with custom transformation" bl_options = {'REGISTER', 'UNDO'} @@ -429,7 +429,7 @@ def execute(self, context): return {'FINISHED'} class YBackToOriginalUV(bpy.types.Operator): - bl_idname = "node.y_back_to_original_uv" + bl_idname = "material.y_back_to_original_uv" bl_label = "Back to Original UV" bl_description = "Transformed UV detected, your changes will be lost if you edit on this UV.\nClick this button to go back to original UV" bl_options = {'REGISTER', 'UNDO'} @@ -485,7 +485,7 @@ def execute(self, context): return {'FINISHED'} class YConvertToImageAtlas(bpy.types.Operator): - bl_idname = "node.y_convert_to_image_atlas" + bl_idname = "material.y_convert_to_image_atlas" bl_label = "Convert Image to Image Atlas" bl_description = "Convert image to image atlas (useful to avoid material texture limit)" bl_options = {'REGISTER', 'UNDO'} @@ -597,7 +597,7 @@ def execute(self, context): return {'FINISHED'} class YConvertToStandardImage(bpy.types.Operator): - bl_idname = "node.y_convert_to_standard_image" + bl_idname = "material.y_convert_to_standard_image" bl_label = "Convert Image Atlas to standard image" bl_description = "Convert image atlas to standard image" bl_options = {'REGISTER', 'UNDO'} diff --git a/Layer.py b/Layer.py index f2687bd3..9a6c4440 100644 --- a/Layer.py +++ b/Layer.py @@ -367,7 +367,7 @@ def add_new_layer( class YRefreshNeighborUV(bpy.types.Operator): """Refresh Neighbor UV""" - bl_idname = "node.y_refresh_neighbor_uv" + bl_idname = "material.y_refresh_neighbor_uv" bl_label = "Refresh Neighbor UV" bl_options = {'REGISTER', 'UNDO'} @@ -381,7 +381,7 @@ def execute(self, context): class YUseLinearColorSpace(bpy.types.Operator): """This addon need to linear color space image to works properly""" - bl_idname = "node.y_use_linear_color_space" + bl_idname = "material.y_use_linear_color_space" bl_label = "Use Linear Color Space" bl_options = {'REGISTER', 'UNDO'} @@ -396,7 +396,7 @@ def execute(self, context): return {'FINISHED'} class YNewVcolToOverrideChannel(bpy.types.Operator): - bl_idname = "node.y_new_vcol_to_override_channel" + bl_idname = "material.y_new_vcol_to_override_channel" bl_label = "New Vertex Color To Override Channel Layer" bl_description = "New Vertex Color To Override Channel Layer" bl_options = {'UNDO'} @@ -558,7 +558,7 @@ def update_channel_idx_new_layer(self, context): self.interpolation = 'Cubic' class YNewVDMLayer(bpy.types.Operator): - bl_idname = "node.y_new_vdm_layer" + bl_idname = "material.y_new_vdm_layer" bl_label = "New VDM Layer" bl_description = "New Vector Displacement Layer" bl_options = {'UNDO'} @@ -784,7 +784,7 @@ def execute(self, context): return {'FINISHED'} class YNewLayer(bpy.types.Operator): - bl_idname = "node.y_new_layer" + bl_idname = "material.y_new_layer" bl_label = "New Layer" bl_description = "New Layer" bl_options = {'REGISTER', 'UNDO'} @@ -1567,7 +1567,7 @@ def execute(self, context): class YOpenImageToOverrideChannel(bpy.types.Operator, ImportHelper): """Open Image to Override Channel""" - bl_idname = "node.y_open_image_to_override_layer_channel" + bl_idname = "material.y_open_image_to_override_layer_channel" bl_label = "Open Image to Override Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -1724,7 +1724,7 @@ def execute(self, context): class YOpenImageToOverride1Channel(bpy.types.Operator, ImportHelper): """Open Image to Override 1 Channel""" - bl_idname = "node.y_open_image_to_override_1_layer_channel" + bl_idname = "material.y_open_image_to_override_1_layer_channel" bl_label = "Open Image to Override 1 Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2387,7 +2387,7 @@ def search_for_images(tree): return images class YOpenImagesFromMaterialToLayer(bpy.types.Operator, BaseMultipleImagesLayer): - bl_idname = "node.y_open_images_from_material_to_single_layer" + bl_idname = "material.y_open_images_from_material_to_single_layer" bl_label = "Open Images from Material to single " + get_addon_title() + " Layer" bl_description = "Open images inside material node tree to single " + get_addon_title() + " layer" bl_options = {'REGISTER', 'UNDO'} @@ -2538,7 +2538,7 @@ def execute(self, context): node = get_active_ypaint_node() quick_setup_happen = False if not node: - bpy.ops.node.y_quick_ypaint_node_setup() + bpy.ops.material.y_quick_ypaint_node_setup() quick_setup_happen = True failed = False @@ -2552,13 +2552,13 @@ def execute(self, context): if failed: if quick_setup_happen: - bpy.ops.node.y_remove_yp_node() + bpy.ops.material.y_remove_yp_node() return {'CANCELLED'} return {'FINISHED'} class YOpenImagesToSingleLayer(bpy.types.Operator, ImportHelper, BaseMultipleImagesLayer): - bl_idname = "node.y_open_images_to_single_layer" + bl_idname = "material.y_open_images_to_single_layer" bl_label = "Open Images to single Layer" bl_description = "Open images to single layer" bl_options = {'REGISTER', 'UNDO'} @@ -2589,7 +2589,7 @@ def execute(self, context): class YOpenImageToLayer(bpy.types.Operator, ImportHelper): """Open Image to Layer""" - bl_idname = "node.y_open_image_to_layer" + bl_idname = "material.y_open_image_to_layer" bl_label = "Open Image to Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2827,7 +2827,7 @@ def execute(self, context): class YOpenAvailableDataToOverride1Channel(bpy.types.Operator): """Open Available Data to Override 1 Channel Layer""" - bl_idname = "node.y_open_available_data_to_override_1_channel" + bl_idname = "material.y_open_available_data_to_override_1_channel" bl_label = "Open Available Data to Override 1 Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2941,7 +2941,7 @@ def execute(self, context): class YOpenAvailableDataToOverrideChannel(bpy.types.Operator): """Open Available Data to Override Channel Layer""" - bl_idname = "node.y_open_available_data_to_override_channel" + bl_idname = "material.y_open_available_data_to_override_channel" bl_label = "Open Available Data to Override Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -3121,7 +3121,7 @@ def execute(self, context): class YOpenAvailableDataToLayer(bpy.types.Operator): """Open Available Data to Layer""" - bl_idname = "node.y_open_available_data_to_layer" + bl_idname = "material.y_open_available_data_to_layer" bl_label = "Open Available Data to Layer" bl_options = {'REGISTER', 'UNDO'} @@ -3347,7 +3347,7 @@ def execute(self, context): return {'FINISHED'} class YMoveInOutLayerGroup(bpy.types.Operator): - bl_idname = "node.y_move_in_out_layer_group" + bl_idname = "material.y_move_in_out_layer_group" bl_label = "Move In/Out Layer Group" bl_description = "Move in or out layer group" bl_options = {'REGISTER', 'UNDO'} @@ -3481,7 +3481,7 @@ def execute(self, context): return {'FINISHED'} class YMoveLayer(bpy.types.Operator): - bl_idname = "node.y_move_layer" + bl_idname = "material.y_move_layer" bl_label = "Move Layer" bl_description = "Move layer" bl_options = {'REGISTER', 'UNDO'} @@ -3640,23 +3640,23 @@ def execute(self, context): def draw_move_up_in_layer_group(self, context): col = self.layout.column() - c = col.operator("node.y_move_layer", text='Move Up (Skip Group)', icon='TRIA_UP') + c = col.operator("material.y_move_layer", text='Move Up (Skip Group)', icon='TRIA_UP') c.direction = 'UP' - c = col.operator("node.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_UP') + c = col.operator("material.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_UP') c.direction = 'UP' def draw_move_down_in_layer_group(self, context): col = self.layout.column() - c = col.operator("node.y_move_layer", text='Move Down (Skip Group)', icon='TRIA_DOWN') + c = col.operator("material.y_move_layer", text='Move Down (Skip Group)', icon='TRIA_DOWN') c.direction = 'DOWN' - c = col.operator("node.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_DOWN') + c = col.operator("material.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_DOWN') c.direction = 'DOWN' class YMoveInOutLayerGroupMenu(bpy.types.Operator): - bl_idname = "node.y_move_in_out_layer_group_menu" + bl_idname = "material.y_move_in_out_layer_group_menu" bl_label = "Move In/Out Layer Group" bl_description = "Move inside or outside layer group" bl_options = {'UNDO'} @@ -3682,7 +3682,7 @@ def execute(self, context): wm = bpy.context.window_manager if self.move_out: - bpy.ops.node.y_move_in_out_layer_group(direction=self.direction) + bpy.ops.material.y_move_in_out_layer_group(direction=self.direction) else: if self.direction == 'UP': wm.popup_menu(draw_move_up_in_layer_group, title="Options") @@ -3782,11 +3782,11 @@ def remove_layer(yp, index, remove_on_disk=False): def draw_remove_group(self, context): col = self.layout.column() - c = col.operator("node.y_remove_layer", text='Remove parent only', icon='PANEL_CLOSE') + c = col.operator("material.y_remove_layer", text='Remove parent only', icon='PANEL_CLOSE') c.remove_children = False c.remove_on_disk = False - c = col.operator("node.y_remove_layer", text='Remove parent with all of its children', icon='PANEL_CLOSE') + c = col.operator("material.y_remove_layer", text='Remove parent with all of its children', icon='PANEL_CLOSE') c.remove_children = True c.remove_on_disk = False @@ -3794,12 +3794,12 @@ def draw_remove_group(self, context): col.separator() col.alert = True col.label(text='Danger Zone', icon='ERROR') - c = col.operator("node.y_remove_layer", text='Remove parent with all of its children and files on disk (WARNING: NO PROMPT & NO UNDO!)', icon='PANEL_CLOSE') + c = col.operator("material.y_remove_layer", text='Remove parent with all of its children and files on disk (WARNING: NO PROMPT & NO UNDO!)', icon='PANEL_CLOSE') c.remove_children = True c.remove_on_disk = True class YRemoveLayerMenu(bpy.types.Operator): - bl_idname = "node.y_remove_layer_menu" + bl_idname = "material.y_remove_layer_menu" bl_label = "Remove Layer Menu" bl_description = "Remove Layer Menu" #bl_options = {'REGISTER', 'UNDO'} @@ -3815,7 +3815,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayer(bpy.types.Operator): - bl_idname = "node.y_remove_layer" + bl_idname = "material.y_remove_layer" bl_label = "Remove Layer" bl_description = "Remove Layer" bl_options = {'UNDO'} @@ -4187,7 +4187,7 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): layer.expand_source = layer.type not in {'IMAGE', 'VCOL'} or (image != None and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) class YReplaceLayerChannelOverride(bpy.types.Operator): - bl_idname = "node.y_replace_layer_channel_override" + bl_idname = "material.y_replace_layer_channel_override" bl_label = "Replace Layer Channel Override" bl_description = "Replace Layer Channel Override" bl_options = {'REGISTER', 'UNDO'} @@ -4214,7 +4214,7 @@ def execute(self, context): return {'FINISHED'} class YReplaceLayerChannelOverride1(bpy.types.Operator): - bl_idname = "node.y_replace_layer_channel_override_1" + bl_idname = "material.y_replace_layer_channel_override_1" bl_label = "Replace Layer Channel Normal Override" bl_description = "Replace Layer Channel Normal Override" bl_options = {'REGISTER', 'UNDO'} @@ -4241,7 +4241,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayerChannelOverrideSource(bpy.types.Operator): - bl_idname = "node.y_remove_channel_override_source" + bl_idname = "material.y_remove_channel_override_source" bl_label = "Replace Layer Channel Override Source" bl_description = "Replace Layer Channel Override Source" bl_options = {'REGISTER', 'UNDO'} @@ -4261,7 +4261,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayerChannelOverride1Source(bpy.types.Operator): - bl_idname = "node.y_remove_channel_override_1_source" + bl_idname = "material.y_remove_channel_override_1_source" bl_label = "Replace Layer Channel Normal Override Source" bl_description = "Replace Layer Channel Normal Override Source" bl_options = {'REGISTER', 'UNDO'} @@ -4281,7 +4281,7 @@ def execute(self, context): return {'FINISHED'} class YSetLayerChannelNormalBlendType(bpy.types.Operator): - bl_idname = "node.y_set_layer_channel_normal_blend_type" + bl_idname = "material.y_set_layer_channel_normal_blend_type" bl_label = "Set Layer Channel Normal Blend Type" bl_description = "Set layer channel normal blend type" bl_options = {'UNDO'} @@ -4305,7 +4305,7 @@ def execute(self, context): return {'FINISHED'} class YSetLayerChannelBlendType(bpy.types.Operator): - bl_idname = "node.y_set_layer_channel_blend_type" + bl_idname = "material.y_set_layer_channel_blend_type" bl_label = "Set Layer Channel Blend Type" bl_description = "Set layer channel blend type" bl_options = {'UNDO'} @@ -4329,7 +4329,7 @@ def execute(self, context): return {'FINISHED'} class YSetLayerChannelInput(bpy.types.Operator): - bl_idname = "node.y_set_layer_channel_input" + bl_idname = "material.y_set_layer_channel_input" bl_label = "Set Layer Channel Input" bl_description = "Set layer channel input" bl_options = {'UNDO'} @@ -4381,7 +4381,7 @@ def execute(self, context): return {'FINISHED'} class YReplaceLayerType(bpy.types.Operator): - bl_idname = "node.y_replace_layer_type" + bl_idname = "material.y_replace_layer_type" bl_label = "Replace Layer Type" bl_description = "Replace Layer Type" bl_options = {'REGISTER', 'UNDO'} @@ -4776,7 +4776,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate already_copied_ids.append(j) class YDuplicateLayer(bpy.types.Operator): - bl_idname = "node.y_duplicate_layer" + bl_idname = "material.y_duplicate_layer" bl_label = "Duplicate layer" bl_description = "Duplicate Layer" bl_options = {'UNDO'} @@ -4962,7 +4962,7 @@ def execute(self, context): return {'FINISHED'} class YCopyLayer(bpy.types.Operator): - bl_idname = "node.y_copy_layer" + bl_idname = "material.y_copy_layer" bl_label = "Copy Layer" bl_description = "Copy Layer" bl_options = {'REGISTER', 'UNDO'} @@ -4991,7 +4991,7 @@ def execute(self, context): return {'FINISHED'} class YPasteLayer(bpy.types.Operator): - bl_idname = "node.y_paste_layer" + bl_idname = "material.y_paste_layer" bl_label = "Paste Layer" bl_description = "Paste Layer" bl_options = {'UNDO'} @@ -5230,7 +5230,7 @@ def execute(self, context): return {'FINISHED'} class YSelectDecalObject(bpy.types.Operator): - bl_idname = "node.y_select_decal_object" + bl_idname = "material.y_select_decal_object" bl_label = "Select Decal Object" bl_description = "Select Decal Object" bl_options = {'REGISTER', 'UNDO'} @@ -5268,7 +5268,7 @@ def execute(self, context): return {'FINISHED'} class YSetDecalObjectPositionToCursor(bpy.types.Operator): - bl_idname = "node.y_set_decal_object_position_to_sursor" + bl_idname = "material.y_set_decal_object_position_to_sursor" bl_label = "Set Decal Position to Cursor" bl_description = "Set the position of the decal object to the 3D cursor" bl_options = {'REGISTER', 'UNDO'} diff --git a/ListItem.py b/ListItem.py index e9f82820..b5b6d5fd 100644 --- a/ListItem.py +++ b/ListItem.py @@ -213,7 +213,7 @@ class YListItem(bpy.types.PropertyGroup): ) class YRefreshListItems(bpy.types.Operator): - bl_idname = "node.y_refresh_list_items" + bl_idname = "material.y_refresh_list_items" bl_label = "Refresh List Items" bl_description = "Refresh List Items" bl_options = {'REGISTER', 'UNDO'} diff --git a/Mask.py b/Mask.py index fef59ddc..ff69e88f 100644 --- a/Mask.py +++ b/Mask.py @@ -522,7 +522,7 @@ def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_ mask.expand_source = mask.type not in {'IMAGE'} or (image != None and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) class YNewLayerMask(bpy.types.Operator): - bl_idname = "node.y_new_layer_mask" + bl_idname = "material.y_new_layer_mask" bl_label = "New Layer Mask" bl_description = "New Layer Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1024,7 +1024,7 @@ def execute(self, context): class YOpenImageAsMask(bpy.types.Operator, ImportHelper): """Open Image as Mask""" - bl_idname = "node.y_open_image_as_mask" + bl_idname = "material.y_open_image_as_mask" bl_label = "Open Image as Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1282,7 +1282,7 @@ def update_available_data_name_as_mask(self, context): self.source_input = 'RGB' class YOpenAvailableDataAsMask(bpy.types.Operator): - bl_idname = "node.y_open_available_data_as_mask" + bl_idname = "material.y_open_available_data_as_mask" bl_label = "Open available data as Layer Mask" bl_description = "Open available data as Layer Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1552,7 +1552,7 @@ def execute(self, context): return {'FINISHED'} class YMoveLayerMask(bpy.types.Operator): - bl_idname = "node.y_move_layer_mask" + bl_idname = "material.y_move_layer_mask" bl_label = "Move Layer Mask" bl_description = "Move layer mask" bl_options = {'REGISTER', 'UNDO'} @@ -1625,7 +1625,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayerMask(bpy.types.Operator): - bl_idname = "node.y_remove_layer_mask" + bl_idname = "material.y_remove_layer_mask" bl_label = "Remove Layer Mask" bl_description = "Remove Layer Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1722,7 +1722,7 @@ def execute(self, context): return {'FINISHED'} class YReplaceMaskType(bpy.types.Operator): - bl_idname = "node.y_replace_mask_type" + bl_idname = "material.y_replace_mask_type" bl_label = "Replace Mask Type" bl_description = "Replace Mask Type" bl_options = {'REGISTER', 'UNDO'} @@ -1812,7 +1812,7 @@ def execute(self, context): class YFixEdgeDetectAO(bpy.types.Operator): """Eevee Ambient Occlusion must be enabled to make edge detect mask to work""" - bl_idname = "node.y_fix_edge_detect_ao" + bl_idname = "material.y_fix_edge_detect_ao" bl_label = "Fix Edge Detect Mask AO" bl_options = {'REGISTER', 'UNDO'} diff --git a/MaskModifier.py b/MaskModifier.py index 228968c8..b1f2dd2c 100644 --- a/MaskModifier.py +++ b/MaskModifier.py @@ -126,7 +126,7 @@ def draw_modifier_properties(tree, m, layout): curve.draw_buttons_ext(bpy.context, layout) class YNewMaskModifier(bpy.types.Operator): - bl_idname = "node.y_new_mask_modifier" + bl_idname = "material.y_new_mask_modifier" bl_label = "New Mask Modifier" bl_description = "New Mask Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -159,7 +159,7 @@ def execute(self, context): return {'FINISHED'} class YMoveMaskModifier(bpy.types.Operator): - bl_idname = "node.y_move_mask_modifier" + bl_idname = "material.y_move_mask_modifier" bl_label = "Move Mask Modifier" bl_description = "Move Mask Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -214,7 +214,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveMaskModifier(bpy.types.Operator): - bl_idname = "node.y_remove_mask_modifier" + bl_idname = "material.y_remove_mask_modifier" bl_label = "Remove Mask Modifier" bl_description = "Remove Mask Modifier" bl_options = {'REGISTER', 'UNDO'} diff --git a/Modifier.py b/Modifier.py index aea1a5a2..ac57e52e 100644 --- a/Modifier.py +++ b/Modifier.py @@ -117,7 +117,7 @@ def add_new_modifier(parent, modifier_type): return m class YNewYPaintModifier(bpy.types.Operator): - bl_idname = "node.y_new_ypaint_modifier" + bl_idname = "material.y_new_ypaint_modifier" bl_label = "New " + get_addon_title() + " Modifier" bl_description = "New " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -179,7 +179,7 @@ def execute(self, context): return {'FINISHED'} class YMoveYPaintModifier(bpy.types.Operator): - bl_idname = "node.y_move_ypaint_modifier" + bl_idname = "material.y_move_ypaint_modifier" bl_label = "Move " + get_addon_title() + " Modifier" bl_description = "Move " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -244,7 +244,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveYPaintModifier(bpy.types.Operator): - bl_idname = "node.y_remove_ypaint_modifier" + bl_idname = "material.y_remove_ypaint_modifier" bl_label = "Remove " + get_addon_title() + " Modifier" bl_description = "Remove " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} diff --git a/NormalMapModifier.py b/NormalMapModifier.py index 7e1f2931..66381016 100644 --- a/NormalMapModifier.py +++ b/NormalMapModifier.py @@ -25,7 +25,7 @@ def add_new_normalmap_modifier(ch, layer, modifier_type): check_modifier_nodes(m, tree) class YNewNormalmapModifier(bpy.types.Operator): - bl_idname = "node.y_new_normalmap_modifier" + bl_idname = "material.y_new_normalmap_modifier" bl_label = "New Normal Map Modifier" bl_description = "New Normal Map Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -65,7 +65,7 @@ def execute(self, context): return {'FINISHED'} class YMoveNormalMapModifier(bpy.types.Operator): - bl_idname = "node.y_move_normalmap_modifier" + bl_idname = "material.y_move_normalmap_modifier" bl_label = "Move " + get_addon_title() + " Modifier" bl_description = "Move " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -133,7 +133,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveNormalMapModifier(bpy.types.Operator): - bl_idname = "node.y_remove_normalmap_modifier" + bl_idname = "material.y_remove_normalmap_modifier" bl_label = "Remove " + get_addon_title() + " Modifier" bl_description = "Remove " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} diff --git a/Root.py b/Root.py index fc98f52b..0ea09794 100644 --- a/Root.py +++ b/Root.py @@ -423,7 +423,7 @@ def execute(self, context): return {'FINISHED'} class YQuickYPaintNodeSetup(bpy.types.Operator): - bl_idname = "node.y_quick_ypaint_node_setup" + bl_idname = "material.y_quick_ypaint_node_setup" bl_label = "Quick " + get_addon_title() + " Node Setup" bl_description = "Quick " + get_addon_title() + " Node Setup" bl_options = {'REGISTER', 'UNDO'} @@ -797,7 +797,7 @@ def execute(self, context): return {'FINISHED'} class YNewYPaintNode(bpy.types.Operator): - bl_idname = "node.y_add_new_ypaint_node" + bl_idname = "material.y_add_new_ypaint_node" bl_label = "Add new " + get_addon_title() + " Node" bl_description = "Add new " + get_addon_title() + " node" bl_options = {'REGISTER', 'UNDO'} @@ -1033,7 +1033,7 @@ def do_alpha_setup(mat, node, channel): tree.links.new(alpha_output, target_socket) class YConnectYPaintChannelAlpha(bpy.types.Operator): - bl_idname = "node.y_connect_ypaint_channel_alpha" + bl_idname = "material.y_connect_ypaint_channel_alpha" bl_label = "Connect " + get_addon_title() + " Channel Alpha" bl_description = "Connect " + get_addon_title() + " channel alpha to other nodes" bl_options = {'REGISTER', 'UNDO'} @@ -1043,7 +1043,7 @@ def execute(self, context): return {'FINISHED'} class YConnectYPaintChannel(bpy.types.Operator): - bl_idname = "node.y_connect_ypaint_channel" + bl_idname = "material.y_connect_ypaint_channel" bl_label = "Connect " + get_addon_title() + " Channel" bl_description = "Connect " + get_addon_title() + " channel to other nodes" bl_options = {'REGISTER', 'UNDO'} @@ -1105,7 +1105,7 @@ def execute(self, context): return {'FINISHED'} class YNewYPaintChannel(bpy.types.Operator): - bl_idname = "node.y_add_new_ypaint_channel" + bl_idname = "material.y_add_new_ypaint_channel" bl_label = "Add new " + get_addon_title() + " Channel" bl_description = "Add new " + get_addon_title() + " channel" bl_options = {'REGISTER', 'UNDO'} @@ -1322,7 +1322,7 @@ def execute(self, context): return {'FINISHED'} class YMoveYPaintChannel(bpy.types.Operator): - bl_idname = "node.y_move_ypaint_channel" + bl_idname = "material.y_move_ypaint_channel" bl_label = "Move " + get_addon_title() + " Channel" bl_description = "Move " + get_addon_title() + " channel" bl_options = {'REGISTER', 'UNDO'} @@ -1409,7 +1409,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveYPaintChannel(bpy.types.Operator): - bl_idname = "node.y_remove_ypaint_channel" + bl_idname = "material.y_remove_ypaint_channel" bl_label = "Remove " + get_addon_title() + " Channel" bl_description = "Remove " + get_addon_title() + " channel" bl_options = {'REGISTER', 'UNDO'} @@ -1652,7 +1652,7 @@ def execute(self, context): return {'FINISHED'} class YAddSimpleUVs(bpy.types.Operator): - bl_idname = "node.y_add_simple_uvs" + bl_idname = "material.y_add_simple_uvs" bl_label = "Add simple UVs" bl_description = "Add Simple UVs" bl_options = {'REGISTER', 'UNDO'} @@ -1675,7 +1675,7 @@ def execute(self, context): return {'FINISHED'} class YFixChannelMissmatch(bpy.types.Operator): - bl_idname = "node.y_fix_channel_missmatch" + bl_idname = "material.y_fix_channel_missmatch" bl_label = "Fix Channels Mistmatch" bl_description = "Fix channels missmatch because of error" bl_options = {'REGISTER', 'UNDO'} @@ -1698,7 +1698,7 @@ def execute(self, context): return {'FINISHED'} class YFixMissingUV(bpy.types.Operator): - bl_idname = "node.y_fix_missing_uv" + bl_idname = "material.y_fix_missing_uv" bl_label = "Fix missing UV" bl_description = "Fix missing UV" bl_options = {'REGISTER', 'UNDO'} @@ -1804,7 +1804,7 @@ def execute(self, context): return {'FINISHED'} class YRenameYPaintTree(bpy.types.Operator): - bl_idname = "node.y_rename_ypaint_tree" + bl_idname = "material.y_rename_ypaint_tree" bl_label = "Rename " + get_addon_title() + " Group Name" bl_description = "Rename " + get_addon_title() + " Group Name" bl_options = {'REGISTER', 'UNDO'} @@ -1832,7 +1832,7 @@ def execute(self, context): return {'FINISHED'} class YChangeActiveYPaintNode(bpy.types.Operator): - bl_idname = "node.y_change_active_ypaint_node" + bl_idname = "material.y_change_active_ypaint_node" bl_label = "Change Active " + get_addon_title() + " Node" bl_description = "Change Active " + get_addon_title() + " Node" bl_options = {'REGISTER', 'UNDO'} @@ -1899,7 +1899,7 @@ def duplicate_mat(mat): return mat.copy() class YDuplicateYPNodes(bpy.types.Operator): - bl_idname = "node.y_duplicate_yp_nodes" + bl_idname = "material.y_duplicate_yp_nodes" bl_label = "Duplicate " + get_addon_title() + " Nodes" bl_description = get_addon_title() + " doesn't work with more than one user! Duplicate to make it single user" bl_options = {'REGISTER', 'UNDO'} @@ -2092,7 +2092,7 @@ def fix_missing_img(name, src, is_mask=False): src.image = img class YOptimizeNormalProcess(bpy.types.Operator): - bl_idname = "node.y_optimize_normal_process" + bl_idname = "material.y_optimize_normal_process" bl_label = "Optimize Normal Process" bl_description = "Optimize normal process by not processing normal input when it's not connected" bl_options = {'REGISTER', 'UNDO'} @@ -2118,7 +2118,7 @@ def execute(self, context): return {'FINISHED'} class YFixMissingData(bpy.types.Operator): - bl_idname = "node.y_fix_missing_data" + bl_idname = "material.y_fix_missing_data" bl_label = "Fix Missing Data" bl_description = "Fix missing image/vertex color data" bl_options = {'REGISTER', 'UNDO'} @@ -2246,7 +2246,7 @@ def execute(self, context): return {'FINISHED'} class YRefreshTangentSignVcol(bpy.types.Operator): - bl_idname = "node.y_refresh_tangent_sign_vcol" + bl_idname = "material.y_refresh_tangent_sign_vcol" bl_label = "Refresh Tangent Sign Vertex Colors" bl_description = "Refresh Tangent Sign Vertex Colors to make it work in Blender 2.8" bl_options = {'REGISTER', 'UNDO'} @@ -2267,7 +2267,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveYPaintNode(bpy.types.Operator): - bl_idname = "node.y_remove_yp_node" + bl_idname = "material.y_remove_yp_node" bl_label = "Remove " + get_addon_title() + " Node" bl_description = "Remove " + get_addon_title() + " node, but keep all baked channel image(s)""" bl_options = {'REGISTER', 'UNDO'} @@ -2326,7 +2326,7 @@ def execute(self, context): return {'FINISHED'} class YCleanYPCaches(bpy.types.Operator): - bl_idname = "node.y_clean_yp_caches" + bl_idname = "material.y_clean_yp_caches" bl_label = "Clean " + get_addon_title() + " Caches" bl_description = "Clean " + get_addon_title() + " caches""" bl_options = {'REGISTER', 'UNDO'} diff --git a/Test.py b/Test.py index ae9b3ca7..7409f34d 100644 --- a/Test.py +++ b/Test.py @@ -14,7 +14,7 @@ def run_tests(): class YRunAutomatedTest(bpy.types.Operator): - bl_idname = "node.y_run_automated_test" + bl_idname = "material.y_run_automated_test" bl_label = "Run Automated Test" bl_options = {'UNDO'} diff --git a/UDIM.py b/UDIM.py index 5c370e40..e77cec4d 100644 --- a/UDIM.py +++ b/UDIM.py @@ -529,7 +529,7 @@ def remove_tile(image, tilenum): remove_tiles(image, [tilenum]) class YRefillUDIMTiles(bpy.types.Operator): - bl_idname = "node.y_refill_udim_tiles" + bl_idname = "material.y_refill_udim_tiles" bl_label = "Refill UDIM Tiles" bl_description = "Refill all UDIM tiles used by all layers and masks based on their UV" bl_options = {'REGISTER', 'UNDO'} diff --git a/bake_common.py b/bake_common.py index 516fdb15..a0760ad0 100644 --- a/bake_common.py +++ b/bake_common.py @@ -585,7 +585,7 @@ def prepare_bake_settings( uv_layers = get_uv_layers(obj) if len(uv_layers) == 0: scene.objects.active = obj - bpy.ops.node.y_add_simple_uvs() + bpy.ops.material.y_add_simple_uvs() if scene.objects.active != ori_active_object: scene.objects.active = ori_active_object diff --git a/image_ops.py b/image_ops.py index a577fede..cbac21a6 100644 --- a/image_ops.py +++ b/image_ops.py @@ -314,7 +314,7 @@ def save_pack_all(yp): class YInvertImage(bpy.types.Operator): """Invert Image""" - bl_idname = "node.y_invert_image" + bl_idname = "material.y_invert_image" bl_label = "Invert Image" bl_options = {'REGISTER', 'UNDO'} @@ -351,7 +351,7 @@ def execute(self, context): class YRefreshImage(bpy.types.Operator): """Reload Image""" - bl_idname = "node.y_reload_image" + bl_idname = "material.y_reload_image" bl_label = "Reload Image" bl_options = {'REGISTER', 'UNDO'} @@ -372,7 +372,7 @@ def execute(self, context): class YPackImage(bpy.types.Operator): """Pack Image""" - bl_idname = "node.y_pack_image" + bl_idname = "material.y_pack_image" bl_label = "Pack Image" bl_options = {'REGISTER', 'UNDO'} @@ -442,7 +442,7 @@ def execute(self, context): class YSaveImage(bpy.types.Operator): """Save Image""" - bl_idname = "node.y_save_image" + bl_idname = "material.y_save_image" bl_label = "Save Image" bl_options = {'REGISTER', 'UNDO'} @@ -594,7 +594,7 @@ def remove_unpacked_image_path(image, filepath, default_dir, default_dir_found, class YSaveAllBakedImages(bpy.types.Operator): """Save All Baked Images to directory""" - bl_idname = "node.y_save_all_baked_images" + bl_idname = "material.y_save_all_baked_images" bl_label = "Save All Baked Images" bl_options = {'REGISTER', 'UNDO'} @@ -817,7 +817,7 @@ def get_file_format_items(): class YSaveAsImage(bpy.types.Operator, ExportHelper): """Save As Image""" - bl_idname = "node.y_save_as_image" + bl_idname = "material.y_save_as_image" bl_label = "Save As Image" bl_options = {'REGISTER', 'UNDO'} @@ -1175,7 +1175,7 @@ def execute(self, context): class YSavePackAll(bpy.types.Operator): """Save and Pack All Image Layers""" - bl_idname = "node.y_save_pack_all" + bl_idname = "material.y_save_pack_all" bl_label = "Save and Pack All Image Layers" bl_options = {'REGISTER', 'UNDO'} diff --git a/tests/test_quicksetup.py b/tests/test_quicksetup.py index 7a765fa4..2599dbe8 100644 --- a/tests/test_quicksetup.py +++ b/tests/test_quicksetup.py @@ -22,14 +22,14 @@ def get_texdir(): class TestPrincipled(unittest.TestCase): def test_00_principled(self): # Quick Setup - bpy.ops.node.y_quick_ypaint_node_setup(type='BSDF_PRINCIPLED') + bpy.ops.material.y_quick_ypaint_node_setup(type='BSDF_PRINCIPLED') # Get yp yp = get_yp() self.assertTrue(yp != None) def test_99_remove_yp_node(self): - bpy.ops.node.y_remove_yp_node() + bpy.ops.material.y_remove_yp_node() # Get yp yp = get_yp() @@ -38,7 +38,7 @@ def test_99_remove_yp_node(self): class TestNewLayer(TestPrincipled): def test_01_new_layer(self): # Add new image layer - bpy.ops.node.y_new_layer(name='Image', uv_map='UVMap') + bpy.ops.material.y_new_layer(name='Image', uv_map='UVMap') yp = get_yp() self.assertTrue(len(yp.layers) == 1) @@ -46,7 +46,7 @@ def test_01_new_layer(self): class TestNewLayerWithMask(TestPrincipled): def test_01_new_layer_with_mask(self): # Add new solid color layer with image mask - bpy.ops.node.y_new_layer(name='Solid Color', type='COLOR', uv_map='UVMap', add_mask=True, mask_uv_name='UVMap') + bpy.ops.material.y_new_layer(name='Solid Color', type='COLOR', uv_map='UVMap', add_mask=True, mask_uv_name='UVMap') yp = get_yp() self.assertTrue(len(yp.layers) == 1) @@ -56,7 +56,7 @@ def test_01_open_image_to_layer(self): texdir = get_texdir() # Open image as layer - bpy.ops.node.y_open_image_to_layer( + bpy.ops.material.y_open_image_to_layer( files = [{"name":"blender_color.png"}], directory = texdir, uv_map="UVMap" @@ -70,7 +70,7 @@ def test_01_open_images_to_single_layer_with_mask(self): texdir = get_texdir() # Open images to single layer with white mask - bpy.ops.node.y_open_images_to_single_layer( + bpy.ops.material.y_open_images_to_single_layer( files = [ {"name":"blender_color.png"}, {"name":"blender_metallic.png"}, @@ -91,7 +91,7 @@ class TestNewMask(TestOpenImageAsLayer): def test_02_new_mask(self): # New layer mask - bpy.ops.node.y_new_layer_mask(name='Image Mask', uv_name='UVMap', color_option='WHITE') + bpy.ops.material.y_new_layer_mask(name='Image Mask', uv_name='UVMap', color_option='WHITE') layer = get_active_layer() self.assertTrue(len(layer.masks) == 1) @@ -121,7 +121,7 @@ class TestDuplicateLayer(TestNewLayer): def test_02_duplicate_layer(self): # Duplicate Layer - bpy.ops.node.y_duplicate_layer() + bpy.ops.material.y_duplicate_layer() yp = get_yp() self.assertTrue(len(yp.layers) == 2) diff --git a/transition.py b/transition.py index 9e9d0e20..e5e53567 100644 --- a/transition.py +++ b/transition.py @@ -127,7 +127,7 @@ def show_transition(self, context, ttype): class YShowTransitionBump(bpy.types.Operator): """Use transition bump (This will affect other channels)""" - bl_idname = "node.y_show_transition_bump" + bl_idname = "material.y_show_transition_bump" bl_label = "Show Transition Bump" bl_options = {'REGISTER', 'UNDO'} @@ -140,7 +140,7 @@ def execute(self, context): class YShowTransitionRamp(bpy.types.Operator): """Use transition ramp (Works best if there's transition bump enabled on other channel)""" - bl_idname = "node.y_show_transition_ramp" + bl_idname = "material.y_show_transition_ramp" bl_label = "Show Transition Ramp" bl_options = {'REGISTER', 'UNDO'} @@ -153,7 +153,7 @@ def execute(self, context): class YShowTransitionAO(bpy.types.Operator): """Use transition AO (Only works if there's transition bump enabled on other channel)""" - bl_idname = "node.y_show_transition_ao" + bl_idname = "material.y_show_transition_ao" bl_label = "Show Transition AO" bl_options = {'REGISTER', 'UNDO'} @@ -166,7 +166,7 @@ def execute(self, context): class YHideTransitionEffect(bpy.types.Operator): """Remove transition Effect""" - bl_idname = "node.y_hide_transition_effect" + bl_idname = "material.y_hide_transition_effect" bl_label = "Hide Transition Effect" bl_options = {'REGISTER', 'UNDO'} diff --git a/ui.py b/ui.py index 5dc639f8..f46e54a4 100644 --- a/ui.py +++ b/ui.py @@ -183,7 +183,7 @@ def draw_bake_info(bake_info, layout, entity): if is_bl_newer_than(2, 79): brow.label(text=oo.object.name, icon_value=lib.get_icon('object_index')) else: brow.label(text=oo.object_name, icon_value=lib.get_icon('object_index')) - brow.operator('node.y_remove_bake_info_other_object', text='', icon_value=lib.get_icon('close')) + brow.operator('material.y_remove_bake_info_other_object', text='', icon_value=lib.get_icon('close')) else: brow = bcol.row() brow.label(text='No source objects found!', icon='ERROR') @@ -199,8 +199,8 @@ def draw_bake_info(bake_info, layout, entity): layout.context_pointer_set('bake_info', bi) if bi.bake_type == 'SELECTED_VERTICES': - c = layout.operator("node.y_try_to_select_baked_vertex", text='Try to Reselect Vertices', icon='GROUP_VERTEX') - c = layout.operator("node.y_bake_to_layer", text='Rebake ' + bake_type_labels[bi.bake_type], icon_value=lib.get_icon('bake')) + c = layout.operator("material.y_try_to_select_baked_vertex", text='Try to Reselect Vertices', icon='GROUP_VERTEX') + c = layout.operator("material.y_bake_to_layer", text='Rebake ' + bake_type_labels[bi.bake_type], icon_value=lib.get_icon('bake')) c.type = bi.bake_type if m1 or m3: c.target_type = 'LAYER' else: c.target_type = 'MASK' @@ -217,7 +217,7 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh split.label(text='Input:') split.prop(entity, 'source_input', text='') - unlink_op = 'node.y_remove_layer' + unlink_op = 'material.y_remove_layer' if entity: yp = entity.id_data.yp m1 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) @@ -226,14 +226,14 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh layer = yp.layers[int(m1.group(1))] col.context_pointer_set('layer', layer) col.context_pointer_set('mask', entity) - unlink_op = 'node.y_remove_layer_mask' + unlink_op = 'material.y_remove_layer_mask' elif m2: layer = yp.layers[int(m2.group(1))] col.context_pointer_set('layer', layer) col.context_pointer_set('channel', entity) if show_flip_y: - unlink_op = 'node.y_remove_channel_override_1_source' - else: unlink_op = 'node.y_remove_channel_override_source' + unlink_op = 'material.y_remove_channel_override_1_source' + else: unlink_op = 'material.y_remove_channel_override_source' if image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel: bi = image.y_bake_info @@ -890,11 +890,11 @@ def draw_bake_targets_ui(context, layout, node): #rcol.context_pointer_set('node', node) if is_bl_newer_than(2, 80): - rcol.operator("node.y_new_bake_target", icon='ADD', text='') - rcol.operator("node.y_remove_bake_target", icon='REMOVE', text='') + rcol.operator("material.y_new_bake_target", icon='ADD', text='') + rcol.operator("material.y_remove_bake_target", icon='REMOVE', text='') else: - rcol.operator("node.y_new_bake_target", icon='ZOOMIN', text='') - rcol.operator("node.y_remove_bake_target", icon='ZOOMOUT', text='') + rcol.operator("material.y_new_bake_target", icon='ZOOMIN', text='') + rcol.operator("material.y_remove_bake_target", icon='ZOOMOUT', text='') if len(yp.bake_targets) > 0: bt = yp.bake_targets[yp.active_bake_target_index] @@ -983,15 +983,15 @@ def draw_root_channels_ui(context, layout, node): if is_bl_newer_than(2, 80): rcol.menu("NODE_MT_y_new_channel_menu", text='', icon='ADD') - #rcol.operator_menu_enum("node.y_add_new_ypaint_channel", 'type', icon='ADD', text='') - rcol.operator("node.y_remove_ypaint_channel", icon='REMOVE', text='') + #rcol.operator_menu_enum("material.y_add_new_ypaint_channel", 'type', icon='ADD', text='') + rcol.operator("material.y_remove_ypaint_channel", icon='REMOVE', text='') else: rcol.menu("NODE_MT_y_new_channel_menu", text='', icon='ZOOMIN') - #rcol.operator_menu_enum("node.y_add_new_ypaint_channel", 'type', icon='ZOOMIN', text='') - rcol.operator("node.y_remove_ypaint_channel", icon='ZOOMOUT', text='') + #rcol.operator_menu_enum("material.y_add_new_ypaint_channel", 'type', icon='ZOOMIN', text='') + rcol.operator("material.y_remove_ypaint_channel", icon='ZOOMOUT', text='') - rcol.operator("node.y_move_ypaint_channel", text='', icon='TRIA_UP').direction = 'UP' - rcol.operator("node.y_move_ypaint_channel", text='', icon='TRIA_DOWN').direction = 'DOWN' + rcol.operator("material.y_move_ypaint_channel", text='', icon='TRIA_UP').direction = 'UP' + rcol.operator("material.y_move_ypaint_channel", text='', icon='TRIA_DOWN').direction = 'DOWN' if len(yp.channels) > 0: @@ -1015,22 +1015,22 @@ def draw_root_channels_ui(context, layout, node): if is_height_input_unconnected_but_has_start_process(node, root_normal_ch): row = mcol.row(align=True) row.alert = True - row.operator('node.y_optimize_normal_process', icon='ERROR', text='Fix Height Process') + row.operator('material.y_optimize_normal_process', icon='ERROR', text='Fix Height Process') elif is_height_input_connected_but_has_no_start_process(node, root_normal_ch): row = mcol.row(align=True) row.alert = True - row.operator('node.y_optimize_normal_process', icon='ERROR', text='Fix Height Input') + row.operator('material.y_optimize_normal_process', icon='ERROR', text='Fix Height Input') if is_output_unconnected(node, output_index, channel): row = mcol.row(align=True) row.alert = True - row.operator('node.y_connect_ypaint_channel', icon='ERROR', text='Fix Unconnected Channel Output') + row.operator('material.y_connect_ypaint_channel', icon='ERROR', text='Fix Unconnected Channel Output') # Fix for alpha channel missing connection elif channel.type == 'RGB' and channel.enable_alpha and is_output_unconnected(node, output_index + 1, channel): row = mcol.row(align=True) row.alert = True - row.operator('node.y_connect_ypaint_channel_alpha', icon='ERROR', text='Fix Unconnected Alpha Output') + row.operator('material.y_connect_ypaint_channel_alpha', icon='ERROR', text='Fix Unconnected Alpha Output') row = mcol.row(align=True) @@ -1470,7 +1470,7 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i if layer.use_temp_bake: row = row.row(align=True) - row.operator('node.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') + row.operator('material.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') if layer.type not in {'GROUP', 'PREFERENCES'}: #icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' @@ -1554,7 +1554,7 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i if layer.use_temp_bake: rrcol.context_pointer_set('parent', layer) - rrcol.operator('node.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') + rrcol.operator('material.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') elif image: draw_image_props(context, source, rrcol, layer, show_flip_y=True, show_datablock=False) @@ -1677,12 +1677,12 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') if is_bl_newer_than(2, 80): - rrow.operator('node.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') - else: rrow.operator('node.y_select_decal_object', icon='EMPTY_DATA') + rrow.operator('material.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') + else: rrow.operator('material.y_select_decal_object', icon='EMPTY_DATA') rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') - rrow.operator('node.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') + rrow.operator('material.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') if layer.texcoord_type != 'Decal' and not is_using_image_atlas: mapping = get_layer_mapping(layer) @@ -1726,7 +1726,7 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') rrow.alert = True - rrow.operator('node.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + rrow.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') # Blur row rrow = boxcol.row(align=True) @@ -2159,7 +2159,7 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): brow.alert = True brow.context_pointer_set('channel', ch) brow.context_pointer_set('image', image) - brow.operator('node.y_refresh_neighbor_uv', icon='ERROR') + brow.operator('material.y_refresh_neighbor_uv', icon='ERROR') if ch.show_transition_bump or ch.enable_transition_bump: @@ -2861,7 +2861,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rbcol.active = not mask.use_baked if mask.use_temp_bake: rbcol.context_pointer_set('parent', mask) - rbcol.operator('node.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') + rbcol.operator('material.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') elif mask_image: draw_image_props(context, mask_source, rbcol, mask, show_datablock=False, show_source_input=True) elif mask.type == 'HEMI': @@ -2882,7 +2882,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rrcol.context_pointer_set('entity', mask) rrrow = rrcol.row(align=True) rrrow.label(text='', icon='BLANK1') - rrrow.operator("node.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) + rrrow.operator("material.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) rrrow.prop(mask, 'use_baked', text='Use Baked', toggle=True) if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: @@ -2966,9 +2966,9 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): boxcol.context_pointer_set('entity', mask) if is_bl_newer_than(2, 80): - boxcol.operator('node.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') - else: boxcol.operator('node.y_select_decal_object', icon='EMPTY_DATA') - boxcol.operator('node.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') + boxcol.operator('material.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') + else: boxcol.operator('material.y_select_decal_object', icon='EMPTY_DATA') + boxcol.operator('material.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') if mask.texcoord_type != 'Decal' and not is_using_image_atlas: mapping = get_mask_mapping(mask) @@ -3010,7 +3010,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): ): rrow = boxcol.row(align=True) rrow.alert = True - rrow.operator('node.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + rrow.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') # Blur row if mask.texcoord_type != 'Layer': @@ -3047,7 +3047,7 @@ def draw_layers_ui(context, layout, node): if group_tree.users > 1: row = box.row(align=True) row.alert = True - op = row.operator("node.y_duplicate_yp_nodes", text='Fix Multi-User ' + get_addon_title() + ' Node', icon='ERROR') + op = row.operator("material.y_duplicate_yp_nodes", text='Fix Multi-User ' + get_addon_title() + ' Node', icon='ERROR') op.duplicate_node = True op.duplicate_material = False op.only_active = True @@ -3177,7 +3177,7 @@ def draw_layers_ui(context, layout, node): if is_a_mesh and not uv_found: row = box.row(align=True) row.alert = True - row.operator("node.y_add_simple_uvs", icon='ERROR') + row.operator("material.y_add_simple_uvs", icon='ERROR') row.alert = False return @@ -3200,7 +3200,7 @@ def draw_layers_ui(context, layout, node): if channel_mismatch: row = box.row(align=True) row.alert = True - row.operator("node.y_fix_channel_missmatch", text='Fix Missmatched Channels!', icon='ERROR') + row.operator("material.y_fix_channel_missmatch", text='Fix Missmatched Channels!', icon='ERROR') row.alert = False return @@ -3230,7 +3230,7 @@ def draw_layers_ui(context, layout, node): # ): # row = box.row(align=True) # row.alert = True - # row.operator("node.y_fix_duplicated_yp_nodes", text='Fix Duplicated Layers', icon='ERROR') + # row.operator("material.y_fix_duplicated_yp_nodes", text='Fix Duplicated Layers', icon='ERROR') # row.alert = False # #box.prop(ypui, 'make_image_single_user') # return @@ -3291,7 +3291,7 @@ def draw_layers_ui(context, layout, node): if missing_data: row = box.row(align=True) row.alert = True - row.operator("node.y_fix_missing_data", icon='ERROR') + row.operator("material.y_fix_missing_data", icon='ERROR') row.alert = False return @@ -3333,7 +3333,7 @@ def draw_layers_ui(context, layout, node): row = box.row(align=True) row.alert = True title = 'UV ' + uv_name + ' is missing or renamed!' - row.operator("node.y_fix_missing_uv", text=title, icon='ERROR').source_uv_name = uv_name + row.operator("material.y_fix_missing_uv", text=title, icon='ERROR').source_uv_name = uv_name #print(entities) row.alert = False @@ -3349,7 +3349,7 @@ def draw_layers_ui(context, layout, node): if need_tangent_refresh: row = box.row(align=True) row.alert = True - row.operator('node.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent Sign Hacks is missing!') + row.operator('material.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent Sign Hacks is missing!') row.alert = False # Get active item entity @@ -3450,7 +3450,7 @@ def draw_layers_ui(context, layout, node): if ypup.layer_list_mode in {'DYNAMIC', 'BOTH'}: if ypup.layer_list_mode == 'BOTH': - rcol.operator('node.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Items') + rcol.operator('material.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Items') rcol.template_list("NODE_UL_YPaint_list_items", "", yp, "list_items", yp, "active_item_index", rows=5, maxrows=5) @@ -3464,54 +3464,54 @@ def draw_layers_ui(context, layout, node): if has_children(layer): # or (image and not image.packed_file): if is_bl_newer_than(2, 80): - rcol.operator("node.y_remove_layer_menu", icon='REMOVE', text='') - else: rcol.operator("node.y_remove_layer_menu", icon='ZOOMOUT', text='') + rcol.operator("material.y_remove_layer_menu", icon='REMOVE', text='') + else: rcol.operator("material.y_remove_layer_menu", icon='ZOOMOUT', text='') else: if is_bl_newer_than(2, 80): - c = rcol.operator("node.y_remove_layer", icon='REMOVE', text='') - else: c = rcol.operator("node.y_remove_layer", icon='ZOOMOUT', text='') + c = rcol.operator("material.y_remove_layer", icon='REMOVE', text='') + else: c = rcol.operator("material.y_remove_layer", icon='ZOOMOUT', text='') c.remove_children = False if is_top_member(layer): - c = rcol.operator("node.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') + c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') c.direction = 'UP' c.move_out = True else: upper_idx, upper_layer = get_upper_neighbor(layer) if upper_layer and (upper_layer.type == 'GROUP' or upper_layer.parent_idx != layer.parent_idx): - c = rcol.operator("node.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') + c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') c.direction = 'UP' c.move_out = False else: - c = rcol.operator("node.y_move_layer", text='', icon='TRIA_UP') + c = rcol.operator("material.y_move_layer", text='', icon='TRIA_UP') c.direction = 'UP' if is_bottom_member(layer): - c = rcol.operator("node.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') + c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') c.direction = 'DOWN' c.move_out = True else: lower_idx, lower_layer = get_lower_neighbor(layer) if lower_layer and (lower_layer.type == 'GROUP' and lower_layer.parent_idx == layer.parent_idx): - c = rcol.operator("node.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') + c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') c.direction = 'DOWN' c.move_out = False else: - c = rcol.operator("node.y_move_layer", text='', icon='TRIA_DOWN') + c = rcol.operator("material.y_move_layer", text='', icon='TRIA_DOWN') c.direction = 'DOWN' else: if is_bl_newer_than(2, 80): - rcol.operator("node.y_remove_layer", icon='REMOVE', text='') - else: rcol.operator("node.y_remove_layer", icon='ZOOMOUT', text='') + rcol.operator("material.y_remove_layer", icon='REMOVE', text='') + else: rcol.operator("material.y_remove_layer", icon='ZOOMOUT', text='') - rcol.operator("node.y_move_layer", text='', icon='TRIA_UP').direction = 'UP' - rcol.operator("node.y_move_layer", text='', icon='TRIA_DOWN').direction = 'DOWN' + rcol.operator("material.y_move_layer", text='', icon='TRIA_UP').direction = 'UP' + rcol.operator("material.y_move_layer", text='', icon='TRIA_DOWN').direction = 'DOWN' rcol.menu("NODE_MT_y_layer_list_special_menu", text='', icon='DOWNARROW_HLT') @@ -3539,7 +3539,7 @@ def draw_layers_ui(context, layout, node): # Check if any images aren't using proper linear pipelines if any_linear_images_problem(yp): col.alert = True - col.operator('node.y_use_linear_color_space', text='Refresh Linear Color Space', icon='ERROR') + col.operator('material.y_use_linear_color_space', text='Refresh Linear Color Space', icon='ERROR') col.alert = False # Check if AO is enabled or not @@ -3553,7 +3553,7 @@ def draw_layers_ui(context, layout, node): break if edge_detect_found: col.alert = True - col.operator('node.y_fix_edge_detect_ao', text='Fix EEVEE Edge Detect AO', icon='ERROR') + col.operator('material.y_fix_edge_detect_ao', text='Fix EEVEE Edge Detect AO', icon='ERROR') col.alert = False if obj.type == 'MESH' and colorid_vcol: @@ -3687,18 +3687,18 @@ def draw_layers_ui(context, layout, node): bbox = col.box() row = bbox.row(align=True) row.alert = True - row.operator('node.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + row.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') elif obj.data.uv_layers.active.name == TEMP_UV: bbox = col.box() row = bbox.row(align=True) row.alert = True - row.operator('node.y_back_to_original_uv', icon='EDITMODE_HLT', text='Edit Original UV') + row.operator('material.y_back_to_original_uv', icon='EDITMODE_HLT', text='Edit Original UV') else: if yp.need_temp_uv_refresh or is_active_uv_map_missmatch_active_entity(obj, layer): bbox = col.box() row = bbox.row(align=True) row.alert = True - row.operator('node.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + row.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') if is_a_mesh and is_bl_newer_than(3, 2): height_layer_ch = get_height_channel(layer) @@ -3724,7 +3724,7 @@ def draw_layers_ui(context, layout, node): cbox = bbox.column() row = cbox.row(align=True) row.alert = True - row.operator('node.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Layer List') + row.operator('material.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Layer List') row.alert = False specific_ch = None @@ -3789,7 +3789,7 @@ def draw_test_ui(context, layout): col.label(text='Run test with default cube scene!') if obj and obj.name == 'Cube' and mat and mat.name == 'Material' and not node: - col.operator('node.y_run_automated_test') + col.operator('material.y_run_automated_test') if (wmyp.test_result_run != 0): col.label(text=pgettext_iface('Test Run Count: ') + str(wmyp.test_result_run)) @@ -3819,8 +3819,8 @@ def main_draw(self, context): layout = self.layout - #layout.operator("node.y_debug_mesh", icon='MESH_DATA') - #layout.operator("node.y_test_ray", icon='MESH_DATA') + #layout.operator("material.y_debug_mesh", icon='MESH_DATA') + #layout.operator("material.y_test_ray", icon='MESH_DATA') from . import addon_updater_ops @@ -3953,7 +3953,7 @@ def main_draw(self, context): if not node: layout.label(text="No active " + get_addon_title() + " node!", icon='ERROR') - layout.operator("node.y_quick_ypaint_node_setup", icon_value=lib.get_icon('nodetree')) + layout.operator("material.y_quick_ypaint_node_setup", icon_value=lib.get_icon('nodetree')) # Test draw_test_ui(context=context, layout=layout) @@ -3968,7 +3968,7 @@ def main_draw(self, context): col = layout.column() col.alert = True col.label(text=group_tree.name + ' (' + yp.version + ')', icon_value=lib.get_icon('nodetree')) - col.operator("node.y_update_yp_trees", text='Update node to version ' + get_current_version_str(), icon='ERROR') + col.operator("material.y_update_yp_trees", text='Update node to version ' + get_current_version_str(), icon='ERROR') return #layout.label(text='Active: ' + node.node_tree.name, icon_value=lib.get_icon('nodetree')) @@ -4004,7 +4004,7 @@ def main_draw(self, context): #if (baked_found or yp.use_baked) and not group_tree.users > 1: # rrow = row.row(align=True) # rrow.alignment = 'RIGHT' - # rrow.operator('node.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False + # rrow.operator('material.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False # rrow.separator() # rrow.prop(yp, 'use_baked', toggle=True, text='Use Baked') # rrow.prop(yp, 'enable_baked_outside', toggle=True, text='', icon='NODETREE') @@ -4033,12 +4033,12 @@ def main_draw(self, context): if scenario_1: rrow = row.row(align=True) rrow.alignment = 'RIGHT' - rrow.operator('node.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent') + rrow.operator('material.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent') if (baked_found or yp.use_baked) and not group_tree.users > 1: rrow = row.row(align=True) rrow.alignment = 'RIGHT' - rrow.operator('node.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False + rrow.operator('material.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False rrow.separator() rrow.prop(yp, 'use_baked', toggle=True, text='Use Baked') rrow.prop(yp, 'enable_baked_outside', toggle=True, text='', icon='NODETREE') @@ -4207,9 +4207,9 @@ def main_draw(self, context): col.label(text=pgettext_iface('Number of Color Ramps: ') + str(num_ramps), icon_value=lib.get_icon('modifier')) col.label(text=pgettext_iface('Number of RGB Curves: ') + str(num_curves), icon_value=lib.get_icon('modifier')) - #col.operator('node.y_new_image_atlas_segment_test', icon_value=lib.get_icon('image')) - #col.operator('node.y_new_udim_atlas_segment_test', icon_value=lib.get_icon('image')) - #col.operator('node.y_uv_transform_test', icon_value=lib.get_icon('uv')) + #col.operator('material.y_new_image_atlas_segment_test', icon_value=lib.get_icon('image')) + #col.operator('material.y_new_udim_atlas_segment_test', icon_value=lib.get_icon('image')) + #col.operator('material.y_uv_transform_test', icon_value=lib.get_icon('uv')) # Test draw_test_ui(context=context, layout=layout) @@ -5033,7 +5033,7 @@ def poll(cls, context): def draw(self, context): obj = context.object - op = self.layout.operator("node.y_open_images_from_material_to_single_layer", icon_value=lib.get_icon('image'), text='Open Material Images to Layer') + op = self.layout.operator("material.y_open_images_from_material_to_single_layer", icon_value=lib.get_icon('image'), text='Open Material Images to Layer') op.mat_name = context.mat_asset.name if hasattr(context, 'mat_asset') else '' op.asset_library_path = context.mat_asset.full_library_path if hasattr(context, 'mat_asset') else '' @@ -5083,15 +5083,15 @@ def draw(self, context): self.layout.label(text='Image: ' + filename) - op = self.layout.operator("node.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Layer") + op = self.layout.operator("material.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Layer") op.file_browser_filepath = filepath op.texcoord_type = 'UV' - op = self.layout.operator("node.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Mask") + op = self.layout.operator("material.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Mask") op.file_browser_filepath = filepath op.texcoord_type = 'UV' - op = self.layout.operator("node.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Mask for New Layer") + op = self.layout.operator("material.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Mask for New Layer") op.type = 'COLOR' op.add_mask = True op.mask_type = 'IMAGE' @@ -5100,15 +5100,15 @@ def draw(self, context): self.layout.separator() - op = self.layout.operator("node.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Layer") + op = self.layout.operator("material.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Layer") op.file_browser_filepath = filepath op.texcoord_type = 'Decal' - op = self.layout.operator("node.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask") + op = self.layout.operator("material.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask") op.file_browser_filepath = filepath op.texcoord_type = 'Decal' - op = self.layout.operator("node.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask for New Layer") + op = self.layout.operator("material.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask for New Layer") op.type = 'COLOR' op.add_mask = True op.mask_type = 'IMAGE' @@ -5226,20 +5226,20 @@ def draw(self, context): col = row.column() - col.operator('node.y_bake_channels', text='Bake All Channels', icon_value=lib.get_icon('bake')).only_active_channel = False - col.operator('node.y_rename_ypaint_tree', text='Rename Tree', icon_value=lib.get_icon('rename')) + col.operator('material.y_bake_channels', text='Bake All Channels', icon_value=lib.get_icon('bake')).only_active_channel = False + col.operator('material.y_rename_ypaint_tree', text='Rename Tree', icon_value=lib.get_icon('rename')) col.separator() - col.operator('node.y_remove_yp_node', icon_value=lib.get_icon('close')) + col.operator('material.y_remove_yp_node', icon_value=lib.get_icon('close')) col.separator() - col.operator('node.y_clean_yp_caches', icon_value=lib.get_icon('clean')) + col.operator('material.y_clean_yp_caches', icon_value=lib.get_icon('clean')) col.separator() - op = col.operator('node.y_duplicate_yp_nodes', text='Duplicate Material and ' + get_addon_title() + ' nodes', icon='COPY_ID') + op = col.operator('material.y_duplicate_yp_nodes', text='Duplicate Material and ' + get_addon_title() + ' nodes', icon='COPY_ID') op.duplicate_material = True col.separator() @@ -5251,7 +5251,7 @@ def draw(self, context): else: icon = 'RADIOBUT_OFF' #row = col.row() - col.operator('node.y_change_active_ypaint_node', text=n.node_tree.name, icon=icon).name = n.name + col.operator('material.y_change_active_ypaint_node', text=n.node_tree.name, icon=icon).name = n.name col.separator() col.label(text='Option:') @@ -5279,14 +5279,14 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() - col.operator('node.y_pack_image', icon='PACKAGE') - col.operator('node.y_save_image', icon='FILE_TICK') + col.operator('material.y_pack_image', icon='PACKAGE') + col.operator('material.y_save_image', icon='FILE_TICK') if context.image: if context.image.packed_file: - col.operator('node.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False - else: col.operator('node.y_save_as_image', text='Save As Image').copy = False - col.operator('node.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True + col.operator('material.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False + else: col.operator('material.y_save_as_image', text='Save As Image').copy = False + col.operator('material.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True class YNewChannelMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_new_channel_menu" @@ -5302,13 +5302,13 @@ def draw(self, context): col.label(text='Add New Channel') icon_value = lib.get_icon(lib.channel_custom_icon_dict['VALUE']) - col.operator("node.y_add_new_ypaint_channel", icon_value=icon_value, text='Value').type = 'VALUE' + col.operator("material.y_add_new_ypaint_channel", icon_value=icon_value, text='Value').type = 'VALUE' icon_value = lib.get_icon(lib.channel_custom_icon_dict['RGB']) - col.operator("node.y_add_new_ypaint_channel", icon_value=icon_value, text='RGB').type = 'RGB' + col.operator("material.y_add_new_ypaint_channel", icon_value=icon_value, text='RGB').type = 'RGB' icon_value = lib.get_icon(lib.channel_custom_icon_dict['NORMAL']) - col.operator("node.y_add_new_ypaint_channel", icon_value=icon_value, text='Normal').type = 'NORMAL' + col.operator("material.y_add_new_ypaint_channel", icon_value=icon_value, text='Normal').type = 'NORMAL' class YNewLayerMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_new_layer_menu" @@ -5330,56 +5330,56 @@ def draw(self, context): #col = self.layout.column(align=True) #col.context_pointer_set('group_node', context.group_node) #col.label(text='Image:') - col.operator("node.y_new_layer", text='New Image', icon_value=lib.get_icon('image')).type = 'IMAGE' + col.operator("material.y_new_layer", text='New Image', icon_value=lib.get_icon('image')).type = 'IMAGE' #col.separator() - op = col.operator("node.y_open_image_to_layer", text='Open Image...') + op = col.operator("material.y_open_image_to_layer", text='Open Image...') op.texcoord_type = 'UV' op.file_browser_filepath = '' - col.operator("node.y_open_available_data_to_layer", text='Open Available Image').type = 'IMAGE' + col.operator("material.y_open_available_data_to_layer", text='Open Available Image').type = 'IMAGE' - col.operator("node.y_open_images_to_single_layer", text='Open Images to Single Layer...') - col.operator("node.y_open_images_from_material_to_single_layer", text='Open Images from Material').asset_library_path = '' + col.operator("material.y_open_images_to_single_layer", text='Open Images to Single Layer...') + col.operator("material.y_open_images_from_material_to_single_layer", text='Open Images from Material').asset_library_path = '' # NOTE: Dedicated menu for opening images to single layer is kinda hard to see, so it's probably better be hidden for now #col.menu("NODE_MT_y_open_images_to_single_layer_menu", text='Open Images to Single Layer') col.separator() - col.operator("node.y_new_layer", icon_value=lib.get_icon('group'), text='Layer Group').type = 'GROUP' + col.operator("material.y_new_layer", icon_value=lib.get_icon('group'), text='Layer Group').type = 'GROUP' col.separator() #col.label(text='Vertex Color:') - #col.operator("node.y_new_layer", icon='GROUP_VCOL', text='New Vertex Color').type = 'VCOL' - col.operator("node.y_new_layer", icon_value=lib.get_icon('vertex_color'), text='New Vertex Color').type = 'VCOL' - col.operator("node.y_open_available_data_to_layer", text='Open Available Vertex Color').type = 'VCOL' + #col.operator("material.y_new_layer", icon='GROUP_VCOL', text='New Vertex Color').type = 'VCOL' + col.operator("material.y_new_layer", icon_value=lib.get_icon('vertex_color'), text='New Vertex Color').type = 'VCOL' + col.operator("material.y_open_available_data_to_layer", text='Open Available Vertex Color').type = 'VCOL' col.separator() #col.menu("NODE_MT_y_new_solid_color_layer_menu", text='Solid Color', icon_value=lib.get_icon('color')) icon_value = lib.get_icon("color") - c = col.operator("node.y_new_layer", icon_value=icon_value, text='Solid Color') + c = col.operator("material.y_new_layer", icon_value=icon_value, text='Solid Color') c.type = 'COLOR' c.add_mask = False - c = col.operator("node.y_new_layer", text='Solid Color w/ Image Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Image Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'IMAGE' - c = col.operator("node.y_new_layer", text='Solid Color w/ Vertex Color Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Vertex Color Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'VCOL' - c = col.operator("node.y_new_layer", text='Solid Color w/ Color ID Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Color ID Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'COLOR_ID' if is_bl_newer_than(2, 93): - c = col.operator("node.y_new_layer", text='Solid Color w/ Edge Detect Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Edge Detect Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'EDGE_DETECT' @@ -5387,15 +5387,15 @@ def draw(self, context): col.separator() #col.label(text='Background:') - c = col.operator("node.y_new_layer", icon_value=lib.get_icon('background'), text='Background w/ Image Mask') + c = col.operator("material.y_new_layer", icon_value=lib.get_icon('background'), text='Background w/ Image Mask') c.type = 'BACKGROUND' c.add_mask = True c.mask_type = 'IMAGE' #if is_bl_newer_than(2, 80): - # c = col.operator("node.y_new_layer", text='Background w/ Vertex Color Mask') - #else: c = col.operator("node.y_new_layer", text='Background w/ Vertex Color Mask') - c = col.operator("node.y_new_layer", text='Background w/ Vertex Color Mask') + # c = col.operator("material.y_new_layer", text='Background w/ Vertex Color Mask') + #else: c = col.operator("material.y_new_layer", text='Background w/ Vertex Color Mask') + c = col.operator("material.y_new_layer", text='Background w/ Vertex Color Mask') c.type = 'BACKGROUND' c.add_mask = True @@ -5403,64 +5403,64 @@ def draw(self, context): if is_bl_newer_than(3, 2): col.separator() - col.operator("node.y_new_vdm_layer", text='Vector Displacement Image', icon='SCULPTMODE_HLT') + col.operator("material.y_new_vdm_layer", text='Vector Displacement Image', icon='SCULPTMODE_HLT') col = row.column() col.label(text='Generated Layer:') - #col.operator("node.y_new_layer", icon='TEXTURE', text='Brick').type = 'BRICK' - col.operator("node.y_new_layer", icon_value=lib.get_icon('texture'), text='Brick').type = 'BRICK' - col.operator("node.y_new_layer", text='Checker').type = 'CHECKER' - col.operator("node.y_new_layer", text='Gradient').type = 'GRADIENT' - col.operator("node.y_new_layer", text='Magic').type = 'MAGIC' - if not is_bl_newer_than(4, 1): col.operator("node.y_new_layer", text='Musgrave').type = 'MUSGRAVE' - col.operator("node.y_new_layer", text='Noise').type = 'NOISE' - if is_bl_newer_than(4, 3): col.operator("node.y_new_layer", text='Gabor').type = 'GABOR' - col.operator("node.y_new_layer", text='Voronoi').type = 'VORONOI' - col.operator("node.y_new_layer", text='Wave').type = 'WAVE' + #col.operator("material.y_new_layer", icon='TEXTURE', text='Brick').type = 'BRICK' + col.operator("material.y_new_layer", icon_value=lib.get_icon('texture'), text='Brick').type = 'BRICK' + col.operator("material.y_new_layer", text='Checker').type = 'CHECKER' + col.operator("material.y_new_layer", text='Gradient').type = 'GRADIENT' + col.operator("material.y_new_layer", text='Magic').type = 'MAGIC' + if not is_bl_newer_than(4, 1): col.operator("material.y_new_layer", text='Musgrave').type = 'MUSGRAVE' + col.operator("material.y_new_layer", text='Noise').type = 'NOISE' + if is_bl_newer_than(4, 3): col.operator("material.y_new_layer", text='Gabor').type = 'GABOR' + col.operator("material.y_new_layer", text='Voronoi').type = 'VORONOI' + col.operator("material.y_new_layer", text='Wave').type = 'WAVE' col.separator() - col.operator("node.y_new_layer", icon_value=lib.get_icon('hemi'), text='Fake Lighting').type = 'HEMI' + col.operator("material.y_new_layer", icon_value=lib.get_icon('hemi'), text='Fake Lighting').type = 'HEMI' col = row.column() col.label(text='Bake as Layer:') - c = col.operator("node.y_bake_to_layer", icon_value=lib.get_icon('bake'), text='Ambient Occlusion') + c = col.operator("material.y_bake_to_layer", icon_value=lib.get_icon('bake'), text='Ambient Occlusion') c.type = 'AO' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Pointiness') + c = col.operator("material.y_bake_to_layer", text='Pointiness') c.type = 'POINTINESS' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Cavity') + c = col.operator("material.y_bake_to_layer", text='Cavity') c.type = 'CAVITY' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Dust') + c = col.operator("material.y_bake_to_layer", text='Dust') c.type = 'DUST' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Paint Base') + c = col.operator("material.y_bake_to_layer", text='Paint Base') c.type = 'PAINT_BASE' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Bevel Normal') + c = col.operator("material.y_bake_to_layer", text='Bevel Normal') c.type = 'BEVEL_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Bevel Grayscale') + c = col.operator("material.y_bake_to_layer", text='Bevel Grayscale') c.type = 'BEVEL_MASK' c.target_type = 'LAYER' c.overwrite_current = False # NOTE: Blender 2.76 does not bake to object space normal correctly if is_bl_newer_than(2, 77): - c = col.operator("node.y_bake_to_layer", text='Object Space Normal') + c = col.operator("material.y_bake_to_layer", text='Object Space Normal') c.type = 'OBJECT_SPACE_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False @@ -5468,12 +5468,12 @@ def draw(self, context): if is_bl_newer_than(2, 80): col.separator() - c = col.operator("node.y_bake_to_layer", text='Multires Normal') + c = col.operator("material.y_bake_to_layer", text='Multires Normal') c.type = 'MULTIRES_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Multires Displacement') + c = col.operator("material.y_bake_to_layer", text='Multires Displacement') c.type = 'MULTIRES_DISPLACEMENT' c.target_type = 'LAYER' c.overwrite_current = False @@ -5482,24 +5482,24 @@ def draw(self, context): if is_bl_newer_than(2, 77): col.separator() - c = col.operator("node.y_bake_to_layer", text='Other Objects Emission') + c = col.operator("material.y_bake_to_layer", text='Other Objects Emission') c.type = 'OTHER_OBJECT_EMISSION' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Other Objects Normal') + c = col.operator("material.y_bake_to_layer", text='Other Objects Normal') c.type = 'OTHER_OBJECT_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("node.y_bake_to_layer", text='Other Objects Channels') + c = col.operator("material.y_bake_to_layer", text='Other Objects Channels') c.type = 'OTHER_OBJECT_CHANNELS' c.target_type = 'LAYER' c.overwrite_current = False col.separator() - c = col.operator("node.y_bake_to_layer", text='Selected Vertices') + c = col.operator("material.y_bake_to_layer", text='Selected Vertices') c.type = 'SELECTED_VERTICES' c.target_type = 'LAYER' c.overwrite_current = False @@ -5507,7 +5507,7 @@ def draw(self, context): if ypup.show_experimental: col.separator() - c = col.operator("node.y_bake_to_layer", text='Flow') + c = col.operator("material.y_bake_to_layer", text='Flow') c.type = 'FLOW' c.target_type = 'LAYER' c.overwrite_current = False @@ -5535,22 +5535,22 @@ def draw(self, context): #except Exception as e: # print(e) - col.operator('node.y_pack_image', icon='PACKAGE') - col.operator('node.y_save_image', icon='FILE_TICK') + col.operator('material.y_pack_image', icon='PACKAGE') + col.operator('material.y_save_image', icon='FILE_TICK') if context.image.packed_file: - col.operator('node.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False - else: col.operator('node.y_save_as_image', text='Save As Image').copy = False - col.operator('node.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True + col.operator('material.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False + else: col.operator('material.y_save_as_image', text='Save As Image').copy = False + col.operator('material.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True col.separator() icon = 'FILEBROWSER' if is_bl_newer_than(2, 80) else 'FILE_FOLDER' - col.operator('node.y_save_all_baked_images', text='Save All Baked Images to...', icon=icon).copy = False - col.operator('node.y_save_all_baked_images', text='Save All Baked Image Copies to...').copy = True + col.operator('material.y_save_all_baked_images', text='Save All Baked Images to...', icon=icon).copy = False + col.operator('material.y_save_all_baked_images', text='Save All Baked Image Copies to...').copy = True col.separator() - col.operator('node.y_delete_baked_channel_images', text='Delete All Baked Images', icon='ERROR') + col.operator('material.y_delete_baked_channel_images', text='Delete All Baked Images', icon='ERROR') class YLayerChannelNormalBlendMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_channel_normal_blend_menu" @@ -5564,7 +5564,7 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() #align=True) for key, val in normal_blend_labels.items(): - col.operator('node.y_set_layer_channel_normal_blend_type', text=val).normal_blend_type = key + col.operator('material.y_set_layer_channel_normal_blend_type', text=val).normal_blend_type = key class YLayerChannelBlendMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_channel_blend_menu" @@ -5578,7 +5578,7 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() #align=True) for key, val in blend_type_labels.items(): - col.operator('node.y_set_layer_channel_blend_type', text=val).blend_type = key + col.operator('material.y_set_layer_channel_blend_type', text=val).blend_type = key class YLayerChannelBlendPopover(bpy.types.Panel): bl_idname = "NODE_PT_y_layer_channel_blend_popover" @@ -5737,7 +5737,7 @@ def draw(self, context): label += ' ('+layer_type_labels[layer.type]+')' icon = 'RADIOBUT_ON' if not ch.override and (ch.layer_input == 'RGB' or not has_layer_input_options(layer)) else 'RADIOBUT_OFF' - op = col.operator('node.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) op.type = 'RGB' op.set_normal_input = False @@ -5755,7 +5755,7 @@ def draw(self, context): label += ' ('+layer_type_labels[layer.type]+')' icon = 'RADIOBUT_ON' if ch.layer_input == 'ALPHA' and not ch.override else 'RADIOBUT_OFF' - op = col.operator('node.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) op.type = 'ALPHA' op.set_normal_input = False @@ -5768,7 +5768,7 @@ def draw(self, context): else: label += ' Color' icon = 'RADIOBUT_ON' if ch.override and ch.override_type == 'DEFAULT' else 'RADIOBUT_OFF' - op = col.operator('node.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) op.type = 'CUSTOM' op.set_normal_input = False @@ -5827,7 +5827,7 @@ def draw(self, context): label += ' ('+layer_type_labels[layer.type]+')' icon = 'RADIOBUT_ON' if not ch.override_1 else 'RADIOBUT_OFF' - op = col.operator('node.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) op.type = 'RGB' op.set_normal_input = True @@ -5835,7 +5835,7 @@ def draw(self, context): # Custom/Override Default icon = 'RADIOBUT_ON' if ch.override_1 and ch.override_1_type == 'DEFAULT' else 'RADIOBUT_OFF' - op = col.operator('node.y_set_layer_channel_input', text='Custom Color', icon=icon) + op = col.operator('material.y_set_layer_channel_input', text='Custom Color', icon=icon) op.type = 'CUSTOM' op.set_normal_input = True @@ -5869,25 +5869,25 @@ def draw(self, context): row = self.layout.row() col = row.column() - col.operator('node.y_merge_layer', text='Merge Layer Up', icon='TRIA_UP').direction = 'UP' - col.operator('node.y_merge_layer', text='Merge Layer Down', icon='TRIA_DOWN').direction = 'DOWN' + col.operator('material.y_merge_layer', text='Merge Layer Up', icon='TRIA_UP').direction = 'UP' + col.operator('material.y_merge_layer', text='Merge Layer Down', icon='TRIA_DOWN').direction = 'DOWN' col.separator() - c = col.operator("node.y_duplicate_layer", icon='COPY_ID', text='Duplicate Layer').duplicate_blank = False - c = col.operator("node.y_duplicate_layer", icon='COPY_ID', text='Duplicate Blank Layer').duplicate_blank = True + c = col.operator("material.y_duplicate_layer", icon='COPY_ID', text='Duplicate Layer').duplicate_blank = False + c = col.operator("material.y_duplicate_layer", icon='COPY_ID', text='Duplicate Blank Layer').duplicate_blank = True col.separator() - col.operator('node.y_copy_layer', text='Copy Layer', icon='COPYDOWN').all_layers = False - col.operator('node.y_copy_layer', text='Copy All Layers', icon='COPYDOWN').all_layers = True - col.operator('node.y_paste_layer', text='Paste Layer(s)', icon='PASTEDOWN') + col.operator('material.y_copy_layer', text='Copy Layer', icon='COPYDOWN').all_layers = False + col.operator('material.y_copy_layer', text='Copy All Layers', icon='COPYDOWN').all_layers = True + col.operator('material.y_paste_layer', text='Paste Layer(s)', icon='PASTEDOWN') col.separator() - col.operator('node.y_rebake_baked_images', text='Rebake All Baked Images', icon_value=lib.get_icon('bake')) + col.operator('material.y_rebake_baked_images', text='Rebake All Baked Images', icon_value=lib.get_icon('bake')) if UDIM.is_udim_supported(): - col.operator('node.y_refill_udim_tiles', text='Refill UDIM Tiles', icon_value=lib.get_icon('uv')) + col.operator('material.y_refill_udim_tiles', text='Refill UDIM Tiles', icon_value=lib.get_icon('uv')) #col.prop(yp, 'layer_preview_mode', text='Layer Only Viewer') @@ -5901,39 +5901,39 @@ def draw(self, context): col.label(text='No active image') #col.separator() - #col.operator('node.y_transfer_layer_uv', text='Transfer Active Layer UV', icon_value=lib.get_icon('uv')) - #col.operator('node.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) + #col.operator('material.y_transfer_layer_uv', text='Transfer Active Layer UV', icon_value=lib.get_icon('uv')) + #col.operator('material.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) #if hasattr(context, 'image') and context.image: col.separator() - op = col.operator('node.y_resize_image', text='Resize Image', icon='FULLSCREEN_ENTER') + op = col.operator('material.y_resize_image', text='Resize Image', icon='FULLSCREEN_ENTER') if hasattr(context, 'layer'): op.layer_name = context.layer.name if hasattr(context, 'image'): op.image_name = context.image.name - col.operator("node.y_invert_image", icon='IMAGE_ALPHA') + col.operator("material.y_invert_image", icon='IMAGE_ALPHA') col.separator() - col.operator('node.y_pack_image', icon='PACKAGE') - col.operator('node.y_save_image', icon='FILE_TICK') + col.operator('material.y_pack_image', icon='PACKAGE') + col.operator('material.y_save_image', icon='FILE_TICK') if hasattr(context, 'image') and context.image.packed_file: - col.operator('node.y_save_as_image', text='Unpack As Image...', icon='UGLYPACKAGE').copy = False + col.operator('material.y_save_as_image', text='Unpack As Image...', icon='UGLYPACKAGE').copy = False else: if is_bl_newer_than(2, 80): - col.operator('node.y_save_as_image', text='Save As Image...').copy = False - else: col.operator('node.y_save_as_image', text='Save As Image...', icon='SAVE_AS').copy = False - col.operator('node.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True + col.operator('material.y_save_as_image', text='Save As Image...').copy = False + else: col.operator('material.y_save_as_image', text='Save As Image...', icon='SAVE_AS').copy = False + col.operator('material.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True col.separator() - col.operator("node.y_reload_image", icon='FILE_REFRESH') + col.operator("material.y_reload_image", icon='FILE_REFRESH') col.separator() if hasattr(context, 'image'): col.menu("NODE_MT_y_image_convert_menu", text='Convert Image') - if is_bl_newer_than(2, 80): col.operator('node.y_save_pack_all', text='Save/Pack All Images') - else: col.operator('node.y_save_pack_all', text='Save/Pack All Images', icon='FILE_TICK') + if is_bl_newer_than(2, 80): col.operator('material.y_save_pack_all', text='Save/Pack All Images') + else: col.operator('material.y_save_pack_all', text='Save/Pack All Images', icon='FILE_TICK') class YOpenImagesToSingleLayerMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_open_images_to_single_layer_menu" @@ -5947,8 +5947,8 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() - col.operator("node.y_open_images_to_single_layer", icon='FILE_FOLDER', text='From Directory') - col.operator("node.y_open_images_from_material_to_single_layer", icon='MATERIAL_DATA', text='From Material').asset_library_path = '' + col.operator("material.y_open_images_to_single_layer", icon='FILE_FOLDER', text='From Directory') + col.operator("material.y_open_images_from_material_to_single_layer", icon='MATERIAL_DATA', text='From Material').asset_library_path = '' class YNewSolidColorLayerMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_new_solid_color_layer_menu" @@ -5963,27 +5963,27 @@ def draw(self, context): col = self.layout.column() icon_value = lib.get_icon("color") - c = col.operator("node.y_new_layer", icon_value=icon_value, text='Solid Color') + c = col.operator("material.y_new_layer", icon_value=icon_value, text='Solid Color') c.type = 'COLOR' c.add_mask = False - c = col.operator("node.y_new_layer", text='Solid Color w/ Image Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Image Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'IMAGE' - c = col.operator("node.y_new_layer", text='Solid Color w/ Vertex Color Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Vertex Color Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'VCOL' - c = col.operator("node.y_new_layer", text='Solid Color w/ Color ID Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Color ID Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'COLOR_ID' if is_bl_newer_than(2, 93): - c = col.operator("node.y_new_layer", text='Solid Color w/ Edge Detect Mask') + c = col.operator("material.y_new_layer", text='Solid Color w/ Edge Detect Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'EDGE_DETECT' @@ -6010,11 +6010,11 @@ def draw(self, context): col.separator() if context.image.yia.is_image_atlas or context.image.yua.is_udim_atlas: - col.operator("node.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert to standard Image').all_images = False - col.operator("node.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert All Image Atlas to standard Images').all_images = True + col.operator("material.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert to standard Image').all_images = False + col.operator("material.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert All Image Atlas to standard Images').all_images = True else: - col.operator("node.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert to Image Atlas').all_images = False - col.operator("node.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert All Images to Image Atlas').all_images = True + col.operator("material.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert to Image Atlas').all_images = False + col.operator("material.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert All Images to Image Atlas').all_images = True class YUVSpecialMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_uv_special_menu" @@ -6028,8 +6028,8 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() - col.operator('node.y_transfer_layer_uv', text='Transfer UV', icon_value=lib.get_icon('uv')) - col.operator('node.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) + col.operator('material.y_transfer_layer_uv', text='Transfer UV', icon_value=lib.get_icon('uv')) + col.operator('material.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) class YModifierMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_modifier_menu" @@ -6049,16 +6049,16 @@ def draw(self, context): col.label(text='ERROR: Context has no parent or modifier!', icon='ERROR') return - op = col.operator('node.y_move_ypaint_modifier', icon='TRIA_UP', text='Move Modifier Up') + op = col.operator('material.y_move_ypaint_modifier', icon='TRIA_UP', text='Move Modifier Up') op.direction = 'UP' - op = col.operator('node.y_move_ypaint_modifier', icon='TRIA_DOWN', text='Move Modifier Down') + op = col.operator('material.y_move_ypaint_modifier', icon='TRIA_DOWN', text='Move Modifier Down') op.direction = 'DOWN' col.separator() if is_bl_newer_than(2, 80): - op = col.operator('node.y_remove_ypaint_modifier', icon='REMOVE', text='Remove Modifier') - else: op = col.operator('node.y_remove_ypaint_modifier', icon='ZOOMOUT', text='Remove Modifier') + op = col.operator('material.y_remove_ypaint_modifier', icon='REMOVE', text='Remove Modifier') + else: op = col.operator('material.y_remove_ypaint_modifier', icon='ZOOMOUT', text='Remove Modifier') #if hasattr(context, 'layer') and context.modifier.type in {'RGB_TO_INTENSITY', 'OVERRIDE_COLOR'}: # col.separator() @@ -6082,16 +6082,16 @@ def draw(self, context): col.label(text='ERROR: Context has no parent or modifier!', icon='ERROR') return - op = col.operator('node.y_move_normalmap_modifier', icon='TRIA_UP', text='Move Modifier Up') + op = col.operator('material.y_move_normalmap_modifier', icon='TRIA_UP', text='Move Modifier Up') op.direction = 'UP' - op = col.operator('node.y_move_normalmap_modifier', icon='TRIA_DOWN', text='Move Modifier Down') + op = col.operator('material.y_move_normalmap_modifier', icon='TRIA_DOWN', text='Move Modifier Down') op.direction = 'DOWN' col.separator() if is_bl_newer_than(2, 80): - op = col.operator('node.y_remove_normalmap_modifier', icon='REMOVE', text='Remove Modifier') - else: op = col.operator('node.y_remove_normalmap_modifier', icon='ZOOMOUT', text='Remove Modifier') + op = col.operator('material.y_remove_normalmap_modifier', icon='REMOVE', text='Remove Modifier') + else: op = col.operator('material.y_remove_normalmap_modifier', icon='ZOOMOUT', text='Remove Modifier') class YMaskModifierMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_mask_modifier_menu" @@ -6111,17 +6111,17 @@ def draw(self, context): col.label(text='ERROR: Context has no mask, modifier, or layer!', icon='ERROR') return - op = col.operator('node.y_move_mask_modifier', icon='TRIA_UP', text='Move Modifier Up') + op = col.operator('material.y_move_mask_modifier', icon='TRIA_UP', text='Move Modifier Up') op.direction = 'UP' - op = col.operator('node.y_move_mask_modifier', icon='TRIA_DOWN', text='Move Modifier Down') + op = col.operator('material.y_move_mask_modifier', icon='TRIA_DOWN', text='Move Modifier Down') op.direction = 'DOWN' col.separator() if is_bl_newer_than(2, 80): - op = col.operator('node.y_remove_mask_modifier', icon='REMOVE', text='Remove Modifier') - else: op = col.operator('node.y_remove_mask_modifier', icon='ZOOMOUT', text='Remove Modifier') + op = col.operator('material.y_remove_mask_modifier', icon='REMOVE', text='Remove Modifier') + else: op = col.operator('material.y_remove_mask_modifier', icon='ZOOMOUT', text='Remove Modifier') class YTransitionBumpMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_transition_bump_menu" @@ -6143,8 +6143,8 @@ def draw(self, context): return if is_bl_newer_than(2, 80): - col.operator('node.y_hide_transition_effect', text='Remove Transition Bump', icon='REMOVE').type = 'BUMP' - else: col.operator('node.y_hide_transition_effect', text='Remove Transition Bump', icon='ZOOMOUT').type = 'BUMP' + col.operator('material.y_hide_transition_effect', text='Remove Transition Bump', icon='REMOVE').type = 'BUMP' + else: col.operator('material.y_hide_transition_effect', text='Remove Transition Bump', icon='ZOOMOUT').type = 'BUMP' class YTransitionRampMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_transition_ramp_menu" @@ -6169,8 +6169,8 @@ def draw(self, context): col.separator() if is_bl_newer_than(2, 80): - col.operator('node.y_hide_transition_effect', text='Remove Transition Ramp', icon='REMOVE').type = 'RAMP' - else: col.operator('node.y_hide_transition_effect', text='Remove Transition Ramp', icon='ZOOMOUT').type = 'RAMP' + col.operator('material.y_hide_transition_effect', text='Remove Transition Ramp', icon='REMOVE').type = 'RAMP' + else: col.operator('material.y_hide_transition_effect', text='Remove Transition Ramp', icon='ZOOMOUT').type = 'RAMP' class YTransitionAOMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_transition_ao_menu" @@ -6202,8 +6202,8 @@ def draw(self, context): col = layout.column() if is_bl_newer_than(2, 80): - col.operator('node.y_hide_transition_effect', text='Remove Transition AO', icon='REMOVE').type = 'AO' - else: col.operator('node.y_hide_transition_effect', text='Remove Transition AO', icon='ZOOMOUT').type = 'AO' + col.operator('material.y_hide_transition_effect', text='Remove Transition AO', icon='REMOVE').type = 'AO' + else: col.operator('material.y_hide_transition_effect', text='Remove Transition AO', icon='ZOOMOUT').type = 'AO' def new_mask_button(layout, operator, text, lib_icon='', otype='', target_type='', modifier_type='', overwrite_current=None): if lib_icon: @@ -6240,56 +6240,56 @@ def draw(self, context): col.context_pointer_set('layer', context.layer) col.label(text='Image Mask:') - new_mask_button(col, 'node.y_new_layer_mask', 'New Image Mask', lib_icon='image', otype='IMAGE') - op = new_mask_button(col, 'node.y_open_image_as_mask', 'Open Image as Mask...', lib_icon='open_image') + new_mask_button(col, 'material.y_new_layer_mask', 'New Image Mask', lib_icon='image', otype='IMAGE') + op = new_mask_button(col, 'material.y_open_image_as_mask', 'Open Image as Mask...', lib_icon='open_image') op.texcoord_type = 'UV' op.file_browser_filepath = '' - new_mask_button(col, 'node.y_open_available_data_as_mask', 'Open Available Image as Mask', lib_icon='open_image', otype='IMAGE') + new_mask_button(col, 'material.y_open_available_data_as_mask', 'Open Available Image as Mask', lib_icon='open_image', otype='IMAGE') col.separator() col.label(text='Vertex Color Mask:') - new_mask_button(col, 'node.y_new_layer_mask', 'New Vertex Color Mask', lib_icon='vertex_color', otype='VCOL') - new_mask_button(col, 'node.y_open_available_data_as_mask', 'Open Available Vertex Color as Mask', lib_icon='vertex_color', otype='VCOL') + new_mask_button(col, 'material.y_new_layer_mask', 'New Vertex Color Mask', lib_icon='vertex_color', otype='VCOL') + new_mask_button(col, 'material.y_open_available_data_as_mask', 'Open Available Vertex Color as Mask', lib_icon='vertex_color', otype='VCOL') - new_mask_button(col, 'node.y_new_layer_mask', 'Color ID', lib_icon='color', otype='COLOR_ID') + new_mask_button(col, 'material.y_new_layer_mask', 'Color ID', lib_icon='color', otype='COLOR_ID') col = row.column(align=True) col.label(text='Generated Mask:') - new_mask_button(col, 'node.y_new_layer_mask', 'Brick', otype='BRICK', lib_icon='texture') - new_mask_button(col, 'node.y_new_layer_mask', 'Checker', otype='CHECKER') - new_mask_button(col, 'node.y_new_layer_mask', 'Gradient', otype='GRADIENT') - new_mask_button(col, 'node.y_new_layer_mask', 'Magic', otype='MAGIC') - if not is_bl_newer_than(4, 1): new_mask_button(col, 'node.y_new_layer_mask', 'Musgrave', otype='MUSGRAVE') - new_mask_button(col, 'node.y_new_layer_mask', 'Noise', otype='NOISE') - if is_bl_newer_than(4, 3): new_mask_button(col, 'node.y_new_layer_mask', 'Gabor', otype='GABOR') - new_mask_button(col, 'node.y_new_layer_mask', 'Voronoi', otype='VORONOI') - new_mask_button(col, 'node.y_new_layer_mask', 'Wave', otype='WAVE') + new_mask_button(col, 'material.y_new_layer_mask', 'Brick', otype='BRICK', lib_icon='texture') + new_mask_button(col, 'material.y_new_layer_mask', 'Checker', otype='CHECKER') + new_mask_button(col, 'material.y_new_layer_mask', 'Gradient', otype='GRADIENT') + new_mask_button(col, 'material.y_new_layer_mask', 'Magic', otype='MAGIC') + if not is_bl_newer_than(4, 1): new_mask_button(col, 'material.y_new_layer_mask', 'Musgrave', otype='MUSGRAVE') + new_mask_button(col, 'material.y_new_layer_mask', 'Noise', otype='NOISE') + if is_bl_newer_than(4, 3): new_mask_button(col, 'material.y_new_layer_mask', 'Gabor', otype='GABOR') + new_mask_button(col, 'material.y_new_layer_mask', 'Voronoi', otype='VORONOI') + new_mask_button(col, 'material.y_new_layer_mask', 'Wave', otype='WAVE') col.separator() - new_mask_button(col, 'node.y_new_layer_mask', 'Fake Lighting', lib_icon='hemi', otype='HEMI') + new_mask_button(col, 'material.y_new_layer_mask', 'Fake Lighting', lib_icon='hemi', otype='HEMI') col.separator() - new_mask_button(col, 'node.y_new_layer_mask', 'Object Index', otype='OBJECT_INDEX', lib_icon='object_index') - new_mask_button(col, 'node.y_new_layer_mask', 'Backface', otype='BACKFACE', lib_icon='backface') + new_mask_button(col, 'material.y_new_layer_mask', 'Object Index', otype='OBJECT_INDEX', lib_icon='object_index') + new_mask_button(col, 'material.y_new_layer_mask', 'Backface', otype='BACKFACE', lib_icon='backface') if is_bl_newer_than(2, 93): - new_mask_button(col, 'node.y_new_layer_mask', 'Edge Detect', otype='EDGE_DETECT', lib_icon='edge_detect') + new_mask_button(col, 'material.y_new_layer_mask', 'Edge Detect', otype='EDGE_DETECT', lib_icon='edge_detect') col = row.column(align=True) col.label(text='Bake as Mask:') - new_mask_button(col, 'node.y_bake_to_layer', 'Ambient Occlusion', lib_icon='bake', otype='AO', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'node.y_bake_to_layer', 'Pointiness', otype='POINTINESS', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'node.y_bake_to_layer', 'Cavity', otype='CAVITY', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'node.y_bake_to_layer', 'Dust', otype='DUST', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'node.y_bake_to_layer', 'Paint Base', otype='PAINT_BASE', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'node.y_bake_to_layer', 'Bevel Grayscale', otype='BEVEL_MASK', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'node.y_bake_to_layer', 'Selected Vertices', otype='SELECTED_VERTICES', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'material.y_bake_to_layer', 'Ambient Occlusion', lib_icon='bake', otype='AO', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'material.y_bake_to_layer', 'Pointiness', otype='POINTINESS', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'material.y_bake_to_layer', 'Cavity', otype='CAVITY', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'material.y_bake_to_layer', 'Dust', otype='DUST', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'material.y_bake_to_layer', 'Paint Base', otype='PAINT_BASE', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'material.y_bake_to_layer', 'Bevel Grayscale', otype='BEVEL_MASK', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'material.y_bake_to_layer', 'Selected Vertices', otype='SELECTED_VERTICES', target_type='MASK', overwrite_current=False) col.separator() col.label(text='Inbetween Modifier Mask:') - new_mask_button(col, 'node.y_new_layer_mask', 'Invert', otype='MODIFIER', modifier_type='INVERT', lib_icon='modifier') - new_mask_button(col, 'node.y_new_layer_mask', 'Ramp', otype='MODIFIER', modifier_type='RAMP', lib_icon='modifier') - new_mask_button(col, 'node.y_new_layer_mask', 'Curve', otype='MODIFIER', modifier_type='CURVE', lib_icon='modifier') + new_mask_button(col, 'material.y_new_layer_mask', 'Invert', otype='MODIFIER', modifier_type='INVERT', lib_icon='modifier') + new_mask_button(col, 'material.y_new_layer_mask', 'Ramp', otype='MODIFIER', modifier_type='RAMP', lib_icon='modifier') + new_mask_button(col, 'material.y_new_layer_mask', 'Curve', otype='MODIFIER', modifier_type='CURVE', lib_icon='modifier') class YLayerMaskMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_mask_menu" @@ -6319,47 +6319,47 @@ def draw(self, context): mask_tree = get_mask_tree(mask) source = mask_tree.nodes.get(mask.source) col.context_pointer_set('image', source.image) - col.operator('node.y_invert_image', text='Invert Image', icon='IMAGE_ALPHA') + col.operator('material.y_invert_image', text='Invert Image', icon='IMAGE_ALPHA') col.separator() - op = col.operator('node.y_move_layer_mask', icon='TRIA_UP', text='Move Mask Up') + op = col.operator('material.y_move_layer_mask', icon='TRIA_UP', text='Move Mask Up') op.direction = 'UP' - op = col.operator('node.y_move_layer_mask', icon='TRIA_DOWN', text='Move Mask Down') + op = col.operator('material.y_move_layer_mask', icon='TRIA_DOWN', text='Move Mask Down') op.direction = 'DOWN' col.separator() - op = col.operator('node.y_merge_mask', icon='TRIA_UP', text='Merge Mask Up') + op = col.operator('material.y_merge_mask', icon='TRIA_UP', text='Merge Mask Up') op.direction = 'UP' - op = col.operator('node.y_merge_mask', icon='TRIA_DOWN', text='Merge Mask Down') + op = col.operator('material.y_merge_mask', icon='TRIA_DOWN', text='Merge Mask Down') op.direction = 'DOWN' col.separator() col.context_pointer_set('entity', mask) - col.operator('node.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake as Image') + col.operator('material.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake as Image') if mask.baked_source != '': if is_bl_newer_than(2, 80): - col.operator('node.y_remove_baked_entity', text='Remove Baked Image', icon='REMOVE') - else: col.operator('node.y_remove_baked_entity', text='Remove Baked Image', icon='ZOOMOUT') + col.operator('material.y_remove_baked_entity', text='Remove Baked Image', icon='REMOVE') + else: col.operator('material.y_remove_baked_entity', text='Remove Baked Image', icon='ZOOMOUT') col.separator() - #op = col.operator('node.y_transfer_layer_uv', icon_value=lib.get_icon('uv'), text='Transfer UV') + #op = col.operator('material.y_transfer_layer_uv', icon_value=lib.get_icon('uv'), text='Transfer UV') #col.separator() if is_bl_newer_than(2, 80): - col.operator('node.y_remove_layer_mask', text='Remove Mask', icon='REMOVE') - else: col.operator('node.y_remove_layer_mask', text='Remove Mask', icon='ZOOMOUT') + col.operator('material.y_remove_layer_mask', text='Remove Mask', icon='REMOVE') + else: col.operator('material.y_remove_layer_mask', text='Remove Mask', icon='ZOOMOUT') col = row.column(align=True) col.label(text='Add Modifier') - col.operator('node.y_new_mask_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' - col.operator('node.y_new_mask_modifier', text='Ramp', icon_value=lib.get_icon('modifier')).type = 'RAMP' - col.operator('node.y_new_mask_modifier', text='Curve', icon_value=lib.get_icon('modifier')).type = 'CURVE' + col.operator('material.y_new_mask_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' + col.operator('material.y_new_mask_modifier', text='Ramp', icon_value=lib.get_icon('modifier')).type = 'RAMP' + col.operator('material.y_new_mask_modifier', text='Curve', icon_value=lib.get_icon('modifier')).type = 'CURVE' #if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID'}: # col.separator() @@ -6372,9 +6372,9 @@ def draw(self, context): col.context_pointer_set('parent', mask) col.label(text='Advanced') if not mask.use_temp_bake: - col.operator('node.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) + col.operator('material.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) else: - col.operator('node.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') + col.operator('material.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') class YMaterialSpecialMenu(bpy.types.Menu): bl_idname = "MATERIAL_MT_y_special_menu" @@ -6424,8 +6424,8 @@ def draw(self, context): #icon = 'RADIOBUT_ON' if ch.override_type == 'DEFAULT' else 'RADIOBUT_OFF' #if root_ch.type == 'VALUE': - # col.operator('node.y_replace_layer_channel_override', text='Value', icon=icon).type = 'DEFAULT' - #else: col.operator('node.y_replace_layer_channel_override', text='Color', icon=icon).type = 'DEFAULT' + # col.operator('material.y_replace_layer_channel_override', text='Value', icon=icon).type = 'DEFAULT' + #else: col.operator('material.y_replace_layer_channel_override', text='Color', icon=icon).type = 'DEFAULT' col.separator() @@ -6440,15 +6440,15 @@ def draw(self, context): icon = 'RADIOBUT_ON' if ch.override and ch.override_type == 'IMAGE' else 'RADIOBUT_OFF' if cache_image and (ch.override_type != 'IMAGE' or not ch.override): - col.operator('node.y_replace_layer_channel_override', text=label, icon=icon).type = 'IMAGE' + col.operator('material.y_replace_layer_channel_override', text=label, icon=icon).type = 'IMAGE' else: col.label(text=label, icon=icon) row = col.row(align=True) ccol = row.column(align=True) - ccol.operator('node.y_open_image_to_override_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) - ccol.operator('node.y_open_available_data_to_override_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')).type = 'IMAGE' + ccol.operator('material.y_open_image_to_override_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) + ccol.operator('material.y_open_available_data_to_override_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')).type = 'IMAGE' col.separator() @@ -6462,16 +6462,16 @@ def draw(self, context): icon = 'RADIOBUT_ON' if ch.override and ch.override_type == 'VCOL' else 'RADIOBUT_OFF' if cache_vcol and (ch.override_type != 'VCOL' or not ch.override): - col.operator('node.y_replace_layer_channel_override', text=label, icon=icon).type = 'VCOL' + col.operator('material.y_replace_layer_channel_override', text=label, icon=icon).type = 'VCOL' else: col.label(text=label, icon=icon) row = col.row(align=True) ccol = row.column(align=True) - #ccol.operator('node.y_replace_layer_channel_override', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' - ccol.operator('node.y_new_vcol_to_override_channel', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')) - ccol.operator('node.y_open_available_data_to_override_channel', text='Use Available Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' + #ccol.operator('material.y_replace_layer_channel_override', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' + ccol.operator('material.y_new_vcol_to_override_channel', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')) + ccol.operator('material.y_open_available_data_to_override_channel', text='Use Available Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' col.separator() @@ -6485,7 +6485,7 @@ def draw(self, context): if item[0] in {'DEFAULT', 'IMAGE', 'VCOL'}: continue - col.operator('node.y_replace_layer_channel_override', text=item[1], icon=icon).type = item[0] + col.operator('material.y_replace_layer_channel_override', text=item[1], icon=icon).type = item[0] class YReplaceChannelOverride1Menu(bpy.types.Menu): bl_idname = "NODE_MT_y_replace_channel_override_1_menu" @@ -6520,9 +6520,9 @@ def draw(self, context): #icon = 'RADIOBUT_ON' if ch.override_1_type == 'DEFAULT' else 'RADIOBUT_OFF' ##if root_ch.type == 'VALUE': - ## col.operator('node.y_replace_layer_channel_override_1', text='Value', icon=icon).type = 'DEFAULT' + ## col.operator('material.y_replace_layer_channel_override_1', text='Value', icon=icon).type = 'DEFAULT' ##else: - #col.operator('node.y_replace_layer_channel_override_1', text='Color', icon=icon).type = 'DEFAULT' + #col.operator('material.y_replace_layer_channel_override_1', text='Color', icon=icon).type = 'DEFAULT' #col.separator() @@ -6537,7 +6537,7 @@ def draw(self, context): icon = 'RADIOBUT_ON' if ch.override_1 and ch.override_1_type == 'IMAGE' else 'RADIOBUT_OFF' if cache_1_image and (ch.override_1_type != 'IMAGE' or not ch.override_1): - col.operator('node.y_replace_layer_channel_override_1', text=label, icon=icon).type = 'IMAGE' + col.operator('material.y_replace_layer_channel_override_1', text=label, icon=icon).type = 'IMAGE' else: col.label(text=label, icon=icon) @@ -6546,8 +6546,8 @@ def draw(self, context): #ccol.label(text='', icon='BLANK1') ccol = row.column(align=True) - ccol.operator('node.y_open_image_to_override_1_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) - ccol.operator('node.y_open_available_data_to_override_1_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')) + ccol.operator('material.y_open_image_to_override_1_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) + ccol.operator('material.y_open_available_data_to_override_1_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')) class YChannelSpecialMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_channel_special_menu" @@ -6568,7 +6568,7 @@ def draw(self, context): col.label(text='ERROR: Context has no parent!', icon='ERROR') return - col.operator('node.y_bake_channels', text="Bake " + context.parent.name + " Channel", icon_value=lib.get_icon('bake')).only_active_channel = True + col.operator('material.y_bake_channels', text="Bake " + context.parent.name + " Channel", icon_value=lib.get_icon('bake')).only_active_channel = True if context.parent.type != 'NORMAL': col.separator() @@ -6579,15 +6579,15 @@ def draw(self, context): # Override color and multiplier modifier are deprecated if mt[0] == 'OVERRIDE_COLOR': continue if mt[0] == 'MULTIPLIER': continue - col.operator('node.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] + col.operator('material.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] ypup = get_user_preferences() if ypup.show_experimental: col = row.column() col.label(text='Experimental') - col.operator('node.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color', icon_value=lib.get_icon('vertex_color')).all_materials = False - col.operator('node.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color (Batch All Materials)', icon_value=lib.get_icon('vertex_color')).all_materials = True + col.operator('material.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color', icon_value=lib.get_icon('vertex_color')).all_materials = False + col.operator('material.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color (Batch All Materials)', icon_value=lib.get_icon('vertex_color')).all_materials = True class YLayerChannelSpecialMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_channel_special_menu" @@ -6639,23 +6639,23 @@ def draw(self, context): # Override color and multiplier modifier are deprecated if mt[0] == 'OVERRIDE_COLOR': continue if mt[0] == 'MULTIPLIER': continue - col.operator('node.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] + col.operator('material.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] if is_bump_normal_layer_channel: col.separator() col.label(text='Add Modifier (Normal)') if is_normal_layer_channel or is_bump_normal_layer_channel: - col.operator('node.y_new_normalmap_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' - col.operator('node.y_new_normalmap_modifier', text='Math', icon_value=lib.get_icon('modifier')).type = 'MATH' + col.operator('material.y_new_normalmap_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' + col.operator('material.y_new_normalmap_modifier', text='Math', icon_value=lib.get_icon('modifier')).type = 'MATH' col = row.column() col.label(text='Transition Effects') if root_ch.type == 'NORMAL': - col.operator('node.y_show_transition_bump', text='Transition Bump', icon_value=lib.get_icon('background')) + col.operator('material.y_show_transition_bump', text='Transition Bump', icon_value=lib.get_icon('background')) else: - col.operator('node.y_show_transition_ramp', text='Transition Ramp', icon_value=lib.get_icon('background')) - col.operator('node.y_show_transition_ao', text='Transition AO', icon_value=lib.get_icon('background')) + col.operator('material.y_show_transition_ramp', text='Transition Ramp', icon_value=lib.get_icon('background')) + col.operator('material.y_show_transition_ao', text='Transition AO', icon_value=lib.get_icon('background')) class YLayerTypeMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_type_menu" @@ -6679,7 +6679,7 @@ def draw(self, context): cache_image = tree.nodes.get(layer.cache_image) if layer.type != 'IMAGE' and cache_image and cache_image.image: - op = col.operator('node.y_replace_layer_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') + op = col.operator('material.y_replace_layer_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') op.type = 'IMAGE' op.load_item = False op.item_name = '' @@ -6692,7 +6692,7 @@ def draw(self, context): col.label(text='Image' + suffix, icon=icon) label = 'Open Available Image' if layer.type != 'IMAGE' else 'Replace Image' - op = col.operator('node.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) + op = col.operator('material.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) op.type = 'IMAGE' op.load_item = True @@ -6700,7 +6700,7 @@ def draw(self, context): cache_vcol = tree.nodes.get(layer.cache_vcol) if layer.type != 'VCOL' and cache_vcol and cache_vcol.attribute_name != '': - op = col.operator('node.y_replace_layer_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') + op = col.operator('material.y_replace_layer_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') op.type = 'VCOL' op.load_item = False op.item_name = '' @@ -6713,55 +6713,55 @@ def draw(self, context): col.label(text='Vertex Color' + suffix, icon=icon) label = 'Open Available Vertex Color' if layer.type != 'VCOL' else 'Replace Vertex Color' - op = col.operator('node.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) + op = col.operator('material.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) op.type = 'VCOL' op.load_item = True col.separator() icon = 'RADIOBUT_ON' if layer.type == 'COLOR' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Solid Color', icon=icon).type = 'COLOR' + col.operator('material.y_replace_layer_type', text='Solid Color', icon=icon).type = 'COLOR' icon = 'RADIOBUT_ON' if layer.type == 'BACKGROUND' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Background', icon=icon).type = 'BACKGROUND' + col.operator('material.y_replace_layer_type', text='Background', icon=icon).type = 'BACKGROUND' icon = 'RADIOBUT_ON' if layer.type == 'GROUP' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Group', icon=icon).type = 'GROUP' + col.operator('material.y_replace_layer_type', text='Group', icon=icon).type = 'GROUP' col.separator() icon = 'RADIOBUT_ON' if layer.type == 'BRICK' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Brick', icon=icon).type = 'BRICK' + col.operator('material.y_replace_layer_type', text='Brick', icon=icon).type = 'BRICK' icon = 'RADIOBUT_ON' if layer.type == 'CHECKER' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Checker', icon=icon).type = 'CHECKER' + col.operator('material.y_replace_layer_type', text='Checker', icon=icon).type = 'CHECKER' icon = 'RADIOBUT_ON' if layer.type == 'GRADIENT' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Gradient', icon=icon).type = 'GRADIENT' + col.operator('material.y_replace_layer_type', text='Gradient', icon=icon).type = 'GRADIENT' icon = 'RADIOBUT_ON' if layer.type == 'MAGIC' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Magic', icon=icon).type = 'MAGIC' + col.operator('material.y_replace_layer_type', text='Magic', icon=icon).type = 'MAGIC' if not is_bl_newer_than(4, 1): icon = 'RADIOBUT_ON' if layer.type == 'MUSGRAVE' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' + col.operator('material.y_replace_layer_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' icon = 'RADIOBUT_ON' if layer.type == 'NOISE' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Noise', icon=icon).type = 'NOISE' + col.operator('material.y_replace_layer_type', text='Noise', icon=icon).type = 'NOISE' if is_bl_newer_than(4, 3): icon = 'RADIOBUT_ON' if layer.type == 'GABOR' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Gabor', icon=icon).type = 'GABOR' + col.operator('material.y_replace_layer_type', text='Gabor', icon=icon).type = 'GABOR' icon = 'RADIOBUT_ON' if layer.type == 'VORONOI' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Voronoi', icon=icon).type = 'VORONOI' + col.operator('material.y_replace_layer_type', text='Voronoi', icon=icon).type = 'VORONOI' icon = 'RADIOBUT_ON' if layer.type == 'WAVE' else 'RADIOBUT_OFF' - col.operator('node.y_replace_layer_type', text='Wave', icon=icon).type = 'WAVE' + col.operator('material.y_replace_layer_type', text='Wave', icon=icon).type = 'WAVE' col.separator() icon = 'RADIOBUT_ON' if layer.type == 'HEMI' else 'RADIOBUT_OFF' - col.operator("node.y_replace_layer_type", icon=icon, text='Fake Lighting').type = 'HEMI' + col.operator("material.y_replace_layer_type", icon=icon, text='Fake Lighting').type = 'HEMI' class YMaskTypeMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_mask_type_menu" @@ -6786,7 +6786,7 @@ def draw(self, context): cache_image = tree.nodes.get(mask.cache_image) if mask.type != 'IMAGE' and cache_image and cache_image.image: - op = col.operator('node.y_replace_mask_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') + op = col.operator('material.y_replace_mask_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') op.type = 'IMAGE' op.load_item = False op.item_name = '' @@ -6799,7 +6799,7 @@ def draw(self, context): col.label(text='Image' + suffix, icon=icon) label = 'Open Available Image' if mask.type != 'IMAGE' else 'Replace Image' - op = col.operator('node.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) + op = col.operator('material.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) op.type = 'IMAGE' op.load_item = True @@ -6807,7 +6807,7 @@ def draw(self, context): cache_vcol = tree.nodes.get(mask.cache_vcol) if mask.type != 'VCOL' and cache_vcol and cache_vcol.attribute_name != '': - op = col.operator('node.y_replace_mask_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') + op = col.operator('material.y_replace_mask_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') op.type = 'VCOL' op.load_item = False op.item_name = '' @@ -6820,84 +6820,84 @@ def draw(self, context): col.label(text='Vertex Color' + suffix, icon=icon) label = 'Open Available Vertex Color' if mask.type != 'VCOL' else 'Replace Vertex Color' - op = col.operator('node.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) + op = col.operator('material.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) op.type = 'VCOL' op.load_item = True col.separator() #icon = 'RADIOBUT_ON' if mask.type == 'COLOR' else 'RADIOBUT_OFF' - #col.operator('node.y_replace_mask_type', text='Solid Color', icon=icon).type = 'COLOR' + #col.operator('material.y_replace_mask_type', text='Solid Color', icon=icon).type = 'COLOR' #icon = 'RADIOBUT_ON' if mask.type == 'BACKGROUND' else 'RADIOBUT_OFF' - #col.operator('node.y_replace_mask_type', text='Background', icon=icon).type = 'BACKGROUND' + #col.operator('material.y_replace_mask_type', text='Background', icon=icon).type = 'BACKGROUND' #icon = 'RADIOBUT_ON' if mask.type == 'GROUP' else 'RADIOBUT_OFF' - #col.operator('node.y_replace_mask_type', text='Group', icon=icon).type = 'GROUP' + #col.operator('material.y_replace_mask_type', text='Group', icon=icon).type = 'GROUP' #col.separator() icon = 'RADIOBUT_ON' if mask.type == 'BRICK' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Brick', icon=icon).type = 'BRICK' + col.operator('material.y_replace_mask_type', text='Brick', icon=icon).type = 'BRICK' icon = 'RADIOBUT_ON' if mask.type == 'CHECKER' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Checker', icon=icon).type = 'CHECKER' + col.operator('material.y_replace_mask_type', text='Checker', icon=icon).type = 'CHECKER' icon = 'RADIOBUT_ON' if mask.type == 'GRADIENT' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Gradient', icon=icon).type = 'GRADIENT' + col.operator('material.y_replace_mask_type', text='Gradient', icon=icon).type = 'GRADIENT' icon = 'RADIOBUT_ON' if mask.type == 'MAGIC' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Magic', icon=icon).type = 'MAGIC' + col.operator('material.y_replace_mask_type', text='Magic', icon=icon).type = 'MAGIC' if not is_bl_newer_than(4, 1): icon = 'RADIOBUT_ON' if mask.type == 'MUSGRAVE' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' + col.operator('material.y_replace_mask_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' icon = 'RADIOBUT_ON' if mask.type == 'NOISE' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Noise', icon=icon).type = 'NOISE' + col.operator('material.y_replace_mask_type', text='Noise', icon=icon).type = 'NOISE' if is_bl_newer_than(4, 3): icon = 'RADIOBUT_ON' if mask.type == 'GABOR' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Gabor', icon=icon).type = 'GABOR' + col.operator('material.y_replace_mask_type', text='Gabor', icon=icon).type = 'GABOR' icon = 'RADIOBUT_ON' if mask.type == 'VORONOI' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Voronoi', icon=icon).type = 'VORONOI' + col.operator('material.y_replace_mask_type', text='Voronoi', icon=icon).type = 'VORONOI' icon = 'RADIOBUT_ON' if mask.type == 'WAVE' else 'RADIOBUT_OFF' - col.operator('node.y_replace_mask_type', text='Wave', icon=icon).type = 'WAVE' + col.operator('material.y_replace_mask_type', text='Wave', icon=icon).type = 'WAVE' col.separator() icon = 'RADIOBUT_ON' if mask.type == 'HEMI' else 'RADIOBUT_OFF' - col.operator("node.y_replace_mask_type", icon=icon, text='Fake Lighting').type = 'HEMI' + col.operator("material.y_replace_mask_type", icon=icon, text='Fake Lighting').type = 'HEMI' col.separator() icon = 'RADIOBUT_ON' if mask.type == 'COLOR_ID' else 'RADIOBUT_OFF' - col.operator("node.y_replace_mask_type", icon=icon, text='Color ID').type = 'COLOR_ID' + col.operator("material.y_replace_mask_type", icon=icon, text='Color ID').type = 'COLOR_ID' icon = 'RADIOBUT_ON' if mask.type == 'OBJECT_INDEX' else 'RADIOBUT_OFF' - col.operator("node.y_replace_mask_type", icon=icon, text='Object Index').type = 'OBJECT_INDEX' + col.operator("material.y_replace_mask_type", icon=icon, text='Object Index').type = 'OBJECT_INDEX' icon = 'RADIOBUT_ON' if mask.type == 'BACKFACE' else 'RADIOBUT_OFF' - col.operator("node.y_replace_mask_type", icon=icon, text='Backface').type = 'BACKFACE' + col.operator("material.y_replace_mask_type", icon=icon, text='Backface').type = 'BACKFACE' icon = 'RADIOBUT_ON' if mask.type == 'EDGE_DETECT' else 'RADIOBUT_OFF' - col.operator("node.y_replace_mask_type", icon=icon, text='Edge Detect').type = 'EDGE_DETECT' + col.operator("material.y_replace_mask_type", icon=icon, text='Edge Detect').type = 'EDGE_DETECT' col.separator() icon = 'RADIOBUT_ON' if mask.type == 'MODIFIER' and mask.modifier_type == 'INVERT' else 'RADIOBUT_OFF' - op = col.operator("node.y_replace_mask_type", icon=icon, text='Invert Modifier') + op = col.operator("material.y_replace_mask_type", icon=icon, text='Invert Modifier') op.type = 'MODIFIER' op.modifier_type = 'INVERT' icon = 'RADIOBUT_ON' if mask.type == 'MODIFIER' and mask.modifier_type == 'RAMP' else 'RADIOBUT_OFF' - op = col.operator("node.y_replace_mask_type", icon=icon, text='Ramp Modifier') + op = col.operator("material.y_replace_mask_type", icon=icon, text='Ramp Modifier') op.type = 'MODIFIER' op.modifier_type = 'RAMP' icon = 'RADIOBUT_ON' if mask.type == 'MODIFIER' and mask.modifier_type == 'CURVE' else 'RADIOBUT_OFF' - op = col.operator("node.y_replace_mask_type", icon=icon, text='Curve Modifier') + op = col.operator("material.y_replace_mask_type", icon=icon, text='Curve Modifier') op.type = 'MODIFIER' op.modifier_type = 'CURVE' @@ -6931,16 +6931,16 @@ def draw(self, context): # Override color modifier is deprecated if mt[0] == 'OVERRIDE_COLOR': continue if mt[0] == 'MULTIPLIER': continue - col.operator('node.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] + col.operator('material.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] if ypup.developer_mode: #if context.parent.type == 'HEMI': col = row.column() col.label(text='Advanced') if context.parent.use_temp_bake: - col.operator('node.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') + col.operator('material.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') else: - col.operator('node.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) + col.operator('material.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) #col = row.column() #col.label(text='Options:') @@ -7477,7 +7477,7 @@ def add_new_ypaint_node_menu(self, context): l = self.layout l.operator_context = 'INVOKE_REGION_WIN' l.separator() - l.operator('node.y_add_new_ypaint_node', text=get_addon_title(), icon_value=lib.get_icon('nodetree')) + l.operator('material.y_add_new_ypaint_node', text=get_addon_title(), icon_value=lib.get_icon('nodetree')) def copy_ui_settings(source, dest): for attr in dir(source): diff --git a/versioning.py b/versioning.py index 50e1c761..1c3c85d9 100644 --- a/versioning.py +++ b/versioning.py @@ -1349,7 +1349,7 @@ def update_node_tree_libs(name): print('INFO: ' + get_addon_title() + ' Node group libraries are checked in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') class YUpdateYPTrees(bpy.types.Operator): - bl_idname = "node.y_update_yp_trees" + bl_idname = "material.y_update_yp_trees" bl_label = "Update " + get_addon_title() + " Node Groups" bl_description = "Update " + get_addon_title() + " node groups to newest version" bl_options = {'REGISTER', 'UNDO'} From 69f596266b14190313efd82064df45dc12d889d5 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 26 Feb 2025 13:23:42 +0700 Subject: [PATCH 076/283] Move all operators from material to wm so assigned shortcuts can work on any modes or screens --- Bake.py | 20 +- BakeTarget.py | 4 +- BakeToLayer.py | 12 +- ImageAtlas.py | 12 +- Layer.py | 82 ++--- ListItem.py | 2 +- Mask.py | 14 +- MaskModifier.py | 6 +- Modifier.py | 6 +- NormalMapModifier.py | 6 +- Root.py | 40 +-- Test.py | 2 +- UDIM.py | 2 +- bake_common.py | 2 +- image_ops.py | 14 +- tests/test_quicksetup.py | 16 +- transition.py | 8 +- ui.py | 648 +++++++++++++++++++-------------------- versioning.py | 2 +- 19 files changed, 449 insertions(+), 449 deletions(-) diff --git a/Bake.py b/Bake.py index f5a0eda3..448cbb37 100644 --- a/Bake.py +++ b/Bake.py @@ -378,7 +378,7 @@ def get_entities_to_transfer(yp, from_uv_map, to_uv_map): return entities class YTransferSomeLayerUV(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_transfer_some_layer_uv" + bl_idname = "wm.y_transfer_some_layer_uv" bl_label = "Transfer Some Layer UV" bl_description = "Transfer some layers/masks UV by baking it to other uv (this will take quite some time to finish)" bl_options = {'REGISTER', 'UNDO'} @@ -551,7 +551,7 @@ def execute(self, context): return {'FINISHED'} class YTransferLayerUV(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_transfer_layer_uv" + bl_idname = "wm.y_transfer_layer_uv" bl_label = "Transfer Layer UV" bl_description = "Transfer Layer UV by baking it to other uv (this will take quite some time to finish)" bl_options = {'REGISTER', 'UNDO'} @@ -691,7 +691,7 @@ def update_resize_image_tile_number(self, context): self.height = tile.size[1] class YResizeImage(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_resize_image" + bl_idname = "wm.y_resize_image" bl_label = "Resize Image Layer/Mask" bl_description = "Resize image of layer or mask" bl_options = {'REGISTER', 'UNDO'} @@ -855,7 +855,7 @@ def execute(self, context): class YBakeChannelToVcol(bpy.types.Operator, BaseBakeOperator): """Bake Channel to Vertex Color""" - bl_idname = "material.y_bake_channel_to_vcol" + bl_idname = "wm.y_bake_channel_to_vcol" bl_label = "Bake channel to vertex color" bl_options = {'REGISTER', 'UNDO'} @@ -1091,7 +1091,7 @@ def execute(self, context): return {'FINISHED'} class YDeleteBakedChannelImages(bpy.types.Operator): - bl_idname = "material.y_delete_baked_channel_images" + bl_idname = "wm.y_delete_baked_channel_images" bl_label = "Delete All Baked Channel Images" bl_description = "Delete all baked channel images" bl_options = {'UNDO'} @@ -1202,7 +1202,7 @@ def bake_vcol_channel_items(self, context): class YBakeChannels(bpy.types.Operator, BaseBakeOperator): """Bake Channels to Image(s)""" - bl_idname = "material.y_bake_channels" + bl_idname = "wm.y_bake_channels" bl_label = "Bake channels to Image" bl_options = {'REGISTER', 'UNDO'} @@ -2142,7 +2142,7 @@ def remove_layer_modifiers_and_transforms(layer): Mask.remove_mask(layer, m, bpy.context.object) class YMergeLayer(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_merge_layer" + bl_idname = "wm.y_merge_layer" bl_label = "Merge layer" bl_description = "Merge Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2510,7 +2510,7 @@ def execute(self, context): return {'FINISHED'} class YMergeMask(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_merge_mask" + bl_idname = "wm.y_merge_mask" bl_label = "Merge mask" bl_description = "Merge Mask" bl_options = {'UNDO'} @@ -2758,7 +2758,7 @@ def execute(self, context): return {'FINISHED'} class YBakeTempImage(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_bake_temp_image" + bl_idname = "wm.y_bake_temp_image" bl_label = "Bake temporary image of layer" bl_description = "Bake temporary image of layer, can be useful to prefent glitching with cycles" bl_options = {'REGISTER', 'UNDO'} @@ -2861,7 +2861,7 @@ def execute(self, context): return {'FINISHED'} class YDisableTempImage(bpy.types.Operator): - bl_idname = "material.y_disable_temp_image" + bl_idname = "wm.y_disable_temp_image" bl_label = "Disable Baked temporary image of layer" bl_description = "Disable bake temporary image of layer" bl_options = {'REGISTER', 'UNDO'} diff --git a/BakeTarget.py b/BakeTarget.py index 26918661..36a4d484 100644 --- a/BakeTarget.py +++ b/BakeTarget.py @@ -119,7 +119,7 @@ def update_new_bake_target_preset(self, context): self.name = get_unique_name(tree_name + suffix, bpy.data.images) class YNewBakeTarget(bpy.types.Operator): - bl_idname = "material.y_new_bake_target" + bl_idname = "wm.y_new_bake_target" bl_label = "New Bake Target" bl_description = "New bake target" bl_options = {'REGISTER', 'UNDO'} @@ -221,7 +221,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveBakeTarget(bpy.types.Operator): - bl_idname = "material.y_remove_bake_target" + bl_idname = "wm.y_remove_bake_target" bl_label = "Remove Bake Target" bl_description = "Remove bake target" bl_options = {'REGISTER', 'UNDO'} diff --git a/BakeToLayer.py b/BakeToLayer.py index 6e10d2c6..eb5691d5 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -13,7 +13,7 @@ TEMP_EMISSION = '_TEMP_EMI_' class YTryToSelectBakedVertexSelect(bpy.types.Operator): - bl_idname = "material.y_try_to_select_baked_vertex" + bl_idname = "wm.y_try_to_select_baked_vertex" bl_label = "Try to reselect baked selected vertex" bl_description = "Try to reselect baked selected vertex. It might give you wrong results if mesh number of vertex changed" bl_options = {'REGISTER', 'UNDO'} @@ -108,7 +108,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveBakeInfoOtherObject(bpy.types.Operator): - bl_idname = "material.y_remove_bake_info_other_object" + bl_idname = "wm.y_remove_bake_info_other_object" bl_label = "Remove other object info" bl_description = "Remove other object bake info, so it won't be automatically baked anymore if you choose to rebake" bl_options = {'REGISTER', 'UNDO'} @@ -1417,7 +1417,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): return rdict class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_bake_to_layer" + bl_idname = "wm.y_bake_to_layer" bl_label = "Bake To Layer" bl_description = "Bake something as layer/mask" bl_options = {'REGISTER', 'UNDO'} @@ -2145,7 +2145,7 @@ def execute(self, context): return {'FINISHED'} class YRebakeBakedImages(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_rebake_baked_images" + bl_idname = "wm.y_rebake_baked_images" bl_label = "Rebake All Baked Images" bl_description = "Rebake all of the baked images in all layers" bl_options = {'REGISTER'} @@ -2387,7 +2387,7 @@ def bake_as_image( return image class YBakeEntityToImage(bpy.types.Operator, BaseBakeOperator): - bl_idname = "material.y_bake_entity_to_image" + bl_idname = "wm.y_bake_entity_to_image" bl_label = "Bake Layer/Mask To Image" bl_description = "Bake Layer/Mask to an image" bl_options = {'UNDO'} @@ -2903,7 +2903,7 @@ def execute(self, context): return {"FINISHED"} class YRemoveBakedEntity(bpy.types.Operator): - bl_idname = "material.y_remove_baked_entity" + bl_idname = "wm.y_remove_baked_entity" bl_label = "Remove Baked Layer/Mask" bl_description = "Remove baked layer/mask" bl_options = {'REGISTER', 'UNDO'} diff --git a/ImageAtlas.py b/ImageAtlas.py index 63ffdc68..4e52e960 100644 --- a/ImageAtlas.py +++ b/ImageAtlas.py @@ -216,7 +216,7 @@ def replace_segment_with_image(yp, segment, image, uv_name=''): return entities #class YUVTransformTest(bpy.types.Operator): -# bl_idname = "material.y_uv_transform_test" +# bl_idname = "wm.y_uv_transform_test" # bl_label = "UV Transform Test" # bl_description = "UV Transform Test" # bl_options = {'REGISTER', 'UNDO'} @@ -285,7 +285,7 @@ def set_segment_mapping(entity, segment, image, use_baked=False): mapping.translation[1] = offset_y class YNewImageAtlasSegmentTest(bpy.types.Operator): - bl_idname = "material.y_new_image_atlas_segment_test" + bl_idname = "wm.y_new_image_atlas_segment_test" bl_label = "New Image Atlas Segment Test" bl_description = "New Image Atlas segment test" bl_options = {'REGISTER', 'UNDO'} @@ -389,7 +389,7 @@ def execute(self, context): return {'FINISHED'} class YRefreshTransformedLayerUV(bpy.types.Operator): - bl_idname = "material.y_refresh_transformed_uv" + bl_idname = "wm.y_refresh_transformed_uv" bl_label = "Refresh Layer UV with Custom Transformation" bl_description = "Refresh layer UV with custom transformation" bl_options = {'REGISTER', 'UNDO'} @@ -429,7 +429,7 @@ def execute(self, context): return {'FINISHED'} class YBackToOriginalUV(bpy.types.Operator): - bl_idname = "material.y_back_to_original_uv" + bl_idname = "wm.y_back_to_original_uv" bl_label = "Back to Original UV" bl_description = "Transformed UV detected, your changes will be lost if you edit on this UV.\nClick this button to go back to original UV" bl_options = {'REGISTER', 'UNDO'} @@ -485,7 +485,7 @@ def execute(self, context): return {'FINISHED'} class YConvertToImageAtlas(bpy.types.Operator): - bl_idname = "material.y_convert_to_image_atlas" + bl_idname = "wm.y_convert_to_image_atlas" bl_label = "Convert Image to Image Atlas" bl_description = "Convert image to image atlas (useful to avoid material texture limit)" bl_options = {'REGISTER', 'UNDO'} @@ -597,7 +597,7 @@ def execute(self, context): return {'FINISHED'} class YConvertToStandardImage(bpy.types.Operator): - bl_idname = "material.y_convert_to_standard_image" + bl_idname = "wm.y_convert_to_standard_image" bl_label = "Convert Image Atlas to standard image" bl_description = "Convert image atlas to standard image" bl_options = {'REGISTER', 'UNDO'} diff --git a/Layer.py b/Layer.py index 9a6c4440..a01c508e 100644 --- a/Layer.py +++ b/Layer.py @@ -367,7 +367,7 @@ def add_new_layer( class YRefreshNeighborUV(bpy.types.Operator): """Refresh Neighbor UV""" - bl_idname = "material.y_refresh_neighbor_uv" + bl_idname = "wm.y_refresh_neighbor_uv" bl_label = "Refresh Neighbor UV" bl_options = {'REGISTER', 'UNDO'} @@ -381,7 +381,7 @@ def execute(self, context): class YUseLinearColorSpace(bpy.types.Operator): """This addon need to linear color space image to works properly""" - bl_idname = "material.y_use_linear_color_space" + bl_idname = "wm.y_use_linear_color_space" bl_label = "Use Linear Color Space" bl_options = {'REGISTER', 'UNDO'} @@ -396,7 +396,7 @@ def execute(self, context): return {'FINISHED'} class YNewVcolToOverrideChannel(bpy.types.Operator): - bl_idname = "material.y_new_vcol_to_override_channel" + bl_idname = "wm.y_new_vcol_to_override_channel" bl_label = "New Vertex Color To Override Channel Layer" bl_description = "New Vertex Color To Override Channel Layer" bl_options = {'UNDO'} @@ -558,7 +558,7 @@ def update_channel_idx_new_layer(self, context): self.interpolation = 'Cubic' class YNewVDMLayer(bpy.types.Operator): - bl_idname = "material.y_new_vdm_layer" + bl_idname = "wm.y_new_vdm_layer" bl_label = "New VDM Layer" bl_description = "New Vector Displacement Layer" bl_options = {'UNDO'} @@ -784,7 +784,7 @@ def execute(self, context): return {'FINISHED'} class YNewLayer(bpy.types.Operator): - bl_idname = "material.y_new_layer" + bl_idname = "wm.y_new_layer" bl_label = "New Layer" bl_description = "New Layer" bl_options = {'REGISTER', 'UNDO'} @@ -1567,7 +1567,7 @@ def execute(self, context): class YOpenImageToOverrideChannel(bpy.types.Operator, ImportHelper): """Open Image to Override Channel""" - bl_idname = "material.y_open_image_to_override_layer_channel" + bl_idname = "wm.y_open_image_to_override_layer_channel" bl_label = "Open Image to Override Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -1724,7 +1724,7 @@ def execute(self, context): class YOpenImageToOverride1Channel(bpy.types.Operator, ImportHelper): """Open Image to Override 1 Channel""" - bl_idname = "material.y_open_image_to_override_1_layer_channel" + bl_idname = "wm.y_open_image_to_override_1_layer_channel" bl_label = "Open Image to Override 1 Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2387,7 +2387,7 @@ def search_for_images(tree): return images class YOpenImagesFromMaterialToLayer(bpy.types.Operator, BaseMultipleImagesLayer): - bl_idname = "material.y_open_images_from_material_to_single_layer" + bl_idname = "wm.y_open_images_from_material_to_single_layer" bl_label = "Open Images from Material to single " + get_addon_title() + " Layer" bl_description = "Open images inside material node tree to single " + get_addon_title() + " layer" bl_options = {'REGISTER', 'UNDO'} @@ -2538,7 +2538,7 @@ def execute(self, context): node = get_active_ypaint_node() quick_setup_happen = False if not node: - bpy.ops.material.y_quick_ypaint_node_setup() + bpy.ops.wm.y_quick_ypaint_node_setup() quick_setup_happen = True failed = False @@ -2552,13 +2552,13 @@ def execute(self, context): if failed: if quick_setup_happen: - bpy.ops.material.y_remove_yp_node() + bpy.ops.wm.y_remove_yp_node() return {'CANCELLED'} return {'FINISHED'} class YOpenImagesToSingleLayer(bpy.types.Operator, ImportHelper, BaseMultipleImagesLayer): - bl_idname = "material.y_open_images_to_single_layer" + bl_idname = "wm.y_open_images_to_single_layer" bl_label = "Open Images to single Layer" bl_description = "Open images to single layer" bl_options = {'REGISTER', 'UNDO'} @@ -2589,7 +2589,7 @@ def execute(self, context): class YOpenImageToLayer(bpy.types.Operator, ImportHelper): """Open Image to Layer""" - bl_idname = "material.y_open_image_to_layer" + bl_idname = "wm.y_open_image_to_layer" bl_label = "Open Image to Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2827,7 +2827,7 @@ def execute(self, context): class YOpenAvailableDataToOverride1Channel(bpy.types.Operator): """Open Available Data to Override 1 Channel Layer""" - bl_idname = "material.y_open_available_data_to_override_1_channel" + bl_idname = "wm.y_open_available_data_to_override_1_channel" bl_label = "Open Available Data to Override 1 Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -2941,7 +2941,7 @@ def execute(self, context): class YOpenAvailableDataToOverrideChannel(bpy.types.Operator): """Open Available Data to Override Channel Layer""" - bl_idname = "material.y_open_available_data_to_override_channel" + bl_idname = "wm.y_open_available_data_to_override_channel" bl_label = "Open Available Data to Override Channel Layer" bl_options = {'REGISTER', 'UNDO'} @@ -3121,7 +3121,7 @@ def execute(self, context): class YOpenAvailableDataToLayer(bpy.types.Operator): """Open Available Data to Layer""" - bl_idname = "material.y_open_available_data_to_layer" + bl_idname = "wm.y_open_available_data_to_layer" bl_label = "Open Available Data to Layer" bl_options = {'REGISTER', 'UNDO'} @@ -3347,7 +3347,7 @@ def execute(self, context): return {'FINISHED'} class YMoveInOutLayerGroup(bpy.types.Operator): - bl_idname = "material.y_move_in_out_layer_group" + bl_idname = "wm.y_move_in_out_layer_group" bl_label = "Move In/Out Layer Group" bl_description = "Move in or out layer group" bl_options = {'REGISTER', 'UNDO'} @@ -3481,7 +3481,7 @@ def execute(self, context): return {'FINISHED'} class YMoveLayer(bpy.types.Operator): - bl_idname = "material.y_move_layer" + bl_idname = "wm.y_move_layer" bl_label = "Move Layer" bl_description = "Move layer" bl_options = {'REGISTER', 'UNDO'} @@ -3640,23 +3640,23 @@ def execute(self, context): def draw_move_up_in_layer_group(self, context): col = self.layout.column() - c = col.operator("material.y_move_layer", text='Move Up (Skip Group)', icon='TRIA_UP') + c = col.operator("wm.y_move_layer", text='Move Up (Skip Group)', icon='TRIA_UP') c.direction = 'UP' - c = col.operator("material.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_UP') + c = col.operator("wm.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_UP') c.direction = 'UP' def draw_move_down_in_layer_group(self, context): col = self.layout.column() - c = col.operator("material.y_move_layer", text='Move Down (Skip Group)', icon='TRIA_DOWN') + c = col.operator("wm.y_move_layer", text='Move Down (Skip Group)', icon='TRIA_DOWN') c.direction = 'DOWN' - c = col.operator("material.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_DOWN') + c = col.operator("wm.y_move_in_out_layer_group", text='Move Inside Group', icon='TRIA_DOWN') c.direction = 'DOWN' class YMoveInOutLayerGroupMenu(bpy.types.Operator): - bl_idname = "material.y_move_in_out_layer_group_menu" + bl_idname = "wm.y_move_in_out_layer_group_menu" bl_label = "Move In/Out Layer Group" bl_description = "Move inside or outside layer group" bl_options = {'UNDO'} @@ -3682,7 +3682,7 @@ def execute(self, context): wm = bpy.context.window_manager if self.move_out: - bpy.ops.material.y_move_in_out_layer_group(direction=self.direction) + bpy.ops.wm.y_move_in_out_layer_group(direction=self.direction) else: if self.direction == 'UP': wm.popup_menu(draw_move_up_in_layer_group, title="Options") @@ -3782,11 +3782,11 @@ def remove_layer(yp, index, remove_on_disk=False): def draw_remove_group(self, context): col = self.layout.column() - c = col.operator("material.y_remove_layer", text='Remove parent only', icon='PANEL_CLOSE') + c = col.operator("wm.y_remove_layer", text='Remove parent only', icon='PANEL_CLOSE') c.remove_children = False c.remove_on_disk = False - c = col.operator("material.y_remove_layer", text='Remove parent with all of its children', icon='PANEL_CLOSE') + c = col.operator("wm.y_remove_layer", text='Remove parent with all of its children', icon='PANEL_CLOSE') c.remove_children = True c.remove_on_disk = False @@ -3794,12 +3794,12 @@ def draw_remove_group(self, context): col.separator() col.alert = True col.label(text='Danger Zone', icon='ERROR') - c = col.operator("material.y_remove_layer", text='Remove parent with all of its children and files on disk (WARNING: NO PROMPT & NO UNDO!)', icon='PANEL_CLOSE') + c = col.operator("wm.y_remove_layer", text='Remove parent with all of its children and files on disk (WARNING: NO PROMPT & NO UNDO!)', icon='PANEL_CLOSE') c.remove_children = True c.remove_on_disk = True class YRemoveLayerMenu(bpy.types.Operator): - bl_idname = "material.y_remove_layer_menu" + bl_idname = "wm.y_remove_layer_menu" bl_label = "Remove Layer Menu" bl_description = "Remove Layer Menu" #bl_options = {'REGISTER', 'UNDO'} @@ -3815,7 +3815,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayer(bpy.types.Operator): - bl_idname = "material.y_remove_layer" + bl_idname = "wm.y_remove_layer" bl_label = "Remove Layer" bl_description = "Remove Layer" bl_options = {'UNDO'} @@ -4187,7 +4187,7 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): layer.expand_source = layer.type not in {'IMAGE', 'VCOL'} or (image != None and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) class YReplaceLayerChannelOverride(bpy.types.Operator): - bl_idname = "material.y_replace_layer_channel_override" + bl_idname = "wm.y_replace_layer_channel_override" bl_label = "Replace Layer Channel Override" bl_description = "Replace Layer Channel Override" bl_options = {'REGISTER', 'UNDO'} @@ -4214,7 +4214,7 @@ def execute(self, context): return {'FINISHED'} class YReplaceLayerChannelOverride1(bpy.types.Operator): - bl_idname = "material.y_replace_layer_channel_override_1" + bl_idname = "wm.y_replace_layer_channel_override_1" bl_label = "Replace Layer Channel Normal Override" bl_description = "Replace Layer Channel Normal Override" bl_options = {'REGISTER', 'UNDO'} @@ -4241,7 +4241,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayerChannelOverrideSource(bpy.types.Operator): - bl_idname = "material.y_remove_channel_override_source" + bl_idname = "wm.y_remove_channel_override_source" bl_label = "Replace Layer Channel Override Source" bl_description = "Replace Layer Channel Override Source" bl_options = {'REGISTER', 'UNDO'} @@ -4261,7 +4261,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayerChannelOverride1Source(bpy.types.Operator): - bl_idname = "material.y_remove_channel_override_1_source" + bl_idname = "wm.y_remove_channel_override_1_source" bl_label = "Replace Layer Channel Normal Override Source" bl_description = "Replace Layer Channel Normal Override Source" bl_options = {'REGISTER', 'UNDO'} @@ -4281,7 +4281,7 @@ def execute(self, context): return {'FINISHED'} class YSetLayerChannelNormalBlendType(bpy.types.Operator): - bl_idname = "material.y_set_layer_channel_normal_blend_type" + bl_idname = "wm.y_set_layer_channel_normal_blend_type" bl_label = "Set Layer Channel Normal Blend Type" bl_description = "Set layer channel normal blend type" bl_options = {'UNDO'} @@ -4305,7 +4305,7 @@ def execute(self, context): return {'FINISHED'} class YSetLayerChannelBlendType(bpy.types.Operator): - bl_idname = "material.y_set_layer_channel_blend_type" + bl_idname = "wm.y_set_layer_channel_blend_type" bl_label = "Set Layer Channel Blend Type" bl_description = "Set layer channel blend type" bl_options = {'UNDO'} @@ -4329,7 +4329,7 @@ def execute(self, context): return {'FINISHED'} class YSetLayerChannelInput(bpy.types.Operator): - bl_idname = "material.y_set_layer_channel_input" + bl_idname = "wm.y_set_layer_channel_input" bl_label = "Set Layer Channel Input" bl_description = "Set layer channel input" bl_options = {'UNDO'} @@ -4381,7 +4381,7 @@ def execute(self, context): return {'FINISHED'} class YReplaceLayerType(bpy.types.Operator): - bl_idname = "material.y_replace_layer_type" + bl_idname = "wm.y_replace_layer_type" bl_label = "Replace Layer Type" bl_description = "Replace Layer Type" bl_options = {'REGISTER', 'UNDO'} @@ -4776,7 +4776,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate already_copied_ids.append(j) class YDuplicateLayer(bpy.types.Operator): - bl_idname = "material.y_duplicate_layer" + bl_idname = "wm.y_duplicate_layer" bl_label = "Duplicate layer" bl_description = "Duplicate Layer" bl_options = {'UNDO'} @@ -4962,7 +4962,7 @@ def execute(self, context): return {'FINISHED'} class YCopyLayer(bpy.types.Operator): - bl_idname = "material.y_copy_layer" + bl_idname = "wm.y_copy_layer" bl_label = "Copy Layer" bl_description = "Copy Layer" bl_options = {'REGISTER', 'UNDO'} @@ -4991,7 +4991,7 @@ def execute(self, context): return {'FINISHED'} class YPasteLayer(bpy.types.Operator): - bl_idname = "material.y_paste_layer" + bl_idname = "wm.y_paste_layer" bl_label = "Paste Layer" bl_description = "Paste Layer" bl_options = {'UNDO'} @@ -5230,7 +5230,7 @@ def execute(self, context): return {'FINISHED'} class YSelectDecalObject(bpy.types.Operator): - bl_idname = "material.y_select_decal_object" + bl_idname = "wm.y_select_decal_object" bl_label = "Select Decal Object" bl_description = "Select Decal Object" bl_options = {'REGISTER', 'UNDO'} @@ -5268,7 +5268,7 @@ def execute(self, context): return {'FINISHED'} class YSetDecalObjectPositionToCursor(bpy.types.Operator): - bl_idname = "material.y_set_decal_object_position_to_sursor" + bl_idname = "wm.y_set_decal_object_position_to_sursor" bl_label = "Set Decal Position to Cursor" bl_description = "Set the position of the decal object to the 3D cursor" bl_options = {'REGISTER', 'UNDO'} diff --git a/ListItem.py b/ListItem.py index b5b6d5fd..c35c3d1e 100644 --- a/ListItem.py +++ b/ListItem.py @@ -213,7 +213,7 @@ class YListItem(bpy.types.PropertyGroup): ) class YRefreshListItems(bpy.types.Operator): - bl_idname = "material.y_refresh_list_items" + bl_idname = "wm.y_refresh_list_items" bl_label = "Refresh List Items" bl_description = "Refresh List Items" bl_options = {'REGISTER', 'UNDO'} diff --git a/Mask.py b/Mask.py index ff69e88f..27ce5287 100644 --- a/Mask.py +++ b/Mask.py @@ -522,7 +522,7 @@ def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_ mask.expand_source = mask.type not in {'IMAGE'} or (image != None and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) class YNewLayerMask(bpy.types.Operator): - bl_idname = "material.y_new_layer_mask" + bl_idname = "wm.y_new_layer_mask" bl_label = "New Layer Mask" bl_description = "New Layer Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1024,7 +1024,7 @@ def execute(self, context): class YOpenImageAsMask(bpy.types.Operator, ImportHelper): """Open Image as Mask""" - bl_idname = "material.y_open_image_as_mask" + bl_idname = "wm.y_open_image_as_mask" bl_label = "Open Image as Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1282,7 +1282,7 @@ def update_available_data_name_as_mask(self, context): self.source_input = 'RGB' class YOpenAvailableDataAsMask(bpy.types.Operator): - bl_idname = "material.y_open_available_data_as_mask" + bl_idname = "wm.y_open_available_data_as_mask" bl_label = "Open available data as Layer Mask" bl_description = "Open available data as Layer Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1552,7 +1552,7 @@ def execute(self, context): return {'FINISHED'} class YMoveLayerMask(bpy.types.Operator): - bl_idname = "material.y_move_layer_mask" + bl_idname = "wm.y_move_layer_mask" bl_label = "Move Layer Mask" bl_description = "Move layer mask" bl_options = {'REGISTER', 'UNDO'} @@ -1625,7 +1625,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveLayerMask(bpy.types.Operator): - bl_idname = "material.y_remove_layer_mask" + bl_idname = "wm.y_remove_layer_mask" bl_label = "Remove Layer Mask" bl_description = "Remove Layer Mask" bl_options = {'REGISTER', 'UNDO'} @@ -1722,7 +1722,7 @@ def execute(self, context): return {'FINISHED'} class YReplaceMaskType(bpy.types.Operator): - bl_idname = "material.y_replace_mask_type" + bl_idname = "wm.y_replace_mask_type" bl_label = "Replace Mask Type" bl_description = "Replace Mask Type" bl_options = {'REGISTER', 'UNDO'} @@ -1812,7 +1812,7 @@ def execute(self, context): class YFixEdgeDetectAO(bpy.types.Operator): """Eevee Ambient Occlusion must be enabled to make edge detect mask to work""" - bl_idname = "material.y_fix_edge_detect_ao" + bl_idname = "wm.y_fix_edge_detect_ao" bl_label = "Fix Edge Detect Mask AO" bl_options = {'REGISTER', 'UNDO'} diff --git a/MaskModifier.py b/MaskModifier.py index b1f2dd2c..87574e31 100644 --- a/MaskModifier.py +++ b/MaskModifier.py @@ -126,7 +126,7 @@ def draw_modifier_properties(tree, m, layout): curve.draw_buttons_ext(bpy.context, layout) class YNewMaskModifier(bpy.types.Operator): - bl_idname = "material.y_new_mask_modifier" + bl_idname = "wm.y_new_mask_modifier" bl_label = "New Mask Modifier" bl_description = "New Mask Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -159,7 +159,7 @@ def execute(self, context): return {'FINISHED'} class YMoveMaskModifier(bpy.types.Operator): - bl_idname = "material.y_move_mask_modifier" + bl_idname = "wm.y_move_mask_modifier" bl_label = "Move Mask Modifier" bl_description = "Move Mask Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -214,7 +214,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveMaskModifier(bpy.types.Operator): - bl_idname = "material.y_remove_mask_modifier" + bl_idname = "wm.y_remove_mask_modifier" bl_label = "Remove Mask Modifier" bl_description = "Remove Mask Modifier" bl_options = {'REGISTER', 'UNDO'} diff --git a/Modifier.py b/Modifier.py index ac57e52e..90395194 100644 --- a/Modifier.py +++ b/Modifier.py @@ -117,7 +117,7 @@ def add_new_modifier(parent, modifier_type): return m class YNewYPaintModifier(bpy.types.Operator): - bl_idname = "material.y_new_ypaint_modifier" + bl_idname = "wm.y_new_ypaint_modifier" bl_label = "New " + get_addon_title() + " Modifier" bl_description = "New " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -179,7 +179,7 @@ def execute(self, context): return {'FINISHED'} class YMoveYPaintModifier(bpy.types.Operator): - bl_idname = "material.y_move_ypaint_modifier" + bl_idname = "wm.y_move_ypaint_modifier" bl_label = "Move " + get_addon_title() + " Modifier" bl_description = "Move " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -244,7 +244,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveYPaintModifier(bpy.types.Operator): - bl_idname = "material.y_remove_ypaint_modifier" + bl_idname = "wm.y_remove_ypaint_modifier" bl_label = "Remove " + get_addon_title() + " Modifier" bl_description = "Remove " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} diff --git a/NormalMapModifier.py b/NormalMapModifier.py index 66381016..8e301aab 100644 --- a/NormalMapModifier.py +++ b/NormalMapModifier.py @@ -25,7 +25,7 @@ def add_new_normalmap_modifier(ch, layer, modifier_type): check_modifier_nodes(m, tree) class YNewNormalmapModifier(bpy.types.Operator): - bl_idname = "material.y_new_normalmap_modifier" + bl_idname = "wm.y_new_normalmap_modifier" bl_label = "New Normal Map Modifier" bl_description = "New Normal Map Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -65,7 +65,7 @@ def execute(self, context): return {'FINISHED'} class YMoveNormalMapModifier(bpy.types.Operator): - bl_idname = "material.y_move_normalmap_modifier" + bl_idname = "wm.y_move_normalmap_modifier" bl_label = "Move " + get_addon_title() + " Modifier" bl_description = "Move " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} @@ -133,7 +133,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveNormalMapModifier(bpy.types.Operator): - bl_idname = "material.y_remove_normalmap_modifier" + bl_idname = "wm.y_remove_normalmap_modifier" bl_label = "Remove " + get_addon_title() + " Modifier" bl_description = "Remove " + get_addon_title() + " Modifier" bl_options = {'REGISTER', 'UNDO'} diff --git a/Root.py b/Root.py index 0ea09794..24a1a2a4 100644 --- a/Root.py +++ b/Root.py @@ -174,7 +174,7 @@ def create_new_yp_channel(group_tree, name, channel_type, non_color=True, enable return channel class YSelectMaterialPolygons(bpy.types.Operator): - bl_idname = "material.y_select_all_material_polygons" + bl_idname = "wm.y_select_all_material_polygons" bl_label = "Select All Material Polygons" bl_description = "Select all polygons using this material" bl_options = {'REGISTER', 'UNDO'} @@ -309,7 +309,7 @@ def execute(self, context): return {'FINISHED'} class YRenameUVMaterial(bpy.types.Operator): - bl_idname = "material.y_rename_uv_using_the_same_material" + bl_idname = "wm.y_rename_uv_using_the_same_material" bl_label = "Rename UV that using same Material" bl_description = "Rename UV on objects that used the same material" bl_options = {'REGISTER', 'UNDO'} @@ -423,7 +423,7 @@ def execute(self, context): return {'FINISHED'} class YQuickYPaintNodeSetup(bpy.types.Operator): - bl_idname = "material.y_quick_ypaint_node_setup" + bl_idname = "wm.y_quick_ypaint_node_setup" bl_label = "Quick " + get_addon_title() + " Node Setup" bl_description = "Quick " + get_addon_title() + " Node Setup" bl_options = {'REGISTER', 'UNDO'} @@ -797,7 +797,7 @@ def execute(self, context): return {'FINISHED'} class YNewYPaintNode(bpy.types.Operator): - bl_idname = "material.y_add_new_ypaint_node" + bl_idname = "wm.y_add_new_ypaint_node" bl_label = "Add new " + get_addon_title() + " Node" bl_description = "Add new " + get_addon_title() + " node" bl_options = {'REGISTER', 'UNDO'} @@ -1033,7 +1033,7 @@ def do_alpha_setup(mat, node, channel): tree.links.new(alpha_output, target_socket) class YConnectYPaintChannelAlpha(bpy.types.Operator): - bl_idname = "material.y_connect_ypaint_channel_alpha" + bl_idname = "wm.y_connect_ypaint_channel_alpha" bl_label = "Connect " + get_addon_title() + " Channel Alpha" bl_description = "Connect " + get_addon_title() + " channel alpha to other nodes" bl_options = {'REGISTER', 'UNDO'} @@ -1043,7 +1043,7 @@ def execute(self, context): return {'FINISHED'} class YConnectYPaintChannel(bpy.types.Operator): - bl_idname = "material.y_connect_ypaint_channel" + bl_idname = "wm.y_connect_ypaint_channel" bl_label = "Connect " + get_addon_title() + " Channel" bl_description = "Connect " + get_addon_title() + " channel to other nodes" bl_options = {'REGISTER', 'UNDO'} @@ -1105,7 +1105,7 @@ def execute(self, context): return {'FINISHED'} class YNewYPaintChannel(bpy.types.Operator): - bl_idname = "material.y_add_new_ypaint_channel" + bl_idname = "wm.y_add_new_ypaint_channel" bl_label = "Add new " + get_addon_title() + " Channel" bl_description = "Add new " + get_addon_title() + " channel" bl_options = {'REGISTER', 'UNDO'} @@ -1322,7 +1322,7 @@ def execute(self, context): return {'FINISHED'} class YMoveYPaintChannel(bpy.types.Operator): - bl_idname = "material.y_move_ypaint_channel" + bl_idname = "wm.y_move_ypaint_channel" bl_label = "Move " + get_addon_title() + " Channel" bl_description = "Move " + get_addon_title() + " channel" bl_options = {'REGISTER', 'UNDO'} @@ -1409,7 +1409,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveYPaintChannel(bpy.types.Operator): - bl_idname = "material.y_remove_ypaint_channel" + bl_idname = "wm.y_remove_ypaint_channel" bl_label = "Remove " + get_addon_title() + " Channel" bl_description = "Remove " + get_addon_title() + " channel" bl_options = {'REGISTER', 'UNDO'} @@ -1652,7 +1652,7 @@ def execute(self, context): return {'FINISHED'} class YAddSimpleUVs(bpy.types.Operator): - bl_idname = "material.y_add_simple_uvs" + bl_idname = "wm.y_add_simple_uvs" bl_label = "Add simple UVs" bl_description = "Add Simple UVs" bl_options = {'REGISTER', 'UNDO'} @@ -1675,7 +1675,7 @@ def execute(self, context): return {'FINISHED'} class YFixChannelMissmatch(bpy.types.Operator): - bl_idname = "material.y_fix_channel_missmatch" + bl_idname = "wm.y_fix_channel_missmatch" bl_label = "Fix Channels Mistmatch" bl_description = "Fix channels missmatch because of error" bl_options = {'REGISTER', 'UNDO'} @@ -1698,7 +1698,7 @@ def execute(self, context): return {'FINISHED'} class YFixMissingUV(bpy.types.Operator): - bl_idname = "material.y_fix_missing_uv" + bl_idname = "wm.y_fix_missing_uv" bl_label = "Fix missing UV" bl_description = "Fix missing UV" bl_options = {'REGISTER', 'UNDO'} @@ -1804,7 +1804,7 @@ def execute(self, context): return {'FINISHED'} class YRenameYPaintTree(bpy.types.Operator): - bl_idname = "material.y_rename_ypaint_tree" + bl_idname = "wm.y_rename_ypaint_tree" bl_label = "Rename " + get_addon_title() + " Group Name" bl_description = "Rename " + get_addon_title() + " Group Name" bl_options = {'REGISTER', 'UNDO'} @@ -1832,7 +1832,7 @@ def execute(self, context): return {'FINISHED'} class YChangeActiveYPaintNode(bpy.types.Operator): - bl_idname = "material.y_change_active_ypaint_node" + bl_idname = "wm.y_change_active_ypaint_node" bl_label = "Change Active " + get_addon_title() + " Node" bl_description = "Change Active " + get_addon_title() + " Node" bl_options = {'REGISTER', 'UNDO'} @@ -1899,7 +1899,7 @@ def duplicate_mat(mat): return mat.copy() class YDuplicateYPNodes(bpy.types.Operator): - bl_idname = "material.y_duplicate_yp_nodes" + bl_idname = "wm.y_duplicate_yp_nodes" bl_label = "Duplicate " + get_addon_title() + " Nodes" bl_description = get_addon_title() + " doesn't work with more than one user! Duplicate to make it single user" bl_options = {'REGISTER', 'UNDO'} @@ -2092,7 +2092,7 @@ def fix_missing_img(name, src, is_mask=False): src.image = img class YOptimizeNormalProcess(bpy.types.Operator): - bl_idname = "material.y_optimize_normal_process" + bl_idname = "wm.y_optimize_normal_process" bl_label = "Optimize Normal Process" bl_description = "Optimize normal process by not processing normal input when it's not connected" bl_options = {'REGISTER', 'UNDO'} @@ -2118,7 +2118,7 @@ def execute(self, context): return {'FINISHED'} class YFixMissingData(bpy.types.Operator): - bl_idname = "material.y_fix_missing_data" + bl_idname = "wm.y_fix_missing_data" bl_label = "Fix Missing Data" bl_description = "Fix missing image/vertex color data" bl_options = {'REGISTER', 'UNDO'} @@ -2246,7 +2246,7 @@ def execute(self, context): return {'FINISHED'} class YRefreshTangentSignVcol(bpy.types.Operator): - bl_idname = "material.y_refresh_tangent_sign_vcol" + bl_idname = "wm.y_refresh_tangent_sign_vcol" bl_label = "Refresh Tangent Sign Vertex Colors" bl_description = "Refresh Tangent Sign Vertex Colors to make it work in Blender 2.8" bl_options = {'REGISTER', 'UNDO'} @@ -2267,7 +2267,7 @@ def execute(self, context): return {'FINISHED'} class YRemoveYPaintNode(bpy.types.Operator): - bl_idname = "material.y_remove_yp_node" + bl_idname = "wm.y_remove_yp_node" bl_label = "Remove " + get_addon_title() + " Node" bl_description = "Remove " + get_addon_title() + " node, but keep all baked channel image(s)""" bl_options = {'REGISTER', 'UNDO'} @@ -2326,7 +2326,7 @@ def execute(self, context): return {'FINISHED'} class YCleanYPCaches(bpy.types.Operator): - bl_idname = "material.y_clean_yp_caches" + bl_idname = "wm.y_clean_yp_caches" bl_label = "Clean " + get_addon_title() + " Caches" bl_description = "Clean " + get_addon_title() + " caches""" bl_options = {'REGISTER', 'UNDO'} diff --git a/Test.py b/Test.py index 7409f34d..7cfce48f 100644 --- a/Test.py +++ b/Test.py @@ -14,7 +14,7 @@ def run_tests(): class YRunAutomatedTest(bpy.types.Operator): - bl_idname = "material.y_run_automated_test" + bl_idname = "wm.y_run_automated_test" bl_label = "Run Automated Test" bl_options = {'UNDO'} diff --git a/UDIM.py b/UDIM.py index e77cec4d..394d7b13 100644 --- a/UDIM.py +++ b/UDIM.py @@ -529,7 +529,7 @@ def remove_tile(image, tilenum): remove_tiles(image, [tilenum]) class YRefillUDIMTiles(bpy.types.Operator): - bl_idname = "material.y_refill_udim_tiles" + bl_idname = "wm.y_refill_udim_tiles" bl_label = "Refill UDIM Tiles" bl_description = "Refill all UDIM tiles used by all layers and masks based on their UV" bl_options = {'REGISTER', 'UNDO'} diff --git a/bake_common.py b/bake_common.py index a0760ad0..5a131f1e 100644 --- a/bake_common.py +++ b/bake_common.py @@ -585,7 +585,7 @@ def prepare_bake_settings( uv_layers = get_uv_layers(obj) if len(uv_layers) == 0: scene.objects.active = obj - bpy.ops.material.y_add_simple_uvs() + bpy.ops.wm.y_add_simple_uvs() if scene.objects.active != ori_active_object: scene.objects.active = ori_active_object diff --git a/image_ops.py b/image_ops.py index cbac21a6..cc0d1a70 100644 --- a/image_ops.py +++ b/image_ops.py @@ -314,7 +314,7 @@ def save_pack_all(yp): class YInvertImage(bpy.types.Operator): """Invert Image""" - bl_idname = "material.y_invert_image" + bl_idname = "wm.y_invert_image" bl_label = "Invert Image" bl_options = {'REGISTER', 'UNDO'} @@ -351,7 +351,7 @@ def execute(self, context): class YRefreshImage(bpy.types.Operator): """Reload Image""" - bl_idname = "material.y_reload_image" + bl_idname = "wm.y_reload_image" bl_label = "Reload Image" bl_options = {'REGISTER', 'UNDO'} @@ -372,7 +372,7 @@ def execute(self, context): class YPackImage(bpy.types.Operator): """Pack Image""" - bl_idname = "material.y_pack_image" + bl_idname = "wm.y_pack_image" bl_label = "Pack Image" bl_options = {'REGISTER', 'UNDO'} @@ -442,7 +442,7 @@ def execute(self, context): class YSaveImage(bpy.types.Operator): """Save Image""" - bl_idname = "material.y_save_image" + bl_idname = "wm.y_save_image" bl_label = "Save Image" bl_options = {'REGISTER', 'UNDO'} @@ -594,7 +594,7 @@ def remove_unpacked_image_path(image, filepath, default_dir, default_dir_found, class YSaveAllBakedImages(bpy.types.Operator): """Save All Baked Images to directory""" - bl_idname = "material.y_save_all_baked_images" + bl_idname = "wm.y_save_all_baked_images" bl_label = "Save All Baked Images" bl_options = {'REGISTER', 'UNDO'} @@ -817,7 +817,7 @@ def get_file_format_items(): class YSaveAsImage(bpy.types.Operator, ExportHelper): """Save As Image""" - bl_idname = "material.y_save_as_image" + bl_idname = "wm.y_save_as_image" bl_label = "Save As Image" bl_options = {'REGISTER', 'UNDO'} @@ -1175,7 +1175,7 @@ def execute(self, context): class YSavePackAll(bpy.types.Operator): """Save and Pack All Image Layers""" - bl_idname = "material.y_save_pack_all" + bl_idname = "wm.y_save_pack_all" bl_label = "Save and Pack All Image Layers" bl_options = {'REGISTER', 'UNDO'} diff --git a/tests/test_quicksetup.py b/tests/test_quicksetup.py index 2599dbe8..d33a6c0b 100644 --- a/tests/test_quicksetup.py +++ b/tests/test_quicksetup.py @@ -22,14 +22,14 @@ def get_texdir(): class TestPrincipled(unittest.TestCase): def test_00_principled(self): # Quick Setup - bpy.ops.material.y_quick_ypaint_node_setup(type='BSDF_PRINCIPLED') + bpy.ops.wm.y_quick_ypaint_node_setup(type='BSDF_PRINCIPLED') # Get yp yp = get_yp() self.assertTrue(yp != None) def test_99_remove_yp_node(self): - bpy.ops.material.y_remove_yp_node() + bpy.ops.wm.y_remove_yp_node() # Get yp yp = get_yp() @@ -38,7 +38,7 @@ def test_99_remove_yp_node(self): class TestNewLayer(TestPrincipled): def test_01_new_layer(self): # Add new image layer - bpy.ops.material.y_new_layer(name='Image', uv_map='UVMap') + bpy.ops.wm.y_new_layer(name='Image', uv_map='UVMap') yp = get_yp() self.assertTrue(len(yp.layers) == 1) @@ -46,7 +46,7 @@ def test_01_new_layer(self): class TestNewLayerWithMask(TestPrincipled): def test_01_new_layer_with_mask(self): # Add new solid color layer with image mask - bpy.ops.material.y_new_layer(name='Solid Color', type='COLOR', uv_map='UVMap', add_mask=True, mask_uv_name='UVMap') + bpy.ops.wm.y_new_layer(name='Solid Color', type='COLOR', uv_map='UVMap', add_mask=True, mask_uv_name='UVMap') yp = get_yp() self.assertTrue(len(yp.layers) == 1) @@ -56,7 +56,7 @@ def test_01_open_image_to_layer(self): texdir = get_texdir() # Open image as layer - bpy.ops.material.y_open_image_to_layer( + bpy.ops.wm.y_open_image_to_layer( files = [{"name":"blender_color.png"}], directory = texdir, uv_map="UVMap" @@ -70,7 +70,7 @@ def test_01_open_images_to_single_layer_with_mask(self): texdir = get_texdir() # Open images to single layer with white mask - bpy.ops.material.y_open_images_to_single_layer( + bpy.ops.wm.y_open_images_to_single_layer( files = [ {"name":"blender_color.png"}, {"name":"blender_metallic.png"}, @@ -91,7 +91,7 @@ class TestNewMask(TestOpenImageAsLayer): def test_02_new_mask(self): # New layer mask - bpy.ops.material.y_new_layer_mask(name='Image Mask', uv_name='UVMap', color_option='WHITE') + bpy.ops.wm.y_new_layer_mask(name='Image Mask', uv_name='UVMap', color_option='WHITE') layer = get_active_layer() self.assertTrue(len(layer.masks) == 1) @@ -121,7 +121,7 @@ class TestDuplicateLayer(TestNewLayer): def test_02_duplicate_layer(self): # Duplicate Layer - bpy.ops.material.y_duplicate_layer() + bpy.ops.wm.y_duplicate_layer() yp = get_yp() self.assertTrue(len(yp.layers) == 2) diff --git a/transition.py b/transition.py index e5e53567..845fbc20 100644 --- a/transition.py +++ b/transition.py @@ -127,7 +127,7 @@ def show_transition(self, context, ttype): class YShowTransitionBump(bpy.types.Operator): """Use transition bump (This will affect other channels)""" - bl_idname = "material.y_show_transition_bump" + bl_idname = "wm.y_show_transition_bump" bl_label = "Show Transition Bump" bl_options = {'REGISTER', 'UNDO'} @@ -140,7 +140,7 @@ def execute(self, context): class YShowTransitionRamp(bpy.types.Operator): """Use transition ramp (Works best if there's transition bump enabled on other channel)""" - bl_idname = "material.y_show_transition_ramp" + bl_idname = "wm.y_show_transition_ramp" bl_label = "Show Transition Ramp" bl_options = {'REGISTER', 'UNDO'} @@ -153,7 +153,7 @@ def execute(self, context): class YShowTransitionAO(bpy.types.Operator): """Use transition AO (Only works if there's transition bump enabled on other channel)""" - bl_idname = "material.y_show_transition_ao" + bl_idname = "wm.y_show_transition_ao" bl_label = "Show Transition AO" bl_options = {'REGISTER', 'UNDO'} @@ -166,7 +166,7 @@ def execute(self, context): class YHideTransitionEffect(bpy.types.Operator): """Remove transition Effect""" - bl_idname = "material.y_hide_transition_effect" + bl_idname = "wm.y_hide_transition_effect" bl_label = "Hide Transition Effect" bl_options = {'REGISTER', 'UNDO'} diff --git a/ui.py b/ui.py index f46e54a4..aee95988 100644 --- a/ui.py +++ b/ui.py @@ -183,7 +183,7 @@ def draw_bake_info(bake_info, layout, entity): if is_bl_newer_than(2, 79): brow.label(text=oo.object.name, icon_value=lib.get_icon('object_index')) else: brow.label(text=oo.object_name, icon_value=lib.get_icon('object_index')) - brow.operator('material.y_remove_bake_info_other_object', text='', icon_value=lib.get_icon('close')) + brow.operator('wm.y_remove_bake_info_other_object', text='', icon_value=lib.get_icon('close')) else: brow = bcol.row() brow.label(text='No source objects found!', icon='ERROR') @@ -199,8 +199,8 @@ def draw_bake_info(bake_info, layout, entity): layout.context_pointer_set('bake_info', bi) if bi.bake_type == 'SELECTED_VERTICES': - c = layout.operator("material.y_try_to_select_baked_vertex", text='Try to Reselect Vertices', icon='GROUP_VERTEX') - c = layout.operator("material.y_bake_to_layer", text='Rebake ' + bake_type_labels[bi.bake_type], icon_value=lib.get_icon('bake')) + c = layout.operator("wm.y_try_to_select_baked_vertex", text='Try to Reselect Vertices', icon='GROUP_VERTEX') + c = layout.operator("wm.y_bake_to_layer", text='Rebake ' + bake_type_labels[bi.bake_type], icon_value=lib.get_icon('bake')) c.type = bi.bake_type if m1 or m3: c.target_type = 'LAYER' else: c.target_type = 'MASK' @@ -217,7 +217,7 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh split.label(text='Input:') split.prop(entity, 'source_input', text='') - unlink_op = 'material.y_remove_layer' + unlink_op = 'wm.y_remove_layer' if entity: yp = entity.id_data.yp m1 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) @@ -226,14 +226,14 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh layer = yp.layers[int(m1.group(1))] col.context_pointer_set('layer', layer) col.context_pointer_set('mask', entity) - unlink_op = 'material.y_remove_layer_mask' + unlink_op = 'wm.y_remove_layer_mask' elif m2: layer = yp.layers[int(m2.group(1))] col.context_pointer_set('layer', layer) col.context_pointer_set('channel', entity) if show_flip_y: - unlink_op = 'material.y_remove_channel_override_1_source' - else: unlink_op = 'material.y_remove_channel_override_source' + unlink_op = 'wm.y_remove_channel_override_1_source' + else: unlink_op = 'wm.y_remove_channel_override_source' if image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel: bi = image.y_bake_info @@ -890,11 +890,11 @@ def draw_bake_targets_ui(context, layout, node): #rcol.context_pointer_set('node', node) if is_bl_newer_than(2, 80): - rcol.operator("material.y_new_bake_target", icon='ADD', text='') - rcol.operator("material.y_remove_bake_target", icon='REMOVE', text='') + rcol.operator("wm.y_new_bake_target", icon='ADD', text='') + rcol.operator("wm.y_remove_bake_target", icon='REMOVE', text='') else: - rcol.operator("material.y_new_bake_target", icon='ZOOMIN', text='') - rcol.operator("material.y_remove_bake_target", icon='ZOOMOUT', text='') + rcol.operator("wm.y_new_bake_target", icon='ZOOMIN', text='') + rcol.operator("wm.y_remove_bake_target", icon='ZOOMOUT', text='') if len(yp.bake_targets) > 0: bt = yp.bake_targets[yp.active_bake_target_index] @@ -983,15 +983,15 @@ def draw_root_channels_ui(context, layout, node): if is_bl_newer_than(2, 80): rcol.menu("NODE_MT_y_new_channel_menu", text='', icon='ADD') - #rcol.operator_menu_enum("material.y_add_new_ypaint_channel", 'type', icon='ADD', text='') - rcol.operator("material.y_remove_ypaint_channel", icon='REMOVE', text='') + #rcol.operator_menu_enum("wm.y_add_new_ypaint_channel", 'type', icon='ADD', text='') + rcol.operator("wm.y_remove_ypaint_channel", icon='REMOVE', text='') else: rcol.menu("NODE_MT_y_new_channel_menu", text='', icon='ZOOMIN') - #rcol.operator_menu_enum("material.y_add_new_ypaint_channel", 'type', icon='ZOOMIN', text='') - rcol.operator("material.y_remove_ypaint_channel", icon='ZOOMOUT', text='') + #rcol.operator_menu_enum("wm.y_add_new_ypaint_channel", 'type', icon='ZOOMIN', text='') + rcol.operator("wm.y_remove_ypaint_channel", icon='ZOOMOUT', text='') - rcol.operator("material.y_move_ypaint_channel", text='', icon='TRIA_UP').direction = 'UP' - rcol.operator("material.y_move_ypaint_channel", text='', icon='TRIA_DOWN').direction = 'DOWN' + rcol.operator("wm.y_move_ypaint_channel", text='', icon='TRIA_UP').direction = 'UP' + rcol.operator("wm.y_move_ypaint_channel", text='', icon='TRIA_DOWN').direction = 'DOWN' if len(yp.channels) > 0: @@ -1015,22 +1015,22 @@ def draw_root_channels_ui(context, layout, node): if is_height_input_unconnected_but_has_start_process(node, root_normal_ch): row = mcol.row(align=True) row.alert = True - row.operator('material.y_optimize_normal_process', icon='ERROR', text='Fix Height Process') + row.operator('wm.y_optimize_normal_process', icon='ERROR', text='Fix Height Process') elif is_height_input_connected_but_has_no_start_process(node, root_normal_ch): row = mcol.row(align=True) row.alert = True - row.operator('material.y_optimize_normal_process', icon='ERROR', text='Fix Height Input') + row.operator('wm.y_optimize_normal_process', icon='ERROR', text='Fix Height Input') if is_output_unconnected(node, output_index, channel): row = mcol.row(align=True) row.alert = True - row.operator('material.y_connect_ypaint_channel', icon='ERROR', text='Fix Unconnected Channel Output') + row.operator('wm.y_connect_ypaint_channel', icon='ERROR', text='Fix Unconnected Channel Output') # Fix for alpha channel missing connection elif channel.type == 'RGB' and channel.enable_alpha and is_output_unconnected(node, output_index + 1, channel): row = mcol.row(align=True) row.alert = True - row.operator('material.y_connect_ypaint_channel_alpha', icon='ERROR', text='Fix Unconnected Alpha Output') + row.operator('wm.y_connect_ypaint_channel_alpha', icon='ERROR', text='Fix Unconnected Alpha Output') row = mcol.row(align=True) @@ -1470,7 +1470,7 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i if layer.use_temp_bake: row = row.row(align=True) - row.operator('material.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') + row.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') if layer.type not in {'GROUP', 'PREFERENCES'}: #icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' @@ -1554,7 +1554,7 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i if layer.use_temp_bake: rrcol.context_pointer_set('parent', layer) - rrcol.operator('material.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') + rrcol.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') elif image: draw_image_props(context, source, rrcol, layer, show_flip_y=True, show_datablock=False) @@ -1677,12 +1677,12 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') if is_bl_newer_than(2, 80): - rrow.operator('material.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') - else: rrow.operator('material.y_select_decal_object', icon='EMPTY_DATA') + rrow.operator('wm.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') + else: rrow.operator('wm.y_select_decal_object', icon='EMPTY_DATA') rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') - rrow.operator('material.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') + rrow.operator('wm.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') if layer.texcoord_type != 'Decal' and not is_using_image_atlas: mapping = get_layer_mapping(layer) @@ -1726,7 +1726,7 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') rrow.alert = True - rrow.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + rrow.operator('wm.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') # Blur row rrow = boxcol.row(align=True) @@ -2159,7 +2159,7 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): brow.alert = True brow.context_pointer_set('channel', ch) brow.context_pointer_set('image', image) - brow.operator('material.y_refresh_neighbor_uv', icon='ERROR') + brow.operator('wm.y_refresh_neighbor_uv', icon='ERROR') if ch.show_transition_bump or ch.enable_transition_bump: @@ -2861,7 +2861,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rbcol.active = not mask.use_baked if mask.use_temp_bake: rbcol.context_pointer_set('parent', mask) - rbcol.operator('material.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') + rbcol.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') elif mask_image: draw_image_props(context, mask_source, rbcol, mask, show_datablock=False, show_source_input=True) elif mask.type == 'HEMI': @@ -2882,7 +2882,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rrcol.context_pointer_set('entity', mask) rrrow = rrcol.row(align=True) rrrow.label(text='', icon='BLANK1') - rrrow.operator("material.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) + rrrow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) rrrow.prop(mask, 'use_baked', text='Use Baked', toggle=True) if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: @@ -2966,9 +2966,9 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): boxcol.context_pointer_set('entity', mask) if is_bl_newer_than(2, 80): - boxcol.operator('material.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') - else: boxcol.operator('material.y_select_decal_object', icon='EMPTY_DATA') - boxcol.operator('material.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') + boxcol.operator('wm.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') + else: boxcol.operator('wm.y_select_decal_object', icon='EMPTY_DATA') + boxcol.operator('wm.y_set_decal_object_position_to_sursor', text='Set Position to Cursor', icon='CURSOR') if mask.texcoord_type != 'Decal' and not is_using_image_atlas: mapping = get_mask_mapping(mask) @@ -3010,7 +3010,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): ): rrow = boxcol.row(align=True) rrow.alert = True - rrow.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + rrow.operator('wm.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') # Blur row if mask.texcoord_type != 'Layer': @@ -3047,7 +3047,7 @@ def draw_layers_ui(context, layout, node): if group_tree.users > 1: row = box.row(align=True) row.alert = True - op = row.operator("material.y_duplicate_yp_nodes", text='Fix Multi-User ' + get_addon_title() + ' Node', icon='ERROR') + op = row.operator("wm.y_duplicate_yp_nodes", text='Fix Multi-User ' + get_addon_title() + ' Node', icon='ERROR') op.duplicate_node = True op.duplicate_material = False op.only_active = True @@ -3177,7 +3177,7 @@ def draw_layers_ui(context, layout, node): if is_a_mesh and not uv_found: row = box.row(align=True) row.alert = True - row.operator("material.y_add_simple_uvs", icon='ERROR') + row.operator("wm.y_add_simple_uvs", icon='ERROR') row.alert = False return @@ -3200,7 +3200,7 @@ def draw_layers_ui(context, layout, node): if channel_mismatch: row = box.row(align=True) row.alert = True - row.operator("material.y_fix_channel_missmatch", text='Fix Missmatched Channels!', icon='ERROR') + row.operator("wm.y_fix_channel_missmatch", text='Fix Missmatched Channels!', icon='ERROR') row.alert = False return @@ -3230,7 +3230,7 @@ def draw_layers_ui(context, layout, node): # ): # row = box.row(align=True) # row.alert = True - # row.operator("material.y_fix_duplicated_yp_nodes", text='Fix Duplicated Layers', icon='ERROR') + # row.operator("wm.y_fix_duplicated_yp_nodes", text='Fix Duplicated Layers', icon='ERROR') # row.alert = False # #box.prop(ypui, 'make_image_single_user') # return @@ -3291,7 +3291,7 @@ def draw_layers_ui(context, layout, node): if missing_data: row = box.row(align=True) row.alert = True - row.operator("material.y_fix_missing_data", icon='ERROR') + row.operator("wm.y_fix_missing_data", icon='ERROR') row.alert = False return @@ -3333,7 +3333,7 @@ def draw_layers_ui(context, layout, node): row = box.row(align=True) row.alert = True title = 'UV ' + uv_name + ' is missing or renamed!' - row.operator("material.y_fix_missing_uv", text=title, icon='ERROR').source_uv_name = uv_name + row.operator("wm.y_fix_missing_uv", text=title, icon='ERROR').source_uv_name = uv_name #print(entities) row.alert = False @@ -3349,7 +3349,7 @@ def draw_layers_ui(context, layout, node): if need_tangent_refresh: row = box.row(align=True) row.alert = True - row.operator('material.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent Sign Hacks is missing!') + row.operator('wm.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent Sign Hacks is missing!') row.alert = False # Get active item entity @@ -3450,7 +3450,7 @@ def draw_layers_ui(context, layout, node): if ypup.layer_list_mode in {'DYNAMIC', 'BOTH'}: if ypup.layer_list_mode == 'BOTH': - rcol.operator('material.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Items') + rcol.operator('wm.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Items') rcol.template_list("NODE_UL_YPaint_list_items", "", yp, "list_items", yp, "active_item_index", rows=5, maxrows=5) @@ -3464,54 +3464,54 @@ def draw_layers_ui(context, layout, node): if has_children(layer): # or (image and not image.packed_file): if is_bl_newer_than(2, 80): - rcol.operator("material.y_remove_layer_menu", icon='REMOVE', text='') - else: rcol.operator("material.y_remove_layer_menu", icon='ZOOMOUT', text='') + rcol.operator("wm.y_remove_layer_menu", icon='REMOVE', text='') + else: rcol.operator("wm.y_remove_layer_menu", icon='ZOOMOUT', text='') else: if is_bl_newer_than(2, 80): - c = rcol.operator("material.y_remove_layer", icon='REMOVE', text='') - else: c = rcol.operator("material.y_remove_layer", icon='ZOOMOUT', text='') + c = rcol.operator("wm.y_remove_layer", icon='REMOVE', text='') + else: c = rcol.operator("wm.y_remove_layer", icon='ZOOMOUT', text='') c.remove_children = False if is_top_member(layer): - c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') + c = rcol.operator("wm.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') c.direction = 'UP' c.move_out = True else: upper_idx, upper_layer = get_upper_neighbor(layer) if upper_layer and (upper_layer.type == 'GROUP' or upper_layer.parent_idx != layer.parent_idx): - c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') + c = rcol.operator("wm.y_move_in_out_layer_group_menu", text='', icon='TRIA_UP') c.direction = 'UP' c.move_out = False else: - c = rcol.operator("material.y_move_layer", text='', icon='TRIA_UP') + c = rcol.operator("wm.y_move_layer", text='', icon='TRIA_UP') c.direction = 'UP' if is_bottom_member(layer): - c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') + c = rcol.operator("wm.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') c.direction = 'DOWN' c.move_out = True else: lower_idx, lower_layer = get_lower_neighbor(layer) if lower_layer and (lower_layer.type == 'GROUP' and lower_layer.parent_idx == layer.parent_idx): - c = rcol.operator("material.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') + c = rcol.operator("wm.y_move_in_out_layer_group_menu", text='', icon='TRIA_DOWN') c.direction = 'DOWN' c.move_out = False else: - c = rcol.operator("material.y_move_layer", text='', icon='TRIA_DOWN') + c = rcol.operator("wm.y_move_layer", text='', icon='TRIA_DOWN') c.direction = 'DOWN' else: if is_bl_newer_than(2, 80): - rcol.operator("material.y_remove_layer", icon='REMOVE', text='') - else: rcol.operator("material.y_remove_layer", icon='ZOOMOUT', text='') + rcol.operator("wm.y_remove_layer", icon='REMOVE', text='') + else: rcol.operator("wm.y_remove_layer", icon='ZOOMOUT', text='') - rcol.operator("material.y_move_layer", text='', icon='TRIA_UP').direction = 'UP' - rcol.operator("material.y_move_layer", text='', icon='TRIA_DOWN').direction = 'DOWN' + rcol.operator("wm.y_move_layer", text='', icon='TRIA_UP').direction = 'UP' + rcol.operator("wm.y_move_layer", text='', icon='TRIA_DOWN').direction = 'DOWN' rcol.menu("NODE_MT_y_layer_list_special_menu", text='', icon='DOWNARROW_HLT') @@ -3539,7 +3539,7 @@ def draw_layers_ui(context, layout, node): # Check if any images aren't using proper linear pipelines if any_linear_images_problem(yp): col.alert = True - col.operator('material.y_use_linear_color_space', text='Refresh Linear Color Space', icon='ERROR') + col.operator('wm.y_use_linear_color_space', text='Refresh Linear Color Space', icon='ERROR') col.alert = False # Check if AO is enabled or not @@ -3553,7 +3553,7 @@ def draw_layers_ui(context, layout, node): break if edge_detect_found: col.alert = True - col.operator('material.y_fix_edge_detect_ao', text='Fix EEVEE Edge Detect AO', icon='ERROR') + col.operator('wm.y_fix_edge_detect_ao', text='Fix EEVEE Edge Detect AO', icon='ERROR') col.alert = False if obj.type == 'MESH' and colorid_vcol: @@ -3687,18 +3687,18 @@ def draw_layers_ui(context, layout, node): bbox = col.box() row = bbox.row(align=True) row.alert = True - row.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + row.operator('wm.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') elif obj.data.uv_layers.active.name == TEMP_UV: bbox = col.box() row = bbox.row(align=True) row.alert = True - row.operator('material.y_back_to_original_uv', icon='EDITMODE_HLT', text='Edit Original UV') + row.operator('wm.y_back_to_original_uv', icon='EDITMODE_HLT', text='Edit Original UV') else: if yp.need_temp_uv_refresh or is_active_uv_map_missmatch_active_entity(obj, layer): bbox = col.box() row = bbox.row(align=True) row.alert = True - row.operator('material.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') + row.operator('wm.y_refresh_transformed_uv', icon='FILE_REFRESH', text='Refresh UV') if is_a_mesh and is_bl_newer_than(3, 2): height_layer_ch = get_height_channel(layer) @@ -3724,7 +3724,7 @@ def draw_layers_ui(context, layout, node): cbox = bbox.column() row = cbox.row(align=True) row.alert = True - row.operator('material.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Layer List') + row.operator('wm.y_refresh_list_items', icon='FILE_REFRESH', text='Refresh Layer List') row.alert = False specific_ch = None @@ -3789,7 +3789,7 @@ def draw_test_ui(context, layout): col.label(text='Run test with default cube scene!') if obj and obj.name == 'Cube' and mat and mat.name == 'Material' and not node: - col.operator('material.y_run_automated_test') + col.operator('wm.y_run_automated_test') if (wmyp.test_result_run != 0): col.label(text=pgettext_iface('Test Run Count: ') + str(wmyp.test_result_run)) @@ -3819,8 +3819,8 @@ def main_draw(self, context): layout = self.layout - #layout.operator("material.y_debug_mesh", icon='MESH_DATA') - #layout.operator("material.y_test_ray", icon='MESH_DATA') + #layout.operator("wm.y_debug_mesh", icon='MESH_DATA') + #layout.operator("wm.y_test_ray", icon='MESH_DATA') from . import addon_updater_ops @@ -3953,7 +3953,7 @@ def main_draw(self, context): if not node: layout.label(text="No active " + get_addon_title() + " node!", icon='ERROR') - layout.operator("material.y_quick_ypaint_node_setup", icon_value=lib.get_icon('nodetree')) + layout.operator("wm.y_quick_ypaint_node_setup", icon_value=lib.get_icon('nodetree')) # Test draw_test_ui(context=context, layout=layout) @@ -3968,7 +3968,7 @@ def main_draw(self, context): col = layout.column() col.alert = True col.label(text=group_tree.name + ' (' + yp.version + ')', icon_value=lib.get_icon('nodetree')) - col.operator("material.y_update_yp_trees", text='Update node to version ' + get_current_version_str(), icon='ERROR') + col.operator("wm.y_update_yp_trees", text='Update node to version ' + get_current_version_str(), icon='ERROR') return #layout.label(text='Active: ' + node.node_tree.name, icon_value=lib.get_icon('nodetree')) @@ -4004,7 +4004,7 @@ def main_draw(self, context): #if (baked_found or yp.use_baked) and not group_tree.users > 1: # rrow = row.row(align=True) # rrow.alignment = 'RIGHT' - # rrow.operator('material.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False + # rrow.operator('wm.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False # rrow.separator() # rrow.prop(yp, 'use_baked', toggle=True, text='Use Baked') # rrow.prop(yp, 'enable_baked_outside', toggle=True, text='', icon='NODETREE') @@ -4033,12 +4033,12 @@ def main_draw(self, context): if scenario_1: rrow = row.row(align=True) rrow.alignment = 'RIGHT' - rrow.operator('material.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent') + rrow.operator('wm.y_refresh_tangent_sign_vcol', icon='FILE_REFRESH', text='Tangent') if (baked_found or yp.use_baked) and not group_tree.users > 1: rrow = row.row(align=True) rrow.alignment = 'RIGHT' - rrow.operator('material.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False + rrow.operator('wm.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False rrow.separator() rrow.prop(yp, 'use_baked', toggle=True, text='Use Baked') rrow.prop(yp, 'enable_baked_outside', toggle=True, text='', icon='NODETREE') @@ -4207,9 +4207,9 @@ def main_draw(self, context): col.label(text=pgettext_iface('Number of Color Ramps: ') + str(num_ramps), icon_value=lib.get_icon('modifier')) col.label(text=pgettext_iface('Number of RGB Curves: ') + str(num_curves), icon_value=lib.get_icon('modifier')) - #col.operator('material.y_new_image_atlas_segment_test', icon_value=lib.get_icon('image')) - #col.operator('material.y_new_udim_atlas_segment_test', icon_value=lib.get_icon('image')) - #col.operator('material.y_uv_transform_test', icon_value=lib.get_icon('uv')) + #col.operator('wm.y_new_image_atlas_segment_test', icon_value=lib.get_icon('image')) + #col.operator('wm.y_new_udim_atlas_segment_test', icon_value=lib.get_icon('image')) + #col.operator('wm.y_uv_transform_test', icon_value=lib.get_icon('uv')) # Test draw_test_ui(context=context, layout=layout) @@ -5033,7 +5033,7 @@ def poll(cls, context): def draw(self, context): obj = context.object - op = self.layout.operator("material.y_open_images_from_material_to_single_layer", icon_value=lib.get_icon('image'), text='Open Material Images to Layer') + op = self.layout.operator("wm.y_open_images_from_material_to_single_layer", icon_value=lib.get_icon('image'), text='Open Material Images to Layer') op.mat_name = context.mat_asset.name if hasattr(context, 'mat_asset') else '' op.asset_library_path = context.mat_asset.full_library_path if hasattr(context, 'mat_asset') else '' @@ -5083,15 +5083,15 @@ def draw(self, context): self.layout.label(text='Image: ' + filename) - op = self.layout.operator("material.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Layer") + op = self.layout.operator("wm.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Layer") op.file_browser_filepath = filepath op.texcoord_type = 'UV' - op = self.layout.operator("material.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Mask") + op = self.layout.operator("wm.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Mask") op.file_browser_filepath = filepath op.texcoord_type = 'UV' - op = self.layout.operator("material.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Mask for New Layer") + op = self.layout.operator("wm.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Mask for New Layer") op.type = 'COLOR' op.add_mask = True op.mask_type = 'IMAGE' @@ -5100,15 +5100,15 @@ def draw(self, context): self.layout.separator() - op = self.layout.operator("material.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Layer") + op = self.layout.operator("wm.y_open_image_to_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Layer") op.file_browser_filepath = filepath op.texcoord_type = 'Decal' - op = self.layout.operator("material.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask") + op = self.layout.operator("wm.y_open_image_as_mask", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask") op.file_browser_filepath = filepath op.texcoord_type = 'Decal' - op = self.layout.operator("material.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask for New Layer") + op = self.layout.operator("wm.y_new_layer", icon_value=lib.get_icon('image'), text="Open Image as Decal Mask for New Layer") op.type = 'COLOR' op.add_mask = True op.mask_type = 'IMAGE' @@ -5226,20 +5226,20 @@ def draw(self, context): col = row.column() - col.operator('material.y_bake_channels', text='Bake All Channels', icon_value=lib.get_icon('bake')).only_active_channel = False - col.operator('material.y_rename_ypaint_tree', text='Rename Tree', icon_value=lib.get_icon('rename')) + col.operator('wm.y_bake_channels', text='Bake All Channels', icon_value=lib.get_icon('bake')).only_active_channel = False + col.operator('wm.y_rename_ypaint_tree', text='Rename Tree', icon_value=lib.get_icon('rename')) col.separator() - col.operator('material.y_remove_yp_node', icon_value=lib.get_icon('close')) + col.operator('wm.y_remove_yp_node', icon_value=lib.get_icon('close')) col.separator() - col.operator('material.y_clean_yp_caches', icon_value=lib.get_icon('clean')) + col.operator('wm.y_clean_yp_caches', icon_value=lib.get_icon('clean')) col.separator() - op = col.operator('material.y_duplicate_yp_nodes', text='Duplicate Material and ' + get_addon_title() + ' nodes', icon='COPY_ID') + op = col.operator('wm.y_duplicate_yp_nodes', text='Duplicate Material and ' + get_addon_title() + ' nodes', icon='COPY_ID') op.duplicate_material = True col.separator() @@ -5251,7 +5251,7 @@ def draw(self, context): else: icon = 'RADIOBUT_OFF' #row = col.row() - col.operator('material.y_change_active_ypaint_node', text=n.node_tree.name, icon=icon).name = n.name + col.operator('wm.y_change_active_ypaint_node', text=n.node_tree.name, icon=icon).name = n.name col.separator() col.label(text='Option:') @@ -5279,14 +5279,14 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() - col.operator('material.y_pack_image', icon='PACKAGE') - col.operator('material.y_save_image', icon='FILE_TICK') + col.operator('wm.y_pack_image', icon='PACKAGE') + col.operator('wm.y_save_image', icon='FILE_TICK') if context.image: if context.image.packed_file: - col.operator('material.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False - else: col.operator('material.y_save_as_image', text='Save As Image').copy = False - col.operator('material.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True + col.operator('wm.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False + else: col.operator('wm.y_save_as_image', text='Save As Image').copy = False + col.operator('wm.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True class YNewChannelMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_new_channel_menu" @@ -5302,13 +5302,13 @@ def draw(self, context): col.label(text='Add New Channel') icon_value = lib.get_icon(lib.channel_custom_icon_dict['VALUE']) - col.operator("material.y_add_new_ypaint_channel", icon_value=icon_value, text='Value').type = 'VALUE' + col.operator("wm.y_add_new_ypaint_channel", icon_value=icon_value, text='Value').type = 'VALUE' icon_value = lib.get_icon(lib.channel_custom_icon_dict['RGB']) - col.operator("material.y_add_new_ypaint_channel", icon_value=icon_value, text='RGB').type = 'RGB' + col.operator("wm.y_add_new_ypaint_channel", icon_value=icon_value, text='RGB').type = 'RGB' icon_value = lib.get_icon(lib.channel_custom_icon_dict['NORMAL']) - col.operator("material.y_add_new_ypaint_channel", icon_value=icon_value, text='Normal').type = 'NORMAL' + col.operator("wm.y_add_new_ypaint_channel", icon_value=icon_value, text='Normal').type = 'NORMAL' class YNewLayerMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_new_layer_menu" @@ -5330,56 +5330,56 @@ def draw(self, context): #col = self.layout.column(align=True) #col.context_pointer_set('group_node', context.group_node) #col.label(text='Image:') - col.operator("material.y_new_layer", text='New Image', icon_value=lib.get_icon('image')).type = 'IMAGE' + col.operator("wm.y_new_layer", text='New Image', icon_value=lib.get_icon('image')).type = 'IMAGE' #col.separator() - op = col.operator("material.y_open_image_to_layer", text='Open Image...') + op = col.operator("wm.y_open_image_to_layer", text='Open Image...') op.texcoord_type = 'UV' op.file_browser_filepath = '' - col.operator("material.y_open_available_data_to_layer", text='Open Available Image').type = 'IMAGE' + col.operator("wm.y_open_available_data_to_layer", text='Open Available Image').type = 'IMAGE' - col.operator("material.y_open_images_to_single_layer", text='Open Images to Single Layer...') - col.operator("material.y_open_images_from_material_to_single_layer", text='Open Images from Material').asset_library_path = '' + col.operator("wm.y_open_images_to_single_layer", text='Open Images to Single Layer...') + col.operator("wm.y_open_images_from_material_to_single_layer", text='Open Images from Material').asset_library_path = '' # NOTE: Dedicated menu for opening images to single layer is kinda hard to see, so it's probably better be hidden for now #col.menu("NODE_MT_y_open_images_to_single_layer_menu", text='Open Images to Single Layer') col.separator() - col.operator("material.y_new_layer", icon_value=lib.get_icon('group'), text='Layer Group').type = 'GROUP' + col.operator("wm.y_new_layer", icon_value=lib.get_icon('group'), text='Layer Group').type = 'GROUP' col.separator() #col.label(text='Vertex Color:') - #col.operator("material.y_new_layer", icon='GROUP_VCOL', text='New Vertex Color').type = 'VCOL' - col.operator("material.y_new_layer", icon_value=lib.get_icon('vertex_color'), text='New Vertex Color').type = 'VCOL' - col.operator("material.y_open_available_data_to_layer", text='Open Available Vertex Color').type = 'VCOL' + #col.operator("wm.y_new_layer", icon='GROUP_VCOL', text='New Vertex Color').type = 'VCOL' + col.operator("wm.y_new_layer", icon_value=lib.get_icon('vertex_color'), text='New Vertex Color').type = 'VCOL' + col.operator("wm.y_open_available_data_to_layer", text='Open Available Vertex Color').type = 'VCOL' col.separator() #col.menu("NODE_MT_y_new_solid_color_layer_menu", text='Solid Color', icon_value=lib.get_icon('color')) icon_value = lib.get_icon("color") - c = col.operator("material.y_new_layer", icon_value=icon_value, text='Solid Color') + c = col.operator("wm.y_new_layer", icon_value=icon_value, text='Solid Color') c.type = 'COLOR' c.add_mask = False - c = col.operator("material.y_new_layer", text='Solid Color w/ Image Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Image Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'IMAGE' - c = col.operator("material.y_new_layer", text='Solid Color w/ Vertex Color Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Vertex Color Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'VCOL' - c = col.operator("material.y_new_layer", text='Solid Color w/ Color ID Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Color ID Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'COLOR_ID' if is_bl_newer_than(2, 93): - c = col.operator("material.y_new_layer", text='Solid Color w/ Edge Detect Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Edge Detect Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'EDGE_DETECT' @@ -5387,15 +5387,15 @@ def draw(self, context): col.separator() #col.label(text='Background:') - c = col.operator("material.y_new_layer", icon_value=lib.get_icon('background'), text='Background w/ Image Mask') + c = col.operator("wm.y_new_layer", icon_value=lib.get_icon('background'), text='Background w/ Image Mask') c.type = 'BACKGROUND' c.add_mask = True c.mask_type = 'IMAGE' #if is_bl_newer_than(2, 80): - # c = col.operator("material.y_new_layer", text='Background w/ Vertex Color Mask') - #else: c = col.operator("material.y_new_layer", text='Background w/ Vertex Color Mask') - c = col.operator("material.y_new_layer", text='Background w/ Vertex Color Mask') + # c = col.operator("wm.y_new_layer", text='Background w/ Vertex Color Mask') + #else: c = col.operator("wm.y_new_layer", text='Background w/ Vertex Color Mask') + c = col.operator("wm.y_new_layer", text='Background w/ Vertex Color Mask') c.type = 'BACKGROUND' c.add_mask = True @@ -5403,64 +5403,64 @@ def draw(self, context): if is_bl_newer_than(3, 2): col.separator() - col.operator("material.y_new_vdm_layer", text='Vector Displacement Image', icon='SCULPTMODE_HLT') + col.operator("wm.y_new_vdm_layer", text='Vector Displacement Image', icon='SCULPTMODE_HLT') col = row.column() col.label(text='Generated Layer:') - #col.operator("material.y_new_layer", icon='TEXTURE', text='Brick').type = 'BRICK' - col.operator("material.y_new_layer", icon_value=lib.get_icon('texture'), text='Brick').type = 'BRICK' - col.operator("material.y_new_layer", text='Checker').type = 'CHECKER' - col.operator("material.y_new_layer", text='Gradient').type = 'GRADIENT' - col.operator("material.y_new_layer", text='Magic').type = 'MAGIC' - if not is_bl_newer_than(4, 1): col.operator("material.y_new_layer", text='Musgrave').type = 'MUSGRAVE' - col.operator("material.y_new_layer", text='Noise').type = 'NOISE' - if is_bl_newer_than(4, 3): col.operator("material.y_new_layer", text='Gabor').type = 'GABOR' - col.operator("material.y_new_layer", text='Voronoi').type = 'VORONOI' - col.operator("material.y_new_layer", text='Wave').type = 'WAVE' + #col.operator("wm.y_new_layer", icon='TEXTURE', text='Brick').type = 'BRICK' + col.operator("wm.y_new_layer", icon_value=lib.get_icon('texture'), text='Brick').type = 'BRICK' + col.operator("wm.y_new_layer", text='Checker').type = 'CHECKER' + col.operator("wm.y_new_layer", text='Gradient').type = 'GRADIENT' + col.operator("wm.y_new_layer", text='Magic').type = 'MAGIC' + if not is_bl_newer_than(4, 1): col.operator("wm.y_new_layer", text='Musgrave').type = 'MUSGRAVE' + col.operator("wm.y_new_layer", text='Noise').type = 'NOISE' + if is_bl_newer_than(4, 3): col.operator("wm.y_new_layer", text='Gabor').type = 'GABOR' + col.operator("wm.y_new_layer", text='Voronoi').type = 'VORONOI' + col.operator("wm.y_new_layer", text='Wave').type = 'WAVE' col.separator() - col.operator("material.y_new_layer", icon_value=lib.get_icon('hemi'), text='Fake Lighting').type = 'HEMI' + col.operator("wm.y_new_layer", icon_value=lib.get_icon('hemi'), text='Fake Lighting').type = 'HEMI' col = row.column() col.label(text='Bake as Layer:') - c = col.operator("material.y_bake_to_layer", icon_value=lib.get_icon('bake'), text='Ambient Occlusion') + c = col.operator("wm.y_bake_to_layer", icon_value=lib.get_icon('bake'), text='Ambient Occlusion') c.type = 'AO' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Pointiness') + c = col.operator("wm.y_bake_to_layer", text='Pointiness') c.type = 'POINTINESS' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Cavity') + c = col.operator("wm.y_bake_to_layer", text='Cavity') c.type = 'CAVITY' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Dust') + c = col.operator("wm.y_bake_to_layer", text='Dust') c.type = 'DUST' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Paint Base') + c = col.operator("wm.y_bake_to_layer", text='Paint Base') c.type = 'PAINT_BASE' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Bevel Normal') + c = col.operator("wm.y_bake_to_layer", text='Bevel Normal') c.type = 'BEVEL_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Bevel Grayscale') + c = col.operator("wm.y_bake_to_layer", text='Bevel Grayscale') c.type = 'BEVEL_MASK' c.target_type = 'LAYER' c.overwrite_current = False # NOTE: Blender 2.76 does not bake to object space normal correctly if is_bl_newer_than(2, 77): - c = col.operator("material.y_bake_to_layer", text='Object Space Normal') + c = col.operator("wm.y_bake_to_layer", text='Object Space Normal') c.type = 'OBJECT_SPACE_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False @@ -5468,12 +5468,12 @@ def draw(self, context): if is_bl_newer_than(2, 80): col.separator() - c = col.operator("material.y_bake_to_layer", text='Multires Normal') + c = col.operator("wm.y_bake_to_layer", text='Multires Normal') c.type = 'MULTIRES_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Multires Displacement') + c = col.operator("wm.y_bake_to_layer", text='Multires Displacement') c.type = 'MULTIRES_DISPLACEMENT' c.target_type = 'LAYER' c.overwrite_current = False @@ -5482,24 +5482,24 @@ def draw(self, context): if is_bl_newer_than(2, 77): col.separator() - c = col.operator("material.y_bake_to_layer", text='Other Objects Emission') + c = col.operator("wm.y_bake_to_layer", text='Other Objects Emission') c.type = 'OTHER_OBJECT_EMISSION' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Other Objects Normal') + c = col.operator("wm.y_bake_to_layer", text='Other Objects Normal') c.type = 'OTHER_OBJECT_NORMAL' c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("material.y_bake_to_layer", text='Other Objects Channels') + c = col.operator("wm.y_bake_to_layer", text='Other Objects Channels') c.type = 'OTHER_OBJECT_CHANNELS' c.target_type = 'LAYER' c.overwrite_current = False col.separator() - c = col.operator("material.y_bake_to_layer", text='Selected Vertices') + c = col.operator("wm.y_bake_to_layer", text='Selected Vertices') c.type = 'SELECTED_VERTICES' c.target_type = 'LAYER' c.overwrite_current = False @@ -5507,7 +5507,7 @@ def draw(self, context): if ypup.show_experimental: col.separator() - c = col.operator("material.y_bake_to_layer", text='Flow') + c = col.operator("wm.y_bake_to_layer", text='Flow') c.type = 'FLOW' c.target_type = 'LAYER' c.overwrite_current = False @@ -5535,22 +5535,22 @@ def draw(self, context): #except Exception as e: # print(e) - col.operator('material.y_pack_image', icon='PACKAGE') - col.operator('material.y_save_image', icon='FILE_TICK') + col.operator('wm.y_pack_image', icon='PACKAGE') + col.operator('wm.y_save_image', icon='FILE_TICK') if context.image.packed_file: - col.operator('material.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False - else: col.operator('material.y_save_as_image', text='Save As Image').copy = False - col.operator('material.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True + col.operator('wm.y_save_as_image', text='Unpack As Image', icon='UGLYPACKAGE').copy = False + else: col.operator('wm.y_save_as_image', text='Save As Image').copy = False + col.operator('wm.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True col.separator() icon = 'FILEBROWSER' if is_bl_newer_than(2, 80) else 'FILE_FOLDER' - col.operator('material.y_save_all_baked_images', text='Save All Baked Images to...', icon=icon).copy = False - col.operator('material.y_save_all_baked_images', text='Save All Baked Image Copies to...').copy = True + col.operator('wm.y_save_all_baked_images', text='Save All Baked Images to...', icon=icon).copy = False + col.operator('wm.y_save_all_baked_images', text='Save All Baked Image Copies to...').copy = True col.separator() - col.operator('material.y_delete_baked_channel_images', text='Delete All Baked Images', icon='ERROR') + col.operator('wm.y_delete_baked_channel_images', text='Delete All Baked Images', icon='ERROR') class YLayerChannelNormalBlendMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_channel_normal_blend_menu" @@ -5564,7 +5564,7 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() #align=True) for key, val in normal_blend_labels.items(): - col.operator('material.y_set_layer_channel_normal_blend_type', text=val).normal_blend_type = key + col.operator('wm.y_set_layer_channel_normal_blend_type', text=val).normal_blend_type = key class YLayerChannelBlendMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_channel_blend_menu" @@ -5578,7 +5578,7 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() #align=True) for key, val in blend_type_labels.items(): - col.operator('material.y_set_layer_channel_blend_type', text=val).blend_type = key + col.operator('wm.y_set_layer_channel_blend_type', text=val).blend_type = key class YLayerChannelBlendPopover(bpy.types.Panel): bl_idname = "NODE_PT_y_layer_channel_blend_popover" @@ -5737,7 +5737,7 @@ def draw(self, context): label += ' ('+layer_type_labels[layer.type]+')' icon = 'RADIOBUT_ON' if not ch.override and (ch.layer_input == 'RGB' or not has_layer_input_options(layer)) else 'RADIOBUT_OFF' - op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('wm.y_set_layer_channel_input', text=label, icon=icon) op.type = 'RGB' op.set_normal_input = False @@ -5755,7 +5755,7 @@ def draw(self, context): label += ' ('+layer_type_labels[layer.type]+')' icon = 'RADIOBUT_ON' if ch.layer_input == 'ALPHA' and not ch.override else 'RADIOBUT_OFF' - op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('wm.y_set_layer_channel_input', text=label, icon=icon) op.type = 'ALPHA' op.set_normal_input = False @@ -5768,7 +5768,7 @@ def draw(self, context): else: label += ' Color' icon = 'RADIOBUT_ON' if ch.override and ch.override_type == 'DEFAULT' else 'RADIOBUT_OFF' - op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('wm.y_set_layer_channel_input', text=label, icon=icon) op.type = 'CUSTOM' op.set_normal_input = False @@ -5827,7 +5827,7 @@ def draw(self, context): label += ' ('+layer_type_labels[layer.type]+')' icon = 'RADIOBUT_ON' if not ch.override_1 else 'RADIOBUT_OFF' - op = col.operator('material.y_set_layer_channel_input', text=label, icon=icon) + op = col.operator('wm.y_set_layer_channel_input', text=label, icon=icon) op.type = 'RGB' op.set_normal_input = True @@ -5835,7 +5835,7 @@ def draw(self, context): # Custom/Override Default icon = 'RADIOBUT_ON' if ch.override_1 and ch.override_1_type == 'DEFAULT' else 'RADIOBUT_OFF' - op = col.operator('material.y_set_layer_channel_input', text='Custom Color', icon=icon) + op = col.operator('wm.y_set_layer_channel_input', text='Custom Color', icon=icon) op.type = 'CUSTOM' op.set_normal_input = True @@ -5869,25 +5869,25 @@ def draw(self, context): row = self.layout.row() col = row.column() - col.operator('material.y_merge_layer', text='Merge Layer Up', icon='TRIA_UP').direction = 'UP' - col.operator('material.y_merge_layer', text='Merge Layer Down', icon='TRIA_DOWN').direction = 'DOWN' + col.operator('wm.y_merge_layer', text='Merge Layer Up', icon='TRIA_UP').direction = 'UP' + col.operator('wm.y_merge_layer', text='Merge Layer Down', icon='TRIA_DOWN').direction = 'DOWN' col.separator() - c = col.operator("material.y_duplicate_layer", icon='COPY_ID', text='Duplicate Layer').duplicate_blank = False - c = col.operator("material.y_duplicate_layer", icon='COPY_ID', text='Duplicate Blank Layer').duplicate_blank = True + c = col.operator("wm.y_duplicate_layer", icon='COPY_ID', text='Duplicate Layer').duplicate_blank = False + c = col.operator("wm.y_duplicate_layer", icon='COPY_ID', text='Duplicate Blank Layer').duplicate_blank = True col.separator() - col.operator('material.y_copy_layer', text='Copy Layer', icon='COPYDOWN').all_layers = False - col.operator('material.y_copy_layer', text='Copy All Layers', icon='COPYDOWN').all_layers = True - col.operator('material.y_paste_layer', text='Paste Layer(s)', icon='PASTEDOWN') + col.operator('wm.y_copy_layer', text='Copy Layer', icon='COPYDOWN').all_layers = False + col.operator('wm.y_copy_layer', text='Copy All Layers', icon='COPYDOWN').all_layers = True + col.operator('wm.y_paste_layer', text='Paste Layer(s)', icon='PASTEDOWN') col.separator() - col.operator('material.y_rebake_baked_images', text='Rebake All Baked Images', icon_value=lib.get_icon('bake')) + col.operator('wm.y_rebake_baked_images', text='Rebake All Baked Images', icon_value=lib.get_icon('bake')) if UDIM.is_udim_supported(): - col.operator('material.y_refill_udim_tiles', text='Refill UDIM Tiles', icon_value=lib.get_icon('uv')) + col.operator('wm.y_refill_udim_tiles', text='Refill UDIM Tiles', icon_value=lib.get_icon('uv')) #col.prop(yp, 'layer_preview_mode', text='Layer Only Viewer') @@ -5901,39 +5901,39 @@ def draw(self, context): col.label(text='No active image') #col.separator() - #col.operator('material.y_transfer_layer_uv', text='Transfer Active Layer UV', icon_value=lib.get_icon('uv')) - #col.operator('material.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) + #col.operator('wm.y_transfer_layer_uv', text='Transfer Active Layer UV', icon_value=lib.get_icon('uv')) + #col.operator('wm.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) #if hasattr(context, 'image') and context.image: col.separator() - op = col.operator('material.y_resize_image', text='Resize Image', icon='FULLSCREEN_ENTER') + op = col.operator('wm.y_resize_image', text='Resize Image', icon='FULLSCREEN_ENTER') if hasattr(context, 'layer'): op.layer_name = context.layer.name if hasattr(context, 'image'): op.image_name = context.image.name - col.operator("material.y_invert_image", icon='IMAGE_ALPHA') + col.operator("wm.y_invert_image", icon='IMAGE_ALPHA') col.separator() - col.operator('material.y_pack_image', icon='PACKAGE') - col.operator('material.y_save_image', icon='FILE_TICK') + col.operator('wm.y_pack_image', icon='PACKAGE') + col.operator('wm.y_save_image', icon='FILE_TICK') if hasattr(context, 'image') and context.image.packed_file: - col.operator('material.y_save_as_image', text='Unpack As Image...', icon='UGLYPACKAGE').copy = False + col.operator('wm.y_save_as_image', text='Unpack As Image...', icon='UGLYPACKAGE').copy = False else: if is_bl_newer_than(2, 80): - col.operator('material.y_save_as_image', text='Save As Image...').copy = False - else: col.operator('material.y_save_as_image', text='Save As Image...', icon='SAVE_AS').copy = False - col.operator('material.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True + col.operator('wm.y_save_as_image', text='Save As Image...').copy = False + else: col.operator('wm.y_save_as_image', text='Save As Image...', icon='SAVE_AS').copy = False + col.operator('wm.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True col.separator() - col.operator("material.y_reload_image", icon='FILE_REFRESH') + col.operator("wm.y_reload_image", icon='FILE_REFRESH') col.separator() if hasattr(context, 'image'): col.menu("NODE_MT_y_image_convert_menu", text='Convert Image') - if is_bl_newer_than(2, 80): col.operator('material.y_save_pack_all', text='Save/Pack All Images') - else: col.operator('material.y_save_pack_all', text='Save/Pack All Images', icon='FILE_TICK') + if is_bl_newer_than(2, 80): col.operator('wm.y_save_pack_all', text='Save/Pack All Images') + else: col.operator('wm.y_save_pack_all', text='Save/Pack All Images', icon='FILE_TICK') class YOpenImagesToSingleLayerMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_open_images_to_single_layer_menu" @@ -5947,8 +5947,8 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() - col.operator("material.y_open_images_to_single_layer", icon='FILE_FOLDER', text='From Directory') - col.operator("material.y_open_images_from_material_to_single_layer", icon='MATERIAL_DATA', text='From Material').asset_library_path = '' + col.operator("wm.y_open_images_to_single_layer", icon='FILE_FOLDER', text='From Directory') + col.operator("wm.y_open_images_from_material_to_single_layer", icon='MATERIAL_DATA', text='From Material').asset_library_path = '' class YNewSolidColorLayerMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_new_solid_color_layer_menu" @@ -5963,27 +5963,27 @@ def draw(self, context): col = self.layout.column() icon_value = lib.get_icon("color") - c = col.operator("material.y_new_layer", icon_value=icon_value, text='Solid Color') + c = col.operator("wm.y_new_layer", icon_value=icon_value, text='Solid Color') c.type = 'COLOR' c.add_mask = False - c = col.operator("material.y_new_layer", text='Solid Color w/ Image Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Image Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'IMAGE' - c = col.operator("material.y_new_layer", text='Solid Color w/ Vertex Color Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Vertex Color Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'VCOL' - c = col.operator("material.y_new_layer", text='Solid Color w/ Color ID Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Color ID Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'COLOR_ID' if is_bl_newer_than(2, 93): - c = col.operator("material.y_new_layer", text='Solid Color w/ Edge Detect Mask') + c = col.operator("wm.y_new_layer", text='Solid Color w/ Edge Detect Mask') c.type = 'COLOR' c.add_mask = True c.mask_type = 'EDGE_DETECT' @@ -6010,11 +6010,11 @@ def draw(self, context): col.separator() if context.image.yia.is_image_atlas or context.image.yua.is_udim_atlas: - col.operator("material.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert to standard Image').all_images = False - col.operator("material.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert All Image Atlas to standard Images').all_images = True + col.operator("wm.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert to standard Image').all_images = False + col.operator("wm.y_convert_to_standard_image", icon='IMAGE_DATA', text='Convert All Image Atlas to standard Images').all_images = True else: - col.operator("material.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert to Image Atlas').all_images = False - col.operator("material.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert All Images to Image Atlas').all_images = True + col.operator("wm.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert to Image Atlas').all_images = False + col.operator("wm.y_convert_to_image_atlas", icon='IMAGE_DATA', text='Convert All Images to Image Atlas').all_images = True class YUVSpecialMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_uv_special_menu" @@ -6028,8 +6028,8 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() - col.operator('material.y_transfer_layer_uv', text='Transfer UV', icon_value=lib.get_icon('uv')) - col.operator('material.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) + col.operator('wm.y_transfer_layer_uv', text='Transfer UV', icon_value=lib.get_icon('uv')) + col.operator('wm.y_transfer_some_layer_uv', text='Transfer All Layers & Masks UV', icon_value=lib.get_icon('uv')) class YModifierMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_modifier_menu" @@ -6049,16 +6049,16 @@ def draw(self, context): col.label(text='ERROR: Context has no parent or modifier!', icon='ERROR') return - op = col.operator('material.y_move_ypaint_modifier', icon='TRIA_UP', text='Move Modifier Up') + op = col.operator('wm.y_move_ypaint_modifier', icon='TRIA_UP', text='Move Modifier Up') op.direction = 'UP' - op = col.operator('material.y_move_ypaint_modifier', icon='TRIA_DOWN', text='Move Modifier Down') + op = col.operator('wm.y_move_ypaint_modifier', icon='TRIA_DOWN', text='Move Modifier Down') op.direction = 'DOWN' col.separator() if is_bl_newer_than(2, 80): - op = col.operator('material.y_remove_ypaint_modifier', icon='REMOVE', text='Remove Modifier') - else: op = col.operator('material.y_remove_ypaint_modifier', icon='ZOOMOUT', text='Remove Modifier') + op = col.operator('wm.y_remove_ypaint_modifier', icon='REMOVE', text='Remove Modifier') + else: op = col.operator('wm.y_remove_ypaint_modifier', icon='ZOOMOUT', text='Remove Modifier') #if hasattr(context, 'layer') and context.modifier.type in {'RGB_TO_INTENSITY', 'OVERRIDE_COLOR'}: # col.separator() @@ -6082,16 +6082,16 @@ def draw(self, context): col.label(text='ERROR: Context has no parent or modifier!', icon='ERROR') return - op = col.operator('material.y_move_normalmap_modifier', icon='TRIA_UP', text='Move Modifier Up') + op = col.operator('wm.y_move_normalmap_modifier', icon='TRIA_UP', text='Move Modifier Up') op.direction = 'UP' - op = col.operator('material.y_move_normalmap_modifier', icon='TRIA_DOWN', text='Move Modifier Down') + op = col.operator('wm.y_move_normalmap_modifier', icon='TRIA_DOWN', text='Move Modifier Down') op.direction = 'DOWN' col.separator() if is_bl_newer_than(2, 80): - op = col.operator('material.y_remove_normalmap_modifier', icon='REMOVE', text='Remove Modifier') - else: op = col.operator('material.y_remove_normalmap_modifier', icon='ZOOMOUT', text='Remove Modifier') + op = col.operator('wm.y_remove_normalmap_modifier', icon='REMOVE', text='Remove Modifier') + else: op = col.operator('wm.y_remove_normalmap_modifier', icon='ZOOMOUT', text='Remove Modifier') class YMaskModifierMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_mask_modifier_menu" @@ -6111,17 +6111,17 @@ def draw(self, context): col.label(text='ERROR: Context has no mask, modifier, or layer!', icon='ERROR') return - op = col.operator('material.y_move_mask_modifier', icon='TRIA_UP', text='Move Modifier Up') + op = col.operator('wm.y_move_mask_modifier', icon='TRIA_UP', text='Move Modifier Up') op.direction = 'UP' - op = col.operator('material.y_move_mask_modifier', icon='TRIA_DOWN', text='Move Modifier Down') + op = col.operator('wm.y_move_mask_modifier', icon='TRIA_DOWN', text='Move Modifier Down') op.direction = 'DOWN' col.separator() if is_bl_newer_than(2, 80): - op = col.operator('material.y_remove_mask_modifier', icon='REMOVE', text='Remove Modifier') - else: op = col.operator('material.y_remove_mask_modifier', icon='ZOOMOUT', text='Remove Modifier') + op = col.operator('wm.y_remove_mask_modifier', icon='REMOVE', text='Remove Modifier') + else: op = col.operator('wm.y_remove_mask_modifier', icon='ZOOMOUT', text='Remove Modifier') class YTransitionBumpMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_transition_bump_menu" @@ -6143,8 +6143,8 @@ def draw(self, context): return if is_bl_newer_than(2, 80): - col.operator('material.y_hide_transition_effect', text='Remove Transition Bump', icon='REMOVE').type = 'BUMP' - else: col.operator('material.y_hide_transition_effect', text='Remove Transition Bump', icon='ZOOMOUT').type = 'BUMP' + col.operator('wm.y_hide_transition_effect', text='Remove Transition Bump', icon='REMOVE').type = 'BUMP' + else: col.operator('wm.y_hide_transition_effect', text='Remove Transition Bump', icon='ZOOMOUT').type = 'BUMP' class YTransitionRampMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_transition_ramp_menu" @@ -6169,8 +6169,8 @@ def draw(self, context): col.separator() if is_bl_newer_than(2, 80): - col.operator('material.y_hide_transition_effect', text='Remove Transition Ramp', icon='REMOVE').type = 'RAMP' - else: col.operator('material.y_hide_transition_effect', text='Remove Transition Ramp', icon='ZOOMOUT').type = 'RAMP' + col.operator('wm.y_hide_transition_effect', text='Remove Transition Ramp', icon='REMOVE').type = 'RAMP' + else: col.operator('wm.y_hide_transition_effect', text='Remove Transition Ramp', icon='ZOOMOUT').type = 'RAMP' class YTransitionAOMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_transition_ao_menu" @@ -6202,8 +6202,8 @@ def draw(self, context): col = layout.column() if is_bl_newer_than(2, 80): - col.operator('material.y_hide_transition_effect', text='Remove Transition AO', icon='REMOVE').type = 'AO' - else: col.operator('material.y_hide_transition_effect', text='Remove Transition AO', icon='ZOOMOUT').type = 'AO' + col.operator('wm.y_hide_transition_effect', text='Remove Transition AO', icon='REMOVE').type = 'AO' + else: col.operator('wm.y_hide_transition_effect', text='Remove Transition AO', icon='ZOOMOUT').type = 'AO' def new_mask_button(layout, operator, text, lib_icon='', otype='', target_type='', modifier_type='', overwrite_current=None): if lib_icon: @@ -6240,56 +6240,56 @@ def draw(self, context): col.context_pointer_set('layer', context.layer) col.label(text='Image Mask:') - new_mask_button(col, 'material.y_new_layer_mask', 'New Image Mask', lib_icon='image', otype='IMAGE') - op = new_mask_button(col, 'material.y_open_image_as_mask', 'Open Image as Mask...', lib_icon='open_image') + new_mask_button(col, 'wm.y_new_layer_mask', 'New Image Mask', lib_icon='image', otype='IMAGE') + op = new_mask_button(col, 'wm.y_open_image_as_mask', 'Open Image as Mask...', lib_icon='open_image') op.texcoord_type = 'UV' op.file_browser_filepath = '' - new_mask_button(col, 'material.y_open_available_data_as_mask', 'Open Available Image as Mask', lib_icon='open_image', otype='IMAGE') + new_mask_button(col, 'wm.y_open_available_data_as_mask', 'Open Available Image as Mask', lib_icon='open_image', otype='IMAGE') col.separator() col.label(text='Vertex Color Mask:') - new_mask_button(col, 'material.y_new_layer_mask', 'New Vertex Color Mask', lib_icon='vertex_color', otype='VCOL') - new_mask_button(col, 'material.y_open_available_data_as_mask', 'Open Available Vertex Color as Mask', lib_icon='vertex_color', otype='VCOL') + new_mask_button(col, 'wm.y_new_layer_mask', 'New Vertex Color Mask', lib_icon='vertex_color', otype='VCOL') + new_mask_button(col, 'wm.y_open_available_data_as_mask', 'Open Available Vertex Color as Mask', lib_icon='vertex_color', otype='VCOL') - new_mask_button(col, 'material.y_new_layer_mask', 'Color ID', lib_icon='color', otype='COLOR_ID') + new_mask_button(col, 'wm.y_new_layer_mask', 'Color ID', lib_icon='color', otype='COLOR_ID') col = row.column(align=True) col.label(text='Generated Mask:') - new_mask_button(col, 'material.y_new_layer_mask', 'Brick', otype='BRICK', lib_icon='texture') - new_mask_button(col, 'material.y_new_layer_mask', 'Checker', otype='CHECKER') - new_mask_button(col, 'material.y_new_layer_mask', 'Gradient', otype='GRADIENT') - new_mask_button(col, 'material.y_new_layer_mask', 'Magic', otype='MAGIC') - if not is_bl_newer_than(4, 1): new_mask_button(col, 'material.y_new_layer_mask', 'Musgrave', otype='MUSGRAVE') - new_mask_button(col, 'material.y_new_layer_mask', 'Noise', otype='NOISE') - if is_bl_newer_than(4, 3): new_mask_button(col, 'material.y_new_layer_mask', 'Gabor', otype='GABOR') - new_mask_button(col, 'material.y_new_layer_mask', 'Voronoi', otype='VORONOI') - new_mask_button(col, 'material.y_new_layer_mask', 'Wave', otype='WAVE') + new_mask_button(col, 'wm.y_new_layer_mask', 'Brick', otype='BRICK', lib_icon='texture') + new_mask_button(col, 'wm.y_new_layer_mask', 'Checker', otype='CHECKER') + new_mask_button(col, 'wm.y_new_layer_mask', 'Gradient', otype='GRADIENT') + new_mask_button(col, 'wm.y_new_layer_mask', 'Magic', otype='MAGIC') + if not is_bl_newer_than(4, 1): new_mask_button(col, 'wm.y_new_layer_mask', 'Musgrave', otype='MUSGRAVE') + new_mask_button(col, 'wm.y_new_layer_mask', 'Noise', otype='NOISE') + if is_bl_newer_than(4, 3): new_mask_button(col, 'wm.y_new_layer_mask', 'Gabor', otype='GABOR') + new_mask_button(col, 'wm.y_new_layer_mask', 'Voronoi', otype='VORONOI') + new_mask_button(col, 'wm.y_new_layer_mask', 'Wave', otype='WAVE') col.separator() - new_mask_button(col, 'material.y_new_layer_mask', 'Fake Lighting', lib_icon='hemi', otype='HEMI') + new_mask_button(col, 'wm.y_new_layer_mask', 'Fake Lighting', lib_icon='hemi', otype='HEMI') col.separator() - new_mask_button(col, 'material.y_new_layer_mask', 'Object Index', otype='OBJECT_INDEX', lib_icon='object_index') - new_mask_button(col, 'material.y_new_layer_mask', 'Backface', otype='BACKFACE', lib_icon='backface') + new_mask_button(col, 'wm.y_new_layer_mask', 'Object Index', otype='OBJECT_INDEX', lib_icon='object_index') + new_mask_button(col, 'wm.y_new_layer_mask', 'Backface', otype='BACKFACE', lib_icon='backface') if is_bl_newer_than(2, 93): - new_mask_button(col, 'material.y_new_layer_mask', 'Edge Detect', otype='EDGE_DETECT', lib_icon='edge_detect') + new_mask_button(col, 'wm.y_new_layer_mask', 'Edge Detect', otype='EDGE_DETECT', lib_icon='edge_detect') col = row.column(align=True) col.label(text='Bake as Mask:') - new_mask_button(col, 'material.y_bake_to_layer', 'Ambient Occlusion', lib_icon='bake', otype='AO', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'material.y_bake_to_layer', 'Pointiness', otype='POINTINESS', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'material.y_bake_to_layer', 'Cavity', otype='CAVITY', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'material.y_bake_to_layer', 'Dust', otype='DUST', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'material.y_bake_to_layer', 'Paint Base', otype='PAINT_BASE', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'material.y_bake_to_layer', 'Bevel Grayscale', otype='BEVEL_MASK', target_type='MASK', overwrite_current=False) - new_mask_button(col, 'material.y_bake_to_layer', 'Selected Vertices', otype='SELECTED_VERTICES', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'wm.y_bake_to_layer', 'Ambient Occlusion', lib_icon='bake', otype='AO', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'wm.y_bake_to_layer', 'Pointiness', otype='POINTINESS', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'wm.y_bake_to_layer', 'Cavity', otype='CAVITY', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'wm.y_bake_to_layer', 'Dust', otype='DUST', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'wm.y_bake_to_layer', 'Paint Base', otype='PAINT_BASE', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'wm.y_bake_to_layer', 'Bevel Grayscale', otype='BEVEL_MASK', target_type='MASK', overwrite_current=False) + new_mask_button(col, 'wm.y_bake_to_layer', 'Selected Vertices', otype='SELECTED_VERTICES', target_type='MASK', overwrite_current=False) col.separator() col.label(text='Inbetween Modifier Mask:') - new_mask_button(col, 'material.y_new_layer_mask', 'Invert', otype='MODIFIER', modifier_type='INVERT', lib_icon='modifier') - new_mask_button(col, 'material.y_new_layer_mask', 'Ramp', otype='MODIFIER', modifier_type='RAMP', lib_icon='modifier') - new_mask_button(col, 'material.y_new_layer_mask', 'Curve', otype='MODIFIER', modifier_type='CURVE', lib_icon='modifier') + new_mask_button(col, 'wm.y_new_layer_mask', 'Invert', otype='MODIFIER', modifier_type='INVERT', lib_icon='modifier') + new_mask_button(col, 'wm.y_new_layer_mask', 'Ramp', otype='MODIFIER', modifier_type='RAMP', lib_icon='modifier') + new_mask_button(col, 'wm.y_new_layer_mask', 'Curve', otype='MODIFIER', modifier_type='CURVE', lib_icon='modifier') class YLayerMaskMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_mask_menu" @@ -6319,47 +6319,47 @@ def draw(self, context): mask_tree = get_mask_tree(mask) source = mask_tree.nodes.get(mask.source) col.context_pointer_set('image', source.image) - col.operator('material.y_invert_image', text='Invert Image', icon='IMAGE_ALPHA') + col.operator('wm.y_invert_image', text='Invert Image', icon='IMAGE_ALPHA') col.separator() - op = col.operator('material.y_move_layer_mask', icon='TRIA_UP', text='Move Mask Up') + op = col.operator('wm.y_move_layer_mask', icon='TRIA_UP', text='Move Mask Up') op.direction = 'UP' - op = col.operator('material.y_move_layer_mask', icon='TRIA_DOWN', text='Move Mask Down') + op = col.operator('wm.y_move_layer_mask', icon='TRIA_DOWN', text='Move Mask Down') op.direction = 'DOWN' col.separator() - op = col.operator('material.y_merge_mask', icon='TRIA_UP', text='Merge Mask Up') + op = col.operator('wm.y_merge_mask', icon='TRIA_UP', text='Merge Mask Up') op.direction = 'UP' - op = col.operator('material.y_merge_mask', icon='TRIA_DOWN', text='Merge Mask Down') + op = col.operator('wm.y_merge_mask', icon='TRIA_DOWN', text='Merge Mask Down') op.direction = 'DOWN' col.separator() col.context_pointer_set('entity', mask) - col.operator('material.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake as Image') + col.operator('wm.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake as Image') if mask.baked_source != '': if is_bl_newer_than(2, 80): - col.operator('material.y_remove_baked_entity', text='Remove Baked Image', icon='REMOVE') - else: col.operator('material.y_remove_baked_entity', text='Remove Baked Image', icon='ZOOMOUT') + col.operator('wm.y_remove_baked_entity', text='Remove Baked Image', icon='REMOVE') + else: col.operator('wm.y_remove_baked_entity', text='Remove Baked Image', icon='ZOOMOUT') col.separator() - #op = col.operator('material.y_transfer_layer_uv', icon_value=lib.get_icon('uv'), text='Transfer UV') + #op = col.operator('wm.y_transfer_layer_uv', icon_value=lib.get_icon('uv'), text='Transfer UV') #col.separator() if is_bl_newer_than(2, 80): - col.operator('material.y_remove_layer_mask', text='Remove Mask', icon='REMOVE') - else: col.operator('material.y_remove_layer_mask', text='Remove Mask', icon='ZOOMOUT') + col.operator('wm.y_remove_layer_mask', text='Remove Mask', icon='REMOVE') + else: col.operator('wm.y_remove_layer_mask', text='Remove Mask', icon='ZOOMOUT') col = row.column(align=True) col.label(text='Add Modifier') - col.operator('material.y_new_mask_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' - col.operator('material.y_new_mask_modifier', text='Ramp', icon_value=lib.get_icon('modifier')).type = 'RAMP' - col.operator('material.y_new_mask_modifier', text='Curve', icon_value=lib.get_icon('modifier')).type = 'CURVE' + col.operator('wm.y_new_mask_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' + col.operator('wm.y_new_mask_modifier', text='Ramp', icon_value=lib.get_icon('modifier')).type = 'RAMP' + col.operator('wm.y_new_mask_modifier', text='Curve', icon_value=lib.get_icon('modifier')).type = 'CURVE' #if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID'}: # col.separator() @@ -6372,9 +6372,9 @@ def draw(self, context): col.context_pointer_set('parent', mask) col.label(text='Advanced') if not mask.use_temp_bake: - col.operator('material.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) + col.operator('wm.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) else: - col.operator('material.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') + col.operator('wm.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') class YMaterialSpecialMenu(bpy.types.Menu): bl_idname = "MATERIAL_MT_y_special_menu" @@ -6387,8 +6387,8 @@ def poll(cls, context): def draw(self, context): col = self.layout.column() - col.operator('material.y_select_all_material_polygons', icon='FACESEL') - col.operator('material.y_rename_uv_using_the_same_material', icon='GROUP_UVS') + col.operator('wm.y_select_all_material_polygons', icon='FACESEL') + col.operator('wm.y_rename_uv_using_the_same_material', icon='GROUP_UVS') class YReplaceChannelOverrideMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_replace_channel_override_menu" @@ -6424,8 +6424,8 @@ def draw(self, context): #icon = 'RADIOBUT_ON' if ch.override_type == 'DEFAULT' else 'RADIOBUT_OFF' #if root_ch.type == 'VALUE': - # col.operator('material.y_replace_layer_channel_override', text='Value', icon=icon).type = 'DEFAULT' - #else: col.operator('material.y_replace_layer_channel_override', text='Color', icon=icon).type = 'DEFAULT' + # col.operator('wm.y_replace_layer_channel_override', text='Value', icon=icon).type = 'DEFAULT' + #else: col.operator('wm.y_replace_layer_channel_override', text='Color', icon=icon).type = 'DEFAULT' col.separator() @@ -6440,15 +6440,15 @@ def draw(self, context): icon = 'RADIOBUT_ON' if ch.override and ch.override_type == 'IMAGE' else 'RADIOBUT_OFF' if cache_image and (ch.override_type != 'IMAGE' or not ch.override): - col.operator('material.y_replace_layer_channel_override', text=label, icon=icon).type = 'IMAGE' + col.operator('wm.y_replace_layer_channel_override', text=label, icon=icon).type = 'IMAGE' else: col.label(text=label, icon=icon) row = col.row(align=True) ccol = row.column(align=True) - ccol.operator('material.y_open_image_to_override_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) - ccol.operator('material.y_open_available_data_to_override_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')).type = 'IMAGE' + ccol.operator('wm.y_open_image_to_override_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) + ccol.operator('wm.y_open_available_data_to_override_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')).type = 'IMAGE' col.separator() @@ -6462,16 +6462,16 @@ def draw(self, context): icon = 'RADIOBUT_ON' if ch.override and ch.override_type == 'VCOL' else 'RADIOBUT_OFF' if cache_vcol and (ch.override_type != 'VCOL' or not ch.override): - col.operator('material.y_replace_layer_channel_override', text=label, icon=icon).type = 'VCOL' + col.operator('wm.y_replace_layer_channel_override', text=label, icon=icon).type = 'VCOL' else: col.label(text=label, icon=icon) row = col.row(align=True) ccol = row.column(align=True) - #ccol.operator('material.y_replace_layer_channel_override', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' - ccol.operator('material.y_new_vcol_to_override_channel', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')) - ccol.operator('material.y_open_available_data_to_override_channel', text='Use Available Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' + #ccol.operator('wm.y_replace_layer_channel_override', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' + ccol.operator('wm.y_new_vcol_to_override_channel', text='New Vertex Color', icon_value=lib.get_icon('vertex_color')) + ccol.operator('wm.y_open_available_data_to_override_channel', text='Use Available Vertex Color', icon_value=lib.get_icon('vertex_color')).type = 'VCOL' col.separator() @@ -6485,7 +6485,7 @@ def draw(self, context): if item[0] in {'DEFAULT', 'IMAGE', 'VCOL'}: continue - col.operator('material.y_replace_layer_channel_override', text=item[1], icon=icon).type = item[0] + col.operator('wm.y_replace_layer_channel_override', text=item[1], icon=icon).type = item[0] class YReplaceChannelOverride1Menu(bpy.types.Menu): bl_idname = "NODE_MT_y_replace_channel_override_1_menu" @@ -6520,9 +6520,9 @@ def draw(self, context): #icon = 'RADIOBUT_ON' if ch.override_1_type == 'DEFAULT' else 'RADIOBUT_OFF' ##if root_ch.type == 'VALUE': - ## col.operator('material.y_replace_layer_channel_override_1', text='Value', icon=icon).type = 'DEFAULT' + ## col.operator('wm.y_replace_layer_channel_override_1', text='Value', icon=icon).type = 'DEFAULT' ##else: - #col.operator('material.y_replace_layer_channel_override_1', text='Color', icon=icon).type = 'DEFAULT' + #col.operator('wm.y_replace_layer_channel_override_1', text='Color', icon=icon).type = 'DEFAULT' #col.separator() @@ -6537,7 +6537,7 @@ def draw(self, context): icon = 'RADIOBUT_ON' if ch.override_1 and ch.override_1_type == 'IMAGE' else 'RADIOBUT_OFF' if cache_1_image and (ch.override_1_type != 'IMAGE' or not ch.override_1): - col.operator('material.y_replace_layer_channel_override_1', text=label, icon=icon).type = 'IMAGE' + col.operator('wm.y_replace_layer_channel_override_1', text=label, icon=icon).type = 'IMAGE' else: col.label(text=label, icon=icon) @@ -6546,8 +6546,8 @@ def draw(self, context): #ccol.label(text='', icon='BLANK1') ccol = row.column(align=True) - ccol.operator('material.y_open_image_to_override_1_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) - ccol.operator('material.y_open_available_data_to_override_1_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')) + ccol.operator('wm.y_open_image_to_override_1_layer_channel', text='Open Image...', icon_value=lib.get_icon('open_image')) + ccol.operator('wm.y_open_available_data_to_override_1_channel', text='Open Available Image', icon_value=lib.get_icon('open_image')) class YChannelSpecialMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_channel_special_menu" @@ -6568,7 +6568,7 @@ def draw(self, context): col.label(text='ERROR: Context has no parent!', icon='ERROR') return - col.operator('material.y_bake_channels', text="Bake " + context.parent.name + " Channel", icon_value=lib.get_icon('bake')).only_active_channel = True + col.operator('wm.y_bake_channels', text="Bake " + context.parent.name + " Channel", icon_value=lib.get_icon('bake')).only_active_channel = True if context.parent.type != 'NORMAL': col.separator() @@ -6579,15 +6579,15 @@ def draw(self, context): # Override color and multiplier modifier are deprecated if mt[0] == 'OVERRIDE_COLOR': continue if mt[0] == 'MULTIPLIER': continue - col.operator('material.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] + col.operator('wm.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] ypup = get_user_preferences() if ypup.show_experimental: col = row.column() col.label(text='Experimental') - col.operator('material.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color', icon_value=lib.get_icon('vertex_color')).all_materials = False - col.operator('material.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color (Batch All Materials)', icon_value=lib.get_icon('vertex_color')).all_materials = True + col.operator('wm.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color', icon_value=lib.get_icon('vertex_color')).all_materials = False + col.operator('wm.y_bake_channel_to_vcol', text='Bake Channel to Vertex Color (Batch All Materials)', icon_value=lib.get_icon('vertex_color')).all_materials = True class YLayerChannelSpecialMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_channel_special_menu" @@ -6639,23 +6639,23 @@ def draw(self, context): # Override color and multiplier modifier are deprecated if mt[0] == 'OVERRIDE_COLOR': continue if mt[0] == 'MULTIPLIER': continue - col.operator('material.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] + col.operator('wm.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] if is_bump_normal_layer_channel: col.separator() col.label(text='Add Modifier (Normal)') if is_normal_layer_channel or is_bump_normal_layer_channel: - col.operator('material.y_new_normalmap_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' - col.operator('material.y_new_normalmap_modifier', text='Math', icon_value=lib.get_icon('modifier')).type = 'MATH' + col.operator('wm.y_new_normalmap_modifier', text='Invert', icon_value=lib.get_icon('modifier')).type = 'INVERT' + col.operator('wm.y_new_normalmap_modifier', text='Math', icon_value=lib.get_icon('modifier')).type = 'MATH' col = row.column() col.label(text='Transition Effects') if root_ch.type == 'NORMAL': - col.operator('material.y_show_transition_bump', text='Transition Bump', icon_value=lib.get_icon('background')) + col.operator('wm.y_show_transition_bump', text='Transition Bump', icon_value=lib.get_icon('background')) else: - col.operator('material.y_show_transition_ramp', text='Transition Ramp', icon_value=lib.get_icon('background')) - col.operator('material.y_show_transition_ao', text='Transition AO', icon_value=lib.get_icon('background')) + col.operator('wm.y_show_transition_ramp', text='Transition Ramp', icon_value=lib.get_icon('background')) + col.operator('wm.y_show_transition_ao', text='Transition AO', icon_value=lib.get_icon('background')) class YLayerTypeMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_type_menu" @@ -6679,7 +6679,7 @@ def draw(self, context): cache_image = tree.nodes.get(layer.cache_image) if layer.type != 'IMAGE' and cache_image and cache_image.image: - op = col.operator('material.y_replace_layer_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') + op = col.operator('wm.y_replace_layer_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') op.type = 'IMAGE' op.load_item = False op.item_name = '' @@ -6692,7 +6692,7 @@ def draw(self, context): col.label(text='Image' + suffix, icon=icon) label = 'Open Available Image' if layer.type != 'IMAGE' else 'Replace Image' - op = col.operator('material.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) + op = col.operator('wm.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) op.type = 'IMAGE' op.load_item = True @@ -6700,7 +6700,7 @@ def draw(self, context): cache_vcol = tree.nodes.get(layer.cache_vcol) if layer.type != 'VCOL' and cache_vcol and cache_vcol.attribute_name != '': - op = col.operator('material.y_replace_layer_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') + op = col.operator('wm.y_replace_layer_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') op.type = 'VCOL' op.load_item = False op.item_name = '' @@ -6713,55 +6713,55 @@ def draw(self, context): col.label(text='Vertex Color' + suffix, icon=icon) label = 'Open Available Vertex Color' if layer.type != 'VCOL' else 'Replace Vertex Color' - op = col.operator('material.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) + op = col.operator('wm.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) op.type = 'VCOL' op.load_item = True col.separator() icon = 'RADIOBUT_ON' if layer.type == 'COLOR' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Solid Color', icon=icon).type = 'COLOR' + col.operator('wm.y_replace_layer_type', text='Solid Color', icon=icon).type = 'COLOR' icon = 'RADIOBUT_ON' if layer.type == 'BACKGROUND' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Background', icon=icon).type = 'BACKGROUND' + col.operator('wm.y_replace_layer_type', text='Background', icon=icon).type = 'BACKGROUND' icon = 'RADIOBUT_ON' if layer.type == 'GROUP' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Group', icon=icon).type = 'GROUP' + col.operator('wm.y_replace_layer_type', text='Group', icon=icon).type = 'GROUP' col.separator() icon = 'RADIOBUT_ON' if layer.type == 'BRICK' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Brick', icon=icon).type = 'BRICK' + col.operator('wm.y_replace_layer_type', text='Brick', icon=icon).type = 'BRICK' icon = 'RADIOBUT_ON' if layer.type == 'CHECKER' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Checker', icon=icon).type = 'CHECKER' + col.operator('wm.y_replace_layer_type', text='Checker', icon=icon).type = 'CHECKER' icon = 'RADIOBUT_ON' if layer.type == 'GRADIENT' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Gradient', icon=icon).type = 'GRADIENT' + col.operator('wm.y_replace_layer_type', text='Gradient', icon=icon).type = 'GRADIENT' icon = 'RADIOBUT_ON' if layer.type == 'MAGIC' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Magic', icon=icon).type = 'MAGIC' + col.operator('wm.y_replace_layer_type', text='Magic', icon=icon).type = 'MAGIC' if not is_bl_newer_than(4, 1): icon = 'RADIOBUT_ON' if layer.type == 'MUSGRAVE' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' + col.operator('wm.y_replace_layer_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' icon = 'RADIOBUT_ON' if layer.type == 'NOISE' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Noise', icon=icon).type = 'NOISE' + col.operator('wm.y_replace_layer_type', text='Noise', icon=icon).type = 'NOISE' if is_bl_newer_than(4, 3): icon = 'RADIOBUT_ON' if layer.type == 'GABOR' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Gabor', icon=icon).type = 'GABOR' + col.operator('wm.y_replace_layer_type', text='Gabor', icon=icon).type = 'GABOR' icon = 'RADIOBUT_ON' if layer.type == 'VORONOI' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Voronoi', icon=icon).type = 'VORONOI' + col.operator('wm.y_replace_layer_type', text='Voronoi', icon=icon).type = 'VORONOI' icon = 'RADIOBUT_ON' if layer.type == 'WAVE' else 'RADIOBUT_OFF' - col.operator('material.y_replace_layer_type', text='Wave', icon=icon).type = 'WAVE' + col.operator('wm.y_replace_layer_type', text='Wave', icon=icon).type = 'WAVE' col.separator() icon = 'RADIOBUT_ON' if layer.type == 'HEMI' else 'RADIOBUT_OFF' - col.operator("material.y_replace_layer_type", icon=icon, text='Fake Lighting').type = 'HEMI' + col.operator("wm.y_replace_layer_type", icon=icon, text='Fake Lighting').type = 'HEMI' class YMaskTypeMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_mask_type_menu" @@ -6786,7 +6786,7 @@ def draw(self, context): cache_image = tree.nodes.get(mask.cache_image) if mask.type != 'IMAGE' and cache_image and cache_image.image: - op = col.operator('material.y_replace_mask_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') + op = col.operator('wm.y_replace_mask_type', text='Image: ' + cache_image.image.name, icon='RADIOBUT_OFF') op.type = 'IMAGE' op.load_item = False op.item_name = '' @@ -6799,7 +6799,7 @@ def draw(self, context): col.label(text='Image' + suffix, icon=icon) label = 'Open Available Image' if mask.type != 'IMAGE' else 'Replace Image' - op = col.operator('material.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) + op = col.operator('wm.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) op.type = 'IMAGE' op.load_item = True @@ -6807,7 +6807,7 @@ def draw(self, context): cache_vcol = tree.nodes.get(mask.cache_vcol) if mask.type != 'VCOL' and cache_vcol and cache_vcol.attribute_name != '': - op = col.operator('material.y_replace_mask_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') + op = col.operator('wm.y_replace_mask_type', text='Vertex Color: ' + cache_vcol.attribute_name, icon='RADIOBUT_OFF') op.type = 'VCOL' op.load_item = False op.item_name = '' @@ -6820,84 +6820,84 @@ def draw(self, context): col.label(text='Vertex Color' + suffix, icon=icon) label = 'Open Available Vertex Color' if mask.type != 'VCOL' else 'Replace Vertex Color' - op = col.operator('material.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) + op = col.operator('wm.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('vertex_color')) op.type = 'VCOL' op.load_item = True col.separator() #icon = 'RADIOBUT_ON' if mask.type == 'COLOR' else 'RADIOBUT_OFF' - #col.operator('material.y_replace_mask_type', text='Solid Color', icon=icon).type = 'COLOR' + #col.operator('wm.y_replace_mask_type', text='Solid Color', icon=icon).type = 'COLOR' #icon = 'RADIOBUT_ON' if mask.type == 'BACKGROUND' else 'RADIOBUT_OFF' - #col.operator('material.y_replace_mask_type', text='Background', icon=icon).type = 'BACKGROUND' + #col.operator('wm.y_replace_mask_type', text='Background', icon=icon).type = 'BACKGROUND' #icon = 'RADIOBUT_ON' if mask.type == 'GROUP' else 'RADIOBUT_OFF' - #col.operator('material.y_replace_mask_type', text='Group', icon=icon).type = 'GROUP' + #col.operator('wm.y_replace_mask_type', text='Group', icon=icon).type = 'GROUP' #col.separator() icon = 'RADIOBUT_ON' if mask.type == 'BRICK' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Brick', icon=icon).type = 'BRICK' + col.operator('wm.y_replace_mask_type', text='Brick', icon=icon).type = 'BRICK' icon = 'RADIOBUT_ON' if mask.type == 'CHECKER' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Checker', icon=icon).type = 'CHECKER' + col.operator('wm.y_replace_mask_type', text='Checker', icon=icon).type = 'CHECKER' icon = 'RADIOBUT_ON' if mask.type == 'GRADIENT' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Gradient', icon=icon).type = 'GRADIENT' + col.operator('wm.y_replace_mask_type', text='Gradient', icon=icon).type = 'GRADIENT' icon = 'RADIOBUT_ON' if mask.type == 'MAGIC' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Magic', icon=icon).type = 'MAGIC' + col.operator('wm.y_replace_mask_type', text='Magic', icon=icon).type = 'MAGIC' if not is_bl_newer_than(4, 1): icon = 'RADIOBUT_ON' if mask.type == 'MUSGRAVE' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' + col.operator('wm.y_replace_mask_type', text='Musgrave', icon=icon).type = 'MUSGRAVE' icon = 'RADIOBUT_ON' if mask.type == 'NOISE' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Noise', icon=icon).type = 'NOISE' + col.operator('wm.y_replace_mask_type', text='Noise', icon=icon).type = 'NOISE' if is_bl_newer_than(4, 3): icon = 'RADIOBUT_ON' if mask.type == 'GABOR' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Gabor', icon=icon).type = 'GABOR' + col.operator('wm.y_replace_mask_type', text='Gabor', icon=icon).type = 'GABOR' icon = 'RADIOBUT_ON' if mask.type == 'VORONOI' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Voronoi', icon=icon).type = 'VORONOI' + col.operator('wm.y_replace_mask_type', text='Voronoi', icon=icon).type = 'VORONOI' icon = 'RADIOBUT_ON' if mask.type == 'WAVE' else 'RADIOBUT_OFF' - col.operator('material.y_replace_mask_type', text='Wave', icon=icon).type = 'WAVE' + col.operator('wm.y_replace_mask_type', text='Wave', icon=icon).type = 'WAVE' col.separator() icon = 'RADIOBUT_ON' if mask.type == 'HEMI' else 'RADIOBUT_OFF' - col.operator("material.y_replace_mask_type", icon=icon, text='Fake Lighting').type = 'HEMI' + col.operator("wm.y_replace_mask_type", icon=icon, text='Fake Lighting').type = 'HEMI' col.separator() icon = 'RADIOBUT_ON' if mask.type == 'COLOR_ID' else 'RADIOBUT_OFF' - col.operator("material.y_replace_mask_type", icon=icon, text='Color ID').type = 'COLOR_ID' + col.operator("wm.y_replace_mask_type", icon=icon, text='Color ID').type = 'COLOR_ID' icon = 'RADIOBUT_ON' if mask.type == 'OBJECT_INDEX' else 'RADIOBUT_OFF' - col.operator("material.y_replace_mask_type", icon=icon, text='Object Index').type = 'OBJECT_INDEX' + col.operator("wm.y_replace_mask_type", icon=icon, text='Object Index').type = 'OBJECT_INDEX' icon = 'RADIOBUT_ON' if mask.type == 'BACKFACE' else 'RADIOBUT_OFF' - col.operator("material.y_replace_mask_type", icon=icon, text='Backface').type = 'BACKFACE' + col.operator("wm.y_replace_mask_type", icon=icon, text='Backface').type = 'BACKFACE' icon = 'RADIOBUT_ON' if mask.type == 'EDGE_DETECT' else 'RADIOBUT_OFF' - col.operator("material.y_replace_mask_type", icon=icon, text='Edge Detect').type = 'EDGE_DETECT' + col.operator("wm.y_replace_mask_type", icon=icon, text='Edge Detect').type = 'EDGE_DETECT' col.separator() icon = 'RADIOBUT_ON' if mask.type == 'MODIFIER' and mask.modifier_type == 'INVERT' else 'RADIOBUT_OFF' - op = col.operator("material.y_replace_mask_type", icon=icon, text='Invert Modifier') + op = col.operator("wm.y_replace_mask_type", icon=icon, text='Invert Modifier') op.type = 'MODIFIER' op.modifier_type = 'INVERT' icon = 'RADIOBUT_ON' if mask.type == 'MODIFIER' and mask.modifier_type == 'RAMP' else 'RADIOBUT_OFF' - op = col.operator("material.y_replace_mask_type", icon=icon, text='Ramp Modifier') + op = col.operator("wm.y_replace_mask_type", icon=icon, text='Ramp Modifier') op.type = 'MODIFIER' op.modifier_type = 'RAMP' icon = 'RADIOBUT_ON' if mask.type == 'MODIFIER' and mask.modifier_type == 'CURVE' else 'RADIOBUT_OFF' - op = col.operator("material.y_replace_mask_type", icon=icon, text='Curve Modifier') + op = col.operator("wm.y_replace_mask_type", icon=icon, text='Curve Modifier') op.type = 'MODIFIER' op.modifier_type = 'CURVE' @@ -6931,16 +6931,16 @@ def draw(self, context): # Override color modifier is deprecated if mt[0] == 'OVERRIDE_COLOR': continue if mt[0] == 'MULTIPLIER': continue - col.operator('material.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] + col.operator('wm.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] if ypup.developer_mode: #if context.parent.type == 'HEMI': col = row.column() col.label(text='Advanced') if context.parent.use_temp_bake: - col.operator('material.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') + col.operator('wm.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') else: - col.operator('material.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) + col.operator('wm.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) #col = row.column() #col.label(text='Options:') @@ -7477,7 +7477,7 @@ def add_new_ypaint_node_menu(self, context): l = self.layout l.operator_context = 'INVOKE_REGION_WIN' l.separator() - l.operator('material.y_add_new_ypaint_node', text=get_addon_title(), icon_value=lib.get_icon('nodetree')) + l.operator('wm.y_add_new_ypaint_node', text=get_addon_title(), icon_value=lib.get_icon('nodetree')) def copy_ui_settings(source, dest): for attr in dir(source): diff --git a/versioning.py b/versioning.py index 1c3c85d9..54f20802 100644 --- a/versioning.py +++ b/versioning.py @@ -1349,7 +1349,7 @@ def update_node_tree_libs(name): print('INFO: ' + get_addon_title() + ' Node group libraries are checked in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') class YUpdateYPTrees(bpy.types.Operator): - bl_idname = "material.y_update_yp_trees" + bl_idname = "wm.y_update_yp_trees" bl_label = "Update " + get_addon_title() + " Node Groups" bl_description = "Update " + get_addon_title() + " node groups to newest version" bl_options = {'REGISTER', 'UNDO'} From 90c3072fad6e71a2ae22e295e24bcc0a9f9d10d1 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 26 Feb 2025 14:34:01 +0700 Subject: [PATCH 077/283] Fix: Misaligned internal nodes location on Blender 4.4+ --- node_arrangements.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/node_arrangements.py b/node_arrangements.py index f6ea16d5..31c55379 100644 --- a/node_arrangements.py +++ b/node_arrangements.py @@ -37,8 +37,14 @@ def get_mod_y_offsets(mod, is_value=False): def check_set_node_loc(tree, node_name, loc, hide=False, parent_unset=False): node = tree.nodes.get(node_name) if node: - if node.location != loc: + # Blender 4.4+ has new parent and node calculation + if is_bl_newer_than(4, 4) and node.parent != None: + if node.location != loc - node.parent.location: + node.location = loc - node.parent.location + + elif node.location != loc: node.location = loc + if node.hide != hide: node.hide = hide From 10b8d267f5ea91ad23c8bead38fd8fa5ce69fa49 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Wed, 26 Feb 2025 19:34:04 +0400 Subject: [PATCH 078/283] Allow customizing tree name from the quick node setup popup (#247) --- Root.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Root.py b/Root.py index 24a1a2a4..7d163cee 100644 --- a/Root.py +++ b/Root.py @@ -117,13 +117,12 @@ def check_yp_channel_nodes(yp, reconnect=False): reconnect_yp_nodes(yp.id_data) rearrange_yp_nodes(yp.id_data) -def create_new_group_tree(mat): +def create_new_group_tree(mat, name=None): #ypup = bpy.context.user_preferences.addons[__name__].preferences - # Group name is based from the material - #group_name = mat.name + YP_GROUP_SUFFIX - group_name = YP_GROUP_PREFIX + mat.name + # Group name is based on material unless specified + group_name = name or YP_GROUP_PREFIX + mat.name # Create new group tree group_tree = bpy.data.node_groups.new(group_name, 'ShaderNodeTree') @@ -428,6 +427,10 @@ class YQuickYPaintNodeSetup(bpy.types.Operator): bl_description = "Quick " + get_addon_title() + " Node Setup" bl_options = {'REGISTER', 'UNDO'} + tree_name : StringProperty( + name = 'Tree Name' + ) + type : EnumProperty( name = 'Type', items = ( @@ -481,6 +484,10 @@ def invoke(self, context, event): valid_bsdf_types = ['BSDF_PRINCIPLED', 'BSDF_DIFFUSE', 'EMISSION'] + # Set the tree name + mat = get_active_material() + self.tree_name = YP_GROUP_PREFIX + (mat.name if mat else obj.name) + # Get target bsdf self.target_bsdf_name = '' output = get_material_output(mat) @@ -515,6 +522,7 @@ def draw(self, context): row = split_layout(self.layout, 0.35) col = row.column() + col.label(text='Tree Name:') col.label(text='Type:') if self.type != 'EMISSION': ccol = col.column(align=True) @@ -527,6 +535,7 @@ def draw(self, context): ccol.label(text='') col = row.column() + col.prop(self, 'tree_name', text='') col.prop(self, 'type', text='') if self.type != 'EMISSION': ccol = col.column(align=True) @@ -556,7 +565,7 @@ def execute(self, context): mat = get_active_material() if not mat: - mat = bpy.data.materials.new(obj.name) + mat = bpy.data.materials.new(self.tree_name) mat.use_nodes = True if len(obj.material_slots) > 0: @@ -598,7 +607,7 @@ def execute(self, context): loc = Vector((0, 0)) # Create new group node - group_tree = create_new_group_tree(mat) + group_tree = create_new_group_tree(mat, self.tree_name) node = nodes.new(type='ShaderNodeGroup') node.node_tree = group_tree node.select = True From d7e2e3c4f401b9b8bf3139a4f558289d6eb92297 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Wed, 26 Feb 2025 20:18:07 +0400 Subject: [PATCH 079/283] Fix rename popup label (#248) --- Root.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Root.py b/Root.py index 7d163cee..2702e285 100644 --- a/Root.py +++ b/Root.py @@ -1814,8 +1814,8 @@ def execute(self, context): class YRenameYPaintTree(bpy.types.Operator): bl_idname = "wm.y_rename_ypaint_tree" - bl_label = "Rename " + get_addon_title() + " Group Name" - bl_description = "Rename " + get_addon_title() + " Group Name" + bl_label = "Rename " + get_addon_title() + " Tree" + bl_description = "Rename " + get_addon_title() + " Tree" bl_options = {'REGISTER', 'UNDO'} name : StringProperty(name='New Name', description='New Name', default='') From ef4ce3c7dce022bd6345d5abaad0e09924a8ea68 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Wed, 26 Feb 2025 21:30:39 +0400 Subject: [PATCH 080/283] Allow specifying a name for the new material and tree when duplicating (#249) --- Root.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/Root.py b/Root.py index 2702e285..5c3109bf 100644 --- a/Root.py +++ b/Root.py @@ -1870,7 +1870,7 @@ def execute(self, context): return {'FINISHED'} -def duplicate_mat(mat): +def duplicate_mat(mat, new_name=None): # HACK: mat.copy() on Blender 3.0 and newer will make the yp tree used by 3 users (it should be 2 users) # To get around this issue, use a temporary tree that will replace the yp trees before doing mat.copy() if is_bl_newer_than(3): @@ -1890,6 +1890,8 @@ def duplicate_mat(mat): # Duplicate material new_mat = mat.copy() + if new_name: + new_mat.name = new_name # Set back yp tree to original nodes for node_name, tree in yp_trees.items(): @@ -1913,6 +1915,11 @@ class YDuplicateYPNodes(bpy.types.Operator): bl_description = get_addon_title() + " doesn't work with more than one user! Duplicate to make it single user" bl_options = {'REGISTER', 'UNDO'} + new_name: StringProperty( + name = 'New Name', + description = 'New name for material and tree', + ) + duplicate_node : BoolProperty( name = 'Duplicate this Node', description = 'Duplicate this node', @@ -1939,7 +1946,6 @@ class YDuplicateYPNodes(bpy.types.Operator): @classmethod def poll(cls, context): - mat = get_active_material() group_node = get_active_ypaint_node() if not group_node: return False @@ -1953,6 +1959,8 @@ def invoke(self, context, event): group_node = get_active_ypaint_node() yp = group_node.node_tree.yp + self.new_name = group_node.node_tree.name + self.any_ondisk_image = False for layer in yp.layers: @@ -1966,9 +1974,20 @@ def invoke(self, context, event): return context.window_manager.invoke_props_dialog(self) def draw(self, context): - self.layout.prop(self, 'only_active', text='Only Active Object') + row = split_layout(self.layout, 0.35) + + col = row.column() + col.label(text='New Name:') + col.label(text='') if self.any_ondisk_image: - self.layout.prop(self, 'ondisk_duplicate') + col.label(text='') + + col = row.column() + col.prop(self, 'new_name', text='') + col.separator() + col.prop(self, 'only_active', text='Only Active Object') + if self.any_ondisk_image: + col.prop(self, 'ondisk_duplicate') def execute(self, context): @@ -1980,7 +1999,7 @@ def execute(self, context): if self.duplicate_material: # Duplicate the material - dup_mat = duplicate_mat(mat) + dup_mat = duplicate_mat(mat, self.new_name) for obj in objs: for i, m in enumerate(obj.data.materials): if m == mat: @@ -2000,8 +2019,9 @@ def execute(self, context): for tree_name, node in tree_dict.items(): tree = bpy.data.node_groups.get(tree_name) node.node_tree = tree.copy() + if self.new_name: + node.node_tree.name = self.new_name - ypui = context.window_manager.ypui group_node = get_active_ypaint_node() tree = group_node.node_tree yp = tree.yp From dda309bbf0e9e34cdfb47982d8812a93d4be294f Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Wed, 26 Feb 2025 23:31:30 +0400 Subject: [PATCH 081/283] Simplify setting material name to tree name (#250) --- Root.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Root.py b/Root.py index 5c3109bf..b81d575b 100644 --- a/Root.py +++ b/Root.py @@ -431,6 +431,12 @@ class YQuickYPaintNodeSetup(bpy.types.Operator): name = 'Tree Name' ) + set_material_name_to_tree_name : BoolProperty( + name = 'Set Material Name to Tree Name', + description = 'Set material name to tree name', + default = False + ) + type : EnumProperty( name = 'Type', items = ( @@ -535,7 +541,9 @@ def draw(self, context): ccol.label(text='') col = row.column() - col.prop(self, 'tree_name', text='') + rrow = col.row(align=True) + rrow.prop(self, 'tree_name', text='') + rrow.prop(self, 'set_material_name_to_tree_name', text='', icon='MATERIAL') col.prop(self, 'type', text='') if self.type != 'EMISSION': ccol = col.column(align=True) @@ -565,7 +573,8 @@ def execute(self, context): mat = get_active_material() if not mat: - mat = bpy.data.materials.new(self.tree_name) + material_name = self.tree_name if self.set_material_name_to_tree_name else obj.name + mat = bpy.data.materials.new(material_name) mat.use_nodes = True if len(obj.material_slots) > 0: @@ -577,6 +586,8 @@ def execute(self, context): # Remove default nodes for n in mat.node_tree.nodes: mat.node_tree.nodes.remove(n) + elif self.set_material_name_to_tree_name: + mat.name = self.tree_name if not mat.node_tree: mat.use_nodes = True @@ -1819,6 +1830,7 @@ class YRenameYPaintTree(bpy.types.Operator): bl_options = {'REGISTER', 'UNDO'} name : StringProperty(name='New Name', description='New Name', default='') + rename_active_material : BoolProperty(name='Also Rename Active Material', description='Also rename active material', default=False) @classmethod def poll(cls, context): @@ -1832,12 +1844,17 @@ def invoke(self, context, event): return context.window_manager.invoke_props_dialog(self) def draw(self, context): - self.layout.prop(self, 'name') + row = self.layout.row(align=True) + row.prop(self, 'name') + row.prop(self, 'rename_active_material', text='', icon='MATERIAL') def execute(self, context): node = get_active_ypaint_node() tree = node.node_tree tree.name = self.name + if self.rename_active_material: + mat = get_active_material() + mat.name = self.name return {'FINISHED'} class YChangeActiveYPaintNode(bpy.types.Operator): From ed5884378b2db3a3a537fa539fbdab5ff5aae9b1 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Wed, 26 Feb 2025 23:48:20 +0400 Subject: [PATCH 082/283] Set rename input focus (#251) --- Root.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Root.py b/Root.py index b81d575b..095510cb 100644 --- a/Root.py +++ b/Root.py @@ -1828,6 +1828,7 @@ class YRenameYPaintTree(bpy.types.Operator): bl_label = "Rename " + get_addon_title() + " Tree" bl_description = "Rename " + get_addon_title() + " Tree" bl_options = {'REGISTER', 'UNDO'} + bl_property = 'name' name : StringProperty(name='New Name', description='New Name', default='') rename_active_material : BoolProperty(name='Also Rename Active Material', description='Also rename active material', default=False) From a41cfee4417efea1e69569882c7fc8dcebcf674b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 1 Mar 2025 16:37:25 +0700 Subject: [PATCH 083/283] Clean up setting new name based on new tree name implementation. Also hide bake options that don't work on old Blenders. --- Root.py | 47 +++++++++++++++++++++++++++++++---------------- ui.py | 17 +++++++++-------- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/Root.py b/Root.py index 095510cb..732fb8a1 100644 --- a/Root.py +++ b/Root.py @@ -431,9 +431,9 @@ class YQuickYPaintNodeSetup(bpy.types.Operator): name = 'Tree Name' ) - set_material_name_to_tree_name : BoolProperty( - name = 'Set Material Name to Tree Name', - description = 'Set material name to tree name', + set_material_name_from_tree_name : BoolProperty( + name = 'Also Set Material Name', + description = 'Also set material name from tree name', default = False ) @@ -529,6 +529,7 @@ def draw(self, context): col = row.column() col.label(text='Tree Name:') + col.separator() col.label(text='Type:') if self.type != 'EMISSION': ccol = col.column(align=True) @@ -543,7 +544,8 @@ def draw(self, context): col = row.column() rrow = col.row(align=True) rrow.prop(self, 'tree_name', text='') - rrow.prop(self, 'set_material_name_to_tree_name', text='', icon='MATERIAL') + rrow.prop(self, 'set_material_name_from_tree_name', text='', icon='MATERIAL_DATA') + col.separator() col.prop(self, 'type', text='') if self.type != 'EMISSION': ccol = col.column(align=True) @@ -573,7 +575,7 @@ def execute(self, context): mat = get_active_material() if not mat: - material_name = self.tree_name if self.set_material_name_to_tree_name else obj.name + material_name = self.tree_name if self.set_material_name_from_tree_name else obj.name mat = bpy.data.materials.new(material_name) mat.use_nodes = True @@ -586,7 +588,7 @@ def execute(self, context): # Remove default nodes for n in mat.node_tree.nodes: mat.node_tree.nodes.remove(n) - elif self.set_material_name_to_tree_name: + elif self.set_material_name_from_tree_name: mat.name = self.tree_name if not mat.node_tree: @@ -1908,8 +1910,6 @@ def duplicate_mat(mat, new_name=None): # Duplicate material new_mat = mat.copy() - if new_name: - new_mat.name = new_name # Set back yp tree to original nodes for node_name, tree in yp_trees.items(): @@ -1922,10 +1922,13 @@ def duplicate_mat(mat, new_name=None): # Remove temporary trees for temp_tree in reversed(temp_trees): remove_datablock(bpy.data.node_groups, temp_tree) + else: + new_mat = mat.copy() - return new_mat + if new_name: + new_mat.name = new_name - return mat.copy() + return new_mat class YDuplicateYPNodes(bpy.types.Operator): bl_idname = "wm.y_duplicate_yp_nodes" @@ -1933,9 +1936,15 @@ class YDuplicateYPNodes(bpy.types.Operator): bl_description = get_addon_title() + " doesn't work with more than one user! Duplicate to make it single user" bl_options = {'REGISTER', 'UNDO'} - new_name: StringProperty( + new_name : StringProperty( name = 'New Name', - description = 'New name for material and tree', + description = 'New name for duplicated tree', + ) + + set_material_name_from_tree_name : BoolProperty( + name = 'Also Set Material Name', + description = 'Also set duplicated material name from duplicated tree name', + default = False ) duplicate_node : BoolProperty( @@ -1977,7 +1986,7 @@ def invoke(self, context, event): group_node = get_active_ypaint_node() yp = group_node.node_tree.yp - self.new_name = group_node.node_tree.name + self.new_name = get_unique_name(group_node.node_tree.name, bpy.data.node_groups) self.any_ondisk_image = False @@ -1996,13 +2005,16 @@ def draw(self, context): col = row.column() col.label(text='New Name:') + col.label(text='') if self.any_ondisk_image: col.label(text='') col = row.column() - col.prop(self, 'new_name', text='') - col.separator() + row = col.row(align=True) + row.prop(self, 'new_name', text='') + row.prop(self, 'set_material_name_from_tree_name', text='', icon='MATERIAL_DATA') + col.prop(self, 'only_active', text='Only Active Object') if self.any_ondisk_image: col.prop(self, 'ondisk_duplicate') @@ -2016,8 +2028,11 @@ def execute(self, context): if self.duplicate_material: + # Get new material name + new_mat_name = self.new_name if self.set_material_name_from_tree_name else get_unique_name(mat.name, bpy.data.materials) + # Duplicate the material - dup_mat = duplicate_mat(mat, self.new_name) + dup_mat = duplicate_mat(mat, new_mat_name) for obj in objs: for i, m in enumerate(obj.data.materials): if m == mat: diff --git a/ui.py b/ui.py index aee95988..e40cc17f 100644 --- a/ui.py +++ b/ui.py @@ -5448,15 +5448,16 @@ def draw(self, context): c.target_type = 'LAYER' c.overwrite_current = False - c = col.operator("wm.y_bake_to_layer", text='Bevel Normal') - c.type = 'BEVEL_NORMAL' - c.target_type = 'LAYER' - c.overwrite_current = False + if is_bl_newer_than(2, 80): + c = col.operator("wm.y_bake_to_layer", text='Bevel Normal') + c.type = 'BEVEL_NORMAL' + c.target_type = 'LAYER' + c.overwrite_current = False - c = col.operator("wm.y_bake_to_layer", text='Bevel Grayscale') - c.type = 'BEVEL_MASK' - c.target_type = 'LAYER' - c.overwrite_current = False + c = col.operator("wm.y_bake_to_layer", text='Bevel Grayscale') + c.type = 'BEVEL_MASK' + c.target_type = 'LAYER' + c.overwrite_current = False # NOTE: Blender 2.76 does not bake to object space normal correctly if is_bl_newer_than(2, 77): From c8e2d7f404fffc5d347350af782cc3c55a2f4185 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 2 Mar 2025 01:14:11 +0700 Subject: [PATCH 084/283] Implement rebaking baked masks for `Rebake all Baked Images` --- BakeToLayer.py | 860 +++++++++++++++++++++++++------------------------ common.py | 6 + 2 files changed, 438 insertions(+), 428 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index eb5691d5..e3e23d9a 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -172,24 +172,24 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): yp = node.node_tree.yp scene = bpy.context.scene obj = bpy.context.object - channel_idx = int(bprops['channel_idx']) if 'channel_idx' in bprops and len(yp.channels) > 0 else -1 + channel_idx = int(bprops.channel_idx) if 'channel_idx' in bprops and len(yp.channels) > 0 else -1 rdict = {} rdict['message'] = '' - if bprops['type'] == 'SELECTED_VERTICES' and obj.mode != 'EDIT': + if bprops.type == 'SELECTED_VERTICES' and obj.mode != 'EDIT': rdict['message'] = "Should be in edit mode!" return rdict - if bprops['target_type'] == 'MASK' and len(yp.layers) == 0: + if bprops.target_type == 'MASK' and len(yp.layers) == 0: rdict['message'] = "Mask need active layer!" return rdict - if bprops['type'] in {'BEVEL_NORMAL', 'BEVEL_MASK'} and not is_bl_newer_than(2, 80): + if bprops.type in {'BEVEL_NORMAL', 'BEVEL_MASK'} and not is_bl_newer_than(2, 80): rdict['message'] = "Blender 2.80+ is needed to use this feature!" return rdict - if bprops['type'] in {'MULTIRES_NORMAL', 'MULTIRES_DISPLACEMENT'} and not is_bl_newer_than(2, 80): + if bprops.type in {'MULTIRES_NORMAL', 'MULTIRES_DISPLACEMENT'} and not is_bl_newer_than(2, 80): rdict['message'] = "Blender 2.80+ is needed to use this feature!" return rdict @@ -197,14 +197,14 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): rdict['message'] = "Please unhide render and viewport of active object!" return rdict - if bprops['type'] == 'FLOW' and (bprops['uv_map'] == '' or bprops['uv_map_1'] == '' or bprops['uv_map'] == bprops['uv_map_1']): + if bprops.type == 'FLOW' and (bprops.uv_map == '' or bprops.uv_map_1 == '' or bprops.uv_map == bprops.uv_map_1): rdict['message'] = "UVMap and Straight UVMap cannot be the same or empty!" return rdict # Get cage object cage_object = None - if bprops['type'].startswith('OTHER_OBJECT_') and bprops['cage_object_name'] != '': - cage_object = bpy.data.objects.get(bprops['cage_object_name']) + if bprops.type.startswith('OTHER_OBJECT_') and bprops.cage_object_name != '': + cage_object = bpy.data.objects.get(bprops.cage_object_name) if cage_object: if any([mod for mod in cage_object.modifiers if mod.type not in {'ARMATURE'}]) or any([mod for mod in obj.modifiers if mod.type not in {'ARMATURE'}]): @@ -215,19 +215,18 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): rdict['message'] = "Invalid cage object, the cage mesh must have the same number of faces as the active object!" return rdict + objs = [obj] if mat.users > 1: objs, meshes = get_bakeable_objects_and_meshes(mat, cage_object) - else: - objs = [obj] # Count multires objects multires_count = 0 - if bprops['type'].startswith('MULTIRES_'): + if bprops.type.startswith('MULTIRES_'): for ob in objs: if get_multires_modifier(ob): multires_count += 1 - if not objs or (bprops['type'].startswith('MULTIRES_') and multires_count == 0): + if not objs or (bprops.type.startswith('MULTIRES_') and multires_count == 0): rdict['message'] = "No valid objects found to bake!" return rdict @@ -240,7 +239,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Get other objects for other object baking other_objs = [] - if bprops['type'].startswith('OTHER_OBJECT_'): + if bprops.type.startswith('OTHER_OBJECT_'): # Get other objects based on selected objects with different material for o in bpy.context.selected_objects: @@ -270,7 +269,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if o and o not in other_objs: other_objs.append(o) - if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + if bprops.type == 'OTHER_OBJECT_CHANNELS': ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) if not other_objs: @@ -283,34 +282,34 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Get tile numbers tilenums = [1001] - if bprops['use_udim']: - tilenums = UDIM.get_tile_numbers(objs, bprops['uv_map']) + if bprops.use_udim: + tilenums = UDIM.get_tile_numbers(objs, bprops.uv_map) # Remember things book = remember_before_bake(yp, mat=mat) # FXAA doesn't work with hdr image # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead - use_fxaa = not bprops['hdr'] and bprops['fxaa'] and not bprops['type'].startswith('OTHER_OBJECT_') + use_fxaa = not bprops.hdr and bprops.fxaa and not bprops.type.startswith('OTHER_OBJECT_') # For now SSAA only works with other object baking - use_ssaa = bprops['ssaa'] and bprops['type'].startswith('OTHER_OBJECT_') + use_ssaa = bprops.ssaa and bprops.type.startswith('OTHER_OBJECT_') # Denoising only available for AO bake for now - use_denoise = bprops['denoise'] and bprops['type'] in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81) + use_denoise = bprops.denoise and bprops.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81) # SSAA will multiply size by 2 then resize it back if use_ssaa: - width = bprops['width'] * 2 - height = bprops['height'] * 2 + width = bprops.width * 2 + height = bprops.height * 2 else: - width = bprops['width'] - height = bprops['height'] + width = bprops.width + height = bprops.height # If use baked disp, need to bake normal and height map first subdiv_setup_changes = False height_root_ch = get_root_height_channel(yp) - if height_root_ch and bprops['use_baked_disp'] and not bprops['type'].startswith('MULTIRES_'): + if height_root_ch and bprops.use_baked_disp and not bprops.type.startswith('MULTIRES_'): if not height_root_ch.enable_subdiv_setup: height_root_ch.enable_subdiv_setup = True @@ -320,21 +319,21 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): temp_objs = [] # Sometimes Cavity bake will create temporary objects - if (bprops['type'] == 'CAVITY' and (bprops['subsurf_influence'] or bprops['use_baked_disp'])): + if (bprops.type == 'CAVITY' and (bprops.subsurf_influence or bprops.use_baked_disp)): # NOTE: Baking cavity with subdiv setup can only happen if there's only one object and no UDIM - if is_bl_newer_than(4, 2) and len(objs) == 1 and not bprops['use_udim'] and height_root_ch and height_root_ch.enable_subdiv_setup: + if is_bl_newer_than(4, 2) and len(objs) == 1 and not bprops.use_udim and height_root_ch and height_root_ch.enable_subdiv_setup: # Check if there's VDM layer vdm_layer = get_first_vdm_layer(yp) - vdm_uv_name = vdm_layer.uv_name if vdm_layer else bprops['uv_map'] + vdm_uv_name = vdm_layer.uv_name if vdm_layer else bprops.uv_map # Get baked combined vdm image - combined_vdm_image = vector_displacement.get_combined_vdm_image(objs[0], vdm_uv_name, width=bprops['width'], height=bprops['height']) + combined_vdm_image = vector_displacement.get_combined_vdm_image(objs[0], vdm_uv_name, width=bprops.width, height=bprops.height) # Bake tangent and bitangent # NOTE: Only bake the first object tangent since baking combined mesh can cause memory leak at the moment - tanimage, bitimage = vector_displacement.get_tangent_bitangent_images(objs[0], bprops['uv_map']) + tanimage, bitimage = vector_displacement.get_tangent_bitangent_images(objs[0], bprops.uv_map) # Duplicate object objs = temp_objs = [get_merged_mesh_objects(scene, objs, True, disable_problematic_modifiers=False)] @@ -342,7 +341,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Use VDM loader geometry nodes # NOTE: Geometry nodes currently does not support UDIM, so using UDIM will cause wrong bake result set_active_object(objs[0]) - vdm_loader = vector_displacement_lib.get_vdm_loader_geotree(bprops['uv_map'], combined_vdm_image, tanimage, bitimage, 1.0) + vdm_loader = vector_displacement_lib.get_vdm_loader_geotree(bprops.uv_map, combined_vdm_image, tanimage, bitimage, 1.0) bpy.ops.object.modifier_add(type='NODES') geomod = objs[0].modifiers[-1] geomod.node_group = vdm_loader @@ -356,7 +355,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): objs = temp_objs = get_duplicated_mesh_objects(scene, objs, True) # Join objects then extend with other objects - elif bprops['type'].startswith('OTHER_OBJECT_'): + elif bprops.type.startswith('OTHER_OBJECT_'): if len(objs) > 1: objs = [get_merged_mesh_objects(scene, objs)] temp_objs = objs.copy() @@ -364,12 +363,12 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): objs.extend(other_objs) # Join objects if the number of objects is higher than one - elif not bprops['type'].startswith('MULTIRES_') and len(objs) > 1 and not is_join_objects_problematic(yp): + elif not bprops.type.startswith('MULTIRES_') and len(objs) > 1 and not is_join_objects_problematic(yp): objs = temp_objs = [get_merged_mesh_objects(scene, objs, True)] fill_mode = 'FACE' obj_vertex_indices = {} - if bprops['type'] == 'SELECTED_VERTICES': + if bprops.type == 'SELECTED_VERTICES': if bpy.context.tool_settings.mesh_select_mode[0] or bpy.context.tool_settings.mesh_select_mode[1]: fill_mode = 'VERTEX' @@ -419,27 +418,27 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if alpha_outp: break # Prepare bake settings - if bprops['type'] == 'AO': + if bprops.type == 'AO': if alpha_outp: # If there's alpha channel use standard AO bake, which has lesser quality denoising bake_type = 'AO' else: # When there is no alpha channel use combined render bake, which has better denoising bake_type = 'COMBINED' - elif bprops['type'] == 'MULTIRES_NORMAL': + elif bprops.type == 'MULTIRES_NORMAL': bake_type = 'NORMALS' - elif bprops['type'] == 'MULTIRES_DISPLACEMENT': + elif bprops.type == 'MULTIRES_DISPLACEMENT': bake_type = 'DISPLACEMENT' - elif bprops['type'] in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + elif bprops.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: bake_type = 'NORMAL' else: bake_type = 'EMIT' # If use only local, hide other objects - hide_other_objs = bprops['type'] != 'AO' or bprops['only_local'] + hide_other_objs = bprops.type != 'AO' or bprops.only_local # Fit tilesize to bake resolution if samples is equal 1 - if bprops['samples'] <= 1: + if bprops.samples <= 1: tile_x = width tile_y = height else: @@ -447,34 +446,34 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): tile_y = 256 # Cage object only used for other object baking - cage_object_name = bprops['cage_object_name'] if bprops['type'].startswith('OTHER_OBJECT_') else '' + cage_object_name = bprops.cage_object_name if bprops.type.startswith('OTHER_OBJECT_') else '' prepare_bake_settings( - book, objs, yp, samples=bprops['samples'], margin=bprops['margin'], - uv_map=bprops['uv_map'], bake_type=bake_type, #disable_problematic_modifiers=True, - bake_device=bprops['bake_device'], hide_other_objs=hide_other_objs, - bake_from_multires=bprops['type'].startswith('MULTIRES_'), tile_x = tile_x, tile_y = tile_y, - use_selected_to_active=bprops['type'].startswith('OTHER_OBJECT_'), - max_ray_distance=bprops['max_ray_distance'], cage_extrusion=bprops['cage_extrusion'], - source_objs=other_objs, use_denoising=False, margin_type=bprops['margin_type'], + book, objs, yp, samples=bprops.samples, margin=bprops.margin, + uv_map=bprops.uv_map, bake_type=bake_type, #disable_problematic_modifiers=True, + bake_device=bprops.bake_device, hide_other_objs=hide_other_objs, + bake_from_multires=bprops.type.startswith('MULTIRES_'), tile_x = tile_x, tile_y = tile_y, + use_selected_to_active=bprops.type.startswith('OTHER_OBJECT_'), + max_ray_distance=bprops.max_ray_distance, cage_extrusion=bprops.cage_extrusion, + source_objs=other_objs, use_denoising=False, margin_type=bprops.margin_type, cage_object_name = cage_object_name, - normal_space = 'OBJECT' if bprops['type'] == 'OBJECT_SPACE_NORMAL' else 'TANGENT' + normal_space = 'OBJECT' if bprops.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' ) # Set multires level #ori_multires_levels = {} - if bprops['type'].startswith('MULTIRES_'): #or bprops['type'] == 'AO': + if bprops.type.startswith('MULTIRES_'): #or bprops.type == 'AO': for ob in objs: mod = get_multires_modifier(ob) #mod.render_levels = mod.total_levels - if mod and bprops['type'].startswith('MULTIRES_'): - mod.render_levels = bprops['multires_base'] - mod.levels = bprops['multires_base'] + if mod and bprops.type.startswith('MULTIRES_'): + mod.render_levels = bprops.multires_base + mod.levels = bprops.multires_base #ori_multires_levels[ob.name] = mod.render_levels # Setup for cavity - if bprops['type'] == 'CAVITY': + if bprops.type == 'CAVITY': tt = time.time() print('BAKE TO LAYER: Applying subsurf/multires for Cavity bake...') @@ -484,7 +483,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): set_active_object(ob) - if bprops['subsurf_influence'] or bprops['use_baked_disp']: + if bprops.subsurf_influence or bprops.use_baked_disp: need_to_be_applied_modifiers = [] for m in ob.modifiers: if m.type in {'SUBSURF', 'MULTIRES'} and m.levels > 0 and m.show_viewport: @@ -521,18 +520,18 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): print('BAKE TO LAYER: Applying subsurf/multires is done in', '{:0.2f}'.format(time.time() - tt), 'seconds!') # Setup for flow - if bprops['type'] == 'FLOW': + if bprops.type == 'FLOW': bpy.ops.object.mode_set(mode = 'OBJECT') for ob in objs: uv_layers = get_uv_layers(ob) - main_uv = uv_layers.get(bprops['uv_map']) - straight_uv = uv_layers.get(bprops['uv_map_1']) + main_uv = uv_layers.get(bprops.uv_map) + straight_uv = uv_layers.get(bprops.uv_map_1) if main_uv and straight_uv: flow_vcol = get_flow_vcol(ob, main_uv, straight_uv) # Flip normals setup - if bprops['flip_normals']: + if bprops.flip_normals: #ori_mode[obj.name] = obj.mode if is_bl_newer_than(2, 80): # Deselect other objects first @@ -564,14 +563,14 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): ori_multires_levels = {} # Do not disable modifiers for surface based bake types - disable_problematic_modifiers = bprops['type'] not in {'CAVITY', 'POINTINESS', 'BEVEL_NORMAL', 'BEVEL_MASK'} + disable_problematic_modifiers = bprops.type not in {'CAVITY', 'POINTINESS', 'BEVEL_NORMAL', 'BEVEL_MASK'} for ob in objs: # Disable few modifiers ori_mods[ob.name] = [m.show_render for m in ob.modifiers] ori_viewport_mods[ob.name] = [m.show_viewport for m in ob.modifiers] - if bprops['type'].startswith('MULTIRES_'): + if bprops.type.startswith('MULTIRES_'): mul = get_multires_modifier(ob) multires_index = 99 if mul: @@ -587,7 +586,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): ori_mat_ids[ob.name] = [] ori_loop_locs[ob.name] = [] - if bprops['subsurf_influence'] and not bprops['use_baked_disp'] and not bprops['type'].startswith('MULTIRES_'): + if bprops.subsurf_influence and not bprops.use_baked_disp and not bprops.type.startswith('MULTIRES_'): for m in ob.modifiers: if m.type == 'MULTIRES': ori_multires_levels[ob.name] = m.render_levels @@ -600,12 +599,12 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): else: continue uv_layers = get_uv_layers(ob) - uvl = uv_layers.get(bprops['uv_map']) + uvl = uv_layers.get(bprops.uv_map) for p in ob.data.polygons: # Set uv location to (0,0) if not using current material - if uvl and not bprops['force_bake_all_polygons']: + if uvl and not bprops.force_bake_all_polygons: uv_locs = [] for li in p.loop_indices: uv_locs.append(uvl.data[li].uv.copy()) @@ -625,11 +624,11 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): geometry = None vector_math = None vector_math_1 = None - if bprops['type'] == 'BEVEL_NORMAL': + if bprops.type == 'BEVEL_NORMAL': #bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') normal_bake = mat.node_tree.nodes.new('ShaderNodeGroup') normal_bake.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV) - elif bprops['type'] == 'BEVEL_MASK': + elif bprops.type == 'BEVEL_MASK': geometry = mat.node_tree.nodes.new('ShaderNodeNewGeometry') vector_math = mat.node_tree.nodes.new('ShaderNodeVectorMath') vector_math.operation = 'CROSS_PRODUCT' @@ -641,7 +640,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): output = get_active_mat_output_node(mat.node_tree) ori_bsdf = output.inputs[0].links[0].from_socket - if bprops['type'] == 'AO': + if bprops.type == 'AO': # If there's alpha channel use standard AO bake, which has lesser quality denoising if alpha_outp: src = None @@ -650,13 +649,13 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): scene.cycles.use_fast_gi = True if scene.world: - scene.world.light_settings.distance = bprops['ao_distance'] + scene.world.light_settings.distance = bprops.ao_distance # When there is no alpha channel use combined render bake, which has better denoising else: src = mat.node_tree.nodes.new('ShaderNodeAmbientOcclusion') if 'Distance' in src.inputs: - src.inputs['Distance'].default_value = bprops['ao_distance'] + src.inputs['Distance'].default_value = bprops.ao_distance # Links if not is_bl_newer_than(2, 80): @@ -665,14 +664,14 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): mat.node_tree.links.new(src.outputs['AO'], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'POINTINESS': + elif bprops.type == 'POINTINESS': src = mat.node_tree.nodes.new('ShaderNodeNewGeometry') # Links mat.node_tree.links.new(src.outputs['Pointiness'], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'CAVITY': + elif bprops.type == 'CAVITY': src = mat.node_tree.nodes.new('ShaderNodeGroup') src.node_tree = get_node_tree_lib(lib.CAVITY) @@ -683,36 +682,36 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'DUST': + elif bprops.type == 'DUST': src = mat.node_tree.nodes.new('ShaderNodeGroup') src.node_tree = get_node_tree_lib(lib.DUST) mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'PAINT_BASE': + elif bprops.type == 'PAINT_BASE': src = mat.node_tree.nodes.new('ShaderNodeGroup') src.node_tree = get_node_tree_lib(lib.PAINT_BASE) mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'BEVEL_NORMAL': + elif bprops.type == 'BEVEL_NORMAL': src = mat.node_tree.nodes.new('ShaderNodeBevel') - src.samples = bprops['bevel_samples'] - src.inputs[0].default_value = bprops['bevel_radius'] + src.samples = bprops.bevel_samples + src.inputs[0].default_value = bprops.bevel_radius #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) mat.node_tree.links.new(src.outputs[0], normal_bake.inputs[0]) mat.node_tree.links.new(normal_bake.outputs[0], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'BEVEL_MASK': + elif bprops.type == 'BEVEL_MASK': src = mat.node_tree.nodes.new('ShaderNodeBevel') - src.samples = bprops['bevel_samples'] - src.inputs[0].default_value = bprops['bevel_radius'] + src.samples = bprops.bevel_samples + src.inputs[0].default_value = bprops.bevel_radius mat.node_tree.links.new(geometry.outputs['Normal'], vector_math.inputs[0]) mat.node_tree.links.new(src.outputs[0], vector_math.inputs[1]) @@ -724,7 +723,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): mat.node_tree.links.new(vector_math.outputs[1], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'SELECTED_VERTICES': + elif bprops.type == 'SELECTED_VERTICES': if is_bl_newer_than(2, 80): src = mat.node_tree.nodes.new('ShaderNodeVertexColor') src.layer_name = TEMP_VCOL @@ -734,7 +733,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - elif bprops['type'] == 'FLOW': + elif bprops.type == 'FLOW': # Set vcol src = mat.node_tree.nodes.new('ShaderNodeAttribute') src.attribute_name = FLOW_VCOL @@ -754,7 +753,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): ori_from_nodes = {} ori_from_sockets = {} - if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + if bprops.type == 'OTHER_OBJECT_CHANNELS': ch_ids = [i for i, coo in enumerate(ch_other_objects) if len(coo) > 0] # Get all other materials @@ -793,10 +792,10 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): for idx in ch_ids: # Image name and colorspace - image_name = bprops['name'] + image_name = bprops.name colorspace = get_srgb_name() - if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + if bprops.type == 'OTHER_OBJECT_CHANNELS': root_ch = yp.channels[idx] image_name += ' ' + yp.channels[idx].name @@ -844,37 +843,37 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): colorspace = get_noncolor_name() if root_ch.colorspace == 'LINEAR' else get_srgb_name() - elif bprops['type'] in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: colorspace = get_noncolor_name() # Using float image will always make the image linear/non-color - if bprops['hdr']: + if bprops.hdr: colorspace = get_noncolor_name() # Base color of baked image - if bprops['type'] == 'AO': + if bprops.type == 'AO': color = [1.0, 1.0, 1.0, 1.0] - elif bprops['type'] in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - if bprops['hdr']: + elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + if bprops.hdr: color = [0.7354, 0.7354, 1.0, 1.0] else: color = [0.5, 0.5, 1.0, 1.0] - elif bprops['type'] == 'FLOW': + elif bprops.type == 'FLOW': color = [0.5, 0.5, 0.0, 1.0] else: - if bprops['hdr']: + if bprops.hdr: color = [0.7354, 0.7354, 0.7354, 1.0] else: color = [0.5, 0.5, 0.5, 1.0] # Make image transparent if its baked from other objects - if bprops['type'].startswith('OTHER_OBJECT_'): + if bprops.type.startswith('OTHER_OBJECT_'): color[3] = 0.0 # New target image - if bprops['use_udim']: + if bprops.use_udim: image = bpy.data.images.new( name=image_name, width=width, height=height, - alpha=True, float_buffer=bprops['hdr'], tiled=True + alpha=True, float_buffer=bprops.hdr, tiled=True ) # Fill tiles @@ -887,7 +886,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): else: image = bpy.data.images.new( name=image_name, width=width, height=height, - alpha=True, float_buffer=bprops['hdr'] + alpha=True, float_buffer=bprops.hdr ) image.generated_color = color @@ -919,7 +918,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Bake! try: - if bprops['type'].startswith('MULTIRES_'): + if bprops.type.startswith('MULTIRES_'): bpy.ops.object.bake_image() else: if bake_type != 'EMIT': @@ -928,12 +927,12 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): except Exception as e: # Try to use CPU if GPU baking is failed - if bprops['bake_device'] == 'GPU': + if bprops.bake_device == 'GPU': print('EXCEPTIION: GPU baking failed! Trying to use CPU...') - bprops['bake_device'] = 'CPU' + bprops.bake_device = 'CPU' scene.cycles.device = 'CPU' - if bprops['type'].startswith('MULTIRES_'): + if bprops.type.startswith('MULTIRES_'): bpy.ops.object.bake_image() else: if bake_type != 'EMIT': @@ -942,13 +941,13 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): else: print('EXCEPTIION:', e) - if use_fxaa: fxaa_image(image, False, bake_device=bprops['bake_device']) + if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) # Bake other object alpha - if bprops['type'] in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS'}: + if bprops.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS'}: alpha_found = False - if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + if bprops.type == 'OTHER_OBJECT_CHANNELS': # Set emission connection for j, m in enumerate(ch_other_mats[idx]): @@ -1000,11 +999,11 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): UDIM.swap_tile(temp_img, 1001, tilenum) # Copy alpha to RGB channel, so it can be fxaa-ed - if bprops['type'] == 'OTHER_OBJECT_NORMAL': + if bprops.type == 'OTHER_OBJECT_NORMAL': copy_image_channel_pixels(temp_img, temp_img, 3, 0) # FXAA alpha - fxaa_image(temp_img, False, bprops['bake_device'], first_tile_only=True) + fxaa_image(temp_img, False, bprops.bake_device, first_tile_only=True) # Copy alpha to actual image copy_image_channel_pixels(temp_img, image, 0, 3) @@ -1020,8 +1019,8 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Back to original size if using SSA if use_ssaa: image, temp_segment = resize_image( - image, bprops['width'], bprops['height'], image.colorspace_settings.name, - alpha_aware=True, bake_device=bprops['bake_device'] + image, bprops.width, bprops.height, image.colorspace_settings.name, + alpha_aware=True, bake_device=bprops.bake_device ) # Denoise AO image @@ -1030,33 +1029,33 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): new_segment_created = False - if bprops['use_image_atlas']: + if bprops.use_image_atlas: need_to_create_new_segment = False if segment: ia_image = segment.id_data - if bprops['use_udim']: - need_to_create_new_segment = ia_image.is_float != bprops['hdr'] + if bprops.use_udim: + need_to_create_new_segment = ia_image.is_float != bprops.hdr if need_to_create_new_segment: UDIM.remove_udim_atlas_segment_by_name(ia_image, segment.name, yp) else: - need_to_create_new_segment = bprops['width'] != segment.width or bprops['height'] != segment.height or ia_image.is_float != bprops['hdr'] + need_to_create_new_segment = bprops.width != segment.width or bprops.height != segment.height or ia_image.is_float != bprops.hdr if need_to_create_new_segment: segment.unused = True if not segment or need_to_create_new_segment: - if bprops['use_udim']: + if bprops.use_udim: segment = UDIM.get_set_udim_atlas_segment( - tilenums, color=(0, 0, 0, 0), colorspace=get_srgb_name(), hdr=bprops['hdr'], yp=yp + tilenums, color=(0, 0, 0, 0), colorspace=get_srgb_name(), hdr=bprops.hdr, yp=yp ) else: # Clearing unused image atlas segments - img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'TRANSPARENT', bprops['width'], bprops['height'], bprops['hdr']) + img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'TRANSPARENT', bprops.width, bprops.height, bprops.hdr) if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) segment = ImageAtlas.get_set_image_atlas_segment( - bprops['width'], bprops['height'], 'TRANSPARENT', bprops['hdr'], yp=yp + bprops.width, bprops.height, 'TRANSPARENT', bprops.hdr, yp=yp ) new_segment_created = True @@ -1064,7 +1063,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): ia_image = segment.id_data # Set baked image to segment - if bprops['use_udim']: + if bprops.use_udim: offset = get_udim_segment_mapping_offset(segment) * 10 copy_dict = {} for tilenum in tilenums: @@ -1087,10 +1086,10 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): active_id = yp.active_layer_index if overwrite_img != image: - if segment and not bprops['use_image_atlas']: + if segment and not bprops.use_image_atlas: entities = ImageAtlas.replace_segment_with_image(yp, segment, image) segment = None - else: entities = replace_image(overwrite_img, image, yp, bprops['uv_map']) + else: entities = replace_image(overwrite_img, image, yp, bprops.uv_map) elif segment: entities = ImageAtlas.get_entities_with_specific_segment(yp, segment) else: entities = get_entities_with_specific_image(yp, image) @@ -1099,10 +1098,10 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): ent.segment_name = segment.name ImageAtlas.set_segment_mapping(ent, segment, image) - if ent.uv_name != bprops['uv_map']: - ent.uv_name = bprops['uv_map'] + if ent.uv_name != bprops.uv_map: + ent.uv_name = bprops.uv_map - if bprops['target_type'] == 'LAYER': + if bprops.target_type == 'LAYER': layer_ids = [i for i, l in enumerate(yp.layers) if l in entities] if entities and yp.active_layer_index not in layer_ids: active_id = layer_ids[0] @@ -1113,7 +1112,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Refresh Neighbor UV resolution set_uv_neighbor_resolution(yp.layers[active_id]) - elif bprops['target_type'] == 'MASK': + elif bprops.target_type == 'MASK': masks = [] for l in yp.layers: masks.extend([m for m in l.masks if m in entities]) @@ -1126,22 +1125,22 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Refresh Neighbor UV resolution set_uv_neighbor_resolution(masks[0]) - elif bprops['target_type'] == 'LAYER': + elif bprops.target_type == 'LAYER': - layer_name = image.name if not bprops['use_image_atlas'] else bprops['name'] + layer_name = image.name if not bprops.use_image_atlas else bprops.name - if bprops['use_image_atlas']: + if bprops.use_image_atlas: layer_name = get_unique_name(layer_name, yp.layers) yp.halt_update = True layer = Layer.add_new_layer( group_tree=node.node_tree, layer_name=layer_name, layer_type='IMAGE', channel_idx=channel_idx, - blend_type=bprops['blend_type'], normal_blend_type=bprops['normal_blend_type'], + blend_type=bprops.blend_type, normal_blend_type=bprops.normal_blend_type, normal_map_type=bprops['normal_map_type'], texcoord_type='UV', - uv_name=bprops['uv_map'], image=image, vcol=None, segment=segment, - interpolation = bprops['interpolation'], - normal_space = 'OBJECT' if bprops['type'] == 'OBJECT_SPACE_NORMAL' else 'TANGENT' + uv_name=bprops.uv_map, image=image, vcol=None, segment=segment, + interpolation = bprops.interpolation, + normal_space = 'OBJECT' if bprops.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' ) yp.halt_update = False active_id = yp.active_layer_index @@ -1159,13 +1158,13 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): else: active_layer = yp.layers[yp.active_layer_index] - mask_name = image.name if not bprops['use_image_atlas'] else bprops['name'] + mask_name = image.name if not bprops.use_image_atlas else bprops.name - if bprops['use_image_atlas']: + if bprops.use_image_atlas: mask_name = get_unique_name(mask_name, active_layer.masks) mask = Mask.add_new_mask( - active_layer, mask_name, 'IMAGE', 'UV', bprops['uv_map'], + active_layer, mask_name, 'IMAGE', 'UV', bprops.uv_map, image, None, segment ) mask.active_edit = True @@ -1216,7 +1215,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Set image to source source.image = image - source.interpolation = bprops['interpolation'] + source.interpolation = bprops.interpolation # Remove image if it's not used anymore if old_image: safe_remove_image(old_image) @@ -1225,7 +1224,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): bi = segment.bake_info if segment else image.y_bake_info if not bi.is_baked: bi.is_baked = True - if bi.bake_type != bprops['type']: bi.bake_type = bprops['type'] + if bi.bake_type != bprops.type: bi.bake_type = bprops.type for attr in dir(bi): if attr.startswith('__'): continue if attr.startswith('bl_'): continue @@ -1256,7 +1255,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if ooo not in other_objs: bi.other_objects.remove(i) - if bprops['type'] == 'SELECTED_VERTICES': + if bprops.type == 'SELECTED_VERTICES': #fill_mode = 'FACE' #obj_vertex_indices = {} bi.selected_face_mode = True if fill_mode == 'FACE' else False @@ -1278,7 +1277,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): bvi.index = vi # Recover other yps - if bprops['type'] == 'OTHER_OBJECT_CHANNELS': + if bprops.type == 'OTHER_OBJECT_CHANNELS': for m in all_other_mats: # Set back original socket mout = get_material_output(m) @@ -1335,7 +1334,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Get uv map uv_layers = get_uv_layers(ob) - uvl = uv_layers.get(bprops['uv_map']) + uvl = uv_layers.get(bprops.uv_map) # Recover uv locations if uvl: @@ -1350,7 +1349,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if vcol: vcols.remove(vcol) # Recover flip normals setup - if bprops['flip_normals']: + if bprops.flip_normals: #bpy.ops.object.mode_set(mode = 'EDIT') #bpy.ops.mesh.flip_normals() #bpy.ops.mesh.select_all(action='DESELECT') @@ -1382,7 +1381,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): height_root_ch.enable_subdiv_setup = not height_root_ch.enable_subdiv_setup # Remove flow vcols - if bprops['type'] == 'FLOW': + if bprops.type == 'FLOW': for ob in objs: vcols = get_vertex_colors(ob) flow_vcol = vcols.get(FLOW_VCOL) @@ -1416,6 +1415,62 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): return rdict +def get_bake_properties_from_self(self): + + bprops = dotdict() + + # NOTE: Getting props from keys doesn't work + #for prop in self.properties.keys(): + # try: bprops[prop] = getattr(self, prop) + # except Exception as e: print(e) + + props = [ + 'bake_device', + 'samples', + 'margin', + 'margin_type', + 'width', + 'height', + 'image_resolution', + 'use_custom_resolution', + 'name', + 'uv_map', + 'uv_map_1', + 'interpolation', + 'type', + 'cage_object_name', + 'cage_extrusion', + 'max_ray_distance', + 'ao_distance', + 'bevel_samples', + 'bevel_radius', + 'multires_base', + 'target_type', + 'fxaa', + 'ssaa', + 'denoise', + 'channel_idx', + 'blend_type', + 'normal_blend_type', + 'normal_map_type', + 'hdr', + 'use_baked_disp', + 'flip_normals', + 'only_local', + 'subsurf_influence', + 'force_bake_all_polygons', + 'use_image_atlas', + 'use_udim', + 'blur', + 'blur_factor' + ] + + for prop in props: + if hasattr(self, prop): + bprops[prop] = getattr(self, prop) + + return bprops + class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): bl_idname = "wm.y_bake_to_layer" bl_label = "Bake To Layer" @@ -2070,52 +2125,9 @@ def execute(self, context): elif overwrite_img.yua.is_udim_atlas: segment = overwrite_img.yua.segments.get(self.overwrite_segment_name) - bprops = {} - #for prop in self.properties.keys(): - # try: bprops[prop] = getattr(self, prop) - # except Exception as e: print(e) - - bprops['bake_device'] = self.bake_device - bprops['samples'] = self.samples - bprops['margin'] = self.margin - bprops['margin_type'] = self.margin_type - bprops['width'] = self.width - bprops['height'] = self.height - bprops['image_resolution'] = self.image_resolution - bprops['use_custom_resolution'] = self.use_custom_resolution - bprops['name'] = self.name - bprops['uv_map'] = self.uv_map - bprops['uv_map_1'] = self.uv_map_1 - bprops['interpolation'] = self.interpolation - #bprops['overwrite_choice'] = self.overwrite_choice - #bprops['overwrite_current'] = self.overwrite_current - #bprops['overwrite_name'] = self.overwrite_name - #bprops['overwrite_image_name'] = self.overwrite_image_name - #bprops['overwrite_segment_name'] = self.overwrite_segment_name - bprops['type'] = self.type - bprops['cage_object_name'] = self.cage_object_name - bprops['cage_extrusion'] = self.cage_extrusion - bprops['max_ray_distance'] = self.max_ray_distance - bprops['ao_distance'] = self.ao_distance - bprops['bevel_samples'] = self.bevel_samples - bprops['bevel_radius'] = self.bevel_radius - bprops['multires_base'] = self.multires_base - bprops['target_type'] = self.target_type - bprops['fxaa'] = self.fxaa - bprops['ssaa'] = self.ssaa - bprops['denoise'] = self.denoise - bprops['channel_idx'] = self.channel_idx - bprops['blend_type'] = self.blend_type - bprops['normal_blend_type'] = self.normal_blend_type - bprops['normal_map_type'] = self.normal_map_type - bprops['hdr'] = self.hdr - bprops['use_baked_disp'] = self.use_baked_disp - bprops['flip_normals'] = self.flip_normals - bprops['only_local'] = self.only_local - bprops['subsurf_influence'] = self.subsurf_influence - bprops['force_bake_all_polygons'] = self.force_bake_all_polygons - bprops['use_image_atlas'] = self.use_image_atlas - bprops['use_udim'] = self.use_udim + + # Get bake properties + bprops = get_bake_properties_from_self(self) rdict = bake_to_entity(bprops, overwrite_img, segment) @@ -2144,77 +2156,56 @@ def execute(self, context): return {'FINISHED'} -class YRebakeBakedImages(bpy.types.Operator, BaseBakeOperator): - bl_idname = "wm.y_rebake_baked_images" - bl_label = "Rebake All Baked Images" - bl_description = "Rebake all of the baked images in all layers" - bl_options = {'REGISTER'} - - @classmethod - def poll(cls, context): - return get_active_ypaint_node() and context.object.type == 'MESH' - - def execute(self, context): - T = time.time() - node = get_active_ypaint_node() - yp = node.node_tree.yp +def put_image_to_image_atlas(yp, image, tilenums=[]): - entities, images, segment_names, _ = get_yp_entities_images_and_segments(yp) - - for i, image in enumerate(images): - - if image.yia.is_image_atlas: - segment = image.yia.segments.get(segment_names[i]) - elif image.yua.is_udim_atlas: - segment = image.yua.segments.get(segment_names[i]) - else: segment = None - - if ((segment and segment.bake_info.is_baked and not segment.bake_info.is_baked_channel) or - (not segment and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) - ): + if image.source == 'TILED': + segment = UDIM.get_set_udim_atlas_segment( + tilenums, color=(0, 0, 0, 1), colorspace=get_noncolor_name(), hdr=image.is_float, yp=yp + ) + else: + # Clearing unused image atlas segments + img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'BLACK', image.size[0], image.size[1], image.is_float) + if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) - bi = image.y_bake_info if not segment else segment.bake_info + segment = ImageAtlas.get_set_image_atlas_segment( + image.size[0], image.size[1], 'BLACK', image.is_float, yp=yp + ) - # Skip outdated bake type - if bi.bake_type == 'SELECTED_VERTICES': - continue + ia_image = segment.id_data - entity = entities[i][0] - entity_path = entity.path_from_id() + # Set baked image to segment + if image.source == 'TILED': + offset = get_udim_segment_mapping_offset(segment) * 10 + copy_dict = {} + for tilenum in tilenums: + copy_dict[tilenum] = tilenum + offset + UDIM.copy_tiles(image, ia_image, copy_dict) + else: copy_image_pixels(image, ia_image, segment) - m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity_path) - m2 = re.match(r'^yp\.layers\[(\d+)\]\.channels\[(\d+)\]$', entity_path) + # Remove original baked image + remove_datablock(bpy.data.images, image) - bake_properties = {} - for attr in dir(bi): - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - try: bake_properties[attr] = getattr(bi, attr) - except: pass + return ia_image, segment - bake_properties.update({ - 'type': bi.bake_type, - 'target_type': 'LAYER' if m1 or m2 else 'MASK', - 'name': image.name, - 'width': image.size[0] if not segment else segment.width, - 'height': image.size[1] if not segment else segment.height, - 'uv_map': entity.uv_name - }) +def bake_entity_as_image(entity, bprops, set_image_to_entity=False): - bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) + rdict = {} + rdict['message'] = '' - print('REBAKE ALL IMAGES: Rebaking all images is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') - return {'FINISHED'} + yp = entity.id_data.yp + mat = get_active_material() + objs = [bpy.context.object] + if mat.users > 1: + objs, _ = get_bakeable_objects_and_meshes(mat) -def bake_as_image( - objs, mat, entity, name, width=1024, height=1024, hdr=False, - samples=1, margin=5, uv_name='', bake_device='CPU', - use_udim=False, tilenums=[1001], fxaa=True, blur=False, blur_factor=0.5, - denoise=False, disable_modifiers=True, margin_type='ADJACENT_FACES' - ): + if not objs: + rdict['message'] = "No valid objects found to bake!" + return rdict - yp = entity.id_data.yp + # Get tile numbers + tilenums = [1001] + if bprops.use_udim: + tilenums = UDIM.get_tile_numbers(objs, bprops.uv_map) m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) @@ -2222,6 +2213,7 @@ def bake_as_image( ori_use_baked = False ori_enabled_mods = [] #ori_enable_blur = False + modifiers_disabled = False if m1: layer = yp.layers[int(m1.group(1))] mask = None @@ -2234,24 +2226,26 @@ def bake_as_image( ori_use_baked = True mask.use_baked = False - # Disable modifiers - if disable_modifiers: + # Setting image to entity will disable modifiers + if set_image_to_entity: for mod in mask.modifiers: if mod.enable: ori_enabled_mods.append(mod) mod.enable = False + modifiers_disabled = True #ori_enable_blur = mask.enable_blur_vector #mask.enable_blur_vector = False else: - return None + rdict['message'] = "Wrong entity!" + return rdict # Remember things book = remember_before_bake(yp) # FXAA doesn't work with hdr image # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead - use_fxaa = not hdr and fxaa + use_fxaa = not bprops.hdr and bprops.fxaa # Preview setup ori_channel_index = yp.active_channel_index @@ -2293,9 +2287,9 @@ def bake_as_image( m.show_render = False prepare_bake_settings( - book, objs, yp, samples=samples, margin=margin, - uv_map=uv_name, bake_type='EMIT', bake_device=bake_device, - margin_type = margin_type + book, objs, yp, samples=bprops.samples, margin=bprops.margin, + uv_map=bprops.uv_map, bake_type='EMIT', bake_device=bprops.bake_device, + margin_type = bprops.margin_type ) # Create bake nodes @@ -2311,23 +2305,23 @@ def bake_as_image( colorspace = get_srgb_name() # Create image - if use_udim: + if bprops.use_udim: image = bpy.data.images.new( - name=name, width=width, height=height, - alpha=True, float_buffer=hdr, tiled=True + name=bprops.name, width=bprops.width, height=bprops.height, + alpha=True, float_buffer=bprops.hdr, tiled=True ) # Fill tiles for tilenum in tilenums: - UDIM.fill_tile(image, tilenum, color, width, height) + UDIM.fill_tile(image, tilenum, color, bprops.width, bprops.height) UDIM.initial_pack_udim(image, color) # Remember base color image.yia.color = color_str else: image = bpy.data.images.new( - name=name, width=width, height=height, - alpha=True, float_buffer=hdr + name=bprops.name, width=bprops.width, height=bprops.height, + alpha=True, float_buffer=bprops.hdr ) image.generated_color = color @@ -2340,12 +2334,12 @@ def bake_as_image( # Bake! bpy.ops.object.bake() - if blur: + if bprops.blur: samples = 4096 if is_bl_newer_than(3) else 128 - blur_image(image, False, bake_device=bake_device, factor=blur_factor, samples=samples) - if denoise: + blur_image(image, False, bake_device=bprops.bake_device, factor=bprops.blur_factor, samples=samples) + if bprops.denoise: denoise_image(image) - if use_fxaa: fxaa_image(image, False, bake_device=bake_device) + if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) # Remove temp bake nodes simple_remove_node(mat.node_tree, tex, remove_data=False) @@ -2374,7 +2368,7 @@ def bake_as_image( if yp.layer_preview_mode_type != ori_layer_preview_mode_type: yp.layer_preview_mode_type = ori_layer_preview_mode_type - if disable_modifiers: + if modifiers_disabled: for mod in ori_enabled_mods: mod.enable = True @@ -2384,7 +2378,101 @@ def bake_as_image( if mask and ori_use_baked: mask.use_baked = True - return image + # Set up image atlas segment + segment = None + if bprops.use_image_atlas: + image, segment = put_image_to_image_atlas(yp, image, tilenums) + + if set_image_to_entity: + + if mask: + yp.halt_update = True + + mask_tree = get_mask_tree(mask) + + baked_source = mask_tree.nodes.get(mask.baked_source) + if baked_source: + overwrite_image = baked_source.image + overwrite_image_name = overwrite_image.name + + # Remove old segment + if mask.baked_segment_name != '': + if overwrite_image.yia.is_image_atlas: + old_segment = overwrite_image.yia.segments.get(mask.baked_segment_name) + old_segment.unused = True + elif overwrite_image.yua.is_udim_atlas: + UDIM.remove_udim_atlas_segment_by_name(overwrite_image, mask.baked_segment_name, yp=yp) + + # Remove node first to also remove its data + remove_node(mask_tree, mask, 'baked_source') + + # Rename image if it's not image atlas + if mask.baked_segment_name == '' and overwrite_image_name == bprops.name: + image.name = bprops.name + + # Remove baked segment name since the data is removed + if mask.baked_segment_name != '': + entity.baked_segment_name = '' + + # Set bake info to image/segment + bi = segment.bake_info if segment else image.y_bake_info + + bi.is_baked = True + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: setattr(bi, attr, bprops[attr]) + except: pass + + # Create new node + baked_source = new_node(mask_tree, mask, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') + + # Set image to baked node + baked_source.image = image + + # Set mask props + mask.baked_uv_name = bprops.uv_map + mask.use_baked = True + + yp.halt_update = False + + else: + # TODO: Bake layer as image(s) + pass + + if m1 or m2: + + layer_tree = get_tree(layer) + + if segment: + # Set up baked mapping + mapping = check_new_node(layer_tree, entity, 'baked_mapping', 'ShaderNodeMapping', 'Baked Mapping') + clear_mapping(entity, use_baked=True) + ImageAtlas.set_segment_mapping(entity, segment, image, use_baked=True) + + # Set baked segment name to entity + entity.baked_segment_name = segment.name + else: + remove_node(layer_tree, entity, 'baked_mapping') + + # Refresh uv + refresh_temp_uv(bpy.context.object, entity) + + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(entity) + + # Update global uv + check_uv_nodes(yp) + + # Update layer tree inputs + check_all_layer_channel_io_and_nodes(layer) + check_start_end_root_ch_nodes(yp.id_data) + + rdict['image'] = image + rdict['segment'] = segment + + return rdict class YBakeEntityToImage(bpy.types.Operator, BaseBakeOperator): bl_idname = "wm.y_bake_entity_to_image" @@ -2660,45 +2748,6 @@ def draw(self, context): col.prop(self, 'use_image_atlas') - def get_image_atlas_segment(self, context): - yp = self.yp - - segment = None - - # Create new segment - if self.use_image_atlas: - - if self.use_udim: - segment = UDIM.get_set_udim_atlas_segment( - self.tilenums, color=(0, 0, 0, 1), colorspace=get_noncolor_name(), hdr=self.hdr, yp=yp - ) - else: - # Clearing unused image atlas segments - img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'BLACK', self.width, self.height, self.hdr) - if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) - - segment = ImageAtlas.get_set_image_atlas_segment( - self.width, self.height, 'BLACK', self.hdr, yp=yp - ) - - ia_image = segment.id_data - - # Set baked image to segment - if self.use_udim: - offset = get_udim_segment_mapping_offset(segment) * 10 - copy_dict = {} - for tilenum in self.tilenums: - copy_dict[tilenum] = tilenum + offset - UDIM.copy_tiles(self.image, ia_image, copy_dict) - else: copy_image_pixels(self.image, ia_image, segment) - temp_img = self.image - self.image = ia_image - - # Remove original baked image - remove_datablock(bpy.data.images, temp_img) - - return segment - def execute(self, context): if not self.is_cycles_exist(context): return {'CANCELLED'} @@ -2715,56 +2764,28 @@ def execute(self, context): return {'CANCELLED'} T = time.time() - mat = get_active_material() node = get_active_ypaint_node() self.yp = yp = node.node_tree.yp tree = node.node_tree layer_tree = get_tree(self.layer) - objs = [context.object] - meshes = [context.object.data] - - if mat.users > 1: - for ob in get_scene_objects(): - if ob.type != 'MESH': continue - if hasattr(ob, 'hide_viewport') and ob.hide_viewport: continue - if len(get_uv_layers(ob)) == 0: continue - if len(ob.data.polygons) == 0: continue - - # Do not bake objects with hide_render on - if ob.hide_render: continue - if not in_renderable_layer_collection(ob): continue - - for i, m in enumerate(ob.data.materials): - if m == mat: - ob.active_material_index = i - if ob not in objs and ob.data not in meshes: - objs.append(ob) - meshes.append(ob.data) - - if not objs: - self.report({'ERROR'}, "No valid objects found to bake!") - return {'CANCELLED'} - # Entity checking entity = self.mask if self.mask else self.layer - # Get tile numbers - self.tilenums = [1001] - if self.use_udim: - self.tilenums = UDIM.get_tile_numbers(objs, self.uv_map) - - self.image = bake_as_image( - objs, mat, entity, self.name, width=self.width, height=self.height, hdr=self.hdr, - samples=self.samples, margin=self.margin, uv_name=self.uv_map, bake_device=self.bake_device, - use_udim=self.use_udim, tilenums=self.tilenums, fxaa=self.fxaa, - blur=self.blur, blur_factor=self.blur_factor, denoise=self.denoise, - disable_modifiers=not self.duplicate_entity, margin_type=self.margin_type - ) + # Get bake properties + bprops = get_bake_properties_from_self(self) - # Get segment - segment = self.get_image_atlas_segment(context) + # Bake entity to image + rdict = bake_entity_as_image(entity, bprops, set_image_to_entity=not self.duplicate_entity) + + if rdict['message'] != '': + self.report({'ERROR'}, rdict['message']) + return {'CANCELLED'} + image = rdict['image'] + segment = rdict['segment'] + + # Duplicate entity if self.duplicate_entity: if self.mask: @@ -2774,10 +2795,10 @@ def execute(self, context): self.mask.enable = False # New entity name - new_entity_name = get_unique_name(self.name, self.entities) if self.use_image_atlas else self.image.name + new_entity_name = get_unique_name(self.name, self.entities) if self.use_image_atlas else image.name # Create new mask - mask = Mask.add_new_mask(self.layer, new_entity_name, 'IMAGE', 'UV', self.uv_map, self.image, None, segment) + mask = Mask.add_new_mask(self.layer, new_entity_name, 'IMAGE', 'UV', self.uv_map, image, None, segment) # Set mask properties mask.intensity_value = self.mask.intensity_value @@ -2792,7 +2813,7 @@ def execute(self, context): mask = self.layer.masks[self.index+1] if segment: - ImageAtlas.set_segment_mapping(mask, segment, self.image) + ImageAtlas.set_segment_mapping(mask, segment, image) mask.segment_name = segment.name # Refresh uv @@ -2807,88 +2828,6 @@ def execute(self, context): else: # TODO: Duplicate layer as image(s) pass - else: - if self.mask: - yp.halt_update = True - - mask = self.mask - mask_tree = get_mask_tree(mask) - - baked_source = mask_tree.nodes.get(mask.baked_source) - if baked_source: - overwrite_image = baked_source.image - overwrite_image_name = overwrite_image.name - - # Remove old segment - if mask.baked_segment_name != '': - if overwrite_image.yia.is_image_atlas: - old_segment = overwrite_image.yia.segments.get(mask.baked_segment_name) - old_segment.unused = True - elif overwrite_image.yua.is_udim_atlas: - UDIM.remove_udim_atlas_segment_by_name(overwrite_image, mask.baked_segment_name, yp=yp) - - # Remove node first to also remove its data - remove_node(mask_tree, mask, 'baked_source') - - # Rename image if it's not image atlas - if mask.baked_segment_name == '' and overwrite_image_name == self.name: - self.image.name = self.name - - # Remove baked segment name since the data is removed - if mask.baked_segment_name != '': - entity.baked_segment_name = '' - - # Set bake info to image/segment - bi = segment.bake_info if segment else self.image.y_bake_info - - bi.is_baked = True - for attr in dir(bi): - #if attr in dir(self): - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - try: setattr(bi, attr, getattr(self, attr)) - except: pass - - # Create new node - baked_source = new_node(mask_tree, mask, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') - - # Set image to baked node - baked_source.image = self.image - - # Set mask props - mask.baked_uv_name = self.uv_map - mask.use_baked = True - - yp.halt_update = False - - else: - # TODO: Bake layer as image(s) - pass - - if segment: - # Set up baked mapping - mapping = check_new_node(layer_tree, entity, 'baked_mapping', 'ShaderNodeMapping', 'Baked Mapping') - clear_mapping(entity, use_baked=True) - ImageAtlas.set_segment_mapping(entity, segment, self.image, use_baked=True) - - # Set baked segment name to entity - entity.baked_segment_name = segment.name - else: - remove_node(layer_tree, entity, 'baked_mapping') - - # Refresh uv - refresh_temp_uv(context.object, entity) - - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(entity) - - # Update global uv - check_uv_nodes(yp) - - # Update layer tree inputs - check_all_layer_channel_io_and_nodes(self.layer) - check_start_end_root_ch_nodes(node.node_tree) # Make current mask active if self.mask: @@ -2970,18 +2909,83 @@ def execute(self, context): return {'FINISHED'} +class YRebakeBakedImages(bpy.types.Operator, BaseBakeOperator): + bl_idname = "wm.y_rebake_baked_images" + bl_label = "Rebake All Baked Images" + bl_description = "Rebake all of the baked images in all layers" + bl_options = {'REGISTER'} + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() and context.object.type == 'MESH' + + def execute(self, context): + T = time.time() + node = get_active_ypaint_node() + yp = node.node_tree.yp + + entities, images, segment_names, _ = get_yp_entities_images_and_segments(yp) + + for i, image in enumerate(images): + + if image.yia.is_image_atlas: + segment = image.yia.segments.get(segment_names[i]) + elif image.yua.is_udim_atlas: + segment = image.yua.segments.get(segment_names[i]) + else: segment = None + + if ((segment and segment.bake_info.is_baked and not segment.bake_info.is_baked_channel) or + (not segment and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) + ): + + bi = image.y_bake_info if not segment else segment.bake_info + + # Skip outdated bake type + if bi.bake_type == 'SELECTED_VERTICES': + continue + + entity = entities[i][0] + entity_path = entity.path_from_id() + + m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity_path) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.channels\[(\d+)\]$', entity_path) + + bake_properties = dotdict() + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: bake_properties[attr] = getattr(bi, attr) + except: pass + + bake_properties.update({ + 'type': bi.bake_type, + 'target_type': 'LAYER' if m1 or m2 else 'MASK', + 'name': image.name, + 'width': image.size[0] if not segment else segment.width, + 'height': image.size[1] if not segment else segment.height, + 'uv_map': entity.uv_name if not entity.use_baked else entity.baked_uv_name + }) + + if not entity.use_baked: + bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) + else: bake_entity_as_image(entity, bprops=bake_properties, set_image_to_entity=True) + + print('REBAKE ALL IMAGES: Rebaking all images is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') + return {'FINISHED'} + def register(): bpy.utils.register_class(YBakeToLayer) bpy.utils.register_class(YBakeEntityToImage) - bpy.utils.register_class(YRebakeBakedImages) bpy.utils.register_class(YRemoveBakeInfoOtherObject) bpy.utils.register_class(YTryToSelectBakedVertexSelect) bpy.utils.register_class(YRemoveBakedEntity) + bpy.utils.register_class(YRebakeBakedImages) def unregister(): bpy.utils.unregister_class(YBakeToLayer) bpy.utils.unregister_class(YBakeEntityToImage) - bpy.utils.unregister_class(YRebakeBakedImages) bpy.utils.unregister_class(YRemoveBakeInfoOtherObject) bpy.utils.unregister_class(YTryToSelectBakedVertexSelect) bpy.utils.unregister_class(YRemoveBakedEntity) + bpy.utils.unregister_class(YRebakeBakedImages) diff --git a/common.py b/common.py index 14ff229f..a79181b3 100644 --- a/common.py +++ b/common.py @@ -595,6 +595,12 @@ def entity_input_items(self, context): valid_image_extensions = [".jpg",".gif",".png",".tga", ".jpeg", ".mp4", ".webp"] +class dotdict(dict): + """dot.notation access to dictionary attributes""" + __getattr__ = dict.get + __setattr__ = dict.__setitem__ + __delattr__ = dict.__delitem__ + def version_tuple(version_string): return tuple(map(int, version_string.split('.'))) if version_string != '' else (0, 0, 0) From 5920a4b45d8b17385f2f095ea6c182237a5b740f Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 2 Mar 2025 17:10:58 +0700 Subject: [PATCH 085/283] Partial implementation of bake layer to image, still hidden under developer mode --- BakeToLayer.py | 210 +++++++++++++++++++++++++------------------ Layer.py | 28 +++++- node_arrangements.py | 11 +++ node_connections.py | 69 ++++++++------ ui.py | 48 +++++++--- 5 files changed, 239 insertions(+), 127 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index e3e23d9a..ebff4dc3 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -2212,6 +2212,7 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): ori_use_baked = False ori_enabled_mods = [] + #ori_enable_blur = False modifiers_disabled = False if m1: @@ -2221,25 +2222,25 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): layer = yp.layers[int(m2.group(1))] mask = layer.masks[int(m2.group(2))] - # Disable use baked first - if mask.use_baked: - ori_use_baked = True - mask.use_baked = False - - # Setting image to entity will disable modifiers - if set_image_to_entity: - for mod in mask.modifiers: - if mod.enable: - ori_enabled_mods.append(mod) - mod.enable = False - modifiers_disabled = True - #ori_enable_blur = mask.enable_blur_vector - #mask.enable_blur_vector = False - else: rdict['message'] = "Wrong entity!" return rdict + # Disable use baked first + if entity.use_baked: + ori_use_baked = True + entity.use_baked = False + + # Setting image to entity will disable modifiers + if set_image_to_entity: + for mod in entity.modifiers: + if mod.enable: + ori_enabled_mods.append(mod) + mod.enable = False + modifiers_disabled = True + #ori_enable_blur = entity.enable_blur_vector + #entity.enable_blur_vector = False + # Remember things book = remember_before_bake(yp) @@ -2247,18 +2248,33 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead use_fxaa = not bprops.hdr and bprops.fxaa - # Preview setup + # Remember before doing preview ori_channel_index = yp.active_channel_index ori_preview_mode = yp.preview_mode ori_layer_preview_mode = yp.layer_preview_mode ori_layer_preview_mode_type = yp.layer_preview_mode_type + ori_layer_intensity_value = 1.0 + changed_layer_channel_index = -1 + ori_layer_channel_intensity_value = 1.0 + ori_layer_channel_blend_type = 'MIX' + + # Make sure layer is enabled layer.enable = True + layer_opacity = get_entity_prop_value(layer, 'intensity_value') + if layer_opacity != 1.0: + ori_layer_intensity_value = layer_opacity + set_entity_prop_value(layer, 'intensity_value', 1.0) + # Set up active edit if mask: mask.enable = True mask.active_edit = True + else: + for m in layer.masks: + if m.active_edit: m.active_edit = False + # Preview setup yp.layer_preview_mode_type = 'SPECIFIC_MASK' if mask else 'LAYER' yp.layer_preview_mode = True @@ -2271,6 +2287,19 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): else: if ch.enable: yp.active_channel_index = i + + # Make sure intensity value is 1.0 + intensity_value = get_entity_prop_value(ch, 'intensity_value') + if intensity_value != 1.0: + changed_layer_channel_index = i + ori_layer_channel_intensity_value = intensity_value + set_entity_prop_value(ch, 'intensity_value', 1.0) + + if ch.blend_type != 'MIX': + changed_layer_channel_index = i + ori_layer_channel_blend_type = ch.blend_type + ch.blend_type = 'MIX' + break # Modifier setups @@ -2368,6 +2397,18 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): if yp.layer_preview_mode_type != ori_layer_preview_mode_type: yp.layer_preview_mode_type = ori_layer_preview_mode_type + if changed_layer_channel_index != -1: + ch = layer.channels[changed_layer_channel_index] + + if ori_layer_channel_intensity_value != 1.0: + set_entity_prop_value(ch, 'intensity_value', ori_layer_channel_intensity_value) + + if ori_layer_channel_blend_type != 'MIX': + ch.blend_type = ori_layer_channel_blend_type + + if ori_layer_intensity_value != 1.0: + set_entity_prop_value(layer, 'intensity_value', ori_layer_intensity_value) + if modifiers_disabled: for mod in ori_enabled_mods: mod.enable = True @@ -2375,8 +2416,8 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): #if ori_enable_blur: # mask.enable_blur_vector = True - if mask and ori_use_baked: - mask.use_baked = True + if ori_use_baked: + entity.use_baked = True # Set up image atlas segment segment = None @@ -2385,89 +2426,82 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): if set_image_to_entity: - if mask: - yp.halt_update = True - - mask_tree = get_mask_tree(mask) - - baked_source = mask_tree.nodes.get(mask.baked_source) - if baked_source: - overwrite_image = baked_source.image - overwrite_image_name = overwrite_image.name - - # Remove old segment - if mask.baked_segment_name != '': - if overwrite_image.yia.is_image_atlas: - old_segment = overwrite_image.yia.segments.get(mask.baked_segment_name) - old_segment.unused = True - elif overwrite_image.yua.is_udim_atlas: - UDIM.remove_udim_atlas_segment_by_name(overwrite_image, mask.baked_segment_name, yp=yp) + layer_tree = get_tree(layer) + if mask: source_tree = get_mask_tree(mask) + else: source_tree = get_source_tree(layer) - # Remove node first to also remove its data - remove_node(mask_tree, mask, 'baked_source') + yp.halt_update = True - # Rename image if it's not image atlas - if mask.baked_segment_name == '' and overwrite_image_name == bprops.name: - image.name = bprops.name + baked_source = source_tree.nodes.get(entity.baked_source) + if baked_source: + overwrite_image = baked_source.image + overwrite_image_name = overwrite_image.name - # Remove baked segment name since the data is removed - if mask.baked_segment_name != '': - entity.baked_segment_name = '' + # Remove old segment + if entity.baked_segment_name != '': + if overwrite_image.yia.is_image_atlas: + old_segment = overwrite_image.yia.segments.get(entity.baked_segment_name) + old_segment.unused = True + elif overwrite_image.yua.is_udim_atlas: + UDIM.remove_udim_atlas_segment_by_name(overwrite_image, entity.baked_segment_name, yp=yp) - # Set bake info to image/segment - bi = segment.bake_info if segment else image.y_bake_info + # Remove node first to also remove its data + remove_node(source_tree, entity, 'baked_source') - bi.is_baked = True - for attr in dir(bi): - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - try: setattr(bi, attr, bprops[attr]) - except: pass + # Rename image if it's not image atlas + if entity.baked_segment_name == '' and overwrite_image_name == bprops.name: + image.name = bprops.name - # Create new node - baked_source = new_node(mask_tree, mask, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') + # Remove baked segment name since the data is removed + if entity.baked_segment_name != '': + entity.baked_segment_name = '' - # Set image to baked node - baked_source.image = image + # Set bake info to image/segment + bi = segment.bake_info if segment else image.y_bake_info - # Set mask props - mask.baked_uv_name = bprops.uv_map - mask.use_baked = True + bi.is_baked = True + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: setattr(bi, attr, bprops[attr]) + except: pass - yp.halt_update = False + # Create new node + baked_source = new_node(source_tree, entity, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') - else: - # TODO: Bake layer as image(s) - pass + # Set image to baked node + baked_source.image = image - if m1 or m2: + # Set entity props + entity.baked_uv_name = bprops.uv_map + entity.use_baked = True - layer_tree = get_tree(layer) + yp.halt_update = False - if segment: - # Set up baked mapping - mapping = check_new_node(layer_tree, entity, 'baked_mapping', 'ShaderNodeMapping', 'Baked Mapping') - clear_mapping(entity, use_baked=True) - ImageAtlas.set_segment_mapping(entity, segment, image, use_baked=True) + if segment: + # Set up baked mapping + mapping = check_new_node(layer_tree, entity, 'baked_mapping', 'ShaderNodeMapping', 'Baked Mapping') + clear_mapping(entity, use_baked=True) + ImageAtlas.set_segment_mapping(entity, segment, image, use_baked=True) - # Set baked segment name to entity - entity.baked_segment_name = segment.name - else: - remove_node(layer_tree, entity, 'baked_mapping') + # Set baked segment name to entity + entity.baked_segment_name = segment.name + else: + remove_node(layer_tree, entity, 'baked_mapping') - # Refresh uv - refresh_temp_uv(bpy.context.object, entity) + # Refresh uv + refresh_temp_uv(bpy.context.object, entity) - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(entity) + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(entity) - # Update global uv - check_uv_nodes(yp) + # Update global uv + check_uv_nodes(yp) - # Update layer tree inputs - check_all_layer_channel_io_and_nodes(layer) - check_start_end_root_ch_nodes(yp.id_data) + # Update layer tree inputs + check_all_layer_channel_io_and_nodes(layer) + check_start_end_root_ch_nodes(yp.id_data) rdict['image'] = image rdict['segment'] = segment @@ -2755,9 +2789,9 @@ def execute(self, context): self.report({'ERROR'}, "Invalid context!") return {'CANCELLED'} - if self.layer and not self.mask: - self.report({'ERROR'}, "This feature is not implemented yet!") - return {'CANCELLED'} + #if self.layer and not self.mask: + # self.report({'ERROR'}, "This feature is not implemented yet!") + # return {'CANCELLED'} if self.uv_map == '': self.report({'ERROR'}, "UV Map cannot be empty!") @@ -2829,9 +2863,11 @@ def execute(self, context): # TODO: Duplicate layer as image(s) pass - # Make current mask active + # Make current entity active to update image if self.mask: self.mask.active_edit = True + elif get_layer_index(self.layer) == yp.active_layer_index: + yp.active_layer_index = yp.active_layer_index reconnect_layer_nodes(self.layer) rearrange_layer_nodes(self.layer) diff --git a/Layer.py b/Layer.py index a01c508e..2c4bbb5e 100644 --- a/Layer.py +++ b/Layer.py @@ -6518,6 +6518,31 @@ def update_layer_uniform_scale_enabled(self, context): reconnect_layer_nodes(layer) rearrange_layer_nodes(layer) +def update_layer_use_baked(self, context): + yp = self.id_data.yp + if yp.halt_update: return + + layer = self + yp = self.id_data.yp + tree = get_tree(layer) + + # Update global uv + check_uv_nodes(yp) + + # Update layer tree inputs + check_all_layer_channel_io_and_nodes(layer) + check_start_end_root_ch_nodes(self.id_data) + + # Refresh active image by setting active layer + if get_layer_index(layer) == yp.active_layer_index: + yp.active_layer_index = yp.active_layer_index + + reconnect_layer_nodes(layer) + rearrange_layer_nodes(layer) + + reconnect_yp_nodes(self.id_data) + rearrange_yp_nodes(self.id_data) + class YLayer(bpy.types.PropertyGroup): name : StringProperty( name = 'Layer Name', @@ -6728,7 +6753,8 @@ class YLayer(bpy.types.PropertyGroup): use_baked : BoolProperty( name = 'Use Baked', description = 'Use baked layer image', - default = False + default = False, + update = update_layer_use_baked ) # Sources diff --git a/node_arrangements.py b/node_arrangements.py index 31c55379..77b51e1e 100644 --- a/node_arrangements.py +++ b/node_arrangements.py @@ -472,6 +472,7 @@ def rearrange_source_tree_nodes(layer): #loc.y += 390 loc.y = 0 + bookmark_x = loc.x #if check_set_node_loc(source_tree, layer.mapping, loc): # loc.x += 380 @@ -479,6 +480,13 @@ def rearrange_source_tree_nodes(layer): if check_set_node_loc(source_tree, layer.source, loc): loc.x += 280 + if layer.baked_source != '': + loc.x = bookmark_x + loy.y -= 320 + check_set_node_loc(source_tree, layer.baked_source, loc) + loc.x += 280 + loc.y = 0 + if check_set_node_loc(source_tree, layer.divider_alpha, loc): loc.x += 200 @@ -863,6 +871,9 @@ def rearrange_layer_nodes(layer, tree=None): else: loc.y -= 320 + if check_set_node_loc(tree, layer.baked_source, loc, hide=False): + loc.y -= 320 + if check_set_node_loc(tree, layer.source_n, loc, hide=True): loc.y -= 40 diff --git a/node_connections.py b/node_connections.py index 95152579..23752b7a 100644 --- a/node_connections.py +++ b/node_connections.py @@ -1748,6 +1748,10 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): reconnect_source_internal_nodes(layer) else: source = nodes.get(layer.source) + baked_source = None + if layer.use_baked: + baked_source = nodes.get(layer.baked_source) + # Direction sources source_n = nodes.get(layer.source_n) source_s = nodes.get(layer.source_s) @@ -1818,9 +1822,15 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): # Find override channels #using_vector = is_channel_override_using_vector(layer) + baked_vector = None + if layer.use_baked: + baked_vector = get_essential_node(tree, TREE_START).get(layer.baked_uv_name + io_suffix['UV']) + + if baked_vector and baked_source: + create_link(tree, baked_vector, baked_source.inputs[0]) + # Texcoord vector = None - #if layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX'} or using_vector: if is_layer_using_vector(layer): if layer.texcoord_type == 'UV': vector = get_essential_node(tree, TREE_START).get(layer.uv_name + io_suffix['UV']) @@ -1851,38 +1861,43 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): else: break_link(tree, uniform_scale_value, mapping.inputs[3]) - if vector and layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX'}: - create_link(tree, vector, source.inputs[0]) + if vector: + if 'Vector' in source.inputs: + create_link(tree, vector, source.inputs['Vector']) - if uv_neighbor: - create_link(tree, vector, uv_neighbor.inputs[0]) + if layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX'}: - if tangent and 'Tangent' in uv_neighbor.inputs: - create_link(tree, tangent, uv_neighbor.inputs['Tangent']) - create_link(tree, bitangent, uv_neighbor.inputs['Bitangent']) + if uv_neighbor: + create_link(tree, vector, uv_neighbor.inputs[0]) - if layer_tangent: - if 'Entity Tangent' in uv_neighbor.inputs: - create_link(tree, layer_tangent, uv_neighbor.inputs['Entity Tangent']) - create_link(tree, layer_bitangent, uv_neighbor.inputs['Entity Bitangent']) + if tangent and 'Tangent' in uv_neighbor.inputs: + create_link(tree, tangent, uv_neighbor.inputs['Tangent']) + create_link(tree, bitangent, uv_neighbor.inputs['Bitangent']) + + if layer_tangent: + if 'Entity Tangent' in uv_neighbor.inputs: + create_link(tree, layer_tangent, uv_neighbor.inputs['Entity Tangent']) + create_link(tree, layer_bitangent, uv_neighbor.inputs['Entity Bitangent']) - if 'Mask Tangent' in uv_neighbor.inputs: - create_link(tree, layer_tangent, uv_neighbor.inputs['Mask Tangent']) - create_link(tree, layer_bitangent, uv_neighbor.inputs['Mask Bitangent']) + if 'Mask Tangent' in uv_neighbor.inputs: + create_link(tree, layer_tangent, uv_neighbor.inputs['Mask Tangent']) + create_link(tree, layer_bitangent, uv_neighbor.inputs['Mask Bitangent']) - #if 'Tangent' in uv_neighbor.inputs: - # create_link(tree, tangent, uv_neighbor.inputs['Tangent']) - #if 'Bitangent' in uv_neighbor.inputs: - # create_link(tree, bitangent, uv_neighbor.inputs['Bitangent']) + #if 'Tangent' in uv_neighbor.inputs: + # create_link(tree, tangent, uv_neighbor.inputs['Tangent']) + #if 'Bitangent' in uv_neighbor.inputs: + # create_link(tree, bitangent, uv_neighbor.inputs['Bitangent']) - if source_n: create_link(tree, uv_neighbor.outputs['n'], source_n.inputs[0]) - if source_s: create_link(tree, uv_neighbor.outputs['s'], source_s.inputs[0]) - if source_e: create_link(tree, uv_neighbor.outputs['e'], source_e.inputs[0]) - if source_w: create_link(tree, uv_neighbor.outputs['w'], source_w.inputs[0]) + if source_n: create_link(tree, uv_neighbor.outputs['n'], source_n.inputs[0]) + if source_s: create_link(tree, uv_neighbor.outputs['s'], source_s.inputs[0]) + if source_e: create_link(tree, uv_neighbor.outputs['e'], source_e.inputs[0]) + if source_w: create_link(tree, uv_neighbor.outputs['w'], source_w.inputs[0]) # RGB - if is_bl_newer_than(2, 81) and layer.type == 'VORONOI' and layer.voronoi_feature == 'N_SPHERE_RADIUS' and 'Radius' in source.outputs: + if baked_source: + start_rgb = baked_source.outputs[0] + elif is_bl_newer_than(2, 81) and layer.type == 'VORONOI' and layer.voronoi_feature == 'N_SPHERE_RADIUS' and 'Radius' in source.outputs: start_rgb = source.outputs['Radius'] else: start_rgb = source.outputs[0] @@ -1891,7 +1906,9 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): start_rgb_1 = source.outputs[1] # Alpha - if layer.type == 'IMAGE' or source_group: + if baked_source: + start_alpha = baked_source.outputs[1] + elif layer.type == 'IMAGE' or source_group: start_alpha = source.outputs[1] elif layer.type == 'VCOL' and 'Alpha' in source.outputs: start_alpha = source.outputs['Alpha'] @@ -2359,7 +2376,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): # Get source output index source_index = 0 - if layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'}: + if not layer.use_baked and layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'}: # Noise and voronoi output has flipped order since Blender 2.81 if is_bl_newer_than(2, 81) and (layer.type == 'NOISE' or (layer.type == 'VORONOI' and layer.voronoi_feature not in {'DISTANCE_TO_EDGE', 'N_SPHERE_RADIUS'})): if ch.layer_input == 'RGB': diff --git a/ui.py b/ui.py index e40cc17f..d8215655 100644 --- a/ui.py +++ b/ui.py @@ -1552,26 +1552,36 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i #bbox = row.box() rrcol = row.column() + ccol = rrcol.column() + ccol.active = not layer.use_baked + if layer.use_temp_bake: - rrcol.context_pointer_set('parent', layer) - rrcol.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') + ccol.context_pointer_set('parent', layer) + ccol.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') elif image: - draw_image_props(context, source, rrcol, layer, show_flip_y=True, show_datablock=False) + draw_image_props(context, source, ccol, layer, show_flip_y=True, show_datablock=False) # NOTE: Divide rgb by alpha is mostly useless for image layer, # so it's hidden under experimental feature unless the user ever enabled it before if hasattr(layer, 'divide_rgb_by_alpha') and (layer.divide_rgb_by_alpha or ypup.show_experimental): - rrrow = rrcol.row(align=True) + rrrow = ccol.row(align=True) rrrow.label(text='Divide RGB by Alpha:') rrrow.prop(layer, 'divide_rgb_by_alpha', text='') elif layer.type == 'COLOR': - draw_solid_color_props(layer, source, rrcol) + draw_solid_color_props(layer, source, ccol) elif layer.type == 'VCOL': - draw_vcol_props(rrcol, vcol, layer) + draw_vcol_props(ccol, vcol, layer) elif layer.type == 'HEMI': - draw_hemi_props(layer, source, rrcol) - else: draw_tex_props(source, rrcol, entity=layer) + draw_hemi_props(layer, source, ccol) + else: draw_tex_props(source, ccol, entity=layer) + + if layer.baked_source != '': + rrcol.context_pointer_set('entity', layer) + rrcol.context_pointer_set('layer', layer) + rrrow = rrcol.row(align=True) + rrrow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) + rrrow.prop(layer, 'use_baked', text='Use Baked', toggle=True) layout.separator() @@ -1585,7 +1595,11 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i # Vector if is_layer_using_vector(layer): - row = layout.row(align=False) + + col = layout.column() + col.active = not layer.use_baked + + row = col.row(align=False) icon_value = lib.get_icon('uv') rrow = row.row(align=True) @@ -1628,7 +1642,7 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i # rrow.menu("NODE_MT_y_uv_special_menu", icon=icon, text='') if lui.expand_vector: - row = layout.row(align=True) + row = col.row(align=True) row.label(text='', icon='BLANK1') bbox = row.box() boxcol = bbox.column() @@ -6341,9 +6355,8 @@ def draw(self, context): col.context_pointer_set('entity', mask) col.operator('wm.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake as Image') if mask.baked_source != '': - if is_bl_newer_than(2, 80): - col.operator('wm.y_remove_baked_entity', text='Remove Baked Image', icon='REMOVE') - else: col.operator('wm.y_remove_baked_entity', text='Remove Baked Image', icon='ZOOMOUT') + icon = 'REMOVE' if is_bl_newer_than(2, 80) else 'ZOOMOUT' + col.operator('wm.y_remove_baked_entity', text='Remove Baked Image', icon=icon) col.separator() @@ -6943,6 +6956,15 @@ def draw(self, context): else: col.operator('wm.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) + #col.separator() + col.context_pointer_set('entity', context.parent) + col.context_pointer_set('layer', context.parent) + col.operator('wm.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake Layer as Image') + + if context.parent.baked_source != '': + icon = 'REMOVE' if is_bl_newer_than(2, 80) else 'ZOOMOUT' + col.operator('wm.y_remove_baked_entity', text='Remove Baked Layer Image', icon=icon) + #col = row.column() #col.label(text='Options:') #col.prop(ypui, 'disable_auto_temp_uv_update') From f40b97b4c8b1c9a21d7cde932bc1ce7739e85d5d Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 2 Mar 2025 17:43:34 +0700 Subject: [PATCH 086/283] Add remove icon beside entity `Use Baked` icon and make edge detect mask has large button by default to bake it to image --- common.py | 4 ++-- ui.py | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/common.py b/common.py index a79181b3..d35e3519 100644 --- a/common.py +++ b/common.py @@ -5621,8 +5621,8 @@ def get_all_baked_channel_images(tree): return images -def is_layer_using_vector(layer): - if layer.use_baked or layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'BACKFACE'}: +def is_layer_using_vector(layer, exclude_baked=False): + if (not exclude_baked and layer.use_baked) or layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'BACKFACE'}: return True for ch in layer.channels: diff --git a/ui.py b/ui.py index d8215655..3985b697 100644 --- a/ui.py +++ b/ui.py @@ -1583,6 +1583,9 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i rrrow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) rrrow.prop(layer, 'use_baked', text='Use Baked', toggle=True) + icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' + rrrow.operator("wm.y_remove_baked_entity", text='', icon='TRASH') + layout.separator() def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, is_a_mesh): @@ -1594,7 +1597,7 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i scene = context.scene # Vector - if is_layer_using_vector(layer): + if is_layer_using_vector(layer, exclude_baked=True): col = layout.column() col.active = not layer.use_baked @@ -2892,12 +2895,19 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): draw_vcol_props(rbcol, entity=mask, show_divide_rgb_alpha=False, show_source_input=True) else: draw_tex_props(mask_source, rbcol, entity=mask, show_source_input=True) - if mask.baked_source != '': - rrcol.context_pointer_set('entity', mask) + rrcol.context_pointer_set('entity', mask) + if mask.baked_source == '' and mask.type in {'EDGE_DETECT'}: + rrrow = rrcol.row(align=True) + rrrow.label(text='', icon='BLANK1') + rrrow.operator("wm.y_bake_entity_to_image", text='Bake '+mask_type_labels[mask.type]+' to Image', icon_value=lib.get_icon('bake')) + + elif mask.baked_source != '': rrrow = rrcol.row(align=True) rrrow.label(text='', icon='BLANK1') rrrow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) rrrow.prop(mask, 'use_baked', text='Use Baked', toggle=True) + icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' + rrrow.operator("wm.y_remove_baked_entity", text='', icon='TRASH') if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: rrcol.separator() @@ -6354,9 +6364,6 @@ def draw(self, context): col.context_pointer_set('entity', mask) col.operator('wm.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake as Image') - if mask.baked_source != '': - icon = 'REMOVE' if is_bl_newer_than(2, 80) else 'ZOOMOUT' - col.operator('wm.y_remove_baked_entity', text='Remove Baked Image', icon=icon) col.separator() @@ -6961,10 +6968,6 @@ def draw(self, context): col.context_pointer_set('layer', context.parent) col.operator('wm.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake Layer as Image') - if context.parent.baked_source != '': - icon = 'REMOVE' if is_bl_newer_than(2, 80) else 'ZOOMOUT' - col.operator('wm.y_remove_baked_entity', text='Remove Baked Layer Image', icon=icon) - #col = row.column() #col.label(text='Options:') #col.prop(ypui, 'disable_auto_temp_uv_update') From 7a3cad4e55cb9a0ba3286277785dd366f36d3c29 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 2 Mar 2025 19:21:49 +0700 Subject: [PATCH 087/283] Make sure use bake info and set intorpolation to cubic if normal channel is used --- BakeToLayer.py | 40 ++++++++++++++++++++++------------------ common.py | 8 ++++---- ui.py | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index ebff4dc3..d8399319 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -2473,6 +2473,10 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): # Set image to baked node baked_source.image = image + height_ch = get_height_channel(layer) + if height_ch and height_ch.enable: + baked_source.interpolation = 'Cubic' + # Set entity props entity.baked_uv_name = bprops.uv_map entity.use_baked = True @@ -2609,25 +2613,22 @@ def invoke(self, context, event): else: return self.execute(context) + if self.mask: source_tree = get_mask_tree(self.mask) + else: source_tree = get_source_tree(self.layer) + baked_source = source_tree.nodes.get(self.entity.baked_source) + overwrite_image = None - if self.mask: - mask_tree = get_mask_tree(self.mask) - baked_source = mask_tree.nodes.get(self.mask.baked_source) - if baked_source and baked_source.image: - overwrite_image = baked_source.image + if baked_source and baked_source.image: + overwrite_image = baked_source.image - if overwrite_image: - self.name = overwrite_image.name - else: - self.name = self.mask.name - if not self.name.endswith(' Image'): - self.name += ' Image' - self.name = get_unique_name(self.name, self.layer.masks) + if overwrite_image and not overwrite_image.yia.is_image_atlas and not overwrite_image.yua.is_udim_atlas: + self.name = overwrite_image.name else: - self.name = self.layer.name + self.name = self.entity.name if not self.name.endswith(' Image'): self.name += ' Image' - self.name = get_unique_name(self.name, yp.layers) + + self.name = get_unique_name(self.name, bpy.data.images) # Use active uv layer name by default uv_layers = get_uv_layers(obj) @@ -2678,16 +2679,19 @@ def invoke(self, context, event): if len(self.uv_map_coll) > 0: self.uv_map = self.uv_map_coll[0].name + if self.entity.type in {'EDGE_DETECT', 'HEMI'}: + self.hdr = True + self.fxaa = False + else: + self.hdr = False + self.fxaa = True + # Auto set some props for some types if self.entity.type == 'EDGE_DETECT': self.samples = 32 - self.hdr = True - self.fxaa = False self.denoise = True else: self.samples = 1 - self.hdr = False - self.fxaa = True self.denoise = False if get_user_preferences().skip_property_popups and not event.shift: diff --git a/common.py b/common.py index d35e3519..85dac855 100644 --- a/common.py +++ b/common.py @@ -4397,10 +4397,10 @@ def update_layer_images_interpolation(layer, interpolation='Linear', from_interp if from_interpolation == '' or source.interpolation == from_interpolation: source.interpolation = interpolation - baked_source = get_layer_source(layer, get_baked=True) - if baked_source and baked_source.image: - if from_interpolation == '' or baked_source.interpolation == from_interpolation: - baked_source.interpolation = interpolation + baked_source = get_layer_source(layer, get_baked=True) + if baked_source and baked_source.image: + if from_interpolation == '' or baked_source.interpolation == from_interpolation: + baked_source.interpolation = interpolation height_ch = get_height_channel(layer) if height_ch: diff --git a/ui.py b/ui.py index 3985b697..3a041583 100644 --- a/ui.py +++ b/ui.py @@ -2899,7 +2899,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): if mask.baked_source == '' and mask.type in {'EDGE_DETECT'}: rrrow = rrcol.row(align=True) rrrow.label(text='', icon='BLANK1') - rrrow.operator("wm.y_bake_entity_to_image", text='Bake '+mask_type_labels[mask.type]+' to Image', icon_value=lib.get_icon('bake')) + rrrow.operator("wm.y_bake_entity_to_image", text='Bake '+mask_type_labels[mask.type]+' as Image', icon_value=lib.get_icon('bake')) elif mask.baked_source != '': rrrow = rrcol.row(align=True) From c2341b3027238084dc56e8440c553d5270ab66c5 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 2 Mar 2025 19:32:47 +0700 Subject: [PATCH 088/283] Disable masks when baking layer to image --- BakeToLayer.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index d8399319..724a6809 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -2258,6 +2258,7 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): changed_layer_channel_index = -1 ori_layer_channel_intensity_value = 1.0 ori_layer_channel_blend_type = 'MIX' + ori_layer_enable_masks = None # Make sure layer is enabled layer.enable = True @@ -2266,11 +2267,15 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): ori_layer_intensity_value = layer_opacity set_entity_prop_value(layer, 'intensity_value', 1.0) - # Set up active edit if mask: + # Set up active edit mask.enable = True mask.active_edit = True else: + # Disable masks + ori_layer_enable_masks = layer.enable_masks + if layer.enable_masks: + layer.enable_masks = False for m in layer.masks: if m.active_edit: m.active_edit = False @@ -2409,6 +2414,9 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): if ori_layer_intensity_value != 1.0: set_entity_prop_value(layer, 'intensity_value', ori_layer_intensity_value) + if ori_layer_enable_masks != None and layer.enable_masks != ori_layer_enable_masks: + layer.enable_masks = ori_layer_enable_masks + if modifiers_disabled: for mod in ori_enabled_mods: mod.enable = True From a2bdfe7792683c852a1d6b2d627c2c318a944941 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 2 Mar 2025 19:37:59 +0700 Subject: [PATCH 089/283] Wrong icon is assigned to old blenders --- ui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui.py b/ui.py index 3a041583..b38094c7 100644 --- a/ui.py +++ b/ui.py @@ -1584,7 +1584,7 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i rrrow.prop(layer, 'use_baked', text='Use Baked', toggle=True) icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' - rrrow.operator("wm.y_remove_baked_entity", text='', icon='TRASH') + rrrow.operator("wm.y_remove_baked_entity", text='', icon=icon) layout.separator() @@ -2907,7 +2907,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rrrow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) rrrow.prop(mask, 'use_baked', text='Use Baked', toggle=True) icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' - rrrow.operator("wm.y_remove_baked_entity", text='', icon='TRASH') + rrrow.operator("wm.y_remove_baked_entity", text='', icon=icon) if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: rrcol.separator() From 244d4e1edb81690837f39745ca6ebba67a6fd434 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 2 Mar 2025 19:46:22 +0700 Subject: [PATCH 090/283] Disable channel override when baking layer to image --- BakeToLayer.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/BakeToLayer.py b/BakeToLayer.py index 724a6809..1f89d001 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -2258,6 +2258,7 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): changed_layer_channel_index = -1 ori_layer_channel_intensity_value = 1.0 ori_layer_channel_blend_type = 'MIX' + ori_layer_channel_override = None ori_layer_enable_masks = None # Make sure layer is enabled @@ -2305,6 +2306,11 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): ori_layer_channel_blend_type = ch.blend_type ch.blend_type = 'MIX' + if ch.override: + changed_layer_channel_index = i + ori_layer_channel_override = True + ch.override = False + break # Modifier setups @@ -2411,6 +2417,9 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): if ori_layer_channel_blend_type != 'MIX': ch.blend_type = ori_layer_channel_blend_type + if ori_layer_channel_override != None and ch.override != ori_layer_channel_override: + ch.override = ori_layer_channel_override + if ori_layer_intensity_value != 1.0: set_entity_prop_value(layer, 'intensity_value', ori_layer_intensity_value) From b077aabb7b448f441e78a147a1eb26a51e44b07d Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 4 Mar 2025 14:07:53 +0700 Subject: [PATCH 091/283] Add wip operator to remove smooth bump, currently only accessible on developer mode --- ui.py | 10 ++++++++ versioning.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/ui.py b/ui.py index b38094c7..b9b2e6d2 100644 --- a/ui.py +++ b/ui.py @@ -3827,6 +3827,7 @@ def main_draw(self, context): scene = context.scene obj = context.object mat = obj.active_material + ypup = get_user_preferences() #slot = context.material_slot #space = context.space_data @@ -3995,6 +3996,15 @@ def main_draw(self, context): col.operator("wm.y_update_yp_trees", text='Update node to version ' + get_current_version_str(), icon='ERROR') return + if ypup.developer_mode: + height_root_ch = get_root_height_channel(yp) + if height_root_ch and height_root_ch.enable_smooth_bump: + col = layout.column() + col.alert = True + col.label(text='Smooth(er) bump is no longer supported!', icon='ERROR') + col.operator("wm.y_update_remove_smooth_bump", text='Remove Smooth Bump') + #return + #layout.label(text='Active: ' + node.node_tree.name, icon_value=lib.get_icon('nodetree')) row = layout.row(align=True) row.label(text='', icon_value=lib.get_icon('nodetree')) diff --git a/versioning.py b/versioning.py index 54f20802..49526937 100644 --- a/versioning.py +++ b/versioning.py @@ -236,7 +236,7 @@ def update_yp_tree(tree): reconnect_layer_nodes(layer) rearrange_layer_nodes(layer) - # Version 0.9.4 and above will replace multipier modifier with math modifier + # Version 0.9.4 and above will replace multiplier modifier with math modifier if version_tuple(yp.version) < (0, 9, 4): mods = [] @@ -1363,14 +1363,75 @@ def execute(self, context): update_routine('') return {'FINISHED'} +class YUpdateRemoveSmoothBump(bpy.types.Operator): + bl_idname = "wm.y_update_remove_smooth_bump" + bl_label = "Remove Smooth Bump" + bl_description = "Smooth(er) bump is no longer supported, remove it to continue" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() + + def execute(self, context): + #update_node_tree_libs('') + #update_routine('') + + for ng in bpy.data.node_groups: + if not hasattr(ng, 'yp'): continue + if not ng.yp.is_ypaint_node: continue + + yp = ng.yp + + height_root_ch = get_root_height_channel(yp) + if height_root_ch and height_root_ch.enable_smooth_bump: + + # Get object dimension and volume + dimension = None + volume = None + mats = get_materials_using_yp(yp) + mat = mats[0] if len(mats) > 0 else None + if mat: + objs = get_all_objects_with_same_materials(mat) + if objs: + dimensions = 0 + volumes = 0 + for obj in objs: + volumes += (obj.dimensions.x + obj.dimensions.y + obj.dimensions.z) / 3 + dimensions += obj.dimensions.x * obj.dimensions.y * obj.dimensions.z + dimension = dimensions / len(objs) + volume = volumes / len(objs) + + for layer in yp.layers: + height_ch = get_height_channel(layer) + if height_ch and dimension != None and volume != None: + + # NOTE: Smooth bump is originally tested on default cube, which has volume of 8 blender units and dimension of 2 + if layer.type == 'IMAGE': + multiplier = dimension / 2 + else: + multiplier = volume / 8 + + height = get_entity_prop_value(height_ch, 'bump_distance') + set_entity_prop_value(height_ch, 'bump_distance', height * multiplier) + height = get_entity_prop_value(height_ch, 'transition_bump_distance') + set_entity_prop_value(height_ch, 'transition_bump_distance', height * multiplier) + + height_root_ch.enable_smooth_bump = False + print("INFO: Smooth bump on "+ng.name+" is now disabled!") + + return {'FINISHED'} + def register(): bpy.utils.register_class(YUpdateYPTrees) + bpy.utils.register_class(YUpdateRemoveSmoothBump) bpy.app.handlers.load_post.append(update_node_tree_libs) bpy.app.handlers.load_post.append(update_routine) def unregister(): bpy.utils.unregister_class(YUpdateYPTrees) + bpy.utils.unregister_class(YUpdateRemoveSmoothBump) bpy.app.handlers.load_post.remove(update_node_tree_libs) bpy.app.handlers.load_post.remove(update_routine) From 4e6f4ff0c72a915188ac4657bd42df979b5487b1 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 4 Mar 2025 17:11:46 +0700 Subject: [PATCH 092/283] Smooth bump is now entirely under experimental feature even on legacy blenders. Also adding more workarounds around removing smooth bump for older files. --- Bake.py | 2 +- Root.py | 5 +++-- ui.py | 2 +- versioning.py | 62 ++++++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/Bake.py b/Bake.py index 448cbb37..77cc250c 100644 --- a/Bake.py +++ b/Bake.py @@ -3515,7 +3515,7 @@ def check_displacement_node(mat, node, set_one=False, unset_one=False, set_outsi if set_one: # Create links - if vdisp: create_link(mat.node_tree, vdisp_outp, vdisp.inputs['Vector']) + if vdisp and vdisp_outp: create_link(mat.node_tree, vdisp_outp, vdisp.inputs['Vector']) if disp: create_link(mat.node_tree, height_outp, disp.inputs['Height']) create_link(mat.node_tree, max_height_outp, disp.inputs['Scale']) diff --git a/Root.py b/Root.py index 732fb8a1..cb1f46b4 100644 --- a/Root.py +++ b/Root.py @@ -165,8 +165,9 @@ def create_new_yp_channel(group_tree, name, channel_type, non_color=True, enable channel.colorspace = 'LINEAR' else: channel.colorspace = 'SRGB' else: - # NOTE: Smooth bump is no longer enabled by default in Blender 2.80+ - if is_bl_newer_than(2, 80): channel.enable_smooth_bump = False + # NOTE: Smooth bump is no longer enabled by default at all + #if is_bl_newer_than(2, 80): + channel.enable_smooth_bump = False yp.halt_reconnect = False diff --git a/ui.py b/ui.py index b9b2e6d2..8d510886 100644 --- a/ui.py +++ b/ui.py @@ -1189,7 +1189,7 @@ def draw_root_channels_ui(context, layout, node): # brow.label(text='', icon='BLANK1') if channel.type == 'NORMAL': - if ypup.show_experimental or channel.enable_smooth_bump or not is_bl_newer_than(2, 80): + if ypup.show_experimental or channel.enable_smooth_bump: # or not is_bl_newer_than(2, 80): brow = bcol.row(align=True) if is_bl_newer_than(2, 80): diff --git a/versioning.py b/versioning.py index 49526937..1c8d45c1 100644 --- a/versioning.py +++ b/versioning.py @@ -204,9 +204,18 @@ def update_yp_tree(tree): for i, ch in enumerate(layer.channels): root_ch = yp.channels[i] mod_ids = [] + multp_ids = [] for j, mod in enumerate(ch.modifiers): if mod.type == 'OVERRIDE_COLOR': mod_ids.append(j) + elif mod.type == 'MULTIPLIER': + multp_ids.append(j) + + # HACK: Disable multiply modifiers if override color is found because some old blend file has wrong color + if mod_ids and multp_ids: + for j in multp_ids: + mod = ch.modifiers[j] + mod.enable = False for j in reversed(mod_ids): mod = ch.modifiers[j] @@ -274,6 +283,20 @@ def update_yp_tree(tree): mtree = get_mod_tree(parent) + # Get original values + r_val = mod.multiplier_r_val + g_val = mod.multiplier_g_val + b_val = mod.multiplier_b_val + a_val = mod.multiplier_a_val + use_clamp = mod.use_clamp + multp = mtree.nodes.get(mod.multiplier) + if multp: + if 'Clamp' in multp.inputs: use_clamp = multp.inputs['Clamp'].default_value > 0.5 + if 'Multiply R' in multp.inputs: r_val = multp.inputs['Multiply R'].default_value + if 'Multiply G' in multp.inputs: g_val = multp.inputs['Multiply G'].default_value + if 'Multiply B' in multp.inputs: b_val = multp.inputs['Multiply B'].default_value + if 'Multiply A' in multp.inputs: a_val = multp.inputs['Multiply A'].default_value + mod.name = 'Math' mod.type = 'MATH' remove_node(mtree, mod, 'multiplier') @@ -289,15 +312,19 @@ def update_yp_tree(tree): mod.affect_alpha = True math.node_tree.nodes.get('Mix.A').mute = False - mod.math_a_val = mod.multiplier_a_val - mod.math_r_val = mod.multiplier_r_val - math.node_tree.nodes.get('Math.R').use_clamp = mod.use_clamp - math.node_tree.nodes.get('Math.A').use_clamp = mod.use_clamp + mod.math_r_val = math.inputs[2].default_value = r_val + + math.node_tree.nodes.get('Math.R').use_clamp = use_clamp + math.node_tree.nodes.get('Math.A').use_clamp = use_clamp if ch_type != 'VALUE': - mod.math_g_val = mod.multiplier_g_val - mod.math_b_val = mod.multiplier_b_val - math.node_tree.nodes.get('Math.G').use_clamp = mod.use_clamp - math.node_tree.nodes.get('Math.B').use_clamp = mod.use_clamp + mod.math_g_val = math.inputs[3].default_value = g_val + mod.math_b_val = math.inputs[4].default_value = b_val + mod.math_a_val = math.inputs[5].default_value = a_val + + math.node_tree.nodes.get('Math.G').use_clamp = use_clamp + math.node_tree.nodes.get('Math.B').use_clamp = use_clamp + else: + mod.math_a_val = math.inputs[3].default_value = a_val if mods: for layer in yp.layers: @@ -1401,15 +1428,30 @@ def execute(self, context): dimensions += obj.dimensions.x * obj.dimensions.y * obj.dimensions.z dimension = dimensions / len(objs) volume = volumes / len(objs) + + # Check if material use subsurface scattering + sss_enabled = False + outp = get_material_output(mat) + bsdf = get_closest_bsdf_backward(outp, ['BSDF_PRINCIPLED']) + if bsdf: + inp = bsdf.inputs.get('Subsurface Weight') if is_bl_newer_than(4) else bsdf.inputs.get('Subsurface') + if inp and (inp.default_value > 0.0 or len(inp.links) > 0): + sss_enabled = True for layer in yp.layers: height_ch = get_height_channel(layer) if height_ch and dimension != None and volume != None: # NOTE: Smooth bump is originally tested on default cube, which has volume of 8 blender units and dimension of 2 - if layer.type == 'IMAGE': + # These values are fine tuned to closer results based on old models + multiplier = 1 + if layer.type == 'COLOR' and height_ch.enable_transition_bump and sss_enabled: + multiplier = volume / 16 + elif layer.type == 'IMAGE' and not height_root_ch.enable_subdiv_setup: multiplier = dimension / 2 - else: + elif layer.type == 'NOISE' and sss_enabled: + multiplier = volume / 32 + elif layer.type != 'IMAGE': multiplier = volume / 8 height = get_entity_prop_value(height_ch, 'bump_distance') From 8999d599730db9cdf0f6dc6ca3da19bc4fba66dc Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 7 Mar 2025 02:19:25 +0700 Subject: [PATCH 093/283] Fix gabor cache location is not arranged internally --- node_arrangements.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/node_arrangements.py b/node_arrangements.py index 77b51e1e..40d5a57b 100644 --- a/node_arrangements.py +++ b/node_arrangements.py @@ -712,6 +712,10 @@ def rearrange_layer_nodes(layer, tree=None): loc.y -= 170 cache_found = True + if check_set_node_loc(tree, layer.cache_gabor, loc, hide=False): + loc.y -= 170 + cache_found = True + if check_set_node_loc(tree, layer.cache_wave, loc, hide=False): loc.y -= 260 cache_found = True @@ -763,6 +767,10 @@ def rearrange_layer_nodes(layer, tree=None): loc.y -= 170 cache_found = True + if check_set_node_loc(tree, ch.cache_gabor, loc, hide=False): + loc.y -= 170 + cache_found = True + if check_set_node_loc(tree, ch.cache_wave, loc, hide=False): loc.y -= 260 cache_found = True @@ -818,6 +826,10 @@ def rearrange_layer_nodes(layer, tree=None): loc.y -= 170 cache_found = True + if check_set_node_loc(tree, mask.cache_gabor, loc, hide=False, parent_unset=True): + loc.y -= 170 + cache_found = True + if check_set_node_loc(tree, mask.cache_wave, loc, hide=False, parent_unset=True): loc.y -= 260 cache_found = True From 6585ed60378fa484423d3cbbaa11b0c50df43bce Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 9 Mar 2025 21:41:30 +0700 Subject: [PATCH 094/283] Fix: Replacing mask type to `Backface` will create unecessary node --- Mask.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mask.py b/Mask.py index 27ce5287..fc5505bd 100644 --- a/Mask.py +++ b/Mask.py @@ -365,7 +365,7 @@ def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_ if new_type == 'MODIFIER': source = setup_modifier_mask_source(tree, mask, modifier_type) - else: source = new_node(tree, mask, 'source', layer_node_bl_idnames[new_type], 'Source') + elif new_type != 'BACKFACE': source = new_node(tree, mask, 'source', layer_node_bl_idnames[new_type], 'Source') if new_type == 'IMAGE': image = bpy.data.images.get(item_name) From 0c53e0865017e273fdf4eeaacdfcd909d0fde1a5 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 11 Mar 2025 01:55:46 +0700 Subject: [PATCH 095/283] Fix: Baking other object channels won't bake all the objects if some of them have shared materials --- BakeToLayer.py | 4 ++++ bake_common.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 1f89d001..2d27cdba 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -822,7 +822,9 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): bake_type = 'EMIT' # Set emission connection + connected_mats = [] for j, m in enumerate(ch_other_mats[idx]): + if m in connected_mats: continue default = ch_other_defaults[idx][j] socket = ch_other_sockets[idx][j] @@ -841,6 +843,8 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): elif socket: m.node_tree.links.new(socket, temp_emi.inputs[0]) + connected_mats.append(m) + colorspace = get_noncolor_name() if root_ch.colorspace == 'LINEAR' else get_srgb_name() elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: diff --git a/bake_common.py b/bake_common.py index 5a131f1e..52b0bacb 100644 --- a/bake_common.py +++ b/bake_common.py @@ -339,7 +339,7 @@ def prepare_other_objs_channels(yp, other_objs): for mat in o.data.materials: if mat == None: continue - if mat in mats: continue + #if mat in mats: continue if not mat.use_nodes: continue # Get material output From 146367835fea6be4fe4a7432adb83edc6d9ecd8e Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 11 Mar 2025 15:42:50 +0700 Subject: [PATCH 096/283] Make sure opened image is not None --- Layer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Layer.py b/Layer.py index 2c4bbb5e..ca9df717 100644 --- a/Layer.py +++ b/Layer.py @@ -2057,6 +2057,7 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import dx_image = None gl_image = None for image in images: + if not image: continue # Get filename without extension name = os.path.splitext(os.path.basename(image.filepath))[0] From 8d01d6f532ece26c6652a020956301d7b0b17130 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 11 Mar 2025 15:47:58 +0700 Subject: [PATCH 097/283] Better way to filter empty images --- Layer.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Layer.py b/Layer.py index ca9df717..eee42cc9 100644 --- a/Layer.py +++ b/Layer.py @@ -2053,11 +2053,17 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import valid_images = [] valid_synonyms = [] + # Filter image to make sure it's not empty + filtered_images = [] + for image in images: + if not image: continue + filtered_images.append(image) + images = filtered_images + # Check for DirectX and OpenGL images dx_image = None gl_image = None for image in images: - if not image: continue # Get filename without extension name = os.path.splitext(os.path.basename(image.filepath))[0] From 8c7bcfcd16563a8066b4efcd3934f10d5db8efdb Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 11 Mar 2025 19:23:06 +0700 Subject: [PATCH 098/283] Always remove baked mask when changing type --- Mask.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Mask.py b/Mask.py index fc5505bd..04f8d2b7 100644 --- a/Mask.py +++ b/Mask.py @@ -472,6 +472,11 @@ def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_ mask.uv_name = get_default_uv_name(obj, yp) yp.halt_update = False + # Always remove baked mask when changing type + if mask.use_baked: + mask.use_baked = False + remove_node(tree, mask, 'baked_source') + # Update group ios check_all_layer_channel_io_and_nodes(layer, tree) From 2fc52f1ebde0b7ca4f6636ec7db7248814016041 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 12 Mar 2025 02:05:00 +0700 Subject: [PATCH 099/283] Fix: Image atlas can be accidentality removed after rebaking a mask --- BakeToLayer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 2d27cdba..448fae27 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -2467,7 +2467,8 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): UDIM.remove_udim_atlas_segment_by_name(overwrite_image, entity.baked_segment_name, yp=yp) # Remove node first to also remove its data - remove_node(source_tree, entity, 'baked_source') + remove_data = False if segment else True # Do not remove image atlas image since it can be use multiple times + remove_node(source_tree, entity, 'baked_source', remove_data=remove_data) # Rename image if it's not image atlas if entity.baked_segment_name == '' and overwrite_image_name == bprops.name: From b02764162f3bafe9ea02a0b4008b1c87b6b2eaa8 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 12 Mar 2025 15:52:26 +0700 Subject: [PATCH 100/283] Make sure brush is not `None` --- ui.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ui.py b/ui.py index 8d510886..76ef96ed 100644 --- a/ui.py +++ b/ui.py @@ -3658,7 +3658,7 @@ def draw_layers_ui(context, layout, node): if is_bl_newer_than(4, 3) and in_texture_paint_mode: brush = context.tool_settings.image_paint.brush - if brush.image_tool != 'MASK': + if brush and brush.image_tool != 'MASK': bbox = col.box() row = bbox.row(align=True) row.operator('paint.y_toggle_eraser', text='Toggle Eraser') @@ -3671,7 +3671,7 @@ def draw_layers_ui(context, layout, node): ve = context.scene.ve_edit if is_bl_newer_than(4, 3) and in_texture_paint_mode: brush = context.tool_settings.image_paint.brush - if ((mask_image and mask.source_input == 'RGB') or override_image) and (brush.name in tex_eraser_asset_names or brush.blend == 'ERASE_ALPHA'): + if brush and ((mask_image and mask.source_input == 'RGB') or override_image) and (brush.name in tex_eraser_asset_names or brush.blend == 'ERASE_ALPHA'): bbox = col.box() row = bbox.row(align=True) row.alert = True @@ -3680,7 +3680,7 @@ def draw_layers_ui(context, layout, node): elif in_texture_paint_mode or in_sculpt_texture_paint_mode: brush = context.tool_settings.image_paint.brush if in_texture_paint_mode else context.tool_settings.sculpt.brush - if ((mask_image and mask.source_input == 'RGB') or override_image) and brush.name == eraser_names[obj.mode]: + if brush and ((mask_image and mask.source_input == 'RGB') or override_image) and brush.name == eraser_names[obj.mode]: bbox = col.box() row = bbox.row(align=True) row.alert = True @@ -3689,7 +3689,7 @@ def draw_layers_ui(context, layout, node): elif obj.mode == 'VERTEX_PAINT' and is_bl_newer_than(2, 80): brush = context.tool_settings.vertex_paint.brush - if mask_vcol and mask.source_input == 'RGB' and brush.name == eraser_names[obj.mode]: + if brush and mask_vcol and mask.source_input == 'RGB' and brush.name == eraser_names[obj.mode]: bbox = col.box() row = bbox.row(align=True) row.alert = True @@ -3698,7 +3698,7 @@ def draw_layers_ui(context, layout, node): elif obj.mode == 'SCULPT' and is_bl_newer_than(3, 2): brush = context.tool_settings.sculpt.brush - if mask_vcol and mask.source_input == 'RGB' and brush.name == eraser_names[obj.mode]: + if brush and mask_vcol and mask.source_input == 'RGB' and brush.name == eraser_names[obj.mode]: bbox = col.box() row = bbox.row(align=True) row.alert = True From dc5011b79d0997fd4a822946369dd94ecf3158cc Mon Sep 17 00:00:00 2001 From: ucupumar Date: Mon, 17 Mar 2025 00:10:31 +0700 Subject: [PATCH 101/283] Add realtime AO layer/mask (#253) * Add edge detect layer type, still need to make the baked layer reusable * Add baked entity flag to bake info * Implement replace layer to edge detect * Implement `Use Previous Normal` for edge detect layer/mask * Disable use previous normal by default for edge detect mask/layer since it has very little effect * Add 'AO' layer/mask type * Add prop inputs for AO layer/mask * Clean up and remove ao samples from UI since the default one is enough * Make sure to enable EEVEE AO after creating AO layer/mask * Baked entity image is not available to open for other entity for now --- BakeInfo.py | 1 + BakeToLayer.py | 29 ++++++--- Layer.py | 141 +++++++++++++++++++++++++++++++++++------- Mask.py | 91 +++++++++++++++++++++------ __init__.py | 2 +- blender_manifest.toml | 2 +- common.py | 38 +++++++++--- input_outputs.py | 15 +++++ lib_281.blend | Bin 637520 -> 637984 bytes node_connections.py | 53 +++++++++++----- subtree.py | 10 +-- ui.py | 100 ++++++++++++++++++++++++------ versioning.py | 38 ++++++++++++ 13 files changed, 418 insertions(+), 102 deletions(-) diff --git a/BakeInfo.py b/BakeInfo.py index c1d50fbf..b78372e6 100644 --- a/BakeInfo.py +++ b/BakeInfo.py @@ -20,6 +20,7 @@ class YBakeInfoSelectedObject(bpy.types.PropertyGroup): class YBakeInfoProps(bpy.types.PropertyGroup): is_baked : BoolProperty(default=False) # Flag to mark if the image is from baking or not is_baked_channel : BoolProperty(default=False) # Flag to mark if the image baked from main channel + is_baked_entity : BoolProperty(default=False) # Flag to mark if the image baked from entity bake_type : EnumProperty( name = 'Bake Type', diff --git a/BakeToLayer.py b/BakeToLayer.py index 448fae27..60110b07 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -2346,7 +2346,7 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): else: color = (0, 0, 0, 0) color_str = 'TRANSPARENT' - colorspace = get_srgb_name() + colorspace = get_noncolor_name() if bprops.hdr else get_srgb_name() # Create image if bprops.use_udim: @@ -2482,6 +2482,7 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): bi = segment.bake_info if segment else image.y_bake_info bi.is_baked = True + bi.is_baked_entity = True for attr in dir(bi): if attr.startswith('__'): continue if attr.startswith('bl_'): continue @@ -2489,6 +2490,16 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): try: setattr(bi, attr, bprops[attr]) except: pass + # Set bake type for some types + if entity.type == 'EDGE_DETECT': + bi.bake_type = 'BEVEL_MASK' + bi.bevel_radius = get_entity_prop_value(entity, 'edge_detect_radius') + elif entity.type == 'AO': + source = get_entity_source(entity) + bi.bake_type = 'AO' + bi.ao_distance = get_entity_prop_value(entity, 'ao_distance') + bi.only_local = source.only_local + # Create new node baked_source = new_node(source_tree, entity, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') @@ -2627,6 +2638,9 @@ def invoke(self, context, event): self.mask = None self.index = int(m1.group(1)) self.entities = yp.layers + + # NOTE: Duplicate entity currently doesn't work on layer so make sure to disable it + self.duplicate_entity = False elif m2: self.layer = yp.layers[int(m2.group(1))] self.mask = self.layer.masks[int(m2.group(2))] @@ -2646,9 +2660,10 @@ def invoke(self, context, event): if overwrite_image and not overwrite_image.yia.is_image_atlas and not overwrite_image.yua.is_udim_atlas: self.name = overwrite_image.name else: - self.name = self.entity.name - if not self.name.endswith(' Image'): - self.name += ' Image' + name = node.node_tree.name.replace(get_addon_title()+' ', '') + self.name = name + ' ' + self.entity.name + #if not self.name.endswith(' Image'): + # self.name += ' Image' self.name = get_unique_name(self.name, bpy.data.images) @@ -2701,7 +2716,7 @@ def invoke(self, context, event): if len(self.uv_map_coll) > 0: self.uv_map = self.uv_map_coll[0].name - if self.entity.type in {'EDGE_DETECT', 'HEMI'}: + if self.entity.type in {'EDGE_DETECT', 'HEMI', 'AO'}: self.hdr = True self.fxaa = False else: @@ -2709,7 +2724,7 @@ def invoke(self, context, event): self.fxaa = True # Auto set some props for some types - if self.entity.type == 'EDGE_DETECT': + if self.entity.type in {'EDGE_DETECT', 'AO'}: self.samples = 32 self.denoise = True else: @@ -2800,7 +2815,7 @@ def draw(self, context): if self.mask: col.prop(self, 'duplicate_entity', text='Duplicate Mask') - else: col.prop(self, 'duplicate_entity', text='Disable Layer') + #else: col.prop(self, 'duplicate_entity', text='Disable Layer') if self.duplicate_entity: if self.mask: col.prop(self, 'disable_current', text='Disable Current Mask') diff --git a/Layer.py b/Layer.py index eee42cc9..f345e11c 100644 --- a/Layer.py +++ b/Layer.py @@ -58,7 +58,8 @@ def add_new_layer( mask_vcol_data_type='BYTE_COLOR', mask_vcol_domain='CORNER', use_divider_alpha=False, use_udim_for_mask=False, interpolation='Linear', mask_interpolation='Linear', mask_edge_detect_radius=0.05, - normal_space = 'TANGENT' + normal_space = 'TANGENT', edge_detect_radius=0.05, mask_use_prev_normal=True, + ao_distance=1.0 ): yp = group_tree.yp @@ -177,6 +178,15 @@ def add_new_layer( layer.hemi_space = hemi_space layer.hemi_use_prev_normal = hemi_use_prev_normal + elif layer_type == 'EDGE_DETECT': + layer.hemi_use_prev_normal = hemi_use_prev_normal + Mask.setup_edge_detect_source(layer, source, edge_detect_radius) + + elif layer_type == 'AO': + layer.hemi_use_prev_normal = hemi_use_prev_normal + layer.ao_distance = ao_distance + enable_eevee_ao() + # Add texcoord node #texcoord = new_node(tree, layer, 'texcoord', 'NodeGroupInput', 'TexCoord Inputs') @@ -299,7 +309,8 @@ def add_new_layer( layer, mask_name, mask_type, mask_texcoord_type, mask_uv_name, mask_image, mask_vcol, mask_segment, interpolation=mask_interpolation, color_id=mask_color_id, - edge_detect_radius=mask_edge_detect_radius + edge_detect_radius=mask_edge_detect_radius, + hemi_use_prev_normal=mask_use_prev_normal ) mask.active_edit = True @@ -1007,12 +1018,30 @@ class YNewLayer(bpy.types.Operator): ) # For edge detection + edge_detect_radius : FloatProperty( + name = 'Detect Mask Radius', + description = 'Edge detect radius', + default=0.05, min=0.0, max=10.0 + ) + mask_edge_detect_radius : FloatProperty( name = 'Edge Detect Mask Radius', description = 'Edge detect mask radius', default=0.05, min=0.0, max=10.0 ) + mask_use_prev_normal : BoolProperty( + name = 'Use previous Normal for Mask', + description = 'Take account previous Normal for mask', + default = True + ) + + ao_distance : FloatProperty( + name = 'Ambient Occlusion Distance', + description = 'Ambient occlusion distance', + default=1.0, min=0.0, max=10.0 + ) + uv_map_coll : CollectionProperty(type=bpy.types.PropertyGroup) image_resolution : EnumProperty( @@ -1080,10 +1109,19 @@ def invoke(self, context, event): self.normal_map_type = 'BUMP_MAP' # Fake lighting default blend type is add - if self.type == 'HEMI': + if self.type in {'HEMI', 'EDGE_DETECT'}: self.blend_type = 'ADD' + if self.type == 'AO': + self.blend_type = 'MULTIPLY' else: self.blend_type = 'MIX' + # Disable use previous normal for edge detect since it has very little effect + if self.type == 'EDGE_DETECT': + self.hemi_use_prev_normal = False + + if self.add_mask and self.mask_type == 'EDGE_DETECT': + self.mask_use_prev_normal = False + # Layer name self.name = get_unique_name(name, items) @@ -1208,6 +1246,14 @@ def draw(self, context): if self.type == 'HEMI': col.label(text='Space:') + + if self.type == 'EDGE_DETECT': + col.label(text='Edge Detect Radius:') + + if self.type == 'AO': + col.label(text='AO Distance:') + + if self.type in {'HEMI', 'EDGE_DETECT', 'AO'}: col.label(text='') if self.type == 'IMAGE' and self.use_custom_resolution == False: @@ -1222,7 +1268,7 @@ def draw(self, context): col.label(text='') col.label(text='Interpolation:') - if self.type not in {'VCOL', 'GROUP', 'COLOR', 'BACKGROUND', 'HEMI'}: + if self.type not in {'VCOL', 'GROUP', 'COLOR', 'BACKGROUND', 'HEMI', 'EDGE_DETECT', 'AO'}: col.label(text='Vector:') if self.type in {'VCOL'}: @@ -1293,7 +1339,16 @@ def draw(self, context): if self.type == 'HEMI': col.prop(self, 'hemi_space', text='') + + if self.type == 'EDGE_DETECT': + col.prop(self, 'edge_detect_radius', text='') + + if self.type == 'AO': + col.prop(self, 'ao_distance', text='') + + if self.type in {'HEMI', 'EDGE_DETECT', 'AO'}: col.prop(self, 'hemi_use_prev_normal') + if self.type == 'IMAGE' and self.use_custom_resolution == False: crow = col.row(align=True) crow.prop(self, 'use_custom_resolution') @@ -1309,7 +1364,7 @@ def draw(self, context): col.prop(self, 'hdr') col.prop(self, 'interpolation', text='') - if self.type not in {'VCOL', 'GROUP', 'COLOR', 'BACKGROUND', 'HEMI'}: + if self.type not in {'VCOL', 'GROUP', 'COLOR', 'BACKGROUND', 'HEMI', 'EDGE_DETECT', 'AO'}: crow = col.row(align=True) crow.prop(self, 'texcoord_type', text='') if obj.type == 'MESH' and self.texcoord_type == 'UV': @@ -1335,6 +1390,7 @@ def draw(self, context): col.prop(self, 'mask_color_id_fill', text='Fill Selected Faces') elif self.mask_type == 'EDGE_DETECT': col.prop(self, 'mask_edge_detect_radius', text='') + col.prop(self, 'mask_use_prev_normal', text='Use Previous Normal') else: if self.mask_type == 'IMAGE': if self.mask_image_filepath: @@ -1422,8 +1478,8 @@ def execute(self, context): return {'CANCELLED'} # Edge Detect mask is only possible in Blender 2.93 or above - if not is_bl_newer_than(2, 93) and self.add_mask and self.mask_type == 'EDGE_DETECT': - self.report({'ERROR'}, "Edge detect mask is only supported in Blender 2.93 or above!") + if not is_bl_newer_than(2, 93) and (self.type in {'EDGE_DETECT', 'AO'} or self.add_mask and self.mask_type == 'EDGE_DETECT'): + self.report({'ERROR'}, "Realtime layer/mask mask is only supported in Blender 2.93 or above!") return {'CANCELLED'} # Clearing unused image atlas segments @@ -1506,16 +1562,19 @@ def execute(self, context): layer = add_new_layer( node.node_tree, self.name, self.type, channel_idx, self.blend_type, self.normal_blend_type, - self.normal_map_type, self.texcoord_type, self.uv_map, img, vcol, segment, - self.solid_color, - self.add_mask, self.mask_type, self.mask_image_filepath, self.mask_relative, - self.mask_texcoord_type, self.mask_color, self.mask_use_hdr, self.mask_uv_name, - self.mask_width, self.mask_height, self.use_image_atlas_for_mask, - self.hemi_space, self.hemi_use_prev_normal, self.mask_color_id, self.mask_color_id_fill, - self.mask_vcol_data_type, self.mask_vcol_domain, self.use_divider_alpha, - self.use_udim_for_mask, - self.interpolation, self.mask_interpolation, - self.mask_edge_detect_radius + self.normal_map_type, self.texcoord_type, uv_name=self.uv_map, + image=img, vcol=vcol, segment=segment, solid_color=self.solid_color, + add_mask=self.add_mask, mask_type=self.mask_type, + mask_image_filepath=self.mask_image_filepath, mask_relative=self.mask_relative, + mask_texcoord_type=self.mask_texcoord_type, mask_color=self.mask_color, + mask_use_hdr=self.mask_use_hdr, mask_uv_name=self.mask_uv_name, + mask_width=self.mask_width, mask_height=self.mask_height, use_image_atlas_for_mask=self.use_image_atlas_for_mask, + hemi_space=self.hemi_space, hemi_use_prev_normal=self.hemi_use_prev_normal, + mask_color_id=self.mask_color_id, mask_color_id_fill=self.mask_color_id_fill, + mask_vcol_data_type=self.mask_vcol_data_type, mask_vcol_domain=self.mask_vcol_domain, use_divider_alpha=self.use_divider_alpha, + use_udim_for_mask=self.use_udim_for_mask, interpolation=self.interpolation, mask_interpolation=self.mask_interpolation, + mask_edge_detect_radius=self.mask_edge_detect_radius, edge_detect_radius=self.edge_detect_radius, + mask_use_prev_normal=self.mask_use_prev_normal, ao_distance=self.ao_distance ) if segment: @@ -2857,7 +2916,7 @@ def invoke(self, context, event): imgs = bpy.data.images baked_channel_images = get_all_baked_channel_images(node.node_tree) for img in imgs: - if not img.yia.is_image_atlas and img not in baked_channel_images and img.name not in {'Render Result', 'Viewer Node'}: + if is_image_available_to_open(img) and img not in baked_channel_images: self.image_coll.add().name = img.name return context.window_manager.invoke_props_dialog(self) @@ -2984,7 +3043,7 @@ def invoke(self, context, event): imgs = bpy.data.images baked_channel_images = get_all_baked_channel_images(node.node_tree) for img in imgs: - if not img.yia.is_image_atlas and img not in baked_channel_images and img.name not in {'Render Result', 'Viewer Node'}: + if is_image_available_to_open(img) and img not in baked_channel_images: self.image_coll.add().name = img.name elif self.type == 'VCOL': self.vcol_coll.clear() @@ -3224,7 +3283,7 @@ def invoke(self, context, event): imgs = bpy.data.images baked_channel_images = get_all_baked_channel_images(node.node_tree) for img in imgs: - if not img.yia.is_image_atlas and img not in baked_channel_images and img.name not in {'Render Result', 'Viewer Node'}: + if is_image_available_to_open(img) and img not in baked_channel_images: self.image_coll.add().name = img.name elif self.type == 'VCOL': self.vcol_coll.clear() @@ -4050,7 +4109,7 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): source = source_tree.nodes.get(layer.source) # Save source to cache - if layer.type not in {'BACKGROUND', 'GROUP', 'HEMI'} and layer.type != new_type: + if layer.type not in {'BACKGROUND', 'GROUP', 'HEMI', 'EDGE_DETECT', 'AO'} and layer.type != new_type: setattr(layer, 'cache_' + layer.type.lower(), source.name) # Remove uv input link if any(source.inputs) and any(source.inputs[0].links): @@ -4061,7 +4120,7 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): # Try to get available cache cache = None - if new_type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'GROUP', 'HEMI'} or (new_type in {'IMAGE', 'VCOL'} and item_name == ''): + if new_type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'GROUP', 'HEMI', 'EDGE_DETECT', 'AO'} or (new_type in {'IMAGE', 'VCOL'} and item_name == ''): cache = tree.nodes.get(getattr(layer, 'cache_' + new_type.lower())) if cache: @@ -4086,6 +4145,12 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): load_hemi_props(layer, source) + elif new_type == 'EDGE_DETECT': + Mask.setup_edge_detect_source(layer, source) + + elif new_type == 'AO': + enable_eevee_ao() + # Change layer type ori_type = layer.type layer.type = new_type @@ -4093,6 +4158,11 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): # Check modifiers tree Modifier.check_modifiers_trees(layer) + # Always remove baked layer when changing type + if layer.use_baked: + layer.use_baked = False + remove_node(tree, layer, 'baked_source') + # Update group ios check_all_layer_channel_io_and_nodes(layer, tree) if layer.type == 'BACKGROUND': @@ -5719,6 +5789,10 @@ def update_hemi_use_prev_normal(self, context): layer = self tree = get_tree(layer) + if layer.type == 'EDGE_DETECT': + source = get_layer_source(layer) + Mask.setup_edge_detect_source(layer, source) + check_layer_tree_ios(layer, tree) check_layer_bump_process(layer, tree) @@ -6525,6 +6599,14 @@ def update_layer_uniform_scale_enabled(self, context): reconnect_layer_nodes(layer) rearrange_layer_nodes(layer) +def update_layer_edge_detect_radius(self, context): + yp = self.id_data.yp + if yp.halt_update: return + layer = self + + source = get_layer_source(layer) + if source: source.inputs[0].default_value = self.edge_detect_radius + def update_layer_use_baked(self, context): yp = self.id_data.yp if yp.halt_update: return @@ -6617,6 +6699,21 @@ class YLayer(bpy.types.PropertyGroup): update = update_projection_blend ) + # For edge detection + edge_detect_radius : FloatProperty( + name = 'Edge Detect Radius', + description = 'Edge detect radius', + default=0.05, min=0.0, max=10.0, + update = update_layer_edge_detect_radius + ) + + # For AO + ao_distance : FloatProperty( + name = 'Ambient Occlusion Distance', + description = 'Ambient occlusion distance', + default=1.0, min=0.0, max=10.0 + ) + # Specific for voronoi voronoi_feature : EnumProperty( name = 'Voronoi Feature', diff --git a/Mask.py b/Mask.py index 04f8d2b7..3bdd208c 100644 --- a/Mask.py +++ b/Mask.py @@ -32,15 +32,22 @@ def setup_object_idx_source(mask, source, object_index=None): source.inputs[0].default_value = object_index -def setup_edge_detect_source(mask, source, edge_detect_radius=None): - source.node_tree = get_node_tree_lib(lib.EDGE_DETECT) +def setup_edge_detect_source(entity, source, edge_detect_radius=None): + if entity.hemi_use_prev_normal: + lib_name = lib.EDGE_DETECT_CUSTOM_NORMAL + else: lib_name = lib.EDGE_DETECT + + ori_lib = source.node_tree + if not ori_lib or ori_lib.name != lib_name: + source.node_tree = get_node_tree_lib(lib_name) + if ori_lib and ori_lib.users == 0: + remove_datablock(bpy.data.node_groups, ori_lib) + if edge_detect_radius != None: - source.inputs[0].default_value = mask.edge_detect_radius = edge_detect_radius - else: source.inputs[0].default_value = mask.edge_detect_radius + source.inputs[0].default_value = entity.edge_detect_radius = edge_detect_radius + else: source.inputs[0].default_value = entity.edge_detect_radius - # Enable AO to see edge detect mask - scene = bpy.context.scene - if not scene.eevee.use_gtao: scene.eevee.use_gtao = True + enable_eevee_ao() def setup_modifier_mask_source(tree, mask, modifier_type): source = None @@ -58,7 +65,7 @@ def add_new_mask( layer, name, mask_type, texcoord_type, uv_name, image=None, vcol=None, segment=None, object_index=0, blend_type='MULTIPLY', hemi_space='WORLD', hemi_use_prev_normal=False, color_id=(1, 0, 1), source_input='RGB', edge_detect_radius=0.05, - modifier_type='INVERT', interpolation='Linear' + modifier_type='INVERT', interpolation='Linear', ao_distance=1.0 ): yp = layer.id_data.yp yp.halt_update = True @@ -104,15 +111,21 @@ def add_new_mask( mask.hemi_space = hemi_space mask.hemi_use_prev_normal = hemi_use_prev_normal - if mask_type == 'OBJECT_INDEX': + elif mask_type == 'OBJECT_INDEX': setup_object_idx_source(mask, source, object_index) - if mask_type == 'COLOR_ID': + elif mask_type == 'COLOR_ID': setup_color_id_source(mask, source, color_id) - if mask_type == 'EDGE_DETECT': + elif mask_type == 'EDGE_DETECT': + mask.hemi_use_prev_normal = hemi_use_prev_normal setup_edge_detect_source(mask, source, edge_detect_radius) + elif mask_type == 'AO': + mask.hemi_use_prev_normal = hemi_use_prev_normal + mask.ao_distance = ao_distance + enable_eevee_ao() + if is_mapping_possible(mask_type): mask.uv_name = uv_name @@ -284,7 +297,7 @@ def is_mask_type_cacheable(mask_type, modifier_type=''): if mask_type == 'MODIFIER': return modifier_type in {'RAMP', 'CURVE'} - return mask_type not in {'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'EDGE_DETECT', 'BACKFACE'} + return mask_type not in {'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'EDGE_DETECT', 'BACKFACE', 'AO'} def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_type='INVERT'): @@ -395,6 +408,9 @@ def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_ elif new_type == 'EDGE_DETECT': setup_edge_detect_source(mask, source) + elif new_type == 'AO': + enable_eevee_ao() + # Change mask type ori_type = mask.type mask.type = new_type @@ -631,7 +647,17 @@ class YNewLayerMask(bpy.types.Operator): default=0, min=0 ) - edge_detect_radius : FloatProperty(default=0.05, min=0.0, max=10.0) + edge_detect_radius : FloatProperty( + name = 'Detect Mask Radius', + description = 'Edge detect radius', + default=0.05, min=0.0, max=10.0 + ) + + ao_distance : FloatProperty( + name = 'Ambient Occlusion Distance', + description = 'Ambient occlusion distance', + default=1.0, min=0.0, max=10.0 + ) vcol_data_type : EnumProperty( name = 'Vertex Color Data Type', @@ -705,6 +731,10 @@ def invoke(self, context, event): self.color_id = (random.uniform(COLORID_TOLERANCE, 1.0), random.uniform(COLORID_TOLERANCE, 1.0), random.uniform(COLORID_TOLERANCE, 1.0)) if not is_colorid_already_being_used(yp, self.color_id): break + # Disable use previous normal for edge detect since it has very little effect + if self.type == 'EDGE_DETECT': + self.hemi_use_prev_normal = False + # Make sure decal is off when adding non mappable mask if not is_mapping_possible(self.type) and self.texcoord_type == 'Decal': self.texcoord_type = 'UV' @@ -792,15 +822,20 @@ def draw(self, context): if self.type == 'HEMI': col.label(text='Space:') - col.label(text='') if self.type == 'EDGE_DETECT': col.label(text='Radius:') + if self.type == 'AO': + col.label(text='AO Distance:') + + if self.type in {'HEMI', 'EDGE_DETECT', 'AO'}: + col.label(text='') + if self.type == 'IMAGE': col.label(text='') - if self.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: + if self.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'}: col.label(text='Vector:') if self.type == 'IMAGE': if UDIM.is_udim_supported(): @@ -839,11 +874,16 @@ def draw(self, context): if self.type == 'HEMI': col.prop(self, 'hemi_space', text='') - col.prop(self, 'hemi_use_prev_normal') if self.type == 'EDGE_DETECT': col.prop(self, 'edge_detect_radius', text='') + if self.type == 'AO': + col.prop(self, 'ao_distance', text='') + + if self.type in {'HEMI', 'EDGE_DETECT', 'AO'}: + col.prop(self, 'hemi_use_prev_normal') + if is_bl_newer_than(3, 2) and self.type == 'VCOL': crow = col.row(align=True) crow.prop(self, 'vcol_domain', expand=True) @@ -853,7 +893,7 @@ def draw(self, context): if self.type == 'IMAGE': col.prop(self, 'hdr') - if self.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: + if self.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'}: crow = col.row(align=True) crow.prop(self, 'texcoord_type', text='') if obj.type == 'MESH' and self.texcoord_type == 'UV': @@ -1005,7 +1045,7 @@ def execute(self, context): mask = add_new_mask( layer, self.name, self.type, self.texcoord_type, self.uv_name, img, vcol, segment, self.object_index, self.blend_type, self.hemi_space, self.hemi_use_prev_normal, self.color_id, source_input=source_input, edge_detect_radius=self.edge_detect_radius, - modifier_type=self.modifier_type, interpolation=self.interpolation + modifier_type=self.modifier_type, interpolation=self.interpolation, ao_distance=self.ao_distance ) # Enable edit mask @@ -1392,7 +1432,7 @@ def invoke(self, context, event): imgs = bpy.data.images baked_channel_images = get_all_baked_channel_images(layer.id_data) for img in imgs: - if not img.yia.is_image_atlas and img not in baked_channel_images and img != layer_image and img not in mask_images and img.name not in {'Render Result', 'Viewer Node'}: + if is_image_available_to_open(img) and img not in baked_channel_images and img != layer_image and img not in mask_images: self.image_coll.add().name = img.name # Make sure default image is available in the collection and update the source input based on the default name @@ -2043,7 +2083,7 @@ def update_mask_uv_name(self, context): tree = get_tree(layer) mask = self - if mask.type in {'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT'} or mask.texcoord_type != 'UV': + if mask.type in {'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'AO'} or mask.texcoord_type != 'UV': return # Cannot use temp uv as standard uv @@ -2093,6 +2133,10 @@ def update_mask_hemi_use_prev_normal(self, context): layer = yp.layers[int(match.group(1))] tree = get_tree(layer) + if self.type == 'EDGE_DETECT': + source = get_mask_source(self) + setup_edge_detect_source(self, source) + check_layer_tree_ios(layer, tree) check_layer_bump_process(layer, tree) @@ -2506,6 +2550,13 @@ class YLayerMask(bpy.types.PropertyGroup): update = update_mask_edge_detect_radius ) + # For AO + ao_distance : FloatProperty( + name = 'Ambient Occlusion Distance', + description = 'Ambient occlusion distance', + default=1.0, min=0.0, max=10.0 + ) + # Specific for voronoi voronoi_feature : EnumProperty( name = 'Voronoi Feature', diff --git a/__init__.py b/__init__.py index d7c5ca95..36ce9bfe 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 2, 0), + "version": (2, 2, 1), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index a86a3f87..ce71f662 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.2.0" +version = "2.2.1" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " diff --git a/common.py b/common.py index 85dac855..01595fc8 100644 --- a/common.py +++ b/common.py @@ -225,6 +225,8 @@ def entity_input_items(self, context): ('GROUP', 'Group', ''), ('HEMI', 'Fake Lighting', ''), ('GABOR', 'Gabor', ''), + ('EDGE_DETECT', 'Edge Detect', ''), + ('AO', 'Ambient Occlusion', ''), ) mask_type_items = ( @@ -245,6 +247,7 @@ def entity_input_items(self, context): ('EDGE_DETECT', 'Edge Detect', ''), ('MODIFIER', 'Modifier', ''), ('GABOR', 'Gabor', ''), + ('AO', 'Ambient Occlusion', ''), ) channel_override_type_items = ( @@ -290,6 +293,8 @@ def entity_input_items(self, context): 'GROUP' : 'Group', 'HEMI' : 'Fake Lighting', 'GABOR' : 'Gabor', + 'EDGE_DETECT' : 'Edge Detect', + 'AO' : 'Ambient Occlusion', } mask_type_labels = { @@ -310,6 +315,7 @@ def entity_input_items(self, context): 'EDGE_DETECT' : 'Edge Detect', 'MODIFIER' : 'Modifier', 'GABOR' : 'Gabor', + 'AO' : 'Ambient Occlusion', } bake_type_items = ( @@ -506,6 +512,7 @@ def entity_input_items(self, context): 'EDGE_DETECT' : 'ShaderNodeGroup', 'GABOR' : 'ShaderNodeTexGabor', 'MODIFIER' : 'ShaderNodeGroup', + 'AO' : 'ShaderNodeAmbientOcclusion', } io_suffix = { @@ -3125,7 +3132,7 @@ def get_udim_segment_mapping_offset(segment): offset_y += tiles_height + 1 def is_mapping_possible(entity_type): - return entity_type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'} + return entity_type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'} def clear_mapping(entity, use_baked=False): @@ -4899,11 +4906,11 @@ def is_uv_input_needed(layer, uv_name): if layer.baked_source != '' and layer.use_baked and layer.baked_uv_name == uv_name: return True - if layer.texcoord_type == 'UV' and layer.uv_name == uv_name: - return True + if layer.texcoord_type == 'UV' and layer.uv_name == uv_name: + return True if layer.texcoord_type == 'UV' and layer.uv_name == uv_name: - if layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI'}: + if layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'EDGE_DETECT', 'AO'}: return True for i, ch in enumerate(layer.channels): @@ -4923,7 +4930,7 @@ def is_uv_input_needed(layer, uv_name): if not get_mask_enabled(mask): continue if mask.use_baked and mask.baked_source != '' and mask.baked_uv_name == uv_name: return True - if mask.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT'}: continue + if mask.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'AO'}: continue if (not mask.use_baked or mask.baked_source == '') and mask.texcoord_type == 'UV' and mask.uv_name == uv_name: return True @@ -4973,7 +4980,7 @@ def is_entity_need_tangent_input(entity, uv_name): return True # Fake neighbor need tangent - if height_root_ch.enable_smooth_bump and entity.type in {'VCOL', 'HEMI', 'EDGE_DETECT'} and not entity.use_baked: + if height_root_ch.enable_smooth_bump and entity.type in {'VCOL', 'HEMI', 'EDGE_DETECT', 'AO'} and not entity.use_baked: return True elif entity.uv_name == uv_name and entity.texcoord_type == 'UV': @@ -5585,13 +5592,13 @@ def check_need_prev_normal(layer): # Check if previous normal is needed need_prev_normal = False - if layer.type == 'HEMI' and layer.hemi_use_prev_normal and height_root_ch: + if layer.type in {'HEMI', 'EDGE_DETECT', 'AO'} and layer.hemi_use_prev_normal and height_root_ch: need_prev_normal = True # Also check mask if not need_prev_normal: for mask in layer.masks: - if mask.type == 'HEMI' and mask.hemi_use_prev_normal and height_root_ch: + if mask.type in {'HEMI', 'EDGE_DETECT', 'AO'} and mask.hemi_use_prev_normal and height_root_ch: need_prev_normal = True break @@ -5622,7 +5629,7 @@ def get_all_baked_channel_images(tree): return images def is_layer_using_vector(layer, exclude_baked=False): - if (not exclude_baked and layer.use_baked) or layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'BACKFACE'}: + if (not exclude_baked and layer.use_baked) or layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT', 'AO'}: return True for ch in layer.channels: @@ -5636,7 +5643,7 @@ def is_layer_using_vector(layer, exclude_baked=False): return False def is_mask_using_vector(mask): - if mask.use_baked or mask.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'COLOR_ID', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: + if mask.use_baked or mask.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'COLOR_ID', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'}: return True return False @@ -7101,3 +7108,14 @@ def load_image(path, directory, check_existing=True): def get_active_tool_idname(): tools = bpy.context.workspace.tools return tools.from_space_view3d_mode(bpy.context.mode).idname + +def enable_eevee_ao(): + # Enable Eevee AO to make edge detect entity works + scene = bpy.context.scene + if is_bl_newer_than(2, 80) and not is_bl_newer_than(4, 2) and not scene.eevee.use_gtao: + scene.eevee.use_gtao = True + +def is_image_available_to_open(image): + # NOTE: Baked entity image is not available to open for now + return image.yia.is_image_atlas and not image.yua.is_udim_atlas and not image.y_bake_info.is_baked_entity and image.name not in {'Render Result', 'Viewer Node'} + diff --git a/input_outputs.py b/input_outputs.py index 11b80b86..244d1da4 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -879,7 +879,17 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) if is_bl_newer_than(2, 81) and layer.enable_uniform_scale and is_layer_using_vector(layer): dirty = create_prop_input(layer, 'uniform_scale_value', valid_inputs, input_index, dirty) input_index += 1 + + # Edge Detect + if layer.type == 'EDGE_DETECT': + dirty = create_prop_input(layer, 'edge_detect_radius', valid_inputs, input_index, dirty) + input_index += 1 + # AO + elif layer.type == 'AO': + dirty = create_prop_input(layer, 'ao_distance', valid_inputs, input_index, dirty) + input_index += 1 + # Channel prop inputs for i, ch in enumerate(layer.channels): if not get_channel_enabled(ch): continue @@ -1020,6 +1030,11 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) dirty = create_prop_input(mask, 'edge_detect_radius', valid_inputs, input_index, dirty) input_index += 1 + # AO + elif mask.type == 'AO': + dirty = create_prop_input(mask, 'ao_distance', valid_inputs, input_index, dirty) + input_index += 1 + # Tree input and outputs for i, ch in enumerate(layer.channels): root_ch = yp.channels[i] diff --git a/lib_281.blend b/lib_281.blend index 91b27b21516aeb48d1e494217b83baf138e43c2c..d1ed20f30371cf81f5e26c029028cd8f130dcb4b 100644 GIT binary patch delta 67239 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 delta 66647 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 R|LorRx$sBxb3=FC@PDSB?OFf; diff --git a/node_connections.py b/node_connections.py index 23752b7a..8b86f06d 100644 --- a/node_connections.py +++ b/node_connections.py @@ -1670,7 +1670,7 @@ def reconnect_source_internal_nodes(layer): if flip_y: rgb = create_link(tree, rgb, flip_y.inputs[0])[0] - if layer.type not in {'IMAGE', 'VCOL', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'}: + if layer.type not in {'IMAGE', 'VCOL', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE', 'EDGE_DETECT', 'AO'}: rgb_1 = source.outputs[1] alpha = get_essential_node(tree, ONE_VALUE)[0] alpha_1 = get_essential_node(tree, ONE_VALUE)[0] @@ -1687,7 +1687,7 @@ def reconnect_source_internal_nodes(layer): create_link(tree, rgb_1, end.inputs[2]) create_link(tree, alpha_1, end.inputs[3]) - if layer.type in {'IMAGE', 'VCOL', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'}: + if layer.type in {'IMAGE', 'VCOL', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE', 'EDGE_DETECT', 'AO'}: rgb, alpha = reconnect_all_modifier_nodes(tree, layer, rgb, alpha) @@ -1712,7 +1712,7 @@ def reconnect_mask_internal_nodes(mask, mask_source_index=0): if mask.type == 'MODIFIER' and mask.modifier_type in {'INVERT', 'CURVE'}: create_link(tree, start.outputs[0], source.inputs[1]) - elif mask.use_baked or mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT'}: + elif mask.use_baked or mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT', 'AO'}: create_link(tree, start.outputs[0], source.inputs[0]) val = source.outputs[mask_source_index] @@ -1814,7 +1814,20 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if tangent and 'Tangent' in bump_process.inputs: create_link(tree, tangent, bump_process.inputs['Tangent']) if bitangent and 'Bitangent' in bump_process.inputs: create_link(tree, bitangent, bump_process.inputs['Bitangent']) - if layer.type == 'HEMI': + # Edge Detect related + if layer.type == 'EDGE_DETECT': + edge_detect_radius_val = get_essential_node(tree, TREE_START).get(get_entity_input_name(layer, 'edge_detect_radius')) + if edge_detect_radius_val and 'Radius' in source.inputs: + create_link(tree, edge_detect_radius_val, source.inputs['Radius']) + + # AO Related + elif layer.type == 'AO': + ao_distance_val = get_essential_node(tree, TREE_START).get(get_entity_input_name(layer, 'ao_distance')) + if ao_distance_val and 'Distance' in source.inputs: + create_link(tree, ao_distance_val, source.inputs['Distance']) + + # Use previous normal + if layer.type in {'HEMI', 'EDGE_DETECT', 'AO'}: if layer.hemi_use_prev_normal and bump_process: create_link(tree, bump_process.outputs['Normal'], source.inputs['Normal']) elif 'Normal' in source.inputs: create_link(tree, get_essential_node(tree, GEOMETRY)['Normal'], source.inputs['Normal']) @@ -1865,7 +1878,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if 'Vector' in source.inputs: create_link(tree, vector, source.inputs['Vector']) - if layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX'}: + if layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'EDGE_DETECT', 'AO'}: if uv_neighbor: create_link(tree, vector, uv_neighbor.inputs[0]) @@ -1902,7 +1915,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): else: start_rgb = source.outputs[0] start_rgb_1 = None - if layer.type not in {'COLOR', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'} and len(source.outputs) > 1: + if layer.type not in {'COLOR', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE', 'EDGE_DETECT', 'AO'} and len(source.outputs) > 1: start_rgb_1 = source.outputs[1] # Alpha @@ -1926,7 +1939,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if linear: start_rgb = create_link(tree, start_rgb, linear.inputs[0])[0] if flip_y: start_rgb = create_link(tree, start_rgb, flip_y.inputs[0])[0] - if source_group and layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'}: + if source_group and layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE', 'EDGE_DETECT', 'AO'}: start_rgb_1 = source_group.outputs[2] start_alpha_1 = source_group.outputs[3] @@ -1944,15 +1957,15 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): tree, layer, start_rgb, start_alpha, mod_group ) - if layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'}: + if layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE', 'EDGE_DETECT', 'AO'}: mod_group_1 = nodes.get(layer.mod_group_1) start_rgb_1, start_alpha_1 = reconnect_all_modifier_nodes( tree, layer, source.outputs[1], get_essential_node(tree, ONE_VALUE)[0], mod_group_1 ) # UV neighbor vertex color - if layer.type in {'VCOL', 'GROUP', 'HEMI', 'OBJECT_INDEX'} and uv_neighbor: - if layer.type in {'VCOL', 'HEMI', 'OBJECT_INDEX'}: + if layer.type in {'VCOL', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'EDGE_DETECT', 'AO'} and uv_neighbor: + if layer.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'EDGE_DETECT', 'AO'}: create_link(tree, start_rgb, uv_neighbor.inputs[0]) if tangent and bitangent: @@ -2015,7 +2028,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): for i, mask in enumerate(layer.masks): # Get source output index mask_source_index = 0 - if not mask.use_baked and mask.type not in {'COLOR_ID', 'HEMI', 'OBJECT_INDEX', 'EDGE_DETECT'}: + if not mask.use_baked and mask.type not in {'COLOR_ID', 'HEMI', 'OBJECT_INDEX', 'EDGE_DETECT', 'AO'}: # Noise and voronoi output has flipped order since Blender 2.81 if is_bl_newer_than(2, 81) and mask.type == 'VORONOI' and mask.voronoi_feature == 'DISTANCE_TO_EDGE': mask_source_index = 'Distance' @@ -2090,8 +2103,14 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if edge_detect_radius_val and 'Radius' in mask_source.inputs: create_link(tree, edge_detect_radius_val, mask_source.inputs['Radius']) + # AO related + elif mask.type == 'AO': + ao_distance_val = get_essential_node(tree, TREE_START).get(get_entity_input_name(mask, 'ao_distance')) + if ao_distance_val and 'Distance' in mask_source.inputs: + create_link(tree, ao_distance_val, mask_source.inputs['Distance']) + # Hemi related - if mask.type == 'HEMI' and not mask.use_baked: #and 'Normal' in mask_source.inputs: + if mask.type in {'HEMI', 'EDGE_DETECT', 'AO'} and not mask.use_baked: #and 'Normal' in mask_source.inputs: if mask.hemi_use_prev_normal and bump_process: create_link(tree, bump_process.outputs['Normal'], mask_source.inputs['Normal']) elif 'Normal' in mask_source.inputs: create_link(tree, get_essential_node(tree, GEOMETRY)['Normal'], mask_source.inputs['Normal']) @@ -2105,7 +2124,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): # Mask start mask_vector = None mask_uv_name = mask.uv_name if not mask.use_baked or mask.baked_uv_name == '' else mask.baked_uv_name - if mask.use_baked or mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT'}: + if mask.use_baked or mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'AO'}: if mask.use_baked or mask.texcoord_type == 'UV': mask_vector = get_essential_node(tree, TREE_START).get(mask_uv_name + io_suffix['UV']) elif mask.texcoord_type == 'Decal': @@ -2153,7 +2172,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): mask_uv_neighbor = nodes.get(mask.uv_neighbor) if mask.texcoord_type != 'Layer' else uv_neighbor if mask_uv_neighbor: - if not mask.use_baked and mask.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT'}: + if not mask.use_baked and mask.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'AO'}: create_link(tree, mask_val, mask_uv_neighbor.inputs[0]) else: if mask_vector and mask.texcoord_type != 'Layer': @@ -2259,7 +2278,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): create_link(tree, mask_val, mask_mix.inputs[mmixcol1]) if root_ch.type == 'NORMAL' and root_ch.enable_smooth_bump: - if not mask.use_baked and mask.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT'}: + if not mask.use_baked and mask.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'AO'}: if mask_uv_neighbor: if 'Color2 n' in mask_mix.inputs: create_link(tree, mask_uv_neighbor.outputs['n'], mask_mix.inputs['Color2 n']) @@ -2376,7 +2395,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): # Get source output index source_index = 0 - if not layer.use_baked and layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE'}: + if not layer.use_baked and layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'HEMI', 'OBJECT_INDEX', 'MUSGRAVE', 'EDGE_DETECT', 'AO'}: # Noise and voronoi output has flipped order since Blender 2.81 if is_bl_newer_than(2, 81) and (layer.type == 'NOISE' or (layer.type == 'VORONOI' and layer.voronoi_feature not in {'DISTANCE_TO_EDGE', 'N_SPHERE_RADIUS'})): if ch.layer_input == 'RGB': @@ -2691,7 +2710,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): alpha_e = source_e.outputs[source_index+1] alpha_w = source_w.outputs[source_index+1] - elif layer.type in {'VCOL', 'HEMI', 'OBJECT_INDEX'} and uv_neighbor: + elif layer.type in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'EDGE_DETECT', 'AO'} and uv_neighbor: rgb_n = uv_neighbor.outputs['n'] rgb_s = uv_neighbor.outputs['s'] rgb_e = uv_neighbor.outputs['e'] diff --git a/subtree.py b/subtree.py index baa77f58..acd977cb 100644 --- a/subtree.py +++ b/subtree.py @@ -150,11 +150,11 @@ def enable_layer_source_tree(layer, rearrange=False): # Check if source tree is already available if layer.type in {'BACKGROUND', 'COLOR'}: return - if layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE'} and layer.source_group != '': return + if layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT'} and layer.source_group != '': return layer_tree = get_tree(layer) - if layer.type not in {'VCOL', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'BACKFACE'}: + if layer.type not in {'VCOL', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT'}: # Get current source for reference source_ref = layer_tree.nodes.get(layer.source) linear_ref = layer_tree.nodes.get(layer.linear) @@ -211,7 +211,7 @@ def enable_layer_source_tree(layer, rearrange=False): move_mod_group(layer, layer_tree, source_tree) # Create uv neighbor - if layer.type in {'VCOL', 'HEMI'}: + if layer.type in {'VCOL', 'HEMI', 'EDGE_DETECT'}: uv_neighbor = replace_new_node( layer_tree, layer, 'uv_neighbor', 'ShaderNodeGroup', 'Neighbor UV', lib.NEIGHBOR_FAKE, hard_replace=True @@ -294,12 +294,12 @@ def disable_layer_source_tree(layer, rearrange=True, force=False): if root_ch.type == 'NORMAL' and root_ch.enable_smooth_bump and get_channel_enabled(layer.channels[i], layer, root_ch) and is_height_process_needed(layer): smooth_bump_ch = root_ch - if (layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE'} and layer.source_group == '') or smooth_bump_ch: + if (layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT'} and layer.source_group == '') or smooth_bump_ch: return layer_tree = get_tree(layer) - if force or layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE'}: + if force or layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT'}: source_group = layer_tree.nodes.get(layer.source_group) if source_group: source_ref = source_group.node_tree.nodes.get(layer.source) diff --git a/ui.py b/ui.py index 76ef96ed..94ae8ac7 100644 --- a/ui.py +++ b/ui.py @@ -235,8 +235,10 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh unlink_op = 'wm.y_remove_channel_override_1_source' else: unlink_op = 'wm.y_remove_channel_override_source' - if image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel: - bi = image.y_bake_info + bi = image.y_bake_info + if (bi.is_baked and not bi.is_baked_channel and + (not bi.is_baked_entity or bi.bake_type in {'BEVEL_MASK', 'AO'}) # NOTE: Some baked type can come from entity + ): #if image.yia.is_image_atlas or image.yua.is_udim_atlas: # col.label(text=image.name + ' (Baked)', icon_value=lib.get_icon('image')) #elif show_datablock: col.template_ID(source, "image", unlink=unlink_op) @@ -642,6 +644,34 @@ def draw_edge_detect_props(layer, source, layout): row.label(text='Radius:') draw_input_prop(row, layer, 'edge_detect_radius') + row = col.row() + row.label(text='Use Previous Normal:') + row.prop(layer, 'hemi_use_prev_normal', text='') + +def draw_ao_props(layer, source, layout): + col = layout.column() + + row = col.row() + row.label(text='Distance:') + draw_input_prop(row, layer, 'ao_distance') + + # NOTE: AO samples is a bit irrelevant + #row = col.row() + #row.label(text='Samples:') + #row.prop(source, 'samples', text='') + + row = col.row() + row.label(text='Inside:') + row.prop(source, 'inside', text='') + + row = col.row() + row.label(text='Only Local (Cycles Only):') + row.prop(source, 'only_local', text='') + + row = col.row() + row.label(text='Use Previous Normal:') + row.prop(layer, 'hemi_use_prev_normal', text='') + def draw_inbetween_modifier_mask_props(layer, source, layout): col = layout.column() if layer.modifier_type == 'CURVE': @@ -1503,6 +1533,8 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i suffix = 'color' elif layer.type == 'HEMI': suffix = 'hemi' + elif layer.type in {'EDGE_DETECT', 'AO'}: + suffix = 'edge_detect' elif layer.type == 'VCOL': suffix = 'vertex_color' else: suffix = 'texture' @@ -1537,6 +1569,8 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i icon_value = lib.get_icon('group') elif layer.type == 'HEMI': icon_value = lib.get_icon('hemi') + elif layer.type in {'EDGE_DETECT', 'AO'}: + icon_value = lib.get_icon('edge_detect') else: icon_value = lib.get_icon('texture') #if layer.type == 'COLOR' and not lui.expand_source: @@ -1574,9 +1608,17 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i draw_vcol_props(ccol, vcol, layer) elif layer.type == 'HEMI': draw_hemi_props(layer, source, ccol) + elif layer.type == 'EDGE_DETECT': + draw_edge_detect_props(layer, source, ccol) + elif layer.type == 'AO': + draw_ao_props(layer, source, ccol) else: draw_tex_props(source, ccol, entity=layer) - if layer.baked_source != '': + if layer.baked_source == '' and layer.type in {'EDGE_DETECT', 'HEMI', 'AO'}: + rrrow = rrcol.row(align=True) + rrrow.operator("wm.y_bake_entity_to_image", text='Bake '+mask_type_labels[layer.type]+' as Image', icon_value=lib.get_icon('bake')) + + elif layer.baked_source != '': rrcol.context_pointer_set('entity', layer) rrcol.context_pointer_set('layer', layer) rrrow = rrcol.row(align=True) @@ -2753,7 +2795,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): mask_icon = 'hemi' elif mask.type == 'OBJECT_INDEX': mask_icon = 'object_index' - elif mask.type == 'EDGE_DETECT': + elif mask.type in {'EDGE_DETECT', 'AO'}: mask_icon = 'edge_detect' elif mask.type == 'COLOR_ID': mask_icon = 'color' @@ -2889,6 +2931,8 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): draw_colorid_props(mask, mask_source, rbcol) elif mask.type == 'EDGE_DETECT': draw_edge_detect_props(mask, mask_source, rbcol) + elif mask.type == 'AO': + draw_ao_props(mask, mask_source, rbcol) elif mask.type == 'MODIFIER': draw_inbetween_modifier_mask_props(mask, mask_source, rbcol) elif mask.type == 'VCOL': @@ -2896,7 +2940,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): else: draw_tex_props(mask_source, rbcol, entity=mask, show_source_input=True) rrcol.context_pointer_set('entity', mask) - if mask.baked_source == '' and mask.type in {'EDGE_DETECT'}: + if mask.baked_source == '' and mask.type in {'EDGE_DETECT', 'HEMI', 'AO'}: rrrow = rrcol.row(align=True) rrrow.label(text='', icon='BLANK1') rrrow.operator("wm.y_bake_entity_to_image", text='Bake '+mask_type_labels[mask.type]+' as Image', icon_value=lib.get_icon('bake')) @@ -2909,11 +2953,11 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' rrrow.operator("wm.y_remove_baked_entity", text='', icon=icon) - if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: + if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'}: rrcol.separator() # Vector row - if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'}: + if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'}: srow = split_layout(rrcol, 0.35, align=False) srow.active = not mask.use_baked @@ -3340,14 +3384,14 @@ def draw_layers_ui(context, layout, node): # Check layer and mask uv for layer in yp.layers: - if layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'COLOR', 'BACKGROUND', 'EDGE_DETECT', 'MODIFIER'} and layer.uv_name != '': + if layer.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'COLOR', 'BACKGROUND', 'EDGE_DETECT', 'MODIFIER', 'AO'} and layer.uv_name != '': uv_layer = uv_layers.get(layer.uv_name) if not uv_layer and layer.uv_name not in uv_missings: uv_missings.append(layer.uv_name) #entities.append(layer.name) for mask in layer.masks: - if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER'} and mask.uv_name != '': + if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'} and mask.uv_name != '': uv_layer = uv_layers.get(mask.uv_name) if not uv_layer and mask.uv_name not in uv_missings: uv_missings.append(mask.uv_name) @@ -3568,14 +3612,17 @@ def draw_layers_ui(context, layout, node): # Check if AO is enabled or not scene = bpy.context.scene - if is_bl_newer_than(2, 93) and not scene.eevee.use_gtao and scene.render.engine != 'BLENDER_EEVEE_NEXT': - edge_detect_found = False + if is_bl_newer_than(2, 93) and not is_bl_newer_than(4, 2) and not scene.eevee.use_gtao: + ao_found = False for l in yp.layers: + if l.type in {'EDGE_DETECT', 'AO'} and l.enable: + ao_found = True + break for m in l.masks: - if m.type == 'EDGE_DETECT' and get_mask_enabled(m, l): - edge_detect_found = True + if m.type in {'EDGE_DETECT', 'AO'} and get_mask_enabled(m, l): + ao_found = True break - if edge_detect_found: + if ao_found: col.alert = True col.operator('wm.y_fix_edge_detect_ao', text='Fix EEVEE Edge Detect AO', icon='ERROR') col.alert = False @@ -4697,7 +4744,7 @@ def layer_listing(layout, layer, show_expand=False): row.label(text='', icon_value=lib.get_icon('hemi')) elif m.type == 'OBJECT_INDEX': row.label(text='', icon_value=lib.get_icon('object_index')) - elif m.type == 'EDGE_DETECT': + elif m.type in {'EDGE_DETECT', 'AO'}: row.label(text='', icon_value=lib.get_icon('edge_detect')) elif m.type == 'COLOR_ID': row.label(text='', icon_value=lib.get_icon('color')) @@ -4725,7 +4772,7 @@ def layer_listing(layout, layer, show_expand=False): row.prop(m, 'active_edit', text='', emboss=False, icon_value=lib.get_icon('hemi')) elif m.type == 'OBJECT_INDEX': row.prop(m, 'active_edit', text='', emboss=False, icon_value=lib.get_icon('object_index')) - elif m.type == 'EDGE_DETECT': + elif m.type in {'EDGE_DETECT', 'AO'}: row.prop(m, 'active_edit', text='', emboss=False, icon_value=lib.get_icon('edge_detect')) elif m.type == 'COLOR_ID': row.prop(m, 'active_edit', text='', emboss=False, icon_value=lib.get_icon('color')) @@ -5001,7 +5048,7 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn row.prop(mask, 'name', text='', emboss=False, icon_value=lib.get_icon('hemi')) elif mask.type == 'OBJECT_INDEX': row.prop(mask, 'name', text='', emboss=False, icon_value=lib.get_icon('object_index')) - elif mask.type == 'EDGE_DETECT': + elif mask.type in {'EDGE_DETECT', 'AO'}: row.prop(mask, 'name', text='', emboss=False, icon_value=lib.get_icon('edge_detect')) elif mask.type == 'COLOR_ID': row.prop(mask, 'name', text='', emboss=False, icon_value=lib.get_icon('color')) @@ -5454,6 +5501,10 @@ def draw(self, context): col.separator() col.operator("wm.y_new_layer", icon_value=lib.get_icon('hemi'), text='Fake Lighting').type = 'HEMI' + if is_bl_newer_than(2, 93): + col.separator() + col.operator("wm.y_new_layer", icon_value=lib.get_icon('edge_detect'), text='Ambient Occlusion').type = 'AO' + col.operator("wm.y_new_layer", text='Edge Detect').type = 'EDGE_DETECT' col = row.column() col.label(text='Bake as Layer:') @@ -5724,7 +5775,7 @@ def draw(self, context): draw_input_prop(col, ch, 'intensity_value', text='') def has_layer_input_options(layer): - return (layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'MUSGRAVE'} and not + return (layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'MUSGRAVE', 'EDGE_DETECT', 'AO'} and not (is_bl_newer_than(2, 81) and layer.type == 'VORONOI' and layer.voronoi_feature in {'DISTANCE_TO_EDGE', 'N_SPHERE_RADIUS'})) class YLayerChannelInputMenu(bpy.types.Menu): @@ -6308,7 +6359,9 @@ def draw(self, context): new_mask_button(col, 'wm.y_new_layer_mask', 'Object Index', otype='OBJECT_INDEX', lib_icon='object_index') new_mask_button(col, 'wm.y_new_layer_mask', 'Backface', otype='BACKFACE', lib_icon='backface') if is_bl_newer_than(2, 93): - new_mask_button(col, 'wm.y_new_layer_mask', 'Edge Detect', otype='EDGE_DETECT', lib_icon='edge_detect') + col.separator() + new_mask_button(col, 'wm.y_new_layer_mask', 'Ambient Occlusion', otype='AO', lib_icon='edge_detect') + new_mask_button(col, 'wm.y_new_layer_mask', 'Edge Detect', otype='EDGE_DETECT') col = row.column(align=True) col.label(text='Bake as Mask:') @@ -6794,6 +6847,12 @@ def draw(self, context): icon = 'RADIOBUT_ON' if layer.type == 'HEMI' else 'RADIOBUT_OFF' col.operator("wm.y_replace_layer_type", icon=icon, text='Fake Lighting').type = 'HEMI' + icon = 'RADIOBUT_ON' if layer.type == 'AO' else 'RADIOBUT_OFF' + col.operator("wm.y_replace_layer_type", icon=icon, text='Ambient Occlusion').type = 'AO' + + icon = 'RADIOBUT_ON' if layer.type == 'EDGE_DETECT' else 'RADIOBUT_OFF' + col.operator("wm.y_replace_layer_type", icon=icon, text='Edge Detect').type = 'EDGE_DETECT' + class YMaskTypeMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_mask_type_menu" bl_label = "Mask Type Menu" @@ -6912,6 +6971,9 @@ def draw(self, context): icon = 'RADIOBUT_ON' if mask.type == 'BACKFACE' else 'RADIOBUT_OFF' col.operator("wm.y_replace_mask_type", icon=icon, text='Backface').type = 'BACKFACE' + icon = 'RADIOBUT_ON' if mask.type == 'AO' else 'RADIOBUT_OFF' + col.operator("wm.y_replace_mask_type", icon=icon, text='Ambient Occlusion').type = 'AO' + icon = 'RADIOBUT_ON' if mask.type == 'EDGE_DETECT' else 'RADIOBUT_OFF' col.operator("wm.y_replace_mask_type", icon=icon, text='Edge Detect').type = 'EDGE_DETECT' diff --git a/versioning.py b/versioning.py index 1c8d45c1..e09c6418 100644 --- a/versioning.py +++ b/versioning.py @@ -765,6 +765,44 @@ def update_yp_tree(tree): if len(ch.modifiers) == 0 and not ch.enable_transition_bump and not ch.enable_transition_ramp and not ch.enable_transition_ao: ch.expand_content = False + # Version 2.2.1 has flag prop for baked entity + if version_tuple(yp.version) < (2, 2, 1): + for layer in yp.layers: + source = get_layer_source(layer, get_baked=True) + if source and source.image: + image = source.image + if not image.yia.is_image_atlas and not image.yua.is_udim_atlas: + image.y_bake_info.is_baked_entity = True + print('INFO: Image '+image.name+' is marked as baked entity image!') + else: + if image.yia.is_image_atlas: + segment = image.yia.segments.get(layer.baked_segment_name) + elif image.yua.is_udim_atlas: + segment = image.yua.segments.get(layer.baked_segment_name) + else: segment = None + + if segment: + segment.bake_info.is_baked_entity = True + print('INFO: One image segment from '+image.name+' is marked as baked entity image!') + + for mask in layer.masks: + source = get_mask_source(mask, get_baked=True) + if source and source.image: + image = source.image + if not image.yia.is_image_atlas and not image.yua.is_udim_atlas: + image.y_bake_info.is_baked_entity = True + print('INFO: Image '+image.name+' is marked as baked entity image!') + else: + if image.yia.is_image_atlas: + segment = image.yia.segments.get(mask.baked_segment_name) + elif image.yua.is_udim_atlas: + segment = image.yua.segments.get(mask.baked_segment_name) + else: segment = None + + if segment: + segment.bake_info.is_baked_entity = True + print('INFO: One image segment from '+image.name+' is marked as baked entity image!') + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 88c121a1dfc500ff633cf2df522ab1a8738e21c3 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 17 Mar 2025 00:23:56 +0700 Subject: [PATCH 102/283] Forgot to add `not` --- common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.py b/common.py index 01595fc8..b7de75cb 100644 --- a/common.py +++ b/common.py @@ -7117,5 +7117,5 @@ def enable_eevee_ao(): def is_image_available_to_open(image): # NOTE: Baked entity image is not available to open for now - return image.yia.is_image_atlas and not image.yua.is_udim_atlas and not image.y_bake_info.is_baked_entity and image.name not in {'Render Result', 'Viewer Node'} + return not image.yia.is_image_atlas and not image.yua.is_udim_atlas and not image.y_bake_info.is_baked_entity and image.name not in {'Render Result', 'Viewer Node'} From e6f4e69ce3b1d42886b75d3033a645ee89106808 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 19 Mar 2025 02:27:00 +0700 Subject: [PATCH 103/283] Hack: Force material active paint slot to update if necessary (Fix #254) --- Root.py | 33 +++++++++++++++++++++++++++++++++ common.py | 5 ++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Root.py b/Root.py index cb1f46b4..4a9ab8a7 100644 --- a/Root.py +++ b/Root.py @@ -4079,6 +4079,8 @@ class YPaintWMProps(bpy.types.PropertyGroup): brush_asset_caches : CollectionProperty(type=YPaintBrushAssetCache) + correct_paint_image_name : StringProperty(default='') + class YPaintSceneProps(bpy.types.PropertyGroup): ori_display_device : StringProperty(default='') ori_view_transform : StringProperty(default='') @@ -4190,6 +4192,9 @@ def ypaint_last_object_update(scene): obj.yp.ori_offset_v = mirror.offset_v except: print('EXCEPTIION: Cannot remember original mirror offset!') + # HACK: Just in case active image is not correct + ypwm.correct_paint_image_name = image.name + refresh_temp_uv(obj, src_of_img) # Into edit mode @@ -4223,6 +4228,32 @@ def ypaint_last_object_update(scene): if ypwm.last_mode != obj.mode: ypwm.last_mode = obj.mode +@persistent +def ypaint_missmatch_paint_slot_hack(scene): + # HACK: Force material active slot to update if necessary + wmyp = bpy.context.window_manager.ypprops + if wmyp.correct_paint_image_name != '': + + if scene.tool_settings.image_paint.mode == 'MATERIAL': + + mat = get_active_material() + + try: active_img = mat.texture_paint_images[mat.paint_active_slot] + except: active_img = None + + try: correct_img = bpy.data.images.get(wmyp.correct_paint_image_name) + except: correct_img = None + + if active_img and correct_img and active_img != correct_img: + for idx, img in enumerate(mat.texture_paint_images): + if img == None: continue + if img.name == correct_img.name: + try: mat.paint_active_slot = idx + except: print('EXCEPTIION: Cannot set active paint slot image!') + break + + wmyp.correct_paint_image_name = '' + @persistent def ypaint_force_update_on_anim(scene): #print(scene.frame_current) @@ -4327,6 +4358,7 @@ def register(): # Handlers if is_bl_newer_than(2, 80): bpy.app.handlers.depsgraph_update_post.append(ypaint_last_object_update) + bpy.app.handlers.depsgraph_update_post.append(ypaint_missmatch_paint_slot_hack) else: bpy.app.handlers.scene_update_pre.append(ypaint_last_object_update) bpy.app.handlers.scene_update_pre.append(ypaint_hacks_and_scene_updates) @@ -4371,6 +4403,7 @@ def unregister(): # Remove handlers if is_bl_newer_than(2, 80): bpy.app.handlers.depsgraph_update_post.remove(ypaint_last_object_update) + bpy.app.handlers.depsgraph_update_post.remove(ypaint_missmatch_paint_slot_hack) else: bpy.app.handlers.scene_update_pre.remove(ypaint_hacks_and_scene_updates) bpy.app.handlers.scene_update_pre.remove(ypaint_last_object_update) diff --git a/common.py b/common.py index b7de75cb..d85cf371 100644 --- a/common.py +++ b/common.py @@ -4671,6 +4671,7 @@ def set_active_paint_slot_entity(yp): obj = bpy.context.object scene = bpy.context.scene root_tree = yp.id_data + wmyp = bpy.context.window_manager.ypprops # Multiple materials will use single active image instead active material image # since it's the only way texture paint mode won't mess with other material image @@ -4801,8 +4802,10 @@ def set_active_paint_slot_entity(yp): if img == None: continue if img.name == image.name: mat.paint_active_slot = idx + # HACK: Just in case paint slot does not update + wmyp.correct_paint_image_name = img.name break - + else: scene.tool_settings.image_paint.mode = 'IMAGE' scene.tool_settings.image_paint.canvas = image From 3f2d4a153ba3a18ca5f4be6f1573a9f53549ba5a Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 19 Mar 2025 15:17:05 +0700 Subject: [PATCH 104/283] Fix: Open image as layer channel source does not update subitems --- Layer.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Layer.py b/Layer.py index f345e11c..10f82572 100644 --- a/Layer.py +++ b/Layer.py @@ -1774,6 +1774,9 @@ def execute(self, context): if ch.normal_map_type == 'NORMAL_MAP': ch.normal_map_type = 'BUMP_MAP' + # Update list items + ListItem.refresh_list_items(yp) + # Update UI wm.ypui.need_update = True print('INFO: Image(s) opened in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') @@ -1926,6 +1929,9 @@ def execute(self, context): if ch.normal_map_type == 'BUMP_MAP': ch.normal_map_type = 'NORMAL_MAP' + # Update list items + ListItem.refresh_list_items(yp) + # Update UI wm.ypui.need_update = True print('INFO: Image(s) opened in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') @@ -2998,6 +3004,9 @@ def execute(self, context): ch.override_1_type = 'IMAGE' ch.active_edit_1 = True + # Update list items + ListItem.refresh_list_items(yp) + # Update UI wm.ypui.need_update = True print('INFO: Data is opened in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') @@ -3178,6 +3187,9 @@ def execute(self, context): ch.override_type = self.type ch.active_edit = self.type in {'IMAGE', 'VCOL'} + # Update list items + ListItem.refresh_list_items(yp) + # Update UI wm.ypui.need_update = True print('INFO: Data is opened in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') From 2be00f0d3747b921eb5d74b93144b7bdb4b753df Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 20 Mar 2025 03:30:22 +0700 Subject: [PATCH 105/283] Add dither option to channel baking for reducing color banding --- Bake.py | 28 ++++++++++- BakeInfo.py | 12 +++++ bake_common.py | 128 ++++++++++++++++++++++++++++++++++++++++++++++--- image_ops.py | 118 ++++++++++++++++++++++++--------------------- 4 files changed, 223 insertions(+), 63 deletions(-) diff --git a/Bake.py b/Bake.py index 77cc250c..d6ce4d1a 100644 --- a/Bake.py +++ b/Bake.py @@ -1283,6 +1283,18 @@ class YBakeChannels(bpy.types.Operator, BaseBakeOperator): description = 'Use float image for baked displacement', default = False ) + + use_dithering : BoolProperty( + name = 'Use Dithering', + description = 'Use dithering for less banding color', + default = False + ) + + dither_intensity : FloatProperty( + name = 'Dither Intensity', + description = 'Amount of dithering noise added to the rendered image to break up banding', + default=1.0, min=0.0, max=2.0, subtype='FACTOR' + ) bake_disabled_layers : BoolProperty( name = 'Bake Disabled Layers', @@ -1472,6 +1484,16 @@ def draw(self, context): ccol.prop(self, 'fxaa', text='Use FXAA') if is_bl_newer_than(2, 81): ccol.prop(self, 'denoise', text='Use Denoise') + + any_color_channel = any([c for c in self.channels if c.type == 'RGB' and c.colorspace == 'SRGB' and c.use_clamp]) + if any_color_channel: + if not self.use_dithering: + ccol.prop(self, 'use_dithering', text='Use Dithering') + if self.use_dithering: + row = split_layout(ccol, 0.55) + row.prop(self, 'use_dithering', text='Use Dithering') + row.prop(self, 'dither_intensity', text='') + ccol.prop(self, 'force_bake_all_polygons') ccol.prop(self, 'bake_disabled_layers') @@ -1626,7 +1648,7 @@ def execute(self, context): for ch in self.channels: ch.no_layer_using = not is_any_layer_using_channel(ch, node) if not ch.no_layer_using: - use_hdr = not ch.use_clamp + use_hdr = not ch.use_clamp or (self.use_dithering and ch.type == 'RGB' and ch.colorspace == 'SRGB') bake_channel( self.uv_map, mat, node, ch, width, height, use_hdr=use_hdr, force_use_udim=self.use_udim, tilenums=tilenums, interpolation=self.interpolation, @@ -1641,6 +1663,10 @@ def execute(self, context): baked = tree.nodes.get(ch.baked) if baked and baked.image: + # Dithering + if ch.type == 'RGB' and ch.colorspace == 'SRGB' and self.use_dithering and ch.use_clamp: + dither_image(baked.image, dither_intensity=self.dither_intensity, alpha_aware=ch.enable_alpha) + # Denoise if self.denoise and is_bl_newer_than(2, 81) and ch.type != 'NORMAL': denoise_image(baked.image) diff --git a/BakeInfo.py b/BakeInfo.py index b78372e6..00fe9601 100644 --- a/BakeInfo.py +++ b/BakeInfo.py @@ -171,6 +171,18 @@ class YBakeInfoProps(bpy.types.PropertyGroup): default = False ) + use_dithering : BoolProperty( + name = 'Use Dithering', + description = 'Use dithering for less banding color', + default = False + ) + + dither_intensity : FloatProperty( + name = 'Dither Intensity', + description = 'Amount of dithering noise added to the rendered image to break up banding', + default=1.0, min=0.0, max=2.0, subtype='FACTOR' + ) + bake_disabled_layers : BoolProperty( name = 'Bake Disabled Layers', description = 'Take disabled layers into account when baking', diff --git a/bake_common.py b/bake_common.py index 52b0bacb..f0de9d91 100644 --- a/bake_common.py +++ b/bake_common.py @@ -3,7 +3,7 @@ from .common import * from .input_outputs import * from .node_connections import * -from . import lib, Layer, ImageAtlas, UDIM +from . import lib, Layer, ImageAtlas, UDIM, image_ops BL28_HACK = True @@ -1003,6 +1003,122 @@ def denoise_image(image): print('DENOISE:', image.name, 'denoise pass is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') return image +def dither_image(image, dither_intensity=1.0, alpha_aware=True): + if not image.is_float: + print('DITHER: Cannot dither image \''+image.name+'\' since it\'s not a float image') + return + + T = time.time() + print('DITHER: Doing dithering pass on', image.name + '...') + + # Preparing settings + book = prepare_composite_settings(use_hdr=image.is_float) + scene = bpy.context.scene + + # Set render to byte image + scene.render.image_settings.file_format = 'PNG' + scene.render.image_settings.color_mode = 'RGBA' + scene.render.image_settings.color_depth = '8' + scene.render.dither_intensity = dither_intensity + + # Set up compositor + tree = scene.node_tree + composite = [n for n in tree.nodes if n.type == 'COMPOSITE'][0] + image_node = tree.nodes.new('CompositorNodeImage') + image_node.image = image + + if image.source == 'TILED': + tilenums = [tile.number for tile in image.tiles] + else: tilenums = [1001] + + prefix_filename = 'DITHER_RENDER___' + temp_images = [] + temp_filepaths = [] + + # Render dithered byte images + for i, tilenum in enumerate(tilenums): + + # Swap tile to 1001 to access the data + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + + # Get temporary filepath + filepath = os.path.join(tempfile.gettempdir(), prefix_filename+str(tilenum)+'.png') + temp_filepaths.append(filepath) + + # Set render resolution + scene.render.resolution_x = image.size[0] + scene.render.resolution_y = image.size[1] + + # Connect image's rgb + tree.links.new(image_node.outputs[0], composite.inputs[0]) + + # Disable alpha is necesarry if image has alpha + if alpha_aware: + composite.use_alpha = False + + # Render image! + bpy.ops.render.render() + + # Save the image + render_result = next(img for img in bpy.data.images if img.type == "RENDER_RESULT") + render_result.save_render(filepath) + temp_image = bpy.data.images.load(filepath) + temp_images.append(temp_image) + + if alpha_aware: + composite.use_alpha = True + + # Render alpha image! + bpy.ops.render.render() + + # Save alpha image + alpha_filepath = os.path.join(tempfile.gettempdir(), prefix_filename+str(tilenum)+'_ALPHA.png') + render_result = next(img for img in bpy.data.images if img.type == "RENDER_RESULT") + render_result.save_render(alpha_filepath) + alpha_image = bpy.data.images.load(alpha_filepath) + + copy_image_channel_pixels(alpha_image, temp_image, 3, 3) + + # Remove alpha image + remove_datablock(bpy.data.images, alpha_image) + os.remove(alpha_filepath) + + # Swap back the tile + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + + # Convert input image to byte + image = image_ops.toggle_image_bit_depth(image, no_copy=True, force_srgb=True) + + # Copy images + for i, tilenum in enumerate(tilenums): + + # Swap tile to 1001 to access the data + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + + # Get temporary image + temp_image = temp_images[i] + filepath = temp_filepaths[i] + + # Copy image pixels + copy_image_pixels(temp_image, image) + + # Remove temp image + remove_datablock(bpy.data.images, temp_image) + os.remove(filepath) + + # Swap back the tile + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + + # Recover settings + recover_composite_settings(book) + + print('DENOISE:', image.name, 'dithering pass is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') + return image + def blur_image(image, alpha_aware=True, factor=1.0, samples=512, bake_device='CPU'): T = time.time() print('BLUR: Doing Blur pass on', image.name + '...') @@ -1589,7 +1705,8 @@ def bake_channel( # Create new udim image img = bpy.data.images.new( name=img_name, width=width, height=height, - alpha=True, tiled=True + alpha=True, tiled=True, + float_buffer = (root_ch.type == 'NORMAL' and use_float_for_normal) or use_hdr ) # Fill tiles @@ -1607,7 +1724,8 @@ def bake_channel( else: # Create new standard image img = bpy.data.images.new( - name=img_name, width=width, height=height, alpha=True + name=img_name, width=width, height=height, alpha=True, + float_buffer = (root_ch.type == 'NORMAL' and use_float_for_normal) or use_hdr ) img.generated_type = 'BLANK' @@ -1623,10 +1741,6 @@ def bake_channel( ): img.filepath = filepath - # Use hdr - if (root_ch.type == 'NORMAL' and use_float_for_normal) or use_hdr: - img.use_generated_float = True - # Set colorspace to linear if root_ch.colorspace == 'LINEAR' or root_ch.type == 'NORMAL' or (root_ch.type != 'NORMAL' and use_hdr): img.colorspace_settings.name = get_noncolor_name() diff --git a/image_ops.py b/image_ops.py index cc0d1a70..efe4de59 100644 --- a/image_ops.py +++ b/image_ops.py @@ -1192,77 +1192,85 @@ def execute(self, context): ypui.refresh_image_hack = False return {'FINISHED'} -class YConvertImageBitDepth(bpy.types.Operator): - """Convert Image Bit Depth""" - bl_idname = "image.y_convert_image_bit_depth" - bl_label = "Convert Image Bit Depth" - bl_options = {'REGISTER', 'UNDO'} +def toggle_image_bit_depth(image, no_copy=False, force_srgb=False): - @classmethod - def poll(cls, context): - return hasattr(context, 'image') and context.image + if image.yua.is_udim_atlas or image.yia.is_image_atlas: + self.report({'ERROR'}, 'Cannot convert image atlas segment to different bit depth!') + return {'CANCELLED'} - def execute(self, context): - node = get_active_ypaint_node() - yp = node.node_tree.yp + # Create new image based on original image but with different bit depth + if image.source == 'TILED': - image = context.image + # Make sure image has filepath + if image.filepath == '': UDIM.initial_pack_udim(image) - if image.yua.is_udim_atlas or image.yia.is_image_atlas: - self.report({'ERROR'}, 'Cannot convert image atlas segment to different bit depth!') - return {'CANCELLED'} + tilenums = [tile.number for tile in image.tiles] + new_image = bpy.data.images.new( + image.name, width=image.size[0], height=image.size[1], + alpha=True, float_buffer=not image.is_float, tiled=True + ) - # Create new image based on original image but with different bit depth - if image.source == 'TILED': + # Fill tiles + color = (0, 0, 0, 0) + for tilenum in tilenums: + ori_width = image.tiles.get(tilenum).size[0] + ori_height = image.tiles.get(tilenum).size[1] + UDIM.fill_tile(new_image, tilenum, color, ori_width, ori_height) + UDIM.initial_pack_udim(new_image, color) - # Make sure image has filepath - if image.filepath == '': UDIM.initial_pack_udim(image) + else: + new_image = bpy.data.images.new( + image.name, width=image.size[0], height=image.size[1], + alpha=True, float_buffer=not image.is_float + ) - tilenums = [tile.number for tile in image.tiles] - new_image = bpy.data.images.new( - image.name, width=image.size[0], height=image.size[1], - alpha=True, float_buffer=not image.is_float, tiled=True - ) + if image.filepath != '': + new_image.filepath = image.filepath - # Fill tiles - color = (0, 0, 0, 0) - for tilenum in tilenums: - ori_width = image.tiles.get(tilenum).size[0] - ori_height = image.tiles.get(tilenum).size[1] - UDIM.fill_tile(new_image, tilenum, color, ori_width, ori_height) - UDIM.initial_pack_udim(new_image, color) + if force_srgb: + new_image.colorspace_settings.name = get_srgb_name() + else: new_image.colorspace_settings.name = image.colorspace_settings.name + # Copy image pixels + if no_copy == False: + if image.source == 'TILED': + UDIM.copy_udim_pixels(image, new_image) + else: copy_image_pixels(image, new_image) + + # Pack image + if image.packed_file and image.source != 'TILED': + if is_bl_newer_than(2, 80): + new_image.pack() else: - new_image = bpy.data.images.new( - image.name, width=image.size[0], height=image.size[1], - alpha=True, float_buffer=not image.is_float - ) + if new_image.is_float: + pack_float_image(new_image) + else: new_image.pack(as_png=True) - if image.filepath != '': - new_image.filepath = image.filepath + # HACK: Float image need to be reloaded after packing to be showed correctly + if new_image.is_float: + new_image.reload() - new_image.colorspace_settings.name = image.colorspace_settings.name + # Replace image + replace_image(image, new_image) - # Copy image pixels - if image.source == 'TILED': - UDIM.copy_udim_pixels(image, new_image) - else: copy_image_pixels(image, new_image) + return new_image - # Pack image - if image.packed_file and image.source != 'TILED': - if is_bl_newer_than(2, 80): - new_image.pack() - else: - if new_image.is_float: - pack_float_image(new_image) - else: new_image.pack(as_png=True) +class YConvertImageBitDepth(bpy.types.Operator): + """Convert Image Bit Depth""" + bl_idname = "image.y_convert_image_bit_depth" + bl_label = "Convert Image Bit Depth" + bl_options = {'REGISTER', 'UNDO'} - # HACK: Float image need to be reloaded after packing to be showed correctly - if new_image.is_float: - new_image.reload() + @classmethod + def poll(cls, context): + return hasattr(context, 'image') and context.image - # Replace image - replace_image(image, new_image) + def execute(self, context): + node = get_active_ypaint_node() + yp = node.node_tree.yp + + image = context.image + toggle_image_bit_depth(image) # Update image editor by setting active layer index yp.active_layer_index = yp.active_layer_index From 81b3c77b10ee11cddbae90557acfcadcf7f1443f Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 20 Mar 2025 03:49:27 +0700 Subject: [PATCH 106/283] Fix for legacy blenders --- bake_common.py | 10 +++++++--- ui.py | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/bake_common.py b/bake_common.py index f0de9d91..9976dd8f 100644 --- a/bake_common.py +++ b/bake_common.py @@ -855,7 +855,7 @@ def prepare_composite_settings(res_x=1024, res_y=1024, use_hdr=False): book['ori_scene_name'] = bpy.context.scene.name # Remember active object and view layer - book['ori_viewlayer'] = bpy.context.window.view_layer.name if bpy.context.window.view_layer and is_bl_newer_than(2, 80) else '' + book['ori_viewlayer'] = bpy.context.window.view_layer.name if is_bl_newer_than(2, 80) and bpy.context.window.view_layer else '' book['ori_object'] = bpy.context.object.name if bpy.context.object else '' # Check if original viewport is using camera view @@ -864,7 +864,9 @@ def prepare_composite_settings(res_x=1024, res_y=1024, use_hdr=False): # Create new temporary scene scene = bpy.data.scenes.new(name='TEMP_COMPOSITE_SCENE') - bpy.context.window.scene = scene + if is_bl_newer_than(2, 80): + bpy.context.window.scene = scene + else: bpy.context.screen.scene = scene # Set up render settings scene.cycles.samples = 1 @@ -912,7 +914,9 @@ def recover_composite_settings(book): # Go back to original scene scene = bpy.data.scenes.get(book['ori_scene_name']) - bpy.context.window.scene = scene + if is_bl_newer_than(2, 80): + bpy.context.window.scene = scene + else: bpy.context.screen.scene = scene # Recover camera view if book['ori_camera_view']: diff --git a/ui.py b/ui.py index 94ae8ac7..982ca484 100644 --- a/ui.py +++ b/ui.py @@ -4118,7 +4118,8 @@ def main_draw(self, context): if (baked_found or yp.use_baked) and not group_tree.users > 1: rrow = row.row(align=True) - rrow.alignment = 'RIGHT' + if is_bl_newer_than(2, 80): + rrow.alignment = 'RIGHT' rrow.operator('wm.y_bake_channels', text='Rebake', icon_value=lib.get_icon('bake')).only_active_channel = False rrow.separator() rrow.prop(yp, 'use_baked', toggle=True, text='Use Baked') From 10c2ad222ceaedcb12fff0ecd7c04536e6d56af7 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 22 Mar 2025 17:27:30 +0700 Subject: [PATCH 107/283] Make layer group channels UI more consistent --- ui.py | 356 ++++++++++++++++++++++++++++------------------------------ 1 file changed, 172 insertions(+), 184 deletions(-) diff --git a/ui.py b/ui.py index 982ca484..9aea21e6 100644 --- a/ui.py +++ b/ui.py @@ -1799,6 +1799,8 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i layout.separator() def get_layer_channel_input_label(layer, ch, source=None): + yp = layer.id_data.yp + if ch.override: if not source: source = get_channel_source(ch, layer) label = 'Custom' @@ -1815,6 +1817,9 @@ def get_layer_channel_input_label(layer, ch, source=None): # else: # #label += ' Color' # label = 'Color' + elif layer.type == 'GROUP': + root_ch = yp.channels[get_layer_channel_index(layer, ch)] + label = 'Group ' + root_ch.name else: label = 'Layer' @@ -1856,7 +1861,7 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): ch_idx = get_layer_channel_index(layer, ch) root_ch = yp.channels[ch_idx] #label = root_ch.name - if root_ch.type == 'NORMAL' and ch.normal_map_type != 'NORMAL_MAP': + if root_ch.type == 'NORMAL' and ch.normal_map_type != 'NORMAL_MAP' and layer.type != 'GROUP': if ch.normal_map_type == 'BUMP_MAP': if is_bl_newer_than(2, 80): label += ' (Bump)' @@ -1894,7 +1899,7 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): if ch and root_ch: rrow = row.row(align=True) rrow.alignment = 'RIGHT' - if root_ch.type == 'NORMAL': + if root_ch.type == 'NORMAL' and layer.type != 'GROUP': splits = split_layout(rrow, 0.5, align=True) splits.prop(ch, 'normal_blend_type', text='') if ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: @@ -1950,6 +1955,9 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): row = ccol.row(align=True) + if layer.type == 'GROUP': + row.active = get_channel_enabled(ch, layer, root_ch) + if not chui.expand_content: # and ch.enable: split = split_layout(row, 0.35) rrow = split.row(align=True) @@ -1960,7 +1968,7 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): rrow.scale_x = 0.95 label = '' - if root_ch.type == 'NORMAL': + if root_ch.type == 'NORMAL' and layer.type != 'GROUP': if chui.expand_content: label += yp.channels[i].name + ' (' label += normal_type_labels[ch.normal_map_type] @@ -1968,7 +1976,7 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): label += ')' else: label += yp.channels[i].name intensity_value = get_entity_prop_value(ch, 'intensity_value') - if intensity_value != 1.0: + if intensity_value != 1.0 and layer.type != 'GROUP': label += ' (%.1f)' % intensity_value if not chui.expand_content: label += ':' @@ -2014,7 +2022,11 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): else: draw_input_prop(ssplit, ch, 'intensity_value') - if root_ch.type == 'NORMAL': + if layer.type == 'GROUP': + rrrow = ssplit.row(align=True) + draw_input_prop(rrrow, ch, 'intensity_value') + + elif root_ch.type == 'NORMAL': rrrow = ssplit.row(align=True) if ch.normal_map_type == 'NORMAL_MAP': @@ -2092,6 +2104,14 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): #mcol = mrow.column(align=True) #mcol.use_property_split = True + if layer.type == 'GROUP': + channel_enabled = get_channel_enabled(ch, layer, root_ch) + + if ch.enable and not channel_enabled: + mbox.label(text='No children is using \''+root_ch.name+'\' channel!', icon='ERROR') + + mcol.active = channel_enabled + # Blend type if layer.type != 'BACKGROUND' or root_ch.type == 'NORMAL': row = mcol.row(align=True) @@ -2133,17 +2153,18 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): if root_ch.type == 'NORMAL': - #mcol.separator() + if layer.type != 'GROUP': - row = mcol.row(align=True) - row.label(text='', icon='BLANK1') - #split = split_layout(row, 0.4) - row.label(text='Type:') - rrow = row.row(align=True) - rrow.scale_x = 1.4 - rrow.prop(ch, 'normal_map_type', text='') + #mcol.separator() + + row = mcol.row(align=True) + row.label(text='', icon='BLANK1') + #split = split_layout(row, 0.4) + row.label(text='Type:') + rrow = row.row(align=True) + rrow.scale_x = 1.4 + rrow.prop(ch, 'normal_map_type', text='') - if layer.type != 'GROUP': if ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: # Height @@ -2459,189 +2480,153 @@ def draw_layer_channels(context, layout, layer, layer_tree, image, specific_ch): split_factor = 0.375 if root_ch.type != 'NORMAL' or ch.normal_map_type != 'BUMP_NORMAL_MAP' else 0.475 - # Override settings - if root_ch.type != 'NORMAL' or ch.normal_map_type != 'NORMAL_MAP': # or (not source_1 and not cache_1): + if layer.type != 'GROUP' or root_ch.type != 'NORMAL': + # Override settings + if root_ch.type != 'NORMAL' or ch.normal_map_type != 'NORMAL_MAP': # or (not source_1 and not cache_1): + + modcol = mcol.column() + modcol.active = layer.type != 'BACKGROUND' + draw_modifier_stack(context, ch, root_ch.type, modcol, + ypui.layer_ui.channels[i], layer) + + #mcol.separator() - modcol = mcol.column() - modcol.active = layer.type != 'BACKGROUND' - draw_modifier_stack(context, ch, root_ch.type, modcol, - ypui.layer_ui.channels[i], layer) + if root_ch.type != 'NORMAL' or ch.normal_map_type != 'VECTOR_DISPLACEMENT_MAP' or ch.override: - #mcol.separator() + input_settings_available = has_layer_input_options(layer) and (ch.layer_input != 'ALPHA' + and root_ch.colorspace == 'SRGB' and root_ch.type != 'NORMAL' ) - if root_ch.type != 'NORMAL' or ch.normal_map_type != 'VECTOR_DISPLACEMENT_MAP' or ch.override: + #row = mcol.row(align=True) + srow = split_layout(mcol, split_factor, align=False) + row = srow.row(align=True) + + label = 'Source:' if root_ch.type != 'NORMAL' or ch.normal_map_type != 'BUMP_NORMAL_MAP' else 'Bump Source:' + if ch.override or input_settings_available: + inbox_dropdown_button(row, chui, 'expand_source', label) + else: + row.label(text='', icon='BLANK1') + row.label(text=label) + + row = srow.row(align=True) + label = get_layer_channel_input_label(layer, ch, source) + row.context_pointer_set('parent', ch) + if ch.override and ch.override_type == 'DEFAULT' and not ch.expand_source: + split = split_layout(row, 0.55, align=True) + split.menu("NODE_MT_y_layer_channel_input_menu", text=label) + if root_ch.type == 'VALUE': + draw_input_prop(split, ch, 'override_value') + else: draw_input_prop(split, ch, 'override_color') + else: + rrow = row.row(align=True) + rrow.scale_x = 1.4 if ch.normal_map_type != 'BUMP_NORMAL_MAP' else 1.1 + rrow.menu("NODE_MT_y_layer_channel_input_menu", text=label) - input_settings_available = has_layer_input_options(layer) and (ch.layer_input != 'ALPHA' - and root_ch.colorspace == 'SRGB' and root_ch.type != 'NORMAL' ) + if ch.enable and ch.override: #and ypup.layer_list_mode in {'CLASSIC', 'BOTH'}: + if ch.override_type == 'IMAGE': + row.prop(ch, 'active_edit', text='', toggle=True, icon_value=lib.get_icon('image')) + elif ch.override_type == 'VCOL': + row.prop(ch, 'active_edit', text='', toggle=True, icon_value=lib.get_icon('vertex_color')) + elif ch.override_type != 'DEFAULT': + row.prop(ch, 'active_edit', text='', toggle=True, icon_value=lib.get_icon('texture')) + + ch_source = None + if ch.override: + ch_source = get_channel_source(ch, layer) + + if ch.expand_source and (ch.override or input_settings_available): # and ch.override_type != 'DEFAULT': + + rrow = mcol.row(align=True) + rrow.label(text='', icon='BLANK1') + #rrcol = rrow.box() + rrcol = rrow.column() + + if ch.override: + if ch.override_type == 'DEFAULT': + row = rrcol.row() + if root_ch.type == 'VALUE': + row.label(text='Custom Value:') + draw_input_prop(row, ch, 'override_value') + else: + row.label(text='Custom Color:') + draw_input_prop(row, ch, 'override_color') + + if ch_source: + if ch.override_type == 'IMAGE': + draw_image_props(context, ch_source, rrcol, ch, show_datablock=False) + elif ch.override_type == 'VCOL': + draw_vcol_props(rrcol) + else: + draw_tex_props(ch_source, rrcol, entity=ch) + + elif input_settings_available: + row = rrcol.row(align=True) + row.label(text='Gamma Space:') + row.prop(ch, 'gamma_space', text='') + + # Override 1 + if root_ch.type == 'NORMAL' and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'}: # and (source_1 or cache_1))): + + modcol = mcol.column() + modcol.active = layer.type != 'BACKGROUND' + draw_modifier_stack(context, ch, root_ch.type, modcol, + ypui.layer_ui.channels[i], layer, use_modifier_1=True) - #row = mcol.row(align=True) srow = split_layout(mcol, split_factor, align=False) row = srow.row(align=True) - - label = 'Source:' if root_ch.type != 'NORMAL' or ch.normal_map_type != 'BUMP_NORMAL_MAP' else 'Bump Source:' - if ch.override or input_settings_available: - inbox_dropdown_button(row, chui, 'expand_source', label) - else: + label = 'Source:' if ch.normal_map_type != 'BUMP_NORMAL_MAP' else 'Normal Source:' + if not ch.override_1: row.label(text='', icon='BLANK1') row.label(text=label) + else: + inbox_dropdown_button(row, chui, 'expand_source_1', label) + + if ch.override_1: + if ch.override_1_type == 'IMAGE' and source_1 and source_1.image: + label = source_1.image.name + else: label = 'Custom' + else: + label = 'Layer' + if is_bl_newer_than(2, 81) and layer.type == 'VORONOI' and layer.voronoi_feature in {'DISTANCE_TO_EDGE', 'N_SPHERE_RADIUS'}: + label += ' Distance' + else: label += ' Color' row = srow.row(align=True) - label = get_layer_channel_input_label(layer, ch, source) row.context_pointer_set('parent', ch) - if ch.override and ch.override_type == 'DEFAULT' and not ch.expand_source: + if ch.override_1 and ch.override_1_type == 'DEFAULT' and not ch.expand_source_1: split = split_layout(row, 0.55, align=True) - split.menu("NODE_MT_y_layer_channel_input_menu", text=label) - if root_ch.type == 'VALUE': - draw_input_prop(split, ch, 'override_value') - else: draw_input_prop(split, ch, 'override_color') + split.menu("NODE_MT_y_layer_channel_input_1_menu", text=label) + draw_input_prop(split, ch, 'override_1_color') else: rrow = row.row(align=True) rrow.scale_x = 1.4 if ch.normal_map_type != 'BUMP_NORMAL_MAP' else 1.1 - rrow.menu("NODE_MT_y_layer_channel_input_menu", text=label) + rrow.menu("NODE_MT_y_layer_channel_input_1_menu", text=label) - if ch.enable and ch.override: #and ypup.layer_list_mode in {'CLASSIC', 'BOTH'}: - if ch.override_type == 'IMAGE': - row.prop(ch, 'active_edit', text='', toggle=True, icon_value=lib.get_icon('image')) - elif ch.override_type == 'VCOL': - row.prop(ch, 'active_edit', text='', toggle=True, icon_value=lib.get_icon('vertex_color')) - elif ch.override_type != 'DEFAULT': - row.prop(ch, 'active_edit', text='', toggle=True, icon_value=lib.get_icon('texture')) + if ch.enable and ch.override_1 and ch.override_1_type == 'IMAGE': # and ypup.layer_list_mode in {'CLASSIC', 'BOTH'}: + row.prop(ch, 'active_edit_1', text='', toggle=True, icon_value=lib.get_icon('image')) - ch_source = None - if ch.override: - ch_source = get_channel_source(ch, layer) + #icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' + #row.menu("NODE_MT_y_replace_channel_override_1_menu", icon=icon, text='') - if ch.expand_source and (ch.override or input_settings_available): # and ch.override_type != 'DEFAULT': + ch_source_1 = None + if ch.override_1: + ch_source_1 = layer_tree.nodes.get(ch.source_1) + elif ch.override_1_type not in {'DEFAULT'}: + #ch_source_1 = layer_tree.nodes.get(getattr(ch, 'cache_' + ch.override_1_type.lower())) + ch_source_1 = layer_tree.nodes.get(getattr(ch, 'cache_1_image')) + #if ch.expand_source_1 and ch.override_1_type == 'IMAGE' and ch_source_1: + if ch.expand_source_1 and ch.override_1: rrow = mcol.row(align=True) rrow.label(text='', icon='BLANK1') - #rrcol = rrow.box() + #rbox = rrow.box() + #rbox.active = ch.override_1 rrcol = rrow.column() - - if ch.override: - if ch.override_type == 'DEFAULT': - row = rrcol.row() - if root_ch.type == 'VALUE': - row.label(text='Custom Value:') - draw_input_prop(row, ch, 'override_value') - else: - row.label(text='Custom Color:') - draw_input_prop(row, ch, 'override_color') - - if ch_source: - if ch.override_type == 'IMAGE': - draw_image_props(context, ch_source, rrcol, ch, show_datablock=False) - elif ch.override_type == 'VCOL': - draw_vcol_props(rrcol) - else: - draw_tex_props(ch_source, rrcol, entity=ch) - - elif input_settings_available: - row = rrcol.row(align=True) - row.label(text='Gamma Space:') - row.prop(ch, 'gamma_space', text='') - - # Override 1 - if root_ch.type == 'NORMAL' and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'}: # and (source_1 or cache_1))): - - modcol = mcol.column() - modcol.active = layer.type != 'BACKGROUND' - draw_modifier_stack(context, ch, root_ch.type, modcol, - ypui.layer_ui.channels[i], layer, use_modifier_1=True) - - srow = split_layout(mcol, split_factor, align=False) - row = srow.row(align=True) - label = 'Source:' if ch.normal_map_type != 'BUMP_NORMAL_MAP' else 'Normal Source:' - if not ch.override_1: - row.label(text='', icon='BLANK1') - row.label(text=label) - else: - inbox_dropdown_button(row, chui, 'expand_source_1', label) - - if ch.override_1: - if ch.override_1_type == 'IMAGE' and source_1 and source_1.image: - label = source_1.image.name - else: label = 'Custom' - else: - label = 'Layer' - if is_bl_newer_than(2, 81) and layer.type == 'VORONOI' and layer.voronoi_feature in {'DISTANCE_TO_EDGE', 'N_SPHERE_RADIUS'}: - label += ' Distance' - else: label += ' Color' - - row = srow.row(align=True) - row.context_pointer_set('parent', ch) - if ch.override_1 and ch.override_1_type == 'DEFAULT' and not ch.expand_source_1: - split = split_layout(row, 0.55, align=True) - split.menu("NODE_MT_y_layer_channel_input_1_menu", text=label) - draw_input_prop(split, ch, 'override_1_color') - else: - rrow = row.row(align=True) - rrow.scale_x = 1.4 if ch.normal_map_type != 'BUMP_NORMAL_MAP' else 1.1 - rrow.menu("NODE_MT_y_layer_channel_input_1_menu", text=label) - - if ch.enable and ch.override_1 and ch.override_1_type == 'IMAGE': # and ypup.layer_list_mode in {'CLASSIC', 'BOTH'}: - row.prop(ch, 'active_edit_1', text='', toggle=True, icon_value=lib.get_icon('image')) - - #icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' - #row.menu("NODE_MT_y_replace_channel_override_1_menu", icon=icon, text='') - - ch_source_1 = None - if ch.override_1: - ch_source_1 = layer_tree.nodes.get(ch.source_1) - elif ch.override_1_type not in {'DEFAULT'}: - #ch_source_1 = layer_tree.nodes.get(getattr(ch, 'cache_' + ch.override_1_type.lower())) - ch_source_1 = layer_tree.nodes.get(getattr(ch, 'cache_1_image')) - - #if ch.expand_source_1 and ch.override_1_type == 'IMAGE' and ch_source_1: - if ch.expand_source_1 and ch.override_1: - rrow = mcol.row(align=True) - rrow.label(text='', icon='BLANK1') - #rbox = rrow.box() - #rbox.active = ch.override_1 - rrcol = rrow.column() - if ch.override_1_type == 'DEFAULT': - row = rrcol.row() - row.label(text='Custom Color:') - draw_input_prop(row, ch, 'override_1_color') - elif ch.override_1_type == 'IMAGE' and ch_source_1: - draw_image_props(context, ch_source_1, rrcol, entity=ch, show_flip_y=True, show_datablock=False) - - # Layer input - #if (layer.type not in {'IMAGE', 'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'MUSGRAVE'} and not - # (is_bl_newer_than(2, 81) and layer.type == 'VORONOI' and layer.voronoi_feature in {'DISTANCE_TO_EDGE', 'N_SPHERE_RADIUS'}) - # ): - # row = mcol.row(align=True) - - # input_settings_available = (ch.layer_input != 'ALPHA' - # and root_ch.colorspace == 'SRGB' and root_ch.type != 'NORMAL' ) - - # if input_settings_available: - # if chui.expand_input_settings: - # icon_value = lib.get_icon('uncollapsed_input') - # else: icon_value = lib.get_icon('collapsed_input') - # row.prop(chui, 'expand_input_settings', text='', emboss=False, icon_value=icon_value) - # else: - # row.label(text='', icon_value=lib.get_icon('input')) - - # split = split_layout(row, 0.275) - - # split.label(text='Input:') - # srow = split.row(align=True) - # srow.prop(ch, 'layer_input', text='') - - # if chui.expand_input_settings and input_settings_available: - # row = mcol.row(align=True) - # row.label(text='', icon='BLANK1') - # box = row.box() - # bcol = box.column(align=False) - - # brow = bcol.row(align=True) - # brow.label(text='Gamma Space:') - # brow.prop(ch, 'gamma_space', text='') - - # #row.label(text='', icon='BLANK1') - - # extra_separator = True + if ch.override_1_type == 'DEFAULT': + row = rrcol.row() + row.label(text='Custom Color:') + draw_input_prop(row, ch, 'override_1_color') + elif ch.override_1_type == 'IMAGE' and ch_source_1: + draw_image_props(context, ch_source_1, rrcol, entity=ch, show_flip_y=True, show_datablock=False) if ypui.expand_channels: mrow.label(text='', icon='BLANK1') @@ -5810,18 +5795,21 @@ def draw(self, context): col.separator() # Layer Color - label = 'Layer' - if is_bl_newer_than(2, 81) and layer.type == 'VORONOI': - if layer.voronoi_feature == 'DISTANCE_TO_EDGE': - label += ' Distance' - elif layer.voronoi_feature == 'N_SPHERE_RADIUS': - label += ' Radius' + if layer.type == 'GROUP': + label = 'Group ' + root_ch.name + else: + label = 'Layer' + if is_bl_newer_than(2, 81) and layer.type == 'VORONOI': + if layer.voronoi_feature == 'DISTANCE_TO_EDGE': + label += ' Distance' + elif layer.voronoi_feature == 'N_SPHERE_RADIUS': + label += ' Radius' + else: + label += ' Color' else: label += ' Color' - else: - label += ' Color' - if layer.type not in {'IMAGE', 'VCOL'}: - label += ' ('+layer_type_labels[layer.type]+')' + if layer.type not in {'IMAGE', 'VCOL'}: + label += ' ('+layer_type_labels[layer.type]+')' icon = 'RADIOBUT_ON' if not ch.override and (ch.layer_input == 'RGB' or not has_layer_input_options(layer)) else 'RADIOBUT_OFF' op = col.operator('wm.y_set_layer_channel_input', text=label, icon=icon) From 5c611979d3e9204392ddfcb0a36c94a9f0a66bc7 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 24 Mar 2025 22:52:29 +0700 Subject: [PATCH 108/283] Fix: Baking with denoise enabled can make the bake result even noisier in some cases --- bake_common.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bake_common.py b/bake_common.py index 9976dd8f..58b73437 100644 --- a/bake_common.py +++ b/bake_common.py @@ -879,6 +879,7 @@ def prepare_composite_settings(res_x=1024, res_y=1024, use_hdr=False): scene.render.pixel_aspect_y = 1.0 scene.use_nodes = True scene.view_settings.view_transform = 'Standard' if is_bl_newer_than(2, 80) else 'Default' + scene.render.dither_intensity = 0.0 # Float/HDR image related scene.render.image_settings.file_format = 'OPEN_EXR' if use_hdr else 'PNG' From db6216748d9a414cb6cadd21520bf49ff52bab2c Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 25 Mar 2025 15:32:40 +0700 Subject: [PATCH 109/283] Use byte image by default for baking AO, edge detect, and hemi because it uses less space and denoiser now actually produce less noise --- BakeToLayer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 60110b07..54c97137 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1684,7 +1684,7 @@ def invoke(self, context, event): height_root_ch = get_root_height_channel(yp) # Set default float image - if self.type in {'POINTINESS', 'MULTIRES_DISPLACEMENT', 'BEVEL_MASK'}: + if self.type in {'POINTINESS', 'MULTIRES_DISPLACEMENT'}: self.hdr = True else: self.hdr = False @@ -2717,10 +2717,10 @@ def invoke(self, context, event): self.uv_map = self.uv_map_coll[0].name if self.entity.type in {'EDGE_DETECT', 'HEMI', 'AO'}: - self.hdr = True + #self.hdr = True self.fxaa = False else: - self.hdr = False + #self.hdr = False self.fxaa = True # Auto set some props for some types From 717f1f452f04c9223a8c570f606789c4c50c7e01 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Fri, 28 Mar 2025 00:25:42 +0400 Subject: [PATCH 110/283] Hide unsupported channel selector from other object channel bake (#258) --- BakeToLayer.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 54c97137..ef68f601 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1951,7 +1951,8 @@ def draw(self, context): else: col.label(text='Name:') - if self.target_type == 'LAYER': + # Other object channels always bakes all channels + if self.target_type == 'LAYER' and self.type != 'OTHER_OBJECT_CHANNELS': col.label(text='Channel:') if channel and channel.type == 'NORMAL': col.label(text='Type:') @@ -2021,7 +2022,8 @@ def draw(self, context): else: col.prop(self, 'name', text='') - if self.target_type == 'LAYER': + # Other object channels always bakes all channels + if self.target_type == 'LAYER' and self.type != 'OTHER_OBJECT_CHANNELS': rrow = col.row(align=True) rrow.prop(self, 'channel_idx', text='') if channel: From d5a58d1e8757d513ab7aee78149b121e8cb78f55 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 30 Mar 2025 04:01:15 +0700 Subject: [PATCH 111/283] Fix: Open Image to override channel always use absolute path --- Layer.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Layer.py b/Layer.py index 10f82572..27d3481f 100644 --- a/Layer.py +++ b/Layer.py @@ -1731,6 +1731,11 @@ def execute(self, context): if not ch.override: ch.override = True + # Set relative + if self.relative: + try: image.filepath = bpy.path.relpath(image.filepath) + except: pass + # Update image cache if ch.override_type == 'IMAGE': source_tree = get_channel_source_tree(ch, layer) @@ -1749,6 +1754,11 @@ def execute(self, context): if not ch.override_1: ch.override_1 = True + # Set relative + if self.relative: + try: image_1.filepath = bpy.path.relpath(image_1.filepath) + except: pass + # Update image 1 cache if ch.override_1_type == 'IMAGE': source_label = root_ch.name + ' Override 1 : ' + ch.override_1_type @@ -1888,6 +1898,11 @@ def execute(self, context): if not ch.override_1: ch.override_1 = True + # Set relative + if self.relative: + try: image.filepath = bpy.path.relpath(image.filepath) + except: pass + # Update image cache if ch.override_1_type == 'IMAGE': source_label = root_ch.name + ' Override 1 : ' + ch.override_1_type @@ -1905,6 +1920,11 @@ def execute(self, context): if not ch.override: ch.override = True + # Set relative + if self.relative: + try: image_1.filepath = bpy.path.relpath(image_1.filepath) + except: pass + # Update image 1 cache if ch.override_type == 'IMAGE': source_tree = get_channel_source_tree(ch, layer) From e558508d4afacefa5f485e377982dd28550105f8 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Sun, 30 Mar 2025 18:35:02 +0700 Subject: [PATCH 112/283] Fix: Duplicate layer won't duplicate its vertex color data --- Layer.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++----- common.py | 23 +++++++++++++++++ 2 files changed, 94 insertions(+), 6 deletions(-) diff --git a/Layer.py b/Layer.py index 27d3481f..172e4020 100644 --- a/Layer.py +++ b/Layer.py @@ -4584,6 +4584,11 @@ def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate img_nodes = [] imgs = [] + vcol_users = [] + vcol_user_types = [] + vcol_nodes = [] + vcol_names = [] + for layer in yp.layers: if specific_layer and layer != specific_layer: continue @@ -4650,18 +4655,37 @@ def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate img_users.append(layer) img_nodes.append(source) imgs.append(img) + + elif layer.type == 'VCOL': + vcol_name = source.attribute_name + if vcol_name != '': + vcol_users.append(layer) + vcol_user_types.append('LAYER') + vcol_nodes.append(source) + vcol_names.append(vcol_name) + elif layer.type == 'HEMI': duplicate_lib_node_tree(source) # Duplicate override channel for ch in layer.channels: - if ch.override and ch.override_type == 'IMAGE': + if ch.override: ch_source = get_channel_source(ch, layer) - img = ch_source.image - if img: - img_users.append(ch) - img_nodes.append(ch_source) - imgs.append(img) + + if ch.override_type == 'IMAGE': + img = ch_source.image + if img: + img_users.append(ch) + img_nodes.append(ch_source) + imgs.append(img) + + elif ch.override_type == 'VCOL': + vcol_name = ch_source.attribute_name + if vcol_name != '': + vcol_users.append(ch) + vcol_user_types.append('CHANNEL') + vcol_nodes.append(ch_source) + vcol_names.append(vcol_name) if ch.override_1 and ch.override_1_type == 'IMAGE': ch_source = get_channel_source_1(ch, layer) @@ -4712,6 +4736,13 @@ def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate img_users.append(mask) img_nodes.append(mask_source) imgs.append(img) + elif mask.type == 'VCOL': + vcol_name = mask_source.attribute_name + if vcol_name != '': + vcol_users.append(mask) + vcol_user_types.append('MASK') + vcol_nodes.append(mask_source) + vcol_names.append(vcol_name) elif mask.type == 'HEMI': duplicate_lib_node_tree(mask_source) @@ -4755,6 +4786,40 @@ def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate if n.type == 'GROUP' and n != ori: n.node_tree = ori.node_tree + # Copy vertex color on layer and masks + objs = get_all_objects_with_same_materials(get_active_material()) + for i, vcol_name in enumerate(vcol_names): + + # Get all available vcol names across all objects + all_vcol_names = [] + for obj in objs: + vcols = get_vertex_colors(obj) + for vcol in vcols: + if vcol.name not in all_vcol_names: + all_vcol_names.append(vcol.name) + + # Get new name based on already available vcol names + new_vcol_name = get_unique_name(vcol_name, all_vcol_names) + + # Duplicate vertex color + for obj in objs: + vcols = get_vertex_colors(obj) + vcol = vcols.get(vcol_name) + if vcol: + new_vcol = new_vertex_color(obj, new_vcol_name, vcol.data_type, vcol.domain) + if duplicate_blank: + if vcol_user_types[i] == 'LAYER': + set_obj_vertex_colors(obj, new_vcol_name, (0.0, 0.0, 0.0, 0.0)) + else: set_obj_vertex_colors(obj, new_vcol_name, (0.0, 0.0, 0.0, 1.0)) + else: + copy_vertex_color_data(obj, vcol_name, new_vcol_name) + + # Set new vertex color to node and user + vcol_nodes[i].attribute_name = new_vcol_name + yp.halt_update = True + vcol_users[i].name = new_vcol_name + yp.halt_update = False + # Make all images single user #if packed_duplicate: diff --git a/common.py b/common.py index d85cf371..4e7b5ccf 100644 --- a/common.py +++ b/common.py @@ -2427,6 +2427,29 @@ def change_layer_name(yp, obj, src, layer, texes): yp.halt_update = False +def copy_vertex_color_data(obj, source_name, dest_name): + if obj.type != 'MESH': return + + #ori_mode = None + if bpy.context.object and bpy.context.object.mode != 'OBJECT': + #ori_mode = obj.mode + bpy.ops.object.mode_set(mode='OBJECT') + + vcols = get_vertex_colors(obj) + source = vcols.get(source_name) + dest = vcols.get(dest_name) + + if not source or not dest: return + + num_channels = 4 if is_bl_newer_than(2, 80) else 3 + + arr = numpy.zeros(len(source.data) * num_channels) + source.data.foreach_get('color', arr) + dest.data.foreach_set('color', arr) #.T.ravel()) + + #if ori_mode: + # bpy.ops.object.mode_set(mode=ori_mode) + def set_obj_vertex_colors(obj, vcol_name, color): if obj.type != 'MESH': return From 5194be3ecd9ed4b787a12404fd405f0a05454be0 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Wed, 2 Apr 2025 01:40:05 +0700 Subject: [PATCH 113/283] Make all baked channel data can be displayed at the same time --- Bake.py | 21 ++++- Root.py | 8 ++ node_connections.py | 6 +- ui.py | 190 +++++++++++++++++++++++++++++--------------- versioning.py | 10 +++ 5 files changed, 168 insertions(+), 67 deletions(-) diff --git a/Bake.py b/Bake.py index d6ce4d1a..27025166 100644 --- a/Bake.py +++ b/Bake.py @@ -1645,7 +1645,14 @@ def execute(self, context): layer.enable = True # Bake channels + baked_exists = [] for ch in self.channels: + + # Check if baked node exists + baked = tree.nodes.get(ch.baked) + if baked: baked_exists.append(True) + else: baked_exists.append(False) + ch.no_layer_using = not is_any_layer_using_channel(ch, node) if not ch.no_layer_using: use_hdr = not ch.use_clamp or (self.use_dithering and ch.type == 'RGB' and ch.colorspace == 'SRGB') @@ -1658,11 +1665,15 @@ def execute(self, context): # Process baked images baked_images = [] - for ch in self.channels: + for i, ch in enumerate(self.channels): baked = tree.nodes.get(ch.baked) if baked and baked.image: + # Only expand baked data when baked is just created + if not baked_exists[i]: + ch.expand_baked_data = True + # Dithering if ch.type == 'RGB' and ch.colorspace == 'SRGB' and self.use_dithering and ch.use_clamp: dither_image(baked.image, dither_intensity=self.dither_intensity, alpha_aware=ch.enable_alpha) @@ -1968,6 +1979,9 @@ def execute(self, context): baked = tree.nodes.get(ch.baked_vcol) if not baked or not is_root_ch_prop_node_unique(ch, 'baked_vcol'): baked = new_node(tree, ch, 'baked_vcol', get_vcol_bl_idname(), 'Baked Vcol ' + ch.name) + # Set channel to use baked vertex color only when baked_vcol is just created + ch.use_baked_vcol = True + set_source_vcol_name(baked, ch.bake_to_vcol_name) for ob in objs: # Recover material index @@ -2018,9 +2032,12 @@ def execute(self, context): # Refresh active channel index yp.active_channel_index = yp.active_channel_index + # Update UI + ypui = context.window_manager.ypui + ypui.need_update = True + # If bake target ui is visible, refresh bake target index to show up the image result if len(yp.bake_targets) > 0: - ypui = context.window_manager.ypui if ypui.show_bake_targets: yp.active_bake_target_index = yp.active_bake_target_index diff --git a/Root.py b/Root.py index 4a9ab8a7..95d529da 100644 --- a/Root.py +++ b/Root.py @@ -3540,6 +3540,13 @@ class YPaintChannel(bpy.types.PropertyGroup): update = Bake.update_enable_bake_to_vcol ) + use_baked_vcol : BoolProperty( + name = 'Use Baked Vertex Color', + description = 'Use baked vertex color', + default = False, + update = Bake.update_enable_bake_to_vcol + ) + bake_to_vcol_alpha : BoolProperty( name = 'Bake To Vertex Color Alpha', description = 'When enabled, the channel are baked only to Alpha with vertex color', @@ -3795,6 +3802,7 @@ class YPaintChannel(bpy.types.PropertyGroup): expand_bake_to_vcol_settings : BoolProperty(default=False) expand_input_bump_settings : BoolProperty(default=False) expand_smooth_bump_settings : BoolProperty(default=False) + expand_baked_data : BoolProperty(default=False) # Connection related ori_alpha_to : CollectionProperty(type=YNodeConnections) diff --git a/node_connections.py b/node_connections.py index 8b86f06d..ac9cda3b 100644 --- a/node_connections.py +++ b/node_connections.py @@ -1437,7 +1437,7 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): mixcol0, mixcol1, mixout = get_mix_color_indices(clamp) rgb = create_link(tree, rgb, clamp.inputs[mixcol0])[mixout] - if yp.use_baked and not ch.no_layer_using and not ch.disable_global_baked and not ch.enable_bake_to_vcol: # and baked_uv: + if yp.use_baked and not ch.no_layer_using and not ch.disable_global_baked and not ch.use_baked_vcol: # and baked_uv: baked = nodes.get(ch.baked) if baked: rgb = baked.outputs[0] @@ -1503,7 +1503,7 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): #create_link(tree, geometry.outputs['Backfacing'], end_backface.inputs[1]) create_link(tree, get_essential_node(tree, GEOMETRY)['Backfacing'], end_backface.inputs[1]) - if yp.use_baked and ch.enable_bake_to_vcol and not ch.disable_global_baked: + if yp.use_baked and ch.use_baked_vcol and not ch.disable_global_baked: baked_vcol = nodes.get(ch.baked_vcol) if baked_vcol: if ch.bake_to_vcol_alpha: @@ -1522,7 +1522,7 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): #if ch.type == 'RGB' and ch.enable_alpha: if ch.enable_alpha: create_link(tree, alpha, end.inputs[io_alpha_name]) - if ch.type == 'NORMAL' and not ch.enable_bake_to_vcol: + if ch.type == 'NORMAL' and not ch.use_baked_vcol: if height and io_height_name in end.inputs: create_link(tree, height, end.inputs[io_height_name]) if max_height and io_max_height_name in end.inputs: create_link(tree, max_height, end.inputs[io_max_height_name]) if io_vdisp_name in end.inputs: diff --git a/ui.py b/ui.py index 9aea21e6..d221f88c 100644 --- a/ui.py +++ b/ui.py @@ -40,6 +40,7 @@ def update_yp_ui(): ypui.bake_target_idx = yp.active_bake_target_index ypui.need_update = False ypui.halt_prop_update = True + ypui.channels.clear() if len(yp.bake_targets) > 0: bt = yp.bake_targets[yp.active_bake_target_index] @@ -63,6 +64,11 @@ def update_yp_ui(): ypui.channel_ui.expand_smooth_bump_settings = channel.expand_smooth_bump_settings ypui.channel_ui.modifiers.clear() + # Construct noncontextual channel UI objects + for i, ch in enumerate(yp.channels): + c = ypui.channels.add() + c.expand_baked_data = ch.expand_baked_data + # Construct channel UI objects for i, mod in enumerate(channel.modifiers): m = ypui.channel_ui.modifiers.add() @@ -1402,9 +1408,10 @@ def draw_root_channels_ui(context, layout, node): brow = bcol.row(align=True) vcols = get_vertex_colors(context.object) - if yp.use_baked and channel.bake_to_vcol_name in vcols: - label_text = 'Use Baked Vertex Color:' - else: label_text = 'Bake To Vertex Color:' + #if yp.use_baked and channel.bake_to_vcol_name in vcols: + # label_text = 'Use Baked Vertex Color:' + #else: + label_text = 'Bake To Vertex Color:' rrow = brow.row(align=True) inbox_dropdown_button(rrow, chui, 'expand_bake_to_vcol_settings', label_text, scale_override=0.95) @@ -3111,8 +3118,12 @@ def draw_layers_ui(context, layout, node): if yp.use_baked: col = box.column(align=False) - if len(yp.channels) > 0: - root_ch = yp.channels[yp.active_channel_index] + for i, root_ch in enumerate(yp.channels): + + try: nchui = ypui.channels[i] + except: + ypui.need_update = True + return baked = nodes.get(root_ch.baked) baked_vcol_node = nodes.get(root_ch.baked_vcol) @@ -3120,63 +3131,96 @@ def draw_layers_ui(context, layout, node): icon_name = lib.channel_custom_icon_dict[root_ch.type] icon_value = lib.get_icon(icon_name) - if not baked or not baked.image or root_ch.no_layer_using: - col.label(text=root_ch.name + " channel hasn't been baked yet!", icon_value=icon_value) - else: - row = col.row(align=True) - title = 'Baked ' + root_ch.name - row.label(text=title, icon_value=icon_value) + no_baked_data = not baked or not baked.image or root_ch.no_layer_using + bake_disabled = root_ch.disable_global_baked and not yp.enable_baked_outside - row.context_pointer_set('root_ch', root_ch) - row.context_pointer_set('image', baked.image) + #if not baked or not baked.image or root_ch.no_layer_using: + # col.label(text=root_ch.name + " channel hasn't been baked yet!", icon_value=icon_value) + #else: + row = col.row(align=True) + row.context_pointer_set('root_ch', root_ch) + if baked: row.context_pointer_set('image', baked.image) + + rrow = row.row(align=True) + icon = get_collapse_arrow_icon(getattr(nchui, 'expand_baked_data')) + rrow.prop(nchui, 'expand_baked_data', text='', emboss=False, icon=icon) + rrow = row.row(align=True) + rrow.active = not (bake_disabled or no_baked_data) + title = 'Baked ' + root_ch.name + if bake_disabled: + title += ' (Disabled)' + if is_bl_newer_than(2, 80): + rrow.alignment = 'LEFT' + rrow.scale_x = 0.95 + rrow.prop(nchui, 'expand_baked_data', text=title, icon_value=icon_value, emboss=False) + else: + rrow.label(text=title, icon_value=icon_value) + if not no_baked_data: icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' - row.menu("NODE_MT_y_baked_image_menu", text='', icon=icon) + rrow = row.row(align=True) + if is_bl_newer_than(2, 80): + rrow.alignment = 'RIGHT' + rrow.menu("NODE_MT_y_baked_image_menu", text='', icon=icon) - row = col.row(align=True) - row.active = not root_ch.disable_global_baked or yp.enable_baked_outside - row.label(text='', icon='BLANK1') - if baked.image.is_dirty: - title = baked.image.name + ' *' - else: title = baked.image.name - if root_ch.disable_global_baked and not yp.enable_baked_outside: - title += ' (Disabled)' - elif not root_ch.enable_bake_to_vcol and baked_vcol_node: - title += pgettext_iface(' (Active)') - row.label(text=title, icon_value=lib.get_icon('image')) + if not nchui.expand_baked_data: continue - if baked.image.packed_file: - row.label(text='', icon='PACKAGE') + row = col.row(align=True) + row.label(text='', icon='BLANK1') + bbox = row.box() + bcol = bbox.column(align=True) - # If enabled or a baked vertex color is found - if root_ch.enable_bake_to_vcol or baked_vcol_node: - obj = context.object - vcols = get_vertex_colors(obj) - vcol_name = root_ch.bake_to_vcol_name - vcol = vcols.get(vcol_name) + if no_baked_data: + bcol.label(text=root_ch.name + " channel hasn't been baked yet!", icon='ERROR') + continue - row = col.row(align=True) - row.label(text='', icon='BLANK1') + row = bcol.row(align=True) + row.active = not root_ch.disable_global_baked or yp.enable_baked_outside + #row.label(text='', icon='BLANK1') + if baked.image.is_dirty: + title = baked.image.name + ' *' + else: title = baked.image.name + if root_ch.disable_global_baked and not yp.enable_baked_outside: + title += ' (Disabled)' + elif not root_ch.use_baked_vcol and baked_vcol_node: + title += pgettext_iface(' (Active)') + row.label(text=title, icon_value=lib.get_icon('image')) + + if baked.image.packed_file: + row.label(text='', icon='PACKAGE') + #row.label(text='', icon='BLANK1') - row.active = not root_ch.disable_global_baked or yp.enable_baked_outside - title = '' - if root_ch.disable_global_baked and not yp.enable_baked_outside: - title += pgettext_iface(' (Disabled)') - elif root_ch.enable_bake_to_vcol and baked_vcol_node: - title += pgettext_iface(' (Active)') + # If enabled or a baked vertex color is found + if root_ch.use_baked_vcol or baked_vcol_node: + obj = context.object + vcols = get_vertex_colors(obj) + vcol_name = root_ch.bake_to_vcol_name + vcol = vcols.get(vcol_name) - if baked_vcol_node and vcol: - row.label(text=vcol_name + title, icon_value=lib.get_icon('vertex_color')) - else: - row.label(text='Baked vertex color is missing!' + title, icon='ERROR') + row = bcol.row(align=True) + #row.label(text='', icon='BLANK1') + + row.active = not root_ch.disable_global_baked or yp.enable_baked_outside + title = '' + if root_ch.disable_global_baked and not yp.enable_baked_outside: + title += pgettext_iface(' (Disabled)') + elif root_ch.use_baked_vcol and baked_vcol_node: + title += pgettext_iface(' (Active)') + + if baked_vcol_node and vcol: + row.label(text=vcol_name + title, icon_value=lib.get_icon('vertex_color')) + + icon = 'CHECKBOX_HLT' if root_ch.use_baked_vcol else 'CHECKBOX_DEHLT' + row.prop(root_ch, 'use_baked_vcol', icon=icon, text='', toggle=True, emboss=False) + else: + row.label(text='Baked vertex color is missing!' + title, icon='ERROR') if root_ch.type == 'NORMAL': baked_normal_overlay = nodes.get(root_ch.baked_normal_overlay) if baked_normal_overlay and baked_normal_overlay.image: - row = col.row(align=True) + row = bcol.row(align=True) row.active = not root_ch.disable_global_baked - row.label(text='', icon='BLANK1') if baked_normal_overlay.image.is_dirty: title = baked_normal_overlay.image.name + ' *' else: title = baked_normal_overlay.image.name @@ -3189,9 +3233,8 @@ def draw_layers_ui(context, layout, node): baked_disp = nodes.get(root_ch.baked_disp) if baked_disp and baked_disp.image: - row = col.row(align=True) + row = bcol.row(align=True) row.active = not root_ch.disable_global_baked - row.label(text='', icon='BLANK1') if baked_disp.image.is_dirty: title = baked_disp.image.name + ' *' else: title = baked_disp.image.name @@ -3204,7 +3247,7 @@ def draw_layers_ui(context, layout, node): btimages = [] for bt in yp.bake_targets: - for i, letter in enumerate(rgba_letters): + for letter in rgba_letters: btc = getattr(bt, letter) if getattr(btc, 'channel_name') == root_ch.name: bt_node = nodes.get(bt.image_node) @@ -3215,8 +3258,7 @@ def draw_layers_ui(context, layout, node): if btimg.is_dirty: title += ' *' - row = col.row(align=True) - row.label(text='', icon='BLANK1') + row = bcol.row(align=True) row.label(text=title, icon_value=lib.get_icon('image')) if btimg.packed_file: @@ -3224,6 +3266,14 @@ def draw_layers_ui(context, layout, node): btimages.append(btimg) + col = box.column(align=False) + icon = 'FILE_TICK' + col.operator('wm.y_save_all_baked_images', text='Save All Baked Images to...', icon=icon).copy = False + col.operator('wm.y_save_all_baked_images', text='Save All Baked Image Copies to...', icon=icon).copy = True + + icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' + col.separator() + col.operator('wm.y_delete_baked_channel_images', text='Delete All Baked Images', icon=icon) return @@ -5600,9 +5650,12 @@ def draw(self, context): yp = node.node_tree.yp #try: # root_ch = yp.channels[yp.active_channel_index] + root_ch = context.root_ch + row = col.row() row.active = not yp.enable_baked_outside - row.prop(context.root_ch, 'disable_global_baked', text='Disable Baked Image(s)', icon='RESTRICT_RENDER_ON') + label = 'Disable Baked ' + root_ch.name + row.prop(context.root_ch, 'disable_global_baked', text=label, icon='RESTRICT_RENDER_ON') col.separator() #except Exception as e: # print(e) @@ -5615,15 +5668,6 @@ def draw(self, context): else: col.operator('wm.y_save_as_image', text='Save As Image').copy = False col.operator('wm.y_save_as_image', text='Save an Image Copy...', icon='FILE_TICK').copy = True - col.separator() - - icon = 'FILEBROWSER' if is_bl_newer_than(2, 80) else 'FILE_FOLDER' - col.operator('wm.y_save_all_baked_images', text='Save All Baked Images to...', icon=icon).copy = False - col.operator('wm.y_save_all_baked_images', text='Save All Baked Image Copies to...').copy = True - - col.separator() - col.operator('wm.y_delete_baked_channel_images', text='Delete All Baked Images', icon='ERROR') - class YLayerChannelNormalBlendMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_layer_channel_normal_blend_menu" bl_label = "Layer Channel Normal Blend" @@ -7093,6 +7137,20 @@ def update_layer_ui(self, context): # # ListItem.refresh_list_items(yp) +def update_noncontextual_channel_ui(self, context): + group_node = get_active_ypaint_node() + if not group_node: return + yp = group_node.node_tree.yp + if len(yp.channels) == 0: return + + m = re.match(r'ypui\.channels\[(\d+)\]', self.path_from_id()) + + if m: ch = yp.channels[int(m.group(1))] + else: return + + if hasattr(ch, 'expand_baked_data'): + ch.expand_baked_data = self.expand_baked_data + def update_channel_ui(self, context): ypui = context.window_manager.ypui if ypui.halt_prop_update: return @@ -7349,6 +7407,13 @@ class YChannelUI(bpy.types.PropertyGroup): update = update_channel_ui ) + expand_baked_data : BoolProperty( + name = 'Baked Channel Data', + description = 'Expand baked channel data', + default = False, + update = update_noncontextual_channel_ui + ) + modifiers : CollectionProperty(type=YModifierUI) modifiers_1 : CollectionProperty(type=YModifierUI) @@ -7531,6 +7596,7 @@ class YPaintUI(bpy.types.PropertyGroup): # Group channel related UI channel_idx : IntProperty(default=0) channel_ui : PointerProperty(type=YChannelUI) + channels : CollectionProperty(type=YChannelUI) modifiers : CollectionProperty(type=YModifierUI) # Bake target related UI diff --git a/versioning.py b/versioning.py index e09c6418..00d12588 100644 --- a/versioning.py +++ b/versioning.py @@ -803,6 +803,16 @@ def update_yp_tree(tree): segment.bake_info.is_baked_entity = True print('INFO: One image segment from '+image.name+' is marked as baked entity image!') + for ch in yp.channels: + + # Use baked vcol is now has it's own property + if ch.enable_bake_to_vcol: + ch.use_baked_vcol = True + + # Now baked channel data can be expanded + baked = tree.nodes.get(ch.baked) + if baked: ch.expand_baked_data = True + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From fc4b1f0c0c6bda343334a577d1b39f8016c40220 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 4 Apr 2025 14:35:28 +0700 Subject: [PATCH 114/283] Simplify Save As/Copies All buttons --- ui.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ui.py b/ui.py index d221f88c..a22826fc 100644 --- a/ui.py +++ b/ui.py @@ -3266,14 +3266,13 @@ def draw_layers_ui(context, layout, node): btimages.append(btimg) - col = box.column(align=False) + row = box.row(align=True) icon = 'FILE_TICK' - col.operator('wm.y_save_all_baked_images', text='Save All Baked Images to...', icon=icon).copy = False - col.operator('wm.y_save_all_baked_images', text='Save All Baked Image Copies to...', icon=icon).copy = True + row.operator('wm.y_save_all_baked_images', text='Save As All...', icon=icon).copy = False + row.operator('wm.y_save_all_baked_images', text='Save Copies All...', icon=icon).copy = True icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' - col.separator() - col.operator('wm.y_delete_baked_channel_images', text='Delete All Baked Images', icon=icon) + row.operator('wm.y_delete_baked_channel_images', text='', icon=icon) return From 23c105c3c336c7c01eb6a0565fa4fea87ed9b776 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 4 Apr 2025 15:23:07 +0700 Subject: [PATCH 115/283] Use more proper icon for blender 27x --- ui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.py b/ui.py index a22826fc..4f6e4c61 100644 --- a/ui.py +++ b/ui.py @@ -3271,7 +3271,7 @@ def draw_layers_ui(context, layout, node): row.operator('wm.y_save_all_baked_images', text='Save As All...', icon=icon).copy = False row.operator('wm.y_save_all_baked_images', text='Save Copies All...', icon=icon).copy = True - icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' + icon = 'TRASH' if is_bl_newer_than(2, 80) else 'CANCEL' row.operator('wm.y_delete_baked_channel_images', text='', icon=icon) return From e707c15801f04f82d25ba1fe10ce8314d7fd3f36 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Fri, 4 Apr 2025 16:43:11 +0700 Subject: [PATCH 116/283] Fix: Open image to layer channel source can use incorrect colorspace --- Layer.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Layer.py b/Layer.py index 172e4020..bf4bdba3 100644 --- a/Layer.py +++ b/Layer.py @@ -1736,6 +1736,10 @@ def execute(self, context): try: image.filepath = bpy.path.relpath(image.filepath) except: pass + # Set colorspace + if root_ch.colorspace == 'LINEAR' and not image.is_dirty: + image.colorspace_settings.name = get_noncolor_name() + # Update image cache if ch.override_type == 'IMAGE': source_tree = get_channel_source_tree(ch, layer) @@ -1759,6 +1763,10 @@ def execute(self, context): try: image_1.filepath = bpy.path.relpath(image_1.filepath) except: pass + # Set colorspace + if not image_1.is_dirty: + image_1.colorspace_settings.name = get_noncolor_name() + # Update image 1 cache if ch.override_1_type == 'IMAGE': source_label = root_ch.name + ' Override 1 : ' + ch.override_1_type @@ -1903,6 +1911,10 @@ def execute(self, context): try: image.filepath = bpy.path.relpath(image.filepath) except: pass + # Set colorspace + if not image.is_dirty: + image.colorspace_settings.name = get_noncolor_name() + # Update image cache if ch.override_1_type == 'IMAGE': source_label = root_ch.name + ' Override 1 : ' + ch.override_1_type @@ -1925,6 +1937,10 @@ def execute(self, context): try: image_1.filepath = bpy.path.relpath(image_1.filepath) except: pass + # Set colorspace + if not image_1.is_dirty: + image_1.colorspace_settings.name = get_noncolor_name() + # Update image 1 cache if ch.override_type == 'IMAGE': source_tree = get_channel_source_tree(ch, layer) From 2b1403936c3f210502b59597cdf4cdf148fc7181 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 7 Apr 2025 12:36:50 +0700 Subject: [PATCH 117/283] Fix: Bake all channels cause error when there's normal enabled layer with fake lighting mask --- bake_common.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bake_common.py b/bake_common.py index 58b73437..0e6be7a3 100644 --- a/bake_common.py +++ b/bake_common.py @@ -3,7 +3,7 @@ from .common import * from .input_outputs import * from .node_connections import * -from . import lib, Layer, ImageAtlas, UDIM, image_ops +from . import lib, Layer, ImageAtlas, UDIM, image_ops, Mask BL28_HACK = True @@ -2247,7 +2247,7 @@ def temp_bake(context, entity, width, height, hdr, samples, margin, uv_map, bake # Replace layer with temp image if m1: Layer.replace_layer_type(entity, 'IMAGE', image.name, remove_data=True) - else: Layer.replace_mask_type(entity, 'IMAGE', image.name, remove_data=True) + else: Mask.replace_mask_type(entity, 'IMAGE', image.name, remove_data=True) return image @@ -2259,7 +2259,7 @@ def disable_temp_bake(entity): # Replace layer type if m1: Layer.replace_layer_type(entity, entity.original_type, remove_data=True) - else: Layer.replace_mask_type(entity, entity.original_type, remove_data=True) + else: Mask.replace_mask_type(entity, entity.original_type, remove_data=True) # Set entity attribute entity.use_temp_bake = False From ffd46f19ea8f4ece9eab3a39eeaecd924d3f3141 Mon Sep 17 00:00:00 2001 From: Bappity <12457072+bappitybup@users.noreply.github.com> Date: Mon, 7 Apr 2025 13:40:49 +0100 Subject: [PATCH 118/283] Add issue templates for bug reports and enhancements (#261) * Create bug_report.yaml basic fields for now * Create feature_request.yaml basic fields for now * Update bug_report.yaml add quotes to separate path in description * Update bug_report.yaml change quotes to square brackets, more visible --- .github/ISSUE_TEMPLATE/bug_report.yaml | 39 +++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.yaml | 26 ++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yaml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yaml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 00000000..e27c7eec --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,39 @@ +name: 🐞 Bug report +description: Create a report to help us improve. +labels: ["bug"] +body: + - type: input + id: ucupaintversion + attributes: + label: UCUPAINT Version + description: Type the version from [Edit > Preferences > Get Extensions > Ucupaint] here. + placeholder: ex. 2.2.0 + validations: + required: true + - type: textarea + id: describebug + attributes: + label: Describe The Bug + description: A clear and concise description of what the bug is. + placeholder: ex. This should happen, but that happens instead. + validations: + required: true + - type: textarea + id: reproducebug + attributes: + label: To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + - type: textarea + id: incaseofcrash + attributes: + label: In the case of a crash or when relevant include the logs + description: Please include the logs (https://docs.blender.org/manual/en/latest/troubleshooting/crash.html#crash-log) + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 00000000..ff67c4c1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,26 @@ +name: 🚀 Feature Request +description: Suggest an idea for this project. +labels: ["enhancement"] +body: + - type: checkboxes + id: terms + attributes: + label: Pre-Flight checklist + description: Make sure these are correct before submitting + options: + - label: Did you check to see if this issue already exists? + required: true + - label: This is a single feature request. (Do not put multiple feature requests in one issue) + required: true + - type: textarea + id: describefeaturerequest + attributes: + label: Describe The Feature Request Below + description: A clear and concise description of what the feature request is. + placeholder: | + EXAMPLES: + - Normally this happens, but that could happen instead + - This functionality should be added + - This functionality should be changed + validations: + required: true From 2d09d619856217dcd92d54cf0f4c79df485238a3 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 8 Apr 2025 02:51:41 +0700 Subject: [PATCH 119/283] Small clean up for internal node arrangements --- node_arrangements.py | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/node_arrangements.py b/node_arrangements.py index 40d5a57b..89794a17 100644 --- a/node_arrangements.py +++ b/node_arrangements.py @@ -285,10 +285,6 @@ def rearrange_layer_frame_nodes(layer, tree=None): check_set_node_parent(tree, c.mix_remains, frame) check_set_node_parent(tree, c.mix_limit, frame) check_set_node_parent(tree, c.mix_limit_normal, frame) - #check_set_node_parent(tree, c.mix_n, frame) - #check_set_node_parent(tree, c.mix_s, frame) - #check_set_node_parent(tree, c.mix_e, frame) - #check_set_node_parent(tree, c.mix_w, frame) clean_unused_frames(tree) @@ -1278,38 +1274,27 @@ def rearrange_layer_nodes(layer, tree=None): loc.x = bookmark_x bookmark_y = loc.y - #mix_n = tree.nodes.get(c.mix_n) mix_pure = tree.nodes.get(c.mix_pure) mix_remains = tree.nodes.get(c.mix_remains) mix_normal = tree.nodes.get(c.mix_normal) - #if not mix_n and not mix_pure and not mix_remains and not mix_normal: + mix_limit_normal = tree.nodes.get(c.mix_limit_normal) - if check_set_node_loc(tree, c.mix, loc, True): - loc.y -= 40 - - if check_set_node_loc(tree, c.mix_pure, loc, True): - loc.y -= 40 - - if check_set_node_loc(tree, c.mix_remains, loc, True): - loc.y -= 40 - - if check_set_node_loc(tree, c.mix_normal, loc, True): - loc.y -= 40 + if mix_pure or mix_remains or mix_normal or mix_limit_normal: - if check_set_node_loc(tree, c.mix_limit_normal, loc, True): - loc.y -= 40 + if check_set_node_loc(tree, c.mix, loc, True): + loc.y -= 40 - #if check_set_node_loc(tree, c.mix_n, loc, True): - # loc.y -= 40 + if check_set_node_loc(tree, c.mix_pure, loc, True): + loc.y -= 40 - #if check_set_node_loc(tree, c.mix_s, loc, True): - # loc.y -= 40 + if check_set_node_loc(tree, c.mix_remains, loc, True): + loc.y -= 40 - #if check_set_node_loc(tree, c.mix_e, loc, True): - # loc.y -= 40 + if check_set_node_loc(tree, c.mix_normal, loc, True): + loc.y -= 40 - #if check_set_node_loc(tree, c.mix_w, loc, True): - # loc.y -= 40 + if check_set_node_loc(tree, c.mix_limit_normal, loc, True): + loc.y -= 40 if check_set_node_loc(tree, c.mix, loc): if root_ch.type == 'NORMAL' and root_ch.enable_smooth_bump: @@ -1329,7 +1314,7 @@ def rearrange_layer_nodes(layer, tree=None): loc.y = bookmark_y # Transition effects - if i == chain-1: + if i == chain-1 and bump_ch: ch = layer.channels[j] From 4de491ca89b0daa00cc304b82c5fe9f29cda502b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 9 Apr 2025 16:51:14 +0700 Subject: [PATCH 120/283] Make baked entity images reusable --- BakeInfo.py | 6 +++ BakeToLayer.py | 102 +++++++++++++++++++++++++++------------ __init__.py | 2 +- blender_manifest.toml | 2 +- common.py | 34 ++++++++++--- ui.py | 2 +- versioning.py | 110 ++++++++++++++++++++++++++++-------------- 7 files changed, 180 insertions(+), 78 deletions(-) diff --git a/BakeInfo.py b/BakeInfo.py index 00fe9601..1b594374 100644 --- a/BakeInfo.py +++ b/BakeInfo.py @@ -29,6 +29,12 @@ class YBakeInfoProps(bpy.types.PropertyGroup): default = 'AO' ) + baked_entity_type : StringProperty( + name = 'Baked Entity Type', + description = 'Baked entity type', + default = '' + ) + samples : IntProperty( name = 'Bake Samples', description = 'Bake Samples, more means less jagged on generated textures', diff --git a/BakeToLayer.py b/BakeToLayer.py index ef68f601..e622880f 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1105,6 +1105,11 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if ent.uv_name != bprops.uv_map: ent.uv_name = bprops.uv_map + if bprops.type == 'AO' and ent.type == 'AO': + set_entity_prop_value(ent, 'ao_distance', bprops.ao_distance) + elif bprops.type == 'BEVEL_MASK' and ent.type == 'EDGE_DETECT': + set_entity_prop_value(ent, 'edge_detect_radius', bprops.bevel_radius) + if bprops.target_type == 'LAYER': layer_ids = [i for i, l in enumerate(yp.layers) if l in entities] if entities and yp.active_layer_index not in layer_ids: @@ -2224,9 +2229,11 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): if m1: layer = yp.layers[int(m1.group(1))] mask = None + source_tree = get_source_tree(layer) elif m2: layer = yp.layers[int(m2.group(1))] mask = layer.masks[int(m2.group(2))] + source_tree = get_mask_tree(mask) else: rdict['message'] = "Wrong entity!" @@ -2247,6 +2254,11 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): #ori_enable_blur = entity.enable_blur_vector #entity.enable_blur_vector = False + # Get existing baked image + existing_image = None + baked_source = source_tree.nodes.get(entity.baked_source) + if baked_source: existing_image = baked_source.image + # Remember things book = remember_before_bake(yp) @@ -2268,14 +2280,22 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): ori_layer_enable_masks = None # Make sure layer is enabled + ori_layer_enable = layer.enable layer.enable = True layer_opacity = get_entity_prop_value(layer, 'intensity_value') if layer_opacity != 1.0: ori_layer_intensity_value = layer_opacity set_entity_prop_value(layer, 'intensity_value', 1.0) + + # Make sure layer is active one + ori_layer_idx = yp.active_layer_index + layer_idx = get_layer_index(layer) + if yp.active_layer_index != layer_idx: + yp.active_layer_index = layer_idx if mask: # Set up active edit + ori_mask_enable = mask.enable mask.enable = True mask.active_edit = True else: @@ -2350,6 +2370,10 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): color_str = 'TRANSPARENT' colorspace = get_noncolor_name() if bprops.hdr else get_srgb_name() + # Use existing image colorspace if available + if existing_image: + colorspace = existing_image.colorspace_settings.name + # Create image if bprops.use_udim: image = bpy.data.images.new( @@ -2432,6 +2456,15 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): if ori_layer_enable_masks != None and layer.enable_masks != ori_layer_enable_masks: layer.enable_masks = ori_layer_enable_masks + if ori_layer_idx != yp.active_layer_index: + yp.active_layer_index = ori_layer_idx + + if ori_layer_enable != layer.enable: + layer.enable = ori_layer_enable + + if mask and ori_mask_enable != mask.enable: + mask.enable = ori_mask_enable + if modifiers_disabled: for mod in ori_enabled_mods: mod.enable = True @@ -2455,36 +2488,12 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): yp.halt_update = True - baked_source = source_tree.nodes.get(entity.baked_source) - if baked_source: - overwrite_image = baked_source.image - overwrite_image_name = overwrite_image.name - - # Remove old segment - if entity.baked_segment_name != '': - if overwrite_image.yia.is_image_atlas: - old_segment = overwrite_image.yia.segments.get(entity.baked_segment_name) - old_segment.unused = True - elif overwrite_image.yua.is_udim_atlas: - UDIM.remove_udim_atlas_segment_by_name(overwrite_image, entity.baked_segment_name, yp=yp) - - # Remove node first to also remove its data - remove_data = False if segment else True # Do not remove image atlas image since it can be use multiple times - remove_node(source_tree, entity, 'baked_source', remove_data=remove_data) - - # Rename image if it's not image atlas - if entity.baked_segment_name == '' and overwrite_image_name == bprops.name: - image.name = bprops.name - - # Remove baked segment name since the data is removed - if entity.baked_segment_name != '': - entity.baked_segment_name = '' - # Set bake info to image/segment bi = segment.bake_info if segment else image.y_bake_info bi.is_baked = True bi.is_baked_entity = True + bi.baked_entity_type = entity.type for attr in dir(bi): if attr.startswith('__'): continue if attr.startswith('bl_'): continue @@ -2502,11 +2511,29 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): bi.ao_distance = get_entity_prop_value(entity, 'ao_distance') bi.only_local = source.only_local - # Create new node - baked_source = new_node(source_tree, entity, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') + # Get baked source + overwrite_image = None + baked_source = source_tree.nodes.get(entity.baked_source) + if baked_source: + overwrite_image = baked_source.image + + # Remove old segment + if entity.baked_segment_name != '': + if overwrite_image.yia.is_image_atlas: + old_segment = overwrite_image.yia.segments.get(entity.baked_segment_name) + old_segment.unused = True + elif overwrite_image.yua.is_udim_atlas: + UDIM.remove_udim_atlas_segment_by_name(overwrite_image, entity.baked_segment_name, yp=yp) + + # Remove baked segment name + entity.baked_segment_name = '' + else: + baked_source = new_node(source_tree, entity, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') # Set image to baked node - baked_source.image = image + if overwrite_image and not segment: + replace_image(overwrite_image, image) + else: baked_source.image = image height_ch = get_height_channel(layer) if height_ch and height_ch.enable: @@ -2997,13 +3024,22 @@ class YRebakeBakedImages(bpy.types.Operator, BaseBakeOperator): @classmethod def poll(cls, context): return get_active_ypaint_node() and context.object.type == 'MESH' + + def invoke(self, context, event): + if get_user_preferences().skip_property_popups and not event.shift: + return self.execute(context) + + return context.window_manager.invoke_props_dialog(self, width=320) + + def draw(self, context): + self.layout.label(text='Rebaking all baked images can take a while to process', icon='ERROR') def execute(self, context): T = time.time() node = get_active_ypaint_node() yp = node.node_tree.yp - entities, images, segment_names, _ = get_yp_entities_images_and_segments(yp) + entities, images, segment_names, segment_name_props = get_yp_entities_images_and_segments(yp) for i, image in enumerate(images): @@ -3025,6 +3061,7 @@ def execute(self, context): entity = entities[i][0] entity_path = entity.path_from_id() + segment_name_prop = segment_name_props[i][0] m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity_path) m2 = re.match(r'^yp\.layers\[(\d+)\]\.channels\[(\d+)\]$', entity_path) @@ -3046,9 +3083,10 @@ def execute(self, context): 'uv_map': entity.uv_name if not entity.use_baked else entity.baked_uv_name }) - if not entity.use_baked: - bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) - else: bake_entity_as_image(entity, bprops=bake_properties, set_image_to_entity=True) + # 'baked_segment_name' meant the entity is baked as image + if segment_name_prop == 'baked_segment_name': + bake_entity_as_image(entity, bprops=bake_properties, set_image_to_entity=True) + else: bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) print('REBAKE ALL IMAGES: Rebaking all images is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') return {'FINISHED'} diff --git a/__init__.py b/__init__.py index 36ce9bfe..750061bf 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 2, 1), + "version": (2, 2, 2), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index ce71f662..509dfab6 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.2.1" +version = "2.2.2" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " diff --git a/common.py b/common.py index 4e7b5ccf..60d686ea 100644 --- a/common.py +++ b/common.py @@ -1569,6 +1569,11 @@ def get_layer_ids_with_specific_image(yp, image): if source.image and source.image == image: ids.append(i) + baked_source = get_layer_source(layer, get_baked=True) + if baked_source: + if baked_source.image and baked_source.image == image and i not in ids: + ids.append(i) + return ids def get_entities_with_specific_image(yp, image): @@ -1622,6 +1627,11 @@ def get_masks_with_specific_image(layer, image): if source.image and source.image == image: masks.append(m) + baked_source = get_mask_source(m, get_baked=True) + if baked_source: + if baked_source.image and baked_source.image == image and m not in masks: + m.append(m) + return masks def get_masks_with_specific_segment(layer, segment): @@ -1656,7 +1666,7 @@ def replace_image(old_image, new_image, yp=None, uv_name=''): if old_image == new_image: return # Rename - if not new_image.yia.is_image_atlas: + if not new_image.yia.is_image_atlas and not new_image.yua.is_udim_atlas: old_name = old_image.name old_image.name = '_____temp' new_image.name = old_name @@ -1686,9 +1696,13 @@ def replace_image(old_image, new_image, yp=None, uv_name=''): for entity in entities: if entity.type == 'IMAGE': source = get_entity_source(entity) - if entity.uv_name != uv_name: + if source and source.image == new_image and entity.uv_name != uv_name: entity.uv_name = uv_name + baked_source = get_entity_source(entity, get_baked=True) + if baked_source and baked_source.image == new_image and entity.baked_uv_name != uv_name: + entity.baked_uv_name = uv_name + # Recover temp uv update #ypui.disable_auto_temp_uv_update = ori_disable_temp_uv @@ -2271,8 +2285,8 @@ def get_entity_source(entity, get_baked=False): m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) - if m1: return get_layer_source(entity, get_baked) - elif m2: return get_mask_source(entity, get_baked) + if m1: return get_layer_source(entity, get_baked=get_baked) + elif m2: return get_mask_source(entity, get_baked=get_baked) return None @@ -5564,8 +5578,13 @@ def check_yp_entities_images_segments_in_lists(entity, image, segment_name, segm segment_name_props.append([segment_name_prop]) else: idx = [i for i, img in enumerate(images) if img == image][0] - entities[idx].append(entity) - segment_name_props[idx].append(segment_name_prop) + # Baked entity will be listed earlier + if segment_name_prop == 'baked_segment_name': + entities[idx].insert(0, entity) + segment_name_props[idx].insert(0, segment_name_prop) + else: + entities[idx].append(entity) + segment_name_props[idx].append(segment_name_prop) return entities, images, segment_names, segment_name_props @@ -7142,6 +7161,5 @@ def enable_eevee_ao(): scene.eevee.use_gtao = True def is_image_available_to_open(image): - # NOTE: Baked entity image is not available to open for now - return not image.yia.is_image_atlas and not image.yua.is_udim_atlas and not image.y_bake_info.is_baked_entity and image.name not in {'Render Result', 'Viewer Node'} + return not image.yia.is_image_atlas and not image.yua.is_udim_atlas and image.name not in {'Render Result', 'Viewer Node'} diff --git a/ui.py b/ui.py index 4f6e4c61..855a258f 100644 --- a/ui.py +++ b/ui.py @@ -243,7 +243,7 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh bi = image.y_bake_info if (bi.is_baked and not bi.is_baked_channel and - (not bi.is_baked_entity or bi.bake_type in {'BEVEL_MASK', 'AO'}) # NOTE: Some baked type can come from entity + (not bi.is_baked_entity or bi.baked_entity_type in {'EDGE_DETECT', 'AO'}) # NOTE: Some baked type can come from entity ): #if image.yia.is_image_atlas or image.yua.is_udim_atlas: # col.label(text=image.name + ' (Baked)', icon_value=lib.get_icon('image')) diff --git a/versioning.py b/versioning.py index 00d12588..3102873d 100644 --- a/versioning.py +++ b/versioning.py @@ -135,6 +135,76 @@ def check_list_items_then_refresh(yp): ch.override = False ch.override = True +def update_bake_info_baked_entity_props(yp): + + entities = [] + bis = [] + images = [] + + for layer in yp.layers: + source = get_layer_source(layer, get_baked=True) + if source and source.image: + image = source.image + if not image.yia.is_image_atlas and not image.yua.is_udim_atlas: + entities.append(layer) + bis.append(image.y_bake_info) + images.append(image) + + else: + if image.yia.is_image_atlas: + segment = image.yia.segments.get(layer.baked_segment_name) + elif image.yua.is_udim_atlas: + segment = image.yua.segments.get(layer.baked_segment_name) + else: segment = None + + if segment: + entities.append(layer) + bis.append(segment.bake_info) + images.append(image) + + for mask in layer.masks: + source = get_mask_source(mask, get_baked=True) + if source and source.image: + image = source.image + if not image.yia.is_image_atlas and not image.yua.is_udim_atlas: + entities.append(mask) + bis.append(image.y_bake_info) + images.append(image) + + else: + if image.yia.is_image_atlas: + segment = image.yia.segments.get(mask.baked_segment_name) + elif image.yua.is_udim_atlas: + segment = image.yua.segments.get(mask.baked_segment_name) + else: segment = None + + if segment: + entities.append(mask) + bis.append(segment.bake_info) + images.append(image) + + for i, entity in enumerate(entities): + bi = bis[i] + image = images[i] + + if not bi.is_baked_entity: + bi.is_baked_entity = True + print('INFO: Image '+image.name+' is marked as baked entity image!') + + if bi.baked_entity_type != entity.type: + bi.baked_entity_type = entity.type + print('INFO: Image '+image.name+' is updated with baked entity type info!') + + if entity.type == 'AO': + osource = get_entity_source(entity) + bi.bake_type = 'AO' + bi.ao_distance = get_entity_prop_value(entity, 'ao_distance') + bi.only_local = osource.only_local + + elif entity.type == 'EDGE_DETECT': + bi.bake_type = 'BEVEL_MASK' + bi.bevel_radius = get_entity_prop_value(entity, 'edge_detect_radius') + def update_yp_tree(tree): cur_version = get_current_version_str() yp = tree.yp @@ -767,41 +837,7 @@ def update_yp_tree(tree): # Version 2.2.1 has flag prop for baked entity if version_tuple(yp.version) < (2, 2, 1): - for layer in yp.layers: - source = get_layer_source(layer, get_baked=True) - if source and source.image: - image = source.image - if not image.yia.is_image_atlas and not image.yua.is_udim_atlas: - image.y_bake_info.is_baked_entity = True - print('INFO: Image '+image.name+' is marked as baked entity image!') - else: - if image.yia.is_image_atlas: - segment = image.yia.segments.get(layer.baked_segment_name) - elif image.yua.is_udim_atlas: - segment = image.yua.segments.get(layer.baked_segment_name) - else: segment = None - - if segment: - segment.bake_info.is_baked_entity = True - print('INFO: One image segment from '+image.name+' is marked as baked entity image!') - - for mask in layer.masks: - source = get_mask_source(mask, get_baked=True) - if source and source.image: - image = source.image - if not image.yia.is_image_atlas and not image.yua.is_udim_atlas: - image.y_bake_info.is_baked_entity = True - print('INFO: Image '+image.name+' is marked as baked entity image!') - else: - if image.yia.is_image_atlas: - segment = image.yia.segments.get(mask.baked_segment_name) - elif image.yua.is_udim_atlas: - segment = image.yua.segments.get(mask.baked_segment_name) - else: segment = None - - if segment: - segment.bake_info.is_baked_entity = True - print('INFO: One image segment from '+image.name+' is marked as baked entity image!') + update_bake_info_baked_entity_props(yp) for ch in yp.channels: @@ -813,6 +849,10 @@ def update_yp_tree(tree): baked = tree.nodes.get(ch.baked) if baked: ch.expand_baked_data = True + # Version 2.2.2 has more flag props for baked entity + if version_tuple(yp.version) < (2, 2, 2): + update_bake_info_baked_entity_props(yp) + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From a12c6e88a6e10f6b66d6cf5577f475db7d61fcd7 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 10 Apr 2025 00:37:24 +0700 Subject: [PATCH 121/283] Add baked entity image name label above the rebake button --- ui.py | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/ui.py b/ui.py index 855a258f..378a015f 100644 --- a/ui.py +++ b/ui.py @@ -1626,14 +1626,24 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i rrrow.operator("wm.y_bake_entity_to_image", text='Bake '+mask_type_labels[layer.type]+' as Image', icon_value=lib.get_icon('bake')) elif layer.baked_source != '': + + baked_source = layer_tree.nodes.get(layer.baked_source) + if baked_source and baked_source.image: + brow = rrcol.row(align=True) + brow.active = layer.use_baked + brow.label(text='Baked: ') + crow = brow.row(align=True) + crow.alignment = 'RIGHT' + crow.label(text=baked_source.image.name, icon='IMAGE_DATA') + rrcol.context_pointer_set('entity', layer) rrcol.context_pointer_set('layer', layer) - rrrow = rrcol.row(align=True) - rrrow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) - rrrow.prop(layer, 'use_baked', text='Use Baked', toggle=True) + brow = rrcol.row(align=True) + brow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) + brow.prop(layer, 'use_baked', text='Use Baked', toggle=True) icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' - rrrow.operator("wm.y_remove_baked_entity", text='', icon=icon) + brow.operator("wm.y_remove_baked_entity", text='', icon=icon) layout.separator() @@ -2938,12 +2948,26 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rrrow.operator("wm.y_bake_entity_to_image", text='Bake '+mask_type_labels[mask.type]+' as Image', icon_value=lib.get_icon('bake')) elif mask.baked_source != '': - rrrow = rrcol.row(align=True) - rrrow.label(text='', icon='BLANK1') - rrrow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) - rrrow.prop(mask, 'use_baked', text='Use Baked', toggle=True) + + baked_source = mask_tree.nodes.get(mask.baked_source) + if baked_source and baked_source.image: + brow = rrcol.row(align=True) + brow.active = mask.use_baked + brow.label(text='', icon='BLANK1') + + crow = brow.row(align=True) + drow = crow.row(align=True) + drow.label(text='Baked: ') + drow = crow.row(align=True) + drow.alignment = 'RIGHT' + drow.label(text=baked_source.image.name, icon='IMAGE_DATA') + + brow = rrcol.row(align=True) + brow.label(text='', icon='BLANK1') + brow.operator("wm.y_bake_entity_to_image", text='Rebake', icon_value=lib.get_icon('bake')) + brow.prop(mask, 'use_baked', text='Use Baked', toggle=True) icon = 'TRASH' if is_bl_newer_than(2, 80) else 'X' - rrrow.operator("wm.y_remove_baked_entity", text='', icon=icon) + brow.operator("wm.y_remove_baked_entity", text='', icon=icon) if mask.type not in {'VCOL', 'HEMI', 'OBJECT_INDEX', 'COLOR_ID', 'BACKFACE', 'EDGE_DETECT', 'MODIFIER', 'AO'}: rrcol.separator() From 02bf4a1e879ce1a9aa562ca056246fb375f34a30 Mon Sep 17 00:00:00 2001 From: Bappity <12457072+bappitybup@users.noreply.github.com> Date: Wed, 9 Apr 2025 18:43:19 +0100 Subject: [PATCH 122/283] Add ability to copy file path in UI, containing folder or full path (#263) * - add 2 classes for: - copy file path menu with 2 options - copy to clipboard operator that can copy filepath to system clipboard and display a little popup to indicate completion * - remove temp comments - move copy_to_clipboard to image_ops.py - make new open_containing_folder operator, only supports windows for now * refactor copy_to_clipboard and open_containing_folder to use CamelCase and a Y prefix * - change "Copy Containing Folder" text to "Copy Containing Folder Path" - change copy_path_menu shortcut prefixes from "node" to "wm" * - hide "open in containing folder" if not on windows * - update "YCopyToClipboard" to "YCopyImagePathToClipboard" - update "wm.copy_to_clipboard" to "wm.copy_image_path_to_clipboard" - update "Copy to Clipboard" to "Copy Image Path To Clipboard" * - update "YOpenContainingFolder" to "YOpenContainingImageFolder" - update "wm.open_containing_folder" to "wm.open_containing_image_folder" - update "Open Containing Folder" to "Open Containing Image Folder" * -update "Copy Path Options" to "Copy Image Path Options" -update "NODE_MT_copy_path_menu" to "NODE_MT_copy_image_path_menu" * add bl_description to new methods for image path * add icons to menu options and change labels --------- Co-authored-by: Bappity --- image_ops.py | 36 +++++++++++++++++++++++++++++++++++- ui.py | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/image_ops.py b/image_ops.py index efe4de59..ccf442a2 100644 --- a/image_ops.py +++ b/image_ops.py @@ -1,4 +1,4 @@ -import bpy, os +import bpy, os, platform, subprocess import tempfile from bpy.props import * from bpy_extras.io_utils import ExportHelper @@ -312,6 +312,36 @@ def save_pack_all(yp): for image in images: clean_object_references(image) +class YCopyImagePathToClipboard(bpy.types.Operator): + bl_idname = "wm.copy_image_path_to_clipboard" + bl_label = "Copy Image Path To Clipboard" + bl_description = get_addon_title() + " Copy the image file path to the system clipboard" + clipboard_text: bpy.props.StringProperty() + + def execute(self, context): + context.window_manager.clipboard = self.clipboard_text + self.report({'INFO'}, "Copied: " + self.clipboard_text) + return {'FINISHED'} + +class YOpenContainingImageFolder(bpy.types.Operator): + bl_idname = "wm.open_containing_image_folder" + bl_label = "Open Containing Image Folder" + bl_description = get_addon_title() + " Open the folder containing the image file and highlight it" + file_path: bpy.props.StringProperty() + + def execute(self, context): + if not os.path.exists(self.file_path): + self.report({'ERROR'}, "File does not exist") + return {'CANCELLED'} + try: + # Add more branches below for different operating systems + if os.name == 'nt': # Windows + subprocess.run(["explorer", "/select,", self.file_path]) + except Exception as e: + self.report({'ERROR'}, str(e)) + return {'CANCELLED'} + return {'FINISHED'} + class YInvertImage(bpy.types.Operator): """Invert Image""" bl_idname = "wm.y_invert_image" @@ -1278,6 +1308,8 @@ def execute(self, context): return {'FINISHED'} def register(): + bpy.utils.register_class(YCopyImagePathToClipboard) + bpy.utils.register_class(YOpenContainingImageFolder) bpy.utils.register_class(YInvertImage) bpy.utils.register_class(YRefreshImage) bpy.utils.register_class(YPackImage) @@ -1288,6 +1320,8 @@ def register(): bpy.utils.register_class(YConvertImageBitDepth) def unregister(): + bpy.utils.unregister_class(YCopyImagePathToClipboard) + bpy.utils.unregister_class(YOpenContainingImageFolder) bpy.utils.unregister_class(YInvertImage) bpy.utils.unregister_class(YRefreshImage) bpy.utils.unregister_class(YPackImage) diff --git a/ui.py b/ui.py index 378a015f..1b084c8a 100644 --- a/ui.py +++ b/ui.py @@ -1,10 +1,33 @@ -import bpy, re, time, os +import bpy, re, time, os, platform from bpy.props import * from bpy.app.handlers import persistent from bpy.app.translations import pgettext_iface from . import lib, Modifier, MaskModifier, UDIM, ListItem from .common import * + +class NODE_MT_copy_image_path_menu(bpy.types.Menu): + bl_label = "Copy Image Path Options" + bl_idname = "NODE_MT_copy_image_path_menu" + bl_description = get_addon_title() + " Options for copying the image path or opening the containing folder" + + def draw(self, context): + layout = self.layout + image = context.image + full_path = os.path.normpath(image.filepath or "") + folder_path = os.path.normpath(os.path.dirname(full_path)) if full_path else "" + + op = layout.operator("wm.copy_image_path_to_clipboard", text="Copy Image Filepath", icon="COPYDOWN") + op.clipboard_text = full_path + + op = layout.operator("wm.copy_image_path_to_clipboard", text="Copy Containing Folder Path") + op.clipboard_text = folder_path + + # Add more branches below for different operating systems + if os.name == 'nt': # Windows + op = layout.operator("wm.open_containing_image_folder", text="Open Image in Explorer", icon="FILE_FOLDER") + op.file_path = full_path + RGBA_CHANNEL_PREFIX = { 'ALPHA' : 'alpha_', 'R' : 'r_', @@ -312,7 +335,12 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh if not image.filepath: col.label(text='Image Path: -') else: - col.label(text='Path: ' + image.filepath) + # Create a row with two parts: one label and one dropdown button. + row = col.row(align=True) + row.label(text="Path: " + os.path.normpath(image.filepath)) + row.context_pointer_set('image', image) + row.menu("NODE_MT_copy_image_path_menu", text="", icon='DOWNARROW_HLT') + image_format = 'RGBA' image_bit = int(image.depth / 4) @@ -7753,6 +7781,8 @@ def register(): bpy.utils.register_class(YPAssetBrowserMenu) bpy.utils.register_class(YPFileBrowserMenu) + bpy.utils.register_class(NODE_MT_copy_image_path_menu) + if not is_bl_newer_than(2, 80): bpy.utils.register_class(VIEW3D_PT_YPaint_tools) bpy.utils.register_class(NODE_PT_YPaint) @@ -7834,6 +7864,8 @@ def unregister(): bpy.utils.unregister_class(YPAssetBrowserMenu) bpy.utils.unregister_class(YPFileBrowserMenu) + bpy.utils.unregister_class(NODE_MT_copy_image_path_menu) + if not is_bl_newer_than(2, 80): bpy.utils.unregister_class(VIEW3D_PT_YPaint_tools) bpy.utils.unregister_class(NODE_PT_YPaint) From 7567d8be80cb5ae48fd6ba9a2e9cc74ba04a4b17 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 10 Apr 2025 01:29:33 +0700 Subject: [PATCH 123/283] Make sure `Open Image in Explorer' works and add contributor credit --- image_ops.py | 11 +++++++---- ui.py | 47 +++++++++++++++++++++++------------------------ 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/image_ops.py b/image_ops.py index ccf442a2..55d6bccf 100644 --- a/image_ops.py +++ b/image_ops.py @@ -316,7 +316,8 @@ class YCopyImagePathToClipboard(bpy.types.Operator): bl_idname = "wm.copy_image_path_to_clipboard" bl_label = "Copy Image Path To Clipboard" bl_description = get_addon_title() + " Copy the image file path to the system clipboard" - clipboard_text: bpy.props.StringProperty() + + clipboard_text : bpy.props.StringProperty() def execute(self, context): context.window_manager.clipboard = self.clipboard_text @@ -327,16 +328,18 @@ class YOpenContainingImageFolder(bpy.types.Operator): bl_idname = "wm.open_containing_image_folder" bl_label = "Open Containing Image Folder" bl_description = get_addon_title() + " Open the folder containing the image file and highlight it" - file_path: bpy.props.StringProperty() + + file_path : bpy.props.StringProperty() def execute(self, context): - if not os.path.exists(self.file_path): + filepath = bpy.path.abspath(self.file_path) + if not os.path.exists(filepath): self.report({'ERROR'}, "File does not exist") return {'CANCELLED'} try: # Add more branches below for different operating systems if os.name == 'nt': # Windows - subprocess.run(["explorer", "/select,", self.file_path]) + subprocess.run(["explorer", "/select,", filepath]) except Exception as e: self.report({'ERROR'}, str(e)) return {'CANCELLED'} diff --git a/ui.py b/ui.py index 1b084c8a..c3d18a3a 100644 --- a/ui.py +++ b/ui.py @@ -6,28 +6,6 @@ from .common import * -class NODE_MT_copy_image_path_menu(bpy.types.Menu): - bl_label = "Copy Image Path Options" - bl_idname = "NODE_MT_copy_image_path_menu" - bl_description = get_addon_title() + " Options for copying the image path or opening the containing folder" - - def draw(self, context): - layout = self.layout - image = context.image - full_path = os.path.normpath(image.filepath or "") - folder_path = os.path.normpath(os.path.dirname(full_path)) if full_path else "" - - op = layout.operator("wm.copy_image_path_to_clipboard", text="Copy Image Filepath", icon="COPYDOWN") - op.clipboard_text = full_path - - op = layout.operator("wm.copy_image_path_to_clipboard", text="Copy Containing Folder Path") - op.clipboard_text = folder_path - - # Add more branches below for different operating systems - if os.name == 'nt': # Windows - op = layout.operator("wm.open_containing_image_folder", text="Open Image in Explorer", icon="FILE_FOLDER") - op.file_path = full_path - RGBA_CHANNEL_PREFIX = { 'ALPHA' : 'alpha_', 'R' : 'r_', @@ -235,6 +213,28 @@ def draw_bake_info(bake_info, layout, entity): else: c.target_type = 'MASK' c.overwrite_current = True +class NODE_MT_copy_image_path_menu(bpy.types.Menu): + bl_label = "Copy Image Path Options" + bl_idname = "NODE_MT_copy_image_path_menu" + bl_description = get_addon_title() + " Options for copying the image path or opening the containing folder" + + def draw(self, context): + layout = self.layout + image = context.image + + full_path = os.path.normpath(image.filepath or "") + op = layout.operator("wm.copy_image_path_to_clipboard", text="Copy Image Filepath", icon="COPYDOWN") + op.clipboard_text = full_path + + # Add more branches below for different operating systems + if os.name == 'nt': # Windows + op = layout.operator("wm.open_containing_image_folder", text="Open Image in Explorer", icon="FILE_FOLDER") + op.file_path = image.filepath + else: + folder_path = os.path.normpath(os.path.dirname(full_path)) if full_path else "" + op = layout.operator("wm.copy_image_path_to_clipboard", text="Copy Containing Folder Path") + op.clipboard_text = folder_path + def draw_image_props(context, source, layout, entity=None, show_flip_y=False, show_datablock=True, show_source_input=False): image = source.image @@ -5308,6 +5308,7 @@ def draw_ypaint_about(self, context): col.operator('wm.url_open', text='morirain', icon=icon_name).url = 'https://github.com/morirain' col.operator('wm.url_open', text='kareemov03', icon=icon_name).url = 'https://www.artstation.com/kareem' col.operator('wm.url_open', text='passivestar', icon=icon_name).url = 'https://github.com/passivestar' + col.operator('wm.url_open', text='bappity', icon=icon_name).url = 'https://github.com/bappitybup' col.separator() col.label(text='Documentation:') @@ -7780,7 +7781,6 @@ def register(): bpy.utils.register_class(NODE_UL_YPaint_list_items) bpy.utils.register_class(YPAssetBrowserMenu) bpy.utils.register_class(YPFileBrowserMenu) - bpy.utils.register_class(NODE_MT_copy_image_path_menu) if not is_bl_newer_than(2, 80): @@ -7863,7 +7863,6 @@ def unregister(): bpy.utils.unregister_class(NODE_UL_YPaint_list_items) bpy.utils.unregister_class(YPAssetBrowserMenu) bpy.utils.unregister_class(YPFileBrowserMenu) - bpy.utils.unregister_class(NODE_MT_copy_image_path_menu) if not is_bl_newer_than(2, 80): From d486394293e001cba0a76e0297f62df6a911ca6c Mon Sep 17 00:00:00 2001 From: ucupumar Date: Thu, 10 Apr 2025 02:14:40 +0700 Subject: [PATCH 124/283] Implement `Open Image in File Maneger` on Mac and Linux --- image_ops.py | 8 ++++++-- ui.py | 14 ++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/image_ops.py b/image_ops.py index 55d6bccf..1ed7f7b9 100644 --- a/image_ops.py +++ b/image_ops.py @@ -1,4 +1,4 @@ -import bpy, os, platform, subprocess +import bpy, os, subprocess, sys import tempfile from bpy.props import * from bpy_extras.io_utils import ExportHelper @@ -338,8 +338,12 @@ def execute(self, context): return {'CANCELLED'} try: # Add more branches below for different operating systems - if os.name == 'nt': # Windows + if sys.platform == 'win32': # Windows subprocess.run(["explorer", "/select,", filepath]) + elif sys.platform == 'darwin': # Mac + subprocess.call(["open", "-R", filepath]) + elif sys.platform == 'linux2': # Linux + subprocess.check_call(['xdg-open', '--', filepath]) except Exception as e: self.report({'ERROR'}, str(e)) return {'CANCELLED'} diff --git a/ui.py b/ui.py index c3d18a3a..45f07e4d 100644 --- a/ui.py +++ b/ui.py @@ -1,4 +1,4 @@ -import bpy, re, time, os, platform +import bpy, re, time, os, sys from bpy.props import * from bpy.app.handlers import persistent from bpy.app.translations import pgettext_iface @@ -227,8 +227,15 @@ def draw(self, context): op.clipboard_text = full_path # Add more branches below for different operating systems - if os.name == 'nt': # Windows - op = layout.operator("wm.open_containing_image_folder", text="Open Image in Explorer", icon="FILE_FOLDER") + if sys.platform in {'win32', 'darwin', 'linux2'}: + + if sys.platform == 'win32': + browser_name = 'Explorer' + elif sys.platform == 'darwin': + browser_name = 'Finder' + else: browser_name = 'File Manager' + + op = layout.operator("wm.open_containing_image_folder", text="Open Image in "+browser_name, icon="FILE_FOLDER") op.file_path = image.filepath else: folder_path = os.path.normpath(os.path.dirname(full_path)) if full_path else "" @@ -341,7 +348,6 @@ def draw_image_props(context, source, layout, entity=None, show_flip_y=False, sh row.context_pointer_set('image', image) row.menu("NODE_MT_copy_image_path_menu", text="", icon='DOWNARROW_HLT') - image_format = 'RGBA' image_bit = int(image.depth / 4) if image.depth in {24, 48, 96}: From 84ac7411e065c09501f62b8bb408bc50a59e6738 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 10 Apr 2025 02:40:25 +0700 Subject: [PATCH 125/283] Use `call` instead of `run` to make sure the subprocess works on legacy blenders --- image_ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/image_ops.py b/image_ops.py index 1ed7f7b9..13f0d988 100644 --- a/image_ops.py +++ b/image_ops.py @@ -339,7 +339,7 @@ def execute(self, context): try: # Add more branches below for different operating systems if sys.platform == 'win32': # Windows - subprocess.run(["explorer", "/select,", filepath]) + subprocess.call(["explorer", "/select,", filepath]) elif sys.platform == 'darwin': # Mac subprocess.call(["open", "-R", filepath]) elif sys.platform == 'linux2': # Linux From 8e09408a32970a378ef669ce871ad4ee6d72d7a4 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Thu, 10 Apr 2025 03:06:55 +0700 Subject: [PATCH 126/283] Always show blend type option when creating new mask since mask is not always using `Multiply` blend --- BakeToLayer.py | 5 +++++ Mask.py | 10 +++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index e622880f..089cc32d 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1996,6 +1996,8 @@ def draw(self, context): col.separator() col.label(text='Bake Device:') col.label(text='Interpolation:') + if self.target_type == 'MASK': + col.label(text='Blend:') col.separator() col.label(text='') #col.label(text='') @@ -2080,6 +2082,9 @@ def draw(self, context): col.prop(self, 'bake_device', text='') col.prop(self, 'interpolation', text='') + if self.target_type == 'MASK': + col.prop(self, 'blend_type', text='') + col.separator() if self.type.startswith('OTHER_OBJECT_'): col.prop(self, 'ssaa') diff --git a/Mask.py b/Mask.py index 3bdd208c..0ad813c7 100644 --- a/Mask.py +++ b/Mask.py @@ -752,9 +752,7 @@ def invoke(self, context, event): self.uv_map_coll.add().name = uv.name # The default blend type for mask is multiply - if len(layer.masks) == 0: - self.blend_type = 'MULTIPLY' - elif self.type in {'MODIFIER'}: + if self.type in {'MODIFIER'}: self.blend_type = 'MIX' else: self.blend_type = 'MULTIPLY' @@ -845,8 +843,7 @@ def draw(self, context): if self.type == 'OBJECT_INDEX': col.label(text='Object Index') - if len(layer.masks) > 0: - col.label(text='Blend:') + col.label(text='Blend:') col = row.column(align=False) col.prop(self, 'name', text='') @@ -912,8 +909,7 @@ def draw(self, context): if self.type == 'OBJECT_INDEX': col.prop(self, 'object_index', text='') - if len(layer.masks) > 0: - col.prop(self, 'blend_type', text='') + col.prop(self, 'blend_type', text='') def execute(self, context): if hasattr(self, 'auto_cancel') and self.auto_cancel: return {'CANCELLED'} From d2098f49578ae9445183aa515464c1b3a83da527 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 11 Apr 2025 02:53:57 +0700 Subject: [PATCH 127/283] Fix: `Refresh UV` button is not consistently appear after transforming layer/mask on texture paint mode --- ImageAtlas.py | 8 +++- Root.py | 4 ++ common.py | 89 +++++++++++++++++++++++++++--------------- input_outputs.py | 4 +- vector_displacement.py | 2 +- 5 files changed, 70 insertions(+), 37 deletions(-) diff --git a/ImageAtlas.py b/ImageAtlas.py index 4e52e960..452df5c3 100644 --- a/ImageAtlas.py +++ b/ImageAtlas.py @@ -509,7 +509,7 @@ def execute(self, context): entities, images, segment_names, segment_name_props = get_yp_entities_images_and_segments(yp) else: mapping = get_entity_mapping(context.entity) - if is_transformed(mapping) and not context.entity.use_baked: + if is_transformed(mapping, context.entity) and not context.entity.use_baked: self.report({'ERROR'}, "Cannot convert transformed image!") return {'CANCELLED'} @@ -536,7 +536,7 @@ def execute(self, context): # Transformed mapping on entity is not valid for conversion mapping = get_entity_mapping(entity) - if use_baked or not is_transformed(mapping): + if use_baked or not is_transformed(mapping, entity): valid_entities.append(entity) if not any(valid_entities): @@ -578,6 +578,10 @@ def execute(self, context): #entity.segment_name = new_segment.name setattr(entity, segment_name_props[i][j], new_segment.name) + # Make sure uniform scaling is not used + if entity.enable_uniform_scale: + entity.enable_uniform_scale = False + # Set image to editor if entity == context.entity: update_image_editor_image(bpy.context, ia_image) diff --git a/Root.py b/Root.py index 95d529da..45d7f265 100644 --- a/Root.py +++ b/Root.py @@ -4116,6 +4116,10 @@ class YPaintObjectProps(bpy.types.PropertyGroup): mesh_hash : StringProperty(default='') uv_hashes : CollectionProperty(type=YPaintObjectUVHash) + texpaint_translation : FloatVectorProperty(size=3, default=(0.0, 0.0, 0.0)) + texpaint_rotation : FloatVectorProperty(size=3, default=(0.0, 0.0, 0.0)) + texpaint_scale : FloatVectorProperty(size=3, default=(1.0, 1.0, 1.0)) + #class YPaintMeshProps(bpy.types.PropertyGroup): # parallax_scale_min : FloatProperty(default=0.0) # parallax_scale_span : FloatProperty(default=1.0) diff --git a/common.py b/common.py index 60d686ea..ec5b4682 100644 --- a/common.py +++ b/common.py @@ -3275,6 +3275,28 @@ def update_mapping(entity, use_baked=False): if not active_mask or (mask and active_mask == mask): yp.need_temp_uv_refresh = True +def get_transformation(mapping, entity=None): + translation = (0.0, 0.0, 0.0) + rotation = (0.0, 0.0, 0.0) + scale = (1.0, 1.0, 1.0) + + if is_bl_newer_than(2, 81): + translation = mapping.inputs[1].default_value + rotation = mapping.inputs[2].default_value + + if entity and entity.enable_uniform_scale: + scale_val = get_entity_prop_value(entity, 'uniform_scale_value') + scale = (scale_val, scale_val, scale_val) + else: + scale = mapping.inputs[3].default_value + + else: + translation = mapping.translation + rotation = mapping.rotation + scale = mapping.scale + + return translation, rotation, scale + def is_active_uv_map_missmatch_entity(obj, entity): # Non image entity doesn't need matching UV @@ -3293,9 +3315,18 @@ def is_active_uv_map_missmatch_entity(obj, entity): uv_name = entity.uv_name if not entity.use_baked or entity.baked_uv_name == '' else entity.baked_uv_name - if mapping and is_transformed(mapping) and obj.mode == 'TEXTURE_PAINT': + if mapping and is_transformed(mapping, entity) and obj.mode == 'TEXTURE_PAINT': if uv_layer.name != TEMP_UV: return True + elif TEMP_UV: + translation, rotation, scale = get_transformation(mapping, entity) + for i in range(3): + if obj.yp.texpaint_translation[i] != translation[i]: + return True + if obj.yp.texpaint_rotation[i] != rotation[i]: + return True + if obj.yp.texpaint_scale[i] != scale[i]: + return True elif uv_name in uv_layers and uv_name != uv_layer.name: return True @@ -3314,33 +3345,19 @@ def is_active_uv_map_missmatch_active_entity(obj, layer): return is_active_uv_map_missmatch_entity(obj, entity) -def is_transformed(mapping): - if is_bl_newer_than(2, 81): - if (mapping.inputs[1].default_value[0] != 0.0 or - mapping.inputs[1].default_value[1] != 0.0 or - mapping.inputs[1].default_value[2] != 0.0 or - mapping.inputs[2].default_value[0] != 0.0 or - mapping.inputs[2].default_value[1] != 0.0 or - mapping.inputs[2].default_value[2] != 0.0 or - mapping.inputs[3].default_value[0] != 1.0 or - mapping.inputs[3].default_value[1] != 1.0 or - mapping.inputs[3].default_value[2] != 1.0 - ): - return True - return False - else: - if (mapping.translation[0] != 0.0 or - mapping.translation[1] != 0.0 or - mapping.translation[2] != 0.0 or - mapping.rotation[0] != 0.0 or - mapping.rotation[1] != 0.0 or - mapping.rotation[2] != 0.0 or - mapping.scale[0] != 1.0 or - mapping.scale[1] != 1.0 or - mapping.scale[2] != 1.0 - ): - return True - return False +def is_transformed(mapping, entity=None): + translation, rotation, scale = get_transformation(mapping, entity) + + for t in translation: + if t != 0.0: return True + + for r in rotation: + if r != 0.0: return True + + for s in scale: + if s != 1.0: return True + + return False def check_uvmap_on_other_objects_with_same_mat(mat, uv_name, set_active=True): @@ -3527,7 +3544,7 @@ def refresh_temp_uv(obj, entity): if not hasattr(source, 'image'): return False img = source.image - if not img or not mapping or not is_transformed(mapping): + if not img or not mapping or not is_transformed(mapping, entity): return False set_active_object(obj) @@ -3556,9 +3573,17 @@ def refresh_temp_uv(obj, entity): rotation_y = mapping.inputs[2].default_value[1] if is_bl_newer_than(2, 81) else mapping.rotation[1] rotation_z = mapping.inputs[2].default_value[2] if is_bl_newer_than(2, 81) else mapping.rotation[2] - scale_x = mapping.inputs[3].default_value[0] if is_bl_newer_than(2, 81) else mapping.scale[0] - scale_y = mapping.inputs[3].default_value[1] if is_bl_newer_than(2, 81) else mapping.scale[1] - scale_z = mapping.inputs[3].default_value[2] if is_bl_newer_than(2, 81) else mapping.scale[2] + if entity.enable_uniform_scale and is_bl_newer_than(2, 81): + scale_x = scale_y = scale_z = get_entity_prop_value(entity, 'uniform_scale_value') + else: + scale_x = mapping.inputs[3].default_value[0] if is_bl_newer_than(2, 81) else mapping.scale[0] + scale_y = mapping.inputs[3].default_value[1] if is_bl_newer_than(2, 81) else mapping.scale[1] + scale_z = mapping.inputs[3].default_value[2] if is_bl_newer_than(2, 81) else mapping.scale[2] + + # Remember the transformation to object props + obj.yp.texpaint_translation = (translation_x, translation_y, translation_z) + obj.yp.texpaint_rotation = (rotation_x, rotation_y, rotation_z) + obj.yp.texpaint_scale = (scale_x, scale_y, scale_z) # Create transformation matrix m1 = m2 = m3 = m4 = None diff --git a/input_outputs.py b/input_outputs.py index 244d1da4..b1f60616 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -876,7 +876,7 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) dirty = create_prop_input(layer, 'decal_distance_value', valid_inputs, input_index, dirty) input_index += 1 - if is_bl_newer_than(2, 81) and layer.enable_uniform_scale and is_layer_using_vector(layer): + if is_bl_newer_than(2, 81) and layer.enable_uniform_scale and is_layer_using_vector(layer) and layer.segment_name == '': dirty = create_prop_input(layer, 'uniform_scale_value', valid_inputs, input_index, dirty) input_index += 1 @@ -1006,7 +1006,7 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) dirty = create_prop_input(mask, 'intensity_value', valid_inputs, input_index, dirty) input_index += 1 - if is_bl_newer_than(2, 81) and mask.enable_uniform_scale and is_mask_using_vector(mask): + if is_bl_newer_than(2, 81) and mask.enable_uniform_scale and is_mask_using_vector(mask) and mask.segment_name == '': dirty = create_prop_input(mask, 'uniform_scale_value', valid_inputs, input_index, dirty) input_index += 1 diff --git a/vector_displacement.py b/vector_displacement.py index 4b16c37d..603d348b 100644 --- a/vector_displacement.py +++ b/vector_displacement.py @@ -706,7 +706,7 @@ def execute(self, context): height_ch = get_height_channel(layer) intensity = get_vdm_intensity(layer, height_ch) if height_ch else 1.0 - if mapping and is_transformed(mapping): + if mapping and is_transformed(mapping, layer): self.report({'ERROR'}, "Cannot sculpt VDM with transformed mapping!") return {'CANCELLED'} From ac0f78d964cbfc967977793acaf78d077ac1af6f Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 12 Apr 2025 00:29:35 +0700 Subject: [PATCH 128/283] Add option to fill new vertex color mask when in edit mode --- Layer.py | 34 +++++++++++++++++++++------------- Mask.py | 41 ++++++++++++++++++++++++++--------------- common.py | 8 ++++++-- 3 files changed, 53 insertions(+), 30 deletions(-) diff --git a/Layer.py b/Layer.py index bf4bdba3..59af0331 100644 --- a/Layer.py +++ b/Layer.py @@ -54,7 +54,7 @@ def add_new_layer( mask_texcoord_type='UV', mask_color='BLACK', mask_use_hdr=False, mask_uv_name='', mask_width=1024, mask_height=1024, use_image_atlas_for_mask=False, hemi_space='WORLD', hemi_use_prev_normal=True, - mask_color_id=(1, 0, 1), mask_color_id_fill=True, + mask_color_id=(1, 0, 1), mask_vcol_fill=True, mask_vcol_data_type='BYTE_COLOR', mask_vcol_domain='CORNER', use_divider_alpha=False, use_udim_for_mask=False, interpolation='Linear', mask_interpolation='Linear', mask_edge_detect_radius=0.05, @@ -298,11 +298,15 @@ def add_new_layer( set_obj_vertex_colors(o, mask_vcol.name, (0.0, 0.0, 0.0, 1.0)) set_active_vertex_color(o, mask_vcol) + # Fill selected geometry if in edit mode + if mask_vcol_fill and bpy.context.mode == 'EDIT_MESH': + bpy.ops.mesh.y_vcol_fill(color_option='WHITE') + elif mask_type == 'COLOR_ID': - check_colorid_vcol(objs) + check_colorid_vcol(objs, set_as_active=True) # Fill selected geometry if in edit mode - if mask_color_id_fill and bpy.context.mode == 'EDIT_MESH': + if mask_vcol_fill and bpy.context.mode == 'EDIT_MESH': bpy.ops.mesh.y_vcol_fill_face_custom(color=(mask_color_id[0], mask_color_id[1], mask_color_id[2], 1.0)) mask = Mask.add_new_mask( @@ -922,9 +926,9 @@ class YNewLayer(bpy.types.Operator): default=(1.0, 0.0, 1.0), min=0.0, max=1.0 ) - mask_color_id_fill : BoolProperty( - name = 'Fill Selected Geometry with Color ID', - description = 'Fill selected geometry with color ID', + mask_vcol_fill : BoolProperty( + name = 'Fill Selected Geometry with Vertex Color / Color ID Mask', + description = 'Fill selected geometry with vertex color or color ID mask', default = True ) @@ -1387,7 +1391,7 @@ def draw(self, context): if self.mask_type == 'COLOR_ID': col.prop(self, 'mask_color_id', text='') if obj.mode == 'EDIT': - col.prop(self, 'mask_color_id_fill', text='Fill Selected Faces') + col.prop(self, 'mask_vcol_fill', text='Fill Selected Faces') elif self.mask_type == 'EDGE_DETECT': col.prop(self, 'mask_edge_detect_radius', text='') col.prop(self, 'mask_use_prev_normal', text='Use Previous Normal') @@ -1420,11 +1424,15 @@ def draw(self, context): ccol = col.column() ccol.prop(self, 'use_image_atlas_for_mask', text='Use Image Atlas') - if is_bl_newer_than(3, 2) and self.mask_type == 'VCOL': - crow = col.row(align=True) - crow.prop(self, 'mask_vcol_domain', expand=True) - crow = col.row(align=True) - crow.prop(self, 'mask_vcol_data_type', expand=True) + if self.mask_type == 'VCOL': + if is_bl_newer_than(3, 2): + crow = col.row(align=True) + crow.prop(self, 'mask_vcol_domain', expand=True) + crow = col.row(align=True) + crow.prop(self, 'mask_vcol_data_type', expand=True) + + if obj.mode == 'EDIT': + col.prop(self, 'mask_vcol_fill', text='Fill Selected Faces') if self.get_to_be_cleared_image_atlas(context, yp): col = self.layout.column(align=True) @@ -1570,7 +1578,7 @@ def execute(self, context): mask_use_hdr=self.mask_use_hdr, mask_uv_name=self.mask_uv_name, mask_width=self.mask_width, mask_height=self.mask_height, use_image_atlas_for_mask=self.use_image_atlas_for_mask, hemi_space=self.hemi_space, hemi_use_prev_normal=self.hemi_use_prev_normal, - mask_color_id=self.mask_color_id, mask_color_id_fill=self.mask_color_id_fill, + mask_color_id=self.mask_color_id, mask_vcol_fill=self.mask_vcol_fill, mask_vcol_data_type=self.mask_vcol_data_type, mask_vcol_domain=self.mask_vcol_domain, use_divider_alpha=self.use_divider_alpha, use_udim_for_mask=self.use_udim_for_mask, interpolation=self.interpolation, mask_interpolation=self.mask_interpolation, mask_edge_detect_radius=self.mask_edge_detect_radius, edge_detect_radius=self.edge_detect_radius, diff --git a/Mask.py b/Mask.py index 0ad813c7..1fb48ce3 100644 --- a/Mask.py +++ b/Mask.py @@ -399,7 +399,7 @@ def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_ elif new_type == 'COLOR_ID': mat = get_active_material() objs = get_all_objects_with_same_materials(mat) - check_colorid_vcol(objs) + check_colorid_vcol(objs, set_as_active=True) setup_color_id_source(mask, source) elif new_type == 'OBJECT_INDEX': @@ -596,9 +596,9 @@ class YNewLayerMask(bpy.types.Operator): default=(1.0, 0.0, 1.0), min=0.0, max=1.0, ) - color_id_fill : BoolProperty( - name = 'Fill Selected Geometry with Color ID', - description = 'Fill selected geometry with color ID', + vcol_fill : BoolProperty( + name = 'Fill Selected Geometry with Vertex Color / Color ID', + description = 'Fill selected geometry with vertex color / color ID', default = True ) @@ -814,9 +814,12 @@ def draw(self, context): if obj.mode == 'EDIT': col.label(text='') - if is_bl_newer_than(3, 2) and self.type == 'VCOL': - col.label(text='Domain:') - col.label(text='Data Type:') + if self.type == 'VCOL': + if is_bl_newer_than(3, 2): + col.label(text='Domain:') + col.label(text='Data Type:') + if obj.mode == 'EDIT' and self.color_option == 'BLACK': + col.label(text='') if self.type == 'HEMI': col.label(text='Space:') @@ -867,7 +870,7 @@ def draw(self, context): if self.type == 'COLOR_ID': col.prop(self, 'color_id', text='') if obj.mode == 'EDIT': - col.prop(self, 'color_id_fill', text='Fill Selected Faces') + col.prop(self, 'vcol_fill', text='Fill Selected Faces') if self.type == 'HEMI': col.prop(self, 'hemi_space', text='') @@ -881,11 +884,15 @@ def draw(self, context): if self.type in {'HEMI', 'EDGE_DETECT', 'AO'}: col.prop(self, 'hemi_use_prev_normal') - if is_bl_newer_than(3, 2) and self.type == 'VCOL': - crow = col.row(align=True) - crow.prop(self, 'vcol_domain', expand=True) - crow = col.row(align=True) - crow.prop(self, 'vcol_data_type', expand=True) + if self.type == 'VCOL': + if is_bl_newer_than(3, 2): + crow = col.row(align=True) + crow.prop(self, 'vcol_domain', expand=True) + crow = col.row(align=True) + crow.prop(self, 'vcol_data_type', expand=True) + + if obj.mode == 'EDIT' and self.color_option == 'BLACK': + col.prop(self, 'vcol_fill', text='Fill Selected Faces') if self.type == 'IMAGE': col.prop(self, 'hdr') @@ -1027,11 +1034,15 @@ def execute(self, context): set_obj_vertex_colors(o, vcol.name, (0.0, 0.0, 0.0, 1.0)) set_active_vertex_color(o, vcol) + # Fill selected geometry if in edit mode + if self.vcol_fill and bpy.context.mode == 'EDIT_MESH' and self.color_option == 'BLACK': + bpy.ops.mesh.y_vcol_fill(color_option='WHITE') + elif self.type == 'COLOR_ID': - check_colorid_vcol(objs) + check_colorid_vcol(objs, set_as_active=True) # Fill selected geometry if in edit mode - if self.color_id_fill and bpy.context.mode == 'EDIT_MESH': + if self.vcol_fill and bpy.context.mode == 'EDIT_MESH': bpy.ops.mesh.y_vcol_fill_face_custom(color=(self.color_id[0], self.color_id[1], self.color_id[2], 1.0)) # Voronoi and noise mask will use grayscale value by default diff --git a/common.py b/common.py index ec5b4682..4ea1ba7c 100644 --- a/common.py +++ b/common.py @@ -5832,16 +5832,20 @@ def get_layer_vcol(obj, layer): src = get_layer_source(layer) return get_vcol_from_source(obj, src) -def check_colorid_vcol(objs): +def check_colorid_vcol(objs, set_as_active=False): for o in objs: vcols = get_vertex_colors(o) - if COLOR_ID_VCOL_NAME not in vcols: + vcol = vcols.get(COLOR_ID_VCOL_NAME) + if not vcol: try: vcol = new_vertex_color(o, COLOR_ID_VCOL_NAME) set_obj_vertex_colors(o, vcol.name, (0.0, 0.0, 0.0, 1.0)) #set_active_vertex_color(o, vcol) except Exception as e: print(e) + if vcol and set_as_active: + set_active_vertex_color(o, vcol) + def is_colorid_already_being_used(yp, color_id): for l in yp.layers: for m in l.masks: From 601424af39614eb2cddb77897261ad37a71005b9 Mon Sep 17 00:00:00 2001 From: Agni Rakai Sahakarya <67183228+agnira@users.noreply.github.com> Date: Mon, 14 Apr 2025 17:00:36 +0700 Subject: [PATCH 129/283] Open containing image folder linux (#265) * feat: update open containing image folder for linux * cleaning print --- image_ops.py | 4 ++-- ui.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/image_ops.py b/image_ops.py index 13f0d988..a43dbbce 100644 --- a/image_ops.py +++ b/image_ops.py @@ -342,8 +342,8 @@ def execute(self, context): subprocess.call(["explorer", "/select,", filepath]) elif sys.platform == 'darwin': # Mac subprocess.call(["open", "-R", filepath]) - elif sys.platform == 'linux2': # Linux - subprocess.check_call(['xdg-open', '--', filepath]) + elif sys.platform == 'linux': # Linux + subprocess.check_call(['dbus-send', '--session', '--print-reply', '--dest=org.freedesktop.FileManager1', '--type=method_call', '/org/freedesktop/FileManager1', 'org.freedesktop.FileManager1.ShowItems', 'array:string:file://'+os.path.normpath(filepath), 'string:""']) except Exception as e: self.report({'ERROR'}, str(e)) return {'CANCELLED'} diff --git a/ui.py b/ui.py index 45f07e4d..daa69840 100644 --- a/ui.py +++ b/ui.py @@ -227,7 +227,7 @@ def draw(self, context): op.clipboard_text = full_path # Add more branches below for different operating systems - if sys.platform in {'win32', 'darwin', 'linux2'}: + if sys.platform in {'win32', 'darwin', 'linux'}: if sys.platform == 'win32': browser_name = 'Explorer' From b0a85c7c26c8325aff2a4036d1f0a52dc1415a54 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Mon, 14 Apr 2025 21:17:24 +0700 Subject: [PATCH 130/283] Fix: Duplicate/Paste multiple layers did not recognize multi-user images --- Layer.py | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Layer.py b/Layer.py index 59af0331..b6c503ac 100644 --- a/Layer.py +++ b/Layer.py @@ -4599,7 +4599,7 @@ def execute(self, context): return {'FINISHED'} -def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate=True, duplicate_blank=False, ondisk_duplicate=False, set_new_decal_position=False): +def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate=True, duplicate_blank=False, ondisk_duplicate=False, set_new_decal_position=False): yp = tree.yp ypup = get_user_preferences() @@ -4614,7 +4614,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layer=None, packed_duplicate vcol_names = [] for layer in yp.layers: - if specific_layer and layer != specific_layer: continue + if specific_layers and layer not in specific_layers: continue oldtree = get_tree(layer) ttree = oldtree.copy() @@ -5076,10 +5076,10 @@ def execute(self, context): # List of newly created ids created_ids = [] + created_layer_names = [] # Duplicate all relevant layers for i, lname in enumerate(relevant_layer_names): - #idx = relevant_ids[i] # Create new layer new_layer = yp.layers.add() @@ -5102,14 +5102,6 @@ def execute(self, context): source_inp = source_node.inputs.get(inp.name) if source_inp: inp.default_value = source_inp.default_value - duplicate_layer_nodes_and_images( - tree, new_layer, - packed_duplicate = self.packed_duplicate or self.duplicate_blank, - duplicate_blank = self.duplicate_blank, - ondisk_duplicate = self.ondisk_duplicate or self.duplicate_blank, - set_new_decal_position = self.set_new_decal_position - ) - # Rename masks mask_names = [m.name for m in l.masks] for mask in new_layer.masks: @@ -5125,9 +5117,17 @@ def execute(self, context): mask.name = get_unique_name(mask.name, mask_names) mask_names.append(mask.name) - #yp.layers.move(len(yp.layers)-1, idx) + created_layer_names.append(new_layer.name) created_ids.append(len(yp.layers)-1) + # Duplicate data of newly created layers + created_layers = [l for l in yp.layers if l.name in created_layer_names] + duplicate_layer_nodes_and_images( + tree, created_layers, packed_duplicate = self.packed_duplicate, + ondisk_duplicate = self.ondisk_duplicate, + set_new_decal_position = self.set_new_decal_position + ) + # Move duplicated layer to current index for i, idx in enumerate(created_ids): relevant_id = relevant_ids[i] @@ -5356,22 +5356,22 @@ def execute(self, context): new_group_node = new_node(tree, new_layer, 'group_node', 'ShaderNodeGroup', new_layer.name) new_group_node.node_tree = get_tree(ls) - # Duplicate group inputs + # Duplicate group input values source_node = tree_source.nodes.get(ls.group_node) for inp in new_group_node.inputs: source_inp = source_node.inputs.get(inp.name) if source_inp: inp.default_value = source_inp.default_value - # Duplicate images and some nodes inside - duplicate_layer_nodes_and_images( - tree, new_layer, - packed_duplicate = self.packed_duplicate, - ondisk_duplicate = self.ondisk_duplicate, - set_new_decal_position = self.set_new_decal_position - ) - pasted_layer_names.append(new_layer.name) + # Duplicate data of pasted layers + pasted_layers = [l for l in yp.layers if l.name in pasted_layer_names] + duplicate_layer_nodes_and_images( + tree, pasted_layers, packed_duplicate = self.packed_duplicate, + ondisk_duplicate = self.ondisk_duplicate, + set_new_decal_position = self.set_new_decal_position + ) + # Move pasted layer to current index for i, lname in enumerate(pasted_layer_names): nl = yp.layers.get(lname) From 3f97cfa238be903f571637152935bfe42bf8edca Mon Sep 17 00:00:00 2001 From: ucupumar Date: Tue, 15 Apr 2025 02:15:55 +0700 Subject: [PATCH 131/283] Add option to rebake baked images when pasting layers --- BakeToLayer.py | 1743 +---------------------------------------------- Layer.py | 47 +- bake_common.py | 1745 ++++++++++++++++++++++++++++++++++++++++++++++++ common.py | 7 +- 4 files changed, 1791 insertions(+), 1751 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 089cc32d..4a6a87e4 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -9,9 +9,6 @@ from .node_arrangements import * from . import lib, Layer, Mask, ImageAtlas, UDIM, vector_displacement_lib, vector_displacement -TEMP_VCOL = '__temp__vcol__' -TEMP_EMISSION = '_TEMP_EMI_' - class YTryToSelectBakedVertexSelect(bpy.types.Operator): bl_idname = "wm.y_try_to_select_baked_vertex" bl_label = "Try to reselect baked selected vertex" @@ -140,1290 +137,6 @@ def update_bake_to_layer_uv_map(self, context): objs = get_all_objects_with_same_materials(mat) self.use_udim = UDIM.is_uvmap_udim(objs, self.uv_map) -def get_bakeable_objects_and_meshes(mat, cage_object=None): - objs = [] - meshes = [] - - for ob in get_scene_objects(): - if ob.type != 'MESH': continue - if hasattr(ob, 'hide_viewport') and ob.hide_viewport: continue - if len(get_uv_layers(ob)) == 0: continue - if len(ob.data.polygons) == 0: continue - if cage_object and cage_object == ob: continue - - # Do not bake objects with hide_render on - if ob.hide_render: continue - if not in_renderable_layer_collection(ob): continue - - for i, m in enumerate(ob.data.materials): - if m == mat: - ob.active_material_index = i - if ob not in objs and ob.data not in meshes: - objs.append(ob) - meshes.append(ob.data) - - return objs, meshes - -def bake_to_entity(bprops, overwrite_img=None, segment=None): - - T = time.time() - mat = get_active_material() - node = get_active_ypaint_node() - yp = node.node_tree.yp - scene = bpy.context.scene - obj = bpy.context.object - channel_idx = int(bprops.channel_idx) if 'channel_idx' in bprops and len(yp.channels) > 0 else -1 - - rdict = {} - rdict['message'] = '' - - if bprops.type == 'SELECTED_VERTICES' and obj.mode != 'EDIT': - rdict['message'] = "Should be in edit mode!" - return rdict - - if bprops.target_type == 'MASK' and len(yp.layers) == 0: - rdict['message'] = "Mask need active layer!" - return rdict - - if bprops.type in {'BEVEL_NORMAL', 'BEVEL_MASK'} and not is_bl_newer_than(2, 80): - rdict['message'] = "Blender 2.80+ is needed to use this feature!" - return rdict - - if bprops.type in {'MULTIRES_NORMAL', 'MULTIRES_DISPLACEMENT'} and not is_bl_newer_than(2, 80): - rdict['message'] = "Blender 2.80+ is needed to use this feature!" - return rdict - - if (hasattr(obj, 'hide_viewport') and obj.hide_viewport) or obj.hide_render: - rdict['message'] = "Please unhide render and viewport of active object!" - return rdict - - if bprops.type == 'FLOW' and (bprops.uv_map == '' or bprops.uv_map_1 == '' or bprops.uv_map == bprops.uv_map_1): - rdict['message'] = "UVMap and Straight UVMap cannot be the same or empty!" - return rdict - - # Get cage object - cage_object = None - if bprops.type.startswith('OTHER_OBJECT_') and bprops.cage_object_name != '': - cage_object = bpy.data.objects.get(bprops.cage_object_name) - if cage_object: - - if any([mod for mod in cage_object.modifiers if mod.type not in {'ARMATURE'}]) or any([mod for mod in obj.modifiers if mod.type not in {'ARMATURE'}]): - rdict['message'] = "Mesh modifiers is not working with cage object for now!" - return rdict - - if len(cage_object.data.polygons) != len(obj.data.polygons): - rdict['message'] = "Invalid cage object, the cage mesh must have the same number of faces as the active object!" - return rdict - - objs = [obj] - if mat.users > 1: - objs, meshes = get_bakeable_objects_and_meshes(mat, cage_object) - - # Count multires objects - multires_count = 0 - if bprops.type.startswith('MULTIRES_'): - for ob in objs: - if get_multires_modifier(ob): - multires_count += 1 - - if not objs or (bprops.type.startswith('MULTIRES_') and multires_count == 0): - rdict['message'] = "No valid objects found to bake!" - return rdict - - do_overwrite = False - overwrite_image_name = '' - if overwrite_img: - do_overwrite = True - overwrite_image_name = overwrite_img.name - - # Get other objects for other object baking - other_objs = [] - - if bprops.type.startswith('OTHER_OBJECT_'): - - # Get other objects based on selected objects with different material - for o in bpy.context.selected_objects: - if o in objs or not o.data or not hasattr(o.data, 'materials'): continue - if mat.name not in o.data.materials: - other_objs.append(o) - - # Try to get other_objects from bake info - if overwrite_img: - - bi = segment.bake_info if segment else overwrite_img.y_bake_info - - scene_objs = get_scene_objects() - for oo in bi.other_objects: - if is_bl_newer_than(2, 79): - ooo = oo.object - else: ooo = scene_objs.get(oo.object_name) - - if ooo: - if is_bl_newer_than(2, 80): - # Check if object is on current view layer - layer_cols = get_object_parent_layer_collections([], bpy.context.view_layer.layer_collection, ooo) - if ooo not in other_objs and any(layer_cols): - other_objs.append(ooo) - else: - o = scene_objs.get(ooo.name) - if o and o not in other_objs: - other_objs.append(o) - - if bprops.type == 'OTHER_OBJECT_CHANNELS': - ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) - - if not other_objs: - if overwrite_img: - rdict['message'] = "No source objects found! They're probably deleted!" - return rdict - else: - rdict['message'] = "Source objects must be selected and it should have different material!" - return rdict - - # Get tile numbers - tilenums = [1001] - if bprops.use_udim: - tilenums = UDIM.get_tile_numbers(objs, bprops.uv_map) - - # Remember things - book = remember_before_bake(yp, mat=mat) - - # FXAA doesn't work with hdr image - # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead - use_fxaa = not bprops.hdr and bprops.fxaa and not bprops.type.startswith('OTHER_OBJECT_') - - # For now SSAA only works with other object baking - use_ssaa = bprops.ssaa and bprops.type.startswith('OTHER_OBJECT_') - - # Denoising only available for AO bake for now - use_denoise = bprops.denoise and bprops.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81) - - # SSAA will multiply size by 2 then resize it back - if use_ssaa: - width = bprops.width * 2 - height = bprops.height * 2 - else: - width = bprops.width - height = bprops.height - - # If use baked disp, need to bake normal and height map first - subdiv_setup_changes = False - height_root_ch = get_root_height_channel(yp) - if height_root_ch and bprops.use_baked_disp and not bprops.type.startswith('MULTIRES_'): - - if not height_root_ch.enable_subdiv_setup: - height_root_ch.enable_subdiv_setup = True - subdiv_setup_changes = True - - # To hold temporary objects - temp_objs = [] - - # Sometimes Cavity bake will create temporary objects - if (bprops.type == 'CAVITY' and (bprops.subsurf_influence or bprops.use_baked_disp)): - - # NOTE: Baking cavity with subdiv setup can only happen if there's only one object and no UDIM - if is_bl_newer_than(4, 2) and len(objs) == 1 and not bprops.use_udim and height_root_ch and height_root_ch.enable_subdiv_setup: - - # Check if there's VDM layer - vdm_layer = get_first_vdm_layer(yp) - vdm_uv_name = vdm_layer.uv_name if vdm_layer else bprops.uv_map - - # Get baked combined vdm image - combined_vdm_image = vector_displacement.get_combined_vdm_image(objs[0], vdm_uv_name, width=bprops.width, height=bprops.height) - - # Bake tangent and bitangent - # NOTE: Only bake the first object tangent since baking combined mesh can cause memory leak at the moment - tanimage, bitimage = vector_displacement.get_tangent_bitangent_images(objs[0], bprops.uv_map) - - # Duplicate object - objs = temp_objs = [get_merged_mesh_objects(scene, objs, True, disable_problematic_modifiers=False)] - - # Use VDM loader geometry nodes - # NOTE: Geometry nodes currently does not support UDIM, so using UDIM will cause wrong bake result - set_active_object(objs[0]) - vdm_loader = vector_displacement_lib.get_vdm_loader_geotree(bprops.uv_map, combined_vdm_image, tanimage, bitimage, 1.0) - bpy.ops.object.modifier_add(type='NODES') - geomod = objs[0].modifiers[-1] - geomod.node_group = vdm_loader - bpy.ops.object.modifier_apply(modifier=geomod.name) - - # Remove temporary datas - remove_datablock(bpy.data.node_groups, vdm_loader) - remove_datablock(bpy.data.images, combined_vdm_image) - - else: - objs = temp_objs = get_duplicated_mesh_objects(scene, objs, True) - - # Join objects then extend with other objects - elif bprops.type.startswith('OTHER_OBJECT_'): - if len(objs) > 1: - objs = [get_merged_mesh_objects(scene, objs)] - temp_objs = objs.copy() - - objs.extend(other_objs) - - # Join objects if the number of objects is higher than one - elif not bprops.type.startswith('MULTIRES_') and len(objs) > 1 and not is_join_objects_problematic(yp): - objs = temp_objs = [get_merged_mesh_objects(scene, objs, True)] - - fill_mode = 'FACE' - obj_vertex_indices = {} - if bprops.type == 'SELECTED_VERTICES': - if bpy.context.tool_settings.mesh_select_mode[0] or bpy.context.tool_settings.mesh_select_mode[1]: - fill_mode = 'VERTEX' - - if is_bl_newer_than(2, 80): - edit_objs = [o for o in objs if o.mode == 'EDIT'] - else: edit_objs = [obj] - - for ob in edit_objs: - mesh = ob.data - bm = bmesh.from_edit_mesh(mesh) - - bm.verts.ensure_lookup_table() - #bm.edges.ensure_lookup_table() - bm.faces.ensure_lookup_table() - - v_indices = [] - if fill_mode == 'FACE': - for face in bm.faces: - if face.select: - v_indices.append(face.index) - #for loop in face.loops: - # v_indices.append(loop.index) - - else: - for vert in bm.verts: - if vert.select: - v_indices.append(vert.index) - - obj_vertex_indices[ob.name] = v_indices - - bpy.ops.object.mode_set(mode = 'OBJECT') - for ob in objs: - try: - vcol = new_vertex_color(ob, TEMP_VCOL) - set_obj_vertex_colors(ob, vcol.name, (0.0, 0.0, 0.0, 1.0)) - set_active_vertex_color(ob, vcol) - except: pass - bpy.ops.object.mode_set(mode = 'EDIT') - bpy.ops.mesh.y_vcol_fill(color_option ='WHITE') - bpy.ops.object.mode_set(mode = 'OBJECT') - - # Check if there's channel using alpha - alpha_outp = None - for c in yp.channels: - if c.enable_alpha: - alpha_outp = node.outputs.get(c.name + io_suffix['ALPHA']) - if alpha_outp: break - - # Prepare bake settings - if bprops.type == 'AO': - if alpha_outp: - # If there's alpha channel use standard AO bake, which has lesser quality denoising - bake_type = 'AO' - else: - # When there is no alpha channel use combined render bake, which has better denoising - bake_type = 'COMBINED' - elif bprops.type == 'MULTIRES_NORMAL': - bake_type = 'NORMALS' - elif bprops.type == 'MULTIRES_DISPLACEMENT': - bake_type = 'DISPLACEMENT' - elif bprops.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - bake_type = 'NORMAL' - else: - bake_type = 'EMIT' - - # If use only local, hide other objects - hide_other_objs = bprops.type != 'AO' or bprops.only_local - - # Fit tilesize to bake resolution if samples is equal 1 - if bprops.samples <= 1: - tile_x = width - tile_y = height - else: - tile_x = 256 - tile_y = 256 - - # Cage object only used for other object baking - cage_object_name = bprops.cage_object_name if bprops.type.startswith('OTHER_OBJECT_') else '' - - prepare_bake_settings( - book, objs, yp, samples=bprops.samples, margin=bprops.margin, - uv_map=bprops.uv_map, bake_type=bake_type, #disable_problematic_modifiers=True, - bake_device=bprops.bake_device, hide_other_objs=hide_other_objs, - bake_from_multires=bprops.type.startswith('MULTIRES_'), tile_x = tile_x, tile_y = tile_y, - use_selected_to_active=bprops.type.startswith('OTHER_OBJECT_'), - max_ray_distance=bprops.max_ray_distance, cage_extrusion=bprops.cage_extrusion, - source_objs=other_objs, use_denoising=False, margin_type=bprops.margin_type, - cage_object_name = cage_object_name, - normal_space = 'OBJECT' if bprops.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' - ) - # Set multires level - #ori_multires_levels = {} - if bprops.type.startswith('MULTIRES_'): #or bprops.type == 'AO': - for ob in objs: - mod = get_multires_modifier(ob) - - #mod.render_levels = mod.total_levels - if mod and bprops.type.startswith('MULTIRES_'): - mod.render_levels = bprops.multires_base - mod.levels = bprops.multires_base - - #ori_multires_levels[ob.name] = mod.render_levels - - # Setup for cavity - if bprops.type == 'CAVITY': - - tt = time.time() - print('BAKE TO LAYER: Applying subsurf/multires for Cavity bake...') - - # Set vertex color for cavity - for ob in objs: - - set_active_object(ob) - - if bprops.subsurf_influence or bprops.use_baked_disp: - need_to_be_applied_modifiers = [] - for m in ob.modifiers: - if m.type in {'SUBSURF', 'MULTIRES'} and m.levels > 0 and m.show_viewport: - - # Set multires to the highest level - if m.type == 'MULTIRES': - m.levels = m.total_levels - - need_to_be_applied_modifiers.append(m) - - # Also apply displace - if m.type == 'DISPLACE' and m.show_viewport: - need_to_be_applied_modifiers.append(m) - - # Apply shape keys and modifiers - if any(need_to_be_applied_modifiers): - if ob.data.shape_keys: - if is_bl_newer_than(3, 3): - bpy.ops.object.shape_key_remove(all=True, apply_mix=True) - else: bpy.ops.object.shape_key_remove(all=True) - - for m in need_to_be_applied_modifiers: - bpy.ops.object.modifier_apply(modifier=m.name) - - # Create new vertex color for dirt - try: - vcol = new_vertex_color(ob, TEMP_VCOL) - set_obj_vertex_colors(ob, vcol.name, (1.0, 1.0, 1.0, 1.0)) - set_active_vertex_color(ob, vcol) - except: pass - - bpy.ops.paint.vertex_color_dirt(dirt_angle=math.pi / 2) - - print('BAKE TO LAYER: Applying subsurf/multires is done in', '{:0.2f}'.format(time.time() - tt), 'seconds!') - - # Setup for flow - if bprops.type == 'FLOW': - bpy.ops.object.mode_set(mode = 'OBJECT') - for ob in objs: - uv_layers = get_uv_layers(ob) - main_uv = uv_layers.get(bprops.uv_map) - straight_uv = uv_layers.get(bprops.uv_map_1) - - if main_uv and straight_uv: - flow_vcol = get_flow_vcol(ob, main_uv, straight_uv) - - # Flip normals setup - if bprops.flip_normals: - #ori_mode[obj.name] = obj.mode - if is_bl_newer_than(2, 80): - # Deselect other objects first - for o in other_objs: - o.select_set(False) - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - # Reselect other objects - for o in other_objs: - o.select_set(True) - else: - for ob in objs: - if ob in other_objs: continue - scene.objects.active = ob - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - - # More setup - ori_mods = {} - ori_viewport_mods = {} - ori_mat_ids = {} - ori_loop_locs = {} - ori_multires_levels = {} - - # Do not disable modifiers for surface based bake types - disable_problematic_modifiers = bprops.type not in {'CAVITY', 'POINTINESS', 'BEVEL_NORMAL', 'BEVEL_MASK'} - - for ob in objs: - - # Disable few modifiers - ori_mods[ob.name] = [m.show_render for m in ob.modifiers] - ori_viewport_mods[ob.name] = [m.show_viewport for m in ob.modifiers] - if bprops.type.startswith('MULTIRES_'): - mul = get_multires_modifier(ob) - multires_index = 99 - if mul: - for i, m in enumerate(ob.modifiers): - if m == mul: multires_index = i - if i > multires_index: - m.show_render = False - m.show_viewport = False - elif disable_problematic_modifiers and ob not in other_objs: - for m in get_problematic_modifiers(ob): - m.show_render = False - - ori_mat_ids[ob.name] = [] - ori_loop_locs[ob.name] = [] - - if bprops.subsurf_influence and not bprops.use_baked_disp and not bprops.type.startswith('MULTIRES_'): - for m in ob.modifiers: - if m.type == 'MULTIRES': - ori_multires_levels[ob.name] = m.render_levels - m.render_levels = m.total_levels - break - - if len(ob.data.materials) > 1: - active_mat_id = [i for i, m in enumerate(ob.data.materials) if m == mat] - if active_mat_id: active_mat_id = active_mat_id[0] - else: continue - - uv_layers = get_uv_layers(ob) - uvl = uv_layers.get(bprops.uv_map) - - for p in ob.data.polygons: - - # Set uv location to (0,0) if not using current material - if uvl and not bprops.force_bake_all_polygons: - uv_locs = [] - for li in p.loop_indices: - uv_locs.append(uvl.data[li].uv.copy()) - if p.material_index != active_mat_id: - uvl.data[li].uv = Vector((0.0, 0.0)) - - ori_loop_locs[ob.name].append(uv_locs) - - # Need to assign all polygon to active material if there are multiple materials - ori_mat_ids[ob.name].append(p.material_index) - p.material_index = active_mat_id - - # Create bake nodes - tex = mat.node_tree.nodes.new('ShaderNodeTexImage') - bsdf = mat.node_tree.nodes.new('ShaderNodeEmission') - normal_bake = None - geometry = None - vector_math = None - vector_math_1 = None - if bprops.type == 'BEVEL_NORMAL': - #bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') - normal_bake = mat.node_tree.nodes.new('ShaderNodeGroup') - normal_bake.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV) - elif bprops.type == 'BEVEL_MASK': - geometry = mat.node_tree.nodes.new('ShaderNodeNewGeometry') - vector_math = mat.node_tree.nodes.new('ShaderNodeVectorMath') - vector_math.operation = 'CROSS_PRODUCT' - if is_bl_newer_than(2, 81): - vector_math_1 = mat.node_tree.nodes.new('ShaderNodeVectorMath') - vector_math_1.operation = 'LENGTH' - - # Get output node and remember original bsdf input - output = get_active_mat_output_node(mat.node_tree) - ori_bsdf = output.inputs[0].links[0].from_socket - - if bprops.type == 'AO': - # If there's alpha channel use standard AO bake, which has lesser quality denoising - if alpha_outp: - src = None - - if hasattr(scene.cycles, 'use_fast_gi'): - scene.cycles.use_fast_gi = True - - if scene.world: - scene.world.light_settings.distance = bprops.ao_distance - # When there is no alpha channel use combined render bake, which has better denoising - else: - src = mat.node_tree.nodes.new('ShaderNodeAmbientOcclusion') - - if 'Distance' in src.inputs: - src.inputs['Distance'].default_value = bprops.ao_distance - - # Links - if not is_bl_newer_than(2, 80): - mat.node_tree.links.new(src.outputs[0], output.inputs[0]) - else: - mat.node_tree.links.new(src.outputs['AO'], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'POINTINESS': - src = mat.node_tree.nodes.new('ShaderNodeNewGeometry') - - # Links - mat.node_tree.links.new(src.outputs['Pointiness'], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'CAVITY': - src = mat.node_tree.nodes.new('ShaderNodeGroup') - src.node_tree = get_node_tree_lib(lib.CAVITY) - - # Set vcol - vcol_node = src.node_tree.nodes.get('vcol') - vcol_node.attribute_name = TEMP_VCOL - - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'DUST': - src = mat.node_tree.nodes.new('ShaderNodeGroup') - src.node_tree = get_node_tree_lib(lib.DUST) - - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'PAINT_BASE': - src = mat.node_tree.nodes.new('ShaderNodeGroup') - src.node_tree = get_node_tree_lib(lib.PAINT_BASE) - - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'BEVEL_NORMAL': - src = mat.node_tree.nodes.new('ShaderNodeBevel') - - src.samples = bprops.bevel_samples - src.inputs[0].default_value = bprops.bevel_radius - - #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) - mat.node_tree.links.new(src.outputs[0], normal_bake.inputs[0]) - mat.node_tree.links.new(normal_bake.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'BEVEL_MASK': - src = mat.node_tree.nodes.new('ShaderNodeBevel') - - src.samples = bprops.bevel_samples - src.inputs[0].default_value = bprops.bevel_radius - - mat.node_tree.links.new(geometry.outputs['Normal'], vector_math.inputs[0]) - mat.node_tree.links.new(src.outputs[0], vector_math.inputs[1]) - #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) - if is_bl_newer_than(2, 81): - mat.node_tree.links.new(vector_math.outputs[0], vector_math_1.inputs[0]) - mat.node_tree.links.new(vector_math_1.outputs[1], bsdf.inputs[0]) - else: - mat.node_tree.links.new(vector_math.outputs[1], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'SELECTED_VERTICES': - if is_bl_newer_than(2, 80): - src = mat.node_tree.nodes.new('ShaderNodeVertexColor') - src.layer_name = TEMP_VCOL - else: - src = mat.node_tree.nodes.new('ShaderNodeAttribute') - src.attribute_name = TEMP_VCOL - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - elif bprops.type == 'FLOW': - # Set vcol - src = mat.node_tree.nodes.new('ShaderNodeAttribute') - src.attribute_name = FLOW_VCOL - - mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - else: - src = None - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - # Get number of target images - ch_ids = [0] - - # Other object channels related - all_other_mats = [] - ori_from_nodes = {} - ori_from_sockets = {} - - if bprops.type == 'OTHER_OBJECT_CHANNELS': - ch_ids = [i for i, coo in enumerate(ch_other_objects) if len(coo) > 0] - - # Get all other materials - for oo in other_objs: - for m in oo.data.materials: - if m == None or not m.use_nodes: continue - if m not in all_other_mats: - all_other_mats.append(m) - - # Remember original socket connected to outputs - for m in all_other_mats: - soc = None - from_node = '' - from_socket = '' - mout = get_material_output(m) - if mout: - for l in mout.inputs[0].links: - soc = l.from_socket - from_node = l.from_node.name - from_socket = l.from_socket.name - - # Create temporary emission - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if not temp_emi: - temp_emi = m.node_tree.nodes.new('ShaderNodeEmission') - temp_emi.name = TEMP_EMISSION - m.node_tree.links.new(temp_emi.outputs[0], mout.inputs[0]) - - ori_from_nodes[m.name] = from_node - ori_from_sockets[m.name] = from_socket - - # Newly created layer index and image - active_id = None - image = None - - for idx in ch_ids: - - # Image name and colorspace - image_name = bprops.name - colorspace = get_srgb_name() - - if bprops.type == 'OTHER_OBJECT_CHANNELS': - - root_ch = yp.channels[idx] - image_name += ' ' + yp.channels[idx].name - - # Hide irrelevant objects - for oo in other_objs: - if oo not in ch_other_objects[idx]: - oo.hide_render = True - else: oo.hide_render = False - - if root_ch.type == 'NORMAL': - bake_type = 'NORMAL' - - # Set back original socket - for m in all_other_mats: - mout = get_material_output(m) - if mout: - nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) - if nod: - soc = nod.outputs.get(ori_from_sockets[m.name]) - if soc: m.node_tree.links.new(soc, mout.inputs[0]) - - else: - bake_type = 'EMIT' - - # Set emission connection - connected_mats = [] - for j, m in enumerate(ch_other_mats[idx]): - if m in connected_mats: continue - default = ch_other_defaults[idx][j] - socket = ch_other_sockets[idx][j] - - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if not temp_emi: continue - - if default != None: - # Set default - if type(default) == float: - temp_emi.inputs[0].default_value = (default, default, default, 1.0) - else: temp_emi.inputs[0].default_value = (default[0], default[1], default[2], 1.0) - - # Break link - for l in temp_emi.inputs[0].links: - m.node_tree.links.remove(l) - elif socket: - m.node_tree.links.new(socket, temp_emi.inputs[0]) - - connected_mats.append(m) - - colorspace = get_noncolor_name() if root_ch.colorspace == 'LINEAR' else get_srgb_name() - - elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - colorspace = get_noncolor_name() - - # Using float image will always make the image linear/non-color - if bprops.hdr: - colorspace = get_noncolor_name() - - # Base color of baked image - if bprops.type == 'AO': - color = [1.0, 1.0, 1.0, 1.0] - elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - if bprops.hdr: - color = [0.7354, 0.7354, 1.0, 1.0] - else: - color = [0.5, 0.5, 1.0, 1.0] - elif bprops.type == 'FLOW': - color = [0.5, 0.5, 0.0, 1.0] - else: - if bprops.hdr: - color = [0.7354, 0.7354, 0.7354, 1.0] - else: color = [0.5, 0.5, 0.5, 1.0] - - # Make image transparent if its baked from other objects - if bprops.type.startswith('OTHER_OBJECT_'): - color[3] = 0.0 - - # New target image - if bprops.use_udim: - image = bpy.data.images.new( - name=image_name, width=width, height=height, - alpha=True, float_buffer=bprops.hdr, tiled=True - ) - - # Fill tiles - for tilenum in tilenums: - UDIM.fill_tile(image, tilenum, color, width, height) - UDIM.initial_pack_udim(image, color) - - # Remember base color - image.yui.base_color = color - else: - image = bpy.data.images.new( - name=image_name, width=width, height=height, - alpha=True, float_buffer=bprops.hdr - ) - - image.generated_color = color - image.colorspace_settings.name = colorspace - - # Set image filepath if overwrite image is found - if do_overwrite: - # Get overwrite image again to avoid pointer error - overwrite_img = bpy.data.images.get(overwrite_image_name) - #if idx == 0: - if idx == min(ch_ids): - if not overwrite_img.packed_file and overwrite_img.filepath != '': - image.filepath = overwrite_img.filepath - else: - layer = yp.layers[yp.active_layer_index] - root_ch = yp.channels[idx] - ch = layer.channels[idx] - - if root_ch.type == 'NORMAL': - source = get_channel_source_1(ch, layer) - else: source = get_channel_source(ch, layer) - - if source and hasattr(source, 'image') and source.image and not source.image.packed_file and source.image.filepath != '': - image.filepath = source.image.filepath - - # Set bake image - tex.image = image - mat.node_tree.nodes.active = tex - - # Bake! - try: - if bprops.type.startswith('MULTIRES_'): - bpy.ops.object.bake_image() - else: - if bake_type != 'EMIT': - bpy.ops.object.bake(type=bake_type) - else: bpy.ops.object.bake() - except Exception as e: - - # Try to use CPU if GPU baking is failed - if bprops.bake_device == 'GPU': - print('EXCEPTIION: GPU baking failed! Trying to use CPU...') - bprops.bake_device = 'CPU' - scene.cycles.device = 'CPU' - - if bprops.type.startswith('MULTIRES_'): - bpy.ops.object.bake_image() - else: - if bake_type != 'EMIT': - bpy.ops.object.bake(type=bake_type) - else: bpy.ops.object.bake() - else: - print('EXCEPTIION:', e) - - if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) - - # Bake other object alpha - if bprops.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS'}: - - alpha_found = False - if bprops.type == 'OTHER_OBJECT_CHANNELS': - - # Set emission connection - for j, m in enumerate(ch_other_mats[idx]): - alpha_default = ch_other_alpha_defaults[idx][j] - alpha_socket = ch_other_alpha_sockets[idx][j] - - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if not temp_emi: continue - - if alpha_default != 1.0: - alpha_found = True - # Set alpha_default - if type(alpha_default) == float: - temp_emi.inputs[0].default_value = (alpha_default, alpha_default, alpha_default, 1.0) - else: temp_emi.inputs[0].default_value = (alpha_default[0], alpha_default[1], alpha_default[2], 1.0) - - # Break link - for l in temp_emi.inputs[0].links: - m.node_tree.links.remove(l) - elif alpha_socket: - alpha_found = True - m.node_tree.links.new(alpha_socket, temp_emi.inputs[0]) - else: - alpha_found = True - - if alpha_found: - - temp_img = image.copy() - temp_img.colorspace_settings.name = get_noncolor_name() - tex.image = temp_img - - # Set temp filepath - if image.source == 'TILED': - temp_img.name = '__TEMP__' - UDIM.initial_pack_udim(temp_img) - - # Need to use clear so there's alpha on the baked image - scene.render.bake.use_clear = True - - # Bake emit can will create alpha image - bpy.ops.object.bake(type='EMIT') - - # Set tile pixels - for tilenum in tilenums: - - # Swap tile - if tilenum != 1001: - UDIM.swap_tile(image, 1001, tilenum) - UDIM.swap_tile(temp_img, 1001, tilenum) - - # Copy alpha to RGB channel, so it can be fxaa-ed - if bprops.type == 'OTHER_OBJECT_NORMAL': - copy_image_channel_pixels(temp_img, temp_img, 3, 0) - - # FXAA alpha - fxaa_image(temp_img, False, bprops.bake_device, first_tile_only=True) - - # Copy alpha to actual image - copy_image_channel_pixels(temp_img, image, 0, 3) - - # Swap tile again to recover - if tilenum != 1001: - UDIM.swap_tile(image, 1001, tilenum) - UDIM.swap_tile(temp_img, 1001, tilenum) - - # Remove temp image - remove_datablock(bpy.data.images, temp_img, user=tex, user_prop='image') - - # Back to original size if using SSA - if use_ssaa: - image, temp_segment = resize_image( - image, bprops.width, bprops.height, image.colorspace_settings.name, - alpha_aware=True, bake_device=bprops.bake_device - ) - - # Denoise AO image - if use_denoise: - image = denoise_image(image) - - new_segment_created = False - - if bprops.use_image_atlas: - - need_to_create_new_segment = False - if segment: - ia_image = segment.id_data - if bprops.use_udim: - need_to_create_new_segment = ia_image.is_float != bprops.hdr - if need_to_create_new_segment: - UDIM.remove_udim_atlas_segment_by_name(ia_image, segment.name, yp) - else: - need_to_create_new_segment = bprops.width != segment.width or bprops.height != segment.height or ia_image.is_float != bprops.hdr - if need_to_create_new_segment: - segment.unused = True - - if not segment or need_to_create_new_segment: - - if bprops.use_udim: - segment = UDIM.get_set_udim_atlas_segment( - tilenums, color=(0, 0, 0, 0), colorspace=get_srgb_name(), hdr=bprops.hdr, yp=yp - ) - else: - # Clearing unused image atlas segments - img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'TRANSPARENT', bprops.width, bprops.height, bprops.hdr) - if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) - - segment = ImageAtlas.get_set_image_atlas_segment( - bprops.width, bprops.height, 'TRANSPARENT', bprops.hdr, yp=yp - ) - - new_segment_created = True - - ia_image = segment.id_data - - # Set baked image to segment - if bprops.use_udim: - offset = get_udim_segment_mapping_offset(segment) * 10 - copy_dict = {} - for tilenum in tilenums: - copy_dict[tilenum] = tilenum + offset - UDIM.copy_tiles(image, ia_image, copy_dict) - else: copy_image_pixels(image, ia_image, segment) - temp_img = image - image = ia_image - - # Remove original baked image - remove_datablock(bpy.data.images, temp_img) - - # Index 0 is the main image - if idx == min(ch_ids): - if do_overwrite: - - # Get overwrite image again to avoid pointer error - overwrite_img = bpy.data.images.get(overwrite_image_name) - - active_id = yp.active_layer_index - - if overwrite_img != image: - if segment and not bprops.use_image_atlas: - entities = ImageAtlas.replace_segment_with_image(yp, segment, image) - segment = None - else: entities = replace_image(overwrite_img, image, yp, bprops.uv_map) - elif segment: entities = ImageAtlas.get_entities_with_specific_segment(yp, segment) - else: entities = get_entities_with_specific_image(yp, image) - - for ent in entities: - if new_segment_created: - ent.segment_name = segment.name - ImageAtlas.set_segment_mapping(ent, segment, image) - - if ent.uv_name != bprops.uv_map: - ent.uv_name = bprops.uv_map - - if bprops.type == 'AO' and ent.type == 'AO': - set_entity_prop_value(ent, 'ao_distance', bprops.ao_distance) - elif bprops.type == 'BEVEL_MASK' and ent.type == 'EDGE_DETECT': - set_entity_prop_value(ent, 'edge_detect_radius', bprops.bevel_radius) - - if bprops.target_type == 'LAYER': - layer_ids = [i for i, l in enumerate(yp.layers) if l in entities] - if entities and yp.active_layer_index not in layer_ids: - active_id = layer_ids[0] - - # Refresh uv - refresh_temp_uv(bpy.context.object, yp.layers[active_id]) - - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(yp.layers[active_id]) - - elif bprops.target_type == 'MASK': - masks = [] - for l in yp.layers: - masks.extend([m for m in l.masks if m in entities]) - if masks: - masks[0].active_edit = True - - # Refresh uv - refresh_temp_uv(bpy.context.object, masks[0]) - - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(masks[0]) - - elif bprops.target_type == 'LAYER': - - layer_name = image.name if not bprops.use_image_atlas else bprops.name - - if bprops.use_image_atlas: - layer_name = get_unique_name(layer_name, yp.layers) - - yp.halt_update = True - layer = Layer.add_new_layer( - group_tree=node.node_tree, layer_name=layer_name, - layer_type='IMAGE', channel_idx=channel_idx, - blend_type=bprops.blend_type, normal_blend_type=bprops.normal_blend_type, - normal_map_type=bprops['normal_map_type'], texcoord_type='UV', - uv_name=bprops.uv_map, image=image, vcol=None, segment=segment, - interpolation = bprops.interpolation, - normal_space = 'OBJECT' if bprops.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' - ) - yp.halt_update = False - active_id = yp.active_layer_index - - if segment: - ImageAtlas.set_segment_mapping(layer, segment, image) - - # Refresh uv - refresh_temp_uv(bpy.context.object, layer) - - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(layer) - - - else: - active_layer = yp.layers[yp.active_layer_index] - - mask_name = image.name if not bprops.use_image_atlas else bprops.name - - if bprops.use_image_atlas: - mask_name = get_unique_name(mask_name, active_layer.masks) - - mask = Mask.add_new_mask( - active_layer, mask_name, 'IMAGE', 'UV', bprops.uv_map, - image, None, segment - ) - mask.active_edit = True - - reconnect_layer_nodes(active_layer) - rearrange_layer_nodes(active_layer) - - active_id = yp.active_layer_index - - if segment: - ImageAtlas.set_segment_mapping(mask, segment, image) - - # Refresh uv - refresh_temp_uv(bpy.context.object, mask) - - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(mask) - - # Indices > 0 are for channel override images - else: - # Set images to channel override - layer = yp.layers[yp.active_layer_index] - root_ch = yp.channels[idx] - ch = layer.channels[idx] - if not ch.enable: ch.enable = True - - # Normal channel will use second override - if root_ch.type == 'NORMAL': - if ch.normal_map_type != 'NORMAL_MAP': ch.normal_map_type = 'NORMAL_MAP' - if not ch.override_1: ch.override_1 = True - if ch.override_1_type != 'IMAGE': ch.override_1_type = 'IMAGE' - source = get_channel_source_1(ch, layer) - else: - if not ch.override: ch.override = True - if ch.override_type != 'IMAGE': ch.override_type = 'IMAGE' - source = get_channel_source(ch, layer) - - # If image already exists on source - old_image = None - if source.image and image != source.image: - old_image = source.image - source_name = old_image.name - current_name = image.name - - old_image.name = '_____temp' - image.name = source_name - old_image.name = current_name - - # Set image to source - source.image = image - source.interpolation = bprops.interpolation - - # Remove image if it's not used anymore - if old_image: safe_remove_image(old_image) - - # Set bake info to image/segment - bi = segment.bake_info if segment else image.y_bake_info - - if not bi.is_baked: bi.is_baked = True - if bi.bake_type != bprops.type: bi.bake_type = bprops.type - for attr in dir(bi): - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - try: setattr(bi, attr, bprops[attr]) - except: pass - - if other_objs: - - # Remember other objects to bake info - for o in other_objs: - if is_bl_newer_than(2, 79): - oo_recorded = any([oo for oo in bi.other_objects if oo.object == o]) - else: oo_recorded = any([oo for oo in bi.other_objects if oo.object_name == o.name]) - - if not oo_recorded: - oo = bi.other_objects.add() - if is_bl_newer_than(2, 79): - oo.object = o - oo.object_name = o.name - - # Remove unused other objects on bake info - for i, oo in reversed(list(enumerate(bi.other_objects))): - if is_bl_newer_than(2, 79): - ooo = oo.object - else: ooo = bpy.data.objects.get(oo.object_name) - - if ooo not in other_objs: - bi.other_objects.remove(i) - - if bprops.type == 'SELECTED_VERTICES': - #fill_mode = 'FACE' - #obj_vertex_indices = {} - bi.selected_face_mode = True if fill_mode == 'FACE' else False - - # Clear selected objects first - bi.selected_objects.clear() - - # Collect object to bake info - for obj_name, v_indices in obj_vertex_indices.items(): - ob = bpy.data.objects.get(obj_name) - bso = bi.selected_objects.add() - if is_bl_newer_than(2, 79): - bso.object = ob - bso.object_name = ob.name - - # Collect selected vertex data to bake info - for vi in v_indices: - bvi = bso.selected_vertex_indices.add() - bvi.index = vi - - # Recover other yps - if bprops.type == 'OTHER_OBJECT_CHANNELS': - for m in all_other_mats: - # Set back original socket - mout = get_material_output(m) - if mout: - nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) - if nod: - soc = nod.outputs.get(ori_from_sockets[m.name]) - if soc: m.node_tree.links.new(soc, mout.inputs[0]) - - # Remove temp emission - temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) - if temp_emi: m.node_tree.nodes.remove(temp_emi) - - # Recover other objects material settings - recover_other_objs_channels(other_objs, ori_mat_no_nodes) - - # Remove temp bake nodes - simple_remove_node(mat.node_tree, tex) - #simple_remove_node(mat.node_tree, srgb2lin) - simple_remove_node(mat.node_tree, bsdf) - if src: simple_remove_node(mat.node_tree, src) - if normal_bake: simple_remove_node(mat.node_tree, normal_bake) - if geometry: simple_remove_node(mat.node_tree, geometry) - if vector_math: simple_remove_node(mat.node_tree, vector_math) - if vector_math_1: simple_remove_node(mat.node_tree, vector_math_1) - - # Recover original bsdf - mat.node_tree.links.new(ori_bsdf, output.inputs[0]) - - for ob in objs: - # Recover modifiers - for i, m in enumerate(ob.modifiers): - #print(ob.name, i) - if i >= len(ori_mods[ob.name]): break - if ori_mods[ob.name][i] != m.show_render: - m.show_render = ori_mods[ob.name][i] - if i >= len(ori_viewport_mods[ob.name]): break - if ori_viewport_mods[ob.name][i] != m.show_render: - m.show_viewport = ori_viewport_mods[ob.name][i] - - # Recover multires levels - for m in ob.modifiers: - if m.type == 'MULTIRES' and ob.name in ori_multires_levels: - m.render_levels = ori_multires_levels[ob.name] - break - - # Recover material index - if ori_mat_ids[ob.name]: - for i, p in enumerate(ob.data.polygons): - if ori_mat_ids[ob.name][i] != p.material_index: - p.material_index = ori_mat_ids[ob.name][i] - - if ori_loop_locs[ob.name]: - - # Get uv map - uv_layers = get_uv_layers(ob) - uvl = uv_layers.get(bprops.uv_map) - - # Recover uv locations - if uvl: - for i, p in enumerate(ob.data.polygons): - for j, li in enumerate(p.loop_indices): - uvl.data[li].uv = ori_loop_locs[ob.name][i][j] - - # Delete temp vcol - vcols = get_vertex_colors(ob) - if vcols: - vcol = vcols.get(TEMP_VCOL) - if vcol: vcols.remove(vcol) - - # Recover flip normals setup - if bprops.flip_normals: - #bpy.ops.object.mode_set(mode = 'EDIT') - #bpy.ops.mesh.flip_normals() - #bpy.ops.mesh.select_all(action='DESELECT') - #bpy.ops.object.mode_set(mode = ori_mode) - if is_bl_newer_than(2, 80): - # Deselect other objects first - for o in other_objs: - o.select_set(False) - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - # Reselect other objects - for o in other_objs: - o.select_set(True) - else: - for ob in objs: - if ob in other_objs: continue - scene.objects.active = ob - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.reveal() - bpy.ops.mesh.select_all(action='SELECT') - bpy.ops.mesh.flip_normals() - bpy.ops.object.mode_set(mode='OBJECT') - - # Recover subdiv setup - if height_root_ch and subdiv_setup_changes: - height_root_ch.enable_subdiv_setup = not height_root_ch.enable_subdiv_setup - - # Remove flow vcols - if bprops.type == 'FLOW': - for ob in objs: - vcols = get_vertex_colors(ob) - flow_vcol = vcols.get(FLOW_VCOL) - if flow_vcol: - vcols.remove(flow_vcol) - - # Recover bake settings - recover_bake_settings(book, yp, mat=mat) - - # Remove temporary objects - if temp_objs: - for o in temp_objs: - remove_mesh_obj(o) - - # Check linear nodes becuse sometimes bake results can be linear or srgb - check_yp_linear_nodes(yp, reconnect=True) - - # Reconnect and rearrange nodes - #reconnect_yp_layer_nodes(node.node_tree) - reconnect_yp_nodes(node.node_tree) - rearrange_yp_nodes(node.node_tree) - - # Refresh mapping and stuff - #yp.active_layer_index = yp.active_layer_index - - if image: print('BAKE TO LAYER: Baking', image.name, 'is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') - else: print('BAKE TO LAYER: No image created! Executed in', '{:0.2f}'.format(time.time() - T), 'seconds!') - - rdict['active_id'] = active_id - rdict['image'] = image - - return rdict - def get_bake_properties_from_self(self): bprops = dotdict() @@ -2172,413 +885,6 @@ def execute(self, context): return {'FINISHED'} -def put_image_to_image_atlas(yp, image, tilenums=[]): - - if image.source == 'TILED': - segment = UDIM.get_set_udim_atlas_segment( - tilenums, color=(0, 0, 0, 1), colorspace=get_noncolor_name(), hdr=image.is_float, yp=yp - ) - else: - # Clearing unused image atlas segments - img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'BLACK', image.size[0], image.size[1], image.is_float) - if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) - - segment = ImageAtlas.get_set_image_atlas_segment( - image.size[0], image.size[1], 'BLACK', image.is_float, yp=yp - ) - - ia_image = segment.id_data - - # Set baked image to segment - if image.source == 'TILED': - offset = get_udim_segment_mapping_offset(segment) * 10 - copy_dict = {} - for tilenum in tilenums: - copy_dict[tilenum] = tilenum + offset - UDIM.copy_tiles(image, ia_image, copy_dict) - else: copy_image_pixels(image, ia_image, segment) - - # Remove original baked image - remove_datablock(bpy.data.images, image) - - return ia_image, segment - -def bake_entity_as_image(entity, bprops, set_image_to_entity=False): - - rdict = {} - rdict['message'] = '' - - yp = entity.id_data.yp - mat = get_active_material() - objs = [bpy.context.object] - if mat.users > 1: - objs, _ = get_bakeable_objects_and_meshes(mat) - - if not objs: - rdict['message'] = "No valid objects found to bake!" - return rdict - - # Get tile numbers - tilenums = [1001] - if bprops.use_udim: - tilenums = UDIM.get_tile_numbers(objs, bprops.uv_map) - - m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) - m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) - - ori_use_baked = False - ori_enabled_mods = [] - - #ori_enable_blur = False - modifiers_disabled = False - if m1: - layer = yp.layers[int(m1.group(1))] - mask = None - source_tree = get_source_tree(layer) - elif m2: - layer = yp.layers[int(m2.group(1))] - mask = layer.masks[int(m2.group(2))] - source_tree = get_mask_tree(mask) - - else: - rdict['message'] = "Wrong entity!" - return rdict - - # Disable use baked first - if entity.use_baked: - ori_use_baked = True - entity.use_baked = False - - # Setting image to entity will disable modifiers - if set_image_to_entity: - for mod in entity.modifiers: - if mod.enable: - ori_enabled_mods.append(mod) - mod.enable = False - modifiers_disabled = True - #ori_enable_blur = entity.enable_blur_vector - #entity.enable_blur_vector = False - - # Get existing baked image - existing_image = None - baked_source = source_tree.nodes.get(entity.baked_source) - if baked_source: existing_image = baked_source.image - - # Remember things - book = remember_before_bake(yp) - - # FXAA doesn't work with hdr image - # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead - use_fxaa = not bprops.hdr and bprops.fxaa - - # Remember before doing preview - ori_channel_index = yp.active_channel_index - ori_preview_mode = yp.preview_mode - ori_layer_preview_mode = yp.layer_preview_mode - ori_layer_preview_mode_type = yp.layer_preview_mode_type - - ori_layer_intensity_value = 1.0 - changed_layer_channel_index = -1 - ori_layer_channel_intensity_value = 1.0 - ori_layer_channel_blend_type = 'MIX' - ori_layer_channel_override = None - ori_layer_enable_masks = None - - # Make sure layer is enabled - ori_layer_enable = layer.enable - layer.enable = True - layer_opacity = get_entity_prop_value(layer, 'intensity_value') - if layer_opacity != 1.0: - ori_layer_intensity_value = layer_opacity - set_entity_prop_value(layer, 'intensity_value', 1.0) - - # Make sure layer is active one - ori_layer_idx = yp.active_layer_index - layer_idx = get_layer_index(layer) - if yp.active_layer_index != layer_idx: - yp.active_layer_index = layer_idx - - if mask: - # Set up active edit - ori_mask_enable = mask.enable - mask.enable = True - mask.active_edit = True - else: - # Disable masks - ori_layer_enable_masks = layer.enable_masks - if layer.enable_masks: - layer.enable_masks = False - for m in layer.masks: - if m.active_edit: m.active_edit = False - - # Preview setup - yp.layer_preview_mode_type = 'SPECIFIC_MASK' if mask else 'LAYER' - yp.layer_preview_mode = True - - # Set active channel so preview will output right value - for i, ch in enumerate(layer.channels): - if mask: - if ch.enable and mask.channels[i].enable: - yp.active_channel_index = i - break - else: - if ch.enable: - yp.active_channel_index = i - - # Make sure intensity value is 1.0 - intensity_value = get_entity_prop_value(ch, 'intensity_value') - if intensity_value != 1.0: - changed_layer_channel_index = i - ori_layer_channel_intensity_value = intensity_value - set_entity_prop_value(ch, 'intensity_value', 1.0) - - if ch.blend_type != 'MIX': - changed_layer_channel_index = i - ori_layer_channel_blend_type = ch.blend_type - ch.blend_type = 'MIX' - - if ch.override: - changed_layer_channel_index = i - ori_layer_channel_override = True - ch.override = False - - break - - # Modifier setups - ori_mods = {} - ori_viewport_mods = {} - - for obj in objs: - - # Disable few modifiers - ori_mods[obj.name] = [m.show_render for m in obj.modifiers] - ori_viewport_mods[obj.name] = [m.show_viewport for m in obj.modifiers] - - for m in get_problematic_modifiers(obj): - m.show_render = False - - prepare_bake_settings( - book, objs, yp, samples=bprops.samples, margin=bprops.margin, - uv_map=bprops.uv_map, bake_type='EMIT', bake_device=bprops.bake_device, - margin_type = bprops.margin_type - ) - - # Create bake nodes - tex = mat.node_tree.nodes.new('ShaderNodeTexImage') - - if mask: - color = (0, 0, 0, 1) - color_str = 'BLACK' - colorspace = get_noncolor_name() - else: - color = (0, 0, 0, 0) - color_str = 'TRANSPARENT' - colorspace = get_noncolor_name() if bprops.hdr else get_srgb_name() - - # Use existing image colorspace if available - if existing_image: - colorspace = existing_image.colorspace_settings.name - - # Create image - if bprops.use_udim: - image = bpy.data.images.new( - name=bprops.name, width=bprops.width, height=bprops.height, - alpha=True, float_buffer=bprops.hdr, tiled=True - ) - - # Fill tiles - for tilenum in tilenums: - UDIM.fill_tile(image, tilenum, color, bprops.width, bprops.height) - UDIM.initial_pack_udim(image, color) - - # Remember base color - image.yia.color = color_str - else: - image = bpy.data.images.new( - name=bprops.name, width=bprops.width, height=bprops.height, - alpha=True, float_buffer=bprops.hdr - ) - - image.generated_color = color - image.colorspace_settings.name = colorspace - - # Set bake image - tex.image = image - mat.node_tree.nodes.active = tex - - # Bake! - bpy.ops.object.bake() - - if bprops.blur: - samples = 4096 if is_bl_newer_than(3) else 128 - blur_image(image, False, bake_device=bprops.bake_device, factor=bprops.blur_factor, samples=samples) - if bprops.denoise: - denoise_image(image) - if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) - - # Remove temp bake nodes - simple_remove_node(mat.node_tree, tex, remove_data=False) - - # Recover bake settings - recover_bake_settings(book, yp) - - # Recover modifiers - for obj in objs: - # Recover modifiers - for i, m in enumerate(obj.modifiers): - #print(obj.name, i) - if i >= len(ori_mods[obj.name]): break - if ori_mods[obj.name][i] != m.show_render: - m.show_render = ori_mods[obj.name][i] - if i >= len(ori_viewport_mods[obj.name]): break - if ori_viewport_mods[obj.name][i] != m.show_render: - m.show_viewport = ori_viewport_mods[obj.name][i] - - # Recover preview - yp.active_channel_index = ori_channel_index - if yp.preview_mode != ori_preview_mode: - yp.preview_mode = ori_preview_mode - if yp.layer_preview_mode != ori_layer_preview_mode: - yp.layer_preview_mode = ori_layer_preview_mode - if yp.layer_preview_mode_type != ori_layer_preview_mode_type: - yp.layer_preview_mode_type = ori_layer_preview_mode_type - - if changed_layer_channel_index != -1: - ch = layer.channels[changed_layer_channel_index] - - if ori_layer_channel_intensity_value != 1.0: - set_entity_prop_value(ch, 'intensity_value', ori_layer_channel_intensity_value) - - if ori_layer_channel_blend_type != 'MIX': - ch.blend_type = ori_layer_channel_blend_type - - if ori_layer_channel_override != None and ch.override != ori_layer_channel_override: - ch.override = ori_layer_channel_override - - if ori_layer_intensity_value != 1.0: - set_entity_prop_value(layer, 'intensity_value', ori_layer_intensity_value) - - if ori_layer_enable_masks != None and layer.enable_masks != ori_layer_enable_masks: - layer.enable_masks = ori_layer_enable_masks - - if ori_layer_idx != yp.active_layer_index: - yp.active_layer_index = ori_layer_idx - - if ori_layer_enable != layer.enable: - layer.enable = ori_layer_enable - - if mask and ori_mask_enable != mask.enable: - mask.enable = ori_mask_enable - - if modifiers_disabled: - for mod in ori_enabled_mods: - mod.enable = True - - #if ori_enable_blur: - # mask.enable_blur_vector = True - - if ori_use_baked: - entity.use_baked = True - - # Set up image atlas segment - segment = None - if bprops.use_image_atlas: - image, segment = put_image_to_image_atlas(yp, image, tilenums) - - if set_image_to_entity: - - layer_tree = get_tree(layer) - if mask: source_tree = get_mask_tree(mask) - else: source_tree = get_source_tree(layer) - - yp.halt_update = True - - # Set bake info to image/segment - bi = segment.bake_info if segment else image.y_bake_info - - bi.is_baked = True - bi.is_baked_entity = True - bi.baked_entity_type = entity.type - for attr in dir(bi): - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - try: setattr(bi, attr, bprops[attr]) - except: pass - - # Set bake type for some types - if entity.type == 'EDGE_DETECT': - bi.bake_type = 'BEVEL_MASK' - bi.bevel_radius = get_entity_prop_value(entity, 'edge_detect_radius') - elif entity.type == 'AO': - source = get_entity_source(entity) - bi.bake_type = 'AO' - bi.ao_distance = get_entity_prop_value(entity, 'ao_distance') - bi.only_local = source.only_local - - # Get baked source - overwrite_image = None - baked_source = source_tree.nodes.get(entity.baked_source) - if baked_source: - overwrite_image = baked_source.image - - # Remove old segment - if entity.baked_segment_name != '': - if overwrite_image.yia.is_image_atlas: - old_segment = overwrite_image.yia.segments.get(entity.baked_segment_name) - old_segment.unused = True - elif overwrite_image.yua.is_udim_atlas: - UDIM.remove_udim_atlas_segment_by_name(overwrite_image, entity.baked_segment_name, yp=yp) - - # Remove baked segment name - entity.baked_segment_name = '' - else: - baked_source = new_node(source_tree, entity, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') - - # Set image to baked node - if overwrite_image and not segment: - replace_image(overwrite_image, image) - else: baked_source.image = image - - height_ch = get_height_channel(layer) - if height_ch and height_ch.enable: - baked_source.interpolation = 'Cubic' - - # Set entity props - entity.baked_uv_name = bprops.uv_map - entity.use_baked = True - - yp.halt_update = False - - if segment: - # Set up baked mapping - mapping = check_new_node(layer_tree, entity, 'baked_mapping', 'ShaderNodeMapping', 'Baked Mapping') - clear_mapping(entity, use_baked=True) - ImageAtlas.set_segment_mapping(entity, segment, image, use_baked=True) - - # Set baked segment name to entity - entity.baked_segment_name = segment.name - else: - remove_node(layer_tree, entity, 'baked_mapping') - - # Refresh uv - refresh_temp_uv(bpy.context.object, entity) - - # Refresh Neighbor UV resolution - set_uv_neighbor_resolution(entity) - - # Update global uv - check_uv_nodes(yp) - - # Update layer tree inputs - check_all_layer_channel_io_and_nodes(layer) - check_start_end_root_ch_nodes(yp.id_data) - - rdict['image'] = image - rdict['segment'] = segment - - return rdict - class YBakeEntityToImage(bpy.types.Operator, BaseBakeOperator): bl_idname = "wm.y_bake_entity_to_image" bl_label = "Bake Layer/Mask To Image" @@ -3044,54 +1350,7 @@ def execute(self, context): node = get_active_ypaint_node() yp = node.node_tree.yp - entities, images, segment_names, segment_name_props = get_yp_entities_images_and_segments(yp) - - for i, image in enumerate(images): - - if image.yia.is_image_atlas: - segment = image.yia.segments.get(segment_names[i]) - elif image.yua.is_udim_atlas: - segment = image.yua.segments.get(segment_names[i]) - else: segment = None - - if ((segment and segment.bake_info.is_baked and not segment.bake_info.is_baked_channel) or - (not segment and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) - ): - - bi = image.y_bake_info if not segment else segment.bake_info - - # Skip outdated bake type - if bi.bake_type == 'SELECTED_VERTICES': - continue - - entity = entities[i][0] - entity_path = entity.path_from_id() - segment_name_prop = segment_name_props[i][0] - - m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity_path) - m2 = re.match(r'^yp\.layers\[(\d+)\]\.channels\[(\d+)\]$', entity_path) - - bake_properties = dotdict() - for attr in dir(bi): - if attr.startswith('__'): continue - if attr.startswith('bl_'): continue - if attr in {'rna_type'}: continue - try: bake_properties[attr] = getattr(bi, attr) - except: pass - - bake_properties.update({ - 'type': bi.bake_type, - 'target_type': 'LAYER' if m1 or m2 else 'MASK', - 'name': image.name, - 'width': image.size[0] if not segment else segment.width, - 'height': image.size[1] if not segment else segment.height, - 'uv_map': entity.uv_name if not entity.use_baked else entity.baked_uv_name - }) - - # 'baked_segment_name' meant the entity is baked as image - if segment_name_prop == 'baked_segment_name': - bake_entity_as_image(entity, bprops=bake_properties, set_image_to_entity=True) - else: bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) + rebake_baked_images(yp) print('REBAKE ALL IMAGES: Rebaking all images is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') return {'FINISHED'} diff --git a/Layer.py b/Layer.py index b6c503ac..65d15a89 100644 --- a/Layer.py +++ b/Layer.py @@ -1,7 +1,7 @@ import bpy, time, re, os, random, numpy from bpy.props import * from bpy_extras.io_utils import ImportHelper -from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem +from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem, bake_common from .common import * #from .bake_common import * from .node_arrangements import * @@ -5212,6 +5212,12 @@ class YPasteLayer(bpy.types.Operator): default = False ) + rebake_bakeds : BoolProperty( + name = 'Rebake All Baked Images', + description = 'Rebake baked images', + default = True + ) + @classmethod def poll(cls, context): group_node = get_active_ypaint_node() @@ -5222,24 +5228,37 @@ def description(self, context, properties): return get_operator_description(self) def invoke(self, context, event): + group_node = get_active_ypaint_node() + yp = group_node.node_tree.yp + wm = context.window_manager wmp = wm.ypprops self.any_packed_image = False self.any_ondisk_image = False self.any_decal = False + self.any_baked = False tree_source = bpy.data.node_groups.get(wmp.clipboard_tree) if tree_source: yp_source = tree_source.yp - layer_source = yp_source.layers.get(wmp.clipboard_layer) + source_layers = [] + if wmp.clipboard_layer == '': + source_layers = yp_source.layers + else: + layer = yp_source.layers.get(wmp.clipboard_layer) + source_layers.append(layer) - if layer_source: - self.any_packed_image = any(get_layer_images(layer_source, packed_only=True)) - self.any_ondisk_image = any(get_layer_images(layer_source, ondisk_only=True)) - self.any_decal = any_decal_inside_layer(layer_source) + for layer in source_layers: + if not self.any_packed_image: self.any_packed_image = any(get_layer_images(layer, packed_only=True)) + if not self.any_ondisk_image: self.any_ondisk_image = any(get_layer_images(layer, ondisk_only=True)) + if not self.any_decal: self.any_decal = any_decal_inside_layer(layer) - if self.any_packed_image or self.any_ondisk_image or self.any_decal: + # Do not check baked if current yp == yp_source + if yp != yp_source: + if not self.any_baked: self.any_baked = any(get_layer_images(layer, baked_only=True)) + + if self.any_packed_image or self.any_ondisk_image or self.any_decal or self.any_baked: if get_user_preferences().skip_property_popups and not event.shift: return self.execute(context) @@ -5247,6 +5266,9 @@ def invoke(self, context, event): return self.execute(context) + def check(self, context): + return True + def draw(self, context): if self.any_packed_image: self.layout.prop(self, 'packed_duplicate') @@ -5257,6 +5279,12 @@ def draw(self, context): if self.any_decal: self.layout.prop(self, 'set_new_decal_position') + if self.any_baked: + self.layout.prop(self, 'rebake_bakeds') + + if self.rebake_bakeds: + self.layout.label(text='Rebaking can take a while', icon='ERROR') + def execute(self, context): T = time.time() @@ -5416,6 +5444,11 @@ def execute(self, context): reconnect_yp_nodes(tree) rearrange_yp_nodes(tree) + # Rebake baked images + if self.any_baked and self.rebake_bakeds: + pasted_layers = [l for l in yp.layers if l.name in pasted_layer_names] + bake_common.rebake_baked_images(yp, specific_layers=pasted_layers) + # Refresh active layer yp.active_layer_index = yp.active_layer_index diff --git a/bake_common.py b/bake_common.py index 0e6be7a3..ac97f38d 100644 --- a/bake_common.py +++ b/bake_common.py @@ -7,6 +7,9 @@ BL28_HACK = True +TEMP_VCOL = '__temp__vcol__' +TEMP_EMISSION = '_TEMP_EMI_' + BAKE_PROBLEMATIC_MODIFIERS = { 'MIRROR', 'SOLIDIFY', @@ -2264,6 +2267,1748 @@ def disable_temp_bake(entity): # Set entity attribute entity.use_temp_bake = False +def get_bakeable_objects_and_meshes(mat, cage_object=None): + objs = [] + meshes = [] + + for ob in get_scene_objects(): + if ob.type != 'MESH': continue + if hasattr(ob, 'hide_viewport') and ob.hide_viewport: continue + if len(get_uv_layers(ob)) == 0: continue + if len(ob.data.polygons) == 0: continue + if cage_object and cage_object == ob: continue + + # Do not bake objects with hide_render on + if ob.hide_render: continue + if not in_renderable_layer_collection(ob): continue + + for i, m in enumerate(ob.data.materials): + if m == mat: + ob.active_material_index = i + if ob not in objs and ob.data not in meshes: + objs.append(ob) + meshes.append(ob.data) + + return objs, meshes + +def bake_to_entity(bprops, overwrite_img=None, segment=None): + + T = time.time() + mat = get_active_material() + node = get_active_ypaint_node() + yp = node.node_tree.yp + scene = bpy.context.scene + obj = bpy.context.object + channel_idx = int(bprops.channel_idx) if 'channel_idx' in bprops and len(yp.channels) > 0 else -1 + + rdict = {} + rdict['message'] = '' + + if bprops.type == 'SELECTED_VERTICES' and obj.mode != 'EDIT': + rdict['message'] = "Should be in edit mode!" + return rdict + + if bprops.target_type == 'MASK' and len(yp.layers) == 0: + rdict['message'] = "Mask need active layer!" + return rdict + + if bprops.type in {'BEVEL_NORMAL', 'BEVEL_MASK'} and not is_bl_newer_than(2, 80): + rdict['message'] = "Blender 2.80+ is needed to use this feature!" + return rdict + + if bprops.type in {'MULTIRES_NORMAL', 'MULTIRES_DISPLACEMENT'} and not is_bl_newer_than(2, 80): + rdict['message'] = "Blender 2.80+ is needed to use this feature!" + return rdict + + if (hasattr(obj, 'hide_viewport') and obj.hide_viewport) or obj.hide_render: + rdict['message'] = "Please unhide render and viewport of active object!" + return rdict + + if bprops.type == 'FLOW' and (bprops.uv_map == '' or bprops.uv_map_1 == '' or bprops.uv_map == bprops.uv_map_1): + rdict['message'] = "UVMap and Straight UVMap cannot be the same or empty!" + return rdict + + # Get cage object + cage_object = None + if bprops.type.startswith('OTHER_OBJECT_') and bprops.cage_object_name != '': + cage_object = bpy.data.objects.get(bprops.cage_object_name) + if cage_object: + + if any([mod for mod in cage_object.modifiers if mod.type not in {'ARMATURE'}]) or any([mod for mod in obj.modifiers if mod.type not in {'ARMATURE'}]): + rdict['message'] = "Mesh modifiers is not working with cage object for now!" + return rdict + + if len(cage_object.data.polygons) != len(obj.data.polygons): + rdict['message'] = "Invalid cage object, the cage mesh must have the same number of faces as the active object!" + return rdict + + objs = [obj] + if mat.users > 1: + objs, meshes = get_bakeable_objects_and_meshes(mat, cage_object) + + # Count multires objects + multires_count = 0 + if bprops.type.startswith('MULTIRES_'): + for ob in objs: + if get_multires_modifier(ob): + multires_count += 1 + + if not objs or (bprops.type.startswith('MULTIRES_') and multires_count == 0): + rdict['message'] = "No valid objects found to bake!" + return rdict + + do_overwrite = False + overwrite_image_name = '' + if overwrite_img: + do_overwrite = True + overwrite_image_name = overwrite_img.name + + # Get other objects for other object baking + other_objs = [] + + if bprops.type.startswith('OTHER_OBJECT_'): + + # Get other objects based on selected objects with different material + for o in bpy.context.selected_objects: + if o in objs or not o.data or not hasattr(o.data, 'materials'): continue + if mat.name not in o.data.materials: + other_objs.append(o) + + # Try to get other_objects from bake info + if overwrite_img: + + bi = segment.bake_info if segment else overwrite_img.y_bake_info + + scene_objs = get_scene_objects() + for oo in bi.other_objects: + if is_bl_newer_than(2, 79): + ooo = oo.object + else: ooo = scene_objs.get(oo.object_name) + + if ooo: + if is_bl_newer_than(2, 80): + # Check if object is on current view layer + layer_cols = get_object_parent_layer_collections([], bpy.context.view_layer.layer_collection, ooo) + if ooo not in other_objs and any(layer_cols): + other_objs.append(ooo) + else: + o = scene_objs.get(ooo.name) + if o and o not in other_objs: + other_objs.append(o) + + if bprops.type == 'OTHER_OBJECT_CHANNELS': + ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) + + if not other_objs: + if overwrite_img: + rdict['message'] = "No source objects found! They're probably deleted!" + return rdict + else: + rdict['message'] = "Source objects must be selected and it should have different material!" + return rdict + + # Get tile numbers + tilenums = [1001] + if bprops.use_udim: + tilenums = UDIM.get_tile_numbers(objs, bprops.uv_map) + + # Remember things + book = remember_before_bake(yp, mat=mat) + + # FXAA doesn't work with hdr image + # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead + use_fxaa = not bprops.hdr and bprops.fxaa and not bprops.type.startswith('OTHER_OBJECT_') + + # For now SSAA only works with other object baking + use_ssaa = bprops.ssaa and bprops.type.startswith('OTHER_OBJECT_') + + # Denoising only available for AO bake for now + use_denoise = bprops.denoise and bprops.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81) + + # SSAA will multiply size by 2 then resize it back + if use_ssaa: + width = bprops.width * 2 + height = bprops.height * 2 + else: + width = bprops.width + height = bprops.height + + # If use baked disp, need to bake normal and height map first + subdiv_setup_changes = False + height_root_ch = get_root_height_channel(yp) + if height_root_ch and bprops.use_baked_disp and not bprops.type.startswith('MULTIRES_'): + + if not height_root_ch.enable_subdiv_setup: + height_root_ch.enable_subdiv_setup = True + subdiv_setup_changes = True + + # To hold temporary objects + temp_objs = [] + + # Sometimes Cavity bake will create temporary objects + if (bprops.type == 'CAVITY' and (bprops.subsurf_influence or bprops.use_baked_disp)): + + # NOTE: Baking cavity with subdiv setup can only happen if there's only one object and no UDIM + if is_bl_newer_than(4, 2) and len(objs) == 1 and not bprops.use_udim and height_root_ch and height_root_ch.enable_subdiv_setup: + + # Check if there's VDM layer + vdm_layer = get_first_vdm_layer(yp) + vdm_uv_name = vdm_layer.uv_name if vdm_layer else bprops.uv_map + + # Get baked combined vdm image + combined_vdm_image = vector_displacement.get_combined_vdm_image(objs[0], vdm_uv_name, width=bprops.width, height=bprops.height) + + # Bake tangent and bitangent + # NOTE: Only bake the first object tangent since baking combined mesh can cause memory leak at the moment + tanimage, bitimage = vector_displacement.get_tangent_bitangent_images(objs[0], bprops.uv_map) + + # Duplicate object + objs = temp_objs = [get_merged_mesh_objects(scene, objs, True, disable_problematic_modifiers=False)] + + # Use VDM loader geometry nodes + # NOTE: Geometry nodes currently does not support UDIM, so using UDIM will cause wrong bake result + set_active_object(objs[0]) + vdm_loader = vector_displacement_lib.get_vdm_loader_geotree(bprops.uv_map, combined_vdm_image, tanimage, bitimage, 1.0) + bpy.ops.object.modifier_add(type='NODES') + geomod = objs[0].modifiers[-1] + geomod.node_group = vdm_loader + bpy.ops.object.modifier_apply(modifier=geomod.name) + + # Remove temporary datas + remove_datablock(bpy.data.node_groups, vdm_loader) + remove_datablock(bpy.data.images, combined_vdm_image) + + else: + objs = temp_objs = get_duplicated_mesh_objects(scene, objs, True) + + # Join objects then extend with other objects + elif bprops.type.startswith('OTHER_OBJECT_'): + if len(objs) > 1: + objs = [get_merged_mesh_objects(scene, objs)] + temp_objs = objs.copy() + + objs.extend(other_objs) + + # Join objects if the number of objects is higher than one + elif not bprops.type.startswith('MULTIRES_') and len(objs) > 1 and not is_join_objects_problematic(yp): + objs = temp_objs = [get_merged_mesh_objects(scene, objs, True)] + + fill_mode = 'FACE' + obj_vertex_indices = {} + if bprops.type == 'SELECTED_VERTICES': + if bpy.context.tool_settings.mesh_select_mode[0] or bpy.context.tool_settings.mesh_select_mode[1]: + fill_mode = 'VERTEX' + + if is_bl_newer_than(2, 80): + edit_objs = [o for o in objs if o.mode == 'EDIT'] + else: edit_objs = [obj] + + for ob in edit_objs: + mesh = ob.data + bm = bmesh.from_edit_mesh(mesh) + + bm.verts.ensure_lookup_table() + #bm.edges.ensure_lookup_table() + bm.faces.ensure_lookup_table() + + v_indices = [] + if fill_mode == 'FACE': + for face in bm.faces: + if face.select: + v_indices.append(face.index) + #for loop in face.loops: + # v_indices.append(loop.index) + + else: + for vert in bm.verts: + if vert.select: + v_indices.append(vert.index) + + obj_vertex_indices[ob.name] = v_indices + + bpy.ops.object.mode_set(mode = 'OBJECT') + for ob in objs: + try: + vcol = new_vertex_color(ob, TEMP_VCOL) + set_obj_vertex_colors(ob, vcol.name, (0.0, 0.0, 0.0, 1.0)) + set_active_vertex_color(ob, vcol) + except: pass + bpy.ops.object.mode_set(mode = 'EDIT') + bpy.ops.mesh.y_vcol_fill(color_option ='WHITE') + bpy.ops.object.mode_set(mode = 'OBJECT') + + # Check if there's channel using alpha + alpha_outp = None + for c in yp.channels: + if c.enable_alpha: + alpha_outp = node.outputs.get(c.name + io_suffix['ALPHA']) + if alpha_outp: break + + # Prepare bake settings + if bprops.type == 'AO': + if alpha_outp: + # If there's alpha channel use standard AO bake, which has lesser quality denoising + bake_type = 'AO' + else: + # When there is no alpha channel use combined render bake, which has better denoising + bake_type = 'COMBINED' + elif bprops.type == 'MULTIRES_NORMAL': + bake_type = 'NORMALS' + elif bprops.type == 'MULTIRES_DISPLACEMENT': + bake_type = 'DISPLACEMENT' + elif bprops.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + bake_type = 'NORMAL' + else: + bake_type = 'EMIT' + + # If use only local, hide other objects + hide_other_objs = bprops.type != 'AO' or bprops.only_local + + # Fit tilesize to bake resolution if samples is equal 1 + if bprops.samples <= 1: + tile_x = width + tile_y = height + else: + tile_x = 256 + tile_y = 256 + + # Cage object only used for other object baking + cage_object_name = bprops.cage_object_name if bprops.type.startswith('OTHER_OBJECT_') else '' + + prepare_bake_settings( + book, objs, yp, samples=bprops.samples, margin=bprops.margin, + uv_map=bprops.uv_map, bake_type=bake_type, #disable_problematic_modifiers=True, + bake_device=bprops.bake_device, hide_other_objs=hide_other_objs, + bake_from_multires=bprops.type.startswith('MULTIRES_'), tile_x = tile_x, tile_y = tile_y, + use_selected_to_active=bprops.type.startswith('OTHER_OBJECT_'), + max_ray_distance=bprops.max_ray_distance, cage_extrusion=bprops.cage_extrusion, + source_objs=other_objs, use_denoising=False, margin_type=bprops.margin_type, + cage_object_name = cage_object_name, + normal_space = 'OBJECT' if bprops.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' + ) + # Set multires level + #ori_multires_levels = {} + if bprops.type.startswith('MULTIRES_'): #or bprops.type == 'AO': + for ob in objs: + mod = get_multires_modifier(ob) + + #mod.render_levels = mod.total_levels + if mod and bprops.type.startswith('MULTIRES_'): + mod.render_levels = bprops.multires_base + mod.levels = bprops.multires_base + + #ori_multires_levels[ob.name] = mod.render_levels + + # Setup for cavity + if bprops.type == 'CAVITY': + + tt = time.time() + print('BAKE TO LAYER: Applying subsurf/multires for Cavity bake...') + + # Set vertex color for cavity + for ob in objs: + + set_active_object(ob) + + if bprops.subsurf_influence or bprops.use_baked_disp: + need_to_be_applied_modifiers = [] + for m in ob.modifiers: + if m.type in {'SUBSURF', 'MULTIRES'} and m.levels > 0 and m.show_viewport: + + # Set multires to the highest level + if m.type == 'MULTIRES': + m.levels = m.total_levels + + need_to_be_applied_modifiers.append(m) + + # Also apply displace + if m.type == 'DISPLACE' and m.show_viewport: + need_to_be_applied_modifiers.append(m) + + # Apply shape keys and modifiers + if any(need_to_be_applied_modifiers): + if ob.data.shape_keys: + if is_bl_newer_than(3, 3): + bpy.ops.object.shape_key_remove(all=True, apply_mix=True) + else: bpy.ops.object.shape_key_remove(all=True) + + for m in need_to_be_applied_modifiers: + bpy.ops.object.modifier_apply(modifier=m.name) + + # Create new vertex color for dirt + try: + vcol = new_vertex_color(ob, TEMP_VCOL) + set_obj_vertex_colors(ob, vcol.name, (1.0, 1.0, 1.0, 1.0)) + set_active_vertex_color(ob, vcol) + except: pass + + bpy.ops.paint.vertex_color_dirt(dirt_angle=math.pi / 2) + + print('BAKE TO LAYER: Applying subsurf/multires is done in', '{:0.2f}'.format(time.time() - tt), 'seconds!') + + # Setup for flow + if bprops.type == 'FLOW': + bpy.ops.object.mode_set(mode = 'OBJECT') + for ob in objs: + uv_layers = get_uv_layers(ob) + main_uv = uv_layers.get(bprops.uv_map) + straight_uv = uv_layers.get(bprops.uv_map_1) + + if main_uv and straight_uv: + flow_vcol = get_flow_vcol(ob, main_uv, straight_uv) + + # Flip normals setup + if bprops.flip_normals: + #ori_mode[obj.name] = obj.mode + if is_bl_newer_than(2, 80): + # Deselect other objects first + for o in other_objs: + o.select_set(False) + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') + # Reselect other objects + for o in other_objs: + o.select_set(True) + else: + for ob in objs: + if ob in other_objs: continue + scene.objects.active = ob + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') + + # More setup + ori_mods = {} + ori_viewport_mods = {} + ori_mat_ids = {} + ori_loop_locs = {} + ori_multires_levels = {} + + # Do not disable modifiers for surface based bake types + disable_problematic_modifiers = bprops.type not in {'CAVITY', 'POINTINESS', 'BEVEL_NORMAL', 'BEVEL_MASK'} + + for ob in objs: + + # Disable few modifiers + ori_mods[ob.name] = [m.show_render for m in ob.modifiers] + ori_viewport_mods[ob.name] = [m.show_viewport for m in ob.modifiers] + if bprops.type.startswith('MULTIRES_'): + mul = get_multires_modifier(ob) + multires_index = 99 + if mul: + for i, m in enumerate(ob.modifiers): + if m == mul: multires_index = i + if i > multires_index: + m.show_render = False + m.show_viewport = False + elif disable_problematic_modifiers and ob not in other_objs: + for m in get_problematic_modifiers(ob): + m.show_render = False + + ori_mat_ids[ob.name] = [] + ori_loop_locs[ob.name] = [] + + if bprops.subsurf_influence and not bprops.use_baked_disp and not bprops.type.startswith('MULTIRES_'): + for m in ob.modifiers: + if m.type == 'MULTIRES': + ori_multires_levels[ob.name] = m.render_levels + m.render_levels = m.total_levels + break + + if len(ob.data.materials) > 1: + active_mat_id = [i for i, m in enumerate(ob.data.materials) if m == mat] + if active_mat_id: active_mat_id = active_mat_id[0] + else: continue + + uv_layers = get_uv_layers(ob) + uvl = uv_layers.get(bprops.uv_map) + + for p in ob.data.polygons: + + # Set uv location to (0,0) if not using current material + if uvl and not bprops.force_bake_all_polygons: + uv_locs = [] + for li in p.loop_indices: + uv_locs.append(uvl.data[li].uv.copy()) + if p.material_index != active_mat_id: + uvl.data[li].uv = Vector((0.0, 0.0)) + + ori_loop_locs[ob.name].append(uv_locs) + + # Need to assign all polygon to active material if there are multiple materials + ori_mat_ids[ob.name].append(p.material_index) + p.material_index = active_mat_id + + # Create bake nodes + tex = mat.node_tree.nodes.new('ShaderNodeTexImage') + bsdf = mat.node_tree.nodes.new('ShaderNodeEmission') + normal_bake = None + geometry = None + vector_math = None + vector_math_1 = None + if bprops.type == 'BEVEL_NORMAL': + #bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') + normal_bake = mat.node_tree.nodes.new('ShaderNodeGroup') + normal_bake.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV) + elif bprops.type == 'BEVEL_MASK': + geometry = mat.node_tree.nodes.new('ShaderNodeNewGeometry') + vector_math = mat.node_tree.nodes.new('ShaderNodeVectorMath') + vector_math.operation = 'CROSS_PRODUCT' + if is_bl_newer_than(2, 81): + vector_math_1 = mat.node_tree.nodes.new('ShaderNodeVectorMath') + vector_math_1.operation = 'LENGTH' + + # Get output node and remember original bsdf input + output = get_active_mat_output_node(mat.node_tree) + ori_bsdf = output.inputs[0].links[0].from_socket + + if bprops.type == 'AO': + # If there's alpha channel use standard AO bake, which has lesser quality denoising + if alpha_outp: + src = None + + if hasattr(scene.cycles, 'use_fast_gi'): + scene.cycles.use_fast_gi = True + + if scene.world: + scene.world.light_settings.distance = bprops.ao_distance + # When there is no alpha channel use combined render bake, which has better denoising + else: + src = mat.node_tree.nodes.new('ShaderNodeAmbientOcclusion') + + if 'Distance' in src.inputs: + src.inputs['Distance'].default_value = bprops.ao_distance + + # Links + if not is_bl_newer_than(2, 80): + mat.node_tree.links.new(src.outputs[0], output.inputs[0]) + else: + mat.node_tree.links.new(src.outputs['AO'], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'POINTINESS': + src = mat.node_tree.nodes.new('ShaderNodeNewGeometry') + + # Links + mat.node_tree.links.new(src.outputs['Pointiness'], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'CAVITY': + src = mat.node_tree.nodes.new('ShaderNodeGroup') + src.node_tree = get_node_tree_lib(lib.CAVITY) + + # Set vcol + vcol_node = src.node_tree.nodes.get('vcol') + vcol_node.attribute_name = TEMP_VCOL + + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'DUST': + src = mat.node_tree.nodes.new('ShaderNodeGroup') + src.node_tree = get_node_tree_lib(lib.DUST) + + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'PAINT_BASE': + src = mat.node_tree.nodes.new('ShaderNodeGroup') + src.node_tree = get_node_tree_lib(lib.PAINT_BASE) + + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'BEVEL_NORMAL': + src = mat.node_tree.nodes.new('ShaderNodeBevel') + + src.samples = bprops.bevel_samples + src.inputs[0].default_value = bprops.bevel_radius + + #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) + mat.node_tree.links.new(src.outputs[0], normal_bake.inputs[0]) + mat.node_tree.links.new(normal_bake.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'BEVEL_MASK': + src = mat.node_tree.nodes.new('ShaderNodeBevel') + + src.samples = bprops.bevel_samples + src.inputs[0].default_value = bprops.bevel_radius + + mat.node_tree.links.new(geometry.outputs['Normal'], vector_math.inputs[0]) + mat.node_tree.links.new(src.outputs[0], vector_math.inputs[1]) + #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) + if is_bl_newer_than(2, 81): + mat.node_tree.links.new(vector_math.outputs[0], vector_math_1.inputs[0]) + mat.node_tree.links.new(vector_math_1.outputs[1], bsdf.inputs[0]) + else: + mat.node_tree.links.new(vector_math.outputs[1], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'SELECTED_VERTICES': + if is_bl_newer_than(2, 80): + src = mat.node_tree.nodes.new('ShaderNodeVertexColor') + src.layer_name = TEMP_VCOL + else: + src = mat.node_tree.nodes.new('ShaderNodeAttribute') + src.attribute_name = TEMP_VCOL + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + elif bprops.type == 'FLOW': + # Set vcol + src = mat.node_tree.nodes.new('ShaderNodeAttribute') + src.attribute_name = FLOW_VCOL + + mat.node_tree.links.new(src.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + else: + src = None + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + # Get number of target images + ch_ids = [0] + + # Other object channels related + all_other_mats = [] + ori_from_nodes = {} + ori_from_sockets = {} + + if bprops.type == 'OTHER_OBJECT_CHANNELS': + ch_ids = [i for i, coo in enumerate(ch_other_objects) if len(coo) > 0] + + # Get all other materials + for oo in other_objs: + for m in oo.data.materials: + if m == None or not m.use_nodes: continue + if m not in all_other_mats: + all_other_mats.append(m) + + # Remember original socket connected to outputs + for m in all_other_mats: + soc = None + from_node = '' + from_socket = '' + mout = get_material_output(m) + if mout: + for l in mout.inputs[0].links: + soc = l.from_socket + from_node = l.from_node.name + from_socket = l.from_socket.name + + # Create temporary emission + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: + temp_emi = m.node_tree.nodes.new('ShaderNodeEmission') + temp_emi.name = TEMP_EMISSION + m.node_tree.links.new(temp_emi.outputs[0], mout.inputs[0]) + + ori_from_nodes[m.name] = from_node + ori_from_sockets[m.name] = from_socket + + # Newly created layer index and image + active_id = None + image = None + + for idx in ch_ids: + + # Image name and colorspace + image_name = bprops.name + colorspace = get_srgb_name() + + if bprops.type == 'OTHER_OBJECT_CHANNELS': + + root_ch = yp.channels[idx] + image_name += ' ' + yp.channels[idx].name + + # Hide irrelevant objects + for oo in other_objs: + if oo not in ch_other_objects[idx]: + oo.hide_render = True + else: oo.hide_render = False + + if root_ch.type == 'NORMAL': + bake_type = 'NORMAL' + + # Set back original socket + for m in all_other_mats: + mout = get_material_output(m) + if mout: + nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) + if nod: + soc = nod.outputs.get(ori_from_sockets[m.name]) + if soc: m.node_tree.links.new(soc, mout.inputs[0]) + + else: + bake_type = 'EMIT' + + # Set emission connection + connected_mats = [] + for j, m in enumerate(ch_other_mats[idx]): + if m in connected_mats: continue + default = ch_other_defaults[idx][j] + socket = ch_other_sockets[idx][j] + + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: continue + + if default != None: + # Set default + if type(default) == float: + temp_emi.inputs[0].default_value = (default, default, default, 1.0) + else: temp_emi.inputs[0].default_value = (default[0], default[1], default[2], 1.0) + + # Break link + for l in temp_emi.inputs[0].links: + m.node_tree.links.remove(l) + elif socket: + m.node_tree.links.new(socket, temp_emi.inputs[0]) + + connected_mats.append(m) + + colorspace = get_noncolor_name() if root_ch.colorspace == 'LINEAR' else get_srgb_name() + + elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + colorspace = get_noncolor_name() + + # Using float image will always make the image linear/non-color + if bprops.hdr: + colorspace = get_noncolor_name() + + # Base color of baked image + if bprops.type == 'AO': + color = [1.0, 1.0, 1.0, 1.0] + elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + if bprops.hdr: + color = [0.7354, 0.7354, 1.0, 1.0] + else: + color = [0.5, 0.5, 1.0, 1.0] + elif bprops.type == 'FLOW': + color = [0.5, 0.5, 0.0, 1.0] + else: + if bprops.hdr: + color = [0.7354, 0.7354, 0.7354, 1.0] + else: color = [0.5, 0.5, 0.5, 1.0] + + # Make image transparent if its baked from other objects + if bprops.type.startswith('OTHER_OBJECT_'): + color[3] = 0.0 + + # New target image + if bprops.use_udim: + image = bpy.data.images.new( + name=image_name, width=width, height=height, + alpha=True, float_buffer=bprops.hdr, tiled=True + ) + + # Fill tiles + for tilenum in tilenums: + UDIM.fill_tile(image, tilenum, color, width, height) + UDIM.initial_pack_udim(image, color) + + # Remember base color + image.yui.base_color = color + else: + image = bpy.data.images.new( + name=image_name, width=width, height=height, + alpha=True, float_buffer=bprops.hdr + ) + + image.generated_color = color + image.colorspace_settings.name = colorspace + + # Set image filepath if overwrite image is found + if do_overwrite: + # Get overwrite image again to avoid pointer error + overwrite_img = bpy.data.images.get(overwrite_image_name) + #if idx == 0: + if idx == min(ch_ids): + if not overwrite_img.packed_file and overwrite_img.filepath != '': + image.filepath = overwrite_img.filepath + else: + layer = yp.layers[yp.active_layer_index] + root_ch = yp.channels[idx] + ch = layer.channels[idx] + + if root_ch.type == 'NORMAL': + source = get_channel_source_1(ch, layer) + else: source = get_channel_source(ch, layer) + + if source and hasattr(source, 'image') and source.image and not source.image.packed_file and source.image.filepath != '': + image.filepath = source.image.filepath + + # Set bake image + tex.image = image + mat.node_tree.nodes.active = tex + + # Bake! + try: + if bprops.type.startswith('MULTIRES_'): + bpy.ops.object.bake_image() + else: + if bake_type != 'EMIT': + bpy.ops.object.bake(type=bake_type) + else: bpy.ops.object.bake() + except Exception as e: + + # Try to use CPU if GPU baking is failed + if bprops.bake_device == 'GPU': + print('EXCEPTIION: GPU baking failed! Trying to use CPU...') + bprops.bake_device = 'CPU' + scene.cycles.device = 'CPU' + + if bprops.type.startswith('MULTIRES_'): + bpy.ops.object.bake_image() + else: + if bake_type != 'EMIT': + bpy.ops.object.bake(type=bake_type) + else: bpy.ops.object.bake() + else: + print('EXCEPTIION:', e) + + if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) + + # Bake other object alpha + if bprops.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS'}: + + alpha_found = False + if bprops.type == 'OTHER_OBJECT_CHANNELS': + + # Set emission connection + for j, m in enumerate(ch_other_mats[idx]): + alpha_default = ch_other_alpha_defaults[idx][j] + alpha_socket = ch_other_alpha_sockets[idx][j] + + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: continue + + if alpha_default != 1.0: + alpha_found = True + # Set alpha_default + if type(alpha_default) == float: + temp_emi.inputs[0].default_value = (alpha_default, alpha_default, alpha_default, 1.0) + else: temp_emi.inputs[0].default_value = (alpha_default[0], alpha_default[1], alpha_default[2], 1.0) + + # Break link + for l in temp_emi.inputs[0].links: + m.node_tree.links.remove(l) + elif alpha_socket: + alpha_found = True + m.node_tree.links.new(alpha_socket, temp_emi.inputs[0]) + else: + alpha_found = True + + if alpha_found: + + temp_img = image.copy() + temp_img.colorspace_settings.name = get_noncolor_name() + tex.image = temp_img + + # Set temp filepath + if image.source == 'TILED': + temp_img.name = '__TEMP__' + UDIM.initial_pack_udim(temp_img) + + # Need to use clear so there's alpha on the baked image + scene.render.bake.use_clear = True + + # Bake emit can will create alpha image + bpy.ops.object.bake(type='EMIT') + + # Set tile pixels + for tilenum in tilenums: + + # Swap tile + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + UDIM.swap_tile(temp_img, 1001, tilenum) + + # Copy alpha to RGB channel, so it can be fxaa-ed + if bprops.type == 'OTHER_OBJECT_NORMAL': + copy_image_channel_pixels(temp_img, temp_img, 3, 0) + + # FXAA alpha + fxaa_image(temp_img, False, bprops.bake_device, first_tile_only=True) + + # Copy alpha to actual image + copy_image_channel_pixels(temp_img, image, 0, 3) + + # Swap tile again to recover + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + UDIM.swap_tile(temp_img, 1001, tilenum) + + # Remove temp image + remove_datablock(bpy.data.images, temp_img, user=tex, user_prop='image') + + # Back to original size if using SSA + if use_ssaa: + image, temp_segment = resize_image( + image, bprops.width, bprops.height, image.colorspace_settings.name, + alpha_aware=True, bake_device=bprops.bake_device + ) + + # Denoise AO image + if use_denoise: + image = denoise_image(image) + + new_segment_created = False + + if bprops.use_image_atlas: + + need_to_create_new_segment = False + if segment: + ia_image = segment.id_data + if bprops.use_udim: + need_to_create_new_segment = ia_image.is_float != bprops.hdr + if need_to_create_new_segment: + UDIM.remove_udim_atlas_segment_by_name(ia_image, segment.name, yp) + else: + need_to_create_new_segment = bprops.width != segment.width or bprops.height != segment.height or ia_image.is_float != bprops.hdr + if need_to_create_new_segment: + segment.unused = True + + if not segment or need_to_create_new_segment: + + if bprops.use_udim: + segment = UDIM.get_set_udim_atlas_segment( + tilenums, color=(0, 0, 0, 0), colorspace=get_srgb_name(), hdr=bprops.hdr, yp=yp + ) + else: + # Clearing unused image atlas segments + img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'TRANSPARENT', bprops.width, bprops.height, bprops.hdr) + if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) + + segment = ImageAtlas.get_set_image_atlas_segment( + bprops.width, bprops.height, 'TRANSPARENT', bprops.hdr, yp=yp + ) + + new_segment_created = True + + ia_image = segment.id_data + + # Set baked image to segment + if bprops.use_udim: + offset = get_udim_segment_mapping_offset(segment) * 10 + copy_dict = {} + for tilenum in tilenums: + copy_dict[tilenum] = tilenum + offset + UDIM.copy_tiles(image, ia_image, copy_dict) + else: copy_image_pixels(image, ia_image, segment) + temp_img = image + image = ia_image + + # Remove original baked image + remove_datablock(bpy.data.images, temp_img) + + # Index 0 is the main image + if idx == min(ch_ids): + if do_overwrite: + + # Get overwrite image again to avoid pointer error + overwrite_img = bpy.data.images.get(overwrite_image_name) + + active_id = yp.active_layer_index + + if overwrite_img != image: + if segment and not bprops.use_image_atlas: + entities = ImageAtlas.replace_segment_with_image(yp, segment, image) + segment = None + else: entities = replace_image(overwrite_img, image, yp, bprops.uv_map) + elif segment: entities = ImageAtlas.get_entities_with_specific_segment(yp, segment) + else: entities = get_entities_with_specific_image(yp, image) + + for ent in entities: + if new_segment_created: + ent.segment_name = segment.name + ImageAtlas.set_segment_mapping(ent, segment, image) + + if ent.uv_name != bprops.uv_map: + ent.uv_name = bprops.uv_map + + if bprops.type == 'AO' and ent.type == 'AO': + set_entity_prop_value(ent, 'ao_distance', bprops.ao_distance) + elif bprops.type == 'BEVEL_MASK' and ent.type == 'EDGE_DETECT': + set_entity_prop_value(ent, 'edge_detect_radius', bprops.bevel_radius) + + if bprops.target_type == 'LAYER': + layer_ids = [i for i, l in enumerate(yp.layers) if l in entities] + if entities and yp.active_layer_index not in layer_ids: + active_id = layer_ids[0] + + # Refresh uv + refresh_temp_uv(bpy.context.object, yp.layers[active_id]) + + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(yp.layers[active_id]) + + elif bprops.target_type == 'MASK': + masks = [] + for l in yp.layers: + masks.extend([m for m in l.masks if m in entities]) + if masks: + masks[0].active_edit = True + + # Refresh uv + refresh_temp_uv(bpy.context.object, masks[0]) + + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(masks[0]) + + elif bprops.target_type == 'LAYER': + + layer_name = image.name if not bprops.use_image_atlas else bprops.name + + if bprops.use_image_atlas: + layer_name = get_unique_name(layer_name, yp.layers) + + yp.halt_update = True + layer = Layer.add_new_layer( + group_tree=node.node_tree, layer_name=layer_name, + layer_type='IMAGE', channel_idx=channel_idx, + blend_type=bprops.blend_type, normal_blend_type=bprops.normal_blend_type, + normal_map_type=bprops['normal_map_type'], texcoord_type='UV', + uv_name=bprops.uv_map, image=image, vcol=None, segment=segment, + interpolation = bprops.interpolation, + normal_space = 'OBJECT' if bprops.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' + ) + yp.halt_update = False + active_id = yp.active_layer_index + + if segment: + ImageAtlas.set_segment_mapping(layer, segment, image) + + # Refresh uv + refresh_temp_uv(bpy.context.object, layer) + + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(layer) + + + else: + active_layer = yp.layers[yp.active_layer_index] + + mask_name = image.name if not bprops.use_image_atlas else bprops.name + + if bprops.use_image_atlas: + mask_name = get_unique_name(mask_name, active_layer.masks) + + mask = Mask.add_new_mask( + active_layer, mask_name, 'IMAGE', 'UV', bprops.uv_map, + image, None, segment + ) + mask.active_edit = True + + reconnect_layer_nodes(active_layer) + rearrange_layer_nodes(active_layer) + + active_id = yp.active_layer_index + + if segment: + ImageAtlas.set_segment_mapping(mask, segment, image) + + # Refresh uv + refresh_temp_uv(bpy.context.object, mask) + + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(mask) + + # Indices > 0 are for channel override images + else: + # Set images to channel override + layer = yp.layers[yp.active_layer_index] + root_ch = yp.channels[idx] + ch = layer.channels[idx] + if not ch.enable: ch.enable = True + + # Normal channel will use second override + if root_ch.type == 'NORMAL': + if ch.normal_map_type != 'NORMAL_MAP': ch.normal_map_type = 'NORMAL_MAP' + if not ch.override_1: ch.override_1 = True + if ch.override_1_type != 'IMAGE': ch.override_1_type = 'IMAGE' + source = get_channel_source_1(ch, layer) + else: + if not ch.override: ch.override = True + if ch.override_type != 'IMAGE': ch.override_type = 'IMAGE' + source = get_channel_source(ch, layer) + + # If image already exists on source + old_image = None + if source.image and image != source.image: + old_image = source.image + source_name = old_image.name + current_name = image.name + + old_image.name = '_____temp' + image.name = source_name + old_image.name = current_name + + # Set image to source + source.image = image + source.interpolation = bprops.interpolation + + # Remove image if it's not used anymore + if old_image: safe_remove_image(old_image) + + # Set bake info to image/segment + bi = segment.bake_info if segment else image.y_bake_info + + if not bi.is_baked: bi.is_baked = True + if bi.bake_type != bprops.type: bi.bake_type = bprops.type + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: setattr(bi, attr, bprops[attr]) + except: pass + + if other_objs: + + # Remember other objects to bake info + for o in other_objs: + if is_bl_newer_than(2, 79): + oo_recorded = any([oo for oo in bi.other_objects if oo.object == o]) + else: oo_recorded = any([oo for oo in bi.other_objects if oo.object_name == o.name]) + + if not oo_recorded: + oo = bi.other_objects.add() + if is_bl_newer_than(2, 79): + oo.object = o + oo.object_name = o.name + + # Remove unused other objects on bake info + for i, oo in reversed(list(enumerate(bi.other_objects))): + if is_bl_newer_than(2, 79): + ooo = oo.object + else: ooo = bpy.data.objects.get(oo.object_name) + + if ooo not in other_objs: + bi.other_objects.remove(i) + + if bprops.type == 'SELECTED_VERTICES': + #fill_mode = 'FACE' + #obj_vertex_indices = {} + bi.selected_face_mode = True if fill_mode == 'FACE' else False + + # Clear selected objects first + bi.selected_objects.clear() + + # Collect object to bake info + for obj_name, v_indices in obj_vertex_indices.items(): + ob = bpy.data.objects.get(obj_name) + bso = bi.selected_objects.add() + if is_bl_newer_than(2, 79): + bso.object = ob + bso.object_name = ob.name + + # Collect selected vertex data to bake info + for vi in v_indices: + bvi = bso.selected_vertex_indices.add() + bvi.index = vi + + # Recover other yps + if bprops.type == 'OTHER_OBJECT_CHANNELS': + for m in all_other_mats: + # Set back original socket + mout = get_material_output(m) + if mout: + nod = m.node_tree.nodes.get(ori_from_nodes[m.name]) + if nod: + soc = nod.outputs.get(ori_from_sockets[m.name]) + if soc: m.node_tree.links.new(soc, mout.inputs[0]) + + # Remove temp emission + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if temp_emi: m.node_tree.nodes.remove(temp_emi) + + # Recover other objects material settings + recover_other_objs_channels(other_objs, ori_mat_no_nodes) + + # Remove temp bake nodes + simple_remove_node(mat.node_tree, tex) + #simple_remove_node(mat.node_tree, srgb2lin) + simple_remove_node(mat.node_tree, bsdf) + if src: simple_remove_node(mat.node_tree, src) + if normal_bake: simple_remove_node(mat.node_tree, normal_bake) + if geometry: simple_remove_node(mat.node_tree, geometry) + if vector_math: simple_remove_node(mat.node_tree, vector_math) + if vector_math_1: simple_remove_node(mat.node_tree, vector_math_1) + + # Recover original bsdf + mat.node_tree.links.new(ori_bsdf, output.inputs[0]) + + for ob in objs: + # Recover modifiers + for i, m in enumerate(ob.modifiers): + #print(ob.name, i) + if i >= len(ori_mods[ob.name]): break + if ori_mods[ob.name][i] != m.show_render: + m.show_render = ori_mods[ob.name][i] + if i >= len(ori_viewport_mods[ob.name]): break + if ori_viewport_mods[ob.name][i] != m.show_render: + m.show_viewport = ori_viewport_mods[ob.name][i] + + # Recover multires levels + for m in ob.modifiers: + if m.type == 'MULTIRES' and ob.name in ori_multires_levels: + m.render_levels = ori_multires_levels[ob.name] + break + + # Recover material index + if ori_mat_ids[ob.name]: + for i, p in enumerate(ob.data.polygons): + if ori_mat_ids[ob.name][i] != p.material_index: + p.material_index = ori_mat_ids[ob.name][i] + + if ori_loop_locs[ob.name]: + + # Get uv map + uv_layers = get_uv_layers(ob) + uvl = uv_layers.get(bprops.uv_map) + + # Recover uv locations + if uvl: + for i, p in enumerate(ob.data.polygons): + for j, li in enumerate(p.loop_indices): + uvl.data[li].uv = ori_loop_locs[ob.name][i][j] + + # Delete temp vcol + vcols = get_vertex_colors(ob) + if vcols: + vcol = vcols.get(TEMP_VCOL) + if vcol: vcols.remove(vcol) + + # Recover flip normals setup + if bprops.flip_normals: + #bpy.ops.object.mode_set(mode = 'EDIT') + #bpy.ops.mesh.flip_normals() + #bpy.ops.mesh.select_all(action='DESELECT') + #bpy.ops.object.mode_set(mode = ori_mode) + if is_bl_newer_than(2, 80): + # Deselect other objects first + for o in other_objs: + o.select_set(False) + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') + # Reselect other objects + for o in other_objs: + o.select_set(True) + else: + for ob in objs: + if ob in other_objs: continue + scene.objects.active = ob + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.reveal() + bpy.ops.mesh.select_all(action='SELECT') + bpy.ops.mesh.flip_normals() + bpy.ops.object.mode_set(mode='OBJECT') + + # Recover subdiv setup + if height_root_ch and subdiv_setup_changes: + height_root_ch.enable_subdiv_setup = not height_root_ch.enable_subdiv_setup + + # Remove flow vcols + if bprops.type == 'FLOW': + for ob in objs: + vcols = get_vertex_colors(ob) + flow_vcol = vcols.get(FLOW_VCOL) + if flow_vcol: + vcols.remove(flow_vcol) + + # Recover bake settings + recover_bake_settings(book, yp, mat=mat) + + # Remove temporary objects + if temp_objs: + for o in temp_objs: + remove_mesh_obj(o) + + # Check linear nodes becuse sometimes bake results can be linear or srgb + check_yp_linear_nodes(yp, reconnect=True) + + # Reconnect and rearrange nodes + #reconnect_yp_layer_nodes(node.node_tree) + reconnect_yp_nodes(node.node_tree) + rearrange_yp_nodes(node.node_tree) + + # Refresh mapping and stuff + #yp.active_layer_index = yp.active_layer_index + + if image: print('BAKE TO LAYER: Baking', image.name, 'is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') + else: print('BAKE TO LAYER: No image created! Executed in', '{:0.2f}'.format(time.time() - T), 'seconds!') + + rdict['active_id'] = active_id + rdict['image'] = image + + return rdict + +def put_image_to_image_atlas(yp, image, tilenums=[]): + + if image.source == 'TILED': + segment = UDIM.get_set_udim_atlas_segment( + tilenums, color=(0, 0, 0, 1), colorspace=get_noncolor_name(), hdr=image.is_float, yp=yp + ) + else: + # Clearing unused image atlas segments + img_atlas = ImageAtlas.check_need_of_erasing_segments(yp, 'BLACK', image.size[0], image.size[1], image.is_float) + if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) + + segment = ImageAtlas.get_set_image_atlas_segment( + image.size[0], image.size[1], 'BLACK', image.is_float, yp=yp + ) + + ia_image = segment.id_data + + # Set baked image to segment + if image.source == 'TILED': + offset = get_udim_segment_mapping_offset(segment) * 10 + copy_dict = {} + for tilenum in tilenums: + copy_dict[tilenum] = tilenum + offset + UDIM.copy_tiles(image, ia_image, copy_dict) + else: copy_image_pixels(image, ia_image, segment) + + # Remove original baked image + remove_datablock(bpy.data.images, image) + + return ia_image, segment + +def bake_entity_as_image(entity, bprops, set_image_to_entity=False): + + rdict = {} + rdict['message'] = '' + + yp = entity.id_data.yp + mat = get_active_material() + objs = [bpy.context.object] + if mat.users > 1: + objs, _ = get_bakeable_objects_and_meshes(mat) + + if not objs: + rdict['message'] = "No valid objects found to bake!" + return rdict + + # Get tile numbers + tilenums = [1001] + if bprops.use_udim: + tilenums = UDIM.get_tile_numbers(objs, bprops.uv_map) + + m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) + + ori_use_baked = False + ori_enabled_mods = [] + + #ori_enable_blur = False + modifiers_disabled = False + if m1: + layer = yp.layers[int(m1.group(1))] + mask = None + source_tree = get_source_tree(layer) + elif m2: + layer = yp.layers[int(m2.group(1))] + mask = layer.masks[int(m2.group(2))] + source_tree = get_mask_tree(mask) + + else: + rdict['message'] = "Wrong entity!" + return rdict + + # Disable use baked first + if entity.use_baked: + ori_use_baked = True + entity.use_baked = False + + # Setting image to entity will disable modifiers + if set_image_to_entity: + for mod in entity.modifiers: + if mod.enable: + ori_enabled_mods.append(mod) + mod.enable = False + modifiers_disabled = True + #ori_enable_blur = entity.enable_blur_vector + #entity.enable_blur_vector = False + + # Get existing baked image + existing_image = None + baked_source = source_tree.nodes.get(entity.baked_source) + if baked_source: existing_image = baked_source.image + + # Remember things + book = remember_before_bake(yp) + + # FXAA doesn't work with hdr image + # FXAA also does not works well with baked image with alpha, so other object bake will use SSAA instead + use_fxaa = not bprops.hdr and bprops.fxaa + + # Remember before doing preview + ori_channel_index = yp.active_channel_index + ori_preview_mode = yp.preview_mode + ori_layer_preview_mode = yp.layer_preview_mode + ori_layer_preview_mode_type = yp.layer_preview_mode_type + + ori_layer_intensity_value = 1.0 + changed_layer_channel_index = -1 + ori_layer_channel_intensity_value = 1.0 + ori_layer_channel_blend_type = 'MIX' + ori_layer_channel_override = None + ori_layer_enable_masks = None + + # Make sure layer is enabled + ori_layer_enable = layer.enable + layer.enable = True + layer_opacity = get_entity_prop_value(layer, 'intensity_value') + if layer_opacity != 1.0: + ori_layer_intensity_value = layer_opacity + set_entity_prop_value(layer, 'intensity_value', 1.0) + + # Make sure layer is active one + ori_layer_idx = yp.active_layer_index + layer_idx = get_layer_index(layer) + if yp.active_layer_index != layer_idx: + yp.active_layer_index = layer_idx + + if mask: + # Set up active edit + ori_mask_enable = mask.enable + mask.enable = True + mask.active_edit = True + else: + # Disable masks + ori_layer_enable_masks = layer.enable_masks + if layer.enable_masks: + layer.enable_masks = False + for m in layer.masks: + if m.active_edit: m.active_edit = False + + # Preview setup + yp.layer_preview_mode_type = 'SPECIFIC_MASK' if mask else 'LAYER' + yp.layer_preview_mode = True + + # Set active channel so preview will output right value + for i, ch in enumerate(layer.channels): + if mask: + if ch.enable and mask.channels[i].enable: + yp.active_channel_index = i + break + else: + if ch.enable: + yp.active_channel_index = i + + # Make sure intensity value is 1.0 + intensity_value = get_entity_prop_value(ch, 'intensity_value') + if intensity_value != 1.0: + changed_layer_channel_index = i + ori_layer_channel_intensity_value = intensity_value + set_entity_prop_value(ch, 'intensity_value', 1.0) + + if ch.blend_type != 'MIX': + changed_layer_channel_index = i + ori_layer_channel_blend_type = ch.blend_type + ch.blend_type = 'MIX' + + if ch.override: + changed_layer_channel_index = i + ori_layer_channel_override = True + ch.override = False + + break + + # Modifier setups + ori_mods = {} + ori_viewport_mods = {} + + for obj in objs: + + # Disable few modifiers + ori_mods[obj.name] = [m.show_render for m in obj.modifiers] + ori_viewport_mods[obj.name] = [m.show_viewport for m in obj.modifiers] + + for m in get_problematic_modifiers(obj): + m.show_render = False + + prepare_bake_settings( + book, objs, yp, samples=bprops.samples, margin=bprops.margin, + uv_map=bprops.uv_map, bake_type='EMIT', bake_device=bprops.bake_device, + margin_type = bprops.margin_type + ) + + # Create bake nodes + tex = mat.node_tree.nodes.new('ShaderNodeTexImage') + + if mask: + color = (0, 0, 0, 1) + color_str = 'BLACK' + colorspace = get_noncolor_name() + else: + color = (0, 0, 0, 0) + color_str = 'TRANSPARENT' + colorspace = get_noncolor_name() if bprops.hdr else get_srgb_name() + + # Use existing image colorspace if available + if existing_image: + colorspace = existing_image.colorspace_settings.name + + # Create image + if bprops.use_udim: + image = bpy.data.images.new( + name=bprops.name, width=bprops.width, height=bprops.height, + alpha=True, float_buffer=bprops.hdr, tiled=True + ) + + # Fill tiles + for tilenum in tilenums: + UDIM.fill_tile(image, tilenum, color, bprops.width, bprops.height) + UDIM.initial_pack_udim(image, color) + + # Remember base color + image.yia.color = color_str + else: + image = bpy.data.images.new( + name=bprops.name, width=bprops.width, height=bprops.height, + alpha=True, float_buffer=bprops.hdr + ) + + image.generated_color = color + image.colorspace_settings.name = colorspace + + # Set bake image + tex.image = image + mat.node_tree.nodes.active = tex + + # Bake! + bpy.ops.object.bake() + + if bprops.blur: + samples = 4096 if is_bl_newer_than(3) else 128 + blur_image(image, False, bake_device=bprops.bake_device, factor=bprops.blur_factor, samples=samples) + if bprops.denoise: + denoise_image(image) + if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) + + # Remove temp bake nodes + simple_remove_node(mat.node_tree, tex, remove_data=False) + + # Recover bake settings + recover_bake_settings(book, yp) + + # Recover modifiers + for obj in objs: + # Recover modifiers + for i, m in enumerate(obj.modifiers): + #print(obj.name, i) + if i >= len(ori_mods[obj.name]): break + if ori_mods[obj.name][i] != m.show_render: + m.show_render = ori_mods[obj.name][i] + if i >= len(ori_viewport_mods[obj.name]): break + if ori_viewport_mods[obj.name][i] != m.show_render: + m.show_viewport = ori_viewport_mods[obj.name][i] + + # Recover preview + yp.active_channel_index = ori_channel_index + if yp.preview_mode != ori_preview_mode: + yp.preview_mode = ori_preview_mode + if yp.layer_preview_mode != ori_layer_preview_mode: + yp.layer_preview_mode = ori_layer_preview_mode + if yp.layer_preview_mode_type != ori_layer_preview_mode_type: + yp.layer_preview_mode_type = ori_layer_preview_mode_type + + if changed_layer_channel_index != -1: + ch = layer.channels[changed_layer_channel_index] + + if ori_layer_channel_intensity_value != 1.0: + set_entity_prop_value(ch, 'intensity_value', ori_layer_channel_intensity_value) + + if ori_layer_channel_blend_type != 'MIX': + ch.blend_type = ori_layer_channel_blend_type + + if ori_layer_channel_override != None and ch.override != ori_layer_channel_override: + ch.override = ori_layer_channel_override + + if ori_layer_intensity_value != 1.0: + set_entity_prop_value(layer, 'intensity_value', ori_layer_intensity_value) + + if ori_layer_enable_masks != None and layer.enable_masks != ori_layer_enable_masks: + layer.enable_masks = ori_layer_enable_masks + + if ori_layer_idx != yp.active_layer_index: + yp.active_layer_index = ori_layer_idx + + if ori_layer_enable != layer.enable: + layer.enable = ori_layer_enable + + if mask and ori_mask_enable != mask.enable: + mask.enable = ori_mask_enable + + if modifiers_disabled: + for mod in ori_enabled_mods: + mod.enable = True + + #if ori_enable_blur: + # mask.enable_blur_vector = True + + if ori_use_baked: + entity.use_baked = True + + # Set up image atlas segment + segment = None + if bprops.use_image_atlas: + image, segment = put_image_to_image_atlas(yp, image, tilenums) + + if set_image_to_entity: + + layer_tree = get_tree(layer) + if mask: source_tree = get_mask_tree(mask) + else: source_tree = get_source_tree(layer) + + yp.halt_update = True + + # Set bake info to image/segment + bi = segment.bake_info if segment else image.y_bake_info + + bi.is_baked = True + bi.is_baked_entity = True + bi.baked_entity_type = entity.type + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: setattr(bi, attr, bprops[attr]) + except: pass + + # Set bake type for some types + if entity.type == 'EDGE_DETECT': + bi.bake_type = 'BEVEL_MASK' + bi.bevel_radius = get_entity_prop_value(entity, 'edge_detect_radius') + elif entity.type == 'AO': + source = get_entity_source(entity) + bi.bake_type = 'AO' + bi.ao_distance = get_entity_prop_value(entity, 'ao_distance') + bi.only_local = source.only_local + + # Get baked source + overwrite_image = None + baked_source = source_tree.nodes.get(entity.baked_source) + if baked_source: + overwrite_image = baked_source.image + + # Remove old segment + if entity.baked_segment_name != '': + if overwrite_image.yia.is_image_atlas: + old_segment = overwrite_image.yia.segments.get(entity.baked_segment_name) + old_segment.unused = True + elif overwrite_image.yua.is_udim_atlas: + UDIM.remove_udim_atlas_segment_by_name(overwrite_image, entity.baked_segment_name, yp=yp) + + # Remove baked segment name + entity.baked_segment_name = '' + else: + baked_source = new_node(source_tree, entity, 'baked_source', 'ShaderNodeTexImage', 'Baked Mask Source') + + # Set image to baked node + if overwrite_image and not segment: + replace_image(overwrite_image, image) + else: baked_source.image = image + + height_ch = get_height_channel(layer) + if height_ch and height_ch.enable: + baked_source.interpolation = 'Cubic' + + # Set entity props + entity.baked_uv_name = bprops.uv_map + entity.use_baked = True + + yp.halt_update = False + + if segment: + # Set up baked mapping + mapping = check_new_node(layer_tree, entity, 'baked_mapping', 'ShaderNodeMapping', 'Baked Mapping') + clear_mapping(entity, use_baked=True) + ImageAtlas.set_segment_mapping(entity, segment, image, use_baked=True) + + # Set baked segment name to entity + entity.baked_segment_name = segment.name + else: + remove_node(layer_tree, entity, 'baked_mapping') + + # Refresh uv + refresh_temp_uv(bpy.context.object, entity) + + # Refresh Neighbor UV resolution + set_uv_neighbor_resolution(entity) + + # Update global uv + check_uv_nodes(yp) + + # Update layer tree inputs + check_all_layer_channel_io_and_nodes(layer) + check_start_end_root_ch_nodes(yp.id_data) + + rdict['image'] = image + rdict['segment'] = segment + + return rdict + +def rebake_baked_images(yp, specific_layers=[]): + + entities, images, segment_names, segment_name_props = get_yp_entities_images_and_segments(yp, specific_layers=specific_layers) + + for i, image in enumerate(images): + + if image.yia.is_image_atlas: + segment = image.yia.segments.get(segment_names[i]) + elif image.yua.is_udim_atlas: + segment = image.yua.segments.get(segment_names[i]) + else: segment = None + + if ((segment and segment.bake_info.is_baked and not segment.bake_info.is_baked_channel) or + (not segment and image.y_bake_info.is_baked and not image.y_bake_info.is_baked_channel) + ): + + bi = image.y_bake_info if not segment else segment.bake_info + + # Skip outdated bake type + if bi.bake_type == 'SELECTED_VERTICES': + continue + + entity = entities[i][0] + entity_path = entity.path_from_id() + segment_name_prop = segment_name_props[i][0] + + m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity_path) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.channels\[(\d+)\]$', entity_path) + + bake_properties = dotdict() + for attr in dir(bi): + if attr.startswith('__'): continue + if attr.startswith('bl_'): continue + if attr in {'rna_type'}: continue + try: bake_properties[attr] = getattr(bi, attr) + except: pass + + bake_properties.update({ + 'type': bi.bake_type, + 'target_type': 'LAYER' if m1 or m2 else 'MASK', + 'name': image.name, + 'width': image.size[0] if not segment else segment.width, + 'height': image.size[1] if not segment else segment.height, + 'uv_map': entity.uv_name if not entity.use_baked else entity.baked_uv_name + }) + + # 'baked_segment_name' meant the entity is baked as image + if segment_name_prop == 'baked_segment_name': + bake_entity_as_image(entity, bprops=bake_properties, set_image_to_entity=True) + else: bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) + def get_duplicated_mesh_objects(scene, objs, hide_original=False): tt = time.time() print('INFO: Duplicating mesh(es) for baking...') diff --git a/common.py b/common.py index 4ea1ba7c..1c606226 100644 --- a/common.py +++ b/common.py @@ -5415,7 +5415,7 @@ def get_all_objects_with_same_materials(mat, mesh_only=False, uv_name='', select return objs -def get_layer_images(layer, udim_only=False, ondisk_only=False, packed_only=False, udim_atlas_only=False): +def get_layer_images(layer, udim_only=False, ondisk_only=False, packed_only=False, udim_atlas_only=False, baked_only=False): layers = [layer] @@ -5461,6 +5461,8 @@ def get_layer_images(layer, udim_only=False, ondisk_only=False, packed_only=Fals if ondisk_only and (image.packed_file or image.filepath == ''): continue if packed_only and not image.packed_file and image.filepath != '': continue if udim_atlas_only and not image.yua.is_udim_atlas: continue + bi = image.y_bake_info + if baked_only and (not bi.is_baked or bi.is_baked_channel): continue if image not in filtered_images: filtered_images.append(image) @@ -5613,13 +5615,14 @@ def check_yp_entities_images_segments_in_lists(entity, image, segment_name, segm return entities, images, segment_names, segment_name_props -def get_yp_entities_images_and_segments(yp): +def get_yp_entities_images_and_segments(yp, specific_layers=[]): entities = [] images = [] segment_names = [] segment_name_props = [] for layer in yp.layers: + if specific_layers and layer not in specific_layers: continue baked_source = get_layer_source(layer, get_baked=True) if baked_source and baked_source.image: From 745f1c21d6a6ae0912c811c4a454e88df34696f1 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Tue, 15 Apr 2025 02:27:31 +0700 Subject: [PATCH 132/283] Remove unnecessary word --- Layer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Layer.py b/Layer.py index 65d15a89..99ce16e6 100644 --- a/Layer.py +++ b/Layer.py @@ -5213,7 +5213,7 @@ class YPasteLayer(bpy.types.Operator): ) rebake_bakeds : BoolProperty( - name = 'Rebake All Baked Images', + name = 'Rebake Baked Images', description = 'Rebake baked images', default = True ) From 49cc54deca0852c12194cdf48928676366641f5e Mon Sep 17 00:00:00 2001 From: ucupumar Date: Tue, 15 Apr 2025 13:36:59 +0700 Subject: [PATCH 133/283] Fix regression on paste layers --- Layer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Layer.py b/Layer.py index 99ce16e6..d76d4ea8 100644 --- a/Layer.py +++ b/Layer.py @@ -4871,7 +4871,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= img.yia.color, img.is_float, yp=yp) # If using different image atlas per yp, just copy the image (unless specific layer is on) - elif ypup.unique_image_atlas_per_yp and not specific_layer: + elif ypup.unique_image_atlas_per_yp and not specific_layers: if img.name not in copied_image_atlas: copied_image_atlas[img.name] = duplicate_image(img) img_nodes[i].image = copied_image_atlas[img.name] @@ -4907,7 +4907,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= ) # If using different image atlas per yp, just copy the image (unless specific layer is on) - elif not specific_layer: + elif not specific_layers: if img.name not in copied_image_atlas: copied_image_atlas[img.name] = duplicate_image(img) img_nodes[i].image = copied_image_atlas[img.name] From 15948c48754a353a7fc4af973ed1bf5ca3f699ef Mon Sep 17 00:00:00 2001 From: ucupumar Date: Tue, 15 Apr 2025 13:50:23 +0700 Subject: [PATCH 134/283] Use better descriptions --- BakeToLayer.py | 2 +- Layer.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 4a6a87e4..0ef69b5b 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1329,7 +1329,7 @@ def execute(self, context): class YRebakeBakedImages(bpy.types.Operator, BaseBakeOperator): bl_idname = "wm.y_rebake_baked_images" bl_label = "Rebake All Baked Images" - bl_description = "Rebake all of the baked images in all layers" + bl_description = "Rebake all baked images used by all layers and masks" bl_options = {'REGISTER'} @classmethod diff --git a/Layer.py b/Layer.py index d76d4ea8..6d69b075 100644 --- a/Layer.py +++ b/Layer.py @@ -412,8 +412,8 @@ def execute(self, context): class YNewVcolToOverrideChannel(bpy.types.Operator): bl_idname = "wm.y_new_vcol_to_override_channel" - bl_label = "New Vertex Color To Override Channel Layer" - bl_description = "New Vertex Color To Override Channel Layer" + bl_label = "New Vertex Color to Layer Channel Source" + bl_description = "New Vertex Color to custom layer channel source" bl_options = {'UNDO'} name : StringProperty(default='') From 963b56a5401814065eb2bc8d9705c94b39a5d03c Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 16 Apr 2025 01:50:38 +0700 Subject: [PATCH 135/283] Copy-paste layer no longer need the exact same channels list --- Layer.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/Layer.py b/Layer.py index 6d69b075..2a1020d1 100644 --- a/Layer.py +++ b/Layer.py @@ -5318,10 +5318,6 @@ def execute(self, context): matching = False break - if not matching: - self.report({'ERROR'}, "Copied tree has different channel names or orders!") - return {'CANCELLED'} - if wmp.clipboard_layer == '': if len(yp_source.layers) == 0: @@ -5352,6 +5348,14 @@ def execute(self, context): for child in children: relevant_layer_names.append(child.name) + # Disable source layers if channel list is not matching + ori_layer_enables = {} + if not matching: + for lname in relevant_layer_names: + l = yp_source.layers.get(lname) + ori_layer_enables[lname] = l.enable + l.enable = False + # Get parent and index dict parent_dict = get_parent_dict(yp) index_dict = get_index_dict(yp) @@ -5378,8 +5382,44 @@ def execute(self, context): new_layer = yp.layers.add() new_layer.name = get_unique_name(ls.name, yp.layers) + # Copy layer props copy_id_props(ls, new_layer, ['name']) + if not matching: + # Clear out layer channel props + new_layer.channels.clear() + for mask in new_layer.masks: + mask.channels.clear() + + for root_ch in yp.channels: + + # New layer channel + new_ch = new_layer.channels.add() + new_ch.enable = new_layer.type in {'GROUP', 'BACKGROUND'} # Layer channel default is disabled except for group and background + + # Get matching channel on source yp + source_idx = -1 + if root_ch.name in yp_source.channels: + source_idx = get_channel_index(yp_source.channels.get(root_ch.name)) + + # Copy layer channel props + if source_idx != -1: + copy_id_props(ls.channels[source_idx], new_ch) + + for i, mask in enumerate(new_layer.masks): + + # New mask channel + mch = mask.channels.add() + mch.enable = True # Mask channel default is enabled + + # Copy mask channel props + if source_idx != -1: + copy_id_props(ls.masks[i].channels[source_idx], mch) + + # Reenable new layer + if ls.name in ori_layer_enables: + new_layer.enable = ori_layer_enables[ls.name] + # Duplicate groups new_group_node = new_node(tree, new_layer, 'group_node', 'ShaderNodeGroup', new_layer.name) new_group_node.node_tree = get_tree(ls) @@ -5444,6 +5484,11 @@ def execute(self, context): reconnect_yp_nodes(tree) rearrange_yp_nodes(tree) + # Revert original layer channel enables + for lname, lenable in ori_layer_enables.items(): + l = yp_source.layers.get(lname) + if l: l.enable = lenable + # Rebake baked images if self.any_baked and self.rebake_bakeds: pasted_layers = [l for l in yp.layers if l.name in pasted_layer_names] From d1c961e6c5dffc348f2e80c74eeab08c0e221642 Mon Sep 17 00:00:00 2001 From: ahmad rifai Date: Fri, 18 Apr 2025 01:43:59 +0700 Subject: [PATCH 136/283] Copy paste for custom bake target (#256) * setup UI and basic class * add clipboard and copy-paste * add paste as new add paste values * Clean up and make sure pasted bake target has unique name --------- Co-authored-by: Yusuf Umar --- BakeTarget.py | 129 +++++++++++++++++++++++++++++++++++++++++++++++++- Root.py | 2 + ui.py | 23 +++++++++ 3 files changed, 153 insertions(+), 1 deletion(-) diff --git a/BakeTarget.py b/BakeTarget.py index 36a4d484..b2973e1c 100644 --- a/BakeTarget.py +++ b/BakeTarget.py @@ -253,14 +253,141 @@ def execute(self, context): return {'FINISHED'} +class YCopyBakeTarget(bpy.types.Operator): + bl_idname = "wm.y_copy_bake_target" + bl_label = "Copy Bake Target" + bl_description = "Copy Bake Target" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + node = get_active_ypaint_node() + + group_tree = node.node_tree + yp = group_tree.yp + + return context.object and len(yp.bake_targets) > 0 and yp.active_bake_target_index >= 0 + + def execute(self, context): + node = get_active_ypaint_node() + yp = node.node_tree.yp + wmp = context.window_manager.ypprops + + bt = yp.bake_targets[yp.active_bake_target_index] + + wmp.clipboard_bake_target.clear() + cbt = wmp.clipboard_bake_target.add() + + cbt.name = bt.name + cbt.use_float = bt.use_float + cbt.data_type = bt.data_type + + cbt.r.channel_name = bt.r.channel_name + cbt.r.subchannel_index = bt.r.subchannel_index + cbt.r.default_value = bt.r.default_value + cbt.r.normal_type = bt.r.normal_type + cbt.r.invert_value = bt.r.invert_value + + cbt.g.channel_name = bt.g.channel_name + cbt.g.subchannel_index = bt.g.subchannel_index + cbt.g.default_value = bt.g.default_value + cbt.g.normal_type = bt.g.normal_type + cbt.g.invert_value = bt.g.invert_value + + cbt.b.channel_name = bt.b.channel_name + cbt.b.subchannel_index = bt.b.subchannel_index + cbt.b.default_value = bt.b.default_value + cbt.b.normal_type = bt.b.normal_type + cbt.b.invert_value = bt.b.invert_value + + cbt.a.channel_name = bt.a.channel_name + cbt.a.subchannel_index = bt.a.subchannel_index + cbt.a.default_value = bt.a.default_value + cbt.a.normal_type = bt.a.normal_type + cbt.a.invert_value = bt.a.invert_value + + return {'FINISHED'} + +class YPasteBakeTarget(bpy.types.Operator): + bl_idname = "wm.y_paste_bake_target" + bl_label = "Paste Bake Target As New" + bl_description = "Paste Bake Target" + bl_options = {'UNDO'} + + paste_as_new: BoolProperty( + name = 'Paste As New Bake Target', + default = True + ) + + @classmethod + def poll(cls, context): + wmp = context.window_manager.ypprops + node = get_active_ypaint_node() + yp = node.node_tree.yp + + has_clipboard = len(wmp.clipboard_bake_target) > 0 + + return context.object and node and has_clipboard + + def execute(self, context): + node = get_active_ypaint_node() + yp = node.node_tree.yp + wmp = context.window_manager.ypprops + + if not self.paste_as_new and (yp.active_bake_target_index < 0 or yp.active_bake_target_index >= len(yp.bake_targets) or len(yp.bake_targets) == 0): + self.report({'ERROR'}, "Cannot paste values, no bake target selected") + return {'CANCELLED'} + + cbt = wmp.clipboard_bake_target[0] + + if self.paste_as_new: + name = get_unique_name(cbt.name, yp.bake_targets) + bt = yp.bake_targets.add() + bt.name = name + else: + bt = yp.bake_targets[yp.active_bake_target_index] + + bt.use_float = cbt.use_float + bt.data_type = cbt.data_type + + bt.r.channel_name = cbt.r.channel_name + bt.r.subchannel_index = cbt.r.subchannel_index + bt.r.default_value = cbt.r.default_value + bt.r.normal_type = cbt.r.normal_type + bt.r.invert_value = cbt.r.invert_value + + bt.g.channel_name = cbt.g.channel_name + bt.g.subchannel_index = cbt.g.subchannel_index + bt.g.default_value = cbt.g.default_value + bt.g.normal_type = cbt.g.normal_type + bt.g.invert_value = cbt.g.invert_value + + bt.b.channel_name = cbt.b.channel_name + bt.b.subchannel_index = cbt.b.subchannel_index + bt.b.default_value = cbt.b.default_value + bt.b.normal_type = cbt.b.normal_type + bt.b.invert_value = cbt.b.invert_value + + bt.a.channel_name = cbt.a.channel_name + bt.a.subchannel_index = cbt.a.subchannel_index + bt.a.default_value = cbt.a.default_value + bt.a.normal_type = cbt.a.normal_type + bt.a.invert_value = cbt.a.invert_value + + return {'FINISHED'} + def register(): bpy.utils.register_class(YNewBakeTarget) bpy.utils.register_class(YRemoveBakeTarget) bpy.utils.register_class(YBakeTargetChannel) bpy.utils.register_class(YBakeTarget) - + bpy.utils.register_class(YCopyBakeTarget) + bpy.utils.register_class(YPasteBakeTarget) + def unregister(): bpy.utils.unregister_class(YNewBakeTarget) bpy.utils.unregister_class(YRemoveBakeTarget) bpy.utils.unregister_class(YBakeTargetChannel) bpy.utils.unregister_class(YBakeTarget) + bpy.utils.unregister_class(YCopyBakeTarget) + bpy.utils.unregister_class(YPasteBakeTarget) diff --git a/Root.py b/Root.py index 45d7f265..08d93cd6 100644 --- a/Root.py +++ b/Root.py @@ -4089,6 +4089,8 @@ class YPaintWMProps(bpy.types.PropertyGroup): correct_paint_image_name : StringProperty(default='') + clipboard_bake_target : CollectionProperty(type=BakeTarget.YBakeTarget) + class YPaintSceneProps(bpy.types.PropertyGroup): ori_display_device : StringProperty(default='') ori_view_transform : StringProperty(default='') diff --git a/ui.py b/ui.py index daa69840..ddc33499 100644 --- a/ui.py +++ b/ui.py @@ -966,6 +966,8 @@ def draw_bake_targets_ui(context, layout, node): rcol.operator("wm.y_new_bake_target", icon='ZOOMIN', text='') rcol.operator("wm.y_remove_bake_target", icon='ZOOMOUT', text='') + rcol.menu("NODE_MT_y_bake_list_special_menu", text='', icon='DOWNARROW_HLT') + if len(yp.bake_targets) > 0: bt = yp.bake_targets[yp.active_bake_target_index] image_node = nodes.get(bt.image_node) @@ -5442,6 +5444,25 @@ def draw(self, context): #col.prop(ypui, 'disable_auto_temp_uv_update') #col.prop(yp, 'disable_quick_toggle') +class YBakeListSpecialMenu(bpy.types.Menu): + bl_idname = "NODE_MT_y_bake_list_special_menu" + bl_label = "Bake Special Menu" + bl_description = "Bake Special Menu" + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() + + def draw(self, context): + node = get_active_ypaint_node() + + row = self.layout.row() + col = row.column() + + col.operator('wm.y_copy_bake_target', icon='COPYDOWN') + col.operator('wm.y_paste_bake_target', icon='PASTEDOWN').paste_as_new = True + col.operator('wm.y_paste_bake_target', text="Paste Bake Target Values", icon='PASTEDOWN').paste_as_new = False + class YBakeTargetMenu(bpy.types.Menu): bl_idname = "NODE_MT_y_bake_target_menu" bl_description = 'Bake Target Menu' @@ -7745,6 +7766,7 @@ def register(): bpy.utils.register_class(YNewChannelMenu) bpy.utils.register_class(YNewLayerMenu) bpy.utils.register_class(YBakeTargetMenu) + bpy.utils.register_class(YBakeListSpecialMenu) bpy.utils.register_class(YBakedImageMenu) bpy.utils.register_class(YLayerListSpecialMenu) bpy.utils.register_class(YLayerChannelBlendMenu) @@ -7827,6 +7849,7 @@ def unregister(): bpy.utils.unregister_class(YNewChannelMenu) bpy.utils.unregister_class(YNewLayerMenu) bpy.utils.unregister_class(YBakeTargetMenu) + bpy.utils.unregister_class(YBakeListSpecialMenu) bpy.utils.unregister_class(YBakedImageMenu) bpy.utils.unregister_class(YLayerListSpecialMenu) bpy.utils.unregister_class(YLayerChannelBlendMenu) From 1d46ed4a6982f5ed35af28c69bcbb2f8cba151b4 Mon Sep 17 00:00:00 2001 From: ahmad rifai Date: Fri, 18 Apr 2025 22:30:27 +0700 Subject: [PATCH 137/283] Add new layer based on material bsdf connection (#267) * get images from linked node * add recursive image node getter * create new ucupaint node from material * add filename read method * Simplify image checking functions --------- Co-authored-by: Yusuf Umar --- Layer.py | 156 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 124 insertions(+), 32 deletions(-) diff --git a/Layer.py b/Layer.py index 2a1020d1..672988d1 100644 --- a/Layer.py +++ b/Layer.py @@ -2146,8 +2146,8 @@ def is_synonym_in_image_name(self, syname, img_name): # return True return False - - def open_images_to_single_layer(self, context:bpy.context, directory:str, import_list, non_import_images=[]) -> bool: + + def open_images_to_single_layer(self, context:bpy.context, directory:str='', import_list=[], non_import_images=[], channel_image_dict={}) -> bool: T = time.time() @@ -2222,23 +2222,31 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import for image in images: - # One image will only use one channel - if image in valid_images: continue - # DirectX image will be skipped if there's OpenGL image if ch.type == 'NORMAL' and dx_image and gl_image and image == dx_image: continue - # Get filename without extension - if image.filepath != '': - img_name = os.path.splitext(bpy.path.basename(image.filepath))[0].lower() - else: img_name = image.name.lower() + if image in channel_image_dict.values(): + + # Get alias based on channel-image dictionary + for ch_name, img in channel_image_dict.items(): + if img == image: + alias = ch_name.lower() + if syname in ch_name.lower(): + break + + elif image.filepath != '': + # Get alias base on filename without extension + alias = os.path.splitext(bpy.path.basename(image.filepath))[0].lower() + else: + # Get alias base on filename + alias = image.name.lower() # Remove trailing digits and spaces from the filename - img_name = re.sub(r'[\d\s]+$', '', img_name) + alias = re.sub(r'[\d\s]+$', '', alias) # Check if synonym is in image name - if self.is_synonym_in_image_name(syname, img_name): + if self.is_synonym_in_image_name(syname, alias): if (ch.type != 'NORMAL' or (syname in bump_synonyms and not bump_image_found) or # Only proceed if bump image is not yet found @@ -2275,6 +2283,7 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import #if valid_channels and valid_channels[0] layer = None + main_image = None for i, image in enumerate(valid_images): root_ch = valid_channels[i] syname = valid_synonyms[i] @@ -2308,14 +2317,18 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import yp.halt_update = False tree = get_tree(layer) + main_image = image else: ch = layer.channels[ch_idx] ch.enable = True if root_ch.type == 'NORMAL' and (syname in {'normal', 'n'} or 'normal without bump' in image.name.lower()): - image_node, dirty = check_new_node(tree, ch, 'cache_1_image', 'ShaderNodeTexImage', '', True) - image_node.image = image - ch.override_1 = True - ch.override_1_type = 'IMAGE' + if image == main_image: + ch.override_1 = False + else: + image_node, dirty = check_new_node(tree, ch, 'cache_1_image', 'ShaderNodeTexImage', '', True) + image_node.image = image + ch.override_1 = True + ch.override_1_type = 'IMAGE' if (self.normal_map_flip_y and (not gl_image or gl_image != image)) or (dx_image and dx_image == image): ch.image_flip_y = True else: @@ -2327,8 +2340,11 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import if syname == 'glossiness': Modifier.add_new_modifier(ch, 'INVERT') - ch.override = True - ch.override_type = 'IMAGE' + if image == main_image: + ch.override = False + else: + ch.override = True + ch.override_type = 'IMAGE' # Check image projections check_layer_projections(layer) @@ -2349,8 +2365,9 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str, import wm.ypui.expand_channels = True # Expand vector transformation because it's highly likely user want to tweak this - wm.ypui.layer_ui.expand_content = True + wm.ypui.layer_ui.expand_content = False wm.ypui.layer_ui.expand_vector = True + wm.ypui.layer_ui.expand_channels = True print('INFO: Image(s) opened in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') wm.yptimer.time = str(time.time()) @@ -2502,6 +2519,34 @@ def search_for_images(tree): return images +def search_for_image_node(node, channel_name, channel_image_dict={}): + if node.type == 'TEX_IMAGE' and node.image: + #print("add", node.image.name, "to", channel_name) + channel_image_dict[channel_name] = node.image + elif node.type == "BUMP": + for inp in node.inputs: + if inp.is_linked: + # print("input=", inp.name, " linked=",inp.is_linked," type=" ,inp.type) + for link in inp.links: + # print("link=", link.from_node.name, " type=", link.from_node.type) + ch_name = inp.name + if ch_name == "Height": + ch_name = "Bump" + # Skip if already in dictionary + if ch_name in channel_image_dict: + continue + search_for_image_node(link.from_node, ch_name, channel_image_dict) + else: + #print("else node=", node.name, "type=", node.type) + for inp in node.inputs: + if inp.is_linked: + # print("input=", inp.name, " linked=",inp.is_linked," type=" ,inp.type) + for link in inp.links: + # print("link=", link.from_node.name, " type=", link.from_node.type) + search_for_image_node(link.from_node, channel_name, channel_image_dict) + if channel_name in channel_image_dict: + break + class YOpenImagesFromMaterialToLayer(bpy.types.Operator, BaseMultipleImagesLayer): bl_idname = "wm.y_open_images_from_material_to_single_layer" bl_label = "Open Images from Material to single " + get_addon_title() + " Layer" @@ -2512,6 +2557,16 @@ class YOpenImagesFromMaterialToLayer(bpy.types.Operator, BaseMultipleImagesLayer mat_coll : CollectionProperty(type=bpy.types.PropertyGroup) asset_library_path : StringProperty(default='') + read_method : EnumProperty( + name = 'Read Method', + description = '', + items = ( + ('IMAGE_NAMES', 'Read Image Names', 'Read all image names in material'), + ('READ_NODE', 'Read Node Connections', 'Read node connections in material'), + ), + default = 'READ_NODE' + ) + @classmethod def poll(cls, context): #return get_active_ypaint_node() @@ -2558,6 +2613,13 @@ def draw(self, context): if self.asset_library_path == '': row.prop_search(self, "mat_name", self, "mat_coll", text='', icon='MATERIAL_DATA') else: row.label(text=self.mat_name, icon='MATERIAL_DATA') + + row = split_layout(self.layout, 0.325) + row.label(text='Read method:') + + col = row.column() + col.prop(self, 'read_method', text="") + self.draw_operator(context, display_relative_toggle=False) def execute(self, context): @@ -2587,13 +2649,40 @@ def execute(self, context): self.report({'ERROR'}, "Source material cannot be found!") return {'CANCELLED'} - # Check material for images + # Images to be processed images = [] - if mat.node_tree: - images = search_for_images(mat.node_tree) - # Check for yp images + # channel name and their image dictionary + channel_image_dict = {} + + # Get active material output output = get_material_output(mat) + + if self.read_method == 'READ_NODE': + # Search images based on node connections + for inp in output.inputs: + if inp.is_linked and inp.name == "Displacement": + for link in inp.links: + search_for_image_node(link.from_node, "Bump", channel_image_dict) + + bsdf_node = get_closest_bsdf_backward(output) + + for inp in bsdf_node.inputs: + if inp.is_linked: + for link in inp.links: + ch_name = inp.name + if ch_name == "Base Color": + ch_name = "Color" + search_for_image_node(link.from_node, ch_name, channel_image_dict) + + for img in channel_image_dict.values(): + if img not in images: images.append(img) + + elif self.read_method == 'IMAGE_NAMES': + + if mat.node_tree: + images = search_for_images(mat.node_tree) + yp_node = get_closest_yp_node_backward(output) if yp_node: otree = yp_node.node_tree @@ -2604,21 +2693,20 @@ def execute(self, context): baked_normal_overlay = None if root_ch.type == 'NORMAL': baked_disp = otree.nodes.get(root_ch.baked_disp) - if baked_disp and baked_disp.image: + if baked_disp and baked_disp.image and 'Bump' not in channel_image_dict.keys(): images.append(baked_disp.image) + channel_image_dict['Bump'] = baked_disp.image baked_normal_overlay = otree.nodes.get(root_ch.baked_normal_overlay) - if baked_normal_overlay and baked_normal_overlay.image: + if baked_normal_overlay and baked_normal_overlay.image and 'Normal' not in channel_image_dict.keys(): images.append(baked_normal_overlay.image) + channel_image_dict['Normal'] = baked_normal_overlay.image if root_ch.type != 'NORMAL' or not (baked_disp and baked_normal_overlay): baked = otree.nodes.get(root_ch.baked) - if baked and baked.image: + if baked and baked.image and root_ch.name not in channel_image_dict.keys(): images.append(baked.image) - - if not images: - self.report({'ERROR'}, "Couldn't find images inside of the material!") - return {'CANCELLED'} + channel_image_dict[root_ch.name] = baked.image # Check for existing images if the image source is from asset library if from_asset_library: @@ -2650,6 +2738,10 @@ def execute(self, context): # Use filtered images images = filtered_images + if len(images) == 0: + self.report({'ERROR'}, "Couldn't find images inside of the material!") + return {'CANCELLED'} + # Use quick setup if yp node is not found node = get_active_ypaint_node() quick_setup_happen = False @@ -2658,8 +2750,8 @@ def execute(self, context): quick_setup_happen = True failed = False - if not self.open_images_to_single_layer(context, directory='', import_list=[], non_import_images=images): - self.report({'ERROR'}, "Images should have channel name as suffix!") + if not self.open_images_to_single_layer(context, directory='', import_list=[], non_import_images=images, channel_image_dict=channel_image_dict): + self.report({'ERROR'}, "Cannot find valid images!") failed = True # Remove material if it has only fake users @@ -2697,7 +2789,7 @@ def draw(self, context): def execute(self, context): import_list, directory = self.generate_paths() - if not self.open_images_to_single_layer(context, directory, import_list): + if not self.open_images_to_single_layer(context, directory=directory, import_list=import_list): self.report({'ERROR'}, "Images should have channel name as suffix!") return {'CANCELLED'} From 413f2d3ddf294400e7efe999f4a71200073ca791 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 18 Apr 2025 22:35:40 +0700 Subject: [PATCH 138/283] Compatibility for legacy blender --- BakeTarget.py | 2 +- Layer.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BakeTarget.py b/BakeTarget.py index b2973e1c..2a02f158 100644 --- a/BakeTarget.py +++ b/BakeTarget.py @@ -314,7 +314,7 @@ class YPasteBakeTarget(bpy.types.Operator): bl_description = "Paste Bake Target" bl_options = {'UNDO'} - paste_as_new: BoolProperty( + paste_as_new : BoolProperty( name = 'Paste As New Bake Target', default = True ) diff --git a/Layer.py b/Layer.py index 672988d1..a948ed39 100644 --- a/Layer.py +++ b/Layer.py @@ -1,9 +1,9 @@ import bpy, time, re, os, random, numpy from bpy.props import * from bpy_extras.io_utils import ImportHelper -from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem, bake_common +from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem from .common import * -#from .bake_common import * +from .bake_common import * from .node_arrangements import * from .node_connections import * from .subtree import * @@ -5584,7 +5584,7 @@ def execute(self, context): # Rebake baked images if self.any_baked and self.rebake_bakeds: pasted_layers = [l for l in yp.layers if l.name in pasted_layer_names] - bake_common.rebake_baked_images(yp, specific_layers=pasted_layers) + rebake_baked_images(yp, specific_layers=pasted_layers) # Refresh active layer yp.active_layer_index = yp.active_layer_index From e1127bfd58b20ddb8bc2fd2d7d1c17a726333d70 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 19 Apr 2025 16:31:14 +0700 Subject: [PATCH 139/283] Remove the need to enable texture library in user preferences --- preferences.py | 7 ------- textures_lib/ui.py | 6 +++--- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/preferences.py b/preferences.py index 4b3b4909..e85cc72b 100644 --- a/preferences.py +++ b/preferences.py @@ -52,12 +52,6 @@ class YPaintPreferences(AddonPreferences): default = False ) - show_texlib_browser : BoolProperty( - name = 'Show Textures Library Browser (Experimental)', - description = 'Show textures library browser (experimental)', - default = False - ) - use_image_preview : BoolProperty( name = 'Use Image Preview/Thumbnail', description = 'Use image preview or thumbnail on the layers list', @@ -203,7 +197,6 @@ def draw(self, context): if is_udim_supported(): self.layout.prop(self, 'enable_auto_udim_detection') self.layout.prop(self, 'show_experimental') - self.layout.prop(self, 'show_texlib_browser') self.layout.prop(self, 'developer_mode') #self.layout.prop(self, 'parallax_without_baked') diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 03c55980..ea432c4b 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -11,7 +11,7 @@ from .downloader import texture_exist, get_thread, get_thread_id -from ..common import get_user_preferences +from ..common import is_online, is_bl_newer_than class TexLibBrowser(Panel): bl_label = "Texlib Browser" @@ -22,7 +22,7 @@ class TexLibBrowser(Panel): @classmethod def poll(cls, context): - return get_user_preferences().show_texlib_browser + return is_online() and is_bl_newer_than(3) def draw(self, context): layout = self.layout @@ -245,4 +245,4 @@ def register(): def unregister(): for cls in classes: - bpy.utils.unregister_class(cls) \ No newline at end of file + bpy.utils.unregister_class(cls) From 6d38afd914b6c03e0c4129d0531dd0e2bf508c09 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Sat, 19 Apr 2025 21:34:40 +0700 Subject: [PATCH 140/283] Fix regression error on paste bake target operator poll --- BakeTarget.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/BakeTarget.py b/BakeTarget.py index 2a02f158..a205e8c7 100644 --- a/BakeTarget.py +++ b/BakeTarget.py @@ -321,10 +321,9 @@ class YPasteBakeTarget(bpy.types.Operator): @classmethod def poll(cls, context): - wmp = context.window_manager.ypprops node = get_active_ypaint_node() - yp = node.node_tree.yp - + + wmp = context.window_manager.ypprops has_clipboard = len(wmp.clipboard_bake_target) > 0 return context.object and node and has_clipboard From 5bcb9ccc61593a04444f0fcf1d5bda58fc765be7 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 21 Apr 2025 22:44:24 +0700 Subject: [PATCH 141/283] Fix regression: Duplicate blank doesn't work --- Layer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Layer.py b/Layer.py index a948ed39..a0f30311 100644 --- a/Layer.py +++ b/Layer.py @@ -5215,8 +5215,9 @@ def execute(self, context): # Duplicate data of newly created layers created_layers = [l for l in yp.layers if l.name in created_layer_names] duplicate_layer_nodes_and_images( - tree, created_layers, packed_duplicate = self.packed_duplicate, - ondisk_duplicate = self.ondisk_duplicate, + tree, created_layers, packed_duplicate = self.packed_duplicate or self.duplicate_blank, + duplicate_blank = self.duplicate_blank, + ondisk_duplicate = self.ondisk_duplicate or self.duplicate_blank, set_new_decal_position = self.set_new_decal_position ) From 273bc7dc35a76975ee9613ae4da802e52aedbfc0 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 22 Apr 2025 16:49:38 +0700 Subject: [PATCH 142/283] change method of reading texlib --- textures_lib/downloader.py | 10 ++++++++++ textures_lib/properties.py | 2 ++ textures_lib/ui.py | 22 +++++++++++++--------- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/textures_lib/downloader.py b/textures_lib/downloader.py index aae1c800..3896ecc3 100644 --- a/textures_lib/downloader.py +++ b/textures_lib/downloader.py @@ -423,6 +423,16 @@ def texture_exist(context, asset_id:str, attribute:str) -> bool: return False +def find_blend(context, asset_id:str, attribute:str) -> str: + location = os.path.join(get_textures_dir(context), asset_id, attribute) + if os.path.exists(location): + files = os.listdir(location) + for f in files: + if asset_id in f and f.endswith(".blend"): + full_path = os.path.join(location, f) + return full_path + return None + def extract_file(my_file:str) -> bool: dir_name = os.path.dirname(my_file) # new_folder = os.path.basename(my_file).split('.')[0] diff --git a/textures_lib/properties.py b/textures_lib/properties.py index 71ed0640..4aff8f8b 100644 --- a/textures_lib/properties.py +++ b/textures_lib/properties.py @@ -137,6 +137,7 @@ def retrieve_asset_library(context:Context): new_item:MaterialItem = txlib.library_items.add() new_item.name = mat new_item.source_type = "" + new_item.full_path = str(blend_file) nama = mat # split string and remove last index @@ -276,6 +277,7 @@ class MaterialItem(PropertyGroup): asset_id: StringProperty(name="Asset ID") name: StringProperty( name="Name", description="Material name", default="Untitled") source_type: StringProperty( name="Source Type", description="Source type", default="") + full_path: StringProperty( name="Full Path", description="Full path to the asset", default="") # thumb: IntProperty( name="thumbnail", description="", default=0) class DownloadQueue(PropertyGroup): diff --git a/textures_lib/ui.py b/textures_lib/ui.py index ea432c4b..7dd272cb 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -9,7 +9,7 @@ from .operators import TexLibAddToUcupaint, TexLibCancelDownload, TexLibDownload, TexLibRemoveTextureAttribute -from .downloader import texture_exist, get_thread, get_thread_id +from .downloader import texture_exist, get_thread, get_thread_id, find_blend from ..common import is_online, is_bl_newer_than @@ -112,8 +112,6 @@ def draw_search(self, context, texlib:TexLibProps): total_size += t.size ukuran = round(total_size / 1000000,2) - - check_exist:bool = texture_exist(context, mat_id, d) ui_attr = layout.split(factor=0.7) @@ -135,10 +133,16 @@ def draw_search(self, context, texlib:TexLibProps): op.attribute = d op.id = mat_id else: + check_exist:bool = texture_exist(context, mat_id, d) if check_exist: - op:TexLibAddToUcupaint = btn_row.operator("texlib.add_to_ucupaint", icon="ADD") - op.attribute = d - op.id = sel_mat.asset_id + op = btn_row.operator("wm.y_open_images_from_material_to_single_layer", icon="ADD") + blend_path = find_blend(context, mat_id, d) + op.asset_library_path = blend_path + + with bpy.data.libraries.load(str(blend_path), assets_only=True) as (data_from, data_to): + for mat in data_from.materials: + op.mat_name = mat + break op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") op_remove.attribute = d @@ -183,9 +187,9 @@ def draw_library(self, context, texlib:TexLibProps): btns = layout.row() - op:TexLibAddToUcupaint = btns.operator("texlib.add_to_ucupaint", icon="ADD") - op.attribute = attr - op.id = selected.asset_id + op = btns.operator("wm.y_open_images_from_material_to_single_layer", icon="ADD", text="Add to Ucupaint") + op.mat_name = selected.name + op.asset_library_path = selected.full_path remove:TexLibRemoveTextureAttribute = btns.operator("texlib.remove_attribute", icon="REMOVE") remove.attribute = attr From f42888df081f5b12c23a1fbdc659d6a478fa56c4 Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Tue, 22 Apr 2025 17:49:02 +0700 Subject: [PATCH 143/283] add temp displacement node --- textures_lib/create_blend.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index 3cbff2f4..b7a567ab 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -61,6 +61,8 @@ new_material.use_nodes = True bsdf = new_material.node_tree.nodes["Principled BSDF"] +output = [n for n in new_material.node_tree.nodes if n.type == 'OUTPUT_MATERIAL' and n.is_active_output] +if output: output = output[0] for image_path in image_paths: @@ -87,6 +89,10 @@ tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image new_material.node_tree.links.new(bsdf.inputs['Roughness'], tex_image.outputs['Color']) + elif "displacement" in check_name: + tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') + tex_image.image = image + new_material.node_tree.links.new(output.inputs['Displacement'], tex_image.outputs['Color']) else: tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image From 282363d6f781918e00afb7975292ffa1a4f5dcfc Mon Sep 17 00:00:00 2001 From: Ahmad Rifai Date: Wed, 23 Apr 2025 15:26:26 +0700 Subject: [PATCH 144/283] adjust node positions setup normal choice between dx and gl add displacement node and normal map node --- textures_lib/create_blend.py | 66 ++++++++++++++++++++++++++++++++---- textures_lib/ui.py | 11 +++--- 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/textures_lib/create_blend.py b/textures_lib/create_blend.py index b7a567ab..4279115c 100644 --- a/textures_lib/create_blend.py +++ b/textures_lib/create_blend.py @@ -1,4 +1,5 @@ import sys, bpy, os +from mathutils import * argv = sys.argv @@ -64,6 +65,20 @@ output = [n for n in new_material.node_tree.nodes if n.type == 'OUTPUT_MATERIAL' and n.is_active_output] if output: output = output[0] +normal_dx = None +normal_gl = None + +base_pos = Vector((0, 0)) + +base_pos.x = bsdf.location.x - 700 +base_pos.y = bsdf.location.y + +base_pos_extra = Vector((0, 0)) +base_pos_extra.x = bsdf.location.x - 300 +base_pos_extra.y = bsdf.location.y - 300 + +id = arg_dict["id"].lower() + for image_path in image_paths: print("load image: ", image_path) @@ -77,25 +92,63 @@ texture.image = image check_name = base_name.lower() + # remove id from name + if id in check_name: + check_name = check_name.replace(id, "") + + update_loc = True + tex_image = None if "color" in check_name: tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image new_material.node_tree.links.new(bsdf.inputs['Base Color'], tex_image.outputs['Color']) elif "normal" in check_name: + if "dx" in check_name: + normal_dx = image + if "gl" in check_name: + normal_gl = image + update_loc = False + elif "metal" in check_name: tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image - new_material.node_tree.links.new(bsdf.inputs['Normal'], tex_image.outputs['Color']) - elif "roughness" in check_name: + new_material.node_tree.links.new(bsdf.inputs['Metallic'], tex_image.outputs['Color']) + elif "rough" in check_name: tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image new_material.node_tree.links.new(bsdf.inputs['Roughness'], tex_image.outputs['Color']) - elif "displacement" in check_name: + elif "disp" in check_name: tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') tex_image.image = image - new_material.node_tree.links.new(output.inputs['Displacement'], tex_image.outputs['Color']) + + displacement_node = new_material.node_tree.nodes.new('ShaderNodeDisplacement') + new_material.node_tree.links.new(displacement_node.inputs['Height'], tex_image.outputs['Color']) + new_material.node_tree.links.new(output.inputs['Displacement'], displacement_node.outputs['Displacement']) + + displacement_node.location = base_pos_extra + base_pos_extra.y -= 300 else: - tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') - tex_image.image = image + update_loc = False + + # Set location + if tex_image != None and update_loc: + tex_image.location = base_pos + base_pos.y -= 300 + +if normal_gl != None or normal_dx != None: + tex_image = new_material.node_tree.nodes.new('ShaderNodeTexImage') + normal_node = new_material.node_tree.nodes.new('ShaderNodeNormalMap') + + if normal_gl != None: + tex_image.image = normal_gl + new_material.node_tree.links.new(normal_node.inputs['Color'], tex_image.outputs['Color']) + elif normal_dx != None: + tex_image.image = normal_dx + + new_material.node_tree.links.new(normal_node.inputs['Color'], tex_image.outputs['Color']) + new_material.node_tree.links.new(bsdf.inputs['Normal'], normal_node.outputs['Normal']) + + normal_node.location = base_pos_extra + tex_image.location = base_pos new_material.asset_mark() if cat_id: @@ -123,6 +176,5 @@ else: obj.data.materials.append(new_material) - bpy.context.preferences.filepaths.save_version = 0 # Avoid .blend1 bpy.ops.wm.save_mainfile(relative_remap=True) diff --git a/textures_lib/ui.py b/textures_lib/ui.py index 7dd272cb..be2c18ce 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -137,12 +137,13 @@ def draw_search(self, context, texlib:TexLibProps): if check_exist: op = btn_row.operator("wm.y_open_images_from_material_to_single_layer", icon="ADD") blend_path = find_blend(context, mat_id, d) - op.asset_library_path = blend_path + if blend_path: + op.asset_library_path = blend_path - with bpy.data.libraries.load(str(blend_path), assets_only=True) as (data_from, data_to): - for mat in data_from.materials: - op.mat_name = mat - break + with bpy.data.libraries.load(str(blend_path), assets_only=True) as (data_from, data_to): + for mat in data_from.materials: + op.mat_name = mat + break op_remove:TexLibRemoveTextureAttribute = btn_row.operator("texlib.remove_attribute", icon="REMOVE") op_remove.attribute = d From 7cb2d9bc032c69cadb852ebf309b1c0798bb00be Mon Sep 17 00:00:00 2001 From: ucupumar Date: Wed, 23 Apr 2025 17:38:37 +0700 Subject: [PATCH 145/283] Add zero results label --- textures_lib/ui.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/textures_lib/ui.py b/textures_lib/ui.py index be2c18ce..421fe241 100644 --- a/textures_lib/ui.py +++ b/textures_lib/ui.py @@ -14,7 +14,7 @@ from ..common import is_online, is_bl_newer_than class TexLibBrowser(Panel): - bl_label = "Texlib Browser" + bl_label = "Texture Libraries" bl_idname = "TEXLIB_PT_Browser" bl_space_type = "VIEW_3D" bl_region_type = "UI" @@ -75,10 +75,12 @@ def draw_search(self, context, texlib:TexLibProps): # print("list", local_files_mode, ":",sel_index,"/",len(my_list)) # print("list", local_files_mode, ":",texlib.material_index,"/",len(texlib.material_items)," | ", texlib.downloaded_material_index,"/",len(texlib.downloaded_material_items)) - if len(my_list): + if not len(my_list) and texlib.input_search != '' and not searching_dwn.alive: + layout.label(text='No results for \''+texlib.input_search+'\'!', icon='ERROR') + elif len(my_list): - layout.separator() - layout.label(text="Textures:") + #layout.separator() + layout.label(text=str(len(my_list))+" resuts for '"+texlib.input_search+"':") col_lay = layout.row() col_lay.template_list("TEXLIB_UL_Material", "material_list", texlib, "search_items", texlib, "search_index") From 79de688a83445a02352b9f03e1a6d9d17aeb2910 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 10 May 2025 21:40:27 +0700 Subject: [PATCH 146/283] Fix: Bake Bevel Normal sometimes produce wrong result --- BakeToLayer.py | 2 +- bake_common.py | 21 +++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 0ef69b5b..c644c8e7 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -803,7 +803,7 @@ def draw(self, context): col.prop(self, 'ssaa') else: col.prop(self, 'fxaa') - if self.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81): + if self.type in {'AO', 'BEVEL_MASK', 'BEVEL_NORMAL'} and is_bl_newer_than(2, 81): col.prop(self, 'denoise') col.separator() diff --git a/bake_common.py b/bake_common.py index ac97f38d..c4e72882 100644 --- a/bake_common.py +++ b/bake_common.py @@ -2423,7 +2423,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): use_ssaa = bprops.ssaa and bprops.type.startswith('OTHER_OBJECT_') # Denoising only available for AO bake for now - use_denoise = bprops.denoise and bprops.type in {'AO', 'BEVEL_MASK'} and is_bl_newer_than(2, 81) + use_denoise = bprops.denoise and bprops.type in {'AO', 'BEVEL_MASK', 'BEVEL_NORMAL'} and is_bl_newer_than(2, 81) # SSAA will multiply size by 2 then resize it back if use_ssaa: @@ -2556,7 +2556,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): bake_type = 'NORMALS' elif bprops.type == 'MULTIRES_DISPLACEMENT': bake_type = 'DISPLACEMENT' - elif bprops.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: + elif bprops.type in {'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL', 'BEVEL_NORMAL'}: bake_type = 'NORMAL' else: bake_type = 'EMIT' @@ -2584,7 +2584,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): max_ray_distance=bprops.max_ray_distance, cage_extrusion=bprops.cage_extrusion, source_objs=other_objs, use_denoising=False, margin_type=bprops.margin_type, cage_object_name = cage_object_name, - normal_space = 'OBJECT' if bprops.type == 'OBJECT_SPACE_NORMAL' else 'TANGENT' + normal_space = 'TANGENT' if bprops.type != 'OBJECT_SPACE_NORMAL' else 'OBJECT' ) # Set multires level #ori_multires_levels = {} @@ -2746,15 +2746,12 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Create bake nodes tex = mat.node_tree.nodes.new('ShaderNodeTexImage') - bsdf = mat.node_tree.nodes.new('ShaderNodeEmission') - normal_bake = None + bsdf = None geometry = None vector_math = None vector_math_1 = None if bprops.type == 'BEVEL_NORMAL': - #bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') - normal_bake = mat.node_tree.nodes.new('ShaderNodeGroup') - normal_bake.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV) + bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') elif bprops.type == 'BEVEL_MASK': geometry = mat.node_tree.nodes.new('ShaderNodeNewGeometry') vector_math = mat.node_tree.nodes.new('ShaderNodeVectorMath') @@ -2763,6 +2760,9 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): vector_math_1 = mat.node_tree.nodes.new('ShaderNodeVectorMath') vector_math_1.operation = 'LENGTH' + if not bsdf: + bsdf = mat.node_tree.nodes.new('ShaderNodeEmission') + # Get output node and remember original bsdf input output = get_active_mat_output_node(mat.node_tree) ori_bsdf = output.inputs[0].links[0].from_socket @@ -2829,9 +2829,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): src.samples = bprops.bevel_samples src.inputs[0].default_value = bprops.bevel_radius - #mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) - mat.node_tree.links.new(src.outputs[0], normal_bake.inputs[0]) - mat.node_tree.links.new(normal_bake.outputs[0], bsdf.inputs[0]) + mat.node_tree.links.new(src.outputs[0], bsdf.inputs['Normal']) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) elif bprops.type == 'BEVEL_MASK': @@ -3435,7 +3433,6 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): #simple_remove_node(mat.node_tree, srgb2lin) simple_remove_node(mat.node_tree, bsdf) if src: simple_remove_node(mat.node_tree, src) - if normal_bake: simple_remove_node(mat.node_tree, normal_bake) if geometry: simple_remove_node(mat.node_tree, geometry) if vector_math: simple_remove_node(mat.node_tree, vector_math) if vector_math_1: simple_remove_node(mat.node_tree, vector_math_1) From 19e088587597be51464186ff3ed7ded3c3b30292 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 13 May 2025 15:15:37 +0700 Subject: [PATCH 147/283] Make sure to only set one image editor at the time and avoid replacing render result and viewer node image in image editor. --- BakeTarget.py | 1 + Root.py | 40 +++++++++++++++++++++++++------ common.py | 66 ++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 92 insertions(+), 15 deletions(-) diff --git a/BakeTarget.py b/BakeTarget.py index a205e8c7..bf6c7443 100644 --- a/BakeTarget.py +++ b/BakeTarget.py @@ -262,6 +262,7 @@ class YCopyBakeTarget(bpy.types.Operator): @classmethod def poll(cls, context): node = get_active_ypaint_node() + if not node: return False group_tree = node.node_tree yp = group_tree.yp diff --git a/Root.py b/Root.py index 08d93cd6..917ea4d5 100644 --- a/Root.py +++ b/Root.py @@ -4091,6 +4091,8 @@ class YPaintWMProps(bpy.types.PropertyGroup): clipboard_bake_target : CollectionProperty(type=BakeTarget.YBakeTarget) + image_editor_dict : StringProperty(default='') + class YPaintSceneProps(bpy.types.PropertyGroup): ori_display_device : StringProperty(default='') ori_view_transform : StringProperty(default='') @@ -4168,15 +4170,15 @@ def ypaint_last_object_update(scene): mat = obj.active_material ypwm = bpy.context.window_manager.ypprops + node = get_active_ypaint_node() + yp = node.node_tree.yp if node else None if ypwm.last_object != obj.name or (mat and mat.name != ypwm.last_material): ypwm.last_object = obj.name if mat: ypwm.last_material = mat.name - node = get_active_ypaint_node() # Refresh layer index to update editor image - if node: - yp = node.node_tree.yp + if yp: if yp.use_baked and len(yp.channels) > 0: update_active_yp_channel(yp, bpy.context) @@ -4184,12 +4186,21 @@ def ypaint_last_object_update(scene): try: set_active_paint_slot_entity(yp) except: print('EXCEPTIION: Cannot set image canvas!') - if obj.type == 'MESH' and ypwm.last_object == obj.name and ypwm.last_mode != obj.mode: + # HACK: Remember original image editor images before entering texture paint mode + if yp and obj.type == 'MESH' and obj.mode != 'TEXTURE_PAINT': + editor_images = get_editor_images_dict() + ypwm.image_editor_dict = str(editor_images) - node = get_active_ypaint_node() - yp = node.node_tree.yp if node else None + if obj.type == 'MESH' and ypwm.last_object == obj.name and ypwm.last_mode != obj.mode: if obj.mode == 'TEXTURE_PAINT' or ypwm.last_mode == 'TEXTURE_PAINT': + + # HACK: Set original image editor images since going into texture paint mode will replace all of them + if yp and obj.mode == 'TEXTURE_PAINT' and ypwm.image_editor_dict != '': + import ast + editor_images = ast.literal_eval(ypwm.image_editor_dict) + set_editor_images(editor_images) + ypwm.last_mode = obj.mode if yp and len(yp.layers) > 0: image, uv_name, src_of_img, entity, mapping, vcol = get_active_image_and_stuffs(obj, yp) @@ -4209,6 +4220,10 @@ def ypaint_last_object_update(scene): # HACK: Just in case active image is not correct ypwm.correct_paint_image_name = image.name + # Set image editor image + update_image_editor_image(bpy.context, image) + + # Refresh temporary UV refresh_temp_uv(obj, src_of_img) # Into edit mode @@ -4262,8 +4277,19 @@ def ypaint_missmatch_paint_slot_hack(scene): for idx, img in enumerate(mat.texture_paint_images): if img == None: continue if img.name == correct_img.name: - try: mat.paint_active_slot = idx + + # HACK: Remember all original images in all image editors since setting canvas/paint slot will replace all of them + ori_editor_imgs = get_editor_images_dict() + + success = False + try: + mat.paint_active_slot = idx + success = True except: print('EXCEPTIION: Cannot set active paint slot image!') + + # HACK: Revert back to original editor images + if success: set_editor_images(ori_editor_imgs) + break wmyp.correct_paint_image_name = '' diff --git a/common.py b/common.py index 1c606226..a16800b2 100644 --- a/common.py +++ b/common.py @@ -1162,12 +1162,14 @@ def get_edit_image_editor_space(context): def get_first_unpinned_image_editor_space(context, return_index=False): space = None index = -1 - for i, area in enumerate(context.screen.areas): - if area.type == 'IMAGE_EDITOR': - if not area.spaces[0].use_image_pin: - space = area.spaces[0] - index = i - break + for i, window in enumerate(context.window_manager.windows): + for j, area in enumerate(window.screen.areas): + if area.type == 'IMAGE_EDITOR': + img = area.spaces[0].image + if not area.spaces[0].use_image_pin and (not img or img.type not in {'RENDER_RESULT', 'COMPOSITING'}): + space = area.spaces[0] + index = j + break if return_index: return space, index @@ -1191,11 +1193,25 @@ def get_active_paint_slot_image(): return image +def safely_set_image_paint_canvas(image, scene=None): + if not scene: scene = bpy.context.scene + + # HACK: Remember all original images in all image editors since setting canvas/paint slot will replace all of them + ori_editor_imgs = get_editor_images_dict() + + try: + scene.tool_settings.image_paint.canvas = image + success = True + except Exception as e: print(e) + + # HACK: Revert back to original editor images + if success: set_editor_images(ori_editor_imgs) + def set_image_paint_canvas(image): scene = bpy.context.scene try: scene.tool_settings.image_paint.mode = 'IMAGE' - scene.tool_settings.image_paint.canvas = image + safely_set_image_paint_canvas(image, scene) except Exception as e: print(e) # Check if name already available on the list @@ -1367,7 +1383,7 @@ def safe_remove_image(image, remove_on_disk=False, user=None, user_prop=''): # Remove image from canvas if scene.tool_settings.image_paint.canvas == image: - scene.tool_settings.image_paint.canvas = None + safely_set_image_paint_canvas(None, scene) if remove_on_disk and not image.packed_file and image.filepath != '': if image.source == 'TILED': @@ -4726,6 +4742,33 @@ def get_relevant_uv(obj, yp): return uv_name +def get_editor_images_dict(): + editor_images = {} + + for i, window in enumerate(bpy.context.window_manager.windows): + screen_dict = {} + for j, area in enumerate(window.screen.areas): + if area.type == 'IMAGE_EDITOR': + space = area.spaces[0] + img = space.image + if img: screen_dict[j] = img.name + else: screen_dict[j] = '' + editor_images[i] = screen_dict + + return editor_images + +def set_editor_images(editor_images={}): + for i, window in enumerate(bpy.context.window_manager.windows): + if i in editor_images: + screen_dict = editor_images[i] + for j, area in enumerate(window.screen.areas): + if area.type == 'IMAGE_EDITOR': + if j in screen_dict: + space = area.spaces[0] + img = bpy.data.images.get(screen_dict[j]) + if space.image != img: + space.image = img + def set_active_paint_slot_entity(yp): image = None mat = get_active_material() @@ -4856,6 +4899,10 @@ def set_active_paint_slot_entity(yp): image = source.image + + # HACK: Remember all original images in all image editors since setting canvas/paint slot will replace all of them + ori_editor_imgs = get_editor_images_dict() + if not is_multiple_mats and image and is_bl_newer_than(2, 81): scene.tool_settings.image_paint.mode = 'MATERIAL' @@ -4872,6 +4919,9 @@ def set_active_paint_slot_entity(yp): scene.tool_settings.image_paint.mode = 'IMAGE' scene.tool_settings.image_paint.canvas = image + # HACK: Revert back to original editor images + set_editor_images(ori_editor_imgs) + update_image_editor_image(bpy.context, image) def get_active_image_and_stuffs(obj, yp): From 6a2b8dc20810cc224acf0194e5d6298b16231b72 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 13 May 2025 20:45:40 +0700 Subject: [PATCH 148/283] Fix: Baking normal produce black result due to `Out of SVM stack` issue. Using native normal baking from blender sometimes can fix this. --- bake_common.py | 73 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/bake_common.py b/bake_common.py index c4e72882..89f239e5 100644 --- a/bake_common.py +++ b/bake_common.py @@ -127,16 +127,20 @@ def is_join_objects_problematic(yp, mat=None): return False -def bake_object_op(): +def bake_object_op(bake_type='EMIT'): try: - bpy.ops.object.bake() + if bake_type != 'EMIT': + bpy.ops.object.bake(type=bake_type) + else: bpy.ops.object.bake() except Exception as e: scene = bpy.context.scene if scene.cycles.device == 'GPU': print('EXCEPTIION: GPU baking failed! Trying to use CPU...') scene.cycles.device = 'CPU' - bpy.ops.object.bake() + if bake_type != 'EMIT': + bpy.ops.object.bake(type=bake_type) + else: bpy.ops.object.bake() else: print('EXCEPTIION:', e) @@ -1529,6 +1533,7 @@ def bake_channel( tree = node.node_tree yp = tree.yp ypup = get_user_preferences() + scene = bpy.context.scene channel_idx = get_channel_index(root_ch) @@ -1543,12 +1548,12 @@ def bake_channel( for lay in yp.layers: if lay.type in {'HEMI'} and not lay.use_temp_bake: print('BAKE CHANNEL: Fake lighting layer found! Baking temporary image of ' + lay.name + ' layer...') - temp_bake(bpy.context, lay, width, height, True, 1, bpy.context.scene.render.bake.margin, uv_map) + temp_bake(bpy.context, lay, width, height, True, 1, scene.render.bake.margin, uv_map) temp_baked.append(lay) for mask in lay.masks: if mask.type in {'HEMI'} and not mask.use_temp_bake: print('BAKE CHANNEL: Fake lighting mask found! Baking temporary image of ' + mask.name + ' mask...') - temp_bake(bpy.context, mask, width, height, True, 1, bpy.context.scene.render.bake.margin, uv_map) + temp_bake(bpy.context, mask, width, height, True, 1, scene.render.bake.margin, uv_map) temp_baked.append(mask) ch = None @@ -1589,12 +1594,9 @@ def bake_channel( tex = mat.node_tree.nodes.new('ShaderNodeTexImage') emit = mat.node_tree.nodes.new('ShaderNodeEmission') + bsdf = None if root_ch.type == 'NORMAL': - - norm = mat.node_tree.nodes.new('ShaderNodeGroup') - if is_bl_newer_than(2, 80) and not is_bl_newer_than(3): - norm.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV) - else: norm.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV_300) + bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') # Set tex as active node mat.node_tree.nodes.active = tex @@ -1765,17 +1767,37 @@ def bake_channel( # Links to bake rgb = node.outputs[root_ch.name] + + # Use diffuse bsdf for baking normal if root_ch.type == 'NORMAL': - rgb = create_link(mat.node_tree, rgb, norm.inputs[0])[0] - #elif root_ch.colorspace != 'LINEAR' and target_layer: - #elif target_layer: - #rgb = create_link(mat.node_tree, rgb, lin2srgb.inputs[0])[0] + ori_normal_space = scene.render.bake.normal_space + scene.cycles.bake_type = 'NORMAL' + scene.render.bake.normal_space = 'TANGENT' + + # Connect bsdf node to output + mat.node_tree.links.new(rgb, bsdf.inputs['Normal']) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + # HACK: Sometimes the bsdf node need color socket to be also connected + for rch in yp.channels: + if rch.type == 'RGB': + soc = node.outputs.get(rch.name) + if soc: + mat.node_tree.links.new(soc, bsdf.inputs[0]) + break - mat.node_tree.links.new(rgb, emit.inputs[0]) + else: + mat.node_tree.links.new(rgb, emit.inputs[0]) # Bake! print('BAKE CHANNEL: Baking main image of ' + root_ch.name + ' channel...') - bake_object_op() + bake_object_op(scene.cycles.bake_type) + + # Revert back the original bake settings + if root_ch.type == 'NORMAL': + scene.cycles.bake_type = 'EMIT' + scene.render.bake.normal_space = ori_normal_space + mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) # Bake displacement if root_ch.type == 'NORMAL': @@ -1848,11 +1870,19 @@ def bake_channel( create_link(tree, soc, end.inputs[root_ch.name]) #create_link(mat.node_tree, node.outputs[root_ch.name], emit.inputs[0]) + # Preparing for normal baking + scene.cycles.bake_type = 'NORMAL' + scene.render.bake.normal_space = 'TANGENT' + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + # Bake - print('BAKE CHANNEL: Baking normal overlay image of ' + root_ch.name + ' channel...') - bake_object_op() + print('BAKE CHANNEL: Baking normal without bump image of ' + root_ch.name + ' channel...') + bake_object_op(scene.cycles.bake_type) - #return + # Recover normal baking related + scene.cycles.bake_type = 'EMIT' + scene.render.bake.normal_space = ori_normal_space + mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) # Recover connection if end_linear: @@ -2143,10 +2173,7 @@ def bake_channel( simple_remove_node(mat.node_tree, tex, remove_data = tex.image != img) simple_remove_node(mat.node_tree, emit) - #simple_remove_node(mat.node_tree, lin2srgb) - #simple_remove_node(mat.node_tree, srgb2lin) - if root_ch.type == 'NORMAL': - simple_remove_node(mat.node_tree, norm) + if bsdf: simple_remove_node(mat.node_tree, bsdf) # Recover original bsdf mat.node_tree.links.new(ori_bsdf, output.inputs[0]) From 3006cad0d86f65680268ab511e222a1c024c3d30 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 13 May 2025 21:35:35 +0700 Subject: [PATCH 149/283] Add OSL option for baking channel, it has better compatibility for baking than standard cycles. --- Bake.py | 14 ++++++++++++-- BakeInfo.py | 6 ++++++ bake_common.py | 7 +++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Bake.py b/Bake.py index 27025166..b4a136a6 100644 --- a/Bake.py +++ b/Bake.py @@ -1284,6 +1284,12 @@ class YBakeChannels(bpy.types.Operator, BaseBakeOperator): default = False ) + use_osl : BoolProperty( + name = 'Use OSL', + description = 'Use Open Shading Language (slower but can handle more complex layer setup)', + default = False + ) + use_dithering : BoolProperty( name = 'Use Dithering', description = 'Use dithering for less banding color', @@ -1463,7 +1469,9 @@ def draw(self, context): col.separator() if is_bl_newer_than(2, 80): - col.prop(self, 'bake_device', text='') + if self.use_osl: + col.label(text='CPU (OSL)') + else: col.prop(self, 'bake_device', text='') col.prop(self, 'interpolation', text='') col.prop_search(self, "uv_map", self, "uv_map_coll", text='', icon='GROUP_UVS') @@ -1494,6 +1502,8 @@ def draw(self, context): row.prop(self, 'use_dithering', text='Use Dithering') row.prop(self, 'dither_intensity', text='') + ccol.prop(self, 'use_osl') + ccol.prop(self, 'force_bake_all_polygons') ccol.prop(self, 'bake_disabled_layers') @@ -1631,7 +1641,7 @@ def execute(self, context): # Prepare bake settings prepare_bake_settings( book, objs, yp, self.samples, margin, self.uv_map, disable_problematic_modifiers=True, - bake_device=self.bake_device, margin_type=self.margin_type + bake_device=self.bake_device, margin_type=self.margin_type, use_osl=self.use_osl ) # Get tilenums diff --git a/BakeInfo.py b/BakeInfo.py index 1b594374..b49d5bcd 100644 --- a/BakeInfo.py +++ b/BakeInfo.py @@ -177,6 +177,12 @@ class YBakeInfoProps(bpy.types.PropertyGroup): default = False ) + use_osl : BoolProperty( + name = 'Use OSL', + description = 'Use Open Shading Language (slower but can handle more complex layer setup)', + default = False + ) + use_dithering : BoolProperty( name = 'Use Dithering', description = 'Use dithering for less banding color', diff --git a/bake_common.py b/bake_common.py index 89f239e5..6bb26af7 100644 --- a/bake_common.py +++ b/bake_common.py @@ -156,6 +156,7 @@ def remember_before_bake(yp=None, mat=None): book['ori_engine'] = scene.render.engine book['ori_bake_type'] = scene.cycles.bake_type book['ori_samples'] = scene.cycles.samples + book['ori_use_osl'] = scene.cycles.shading_system book['ori_threads_mode'] = scene.render.threads_mode book['ori_margin'] = scene.render.bake.margin book['ori_use_clear'] = scene.render.bake.use_clear @@ -447,7 +448,7 @@ def prepare_bake_settings( tile_x=64, tile_y=64, use_selected_to_active=False, max_ray_distance=0.0, cage_extrusion=0.0, bake_target = 'IMAGE_TEXTURES', source_objs=[], bake_device='CPU', use_denoising=False, margin_type='ADJACENT_FACES', cage_object_name='', - normal_space='TANGENT', + normal_space='TANGENT', use_osl=False, ): scene = bpy.context.scene @@ -455,6 +456,7 @@ def prepare_bake_settings( scene.render.engine = 'CYCLES' scene.cycles.samples = samples + scene.cycles.shading_system = use_osl scene.render.threads_mode = 'AUTO' scene.render.bake.margin = margin #scene.render.bake.use_clear = True @@ -502,7 +504,7 @@ def prepare_bake_settings( scene.cycles.bake_type = bake_type # Old blender will always use CPU - if not is_bl_newer_than(2, 80): + if not is_bl_newer_than(2, 80) or use_osl: scene.cycles.device = 'CPU' else: scene.cycles.device = bake_device @@ -672,6 +674,7 @@ def recover_bake_settings(book, yp=None, recover_active_uv=False, mat=None): scene.render.engine = book['ori_engine'] scene.cycles.samples = book['ori_samples'] + scene.cycles.shading_system = book['ori_use_osl'] scene.cycles.bake_type = book['ori_bake_type'] scene.render.threads_mode = book['ori_threads_mode'] scene.render.bake.margin = book['ori_margin'] From 8da85d7a882865835d2dab0c35e48de4dd503228 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 14 May 2025 00:17:44 +0700 Subject: [PATCH 150/283] Fix regression on legacy blender normal channel baking --- bake_common.py | 63 +++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/bake_common.py b/bake_common.py index 6bb26af7..de68c8ea 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1597,9 +1597,17 @@ def bake_channel( tex = mat.node_tree.nodes.new('ShaderNodeTexImage') emit = mat.node_tree.nodes.new('ShaderNodeEmission') + # Normal baking need special node setup bsdf = None + norm = None if root_ch.type == 'NORMAL': - bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') + if is_bl_newer_than(2, 80): + # Use diffuse bsdf for Blender 2.80+ + bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') + else: + # Use custom normal calculation for legacy blender + norm = mat.node_tree.nodes.new('ShaderNodeGroup') + norm.node_tree = get_node_tree_lib(lib.BAKE_NORMAL_ACTIVE_UV_300) # Set tex as active node mat.node_tree.nodes.active = tex @@ -1771,24 +1779,28 @@ def bake_channel( # Links to bake rgb = node.outputs[root_ch.name] - # Use diffuse bsdf for baking normal if root_ch.type == 'NORMAL': - ori_normal_space = scene.render.bake.normal_space - scene.cycles.bake_type = 'NORMAL' - scene.render.bake.normal_space = 'TANGENT' - - # Connect bsdf node to output - mat.node_tree.links.new(rgb, bsdf.inputs['Normal']) - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) - - # HACK: Sometimes the bsdf node need color socket to be also connected - for rch in yp.channels: - if rch.type == 'RGB': - soc = node.outputs.get(rch.name) - if soc: - mat.node_tree.links.new(soc, bsdf.inputs[0]) - break + if norm: + # Custom normal calculation setup + rgb = create_link(mat.node_tree, rgb, norm.inputs[0])[0] + mat.node_tree.links.new(rgb, emit.inputs[0]) + elif bsdf: + # Baking normal from diffuse bsdf + ori_normal_space = scene.render.bake.normal_space + scene.cycles.bake_type = 'NORMAL' + scene.render.bake.normal_space = 'TANGENT' + # Connect bsdf node to output + mat.node_tree.links.new(rgb, bsdf.inputs['Normal']) + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + + # HACK: Sometimes the bsdf node need color socket to be also connected + for rch in yp.channels: + if rch.type == 'RGB': + soc = node.outputs.get(rch.name) + if soc: + mat.node_tree.links.new(soc, bsdf.inputs[0]) + break else: mat.node_tree.links.new(rgb, emit.inputs[0]) @@ -1797,7 +1809,7 @@ def bake_channel( bake_object_op(scene.cycles.bake_type) # Revert back the original bake settings - if root_ch.type == 'NORMAL': + if root_ch.type == 'NORMAL' and bsdf: scene.cycles.bake_type = 'EMIT' scene.render.bake.normal_space = ori_normal_space mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) @@ -1874,18 +1886,20 @@ def bake_channel( #create_link(mat.node_tree, node.outputs[root_ch.name], emit.inputs[0]) # Preparing for normal baking - scene.cycles.bake_type = 'NORMAL' - scene.render.bake.normal_space = 'TANGENT' - mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) + if bsdf: + scene.cycles.bake_type = 'NORMAL' + scene.render.bake.normal_space = 'TANGENT' + mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) # Bake print('BAKE CHANNEL: Baking normal without bump image of ' + root_ch.name + ' channel...') bake_object_op(scene.cycles.bake_type) # Recover normal baking related - scene.cycles.bake_type = 'EMIT' - scene.render.bake.normal_space = ori_normal_space - mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) + if bsdf: + scene.cycles.bake_type = 'EMIT' + scene.render.bake.normal_space = ori_normal_space + mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) # Recover connection if end_linear: @@ -2177,6 +2191,7 @@ def bake_channel( simple_remove_node(mat.node_tree, tex, remove_data = tex.image != img) simple_remove_node(mat.node_tree, emit) if bsdf: simple_remove_node(mat.node_tree, bsdf) + if norm: simple_remove_node(mat.node_tree, norm) # Recover original bsdf mat.node_tree.links.new(ori_bsdf, output.inputs[0]) From a09a08d9ad901055d29db135a1a96cff3bafb2e4 Mon Sep 17 00:00:00 2001 From: Robert <92628251+Robert694@users.noreply.github.com> Date: Wed, 14 May 2025 13:18:28 -0400 Subject: [PATCH 151/283] Refactor decal empty duplication and update driver targets (#271) * Only duplicate empty once for shared decal references * Added driver copying support to decal duplication * Refactor decal empty duplication into reusable function --- Layer.py | 66 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/Layer.py b/Layer.py index a0f30311..6c16a93a 100644 --- a/Layer.py +++ b/Layer.py @@ -4691,6 +4691,45 @@ def execute(self, context): return {'FINISHED'} +def update_driver_targets(obj, target_map): + # Update driver target object references based on a given object map. + for fcurve in obj.animation_data.drivers if obj.animation_data else []: + for var in fcurve.driver.variables: + for target in var.targets: + if target.id in target_map: + target.id = target_map[target.id] + +def duplicate_decal_empty_reference(texcoord_name, ttree, set_new_decal_position, duplicated_empties): + texcoord = ttree.nodes.get(texcoord_name) + if not texcoord or not hasattr(texcoord, 'object') or not texcoord.object: + return + + original_empty = texcoord.object + + if set_new_decal_position: + texcoord.object = create_decal_empty() + else: + if original_empty in duplicated_empties: + new_empty = duplicated_empties[original_empty] + else: + nname = get_unique_name(original_empty.name, bpy.data.objects) + custom_collection = ( + original_empty.users_collection[0] + if is_bl_newer_than(2, 80) and len(original_empty.users_collection) > 0 + else None + ) + new_empty = original_empty.copy() + new_empty.name = nname + link_object(bpy.context.scene, new_empty, custom_collection) + + duplicated_empties[original_empty] = new_empty + + # Update drivers on the new empty to point to any other duplicated empties + update_driver_targets(new_empty, duplicated_empties) + + texcoord.object = new_empty + + def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate=True, duplicate_blank=False, ondisk_duplicate=False, set_new_decal_position=False): yp = tree.yp @@ -4704,7 +4743,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= vcol_user_types = [] vcol_nodes = [] vcol_names = [] - + duplicated_empties = {} for layer in yp.layers: if specific_layers and layer not in specific_layers: continue @@ -4744,16 +4783,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= # Decal object duplicate if layer.texcoord_type == 'Decal': - texcoord = ttree.nodes.get(layer.texcoord) - if texcoord and hasattr(texcoord, 'object') and texcoord.object: - if set_new_decal_position: - texcoord.object = create_decal_empty() - else: - nname = get_unique_name(texcoord.object.name, bpy.data.objects) - custom_collection = texcoord.object.users_collection[0] if is_bl_newer_than(2, 80) and texcoord.object and len(texcoord.object.users_collection) > 0 else None - texcoord.object = texcoord.object.copy() - texcoord.object.name = nname - link_object(bpy.context.scene, texcoord.object, custom_collection) + duplicate_decal_empty_reference(layer.texcoord, ttree, set_new_decal_position, duplicated_empties) # Duplicate baked layer image baked_layer_source = get_layer_source(layer, get_baked=True) @@ -4812,6 +4842,7 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= imgs.append(img) # Duplicate masks + for mask in layer.masks: if mask.group_node != '': mask_group = ttree.nodes.get(mask.group_node) @@ -4825,17 +4856,8 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= mask_source = ttree.nodes.get(mask.source) # Decal object duplicate if mask.texcoord_type == 'Decal': - texcoord = ttree.nodes.get(mask.texcoord) - if texcoord and hasattr(texcoord, 'object') and texcoord.object: - if set_new_decal_position: - texcoord.object = create_decal_empty() - else: - nname = get_unique_name(texcoord.object.name, bpy.data.objects) - custom_collection = texcoord.object.users_collection[0] if is_bl_newer_than(2, 80) and texcoord.object and len(texcoord.object.users_collection) > 0 else None - texcoord.object = texcoord.object.copy() - texcoord.object.name = nname - link_object(bpy.context.scene, texcoord.object, custom_collection) - + duplicate_decal_empty_reference(mask.texcoord, ttree, set_new_decal_position, duplicated_empties) + # Duplicate baked mask image baked_mask_source = get_mask_source(mask, get_baked=True) if baked_mask_source: From 5f605c8eccc660ea1fca2897f71de6d6e8e9f929 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 15 May 2025 00:34:51 +0700 Subject: [PATCH 152/283] Add new contributor credit --- ui.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ui.py b/ui.py index ddc33499..8388d6e8 100644 --- a/ui.py +++ b/ui.py @@ -5317,6 +5317,7 @@ def draw_ypaint_about(self, context): col.operator('wm.url_open', text='kareemov03', icon=icon_name).url = 'https://www.artstation.com/kareem' col.operator('wm.url_open', text='passivestar', icon=icon_name).url = 'https://github.com/passivestar' col.operator('wm.url_open', text='bappity', icon=icon_name).url = 'https://github.com/bappitybup' + col.operator('wm.url_open', text='bittie', icon=icon_name).url = 'https://github.com/BittieDev' col.separator() col.label(text='Documentation:') From 92dd94ee6d84a2a7e5339b6dd875d8c9fc63be0d Mon Sep 17 00:00:00 2001 From: ucupumar Date: Thu, 15 May 2025 20:05:55 +0700 Subject: [PATCH 153/283] Refactor gamma pipeline (Fix #268) (#273) * Generated float image should be converted first before packing * Update layer channel linear node checking and generation * Update linear node checking for mask * Update linear node logic * Use numpy for srgb/linear image conversion * Always use srgb colorspace for new layer image if srgb color channel is selected * Only do srgb conversion on generated float image if it's actually used as srgb image or used with srgb channel * Clean up implementation and pack new float image immediately to avoid color error * Set default float image to use premultiplied alpha since it packed better * Dealing with premultiplied float image saving * Multiply rgb pixels by it's alpha after merging premultiplied float image layers * Do image pixels hack to make sure the result correct when converting image bit depth * Dealing with non-linear blending mode * Preserve colorspace and alpha mode while converting from/to udim image * Dealing with generated image bit depth conversion * Add more hacks related to saving and packing float images * Only layer image will change colorspace when converting bit depth. Linear node also will be used less when linear blending is enabled. * Streamline bit depth conversion * Fix issue with UDIM tile swap * Use premultiplied alpha by default for float image atlas * Bump version to 2.2.3 and add versioning to make float image atlas use premultiplied alpha --- Bake.py | 10 +- ImageAtlas.py | 9 +- Layer.py | 12 +- UDIM.py | 39 +++- __init__.py | 2 +- blender_manifest.toml | 2 +- common.py | 456 +++++++++++++++++++++++++++++++++++------- image_ops.py | 210 ++++++++++++------- subtree.py | 153 +++----------- versioning.py | 9 + 10 files changed, 621 insertions(+), 281 deletions(-) diff --git a/Bake.py b/Bake.py index b4a136a6..6efaa3d4 100644 --- a/Bake.py +++ b/Bake.py @@ -2380,7 +2380,6 @@ def execute(self, context): # Merge image layers if (layer.type == 'IMAGE' and layer.texcoord_type == 'UV'): # and neighbor_layer.type == 'IMAGE'): - book = remember_before_bake(yp) prepare_bake_settings( book, objs, yp, samples=1, margin=5, @@ -2554,6 +2553,15 @@ def execute(self, context): # Refresh index routine yp.active_layer_index = min(layer_idx, neighbor_idx) + # HACK: To make the result correct, multiply rgb by alpha if image alpha mode is premultiplied + layer = yp.layers[yp.active_layer_index] + if layer.type == 'IMAGE': + source = get_layer_source(layer) + if source and source.image: + image = source.image + if image.is_float and image.alpha_mode == 'PREMUL': + multiply_image_rgb_by_alpha(image) + # Update list items ListItem.refresh_list_items(yp, repoint_active=True) else: diff --git a/ImageAtlas.py b/ImageAtlas.py index 452df5c3..f248bd6f 100644 --- a/ImageAtlas.py +++ b/ImageAtlas.py @@ -71,8 +71,11 @@ def create_image_atlas(color='BLACK', size=8192, hdr=False, name=''): img.yia.is_image_atlas = True img.yia.color = color #img.yia.float_buffer = hdr - #if hdr: - #img.colorspace_settings.name = get_noncolor_name() + + # Float image atlas always use premultiplied alpha + if hdr: + #img.colorspace_settings.name = get_noncolor_name() + img.alpha_mode = 'PREMUL' return img @@ -653,6 +656,8 @@ def execute(self, context): name=entities[i][0].name, width=segment.width, height=segment.height, alpha=True, float_buffer=image.is_float ) + if image.is_float: + new_image.alpha_mode = 'PREMUL' else: new_image = bpy.data.images.new( name=entities[i][0].name, width=image.size[0], height=image.size[1], diff --git a/Layer.py b/Layer.py index 6c16a93a..a1b2ccd8 100644 --- a/Layer.py +++ b/Layer.py @@ -1494,6 +1494,10 @@ def execute(self, context): img_atlas = self.get_to_be_cleared_image_atlas(context, yp) if img_atlas: ImageAtlas.clear_unused_segments(img_atlas.yia) + # Get channel index + try: channel_idx = int(self.channel_idx) + except: channel_idx = 0 + img = None segment = None if self.type == 'IMAGE': @@ -1536,8 +1540,9 @@ def execute(self, context): if hasattr(img, 'use_alpha'): img.use_alpha = True - #if img.colorspace_settings.name != get_noncolor_name(): - # img.colorspace_settings.name = get_noncolor_name() + # Set alpha mode to premultiplied to make sure alpha will be packed correctly + if img.is_float: + img.alpha_mode = 'PREMUL' update_image_editor_image(context, img) @@ -1564,9 +1569,6 @@ def execute(self, context): yp.halt_update = True - try: channel_idx = int(self.channel_idx) - except: channel_idx = 0 - layer = add_new_layer( node.node_tree, self.name, self.type, channel_idx, self.blend_type, self.normal_blend_type, diff --git a/UDIM.py b/UDIM.py index 394d7b13..e8e43ef3 100644 --- a/UDIM.py +++ b/UDIM.py @@ -60,25 +60,32 @@ def fill_tile(image, tilenum, color=None, width=0, height=0, empty_only=False): return True -def copy_udim_pixels(src, dest): - for tile in src.tiles: +def copy_udim_pixels(src, dest, convert_colorspace=False): + + tilenums = [tile.number for tile in src.tiles] + + for tilenum in tilenums: + tile = src.tiles.get(tilenum) + # Check if tile number exists on both images and has same sizes - dtile = dest.tiles.get(tile.number) + dtile = dest.tiles.get(tilenum) if not dtile: continue if tile.size[0] != dtile.size[0] or tile.size[1] != dtile.size[1]: continue # Swap first - if tile.number != 1001: - swap_tile(src, 1001, tile.number) - swap_tile(dest, 1001, tile.number) + if tilenum != 1001: + swap_tile(src, 1001, tilenum) + swap_tile(dest, 1001, tilenum) # Set pixels - dest.pixels = list(src.pixels) + if convert_colorspace: + copy_image_pixels_with_conversion(src, dest) + else: dest.pixels = list(src.pixels) # Swap back - if tile.number != 1001: - swap_tile(src, 1001, tile.number) - swap_tile(dest, 1001, tile.number) + if tilenum != 1001: + swap_tile(src, 1001, tilenum) + swap_tile(dest, 1001, tilenum) def get_tile_numbers(objs, uv_name): @@ -663,6 +670,10 @@ def create_udim_atlas(tilenums, name='', width=1024, height=1024, color=(0, 0, 0 image.yua.is_udim_atlas = True image.yui.base_color = color + # Float image atlas always use premultipled alpha + if hdr: + image.alpha_mode = 'PREMUL' + # Pack image initial_pack_udim(image) @@ -1155,6 +1166,10 @@ def poll(cls, context): def execute(self, context): image = context.image + if image.yua.is_udim_atlas or image.yia.is_image_atlas: + self.report({'ERROR'}, 'Converting image atlas to/from UDIM is not supported yet!') + return {'CANCELLED'} + # Create new image new_image = bpy.data.images.new( image.name, width=image.size[0], height=image.size[1], @@ -1184,6 +1199,10 @@ def execute(self, context): initial_pack_udim(new_image, color) + # Copy colorspace and alpha mode + new_image.colorspace_settings.name = image.colorspace_settings.name + new_image.alpha_mode = image.alpha_mode + # Copy image pixels copy_image_pixels(image, new_image) diff --git a/__init__.py b/__init__.py index 750061bf..775bcf9e 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 2, 2), + "version": (2, 2, 3), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index 509dfab6..35539dbf 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.2.2" +version = "2.2.3" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " diff --git a/common.py b/common.py index a16800b2..9e647f54 100644 --- a/common.py +++ b/common.py @@ -730,6 +730,20 @@ def get_noncolor_name(): return 'Non-Color' +def get_linear_color_name(): + names = bpy.types.Image.bl_rna.properties['colorspace_settings'].fixed_type.properties['name'].enum_items.keys() + linear_name = 'Linear Rec.709' if is_bl_newer_than(4) else 'Linear' + + if linear_name not in names: + + # Try to get 'linear' in a name + for name in names: + if 'linear' in name.lower(): + linear_name = name + break + + return linear_name + def remove_datablock(blocks, block, user=None, user_prop=''): if is_bl_newer_than(2, 79): blocks.remove(block) @@ -897,6 +911,9 @@ def is_layer_collection_hidden(obj): def get_addon_filepath(): return os.path.dirname(bpy.path.abspath(__file__)) + os.sep +def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): + return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + def srgb_to_linear_per_element(e): if e <= 0.03928: return e / 12.92 @@ -5920,7 +5937,7 @@ def is_colorid_vcol_still_being_used(objs): return False -def is_image_source_srgb(image, source, root_ch=None): +def is_image_source_srgb(image, source): if not is_bl_newer_than(2, 80): return source.color_space == 'COLOR' @@ -5928,12 +5945,156 @@ def is_image_source_srgb(image, source, root_ch=None): if image.source == 'TILED' and image.colorspace_settings.name == '': return True - # Float images is behaving like srgb for some reason in blender - if root_ch and root_ch.colorspace == 'SRGB' and image.is_float and image.colorspace_settings.name != get_srgb_name(): - return True + # Generated float images is behaving like srgb for some reason in blender + #if image.is_float and image.colorspace_settings.name != get_srgb_name() and image.source == 'GENERATED': + # return True return image.colorspace_settings.name == get_srgb_name() +def is_image_source_non_color(image, source): + if not is_bl_newer_than(2, 80): + return source.color_space == 'NONE' + + # Generated float images is behaving like srgb for some reason in blender + return image.colorspace_settings.name == get_noncolor_name() and not (image.is_float and image.source == 'GENERATED') + +def get_layer_and_root_ch_from_layer_ch(ch): + yp = ch.id_data.yp + layer = None + root_ch = None + + match = re.match(r'yp\.layers\[(\d+)\]\.channels\[(\d+)\]', ch.path_from_id()) + if match: + layer = yp.layers[int(match.group(1))] + root_ch = yp.channels[int(match.group(2))] + + return layer, root_ch + +def get_layer_channel_gamma_value(ch, layer=None, root_ch=None): + yp = ch.id_data.yp + if not layer or not root_ch: layer, root_ch = get_layer_and_root_ch_from_layer_ch(ch) + + channel_enabled = get_channel_enabled(ch, layer, root_ch) + if not channel_enabled: return 1.0 + + source_tree = get_channel_source_tree(ch, layer) + + image = None + source = None + if ch.override and ch.override_type == 'IMAGE': + source = source_tree.nodes.get(ch.source) + if source: image = source.image + elif layer.type == 'IMAGE': + source = get_layer_source(layer) + if source: image = source.image + + if yp.use_linear_blending: + + # Convert non image layer data to srgb if gamma space option is enabled + if ( + not ch.override + and ch.gamma_space + and root_ch.type != 'NORMAL' + and root_ch.colorspace == 'SRGB' + and ch.layer_input == 'RGB' + and layer.type not in {'IMAGE', 'BACKGROUND', 'GROUP'} + ): + return GAMMA + + # NOTE: Linear blending currently will only use gamma correction on normal channel + if image and is_image_source_srgb(image, source) and root_ch.type == 'NORMAL' and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP', 'VECTOR_DISPLACEMENT_MAP'}: + return 1.0 / GAMMA + + # NOTE: These two gamma correction are unused yet for simplicity and older file compatibility + ## Convert srgb image to linear for linear channel + #if image and is_image_source_srgb(image, source) and root_ch.colorspace == 'LINEAR': + # return 1.0 / GAMMA + + ## Convert non srgb image to srgb for srgb channel + #if image and is_image_source_non_color(image, source) and root_ch.colorspace == 'SRGB': + # return GAMMA + + else: + # Convert srgb override image to linear + if ch.override and image and is_image_source_srgb(image, source): + return 1.0 / GAMMA + + # Convert non image override data to linear + if ch.override and ch.override_type not in {'IMAGE'} and root_ch.type != 'NORMAL' and root_ch.colorspace == 'SRGB': + return 1.0 / GAMMA + + # Convert non image layer data to linear + if ( + not ch.override + and not ch.gamma_space + and root_ch.type != 'NORMAL' + and root_ch.colorspace == 'SRGB' + and ch.layer_input == 'RGB' + and layer.type not in {'IMAGE', 'BACKGROUND', 'GROUP'} + ): + return 1.0 / GAMMA + + return 1.0 + +def get_layer_channel_normal_gamma_value(ch, layer=None, root_ch=None): + yp = ch.id_data.yp + if not layer or not root_ch: layer, root_ch = get_layer_and_root_ch_from_layer_ch(ch) + + channel_enabled = get_channel_enabled(ch, layer, root_ch) + if not channel_enabled: return 1.0 + + image = None + source = None + layer_tree = get_tree(layer) + if ch.override_1 and ch.override_1_type == 'IMAGE': + source = layer_tree.nodes.get(ch.source_1) + if source: image = source.image + + # Convert srgb normal map override to linear + if ch.override_1 and image and is_image_source_srgb(image, source): + return 1.0 / GAMMA + + return 1.0 + +def get_layer_mask_gamma_value(mask, mask_tree=None): + if not mask_tree: mask_tree = get_mask_tree(mask) + + if get_mask_enabled(mask) and mask.type == 'IMAGE': + + source = mask_tree.nodes.get(mask.source) + image = source.image + + if not image: return 1.0 + + # Convert srgb mask image to linear + if is_image_source_srgb(image, source): + return 1.0 / GAMMA + + return 1.0 + +def get_layer_gamma_value(layer): + yp = layer.id_data.yp + + if get_layer_enabled(layer) and layer.type == 'IMAGE': + source_tree = get_source_tree(layer) + source = source_tree.nodes.get(layer.source) + image = source.image + if image: + + # Should linearize srgb image and float image + if not yp.use_linear_blending: + if image.is_float: + + # Float image with srgb will use double gamma calculation + if is_image_source_srgb(image, source): + return pow(1.0 / GAMMA, 2.0) + else: return 1.0 / GAMMA + + elif is_image_source_srgb(image, source): + return 1.0 / GAMMA + + return 1.0 + def any_linear_images_problem(yp): for layer in yp.layers: if not get_layer_enabled(layer): continue @@ -5941,85 +6102,46 @@ def any_linear_images_problem(yp): for i, ch in enumerate(layer.channels): root_ch = yp.channels[i] - if not get_channel_enabled(ch, layer, root_ch): continue + #if not get_channel_enabled(ch, layer, root_ch): continue - if not yp.use_linear_blending and ch.override and ch.override_type == 'IMAGE': - source_tree = get_channel_source_tree(ch) - linear = source_tree.nodes.get(ch.linear) - source = source_tree.nodes.get(ch.source) - if not source: continue + gamma = get_layer_channel_gamma_value(ch, layer, root_ch) + source_tree = get_channel_source_tree(ch, layer) + linear = source_tree.nodes.get(ch.linear) - image = source.image - if not image: continue - if ( - (is_image_source_srgb(image, source, root_ch) and not linear) or - (not is_image_source_srgb(image, source, root_ch) and linear) - ): - return True + if ( + (gamma == 1.0 and linear) or + (gamma != 1.0 and (not linear or not isclose(linear.inputs[1].default_value, gamma, rel_tol=1e-5))) + ): + return True - if ch.override_1 and ch.override_1_type == 'IMAGE': + if root_ch.type == 'NORMAL': + gamma_1 = get_layer_channel_normal_gamma_value(ch, layer, root_ch) linear_1 = layer_tree.nodes.get(ch.linear_1) - source_1 = layer_tree.nodes.get(ch.source_1) - if not source_1: continue - - image = source_1.image - if not image: continue if ( - (is_image_source_srgb(image, source_1) and not linear_1) or - (not is_image_source_srgb(image, source_1) and linear_1) + (gamma_1 == 1.0 and linear_1) or + (gamma_1 != 1.0 and (not linear_1 or not isclose(linear_1.inputs[1].default_value, gamma_1, rel_tol=1e-5))) ): return True for mask in layer.masks: - if not get_mask_enabled(mask, layer): continue - if mask.type == 'IMAGE': - source_tree = get_mask_tree(mask) - linear = source_tree.nodes.get(mask.linear) - source = source_tree.nodes.get(mask.source) - if not source: continue - image = source.image - if not image: continue - if ( - (is_image_source_srgb(image, source) and not linear) or - (not is_image_source_srgb(image, source) and linear) - ): - return True - - if layer.type == 'IMAGE': - source_tree = get_source_tree(layer) - linear = source_tree.nodes.get(layer.linear) - source = source_tree.nodes.get(layer.source) - if not source: continue - image = source.image - if not image: continue - - if yp.use_linear_blending: - normal_ch = get_height_channel(layer) - normal_root_ch = get_root_height_channel(yp) - if normal_ch and get_channel_enabled(normal_ch, layer, normal_root_ch) and not normal_ch.override_1 and normal_ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'}: - ch_linear = layer_tree.nodes.get(normal_ch.linear) - #if ((is_image_source_srgb(image, source) and not ch_linear) or - # (not is_image_source_srgb(image, source) and ch_linear) - # ): - # NOTE: Float image is pretended to be sRGB even if it's using linear colorspace - if (image.is_float and ch_linear) or (not image.is_float and not ch_linear): - return True - - if not image.is_float and ((is_image_source_srgb(image, source) and linear) or - (not is_image_source_srgb(image, source) and not linear) - ): - return True + source_tree = get_mask_tree(mask) + gamma = get_layer_mask_gamma_value(mask, mask_tree=source_tree) + linear = source_tree.nodes.get(mask.linear) + if ( + (gamma == 1.0 and linear) or + (gamma != 1.0 and (not linear or not isclose(linear.inputs[1].default_value, gamma, rel_tol=1e-5))) + ): + return True - if image.is_float and ((is_image_source_srgb(image, source) and not linear) or - (not is_image_source_srgb(image, source) and linear) - ): - return True + gamma = get_layer_gamma_value(layer) + source_tree = get_source_tree(layer) + linear = source_tree.nodes.get(layer.linear) - else: - if ((is_image_source_srgb(image, source) and not linear) or - (not is_image_source_srgb(image, source) and linear) - ): - return True + if ( + (gamma == 1.0 and linear) or + (gamma != 1.0 and (not linear or not isclose(linear.inputs[1].default_value, gamma, rel_tol=1e-5))) + ): + return True return False @@ -6907,6 +7029,20 @@ def copy_image_pixels(src, dest, segment=None, segment_src=None): dest.pixels = target_pxs +def copy_image_pixels_with_conversion(src, dest, segment=None, segment_src=None): + + copy_image_pixels(src, dest, segment, segment_src) + + # Convert image colors after copying if destination image and source image has different bit depth + if dest.is_float and not src.is_float: + # Byte to float + set_image_pixels_to_linear(dest, power=1) + multiply_image_rgb_by_alpha(dest, power=1) + else: + # Float to byte + divide_image_rgb_by_alpha(dest) + set_image_pixels_to_srgb(dest) + def set_image_pixels(image, color, segment=None): start_x = 0 @@ -6946,6 +7082,182 @@ def set_image_pixels(image, color, segment=None): image.pixels = pxs +def set_image_pixels_to_srgb(image, segment=None): + + start_x = 0 + start_y = 0 + + width = image.size[0] + height = image.size[1] + + if segment: + start_x = width * segment.tile_x + start_y = height * segment.tile_y + + width = segment.width + height = segment.height + + if is_bl_newer_than(2, 83): + pxs = numpy.empty(shape=image.size[0]*image.size[1]*4, dtype=numpy.float32) + image.pixels.foreach_get(pxs) + + # Set array to 3d + pxs.shape = (-1, image.size[0], 4) + + # Do srgb conversion + vecfunc = numpy.vectorize(linear_to_srgb_per_element) + for i in range(3): + pxs[start_y:start_y+height, start_x:start_x+width, i] = vecfunc(pxs[start_y:start_y+height, start_x:start_x+width, i]) + + image.pixels.foreach_set(pxs.ravel()) + + else: + pxs = list(image.pixels) + + for y in range(height): + source_offset_y = width * 4 * y + offset_y = image.size[0] * 4 * (y + start_y) + for x in range(width): + source_offset_x = 4 * x + offset_x = 4 * (x + start_x) + for i in range(3): + pxs[offset_y + offset_x + i] = linear_to_srgb_per_element(pxs[offset_y + offset_x + i]) + + image.pixels = pxs + +def set_image_pixels_to_linear(image, segment=None, power=1): + + start_x = 0 + start_y = 0 + + width = image.size[0] + height = image.size[1] + + if segment: + start_x = width * segment.tile_x + start_y = height * segment.tile_y + + width = segment.width + height = segment.height + + if is_bl_newer_than(2, 83): + pxs = numpy.empty(shape=image.size[0]*image.size[1]*4, dtype=numpy.float32) + image.pixels.foreach_get(pxs) + + # Set array to 3d + pxs.shape = (-1, image.size[0], 4) + + # Do linear conversion + vecfunc = numpy.vectorize(srgb_to_linear_per_element) + for p in range(power): + for i in range(3): + pxs[start_y:start_y+height, start_x:start_x+width, i] = vecfunc(pxs[start_y:start_y+height, start_x:start_x+width, i]) + + image.pixels.foreach_set(pxs.ravel()) + + else: + pxs = list(image.pixels) + + for y in range(height): + source_offset_y = width * 4 * y + offset_y = image.size[0] * 4 * (y + start_y) + for x in range(width): + source_offset_x = 4 * x + offset_x = 4 * (x + start_x) + for p in range(power): + for i in range(3): + pxs[offset_y + offset_x + i] = srgb_to_linear_per_element(pxs[offset_y + offset_x + i]) + + image.pixels = pxs + +def multiply_image_rgb_by_alpha(image, segment=None, power=1): + + start_x = 0 + start_y = 0 + + width = image.size[0] + height = image.size[1] + + if segment: + start_x = width * segment.tile_x + start_y = height * segment.tile_y + + width = segment.width + height = segment.height + + if is_bl_newer_than(2, 83): + pxs = numpy.empty(shape=image.size[0]*image.size[1]*4, dtype=numpy.float32) + image.pixels.foreach_get(pxs) + + # Set array to 3d + pxs.shape = (-1, image.size[0], 4) + + # Do linear conversion + for i in range(3): + pxs[start_y:start_y+height, start_x:start_x+width, i] *= pow(pxs[start_y:start_y+height, start_x:start_x+width, 3], power) + + image.pixels.foreach_set(pxs.ravel()) + + else: + pxs = list(image.pixels) + + for y in range(height): + source_offset_y = width * 4 * y + offset_y = image.size[0] * 4 * (y + start_y) + for x in range(width): + source_offset_x = 4 * x + offset_x = 4 * (x + start_x) + for i in range(3): + pxs[offset_y + offset_x + i] *= pow(pxs[offset_y + offset_x + 3], power) + + image.pixels = pxs + +def safe_divider(divider): + return max(divider, 0.00001) + +def divide_image_rgb_by_alpha(image, segment=None): + + start_x = 0 + start_y = 0 + + width = image.size[0] + height = image.size[1] + + if segment: + start_x = width * segment.tile_x + start_y = height * segment.tile_y + + width = segment.width + height = segment.height + + if is_bl_newer_than(2, 83): + pxs = numpy.empty(shape=image.size[0]*image.size[1]*4, dtype=numpy.float32) + image.pixels.foreach_get(pxs) + + # Set array to 3d + pxs.shape = (-1, image.size[0], 4) + + # Do linear conversion + for i in range(3): + vecfunc = numpy.vectorize(safe_divider) + pxs[start_y:start_y+height, start_x:start_x+width, i] /= vecfunc(pxs[start_y:start_y+height, start_x:start_x+width, 3]) + + image.pixels.foreach_set(pxs.ravel()) + + else: + pxs = list(image.pixels) + + for y in range(height): + source_offset_y = width * 4 * y + offset_y = image.size[0] * 4 * (y + start_y) + for x in range(width): + source_offset_x = 4 * x + offset_x = 4 * (x + start_x) + for i in range(3): + pxs[offset_y + offset_x + i] /= safe_divider(pxs[offset_y + offset_x + 3]) + + image.pixels = pxs + def is_image_filepath_unique(filepath, check_disk=True): abspath = bpy.path.abspath(filepath) for img in bpy.data.images: diff --git a/image_ops.py b/image_ops.py index a43dbbce..e40cca88 100644 --- a/image_ops.py +++ b/image_ops.py @@ -4,10 +4,28 @@ from bpy_extras.io_utils import ExportHelper from .common import * import time -from . import UDIM +from . import UDIM, subtree + +def preserve_float_color_hack_before_saving(image): + if not image.is_float: return + + # HACK: Need more calculation for image saved using straight alpha + if image.alpha_mode == 'STRAIGHT': + if image.colorspace_settings.name == get_srgb_name(): + multiply_image_rgb_by_alpha(image) + elif image.colorspace_settings.name == get_linear_color_name(): + divide_image_rgb_by_alpha(image) + + # NOTE: Saved SRGB Straight still has black glitch around alpha transition + # and saved SRGB Premultiplied still looks horrible def save_float_image(image): + + preserve_float_color_hack_before_saving(image) + + # Remembers original_path = image.filepath + ori_colorspace = image.colorspace_settings.name # Create temporary scene tmpscene = bpy.data.scenes.new('Temp Scene') @@ -28,7 +46,6 @@ def save_float_image(image): elif settings.file_format in {'PNG', 'TIFF'}: settings.color_depth = '16' - #ori_colorspace = image.colorspace_settings.name full_path = bpy.path.abspath(image.filepath) image.save_render(full_path, scene=tmpscene) # HACK: If image still dirty after saving, save using standard save method @@ -38,7 +55,14 @@ def save_float_image(image): # Delete temporary scene remove_datablock(bpy.data.scenes, tmpscene) -def pack_float_image(image): + # Set back colorspace + if image.colorspace_settings.name != ori_colorspace: + image.colorspace_settings.name = ori_colorspace + + # Reload image + image.reload() + +def pack_float_image_27x(image): original_path = image.filepath # Create temporary scene @@ -94,6 +118,39 @@ def pack_float_image(image): image.filepath = original_path os.remove(temp_filepath) +def preserve_float_color_hack_before_packing(image): + if not image.is_float: return + + # HACK: Divide by alpha if using straight alpha + if image.alpha_mode == 'STRAIGHT': + divide_image_rgb_by_alpha(image) + + # Check if image is using srgb colorspace + if image.colorspace_settings.name == get_srgb_name(): + + # HACK: Multiply by alpha if using premultiplied alpha + if image.alpha_mode == 'PREMUL': + multiply_image_rgb_by_alpha(image) + + # HACK: If float image use srgb colorspace, it need to be converted to srgb first before packing + set_image_pixels_to_srgb(image) + +def pack_image(image, reload_float=False, do_hack=True): + + if do_hack: + preserve_float_color_hack_before_packing(image) + + if is_bl_newer_than(2, 80): + image.pack() + else: + if image.is_float: + pack_float_image_27x(image) + else: image.pack(as_png=True) + + # HACK: Some operation need Float image to be reloaded to be showed correctly + if image.is_float and reload_float: + image.reload() + def clean_object_references(image): removed_references = [] if image.yia.is_image_atlas: @@ -224,7 +281,7 @@ def save_pack_all(yp): temp_saved = True - image.pack() + pack_image(image, reload_float=True) if temp_saved: # Remove file if they are using temporary directory @@ -232,11 +289,9 @@ def save_pack_all(yp): UDIM.remove_udim_files_from_disk(image, temp_udim_dir, True) else: + pack_image(image, reload_float=True) if image.is_float: - pack_float_image(image) packed_float_images.append(image) - else: - image.pack(as_png=True) print('INFO:', image.name, 'image is packed in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') else: @@ -421,14 +476,7 @@ def execute(self, context): T = time.time() - # Save file to temporary place first if image is float - if is_bl_newer_than(2, 80): - context.image.pack() - else: - if context.image.is_float: - pack_float_image(context.image) - else: context.image.pack(as_png=True) - + pack_image(context.image) context.image.filepath = '' node = get_active_ypaint_node() @@ -441,35 +489,18 @@ def execute(self, context): baked_disp = tree.nodes.get(ch.baked_disp) if baked_disp and baked_disp.image and not baked_disp.image.packed_file: - if is_bl_newer_than(2, 80): - baked_disp.image.pack() - else: - if baked_disp.image.is_float: - pack_float_image(baked_disp.image) - else: baked_disp.image.pack(as_png=True) - + pack_image(baked_disp.image) baked_disp.image.filepath = '' baked_vdisp = tree.nodes.get(ch.baked_vdisp) if baked_vdisp and baked_vdisp.image and not baked_vdisp.image.packed_file: - if is_bl_newer_than(2, 80): - baked_vdisp.image.pack() - else: - if baked_vdisp.image.is_float: - pack_float_image(baked_vdisp.image) - else: baked_vdisp.image.pack(as_png=True) - + pack_image(baked_vdisp.image) baked_vdisp.image.filepath = '' if not is_overlay_normal_empty(yp): baked_normal_overlay = tree.nodes.get(ch.baked_normal_overlay) if baked_normal_overlay and baked_normal_overlay.image and not baked_normal_overlay.image.packed_file: - if is_bl_newer_than(2, 80): - baked_normal_overlay.image.pack() - else: - if baked_normal_overlay.image.is_float: - pack_float_image(baked_normal_overlay.image) - else: baked_normal_overlay.image.pack(as_png=True) + pack_image(baked_normal_overlay.image) baked_normal_overlay.image.filepath = '' @@ -774,12 +805,7 @@ def execute(self, context): # Need to pack first to save the image if image.is_dirty: - if is_bl_newer_than(2, 80): - image.pack() - else: - if image.is_float: - pack_float_image(image) - else: image.pack(as_png=True) + pack_image(image) # Some images need to set to srgb when saving ori_colorspace = image.colorspace_settings.name @@ -1123,14 +1149,23 @@ def execute(self, context): if self.copy: image = self.image = duplicate_image(image, ondisk_duplicate=False) + # Remembers + ori_colorspace = image.colorspace_settings.name + ori_alpha_mode = image.alpha_mode + + if image.is_float: + # HACK: Set image color to linear first to save linear float image + if image.colorspace_settings.name == get_linear_color_name(): + set_image_pixels_to_linear(image) + + # HACK: Need to do image operation before saving srgb float image + if image.colorspace_settings.name == get_srgb_name(): + if image.alpha_mode == 'STRAIGHT': + multiply_image_rgb_by_alpha(image, power=2) + # Need to pack first to save the image if image.is_dirty: - if is_bl_newer_than(2, 80): - image.pack() - else: - if image.is_float: - pack_float_image(image) - else: image.pack(as_png=True) + pack_image(image) # Unpack image if image is packed (Only necessary for Blender 2.80 and lower) # Packing and unpacking sometimes does not work if the blend file is not saved yet @@ -1139,11 +1174,19 @@ def execute(self, context): unpacked_to_disk = True self.unpack_image(context) - # Some image need to set to srgb when saving - ori_colorspace = image.colorspace_settings.name - if not image.is_float and not image.is_dirty: - image.colorspace_settings.name = get_srgb_name() + if not image.is_dirty: + if not image.is_float: + # HACK: Non float image need to set to srgb when saving + image.colorspace_settings.name = get_srgb_name() + else: + + # HACK: Need to change flip alpha mode before saving float image + if image.alpha_mode == 'PREMUL': + image.alpha_mode = 'STRAIGHT' + elif image.alpha_mode == 'STRAIGHT': + image.alpha_mode = 'PREMUL' + # Save image if image.source == 'TILED': override = bpy.context.copy() @@ -1204,6 +1247,10 @@ def execute(self, context): if image.colorspace_settings.name != ori_colorspace: image.colorspace_settings.name = ori_colorspace + # Set back alpha mode + if image.alpha_mode != ori_alpha_mode: + image.alpha_mode = ori_alpha_mode + # Delete copied image if self.copy: remove_datablock(bpy.data.images, image) @@ -1229,11 +1276,9 @@ def execute(self, context): ypui.refresh_image_hack = False return {'FINISHED'} -def toggle_image_bit_depth(image, no_copy=False, force_srgb=False): +def toggle_image_bit_depth(image, no_copy=False, force_srgb=False, convert_colorspace=False): - if image.yua.is_udim_atlas or image.yia.is_image_atlas: - self.report({'ERROR'}, 'Cannot convert image atlas segment to different bit depth!') - return {'CANCELLED'} + if image.yua.is_udim_atlas or image.yia.is_image_atlas: return # Create new image based on original image but with different bit depth if image.source == 'TILED': @@ -1266,26 +1311,29 @@ def toggle_image_bit_depth(image, no_copy=False, force_srgb=False): if force_srgb: new_image.colorspace_settings.name = get_srgb_name() + elif convert_colorspace: + if new_image.is_float: + # Float image will use linear color and premultiplied alpha + new_image.colorspace_settings.name = get_linear_color_name() + new_image.alpha_mode = 'PREMUL' + else: + # Byte image will use srgb color and straight alpha + new_image.colorspace_settings.name = get_srgb_name() + new_image.alpha_mode = 'STRAIGHT' else: new_image.colorspace_settings.name = image.colorspace_settings.name # Copy image pixels if no_copy == False: if image.source == 'TILED': - UDIM.copy_udim_pixels(image, new_image) - else: copy_image_pixels(image, new_image) + UDIM.copy_udim_pixels(image, new_image, convert_colorspace=convert_colorspace) + else: + if convert_colorspace: + copy_image_pixels_with_conversion(image, new_image) + else: copy_image_pixels(image, new_image) # Pack image - if image.packed_file and image.source != 'TILED': - if is_bl_newer_than(2, 80): - new_image.pack() - else: - if new_image.is_float: - pack_float_image(new_image) - else: new_image.pack(as_png=True) - - # HACK: Float image need to be reloaded after packing to be showed correctly - if new_image.is_float: - new_image.reload() + if image.source != 'TILED' and image.packed_file: + pack_image(new_image, reload_float=True) # Replace image replace_image(image, new_image) @@ -1306,12 +1354,36 @@ def execute(self, context): node = get_active_ypaint_node() yp = node.node_tree.yp + # Do not convert colorspace if entity is a mask + convert_colorspace = False + m1 = re.match(r'^yp\.layers\[(\d+)\]$', context.entity.path_from_id()) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', context.entity.path_from_id()) + m3 = re.match(r'^yp\.layers\[(\d+)\]\.channels\[(\d+)\]$', context.entity.path_from_id()) + if m1: + layer = yp.layers[int(m1.group(1))] + convert_colorspace = True + elif m2: + layer = yp.layers[int(m2.group(1))] + elif m3: + layer = yp.layers[int(m3.group(1))] + else: + self.report({'ERROR'}, "Wrong context!") + return {'CANCELLED'} + image = context.image - toggle_image_bit_depth(image) + + if image.yua.is_udim_atlas or image.yia.is_image_atlas: + self.report({'ERROR'}, 'Cannot convert image atlas segment to different bit depth!') + return {'CANCELLED'} + + toggle_image_bit_depth(image, convert_colorspace=convert_colorspace) # Update image editor by setting active layer index yp.active_layer_index = yp.active_layer_index + # Refresh linear nodes + subtree.check_yp_linear_nodes(yp, specific_layer=layer, reconnect=True) + return {'FINISHED'} def register(): diff --git a/subtree.py b/subtree.py index acd977cb..e0b9ce9b 100644 --- a/subtree.py +++ b/subtree.py @@ -2476,167 +2476,80 @@ def check_extra_alpha(layer, need_reconnect=False): def check_layer_channel_linear_node(ch, layer=None, root_ch=None, reconnect=False): yp = ch.id_data.yp - - if not layer or not root_ch: - match = re.match(r'yp\.layers\[(\d+)\]\.channels\[(\d+)\]', ch.path_from_id()) - layer = yp.layers[int(match.group(1))] - root_ch = yp.channels[int(match.group(2))] + if not layer or not root_ch: layer, root_ch = get_layer_and_root_ch_from_layer_ch(ch) source_tree = get_channel_source_tree(ch, layer) - image = None - source = None - if ch.override and ch.override_type == 'IMAGE': - source = source_tree.nodes.get(ch.source) - if source: image = source.image - elif layer.type == 'IMAGE': - source = get_layer_source(layer) - if source: image = source.image + gamma = get_layer_channel_gamma_value(ch, layer, root_ch) - channel_enabled = get_channel_enabled(ch, layer, root_ch) - - if channel_enabled and (( - not yp.use_linear_blending - and ch.override - and ( - (image and is_image_source_srgb(image, source, root_ch)) or - ( - ch.override_type not in {'IMAGE'} - and root_ch.type != 'NORMAL' - and root_ch.colorspace == 'SRGB' - )) - ) or ( - not yp.use_linear_blending - and not ch.override - and root_ch.type != 'NORMAL' - and root_ch.colorspace == 'SRGB' - and ( - (not ch.gamma_space and ch.layer_input == 'RGB' and layer.type not in {'IMAGE', 'BACKGROUND', 'GROUP'}) - or (layer.type == 'IMAGE' and image.is_float and image.colorspace_settings.name != get_srgb_name()) # Float images need to converted to linear for some reason in Blender - ) - ) or ( - yp.use_linear_blending - and not ch.override_1 - and root_ch.type == 'NORMAL' - and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'} - and source and source.image and not source.image.is_float #and is_image_source_srgb(image, source) # NOTE: No need for channel linear if the image is float - )): + if gamma != 1.0: + # Create linear node if root_ch.type == 'VALUE': linear = replace_new_node(source_tree, ch, 'linear', 'ShaderNodeMath', 'Linear') linear.operation = 'POWER' else: linear = replace_new_node(source_tree, ch, 'linear', 'ShaderNodeGamma', 'Linear') - - linear.inputs[1].default_value = 1.0 / GAMMA - - elif channel_enabled and ( - yp.use_linear_blending - and root_ch.type != 'NORMAL' - and root_ch.colorspace == 'SRGB' - and ( - (ch.gamma_space and ch.layer_input == 'RGB' and layer.type not in {'IMAGE', 'BACKGROUND', 'GROUP'}) - #or (layer.type == 'IMAGE' and image.is_float and image.colorspace_settings.name == get_srgb_name()) - ) - ): - if root_ch.type == 'VALUE': - linear = replace_new_node(source_tree, ch, 'linear', 'ShaderNodeMath', 'Linear') - linear.operation = 'POWER' - else: linear = replace_new_node(source_tree, ch, 'linear', 'ShaderNodeGamma', 'Linear') - - linear.inputs[1].default_value = GAMMA - + linear.inputs[1].default_value = gamma else: + # Delete linear node remove_node(source_tree, ch, 'linear') - image_1 = None - layer_tree = get_tree(layer) - if ch.override_1 and ch.override_1_type == 'IMAGE': - source_1 = layer_tree.nodes.get(ch.source_1) - if source_1: image_1 = source_1.image - if channel_enabled and ch.override_1 and image_1 and is_image_source_srgb(image_1, source_1): - linear_1 = replace_new_node(layer_tree, ch, 'linear_1', 'ShaderNodeGamma', 'Linear 1') - linear_1.inputs[1].default_value = 1.0 / GAMMA - else: - remove_node(layer_tree, ch, 'linear_1') + if root_ch.type == 'NORMAL': + gamma_1 = get_layer_channel_normal_gamma_value(ch, layer, root_ch) + if gamma_1 != 1.0: + # Create linear node + layer_tree = get_tree(layer) + linear_1 = replace_new_node(layer_tree, ch, 'linear_1', 'ShaderNodeGamma', 'Linear 1') + linear_1.inputs[1].default_value = gamma_1 + else: + # Delete linear node + remove_node(source_tree, ch, 'linear_1') if reconnect: reconnect_layer_nodes(layer) rearrange_layer_nodes(layer) - return image - def check_layer_image_linear_node(layer, source_tree=None): yp = layer.id_data.yp if not source_tree: source_tree = get_source_tree(layer) - if get_layer_enabled(layer) and layer.type == 'IMAGE': - - source = source_tree.nodes.get(layer.source) - image = source.image - if not image: return - - # Create linear if image type is srgb or float image - if is_image_source_srgb(image, source) and (not yp.use_linear_blending or (yp.use_linear_blending and image.is_float)): - linear = source_tree.nodes.get(layer.linear) - if not linear: - linear = new_node(source_tree, layer, 'linear', 'ShaderNodeGamma', 'Linear') - linear.inputs[1].default_value = 1.0 / GAMMA - - return - - elif yp.use_linear_blending and not image.is_float and not is_image_source_srgb(image, source): - linear = source_tree.nodes.get(layer.linear) - if not linear: - linear = new_node(source_tree, layer, 'linear', 'ShaderNodeGamma', 'Linear') - linear.inputs[1].default_value = GAMMA - - return + gamma = get_layer_gamma_value(layer) - # Delete linear - remove_node(source_tree, layer, 'linear') + if gamma != 1.0: + # Create linear node + linear = check_new_node(source_tree, layer, 'linear', 'ShaderNodeGamma', 'Linear') + linear.inputs[1].default_value = gamma + else: + # Delete linear node + remove_node(source_tree, layer, 'linear') def check_mask_image_linear_node(mask, mask_tree=None): if not mask_tree: mask_tree = get_mask_tree(mask) - if get_mask_enabled(mask) and mask.type == 'IMAGE': - - source = mask_tree.nodes.get(mask.source) - image = source.image - - if not image: return + gamma = get_layer_mask_gamma_value(mask, mask_tree) - # Create linear if image type is srgb - if is_image_source_srgb(image, source): - linear = mask_tree.nodes.get(mask.linear) - if not linear: - linear = new_node(mask_tree, mask, 'linear', 'ShaderNodeGamma', 'Linear') - linear.inputs[1].default_value = 1.0 / GAMMA - - return - - # Delete linear - remove_node(mask_tree, mask, 'linear') + if gamma != 1.0: + # Create linear node + linear = check_new_node(mask_tree, mask, 'linear', 'ShaderNodeGamma', 'Linear') + linear.inputs[1].default_value = gamma + else: + # Delete linear node + remove_node(mask_tree, mask, 'linear') def check_yp_linear_nodes(yp, specific_layer=None, reconnect=True): for layer in yp.layers: if specific_layer and layer != specific_layer: continue - image_found = False if layer.type == 'IMAGE': check_layer_image_linear_node(layer) - image_found = True for ch in layer.channels: - #if ch.override_type == 'IMAGE' or ch.override_1_type == 'IMAGE': - if check_layer_channel_linear_node(ch): - image_found = True + check_layer_channel_linear_node(ch) for mask in layer.masks: if mask.type == 'IMAGE': check_mask_image_linear_node(mask) - image_found = True - #if image_found and reconnect: if reconnect: reconnect_layer_nodes(layer) rearrange_layer_nodes(layer) diff --git a/versioning.py b/versioning.py index 3102873d..bfc892a5 100644 --- a/versioning.py +++ b/versioning.py @@ -853,6 +853,15 @@ def update_yp_tree(tree): if version_tuple(yp.version) < (2, 2, 2): update_bake_info_baked_entity_props(yp) + # Version 2.2.3 use premultiplied alpha for float image atlas + if version_tuple(yp.version) < (2, 2, 3): + for image in bpy.data.images: + if not image.is_float: continue + if image.yia.is_image_atlas or image.yua.is_udim_atlas: + if not image.is_dirty and image.alpha_mode != 'PREMUL': + image.alpha_mode = 'PREMUL' + print("INFO: Image atlas named '"+image.name+"' is now using premultiplied alpha!") + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 62d7df799f18a63cb66addc2e895883265537170 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Thu, 15 May 2025 21:43:59 +0700 Subject: [PATCH 154/283] Fix: Using custom layer source sometimes produce wrong result --- common.py | 12 +++++++++--- input_outputs.py | 2 +- ui.py | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/common.py b/common.py index 9e647f54..e5c79b66 100644 --- a/common.py +++ b/common.py @@ -5769,12 +5769,18 @@ def get_all_baked_channel_images(tree): return images def is_layer_using_vector(layer, exclude_baked=False): + yp = layer.id_data.yp + if (not exclude_baked and layer.use_baked) or layer.type not in {'VCOL', 'BACKGROUND', 'COLOR', 'GROUP', 'HEMI', 'OBJECT_INDEX', 'BACKFACE', 'EDGE_DETECT', 'AO'}: return True - for ch in layer.channels: - if ch.enable and ch.override and ch.override_type not in {'VCOL', 'DEFAULT'}: - return True + for i, ch in enumerate(layer.channels): + root_ch = yp.channels[i] + if ch.enable: + if ch.override and ch.override_type not in {'VCOL', 'DEFAULT'}: + return True + if root_ch.type == 'NORMAL' and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'} and ch.override_1 and ch.override_1_type != 'DEFAULT': + return True for mask in layer.masks: if mask.enable and mask.texcoord_type == 'Layer': diff --git a/input_outputs.py b/input_outputs.py index b1f60616..2d0fd3bf 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -1225,7 +1225,7 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) texcoords = [] # Check layer texcoords - if layer_enabled and layer.texcoord_type not in {'UV', 'Decal'} and layer.type not in {'VCOL', 'COLOR', 'HEMI', 'GROUP', 'BACKGROUND'}: + if layer_enabled and layer.texcoord_type not in {'UV', 'Decal'} and is_layer_using_vector(layer): texcoords.append(layer.texcoord_type) for mask in layer.masks: diff --git a/ui.py b/ui.py index 8388d6e8..75813e91 100644 --- a/ui.py +++ b/ui.py @@ -6676,7 +6676,7 @@ def draw(self, context): if item[0] == 'MUSGRAVE' and is_bl_newer_than(4, 1): continue if item[0] == 'GABOR' and not is_bl_newer_than(4, 3): continue - if item[0] == ch.override_type: + if ch.override and item[0] == ch.override_type: icon = 'RADIOBUT_ON' else: icon = 'RADIOBUT_OFF' From 808b4628f8402e42e306de39857ffbb43d4bc889 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 16 May 2025 02:32:55 +0700 Subject: [PATCH 155/283] Update gamma pipeline on legacy blenders --- ImageAtlas.py | 4 ++-- Layer.py | 10 +++++----- common.py | 11 ++++++++++- image_ops.py | 6 +++--- subtree.py | 8 ++++++++ 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/ImageAtlas.py b/ImageAtlas.py index f248bd6f..27288e55 100644 --- a/ImageAtlas.py +++ b/ImageAtlas.py @@ -73,7 +73,7 @@ def create_image_atlas(color='BLACK', size=8192, hdr=False, name=''): #img.yia.float_buffer = hdr # Float image atlas always use premultiplied alpha - if hdr: + if hdr and is_bl_newer_than(2, 80): #img.colorspace_settings.name = get_noncolor_name() img.alpha_mode = 'PREMUL' @@ -656,7 +656,7 @@ def execute(self, context): name=entities[i][0].name, width=segment.width, height=segment.height, alpha=True, float_buffer=image.is_float ) - if image.is_float: + if image.is_float and is_bl_newer_than(2, 80): new_image.alpha_mode = 'PREMUL' else: new_image = bpy.data.images.new( diff --git a/Layer.py b/Layer.py index a1b2ccd8..e3dfdda1 100644 --- a/Layer.py +++ b/Layer.py @@ -153,8 +153,8 @@ def add_new_layer( if layer_type == 'IMAGE': # Always set non color to image node because of linear pipeline - if hasattr(source, 'color_space'): - source.color_space = 'NONE' + #if hasattr(source, 'color_space'): + # source.color_space = 'NONE' # Add new image if it's image layer source.image = image @@ -1541,7 +1541,7 @@ def execute(self, context): img.use_alpha = True # Set alpha mode to premultiplied to make sure alpha will be packed correctly - if img.is_float: + if img.is_float and is_bl_newer_than(2, 80): img.alpha_mode = 'PREMUL' update_image_editor_image(context, img) @@ -4283,8 +4283,8 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): if new_type == 'IMAGE': image = bpy.data.images.get(item_name) source.image = image - if hasattr(source, 'color_space'): - source.color_space = 'NONE' + #if hasattr(source, 'color_space'): + # source.color_space = 'NONE' #if image.colorspace_settings.name != get_noncolor_name(): # image.colorspace_settings.name = get_noncolor_name() elif new_type == 'VCOL': diff --git a/common.py b/common.py index e5c79b66..c73d224e 100644 --- a/common.py +++ b/common.py @@ -6089,7 +6089,7 @@ def get_layer_gamma_value(layer): # Should linearize srgb image and float image if not yp.use_linear_blending: - if image.is_float: + if image.is_float and is_bl_newer_than(2, 80): # Float image with srgb will use double gamma calculation if is_image_source_srgb(image, source): @@ -6139,6 +6139,15 @@ def any_linear_images_problem(yp): ): return True + # Blender 2.7x has color space option on the node + if not is_bl_newer_than(2, 80) and layer.type == 'IMAGE': + source = get_layer_source(layer) + if source: + if source.color_space == 'NONE' and yp.use_linear_blending: + return True + if source.color_space == 'COLOR' and not yp.use_linear_blending: + return True + gamma = get_layer_gamma_value(layer) source_tree = get_source_tree(layer) linear = source_tree.nodes.get(layer.linear) diff --git a/image_ops.py b/image_ops.py index e40cca88..3b7fb358 100644 --- a/image_ops.py +++ b/image_ops.py @@ -7,7 +7,7 @@ from . import UDIM, subtree def preserve_float_color_hack_before_saving(image): - if not image.is_float: return + if not image.is_float or not is_bl_newer_than(2, 80): return # HACK: Need more calculation for image saved using straight alpha if image.alpha_mode == 'STRAIGHT': @@ -16,7 +16,7 @@ def preserve_float_color_hack_before_saving(image): elif image.colorspace_settings.name == get_linear_color_name(): divide_image_rgb_by_alpha(image) - # NOTE: Saved SRGB Straight still has black glitch around alpha transition + # TODO: Saved SRGB Straight still has black glitch around alpha transition # and saved SRGB Premultiplied still looks horrible def save_float_image(image): @@ -119,7 +119,7 @@ def pack_float_image_27x(image): os.remove(temp_filepath) def preserve_float_color_hack_before_packing(image): - if not image.is_float: return + if not image.is_float or not is_bl_newer_than(2, 80): return # HACK: Divide by alpha if using straight alpha if image.alpha_mode == 'STRAIGHT': diff --git a/subtree.py b/subtree.py index e0b9ce9b..6e697060 100644 --- a/subtree.py +++ b/subtree.py @@ -2515,6 +2515,14 @@ def check_layer_image_linear_node(layer, source_tree=None): if not source_tree: source_tree = get_source_tree(layer) + # Blender 2.7x has color space option on the node + if not is_bl_newer_than(2, 80) and layer.type == 'IMAGE': + source = get_layer_source(layer) + if yp.use_linear_blending: + if source.color_space != 'COLOR': source.color_space = 'COLOR' + else: + if source.color_space != 'NONE': source.color_space = 'NONE' + gamma = get_layer_gamma_value(layer) if gamma != 1.0: From 9f88b4b0ca442d786821ff09233cca336a2f2fe5 Mon Sep 17 00:00:00 2001 From: Bittie <1491571+BittieByte@users.noreply.github.com> Date: Thu, 15 May 2025 16:23:41 -0400 Subject: [PATCH 156/283] Allow image data-block reuse in layer masks (#274) --- Mask.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mask.py b/Mask.py index 1fb48ce3..2e8419e4 100644 --- a/Mask.py +++ b/Mask.py @@ -1439,7 +1439,7 @@ def invoke(self, context, event): imgs = bpy.data.images baked_channel_images = get_all_baked_channel_images(layer.id_data) for img in imgs: - if is_image_available_to_open(img) and img not in baked_channel_images and img != layer_image and img not in mask_images: + if is_image_available_to_open(img) and img not in baked_channel_images and img != layer_image: self.image_coll.add().name = img.name # Make sure default image is available in the collection and update the source input based on the default name From 196505c1c7fe13d5924a11da5019b931d9fa86d3 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 16 May 2025 16:25:01 +0700 Subject: [PATCH 157/283] Add versioning to update non-color image layer gamma --- versioning.py | 57 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/versioning.py b/versioning.py index bfc892a5..f6214092 100644 --- a/versioning.py +++ b/versioning.py @@ -7,7 +7,7 @@ from .node_arrangements import * from .node_connections import * from .input_outputs import * -from . import Bake, ListItem +from . import Bake, ListItem, Modifier def flip_tangent_sign(): meshes = [] @@ -853,14 +853,55 @@ def update_yp_tree(tree): if version_tuple(yp.version) < (2, 2, 2): update_bake_info_baked_entity_props(yp) - # Version 2.2.3 use premultiplied alpha for float image atlas + # Version 2.2.3 use premultiplied alpha for float image atlas and new linear gamma system if version_tuple(yp.version) < (2, 2, 3): - for image in bpy.data.images: - if not image.is_float: continue - if image.yia.is_image_atlas or image.yua.is_udim_atlas: - if not image.is_dirty and image.alpha_mode != 'PREMUL': - image.alpha_mode = 'PREMUL' - print("INFO: Image atlas named '"+image.name+"' is now using premultiplied alpha!") + + if is_bl_newer_than(2, 80): + # Update float image atlas to use premultiplied alpha + for image in bpy.data.images: + if not image.is_float: continue + if image.yia.is_image_atlas or image.yua.is_udim_atlas: + if not image.is_dirty and image.alpha_mode != 'PREMUL': + image.alpha_mode = 'PREMUL' + print("INFO: Image atlas named '"+image.name+"' is now using premultiplied alpha!") + + if yp.use_linear_blending: + # Non color layer used to be have linear node mistakenly added + for layer in yp.layers: + if layer.type == 'IMAGE': + source = get_layer_source(layer) + if source and source.image: + image = source.image + if not is_image_source_srgb(image, source): + mod = Modifier.add_new_modifier(layer, 'MATH') + mod.math_meth = 'POWER' + mod_tree = get_mod_tree(mod) + math = mod_tree.nodes.get(mod.math) + gamma = 2.2 + if math: + math.inputs[2].default_value = gamma + math.inputs[3].default_value = gamma + math.inputs[4].default_value = gamma + else: + mod.math_r_val = gamma + mod.math_g_val = gamma + mod.math_b_val = gamma + + # Move modifier to the first index + if len(layer.modifiers) > 1: + for i in reversed(range(len(layer.modifiers))): + if i == 0: break + index = i + new_index = i-1 + layer.modifiers.move(index, new_index) + swap_modifier_fcurves(layer, index, new_index) + + check_layer_image_linear_node(layer) + + reconnect_layer_nodes(layer) + rearrange_layer_nodes(layer) + + print('INFO: Gamma modifier added to \''+image.name+'\' layer') # SECTION II: Updates based on the blender version From b61e1c111c069013177028143af7ae8914fd5841 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 16 May 2025 19:22:06 +0700 Subject: [PATCH 158/283] Versioning: Do not add gamma modifier on image layer which used as normal map --- versioning.py | 70 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/versioning.py b/versioning.py index f6214092..7a07ed6c 100644 --- a/versioning.py +++ b/versioning.py @@ -873,35 +873,47 @@ def update_yp_tree(tree): if source and source.image: image = source.image if not is_image_source_srgb(image, source): - mod = Modifier.add_new_modifier(layer, 'MATH') - mod.math_meth = 'POWER' - mod_tree = get_mod_tree(mod) - math = mod_tree.nodes.get(mod.math) - gamma = 2.2 - if math: - math.inputs[2].default_value = gamma - math.inputs[3].default_value = gamma - math.inputs[4].default_value = gamma - else: - mod.math_r_val = gamma - mod.math_g_val = gamma - mod.math_b_val = gamma - - # Move modifier to the first index - if len(layer.modifiers) > 1: - for i in reversed(range(len(layer.modifiers))): - if i == 0: break - index = i - new_index = i-1 - layer.modifiers.move(index, new_index) - swap_modifier_fcurves(layer, index, new_index) - - check_layer_image_linear_node(layer) - - reconnect_layer_nodes(layer) - rearrange_layer_nodes(layer) - - print('INFO: Gamma modifier added to \''+image.name+'\' layer') + + # Check if layer is used as normal map + used_as_normal_map = False + for i, ch in enumerate(layer.channels): + if not ch.enable: continue + root_ch = yp.channels[i] + if root_ch.type == 'NORMAL' and ((ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'} and not ch.override_1) or ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP'): + used_as_normal_map = True + break + + # Do not add gamma modifier if layer is used as normal map + if not used_as_normal_map: + mod = Modifier.add_new_modifier(layer, 'MATH') + mod.math_meth = 'POWER' + mod_tree = get_mod_tree(mod) + math = mod_tree.nodes.get(mod.math) + gamma = 2.2 + if math: + math.inputs[2].default_value = gamma + math.inputs[3].default_value = gamma + math.inputs[4].default_value = gamma + else: + mod.math_r_val = gamma + mod.math_g_val = gamma + mod.math_b_val = gamma + + # Move modifier to the first index + if len(layer.modifiers) > 1: + for i in reversed(range(len(layer.modifiers))): + if i == 0: break + index = i + new_index = i-1 + layer.modifiers.move(index, new_index) + swap_modifier_fcurves(layer, index, new_index) + + check_layer_image_linear_node(layer) + + reconnect_layer_nodes(layer) + rearrange_layer_nodes(layer) + + print('INFO: Gamma modifier added to \''+image.name+'\' layer') # SECTION II: Updates based on the blender version From d4fe5940ad0fe98852c14eb7209348bdbeaf13f7 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 17 May 2025 01:21:48 +0700 Subject: [PATCH 159/283] Versioning: Update all node linear nodes since the gamma pipeline got refactored --- versioning.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/versioning.py b/versioning.py index 7a07ed6c..0a7eba56 100644 --- a/versioning.py +++ b/versioning.py @@ -908,13 +908,11 @@ def update_yp_tree(tree): layer.modifiers.move(index, new_index) swap_modifier_fcurves(layer, index, new_index) - check_layer_image_linear_node(layer) - - reconnect_layer_nodes(layer) - rearrange_layer_nodes(layer) - print('INFO: Gamma modifier added to \''+image.name+'\' layer') + # Update linear nodes since it gets refactored + check_yp_linear_nodes(yp, reconnect=True) + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 08ef030af0effdc6d69ae141b1036c4c46c0fe87 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 17 May 2025 15:23:19 +0700 Subject: [PATCH 160/283] Fix regression: Image editor on UV Editing window sometimes won't update based on newly selected layer --- Root.py | 17 +++++++++++------ common.py | 53 +++++++++++++++++++++++++++++++++++------------------ 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/Root.py b/Root.py index 917ea4d5..f95f8edd 100644 --- a/Root.py +++ b/Root.py @@ -4076,6 +4076,7 @@ class YPaintWMProps(bpy.types.PropertyGroup): all_icons_loaded : BoolProperty(default=False) + edit_image_editor_window_index : IntProperty(default=-1) edit_image_editor_area_index : IntProperty(default=-1) custom_srgb_name : StringProperty(default='') @@ -4092,6 +4093,7 @@ class YPaintWMProps(bpy.types.PropertyGroup): clipboard_bake_target : CollectionProperty(type=BakeTarget.YBakeTarget) image_editor_dict : StringProperty(default='') + image_editor_pins : StringProperty(default='') class YPaintSceneProps(bpy.types.PropertyGroup): ori_display_device : StringProperty(default='') @@ -4188,8 +4190,9 @@ def ypaint_last_object_update(scene): # HACK: Remember original image editor images before entering texture paint mode if yp and obj.type == 'MESH' and obj.mode != 'TEXTURE_PAINT': - editor_images = get_editor_images_dict() + editor_images, editor_pins = get_editor_images_dict(return_pins=True) ypwm.image_editor_dict = str(editor_images) + ypwm.image_editor_pins = str(editor_pins) if obj.type == 'MESH' and ypwm.last_object == obj.name and ypwm.last_mode != obj.mode: @@ -4199,7 +4202,8 @@ def ypaint_last_object_update(scene): if yp and obj.mode == 'TEXTURE_PAINT' and ypwm.image_editor_dict != '': import ast editor_images = ast.literal_eval(ypwm.image_editor_dict) - set_editor_images(editor_images) + editor_pins = ast.literal_eval(ypwm.image_editor_pins) if ypwm.image_editor_pins != '' else {} + set_editor_images(editor_images, editor_pins) ypwm.last_mode = obj.mode if yp and len(yp.layers) > 0: @@ -4230,8 +4234,9 @@ def ypaint_last_object_update(scene): if obj.mode == 'EDIT' and ypwm.last_mode != 'EDIT': ypwm.last_mode = obj.mode # Remember the space - space, area_index = get_first_unpinned_image_editor_space(bpy.context, return_index=True) - if space and area_index != -1: + space, window_index, area_index = get_first_unpinned_image_editor_space(bpy.context, return_index=True) + if space and area_index != -1 and window_index != -1: + ypwm.edit_image_editor_window_index = window_index ypwm.edit_image_editor_area_index = area_index # Trigger updating active index to update image @@ -4279,7 +4284,7 @@ def ypaint_missmatch_paint_slot_hack(scene): if img.name == correct_img.name: # HACK: Remember all original images in all image editors since setting canvas/paint slot will replace all of them - ori_editor_imgs = get_editor_images_dict() + ori_editor_imgs, ori_editor_pins = get_editor_images_dict(return_pins=True) success = False try: @@ -4288,7 +4293,7 @@ def ypaint_missmatch_paint_slot_hack(scene): except: print('EXCEPTIION: Cannot set active paint slot image!') # HACK: Revert back to original editor images - if success: set_editor_images(ori_editor_imgs) + if success: set_editor_images(ori_editor_imgs, ori_editor_pins) break diff --git a/common.py b/common.py index c73d224e..b25c618d 100644 --- a/common.py +++ b/common.py @@ -1169,27 +1169,33 @@ def update_image_editor_image(context, image): def get_edit_image_editor_space(context): ypwm = context.window_manager.ypprops area_index = ypwm.edit_image_editor_area_index - if area_index >= 0 and area_index < len(context.screen.areas): - area = context.screen.areas[area_index] - if area.type == 'IMAGE_EDITOR': - return area.spaces[0] + window_index = ypwm.edit_image_editor_window_index + if window_index >= 0 and window_index < len(context.window_manager.windows): + window = context.window_manager.windows[window_index] + if area_index >= 0 and area_index < len(window.screen.areas): + area = window.screen.areas[area_index] + if area.type == 'IMAGE_EDITOR' and (not is_bl_newer_than(2, 80) or area.spaces[0].mode == 'UV'): + return area.spaces[0] return None -def get_first_unpinned_image_editor_space(context, return_index=False): +def get_first_unpinned_image_editor_space(context, return_index=False, uv_edit=False): space = None - index = -1 + area_index = -1 + window_index = -1 for i, window in enumerate(context.window_manager.windows): for j, area in enumerate(window.screen.areas): if area.type == 'IMAGE_EDITOR': - img = area.spaces[0].image - if not area.spaces[0].use_image_pin and (not img or img.type not in {'RENDER_RESULT', 'COMPOSITING'}): - space = area.spaces[0] - index = j - break + if not uv_edit or not is_bl_newer_than(2, 80) or area.spaces[0].mode == 'UV': + img = area.spaces[0].image + if not area.spaces[0].use_image_pin and (not img or img.type not in {'RENDER_RESULT', 'COMPOSITING'}): + space = area.spaces[0] + window_index = i + area_index = j + break if return_index: - return space, index + return space, window_index, area_index return space @@ -1214,7 +1220,7 @@ def safely_set_image_paint_canvas(image, scene=None): if not scene: scene = bpy.context.scene # HACK: Remember all original images in all image editors since setting canvas/paint slot will replace all of them - ori_editor_imgs = get_editor_images_dict() + ori_editor_imgs, ori_editor_pins = get_editor_images_dict(return_pins=True) try: scene.tool_settings.image_paint.canvas = image @@ -1222,7 +1228,7 @@ def safely_set_image_paint_canvas(image, scene=None): except Exception as e: print(e) # HACK: Revert back to original editor images - if success: set_editor_images(ori_editor_imgs) + if success: set_editor_images(ori_editor_imgs, ori_editor_pins) def set_image_paint_canvas(image): scene = bpy.context.scene @@ -4759,25 +4765,33 @@ def get_relevant_uv(obj, yp): return uv_name -def get_editor_images_dict(): +def get_editor_images_dict(return_pins=False): editor_images = {} + editor_pins = {} for i, window in enumerate(bpy.context.window_manager.windows): screen_dict = {} + screen_pin_dict = {} for j, area in enumerate(window.screen.areas): if area.type == 'IMAGE_EDITOR': space = area.spaces[0] img = space.image if img: screen_dict[j] = img.name else: screen_dict[j] = '' + screen_pin_dict[j] = space.use_image_pin editor_images[i] = screen_dict + editor_pins[i] = screen_pin_dict + + if return_pins: + return editor_images, editor_pins return editor_images -def set_editor_images(editor_images={}): +def set_editor_images(editor_images={}, editor_pins={}): for i, window in enumerate(bpy.context.window_manager.windows): if i in editor_images: screen_dict = editor_images[i] + screen_pin_dict = editor_pins[i] if len(editor_pins) > 0 else None for j, area in enumerate(window.screen.areas): if area.type == 'IMAGE_EDITOR': if j in screen_dict: @@ -4786,6 +4800,9 @@ def set_editor_images(editor_images={}): if space.image != img: space.image = img + if screen_pin_dict != None and j in screen_pin_dict: + space.use_image_pin = screen_pin_dict[j] + def set_active_paint_slot_entity(yp): image = None mat = get_active_material() @@ -4918,7 +4935,7 @@ def set_active_paint_slot_entity(yp): # HACK: Remember all original images in all image editors since setting canvas/paint slot will replace all of them - ori_editor_imgs = get_editor_images_dict() + ori_editor_imgs, ori_editor_pins = get_editor_images_dict(return_pins=True) if not is_multiple_mats and image and is_bl_newer_than(2, 81): @@ -4937,7 +4954,7 @@ def set_active_paint_slot_entity(yp): scene.tool_settings.image_paint.canvas = image # HACK: Revert back to original editor images - set_editor_images(ori_editor_imgs) + set_editor_images(ori_editor_imgs, ori_editor_pins) update_image_editor_image(bpy.context, image) From 159b3a6a9c31575d1c0b39746d3e00d7a61cb3b9 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 17 May 2025 15:38:52 +0700 Subject: [PATCH 161/283] Versioning: Add `try except` when adding new modifier since it can cause some error on linked blend files --- versioning.py | 55 +++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/versioning.py b/versioning.py index 0a7eba56..8e0976bf 100644 --- a/versioning.py +++ b/versioning.py @@ -885,30 +885,37 @@ def update_yp_tree(tree): # Do not add gamma modifier if layer is used as normal map if not used_as_normal_map: - mod = Modifier.add_new_modifier(layer, 'MATH') - mod.math_meth = 'POWER' - mod_tree = get_mod_tree(mod) - math = mod_tree.nodes.get(mod.math) - gamma = 2.2 - if math: - math.inputs[2].default_value = gamma - math.inputs[3].default_value = gamma - math.inputs[4].default_value = gamma - else: - mod.math_r_val = gamma - mod.math_g_val = gamma - mod.math_b_val = gamma - - # Move modifier to the first index - if len(layer.modifiers) > 1: - for i in reversed(range(len(layer.modifiers))): - if i == 0: break - index = i - new_index = i-1 - layer.modifiers.move(index, new_index) - swap_modifier_fcurves(layer, index, new_index) - - print('INFO: Gamma modifier added to \''+image.name+'\' layer') + + # In some cases (like in linked blend file context), adding new data is causing an error + try: mod = Modifier.add_new_modifier(layer, 'MATH') + except Exception as e: + mod = None + print('EXCEPTIION:', e) + + if mod: + mod.math_meth = 'POWER' + mod_tree = get_mod_tree(mod) + math = mod_tree.nodes.get(mod.math) + gamma = 2.2 + if math: + math.inputs[2].default_value = gamma + math.inputs[3].default_value = gamma + math.inputs[4].default_value = gamma + else: + mod.math_r_val = gamma + mod.math_g_val = gamma + mod.math_b_val = gamma + + # Move modifier to the first index + if len(layer.modifiers) > 1: + for i in reversed(range(len(layer.modifiers))): + if i == 0: break + index = i + new_index = i-1 + layer.modifiers.move(index, new_index) + swap_modifier_fcurves(layer, index, new_index) + + print('INFO: Gamma modifier added to \''+image.name+'\' layer') # Update linear nodes since it gets refactored check_yp_linear_nodes(yp, reconnect=True) From 1a3bf914b330b0a3e442e908c0e24b08f05908fd Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 17 May 2025 21:33:33 +0700 Subject: [PATCH 162/283] Update contributor link --- ui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.py b/ui.py index 75813e91..94cbbae9 100644 --- a/ui.py +++ b/ui.py @@ -5317,7 +5317,7 @@ def draw_ypaint_about(self, context): col.operator('wm.url_open', text='kareemov03', icon=icon_name).url = 'https://www.artstation.com/kareem' col.operator('wm.url_open', text='passivestar', icon=icon_name).url = 'https://github.com/passivestar' col.operator('wm.url_open', text='bappity', icon=icon_name).url = 'https://github.com/bappitybup' - col.operator('wm.url_open', text='bittie', icon=icon_name).url = 'https://github.com/BittieDev' + col.operator('wm.url_open', text='bittie', icon=icon_name).url = 'https://github.com/BittieByte' col.separator() col.label(text='Documentation:') From ed3af7305b0976a01b8c7dab747cacc765f6a4dc Mon Sep 17 00:00:00 2001 From: ucupumar Date: Sun, 18 May 2025 21:22:18 +0700 Subject: [PATCH 163/283] Fix: Paste vertex color layer/mask to non-mesh object is causing error --- Layer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Layer.py b/Layer.py index e3dfdda1..c6151bf1 100644 --- a/Layer.py +++ b/Layer.py @@ -4944,8 +4944,8 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= # Duplicate vertex color for obj in objs: vcols = get_vertex_colors(obj) - vcol = vcols.get(vcol_name) - if vcol: + if vcol_name in vcols: + vcol = vcols.get(vcol_name) new_vcol = new_vertex_color(obj, new_vcol_name, vcol.data_type, vcol.domain) if duplicate_blank: if vcol_user_types[i] == 'LAYER': From 6e1942582ef27d4a2f746c92c7c33beeacbffb0b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 18 May 2025 22:00:28 +0700 Subject: [PATCH 164/283] Fix: Pasting bakeable layers to non mesh object can cause error --- bake_common.py | 18 ++++++++++++------ ui.py | 12 +++++++----- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/bake_common.py b/bake_common.py index de68c8ea..a34de3d6 100644 --- a/bake_common.py +++ b/bake_common.py @@ -2312,15 +2312,20 @@ def disable_temp_bake(entity): # Set entity attribute entity.use_temp_bake = False +def is_object_bakeable(obj): + if obj.type != 'MESH': return False + if hasattr(obj, 'hide_viewport') and obj.hide_viewport: return False + if len(get_uv_layers(obj)) == 0: return False + if len(obj.data.polygons) == 0: return False + + return True + def get_bakeable_objects_and_meshes(mat, cage_object=None): objs = [] meshes = [] for ob in get_scene_objects(): - if ob.type != 'MESH': continue - if hasattr(ob, 'hide_viewport') and ob.hide_viewport: continue - if len(get_uv_layers(ob)) == 0: continue - if len(ob.data.polygons) == 0: continue + if not is_object_bakeable(ob): continue if cage_object and cage_object == ob: continue # Do not bake objects with hide_render on @@ -2387,7 +2392,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): rdict['message'] = "Invalid cage object, the cage mesh must have the same number of faces as the active object!" return rdict - objs = [obj] + objs = [obj] if is_object_bakeable(obj) else [] if mat.users > 1: objs, meshes = get_bakeable_objects_and_meshes(mat, cage_object) @@ -3631,7 +3636,8 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): yp = entity.id_data.yp mat = get_active_material() - objs = [bpy.context.object] + obj = bpy.context.object + objs = [obj] if is_object_bakeable(obj) else [] if mat.users > 1: objs, _ = get_bakeable_objects_and_meshes(mat) diff --git a/ui.py b/ui.py index 94cbbae9..af589d97 100644 --- a/ui.py +++ b/ui.py @@ -1752,7 +1752,7 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i is_using_image_atlas = image and (image.yia.is_image_atlas or image.yua.is_udim_atlas) - if layer.texcoord_type == 'UV': + if is_a_mesh and layer.texcoord_type == 'UV': rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') rrow.label(text='UV Map:') @@ -3028,10 +3028,12 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rrow = srow.row(align=True) if mask.texcoord_type == 'UV' and not maskui.expand_vector: - rrrow = split_layout(rrow, 0.35, align=True) - rrrow.prop(mask, 'texcoord_type', text='') - if not maskui.expand_vector: + if obj.type == 'MESH': + rrrow = split_layout(rrow, 0.35, align=True) + rrrow.prop(mask, 'texcoord_type', text='') rrrow.prop_search(mask, "uv_name", obj.data, "uv_layers", text='', icon='GROUP_UVS') + else: + rrow.prop(mask, 'texcoord_type', text='') #rrow.context_pointer_set('mask', mask) #icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' @@ -3064,7 +3066,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): splits.label(text='Projection Blend:') splits.prop(mask_src, 'projection_blend', text='') - if mask.texcoord_type == 'UV': + if mask.texcoord_type == 'UV' and obj.type == 'MESH': rrow = boxcol.row(align=True) rrow.label(text='UV Map:') rrrow = rrow.row(align=True) From 385579cd1a9119a9787400407a141b9095410ff4 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 19 May 2025 14:58:47 +0700 Subject: [PATCH 165/283] Set default displacement mode to both displacement and bump for better cycles compatibility --- Bake.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Bake.py b/Bake.py index 6efaa3d4..5f732067 100644 --- a/Bake.py +++ b/Bake.py @@ -3630,13 +3630,13 @@ def check_subdiv_setup(height_ch): # Set displacement mode if hasattr(mat, 'displacement_method'): - #mat.displacement_method = 'BOTH' - mat.displacement_method = 'DISPLACEMENT' + mat.displacement_method = 'BOTH' - if is_bl_newer_than(2, 80): - #mat.cycles.displacement_method = 'BOTH' - mat.cycles.displacement_method = 'DISPLACEMENT' - else: mat.cycles.displacement_method = 'TRUE' + # Set cycles displacement mode + if hasattr(mat.cycles, 'displacement_method'): + if is_bl_newer_than(2, 80): + mat.cycles.displacement_method = 'BOTH' + else: mat.cycles.displacement_method = 'TRUE' # Displacement method is inside object data for Blender 2.77 and below if not is_bl_newer_than(2, 78): From fb70f0a46a29202bfe6ab2eee598c61abf062cf8 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 19 May 2025 15:47:37 +0700 Subject: [PATCH 166/283] Make `Toggle Eraser` button red when the active brush is an eraser --- ui.py | 11 +++++++++++ vcol_editor.py | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ui.py b/ui.py index af589d97..75572945 100644 --- a/ui.py +++ b/ui.py @@ -3781,12 +3781,16 @@ def draw_layers_ui(context, layout, node): elif obj.mode == 'VERTEX_PAINT' and is_bl_newer_than(2, 92) and ((layer.type == 'VCOL' and not mask_vcol) or (mask_vcol and mask.source_input == 'ALPHA')) and not override_vcol: bbox = col.box() row = bbox.row(align=True) + brush = context.tool_settings.vertex_paint.brush + row.alert = brush.name == eraser_names['VERTEX_PAINT'] row.operator('paint.y_toggle_eraser', text='Toggle Eraser') elif obj.mode == 'SCULPT' and is_bl_newer_than(3, 2) and ((layer.type == 'VCOL' and not mask_vcol) or (mask_vcol and mask.source_input == 'ALPHA')) and not override_vcol: bbox = col.box() row = bbox.row(align=True) + brush = context.tool_settings.sculpt.brush + row.alert = brush.name == eraser_names['SCULPT'] row.operator('paint.y_toggle_eraser', text='Toggle Eraser') # Only works with experimental sculpt texture paint is turned on @@ -3804,11 +3808,18 @@ def draw_layers_ui(context, layout, node): if brush and brush.image_tool != 'MASK': bbox = col.box() row = bbox.row(align=True) + row.alert = brush.name in tex_eraser_asset_names row.operator('paint.y_toggle_eraser', text='Toggle Eraser') elif in_texture_paint_mode or in_sculpt_texture_paint_mode: bbox = col.box() row = bbox.row(align=True) + if in_texture_paint_mode: + brush = context.tool_settings.image_paint.brush + row.alert = brush.name == eraser_names['TEXTURE_PAINT'] + elif in_sculpt_texture_paint_mode: + brush = context.tool_settings.sculpt.brush + row.alert = brush.name == eraser_names['SCULPT'] row.operator('paint.y_toggle_eraser', text='Toggle Eraser') ve = context.scene.ve_edit diff --git a/vcol_editor.py b/vcol_editor.py index 7f08517b..3e16343e 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -194,7 +194,9 @@ def execute(self, context): # Get original brush name else: - new_brush_name = ve.ori_texpaint_brush + if ve.ori_texpaint_brush != '': + new_brush_name = ve.ori_texpaint_brush + else: new_brush_name = 'Paint Soft' # Toggle 'Erase Alpha' if new brush is the same if brush.name == new_brush_name: From 3c678d8b9de3cad6efee7a5173da2802e7df0552 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 19 May 2025 16:19:53 +0700 Subject: [PATCH 167/283] Rename `Toggle Eraser` button label to `Disable Eraser` if eraser brush is active --- Root.py | 2 +- ui.py | 33 ++++++++++++++++++++++++--------- vcol_editor.py | 38 ++++++++++++++++++++++---------------- 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/Root.py b/Root.py index f95f8edd..236561fa 100644 --- a/Root.py +++ b/Root.py @@ -4222,7 +4222,7 @@ def ypaint_last_object_update(scene): except: print('EXCEPTIION: Cannot remember original mirror offset!') # HACK: Just in case active image is not correct - ypwm.correct_paint_image_name = image.name + if image: ypwm.correct_paint_image_name = image.name # Set image editor image update_image_editor_image(bpy.context, image) diff --git a/ui.py b/ui.py index 75572945..93efe3c4 100644 --- a/ui.py +++ b/ui.py @@ -3782,16 +3782,22 @@ def draw_layers_ui(context, layout, node): bbox = col.box() row = bbox.row(align=True) brush = context.tool_settings.vertex_paint.brush - row.alert = brush.name == eraser_names['VERTEX_PAINT'] - row.operator('paint.y_toggle_eraser', text='Toggle Eraser') + label = 'Toggle Eraser' + if brush.name == eraser_names['VERTEX_PAINT']: + row.alert = True + label = 'Disable Eraser' + row.operator('paint.y_toggle_eraser', text=label) elif obj.mode == 'SCULPT' and is_bl_newer_than(3, 2) and ((layer.type == 'VCOL' and not mask_vcol) or (mask_vcol and mask.source_input == 'ALPHA')) and not override_vcol: bbox = col.box() row = bbox.row(align=True) brush = context.tool_settings.sculpt.brush - row.alert = brush.name == eraser_names['SCULPT'] - row.operator('paint.y_toggle_eraser', text='Toggle Eraser') + label = 'Toggle Eraser' + if brush.name == eraser_names['SCULPT']: + row.alert = True + label = 'Disable Eraser' + row.operator('paint.y_toggle_eraser', text=label) # Only works with experimental sculpt texture paint is turned on in_sculpt_texture_paint_mode = obj.mode == 'SCULPT' and ( @@ -3808,19 +3814,28 @@ def draw_layers_ui(context, layout, node): if brush and brush.image_tool != 'MASK': bbox = col.box() row = bbox.row(align=True) - row.alert = brush.name in tex_eraser_asset_names - row.operator('paint.y_toggle_eraser', text='Toggle Eraser') + label = 'Toggle Eraser' + if brush.name in tex_eraser_asset_names: + row.alert = True + label = 'Disable Eraser' + row.operator('paint.y_toggle_eraser', text=label) elif in_texture_paint_mode or in_sculpt_texture_paint_mode: bbox = col.box() row = bbox.row(align=True) if in_texture_paint_mode: brush = context.tool_settings.image_paint.brush - row.alert = brush.name == eraser_names['TEXTURE_PAINT'] + label = 'Toggle Eraser' + if brush.name == eraser_names['TEXTURE_PAINT']: + row.alert = True + label = 'Disable Eraser' elif in_sculpt_texture_paint_mode: brush = context.tool_settings.sculpt.brush - row.alert = brush.name == eraser_names['SCULPT'] - row.operator('paint.y_toggle_eraser', text='Toggle Eraser') + label = 'Toggle Eraser' + if brush.name == eraser_names['SCULPT']: + row.alert = True + label = 'Disable Eraser' + row.operator('paint.y_toggle_eraser', text=label) ve = context.scene.ve_edit if is_bl_newer_than(4, 3) and in_texture_paint_mode: diff --git a/vcol_editor.py b/vcol_editor.py index 3e16343e..d229dde2 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -32,19 +32,29 @@ def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): wmyp = bpy.context.window_manager.ypprops + # Get essential asset identifier path + essential_asset_prefix = "brushes\\essentials_brushes-mesh_" + mode_type = '' + if mode == 'TEXTURE_PAINT': mode_type = 'texture' + elif mode == 'VERTEX_PAINT': mode_type = 'vertex' + elif mode == 'SCULPT': mode_type = 'sculpt' + essential_asset_identifier = essential_asset_prefix + mode_type + ".blend" + # Check asset brush caches first bac = wmyp.brush_asset_caches.get(brush_name) if bac: blend_path = bac.blend_path - if blend_path != '': blend_path += os.sep - try: - bpy.ops.brush.asset_activate( - asset_library_type = bac.library_type, - asset_library_identifier = bac.library_name, - relative_asset_identifier = blend_path + "Brush\\" + brush_name - ) - return - except Exception as e: print(e) + # Only try to activate the brush cache if it's not essential asset or essential assets with correct mode + if not blend_path.startswith(essential_asset_prefix) or blend_path.startswith(essential_asset_identifier): + if blend_path != '': blend_path += os.sep + try: + bpy.ops.brush.asset_activate( + asset_library_type = bac.library_type, + asset_library_identifier = bac.library_name, + relative_asset_identifier = blend_path + "Brush\\" + brush_name + ) + return + except Exception as e: print('EXCEPTIION:', e) # Try local try: @@ -62,18 +72,14 @@ def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): bac.blend_path = '' return - except Exception as e: print(e) + except Exception as e: print('EXCEPTIION:', e) # Try essential - if mode == 'TEXTURE_PAINT': mode_type = 'texture' - elif mode == 'VERTEX_PAINT': mode_type = 'vertex' - elif mode == 'SCULPT': mode_type = 'sculpt' try: - asset_identifier = "brushes\\essentials_brushes-mesh_" + mode_type + ".blend" bpy.ops.brush.asset_activate( asset_library_type = 'ESSENTIALS', asset_library_identifier = "", - relative_asset_identifier = asset_identifier + "\\Brush\\" + brush_name + relative_asset_identifier = essential_asset_identifier + "\\Brush\\" + brush_name ) # Set up the cache for faster loading next time @@ -81,7 +87,7 @@ def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): bac.name = brush_name bac.library_type = 'ESSENTIALS' bac.library_name = '' - bac.blend_path = asset_identifier + bac.blend_path = essential_asset_identifier return except Exception as e: print(e) From eca759ce9189a99bb38d986d023f7ef717a517f8 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 19 May 2025 23:26:56 +0700 Subject: [PATCH 168/283] Cyclic file imports is causing error while rebaking images at paste layer operator. So a special operator is created just to get around that. Some refactors are needed to avoid this issue. --- BakeToLayer.py | 33 +++++++++++++++++++++++++++++++++ Layer.py | 13 ++++++++++--- Root.py | 4 +++- bake_common.py | 18 ++++++++++++++++-- 4 files changed, 62 insertions(+), 6 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index c644c8e7..bc299698 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1355,6 +1355,37 @@ def execute(self, context): print('REBAKE ALL IMAGES: Rebaking all images is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') return {'FINISHED'} +class YRebakeSpecificLayers(bpy.types.Operator, BaseBakeOperator): + bl_idname = "wm.y_rebake_specific_layers" + bl_label = "Rebake Specific Layers" + bl_description = "Rebake specific layers (FOR INTERNAL USE ONLY)" + bl_options = {'REGISTER'} + + layer_ids : StringProperty( + name = 'Layer Indices', + description = 'Layer indices in form of list of integer converted to string', + default='' + ) + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() and context.object.type == 'MESH' + + def execute(self, context): + T = time.time() + node = get_active_ypaint_node() + yp = node.node_tree.yp + + layers = [] + if self.layer_ids != '': + import ast + ids = ast.literal_eval(self.layer_ids) + layers = [l for i, l in enumerate(yp.layers) if i in ids] + + rebake_baked_images(yp, specific_layers=layers) + + return {'FINISHED'} + def register(): bpy.utils.register_class(YBakeToLayer) bpy.utils.register_class(YBakeEntityToImage) @@ -1362,6 +1393,7 @@ def register(): bpy.utils.register_class(YTryToSelectBakedVertexSelect) bpy.utils.register_class(YRemoveBakedEntity) bpy.utils.register_class(YRebakeBakedImages) + bpy.utils.register_class(YRebakeSpecificLayers) def unregister(): bpy.utils.unregister_class(YBakeToLayer) @@ -1370,3 +1402,4 @@ def unregister(): bpy.utils.unregister_class(YTryToSelectBakedVertexSelect) bpy.utils.unregister_class(YRemoveBakedEntity) bpy.utils.unregister_class(YRebakeBakedImages) + bpy.utils.unregister_class(YRebakeSpecificLayers) diff --git a/Layer.py b/Layer.py index c6151bf1..92a8a763 100644 --- a/Layer.py +++ b/Layer.py @@ -3,7 +3,7 @@ from bpy_extras.io_utils import ImportHelper from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem from .common import * -from .bake_common import * +#from . import bake_common from .node_arrangements import * from .node_connections import * from .subtree import * @@ -5608,8 +5608,15 @@ def execute(self, context): # Rebake baked images if self.any_baked and self.rebake_bakeds: - pasted_layers = [l for l in yp.layers if l.name in pasted_layer_names] - rebake_baked_images(yp, specific_layers=pasted_layers) + + # NOTE: Calling rebake function directly is not possible yet due to cyclic file imports + #pasted_layer = [l for l in yp.layers if l.name in pasted_layer_names] + #bake_common.rebake_baked_images(yp, specific_layers=pasted_layers) + + pasted_layer_ids = [i for i, l in enumerate(yp.layers) if l.name in pasted_layer_names] + bpy.ops.wm.y_rebake_specific_layers(layer_ids=str(pasted_layer_ids)) + + # TODO: Refactor common functions for adding new data (add_new_layer, add_new_mask, etc) to avoid cyclic imports # Refresh active layer yp.active_layer_index = yp.active_layer_index diff --git a/Root.py b/Root.py index 236561fa..e762e6ca 100644 --- a/Root.py +++ b/Root.py @@ -4095,6 +4095,8 @@ class YPaintWMProps(bpy.types.PropertyGroup): image_editor_dict : StringProperty(default='') image_editor_pins : StringProperty(default='') + halt_hacks : BoolProperty(default=False) + class YPaintSceneProps(bpy.types.PropertyGroup): ori_display_device : StringProperty(default='') ori_view_transform : StringProperty(default='') @@ -4266,7 +4268,7 @@ def ypaint_last_object_update(scene): def ypaint_missmatch_paint_slot_hack(scene): # HACK: Force material active slot to update if necessary wmyp = bpy.context.window_manager.ypprops - if wmyp.correct_paint_image_name != '': + if not wmyp.halt_hacks and wmyp.correct_paint_image_name != '': if scene.tool_settings.image_paint.mode == 'MATERIAL': diff --git a/bake_common.py b/bake_common.py index a34de3d6..24f83091 100644 --- a/bake_common.py +++ b/bake_common.py @@ -453,6 +453,10 @@ def prepare_bake_settings( scene = bpy.context.scene ypui = bpy.context.window_manager.ypui + wmyp = bpy.context.window_manager.ypprops + + # Hack function on depsgraph update can cause crash, so halt it before baking + wmyp.halt_hacks = True scene.render.engine = 'CYCLES' scene.cycles.samples = samples @@ -619,8 +623,9 @@ def prepare_bake_settings( #ypui.disable_auto_temp_uv_update = True # Set to object mode - try: bpy.ops.object.mode_set(mode = 'OBJECT') - except: pass + if bpy.context.object and bpy.context.object.mode != 'OBJECT': + try: bpy.ops.object.mode_set(mode = 'OBJECT') + except: pass # Disable parallax channel if book['parallax_ch']: @@ -671,6 +676,7 @@ def recover_bake_settings(book, yp=None, recover_active_uv=False, mat=None): obj = book['obj'] uv_layers = get_uv_layers(obj) ypui = bpy.context.window_manager.ypui + wmyp = bpy.context.window_manager.ypprops scene.render.engine = book['ori_engine'] scene.cycles.samples = book['ori_samples'] @@ -858,6 +864,9 @@ def recover_bake_settings(book, yp=None, recover_active_uv=False, mat=None): #act_uv = m.node_tree.nodes.get(ACTIVE_UV_NODE) #if act_uv: m.node_tree.nodes.remove(act_uv) + # Bring back the hack functions + wmyp.halt_hacks = False + def prepare_composite_settings(res_x=1024, res_y=1024, use_hdr=False): book = {} @@ -4007,10 +4016,13 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): return rdict def rebake_baked_images(yp, specific_layers=[]): + tt = time.time() + print('INFO: Rebaking images is started...') entities, images, segment_names, segment_name_props = get_yp_entities_images_and_segments(yp, specific_layers=specific_layers) for i, image in enumerate(images): + print('INFO: Rebaking image \''+image.name+'\'...') if image.yia.is_image_atlas: segment = image.yia.segments.get(segment_names[i]) @@ -4057,6 +4069,8 @@ def rebake_baked_images(yp, specific_layers=[]): bake_entity_as_image(entity, bprops=bake_properties, set_image_to_entity=True) else: bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) + print('INFO: Rebaking images is done at ', '{:0.2f}'.format(time.time() - tt), 'seconds!') + def get_duplicated_mesh_objects(scene, objs, hide_original=False): tt = time.time() print('INFO: Duplicating mesh(es) for baking...') From 679f69a3b5ade4771997726063b9d734fe2dfd54 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 19 May 2025 23:51:34 +0700 Subject: [PATCH 169/283] Remove rebake option on paste layer on legacy blender since it doesn't work at the moment --- Layer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Layer.py b/Layer.py index 92a8a763..3da450c7 100644 --- a/Layer.py +++ b/Layer.py @@ -5396,7 +5396,7 @@ def draw(self, context): if self.any_decal: self.layout.prop(self, 'set_new_decal_position') - if self.any_baked: + if self.any_baked and is_bl_newer_than(2, 80): self.layout.prop(self, 'rebake_bakeds') if self.rebake_bakeds: @@ -5607,7 +5607,8 @@ def execute(self, context): if l: l.enable = lenable # Rebake baked images - if self.any_baked and self.rebake_bakeds: + # NOTE: Blender versions lower than 2.80 don't copy image's bake info, making rebake process useless + if self.any_baked and self.rebake_bakeds and is_bl_newer_than(2, 80): # NOTE: Calling rebake function directly is not possible yet due to cyclic file imports #pasted_layer = [l for l in yp.layers if l.name in pasted_layer_names] From e76fcf04f41174dfeedc8fced23bdfc4861b6e5e Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 20 May 2025 01:57:09 +0700 Subject: [PATCH 170/283] Vector displacement baking should also halt hack function just to be safe --- vector_displacement.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/vector_displacement.py b/vector_displacement.py index 603d348b..a4ca8b92 100644 --- a/vector_displacement.py +++ b/vector_displacement.py @@ -62,6 +62,10 @@ def _prepare_bake_settings(book, obj, uv_map='', samples=1, margin=15, bake_devi scene = bpy.context.scene ypui = bpy.context.window_manager.ypui + wmyp = bpy.context.window_manager.ypprops + + # Hack function on depsgraph update can cause crash, so halt it before baking + wmyp.halt_hacks = True scene.render.engine = 'CYCLES' scene.render.threads_mode = 'AUTO' @@ -115,6 +119,7 @@ def _recover_bake_settings(book, recover_active_uv=False): obj = book['obj'] uv_layers = obj.data.uv_layers ypui = bpy.context.window_manager.ypui + wmyp = bpy.context.window_manager.ypprops scene.render.engine = book['ori_engine'] scene.cycles.samples = book['ori_samples'] @@ -159,6 +164,9 @@ def _recover_bake_settings(book, recover_active_uv=False): uvl = uv_layers.get(book['ori_active_render_uv']) if uvl: uvl.active_render = True + # Bring back the hack functions + wmyp.halt_hacks = False + def get_offset_attributes(base, sclupted_mesh, layer_disabled_mesh=None, intensity=1.0): print('INFO: Getting offset attributes...') From 573e2303e3e7f25d5838b6661fcc66de9f07759b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 23 May 2025 00:16:16 +0700 Subject: [PATCH 171/283] Multiple brush can have the same name with different paint mode, so make sure to use correct mode when using the brush cache --- vcol_editor.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/vcol_editor.py b/vcol_editor.py index d229dde2..556dfcb9 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -41,20 +41,24 @@ def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): essential_asset_identifier = essential_asset_prefix + mode_type + ".blend" # Check asset brush caches first - bac = wmyp.brush_asset_caches.get(brush_name) + bac = None + for cache in wmyp.brush_asset_caches: + # Only get brush cache if it's not essential asset or essential assets with correct mode + if cache.name == brush_name and (not cache.blend_path.startswith(essential_asset_prefix) or cache.blend_path == essential_asset_identifier): + bac = cache + break + if bac: blend_path = bac.blend_path - # Only try to activate the brush cache if it's not essential asset or essential assets with correct mode - if not blend_path.startswith(essential_asset_prefix) or blend_path.startswith(essential_asset_identifier): - if blend_path != '': blend_path += os.sep - try: - bpy.ops.brush.asset_activate( - asset_library_type = bac.library_type, - asset_library_identifier = bac.library_name, - relative_asset_identifier = blend_path + "Brush\\" + brush_name - ) - return - except Exception as e: print('EXCEPTIION:', e) + if blend_path != '': blend_path += os.sep + try: + bpy.ops.brush.asset_activate( + asset_library_type = bac.library_type, + asset_library_identifier = bac.library_name, + relative_asset_identifier = blend_path + "Brush\\" + brush_name + ) + return + except Exception as e: print('EXCEPTIION:', e) # Try local try: From c2eabd30513b8af46679d9a937718911f40662ca Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 23 May 2025 15:22:18 +0700 Subject: [PATCH 172/283] Make transfer UV works with premultiplied float image --- Bake.py | 5 +++++ ui.py | 1 + 2 files changed, 6 insertions(+) diff --git a/Bake.py b/Bake.py index 5f732067..8b6510a8 100644 --- a/Bake.py +++ b/Bake.py @@ -115,6 +115,7 @@ def transfer_uv(objs, mat, entity, uv_map, is_entity_baked=False): temp_image.colorspace_settings.name = image.colorspace_settings.name temp_image.generated_color = col + temp_image.alpha_mode = image.alpha_mode # Create bake nodes tex = mat.node_tree.nodes.new('ShaderNodeTexImage') @@ -216,6 +217,10 @@ def transfer_uv(objs, mat, entity, uv_map, is_entity_baked=False): # Copy the result to original temp image copy_image_channel_pixels(temp_image1, temp_image, 0, 3) + # Premultiplied float image need more process + if temp_image.is_float and temp_image.alpha_mode == 'PREMUL': + multiply_image_rgb_by_alpha(temp_image) + # Swap tile again to recover if tilenum != 1001: UDIM.swap_tile(temp_image, 1001, tilenum) diff --git a/ui.py b/ui.py index 93efe3c4..dde5db8b 100644 --- a/ui.py +++ b/ui.py @@ -3074,6 +3074,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): rrrow.prop_search(mask, "uv_name", obj.data, "uv_layers", text='', icon='GROUP_UVS') icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' + rrow.context_pointer_set('entity', mask) rrow.menu("NODE_MT_y_uv_special_menu", icon=icon, text='') if mask.texcoord_type == 'Decal': From 74a36bb240039e31a71dd3d9a6418938a4052b34 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 23 May 2025 15:36:07 +0700 Subject: [PATCH 173/283] Fix regression on legacy blenders --- Bake.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Bake.py b/Bake.py index 8b6510a8..2e57ebe3 100644 --- a/Bake.py +++ b/Bake.py @@ -262,7 +262,7 @@ def transfer_uv(objs, mat, entity, uv_map, is_entity_baked=False): # HACK: Pack and refresh to update image in Blender 2.77 and lower if not is_bl_newer_than(2, 78) and (image.packed_file or image.filepath == ''): if image.is_float: - image_ops.pack_float_image(image) + image_ops.pack_float_image_27x(image) else: image.pack(as_png=True) image.reload() @@ -2770,7 +2770,7 @@ def execute(self, context): # HACK: Pack and refresh to update image in Blender 2.77 and lower if not is_bl_newer_than(2, 78) and (source.image.packed_file or source.image.filepath == ''): if source.image.is_float: - image_ops.pack_float_image(source.image) + image_ops.pack_float_image_27x(source.image) else: source.image.pack(as_png=True) source.image.reload() From 6dce6c33798bea6157d35c0338196f98253d2bff Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 23 May 2025 16:26:06 +0700 Subject: [PATCH 174/283] Fix: Wrong base color of float baked normal --- bake_common.py | 11 +++-------- common.py | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/bake_common.py b/bake_common.py index 24f83091..61398291 100644 --- a/bake_common.py +++ b/bake_common.py @@ -3041,17 +3041,12 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Base color of baked image if bprops.type == 'AO': color = [1.0, 1.0, 1.0, 1.0] - elif bprops.type in {'BEVEL_NORMAL', 'MULTIRES_NORMAL', 'OTHER_OBJECT_NORMAL', 'OBJECT_SPACE_NORMAL'}: - if bprops.hdr: - color = [0.7354, 0.7354, 1.0, 1.0] - else: - color = [0.5, 0.5, 1.0, 1.0] + elif bake_type in {'NORMAL', 'NORMALS'}: + color = [0.5, 0.5, 1.0, 1.0] elif bprops.type == 'FLOW': color = [0.5, 0.5, 0.0, 1.0] else: - if bprops.hdr: - color = [0.7354, 0.7354, 0.7354, 1.0] - else: color = [0.5, 0.5, 0.5, 1.0] + color = [0.5, 0.5, 0.5, 1.0] # Make image transparent if its baked from other objects if bprops.type.startswith('OTHER_OBJECT_'): diff --git a/common.py b/common.py index b25c618d..ee6263c6 100644 --- a/common.py +++ b/common.py @@ -6025,7 +6025,7 @@ def get_layer_channel_gamma_value(ch, layer=None, root_ch=None): return GAMMA # NOTE: Linear blending currently will only use gamma correction on normal channel - if image and is_image_source_srgb(image, source) and root_ch.type == 'NORMAL' and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP', 'VECTOR_DISPLACEMENT_MAP'}: + if not ch.override_1 and image and is_image_source_srgb(image, source) and root_ch.type == 'NORMAL' and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP', 'VECTOR_DISPLACEMENT_MAP'}: return 1.0 / GAMMA # NOTE: These two gamma correction are unused yet for simplicity and older file compatibility From ca26a76d8b69ddc9d05caaf5f5f4e97a4c04f93a Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 23 May 2025 21:20:29 +0700 Subject: [PATCH 175/283] Fix: Bake other object channels with SSAA enabled produce wrong results on Blender 4.5 --- Layer.py | 16 ++++++++-------- bake_common.py | 6 +++++- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Layer.py b/Layer.py index 3da450c7..c7aed899 100644 --- a/Layer.py +++ b/Layer.py @@ -14,16 +14,16 @@ DEFAULT_NEW_VDM_SUFFIX = ' VDM' def channel_items(self, context): - node = get_active_ypaint_node() - yp = node.node_tree.yp - items = [] - for i, ch in enumerate(yp.channels): - # Add two spaces to prevent text from being translated - text_ch_name = ch.name + ' ' - icon_name = lib.channel_custom_icon_dict[ch.type] - items.append((str(i), text_ch_name, '', lib.get_icon(icon_name), i)) + node = get_active_ypaint_node() + if node: + yp = node.node_tree.yp + for i, ch in enumerate(yp.channels): + # Add two spaces to prevent text from being translated + text_ch_name = ch.name + ' ' + icon_name = lib.channel_custom_icon_dict[ch.type] + items.append((str(i), text_ch_name, '', lib.get_icon(icon_name), i)) items.append(('-1', 'All Channels', '', lib.get_icon('channels'), len(items))) diff --git a/bake_common.py b/bake_common.py index 61398291..b1bbfb3e 100644 --- a/bake_common.py +++ b/bake_common.py @@ -3199,7 +3199,11 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Remove temp image remove_datablock(bpy.data.images, temp_img, user=tex, user_prop='image') - # Back to original size if using SSA + # HACK: On Blender 4.5, tex node can be mistakenly use previous index image as current one when resize_image is called + # Set the tex node image to None before resize_image can resolve this + tex.image = None + + # Back to original size if using SSAA if use_ssaa: image, temp_segment = resize_image( image, bprops.width, bprops.height, image.colorspace_settings.name, From a882592051ad934c994e7f0ba14fbca5bd7ac594 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 24 May 2025 17:21:02 +0700 Subject: [PATCH 176/283] Fix regression: Bake selected vertices doesn't work --- bake_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bake_common.py b/bake_common.py index b1bbfb3e..11fd97a2 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1,4 +1,4 @@ -import bpy, time, os, numpy, tempfile +import bpy, time, os, numpy, tempfile, bmesh from bpy.props import * from .common import * from .input_outputs import * From ddcba181c9395e51e8ca14e2205f48be0e881dea Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 24 May 2025 18:07:54 +0700 Subject: [PATCH 177/283] Bump up the version --- __init__.py | 2 +- blender_manifest.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/__init__.py b/__init__.py index 775bcf9e..b84ea443 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 2, 3), + "version": (2, 3, 0), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index 35539dbf..7262db5a 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.2.3" +version = "2.3.0" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " From e2d7d9fc2dd519bac0556e6353ac03a326d378f5 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 26 May 2025 13:18:32 +0700 Subject: [PATCH 178/283] Fix: `Fix Missing Data` failed to fix missing vertex color --- Root.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Root.py b/Root.py index e762e6ca..c073f2e0 100644 --- a/Root.py +++ b/Root.py @@ -2139,7 +2139,7 @@ def fix_missing_vcol(obj, name, src): if ref_vcol: vcol = new_vertex_color(obj, name, ref_vcol.data_type, ref_vcol.domain) else: vcol = new_vertex_color(obj, name) - set_source_vcol_name(src, name) + set_source_vcol_name(src, vcol.name) # Default recovered missing vcol is black set_obj_vertex_colors(obj, vcol.name, (0.0, 0.0, 0.0, 0.0)) From 798bfb42ab2066bef6c74fe30353e4fb085fc0a3 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 26 May 2025 14:14:25 +0700 Subject: [PATCH 179/283] Make sure the number of channels are the same between yp, layer, and mask. --- Mask.py | 1 - Root.py | 24 ++---------------------- input_outputs.py | 3 +++ subtree.py | 26 ++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/Mask.py b/Mask.py index 2e8419e4..74013a15 100644 --- a/Mask.py +++ b/Mask.py @@ -137,7 +137,6 @@ def add_new_mask( refresh_temp_uv(bpy.context.object, mask) for i, root_ch in enumerate(yp.channels): - ch = layer.channels[i] c = mask.channels.add() mask.blend_type = blend_type diff --git a/Root.py b/Root.py index c073f2e0..2afebee2 100644 --- a/Root.py +++ b/Root.py @@ -74,28 +74,8 @@ def check_yp_channel_nodes(yp, reconnect=False): for layer in yp.layers: layer_tree = get_tree(layer) - num_difference = len(yp.channels) - len(layer.channels) - if num_difference > 0: - for i in range(num_difference): - # Add new channel - c = layer.channels.add() - elif num_difference < 0: - for i in range(abs(num_difference)): - last_idx = len(layer.channels)-1 - # Remove layer channel - layer.channels.remove(channel_idx) - - for mask in layer.masks: - num_difference = len(yp.channels) - len(mask.channels) - if num_difference > 0: - for i in range(num_difference): - # Add new channel to mask - mc = mask.channels.add() - elif num_difference < 0: - for i in range(abs(num_difference)): - last_idx = len(mask.channels)-1 - # Remove mask channel - mask.channels.remove(channel_idx) + # Make sure the number of channels are correct + check_layer_channels_integrity(layer) # Check and set mask intensity nodes transition.check_transition_bump_influences_to_other_channels(layer, layer_tree) #, target_ch=c) diff --git a/input_outputs.py b/input_outputs.py index 2d0fd3bf..7204d1ae 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -661,6 +661,9 @@ def check_all_layer_channel_io_and_nodes(layer, tree=None, specific_ch=None, do_ #if check_uvs: # check_uv_nodes(yp) + # Make sure the number of channels are correct + check_layer_channels_integrity(layer) + # Check layer tree io check_layer_tree_ios(layer, tree, remove_props, hard_reset=hard_reset) diff --git a/subtree.py b/subtree.py index 6e697060..373a3638 100644 --- a/subtree.py +++ b/subtree.py @@ -577,6 +577,32 @@ def check_create_spread_alpha(layer, tree, root_ch, ch): return need_reconnect +def check_layer_channels_integrity(layer): + yp = layer.id_data.yp + + num_difference = len(yp.channels) - len(layer.channels) + if num_difference > 0: + for i in range(num_difference): + # Add new channel + c = layer.channels.add() + elif num_difference < 0: + for i in range(abs(num_difference)): + last_idx = len(layer.channels)-1 + # Remove layer channel + layer.channels.remove(channel_idx) + + for mask in layer.masks: + num_difference = len(yp.channels) - len(mask.channels) + if num_difference > 0: + for i in range(num_difference): + # Add new channel to mask + mc = mask.channels.add() + elif num_difference < 0: + for i in range(abs(num_difference)): + last_idx = len(mask.channels)-1 + # Remove mask channel + mask.channels.remove(channel_idx) + def check_mask_mix_nodes(layer, tree=None, specific_mask=None, specific_ch=None): yp = layer.id_data.yp From b775ac1bb8f807cdbce27d960588296dd201f8ef Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 26 May 2025 14:45:25 +0700 Subject: [PATCH 180/283] Fix: Missmatched number of mask channels isn't properly detected --- Root.py | 23 ++++++++++++++++++++++- input_outputs.py | 3 --- subtree.py | 26 -------------------------- ui.py | 12 ++++++------ 4 files changed, 28 insertions(+), 36 deletions(-) diff --git a/Root.py b/Root.py index 2afebee2..387f2be9 100644 --- a/Root.py +++ b/Root.py @@ -75,7 +75,28 @@ def check_yp_channel_nodes(yp, reconnect=False): layer_tree = get_tree(layer) # Make sure the number of channels are correct - check_layer_channels_integrity(layer) + num_difference = len(yp.channels) - len(layer.channels) + if num_difference > 0: + for i in range(num_difference): + # Add new channel + c = layer.channels.add() + elif num_difference < 0: + for i in range(abs(num_difference)): + last_idx = len(layer.channels)-1 + # Remove layer channel + layer.channels.remove(channel_idx) + + for mask in layer.masks: + num_difference = len(yp.channels) - len(mask.channels) + if num_difference > 0: + for i in range(num_difference): + # Add new channel to mask + mc = mask.channels.add() + elif num_difference < 0: + for i in range(abs(num_difference)): + last_idx = len(mask.channels)-1 + # Remove mask channel + mask.channels.remove(channel_idx) # Check and set mask intensity nodes transition.check_transition_bump_influences_to_other_channels(layer, layer_tree) #, target_ch=c) diff --git a/input_outputs.py b/input_outputs.py index 7204d1ae..2d0fd3bf 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -661,9 +661,6 @@ def check_all_layer_channel_io_and_nodes(layer, tree=None, specific_ch=None, do_ #if check_uvs: # check_uv_nodes(yp) - # Make sure the number of channels are correct - check_layer_channels_integrity(layer) - # Check layer tree io check_layer_tree_ios(layer, tree, remove_props, hard_reset=hard_reset) diff --git a/subtree.py b/subtree.py index 373a3638..6e697060 100644 --- a/subtree.py +++ b/subtree.py @@ -577,32 +577,6 @@ def check_create_spread_alpha(layer, tree, root_ch, ch): return need_reconnect -def check_layer_channels_integrity(layer): - yp = layer.id_data.yp - - num_difference = len(yp.channels) - len(layer.channels) - if num_difference > 0: - for i in range(num_difference): - # Add new channel - c = layer.channels.add() - elif num_difference < 0: - for i in range(abs(num_difference)): - last_idx = len(layer.channels)-1 - # Remove layer channel - layer.channels.remove(channel_idx) - - for mask in layer.masks: - num_difference = len(yp.channels) - len(mask.channels) - if num_difference > 0: - for i in range(num_difference): - # Add new channel to mask - mc = mask.channels.add() - elif num_difference < 0: - for i in range(abs(num_difference)): - last_idx = len(mask.channels)-1 - # Remove mask channel - mask.channels.remove(channel_idx) - def check_mask_mix_nodes(layer, tree=None, specific_mask=None, specific_ch=None): yp = layer.id_data.yp diff --git a/ui.py b/ui.py index dde5db8b..65816037 100644 --- a/ui.py +++ b/ui.py @@ -3354,14 +3354,14 @@ def draw_layers_ui(context, layout, node): channel_mismatch = True break - for mask in layer.masks: - if len(mask.channels) != num_channels: - channel_mismatch = True - break - - if channel_mismatch: + for mask in layer.masks: + if len(mask.channels) != num_channels: + channel_mismatch = True break + if channel_mismatch: + break + if channel_mismatch: row = box.row(align=True) row.alert = True From bd988fb4b7ebc0c852c849f8dc2d9a7fbe295b7a Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 29 May 2025 18:45:12 +0700 Subject: [PATCH 181/283] Fix: Rebake layer/mask to different uv map sometimes won't make the baked image use the correct uv --- subtree.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/subtree.py b/subtree.py index 6e697060..5f03a333 100644 --- a/subtree.py +++ b/subtree.py @@ -1661,6 +1661,16 @@ def check_uv_nodes(yp, generate_missings=False): if uv.name not in uv_names: uv_names.append(uv.name) + if layer.use_baked and layer.baked_uv_name != '': + uv = yp.uvs.get(layer.baked_uv_name) + if not uv: + dirty = True + uv = yp.uvs.add() + uv.name = layer.baked_uv_name + + if uv.name not in uv_names: + uv_names.append(uv.name) + for mask in layer.masks: if mask.texcoord_type == 'UV' and mask.uv_name != '': uv = yp.uvs.get(mask.uv_name) @@ -1672,6 +1682,16 @@ def check_uv_nodes(yp, generate_missings=False): if uv.name not in uv_names: uv_names.append(uv.name) + if mask.use_baked and mask.baked_uv_name != '': + uv = yp.uvs.get(mask.baked_uv_name) + if not uv: + dirty = True + uv = yp.uvs.add() + uv.name = mask.baked_uv_name + + if uv.name not in uv_names: + uv_names.append(uv.name) + # Get unused uv objects unused_uvs = [] unused_ids = [] From 5fd2e2cab303f5680aeb7bbea79e2bd60e64314b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 1 Jun 2025 18:55:05 +0700 Subject: [PATCH 182/283] Avoid directly using vertex color pointer since it can returns garbage after mode change. Closes #285 --- BakeToLayer.py | 2 +- Layer.py | 54 +++++++++++++++++++++++++++----------------------- Mask.py | 25 +++++++++++++---------- Root.py | 20 ++++++++++++------- bake_common.py | 8 +++----- common.py | 34 ++++++++++++++++++++++++++----- 6 files changed, 89 insertions(+), 54 deletions(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index bc299698..64ac8205 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1213,7 +1213,7 @@ def execute(self, context): new_entity_name = get_unique_name(self.name, self.entities) if self.use_image_atlas else image.name # Create new mask - mask = Mask.add_new_mask(self.layer, new_entity_name, 'IMAGE', 'UV', self.uv_map, image, None, segment) + mask = Mask.add_new_mask(self.layer, new_entity_name, 'IMAGE', 'UV', self.uv_map, image, '', segment) # Set mask properties mask.intensity_value = self.mask.intensity_value diff --git a/Layer.py b/Layer.py index c7aed899..184e2de9 100644 --- a/Layer.py +++ b/Layer.py @@ -213,7 +213,7 @@ def add_new_layer( #mask_name = 'Mask ' + layer.name mask_name = Mask.get_new_mask_name(obj, layer, mask_type) mask_image = None - mask_vcol = None + mask_vcol_name = '' mask_segment = None if mask_type == 'IMAGE': @@ -291,12 +291,14 @@ def add_new_layer( for o in objs: if mask_name not in get_vertex_colors(o): if not is_bl_newer_than(3, 3) and len(get_vertex_colors(o)) >= 8: continue - mask_vcol = new_vertex_color(o, mask_name, mask_vcol_data_type, mask_vcol_domain) - if mask_color == 'WHITE': - set_obj_vertex_colors(o, mask_vcol.name, (1.0, 1.0, 1.0, 1.0)) - elif mask_color == 'BLACK': - set_obj_vertex_colors(o, mask_vcol.name, (0.0, 0.0, 0.0, 1.0)) + + color = () + if mask_color == 'WHITE': color = (1.0, 1.0, 1.0, 1.0) + elif mask_color == 'BLACK': color = (0.0, 0.0, 0.0, 1.0) + + mask_vcol = new_vertex_color(o, mask_name, mask_vcol_data_type, mask_vcol_domain, color_fill=color) set_active_vertex_color(o, mask_vcol) + mask_vcol_name = mask_vcol.name # Fill selected geometry if in edit mode if mask_vcol_fill and bpy.context.mode == 'EDIT_MESH': @@ -311,7 +313,7 @@ def add_new_layer( mask = Mask.add_new_mask( layer, mask_name, mask_type, mask_texcoord_type, - mask_uv_name, mask_image, mask_vcol, mask_segment, + mask_uv_name, mask_image, mask_vcol_name, mask_segment, interpolation=mask_interpolation, color_id=mask_color_id, edge_detect_radius=mask_edge_detect_radius, hemi_use_prev_normal=mask_use_prev_normal @@ -509,8 +511,7 @@ def execute(self, context): for o in objs: if self.name not in get_vertex_colors(o): if not is_bl_newer_than(3, 3) and len(get_vertex_colors(o)) >= 8: continue - vcol = new_vertex_color(o, self.name, self.data_type, self.domain) - set_obj_vertex_colors(o, vcol.name, (1.0, 1.0, 1.0, 1.0)) + vcol = new_vertex_color(o, self.name, self.data_type, self.domain, color_fill=(1.0, 1.0, 1.0, 1.0)) set_active_vertex_color(o, vcol) # Update vcol cache @@ -1559,12 +1560,12 @@ def execute(self, context): for o in objs: if self.name not in get_vertex_colors(o): if not is_bl_newer_than(3, 3) and len(get_vertex_colors(o)) >= 8: continue - vcol = new_vertex_color(o, self.name, self.vcol_data_type, self.vcol_domain) - if is_bl_newer_than(2, 92): - set_obj_vertex_colors(o, vcol.name, (0.0, 0.0, 0.0, 0.0)) - else: set_obj_vertex_colors(o, vcol.name, (1.0, 1.0, 1.0, 1.0)) + color = (0.0, 0.0, 0.0, 0.0) + if not is_bl_newer_than(2, 92): + color = (1.0, 1.0, 1.0, 1.0) + vcol = new_vertex_color(o, self.name, self.vcol_data_type, self.vcol_domain, color_fill=color) set_active_vertex_color(o, vcol) yp.halt_update = True @@ -3300,8 +3301,7 @@ def execute(self, context): if self.vcol_name not in get_vertex_colors(o): if not is_bl_newer_than(3, 3) and len(get_vertex_colors(o)) >= 8: continue data_type, domain = get_vcol_data_type_and_domain_by_name(o, self.vcol_name, objs) - other_v = new_vertex_color(o, self.vcol_name, data_type, domain) - set_obj_vertex_colors(o, other_v.name, (0.0, 0.0, 0.0, 1.0)) + other_v = new_vertex_color(o, self.vcol_name, data_type, domain, color_fill=(0.0, 0.0, 0.0, 1.0)) set_active_vertex_color(o, other_v) # Update vcol cache @@ -3530,10 +3530,12 @@ def execute(self, context): if self.vcol_name not in get_vertex_colors(o): if not is_bl_newer_than(3, 3) and len(get_vertex_colors(o)) >= 8: continue data_type, domain = get_vcol_data_type_and_domain_by_name(o, self.vcol_name, objs) - other_v = new_vertex_color(o, self.vcol_name, data_type, domain) - if is_bl_newer_than(2, 92): - set_obj_vertex_colors(o, other_v.name, (0.0, 0.0, 0.0, 0.0)) - else: set_obj_vertex_colors(o, other_v.name, (0.0, 0.0, 0.0, 1.0)) + + color = (0.0, 0.0, 0.0, 0.0) + if not is_bl_newer_than(2, 92): + color = (0.0, 0.0, 0.0, 1.0) + other_v = new_vertex_color(o, self.vcol_name, data_type, domain, color_fill=color) + set_active_vertex_color(o, other_v) add_new_layer( @@ -4946,12 +4948,14 @@ def duplicate_layer_nodes_and_images(tree, specific_layers=[], packed_duplicate= vcols = get_vertex_colors(obj) if vcol_name in vcols: vcol = vcols.get(vcol_name) - new_vcol = new_vertex_color(obj, new_vcol_name, vcol.data_type, vcol.domain) - if duplicate_blank: - if vcol_user_types[i] == 'LAYER': - set_obj_vertex_colors(obj, new_vcol_name, (0.0, 0.0, 0.0, 0.0)) - else: set_obj_vertex_colors(obj, new_vcol_name, (0.0, 0.0, 0.0, 1.0)) - else: + + if vcol_user_types[i] == 'LAYER': + color = (0.0, 0.0, 0.0, 0.0) + else: color = (0.0, 0.0, 0.0, 1.0) + + new_vcol = new_vertex_color(obj, new_vcol_name, vcol.data_type, vcol.domain, color_fill=color) + + if not duplicate_blank: copy_vertex_color_data(obj, vcol_name, new_vcol_name) # Set new vertex color to node and user diff --git a/Mask.py b/Mask.py index 74013a15..aa110520 100644 --- a/Mask.py +++ b/Mask.py @@ -62,7 +62,7 @@ def setup_modifier_mask_source(tree, mask, modifier_type): return source def add_new_mask( - layer, name, mask_type, texcoord_type, uv_name, image=None, vcol=None, segment=None, + layer, name, mask_type, texcoord_type, uv_name, image=None, vcol_name='', segment=None, object_index=0, blend_type='MULTIPLY', hemi_space='WORLD', hemi_use_prev_normal=False, color_id=(1, 0, 1), source_input='RGB', edge_detect_radius=0.05, modifier_type='INVERT', interpolation='Linear', ao_distance=1.0 @@ -102,7 +102,7 @@ def add_new_mask( source.color_space = 'NONE' source.interpolation = interpolation elif mask_type == 'VCOL': - if vcol: set_source_vcol_name(source, vcol.name) + if vcol_name != '': set_source_vcol_name(source, vcol_name) else: set_source_vcol_name(source, name) if mask_type == 'HEMI': @@ -962,7 +962,7 @@ def execute(self, context): alpha = False img = None - vcol = None + vcol_name = '' segment = None # New image @@ -1026,12 +1026,16 @@ def execute(self, context): for o in objs: if self.name not in get_vertex_colors(o): if not is_bl_newer_than(3, 3) and len(get_vertex_colors(o)) >= 8: continue - vcol = new_vertex_color(o, self.name, self.vcol_data_type, self.vcol_domain) + + color = () if self.color_option == 'WHITE': - set_obj_vertex_colors(o, vcol.name, (1.0, 1.0, 1.0, 1.0)) + color = (1.0, 1.0, 1.0, 1.0) elif self.color_option == 'BLACK': - set_obj_vertex_colors(o, vcol.name, (0.0, 0.0, 0.0, 1.0)) + color = (0.0, 0.0, 0.0, 1.0) + + vcol = new_vertex_color(o, self.name, self.vcol_data_type, self.vcol_domain, color_fill=color) set_active_vertex_color(o, vcol) + vcol_name = vcol.name # Fill selected geometry if in edit mode if self.vcol_fill and bpy.context.mode == 'EDIT_MESH' and self.color_option == 'BLACK': @@ -1049,7 +1053,7 @@ def execute(self, context): # Add new mask mask = add_new_mask( - layer, self.name, self.type, self.texcoord_type, self.uv_name, img, vcol, segment, self.object_index, self.blend_type, + layer, self.name, self.type, self.texcoord_type, self.uv_name, img, vcol_name, segment, self.object_index, self.blend_type, self.hemi_space, self.hemi_use_prev_normal, self.color_id, source_input=source_input, edge_detect_radius=self.edge_detect_radius, modifier_type=self.modifier_type, interpolation=self.interpolation, ao_distance=self.ao_distance ) @@ -1287,7 +1291,7 @@ def execute(self, context): # Add new mask mask = add_new_mask( - layer, image.name, 'IMAGE', self.texcoord_type, self.uv_map, image, None, + layer, image.name, 'IMAGE', self.texcoord_type, self.uv_map, image, '', blend_type=self.blend_type, source_input=self.source_input, interpolation = self.interpolation ) @@ -1569,13 +1573,12 @@ def execute(self, context): if self.vcol_name not in get_vertex_colors(o): if not is_bl_newer_than(3, 3) and len(get_vertex_colors(o)) >= 8: continue data_type, domain = get_vcol_data_type_and_domain_by_name(o, self.vcol_name, objs) - other_v = new_vertex_color(o, self.vcol_name, data_type, domain) - set_obj_vertex_colors(o, other_v.name, (1.0, 1.0, 1.0, 1.0)) + other_v = new_vertex_color(o, self.vcol_name, data_type, domain, color_fill=(1.0, 1.0, 1.0, 1.0)) set_active_vertex_color(o, other_v) # Add new mask mask = add_new_mask( - layer, name, self.type, self.texcoord_type, self.uv_map, image, vcol, + layer, name, self.type, self.texcoord_type, self.uv_map, image, self.vcol_name, blend_type=self.blend_type, source_input=self.source_input, interpolation = self.interpolation ) diff --git a/Root.py b/Root.py index 387f2be9..8f2139e6 100644 --- a/Root.py +++ b/Root.py @@ -2122,7 +2122,7 @@ def execute(self, context): return {'FINISHED'} -def fix_missing_vcol(obj, name, src): +def fix_missing_vcol(obj, name, src, entity=None, entities=[]): ref_vcol = None @@ -2137,13 +2137,19 @@ def fix_missing_vcol(obj, name, src): ref_vcol = ovcols.get(name) break - if ref_vcol: vcol = new_vertex_color(obj, name, ref_vcol.data_type, ref_vcol.domain) - else: vcol = new_vertex_color(obj, name) + # Default recovered missing vcol is black + color = (0.0, 0.0, 0.0, 0.0) + + # Create missing vertex color + if ref_vcol: vcol = new_vertex_color(obj, name, ref_vcol.data_type, ref_vcol.domain, color_fill=color) + else: vcol = new_vertex_color(obj, name, color_fill=color) + # Set attribute name back to source in case the name is different set_source_vcol_name(src, vcol.name) - # Default recovered missing vcol is black - set_obj_vertex_colors(obj, vcol.name, (0.0, 0.0, 0.0, 0.0)) + # Set the name back to entity + if entity and vcol.name not in entity.name: + entity.name = get_unique_name(vcol.name, entities) def fix_missing_img(name, src, is_mask=False): img = bpy.data.images.new( @@ -2267,13 +2273,13 @@ def execute(self, context): if layer.type == 'VCOL': src = get_layer_source(layer) if not get_vcol_from_source(obj, src): - fix_missing_vcol(obj, src.attribute_name, src) + fix_missing_vcol(obj, src.attribute_name, src, entity=layer, entities=yp.layers) for mask in layer.masks: if mask.type == 'VCOL': src = get_mask_source(mask) if not get_vcol_from_source(obj, src): - fix_missing_vcol(obj, src.attribute_name, src) + fix_missing_vcol(obj, src.attribute_name, src, entity=mask, entities=layer.masks) if mask.type == 'COLOR_ID': vcols = get_vertex_colors(obj) diff --git a/bake_common.py b/bake_common.py index 11fd97a2..20f62603 100644 --- a/bake_common.py +++ b/bake_common.py @@ -2588,8 +2588,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): bpy.ops.object.mode_set(mode = 'OBJECT') for ob in objs: try: - vcol = new_vertex_color(ob, TEMP_VCOL) - set_obj_vertex_colors(ob, vcol.name, (0.0, 0.0, 0.0, 1.0)) + vcol = new_vertex_color(ob, TEMP_VCOL, color_fill=(0.0, 0.0, 0.0, 1.0)) set_active_vertex_color(ob, vcol) except: pass bpy.ops.object.mode_set(mode = 'EDIT') @@ -2696,8 +2695,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Create new vertex color for dirt try: - vcol = new_vertex_color(ob, TEMP_VCOL) - set_obj_vertex_colors(ob, vcol.name, (1.0, 1.0, 1.0, 1.0)) + vcol = new_vertex_color(ob, TEMP_VCOL, color_fill=(1.0, 1.0, 1.0, 1.0)) set_active_vertex_color(ob, vcol) except: pass @@ -3357,7 +3355,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): mask = Mask.add_new_mask( active_layer, mask_name, 'IMAGE', 'UV', bprops.uv_map, - image, None, segment + image, '', segment ) mask.active_edit = True diff --git a/common.py b/common.py index ee6263c6..aac4416e 100644 --- a/common.py +++ b/common.py @@ -762,6 +762,11 @@ def remove_datablock(blocks, block, user=None, user_prop=''): block.user_clear() blocks.remove(block) +def get_active_object(): + if is_bl_newer_than(2, 80): + return bpy.context.view_layer.objects.active + return bpy.context.scene.objects.active + def set_active_object(obj): if is_bl_newer_than(2, 80): try: bpy.context.view_layer.objects.active = obj @@ -4708,13 +4713,33 @@ def set_active_vertex_color_by_name(obj, vcol_name): vcol = vcols.get(vcol_name) if vcol: set_active_vertex_color(obj, vcol) -def new_vertex_color(obj, name, data_type='BYTE_COLOR', domain='CORNER'): +def new_vertex_color(obj, name, data_type='BYTE_COLOR', domain='CORNER', color_fill=()): if not obj or obj.type != 'MESH': return None + # Cannot add new vertex color in edit mode, so go to object mode + ori_edit_mode = False + if obj.mode == 'EDIT': + bpy.ops.object.mode_set(mode='OBJECT') + ori_edit_mode = True + + # Create new vertex color if not is_bl_newer_than(3, 2): - return obj.data.vertex_colors.new(name=name) + vcol = obj.data.vertex_colors.new(name=name) + else: vcol = obj.data.color_attributes.new(name, data_type, domain) + + vcol_name = vcol.name - return obj.data.color_attributes.new(name, data_type, domain) + # Fill color + if color_fill != (): + set_obj_vertex_colors(obj, vcol.name, color_fill) + + # Back to edit mode and get the vertex color again to avoid pointer error + if ori_edit_mode: + bpy.ops.object.mode_set(mode='EDIT') + vcols = get_vertex_colors(obj) + vcol = vcols.get(vcol_name) + + return vcol def get_active_render_uv(obj): uv_layers = get_uv_layers(obj) @@ -5931,8 +5956,7 @@ def check_colorid_vcol(objs, set_as_active=False): vcol = vcols.get(COLOR_ID_VCOL_NAME) if not vcol: try: - vcol = new_vertex_color(o, COLOR_ID_VCOL_NAME) - set_obj_vertex_colors(o, vcol.name, (0.0, 0.0, 0.0, 1.0)) + vcol = new_vertex_color(o, COLOR_ID_VCOL_NAME, color_fill=(0.0, 0.0, 0.0, 1.0)) #set_active_vertex_color(o, vcol) except Exception as e: print(e) From c6b879af7b57602bf794ceb84d0c0353d0cb5acd Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 1 Jun 2025 20:19:48 +0700 Subject: [PATCH 183/283] Use correct `Edge Detect` icon for layer. Closes #284 --- ui.py | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/ui.py b/ui.py index 65816037..f533a36b 100644 --- a/ui.py +++ b/ui.py @@ -1486,48 +1486,29 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i label = '' #label += pgettext_iface('Layer') + ': ' if image: - #if lui.expand_content: - # icon_value = lib.get_icon('uncollapsed_image') - #else: icon_value = lib.get_icon('collapsed_image') icon_value = lib.get_icon('image') if image.yia.is_image_atlas or image.yua.is_udim_atlas: label += layer.name else: label += image.name elif vcol: - #if lui.expand_content: - # icon_value = lib.get_icon('uncollapsed_vertex_color') - #else: icon_value = lib.get_icon('collapsed_vertex_color') icon_value = lib.get_icon('vertex_color') label += vcol.name elif layer.type == 'BACKGROUND': - #if lui.expand_content: - # icon_value = lib.get_icon('uncollapsed_background') - #else: icon_value = lib.get_icon('collapsed_background') icon_value = lib.get_icon('background') label += layer.name elif layer.type == 'COLOR': - #if lui.expand_content: - # icon_value = lib.get_icon('uncollapsed_color') - #else: icon_value = lib.get_icon('collapsed_color') icon_value = lib.get_icon('color') label += layer.name elif layer.type == 'GROUP': - #if lui.expand_content: - # icon_value = lib.get_icon('uncollapsed_group') - #else: icon_value = lib.get_icon('collapsed_group') icon_value = lib.get_icon('group') label += layer.name elif layer.type == 'HEMI': - #if lui.expand_content: - # icon_value = lib.get_icon('uncollapsed_hemi') - #else: icon_value = lib.get_icon('collapsed_hemi') icon_value = lib.get_icon('hemi') label += layer.name + elif layer.type in {'EDGE_DETECT', 'AO'}: + icon_value = lib.get_icon('edge_detect') + label += layer.name else: - title = source.bl_idname.replace('ShaderNodeTex', '') - #if lui.expand_content: - # icon_value = lib.get_icon('uncollapsed_texture') - #else: icon_value = lib.get_icon('collapsed_texture') icon_value = lib.get_icon('texture') label += layer.name @@ -4727,6 +4708,8 @@ def layer_listing(layout, layer, show_expand=False): row.prop(layer, 'name', text='', emboss=False, icon_value=lib.get_icon('vertex_color')) elif layer.type == 'HEMI': row.prop(layer, 'name', text='', emboss=False, icon_value=lib.get_icon('hemi')) + elif layer.type in {'EDGE_DETECT', 'AO'}: + row.prop(layer, 'name', text='', emboss=False, icon_value=lib.get_icon('edge_detect')) elif layer.type == 'COLOR': row.prop(layer, 'name', text='', emboss=False, icon='COLOR') elif layer.type == 'BACKGROUND': row.prop(layer, 'name', text='', emboss=False, icon_value=lib.get_icon('background')) @@ -4751,6 +4734,8 @@ def layer_listing(layout, layer, show_expand=False): row.prop(active_override, ae_prop, text='', emboss=False, icon='COLOR') elif layer.type == 'HEMI': row.prop(active_override, ae_prop, text='', emboss=False, icon_value=lib.get_icon('hemi')) + elif layer.type in {'EDGE_DETECT', 'AO'}: + row.prop(active_override, ae_prop, text='', emboss=False, icon_value=lib.get_icon('edge_detect')) elif layer.type == 'BACKGROUND': row.prop(active_override, ae_prop, text='', emboss=False, icon_value=lib.get_icon('background')) elif layer.type == 'GROUP': @@ -4769,6 +4754,8 @@ def layer_listing(layout, layer, show_expand=False): row.label(text='', icon='COLOR') elif layer.type == 'HEMI': row.label(text='', icon_value=lib.get_icon('hemi')) + elif layer.type in {'EDGE_DETECT', 'AO'}: + row.label(text='', icon_value=lib.get_icon('edge_detect')) elif layer.type == 'BACKGROUND': row.label(text='', icon_value=lib.get_icon('background')) elif layer.type == 'GROUP': From e65d63843e223ebf0a8b4a6856584108b6b558e1 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Mon, 2 Jun 2025 01:20:58 +0700 Subject: [PATCH 184/283] Disable preview mode when deleting channel. Closes #277 --- Root.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Root.py b/Root.py index 8f2139e6..4370c271 100644 --- a/Root.py +++ b/Root.py @@ -1483,10 +1483,13 @@ def execute(self, context): inputs = get_tree_inputs(group_tree) outputs = get_tree_outputs(group_tree) - # Disable layer preview mode to avoid error + # Disable preview mode to avoid error ori_layer_preview_mode = yp.layer_preview_mode + ori_preview_mode = yp.preview_mode if yp.layer_preview_mode: yp.layer_preview_mode = False + if yp.preview_mode: + yp.preview_mode = False # Get active channel channel_idx = yp.active_channel_index @@ -1665,6 +1668,9 @@ def execute(self, context): if ori_layer_preview_mode: yp.layer_preview_mode = True + if ori_preview_mode: + yp.preview_mode = True + # Repoint channel index #repoint_channel_index(yp) From 3123dd87a944a51a8f847eca116fca12d1778dfc Mon Sep 17 00:00:00 2001 From: ucupumar Date: Mon, 2 Jun 2025 01:55:15 +0700 Subject: [PATCH 185/283] Make sure `remove_props` is actually called. Fix #283 --- input_outputs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/input_outputs.py b/input_outputs.py index 2d0fd3bf..0a4a6ac8 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -460,7 +460,7 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= specific_ch = None if yp.layer_preview_mode and yp.active_channel_index < len(layer.channels): specific_ch = layer.channels[yp.active_channel_index] - check_all_layer_channel_io_and_nodes(layer, specific_ch=specific_ch, do_recursive=False, remove_props=False, hard_reset=hard_reset) + check_all_layer_channel_io_and_nodes(layer, specific_ch=specific_ch, do_recursive=False, remove_props=remove_props, hard_reset=hard_reset) if reconnect: # Rearrange layers @@ -662,7 +662,7 @@ def check_all_layer_channel_io_and_nodes(layer, tree=None, specific_ch=None, do_ # check_uv_nodes(yp) # Check layer tree io - check_layer_tree_ios(layer, tree, remove_props, hard_reset=hard_reset) + check_layer_tree_ios(layer, tree, remove_props=remove_props, hard_reset=hard_reset) # Check texcoord nodes check_layer_texcoord_nodes(layer, tree) From d6049d38b7c8f50bd14f992a00df4860d51cd20d Mon Sep 17 00:00:00 2001 From: ucupumar Date: Mon, 2 Jun 2025 17:03:03 +0700 Subject: [PATCH 186/283] Avoiding to use active layer pointer since it can change after creating new layer. Fix #287 --- Layer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Layer.py b/Layer.py index 184e2de9..3d1c80e4 100644 --- a/Layer.py +++ b/Layer.py @@ -81,9 +81,11 @@ def add_new_layer( # Get a possible parent layer group parent_layer = None + active_layer_is_group = False if active_layer: if active_layer.type == 'GROUP': parent_layer = active_layer + active_layer_is_group = True elif active_layer.parent_idx != -1: parent_layer = yp.layers[active_layer.parent_idx] @@ -110,7 +112,7 @@ def add_new_layer( # Move new layer to current index last_index = len(yp.layers)-1 - if active_layer and active_layer.type == 'GROUP': + if active_layer_is_group: index = yp.active_layer_index + 1 else: index = yp.active_layer_index From 3998b94a5ef2b231292aa0da300b8d241f8afb6b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 2 Jun 2025 17:13:41 +0700 Subject: [PATCH 187/283] Fix: Cannot sculpt VDM image when scene world is empty --- vector_displacement.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vector_displacement.py b/vector_displacement.py index a4ca8b92..283c2a65 100644 --- a/vector_displacement.py +++ b/vector_displacement.py @@ -44,7 +44,8 @@ def _remember_before_bake(obj): book['ori_view_transform'] = scene.view_settings.view_transform # Remember world settings - book['ori_distance'] = scene.world.light_settings.distance + if scene.world: + book['ori_distance'] = scene.world.light_settings.distance # Remember image editor images book['editor_images'] = [a.spaces[0].image for a in bpy.context.screen.areas if a.type == 'IMAGE_EDITOR'] @@ -146,7 +147,8 @@ def _recover_bake_settings(book, recover_active_uv=False): scene.render.bake_margin = book['ori_bake_margin'] # Recover world settings - scene.world.light_settings.distance = book['ori_distance'] + if scene.world: + scene.world.light_settings.distance = book['ori_distance'] # Recover image editors for i, area in enumerate([a for a in bpy.context.screen.areas if a.type == 'IMAGE_EDITOR']): From bb608b4b97eccb7b16eafb91f62188ad94aa4f25 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 3 Jun 2025 00:39:35 +0700 Subject: [PATCH 188/283] Use principled BSDF rather than diffuse BSDF for baking normal. This is because apparently pure black color can cause diffuse BSDF outputs wrong normal. --- bake_common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bake_common.py b/bake_common.py index 20f62603..2bbf9a7b 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1611,8 +1611,8 @@ def bake_channel( norm = None if root_ch.type == 'NORMAL': if is_bl_newer_than(2, 80): - # Use diffuse bsdf for Blender 2.80+ - bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfDiffuse') + # Use principled bsdf for Blender 2.80+ + bsdf = mat.node_tree.nodes.new('ShaderNodeBsdfPrincipled') else: # Use custom normal calculation for legacy blender norm = mat.node_tree.nodes.new('ShaderNodeGroup') From f42f10beb207f81d9f5761eb262f958caf659044 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 3 Jun 2025 15:41:55 +0700 Subject: [PATCH 189/283] Bump up the version --- __init__.py | 2 +- blender_manifest.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/__init__.py b/__init__.py index b84ea443..725cc52d 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 3, 0), + "version": (2, 3, 1), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index 7262db5a..2c846183 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.3.0" +version = "2.3.1" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " From ad85725babc405d712cfd98045725515c8caf2c8 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Fri, 6 Jun 2025 17:02:43 +0700 Subject: [PATCH 190/283] Add `Use Cage` option for baking from other objects (#286) --- BakeInfo.py | 6 ++++++ BakeToLayer.py | 30 ++++++++++++++++++++---------- bake_common.py | 13 ++++++------- versioning.py | 4 ++++ 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/BakeInfo.py b/BakeInfo.py index b49d5bcd..6cb25b09 100644 --- a/BakeInfo.py +++ b/BakeInfo.py @@ -128,6 +128,12 @@ class YBakeInfoProps(bpy.types.PropertyGroup): default = 'CPU' ) + use_cage : BoolProperty( + name = 'Cage Object', + description = 'Cast rays to active material objects from a cage', + default = False + ) + cage_object_name : StringProperty( name = 'Cage Object', description = 'Object to use as cage instead of calculating the cage from the active object with cage extrusion', diff --git a/BakeToLayer.py b/BakeToLayer.py index 64ac8205..aae5433f 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -160,6 +160,7 @@ def get_bake_properties_from_self(self): 'uv_map_1', 'interpolation', 'type', + 'use_cage', 'cage_object_name', 'cage_extrusion', 'max_ray_distance', @@ -237,6 +238,13 @@ class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): ) # Other objects props + + use_cage : BoolProperty( + name = 'Cage Object', + description = 'Cast rays to active material objects from a cage', + default = False + ) + cage_object_name : StringProperty( name = 'Cage Object', description = 'Object to use as cage instead of calculating the cage from the active object with cage extrusion', @@ -678,10 +686,12 @@ def draw(self, context): col.label(text='Name:') if self.type.startswith('OTHER_OBJECT_'): - col.label(text='Cage Object:') - col.label(text='Cage Extrusion:') - if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): - col.label(text='Max Ray Distance:') + col.label(text='') + if self.use_cage: + col.label(text='Cage Object:') + col.label(text='Cage Extrusion:') + if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): + col.label(text='Max Ray Distance:') elif self.type == 'AO': col.label(text='AO Distance:') col.label(text='') @@ -756,12 +766,12 @@ def draw(self, context): col.label(text=self.overwrite_name) if self.type.startswith('OTHER_OBJECT_'): - col.prop_search(self, "cage_object_name", self, "cage_object_coll", text='', icon='OBJECT_DATA') - rrow = col.row(align=True) - rrow.active = self.cage_object_name == '' - rrow.prop(self, 'cage_extrusion', text='') - if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): - col.prop(self, 'max_ray_distance', text='') + col.prop(self, 'use_cage') + if self.use_cage: + col.prop_search(self, "cage_object_name", self, "cage_object_coll", text='', icon='OBJECT_DATA') + col.prop(self, 'cage_extrusion', text='') + if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): + col.prop(self, 'max_ray_distance', text='') elif self.type == 'AO': col.prop(self, 'ao_distance', text='') col.prop(self, 'only_local') diff --git a/bake_common.py b/bake_common.py index 2bbf9a7b..2d309dec 100644 --- a/bake_common.py +++ b/bake_common.py @@ -447,7 +447,8 @@ def prepare_bake_settings( disable_problematic_modifiers=False, hide_other_objs=True, bake_from_multires=False, tile_x=64, tile_y=64, use_selected_to_active=False, max_ray_distance=0.0, cage_extrusion=0.0, bake_target = 'IMAGE_TEXTURES', - source_objs=[], bake_device='CPU', use_denoising=False, margin_type='ADJACENT_FACES', cage_object_name='', + source_objs=[], bake_device='CPU', use_denoising=False, margin_type='ADJACENT_FACES', + use_cage=False, cage_object_name='', normal_space='TANGENT', use_osl=False, ): @@ -470,7 +471,8 @@ def prepare_bake_settings( scene.render.bake.max_ray_distance = max_ray_distance scene.render.bake.cage_extrusion = cage_extrusion cage_object = bpy.data.objects.get(cage_object_name) if cage_object_name != '' else None - scene.render.bake.use_cage = True if cage_object else False + #scene.render.bake.use_cage = True if cage_object else False + scene.render.bake.use_cage = use_cage if cage_object: if is_bl_newer_than(2, 80): scene.render.bake.cage_object = cage_object else: scene.render.bake.cage_object = cage_object.name @@ -2389,7 +2391,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Get cage object cage_object = None - if bprops.type.startswith('OTHER_OBJECT_') and bprops.cage_object_name != '': + if bprops.type.startswith('OTHER_OBJECT_') and bprops.use_cage and bprops.cage_object_name != '': cage_object = bpy.data.objects.get(bprops.cage_object_name) if cage_object: @@ -2630,9 +2632,6 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): tile_x = 256 tile_y = 256 - # Cage object only used for other object baking - cage_object_name = bprops.cage_object_name if bprops.type.startswith('OTHER_OBJECT_') else '' - prepare_bake_settings( book, objs, yp, samples=bprops.samples, margin=bprops.margin, uv_map=bprops.uv_map, bake_type=bake_type, #disable_problematic_modifiers=True, @@ -2641,7 +2640,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): use_selected_to_active=bprops.type.startswith('OTHER_OBJECT_'), max_ray_distance=bprops.max_ray_distance, cage_extrusion=bprops.cage_extrusion, source_objs=other_objs, use_denoising=False, margin_type=bprops.margin_type, - cage_object_name = cage_object_name, + use_cage = bprops.use_cage, cage_object_name = bprops.cage_object_name, normal_space = 'TANGENT' if bprops.type != 'OBJECT_SPACE_NORMAL' else 'OBJECT' ) # Set multires level diff --git a/versioning.py b/versioning.py index 8e0976bf..f5065071 100644 --- a/versioning.py +++ b/versioning.py @@ -920,6 +920,10 @@ def update_yp_tree(tree): # Update linear nodes since it gets refactored check_yp_linear_nodes(yp, reconnect=True) + if version_tuple(yp.version) < (2, 3, 2): + # TODO: Versioning to mark use cage object for older bake info + pass + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 169013de92ee1300b19a99d1a949ab6688ef1f05 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Sat, 14 Jun 2025 00:35:04 +0700 Subject: [PATCH 191/283] Ramp affect option (#298) * Add option for ramp modifier to affect only color or alpha. Need more testing. * Remove unnecessary versioning * Clean up modifier node connections --- Modifier.py | 20 ++++++-- modifier_common.py | 53 +++++++++++---------- node_connections.py | 110 ++++++++++++++++++-------------------------- versioning.py | 16 ++++++- 4 files changed, 106 insertions(+), 93 deletions(-) diff --git a/Modifier.py b/Modifier.py index 90395194..5ccc2d7e 100644 --- a/Modifier.py +++ b/Modifier.py @@ -348,9 +348,12 @@ def draw_modifier_properties(context, channel_type, nodes, modifier, layout, is_ row.prop(modifier, 'shortcut', text='') elif modifier.type == 'COLOR_RAMP': + col = layout.column() color_ramp = nodes.get(modifier.color_ramp) if color_ramp: - layout.template_color_ramp(color_ramp, "color_ramp", expand=True) + col.template_color_ramp(color_ramp, "color_ramp", expand=True) + + col.prop(modifier, 'ramp_affect', text='Affect') elif modifier.type == 'RGB_CURVE': rgb_curve = nodes.get(modifier.rgb_curve) @@ -638,8 +641,19 @@ class YPaintModifier(bpy.types.PropertyGroup): color_ramp_linear_start : StringProperty(default='') color_ramp_linear : StringProperty(default='') color_ramp_alpha_multiply : StringProperty(default='') - color_ramp_mix_rgb : StringProperty(default='') - color_ramp_mix_alpha : StringProperty(default='') + color_ramp_mix_rgb : StringProperty(default='') # Deprecated + color_ramp_mix_alpha : StringProperty(default='') # Deprecated + + ramp_affect : EnumProperty( + name = 'Ramp Affect', + items = ( + ('BOTH', 'Both Color & Alpha', ''), + ('COLOR', 'Color Only', ''), + ('ALPHA', 'Alpha Only', ''), + ), + default = 'BOTH', + update = update_modifier_enable + ) # RGB Curve nodes rgb_curve : StringProperty(default='') diff --git a/modifier_common.py b/modifier_common.py index 92b11715..b59277bf 100644 --- a/modifier_common.py +++ b/modifier_common.py @@ -360,42 +360,51 @@ def check_modifier_nodes(m, tree, ref_tree=None): copy_node_props(color_ramp_ref, color_ramp) ref_tree.nodes.remove(color_ramp_ref) + # Remove deprecated nodes + remove_node(ref_tree, m, 'color_ramp_mix_rgb') # Deprecated + remove_node(ref_tree, m, 'color_ramp_mix_alpha') # Deprecated + remove_node(tree, m, 'color_ramp_linear_start') remove_node(tree, m, 'color_ramp_linear') remove_node(tree, m, 'color_ramp_alpha_multiply') - remove_node(tree, m, 'color_ramp_mix_rgb') - remove_node(tree, m, 'color_ramp_mix_alpha') + + # Remove deprecated nodes + remove_node(tree, m, 'color_ramp_mix_rgb') # Deprecated + remove_node(tree, m, 'color_ramp_mix_alpha') # Deprecated else: + + color_ramp_alpha_multiply = None + if ref_tree: color_ramp_alpha_multiply_ref = ref_tree.nodes.get(m.color_ramp_alpha_multiply) color_ramp_linear_start_ref = ref_tree.nodes.get(m.color_ramp_linear_start) color_ramp_ref = ref_tree.nodes.get(m.color_ramp) color_ramp_linear_ref = ref_tree.nodes.get(m.color_ramp_linear) - color_ramp_mix_alpha_ref = ref_tree.nodes.get(m.color_ramp_mix_alpha) - color_ramp_mix_rgb_ref = ref_tree.nodes.get(m.color_ramp_mix_rgb) # Create new nodes if reference is used - color_ramp_alpha_multiply = new_mix_node(tree, m, 'color_ramp_alpha_multiply', 'ColorRamp Alpha Multiply') + if m.ramp_affect == 'BOTH': + color_ramp_alpha_multiply = new_mix_node(tree, m, 'color_ramp_alpha_multiply', 'ColorRamp Alpha Multiply') + color_ramp_linear_start = new_node(tree, m, 'color_ramp_linear_start', 'ShaderNodeGamma', 'ColorRamp Linear Start') color_ramp = new_node(tree, m, 'color_ramp', 'ShaderNodeValToRGB', 'ColorRamp') color_ramp_linear = new_node(tree, m, 'color_ramp_linear', 'ShaderNodeGamma', 'ColorRamp Linear') - color_ramp_mix_alpha = new_mix_node(tree, m, 'color_ramp_mix_alpha', 'ColorRamp Mix Alpha') - color_ramp_mix_rgb = new_mix_node(tree, m, 'color_ramp_mix_rgb', 'ColorRamp Mix RGB') dirty = True ramp_dirty = False else: - color_ramp_alpha_multiply, dirty = check_new_mix_node(tree, m, 'color_ramp_alpha_multiply', 'ColorRamp Alpha Multiply', True) + dirty = False + if m.ramp_affect == 'BOTH': + color_ramp_alpha_multiply, dirty = check_new_mix_node(tree, m, 'color_ramp_alpha_multiply', 'ColorRamp Alpha Multiply', True) + color_ramp_linear_start = check_new_node(tree, m, 'color_ramp_linear_start', 'ShaderNodeGamma', 'ColorRamp Linear Start') color_ramp, ramp_dirty = check_new_node(tree, m, 'color_ramp', 'ShaderNodeValToRGB', 'ColorRamp', True) color_ramp_linear = check_new_node(tree, m, 'color_ramp_linear', 'ShaderNodeGamma', 'ColorRamp Linear') - color_ramp_mix_alpha = check_new_mix_node(tree, m, 'color_ramp_mix_alpha', 'ColorRamp Mix Alpha') - color_ramp_mix_rgb = check_new_mix_node(tree, m, 'color_ramp_mix_rgb', 'ColorRamp Mix RGB') if ref_tree: if color_ramp_alpha_multiply_ref: - copy_node_props(color_ramp_alpha_multiply_ref, color_ramp_alpha_multiply) + if color_ramp_alpha_multiply: + copy_node_props(color_ramp_alpha_multiply_ref, color_ramp_alpha_multiply) ref_tree.nodes.remove(color_ramp_alpha_multiply_ref) if color_ramp_linear_start_ref: @@ -410,20 +419,14 @@ def check_modifier_nodes(m, tree, ref_tree=None): copy_node_props(color_ramp_linear_ref, color_ramp_linear) ref_tree.nodes.remove(color_ramp_linear_ref) - if color_ramp_mix_alpha_ref: - copy_node_props(color_ramp_mix_alpha_ref, color_ramp_mix_alpha) - ref_tree.nodes.remove(color_ramp_mix_alpha_ref) - - if color_ramp_mix_rgb_ref: - copy_node_props(color_ramp_mix_rgb_ref, color_ramp_mix_rgb) - ref_tree.nodes.remove(color_ramp_mix_rgb_ref) - if dirty: - color_ramp_alpha_multiply.inputs[0].default_value = 1.0 - color_ramp_alpha_multiply.blend_type = 'MULTIPLY' - color_ramp_mix_alpha.inputs[0].default_value = 1.0 - color_ramp_mix_rgb.inputs[0].default_value = 1.0 + if color_ramp_alpha_multiply: + color_ramp_alpha_multiply.inputs[0].default_value = 1.0 + color_ramp_alpha_multiply.blend_type = 'MULTIPLY' + + if not m.ramp_affect == 'BOTH': + remove_node(tree, m, 'color_ramp_alpha_multiply') if non_color or yp.use_linear_blending: remove_node(tree, m, 'color_ramp_linear_start') @@ -598,8 +601,8 @@ def delete_modifier_nodes(tree, mod): remove_node(tree, mod, 'color_ramp') remove_node(tree, mod, 'color_ramp_linear') remove_node(tree, mod, 'color_ramp_alpha_multiply') - remove_node(tree, mod, 'color_ramp_mix_rgb') - remove_node(tree, mod, 'color_ramp_mix_alpha') + remove_node(tree, mod, 'color_ramp_mix_rgb') # Deprecated + remove_node(tree, mod, 'color_ramp_mix_alpha') # Deprecated elif mod.type == 'RGB_CURVE': remove_node(tree, mod, 'rgb_curve') diff --git a/node_connections.py b/node_connections.py index ac9cda3b..fc5e12ef 100644 --- a/node_connections.py +++ b/node_connections.py @@ -61,107 +61,89 @@ def reconnect_modifier_nodes(tree, mod, start_rgb, start_alpha): if mod.type == 'INVERT': invert = tree.nodes.get(mod.invert) - create_link(tree, start_rgb, invert.inputs[0]) - create_link(tree, start_alpha, invert.inputs[1]) - - rgb = invert.outputs[0] - alpha = invert.outputs[1] + if invert: + rgb = create_link(tree, rgb, invert.inputs[0])[0] + alpha = create_link(tree, alpha, invert.inputs[1])[1] elif mod.type == 'RGB_TO_INTENSITY': rgb2i = tree.nodes.get(mod.rgb2i) - create_link(tree, start_rgb, rgb2i.inputs[0]) - create_link(tree, start_alpha, rgb2i.inputs[1]) - - rgb = rgb2i.outputs[0] - alpha = rgb2i.outputs[1] + if rgb2i: + rgb = create_link(tree, rgb, rgb2i.inputs[0])[0] + alpha = create_link(tree, alpha, rgb2i.inputs[1])[1] elif mod.type == 'INTENSITY_TO_RGB': i2rgb = tree.nodes.get(mod.i2rgb) - create_link(tree, start_rgb, i2rgb.inputs[0]) - create_link(tree, start_alpha, i2rgb.inputs[1]) - - rgb = i2rgb.outputs[0] - alpha = i2rgb.outputs[1] + if i2rgb: + rgb = create_link(tree, rgb, i2rgb.inputs[0])[0] + alpha = create_link(tree, alpha, i2rgb.inputs[1])[1] elif mod.type == 'OVERRIDE_COLOR': oc = tree.nodes.get(mod.oc) - create_link(tree, start_rgb, oc.inputs[0]) - create_link(tree, start_alpha, oc.inputs[1]) - - rgb = oc.outputs[0] - alpha = oc.outputs[1] + if oc: + rgb = create_link(tree, rgb, oc.inputs[0])[0] + alpha = create_link(tree, alpha, oc.inputs[1])[1] elif mod.type == 'COLOR_RAMP': - color_ramp_alpha_multiply = tree.nodes.get(mod.color_ramp_alpha_multiply) - color_ramp_linear_start = tree.nodes.get(mod.color_ramp_linear_start) color_ramp = tree.nodes.get(mod.color_ramp) - color_ramp_linear = tree.nodes.get(mod.color_ramp_linear) - color_ramp_mix_alpha = tree.nodes.get(mod.color_ramp_mix_alpha) - color_ramp_mix_rgb = tree.nodes.get(mod.color_ramp_mix_rgb) - - am_mixcol0, am_mixcol1, am_mixout = get_mix_color_indices(color_ramp_alpha_multiply) - ma_mixcol0, ma_mixcol1, ma_mixout = get_mix_color_indices(color_ramp_mix_alpha) - mr_mixcol0, mr_mixcol1, mr_mixout = get_mix_color_indices(color_ramp_mix_rgb) - - create_link(tree, start_rgb, color_ramp_alpha_multiply.inputs[am_mixcol0]) - create_link(tree, start_alpha, color_ramp_alpha_multiply.inputs[am_mixcol1]) - if color_ramp_linear_start: - create_link(tree, color_ramp_alpha_multiply.outputs[am_mixout], color_ramp_linear_start.inputs[0]) - create_link(tree, color_ramp_linear_start.outputs[0], color_ramp.inputs[0]) - else: - create_link(tree, color_ramp_alpha_multiply.outputs[am_mixout], color_ramp.inputs[0]) - create_link(tree, start_rgb, color_ramp_mix_rgb.inputs[mr_mixcol0]) - if color_ramp_linear_start: - create_link(tree, color_ramp.outputs[0], color_ramp_linear.inputs[0]) - create_link(tree, color_ramp_linear.outputs[0], color_ramp_mix_rgb.inputs[mr_mixcol1]) - else: - create_link(tree, color_ramp.outputs[0], color_ramp_mix_rgb.inputs[mr_mixcol1]) + if color_ramp: - create_link(tree, start_alpha, color_ramp_mix_alpha.inputs[ma_mixcol0]) - create_link(tree, color_ramp.outputs[1], color_ramp_mix_alpha.inputs[ma_mixcol1]) + color_ramp_alpha_multiply = tree.nodes.get(mod.color_ramp_alpha_multiply) + if color_ramp_alpha_multiply: + am_mixcol0, am_mixcol1, am_mixout = get_mix_color_indices(color_ramp_alpha_multiply) + rgb = create_link(tree, rgb, color_ramp_alpha_multiply.inputs[am_mixcol0])[am_mixout] + create_link(tree, alpha, color_ramp_alpha_multiply.inputs[am_mixcol1]) - rgb = color_ramp_mix_rgb.outputs[mr_mixout] - alpha = color_ramp_mix_alpha.outputs[ma_mixout] + if mod.ramp_affect == 'ALPHA': + alpha = create_link(tree, alpha, color_ramp.inputs[0])[0] + else: + color_ramp_linear_start = tree.nodes.get(mod.color_ramp_linear_start) + if color_ramp_linear_start: + rgb = create_link(tree, rgb, color_ramp_linear_start.inputs[0])[0] + + rgb = create_link(tree, rgb, color_ramp.inputs[0])[0] + + if mod.ramp_affect == 'BOTH': + alpha = color_ramp.outputs[1] + + color_ramp_linear = tree.nodes.get(mod.color_ramp_linear) + if color_ramp_linear: + rgb = create_link(tree, rgb, color_ramp_linear.inputs[0])[0] elif mod.type == 'RGB_CURVE': rgb_curve = tree.nodes.get(mod.rgb_curve) - create_link(tree, start_rgb, rgb_curve.inputs[1]) - rgb = rgb_curve.outputs[0] + if rgb_curve: + rgb = create_link(tree, rgb, rgb_curve.inputs[1])[0] elif mod.type == 'HUE_SATURATION': huesat = tree.nodes.get(mod.huesat) - create_link(tree, start_rgb, huesat.inputs[4]) - rgb = huesat.outputs[0] + if huesat: + rgb = create_link(tree, rgb, huesat.inputs[4])[0] elif mod.type == 'BRIGHT_CONTRAST': brightcon = tree.nodes.get(mod.brightcon) - create_link(tree, start_rgb, brightcon.inputs[0]) - rgb = brightcon.outputs[0] + if brightcon: + rgb = create_link(tree, rgb, brightcon.inputs[0])[0] elif mod.type == 'MULTIPLIER': multiplier = tree.nodes.get(mod.multiplier) - create_link(tree, start_rgb, multiplier.inputs[0]) - create_link(tree, start_alpha, multiplier.inputs[1]) - - rgb = multiplier.outputs[0] - alpha = multiplier.outputs[1] + if multiplier: + rgb = create_link(tree, rgb, multiplier.inputs[0])[0] + alpha = create_link(tree, alpha, multiplier.inputs[1])[1] elif mod.type == 'MATH': - math = tree.nodes.get(mod.math) - create_link(tree, start_rgb, math.inputs[0]) - create_link(tree, start_alpha, math.inputs[1]) - - rgb = math.outputs[0] - alpha = math.outputs[1] + mmath = tree.nodes.get(mod.math) + if mmath: + rgb = create_link(tree, rgb, mmath.inputs[0])[0] + alpha = create_link(tree, alpha, mmath.inputs[1])[1] return rgb, alpha diff --git a/versioning.py b/versioning.py index f5065071..7257d6f1 100644 --- a/versioning.py +++ b/versioning.py @@ -205,6 +205,17 @@ def update_bake_info_baked_entity_props(yp): bi.bake_type = 'BEVEL_MASK' bi.bevel_radius = get_entity_prop_value(entity, 'edge_detect_radius') +def update_bake_info_use_cages(yp): + + images = get_yp_images(yp) + + for i, image in enumerate(images): + bi = image.y_bake_info + + if bi.is_baked and bi.bake_type.startswith('OTHER_OBJECT_'): + if bi.cage_object_name != '': + bi.use_cage = True + def update_yp_tree(tree): cur_version = get_current_version_str() yp = tree.yp @@ -920,8 +931,11 @@ def update_yp_tree(tree): # Update linear nodes since it gets refactored check_yp_linear_nodes(yp, reconnect=True) + # Version 2.3.2 has use cage option for baking from other object if version_tuple(yp.version) < (2, 3, 2): - # TODO: Versioning to mark use cage object for older bake info + + # Mark use cage object for older bake info + #update_bake_info_use_cages(yp) pass # SECTION II: Updates based on the blender version From d1247fe83d1ab4ea37388740301e1bfc65013a9f Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 14 Jun 2025 00:59:57 +0700 Subject: [PATCH 192/283] Only shows `Ramp Affect` option on main channel when alpha is enabled --- Modifier.py | 11 +++-------- ui.py | 6 +++--- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/Modifier.py b/Modifier.py index 5ccc2d7e..3fba8ad2 100644 --- a/Modifier.py +++ b/Modifier.py @@ -304,7 +304,7 @@ def execute(self, context): return {'FINISHED'} -def draw_modifier_properties(context, channel_type, nodes, modifier, layout, is_layer_ch=False): +def draw_modifier_properties(context, channel_type, nodes, modifier, parent, layout, is_root_ch=False): if modifier.type == 'INVERT': row = layout.row(align=True) @@ -326,12 +326,6 @@ def draw_modifier_properties(context, channel_type, nodes, modifier, layout, is_ row.prop(rgb2i.inputs[3], 'default_value', text='') else: row.prop(modifier, 'rgb2i_col', text='') - # Shortcut only available on layer channel - if is_layer_ch: - row = col.row(align=True) - row.label(text='Shortcut on layer list:') - row.prop(modifier, 'shortcut', text='') - elif modifier.type == 'OVERRIDE_COLOR': col = layout.column(align=True) @@ -353,7 +347,8 @@ def draw_modifier_properties(context, channel_type, nodes, modifier, layout, is_ if color_ramp: col.template_color_ramp(color_ramp, "color_ramp", expand=True) - col.prop(modifier, 'ramp_affect', text='Affect') + if not is_root_ch or parent.enable_alpha or modifier.ramp_affect != 'BOTH': + col.prop(modifier, 'ramp_affect', text='Affect') elif modifier.type == 'RGB_CURVE': rgb_curve = nodes.get(modifier.rgb_curve) diff --git a/ui.py b/ui.py index f533a36b..5fdd2427 100644 --- a/ui.py +++ b/ui.py @@ -771,7 +771,7 @@ def draw_mask_modifier_stack(layer, mask, layout, ui): box.active = m.enable MaskModifier.draw_modifier_properties(tree, m, box) -def draw_modifier_stack(context, parent, channel_type, layout, ui, layer=None, extra_blank=False, use_modifier_1=False, layout_active=True): +def draw_modifier_stack(context, parent, channel_type, layout, ui, layer=None, extra_blank=False, use_modifier_1=False, layout_active=True, is_root_ch=False): ypui = context.window_manager.ypui @@ -881,7 +881,7 @@ def draw_modifier_stack(context, parent, channel_type, layout, ui, layer=None, e row.label(text='', icon='BLANK1') box = row.box() box.active = m.enable - Modifier.draw_modifier_properties(bpy.context, channel_type, mod_tree.nodes, m, box, False) + Modifier.draw_modifier_properties(bpy.context, channel_type, mod_tree.nodes, m, parent, box, is_root_ch=is_root_ch) #row.label(text='', icon='BLANK1') @@ -1144,7 +1144,7 @@ def draw_root_channels_ui(context, layout, node): baked = nodes.get(channel.baked) layout_active = not yp.use_baked or not baked - draw_modifier_stack(context, channel, channel.type, bcol, chui, layout_active=layout_active) + draw_modifier_stack(context, channel, channel.type, bcol, chui, layout_active=layout_active, is_root_ch=True) inp = node.inputs[channel.io_index] From bf964040d31a5c0a211ed706a394e97193a97999 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 15 Jun 2025 16:43:59 +0700 Subject: [PATCH 193/283] Rather than use specific ramp_affect prop, use more generic affect_color and affect_alpha for color ramp modifier. Also add versioning for use_cage prop for bake info. Closes #286 --- Modifier.py | 47 ++++++++++++++++++++++++++++++------------- __init__.py | 2 +- blender_manifest.toml | 2 +- modifier_common.py | 6 +++--- node_connections.py | 6 +++--- versioning.py | 33 ++++++++++++++++++++++++++---- 6 files changed, 70 insertions(+), 26 deletions(-) diff --git a/Modifier.py b/Modifier.py index 3fba8ad2..9c2a25a9 100644 --- a/Modifier.py +++ b/Modifier.py @@ -112,6 +112,16 @@ def add_new_modifier(parent, modifier_type): m = modifiers[0] m.type = modifier_type + # Color ramp modifier has affect_color and affect_alpha enabled by default + if modifier_type == 'COLOR_RAMP': + ori_halt_update = yp.halt_update + yp.halt_update = True + + m.affect_color = True + m.affect_alpha = True + + yp.halt_update = ori_halt_update + check_modifiers_trees(parent) return m @@ -345,10 +355,18 @@ def draw_modifier_properties(context, channel_type, nodes, modifier, parent, lay col = layout.column() color_ramp = nodes.get(modifier.color_ramp) if color_ramp: - col.template_color_ramp(color_ramp, "color_ramp", expand=True) + ccol = col.column() + ccol.active = modifier.affect_color or modifier.affect_alpha + ccol.template_color_ramp(color_ramp, "color_ramp", expand=True) + + if not is_root_ch or parent.enable_alpha or not modifier.affect_color or not modifier.affect_alpha: + split = split_layout(col, 0.3, align=True) + split.label(text='Affect:') + row = split.row(align=True) - if not is_root_ch or parent.enable_alpha or modifier.ramp_affect != 'BOTH': - col.prop(modifier, 'ramp_affect', text='Affect') + label = 'Color' if channel_type != 'VALUE' else 'Value' + row.prop(modifier, 'affect_color', text=label, toggle=True) + row.prop(modifier, 'affect_alpha', text='Alpha', toggle=True) elif modifier.type == 'RGB_CURVE': rgb_curve = nodes.get(modifier.rgb_curve) @@ -523,6 +541,14 @@ def update_use_clamp(self, context): math.node_tree.nodes.get('Math.G').use_clamp = self.use_clamp math.node_tree.nodes.get('Math.B').use_clamp = self.use_clamp +def update_affect_color(self, context): + yp = self.id_data.yp + if yp.halt_update or not self.enable: return + tree = get_mod_tree(self) + + if self.type == 'COLOR_RAMP': + update_modifier_enable(self, context) + def update_affect_alpha(self, context): yp = self.id_data.yp if yp.halt_update or not self.enable: return @@ -536,6 +562,9 @@ def update_affect_alpha(self, context): else: alpha.mute = True + elif self.type == 'COLOR_RAMP': + update_modifier_enable(self, context) + def update_math_method(self, context): yp = self.id_data.yp if yp.halt_update or not self.enable: return @@ -639,17 +668,6 @@ class YPaintModifier(bpy.types.PropertyGroup): color_ramp_mix_rgb : StringProperty(default='') # Deprecated color_ramp_mix_alpha : StringProperty(default='') # Deprecated - ramp_affect : EnumProperty( - name = 'Ramp Affect', - items = ( - ('BOTH', 'Both Color & Alpha', ''), - ('COLOR', 'Color Only', ''), - ('ALPHA', 'Alpha Only', ''), - ), - default = 'BOTH', - update = update_modifier_enable - ) - # RGB Curve nodes rgb_curve : StringProperty(default='') @@ -698,6 +716,7 @@ class YPaintModifier(bpy.types.PropertyGroup): update = update_math_method ) + affect_color : BoolProperty(name='Affect Color', default=True, update=update_affect_color) affect_alpha : BoolProperty(name='Affect Alpha', default=False, update=update_affect_alpha) # Individual modifier node frame diff --git a/__init__.py b/__init__.py index 725cc52d..263d045e 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 3, 1), + "version": (2, 3, 1, 2), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index 2c846183..52399481 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.3.1" +version = "2.3.1.2" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " diff --git a/modifier_common.py b/modifier_common.py index b59277bf..a3674bb6 100644 --- a/modifier_common.py +++ b/modifier_common.py @@ -382,7 +382,7 @@ def check_modifier_nodes(m, tree, ref_tree=None): color_ramp_linear_ref = ref_tree.nodes.get(m.color_ramp_linear) # Create new nodes if reference is used - if m.ramp_affect == 'BOTH': + if m.affect_alpha and m.affect_color: color_ramp_alpha_multiply = new_mix_node(tree, m, 'color_ramp_alpha_multiply', 'ColorRamp Alpha Multiply') color_ramp_linear_start = new_node(tree, m, 'color_ramp_linear_start', 'ShaderNodeGamma', 'ColorRamp Linear Start') @@ -393,7 +393,7 @@ def check_modifier_nodes(m, tree, ref_tree=None): else: dirty = False - if m.ramp_affect == 'BOTH': + if m.affect_alpha and m.affect_color: color_ramp_alpha_multiply, dirty = check_new_mix_node(tree, m, 'color_ramp_alpha_multiply', 'ColorRamp Alpha Multiply', True) color_ramp_linear_start = check_new_node(tree, m, 'color_ramp_linear_start', 'ShaderNodeGamma', 'ColorRamp Linear Start') @@ -425,7 +425,7 @@ def check_modifier_nodes(m, tree, ref_tree=None): color_ramp_alpha_multiply.inputs[0].default_value = 1.0 color_ramp_alpha_multiply.blend_type = 'MULTIPLY' - if not m.ramp_affect == 'BOTH': + if not m.affect_alpha or not m.affect_color: remove_node(tree, m, 'color_ramp_alpha_multiply') if non_color or yp.use_linear_blending: diff --git a/node_connections.py b/node_connections.py index fc5e12ef..3668a076 100644 --- a/node_connections.py +++ b/node_connections.py @@ -89,7 +89,7 @@ def reconnect_modifier_nodes(tree, mod, start_rgb, start_alpha): elif mod.type == 'COLOR_RAMP': color_ramp = tree.nodes.get(mod.color_ramp) - if color_ramp: + if color_ramp and (mod.affect_alpha or mod.affect_color): color_ramp_alpha_multiply = tree.nodes.get(mod.color_ramp_alpha_multiply) if color_ramp_alpha_multiply: @@ -97,7 +97,7 @@ def reconnect_modifier_nodes(tree, mod, start_rgb, start_alpha): rgb = create_link(tree, rgb, color_ramp_alpha_multiply.inputs[am_mixcol0])[am_mixout] create_link(tree, alpha, color_ramp_alpha_multiply.inputs[am_mixcol1]) - if mod.ramp_affect == 'ALPHA': + if mod.affect_alpha and not mod.affect_color: alpha = create_link(tree, alpha, color_ramp.inputs[0])[0] else: color_ramp_linear_start = tree.nodes.get(mod.color_ramp_linear_start) @@ -106,7 +106,7 @@ def reconnect_modifier_nodes(tree, mod, start_rgb, start_alpha): rgb = create_link(tree, rgb, color_ramp.inputs[0])[0] - if mod.ramp_affect == 'BOTH': + if mod.affect_alpha and mod.affect_color: alpha = color_ramp.outputs[1] color_ramp_linear = tree.nodes.get(mod.color_ramp_linear) diff --git a/versioning.py b/versioning.py index 7257d6f1..dd1a7733 100644 --- a/versioning.py +++ b/versioning.py @@ -931,12 +931,37 @@ def update_yp_tree(tree): # Update linear nodes since it gets refactored check_yp_linear_nodes(yp, reconnect=True) - # Version 2.3.2 has use cage option for baking from other object - if version_tuple(yp.version) < (2, 3, 2): + # Version 2.3.1.1 has use cage option for baking from other object + if version_tuple(yp.version) < (2, 3, 1, 1): # Mark use cage object for older bake info - #update_bake_info_use_cages(yp) - pass + update_bake_info_use_cages(yp) + + # Version 2.3.1.2 has color ramp modifier affect option + if version_tuple(yp.version) < (2, 3, 1, 2): + + yp.halt_update = True + + for ch in yp.channels: + for mod in ch.modifiers: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + for layer in yp.layers: + for mod in layer.modifiers: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + for ch in layer.channels: + for mod in ch.modifiers: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + for mod in ch.modifiers_1: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + yp.halt_update = False # SECTION II: Updates based on the blender version From c7fd74554773e20154493be76e5087b814b6ffec Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 16 Jun 2025 01:07:37 +0700 Subject: [PATCH 194/283] Replace `Other Objects Emission` baking to `Other Objects Color` baking. Also remove all float image preservation since it can causes problem with bake result. Closes #302 --- bake_common.py | 173 ++++++++++++++++++++++++++++++++++++++++++++++--- common.py | 6 +- image_ops.py | 6 +- ui.py | 2 +- 4 files changed, 173 insertions(+), 14 deletions(-) diff --git a/bake_common.py b/bake_common.py index 2d309dec..273b52f1 100644 --- a/bake_common.py +++ b/bake_common.py @@ -304,6 +304,88 @@ def add_active_render_uv_node(tree, active_render_uv_name): if n.type == 'GROUP' and n.node_tree and not n.node_tree.yp.is_ypaint_node: add_active_render_uv_node(n.node_tree, active_render_uv_name) +def prepare_other_objs_colors(yp, other_objs): + + other_mats = [] + other_sockets = [] + other_defaults = [] + other_alpha_sockets = [] + other_alpha_defaults = [] + + ori_mat_no_nodes = [] + + valid_bsdf_types = ['BSDF_PRINCIPLED', 'BSDF_DIFFUSE', 'EMISSION'] + + for o in other_objs: + # Set new material if there's no material + if len(o.data.materials) == 0: + temp_mat = get_temp_default_material() + o.data.materials.append(temp_mat) + else: + for i, m in enumerate(o.data.materials): + if m == None: + temp_mat = get_temp_default_material() + o.data.materials[i] = temp_mat + elif not m.use_nodes: + if m not in ori_mat_no_nodes: + ori_mat_no_nodes.append(m) + m.use_nodes = True + + for mat in o.data.materials: + if mat == None: continue + if mat in other_mats: continue + if not mat.use_nodes: continue + + # Get material output + output = get_material_output(mat) + if not output: continue + + socket = None + default = None + alpha_socket = None + alpha_default = 1.0 + + if mat in ori_mat_no_nodes and hasattr(mat, 'diffuse_color'): + default = mat.diffuse_color + + # Check for possible sockets available on the bsdf node + if not socket: + # Search for main bsdf + bsdf_node = get_closest_bsdf_backward(output, valid_bsdf_types) + + if bsdf_node.type == 'BSDF_PRINCIPLED': + socket = bsdf_node.inputs['Base Color'] + + elif 'Color' in bsdf_node.inputs: + socket = bsdf_node.inputs['Color'] + + if socket: + if len(socket.links) == 0: + if default == None: + default = socket.default_value + else: + socket = socket.links[0].from_socket + + # Get alpha socket + alpha_socket = bsdf_node.inputs.get('Alpha') + if alpha_socket: + + if len(alpha_socket.links) == 0: + alpha_default = alpha_socket.default_value + alpha_socket = None + else: + alpha_socket = alpha_socket.links[0].from_socket + + # Append objects and materials if socket is found + if socket or default: + other_mats.append(mat) + other_sockets.append(socket) + other_defaults.append(default) + other_alpha_sockets.append(alpha_socket) + other_alpha_defaults.append(alpha_default) + + return other_mats, other_sockets, other_defaults, other_alpha_sockets, other_alpha_defaults, ori_mat_no_nodes + def prepare_other_objs_channels(yp, other_objs): ch_other_objects = [] ch_other_mats = [] @@ -2457,7 +2539,10 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if o and o not in other_objs: other_objs.append(o) - if bprops.type == 'OTHER_OBJECT_CHANNELS': + if bprops.type == 'OTHER_OBJECT_EMISSION': + other_mats, other_sockets, other_defaults, other_alpha_sockets, other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_colors(yp, other_objs) + + elif bprops.type == 'OTHER_OBJECT_CHANNELS': ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) if not other_objs: @@ -2966,6 +3051,29 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): ori_from_nodes[m.name] = from_node ori_from_sockets[m.name] = from_socket + elif bprops.type == 'OTHER_OBJECT_EMISSION': + # Remember original socket connected to outputs + for m in other_mats: + soc = None + from_node = '' + from_socket = '' + mout = get_material_output(m) + if mout: + for l in mout.inputs[0].links: + soc = l.from_socket + from_node = l.from_node.name + from_socket = l.from_socket.name + + # Create temporary emission + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: + temp_emi = m.node_tree.nodes.new('ShaderNodeEmission') + temp_emi.name = TEMP_EMISSION + m.node_tree.links.new(temp_emi.outputs[0], mout.inputs[0]) + + ori_from_nodes[m.name] = from_node + ori_from_sockets[m.name] = from_socket + # Newly created layer index and image active_id = None image = None @@ -2976,7 +3084,26 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): image_name = bprops.name colorspace = get_srgb_name() - if bprops.type == 'OTHER_OBJECT_CHANNELS': + if bprops.type == 'OTHER_OBJECT_EMISSION': + + # Set emission connection + for i, m in enumerate(other_mats): + default = other_defaults[i] + socket = other_sockets[i] + + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: continue + + if default != None: + # Set default + if type(default) == float: + temp_emi.inputs[0].default_value = (default, default, default, 1.0) + else: temp_emi.inputs[0].default_value = (default[0], default[1], default[2], 1.0) + + elif socket: + m.node_tree.links.new(socket, temp_emi.inputs[0]) + + elif bprops.type == 'OTHER_OBJECT_CHANNELS': root_ch = yp.channels[idx] image_name += ' ' + yp.channels[idx].name @@ -3047,7 +3174,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Make image transparent if its baked from other objects if bprops.type.startswith('OTHER_OBJECT_'): - color[3] = 0.0 + color = [0.0, 0.0, 0.0, 0.0] # New target image if bprops.use_udim: @@ -3124,7 +3251,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) # Bake other object alpha - if bprops.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS'}: + if bprops.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS', 'OTHER_OBJECT_EMISSION'}: alpha_found = False if bprops.type == 'OTHER_OBJECT_CHANNELS': @@ -3137,8 +3264,14 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) if not temp_emi: continue - if alpha_default != 1.0: + if alpha_socket: alpha_found = True + m.node_tree.links.new(alpha_socket, temp_emi.inputs[0]) + + else: + if alpha_default != 1.0: + alpha_found = True + # Set alpha_default if type(alpha_default) == float: temp_emi.inputs[0].default_value = (alpha_default, alpha_default, alpha_default, 1.0) @@ -3147,9 +3280,31 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Break link for l in temp_emi.inputs[0].links: m.node_tree.links.remove(l) - elif alpha_socket: + + elif bprops.type == 'OTHER_OBJECT_EMISSION': + + # Set emission connection + for i, m in enumerate(other_mats): + alpha_default = other_alpha_defaults[i] + alpha_socket = other_alpha_sockets[i] + + temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) + if not temp_emi: continue + + if alpha_socket: alpha_found = True m.node_tree.links.new(alpha_socket, temp_emi.inputs[0]) + + else: + if alpha_default != 1.0: + alpha_found = True + + # Set alpha_default + if type(alpha_default) == float: + temp_emi.inputs[0].default_value = (alpha_default, alpha_default, alpha_default, 1.0) + else: temp_emi.inputs[0].default_value = (alpha_default[0], alpha_default[1], alpha_default[2], 1.0) + + else: alpha_found = True @@ -3466,8 +3621,10 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): bvi.index = vi # Recover other yps - if bprops.type == 'OTHER_OBJECT_CHANNELS': - for m in all_other_mats: + if bprops.type in {'OTHER_OBJECT_CHANNELS', 'OTHER_OBJECT_EMISSION'}: + + mats = all_other_mats if bprops.type == 'OTHER_OBJECT_CHANNELS' else other_mats + for m in mats: # Set back original socket mout = get_material_output(m) if mout: diff --git a/common.py b/common.py index aac4416e..226db96d 100644 --- a/common.py +++ b/common.py @@ -332,7 +332,7 @@ def entity_input_items(self, context): ('MULTIRES_DISPLACEMENT', 'Multires Displacement', ''), ('OTHER_OBJECT_NORMAL', 'Other Objects Normal', 'Other object\'s normal'), - ('OTHER_OBJECT_EMISSION', 'Other Objects Emission', 'Other object\'s emission color'), + ('OTHER_OBJECT_EMISSION', 'Other Objects Color', 'Other object\'s color'), ('OTHER_OBJECT_CHANNELS', 'Other Objects Channels', 'Other object\'s Ucupaint channels'), ('SELECTED_VERTICES', 'Selected Vertices/Edges/Faces', ''), @@ -379,7 +379,7 @@ def entity_input_items(self, context): 'MULTIRES_DISPLACEMENT': 'Multires Displacement', 'OTHER_OBJECT_NORMAL': 'Other Objects Normal', - 'OTHER_OBJECT_EMISSION': 'Other Objects Emission', + 'OTHER_OBJECT_EMISSION': 'Other Objects Color', 'OTHER_OBJECT_CHANNELS': 'Other Objects Channels', 'SELECTED_VERTICES': 'Selected Vertices', @@ -403,7 +403,7 @@ def entity_input_items(self, context): 'MULTIRES_DISPLACEMENT': 'Displacement Multires', 'OTHER_OBJECT_NORMAL': 'OO Normal', - 'OTHER_OBJECT_EMISSION': 'OO Emission', + 'OTHER_OBJECT_EMISSION': 'OO Color', 'OTHER_OBJECT_CHANNELS': 'OO Channel', 'SELECTED_VERTICES': 'Selected Vertices', diff --git a/image_ops.py b/image_ops.py index 3b7fb358..0931c0f2 100644 --- a/image_ops.py +++ b/image_ops.py @@ -21,7 +21,8 @@ def preserve_float_color_hack_before_saving(image): def save_float_image(image): - preserve_float_color_hack_before_saving(image) + # NOTE: This hack function is probably not a good idea since it uses a lot of assumption + #preserve_float_color_hack_before_saving(image) # Remembers original_path = image.filepath @@ -137,7 +138,8 @@ def preserve_float_color_hack_before_packing(image): def pack_image(image, reload_float=False, do_hack=True): - if do_hack: + # NOTE: This hack function is probably not a good idea since it uses a lot of assumption + if do_hack and False: preserve_float_color_hack_before_packing(image) if is_bl_newer_than(2, 80): diff --git a/ui.py b/ui.py index 5fdd2427..dcf33908 100644 --- a/ui.py +++ b/ui.py @@ -5700,7 +5700,7 @@ def draw(self, context): if is_bl_newer_than(2, 77): col.separator() - c = col.operator("wm.y_bake_to_layer", text='Other Objects Emission') + c = col.operator("wm.y_bake_to_layer", text='Other Objects Color') c.type = 'OTHER_OBJECT_EMISSION' c.target_type = 'LAYER' c.overwrite_current = False From 844b7a9488574899fad9146dc3895db22a573038 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 16 Jun 2025 12:56:22 +0700 Subject: [PATCH 195/283] Four digits version numbers apparently is not supported by the manifest file. --- __init__.py | 2 +- blender_manifest.toml | 2 +- versioning.py | 8 +++----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/__init__.py b/__init__.py index 263d045e..cd5d1abb 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 3, 1, 2), + "version": (2, 3, 2), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index 52399481..f7c778ef 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.3.1.2" +version = "2.3.2" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " diff --git a/versioning.py b/versioning.py index dd1a7733..059ff065 100644 --- a/versioning.py +++ b/versioning.py @@ -931,15 +931,13 @@ def update_yp_tree(tree): # Update linear nodes since it gets refactored check_yp_linear_nodes(yp, reconnect=True) - # Version 2.3.1.1 has use cage option for baking from other object - if version_tuple(yp.version) < (2, 3, 1, 1): + # Version 2.3.2 has bake cage option and ramp modifier affect option + if version_tuple(yp.version) < (2, 3, 2): # Mark use cage object for older bake info update_bake_info_use_cages(yp) - # Version 2.3.1.2 has color ramp modifier affect option - if version_tuple(yp.version) < (2, 3, 1, 2): - + # Update color ramp modifier affect option yp.halt_update = True for ch in yp.channels: From 867ddfcd3d979a5451e62ab35fa512506866c886 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 16 Jun 2025 13:31:46 +0700 Subject: [PATCH 196/283] Compatibility with the new brush API for Blender 5.0 --- common.py | 12 ++++++++++++ ui.py | 2 +- vcol_editor.py | 6 +++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/common.py b/common.py index 226db96d..ca7bff93 100644 --- a/common.py +++ b/common.py @@ -7600,6 +7600,18 @@ def load_image(path, directory, check_existing=True): return bpy_extras.image_utils.load_image(path, directory, check_existing=check_existing) +def get_brush_image_tool(brush): + if not is_bl_newer_than(5): + return brush.image_tool + + return brush.image_brush_type + +def get_brush_sculpt_tool(brush): + if not is_bl_newer_than(5): + return brush.sculpt_tool + + return brush.sculpt_brush_type + def get_active_tool_idname(): tools = bpy.context.workspace.tools return tools.from_space_view3d_mode(bpy.context.mode).idname diff --git a/ui.py b/ui.py index dcf33908..ad8fc733 100644 --- a/ui.py +++ b/ui.py @@ -3793,7 +3793,7 @@ def draw_layers_ui(context, layout, node): if is_bl_newer_than(4, 3) and in_texture_paint_mode: brush = context.tool_settings.image_paint.brush - if brush and brush.image_tool != 'MASK': + if brush and get_brush_image_tool(brush) != 'MASK': bbox = col.box() row = bbox.row(align=True) label = 'Toggle Eraser' diff --git a/vcol_editor.py b/vcol_editor.py index 556dfcb9..eb99f885 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -182,7 +182,7 @@ def execute(self, context): brush = context.tool_settings.image_paint.brush brush_name = brush.name - image_tool = brush.image_tool + image_tool = get_brush_image_tool(brush) use_pressure_strength = brush.use_pressure_strength use_pressure_size = brush.use_pressure_size @@ -192,7 +192,7 @@ def execute(self, context): if brush.name in tex_default_brush_eraser_pairs: # Get eraser name based on dictionary new_brush_name = tex_default_brush_eraser_pairs[brush.name] - elif brush.image_tool == 'DRAW': + elif get_brush_image_tool(brush) == 'DRAW': # Only toggle erase alpha if the draw brush is custom new_brush_name = brush.name else: @@ -249,7 +249,7 @@ def execute(self, context): draw_brush = bpy.data.brushes.get(draw_brush_name) if not draw_brush: - draw_brushes = [d for d in bpy.data.brushes if d.use_paint_sculpt and d.sculpt_tool == 'PAINT'] + draw_brushes = [d for d in bpy.data.brushes if d.use_paint_sculpt and get_brush_sculpt_tool(d) == 'PAINT'] if draw_brushes: draw_brush = draw_brushes[0] else: self.report({'ERROR'}, "Cannot find a paint brush!") From fac5e8b478af6fb0a8617651e63fd33a74f4f81e Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 16 Jun 2025 15:18:00 +0700 Subject: [PATCH 197/283] Add normalize option to pointiness baking. Closes #300 --- BakeInfo.py | 6 ++++++ BakeToLayer.py | 11 +++++++++++ Modifier.py | 4 ++-- bake_common.py | 43 +++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/BakeInfo.py b/BakeInfo.py index 6cb25b09..2c50dc3a 100644 --- a/BakeInfo.py +++ b/BakeInfo.py @@ -207,6 +207,12 @@ class YBakeInfoProps(bpy.types.PropertyGroup): default = False ) + normalize : BoolProperty( + name = 'Normalize Bake Result', + description = 'Normalize the bake result', + default = False, + ) + # To store other objects info other_objects : CollectionProperty(type=YBakeInfoOtherObject) diff --git a/BakeToLayer.py b/BakeToLayer.py index aae5433f..5e2e8113 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -164,6 +164,7 @@ def get_bake_properties_from_self(self): 'cage_object_name', 'cage_extrusion', 'max_ray_distance', + 'normalize', 'ao_distance', 'bevel_samples', 'bevel_radius', @@ -264,6 +265,12 @@ class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): description = 'The maximum ray distance for matching points between the active and selected objects. If zero, there is no limit', default=0.2, min=0.0, max=1.0 ) + + normalize : BoolProperty( + name = 'Normalize Bake Result', + description = 'Normalize the bake result', + default = True, + ) # AO Props ao_distance : FloatProperty(default=1.0) @@ -692,6 +699,8 @@ def draw(self, context): col.label(text='Cage Extrusion:') if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): col.label(text='Max Ray Distance:') + elif self.type == 'POINTINESS' and is_bl_newer_than(2, 83): + col.label(text='') elif self.type == 'AO': col.label(text='AO Distance:') col.label(text='') @@ -772,6 +781,8 @@ def draw(self, context): col.prop(self, 'cage_extrusion', text='') if hasattr(bpy.context.scene.render.bake, 'max_ray_distance'): col.prop(self, 'max_ray_distance', text='') + elif self.type == 'POINTINESS' and is_bl_newer_than(2, 83): + col.prop(self, 'normalize', text='Normalize Pointiness') elif self.type == 'AO': col.prop(self, 'ao_distance', text='') col.prop(self, 'only_local') diff --git a/Modifier.py b/Modifier.py index 9c2a25a9..2adc7075 100644 --- a/Modifier.py +++ b/Modifier.py @@ -716,8 +716,8 @@ class YPaintModifier(bpy.types.PropertyGroup): update = update_math_method ) - affect_color : BoolProperty(name='Affect Color', default=True, update=update_affect_color) - affect_alpha : BoolProperty(name='Affect Alpha', default=False, update=update_affect_alpha) + affect_color : BoolProperty(name='Affect Color', description='Ramp will affect the color value', default=True, update=update_affect_color) + affect_alpha : BoolProperty(name='Affect Alpha', description='Ramp will affect the alpha value', default=False, update=update_affect_alpha) # Individual modifier node frame frame : StringProperty(default='') diff --git a/bake_common.py b/bake_common.py index 273b52f1..c1be19ca 100644 --- a/bake_common.py +++ b/bake_common.py @@ -127,6 +127,25 @@ def is_join_objects_problematic(yp, mat=None): return False +def get_pointiness_image_minmax_value(image): + + if is_bl_newer_than(2, 83): + pxs = numpy.empty(shape=image.size[0] * image.size[1] * 4, dtype=numpy.float32) + image.pixels.foreach_get(pxs) + + pxs.shape = (-1, image.size[0], 4) + + # Set alpha to half + pxs *= (1, 1, 1, 0.5) + + min_val = pxs.min() + max_val = pxs.max() + + return min_val, max_val + else: + # TODO: Get minimum and maximum pixel on legacy blenders + return 0.4, 0.6 + def bake_object_op(bake_type='EMIT'): try: if bake_type != 'EMIT': @@ -2888,6 +2907,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Create bake nodes tex = mat.node_tree.nodes.new('ShaderNodeTexImage') bsdf = None + map_range = None geometry = None vector_math = None vector_math_1 = None @@ -2935,8 +2955,16 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): elif bprops.type == 'POINTINESS': src = mat.node_tree.nodes.new('ShaderNodeNewGeometry') + pointy = src.outputs['Pointiness'] + + # Map range node + if is_bl_newer_than(2, 83) and bprops.normalize: + map_range = mat.node_tree.nodes.new('ShaderNodeMapRange') + mat.node_tree.links.new(pointy, map_range.inputs[0]) + pointy = map_range.outputs[0] + # Links - mat.node_tree.links.new(src.outputs['Pointiness'], bsdf.inputs[0]) + mat.node_tree.links.new(pointy, bsdf.inputs[0]) mat.node_tree.links.new(bsdf.outputs[0], output.inputs[0]) elif bprops.type == 'CAVITY': @@ -3250,6 +3278,17 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) + if bprops.type == 'POINTINESS' and bprops.normalize and is_bl_newer_than(2, 83): + # Check for highest and lowest value of the baked image + min_val, max_val = get_pointiness_image_minmax_value(image) + + # Set map range + map_range.inputs[1].default_value = min_val + map_range.inputs[2].default_value = max_val + + # Rebake the image again + bpy.ops.object.bake(type='EMIT') + # Bake other object alpha if bprops.type in {'OTHER_OBJECT_NORMAL', 'OTHER_OBJECT_CHANNELS', 'OTHER_OBJECT_EMISSION'}: @@ -3304,7 +3343,6 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): temp_emi.inputs[0].default_value = (alpha_default, alpha_default, alpha_default, 1.0) else: temp_emi.inputs[0].default_value = (alpha_default[0], alpha_default[1], alpha_default[2], 1.0) - else: alpha_found = True @@ -3646,6 +3684,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): simple_remove_node(mat.node_tree, bsdf) if src: simple_remove_node(mat.node_tree, src) if geometry: simple_remove_node(mat.node_tree, geometry) + if map_range: simple_remove_node(mat.node_tree, map_range) if vector_math: simple_remove_node(mat.node_tree, vector_math) if vector_math_1: simple_remove_node(mat.node_tree, vector_math_1) From e3d00ca19727a0677e2056b705867068ff3f1ac1 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 18 Jun 2025 14:58:07 +0700 Subject: [PATCH 198/283] Fix: Refresh UV does not correspond to custom channel source image and sometimes can cause error --- common.py | 87 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 30 deletions(-) diff --git a/common.py b/common.py index ca7bff93..ba07eb8a 100644 --- a/common.py +++ b/common.py @@ -2345,6 +2345,9 @@ def get_entity_mapping(entity, get_baked=False): return None def update_entity_uniform_scale_enabled(entity): + if not hasattr(entity, 'enable_uniform_scale'): + return + mapping = get_entity_mapping(entity) if mapping: scale_input = mapping.inputs[3] @@ -3328,7 +3331,7 @@ def get_transformation(mapping, entity=None): translation = mapping.inputs[1].default_value rotation = mapping.inputs[2].default_value - if entity and entity.enable_uniform_scale: + if entity and hasattr(entity, 'enable_uniform_scale') and entity.enable_uniform_scale: scale_val = get_entity_prop_value(entity, 'uniform_scale_value') scale = (scale_val, scale_val, scale_val) else: @@ -3341,24 +3344,56 @@ def get_transformation(mapping, entity=None): return translation, rotation, scale -def is_active_uv_map_missmatch_entity(obj, entity): +def is_active_uv_map_missmatch_active_entity(obj, layer): + + yp = layer.id_data.yp + + entity = None + + for mask in layer.masks: + if mask.active_edit: + entity = mask + entity_type = entity.type + use_baked = entity.use_baked + break + + for ch in layer.channels: + if ch.active_edit: + entity = layer + entity_type = ch.override_type + use_baked = False + break + + if ch.active_edit_1: + entity = layer + entity_type = ch.override_1_type + use_baked = False + break + + if not entity: + entity = layer + entity_type = entity.type + use_baked = entity.use_baked # Non image entity doesn't need matching UV - if not entity.use_baked and entity.type != 'IMAGE': + if not use_baked and entity_type != 'IMAGE': return False - m = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) - - #if entity.type != 'IMAGE' or entity.texcoord_type != 'UV': return False - if (m and not is_layer_using_vector(entity)) or entity.texcoord_type != 'UV': return False - mapping = get_entity_mapping(entity, get_baked=entity.use_baked) + # No need to check UV and transformation if entity is not using UV vector + if (entity == layer and not is_layer_using_vector(entity)) or entity.texcoord_type != 'UV': return False + # Get active UV uv_layers = get_uv_layers(obj) if not uv_layers: return False uv_layer = uv_layers.active - uv_name = entity.uv_name if not entity.use_baked or entity.baked_uv_name == '' else entity.baked_uv_name + # Get active entity UV name + uv_name = entity.uv_name if not use_baked or entity.baked_uv_name == '' else entity.baked_uv_name + # Get mapping + mapping = get_entity_mapping(entity, get_baked=use_baked) + + # Check mapping transformation if mapping and is_transformed(mapping, entity) and obj.mode == 'TEXTURE_PAINT': if uv_layer.name != TEMP_UV: return True @@ -3372,23 +3407,12 @@ def is_active_uv_map_missmatch_entity(obj, entity): if obj.yp.texpaint_scale[i] != scale[i]: return True + # Check if current active uv matched with current entity uv elif uv_name in uv_layers and uv_name != uv_layer.name: return True return False -def is_active_uv_map_missmatch_active_entity(obj, layer): - - active_mask = None - for mask in layer.masks: - if mask.active_edit == True: - active_mask = mask - - if active_mask: entity = active_mask - else: entity = layer - - return is_active_uv_map_missmatch_entity(obj, entity) - def is_transformed(mapping, entity=None): translation, rotation, scale = get_transformation(mapping, entity) @@ -3540,18 +3564,18 @@ def refresh_temp_uv(obj, entity): try: entity_uv.active_render = True except: print('EXCEPTIION: Cannot set active uv render!') - if m3 and entity.override_type != 'IMAGE': - remove_temp_uv(obj, entity) + # Delete previous temp uv + remove_temp_uv(obj, entity) + + # No need to use temp uv if override is not using image + if m3 and ((entity.active_edit and entity.override_type != 'IMAGE') or (entity.active_edit_1 and entity.override_1_type != 'IMAGE')): return False + # No need to use temp uv if layer/mask is not using image if (m1 or m2) and (entity.type != 'IMAGE' and not entity.use_baked): - remove_temp_uv(obj, entity) return False - # Delete previous temp uv - remove_temp_uv(obj, entity) - - # Only set actual uv if not in texture paint mode + # Only set actual uv if not in texture paint or edit mode if obj.mode not in {'TEXTURE_PAINT', 'EDIT'}: return False @@ -3576,8 +3600,11 @@ def refresh_temp_uv(obj, entity): mapping = get_mask_mapping(entity, get_baked=entity.use_baked) #print('Mask!') elif m3: - source = layer_tree.nodes.get(entity.source) + if entity.active_edit_1: + source = layer_tree.nodes.get(entity.source_1) + else: source = layer_tree.nodes.get(entity.source) mapping = get_layer_mapping(layer) + entity = layer #print('Channel!') else: return False @@ -3617,7 +3644,7 @@ def refresh_temp_uv(obj, entity): rotation_y = mapping.inputs[2].default_value[1] if is_bl_newer_than(2, 81) else mapping.rotation[1] rotation_z = mapping.inputs[2].default_value[2] if is_bl_newer_than(2, 81) else mapping.rotation[2] - if entity.enable_uniform_scale and is_bl_newer_than(2, 81): + if hasattr(entity, 'enable_uniform_scale') and entity.enable_uniform_scale and is_bl_newer_than(2, 81): scale_x = scale_y = scale_z = get_entity_prop_value(entity, 'uniform_scale_value') else: scale_x = mapping.inputs[3].default_value[0] if is_bl_newer_than(2, 81) else mapping.scale[0] From 2f0a395063415ece9b99619c46db6694a6210c22 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 18 Jun 2025 16:40:30 +0700 Subject: [PATCH 199/283] Make custom channel data consistent with the layer lists. Also rename Preview Mode label from `Active Mask / Override` to `Active Mask / Custom Data` --- Layer.py | 10 ++++--- ListItem.py | 8 +++--- Root.py | 2 +- icons/dark/rgb_texture_icon.png | Bin 0 -> 1640 bytes icons/dark/value_texture_icon.png | Bin 0 -> 1639 bytes icons/dark/vector_texture_icon.png | Bin 0 -> 1666 bytes icons/legacy/rgb_texture_icon.png | Bin 0 -> 1969 bytes icons/legacy/value_texture_icon.png | Bin 0 -> 1972 bytes icons/legacy/vector_texture_icon.png | Bin 0 -> 1995 bytes icons/light/rgb_texture_icon.png | Bin 0 -> 1598 bytes icons/light/value_texture_icon.png | Bin 0 -> 1596 bytes icons/light/vector_texture_icon.png | Bin 0 -> 1642 bytes ui.py | 41 ++++++++++++++++++--------- 13 files changed, 39 insertions(+), 22 deletions(-) create mode 100644 icons/dark/rgb_texture_icon.png create mode 100644 icons/dark/value_texture_icon.png create mode 100644 icons/dark/vector_texture_icon.png create mode 100644 icons/legacy/rgb_texture_icon.png create mode 100644 icons/legacy/value_texture_icon.png create mode 100644 icons/legacy/vector_texture_icon.png create mode 100644 icons/light/rgb_texture_icon.png create mode 100644 icons/light/value_texture_icon.png create mode 100644 icons/light/vector_texture_icon.png diff --git a/Layer.py b/Layer.py index 3d1c80e4..538e94b6 100644 --- a/Layer.py +++ b/Layer.py @@ -4438,6 +4438,7 @@ def execute(self, context): ch = context.parent ch.override_type = self.type ch.override = True + if not ch.enable: ch.enable = True # Update list items ListItem.refresh_list_items(ch.id_data.yp, repoint_active=True) @@ -4465,6 +4466,7 @@ def execute(self, context): ch = context.parent ch.override_1_type = self.type ch.override_1 = True + if not ch.enable: ch.enable = True # Update list items ListItem.refresh_list_items(ch.id_data.yp, repoint_active=True) @@ -6836,15 +6838,15 @@ class YLayerChannel(bpy.types.PropertyGroup): tao : StringProperty(default='') active_edit : BoolProperty( - name = 'Active override channel for editing or preview', - description = 'Active override channel for editing or preview', + name = 'Active Custom Data', + description = 'Active custom data for editing or preview', default = False, update = update_channel_active_edit ) active_edit_1 : BoolProperty( - name = 'Active override channel for editing or preview', - description = 'Active override channel for editing or preview', + name = 'Active Custom Normal Data', + description = 'Active custom normal data for editing or preview', default = False, update = update_channel_active_edit ) diff --git a/ListItem.py b/ListItem.py index c35c3d1e..78d83829 100644 --- a/ListItem.py +++ b/ListItem.py @@ -53,11 +53,11 @@ def refresh_list_items(yp, repoint_active=False): for i, ch in enumerate(layer.channels): if not ch.enable: continue root_ch = yp.channels[i] - if ch.override and ch.override_type in {'IMAGE', 'VCOL'} and ch.active_edit: + if ch.override and ch.override_type != 'DEFAULT' and ch.active_edit: active_item_name = layer.name + ' ' + root_ch.name active_item_type = 'CHANNEL_OVERRIDE' - if root_ch.type == 'NORMAL' and ch.override_1 and ch.override_1_type == 'IMAGE' and ch.active_edit_1: + if root_ch.type == 'NORMAL' and ch.override_1 and ch.override_1_type != 'DEFAULT' and ch.active_edit_1: active_item_name = layer.name + ' ' + root_ch.name + ' 1' active_item_type = 'CHANNEL_OVERRIDE' active_item_is_second_member = True @@ -110,7 +110,7 @@ def refresh_list_items(yp, repoint_active=False): # Channel Override if (layer.expand_subitems and (root_ch.type != 'NORMAL' or ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}) and - (ch.override and ch.override_type in {'IMAGE', 'VCOL'}) and + (ch.override and ch.override_type != 'DEFAULT') and ch.enable and yp.enable_expandable_subitems ): @@ -136,7 +136,7 @@ def refresh_list_items(yp, repoint_active=False): # Channel Override 1 / Normal if (layer.expand_subitems and (root_ch.type == 'NORMAL' and ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'}) and - (ch.override_1 and ch.override_1_type in {'IMAGE', 'VCOL'}) and + (ch.override_1 and ch.override_1_type != 'DEFAULT') and ch.enable and yp.enable_expandable_subitems ): diff --git a/Root.py b/Root.py index 4370c271..0154e849 100644 --- a/Root.py +++ b/Root.py @@ -3961,7 +3961,7 @@ class YPaint(bpy.types.PropertyGroup): items = ( ('LAYER', 'Layer', ''), ('ALPHA', 'Alpha', ''), - ('SPECIFIC_MASK', 'Active Mask / Override', ''), + ('SPECIFIC_MASK', 'Active Mask / Custom Data', ''), ), #items = layer_preview_mode_type_items, default = 'LAYER', diff --git a/icons/dark/rgb_texture_icon.png b/icons/dark/rgb_texture_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b4f3bffbaca9295c169b709fa769beb91ef062bd GIT binary patch literal 1640 zcmV-u2ABDXP){$Mkp={{Xj%;TY? zh~E~A#h-=ULJ%0Dubs0sz(k zh~^?35mNxr6>8w$jq-7ph~@%to`%farIfk^0I7(^g5)6)or+pXEQp9{0QiiVSHpLv ziAgbYkJh?3&_qys-&*U*d-v}B8P#ZbcsN-umwS~`T~U4_`gdk#=5DhEhK7b*Yi&%F zS_dE`M6{w>;79L~#E9#<$-uO-JPVXcr4Fril%FH-qwezJ%vvjVG>~e35JlI(sFXw* zN0(BnRiLe1)q;OrAe$BkF|yX=hkg(8*Ar}v5v^2&pPTj}MZrHC03uodun{dh7g%ex zghJE>^?F^43j+S|auxj6Q3d1~5$O#9pdY2}M0C~|GZRL;EFzNN{4$ft>8Tdhl}uYjMBUN??C1IH)YQ~W^T~8N{i;&xm1wkEYs=MYwKz97 zSB>&!G8q9s*n9^Ol@akFY*PQ@!E+Nac?jUG^2>EW?#63^#6oPNi_WwUiC3B}Uru1R@>= zfS0w_Jx?pKPqA3+wR}GRd-z+-zO=M>r&8g4xg5La&ug=NJ3yrZU?a{GrzH}eE8y~F zhD(>MO{KI3P-BHc;rn%2fQS<19En~b>o|^B3kL=UBuk)Fdi+Vfj{A1*WcR`aZA9y( zC0}dNK3oDo%)hb%aQZaDi4zK!ml>Gt=MuDPiy7dxd;xI({(X03WTekp`k-F7eCCYO zeSH9{tG<@4Cf)b8D)5cbzjg z1MT0BC}!VCc+?fH3((ySaOeYoc5Fm))Jnw%2mPDGL_b+RjUpFKXD(4m!q?LR7 z`Bp&~j$O^md+qZ8NO>(5SuTUNw*O~|+qa1j6=H7b7I2UQc0=f#}&ro0MZSEAoJ>j04fw1CML+4pI5Q= zcKS!Do{t)OK_-(q0svz~6izqM!BVWz>@IolCjKzF8^7LQ47Z4 mZ%Uc3@7&4%6rA&f%kDp#oOfwMG0$}X0000%=6%m!)JFiYi z5YY}PWpii=qYi$hls9kRzWsO9qMn|fWT{kY7D8mA^48j!$;rv#dImZ>JGC*!XQS2u za0?L)n-=;pc*HTHwN8fA@(vhy^5jWMN*R@>$or_ff;cnA@EL2CsDBVew?qa)P2qDdLb(qBRU)!Pq=|?lpBZDtiNV1^+11q*iz*6b zd6TmT3RTbPD{R@nVG?d z4cg+*R1B1L4&LUBBJe#+~Hyiq?E^(mX@ZNPNtnH_I>{iBKoadF5~Xq zyLEqmzs%?JBAHCCmT(5~;K2hJ8XAJJu`!uSrCu_|9B|bVBklNGL_7unSt;d?r{$Jd+jA@y3w|$OzD!rH zT(QYy5~Y;yj*gE0zAg(8QAZ;;yf#WHW(!@kFD@>A!T#R6cdtHs_N*6=$Dvdz1?`xX zxy_3~RVo!27#P65zCJ9M%RFy<&CN_~F$02@&j4=Sx}|%2ds~b#A1I~hOAV zLAhLBwQ@5MJi6`Qzn_glYwe*my@0D45uGU(i^I{T!@1A3-CCOyLU25AbK-1ZhBj4P z4gec5yK$Uf@Ib<8Y^{CFw_#1N z@pydKwQJX4-@bjKr>BRDQ($2AJ$e+`9c(Q#5_ZGj_wL=haPi_rH9tS^ z$6~SjnM~%BHNBuvD7*;(gVtI%-9!gVW~1I+41%rcMa0**7PPgsnZt(_#qbQp)?D=M4!V lei$Ae9tywXx*Zge{{a4jq$3|@JTL$N002ovPDHLkV1mpG2fP3P literal 0 HcmV?d00001 diff --git a/icons/dark/vector_texture_icon.png b/icons/dark/vector_texture_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..acde09ed99e86f54e374ef401171e3a64dd370b7 GIT binary patch literal 1666 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 Dm}|fV literal 0 HcmV?d00001 diff --git a/icons/legacy/value_texture_icon.png b/icons/legacy/value_texture_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b3df853dae1689f16b915007dbe244ead7b747be GIT binary patch literal 1972 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 literal 0 HcmV?d00001 diff --git a/icons/light/rgb_texture_icon.png b/icons/light/rgb_texture_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc41a6fb06884f8d8edaef3e61031455372d022 GIT binary patch literal 1598 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 Date: Wed, 18 Jun 2025 19:51:53 +0700 Subject: [PATCH 200/283] Update property precision of edge detect radius --- Layer.py | 2 +- Mask.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Layer.py b/Layer.py index 538e94b6..1c3bbb40 100644 --- a/Layer.py +++ b/Layer.py @@ -7035,7 +7035,7 @@ class YLayer(bpy.types.PropertyGroup): edge_detect_radius : FloatProperty( name = 'Edge Detect Radius', description = 'Edge detect radius', - default=0.05, min=0.0, max=10.0, + default=0.05, min=0.0, max=10.0, precision=3, update = update_layer_edge_detect_radius ) diff --git a/Mask.py b/Mask.py index aa110520..b4c84720 100644 --- a/Mask.py +++ b/Mask.py @@ -2555,7 +2555,7 @@ class YLayerMask(bpy.types.PropertyGroup): edge_detect_radius : FloatProperty( name = 'Edge Detect Radius', description = 'Edge detect radius', - default=0.05, min=0.0, max=10.0, + default=0.05, min=0.0, max=10.0, precision=3, update = update_mask_edge_detect_radius ) From 49a183ae9249db00d559b538de95a7ae26f4ffb6 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 20 Jun 2025 15:26:23 +0700 Subject: [PATCH 201/283] Fix: Wrong vector displacement scale on Blender 4.5+ --- Bake.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Bake.py b/Bake.py index 2e57ebe3..49e3c897 100644 --- a/Bake.py +++ b/Bake.py @@ -3488,6 +3488,10 @@ def create_vector_displacement_node(tree, connect_to=None): if is_bl_newer_than(2, 80): vdisp = tree.nodes.new('ShaderNodeVectorDisplacement') + # Make sure vector displacement node has 1.0 scale + if 'Scale' in vdisp.inputs: + vdisp.inputs['Scale'].default_value = 1.0 + if vdisp and connect_to: create_link(tree, vdisp.outputs[0], connect_to) From 1dbdb36a83511fa370b8dfde057ed7318898a3d6 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 21 Jun 2025 16:47:58 +0700 Subject: [PATCH 202/283] Make sure to always set UV name to a layer/mask. Fix #304 --- Layer.py | 11 +++++++++-- Mask.py | 22 ++++++++++++++-------- common.py | 43 +++++++++++++++++++++++++++++++------------ 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/Layer.py b/Layer.py index 1c3bbb40..0858fd2b 100644 --- a/Layer.py +++ b/Layer.py @@ -101,6 +101,11 @@ def add_new_layer( layer = yp.layers.add() layer.type = layer_type layer.name = get_unique_name(layer_name, yp.layers) + + # Set default uv name if it's an empty string + if uv_name == '': + uv_name = get_default_uv_name() + layer.uv_name = uv_name check_uvmap_on_other_objects_with_same_mat(mat, uv_name) @@ -1139,6 +1144,7 @@ def invoke(self, context, event): # Make sure decal is off when adding non mappable layer if not is_mapping_possible(self.type) and self.texcoord_type == 'Decal': self.texcoord_type = 'UV' + self.mask_texcoord_type = 'UV' # Check if color id already being used while True: @@ -1146,8 +1152,9 @@ def invoke(self, context, event): self.mask_color_id = (random.uniform(COLORID_TOLERANCE, 1.0), random.uniform(COLORID_TOLERANCE, 1.0), random.uniform(COLORID_TOLERANCE, 1.0)) if not is_colorid_already_being_used(yp, self.mask_color_id): break - if obj.type != 'MESH': + if obj.type not in {'MESH', 'CURVE'}: self.texcoord_type = 'Generated' + self.mask_texcoord_type = 'Generated' else: if obj.type == 'MESH': uv_name = get_default_uv_name(obj, yp) @@ -1418,7 +1425,7 @@ def draw(self, context): crow = col.row(align=True) crow.prop(self, 'mask_texcoord_type', text='') - if self.mask_texcoord_type == 'UV': + if self.mask_texcoord_type == 'UV' and obj.type == 'MESH': crow.prop_search(self, "mask_uv_name", self, "uv_map_coll", text='', icon='GROUP_UVS') if not self.mask_image_filepath: diff --git a/Mask.py b/Mask.py index b4c84720..f09d2f89 100644 --- a/Mask.py +++ b/Mask.py @@ -126,8 +126,13 @@ def add_new_mask( mask.ao_distance = ao_distance enable_eevee_ao() + # Set default uv name if it's an empty string + if uv_name == '': + uv_name = get_default_uv_name() + + mask.uv_name = uv_name + if is_mapping_possible(mask_type): - mask.uv_name = uv_name mapping = new_node(tree, mask, 'mapping', 'ShaderNodeMapping', 'Mask Mapping') mapping.vector_type = 'POINT' if segment else 'TEXTURE' @@ -738,9 +743,9 @@ def invoke(self, context, event): if not is_mapping_possible(self.type) and self.texcoord_type == 'Decal': self.texcoord_type = 'UV' - if obj.type != 'MESH': + if obj.type not in {'MESH', 'CURVE'}: self.texcoord_type = 'Generated' - elif len(obj.data.uv_layers) > 0: + elif obj.type == 'MESH' and len(obj.data.uv_layers) > 0: self.uv_name = get_default_uv_name(obj, yp) @@ -901,11 +906,12 @@ def draw(self, context): crow.prop(self, 'texcoord_type', text='') if obj.type == 'MESH' and self.texcoord_type == 'UV': crow.prop_search(self, "uv_name", self, "uv_map_coll", text='', icon='GROUP_UVS') - if self.type == 'IMAGE': - if UDIM.is_udim_supported(): - col.prop(self, 'use_udim') - ccol = col.column() - ccol.prop(self, 'use_image_atlas') + + if self.type == 'IMAGE': + if UDIM.is_udim_supported(): + col.prop(self, 'use_udim') + ccol = col.column() + ccol.prop(self, 'use_image_atlas') if self.get_to_be_cleared_image_atlas(context, yp): col = self.layout.column(align=True) diff --git a/common.py b/common.py index ba07eb8a..686fc37d 100644 --- a/common.py +++ b/common.py @@ -4786,20 +4786,39 @@ def get_active_render_uv(obj): return uv_name -def get_default_uv_name(obj, yp=None): - uv_layers = get_uv_layers(obj) +def get_default_uv_name(obj=None, yp=None): uv_name = '' - if obj.type == 'MESH' and len(uv_layers) > 0: - active_name = uv_layers.active.name - if active_name == TEMP_UV: - if yp and len(yp.layers) > 0: - uv_name = yp.layers[yp.active_layer_index].uv_name - else: - for uv_layer in uv_layers: - if uv_layer.name != TEMP_UV: - uv_name = uv_layer.name - else: uv_name = uv_layers.active.name + if obj and obj.type == 'MESH': + + # Get active uv name from active mesh object + uv_layers = get_uv_layers(obj) + if len(uv_layers) > 0: + active_name = uv_layers.active.name + if active_name == TEMP_UV: + if yp and len(yp.layers) > 0: + uv_name = yp.layers[yp.active_layer_index].uv_name + else: + for uv_layer in uv_layers: + if uv_layer.name != TEMP_UV: + uv_name = uv_layer.name + else: uv_name = uv_layers.active.name + + else: + # Create temporary mesh + temp_mesh = bpy.data.meshes.new('___TEMP___') + + # Create temporary uv layer + if not is_bl_newer_than(2, 80): + uv_layers = temp_mesh.uv_textures + else: uv_layers = temp_mesh.uv_layers + uv_layer = uv_layers.new() + + # Get the uv name + uv_name = uv_layer.name + + # Remove temporary mesh + remove_datablock(bpy.data.meshes, temp_mesh) return uv_name From 8022bdc922f15ff7b03246935e56b6b70e042bbc Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 21 Jun 2025 17:39:24 +0700 Subject: [PATCH 203/283] Make sure to set default texture coordinate to `UV` for supported object types. --- Layer.py | 34 +++++++++++++++++----------------- Mask.py | 9 +++++---- Root.py | 4 ---- common.py | 6 ++++++ 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/Layer.py b/Layer.py index 0858fd2b..66a0098f 100644 --- a/Layer.py +++ b/Layer.py @@ -1152,20 +1152,20 @@ def invoke(self, context, event): self.mask_color_id = (random.uniform(COLORID_TOLERANCE, 1.0), random.uniform(COLORID_TOLERANCE, 1.0), random.uniform(COLORID_TOLERANCE, 1.0)) if not is_colorid_already_being_used(yp, self.mask_color_id): break - if obj.type not in {'MESH', 'CURVE'}: + if not is_object_work_with_uv(obj): self.texcoord_type = 'Generated' self.mask_texcoord_type = 'Generated' - else: - if obj.type == 'MESH': - uv_name = get_default_uv_name(obj, yp) - self.uv_map = uv_name - if self.add_mask: self.mask_uv_name = uv_name - # UV Map collections update - self.uv_map_coll.clear() - for uv in get_uv_layers(obj): - if not uv.name.startswith(TEMP_UV): - self.uv_map_coll.add().name = uv.name + if obj.type == 'MESH': + uv_name = get_default_uv_name(obj, yp) + self.uv_map = uv_name + if self.add_mask: self.mask_uv_name = uv_name + + # UV Map collections update + self.uv_map_coll.clear() + for uv in get_uv_layers(obj): + if not uv.name.startswith(TEMP_UV): + self.uv_map_coll.add().name = uv.name if get_user_preferences().skip_property_popups and not event.shift: return self.execute(context) @@ -2399,8 +2399,8 @@ def invoke_operator(self, context): elif ypup.default_image_resolution != 'DEFAULT': self.mask_image_resolution = ypup.default_image_resolution - if obj.type != 'MESH': - self.texcoord_type = 'Object' + if not is_object_work_with_uv(obj): + self.texcoord_type = 'Generated' # Use active uv layer name by default if obj.type == 'MESH': @@ -2907,8 +2907,8 @@ def invoke(self, context, event): node = get_active_ypaint_node() yp = self.yp = node.node_tree.yp - if obj.type != 'MESH': - self.texcoord_type = 'Object' + if not is_object_work_with_uv(obj): + self.texcoord_type = 'Generated' # Use active uv layer name by default if obj.type == 'MESH': @@ -3423,8 +3423,8 @@ def invoke(self, context, event): node = get_active_ypaint_node() yp = node.node_tree.yp - if obj.type != 'MESH': - self.texcoord_type = 'Object' + if not is_object_work_with_uv(obj): + self.texcoord_type = 'Generated' # Use active uv layer name by default if obj.type == 'MESH': diff --git a/Mask.py b/Mask.py index f09d2f89..c79d2157 100644 --- a/Mask.py +++ b/Mask.py @@ -743,9 +743,10 @@ def invoke(self, context, event): if not is_mapping_possible(self.type) and self.texcoord_type == 'Decal': self.texcoord_type = 'UV' - if obj.type not in {'MESH', 'CURVE'}: + if not is_object_work_with_uv(obj): self.texcoord_type = 'Generated' - elif obj.type == 'MESH' and len(obj.data.uv_layers) > 0: + + if obj.type == 'MESH' and len(obj.data.uv_layers) > 0: self.uv_name = get_default_uv_name(obj, yp) @@ -1174,8 +1175,8 @@ def invoke(self, context, event): yp = node.node_tree.yp self.layer = yp.layers[yp.active_layer_index] - if obj.type != 'MESH': - self.texcoord_type = 'Object' + if not is_object_work_with_uv(obj): + self.texcoord_type = 'Generated' # Use active uv layer name by default if obj.type == 'MESH' and len(obj.data.uv_layers) > 0: diff --git a/Root.py b/Root.py index 0154e849..4145b212 100644 --- a/Root.py +++ b/Root.py @@ -505,10 +505,6 @@ def invoke(self, context, event): self.type = bsdf_node.type self.target_bsdf_name = bsdf_node.name - # Normal channel does not works to non mesh object - if obj.type != 'MESH': - self.normal = False - self.not_muted_paint_opacity = False if is_bl_newer_than(2, 80): for area in context.screen.areas: diff --git a/common.py b/common.py index 686fc37d..78c8093c 100644 --- a/common.py +++ b/common.py @@ -5110,6 +5110,12 @@ def get_active_image_and_stuffs(obj, yp): return image, uv_name, src_of_img, entity, mapping, vcol +def is_object_work_with_uv(obj): + if not is_bl_newer_than(3): + return obj.type == 'MESH' + + return obj.type in {'MESH', 'CURVE'} + def set_active_uv_layer(obj, uv_name): uv_layers = get_uv_layers(obj) From f5c855cef9d20c232de46f0e3c6976cd25d57db6 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 24 Jun 2025 00:18:20 +0700 Subject: [PATCH 204/283] Fix: Cannot create new channel when channel list is empty --- node_connections.py | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/node_connections.py b/node_connections.py index 3668a076..d8822583 100644 --- a/node_connections.py +++ b/node_connections.py @@ -945,10 +945,6 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): #print('Reconnect tree ' + tree.name) - start = nodes.get(TREE_START) - end = nodes.get(TREE_END) - - texcoord = nodes.get(TEXCOORD) parallax = tree.nodes.get(PARALLAX) # Parallax @@ -1035,7 +1031,6 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): for tc in texcoord_lists: parallax_prep = tree.nodes.get(tc + PARALLAX_PREP_SUFFIX) if parallax_prep: - #create_link(tree, texcoord.outputs[tc], parallax_prep.inputs[0]) create_link(tree, get_essential_node(tree, TEXCOORD)[tc], parallax_prep.inputs[0]) if tangent and bitangent: create_link(tree, tangent, parallax_prep.inputs['Tangent']) @@ -1047,11 +1042,11 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): if parallax_ch: if parallax: - height = start.outputs.get(parallax_ch.name + io_suffix['HEIGHT']) + height = get_essential_node(tree, TREE_START).get(parallax_ch.name + io_suffix['HEIGHT']) if height: create_link(tree, height, parallax.inputs['base']) if baked_parallax: - height = start.outputs.get(parallax_ch.name + io_suffix['HEIGHT']) + height = get_essential_node(tree, TREE_START).get(parallax_ch.name + io_suffix['HEIGHT']) if height: create_link(tree, height, baked_parallax.inputs['base']) #print() @@ -1087,10 +1082,10 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): io_max_height_name = ch.name + io_suffix['MAX_HEIGHT'] io_vdisp_name = ch.name + io_suffix['VDISP'] - rgb = start.outputs[io_name] + rgb = get_essential_node(tree, TREE_START)[io_name] #if ch.enable_alpha and ch.type == 'RGB': if ch.enable_alpha: - alpha = start.outputs[io_alpha_name] + alpha = get_essential_node(tree, TREE_START)[io_alpha_name] else: alpha = get_essential_node(tree, ONE_VALUE)[0] height = None @@ -1110,14 +1105,14 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): vdisp = None if ch.type == 'NORMAL': - height_input = start.outputs.get(io_height_name) + height_input = get_essential_node(tree, TREE_START).get(io_height_name) height = height_input if height_input else get_essential_node(tree, ZERO_VALUE)[0] if is_normal_height_input_connected(ch): - max_height = start.outputs[io_max_height_name] + max_height = get_essential_node(tree, TREE_START)[io_max_height_name] else: max_height = get_essential_node(tree, ZERO_VALUE)[0] - vdisp_input = start.outputs.get(io_vdisp_name) + vdisp_input = get_essential_node(tree, TREE_START).get(io_vdisp_name) vdisp = vdisp_input if vdisp_input else get_essential_node(tree, ZERO_VALUE)[0] if ch.enable_smooth_bump: @@ -1172,8 +1167,8 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): if ch == yp.channels[yp.active_channel_index] and layer == yp.layers[yp.active_layer_index]: - col_preview = end.inputs.get(LAYER_VIEWER) - alpha_preview = end.inputs.get(LAYER_ALPHA_VIEWER) + col_preview = get_essential_node(tree, TREE_END).get(LAYER_VIEWER) + alpha_preview = get_essential_node(tree, TREE_END).get(LAYER_ALPHA_VIEWER) if col_preview: #create_link(tree, rgb, col_preview) if not layer.enable: @@ -1265,7 +1260,6 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): if parallax_ch and parallax: create_link(tree, parallax.outputs[TEXCOORD_IO_PREFIX + tc], inp) else: - #create_link(tree, texcoord.outputs[tc], inp) create_link(tree, get_essential_node(tree, TEXCOORD)[tc], inp) # Background layer @@ -1498,19 +1492,19 @@ def reconnect_yp_nodes(tree, merged_layer_ids = []): #print(rgb) # Blender 2.79 cycles does not need bump normal if not is_bl_newer_than(2, 80) and normal_no_bump and ch.type == 'NORMAL' and ch.enable_subdiv_setup: - create_link(tree, normal_no_bump, end.inputs[io_name]) - else: create_link(tree, rgb, end.inputs[io_name]) + create_link(tree, normal_no_bump, get_essential_node(tree, TREE_END)[io_name]) + else: create_link(tree, rgb, get_essential_node(tree, TREE_END)[io_name]) #if ch.type == 'RGB' and ch.enable_alpha: if ch.enable_alpha: - create_link(tree, alpha, end.inputs[io_alpha_name]) + create_link(tree, alpha, get_essential_node(tree, TREE_END)[io_alpha_name]) if ch.type == 'NORMAL' and not ch.use_baked_vcol: - if height and io_height_name in end.inputs: create_link(tree, height, end.inputs[io_height_name]) - if max_height and io_max_height_name in end.inputs: create_link(tree, max_height, end.inputs[io_max_height_name]) - if io_vdisp_name in end.inputs: + if height and io_height_name in get_essential_node(tree, TREE_END): create_link(tree, height, get_essential_node(tree, TREE_END)[io_height_name]) + if max_height and io_max_height_name in get_essential_node(tree, TREE_END): create_link(tree, max_height, get_essential_node(tree, TREE_END)[io_max_height_name]) + if io_vdisp_name in get_essential_node(tree, TREE_END): if yp.sculpt_mode: - create_link(tree, get_essential_node(tree, ZERO_VALUE)[0], end.inputs[io_vdisp_name]) - elif vdisp: create_link(tree, vdisp, end.inputs[io_vdisp_name]) + create_link(tree, get_essential_node(tree, ZERO_VALUE)[0], get_essential_node(tree, TREE_END)[io_vdisp_name]) + elif vdisp: create_link(tree, vdisp, get_essential_node(tree, TREE_END)[io_vdisp_name]) # Bake target image nodes for bt in yp.bake_targets: From 8f947d15b1b16f8cccea204454313a33308a3b33 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 25 Jun 2025 15:30:18 +0700 Subject: [PATCH 205/283] Fix: Cannot bake with denoise enabled on Blender 5.0 --- bake_common.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bake_common.py b/bake_common.py index c1be19ca..cdad9c79 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1032,6 +1032,11 @@ def recover_composite_settings(book): remove_datablock(bpy.data.objects, cam_obj) remove_datablock(bpy.data.cameras, cam) + # Remove compositor node tree + if is_bl_newer_than(5): + comp_tree = scene.node_tree + remove_datablock(bpy.data.node_groups, comp_tree) + # Remove temp scene remove_datablock(bpy.data.scenes, scene) @@ -1070,7 +1075,9 @@ def denoise_image(image): tree = scene.node_tree composite = [n for n in tree.nodes if n.type == 'COMPOSITE'][0] denoise = tree.nodes.new('CompositorNodeDenoise') - denoise.use_hdr = image.is_float + if is_bl_newer_than(5): + denoise.inputs.get('HDR').default_value = image.is_float + else: denoise.use_hdr = image.is_float image_node = tree.nodes.new('CompositorNodeImage') image_node.image = image From 406a1bf8abd02bc95fafc299f3f38c9259f55d48 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 26 Jun 2025 13:02:12 +0700 Subject: [PATCH 206/283] Use `Mix` blend type by default for `Other Object Color` and `Other Object Channels` baking --- BakeToLayer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BakeToLayer.py b/BakeToLayer.py index 5e2e8113..483b9152 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -475,6 +475,7 @@ def invoke(self, context, event): self.normal_blend_type = 'OVERLAY' elif self.type == 'OTHER_OBJECT_EMISSION': + self.blend_type = 'MIX' self.subsurf_influence = False self.margin = 0 @@ -491,6 +492,7 @@ def invoke(self, context, event): self.margin = 0 elif self.type == 'OTHER_OBJECT_CHANNELS': + self.blend_type = 'MIX' self.subsurf_influence = False self.use_image_atlas = False self.margin = 0 From 2438eb085491025baf0428d109e9cfda2c2e5d8d Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 30 Jun 2025 15:40:47 +0700 Subject: [PATCH 207/283] Fix: Updating blend file that has color ramp on older versions can produce wrong result --- versioning.py | 52 ++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/versioning.py b/versioning.py index 059ff065..2eb5f1ba 100644 --- a/versioning.py +++ b/versioning.py @@ -225,6 +225,32 @@ def update_yp_tree(tree): # SECTION I: Update based on yp version + # NOTE: This update should happen earlier since it affects how the node connections + # Version 2.3.2 has ramp modifier affect option + if version_tuple(yp.version) < (2, 3, 2): + yp.halt_update = True + + for ch in yp.channels: + for mod in ch.modifiers: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + for layer in yp.layers: + for mod in layer.modifiers: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + for ch in layer.channels: + for mod in ch.modifiers: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + for mod in ch.modifiers_1: + if mod.type == 'COLOR_RAMP': + mod.affect_alpha = True + + yp.halt_update = False + # Version 0.9.1 and above will fix wrong bake type stored on images bake type if version_tuple(yp.version) < (0, 9, 1): #print(cur_version) @@ -931,36 +957,12 @@ def update_yp_tree(tree): # Update linear nodes since it gets refactored check_yp_linear_nodes(yp, reconnect=True) - # Version 2.3.2 has bake cage option and ramp modifier affect option + # Version 2.3.2 has bake cage option if version_tuple(yp.version) < (2, 3, 2): # Mark use cage object for older bake info update_bake_info_use_cages(yp) - # Update color ramp modifier affect option - yp.halt_update = True - - for ch in yp.channels: - for mod in ch.modifiers: - if mod.type == 'COLOR_RAMP': - mod.affect_alpha = True - - for layer in yp.layers: - for mod in layer.modifiers: - if mod.type == 'COLOR_RAMP': - mod.affect_alpha = True - - for ch in layer.channels: - for mod in ch.modifiers: - if mod.type == 'COLOR_RAMP': - mod.affect_alpha = True - - for mod in ch.modifiers_1: - if mod.type == 'COLOR_RAMP': - mod.affect_alpha = True - - yp.halt_update = False - # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From e355aeb55d381f3f81831dd8a3af17873106d63d Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 3 Jul 2025 13:41:48 +0700 Subject: [PATCH 208/283] Update `active_edit` property tooltip --- Layer.py | 4 ++-- Mask.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Layer.py b/Layer.py index 66a0098f..f37bd881 100644 --- a/Layer.py +++ b/Layer.py @@ -6846,14 +6846,14 @@ class YLayerChannel(bpy.types.PropertyGroup): active_edit : BoolProperty( name = 'Active Custom Data', - description = 'Active custom data for editing or preview', + description = 'Active custom data for Blender\'s paint mode and edit mode, or '+get_addon_title()+'\'s Custom Data preview mode', default = False, update = update_channel_active_edit ) active_edit_1 : BoolProperty( name = 'Active Custom Normal Data', - description = 'Active custom normal data for editing or preview', + description = 'Active custom normal data for Blender\'s paint mode and edit mode, or '+get_addon_title()+'\'s Custom Data preview mode', default = False, update = update_channel_active_edit ) diff --git a/Mask.py b/Mask.py index c79d2157..44aa27d4 100644 --- a/Mask.py +++ b/Mask.py @@ -2360,8 +2360,8 @@ class YLayerMask(bpy.types.PropertyGroup): ) active_edit : BoolProperty( - name = 'Active mask for editing or preview', - description = 'Active mask for editing or preview', + name = 'Active Mask', + description = 'Active mask for Blender\'s paint mode and edit mode, or '+get_addon_title()+'\'s Mask preview mode', default = False, update = update_mask_active_edit ) From ebaa1d38ba21b8df86f18e2055b991d0cb1f0a6c Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 4 Jul 2025 00:20:05 +0700 Subject: [PATCH 209/283] Add info about elapsed time message after baking process is completed. Also fix a bug where material become black after merging masks. --- Bake.py | 29 ++++++++++++++++------------- BakeToLayer.py | 15 +++++++++++++-- Layer.py | 2 ++ Mask.py | 5 +++-- bake_common.py | 13 +++++++++++-- 5 files changed, 45 insertions(+), 19 deletions(-) diff --git a/Bake.py b/Bake.py index 49e3c897..926753cc 100644 --- a/Bake.py +++ b/Bake.py @@ -547,11 +547,7 @@ def execute(self, context): # Refresh mapping and stuff yp.active_layer_index = yp.active_layer_index - print( - 'INFO: All layers and masks using', self.from_uv_map, - 'are transferred to', self.uv_map, - 'in', '{:0.2f}'.format(time.time() - T), 'seconds!' - ) + self.report({'INFO'}, 'All layers and masks using '+self.from_uv_map+' are transferred to '+self.uv_map+' in '+'{:0.2f}'.format(time.time() - T)+' seconds!') return {'FINISHED'} @@ -639,6 +635,7 @@ def execute(self, context): mat = get_active_material() yp = self.entity.id_data.yp objs = get_all_objects_with_same_materials(mat) + ori_uv_name = self.entity.uv_name # Prepare bake settings book = remember_before_bake(yp) @@ -664,12 +661,7 @@ def execute(self, context): # Refresh mapping and stuff yp.active_layer_index = yp.active_layer_index - print( - 'INFO:', self.entity.name, - 'UV is transferred from', self.entity.uv_name, - 'to', self.uv_map, - 'in', '{:0.2f}'.format(time.time() - T), 'seconds!' - ) + self.report({'INFO'}, self.entity.name+' UV is transferred from '+ori_uv_name+' to '+self.uv_map+' in '+'{:0.2f}'.format(time.time() - T)+' seconds!') return {'FINISHED'} @@ -2064,7 +2056,9 @@ def execute(self, context): for o in temp_objs: remove_mesh_obj(o) - print('INFO:', tree.name, 'channels are baked in', '{:0.2f}'.format(time.time() - T), 'seconds!') + if self.only_active_channel: + self.report({'INFO'}, yp.channels[yp.active_channel_index].name+' channel is baked in '+'{:0.2f}'.format(time.time() - T)+' seconds!') + else: self.report({'INFO'}, tree.name+' channels are baked in '+'{:0.2f}'.format(time.time() - T)+' seconds!') return {'FINISHED'} @@ -2573,6 +2567,8 @@ def execute(self, context): self.report({'ERROR'}, "Merge failed for some reason!") return {'CANCELLED'} + self.report({'INFO'}, 'Merging layers is done in '+'{:0.2f}'.format(time.time() - T)+' seconds!') + return {'FINISHED'} class YMergeMask(bpy.types.Operator, BaseBakeOperator): @@ -2643,6 +2639,8 @@ def check(self, context): def execute(self, context): if not self.is_cycles_exist(context): return {'CANCELLED'} + T = time.time() + mask = self.mask layer = self.layer yp = layer.id_data.yp @@ -2793,7 +2791,7 @@ def execute(self, context): mask.modifiers.remove(i) # Remove neighbor mask - Mask.remove_mask(layer, neighbor_mask, obj) + Mask.remove_mask(layer, neighbor_mask, obj, refresh_list=False) # Remove bake nodes simple_remove_node(mat.node_tree, tex) @@ -2821,6 +2819,11 @@ def execute(self, context): mask.active_edit = True yp.active_layer_index = yp.active_layer_index + # Refresh list items + ListItem.refresh_list_items(yp, repoint_active=True) + + self.report({'INFO'}, 'Merging masks is done in '+'{:0.2f}'.format(time.time() - T)+' seconds!') + return {'FINISHED'} class YBakeTempImage(bpy.types.Operator, BaseBakeOperator): diff --git a/BakeToLayer.py b/BakeToLayer.py index 483b9152..f3587f8a 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -906,6 +906,9 @@ def execute(self, context): ypui.layer_ui.expand_source = True ypui.need_update = True + if image: + self.report({'INFO'}, 'Baking '+bake_type_labels[self.type]+' is done in '+'{:0.2f}'.format(rdict['time_elapsed'])+' seconds!') + return {'FINISHED'} class YBakeEntityToImage(bpy.types.Operator, BaseBakeOperator): @@ -1209,6 +1212,7 @@ def execute(self, context): # Entity checking entity = self.mask if self.mask else self.layer + entity_label = mask_type_labels[entity.type] if self.mask else layer_type_labels[entity.type] # Get bake properties bprops = get_bake_properties_from_self(self) @@ -1279,6 +1283,9 @@ def execute(self, context): reconnect_yp_nodes(node.node_tree) rearrange_yp_nodes(node.node_tree) + if image: + self.report({'INFO'}, 'Baking '+entity_label+' is done in '+'{:0.2f}'.format(time.time() - T)+' seconds!') + return {"FINISHED"} class YRemoveBakedEntity(bpy.types.Operator): @@ -1373,9 +1380,13 @@ def execute(self, context): node = get_active_ypaint_node() yp = node.node_tree.yp - rebake_baked_images(yp) + baked_counts = rebake_baked_images(yp) + + if baked_counts == 0: + self.report({'ERROR'}, 'No baked layer/mask used!') + return {'CANCELLED'} - print('REBAKE ALL IMAGES: Rebaking all images is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') + self.report({'INFO'}, 'Rebaking all baked layers & masks is done in '+'{:0.2f}'.format(time.time() - T)+' seconds!') return {'FINISHED'} class YRebakeSpecificLayers(bpy.types.Operator, BaseBakeOperator): diff --git a/Layer.py b/Layer.py index f37bd881..7e77317e 100644 --- a/Layer.py +++ b/Layer.py @@ -5632,6 +5632,8 @@ def execute(self, context): pasted_layer_ids = [i for i, l in enumerate(yp.layers) if l.name in pasted_layer_names] bpy.ops.wm.y_rebake_specific_layers(layer_ids=str(pasted_layer_ids)) + self.report({'INFO'}, 'Rebaking pasted layers is done in '+'{:0.2f}'.format(time.time() - T)+' seconds!') + # TODO: Refactor common functions for adding new data (add_new_layer, add_new_mask, etc) to avoid cyclic imports # Refresh active layer diff --git a/Mask.py b/Mask.py index 44aa27d4..63705f16 100644 --- a/Mask.py +++ b/Mask.py @@ -202,7 +202,7 @@ def remove_mask_channel(tree, layer, ch_index): for mask in layer.masks: mask.channels.remove(ch_index) -def remove_mask(layer, mask, obj): +def remove_mask(layer, mask, obj, refresh_list=True): tree = get_tree(layer) yp = layer.id_data.yp @@ -256,7 +256,8 @@ def remove_mask(layer, mask, obj): layer.masks.remove(mask_index) # Update list items - ListItem.refresh_list_items(yp) + if refresh_list: + ListItem.refresh_list_items(yp) def get_new_mask_name(obj, layer, mask_type, modifier_type=''): surname = '(' + layer.name + ')' diff --git a/bake_common.py b/bake_common.py index cdad9c79..947fe605 100644 --- a/bake_common.py +++ b/bake_common.py @@ -3798,11 +3798,14 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Refresh mapping and stuff #yp.active_layer_index = yp.active_layer_index - if image: print('BAKE TO LAYER: Baking', image.name, 'is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') - else: print('BAKE TO LAYER: No image created! Executed in', '{:0.2f}'.format(time.time() - T), 'seconds!') + time_elapsed = time.time() - T + + if image: print('BAKE TO LAYER: Baking', image.name, 'is done in', '{:0.2f}'.format(time_elapsed), 'seconds!') + else: print('BAKE TO LAYER: No image created! Executed in', '{:0.2f}'.format(time_elapsed), 'seconds!') rdict['active_id'] = active_id rdict['image'] = image + rdict['time_elapsed'] = time_elapsed return rdict @@ -4220,6 +4223,8 @@ def rebake_baked_images(yp, specific_layers=[]): entities, images, segment_names, segment_name_props = get_yp_entities_images_and_segments(yp, specific_layers=specific_layers) + baked_counts = 0 + for i, image in enumerate(images): print('INFO: Rebaking image \''+image.name+'\'...') @@ -4268,8 +4273,12 @@ def rebake_baked_images(yp, specific_layers=[]): bake_entity_as_image(entity, bprops=bake_properties, set_image_to_entity=True) else: bake_to_entity(bprops=bake_properties, overwrite_img=image, segment=segment) + baked_counts += 1 + print('INFO: Rebaking images is done at ', '{:0.2f}'.format(time.time() - tt), 'seconds!') + return baked_counts + def get_duplicated_mesh_objects(scene, objs, hide_original=False): tt = time.time() print('INFO: Duplicating mesh(es) for baking...') From cb3769659feb7864d8ae1c972fa1fe024eacd0b4 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 4 Jul 2025 13:58:40 +0700 Subject: [PATCH 210/283] Add time elapsed message for entering and applying vdm sculpt. --- vector_displacement.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector_displacement.py b/vector_displacement.py index 283c2a65..7699d238 100644 --- a/vector_displacement.py +++ b/vector_displacement.py @@ -845,7 +845,7 @@ def execute(self, context): bpy.ops.object.mode_set(mode='SCULPT') - print('INFO: Sculpt mode is entered in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') + self.report({'INFO'}, 'Sculpt mode is entered in '+'{:0.2f}'.format(time.time() - T)+' seconds!') return {'FINISHED'} @@ -908,7 +908,7 @@ def execute(self, context): if space.type == 'VIEW_3D' and space.shading.type not in {'MATERIAL', 'RENDERED'}: space.shading.type = 'MATERIAL' - print('INFO: Applying sculpt to VDM is done in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') + self.report({'INFO'}, 'Applying sculpt to VDM is done in '+'{:0.2f}'.format(time.time() - T)+' seconds!') return {'FINISHED'} From 13ac241da0e07dac168b78b2814a56b4a988afa9 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 4 Jul 2025 15:18:18 +0700 Subject: [PATCH 211/283] Fix: Baked vector displacement image isn't listed in baked normal channel images list --- common.py | 47 ++++++++++++++++++++++++++--------------------- ui.py | 22 ++++++++++++++++++---- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/common.py b/common.py index 78c8093c..b1889be7 100644 --- a/common.py +++ b/common.py @@ -4895,28 +4895,33 @@ def set_active_paint_slot_entity(yp): if yp.use_baked and len(yp.channels) > 0: ch = yp.channels[yp.active_channel_index] - baked = root_tree.nodes.get(ch.baked) - if baked and baked.image: - if ch.type == 'NORMAL': - baked_disp = root_tree.nodes.get(ch.baked_disp) - baked_normal_overlay = root_tree.nodes.get(ch.baked_normal_overlay) - - cur_image = get_active_paint_slot_image() - - if cur_image == baked.image and baked_disp: - baked_disp.select = True - root_tree.nodes.active = baked_disp - image = baked_disp.image - elif baked_disp and cur_image == baked_disp.image and baked_normal_overlay: - baked_normal_overlay.select = True - root_tree.nodes.active = baked_normal_overlay - image = baked_normal_overlay.image - else: - baked.select = True - root_tree.nodes.active = baked - image = baked.image + if ch.type == 'NORMAL': + cur_image = get_active_paint_slot_image() + + # Cycle through all baked normal images + orders = ['baked', 'baked_normal_overlay', 'baked_disp', 'baked_vdisp'] + for i, prop in enumerate(orders): + cur_baked = root_tree.nodes.get(getattr(ch, prop)) + if cur_baked and cur_baked.image == cur_image: + next_i = i + for j in range(len(orders)): + if next_i == len(orders)-1: + next_i = 0 + else: next_i += 1 + + next_prop = orders[next_i] + next_baked = root_tree.nodes.get(getattr(ch, next_prop)) + + if next_baked: + next_baked.select = True + image = next_baked.image + root_tree.nodes.active = next_baked + break + break - else: + if not image: + baked = root_tree.nodes.get(ch.baked) + if baked and baked.image: baked.select = True root_tree.nodes.active = baked image = baked.image diff --git a/ui.py b/ui.py index 7fe96a1f..bbbb5254 100644 --- a/ui.py +++ b/ui.py @@ -3268,11 +3268,11 @@ def draw_layers_ui(context, layout, node): baked_normal_overlay = nodes.get(root_ch.baked_normal_overlay) if baked_normal_overlay and baked_normal_overlay.image: row = bcol.row(align=True) - row.active = not root_ch.disable_global_baked + row.active = not root_ch.disable_global_baked or yp.enable_baked_outside if baked_normal_overlay.image.is_dirty: title = baked_normal_overlay.image.name + ' *' else: title = baked_normal_overlay.image.name - if root_ch.disable_global_baked: + if root_ch.disable_global_baked and not yp.enable_baked_outside: title += ' (Disabled)' row.label(text=title, icon_value=lib.get_icon('image')) @@ -3282,17 +3282,31 @@ def draw_layers_ui(context, layout, node): baked_disp = nodes.get(root_ch.baked_disp) if baked_disp and baked_disp.image: row = bcol.row(align=True) - row.active = not root_ch.disable_global_baked + row.active = not root_ch.disable_global_baked or yp.enable_baked_outside if baked_disp.image.is_dirty: title = baked_disp.image.name + ' *' else: title = baked_disp.image.name - if root_ch.disable_global_baked: + if root_ch.disable_global_baked and not yp.enable_baked_outside: title += ' (Disabled)' row.label(text=title, icon_value=lib.get_icon('image')) if baked_disp.image.packed_file: row.label(text='', icon='PACKAGE') + baked_vdisp = nodes.get(root_ch.baked_vdisp) + if baked_vdisp and baked_vdisp.image: + row = bcol.row(align=True) + row.active = not root_ch.disable_global_baked or yp.enable_baked_outside + if baked_vdisp.image.is_dirty: + title = baked_vdisp.image.name + ' *' + else: title = baked_vdisp.image.name + if root_ch.disable_global_baked and not yp.enable_baked_outside: + title += ' (Disabled)' + row.label(text=title, icon_value=lib.get_icon('image')) + + if baked_vdisp.image.packed_file: + row.label(text='', icon='PACKAGE') + btimages = [] for bt in yp.bake_targets: for letter in rgba_letters: From c41f635e197068f58d05dce1f5576e5244947b6a Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 4 Jul 2025 16:41:55 +0700 Subject: [PATCH 212/283] Make sure to only bake necessary channel images. --- bake_common.py | 172 +++++++++++++++++++++++++------------------------ common.py | 12 ++++ 2 files changed, 101 insertions(+), 83 deletions(-) diff --git a/bake_common.py b/bake_common.py index 947fe605..360b64d7 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1934,6 +1934,7 @@ def bake_channel( mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) # Bake displacement + disp_img = None if root_ch.type == 'NORMAL': # Make sure height outputs available @@ -2108,105 +2109,110 @@ def bake_channel( else: baked_vdisp.image = vdisp_img - ### Max Height - - # Create target image - if UDIM.is_udim_supported(): - mh_img = bpy.data.images.new( - name='____MAXHEIGHT_TEMP', width=100, height=100, - alpha=False, tiled=False, float_buffer=True - ) + if not any_layers_using_disp(yp): + # Remove baked_disp + remove_node(tree, root_ch, 'baked_disp') + remove_node(tree, root_ch, 'end_max_height') else: - mh_img = bpy.data.images.new( - name='____MAXHEIGHT_TEMP', width=100, height=100, - alpha=False, float_buffer=True - ) - mh_img.colorspace_settings.name = get_noncolor_name() - tex.image = mh_img - - # Bake setup (doing little bit doing hacky reconnection here) - start = tree.nodes.get(TREE_START) - end = tree.nodes.get(TREE_END) - ori_soc = end.inputs[root_ch.name].links[0].from_socket - max_height = start.outputs.get(root_ch.name + io_suffix['HEIGHT']) - # Get the last layer that output max height - for l in yp.layers: - if not l.enable or not l.channels[get_channel_index(root_ch)].enable: continue - lnode = tree.nodes.get(l.group_node) - outp = lnode.outputs.get(root_ch.name + io_suffix['MAX_HEIGHT']) - if outp: - max_height = outp - break - create_link(tree, max_height, end.inputs[root_ch.name]) - create_link(mat.node_tree, node.outputs[root_ch.name + io_suffix['MAX_HEIGHT']], - emit.inputs[0]) + ### Max Height - # Use high margin to make sure all pixels are covered - ori_margin = bpy.context.scene.render.bake.margin - bpy.context.scene.render.bake.margin = 1000 + # Create target image + if UDIM.is_udim_supported(): + mh_img = bpy.data.images.new( + name='____MAXHEIGHT_TEMP', width=100, height=100, + alpha=False, tiled=False, float_buffer=True + ) + else: + mh_img = bpy.data.images.new( + name='____MAXHEIGHT_TEMP', width=100, height=100, + alpha=False, float_buffer=True + ) - # Bake - print('BAKE CHANNEL: Baking max height of ' + root_ch.name + ' channel...') - bake_object_op() + mh_img.colorspace_settings.name = get_noncolor_name() + tex.image = mh_img - # Recover margin - bpy.context.scene.render.bake.margin = ori_margin + # Bake setup (doing little bit doing hacky reconnection here) + start = tree.nodes.get(TREE_START) + end = tree.nodes.get(TREE_END) + ori_soc = end.inputs[root_ch.name].links[0].from_socket + max_height = start.outputs.get(root_ch.name + io_suffix['HEIGHT']) + # Get the last layer that output max height + for l in yp.layers: + if not l.enable or not l.channels[get_channel_index(root_ch)].enable: continue + lnode = tree.nodes.get(l.group_node) + outp = lnode.outputs.get(root_ch.name + io_suffix['MAX_HEIGHT']) + if outp: + max_height = outp + break + create_link(tree, max_height, end.inputs[root_ch.name]) + create_link(mat.node_tree, node.outputs[root_ch.name + io_suffix['MAX_HEIGHT']], + emit.inputs[0]) - # Recover connection - create_link(tree, ori_soc, end.inputs[root_ch.name]) + # Use high margin to make sure all pixels are covered + ori_margin = bpy.context.scene.render.bake.margin + bpy.context.scene.render.bake.margin = 1000 - # Set baked max height image - max_height_value = mh_img.pixels[0] - end_max_height = check_new_node(tree, root_ch, 'end_max_height', 'ShaderNodeValue', 'Max Height') - end_max_height.outputs[0].default_value = max_height_value + # Bake + print('BAKE CHANNEL: Baking max height of ' + root_ch.name + ' channel...') + bake_object_op() - # Remove max height image - remove_datablock(bpy.data.images, mh_img, user=tex, user_prop='image') + # Recover margin + bpy.context.scene.render.bake.margin = ori_margin - ### Displacement + # Recover connection + create_link(tree, ori_soc, end.inputs[root_ch.name]) - # Create target image - baked_disp = tree.nodes.get(root_ch.baked_disp) - if not baked_disp: - baked_disp = new_node( - tree, root_ch, 'baked_disp', 'ShaderNodeTexImage', - 'Baked ' + root_ch.name + ' Displacement' - ) - if hasattr(baked_disp, 'color_space'): - baked_disp.color_space = 'NONE' - - if baked_disp.image: - disp_img_name = baked_disp.image.name - filepath = baked_disp.image.filepath - #filepath = get_valid_filepath(baked_disp.image, use_hdr) - baked_disp.image.name = '____DISP_TEMP' - else: - disp_img_name = tree.name + ' Displacement' + # Set baked max height image + max_height_value = mh_img.pixels[0] + end_max_height = check_new_node(tree, root_ch, 'end_max_height', 'ShaderNodeValue', 'Max Height') + end_max_height.outputs[0].default_value = max_height_value - # Set interpolation to cubic - baked_disp.interpolation = 'Cubic' + # Remove max height image + remove_datablock(bpy.data.images, mh_img, user=tex, user_prop='image') - disp_img = img.copy() - disp_img.name = disp_img_name - disp_img.use_generated_float = use_float_for_displacement - disp_img.colorspace_settings.name = get_noncolor_name() - color = (0.5, 0.5, 0.5, 1.0) + ### Displacement - if img.source == 'TILED': - UDIM.fill_tiles(disp_img, color) - UDIM.initial_pack_udim(disp_img, color) - else: - disp_img.generated_color = color - if filepath != '' and ( - (use_udim and '..' in filepath) or - (not use_udim and '..' not in filepath) - ): - disp_img.filepath = filepath + # Create target image + baked_disp = tree.nodes.get(root_ch.baked_disp) + if not baked_disp: + baked_disp = new_node( + tree, root_ch, 'baked_disp', 'ShaderNodeTexImage', + 'Baked ' + root_ch.name + ' Displacement' + ) + if hasattr(baked_disp, 'color_space'): + baked_disp.color_space = 'NONE' + + if baked_disp.image: + disp_img_name = baked_disp.image.name + filepath = baked_disp.image.filepath + #filepath = get_valid_filepath(baked_disp.image, use_hdr) + baked_disp.image.name = '____DISP_TEMP' + else: + disp_img_name = tree.name + ' Displacement' + + # Set interpolation to cubic + baked_disp.interpolation = 'Cubic' + + disp_img = img.copy() + disp_img.name = disp_img_name + disp_img.use_generated_float = use_float_for_displacement + disp_img.colorspace_settings.name = get_noncolor_name() + color = (0.5, 0.5, 0.5, 1.0) + + if img.source == 'TILED': + UDIM.fill_tiles(disp_img, color) + UDIM.initial_pack_udim(disp_img, color) + else: + disp_img.generated_color = color + if filepath != '' and ( + (use_udim and '..' in filepath) or + (not use_udim and '..' not in filepath) + ): + disp_img.filepath = filepath elif ch.normal_map_type == 'BUMP_MAP': disp_img = img - else: disp_img = None if disp_img: diff --git a/common.py b/common.py index b1889be7..89cebe94 100644 --- a/common.py +++ b/common.py @@ -5475,6 +5475,7 @@ def is_any_layer_using_channel(root_ch, node=None): return True for layer in yp.layers: + if layer.type in {'GROUP', 'BACKGROUND'}: continue if layer.channels[ch_idx].enable: return True @@ -5942,6 +5943,17 @@ def any_layers_using_vdisp(yp): return False +def any_layers_using_disp(yp): + + for l in yp.layers: + if l.type in {'GROUP', 'BACKGROUND'}: continue + c = get_height_channel(l) + if not c or not l.enable or not c.enable: continue + if c.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: + return True + + return False + # ShaderNodeVertexColor can't use bump map, so ShaderNodeAttribute will be used for now def get_vcol_bl_idname(): #if is_bl_newer_than(2, 81): From 8b212c8d29ad004127aa71944d1eea5a7a8819ef Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 5 Jul 2025 14:32:24 +0700 Subject: [PATCH 213/283] Fix: Incorrect bump scale when `Write Height` is disabled --- __init__.py | 2 +- bake_common.py | 2 +- blender_manifest.toml | 2 +- common.py | 2 +- input_outputs.py | 40 +++++++++++++++++++++------------------- lib.blend | Bin 7280468 -> 7275580 bytes node_connections.py | 15 ++++++++------- subtree.py | 4 ++-- ui.py | 2 +- versioning.py | 16 +++++++++++++--- 10 files changed, 49 insertions(+), 36 deletions(-) diff --git a/__init__.py b/__init__.py index cd5d1abb..2b88985c 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 3, 2), + "version": (2, 3, 3), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/bake_common.py b/bake_common.py index 360b64d7..a855759b 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1943,7 +1943,7 @@ def bake_channel( if not target_layer: ### Normal overlay only - if is_overlay_normal_empty(yp) and not root_ch.enable_subdiv_setup: + if (is_overlay_normal_empty(yp) or (not any_layers_using_disp(yp) and not any_layers_using_vdisp(yp))) and not root_ch.enable_subdiv_setup: # Remove baked_normal_overlay remove_node(tree, root_ch, 'baked_normal_overlay') else: diff --git a/blender_manifest.toml b/blender_manifest.toml index f7c778ef..dab10f09 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.3.2" +version = "2.3.3" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " diff --git a/common.py b/common.py index 89cebe94..6e54d8ee 100644 --- a/common.py +++ b/common.py @@ -5949,7 +5949,7 @@ def any_layers_using_disp(yp): if l.type in {'GROUP', 'BACKGROUND'}: continue c = get_height_channel(l) if not c or not l.enable or not c.enable: continue - if c.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: + if c.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'} and c.write_height: return True return False diff --git a/input_outputs.py b/input_outputs.py index 0a4a6ac8..b6f62bf4 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -919,29 +919,31 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) if root_ch.type == 'NORMAL': - # Height/bump distance input - if ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: - dirty = create_prop_input(ch, 'bump_distance', valid_inputs, input_index, dirty) - input_index += 1 - - # Height/bump midlevel input - if ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: - dirty = create_prop_input(ch, 'bump_midlevel', valid_inputs, input_index, dirty) - input_index += 1 + if layer.type != 'GROUP': - # Normal map strength input - if ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'}: - dirty = create_prop_input(ch, 'normal_strength', valid_inputs, input_index, dirty) - input_index += 1 - elif ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': - dirty = create_prop_input(ch, 'vdisp_strength', valid_inputs, input_index, dirty) - input_index += 1 + # Height/bump distance input + if ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: + dirty = create_prop_input(ch, 'bump_distance', valid_inputs, input_index, dirty) + input_index += 1 - # Smooth bump multiplier input: - if root_ch.enable_smooth_bump: + # Height/bump midlevel input if ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: - dirty = create_prop_input(ch, 'bump_smooth_multiplier', valid_inputs, input_index, dirty) + dirty = create_prop_input(ch, 'bump_midlevel', valid_inputs, input_index, dirty) + input_index += 1 + + # Normal map strength input + if ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'}: + dirty = create_prop_input(ch, 'normal_strength', valid_inputs, input_index, dirty) input_index += 1 + elif ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': + dirty = create_prop_input(ch, 'vdisp_strength', valid_inputs, input_index, dirty) + input_index += 1 + + # Smooth bump multiplier input: + if root_ch.enable_smooth_bump: + if ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: + dirty = create_prop_input(ch, 'bump_smooth_multiplier', valid_inputs, input_index, dirty) + input_index += 1 # Normal height/bump distance input #if ch.normal_map_type in {'NORMAL_MAP', 'BUMP_NORMAL_MAP'}: diff --git a/lib.blend b/lib.blend index ecb619e767c7cee479e4dcc121bab2a1b3d0418c..09481c7a683d8a10f005ed3161c63237ae0cd205 100644 GIT binary patch literal 7275580 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

J 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 z zUYpH3^dHQx;+Ob?kIAPvKEMO`z}^oC+)`uh@Nw-Hj_!E;Yu9EY#(Pi^ncxzEUl_XF zAAC$c#qq&-417Y$xSTrBijUWM6~&Q8YdrqS>pz$6cZeflUe({=9UqEMn0yp`&_P6s z`7dw*PRIuQLc81Iv_r<@TW5Ygn`^Rq#r(m^vC>>-wGqKrSN{6ye6Dv3X@=FUYc!Hb%Q#{}tbgo@DXkhmYib z&)|HX_MdJ|3kodp!|<=yWZM4q7~5yGKl}UOzxPS}ueTtK@&R@Fe_pf158Zw30HtY~S9+A>_xBh`u3F!>qala*6!>~gN$%vw zn|yfxbow3x@Blv0W8fD5x)q-#o$J>mJ$z5lE4?Y72G%p#d*6Nft{UO9@s>@|w1XdF z^7VEGd`vzZAG{x#mu^0X3_O4jxC6J5A6xNZ@$+?Fo(AzskNS<#9@g>k>wCEzpD#yi zjP(nvp9sEQQ^JS*5R(tbr?A{U%l8Rk_f?!g*W7N!$?bTA^1RZcoU!cFI}}G8(A4kF zEKRnoPE_(~LcK^DJMKMckd0k9s)y4HtZ4WV@GELQ#Qh5R8}T_-zhZo!>Q`{j{p6P3 zM0Z>HJqP*2oE(iUJ8fjW<6=Gc`=aZA)aqB9%E!sv{?_rbYz9ik7w%0q^6`B4?c!Gu z|Hv`(7;o9Hc%u>3?D|wcyML0TH@IU>4ZlLj2mLLw)GDXJb=Lm2bbWVg%c@E|M=M{i z^eBz`8;x6j^*53$`4uSN$y(w5$So7}@6qGB+!S($oFRAU=di#d^;N6fPwQ-7zs|kb zHLvt&-&pp1qu+8Te*xu}lDnC&vNOmXa)#Vd3h=1ww8}l!*26wuyDG8H<)^y6(xZNU z`vIiy8*lk?H03bQ1z)cz`~Z`WJ;LgH6fpi^Jj&Pb@d)EoZoG9o^7%cT5&z!P`7z6Q zl#g@!I+EaNd<{?Yw_ELQDpcOSv&HqZqYIzBG+I01cGibJ_<1hzUo`bUjQ36%st4&y z?SvbR{=B%pncaWKxOUPf^iRkK{WJL~t6b7u*8b^r-`QxL=aO7CZDV7~VLb%iVBKCR z&->13o@??k`ltEsNBR5I0uSJmJ45KN(CeCRJAB-)C+hfwJDk*}?BD&4Ll8b&pE$E| z&;g&ZqGlue`-6|kr#L>q1Nbzb#qmKuO7+;`<9^y_y7;! zlWyVo0Jr{c+u`GWy?1VVSF)vS6pCeR(C1D4K0W_S<4c9MGtLS;fKSaTjt_8a{=O|ft{ns&A0PY!dT)=P&&Lry)2E-hWw6iQzF{3P zKF=R~Og_c&0Up37wVLAt-12K|@p0`SaD2S`2i3r5<1IIAiG0Q$AFLzfPW1;LlTUGc zfCuowJQ28!e9aag*A4>5$Gd+}9ef_xlDfnmAH2`Dd8t46n0$)k13Z8aEIx3nx!M*V z*A4>5$Gd+}9eiHd61vD9pM8X2>gM=^kIAPvK8U9PpMka9z5%C^UMoIgztJ?e`;+~Q zAJF=dU*F%Rm`rW*%xLJ-_W0~41d?v>2_J)xj1Q#FzNyaE1J7YW3*Z5KY6dtyz%74? zJw9$71V7^ke&aKJ`n+i5VtafJ5Tc8R{K3cMQyd@Q0enVoCi{br$;TO= z7g!arj)Zlk{{8v764sjr&#UUX(ur>SVc~O7lP&8?p^ey+Udpx&5y zZ1(7*vqOC=7qWGT4}M*V_z(9Uk<}W0Jw)}O`uDAju)6T$jg3>X!}}hY#kErkzXNhn z`z7cizuaosKk0Q{X+g*8L<)s_N*jEQOORZ(bDkUuIm9KmkkHc zGw>05>V!}7pkG+<5q`T{w@^E|rDv@tSPWu+--k*%f5T;u4doo{Cf1dPAMytulaCEP ztc`>Z*-h9<*v<6Q{5>$RrvtzFYBj%`d7|6#(X^Y`A9jqzZW=I(llUcKJ|fcLCwV&u zF8;@xZ=rLjMAG$ZPyZoKm!3 z_TR?)B~tXu{+{yunfsbv&D14kXY#`rZI^zTzp8cU{x44)()!Mh4Su~_@0a=EHAcV8 ze`xj4{ri2i?0yM3IQ7ec^Zf0X`aDBbCKuO!&ofA-Xa2e^mMh`U)Ex91U;G)9k6phs z$4m4>^vm>g-Y?N#Bjc(%&p6({{cFcs`em-0_ru|vc3 zxZQ+3jlWdY_f6JEpb!41LwhjIy_U3n zyOYZWwE4%kSmys;-&3<>ej|$Zl={8zisY*G-IEz~*w-^w)HZj?UQhWk&oKGGpP@ZH z<{$6@9tJ*N)xJ_0kOa18sXDg`_oL$0Uy}Sx^{o?G5N@LvvA*4 zoxlV5L_Wju0d9jow!_E$caRr!^d>rb+IlxY%&yZa;Inx+6L*N8Vc$q-r9b$Xe2U`( zJb=%z7zcn``Zu=txRxrjZ{cN~VFRYH%L!aH>|1N?Z!&p@{)0G5^AdmXG5K(OWZOpP zuy4Qv_(1T$t^ZbAd|Vs2`7P_#wSbAIl=q*3{nY1<=e2jX^e$(8bWKNMb=e$r`?mQH znL&sCgMD%7b^hRE^5OWMb514u9l!(l)Lh8%0dAr1+u`Hd?a=(Rn|{7Gi12CM{7`1l!ERz+6*=7> zd`v#hcJmx&H-QK6ft>+vk*pm)JKnrX$EWu3OsK?u{P-7l^QHfoe2U`(Jb(}E8gOgA z#ugvf9cZ-r?Y#f|Hj{V22Y!41cl^P}52=fLrnjTYPpnzn$=D-F!dr0C zZ{K`+I(GHmYqy)<{*|}1rk6X%H)-0dncccCF7VsG^5rp2FaL5+cE9+6ehK-YUyfYN zYE%N;8ybuJA9_P-Dav8fp$qZ z-JLdQe$K0Od^SIxi97fmcuq5UxIg%qe2U`(Jb(|z0pOPFx5dYGJol9I6W!fys}pY5 zL4c*->mj`VJe5f~^dGEO)$HRBJ|>^y_6>LdAG9C14cujmk81-rTIW@~|NJqNa~OXx zud4a;cwgqdCLfNE)4U4)67U%meiLvSe%6Z5jykU*pX;-?v3Zq4T+f(Sz2Xl(CLi=4 zNSvqe-+%}3K`!8y{GlyAJKVgA@M*2xn8`cXH_WR>UiAkblaKTGL-Q)kqcE=;JeJR^ zFyBgkt*Y}X*EkohhfKH3tNO3teooExJdJ=)+bQ7r?f%$3;lY36vd#x=~cLQ#L>?Is_K-JGK--$Mf)zy~4&ZiBsc z__%gEw3FAj_qKJlw^jazcGL{1|M;|S-k2FQ_B8_$&JXjd{+K`bn0#b>*xXma2lhn8 z2T~YWZNqe3L);n0#b>Aa(P(6O3aR*P3VX zaSh{L{ufmp*XrH&#KLiHhGkr9{+gJ-e~YKdelf0nnWq@nhEFYTT)Y3dn#{AeAD0>E zJ%!o95B~Y~_y1lWtJ}Jo?e%>mbLM+|TpQ^9xG|2s-#I;2ck;@z*ZCnI^vl!@TrSX% z;WgHN$;Y*6uHzkk^-I6!(Wv-5*8qLf`>>MueRKZjm-S zd|Y=Q7B6H0sot;;-KfD=zfi|#^Ie&=!~R0N_cd~(Klqq@isJ)3fDh~%a2q(+4xg#6 zJCMM~hwU;|z^C^9Ox(fmKs+imzwfABH+*x|$dLb7kb1NZqj@^<60lc!}CPg}lS{Pqd|I4}0}S8ilJ z<{vXpe^U`=!%&J%I=C8U8NE2e^f1+v4MPSQCDG`-ZUR z$5R`8^$Q7~*3EZh@(zAG;`oC<@CP50kJWC<--)7e4R`>b+|?W(;Fh}379ZDsVYIzv zU6)3GUXLo^Q~SM4%Ax-le&LP&;A8SBjt}qvKFR;b@d0l620MIQ!-IJ4hVYV6h|lK1 zOx(dQL_9a2@dqE1kBm=YJQsKXpZ*Sx4{&R4vct!51$4czLQ z?eLlE{=Joay=p^vE;zYO8~pbVYIB*igMGvIPHHy!gpa{T#z)gs|DajSH-Hc39gteh zC$0D(E`j@%rhfX@e#Rwe&a(Ej)=bWj8$4>>!m*;E$(#Mb$K+$h2lB*vJn#TMxDVXo zr`Y1-`T?ua8kZn^wl2IVlXloAgMEN?SNemG$;TNVic264fw)BfaXc=8cty>__0Ju6 zDNxfizuzzE))Op@OB`>BOAOw@{ha*0JWbvw{GK226mf}~v&xH047C0v_J#4Mv3S7t z`7ZcjpWeIauvrH+(enp;cCFFl5}Iay7yPh8_Gvoo_5<1d;s^RAtKGy^{6K&DrOAi)OUJl`zytW?J2^hUt^Y+^ zeB5@YQM;Z<__S{RVJ75YH!<&xzwS>w*W_cho2uUdJb+K=2OJ;tqnbb2;p5sZWbZTY zO@^1SSEhJA8hrH&b$sag5QqK)za#Q@fABH+6vqd60H6MQI6lCw|7AOTTz4Oi&-_t} z4|_gj(4qf~6Z(`oz$g1=@F|WD@Bls-r-56|D|YyJh)YoaX&j~a)IOC7ImBHNm#F!b zKmEt#Qyd@Q0eoO~fLs5ocKCRROAtPDM=3s=|Cot5;DfkC`aOT}G5Hk72mUPZ$qBy} zIMw{cijSE0y8aFx&3paw-~62Sl25$z!B=GB4*2XR1d>0(ANywVvEl={!@mX|zz6q% zTmNge__z)njn;WD;nTYL+RUH>K8PEI{^?KuG5I*-L-StDb20C&JA%)9F&`fMQFYhj z-Hv31^WGCI^WNqkb3do%A)cll=IO{I;##~ft2tTTy!VloEz!3>eoiL+<8!0iV;}7< zlQ+gr{Opg|di;x-)UD^~^WOB2Ph)lA$1d%+#!ighSN3{5$uXlhD$lxCSJeO+nG5V$LK3d=beCi(H_yD)z#di3( z4i}Evc`xD9y7~T0{tA115HB3~n?K{4$;ZHlX+Yl`b>0g+fKU2Cjt_84cG=?NdcOo; zk4NwHk~a7{@73|C&1OQE+v9`%62l>X`j5#+#)rv6d430Y03VD4z^(3lJA6FMd$C^S z+0a!1pUuC_L>%zJyf^fBfBKKfN5-dcJsx-fA80giOJ87zkNfvl80)>B9mFc&Q~PWt zb(wwt!Fwy}{^buoCZFQ?z+VDB@SA{B%?2wzm{+;&L7uyfsF>gToXO{UzV@0-+5w*l zf^W@#{K3cMBjW?9oBN!B2k=1-;1=n#$H(meRzGa9*ocO(-=-)o)h-F?C&u~AdX6JqWK;MasyveWY z#_(&bCytz5-n?qK?pLwf-dx7!Guvl9@z}EuX*%}MTK4X(Uu6zm)~e5|F2zPpmnI+HFP+vC zfd}wO{V&G{xT!b^eB2Ieqjp|J__Wrt_sv~t?{{E5ao|J#;A8T!+D&y{1w4Qc>|Ju#%184rtsU{`h|XuKYp%<(3oEH<;ydv&)VBJ z_=Wj5{lUlNW5oyZhJOG&fDi5iH(VnX`0Q}&A%stB?X{WoRrdH`JtX&zKlqq@obe&Q z9ez6e_WV5Vx5J-LZK~>e$Z`IC&-O%%-=6z3_j4kT@-+FbHHE%4XKwyWIp2TJzIbr< zcOuWO}m(eooam)-w8-7kKiUqU|Um%~F` zKA_IsXPr;;am}?`s5K?dPb5&dht%(VfFxH!vAeB62+n%3B!=vbZT4o{nMLin_{#06cQ-M!#hNm>njT3cUl z9CYy8f!4^`{@`Qsk?|o35Jo0Gu=grHkX7@b6(8YuxLuyt+&vwQ+L)=|@mv}+4$}T7 znsews*k_hM)gOFJJ}N%EjWqs{-vK`Zen;{^?svc+X}-$pcf9b?XHI;ZJ&&+7*}}TP zqR!QcMV;O2TG~%;sqBeeP8DWkQ|jwobjO|8toJUxDesGr!Ay(aG4K{2NAoZ7wC*?7 zbol%Hd(c39;LPv6Df=Ix+a~C7Mx>9`JUFyu@9(m4p5E*D!TTLozI15z%FFi4Y7d_r zJMG0DvEO1R!|%AVk=;LH|FZoK$Orura)LZkH@<559`w@Q?nK9$-X!ipL%%fndOM^3Hl7t>@{#)`#x?VMoWKM4fIDzYUTww4tKIWTkNWvNt`R<4 zKYwa0A`V~7SrFy)IUaj zugGbMRlS|v$X9MkHtE~r*T$Ng&KLF*o<_MPl$Ve239+muAK+t0&vA;dTd?2jShehG zhVc(6`WNusNfb}~$>?I77;q@ht~RB9qq1o%#@LIocz7Wni&3|_&sBRYE>%IC;u;8;kG#%c0qOucop1h}fln zZ7vv#?_I#|Pbz;bhJ0X4ASXz><_4=R@j8}zrANKk<|kjrVv?(-O^&7e?PGH$UvFoy z^(G(LHWZG_cN{@Q^JrG3r)xt#vH+cOOmtapb$WIn3u1-V^iUlPqI#=p8=x z#{a?7AfFf4{jPh$CF=g^0C+wG4EpbUfE|2T!2%0C%z91_~kw}Vu@b}oLt8hm$h`PNp!dh z^+I*@bPRkZA8~5E^3GUtp*>D}3GM@H{lUrPQyxyh1vtU(0KbtB+2Z7S0j066*B7L! zg43g4i$xr8!n$+*c7Jd(`ILtfZ~;zGTHqIX-q!B9UWlC6-d0(_7!@i=x!oHXr^Ykp zwRg7k&TFYKs6lqGb(c-CL5JrSus^NlA@4X*JkaFBaYFgLnP$8Rp-ke&P{##hRP#?H!)`Y5tsdeDrve!N<~%Aa*0AISa*b;3vXw zY(A9xjqoRjFQ}^D=w>NJZ$qKqILqQU_UE}Dgf#tIevK3{oRL?`^BZ5k;Eti4FRhJs z9dpHY@f!~~aPMqe@0hICH#zpd@66Nv#uq+yzTr0>aN%CrwtaUh+i!$iocia$_igRx zC>ZBrJci?wKSFZV8tP+%pRn(r80Y$roT>Yb>09_Zo6(WVJfZ$Z{nO-Q>7R~%BlOh? zr}#})oV?mmKm8Fu?I`K~I|t2<<>%Ss1Us6W$Z;wYmV#`+$>d|f$u>XPQP@q`(ZNOB zj>5j?9=&@}9+MDOiqG@!`WXc^EAI!>j$&PUw#AO7#_@Sd`mfx6=6}x9niygiA#aE-ZUQx&F=WjDR&7PYfDfKR$ZP?L^Uwl1!>$qAG zBX^b|>B%_^Psj)Tv;T1}7f{yi{EP*6uk&v|-zVzlb1WoR_LcQa++m+8RDbX*{_ImV z`SAYf^c)NDFz|U%=&jJ}P@Nq6E`7{>>=4gU3MoBreeISKI{C(mz#_j@f#$EWtYnYhDR5}uQ2{<%N+n0$)k z13Z9F6u?#J(G8waVlSl)lOWbzLE2Y!6y5r6P8`4qE$A&xj!2&87cKlqq@?C>$)-vB&-4{!l){gZ6*alLLbTHoJ5 z_-tLcAv0)<3-GA9M6e%w;M@M-WAbsvhvvPQ=VIPlH(**xik-;YiFx1IXn zkoNFlF{%gEe{p}aG4I{=j%S9pUH{V|w96^QychC8zl5Be=)BH*7p!YplW;1$g5Uk# zV?=V*v`MjuL%&2X?cel^A5X@HkP7OHtR#0@e=+$O{ZhmZX>MhXYrq5epd8?aYor_> z*KUW_*s^MEYs;!ccy9XzEgO2m%U!RQHRyh!U+ZIp&(_Z$8Ou4~gL!ZKZh!DG`EY!= zaVebl!k(!301q|w>Ua3rfBf`2$R^$Ji{oRt5`IVSe4p?!_!#}iB5LYqG_GMB!?;#c z%f~g0cNQXc;q$mQwO(aV=5^t?)?gXenqTGP*uc+tTKAeY1)Khd%3Bw^ch9NW`0`YA z#<%I&;tzgYBmQHW4rl9Lk2X?0sQxp)oixU^dpqm1WByF{iys)*ARqM0cn$XhoT$Cp z&C&XNGs#uc4vpqZ*v-&~{dxY+ivcA!=BYk%-D`N;T?l&yXt?7fN)@K96XcetKU`}u5upMD388Q=Nn@@UB6IZDi@ zNB-&$J|-U(A1-nD9q=>Ycf=3oeh2)K!KbUbALlsl??c2s?ztAfV|Z6Sj^_Tu{f*}L zt*Nme=dJSmjxSzv$Iz#~{r#x6;Ogz-cO(zlJKOvw+o#>|$=I{UoX^*bZ@9$pJCdK? zE8F}fwqK{j0lx$CLBAaSCzlV%2R2&wc?i4ddSLT!f3Uy%aY(LO--=ks;h7M`@kb7y zp^s~kjo$X-n0ze#(s4fyZ~;z{-MC%@ztC;AIJur!`{f^EJMrYiV+epxKDe+WE)5A*@JrN>(L1q(apdcof>|FA0f?0!lt;_&{PeS}~J$NJNM zOg=I`kiOY}FfOb3AZKb9D?VQL8~Qg6HTe3T02cG|jFq{M#1x^dp|p?#qyAImrd zu^TD;MEHg96GKt%C&GX1f3CWIqT2z@j8DN&Y_#}^%};W_XJB_et`0meu0cOo;?TqUWUqX+ z{OA23AN0@A9@h9&^ZwTU>2-eX=W`Xb-_Wn;DoCzc!!@xHhke_aU#I?Yg6Hv#`lrdq z(mx&jMBoCP^5Z#9z;F0DTR+5YxAN^hiGGiBgj4I4SHus6Uh9=7dAJDi`W$Q0zWa8@dqE1kBkqbZ~BQCmsNa_GxweqAFqC*pW~39&!y1V z{*lA4kEI=+JIB7z&=0-iL*tOi$1)B<>_!Sd5q=^3#7LO?iSQpsUi)gtOOi_YypCC4 zZ`7!=6Vp$`b16}apQx6WdWQRnNQa-~eq!>;^8Ca%-g_zYaNn(S@7&n8UHruT{y*~0 z1kS1I{QFmt8utY#acLd*xH2$^!F8BqBq*R2#JDpuGh}2KkVS$Ukx%w{_y6j~eujI}b9}nsom_JrVsN^v{#uaO^h# z|Lp$T#jmQ`-=63X(?1oh3nqPf^+C4=ei?N5Wo#F!b29^I>)k~C5^ZR$wO`8%rTOJflebSjFnH(SrhDSO;+GQ- z?4PRM|0Bci)&{yp?_m1nrh9I&{c_@U+oYp7TOs$#sq@#G>#|hk zZ=_$f_D=&oLH>q1zqd_IeTCU^_@yv^0~c^g{*Io<;3weJ=khngY5B502Xcb^0Qp;Z zfqPCQKVWt!CwxEcZ>B%N1AH*vfSZ6%pUdAUpN)Z>;JOOrZ?T1n_}F&x`4s1G-~m41 z0d9DXwy)OtDW7z}E4VHR`CGb04IgGFpAUMO`48f8As@W6u!TO9U2k8hb$$}tKe=Y> zpr?oYEq9iCJ|ur*b{ui2u)8(rMCd~3#N5GDCqh3Keo(bebiW=1I2tKuiIF9xU0-qXpilMRj@c==c;`EMMJK*{-=FoP&VA9)fo})CnZLcM6BqA% zqpcI)z2H6ls1+}jtP{~c@K5wpA#Xf)Tjy7~K3wI#0;FHH_P+))J>+lEClsv@x9!;e zX=y~~Iy&$GA8-ISJV#6UNXx^Dy}p9*S-$K~fsCySkWtfL-rwqg@czG5a{UXllONxT z^#{h0LO$S8*jn*TdOej&|53Tlk&H>-t=KA<6zGqBR!3ysRO3I)j_p5=u0~u#979}7 zA3@_9;+^9|#uLSHZK%5X$4QR3=JV1x=Glw3;Xly$h8A%x@wd|IA9r7Lbn2Xab`H+m zp6n63<*%>!V92o4(l)Zs`P#t3Q)&HU=JreNxc0%VLsLt4-lybsj_4owWqc3XPldek z+-+P_Id7nH{+jfwS^pT#-_Hu8X!3mb^P)s|`fNK6zZBL#zy+ML8G0UrANZiPI7tV% zN?qqjIFb5?R}kM&p9p!~b0YN*W+y+sp_f_y1|Hyp@dn)R3A7fUK3D&sd^QG>g6k|$ z{|F6H!-v_)=Toddzyo~10o?E$t;MI$&0kYK=|EiIKd67iYt-;zcJle4mzn<{9vAY# zI}2O4^$(SCNag%BiS3=&Zyik7`^F;j&>q12wP%WZJ|qq?JB~P1*xh#h1G*48F)@_t zMCixD531IQvI#-){Pk#uPR#y<>YnUy+J??9XsvlN&ljcX#OvPLFEwED&cT)6z0fN< zas9HNq`WWv$j~%v11Bt|I&tN9kJ~zN{eSmPdC%UqWSxlqfqzE#{{K@al77{+zXg)E zeslUKo_RlVzmA{yC$r=5PoYi(7jO#iW1ZL5`CaIrZgq&tIt=G ziDcDqVs=X71TNr&aR>YaoMeYTP31nq>N&j?$O`-k^Uje6)o@~VO5+4B-~=wjFuEZbaVYz0W--b6u)!hjPOA(|%^U5plYZ4|o)|eN{J-Sieu&(2auo zXhJt8?s3n@)Qz?shaVMox2+qY6QLWUM^oJhJ(;^U`HMRcJdJNrtQ%|G*B7xbS;(Oq zZ9C|?|qVgf9Rr)vi@QJub`S(9 zkQ@g&tm^d*wr<@27mw@rT(P+1c{B8j$UoCdj{99ccWeBVk8>5e?-l7+t^L5DSFmme zanASA6)&mSmyFrTA3r&D5$k*fpThGtdaIL${r!yi9?_+h~h#(xX2ei&T9$r>&+j5od;xt!$dR|@ZgrJ7UM*qUHepzEXjR8Kb?f`bIO3dtKN`=_CibV#Bek@}Jev2o z(&Ak5+gJ3)Z+8rO8hd9Q@#yQH(d*l8GREY$0=FJc*N1o-**fCUqo3C6e|~exaSr`b z=%3(R*!I;pNBULMjP(bC`EA5G@4v2866ctm?&BQJSMb4kTgU~^`)Zsc=X_|=R>6p1 zeI4SQf9nOV`H(or?DRZ-PBz9*Z~-Uq06#oOYjNsxagK0WzU=EjriVBe+EEQBW~XOP zB+enOA4#HbSU}< z{^>oA_76UjY3p=c$7aPjyu8`1aRbiH{tW*EwdVCQs`gtV{i?0mGw2uOb0}qGKcApv zogK52ALleO4`4i4Jq$d+$8Vj-;Fh?O$47ej)Fw5N8>GsvLZ?Sh{$KU|atWWVv4ets zL7YRLkQ+GBH6Ie^m>tLXDV(PP7jQyPfM0wLkCXg;d?+W`Dj1HgOq|y55)2FK|EODL z2CL!3?3BhSVvYZWoX{honNCh_btC13ZSNeub?9$zriLw&?stA-P^y~%dpk94bzr-DJ~ws9%0X9{ErHwg@vg?}4;rs`|9~Dr z|G+=v)lNMUO>`*LBP#t<) zL*?gd6xNy5b9yR}7U)ORu`>6o;l%7XIHCKEZ8)6%gg8*h2_MLsnjJT zmR!5@2Z5+Smq6!-7pURH>yqD`7uJW~wWm?r?*4&zhyH9^U=2mGY|UJe>5arlkU& zvHa_5`dbGTKSNC&li6|jr#RkOT)+wEGx&M0<8hL&cT}n_A)J=)@lqh&gMJL3qlOc+ zrxCrg(| z7q%)@mylTU+>@IE$)@O^=(;bb&bRAYr>fz^>B`49=GuhetJ88YdA1+Ooe00W-J7?~6aovtr-P$X1^YU+_4uOb?WKKA?T?!m+(XOujDgZ_bk`mBD!_hl~n8>e0(uS-@=D zD(|ms=HH6;i6nfw)@yYc0iS+W$Ak`4!-v_i`4|>B>m{x6q>v9dCD%Fq2k}j|k|lR` z<7ik*?z2nsZdLw6#-wTY{-MqSein!d{1PfOK6Jhkzhri7zvRa?iwF3i$G|Q08IMop#5GmxMhKsp znqvdrMZ3Jm%L@?K!c}VcFguhFy^g9lu3b4&mWAIM{q3la$JPRFq zz8%+oy7jBUsjt0Xa$H0Iz%OIR(|*B868+lgmu}bFnR-(eHV(>YRmU~buUh-nfw*8_ z8N{{F3708}Ys`-Am)y7p9^jL`kn#aH&rZ&L{oU62&3sJ(AKX_crYK({d}?ZD1agb{ zaSh{Uc8D52%#O{+IO~ez8hC(DCQSK&TXbh0A9>wj`j7i%c4hIOnwql$-kbP*pgWQ$ zs^P=z*nGJD10LXmH~?p()gs^P=z|l7~e1-7T!}0A7)3)XOqDPc@*-h#A!6ILcZl| zEN@<=?t0zR9C=kJKy^;Ik+#`WEZsAawsu~1SZR4x?SVH3WBDny{(<#5=pXoHd^GJBd^)tPbKLB!c@^nbO}i?P5saJ2 zt8y1zswA&sc5J`o>O$}UAI})d2i#&Co#SR-&8rBXnwr)?PQV9wRqiS^e3%`ZkKq!< zc@=noPxNHU2i#&?@%*Rn3ew< zM{U(KrspXJL|1iZKL`5>=K-=>BSvm@q1@+#y}$g7e!(Yy-zR%miL^Q!7$ew+}S z*%r@N{mhY9rN>j96FHN%-UDgtpK7(%`oieJrR7!qtKSO_>>O1$^OFaRoMy{k_i)JI zz3ac8U2Wt|uXnuln{CXzYUU?oPbT^}TFrIHQK0Cb2@n=#)>)a+7an)M;5h8M_#tx!7C)Y~bNE>Z4 zGiZzX#IV1#ymza=Z&ROm@YG(*dwmxTtN-fNlZ+g#qvO8;Pf_0M+rFm$tAohv-9Ip& zi2i|JCL*+7@M%xlSugCXc`xZ#OvyaT3)TT5?@grC@L_grK88ya=e^(oKHiHcANY~C-Wk`Z|47S1ty1$| z!l$`;`P#UkE`hw)yG#uqX2<5k^&jv6pV&0Y2i$V!^Z4|=yqEB)soA$9Bk&*Oy`Hz! z@L_grK3x9+5AZ>p2Diu`db~6epeA6+YZlvSl$aB-~%q;=0A+fr_bfRgimwxy>(H$-}viU;xDV= z!|aIpkh~XpF7n>owKVTVKI}QPym{|%oDiGY7U#Va9C>dvN_9?h7HxfVXd9nPTjagb ziKXSe{kPt${;9R2doAxh{Hjp>H}9QmJkTtL*((d^XKVo+B`B+Abrtm&|-~vvF z3*eV%;c@DFc`)&#nwmp8a)NylkOxQCy5~gvh}p^KRP0CK0X`rJZl065eEM7-O!-{V zkra$`$b*t^s^P=z34EZV@Xq87PCiziHB2@TRqFnbM1x&+%BywB3;23r zu+<@%-@4~R#yMt(#|OR7@-1)yC%gmv!k2S7^|^eDa5Cz#b<|$hZ9G(|ikgn0LFf=37U}3i#rDYoa6H^30>UC-N+9(~r{DcOz|)Z>4XJe_G1@ zv{xja3x=M#EwE_`b|cr(e=}lA*G=D)#U)# zFy8_faLU|6If0*d8jq8-459m4NM{2$dq`WWbe$mKR8wTj9OUhbX~89$kw z0!{__FnEAZ`f|z#+~Oe~pT3uGQ9kDcLg(@Q2>DjL#yuaRLztZcKAJ{-selu>fRq19 z$_f0!O*~H0+lg1~{xFnNeIP8*A-K*b-r$}S@gruZfKve<@Bkk>Zd?8oUc%!eE$1ut zzD|_SkU(NG-;bc@a|_+`A%4W{6z~!F5x9Vp@fGF+{QMCvC+UDxSE2WHqMY^!_|D~X z+5`PEK@BHnr!-E`yWj-fYaNyrYjtwMb&ax#m#X|&_5RXCGiQf98psLi7pO0V=D6o% z)|YHM4o>KHdp{rW03W;o+@kaOd}JM|QrF)SKFjyGFOU<=L!!Qv8>NVkZAZ+9%tIm% zMqZq0p?NXpBR!F_=EXJDI3YH(EzXP2aOB1Do2>ld71~B0w%T9P7J0Gvh|=aEr>?#s zc;PqUy57o*pL^uv;OXJ?l*5!a$b!7fnSDVv|oTB@jZ8a zXP?W9Nxy2^hEdTT^5WQU+}Ep!4qXFWC12d2wWsdrl<2F*^mE3iLd9fRD!-Z@?|RyK|iltuOVxyqNO2VQo^N6Ok8( z?{v?{tk2ta3it^0Jh*@p#yRlw59D#`dwDV8R8zA@hgYz_5Ax#lUG6y%KVo(YI2HI2 z;xqU}tvC%%(M`^AuCMBN65|ug-l&TUt_OjR&)lGf53}RogKoEVJa~W)-T-di!A}1H zAK6G$sXCtUX>NX?E-9!hLC5=-so}%yi1`p558VzOA6-gyJoJ6`|H^vbTTE$)mMEaH7pUy9cYtV;@E7a`k#O&C9$uzuiy%yGc zf(Q733%G@XJU+6kH#F^}hACPDjJRrRmCkDsKIHy%QGtH%XB}&Jz8XHvj?KrgP`v&L z<4GYObY12wC!f9=*T|Se?oXE#@IhRQUZ92#vy;yUy-wHFkhq38hPalPLE{?YU9P39 z^{HX91&`vmcBUh)g;&!!mR(F+-;1=3T}@lWHSbSLi)))+9~a#4m$U2M+H0Xv8`|>g zHh%Tt+TgPnk^A`E-qCNs4rYBSadgyd3DsZi-x+-N&<{$EYv>>NWo|j`7n~t6uTyW* zxF%cG*ECaaDyVy?-WQGZtD){jCGC2y;S_lf?Awq#PLW^Qc5J`o#x?K&pZJ5654ibK z&V0>USCe<-oA+m>u8${tnwuZ4^$PMe(25RK!-v_i`4}Bp9M`}Dd~#1yKHwIAmB&Y3 z7n=U#etEp|eFZ6>tJj8m(1qSF)m;C@?AUzx{$ud~AH)H0^J={DOfJ~cIiI=q7QPSAys6BPN6ZO7)r^&jv6A9Mx$DEuMMf8_U@uGH&~DW8^(q~N** z=)%m2YWOfaln=h2_CL$3pqIc0x(S@pA36D0x?NVzQGI|fchRbz_a~aG-+&EuQNj3z z{V#G~s~O*zoqYdc9fG_UJirI<0Jq%M&hZU-m8=AFxtSmi&uG=|yG8gkH?OLT3j7E4 z_T)e{{=@8u`H;K{c@*+0Pb1B%kZ*aL%bHhJ%SN)|yejO-tCGKpT3%J%dUx=^&tEZefQ20|_1nEDud050Mex99UoJVXLjS-o zqqow2fdfR>Imb=6d6l_ukgQYVpo~^^UPb!VxGK0VBk)V)RpE0lS92d9+m7v*TwMqr z;FJ9oGRa^VRmdjhN0rT3OsB+k5E3~ zmi`})k9=NLsrzmbK3(hgUKxc{ZU|)sI zm1_7fJCu(ouL@gw34EZNz$w}3zjM$g7f9 zso}%y~ z}cddDTdD`#PQF%&QhrofBC>+t7W^7I{^)zO=mR!>7juCLOz^qqpX( z2DY>W7aU90S$xt_`_5sbh#%$8R}K7hT5!StmX@AZS^WdQL_fhlBilIrvaimEkbc#) zdpqKGzT@;uJjM zL%d_3pnt7g{m#g*7HHapNJC@Otno7%n?@UVeVJMKwjQ6GpE`2rQL>)M>V-d8lJ{&! zTuaUanBmJsPzCW0; zuM?6xuAV+cbUwMhA>R&Srt#0L=25VI9_MSRoUHLvx-dokT5Id+_w@97KWn}vp@p9% z`_qt-V#16m)0*a37JB-Eg4fBp|7kGM@LH`}J^0}t?l6>v*mz~v)7;We&h_Ux9n zsa3&-ISsHS*VYd{=ypdp<;0Ku17VL?=;Q0lksV}fl%uI@EmLF~Wt)TKtgb(VP?0NrvHG8J z?{6etF*|fT>{>teMEpnA0YLYG2l)6qt@GJBud~PU_(+E z@!R?Lo5tv4C5`SFUQCoCS|gK-Aj!qa$s3z0My!+wpO|7JTLN1-(*7@xy(+L}SZcmsc*NqApu z+f!WECrEvr*`ecM0UqNrfW2Qe{yPbraJ~vT9qr^~jf>L4LM5jkcG+5sZB?i%OODAIC{Qg z94$OQJrB`w)b{{wF^-02mo|=GcKVYYO`rcH`09+My)uq&=zOGO)prvET6=ZyldVrS z$I(}3++dHJ8#sZDKjv^g*! z*^+TorGJt>ojqz)&@Z?jR6pxDBd4nIPiCiQ|C~(x(>h^1rvEyhvLS*4Am)pLK@dB10`Uelx3-S%?liu3Cx+M zd!cjukgYo5XQCG4DEg()Kk>QP*-q|#RgaQ>C9x?qrF%UZJxq;%GCKnQEYPDkUqzhK z)0~|8svafh{%&JW2!;gr5r7_ze|WNzyn)#faIzc)dKBX(#?k0pI*wv|gZ{`@Irm5GyiYK*g~m~4N5H9I9L2baaWr%p9Y-;~V*Es_cpM!ryR{J; zN3qVX!7+~J(sbNJ8+qLtSARoW{GQ~n(yps{vEvE7s&Q7Zdi`7@ci!^rkBR-7?QYez z_S1vpILPr=uWvApg+5-q`f3#C4<)l{wzBK@k>P6~#X^5=_iy{PY_E0pY4!0b@}6s_OF`3gRng7dbp zx7?1OsJj$?@8&*NU3Vep{I0jR1bu@0)7m=pTlaiO{hHa~kDrD2;RY9QLVtlDo};xm zN$;0bsdX2^scXl^U|7Hj*Y(EVP{WDY>6sI$yCAM1&iSvf>ep7@;J>J>`*SV%hjd8s~<~rg!x7 zRi}@xg8|7_^|~+8uUh-%dhQN>oIAog&gie_Dv5KpY^Ds^P=z*#3hP&uH1YBJcno-v-JD+`Omq z_~2;szOuwWC(ddxmdwp*nc?~hwKDk6Aq(}~oqYen5Fc5uh7Yro??1)sCcy)IqHj?? z;Fdm_$4C0M_SU-A)|RG5w}V_6_^gZRQG4705qjbsYn^}ob~SvMoqRr8(f9@);N#gy z`G8yGI4&RgJb0>GE^yQ`@M*bGj|;{(2%^MQYWOfa-SYtt@X5YS`GA|}NFE>Q+vXVh zZB7#z;O3*7rQ0&_+3prSDOeXi*gDQkml{6IPClRF@eMq{C;WRW{#bq#8_DA{R9e4{ zo7+04Wu`H{&5{OVeUS2r?NYdY%Ul<}*JCqOodcw!} zFK>Mvcz_S`L~zR-&*LM1AH_;tw{P+pvqbma#n%UeEIyvaYWOfal#giLK6ro+PCRhK zbF?%+9U<*M#(j+D%y8{HsJgC#=0A7nN!x$$i`BNIE4KIOkZcL zdJ6c2KBD6rjw-y3(|@e`p7h3wG(S~SKOpO>vI7doH@TewNloVJffwk0LHx1n-N zA7&?id_%9({c|Q8;J^cX{C}W)z%BPPE}vo0Gwd5n`zybG;I4?Ec0Y8&r)ENnl!gm_AcM`M}&4TebhxENRjGg8T;qdLpif zk8P)WKHvd9@B(o2Z_DR{|IJD`5>Wyc#e_7(bt&!1g1Z!vhU1M3I>@wk%bEzm#k z%fug@y2G35{QqL!g7m94xm}M6=I1eQ;rWLmzqIYxe#xD;01xoVeMR|zTjCE~KC;86 zHLs*%;H*_TZ$bDh-|iYcEYO9RxA1?ih7Yqt`H1E%zyo|@f2MrEE&d{x4~F?t!<1<3qfy~HLbzxKUj9E=ptVk|VE3Z`_e-_=W z#|66mcx!x!>~@Kgbq&l;_k6$ueBwX0#y884694A$k=~A1tEoqA7&??PjUPK z5AccP==cV1=`}n)eQ#dLKd5AZ=A4{rVr9-qE9 zuVnJsF0N;Km{-cZuf~6v9m)su7KQskfd}|lZmfYDo}=xn^GYV4)ys9Sy)Fp9SZ#}W zrF=Ui(t!`P#^#k!?*bp+U+MUUqsqPJ^q;;uuS9BQPoF(S_b%hl%VJ(BG*Hd>#_Z&e zZ|HS4uLK_8ll+$Q0XMIoTNm$h^GbwI&60@j71Vbyuaq35h>vZjdp_U+K6c&M@+042 zTt0nnUdiOMak}moh*zRcQfaeR^C0; zz8pWtWVF;2gvx=@yurjfe1IUnzG&5`QsVMxDfYYx_P z0^Q!v>X67xHM*VIvHg-euLK_86VKA~7u-A=kB@X&Ppj0rIN?(>;0WC>(1jR9GZ(Aj z!|YH#*1Qs7WIUK|2M_S^d#t*VecXJcI@%Z^qa!<$lw7!h|}Qasps+O zdvzm|&&K2Qu&vje{)6?%{uV`iY&(<>>Jo)@Bk%wp>dl7ovHS?n(OUXIS|C*FdSn`Z z>U3}3Iy(Gjm91Sj%Ckex1n{A@Sp0#GE#!k^O80mAkK4MDt>0ikvQ>Q_aiWR0|Iwa$ zT(A#6>PAVg8vkK-^2ayU8H6LrtB^+_uku_&^D5+9zDLWOSB+qYv{`?#^?Kh~(x=Ih zSH-@x@~VH)HnS_$J-$J-^?yM383?T^Ew4JX{_@~Or&sk_UKRWNx!||WZw0m5F?#TX zJ&W?HSj`K;Zx7lS?5Pt8_sIr#^bhz4z$a{tGvJndfybxs=|Ypwgjzi#$g7|WlNYPu!|e2+3oRbtgK-Vq@Ek22-=wEQ zv`W>5CZ8qsdffIO{9?5&bYZ?7GIok|A>uLkATHymJfAxK$F(l3(CchSOyBP>`{_A> z|3DW;rmOKEW+#7qL$Bw}Ct5lQeDDr%OFYiyBV9PE)cFv?r)GdpPYQH9>PCqx)$n0< z#C(WuhfarX&%~&1ho1Mgl~uPNt?vF7%?{lj+MVj0%zvpKjqX98r~i*W$9zco%F=ZE zz!!I@pA$UZ(96BEKiJ3z52zpcpmCi|?dke0p#i3D*EF_2*vPh|PEPQO$!AJW62mGrXe`4G~tnl?m_3)TT*J|uCVqI}x6WBVm{J_J0#$FmhZ zf5FZBb1on0dQ_#Zqa}Q5CJfi(cAW^B6g^$`wayyPg^Kvtb|@dwbvEDuKGCfyA8?Dk z$K%uY@?MkAl977GKChj8@GLq-4IgGFpHJ~RTJQiL?+%m?xOraY@sXAt6}x|q$!FsU zdZq{65%VeHW83MT4|sr2wjbpKZjonreEQyemC0v7P*2)<6+DIxY^Y0wj#R^k*|Fn~ zVW_w+0UqE39R+TQP9C4WSC^piXN;Z{jBj>bVu&I>wjIg`d2iu-6?lM;6$UkM!*jHj ze#5dW{By~zRhLk<|CFlzb7=e-uY2uvfF=K=&3Ys168UzBr-BdtGB#g@d;@%tcfe?9 zz0-eO*Ckx!Y>MK`UA46uxj%=heHBT+YAc`8GXlTFDC&RocP}2Eci+U# z{RxO`%nrvd^Y&H5c`D))de_Ovifht!iE$0Hr)}Ba3td<#z~BuzR7gl#CV#RUEXn17Ig8r8F7r8;r?`-L>u}a9Y@iE zd7{1aadW}>&-ebgIk`h8$3c$Y&A5qv5&C6^(=Xkw!>H(Svwe;37p!lGmnI%lYd<#JHKAO2b9-d3SEnH{HJ7T$*iJiy2M9*z6p zmfMBLM?N2*JIxV7ZXfFT)GTS$;{rYyMWgSl;lu1W_>eu;U(MfV9X!A%T21{2-29(+ z@bWcTnW)t_PHn0hrs7@_W#F^%Vm&J0gF2UIlNvtEj)PC}eLgH6;FCMR8vo%(IUXNr zJX)}+bxwoUGBq-%0{v&eJUuDk1KpARKn)*er+Yr&0Y3hHC?EJy^q)LFL#6BZ#&r!< z;~Jt>p(eMC%HTf}F4w(+{eA{mr&Ic4HGG(z?)iWR_&`U2n@{7$A8CO=_nT8eNIjqB z>)Q3qef<4O?0L$6tKq}!bk7Gozz3raxFx>e`H%cO<-{3t8d{ZjP#O5NT%*VD<@2%U zDgUE}53}RoQ=|`&Z-7r>-jO`q=|7kUI|?8-v!(MaoB1K`+ttlk$bY~CeDDTvOAg}lkzOb>e#Wfn3dFUM`&fLoD!k9fq$Zg=y%0V% zOU}}>g8TSleXjR!?)i}WEi*fOKHz}*1nLo}PlV^w`UL70@hi$(pYY>=HnT0RPh8}v zPecx)ddD+_wwZ&SEzCtmmR6sb8ylGV(`oza)my!6%t3AW`7mPt-qXG@>JKOBqmr7&4Ag zL;jmRSPdU$C!de8j;)|R0UqFkE(163v0Of~@)e+dWf}NPsMF&DKF}Yz zp=$UrJNbOb&vMp}Fy0sP0jJDIPW^7_L+Sh~*fM)2zS~`^Rv(g>(dIc+_Y3qp>aVeC zHGG(z0zO*%ugQ8)=nm)%=#I!dsym=ZvSZ6SpL~=o=wjV5&7nJzhtfEj97WscXlILa zBfX+D-I4CvH}!{a59v$~yRBDr2eCinkzI^+IB#~6;~>YM9(KL0JJLrOuaDlf-nh*S(~Fah&sGN`Aw%+FyDyz;K=)G_%J(^58_T?y#je+As=w^?Cta)t6m{J zUvK0^O72^)dcK6@n$xcw+nE;Vxb3VC@jT?756O#|oqRs%b=IP8fjR~17V*WjZh?A6 z?&9*!m&gJyu3NM^>K5tYmfi``)<448q9;6;l~%X7WSjrf|8Vs@z3RJ}y;8Rz_TT(y zgRZsTXdVYS{;KcJwd)p_=>OE;JmAfe=S$E(@XxH(Pv{r#UA%g)ygsbd`4ZBvns&V& z71Vp74`c0W)>$(<4*x8w$Abs>fD5>JZszfk*N1s4X))ICxv{#DL2i@2kSNP`sTJO{YT|>v1Ckop{iYv3-lqXfXNTl@L_fw zeC+N-Ttgf~Tnoo(TtmF`e^S=C<{xe!(dPY89M`5h;#%Tp8pm?S(l&jH71zem7S>{K z-1RA~!{T4~?H+gRn)>^Sq`rREb-fbTi2Vg!Kj_-ZKj`E*$Wg{WzQm4edwjV|YRy8e zd3@w`hv`36vwQ0N5?(I@pG6z>uwb4Ux+C(c8a~WU_k6$ud=Lk~&AWuh zM|O5t(BPzhGVj^T6IK)bL?;3i&waMZg1mLba3+xMkveKC%jdj&Ex8foeX>7yVlI3;YN3 zztI~N@v-f6&j&ofCwwyH18%XUd_J-YL8U%W&gYO0-7l!SW4%l4N=1BZJKggE5Ag9@ zc_Fyv9_RCsRR}8efpR|UbUl6#KmWnJRc?VAKFm({e82;I5U|0`znITQRv}P6YV?6} zJ}s~5e!)8R0anLkZ&JgD*%9;EWJna$iBLC+glXLf^(62@t9C!Np(AADSaIE`%~3b< zj-=ysBCzXwq%P#GceeOFk+r4OjZPV{LI3fr+w|;z7WYcsh}ggFzmMr!)&1sikmJw( zXQ5p;I_0Z3^xH;0QSy8U`UifAenP(_E_M1Py?#X2D=poQFL%|}n)P;7x{&m%wsM7@ z5!5B1+mjbxq@-@d?Bx3;I)u&lg9rHF9pDzfp2tTvsu@=$HB5mCm#um}%g5ZO=WM;^ z%&U<1M(3&F!|deqDX!~bJSpUZ&PzVy!0lt>y@}h?En4Hom1MTr*(21?fd}}c&!l|7E%7TJAL(J!s^_Yycc`4NB7BxFdPw&RbO*-G z_ycPAFgxAz0T1wrokaP7o9|g3A9>xOvfiPb&mjptEXb#!J3On@@L_hk=K~(#6B$GK zfLr(_9v_#wy{hu&Lrni!_o$u}%vV9ThZAb}FgxAz0T1v&oCde_r#wDGWy|f>_@<`b zq1=C3p3tL$bxf$YCmvVBhuP_#4|sqNA{4kqp5XGq+cvwc)V#{{pY5K~!*-q3nOEVN z_vdQ(Fgy8tit{SyS@4No<@>h0xdFVe`3&@&UK-gM2=+3XbXnHTsRzb5-rbPxvf9WT_q(_z&hoBF`w| zW83M0kHrIge5X=A;1++5&qr3lsnl=E`K-HB_Y3kL%!h=YSHp+d>7EaGfDiKasKw3m z0-ukpf}?!Y=r`qjT9)Zifquh$Nb&_We3+f?`G5!bU>pQD&qrK7(ii$tK5F!vaz5Lw z(7l4X-XN=Ed`UHYm>n@6GGB!{9_o7Gv#oW`*1Q#Xp;cSg8#+SWI_H^=x?c8bI!^nV zY3o1B8n-9V7QZL4zO=gDr5Ekgt93nMKes-oi|TrpzP@8BwydsXb-l14uBoo;F+0>Rp=&5LR@Va$@QKW$e8A1OkjF<>6=EHr8eOO| z?$5hw#n4RwVfCu=b+bAD!OWeleBdZF*XLk3_UDB(yO6Pk`K1N+H zx`pa`%ue@wzyo|TQOXD0!Y}jq$f`o{QKJi$`;SrA%L)8PbzP6y>7EaGfDhs{xcTnk z@#%YYJ=1@Tx?WhI3su+kn4RwVfCuw3_$;FBBe)Nh`ZPCk9Lu17R6sq1+K@ke!CkJ+Jo3Qu(CYw!S{(4~|QxOslT z=Oe4&Dz&ah_>j6@Mo^c4{#8}iV|Kdd10LYxX{UU^Eir}9M^?dAYF*FdW7PHHf_Wv? zbv7EaGfDgt&aEmo_`SiKE zp2^3k>qQ0nT6JBI*%9+0bv@MaP}lRXpmjae`!ZUxoa^;QjKB%8nQifUy^9@nJ@2`6 zoX(s~+t65N3v-EImR8qm9Q&1CKeqSQp%eR$?n3t6x!*hva{T%0&>MIBQh)T+jV0Ih z&_D1?^b`6ey!yS9i`VPPj+&Lb4xRL?)^60>1@pbgdsVGNXLhJxLf6oKXLUXB03UDx zH~-^2KC-H#a@U~~KFbfePfrST2iAkBT8GZ;+Pgp zHSJ10BN#U^UlqDt&HXEwo&0eVz0Tqqcz_Sy0d9DXmhzFUc4(T)`|1Uad5JKDH-QT-iCOF_~uI_wehX`XjzXe z&f8`?;#>SQ8qYEfwDp|sZ1KC&)BgQMDf`Y{cgK*_!>`<=SO0ffuf#WE|37aV@oVx5 zog4=_{_6jpX~(zgzC1GZpSi|8O?r4BzM+5Mm*^+a$K8&fl{()-`c>O>m!1^lZ5ThZ zu~U>>Kg{f~__qD;_dkyIJBx4N0Y2aYZg`HC@^O(@OWj=))>*riw#L*Ss^S~rvwYEV z-5=)Prw4g;`bPJBNPJ^<_~R!1rHm8Cl|oLeN1T6I@l86xmb(k8^BBl8!pU53s7Qy9 zv1!82x9Q;td``%(vjH`nn4O+EkvNCAhB)VWfW|q*zhu0u`>T$qE=Ew&zZA#0IgU7& zJDxz>L-z zvvBw&x1?V+?XX}*5a+P&BlOb&O764D?AZQkP+Z03UxHC-94Ac${R_y{1*_ zea=iyJ5~i_XYn~fFGluK!-?4`jT5+l6XF8+IU#Er)r~IhTRdl0Q`=PICTFf6wNy7M z+J~R|)1E=E;QD;5(~0lko)gKpnVo!2sP|WmLf!=);Dc@hH#|pc@sW0Q02+Ge-R znU61&ZYdvC`&&>y8Wc?0>!_p;tlJNgekXkL?T}gvoi76)7LTBx3i-f@|0(A<=T^_F ztShS2^F)K~_m)4HJC#4qLC@!^-TRMOSG4Wq`wx1ZwWwP`zeCS^FQj@NI^TP9S@rxd zS%+kL{(Ec6cCJIu$8NOZ>g}`*U+ZkWpA0hh!%Kf%+IoZe-^}Tpyr@}k@7LZddS07< zL#GygWUZz>*_oKRyu&29ZL6*4wfWZ>uYYa4-u(mPC;A8e8Ja@-2cP!*%6VULYy6bX zw=bMKeP*bsWol%O%iGN0zPO6wo7u10!JU44{3N3qdte=1EIeFE-HO@C_fKQ|EYOMI z0Y1sgC?9YOckuYg*R51sK}36v#y3^hmlHl+V~^|12>76G6*)%@A7&??k51DzdTTdeKr}>~*XHrn77-XFo-f8an5dF^V zIQZn9etW-aXoZuYazvzz9?ikr3!d>($JGb*@0%ulRC_1vn453|GgZ2$WQ z&3XK;_3MwvIEVbbkPmt;_pFnTRZo(xFQ}Uzw$?u>nja=LfQkN19a%v<+QaIQM2mYq zBpxw4j1T%ezePO>^&`}iGOyBl66#Ee7t32ua=$MP>PeS4>Ph~YG_GbR(l$27+1mA_ zcT1}$O?qM*{qL)r^bI@A@0EIz|FIqQ*oGCIn)XDeHg}0xPuj3UlU+~pAGW>m`u)c1 z-9O-;=pXoJ`a0S__;hTY(?9!aJ&E+IrtRMuP4MFz>Pg9Y5hZ$_*~$0M;(8KzfRF!r z$_L!M%XxgH!<$yA^(4ZlYplOByo%2U^(5bXHGG(zd_KkXB=7*A%&n9UxJB;e@#%Z@ zB+6%8r~d&yAJmgPm#g8!>~zluJisS$vE@IOAEi6FeEM8HiSoIyGyX8259&$&Yt-;z zcDm;S9^m6!O8J0W<~}Z;K37koeCBl~1^$D2QsP=Qe3+f?`G5!bcxO{S;Ff%V$EWYr zlL(*YgBEs%&g9oAP*2L<;hqoC@63*a4`i8EIPU~5;1s`uasof!Djui4S5GoIJ-oOx zB3LhtdXjgc8cxhkX`H|XoRF7*U#5%4sqfX3s6XA^nS6*Jk5Es_#oTi;*T2|y9Gr^k zN#FrKa5!)azsuz#Ex0SSo<#lVq0Xp4Z=;^%KS2#2W{2_N)sv9F7xDq8#CuLYeYKuM zY5?soWjefq^|E$7=|uN@NIYV87$5X`ev5h%>PM(2C11DJCt2&1;w#EpPZ}XB5R2C* z&2!X~Ja<|7!wp@ZlI!MTuQ*%OlOoTQR!`C<_1E{iCf;l7lRlWRlO9~Pyi;4VxBj0y zUZ!=Uy!A;RY~0>>{l1dxN$4N=XLu6rFPtO(?K|gwkhfH)uhx@DziRE-&Zr%C@_w|@ z8FoGCA@}}C;v2J*@1Mo>B=7*AXq@r^x6olcKGNZ>V(UqSPxC>acV-0nFzQLkAuUSk zeaucipW=EFcz{oK8RY|R=@C3WeXpKm@_G2XPQQQ;>Pex&YWOfa-SYtt@Cn~d`G8ww zH!hz(S5G2*Y6fhh#|8Qj^`xX%4IgHwdp_V{^SPeJXK)LD=G2F7uP><7^+_h53ESxz z!F&elN$HVl_%J&?@UeJ+PdY~VfLq$b^Pj#~Pcr!|*;)74>;9ek0QIC?t$RL1zcV`y zK9FTa^(1fsC%>h4!xq2vzqx)SEfgwseUiy(;{ZK=2EXoydXnc9HJq58(l~(&H~}d5 zCHCX_Q;qcXy@9#2E@`SVcC(lxaS<*K&TMPV>)ljcPetR=9(q(zKi|i)9rnBDWa@3( z4&_A0Q$uf?4|Y8j^20(t*5PQG-JN{;YQ2KwnE&0rt1~m6??K7o2g?m=3wKpn%ssI2vhp|T4Gi|Z9pN4+AFpz+n$PTTlZ&KC6w-&>{CE5_cu zwZ8hYgY?8>bB#48={jQvCF8#>_c-!KV|`1lQLoS%J7V7tGmb&i5|1^QE&2P%9X!VC zrPnLaKk(1+y|jPGcacZaib#ii95*Hcx|3#zKzT~S5HPgU3Jkbc#)r|QCjd<*po z&zO-)@?mBt-#~=+3B7Scz}=pertTQ{3v!Dmyhi9M#WxFMfj{) zKlX&=gZ%Lg^@`}pYWOfa-SYtt@PUp3x5$Y+K7FrVLF3P(YeRzhM${{^r?}^1u79!Z zIQUReM*hFxx@&L&C%h5-Vh8d#^}Y2kgi}q;Asv1}T?zGy^msL#n4Qu%A^#}k1YVwg zPELI_A0|0WaKSEt=)~^x;oJ#oI59f{P8I;g!Qe)q4q_uHXf!oLz^_8;lG#c$WKE4IgHQez&OJ3m)KuGZfr1$ME<_ zmy@*74b!JLz=*51)~v@T1{LnNc~a|)hB;>#d#FuqYicar0^zfCaw;s~gZ;B2e^tYW z*`a)BKG%NYjNPv}M$_2-a~SUn`QV4eYn^;7{UM!iO^7r!Hf{cPr8peB?Pu(tMD{mJ zXoY;_ERdM-)^%r_@q!wG$Ixfk$1(Yqdp?_tuZDhrp2$8#^#pWA`p&Y}*N3^kKN_wt zz0{#6a<|g>n0=PE-j|&%^hElx689e-xnJc`g{T(4~y zmU?080p|HJ_T#HPoRI`Z@FI<=!t`zdf%;{Fh5^)`e?V4 z5~}qC=~qoVG?f$72caiCgXg_;_|}3>E#aR@zmxe%X2*_&*8amr4L5K9VekN-$ge3M zaP#cRS<@3c6skmUhv#lo%QNxGX$>&o%Kb5g~fRFDk$_L!MUvcNBqy@Rn z$F=4w1E1iKR7NnqVSYFFrJC`L*~#bAZpNPceXzg-e4wMiEi{nlKSQM*DAX`zTGeSY z=DFA8W#F^4Iu#Y@1I&N;4pZYl%uYU^m7@yBH}C)-Gdvmp2X3*Qd3@yOKPok!HRI1m zLsL0H{K5Q(|1&lI!|YH#qI?$lMj;0j0 zkHGwH;@@icFgyAFgI?D()X|aWBJT~oXss)=>gkb9WzBnQ)a|QunIrEFbr!{9&U;C}YHN;5MFry~^4`QB z)c7T{WBVmH?*$L=NjyOLfLr`L9v^AhQL(z6@aY%ARo&Adw0Jcr4r@x)X{kXNBD5xz|gA7+R0v2?D7Cv&?s?puBooy_Ia=jswBpXX{*ae;0}T_X3C8a~WUzW*3`Rl#}~@Bp9awUiII z`J1_X`dr>?^4X>?6&I{4L*5&DUJ)PLP5~dIrk9`hf(Q6OM}b@HA}$~4092`YugPa( zAQcy^%S7Jm?@+|Ywv*4NIPV1y@PTdvxA=`bK7B9mHTkRxrgDOPg^~AW-dDqi*`a(y zc`xz}@Il@IPT|{}eB9=}w!Ve|$(HDAm3c48S@zk+pUMdI8}i=hMm2nxoqYdcoq>5j z@BkmY1Kbi*xqODnt|W3<49DRat+ns7qWcsPK3x+>rji2x8Ejcj-lv8Svm@q1=HpR^ zKwTpCG_6aZUXgyjtaXXuvYd<8_g(I&OGNLcIwyGtZPPE%HXf%f>Jt9F-}|JL``))M z8XjzXV3odR-R-?nm$>23J?lHJIlNw*IU%*(qod8b#F}+6yDo9V>&ELJ8g+{v9`H-_ z5BxIp80{B)Ja@IzFKJyuew{Skk6k`5!*Ok8_~ll{|5V*qo%E}=czh}>*pD5$J#q9E zuIGEndUj^V;g_s7QJ~+!#pbk>ast21bv#be@{q3cbC1dRr4}be<0s+N_0g#*uOPod zeIj|NdroBC1hZ4XsgRGw1AH*vfLrK#9v^vqNd0IS+(Ei6haYtf|5+-1I)5EI^r0`{ zo)7UOW~YD;sUdOdNZ*N6d%lc<6TM`1ES3&&)%+FV)3wdyl(&cZD^F4lA7+R05zb#(Jiy1hit+(B z|EWAa(&Z^l^}1T6d?q%e;yu)-q7SIy!|Zg=2Ry(h_7LR*KMG&UZx$k&f5 zbzQB=XK8cFD;VEUKMMa%5g*$QPE;1!6)$|9pAtyGTq4sbtBn%C-+wr(j!w| zH!^a{jt9djzd&DO{x`f)4IgI5!3W)L*Nwmfe2}+;TjDe>AL;x4s`MW+KdZC|TnypO5j z!|aIpkh&h~c&O_oAER|W)ceA#%39Z}k)6UQuIpXtsOx#sbev9Xu=0gBoh|BmnenC7 z^*)*$3w${HX?@wEWxZ0@yUX`&a6$cUMqTf`RC@REW?gUDqFe2{-d&OJf(stnwI2Q@ zYLQo=f8dwVbsLMkbk_eB;QYHD{q zKTqbXm>t_Mxph780H5sZln=PY|Hk7ZU6wHFM#hqK*Euga4QkE0gsQkk_;hV^M#?Lw zyJCMA-vTv!m>ruB`B6o>5In#qyq@v_x9q=oe5A_~6B0c1ALNypnSkB`8|)1>};Z@jXJeTZUCYOZvVgPc?*-zsxwo5f&cWk zEJqfr;lu3M{=*&Lzyo~JU6c>FMYnP4LTi1P^u$GdfuxD+vARNd_&#Hzeo)q zW{2_-)m^<-K3K>HoIIB}`B-&5X+HGx_;&eLbzP6-l#QcKOXURP8`d=>{c89yJC5ULwcFmJuNX$w_-y%o{Py|d*TD~;9Z;`L9+ygne1awT;MX2y0W^x0`&H229Rz{*7Zz2*M?Hbr}%vOTmBPy zRt+C!$MzqtJ^&B!iTsoD0k_Qmc>W`Q9aN>(^-Ml*jY%a1`T%vkgszB>ZO7(goB{2% z=6cEnKMz1(g9rE^4*@s7pXWc)%O$i*ts9wqjO%Q?0)37361lV*KFp3|e6zfi)s4Ud ze5^NU;1>Fh>p#+UiAr6sXY!ddHWe4>1JsQoudCt1>`*?Ux)JjALO$T+`G=EFU#%OF zod4W~#(r*s>j+Ud%KSzRA7&?id_%9ZeK1icLft6*3tBfqJt=%$dFw{9nQn32sNGRF z@_uURoKKd1N%oTnze`)+o3usUD7(6}eJ~UMdp_X1{rq0r2XobH{p!!Z%BTzNdQ7U} zyTi@8QT{%dtEO&KfByT%HCH`65ZBN@@XKtD_7^@L-HR93q=!w--lxaqI&{_Zy`*2Y zO*JX6K)1s$vk$A;2Zq_P{gST>Egs+#`i`Er;1=GN$H#?kZ=D%w&?<2MdV^2b@S{>m zL0p4w_q?fw53^(QAudsz_gXx_C;NNK2Y%!`lE+707oOf=+@D;*V&`)BPuI00QpqRy zc@=bF^cF>YY&#A<*09BNA$WjK$ch8-qs$>ZKC-hInr8A*aPE<`LieiS z!|deqL9bKYKG`@$zyo~n4sgrv&E+FKaiL^rGY?Yj{vU)-*PQB9PN3f~ZxK$Y;lu2R z`H=Z|oV_EeVqW|)3xfblwY6=kyrU&P{W7W$>&q7J1~wE^07I6t+rmM z(tlK5|3=271)B~^#RYs&m&p7>4IgGFpAUMS)e8~F5Z8Raq;U=LF8*>^U}jyziN{YONA%#_tivP%Y5v2egAoLe_Gp)!!KFQupqvH3pk~1g8rr5dwYj}LOF1}oJ$HC2F_F&+d0X~JBb9Jsc1q)vu*R1{PT-Zk%*hG)wX8>} z^d~dUZB=+ZsoV~pWQ>~e`N65kseDeD_YZAQ<4??vgA=;lZppYu@;Jmd#JlLTG~OW& zh9YH+ch#~5ui|)jjU(Q9ccS@Q?tL2PqW`3ARG3w0Jl6N581sbH}Or%u8qV zO1$fA|2XJLZdI?<`cr@2Yls=|W?p)Z9q&5Vd=m6{jn{j4Al{*W;GgIxd^{U<`ls7G zZhXU>mP?wdCb}I=Rga^jUo~w+DmtF;pNMzytKVJgHjg9mj@fber!d}u3pjxf_=TtN zILUgIaeoG5KcM;UF&Q=fTH`-;`{ol)T@#N^`6lo=Vf~?hgBniEj)N1r-$+;Ye${bb zC2M>ECyX=rK;jN3C%5rVr7lq!@5mVSfAvFC@gCxx?^QLNm>oW+!uh@)xQTxuzRUPk0ziKN_P9;z4A>OUp&2@d5=n`hf;h#cX0xsZ`{TJl~ez}P} zPSV4uu@CF)FzanMf7Mc5qG%p~aO(QP*q>jpZW!aJ?=S8-k^O?0oqSH08vbS0nookh z2M_QGe@6L$TWkW4kNiAX1FGBaL*Z;lu3Y^RbN7?rr-Icz_S$ zHMsd^^Z3YCuQa7PQDxp`j&H_&usnkMEP+<$arb;k9Ab7He1vfbT)+t@Huz;5c$}om z!4+E%HaQvh!%7J182zk{iQlb;6SGqqC+J*o@_p*mb>4O-Co4aeUeD8p6TxMxI`1M{ z`J&N*R9cW9V?B@O9yOep9S5hPUV&}^7jQ~@oOw#@Dn2LKk#BaxApX>4TsNNi8K2Vti&J`o z8cxhkX`H|XoN#u7U*=3cC)rGC9t^l_%fiXHempJkr`@dM4W-m@Vs?7ww8;=Ls4t=3 z}cyo&2h*E#A<{?BQg_56dj+5T3ZVYOJ#7<#U>d9Ys&_($hf zJKU;QZ}oDo)SG7Pa9{A{-*g$Zkx(l9XS%;o^;S>Y^`;r8tPH+<)rh8<>*eG>o(GBYQFR>!;nSrDQgHzvw)e3YqAGJA!*+^Eb+ZQ@?d-~s0hlaPM@idpC&(T7+`#vm9x7YuW?Yye%kzUj7H*dHv`0nC2 z3|)RkDt_Xa6gjo?b^Fb`-XDDTG(*?-@Iajk{R6*DeBspX@mHLF*;jQt=~r#T_*7Wn zm(cBz57qc3vqSw-q}#y*e7s*#KH%ngo5x39cvq@!Cw#gNF!oax=tAiB(06M1FguQM zvq-mt2l&LkrhLFH_6(1Y>}Y4@RTZe)O+IsemI@1WhppQ;s^P=zbk7Gozz1;v+@iPf z`1C#9Zt~GjPbCH8n|+2tc>(GAet~X>PAcRBPVrlueEOW~YEpfo_LRhi><* zrMew@K2de!8~=ykXh2)J`kj$qEzqmS>tCkHjOs!T00XsOK#0i9Xa%9S*5{r z`w!NseZ51s`?sfhJ@Y>rPowY9HnJQ2cO0m1Y-#H|zg*H5-0j1lZtUf6)VR0&e*VP% zH)B=@wKZ)zJr42<$h`&VyB{^(JIPFbGc+gJ)fG5O?pPKFB^16{CDoJuOxh!9p|`Nc>Mx+ zfDibC8=j-3{^OSx?iQPh^q-mm)AXFp2ftWt3;)Tt!~91p+Rq>3J@^!k`_UVm{sY}1 zyMjH>e_Z}>we><0Gh(-m)1$WTaCvxwkAqLXoqRs{m_5E(aTt8?I=JCET8ocgR=8XK zW5ghQqin05PtC^D^_)E)B70oje-3=|?d0>xAK%D24Cp}U!dwT{h0u$I)>P|4*%C#u zE{r*Jp-;2sMF-K=H<-5JpE`A6?2OWM;rHLo2yVRV+FsLz#QqQ88@jOl=Q=$OLWb$W z@2{8@{NY!n>q7Jo{4&0kvtJ6i_f=g;`c>PsLXX<};uQXJHP7Lf`F5CJ7VARr03T03 z>pZs3Yv2B3?m2mDc5IYS-_wPJ&+K5o90#E#>mjW z6zRgkua$VNR=1mc4tYS&Y@xg=-%kFSkRR73lelK_0H4h6)PKOOu;VN~va&<7^4{@< z-@EzG%fM&dD&1?>+c*D+O8ErFw|qO@@c|F;iEpI-18#*jEk17R5)%r)ck`c@fltdL zy5Fw1Z~hUL@(J+Cx6>UT@Bp8rrK7;D(5A&lHm!pH)E9p5=07h3pY0yib6aS9%eT`V zAMgMl^b@$@IaJ^0&Xobnh0@*ZFqx`G76qNb~`CfRATSOJ7@gBHoYI;xkgVuxHgJ@O3U)wRH)? zXZfNVb?+9c>*d?Y=ToHLEFRz!-HY-8x55qtA6WsXQopI(x7Flx$Srz!3;9pJo$mO6 z2l!<7w)C~dO~gl5z*&5h=r`qj)-BdE_IjhjU#{l49e?udbjJrgzz20Na4S42_>ZiB zv-l{{Z_4?!EYXu&$ba(fbjJrgzz00Q4bRb9e1=v_DmaUe68)x}&vtj}nJvU8-;Rh6 zsf(iyj=Fd{P3z*Qm&blt)^*O+?(5>;Tk9njIqKr+edstHJCL@yg9_T$2fau3qxRiZ zT3vkcEur8+hpY@_IwthWdWna&YYZNF#ZAU~iEVr&LyMY&M;?D; z$?GN1Kk!TczO;Yfhsl8R`eB+^$woCzQ+<7+s_WlKziRD24f<_enC~r`hILH2@S88X z-KUex$1^*c#w?M#IC-%9aDfN-B=)0xz|D69kB{V_X;`NF9Ls;+JbdH-$o1VS_lY5V zx^~iucwpyv$!z808g$}CdD ziP>>*BI6zXufU(c1)Olkf}ejWmy>KdT(SEund9C~o}f>#Pb1bpM=w*uiP-^=Si zns2wBHSWUH;kEba+?-=6{k^DL<=cTaHNK_jIyvwFADqYFR%n^> zk@Y4`Q@Nhg)FTS{EMIn0M{W!8$+wfor)a$`cz_RhfE%8pwdNi1bhF!WEsd>BmozE3 za})I+Rr~i4|5?85g%1A~;*)QO@Ue7GQGSf^zL1Zo<1PImUBFN|zNxG$l9-V>U`=gw z3-QUflkY$1cjyl24Cs#72C6%tM||tbT2~w{n;|pZfx6<24&9M%q;WLcK-=^<+WMPm z>r2tPVtjaMy5ozFKMQ^{`dEGC-Iw)>?%3zN-Rj@{@xJw1`x*McvAdc2V&&aaZQZfY zcgE|NRP{LD0o{TAfnP?)(0;-B;UBBd{UGneaU0i8A6;kMBEa~+S+F42Zf(`AvI7e5 z&lQ-_I%D&{ob;=v9ieAzzs&p5#v%5z4l~&{?)*X z0H4@Jln=N?y<9%hx+4&2XlrX~t#Z$)416{or~3u|vzNsuJXsANX2-#&NVkIr_#^|A z54gonoBMq9oAC-a6fI2-a;PVrUPohx`A7-a}KHvd9 z-WJLS+`_|ne1=N^RoW`HgdR)L~xBo}pnSi-Xoc~`5m!aIJNoiTmnifhff`PUy zSqB^%t|Wk=&}K)P3JZiI+NVx!XWungL;WYegHyj9-Zj0w`*?khn>?*!Qq3ml z{4+*P{n7otfjh8I%1)NU$Ff8D&^k=dq0_fL|6oOFISl$5JirHE2;6Xtmg#HZyt`hv z?-r21FweDh;Pc9HYGE<>aHb^wh`b(ehbR&7p{A_5J=TNZgLNUgR32!LZ`ki7n%Ohg zKQJKJlJyVCOUPRPkTvCI8xK;W1@N)!H`Ez3-E#cLvctzWYcSwH-~m4P3ves6y7Ccz zK$3C)I2Z}k%H0o5_zWAjt6DPs$IfSG*4OfEIeaWT-h4>C3V9;rjmq!Syb#z#CaF}8i` z3<-FYdhi*x-3Ybd!3TMX*eE%CEITG2?nJe82Y7%_W&-5{Zjqhb_z25(#o$Aiyj*`o zerz@By|VIp#D9j3J47vc@WCus&dA|o*`a*A@_OI_KKaR%54fei?Z#)A@Va+Yrh8^P z%SjlC2@y2Ld+NaF+Ez9Cn7c0Ai}f>pj2u3e9i9(a_mY?8Ki~mAnW2;qxMjcP%12Z# zC}v(_5`#oLB=G+_@OfpFntI5c&mOFY*>Q6CSax_m`hE%HW$^(I@Tr`^<{#!qnE|eR zM3+?!n-@3Y+jc)yy=KFGyhn2==_86 zMoT!7yb6I|+9Gch z$=8-Q%8$D(p)5Lmz2%K=+Vl0qRyjQ{blZ*U8#hg=${XD@sg&3%^?A*CBa9FHvNE2I z3osH*3I}?a`;$wcs|wZUhn{)(lp8k-157+@)6FvHfmna@SoAYRVyBOapYagN66u0 z+2Q$A=k>q?d}5<0A8<=<lyxY$u(*&q`U-g$1g7d9^hlH6PX`*@Coie4VKq4`0R6? zS~C5|`OW1VBX7jp@#6y?;DcU(8;;R3{}EoGn(?irvGRHbpJ#7SQz7MDc{_f5kWT?0 zDr37=ut&Qzmjd?RPI_1ca7SUFb`AJdMvJ|KBl#==%nJ4R-cO5?18iIcPWaV9Po#z#{yld`os&jJPv`rsM+ww5lCRefRJol>Y zI?t`Ue!J|@fA^^S-hN-(`gq>nDHB#C?oR6a^|szddt~gVM&5Pb+i%zVLSLuc)|a?D zQu}^Aj1T-WbpRa~d|viJx4f%(UV{21+3g(cB|Gm*##L$gS}l33d*P+!n|h?|*R$-H zanm*L3LfB796|YjTlAl9e1;0Idu7H=a(@X~`@smGzDbG}^~metI#R_hGgz+@&eo7<0t=(9QdgR47Wh0mSy&OK4 z9UGsj{jT5vK9M1m54aWj-1rDjKgwapw20m4#NlZ5(ARy5h?XBiTE(W?I3cZoV_?XyHCdd`vr(58HRbtXT68cz{p&NXiG?$_w52h~JO7QSUQg_|Ndo zwVcQNgS>0(0XcjuJCqOoe3$zSFdpDj`7!e!=10!+o7F9ZP%fF#qhiwN~Qh1$<|jE&PYK%{A1an^AE-wE%Y0BfDe8TZkfAW`3x0Zp~}o( z%dGnmKJ!O^p+-IQHSXh;nJ_wE`0Nen(^>ru+8 zO|@^0_{gaHDMK$a>wfRv_us_e$F~{<|MF_#mlz-TW#pH1T=2g1O?JPe^O`6vMIjZx zM!epFjH{x2uEst5lFU8i6}$0VDRn=~ju|)I^Ad~)_+;i#KHyerb>kzx?j4C6AJVTI z;Qw-U2jMgSo-fpr2Oq3^Bg^IRvFv!qO;Yy*5AZ2xC?EJyY?K?HA)?b-!`A%_KBK=> z3m$dz?bw-=c}@-=%MQ<{dcQb$fKTcy$_Lysquuxjbzg(QXVO5e;-L?4yU?8Z;`~uv_tuL)h)mSd`hj954bU)W<%Gf!f7K*zcpCh!r(K0V=cptoB5?B z{(!tIZ-;oQSKR_Uzz2C2aC3Hz@)6(n*r;_2gU^CZw2G~4IzcuV#L$*fzDoaV-t{Y{N}=mXR(iUm3Ik7b9~*VcF-KMEe;gTDZ`@)NFngg4&H z%)iO3TM$0;_xZb;@!*4f_mPL>@UiUJ^jlTk0(A=1Ez&D#-2(NDc)qT63*j3-RM#!8 zvehk;7gL>+xq`Oo#r76;i_)RB)h%wj@``1jj{eSiyIyIJqgN!RjUe|I|5%;=^%GUs zEA4SbUt-$7`f;BqHa_sn_%b>^@XyLScE1c-w=mw{fcJ?ah&-NpG{v<FU%7p{DS3m5!-q8jOX z7=zC}uc#RhK6@}ek!f=HSax_m)pbAc0H6H*ln=O-Zg%6-e04vA&*<0GoChD&{ZcdK z@UiUhd|dM4j0gBceoOg)TXwA*A7S@t*t(y=XH7}1cv7aAxzi37dAIpx(M@LkBJq&n&Pxe8|2i#&WxbYF+ z7u2YAC4ppk}pDFLFag&ev zm8JfGyf|-%D0#2C5_o_Q@?hZR>>TAYTt?lZp`LGH@Y(c3HM0c%ZydZDfq+gr~3W7*;Ln`Mvq8M)p9bqdri3TtTH0`-j2%XO_=2-l~o z>lRnr>K56j={%acnzn^U>@DgRl`*x|EgpaL*0wQQ?4tI3^K1PYhoXMFuvpMrhFLIb z_-XUKzDk@kcFR%9($(sBCeXS?&o`6xzR=g^9bYHTS-eHf*IQtG;Fpy}bbRo6#nE0q6|K3`qZe$x)*u9_>OY?$Fk$k2Ry(hR-k;qEtPlU(|mb7gU=-|ss#_-fxKR_ zMGha!j(>au5AaDp%lwD=QT#7%e3~z>XYkoauUq`dJ-#8YSNu>;e6#GBeDp|Cy`LXE zOg=YJKH!$T#f?w%?dLc6Jo~Ded(xc`_VbrMmBYuf!^gMkx<#7t0H4Z@ln=NS?{VYP zeEazgK2u6+&SU<;e*W0!lK7Z*Y<$>kY~@|S1ANL?GCuI5+gz^QXi|!8nR$kq|YOwwM2A_N0R&ypF z=Qo#gjJzIihbVckyeoKs57zPE=Ij;YBP_7Fyk0})T@5~?SE(g){&9YDImh6`+wtQA z9^ivsfE$j{GCmUO7LAp6HTbM~Pt9@bMto<>Z4tCEvHtKSA@Zjk=$o zuZd|XiT#n6zNqgL?=|{C`aAggOU%6M z^ZTz=M=pPf-v7qu%Mk8lzbnSY%P;f!k7x7TgXUdNXz!Zc;nT0$f7L2AZ$!pbX?aR5 zdH5wxjmV{E6!slhdoP`TiMVOm;dOg;UJvJ~7oX_8c0Md_in@~`laI{nY{)tP=1-TX zQIEXDCTyT%x5(jR*>Upec@od9CG{%ANyN?Ae`vi5@zlxx#jl-lGcje>jIQ>H9aB4| z_2c?8v3FU$8K`^D)5am<=C!uCneU}>GWQ~jpZC~X>yv8x>A@4;Z@cP+U+MRf+PtoD z6MpLK6|tYXZ+qSTF$vla@)w_)HM0j#D7U44u&w@k{}UKHvd9na3#~aC7$Us40`W zI({j>eIn@lt^Ua8)3@T(L^P!J0B?umLu!ip%i;qb;Da~=ZuIZ1|Bsv4-W5bQ1bx5N zlREGjlS*W`Jf3As-cRr!-j2lwy2IiF9^iwXfE$j{9zA{L)b=hM^}h}Jepno!EH!jt zc7XGFgeP=N?4I85M+=bn*0*A8B6V!$ty+APM7S$~-x?lgj{|h<<KF^)5 zuZ7Dlio7_=<~d1ml#HvQoZl8Z3I1vKnhn@+=C?@)USE?qYS~fr`GCEa>gx~u*SgEo zO6x9%gA>kIFHX5(c1~=aExbWPCMUAamK8_Ixqtb!x3oo%cISls8I^tIaI)-hoWP4~ z2`3Uq5jPP>v;Rle+la4))nKmG2S<0!_* z(?9<;>j|EFv&K;}u8Oi*TV<@ff69)dmL1MN5kpDqh@&`Py*Q=MUS#vnW{sod+&?IK zSX*|SJ15z3)Uv~ILeSt^#8Jde#L?XIG>#&^#!stjz2~4f*QfscSRF^Nx5ZKCXO))I zI2u_%Tl_x#?OaXuo+CE-TwSnac-xGw!`4e2CH5ct%Uin7-#n7^gYr>v zs*mmbPR(%?;{pG4j!Sgb^R{{q^H1T8_EH|UsDEeK_f;cfI`-6U+A`)o22&;C6fxT9 zfjb4(qg(5rWZ7}|Pv}ta03UP)+{)u!`H0FA<*=?`cg;Zm^gWx#eeY!Dl?k8D&VP-} znR#V*KDn=Ul)}fd6oSIdCl5_t@18y0a3~3#2+2J_BIk*=36LAx9G`Bg;ha$dmZ!vz9ypE5H3YzLT znzO~xLLZHrXft=wW3>2Q#Xr>+M?cLzt1cR_(^Km!juQKCo{`sme)Tfa57K`=j((af zs&C#$;;jD*`Ud0T<)6ukc74;Vag>a!qCCAUYu1(Q`bKsfwd`>I=@UnBzIt)WoNnjT ztZ|f_`y*BjUKaPrx5!?{TXr~3F0O?*inxh58d=5G@l2OG-zqtd9yr2jpvL3sIC`Tk zjz<1O<7RmwZBuy`M_-{W%%ld@cD?*V8%|QMKW~>d^?NJ5*w-7*6}osiq3k9B5(iEQoSBCK#{dh zB;%?mi=K*``&;aB6i4avknW?z+W~tr&fk1=bAc%@c^IX3d#rEcsAr`%18WqE7|+Q z${RWNw;bLzy}kSJ_I_@1A^tP}#-3#bGtc7u=5mh7xRX2>Z-?+IKAoLUk1Uw`Vfj&06x?5@cx7-uGUg-Gj?ItE(Scq75AexfNBMwT zdM|sNL)}btMw(^zAm|VE;4^<@+~YbaHlHhz7v%7C>w{bFYxnpjsubqHK;X6>d^Q|e zGVgC-=d%s#Z~huNd@MWOd{*gQK;8&>q~sSgkA(bE_WjfEI%J?9^5YuVqwTpg)C{nYRDwSIBEF$&*8? zyYLaeUpkjZ3Wf*k;H_Nq6ga(VZ}szj{-#;AV(NA~AKbSmw^$Az%Z@)E@BkltA#jU- z7ut z+y^JbfBb#&K)W9?{Vx0*!$#fTPv(w)y*NiLctM@{J14@2=tSs3 z=)~0LR3}0|=1O00aAEy);(_vX;!QT4n0%kHOw$j>))_d5*WkDIS`Ocge?t3phpD`3!!}-Z4(1 z;nS>}G@2eEoaS%(pqerFDLTKooMUj}?Qon-BUO5YaRDd%A^71KEvr8Yue+?eNn`0o zgVQ~KP^05f-@-SR+kz8srxs3_2b`SHyULB9@66A4(2e+gf7?dYjbtvl|H8Y}d`SMp z+i~MW$JN@G4;=zsl6jfx66lrGs1v8X!+ntKeNe;u3!43Xb^hvRn=YxmL+9D}r?idk zcKzohPZiyaw$LTTa&7xbuPj~AyZoj{*IWK-?W;fP-TeFG+LWH6`sL|YSLLtPzB*L@ z{b(!~Jx3L~1mgq$Os}%*lKhu@9mjKL^BvMTo}cgai$=|lka1O7Z&gbk`71L&^3p+4 z@>iA}`+C7S&w&T{l-{L$z%91%-Y$HEWj^wYUikX)@2yhvi-gboHMgsAuHM*>&eZ&; z#4pHtj<>^wy{dgs-~m3BJ!o73x9s+=e1!EP-51bubj@GL^AGF5=aL0##;lup8V>Xe z@Zs(F@c|F;DQ!jhfLkW+#z*+_2IfC4;{tt2|Q$oT&!GCx=etf_KeDV>>2i)>8S3W`Yfx#!3N~i-LJx@^xNgwcb z{P=(e_$0ri`WoCSU%SP(gM{-)y#EAK33cEz`eC&c5+B}ExcSdP zLG=OkpFk?14t&-;qEC6B2k^ExUC zla0$qVE*Cl`0)V`@X78@`G8w;16Mx6`e0ml`^;{Xf*Xy`K98$~kn{m>$Bz$qfKTOf z8sEUpc?z)n+hEZNh~~!|Z~u#t-+A`WYBHoc25*PwgYkCe;lKr)B0Et(0>9iQZhkaO zcphrh>!}P*Q}pM2m~{;M={G zS#?2|zV+juWbY?4IBlw`@#9e!w2$5%tZ(TH<#4j>)W!*1zzIVIemF);mnBS z#?R?!KLejB*49Bc-1D?rF!!^I^=e)3f^OjLSZ4&ge?50UU)0IK2lX=8DerFgBh+n0 z0X1sfmektL)~-|29)5)Ve$l7p_>pDD!;csM!gGQS5M00se84ZVsVk=ggXxFH+wVs> z&7YD}Q)Yh7I=ji39Ki;r{AzGcq&{TXapy$%ko|tBqob~#`-IljQEzA6G8@@-bkAvhy08&{F-;e06ogXa49r)Qrgo-&k%7{lVMe&jcqQ z@Bp9GhSYz+&DlG~M^t{G?$mH~b%W2E1!^HAKD-@2KHvd9@$XVT;O5S!`ReKhpG)pm z;~~{;c{_f5zyo{=+fqK@=D|mJ{%O>@y1{3kd(~7(e0V#4e82;IvTN!518yFCMCBaf zTcC_A?UUT~ufgZp`_*_zd0F0$A0O}lpZu=Wf56Ryk8s|cuM0XqyMM=Z;4|exH5C#c z-i{w1@Bp9GC)9ty%{gXNAH;*|gNCcC8~(HDVl@*IAKs21AMgO5?6;`@fSWs?=Buk4 zeC~Nz&4t8=x8uhLJisTn1Jei0k39GU)dvk%S2y^KepD@m#D}-z#|J#Xr?NTa18yFC zg6e~YtE(G));y+GLgK^Q@#6y?;FI~7&OhMh!ADphG-_Sl;B(32YV@g)_T6!I{P=(e z_!M`c{sV6Ae1?2KdB#qUtyG6 zp0xSu>ISE0pHeF(C;RB_#s*MUUEQ){&y#|a^FF2E0#3;LgI}@Jm6Py%)TniJgVPjM zjhW9$wsVqQSGVlc#tB@&2|U3M$7q|iu5NJJ^cgkI%@_F2GF#-ec{|n_QC(L@oeX?X zFGHV-XWRX#S?lVg);40V>(xlgeSeDVy1He@!;csM)bGFroWKYC;^(?@YPz~Q;WYnQ zy{>Nhk#%;HF_B(ZH|@A{B78_)9d&fn)$=Q8T^;py@IouOu0A68b31Uq#anE3^}=el zj@Xy#)$-ryapZ^e79~M%_RqKdd^~smBs#w}-~If^xGKu2YJ3^iU3R~eU01j4 z*!|L}=fMMf3jd+!FSvmdT2{9eUKi86IX*2&+p6y`mG@i~!e`jH)6~>6;1i^8-tUF} z;O+2df|Cz;fKPf$7H1rO1dEJM(7buW)zu9?*G^VbrvKm@%WX|QoE<+t-~m3Ry(u4X zbM}t%X}-F;!RM7Owa^=m|L}JF_<#ra#J-~O4ct8V1kIZVx)P1{sSfdNyP0bA*>L#q zcKrB&hsozd$_Ly$_z34ISlzba>gsg<(eG0l()`2Q@#VvKfKM{UbS?9v)Fp2Et@-Zv zOXr{8sQFtTdz0QbogXzt!3~_Ui-PZ0CV5%Qj$OaOADlV?T)?TY597r66>f0j)O>ka z!fF1R9yNcnJEz^)0LseCT6WwyIrFmM0#30XP)^`izQvW3aJ*~OysW|LlJnK*9qycD z=VdKBwQ&L$aLWIKt&5mn!4J_=T_=7W`%&#vrnMY@g3^r-6l`T*mu7I<=OVRa`jcSC z*6}u?yN&AyIXm_UOFzIF_rL|5ax4!6eonJYe+#c)8}+(0gVVEFwWNik?|3^Fr=CN1 zdi15Z9`g<-JSXVC01xm14{*aVTINThmpdtmDN{S9&6+ZOTFbcZjv4q=kygI`o


zwGt8^-j2nGJO{YvP~C^j=Yk?%2|mbMV#LzFvCl`%THhc!&(XUasTOW`pO0kMH!M3I z^AQ68KLQtU0w3_JJn71*>FOJV)39;Js3miqWS!k)Ok~$LEIaO;2p>}4Ks^KXjnwu# z8P8cl-6MAYxE;^r^4xOk8-s_(aYFR7wXPfdhCNT}R$F}|vp?0RXwzS?{0VDeF8}Y^ z>Kp%@daL^4#-fp=AEf`?<9>qWoAS^7Zc#6oNa`>C zFZdpIN80&deiI#9vC*rxM)-WQ)j&lSA9Bu@ zhkds#?h!XPU|q=f$l+tz@sFE`lZcy{f6%%x;;D0FB*)EzL>Jc8aq~7?+${c`#!0lL zAJaIB7T>GpniQjr4=`pO2gG{`F>c<_;vT`oG|p z7#AfwiV2E0U{;+GB}bIH!VB`~cck4yJ9SOrKvG(`t*GcWrlzddmN8ud3hc(PLKldUMst zwEFcAW2(}+pE~J;k9x`2WRK}G;wSle)v^xt>)(IB=D3ORfnSyf({Ul6MP893cJ1Q1 z2i2P=w0F(!pdTIZ|4a3#DQ~|98CPZL&T8su&OmI69eD%4dLcJ#a$D#P0qtIS8L&+wH36ZgbD4 zY{WWTnj4%C$s1dCcs`2fbHl&|oDgroFP3oQB%C%@8nq5%a2mI#n)cwd3FDN0P!1={ zPHmjP1)Ol6gJ0odH%>!^_irSo%<68RHc>*zWBw%RdB6szYxhx0=Ds9EI65Lbv4M%L z2+oPzFUzuHaoX(lJ$^*ZSn&??Gx+33*yp3zes(@gCk_$apce2U&1{rNBlr2GWR4$t zU!^x{&J%V%+cC?{xubFQ;HW0uS)X9z^+oTW*v)AJG|U7T<|LKg;Jc?Aifp z#lwGC@>7YtAcv1-$Da>)fDd#oxaCf98+w|$|-`P4ie@ku+-H+yf z!rVLSBX!>y^LwwFao&1a2hTq53H7+Wey6XMp6gxo!v4lOxaHkx<~n%xVUMfFb&y<` z{|oaP#s_|xJd}xy}L?aLRqn>WA$7&i>AglW6o*l(8MNQvLmI?tkA(*Ta(Z zJK@y1@b|qX)qQ@$IxBl>a88DPH|_A8&PtHlm~DR!;{iU1H{e#f)Qyj*IyCs48FPJwZ!EVZagO*8Z^x1kJ$j9K#gF;@Q<#^*CwjJh9xC5w_aCT>~l0bIbTlBS%%uk?aDC((75 ztaWfbIQ5O0+#5Cb*;;2e89l7C%0HIF$+A-$CvX8L=w0wD{K=J*a6U=adbmEEe$!j@ z$jc(1ly8&6$+A-$CvX8Lcpmsgmb!BiRd%x0#r5FSxiH&X_K15}7njG&;bhraHz%?_ z#(Eg*W^ZFR$1OKcX zN5=(zTH0IvpI9H0aaDR2_NF}cbz^-Tduv-M>toA~%|AWY$KV1^ky(@z_{G2L#z{1a zHtzbEaO&Lq54|NbFKgE&SRa>{2j^t0k4-x~r|R`Fcz{o_o$>*<;x2A{ns0q<@LBk$ z-jc^YD6EgOA4}q6+VSTD9^g}GW$~Z+QE`|XA5m3r?YEfRF)h%gdPIj9`(Y%lzo`E_ z-JA8$A@HWuir{?6`pdGz^YPwq0WRPa8%a5VUoz&#X&9!fez(?si(sVc!fD})y-APt z*9PpH7W?FIvh38x30%M_HHUHnzrsFloW%1@qo#FF>Hbwq;Kygyh11?|_Le-Z_x}## zlpP>P*IRaMoXqpydEG0xfD?2u_{9%!<1|b-@G(x7TbVuU-w$=+wD5!8h{rm4SJu7w z3v&F)vQrx;Z~-Tb7Wm;9EzRGG-=y-APzW*~oCd_)c>%T8^azy+L;j{(2zMXsEhE`LinbuR4b&3JG^{)cmc%Y46K=vp2cdt&qRXzbJ>3WoO--Nd6Z2TI6qw z8`J$w$mGWaYk^cL2! zzbQ6F4j;>oKOgV_pG-I918&9NyYUfDV>Imba@2qH{Y~2QY(KBHY9%orM}=d9^C9_L z%Z~Ng`agTdIdB0d%-i4>yV8x5jQlP6_Tn$u`6lW|eZ5f+PRQS;E|$Z|vQrx;Z~-Tb z9QffFZL{tdr2bUuO@(y7W8MyY)h*uyoeMt6sdil#TWR;BX3aMdtvvM9<9hQ&_jreV zQ}!-7eq`CP`4QZ}Y>{sQ7jP>7oN@xc%)RcML}#W(%{LKFePcTHebMfmkZ(%Oki*Hc zQyV960Vk{$6?`&`UX?IS@Hx*Bo!^yIEi{!K$h1kX3&xfu&>`KI(Z8oy&RXq&mr-s1ZtKdtRP#_xUgWZT}; zZcapZncKEL?qf{sf3>;(TyW*$1nCFq|KRuxy)X3j-dAedSC@a+_;>u9TZ{P);{*RJ zji=*-_oT1g?}#XOzapv|MQ1zxI_QomlhfVGQSCEeL9}hvYw_~#V@$?XX}LNPH?McI z)Ewy{j!Kh%D&;=LmL2P}jge^GFwQzxA*gA#)MC2=M{-4cRxDImb{;!>v=nbJ-aU@$p`8$>$xW2 z0X~Q`;Ff&AjgR>Hc-+MHt`5cUA=(w;|I7EE&V`pHa^`+8cns|z*2nQ*%JCn|4(~t4 zJ+*B910LXm;Q}`tqm`3SZ_#gGJfo|9Vu$_^Jh97DW#^d;|M@VRsF?Y5d}FyS@gI_B z;_Yx}f_FZh&C5XmMy}CDqlg#@!k-2@lO>&7Cm#3??8vI|t ziMPXXsxmWomQ*J~KW5Uq+4O>3oj5oy8ab`HBy{54Hl3J1iq5Oa3uv2~ zU~e%Xk@P>-)^eXu_48s|a{p25O(zojf6wlfP?qkRApIcy=XIj`d0*S#BYV`W6EQyU z&*TYod@wH2ms@Pyn^h;0aaDSLn5cxL6D>RZJg1MkLnnfV$%mcC;Ff*GjZgFGM8cJL@SLr@O?Sj6(s?v< zDs78L+S_c2K4&YRsBJ&g%fnx4+w1QKXjeb2d^P_058z13iwbJjz9y(Oj%J-kX@rP>hkgh}F z?O105;X_`Q{~+Ew`Ov@9pJ!gO^I^I}SQyHTZ${ojlI|dL#@r(g(lTa#*BUi47SM&! zkL37|Wrz14jJjg#4(JT%j>tDucR-I=@1Q@))g41d$a}u$J$Bu37M({67t%I%vAu=v zh#Xp*?)d)a&$WGb<73yG?nuo!HnFHn*A-hIuYEn@s4Cr&`eJNi(Y{yLt~=QHz%MaQ z;2nMCvfKX`bO#w%<;AgD#$*2|yi}I%uD-COXgQDdwCs7!vcvPis9W@DWCbh5U2?b5xTYy0BW zlh)h3mfh;uL@}<NE03R>}xBS*_e41}PZSYC_LaUg%10x}~MV*DW1K%`q9fmne7b4y}`Jh*s zP3?S|Rd^`K2zlJ z@3ZNS;+1qB&0j;?=sbH1-4Xk7ZMx%uju+a-JTz&&>5lpPk4?Oo)bsdTpP}u$y1hzw z%ztov;>Aeqd3=ly{4##ELwD@))x-Y_>uEBsO3!31=aJ_^Y?GxsEIV#~X~j+O03V#k z;8xn)jZgFG4#KBzWm=1x*N=e+jYqO|hh>N7Q>{C|1AGuC!7aI$8=vOW9R{C0PuEf= zAB=?D7P^DCW1R`rd3?lsCm-}Gzmc6!v+52qXY9D`BrRj|u||!Ih3tHXWrz14jJl;e zpfgO}@fFn_&?A-U!?*qxcb$V|-7#XY)un#@RGsg*-=;gV*U@=2ouh5(Mtck0kvya} z-LY`O^KBjPC)S(p*ztkm5?5?O_7D728@2t&D&4W;e&Z8YJX3ofAL9eRtXyx`9p#%J zPEF)&>a@z1HZ&L;qME->K*WHPHzU)9V2H? zok6ZT>u#Smu>(eg+E%Ii7Rk6O$`Gw&&TB%QTIZV(H+ef&+$3*rc}oB9Fz^8n@PPqv z!!cUMN3?9&u-DZRK7HedYK4&IHQo;4<8{46l*JP#AMnWi#_m6CUK0&>`UUA3IqoBQ zKR$^`n_at~77wY;!rQU?4;^{pKdba#U>?J~R@#tW2N-4ZT`_XV!;f(vAbDOpK=jI` z>Ur(=ws|eKg3e>9$7vgX&EA^x+Tpd$YgbE}NBBhQ`2O;K8ka_r2GU$#h@+~m${WL%Y1 zNv&Y&O^krt7V{c!hjT04n0;OY5AZ21qI|%u@PZp3;b~2gg2os!`F#3@AE{MBn%8(c zetf_Ke9Sn*{3!O48z1rKNsXS?-7#&J{%GI8rzPbh>wX@@fBG)?sTMV_X9?Uv*AIaI z@OB6vsynLl_}~FP_)u_*taRfep6_VX`>hy!R*uo)A@SkuSbUVK>m@KBJNbZ9`87Kq z8M=_&vj`>xTXvraN!Lq|IsM^Zj?!`=UC+YXvBx($9MFZ(fzXA?63ur&FFFTLwk{mu zG*IJlwJv?{w`|9I0QC zrT-V+tMt~u-pa=DHf6$LT4_k!(1qnQuQhexqR0NRtg`VB&10{g5$+T869VG{zl_~N z$H(h^LGvBsXSS1RZOZg%LDivL-9g4xdGW_u=DDrjuH`)N8lQFjJLWas4(FGLI`0nw z9^ixX7~GupC?Da=%ovxV-! z_`omoOYOQNf5^Ol^4yv35Kc%nYCejLtMchMt-!@I=a|VjhVJ0)aBiiWu;-(|1AH=f zP(I*R`hhDS;jT7nK8o<^OB}D2LgK^Q@#6y?;8R@5;tTVm!YEfh!U@Ah%|{u0=AEEb zLgK^QA$+{@QQ!eS+50IUaLWyG<0Bm2ltx`w8GKfss1-uWckp)X{?qd$f4v@ffDh(r zaEt!fjn5F_I_2nDEr)kanK7edQqbF%%FX8*e1@N-l~#nL3pqQM|6tm%_7{Q&_~0+V zEp?zPA5l5iuyuZe&jlxIm5_8hZ-?VkmCuEqb@BnH$S^yfpzA79=WoP(F44qCUVN;U z;?8S~fy@^AjkjZuZ`2yrRai%1T~+xBT~}efXHB@5;9PMfa??b=9CZr?xHJe^5fX>Sx-eXH~DO2E93_ZQ+AE)qI}- zj1T-W`vx5!CvO}#>$-}JtFrZYEgDkXBz*cN z9k0bh((Sw*KR)0AKFP(D54gc^&@%sNx^fzzpk@Bkbn7aE&-jzHLP+&Q-j3xz z7-ef+1s>pozkna%7%k(|bn7aE&w`V+=u6?mH{K4%r)pgVJ?rEH9vRgh-NTt=08aubMk&pWd&}(Cbk>r)vYcPOYj}&7HHW{`(_p zu2*4v;FraPbbP=${>j9(Jojc@SCMg5l!;m?B){bCaBig!yM0{+9^jLDh4KNn^jcRw zz}N4#QR`KNPv3a`J`N$RdwDx{K6YIQ9^eztQ$FC9e%h5!)2*uvJ_|auLP-0VcsqoT zSG@{6z$g7Q!;FetF%BShpRR*7VQ?x=z ze0V$HqmO;nx(a&M$p@T@EA4!mbzNm>;_H8*MV}98-OJgr$2U6iSXW^kg>_YSKf12M zdJCM;N?upRaA6$7?fZ|kbX^E%r$ z|9Lc_w4AQRHmhD&EuJ@{ZS!|_sJUK+@qu5aAEe_0&d#=3*HvU(mD^6!QX%O=-j3Zb z?dvM=0H4SU?EGctb$aDT8~rcTs|cUIwG*{WNV<@>W9MUESAhrkX*^=(-B) zEpS3Bd0jPFbSAT|ulj~v+V`++U6sFw&ZD_L);?ly@qLmn->{~Z>v?m3D)e4D=={W( zcvi0og@0W)u|If=Wy_S-&IIWP>3?p< zXxtQ@)|9sCUDIc_j9%xu&&xjkeV~3HF7o`{@^-0*2)CoBPwE&qec~A%-G&AHSJ}Grby0GuSnm@Mc51~6OJBt1-6s2#)m_zX&fBgY?fDb+p+;EJR z@)7kWMHxT6t3$u^KHxnDNpC2htfc#45I%jIpPq=Dy2H+A6E*;)k0(pvW7(m6$j3kb zpK}kPW~_W}j>QuvAJ(0!Cg{9IpYJM%kId)0l9+Vq$!8~09{#ft8;Md>j{jJ8EI#~T zV_w5NhIy^D2c6e2-|_DuKTDq1Mu;ZvtLL>p+UB)LfzD%vcWGN*Lfg!Xw8i&|yjI)1 z_Vc;hE&FK29}rWL+XPU?Oe$E#2 z8pa2HS$fAlF3$I{^?>uAYd$`qV`BI8nKl2p=N}G0+#KMX*TgK4aaESynJ7K}d``^A&>7Px>D{u2CfjFxc{7W9X8%}BT7!veK(?=wR&3X}%DP%FK4RC4w= zmORMbZx(t7&iH+zGIh>+(Tl`>{;IXQwz)Y$`aw?Z%G8ObKHU4whkC~+H|$;4DUW$B z!o~-Fnf$^&PO*EFKjFCt)gi}BoY*ycmVSG?b#-u^zn7~+$ha!27A8s|=@8zI9IjV_L_oS?e7Cb^U>SKAn3nNEAZi!`rd=D9ShA zocoRb-?{J~@Bp7Oi!^5en%8(cetf_Kd~nu+ zTXC@~AK~lmz^6ql9gFTMvh%zozI86VB~c2gKE~Ujd@K!*JTK85&>7Gjh3`?_0XU^{?ilVgP~&m6?s(LuJ7VwCI354QKA$>2K0CcO-ErcWM|ywOrLH&KLF{)O|FNz+ z7AHtQ$oJrN$BAS9p#T2sWzO&CJVxBa_`ol7tNq8RS#<{)S7p`XiIkb&caE5xV>0d} z|H0d_;%2q(01xmfzeM?fo3mFz^B;|>I|!f7y_Y0%A@SkuSbVB=2Y7%F;taTX@DbJ> zvzYE^ncOx0aOa2j>sYStF!*#nny7>{ukm*L_<#raV2HpC$7q@V2<|)NV0W@ z!Dr#aiBw4Y4tYD2kGt-G&VcTS?!xwcu)Ih5kq;+7%mJ3IJ48WO>yCm=cSJsaOj6Kc~PU+;Cly5!;ciPdk9TQB(zVt?elSF1|Txe3w_(*Mzp_sQ6x9Ep!LQ2Y#9Qn2rzLSNQkt19|S$FGcUxr6?oGRbm0x0;F%U{gRBUGU3WZ zE~M*_css8fy>H9ZlPHpdk74cSf-Ji}s=Ov=^d*7_3E+*P@GVWym3~vW~ z?4N1Bt_!->$qDa?>|p1_>d8Yz3(Dit?UOnrWZgH=_c@Wee_nC!a}u*awDGA&UT^4P zeD`{^gcHfvVx5F_Q@NF{o3NfLZ~5x9_c(x(*G+>(1EIBU`ie=L$877S^jbPkmcLW)91aFcXz)IIrY1pjpt&a&0alLdv$~Bw5_)wd-=lOFMrWjqqWtC z9Hc2P>eu}3aF}s_rz z`BA*&#z)wF7@we;oO~1c{?pg3Kaa#**V_4PKuqed^6y@g;y;!he?H&=KJlTH54hz& zb>kzN#e@II*zs8hKI(~D$<*a`J{wUyO8GfCd@MWue82;Ia{r<854e?{b>kzd_P}Qj z`?f)vI`G;4BrW3+-*7!pL6yVDvg6MOJWM{@QvU(B+=p&_MhF9vxxbTKPbceoEo1(f zq(6_u!+#*aG7rh&W7)Cup=Yd>7s@dn;1m0j`VY9}|Ki4HsBnNY_%y0Mc=%^p)ZC|J zk8e9OS1&#)hmU24=R;~ztx%EnRfubAae_NTGZhR3B`3suuU)!!ATr z$`8xoW7*;PP&zyx@Bp9uE|d?rC7*NSGeTHkQ$7u<561soD|qnvF&nz{QaOAqJN|sY z1AHQ1(f9^#k(XTg2n%e=r$P0>f?sGk4}HJ_j}ptt;bYnH=K~(#llhwR0k_N=H$K8; zBewpL@l>ok|j-8KleF`4n6N}OK25#k#-S`M!=BteD znA$#N+LURNTMSP^z!hjIA6a!*L%$_X)1u~nBD+2q#d=tLUJf724&~!@|6%X|ALJ>) zE&ESbKEnE~QJ-gO@R>JJi+k`njPXfdBZrS=$Da>)fDcY&aKkZLw%?hQVx zCu#9l!nuDcZ-;m)OYT?c>lDl9gHL388sEUf*|K`k5YZd-$axkc=@qRP$y%S1n!wE? z+qCHG;qc+@@R8Ix|9}VhWOkr@z|E77;0lQHX*t^Yx&1$u&!=x*Ld(4x4j)7d{Wz`zpW#Pn(Usxw;qCbG0T1vgZBF@sn{&WSK7tC4@j21?x&1$`1D^|$S}COc z;Jh6_KHvd9#etL$xMg?y*jC?WeBy%B56!ikv~|#Lll13~zJ~cnq)+R9 z5B!I>}$n7*WzAupDW%U`F|_x zxzAN}*{oFWb6sNF=US-Hx=U;u8vnB+Xj?guwxv&YF!r%#4|Lz>it$8y<&O@~{;EvU zdiJ?;z3g*+{Hn3q<@dE}%8VPdMUyVlNWXgaxe(hdl*d0kPP_c4bpI>*?AAhOVtnA| znKn8ucu(oevTYqe^SI)5-bUT$O2$>mT&|_eJfYpIQ0FbZx%sP7_PLsN?EdT2G2j6{ zslzEBa7+KhtqvkwhHuz?u7pqL?!VP?rp~nU!BJ|5Eu`?V?D+Em50lUSln=ON|K;XC zf|I1~l!pJb%z}FcXj`S$c?~|xbw1{K4I;FQ*ymc@Q4$~1&N}!o9^g~nk@5kz7yH+)9VK#W%r4w8>`< z201`m2R?(Y)KaF-wDZ9}*Vrma^N(rApAUF|PxQN#54goQb>lNaIKYk9A4)K5O1Fd? zCf0$^vMaTySqHK6!9JtN`*QeLcKrE(2l&LlP5FRZayvIZ;?JwH_ypbTS_eL-U!}$W zf_0jm&lb$nBP-2`M>N~D{geM@5Pe74S2R=)#)+(m1vh&%7`A_Bl) zfKT#Aln=P2e(K6cFpH}{7ss4`S^|oMI`BE|8m;2tKie@ru`eX?G41&C0T1v=e~a<~ zx9k>fd_=RjSpPKMK38M?v)Q#;)XcNn{bvWpr}UW|K9(JSKHvd9*b>`o|1AL+fP(I+6Q{4Cr7oL9%K0_On&%o=n zl*jr98OQ7}NqkH@JRha%I&<&M-C|{H_}x@$38=bsxW>55``vRXp?ouJbGGA%~A;hw|~f z&Vtp&zz63vxZxNrt^dS@=buL1$8YfY@_H>}))(-N<+iBv@^*+4@!H3adL{Uzcc<~q zt5>WJf1oHJx{uQ9)BE%9a_jJ<=9xO{Vl89FxBm2{_P;gxaCUg5=+p<`0Y2FX(+8~1 z?6eF%q6q}H&sD-kF!_8sch71iZr*l&cNxdv!`t!W10LX$ic&t{=Ij&rhzdByXPonM z`+r;qKFf7J=KRzD9@X*=lMiRdj}Lf&PhoH7Kg^GuHW{Bd^rrLo>pEt9My>1b*8TfB z@R@mu7Ul9T>+VDU{{nn?JAQn?1AMS=2Hc!I03Xo=0^@U{^K<)uTn9dbF4Zz2#W&uL zA0O}lAB+>YWe>6IYsN?TLS}jU#OuIk*`-?CoVWQ=QxrIS>~uN$+OlI`|6u%ypOJla z*hhzbb)}JXUmf<_rG8%D`$v+!f+DZ#eRY4b?W-&9%;NM>w5=RX+rk;N#lE`8Znf>J zd+86uwSO;Z)vkK(;`Oqx?(2>8eRZ4b`{rJ}P&@1VDH<8GmK*fvRI}ID9s0hy`)l7< zhw*`5miD0Ig3pUBam%|l-@ZCBuF9g>TE-)Aq1`*mt?5j()$nhV`jz1sp0H4B-DIai)EOg@|nw0>b zfF*Nd$m+mn!LPJ}hwj*jok__ZzG41&C0T1xWwNgIdmMyyRX}*1RMtn>BMk{#4H|(oR|5wiZ zW7+ZN10LX0PEbDJmi?<6pXS?FXYiSKww5#3y>|b>zPidba{R}#=b#=foKOgV_pVD!Z54e?IbLAtN7H`;nbtJxZF6+?>9{#f( zlO+X34j;>oKOgV_pX4~o2iyuTxbbPeeRT$()6dfi9`nx*j8AN!BtE7ce?H&=KJn3% z54crUx$+TSpmOo8q4w1oe72pdMLqW2@5K0|HkHH2vg6MOJiw=T1my#6>Gxdu2%Gi<@;n zJ0D~mOWVugW7*;PC{_FFzyo}uV<;bRE4}Z=r}_5P8GJUoKudYVH|(p6?JS3nWyhZn zcz{oq)nULbb*~$r=G#|i@L7C;Rx#&oyZ>NcU3?EYd@MVZkJr9B@BklVx4;d@Xq$Ck zox$hi3$>`JuknrLw&uPD&JH;fy!O?hUI{*#GiiMD>J|0{i3$X|ufgln`}6OT>*jjR z^NBy4p+!x7(4W54{mcd6ffxz~iG~T{ColoC}Q?-nF ze?sRsmvan0yd6J2-~m4IIg}5$IeP^@q6q}XXPonM`+qFofBMEx(@NZV-TywV`yJrJ z+wtQA9^jL`hVlV7r$xr6`S#Tj|5-3y%bEKRoZno|G5GLy{P=(e_+Z}*xH)?TKB5VP zhTT_3_^h3w=*!4Bz(|r5t2%p4Etzh!uN6p$-7uiLQzP9Yx z*FPA4;%8)E9rn>-UtNA5x~~rV?UK9Kbzj|ZQ5{&lukLZ%zPeO5jnlEIv@QRPw$ZC; zoBe{`uP*t`4Qpz7PWi!?4b#ely0sY#=dPE1b<^%1rrkDn5B=V1S?%&?W*YnIR*gB+ z+*dbk6aDv}>Azpci*TQybI16=FN;5?Vyq@!$%Q=Sb;O+SF z0T1wrPoR9j&Dkr;=Rl+(oxfh^G3P%m!Nj|KKApSwXr+++hqvR$2Ry(hpJD#P{Kz@r zjE|@+wE52{=ZE*}xDI@l_h^-n`0#f8_<#raM9-ppz|A>ijE|^Xu<<$3`QiOKt^=Q$ z=V@^+-`210)cD7UZ@e8pKHvd9#mgxlaC4eve1!FZ6lq{|st$Yx&DC-t%|E;yKR)0A zKA9}#18yFCg!KVi_e#m@$$Ty*(Qlp0=4z$4albm}Hd z)PIE2MhfE-Od1%Ss)PTWe!docHyl2^9X~$c0X~_NDIak2;3KRL7@uI$pk92o)$6iv zhQo)qre2eGQ~$^YlNvwMiFg_9lLLKH)f zjE@9?PzOG%Gg>7i|KaWU@c|F;0S|D)FU}3q*!G>2FQIX|cqeURH?g>VKW(w^q%`>L z4{OPHbKv7(L-OtNJjsGq;FG0ptiT_qhy%mmM@^-xZa)SN~@Bp96Zzvyd za}E~cBPu(1J`J_+gz)KnPk#a{ zHa@|`VIBCqp+AQ&q`U-g$Bz$qfKP53MT>HCiqtKD-@2KHvd9*-4ZSxOwoAq7Q=A znCif1_iMFONPKuZetf_Kd?F`NKH%oTM_3=wyq@z@MULyhXSx0yzL4^Iyd6J2-~m3d z3n(9ObB-LV%L?lQmUop>SCYB!#8{usoTueN($~BlKR)0AKINH|54gGW5iVOa?7mck z&!FqHLP&ggJAQn?1AHnSln=Oh@evgWGV4mx{b$*AT8`WA=KSt5jTjJ>1eT+JTy>m@SwrCN6AXM5ex2|U0jcOm5iZeIQ)D&T_U4EWyELBB20`Gizo z;O+2df^%Ogcz{pr1j+~8_z@vLBfg0WxL`R0zBhH?b6QR-g~W%qcD5S8?|^y>r>v2A0O}lA9Ei7^CK@lqWUdZ&VcVt9r!H1 zQ7eSBZ;Q9%#|J#X2O|J(xgWUc1M%lYB&Pgw%A^ih3DQzNvaVY(^ufvVwSwtC{HQ4k zo)=NtOOie??I?!!@X`m^F9SZM>uG%R8aeFS8X_pLW#)Ij*=nGY-757E+1GRQ^hq7# zrcXShqxFwQK-S_-=vghW*+=W^tr1dFphd&dX`T#t@Cz+#sz|HxEOg@4FPG){b zHlNOs7ipD{>OZ_4KR)0AKB+q>A8_;JBPie)pK;F5?fcHo{tQHN) ze|S57e82;IBDYXJ;O5CEm_Cq@=BWdpOE1ylA?Y{XjvpWJ0H4gQln=Oh@(HF7B&2!j zz-Orboa>PMhqvR$2Ry(h&8`~&H!nWJ1QR@L{-JyVsf0T4dE-(o8d80Mx8uhLJirG$ zzzxS}G5-t;rVk{fdFsGt?qymur2GzV$BPfSt_ar=;ku&8cjYX|-7 zTtyj|ZlBaKldRg0m^pp+4E(z0)_B(sha51p=6Bftu=={9KijS=Dm_5sbn&7%2ju1m5|oG zyd5vUB-a&z2l$k4W9KhBubo53_y|T#`*jh)HV4V)(|PbhtrF6_#@q4Z10LWLzl+5c z4?kjj1XopdKEaYlb>Q>fLM<24x|g@(#|J#XC%=&L0XGl-5nNT-`2>=MlJ9py;#=pX zcWarD{D-&W#|J#XCz_{xz|Dh?;Ht{bCs^{R4*oMVuVq5gg}fa^QQ}uN#qAH;deCFPxn8KD-@2KHvd9@sBAVaP#0JMIQu99@T-* z%lB$gZoh%^yURF6-H*59#|J#XC;bNH18&YfvG^uM9|TJt)q&4h_i6Ev^Z{?jj}Lf& zPhOOa<45oj6$mo-oyfc{!dRcqd_XIOqz`yIetf_K zd@4^-KH%oXM^qrl+;<|K&!FFH(U7j2^}Y_EO8;9>Gv&f**MBj?bu`6u9Y5fbD9)-i{w1@Bkl-0Jz~8E%=D)w_rH~^n$c?;Ir9ctx^u>zL~ro zKR(!x0X~sG()h-Y1phPk1q~4ta8$qXpD6mX+3lxERf~t@KfE13KHvd9nLf$~+~VJ{=MUKYbAV_D;ppizr?z)B-gPTRe7oj0 zE&37shaWXXK{$_;tcWKXUd8e570#5lF?=LBG9syB2>h96r1qKR)0AKG9ED zd}Ds($p;Sa{DXBIv-w9tnx_tYF1&Bx-UI%$Bz$qfDd?p8;;SMe1hpW32B}>@Ok4-tr8L+-i{X^a$OOwBf@n>m0js| zMY!H5^VP~}?{Oa>`MRRvBLKdiZS{3UPui|4%Kn|k>0E`jkuPbRe}cBSt|)axZPyij zcY=OhQO7Ck?RiCGf3ur*!T0p*ic05ef8OS2#`Qz|^NPm4)uLVSOzqDr!uY^13(wGT z@xnm!uFdznA~LQ@PnT9Pb-ULH1p9aBLf#JNR#neY1`qH_eZ)CglTe&LN}z6BktNcK>Ol>xv9M-7~akNb4%zjvpWJ0H4bLF+Pl&2OmMz zZs&8N^TYdfTnGPA&(v}u@!{?G@c|F;iM&twfSYs3nEwc>b~_(KygLold|U@U+t1Q6 zA?bGBjvpWJ0H1U(*Lx;4`UPD}+=x=k56M0T1xWtfqXx&7F_L z>+*zELLK-#JX?#0R9E8d`0)V`@QFQ3`GA`TA1V4ESn{Y2d^Vh;WkTB5z}xZT10LX0 zDN#P)=D|mbJ_wdPsso?#87&pk`iHmU#|J#Xr?`aj0XGjm!uo*b#hsrja$E;K3x1_V zL#iwBcKrB&2lx~gQ9j`29672F4ieS}tZpGH3b^jnfzR5rw0KDCQ{IjrAMgO5(r1(p zxN!qw{7Cr(y)I8!6mZ?C1E0iiv`R?vjkn{+2Ry(hxt8()H*P>|d_)BT^Pga;1EVK( z;4|-REf-RLl(*x@2Ry*1@HyoJZeDyu1p?y}EOk&XKC92sG9k@Byd6J2-~m3dFDM^y zOOLhh3u5ujiLK`2U^xTc4D}yb*AR3 zz^D8Hi*L-2_z@vLWBw5paKUm0d~f8(x6WlfS}LUc8*hg{6RP$FF&^Mke2MY_H-1ET zKB5AS@(EU1pna+XpVQCNG9l?V-i{w1@Bp9alavqq$b(P7>+&SXgF4jbI=7vx6++^} z+wtQA9^iw00O01uM^wKB%Ng*!se}J4nX8pT%J1-Y{P=(e_+SLUEq#caK4`w@6&d>A zwDYx+nZM>o&3ax@vM5I%Sa$sN0rty)Py7`c-@wV)V&7J?J+FxDx%q4BsahcUNd;|rY%>0h@_;$f*S|+6VhqvR$2Ry(h`8MSPZk~Ju6L5@= zgfveb{AcAvEfrG!jkn{+2Ry(h^);J+m>+ra38oJuqjuEhi;tA+@&c)ZI`B~^Yn71n8*j&t z4|sqNcz_#@(L!H0+w+PHeZBn@trU{~@OHfTkn4(Y9TBc8D(^-<+e!s5Q7KablE>ra9 zfvu}tjoRBMT%wWw^3N-3T{cX6`!)Ud>v-XMbBquCGCqKgi`Uy} zUFkqU)o$B2>}8_Hf0vtgCF823uheoOt*dxD{ApK}H)1@%C%crM&*0`9EXGGrwcGf# z1lt@WpHJtuS81h?)>XV6KR)0AKKX&vf4uyN@ex$*c0R$9M|I${<2v}yX4hzikofR+{P=(e_*6Ege89~)WHi2sUzbPoM$S(aIj#er#n))1kofR+ z{P=(e_@pB&zA-;?jvV77tPfaTFPJniI#mZgCts_@Lt0nycKrB&2l$jWrF_86gO9L2 zV0?l}gL?59I8UpD#D}-z#|J#XC;2VP2i!dP2fSWrX@$2#!pJ39UUVO%0r=>#T!`t!W10LX0+>i1Bx5C;(ALa8#bp8>&n_%NU zkHFB^UtXu>Og{XmDdxUmSc{8E8?;JDe0V#4e82;I z$}EozZXSGu^&90QK_1j2fAHB2S|+5rEN{n;4|sqNcz_#@(K7!L)^C)L1bI*oKJ#;0 z+}xLnZ!EV(eBd~!dg@y)AOsQV2Tln7M6d3}0+{#|Zemeg#fopGsF3dw(X zJAQn?1ANNcQ9j`295IuRph95!T1x&v=Dsb$r*qrOv}j2F!`t!W10LX0`3~g+Zk~Ju z6$0ZUC4V5D&yvfuR7iYyJAQn?1AMYaQa<43$wyEjFg_9lg8cZ_dD`V#Dx~|y@OJ$8 zfCuz8Lh>KpjvpWJ03YxGxBSQU`~jPPn(lc7#{9GR zw_48R!;hN$=Mh+TtlR{~p0q^gk$pkf2ZVh=xgXGdLD(;p9rS8F?>9V5a2j*j7xa{E zUr_ll8mFV9X&c*%w#6N3Tl!>&x5<8>{NAmoptbGJisTi4dnxF zk=bs11Q%60Rmx|UFkkD9^8KgtJ^eWc9{#fdGo0T{4j;>oKOgV_pVYpL591cQ#Ep+= zbOWCbYnX+9sso=(7igtV-2G=G*3ZI7NqkH@{(Qg#eDZ@SA8;#AaN{GmsM5b9^`AMy zRIE4FfzQypw2C=yh-lQ}Cd_c*2XgpWcKrE(2lzyXQa=Bmy|aOHqPYM6f}jzf1vRKu zRHRX>@^DH}t0$ZiR8Rpm^$AWm%;|B5cZWv(RjEad)@P}W)TdgMXnmGyus)zq?uGa3>j`pBVLJj!5br*?xj6Y{{KB zlDLQcuyt*HMs^09;(@Y($ylJ)T4=5jvSAE@CYn_z+s|p7PjQkOK0?kq_;4O3p92{ma0^}K%14EN z!1;9Pd}LgO8u017mn1#>gBhGpXrdZELe4t)a30{3J&5z++@dY6d{p=coKK6+N5)mC z0iPXzMdBa2+fOsbpTpGf5pw+bfCu;##&SNKTjUg1KC;7))j!~T&eQqGxC%Ak^PJAd z!+)E_`IHV(#K)B5&j&ofCo`0fKirOzSG(~UCA}Z#)Rwu;t?jMtX9j-NHRGddzhSz* zFz2lMNctmp`|03(5{IhcBjhkXUU|dd0Y0fQj1Ra)r?~Nvf9}h{N6Ir`s;U8>ZSN-~ z^S-vn-==Xs`AyXD5pw+bfCu;#hA}?i7GLVhN7_Gd@{#cjYR2b@`$^g(zH@oiQ0QR$m8a_gfKOgV_pV;o459b!X*o}|uZjV_1 zncSQl#xl70WlI!|`m;X$wA5DdM``}Zl#bag(>i9I-O_zzTSs$u)#o$(gGU}DNe};e zJATGYR1F^?hw(v!o%sjg0Y0S$#s}Qer@Hb{5kCkBsRn#beuyMJ;s-l$1tv~V#K)B5 z&j&ofCpM1p0k`6Lu6(5ZgCl02*)nVtcdi2&Q4RR?f0z_J>}M$F6B??9kC0>Kv*55Y z`{6vmCv+I&18(_a-1sy|k3R;V(SavFy0&V-=iY}&)FXb4$3O}vs^KH#SovsW?{fza z@X0rE`{CS@=eqG3E$zQGwX}6NYi;uq2$-Pbt-7oMpQ(?KsE2>B6K`K>nj$`?9DhFG z0Y2#wj1Rb_yWIF3h})@Zt@5DGkU@5^@=eD%reDY-t_$>Z4iCX3*@@@03iTrr0 z92$w`_EW|O&vSrJD8l+TF9~?AHQ0X8UT3f7?`og>qR)gh#uk%;B`#J?YbyON_*msw zBjwKd4|sr2>^Q~;+?;YvK9Ugx{#;(&J$Fp`%=vUNiCg?$=e4Ui1|O>&KR)0AKH1|L zA8>QF$>bv$LEwC_oZ>uv702rBXU^iElVmUPvC8q|10LX$+>7x6H>bi(K9Vz3&gTf{ zd8W^!{=Yv~F z)LfsdzD1SP03WLyKR)0AK9OmR54gq8u>05GBfBrjgpRpqw6?d*4jzH40iPRgB_-2; zvuaJ#u#On&ug1R?a+rVZWJ@{D)SCbv;1fEL@d3BY9CtpWB>e+6E3H#L2i-=prv2FY zoWm6u|Bf0yLXMqJng7OlfKPlo#s}P-Twy;Ak`XwS`^u@@m&EYj-o1?^&HP^Hm8&^M z|7MkAy%U^#zyo}eCow*-BWJ5jK9csMa$h;+e6GBmluY|^Ub&iM@UhDA;{zVxgMA0U z&DkoGkEDOCa$h;+d`90v!e)HOdF5)3!N)4cj}Lf&4_X0kI7Vsmk@T-s?klI9&s%qp zv>Cs~6{{`5$12B*58amp`;cH?lH~quUlQzBk~p=d`;v?vDS7$geMMjM(A9JHeM#c1 zpN{>Mm8m2vqd#F~;%&AsNpVzV`;sKCm`mQAm?5k0dSt!qOVaRu8%ZuYk!Z0?$st3| zCRA;!@5-3_k~B=xKW{k6_`9D<>HR_d!XnoX>@pf=dO_VpN6}?p68UvMHm}0jgOn`p zswyvt>Q!qzkCe>)wyf5oX;}9wWj|E1FNu)j?-zmx_{2|Ue84Sqts5Unr%=bi=e-Ix zCQ;9)XHk-5&A6+b5029Js^KH#`11h|@F}$L{)O97@d7tKl1`!E(-p*WSlt@%S#v%q zdGNu$B*~l_K0=N^AMgO5{3(nNxFwHv<0I)53O<9DhFG0Y0f_KK^h!O8wZ4 zk8D)W_S}9zAE5?(hF?sQ9{wBlB}rVRhL4cr&j&ofCv!UE18(stu6(2iAYngJ4;x#I zPCcJF2Q463bKTG0zaeiYbdef9LXJNl@Bp9E8H^9O6|Z;YBRv3F_yqJ3YQX1RosUQV zwhg~Ck{2uDW6JU810LX$n9cZrTlQ2}K9Z|`w*D=kk5B_XSN@0;JnUyM=TlsuhL4cr z&j&ofCw3;|18(_a-S~`F;2#XDtLIi|{9w-LOGv@IukHQY4&Xx+@iFE2^8pX=iKiGJ zaEl)A%13(qu|2n98BMDHwFdU{)+Hos#$D}vhVlkxpH{<1$g%P%e{Kalz$bbq;{$G) zscw9v(;l^YeQw3DpG$sBN*;U=(JK934Id%L%10}EZUsER2XSO@OT^vy1buF$dTS}K zQ3Lzgdm%}C_}6%DCGmtBK0=N^AMgMl=mFefoo;;kUS79hKd&t$VRPNw-oGKQJN394 zK0*%T!~FO1yl$+wfKTR^tbYS1XUW(7#>x&rD%TfOuKUq7n_b4wC0WycoL8>q80&sk zIo3PDnb!aw;1fTG@c}nytH4Kg0>sxB>Mn1X^66RBPNJs$IImpIG5A>J`0)V`@X1`o z_<)aM!M|OhB`JCiDZ}rDD;Ipukq)$TZh zgw1tXFAW6yJN!bc9KU`OJisTkknsUGXKOeg*>2OyXIL=jT|J+kwX;aPm-txa`0)V` z@CjeT_<)-`pRuxTp^Z;4=e-7enp#NmbL_|IymB?iupg@&KR)0AK9L_WKH%nT6|?+?=}Nd}PB$Ha@|e_Zsk7b0#TS zo|AN5yNYAjk5!HzAMgO5{2jc1<96h16XzrCAFz3q^Q|GO2WO=zggw@@c|F; zNnXnMfSXfuoR74Bz~{ZeTmz#~HQ=-GEE4^+cltN096vtb0Y0&d7$0zR=OZ09LSA<; z*PvE>R-H}a|Lq+5pbS@8^Ur zb>g?X@lo9^ezci}T^!oT_8~K~&m* zW6xtMa1RvkCur~)at_J%()eSQ1NKzc&UIPv0H5Nmj1RbZ@R9c47#{`hK`r>q?j-SE z@~^FO{P=(e_#lo9Zti^K_j_b~f<+Ekn`+=+FY6-NUh)sDa{Ty!2l#*oxZxNj>)+(x z$Hw>siyYL9&w%+P+)MEts~kT*SZ@KJ&|KEPfrqo?>we>89XOTo1C{H3bj{|G&woG) zy<|UDIevV=1AK~?F+Skt#YfgbP#Hf^&8Mg76jJD=@y9C1j}Lf&Pw6_w2i&~)$T|p| zj{*ll?YcR&pPoghl2R}6vC8q|10LXmb!Bk#;4?~gKQzuqfrC&3K5I@R(Ow#VtaAML zfCu=12e{!FB_DrAjg*Y=a6Sqggc|T^m_Z7?H2<;6@!~`CPLOAUypzZ{mUn`Dl+r#m z%{!5P@sY?o!G1J3Ti!|H9@bA6{*RT(TX?_y2rIE4O=@;!c_;sTwvD{-!E*A@wZB>~ zc_)wU)<#x5sP9KpyoqeH@8w2*$wSxv!pu8)>_=yl6~|V-9}V;ayG*t-y}%B$UG{u1 z=C}8~{b;COwZ^MS+>Gm4twrodlX+r`*Hy%ggd7o*qB?iRCBOrGvI&0Q^8329(2b9L zT#xsg?cgt8s-5>zK65^}nncZh)6NG+;V0Gb5pw+bfCu;#Ze)DGEpeF}AIU*Yhr#)D z$#X%?8t}Q{8j>{E%|V38+lY&eJgA0`kmJt>Jiw=PKH~#!h0ERe$j*9AJ}uC)d|3lN z2VF~|9&z!3yrKD*)$kE={P})fKU8(#s}Oo2fOl-4ZCUwYu_p9>a|k{K7b_isZvpTdo5_y{>xKIQw-fCu=5e$M!STj?-2K7DUL8iUX7KP4rP z_zogk;cFD}G38kKl*iw|1AGui2DilFZhZRQel!N37j!;mzhk!_>_-!NL=hiTjz1sp z03U9~8n_k4yYcCJ`_UMDI&UIT5B~uB(Zp7&;UnZQK3;i`SZ@KJ^x3R`11D$6*Zun3 zel&E=CN(}q(!I29Zk1!TROk8vcz{p#e#Qsfy!gmYfOz~`L1L=fby>=1&Ic({GVRBC zvQ<~(op$2H({!xbcL(OdOxT6YcbvC8q| z10LX$eu(h_H>X6-NBY4c&gTf{d8U-t($ zr%dn}O7$z*ky4U(+_G!@3-6Kk$YsA3mJEI8bBjGVKleIDzbWKc=T#bCUR-b(_<#ra;64Vo^l$8ZCUmrQ zbRvl2)d-)z2d$4&_vg zBNeGEANlsDk0Wc}T&R!t`Ss#=ytHjQd1>1dh?ZYQ8VSu@j~zbpXhSN2i)Qfu6!!epxc-De7f%Pktv@!<9|ug<~oJF-^5Y; zbv5s`7jpdhfCuB_#5}w18t!4fwo!7s-0?IUDx#FExCG9DhFG0Y0Ut86R*9jdZi0zL$?|_yJisUYTgC_6lA~Pt zjFbgr>E9-FwlsIONV^F&;IsEVq~PHn%mtr!)!2`av-PYw9Ib`ME<_y?!)28KUX!$-*R=K~(#lm0W~18$km-24OSZKACG8?ztX zO_(F)D%60_1^1G$na^VP4`y&ak(br*5pw+bfCu=bRxv){mfpeDepL7eoKK6+N5)mC z0iWG}MY10D)6Ds#f3Jp*kmJt>JisUWCvHF7juKnD@{t{WT<8Hb#XqRwBjot=0T1vgzR381TV{|OpHZV^m(HiQ%x!LMZ*4y_@GGzwA60n`#{8%A zK9cm{)4}a0^r{*@LJs5Ol`jq+;FEZh@d3B!FgHF?=>WEakCbP?R8<2$JKj&y9(<;8 zKE)^1@DXzS`G5!bWOIxUxMg;8DnXHYZyIqLyZ@ZfV2=acx08a_gfKOgV_pX3X?f8%zP9q-CV z+COmek?{;_#%J3HNy&rH4>+I5-_`IDa{T##2lx~Uj1RaKB5r*8-t)|cfAGYEBIWF^UQ7Y5}1&~u&XX>U_X!Oe78J#2X*xH`|gg;s+m|T)PT>)kC3cKUibI8=)!6>e1sf-KHvd9 z;Xg1w;1=84jn7zV|BdrGuH(FxV0d`my~_N=IsG3cagYA(Sk5QBsha*x$g%QSpy%Dw zfBEsq9|aHaL7pwRMfP>$BmbTd;a?xw+SVO}5wjnq@tu1gB}otaIfe5{zo*82gdD~P z>*q|2crF4wz=t1oCX+?=9K zK9Uhq&gTf{d8-T2!-$v4=-t2tN;i`*2t;W9=a_oGZ{u_9JPrQfm0XIRE{RaDKko2!rz6Vyde?8}e z+ep@oUpuc{%`y5ns~qc{;N$}y;1ha;@c}nyt4uzU{0hgS53F)N2i-y9{SZHJUb&iM*pF3?A0O}lAG8A8aE#KlA4&gO<$GY2 z^Lh6UlJ2GXk5!HrAG)ss_EEsT3h^;)Uj^*9Q24~YpVJ-pIQMg!*x50E9`IFM8nyNt zH7fYN3fRx-x3+y15-V6goz1bb_#z)yU*+XzY+r>;sIq+(F1cbZd1c^FN%FzR*2}&M z3qGGsuHSVE(LSChbW-w&i%;TB%}**ktKvOxLXN**2p-^*{43)FZn4YU z_((d1`Ze--ugrrG4w&ls^sG67WX*ol+M5X-=0~gHBjkv4(+hO^h2Q}`(dCQ}xMeSQ z<0EZ8;M3($w!~o#_%xhEN@iT#&IkJ{L>tub5pw+bfCu=*Rx&=|mTGn5Bk2_C6uA9h znlHfxRcgRzVVp!g>}MbsTRc(?A0fw|4|sr2`XR;#+=|z@@sV^21)uYvW%;rOd{+H{ zB+c~%yZvBah45H4e1sf-KHvd9@y8e+aEsmQ#^*q3K!)Eg55-cm27HE}LbBf?E^g-o z2P|>08a_gfoe#S}u`UZ9;1j!#@d3BeS#EqrOLuT=UZuc2P@H!{{kNX(Q%S+2e?#75 z;Se=^gd8iM@^y3Y0H4%986R*9-{i(eKCglCQQ#ibf=})=k~G&X?Dm7ahWP7mD)Fy{ z94jAm55j)H1AIy!^8St6QR-)IeB|@$7#{`hK`rZ((YXn(;@-VSK!vn**Yrto~EE4zd-wx;PEUi^zKSGW_AH*ZUC-OY&-@Md@xcEp( z51Y+Tz0O|E-__QJK$mRd64k|H>YHik7N(W z;|Fz@S4a8uOh1AoP5;1o$12B{59a|s>EALw;O1-<_{cuE&-qMqp11mA_4d=V zOj%;Y2KA#gq?InP`DaSix1O(F#|{#Jd9DyaecvC8q|10LX$e1Y)+ zw^)bWf8%_jlEaV2yz2VP+cL(VMMsg6hyV5iuKe)$jj~GC=S(@we{-^>9BE!1cz{p- zWyS~GB6qm+k#yhm_o8&pZEg#m^{DCdQh=H_|UvMYn`c z-Q4ntmy#h*koA&Rx7&cHa<}~SCpoQgKXT2jI})mtAy51U%evZbx!>e&dHt%2-;(^T&lq-tH(;4>sb!XD$#UYt+t zmx}n9au^@#JgxjZb0`xd@=m}5e6oLHe84UI{HrehL4)-8W7{w2%tSZ8Y>A=<{oCxl zNXf%~_Teo|Jg$b1kYlx7KIl_Jz8!AZH4|sqN<{{u#Smw${di)W5>T5qIgU^8Pk)+x0*vFs!IiK|F zYWN5_Rz6&ag%5au5556z`DfkujFIM3uX!g1pXvLOf`|R=$rTgNso^8!SoxIarDDDg zKIuQR{tcW`zqRv0+(@>AW9xo6dyrCX+=$NkfBXE-q+sT|+3kl1KeXtd74b3USjQis z56n-&1AGuy0k=}#m5=m>sgC_L0yqfj`Sc9gg@n!ZI6EJNnX~V!;UnbO`8d}tzyo|h z5Zt0GUHKe<_Tu}Mmi4-y2DP7_*}IaGNBjT|YvDaLe1sftJ~Zx%I4k0=`6d>3MLahA zK~0}$9v%F7X2e~8XN$XrR0J#K`1K(1`m`sx3vii=Y| zJp&{wH=mebsNLW5(SE4SqX# zfDgU^Zs~=te54mH>NOvX@>%@;SGla2FJb3{b&J>@YWN5_-h8NE2tN>hVfIMo7s6i* zPps*B{OAVU5LK4t>+vtx{KDj;%+E;-ynOBF`gJBt?6~-a-7k!Nr!v2A`mTS=mD1<0 zH@|TC$ft4*&*^^QyzR)4rJI(m$1nf*H@SxXS693q5Bp$@l>zc zbz76HN52Uxja;i{z9!_@?6S=701xm9{g?3pw|uu7AL(whZr6J$pPn__kixq9&C}KJ z5pryN%GTq-1ANfWfLk%;#;5PC_ZoZ}29vZ$ydCSkiBr_@5pw+bfCu^eg|c8A*H0d*Qcd z&sD=m$g$fG^bWrrJirH^gInqXS3c4S6ZPu1Q$9Vzw;%-%K8PD7r>Nm0`uf{Vc^S3_RkS=>~`r~2LliAiGIuY zfLrk{H$Jk~WXq!sxCvFG(s(ZA)3b0Y$@X{WgZ&S)AvJu29DhFG0X~`kF+SjyIKhpN z>?*&FPgkXVr2F@3z-QGolHSCf&p_UY>?b{H?8lVj&j&ofC)|(q``}hM(T$IEnv69M zy~SPcmHxE`e1@Muq9J!a*#9uSRt+B^$Da>)fKRGF;{$H7xEmkoG;}MU^C~6b{=FLT z={}KU2fFjwls6*ttr|W;jz1sp03Y~K;8uFjjgS2Pht@oFcfD8o*BbE2okZdT-1!XU z&B}kJhL4bA<5L#b0}t?lcEBzFFIPU&4nn==0UG|n5Pg5wjokU{z!ekuObs6)hw<@> zOJKeMKJmR+{{~LZlE)>a6VdB650K7Tj`{d-QZVhudF5)3X}n=;{Zv*t@ZG5dr+*C| z;8SQ|e8A1wD)5o@;Q0P53N|oMn+Hhw^fXN%(M@4L&MQ}Q3_eyletf_Ke8T%PKH%nT z75K<{aGcLH=Xt9?t^uD#O{8S{2i3Qzk{aM+mE*?;JisSAjN1>lBd1L8k@es>pCg>- zt^T+MeAXO6!oAeLS>^cg0T1xWG%-Hl=F}VKBb`Uf`JCiDZ}rDD;L|XXM0<&kRgNDY z@Bp9CmW&U$h5uyt-#8!H?LX>veC&&$og;fy1$XZr~4REFyn8|D_3(2`?1RL;{zVx zgI0hWj#0vXWc{~#-QURIlbcN9=K2q=SZxVDRykgL=(;S{VX-b7KZmW$V!gJoe@)kA zr2~28>#{G|)@4&8Sw9`$mX)ysSy_s)66>=0F_o>$o^{ZBxx4;#v%VghUoZO`O)F+| z(~A1K>~&q_N2OErcF>=v&Hat0WggE>i&VZY3;n<@Qxln9*m*TA^|swFWb3l>?*+0v zXH!?}epIj8umlO4^Iog9==)-Dg(Sb->~$5-*$6pyzt9;s0uS)Xj%9qnt+dvSkL=sN zZR>t@$ET;el@v_B!_H?5&L=Z)b0vI)9DhFG0Y2d)IUjCE$=6)@$hw8rb)~vmm!ufX2a7+c#(snxe?H&=KBXNQA8<=N?8-;hEwu8ft94m}&yY5fHP^H4_Je%a z{3MP7F0BkLAg`J9I_POfZJns;LGnLU@JJ;tBGypf@A)bJ5< z{P}rjvF7@T}kcFdDheZUy`x*-wtTWc(<-|ORSoQCz&w)n;Ik{|lYB)DA0fw|4|sqN<{{t~ z`kxyg>FJRDd6+udU(c|g>F1Dw$M}Q1hSXbX_y{>xJ_` z)@xpa!DmS)$(nHqyMKW9I%eKf!$-(re7y1+Fkc6s^d78#11D$6<3?j;9XPhG25AZ?U7~Gt#0w37`59f1| z^Ssp`s~>-QX3rvFGrm)Oiz=xBK2|w?e82;IAS24T75;1Y-!T5j_HXt2yq{q|%Vv|X zhyON_D<<-#8vjkmvHI80zGm#BLf4hBj)Zlk(1mPW3F}SqVYOUW8Y%t$wDNVO9^1N7 z^n0wIE`FE$JCj+N*qQ&GKkt`0pt5zPpFR1H-0K6EuD5li1!p~xTW}U#H(Esg8acOY zU1`DI%X16vy`tjh{h%M%WoCP(7u+H7jXrSM7kiv+w`qy%X?3-3LG`N5TS(I8dc3ta z)3g~}A<>=GtXl{u9jJzn zkmJt>JisRwVtl|Y{HZG+*|3Dwe(Gvn$>4L=WhCy=zhPaeG*%5CA;+H&cz{phD8>ie zvcGoaBO8{m@;Oh=ZcwWR_OtEfB8z1Sgk=1_qD^6tHgc|TU zBSo@iKEHkZIUaoOSHnlh@#g~`;FCUx@d3Bk7p{C%_-~w#tea2+K7+0x1&?*}X`D~? zW;J|-9DhFG0Y2d{;{$Hlzq#^J;lFV{vTi~R_&jn2NqYEiCvZOD>(%fPa{T##2lzxb zV|>6ZRCMK|Zu}W0>n7BI&&gMktjGN4B+e&wp&C9yjz1sp0H4qyj1RbFe&xnzoV5QY z-V0=8j`ORQDHtDB?>#g8>;69>Sr7kh7H?wdSw(zIIgAhHSI+nWcz{oKQ^p6}LQlBy zIZ(QPbMOfeM5qCudw)Vo=DL#IKRBH8Nvu@EN64}AaoJy-^8laZbjAnV3aefDNcV3} zKC<3{roZo-?$58(ex_bU(jNXB^14&^sNo~z`11h|@QLis_`r^e{oLZC2de7dhRJ#d zHR1E+RixlyKSyx;N#CM|kC5Zf2Ry(hvoGTVZpA0v>}Ra(vXbVsA6f69CVcL^nj}5^ zYpg59(rWk!IsSaW1AK}n@bQP+Q9k3wr|;#Z8vemi*O0gepB*s%T%?ANki+=!)0gdc z0v_O#{66CYZt)M@`1HNJRD;i_*N~FwSK0jox`=Rqw`Y%78=6B81n*bi*lRupC0k`Z+u6(5D zr;hic@~f69SpTMUetOUiq~tL_oy?n9yh9BiAxGE`V?zar_i}>=_#n>-+#-K><)dJJ zT3_$wHtgr!8%Wf{zdn}p$zP?0kC0>K!-ZJ*fCu>C8{ihb*Nso#dv3+xbLEXBZtf>& z@89s;O8ibWe1se;pYr%yjOPP_Pi$A#zk!ppTsh^QI?B z*yJPArghgb^M);QtapMlehnVrlbyo&fSXgI$w$(I<9Xe6_uLBQ)3fA!k~GI3=as8D z1|O>&KR)0AKJk+{9}hb+`AB+joX@o2SF7HBde&Y*qL#dk;B72F1Nd0w`0)V`@QED9 z_<);Jg2_kHgX4S<4tActisKsaY5G4BHsd>0G^L8Kf{#^>A0O}lpU^bM2i%;ZO+Jzy z9OrYA^Ssp`*MQHWACf{Z*^gC@A0O}lpY-vJ54h#uu={VE&p6oy29@)l|83P@+55AN z@n_9Nq-653YE9El;Wtq795w!%ki+~p+@DVW06f4aA7^~PE&q%=A4&H>W3!%?*})@l z>g{LFjtfZGe6H2b=QOUs&~0k?2s!?Izyo|Tr!YR?2CgX4zsasJu>AxTxNmxVRJHxg zc~0kJ#z%3*YD;tcvB)v@EfmMzlAMgMl@BlX)qcr(Q z`qzw)0{5*Je4e<3M7QZ3K2|wid{*lp;5k-2*IN2N_FOBTcTHbc8gglW(9yIz?s;R} ze=gRvX^H09EuB+3X17f2?3h1Ke4)bMj9UB2uk)2Z*ZQ*Uxz^O_te-B;U}d72m4!1{ z8CkR4JM_Kuk@=q(@26i^v)9bIId@s> zeyJD#K+aFr-bFI)1?6UA3rWfcT|IVMbvvOz8O-jG!Kx6YN{b7|vcYvHn+PX%i z>#|g@+8vkXqMO4mt=6Jx7{-fhj?SvsFIC9#_Y1)Td~hFwTd3g1M}EIl%T8#r53KN8 zM?Ig#lTx|(mhOD;Tx2L;ZbY9i5NM;Dpb?FSFW}lXN06v!~Vz^hgCCnjo>-QtdpLavF2v z4|7?M{th#b=#t=^=zHIU9CuEX5A_q_7s5|WPGNo`{KrVY_oh#;nV&dv+=10%;omR! z6Mt{>6O%VHzbD_p%FG?Syn>bR6GOlK+54=2^KZzIC0DF0F1UKV`HA1Q9l5gqjguy5 zjo0T!-Z7=jPyDv+5dHJR@VJ2I#lSA1AJ}E#I;Iy?%&gdUV=MQd`)kyzA42u2HJ+7A zZm|wOZ@Z*6$K-s9&kEeXb+}M#zZv{R9 zn&wj#@hPhu>x{w42Ry(hnqqvwEw$2>kF5K_`3zGK;H?3lKXm89gL;RLRgNDY@Bp8} z`HT;^MP72_BfmcYUtd%Z;H?3l!58G><~-QP2m*Wr`?1RL;{zVx6FHOd0k_11u6!_U zuezn258SM(>x&9C;4|&wT(Xz=SmpTf0T1vArFs9x?I`@QD<8?|yN3QvL4a31pT(0d z$rVh$UEB#Oe}ny4<@oUd5AX@!$@qX<_&GN|eJ@Ty{e#8tFU%!9=D%==Qx66A-)Njd z$kB8^r~Jq1Cx8n$rRFnE;FtV|8>cbS{oM5C_A^`ByUQC^K>=q zjkhnpLJ=oZjyor*BRyl$Xy*%UD&5O~`Ar1yU86FRVBErA2^XaQ`a~ewvA9qqNV~!Jcts!n6eqK#K zC**kaa~y!liE{xb@BzQVL#~{pH+ZPmxH;uC=EhTVagX>M_ID`09-I@6n+rMaoG2d} zH%FWtar5|87B@#cJw3mc`-YEdkPRgDkMz@6IR9I|b5AaDO86R-7D8%@c^O5!sd0eUP;^cg0T1v={gU@@+>SE;=y7|m zh!b1I$3|Xs#ozY(qI&T(tNmqL!!Z!drD9X!A%b|K>f zZrRYwE_~$Uu{?gH08R<>^ucz{o73F8B9*-zZ; zM@fFHpK(<1Sq=EC>Lyt;@4?Oo`LWR!HGG5|8=u3RadPkgpZG1@ez+Z#hPv91wEtGG z@1r%wpW)|{v`1V5@uSj@)bJ5<7#}uyFYn*L!{l=*;{$Gy&s^=Ng8SS3EA_hGWbo-e zj}$!Od$6YP#liW|bwMG=WrDoyT#{sOabFkQ zh-)y?sfLq~QyC|40Ven$OWWyn>(lP@TO+xso^B# zxN~yGeGsPvr{pE9--8Cj@7p=?b&b)ofghEeR6Y+tW1WXz*Fqw_Tj=(>iGW9Q_w zBk%wp@B_Eh2kv}i?WkV&{V@16BuLnN?iwBg)5xA&F|iIce1sf3ALt+JPFQEcx>IaA zTX({GRA#z;-D$yt&gXhhY;K$1g40%9%GDC5AEakX%`pzK?)0i{-AR0t{g$|v_1`Fy zU$Av2=l8shhtAxG+}ZqNeZ6OMW8JCo_FuTJI~~{Aa_%s7i!5ey68r8$5_5Mar+0sr zJAK)|`TEkwW*e4VxDQ$K)gF5L{D07ILJv;6MD4;_`}-Jz@(NlX?b6@0taLvSL#K;A z$rU{2#X@ed->BY=e$$j=v&+M*{U%)xh8@B#^RxK#_IzD9J=SiQGk@*0%gL?DsT0ln zqte#vwe}k+y{opSuLbwh&NPI5#n*#hv)N_r9%hHxdwKbP_Oe>LJZ8Y(a+BV=%(Tni zUJw4@ws&(M?DDGqZ1|?+%LBhHv&#=o|7-4p(_gE2JsA3dU6!t9`T@W6VgIzn6OU}3 zg^#4lp!J2&CY`*x_t;RqYFlqiN*?2-kjs8c-Z9kJr@{I6bsfVlg&by={N~m7aHczEyo`XfHs0NbIkVYli)(&@?YrFlp4$}hGd+AABA=dUZ3`5mu3JCwX~ z__h_#2cRF=W#m4)-;qDfZkIv*hM@Ju&8yb$pnBCBHzHAwb!H)#{g(b^uzpj>VRq@| zcYp`@;64Vo!ZajlpM#z)98`%PEB13bV7*AH&l zX)b&M_zm^ycNl!u3?x}I56z!X}DtuZXzjXG@2Y&%Rr^9|Qfs&O;B{{g_y*-OhvhAwla49%}s< zs#oofElIXQKPI{)U_WfiVfO3g$AAa;;64Vo*ui!_LH&@R^}$EAA4B={tlf$fOuczo z2x~zy;5aGdnEk7(9|IoXgX;&kP~3%&e0RsR0`y`K&T{jo|-yweTy3Oy1x3h7y^cz+dA7*8K87s3}Z*RokGdrX!+W+o= zuUg1EZ(KxDu^Wx`)ZSjV`NjE1k?XdO5^Y6@j6UVRM*JidyFzaZ`}xHmCz0zO(m!9v z59K~n@4BHM*k$2qrWaIC46@rLdrnN27WTKn*@KjgM%-D|`!}gxwbdJuuo-W(k87Lo zre-#N^H~*n`a+J~F0JdSln;1-Px2wg2i(H{wy$?HKJt0`EI~i`+f7vOBS87|Gz=sq z55HqK&Zjg;4Id%L%BTGO&)@+*=x4yKw9<`FgLJ@nYRlZ_*7nx+GXo=H_M__ks0N>f z80$kmJt><1zTeAGMD^=`Zbk@csrepfe_kWekdW=7OUaEyZ zQDZ+sjCn@PHV<2=#mxPx>|&_UPaC;ZkEI zHGG5|e?H&=J|GA?N`35VKhhg9)N39wwV$4DjYK{8?8_CC*j!QnX3FvAvsxblF^|H$ zDtaPcm*#QZ*x|LESIItrQ9iGF!#1yqKF0d#k?2BmUUlEQlgQFj##KD8f_`9^na7!4 zV4u+s?RME$=T%g%nzk*8oAzS&3o)-sb^L3Uig}fgW4BA^yb3(PC%l~T0k`6}ZhWNO zc5QlRv%WoBx4uCe?f}`cQR%#w^68mAn1szdH9H?1<)^CQBjnills#Vy9^jLDg7E>j z%)eauNCzeapJA3Q`ehi^fX|X4q~x*gxeae(et{Z3LXM43+4Je(0X~VR7$0zpZe;fh zd0awvIMR-oeP+wBQGqADy0&V-XYF<*>(ReqUR8{$;Unbu^8pX=NngzPfLr1-SNoB5 z+ZmtHb;_q{2U76hgZ%@FbJXw=a{T##2l&8`0=M`MuJ$9-AsKa=TH3msrE6O&*1&!i zg-O(7-n$VO9lJ^mA0fw|4|sqNGyrayXWZ;ZKCV}o`)>xEBJ!$-(r ze7xd%m~VhjoXP=z!$-)m+Yj_^#*H`+@WJQc z7Wu+%KSAS0^%|F;e0mmbNzxvC%(&4+HGG5|Z$30Gfj9)>5|Q&*Tmtcm%=R^nON?p2 z4N+w&;u3g%_Dx${BC(43Ir(>4S^NttL(j7kd1jHVD~n6q`9cF3@$gUeIqdp*FYYHl zYapNeY$sj*STgo^JM;L1crWfJ{~bd<8H>MrD-(7J{lG4>|7LnY&BF6`y9^qaQ1|?7 zqtbaV)vKoMN#Y*!Uc@CLmkw6)zB3`mZkNuu1bBc?yu|o`TV!kdxW@SOy|@JB(=&Yp zNqX=>T%zzZHGG5|8=tbc1bBc?{tLzj+)~fE+0Oye^D0YRVnSz2b61PjF^BCR0E?}( zRBt~$OTJ6u9)2O#=d#0xsIebYj*U-QTmn46r}RGK18(V;-1v-=j!PK*ThNe^fv^UA z)<#Iu)Eg{@-7karZ4>#cBKtAr`11h|@JauP@d3B=Hm?0!pNs1m{ae%CBs;|YIakE> zLTl9U5pw+bfCuNT!s@L9AEDR}VNjoVNDN;UnPkYnXjo^J#m z;1l_T@d3BkU)=b}?+a@1sl&LQ!Dr3)NO%W#`$1eUy6WGLt5{bOa;$u`vhfEzz$f)8 z;{$Htjotb;Y4<>@*SMa+r(r)59_-EsalP=Hiujmv{P}Ae84UAwVVCO=Yuh) zZJ7SJO?O8p?=$3zM&?HF z<9v?mIIkrb9>wcQhW)G>N#Y*;8}eDwr>Nm0NVfh;4^$QNqX4N{_qbrR>McgVSK#e;t|dRe6r8-{*BvF@fBA-((@m|=g8K! z?jSbA`Zrbi$OfP8F(e*#AAb-rNe)%RN64}AK~Hbl=ZEtEAH*raEi~BGKajScdR2t>Oxv zU#x-s3^|ZwEq;}!=l~zkafR+LXq7`F6@1-_KI^If2>U@iAAB-jv;K{JPamoNVDI1h z>bf6Y6S!sVE+p#FzhT`kHCBy(E#xr!fxc0~KL8K#!MY2$mELmYBb_f^ulwdwK0Qst zNZhm^d;AUSevw8se1sf-KHvd9;0JDrw_W*2zu1a-1ue6KX9lUw=QsE)+KnVV_+Um} zn5u@4kYnd#UH_r$vRH@3x@_tgwl0hHTJS=t_&Ho@J1k$9E!fs&!{4%gI{Xh-7W1r3 z=U9n#+2n!my!W}?RB)-ba>>v1oS_$PBFCM6)_Tbo|7>=cZ28QlMBDm%@xE*(+j?w{jc3Fc|IjRuDVpW-!t<&R6U1F z^{S23*Oj()_uCOSigmoDwe$?KCzD&A8^Y*>Ba}MjH>bQ_cc~uue^qO zK0ON~B<;ZmrW=~5hL4cr&j&of2mK7VIrYNV&7}bu_M_xswHokQwHGOw>lV%{S91)% z-6{v{sRZk|HdFrqJirI70JnTUw|TGhv`SNg#%N>>_zd5Ngtv3=-v)BUWap`|A0fxz zelQ+`PvLd@_!IiOy?^8LD(SdHy*`Ia$MgsG+>OMCy7NI^P%@^5kC0>I1M@JS!vzoU zf!_pf`43$ANXPZ+HJ_65>FM5`Bt7Q6c%No*k{Uijjz1sp03QGZHyooxTmth9{Jqjr zW&ft~eLe=C+#aN4&Z{cDqUye9jz1PT*6{~tqu-aZMcP%GS zJg*uf+fj;n74|p!qitRle}VPW=}%di_$Mo415<11JPOa@hPJIN-?iVBb4hFNT7BNK ze)3)ChNhCaA^kbqkH?U!XCSXt_U!>PuaW*JisUaBI5&Y;WOO$NN=}iv7ewxuZ{XW-A_{$H!}F>af!IcylNZn z5M;hk!$-*R=K~(#6Mlv90k`BnZhZP)KBd7&k4t2?cb`}7#`%=KQNu^bvGOU;rvwl1 ziLGFKz%4V{jZfdpr!@HJafyOQ|Au_Z(tB$72su_h<#8kM0H63)%&!Hv3E z->W)(PTJtp{XLTO$Ol7QJTg#?e<0-e^8pX=iEhjIfLr`jS3c5liF(baH2CE9C24a$ zYWEM2PnjI1hL4cr&j&ofC-pzpzkyr$Xg5B6FQ3xjGh}~~_OKu1Qx-Hud`vl3KIQq8 z;9>G9a{rCnQE9d-AL$9I$kz)RL25MoH&yw12A|m@Nz`NhW9C!-N6q*n_^D4^5IURB_9ktzz5#|w|JKu zAL(#h-R|#d@EI_Mggw?}_vDI+j!?r#$g%P%&!K%Bjqg=j z*6X?wjcGoAxt_1*v95%Cz2awz`ZrS!U<q>9g)|E;co5vOZ!}{yc zT2^KYtVF(Eq+ez0O1W!xBn&ez@TohJ{T|czb)EMevQvq@m&=;3H~7h+WWN(P zuQ*>1`hi`hH)Z;Q{v$0#8~6Ij*JJPNQWbZldev4BC0P%M&jYOVn#V80FK`y*(*;`0c9m!Gs)d zKGZLS9|*rN5@&uP{Kf3ln(nVRO5Of?f3o?7#Vwehliiq=kq|4BoAdIE?Tq)S<+pS9 z3sbkV{;PB+D-S=Uf$aM3kI90IF4v!($dB*s_o-dCX#-g?bPwH!36ZHMe#+iQ|IGz@ zTiDNatz*cF<@)FA_`!S{`hi`B-m%9!;_s`?H>%hD^{8I8nf*w~V?7c5W_qxi_i+e0 zcDuCB*JkQ=2_E2+=+Ew3a4T$PpHK7W1f=`Tdfgw4^66RDpAqFZP*)B5_UiX(U_$=9&gv~fOX1dI9upS@!o*MfRa{T##2l$}>05=??WaCeR z^m=c-?k{2RS-S}dn|?d4SZ#^t1gvuCoxs;y%J!FlKMOvg&Di*ZRu$f{+fV(hS2bxW zpW~oD@m|0BPcG@vznSY*JE*ZAA;&uYKvq-1*2x_SD5CYQX1x{e7Mu_Je$*#2#ww zN67K!6V+j0{ykT}UFaQC;PY{CLfpbE`FtPz`tvW+ewCgN^>IGT>mkQH4__Cf zJRj=gd}tTsc%2XTo%MV)4uiN0;xMVRSsVuEiTA5*9Ogh=K$WFfpTm0&-nPYI@>}zH z(eA8_PiJLjZ&qS`F0r|L947Wl7Jo@CVdX2?2J-yzSFN}AFYbC-1KIJJ-SwEk&g8s7 zY~Kv)`xke8Zw%RSM&)rB=m-5!W-!wWFvR|2?}wP5CGBQu^%{qvdeuJOnxsAUSwkEq z@y6>)_R|n@?ER244g((GQ+kcfBf+ioi5nmJ^*OPRKJEb7vQgg%~LgU^~FBIsSaW1AIz5Fh1ZGF1Xo` zd>p1;_t7`_G;B}O9_y!w!-U^g!$-*R=K~(#lNieQfLko@#;5N+_hs-|xC4oLJU3}R z_w`RTe1sf-KHvd9g&leS#_cHidpAC^*>Lsy+?T;;RhT3__#nS3{F)j*LXJNl@Bp6> zpND{3`fqN0j2;ZKJa$I4aX>XoLM#u zqt$Di+2GT?6Umxvrzgt#9{#1+8L8YeX3qC5_U^Wi*@gY%%o`EZ|D&qw2qh%+MY zn7@SYH-$W~6KfiGY@pX9^HUyoe8(1djLl|on&>&KjQrGICcfhNUl)90>_4@xHr)8n zU*@KVhLRQ6FIX@6Ut1nNfZTUlF{iyUgIuy=ijn8FV2`-#J(%;#dz zZ$LljHxhR<{diU7rBgZi(W(=?nT(?FS@Hu?>Lor_IevV=1AGcg86R*< zyzuIL>wct+k9_=ba&vMRW8@@X?Qsq4XYI)(xf$%osx?hR{4sv?tIJiq$5Y7BbbrVE zDO>*n5AX^7i17ipOwN^$dBSRcncm!fW=nf_wbjbLUlTu}=~R+6{RE5Fbm=%Mjt5;f;fmFk z@Vl*Y>~{o{=k)6^pLcRX>(Woy?TN>|M$0;ODmfYXuZreJG$wHP$H$TA|1v;z@`vMd$NGo;*=imQl#qlNR2lkoVgXsm=TbgWNH(>qffkER-IDLS!QTG+p?e|Odsx^Lx zM9t?1?DqM6-qPYTuPE^wg&ezmI{Q!X0H6E`j1Rb_=eqG3Bh9B?{d&r$XVESs>A`1L z&L{S`8a_gfKOgV_pU^nouW&nxeAkW7Xz6uP_WVHbw;yVV|83=r{~g)Z(Omt!!QiuI zSCaPNGnDg*JfVhLfKOo*;{$H_Bi;Cnm9`&s>u&1%x1NUGNZ8}~>4}_A z=4~~6gd95`CPut}7d*fR<21M>$Gh=~O7p4Lybr^E7Vb{sJG#d$j^}*h&#K`gc z1MSmt!86wPSi`Rcr`Q;~AD8@rofDsDN&DUEIPv%JD&jFDuhi>?Pt9#iV;4Oy*Yh z+#Sj%FA0%5#$C4F;uM=57b4>y`$&&NY(h?4_LUKju*NAiduS6f{y+b&I8Fimz%Iil z+s8ND2Ppaamb9O!W^IeMM(zH7RIl2+jYxJF`b}K1dl~)}yD!{7_5LgE4{5(?m1FUE z%GS5Q1AK5FgPT)QUtNEse0p*NNY?b@omZ~r*yLl8G_H`vwj-qOY>u#FS610#y*JQfvilOv@P2g z@px7`&xiUrUvx1$Kjb8KWao(<#>#AwohMatKOgGjdJRj=gd=b7cG~{4^hWspcKI}gc zI*a9DIM0XrIA1Zt^anZ4^I`vq^!@JVLw%etdpA2D*VcAT+7ZAxzGK4sE_kS zISfvtp^P#?ZKE4k$IGzgPi1YaJ|@H75c+|($4z@^>IGzOAa~C^Fe>u zx7v9=)W`YY$3YJChxS2#*pJ+KKGetgQoKKa9M}c=t703|8~iut`A{F{Lq7#MI1hNB z-^<=x&ZAMU99qikVH^E-+W!vI|Iwde#{cQx`f0z~beBPyd0YO&Z`^)~C#KMTTGJg^ z>-Xt-H~ehSzy=L$(7*-_Y|y|44Q$ZB1`TY`zy=L$(7*-_Y|y|44fK5tOq#4|cMR0? z0ZtrX#1Uvd2#pIQk7CDO8kjVBYD@dK-=KjF z8VIU^^ze6#{TGsZveGzTNYe&t1I$zZPfw~b4;;S~cwBhMzI&f)_Eog1{?9zN)uHd` z#(TPLA1FD9?!@vOXgs%3KO@@b6(>e3ix2t7iP1R3iLKvvzfRQHP;St`1`TY`zy=L$ z(7*-_Y|y|44Q$ZB1`TY`zy=L$(7*-_^c4-zxPTru(GY)lRR7%?7oeZV^}iwBGJ<~| zj#%O@`roFtb#xDtehNiD0snzKoFDQMBbhw3!;m)`wd704!}%evv>TI$b{O(xA5OG1 z5Atw+$SaOv^3V=Lp6tu$UF6~XkQd@{Gql5yC;QNsi#(hk@>2V=>q9#Xd9p8gbCHMh zLmuLSXon$BcC#fHc{o4h;VWo|A&(}!2mHZ04%Th3j+1F(>o{27af+EV`JyvBTW9Y# zul-EtM^zmoAGXp;`|sb~lI)(}+0u2YXu#}__O4Us&ze84xwXCfRF^MQdiD+9+n|9B z8u;(mg(e!_Uq*haP;ftU%(}7C^u+eg9iRT)j+lV`dxL> zuV?xGAn4a|?CjU4OxLtm^ovZ*WcydN>%Y@$P95*Qp9OA%DbvsBnmuRq*r-PT&D(F} zNV&YOl1iX$zo<%4p`Wt-F=BVKvarNnR(ZOLzfSLi1^Tz4 z-_7*jow}zd+nD}O;ZNj7#uFt@4cTZHKKE zgCzH|@RaBu-M``fSE_fquZ>j>>m!iI#!B!35AeZ#3~o*-Q#T-Ti;c?LV zLJZq?s5sEc$JpQX$mS|v^2F@!_LWJ?eltQ=`ERjDg7LA+p?v73S%co(gKxtu_74RQ z@Igz!4aX>h?pqkNKHAYw%jrF*zJIl%{Zgp?Y`4{2D^nHjmy%pA&nK*3gjEi+A6ywL zt^2moeh&SHZcWO&#$NX+NXE#V)+NS=xZBQSvpY|=^FR!1?uZT=$ z<0Q)X2zHFpd0o!q@Gsc?kMgP6Lz^C$JXGhh;P6`d70!0x_^H`DG(9zYC%p~3t$bke zHq!TpIc{aU`ME1jed5Zc)aLrcOFUB7Z)-PJ+RMIcveyx-f+wTk7 zs=f?b9}+1imG4IZr^wEs53TcW$Wv8P`=H~ORnEFN(dA0?6VCl^&@S||D4qQh<`d|b z(GR0vE-YaEGV0^JC>K2VhGV{WVsqR4>icH7T4)99m**IV|Kt5~e_OvSzR7+|ox=KM zl+MrBb^J)%w5DmNysr0$n@?CD{W6vRNZYwhn)b~~)(+a@kIi}KBOjj7^vH)@`se;X z=$D~~O6@%;ub}nCRdIV)^u7qH(|hlKZ)LQ?`JQM;b-z)))A^oN4(xrZh*O zKY$&=F2g4?yM(njG81QZm^_~Q zN#D1Z>uO?8g*&80e$g68)xC4*1Z1Q-5cs?Y)_C z-k&)6c*zZ_-=OtHyVQp%WZ&97@H}=z&gM zr1XgB3CqL@w3)vyizBoqX)bP+Ka*RNx>d?QKtk=3JsI&0kMC`4v&+({%noBavodqI zy~h-2{hFqI zylcgA1n38L8QqKN2W?2a`oeT8cYPrqA4!!#>kFZ3^9870wFPgkjPw0_gdF$ZvQGr_ zkF0X2S@D}!-%E?zz6p+xW!i4`54(Oaw&&~G9lj#3b?Y~k!b4I+oGFoB3 z84Z|kW0k|ZJ<5jv6MVn}d~p5XRvPl6&3+91N=HpKEognTuO@u%{%~c|eE%LKxtF2e z1hXHj96vtj@11nw!_Ja>4N`sF?J!ciw^9wp=yf@odd)B3m!O1Qfva9MQ~ zf6rbzugiHH=I`%8+4Z#6lzHue=Y${Qtig^a>zjwR&TBh=m}H*?KF+gK`CU)%q5CQA zD_J|}H-sP4b?8P-U5D;gu^$8dz|Ns3r(7HdogW0Pk9MeD521S1w4+wWcd5+I(>#A) zw5PJ)Fu$H{)wh}2Q*mb`_3A*J*M&>d+tTO4U<>SJ79mk9dbXE`%KE6 z>j!pToXYg$b=IKs^`P}dyVTD2C;$G5rV)$BtPEFZ=Y@dlAyzrm&b{XQ-~m3kkHJmo zgZ(C9g0@oxt&fw@ymOj2pepa2+1;TP-|v|f^7Bb*7tk~Gj_U#s9HV4Ak z3l;Lo2jpXwL;2`GuImTj0Y2=jdS17O9R-d52d$6x)r8N8w^qh0j8A8u31&Z5IevW5 z-#ht056;riuk(*p90#orQL5Ju=$J9%$=g;&E1WN(9o3eITUq6BKDJZAkHNU=<;TD; zK?%D8SEnBXzXg6w>PqIvpnme!DPik+xLQ9(exp#~#~=@4kj;;YHM4O!do(LE9rn_u zT$h8)oy^`)zPERN!bgX_JwdD=^sXO6<#%njiSEZ-#@j&~E&Q1G_U@U`_0s_r`!UcD z>^#+E_hSk>*w=A`#x;W07l_oxMW|jiZOMdmh2vy$S+IWCD#y={0T1xOeGG2tg3CIt z^lBVmXAe*xd{mEfedhqj(!5;W5$1Pe_=whLOv3g zZd8H&SmpTnF&J09{22HpC}CIN>hxpax4@4{AI1C_)OTLjyse${4jhGUdL_iqYX zAMH@R{}bi2_~xr7g!@;ve@5z2c|S9(UxZZ-_~6=TX?^~Xazel2dhTtV|~C<+@}Q?qPO^a_Ey&Cw%9Rht_<& z9OTh3Du46SAJpZC$Fp|OFN%5p&?isTKfhQ1-2VstG4umFhn~D@2hCdwT3@tF?RZJ` zs%bZkFI4y(c=#dt{+P~Nta2=NUY0iq9^ixP2R9s}H1sRKEMK?#C{R87P}6DJ?=aF#*u|Dg3nd(@7Tv`@OGZKnz8UgBewW8q`-W9T@Ee%ouD#JGnN zb_K4^aT4Pq#>vvp**J;%Lci>{#8F~@#)cMldP;ag^rV(7)`=HU|ZP6 z$+C7&WaDJ9m6guV*LD1(yY_!}>90;dT*SxMRYUFPRDNb)KfO=ieI;v${rp?UFL>s- z%|04$|7-aX#>oWN2kg8M^Vf?(YR1U&6IS?_@y%T=!xRLORIh_koo;_Z=Gkm7J*RJ# zL+!lhrDG1mKkIXX-~m3NGZ`OnbE=*388vF0^MeYHC%1Grx3#s-s_^SRUt|5Ss(qg+ zpD|Qst2_E2+n9ultn^QrY&uG~th-vd$X3cMF?sT5F`r}&g`QdY= z3ga@>x0ltxe9|h%j}Lf&PpXsg0XJtmz-Nr}g9?wuzUi_%uS1Y}K8tV8JXfl4{SU3E zwlw)zik8Jm*sf=qH`_3wgYtsI0@y)M2SL&ty%_@iTp+79H zN#8pl;+o(AKJc5sjnx$YXM9FWCp@T&Yw~%3qWzm0pRb=wZdqAeQ)r~R->Ci2xTaMO z_}I_1;2Eo*050H!?}8tWQO=m5zXr6WefEqQ_{;h!|M$N}W51=u4$gh;Pi*b%p5I*U zIu+&AbIjnCwZ0n4X|)ap^CZlhl2`G(A|7XSwxcG`TS+(*;(4ntxNEbeZQfMs;(pAz ztc>4mFP+!rJPz|bK9ql(^oOR+^A|t2zUEC-{@;GLrfK6f4?nkg{%pM+azB(iT}Oa^ zU~l<0rXR1f23-dTT3@tFZC=p@Z|HhG`G?P?D~vD31MUxDl|%bQFTWf-z^B0PV{jAt zV7~=@ek5ppv`6*xR`kB#c+HI!-|zVV?_;5M0X;+SxGwO(F-oR4`M_?y>Yduf;vMg) zSnug4<>T&D@93YMdWW8!Wl+5Zt&jGoe%^}p@s;22Xh*dr9S3L}7UP>&92WioO4tE- z_2+`&Pr!eGKM}u<`4gz`Y-eJ!BMvLM5hjbnN>XcE*F`YLpG`@)EF}Ak%bH8N$Tk3IEMsBc|mB_Gu=cv06Y1(1bF5_$co>8kz>+e+l zQ6tW1IyIL#e1}n^^>)~Qjv8@T(@}TNsJx%!`hmTbvi{>i(50fF^>MYT^U2S9=KD>J zw+$N~t#ICy2>4u_RSumuVXcXl);JP)fDi8D1m^~QpcL_L{H3}wXni4#z28FBdK10x z_dDam!{Zh55$&k%H`*W4ycw$;%7;5q{A6NZO7H+5NCP(w ze|C6ma7^YJ)uGCqaCW}V|47Gc7*fS zs)SzwKLUP5Xfg9E;BPqPtB=PzB~*4S;<4EOY8#th5xs?tlhI3AnYzMWu1iXh?+1wT z&)Tg`yZm?$J&$Dl%%7Nb{@i$f#eN0!1AB|yBkq(ck-1;eN`o$K~Tr#&c>GIhJut_bKR)7`MO!d~hFw8~eWa zf6)19(E4bJ>Ub=(yP;+GJLEabSb%*z={N*EL+?00c;FZ%(_7z*$5Ojk^^Ywp)_WI{>f#Trm6z z_z&`ml^^Pr`Xo!Po(c<<756| zR)#LJmws(?`)uhM$2YCHdCAUCZZP;Vwnwtme?VvyXO?zMZ?zE<* zXLMKWPe4Dg-&oS$p9mUf2wID$(cE4rbA&q zO`kb)&T~1>@4WBxoc9{mBl(2n5aB<$PU=_i03V)XaC7y?ZD)wfZ|q4n-_zypfP5}A z-p=Tn{cSQvT$6k+tVi&Xc8WcJbohx{lganM1AO#(gB!=txa|ya`LQGEb_yv!$G+q_ z`I%FrwNrG&Sa(I*DZ+Ym`Qgqqb=xVZ_g$Q9E^`#OogpqimL#30=-6?9A2-mFJSDFn zk07r|e?aFIuTUrpqFR3_AJ4JKXqZ0jh?s2us8+y969dZX|Uh2o*e{s*9-+XW6yaNAF-qJVQ zc}3yORj&)<9=Dw#F2BJm*|;Ts^}LI_vk~Xp48&Z=A*_eErS5H3I|X=v56>~UWe>6O zDP>i4jK9RMaru#xbpMp#vvA>HcQ#`G$4rdzOOjWF_4sj1u<`#)UI8B9!~KKX#H-5S zQ|BHxBD;i741Vlu3_eS{(-HIX@woe@h4fUzhx*>d2S4;KD1#3t>!9_$)y!6u^n5~z z8O2v@?#_hTM`vq|{|oO;VLj#YKDkcXM~JJH+DFJspp+|c<^7vHhP;J5rsG38kAdI4 z!|e;)_7R=ApVqg|y|n7F=4!8%Es#0CeV+IE(h>8953ur>)VPkzZ8vB-y~(D5Apgts ziqHM|;gI7y{B?$*PrJEz`}oBv74r^Kxy*Ez>LFBr&HIS{SA6e(yS%acyR{vn+q927 z?dC~!{>O9LB)H4_H~yiVoJd;w2{cCeG&M82l(jo1~-nOaqH2z{MeCn`<39c>EPdXr<;UNSdWiS zki&%g!>CVOeDH%ymKjeMwO%7t%fw z)?><#t3~IV5-+L0E5%FVAC!6#e8cflUJ{8DlS+AI{jNRLkLBLBD`CW5VliCU#xeB9 zU1!DO{tHg&A70x(I#Nq#MI9`dP@?-QPh3^{Ml3$iipAE&>R|E7sj7tX#;vpC z@?%FMa8hH z#9(u93hRl26S#oWMF*t4R9{<~q9&AQ=3hRl26S#oW z#QQZ);D=wJrw*+gUOPCXyBYYg1{#+iRY~W%5}!70{784^H$QF)PGLP!Z~_-_%3kcp zC%;_b7w8#%BYl!9*1K9%Tz>3mOnJJxyZF`*PBo)Eh4nD?7@O zx%sX<_>q^nNspOFPp;n{yOB9k-!EgJTzT*#FYB+lfgaXkMJ{VNb)2Tsq+r|98%Vednp7xw&h?-zdLu}3F*Cf}{^ z7kT4v(sr>Yqbm=7nBQN7W&*(uOIJ0(a@hokhD-V9;P5N_N(StnVTOiM0)6JC!Kk_F0 zIY;P09`yq9CNt&jgCBY9DS#g2fir8d4!pU%Jou5v7-sY!k9waqUs>~f*8TeaM_#YL z*FAcWM_z5@O8~*FN}>=Z8NJ zJ@gL|m*~4RS%$ zk@uTQYdC-h_{@xHe83I6q5hh>EwE;|kI!!I+?A8p4EK$yp{%3B^(=f{Xwn`>VLgIR zr8OMD1AHd0)A)cJxIle;T42ra#^94}(ipk0o)A9%*cmg%6gGUG<<<-b5Ae}f zs<}yiIpP?q@o9xM!xyQMDD%9e#v^clll|VWn$eFC)&oA+psBrPc;OSe+_*T|Jm#o% z)*RI1MkYNsPe^JOyt(Hjzb#qjd3P#c#$Wq~(pcdk^<8ipAJ)g?D>QX=E?IWYnq?=e zvCgCYBZGZw+Us4V(|sngoA&%!x#x2F*MIzR`1jsUy~e2a?vmkE{mVxBYgu&9y&?NJ zmzwa~U9QvAKCO?$c9|zq%O`WAe!e^2rfDs_ajunqfiWcj|L&!}yS^9syr;?cBtF@H z(|AIWiSEEI|GH{+U0B<2d{os%#jfqjNS*`6FV0kX9z;>=t$oY*Mb8?)nEI%G{-AX^ zDa`cyUv4?&uzR=cs5z0I(m#IZu4??`8B^MhuyN}9VgJ;*-^U*Aa(+kPPl3RxLgz&NUUX^$S9^g~_n8pX(Tw{EE z>TMqKlH2nyd3-i)+%%OttU36E^;E+LJiv!~AKWV7Q}?16;1hRWQ$-x?oqbMbGbxZenT zG9kaY_nyQtaX+lb;N#7T```gSv@3y|Yf~%5{YK!EJ+e9FC#pRgW{kE};v{(^RIznzOs2UxA z&U#O`dmnq;aW%f_gr6CaJ@CQu?cQwgTyoD`M% zbS&iGYVFHO=@dC_AJKS1kqz$H#rbM>?TB`7o&(z9syz>KZ;zLD@7}NI=MM@lb<>@! z-5bBS@v4%4TIoGV;#FerK}~M=rhHM}@Hgd>Wu?CSGzaCY0X`jDG(O-)d4#so`)_GYq{P}M)=f#fcd<$B z-eElf(Q6a+^+GdRF2}l|E^!xzjDKxzL9nr{sQQA(Z;lUPc-TMDy*j(KHvd9 z8Nc2KH`jG>-+#fUwDwyJkQ&wQooiD03G4CkDckN19^eBW;KnhumGZsEbGtY1!}vYB z_3;z;8_{l;JG@ElLLoh--kRO+4Ibb#^EHhRxKSRUtrYhgfzL#f^0KfVgU{@CZ}0%0 zalc&&+`t9eN^!pt_+&!QHTRq(4f-WQdaB_A9^iv5;Knhub>jY_hO~QULw@6)lceAi z)}!$;ZQj!UO}jVk+_Zc5zTR*5_S?f<+mP=G$F=tJHs3c8ySNU! z-0S7?^ZQ3)j~twsV|1kb_i{I5W{Vki?-k5!q_SctyUibI0u6_S@U{|BZ z^X@a-l+rJv|2ywk-0gYyPiZ^kXS1i!b$|bWI^U(vSN{m^D-@pihxm`5;4Ys0PZsWH z_O00v=c$a#k6o%nDdg3ByM)@!#IK%r?NlLXmkB-WMrrVEI>ugWGG5f^vF7*8YS#o0 z@WB9Z>u4{7PyJi)daaDlrj1{p${fY}XLWpv{yJOuD=L+8A@~?Q)$yS|aq&T4?%8GV z;ba{&NqmxQca}OSyM5ozT=4!`9iKXGy~F}OMvsM0AXcuE_4TN?-Stbjkhlk>T!Cvi z@7S(xiMU9dEZ(Z)B>dy;4ULm8#qL_^>^N!9dl|S($HmESYns|-)4B9zZ`1iVRO-`5 ze!Y*HTe7!`MUC6DX6`t7OIiD3L!2^8I0d5_~m%(QzjgzZ4U!E@pfw~SEu*J=Id|ua@Z5saL=(BAtoLZ5x&74_R$K^KylgDS% z#t%(pgYg*E%aO68wr}8L^i;Q@{>B>g1^zP`x~8KLC625kH`17;}!mMX|KPxc$?oI zC~^7l(-$HP1gS zpL$-jc6?(;ZQqFJMo)R1$hW`)e5hZ*ZThbZt$wh$`BGed-@df!}liH7rp33-0engxlpUFA-7WoO3 zxJCI2=QAP?e&i9q(SsZ)@^~IxdGI3-e9(g&DDrsj!tx~FBEKTvD%_^?E%@6`xAU!p z$4eZK{k78h^W5 zxr6%qf$$IY5Prfh6KT61irWqymmj+tGhX7y`H6`A47nKXThbqI^jP)KtbQQy03Yrj z+%nHEgU?Re5A=(CDq_1Zk*&o;vST81+H$KBrXysr?==h3IF&-cAPx!f8Bnd?%}m( zs|_w|?9cJJ>g@*dBu;*%bkl$H`+;_|;^ag@$Hmmsb(|dkrQa^$Q~XtlPWtT;(5IV}2_Z^m3V>M3CYddVq?>p=gb^bPWzWRsvDf~k@Z)>yLYuZk*%X!@Q z)wulTu96*BD1P<4gYt!7y`$>w*Ari|+bNA*)xYsRW%M}Z+*vOSJiv$N7~HZixABSl zz8aU`+dAL@G-A2g*G+4#h5H;v1WT}kgtFEL|g+h3=q2cxySVn?l1 z@JT5qqsPI=5h&M7K0|!1l+Tc#K&k)0*Ue|hU&v>ehXjA>3Ok=^ne~?1=Xo+e#q%EZ z^O@bPd}jK8bpA5=h^D1WWBm8XMR)nRLSx5&Rx(la|LwNDdOYt^l~c|BJaW+wyZ`pe zJ=FQ?A9;>esF00+DDSSHGLP8p!~T9Zb;IthYPV(VgYgAJyF({|-|>Oty7)KXt|yuhg!U#<5Ak{y9g z85!QNt~9Y2uIRMH+g>NLQZsu$h^JWfqH9UpPjvm5y{Eo<@|&5-yplP#qu%pG|1~%D zC>wHR>&0(oKCaF$5gV(1s2A}E<*j$V{hrtR8aog2=Z{yFUG1c<7i(O^vy8x`^C0ch zy{9_PjaDy~F)7kd)Qd(>g?iC>-vbwL;`s%?+(UN!(m2(~OeW4sA^h?mHv95T+!l?Q(y&u>3O5Ax`L8vK@W1cU;1g8kLt>U zA9>6xVIC&;$@qW9#W9b-l?Ola=s!Xa_92gcU*-Y1^591v{T=ARKH8-jXGi_Z;?$n;OS^591v?M&za2i`N8pUC^FD-V9;(Jq1>{DwT{anQcx%7Y(yN-wNmoM@jy>BoLKk9#i^41)@kqX*XvAZ9uN21 z7I9oD*VjtH$>^zolP{R{p;!-!^`QpdqSuFF-6+=%wLa9~P-uN9_k7f2RpnZrwtuzP z>*3`1&r(fUA1b5Phw4@9L$&=s-M^gqyx-6Kechinz0LHiiS4zn57qV@{a!osTusyW z>i2&r_nS18=VD9=#lP;lLFlXXe&DM_J1+OvVe%>0fjf3_T{XLsTpudu+tYiA{k(qDi2^+-hG?2o%XRQP)FrMo^9c49XYxgX)#5$i)yu4vyI|4&`M z0{b#{`(DE19qVpKm-!{t)`yz-y)MVaziXQNtxdVVO0?kjH$r8+V>8x=+Pi{5qCd&? zq3{oR0DeM!#}d1JFYb7&xcu0abU(ECRn~{fMx3`W>Bk*oPqc4RugZ8jqsPhvW{r0Q z5AZeFVd4>fn3OlEy3{6jg% zPxvGCrq(UzrS_+U)>F`Nax9+-%3t+*xbO}0UWTutP|CT{W0mt+aS}Yh2OZ$ndtn)T zcG5U0>qBKC&fCaN$HXVlQym}b6Bi$F%6_;EKAfzBwsM@5^`Wv6%TFD*USgsA7(Es~ zfmq@s^>(E=N!)`{uE5oelf*^hWNu2wN%*JFwBzLCWqqjP0Xj}XJAS9*q9kqP}AET!_KHvd9Xal#xCvAM<&cBGukA00; zuVB;0EmIQ_=WiH0YWoI0Mo(pY_vC-vSTtp?(3k$@kd! z#LbuD@;4G6SsyADalWjvqqc9vbEBs^KHvd9Xal#I2^*id`BGed>}y26CF?^Kn)JS6 z^i;-2@+0Cb`Aqh1yM84bR8qfuCo!>*K6X@mnR@`*n>w zRQd~=u|Cw?{XogA4~2iIhwu~rXdAHWp}6hParv>UG2CB+F0I z<0WK$s6vz4O^hB3pTMJnqr_e6Z8uJGA#o2%xdK-=P7)W1lLMdCaT5OQ#de&0ysQs3 zaFC9Ry$Ad8@sEDI^eO(TM92O2Pw39JJ{10;oEM&<{e(ZVV|F=@`@R~NAG?x{ldKPw zjkpfnbl%RJja}8hQ4bqEPC0kx3xfyv@En8N_{VH~;=ZrOpSbUY5#>kLhnk4EzFKN)Jba9v>iA^+dfvqcKcq%%eB!p7 z#^uMZr03hSK2*9%^QVj+2OnAz^|o}cS@XIlpae^B0YhuHZ{@2BkY-a7M-{r3BW z=1Z~;N@^h5xR$w|lS=2M{HD}Nqo+c7ck&u=0Vkec@S8ce98Np$Iw*zy=HO)XM8gSO zz=`Jo{5Xa_xef}RsE{mgyKg7!8xE|FRxgIbdorJs_XKx5F5{?}=fyZN=8J{j z6GR^T$YZ<-dZ=%aOMb#QFIOJ?$YXvZdXPu|BXN{|OjjQK$YY)kdXU5Y(of5LR97DS z$YWj!dbm%<|1&O*c?7OJ_>o8d5qhu>dGz}-56G1VKl14BKo9oOF3mVQ+P7VK@FS0Q zJM>^5^5{pVf6A2yKk{g2LJv6bp2_?~-dA0D@FS0Q5%l0U+~A2KGa0Sc?Ygv zq8=09jGhYd&3Qiq7jQx!_;C!~+1H24G-(|#qbC|ptb60)1THRZoqVw|>qBLlwC=0X zQvoO6@vINUdQhwn)$si%eDJTA$u4?Dcv$*?Y*NO<5o6lI{<6-}tfp^XZ#)|8nMk{qb0S ze?U6aZzHx>8ZU(1E**H2ey^N4UDMt-+tj^2sbi^U$CNPq>#iGwo}|}@D)@Lp(F5+- z#rbM>CAmJ-^vCpbR{Ws-yoK`t@fX)&mwUb3PZH}x6@u|kB60S|T^}lZz4+2y9|}9M z8;RVH@a%~7p(t0h8+Ck9moMyd=|gA!=w*MoShd>>^sVY2kyYTSY1}KTAJ@laWJ%R}o=>Cn&;krCe-lvbDMpCqIJwLs?Co{Is?K^7ychTQ-*0rh*zjI34 zVcXqv=#@P^hkj(vI-d3j{6ijqpOD%yc%Zd!a`*6>;So;OLF4kHa=zNvTJq|d{WCW| ztO|`hflG&1p4UHGp9b-(TK#1z8*$uqE@nTp(W7JSwmTM|#Gl$;;3V(?5Afms!L9c* zHa<&7NBW1(86DudT4`Kg~m=Q zNjqZnRPdo5aq&Ux_C%+=g7`#7mmq4#n6KR;g0v*OkC5jsw#?ys+3-o5Vw-~Wl8cb~ia z4vSZ!|G@okQFZGFrnDWlg$I7`lRXE1?+cOR75<^Txqiy5v&&oD_tyGKgME*3B;`%w zRZ`_m{QBB$smSGRJoJ7v+q%lXP|x9K{0;|ra14F2-vUq6N2%wi*Qn=GKh*Uc^T=*N9ua6_<*kGQb+mq zo=+`dWex`X{0n;c<%jfizi_)M4?AYRI?;dlFL`n^f;*|vB?J{>VH zpSV39K1NTFmkT!jpLuTr5Afms!L6{Z3_dZoyDH%mgCF}EfzRqAFUwCv#AhJJI#u%C zWb{d2R~${%HYGvI%s{Z0<#qfJ~B@%sdfj68F%fqe?Ap){QGQ+qWvQIgy3WJ z1o&72S1kUfUst zn>?oPicRYL54$VePVlqfzCz`t_=j>{Jlf7<3Xj_5JZ>Hmmp`}x+7}bbW5lnX_p^LD zVmY7i=h+*3qJ5*B8$H$Y81Mieo?~$9@P29KnQ`-wxcqn_={PC)tls>qd?q43GcoZo zdV+emY#sw1;KTicTiG}nBM)iSJf?)tk$=qRqT&-X&op|f<3oM#;sZ{TpSSC`xOqri ze(Xv*kCB+M;+9+T#fbP|N3E3l&FBg6u|&yrlE)BNE9EidB~Z#0xVm`^c?)^W__WSr z;J1uW2M>L7R(nj}x^;s?x^2Y0y7KX9b#WPalEcF8kcAuR8W$RUUJ_ihI+l{i#F!HSZ((w?FhBd9QO1-wx6J zp&)NrSA4cQ|0!i(^$&RreyLQ>T`6(rbH?Szo}|~|6Tf<6yKS9_IKDm`W1p6kx(TDF zd^uNrrC+uBOa15e@rYAt{gH&`@yWA)*oQaedz&I?t8m3jCeu( z$b3h~5AHMdYP&su`?x#KW?6ss)U|!*^asi!eJQcDE8fu!BQ>&?j_u#2}&r|1rHHE#EDDeZoRH~PX-?H<>xb=Tre(qVzh9YC-6Gtp*?>ix~uAu`DuD$5V^@V#`k z)jp$skz@Hh`TLW8;2C%vJr6wFLOqYMr$RNHv;U_&Ys!(nE_@XJF7?ND^#ge>dGF*e zblyuo>}qRB-djgc&|#f!-n+Y%_fEe~=eN+*kUlQF%FcTydvxBL{blvM_wFyeJ%7WB zKku--SM+~k@ZKqJOM0ueLy$3f@7-S*QRg3yocH1vH(tAVa~wBsjmwW6N$0)dSI>LN z)?CE-fNlPM7T6P&N_msK*XXGhhfUtga|=%H^Xux5o43a0$DX9~UU~M9F3jIL@xtch zRYp&FoXC5@1AMrDaN`&nH*by0j~$+uY~CyQEZo0s>qL|CUZbZRJ|^#_UVk$0eKH^R zpM7#dMN2srdDWA@YX|KhKh&1@KBhjB&qAGAVApW28~#q-OP)*K+wpy!_mU5rdQyLD ze@>b9-tOVykyY-M)sOv_-u4pf;85Rajg7w2-usb~3f7af*W+@vXZv-&J3egZz3z3D zj@M-~TmSyxzwEHQSM;yTzGSQC-Iv#Ph@~d)T~~bl)^)|>)%ofl;x+ytUZnn&)FFs)`KhUK0V~rlCq;i8LYVuxi0jKFfjT87;Z0cai z@W|S}HSVv`kK^*AsS!BIzT&;-MO!xwJ8Gr8pBO#SZ~_-_n)oM;6ZpAyy#7r0m)efw z@}sRGI34-H{6v$=lhG3mCvX9$$=7R~zz@GbPe1!ywL>&VwbQu#Xlw{hn?IV*HmU#J z=!u3CxPVjY4H_r#!!OY8zO^boaa22v%a6vS*Eg5=wED4#(P?3&#!ziJfC*It?u~EQ~K7ft-T_w zj|-Hf-*TS!@zUWV{`i|Vs~@86rMmtuuG4fpV^brk{I`tX-V9xR#`2!){`|o0J8Jxm z=wI0J&K|WA$CS3iwtMxReLbu1yjY#D{^5NL|4=^h6Wo*U{NIgX+~c-S$K}Vaq~|$^ zUp?=}sZ_-F)6BQx&DS(~D4*f>7xNwl9^k|MgImW{Ha>C7Q(S)RV?Uh91Ix~Le*Mt; z!E=Ucc&itDHf{XLRQ9N7{SR&a{^!P?Xy2q<$haG$N8__kiGA#(;itdr1W%2Vr2J5y zxcH#0<9r*RxX*uFe(Xwmo`cj$&;QCrQ-vn=4;ej_AMQ+3!AIsfP;XZnPfOf`Qm(+2 zaWNuK;v{jAIN5urj+5|D%x_?vtfQYEub4RbH$P79Va3Vxc{(oko}%eY+NQ{LJirHBz-{6J8=tswE-pXzB^@UPpVdd+ zmM=!crz7URi$+iNI7xlt;)5S%-e%(yH_pZ7$F8K~q|`~b9`>nxE+RhIQ7e^tOY#__ zhw@`fB2H3oSBjIwJt*Z0T-`WHTqI5wi#kriZ(HGciM~&&I9cyh-`R0;Pb*GlPSA02 z;%q-YuC}RrU+(eDxAl7ibe{)K>FRjofgKhnMgO}VIkDU8+-s}0!?t*z2Zq)8g^}YV z{-K=XC!}T`vd5vvEvIq$u`B8KN%5;1;RHveJ}zU8#L4xgL*~uzWyQ%{ua1l3i~M-`8k-tP<-ZmE_8aIey;F<6@uuAx9w&Dx zZ;mJWpK+?ZFTOXg?T`!2IG8sbu}9Z4PCX=YoWwtrbNp06y?18cnhiA$RkB3Ido)Yr=sRDetwHzqEhfNdcyd4v+$Yl>k}8BO8VmZH!i=i%iotcq4Fbj z(*4JDdja#QuK|6`6{2TD0elvQimmlx|A4~!_ zj-jozzk`&YfoHhmFU}ks8Ql% z-4#Z8wTb^KxbLc@a=#nYGaxmSV@bx$@vg9&7xe2fNs#ggvs@E5?-vKk`_E9zBfBWQ{b&KC>pAD-V9; zu_pw2xL?*DCx>It0QTAxtV;g#`}UE?m^k#f^2j;Z3&NELKk``P3Olh2JXlkmF+1-4 z!jC-G4nPlnW33I=&|^(9S04PxV{8L@kjETG=EZ3L8G+8SJW@CWkz`=9XjfCKkU-#2UHy7xQd_>Zv`=n3xA-@AxD z0@k*6<-w1A^hu$I`@~M#QWzWK%7Y(ys!A+<(1SeeL>_&JVgIdAl{I?>lPje3M-m_KF?uvU`dwZ6=jCJG)xiUN*mE1)^!4U{jZZ7Qt809cdRONT z3qkH{Bk~k3h)Dx{0zDd^O7H660Y0b)H;$pL^RB)~*KY}zpG<}NP4@6k;sZWLPq_S` z!IU5Nrg!n-N|(0I9+-MyKSqY+3|)y{8`r898!N$ zQhQhFdIfT>>U@LvABKFs`LAXR`#!IXYbzjGY9)G=pSkCTJ#!k`RR-2oWmr# z!k@Nl_Vm~M4F9Uux_$biKMt>{+}o+!3d|nu%SQU^Z7>L_I^&fc`LRDdbt?Oy9>Xzn zkEZEw=&@ay&{$}(UGH}r5-`Wt%*8rhr!UcT@?AEagT3z4QVz!yH~y9K?fPDXlMl-G zBt8RIYCNIHL^pPEzM5SZu7f*1O}$s!HS-_#^A^sp$CMhb!!GxFvE=;zkvPpwBErjr z;#cVh=Rd(k{={GM%!RKPU%vR*1@c4D{ssr2D~glBO5@(n}lNBhoRlR&}o zL0;G5Z5QyX#c=HaLzZaxyf<&I*ZGXU5r_sNht3s;p*)-Rg5^+BO7;a zN1(^byJo$&fCu>S9D`f>R2!c-Wl4M+mmhqR-g{i|S-7x&3i;)uq&Z7oV19}AjdFpX z@jKk$(Yv&q-|HWw*2;e0wDH==e(#Mj)?Vr(>Sx#Q_<#D%<^0as+G&!0FZHQ=Zl7R% z8cKEiKF8l~?npVO0UvqZrN4pr=C)U&lKcQlIRLM4ekS<@`2+bx`VTsvfPea#c0TdY znQlJ8n+q01qxEqa*)sO}%F-cw&djsMly&s!_}F`#pGSj782T@DJq|KOr^qLc9FN9TOIpAG?yCqa=Ry zygyE*B94hkeKX!1C8I}2#!Btf-~m3|Ke(k=*!V0R9qAuBr=D35T5?=|>{DwxtCE@A z*m%Kb+v2C@(-HA8cGUJw>Q|X7YV?FN7r&kQh|yEYI|lsv#Ki}#9cyiT;?{R@`LRp# zy(HtG)Jd7mTU5Qsr*ZL5;uZ0Ucvbwdj#tF7?DOn+mFS#WZm|w3@#^CxKIRI|x8haX zDjlD4FVeKI-llV@ob=adf-ac%)2XXpGrGg#mFUkr`ujx^ue2TZ9W0nPtgvEyWCulrutwSLv=Wg~q<>(}+E)H3Qa zydjSEuBAOE+jl$n(fsy#-sPps7(2R)6(>6u>bMB)-Jp-5b8E1#SbfF(?%OVVP1lZk zuM_<@zv?~ey>0q-ZHH^$-s=1%(ckNQ|5PgHZR=XKoOh}WDY@}S;#bdWzdh5W_XeYf za&BT|czg@bX(fDSMr?fQDMR5WC@w#;l74THXa4PbT@cFus^>A-Q7ffBr2eBmEc{K^ zht!k3d)xKlz-eYI{V5~E8`kN861A%LO1$lLGAnIes!ZrU@<;vYO}kq4VeWjtKFn%b zvw;r7f(3iZn1it$RUeA}1q+T*He9Om+}WQ6pWeG?!KW9@IW9tQU!fi;{6l%`aQu`R zwaZ)UjEB*4*pnI$qj7!ccH`0Nay$Pj%|KS3C7wX}}(+M5nr*tCLx&*-)N#)1r(fCwqzXA{Np_EdNIEJ=TKJj>-gG~NF zK7oJ9GdPCstaFgFbBr(D+2$Z~zvbp2GiHmnN_Q*~@6?PTq0NJ_DB-qBY5Rm9d5qaZ zPtdpLk140`m9by0Jou4E9|(GQcCn8-p0RqaJou5vyAgVj7qrd#xhZY5t~~gW$Cv{2 zU>7+%V|RFWa^=B~Jo*&SgI)NMHe<#Txbomf9%UOn?)_2+(+3omC+~uc*{ANF9ur4OBd)HUf{)P?&Q1NXCZRcz-~m2p1UHVM8lP6kO?CN6s&AG1D^z%QNPJFY zphx3VDK}*fl8X=ay0mrL7$4tr?wDi8oV&@jdafOF@m#;VbMEwhyYAFGmuvR1TMrcd zIa=5H9!?t+I z$=CHPIr)ajeTVpmxQ?HY+A(Oa8yUAvJT58H7parJwC5&OFY>8gez>YuD)?+yqKQw$tLgvI z@rpR+%3blrS^H@WW?!fF?y2#k=7`tGVP7s|A&*y*Yc|oVatm?z?Td}8opUt{n&E1!;t&%m$Z;bZhv$7kHH?_GTGLuRTBKAfzB zCYg^XIfp@F#$WIK)>JkkK6TuBiG_U6=n3$#M9Ov2k4Ic}`;EAmyaY3eBmms!gYVw%>^Fx6>*Dt+M$K}GuG#$9!rgJGw-=)hN^y}xp zy=U|-Psum_y&HsV3q}9R|9+o}xf6M9hnzQg%-8?&j-HiodvD}C2LDjbv!Ax}72W;dxkM*Qk|7vysh%X#np@#sm zDOcc1lq8QKZy}G#-K+B$_$?#U!S-=?F6OfS?5S(}&Z%*k!4gZm;vL;E(yua_T3;n4 zk9l9oIM&#)=VE3)tK%|s;x>IeakU+ zj~%L?r-V;Z`_KwLtB<@VpKB66Mo&3>boudiHTC-Y6;{O+3?u$S0iXE2siv9;K|4)^p-ILdLh?7j-d&hyVRp&p^ zJ(uf<*Z9Sa*YFp=WxwCnmsKLo^WyR&De1gd{OWn%&!^6gmiJEoG+y3o^f)Dz8!SU?=brpsJ7@>_L9pO&?z~q_B?4&5k-mxWQTRJ~FL`c|_wK6aV~`JPDdzw7=agyh z?H(Q;S!J$?^38AQZ7;D74)u-J*j_B{y&owlinazz?kYbIzSYiqqu46fTzKeD^6jtK zw8QdV(SPBgAIN)KcHgS)5UWhyd*Pu!Q0F%)`>KD4*Z6~Yoqd0Gzns!P)IXw7suAYE zn7I51n&;_xU`e(2ick0Z_s`_pR!7Twv7=ThewX%MqsNrn*|JRD3ohU^d6UKo{9Il= zPt5%_`f*%-G&KUJ)kofvZ(GwOoB}=3Z~_-_n*N-|3HOG?; z8cyH>PPzZqIDwyQS$E%B6`$N+qaVlRN7Foi4d^7})9TGX$fx?7Q=W{TXgGljIQ9DZ z75L#7=o`nvwrYgENI zI6TBJwb8izXln>gn}3}zoY$Q4Wc199({@z_Px$X&ypOg0pYDg?Jq^D=ANuC3`A~i9 z)(sBnxk+3#H$AN`E+bdo$JUk(*)wE!Ywh36R$YHXCqAW*p+=Jamiqg59t@AaN#CK{ zo1qI18O&dO$;Z|E&h@I@db&%k;;R0d_YwU!eEYLq-q=A~wH>1SL&_HYS#Zd5b$;WV zHt{}&U)=JEJeS7pM~KUhJreJd9DgHz^|m~HYcXP8l8xC9Vf0igpJQK@_84&Dd3`+M zB;#+A%1h+g@16I>e6dOI%|=fpob(eZILZ7D>WNC@BB^Jglt1vD??2!o?`rj(`sf(- zy?UnHzR2_VQ`ZLLM&vj56ZN-J`)r7r_CfQz*tuO9M!X6)RmH^%DW5nZRdT(gfgS9`5&fgp(=x0H^EA5XF3$K)peJb@6*T7K#>2X_+0v5 z^bh0yJQV1+2L3C5;whh0_4AI|BT@8!;I52{U)M}&JH$@Yp7*VR&#LohtMk=A)Jyp1 z@mMb<89&6YYRA{9nN{R>)%};dFJ3=(SWl>4FntG|hko7bJoIF6;(2{M;*@0kkZ1qI zQ%>v}2;zKooa#L*ewTLFu$~Z3v&72v5}&P{{C|5i1GJr zR{hY+Qb$K(D=?)c9_B_D8>bOIPYJJI^xulKCd(L+a14o^m)*j=%$as9(U% zwd#%T4>cag<}_0_hYx&OXgD;s90{BfSAyCom-*KOFt z&bPke=T{%lbo#@Zw*6=Ic!h$tZ|S%So!V{hp7pQ)QP+-oUl#pSyS-4&XFOs`+aZ>k z_vNX}p4u~Y*$dS9>L21nhwmTip&8##mAExtmCnxndt81rB;DRBepPMgTQYso@~!kQ zKAaDtDcGL=eYd%CF%ZpsiSWF^wnMC=QanYu$~Z3++IMb_rL|5xB&b( zhMw8CW!xco+#Kkjc|cb@mjYli!3AD|;RZM&nlYvOs$$-lyS%HbsVNWMh8 zb@LniK)wQ{9t1x(zagI?znT7r&TrsHE;QM7sp?;-Me-Znhy7PSzuD8uZ;E&5JSO)E zO;gv}l>4bfC;j{e`ir06+CB4!Bf1-%-++&6m*^iER-LKd_AS~Dxx(Z(zxerAyYK(` zqsqSOAIdrYp`1^Dt$N-UcU`Ht{N}E7+)Qd+D)Fo5ozay#qB-R}tVhbZet7ApGyTZm z0X{s(;AZ@xzm?{r)w(E3NJw0ML?yj0mEf~!;~y3koc=oWxpd|S_2-|Z`D`IQem!h* z&rm-`0+3Fxc_zAX}X8ko;^5JW4D+pmnE)xyTwZFG+!wh^{Ai6>}BOKN)U z$G>1x?xzwh`gsg=;iX4+pa1$J8=l8hvPbkEGW8Lq{}o-@4*SZ5m%c=uH{;~&v*w6A z2LDjbQ#V)7V=_iWUEkvJ8>RlZxP;zU#II_8epe=9InTvhzcH-GD(6mr7op$adv|dHF_Dxo_cp$jY6s^qbUMl4pkXRKth*-o>Yq{J8C2arv<;>2@=T8UMXt zm+qN}?ar01!^YfX#t$Zf+EgheGuhcaCbDJ7T<-cWqtl#gTH@@elum0(~ z@91iDyG*5LK=l9N+C5e5y>Uw0A$FT~nLWR|$D%)6>#6hAKjbs`hw_e}DsjhcKaI<8 z?DG3F63S=9uc}>UYNAQw6T*57)~a2`$!EX=e7Jvb;}}}JoE zH4$3>hkGtZ(=paTm3SG}WAO22;X{4m;#1Bh`7N%0?<$+%l_*8Z`AqfAL1nbpqv-KSluuFKJN>wORs!3xpgo6 za-Pt7)Z)`?F1%za8?4J$`5xk&5x+}b9M%&m=cbL^iI?C4PHkH>PT)6rg}ra0k5k>I zCb#aJ-wwN*+fH8UPgdPowJmQhIBnW^!&EWIXF}eq`)+453QiI)jUG>BdAMgMl zJOyqXLzgdCTO{-kty;dEUv>@htaW8fKX`8jiNWOPH{njK@-oLZ&)NPhx(1bIc) z--n)j!xc1env++YzF~CThT6xS=)9s%W@Xe;RodH1#y#x6e?QgAD`uv2{hR(q^?2#t zU!~*ruY9p*p#R9J9hFyz{`M2Up~gl0a7x=@TiX8jTYB36{Uu?`($vpvd^!KC!F-$@>ZV)@#{Zte6PZlPxbmRy}kZ^_Z3Pse#Y-; z1rLs)tyIs6-yg5_9Q7LY9R8*L;}|;7W9qq+N7SN9oT!nG^q)VtzV6jyJa3n$&GU9E z>E!*%v+B7T&G9mGj9-xVms<{gwrXcQNVVm)D_VX%k-8J3S`DuAdWmnlDqik)gDQJc zvgdgRcydnKvMI~Fqq}Qpu=h642z#SbR_FV+ArF4!u}3j_Si2@zYr$W0jWrisdGI5T zwZ_pyjAn05a#{8!-rcbee&n%d4|=eRHBVUsg0IFb0${7mOu!?-zdLG3OFJft-i+*iy!#vPZEi z4}Rpa*C2YhPv+n-r<%Dut~~gW#~#e+;W=RsGxl(0FEm#k{K(7vLdQPz@SGr*HO|>1 z)|Cf8^4R+lJ=jILV{f+9Wjcp*<-w0U_5wr?&kJ&SmtfCJ_j!RId5j%E56?03*vp8$ z8(n$uBabnA=mA&yx|lmgpP75V@FS1DbMzo5c&`01G>j>7<-w0U+OE;#+Q(cp`pn(? zg&%qJ9is<%v{^D2jkZr$9{kAjt1}Nh$l<)Fwy0E&lEx<+{^8Hk=QgDNL{r-v z^>ObiO?)SSaKYekJ7aX|^6^=z$_%r$8J^ej#!oMne4tey) zVjrL0PW_InTTY~>aM?(Iy)U{5RrLIqy{miGgYEf&J#`;t>Htm0{W-IfejX_-B|n9D zqkJ8I{^cboI=N%eFMm^U^IUG}r_*cqz$en>m@|fU)?)0Q`c*|a@X3=TR86;Q);*lyWH!=lJomV;xv5GyiQe5&hwJWyTq@mWi+1)%6laQj0N?4lkz5cvC*UJ`$~B+cz_SjF}M|; zYvWUzOBJIbH7-9sNqR1$;InOUDxZ!x1|a)D{e3EekI@svWAknqn#%|t;KTicTig9- zS>>nX-<@zSqsHf$d?6w}_^DP(`7wIHM~ycP_VzOGE!6ieKIqLZC{unoSqE*^xr`Ds ze)8%yQxg^5E9A){-ijBF$ zfA&DQU76pDetQh`nHSyM_4)r=di$N1kE{3h=I>P``k!&`7nSa3=EV-N^ZElXQpfu9 z%!|IE&fgdu^Set0_Z5=A`u?Gu7k^>rF>R09^>EyN$|UD3C)uAYe)YVqQ|StO;85zb zZ(sKRUZ5U0`T<CezwG{YeXMahelBw=o?q5CbWZ(C-g2TC<*~rRIcRq;U%O)3~-(I|e7C$HK|vG|n6vZ~-TD zfM5FHayY%H?zv7~gQJNc)d-xnE#5od5$xS!pj1J`DL81l_pv5CAoKt#F8`5@0{v5hc!-Zoc8co=9FMsJ9dS3q0 z4UyYx@DJtP^;7ycWy^cr0W`_-o@AaQe%<%dwNv92%De4lHFEw(_4jK?o@4aPUEU=h z1s8C_9`NHB`sCaaJW(H&dUm_=JM|#-V)|}9{+s%;ZI#Q3jfx72s-t@WBxE%L)jxWFA2>k^{@0tZi7$ip_G5hJLSLlQk@r3FHGENm;dbx-14tS z|EayFYcgZ`*})4;U9Io3Hpk~n8Y%y~S>=D`DZ0F8{;2b!nP=-`sB3K7YwYsh=C_AK zAO3Y${y9C_Im>@i?`5uiqW}A!S*XhQ*L*wV3RC_c{&iZNe^cc0kAEot_zAtK-`RQ5 z($SIrp>t~69|u`NovI9|`2-2AVI_X`yqojICao!8^n}a5j46;$`y%RR@Bklu zUeyQwbKOz2@rm1x9+w~c=6f2SnS|D^7JOE3{z^U@tjQ_0VDcaFyNt&%dIEg>@gA}+ zhZ*ldJ>uenW!Yca_{3eCCN4jAB^^JdPHOwNtMb_<#ZRLrz=vB4QH@h++=pL}S87Kf z{y`~U;7hEP=R;mPi4&84JPs+X`zx`S*h?&C>^Zh&{?CrZt+Gzm{;EE<*U8%5ip8#D zvb*b8JiVu;?)kZodsUt7jqRv53eOY$>r|}0v_ianr8<9Qg>&ZasO#|ub&2bj)S-4R z-b#HjNw!I9pYA9=6qDf6(f4}Rp)K8qgYFm8i! ztBn6}?SmhA^p~OsIkW>ZeuVZ|S04Px1o|w3x`e#i%&>{i!X`zp|*bhfmTtwGEcfT^OGLp7m02 zGI}cD(BH`(|ujGS;y}4 zIq>iHd`lR{4{px<-UqLkzxAi{H|N_9((RlRhx_z?-QP7HS|d$t*L|;8IXCS+M!(ZQ zv;U-zp>s>9?+SS?#uO|5b?1E|mAJxjTsrQjcxQ|LfIVbMCmbm-|ADyoyJHNLrp9#u)=%$U**x#gHmG)|*N9O^R=EZDj!!D)9&AQWkf)h3q@n%<>J{+e z{=qHvo-+9CwDWskoS%q@4}PkZQhtmc@F_pPmwMjC2fc+im%)dVbh9J>bUh13-}m4;A2aa>!kgLxazh)a5Z@elyU{G;k)i?8tPd@V`{s#W0^OwvXIzAT;uqpRbiFVwp-;}L>&)+MPh@^C{-K;t9%1J(J`$ z!tV#*`H4!U{K}XTqo;g1cjqI53pnvSgI}(%98Pt2pCvjDKgsz?dVX(lYM=s6^q(=m zH{4GX6(hM0oQxg|CzI1SV}HN}oX`n=*)z)Fw6o6deOf+uZux#rcYbf~XYuBd89f$G zxPR9CUh01rCm1?b+Bog(^Ltb0mB%UR`MpL@1)O{U$a9FhmGT_&7AW;0__}!xc@25a z%)vU(fgk*#H|{!X9!viPr}Pi6?H?Vvkc%SFI#?{JGLP-5(l5+ovFG<%7psGb-|Bp) zcSck9{9MO3EIwoFH|~=?!}jjp5$l+U{u>q_v(@w7o!55Q7T<8kXs^x9ldX-|39u^@F1^_Oy!2&t1*)^m_40jXx2eu6oP&rzS_smv{8W zrNmF8r&@V8^CiFqoKpL0oWL*jY#XPz^Bv;ywSfdQ`~u-arq5S$(N^Xix0>bv&|__Mo%=Hzy+L&f7LjFU&mi>wCcTOBO7Yn zngQ3AXk31THKN|zw)m)gaYK`E3iL$730%Nw;t*Z$fnTxRE>EWptsGvfHebeHwbHo! z=xYp4ugniLsXQ4y(QpD6a2nWO;{<-i<87SI=#z~#M@I%%;<4IjTz<4Q2B)R@+`8tJ zC!;4CPT&GgR`;!}yF|t12PgHSs>d5AG;dk*h;54p@|lSJKgN#Q zzDd4U8fO&fDTkBE^S}dq&<1X8T{b>v3=a;C4i5FNU(c1b(YX9ZTO;tfD4z}dMoXj7 zn8Y{mF?uTFvt60Mdol0H9WT=F$-FzIs*xsE^B7Bk#%j5n;Vgd%c(5 zgLHkJD(XBa_Y8duHImAI8}Qqypda3A|E;Gz>$7S;Rb$_iX~%G_68*Tkc4dei8!%H>IJKLB`u5BCplnUl-lv%LPD0FuL}GjV)YANhxTG1$+s zvGu0WW8u^3;zK>+;sZ|OrZHx@y)8e{q_}4ESoj1UmHJJ_ z|50yOYELHaK`B?@NEp*D5z%RTP!_d9|v{?fPemv6eE;c>E3EgO zC-D#E96#ZQ;*!=a=Sjv%@vG;lI2o~=PsELrfgY=z&x(`a0Y2aYZWE8%?OvsNbSI3H zg3s#B59JFH^BDY8E9L#d=n3Pa#>%_>1&kq*v{8TfW#N ze2ktjK6qV^dyqIuyJ3Cy9&1$?@muI0?V8K!3aO2k!f%UNN`U_e0Iq zUMpK*j>Jj5%02Is_L@c6XX&`u`i2lxt?pN=V@6T&HimO|<0Sr}oZ~0dXaC{U!~H8qhetSDJ8ji< zmBp{#*gNx+Z;94knvJ=xve9Fe^NQn^zy+M}JowE#Rt~5717<7ZwED;^^M!~wO~e>4 zFXI4>o@h8xzkril&lLA?;${n#rzF<^lRE0|1;^(Hf_}D2nLkf*eN^%q!O7^caGE7l zu3w={0T*!MLh#G&>)_Nf?P$riZwpS_7B9}Hnl!(`=qZnr;3N4B@wQTaL%sr~9t1x( zzagI?znOlP&Trrcf9OL+H@{gls(J~}-Y{BQYbxubFJC`+&Je+ec^oYeZe;?t)b z^pkw5N$VpUJ(bJ3)WhHbK0LSJRyf7RCvIL6mmhqR?ynboR&TyP-!>90|HO`3De=@?{i7$Z8SWcZ zYHE9(DdBYF@AIi9%{Mc8G*13xaPP6lE`Ch?T`YKZs+*-=zfRqw`sa=6UB&7RJEi#* z+ogQ^agw-MI6=ov;;Heo{+8_g`T8f6O5D_guh<{E&5E1p!*v|UJ?OU!9IcNFK6UTQ zJ?{9aKY!k*1FO!>Z#(MfIpd})r`BWg8kbM>-#Pu|DbM?~Z--oA;^x4r73%z*>U{MN zaTEVg-rIJwi|j2 zc;J8~`E--=8KWn_$MU9>vr_+tA6F~A|C5(MDOcc1oD_MI$B?%KdCW6)9s|E+ggR)I zJsBjA(Q{^b|KG#PV_dsCexvi5+_84NcCV{^ENhQ@V~rj!S6#pC$slvv%6)3vlL3EF z&RxHByu>c&tu%i=$@bV_PlgMc^L|+f^pr2>ZhtelfD_1rAIH!q_hi5m_0gbS^y@+D z#mVRDdXf6lmEL;$=@$K0;ytZ;aponu{_8ld-g?l!^PO!!UHn6NbNy5}&aM|*XTA4i z*A-zu-Au%JGL!y3RQA&`_mPx0>8CP!D%6Xr4C%O=>^gxbtZDZ+G|8-OH*Mu@^e|a$P?{`5iiby1kz!ze9Ju?ewi@ zTziem84v2-5$h0${#{?WK#kqFHLvXu%glb7yT0L>DT!_CPTjh<@tqHh0^{d9RQ8?~P<<(=}6pQ#r(hVHC;Rb_&98}8Jl z^1it9>{Z46mfNd}HN|L?aMu(kXJ)M$-d$MpCfp_=Z5;3;kF`C~gB;c>X3ZSdJZ29N z$rVH%{Kz9$K@W0RGmtftS<}QtGunmd`$T8j8FU16+&a#bQ9-g%6k3bEap zd%zw`QE_UWchkn~MK(E9J_lnh#kgRBlhIQFCtneJk+Js}dy)07*L#t%N11EaoO_YA zFFf`*m#NIL`+OGO{LKetY=`^lJ-9i0k+mID=xR%=F_a7aF@>-6`xg8)_6P1WeOh8> zt$UHBE_nB!<^G_PSL$P^d*4YN%X2ZNgyCOzk1F&~&vG1>wk_3oLXii=*v0v3b|twN zSt_IL8h?ZRyoKY|m@<~@u*<4^3wZsc)4 z!m}gxBBNaKF4p!EUB0l-r3sEfaz)p4Y{nolhu7YVY~n?_?Im-(rqgMg&ZR8%D_yTZ zcecIA@DF)F+d}Oh{PINGi!2+wi&GQgiDanM12V?N=+SvVr9C{r1AKUn!R?8*7g;9a z9E!G|n|z=a|v^jQZZi2b`X0dy%Ds ze5SGWo6!S4cwAE{XQlQzKfb!{4_r-N0;ODmYdA05u5O9Eg*+zve4WR@k6dVic}$$8 zNIa9rFqYchi!6PDj?0BEO~+qpQ|_k{&HC?2(4B2BGWA_0X{s(;Pyn@i>$C98a}B|yGEt5UG8`C7^5eshs)+M-~m3!1h*&JUSx%1qTz#| zYNY`_fu8F4P~W@wp!W&47g^x9#^y1_Ku>@VE-z8?7~*QBJchgkO1T18H;*B2A&(h2 zO6M`~TSlmZ*4vAWwPNhO$ciWFxSV^HrrFonl>4f*7g_HQ^m`q2XWNSm|4_~c7TI~s z6KyZDne)r{%TVgsi)`A@Z+U*AQYpVOX3*#Cgz@TMvsM)$!VN^PH+Jyo(u4MqU}YNt18!(e@&nuCVt*(tD8^Jr!{B0U*yI?pDfk$XlS)hv4hxIpj6uIhmt%o&!JlLtAAG zu(a2Fu4EK*#;Wf{mRX|XIF$Q=cFZvbc(k`Gzunt5wWG!Wi~c*G`y!?PrM?|vxfugI z+M8DA->A-4|HyN+LWKzYP^rATQsR!`jmwWcNsj>*pQbza$WJ$E46xBtt-PBtz&w|Y z8Usvur~J>Pb@``W!0*uQ3uf&_I6ShpZ_R0a>$oHm)q9?)H8E>r3uMo4pXYtPbVT{L z_gH9qwJz^7i#6@-v1uU4|1z`Ko&%7+N5AJlUwHYV{OW%>WrxiH5dB~7I98SK&--?W z;imk*@bcr;`7G&yi(#^-7n{Nx&z(iBB zRQxXO1Ytd<{J6Sw{FMGp>hDVVGVu>e`2yehzG%_kqrMX-CYAEa`dxdfAB*hmN*J-1 zSUmj-9gDHemC}0ilppoyDck!vbey7N??kVr?tRpHytB~(GIb^Berr$_Xd_ug|fb)NC$wDHgVTtvHqdeP{qP%k=d z$KV1^Xahfvp{-Oe%KAf(*Yz8y2dNkFFZCtI(4BSucJ}DG-raYu`PG2Jpnab*Nc-h-UYl?Ola=!ZiO?V{W_?dbGpy7vn|@+gbw;oS~-ym!)X8n#bz zQ0B+EbuDsTy0g#k%~seWCCPVlX?HMsqQyk!Ek?y@XP@6&sL=1t_yqU4t@W7P#ptPk zlP{S0z0Bujes9}=p5M#7U)K)i_YRKg#mC!Mj|{JEU(z=^cz%C7om|ULUo34!)jsa? zIpNO-b$O*anDncq7{yT0Hef8sBhQ=Sc7FTT|Cd-eG-b&Q?Zt$r$fxF6x!5%YT~SLEt5Z_wq- zH_yxMdD+o9g1!3j#$9Liv-V$bO8@ZM{?U;OVTwTOV6mjiIE$-FztGQW&+oM^RtMu* zU7p*{tg~Dnd;3Yn_ubvK!`9|i`p>##AGOZgZByC~`wq7}FTLojOLkG`tAFHqm3$3< zkOvemwEZ%0&si4kXAG|&93334XB(xGL2>!HtEBgS5ug6;lq zPPvOUPT<%3a~mg8vU=@}%a7hhl&4J_?^=|O*jIubwNh|0dZOV3F5r}UuV0@0ay5OG zgVV@{{`MG!Vp&Xn{L%=VRGjZ;_O%JWwDt*pC5#pO4C zN_Njx$s-mnTsxJGxL$~{qqc8?Q)xYyKufBkx{ ztc}LyH`(rzQfwH7*|)e2kvT_-t1u@LtS&a_(RBdou6O17Et-dSBXdx4Vb! zX?^vKQmv26pd;_e`VnCrEPMTkwo7$=J@7V7r{82#BdPqiaeq8A^z-jNzx(CyJW7pS z-CMnjPOJCj4)vG(C)6Zi2^amD?%S2_>+{+UIc@gh%XE*a^IulytAC{Y%6l^Yp3NFovV7e%syn=Wg{z57gBE;Jyy9q zY1Vv8|G5Ppbb(v?D`oIme%x^{;=&qfTzrkXPE|71y0Qu4vwHJHzHlsk&eicTcGUI_ ze2g9opH3Ga>Jt|qv=%>81|Lq=L6gHr@AZ}xK2j(Bd*|YOHW<&}SbU5g3!lKFf}`|% zQ*XQdz+6b&gHo=*m3mm@ZCAHMTqI6Tze&f*fd9V6#mP7eEtxpUI!pHY1ckTjxR`sb zrr9^x6n|Bs8Gqe5=m{VHLH8Hl){$>?oUHVeiT>;E+NZ}G`)FRz4Z~?cD zYs=uX6UIrwNA|3ph=>n7}pPcxb z{6v%1DKmP)_!x&0C#kn9#Yy5GlyU{GZk!}85+?`F(Qy*~ws}s!>kr)b$us*`jt-C1 z`hKXn)cn?ZUPhH$BuC$4Tf_x32B} z`LlkpsL^q9*Yf6gqW|Qd$@}8(rnDV$p^1}M-FksK|E0+9llX^nj-OCp_?%PDODJ=; zcB=8NozLZv{=8D0OlThr@vG-;o@%SGo`tKQ@jmYFa~(_hm3~*F$13L)*M|WYa6%9G z6@FR{r}_hCE910j#$Df6%Wp2HlJC!@#0DST<^yIe2t2jBuuTnK(`A9ZkQnRc{f+qVU$ z)vNEjJ>8`I#^@=J6ZsACwo-mWz5=Bl1V1;wA)g_?>0PYz8~BS`?RJ2%pS$_Z(*AX- zuW+>gb*FUkutcEC*K4-n5w8}uK(gdF+0qgDjlF(H@oJsNKs(OW#}k)C%WsN)egl2) zO~-ewIzH3zc7Wgpoi8Q*zkQi{XWg9FcGwrZ_on4ttA6{!$oUO^amzVU)0^#be(Ku3 zbNV@12aU^*%K3hNGn3Hz5aL(Q`)EEJu|0PDk^19ish=^>qs#fWI~JeBpR5x>J$Kr*b_kaS}WNeEfO^+_Kl( z_?%)KRM)q-{6=ZAaZ>PEedKsP6+G9C%V(tg7(H{~z8h0W=2GI}cGBmEh~)k=8`c?pzwMfsZVJ51`!?UJ|pc?)?=;f*?vfj_g! z&SM@bx_Qi^Q8n7>>Upod-Sckn?U2)^o#x>E z_RUX^<<$A=pCC^9{-B&^FSGqJd7E9%>sv+2*b3zlM zsa(z_PJ##c@Z9noPkh_PC+>TDTz>FLdfcJlv--#@@~H~*7||P-O1UVt&jfnPPM zd=p&22|K{A<1!nkllxY3NnJE9zfr2=<;-qn$ImD=s`1@iJmQ+G1D7sbpJ*ryF~xGJ&|?C7eCvdVy{NjL0{N>)YGfkn+C%82}xh1G4u$N!$b^{rd?PE~hx zSIwlEu|A*VbWPPg=hXStz31H5sqnqw-+#%u61GP3zo~E3FY4RKGF{)Oho#@z^)0J> z*~F>MYpzR3eY5jr@8bRJhJ#P$pUb!OL0#XV?)8b&?R>fJb?>OH-%$G})%$!v?@X>w zohFw*DEZgFc|Rrl#ERBKE|`3|-S_RX^!hjNrmojNsBhRIuD*5MWBb>%`^M6i=c%&Z zA1F5c({uKybS0cmM2}{v*j?fvBd4C<)NxQj-OqbDQ~9!~@6`X?3SIwc7p8Wy*Ary; zeZyu=Xx%UQvh}8|C;bp5XVw4G1-ibEmo%Mvr%f$p5htUM>v2`+;rku1?4-xO*gez! zc434r@+Xmh_3FXg%bwrk{HFHTh+SUvom@b$8f@`ak(0Z6Dz($I!d&`kyvF zPFr4UCI5G;mVbelReUXW^}Kt^U9&VEW#ok8Yw~5A{ttM75AQL!jeg9=r#24I>f&@| z)wJcoC+qnT!DsWPKb4CK_YV~RU%L4aBPVE|&03Gpd&Goc+dtQewD8}J3tztMoof$P{g|2EXBVfM$iH#n z#meXYzO41I@4WGC%a`5ww$~?)W3UhPJa@5er{eqUdhX|?TVhL1envk=uVqbM&b>41 zb&+D%XaCnox%2X5`^c-0weBaSA7kW1*K?j%>gP(SpFS?&H08g~;FtekBu>Y}r&-!V zLc3-QI`_{6PMbG;+}73wue~Gvo53JpAZ;uy>Bv?Ve zx(oU@bR2us3p$pqxn%v?zE%Af_pclD5~O*qu~e^!b&RaEbMJC7_paaH``ggXh3+@q zEazvH`jq_B2QKJev7x`YBJ)|{#Tv@TDNeDi}GF!tMb^_%>fK++HKC$(#gNqctYU^l<39vdU|D< z>v`&xTCY(j2X)xb3@c^1553&`<$1Em^*kEP83@Pehnwp;e81Sz&Gn3)=nY4nN6PGo zT+h@i`X*!N>H39!E^U{-$-=!Cc)E>dO-}t>&+c=$=lKTTWqJ7VuU9;;ao?on!6#QC z=Un99^U#G#hewxcJ)9d7o=W|ez6sAu-(-=uUoCIPcJ(6i4)9Kl_UU(mcV*~^9}PSp zFRXvGUtTlzY1w(rx(59={@t2R4cL_DiKAWrt9=dho`;UFcwafEd#1-*L#DP=6ZvO+ z;;^#k?d$6ym(9HKJr6x!U4MnTUjLAHLSjSgLu@$V+lkVXpSf*a827aKBGQ&eFBRQ- zS>|i0;p+XQoKHCKRr;NYL5xm~e~H~|^D2QHD>j^#4+K2G2MORd_NfSbTHk)|wKG23 zmhV*Q3g)BYYKXSb_><}IF>>nTLwn-l15Sn25%_Si1)3#3wSDIq<(-o@>ADra-&#zF zPYaJ;D?ByP$liB1o zBmbwJ*R1Qk+Aj{R({yx&O|e%T?fjLlZ&2^?d$)Lde@(5mnAv$r@R_EUl3zM{v06X5 ze?{vdcNjnEJ$-ricUS(dXIeSu4}qWb?L$4sPTbygZu{2rEd68+SMPyxR}eebZ-?o# zW2dB)dT!)c^?aJ21P|~*4)1koECQdl@RQw{#xa7=w&gol#)Em6`uJd{W-0g>ITk+C z@_*8vxcDG9e`y3hTx@~1tDlrMY0K`5%f(=);3$_EPgKd$?XyI=Oy4Fen3ySFtwZ>^MJ`|R8TmD@}X`jd8Ev+)mW zznEXCY3Ha-;WTp4=r6-#rTo3%k6}XJy62M0%`bg+Wo6+*%2&-?o^0g1ROG*9=ZBOZ zyt<}`Twhsux6(x)Z{727b^ZH^{Ur9Go?|EYxiszfKYKP_yk17V2m98oN;mYJZGTei z>UmdGiot$a_sQ+^(O;+QuY~2;ElS5$&+Aw!^>U@U03P6j7U0G?)W@gg>G#vtT(GwP z(*CvZYn^I*vRWrD_^iHhq*4v_!|Ul*_+>hL!g2&3e{rC!MOKGduS0v{;-l}I{(suJ zy3_iGvZ+4)e)FvIWJ{ZL-?Lv@84u#j>Cc|UUxGL$B*(5lS_*!Wc00~b;`gA`D{yuF zBz_S;nLpF-Px}4Ju47-nDo-J$N|xiUsz2HC3Ut}8r@tpbo@_fm*61ef7sobgn)`@N z8(}x(_a~uhe6H6UKWEF1>Q9RNhabOA`NgMKv>x&VrayVlLno{29|`|u42K6th_8I9D{(E8mlI$1t+{m%w;c5Lz@BkmA zfLrl`2z=V2KbdVDBk%pT<-1o#6XG-Whjf0@$f=JH?TL#IIF()%fe#m3pjpW3y)qaLj5svEPMjC_(|IBI6sNsgHo@+6_+Rcq(6yY#7~Z_(teWi z#iQ(T*LK+t($nGY2eI=n4SiJm#i@^J8W^(0AGzChU3SIlC0l3OPsXVy@^iNxsrGwp zE^9sPJ98)Pu`GAe5$byVLvWY=3ihF%yLKwR%N{pM8xLCxsOqcO;A*z*u-NsxYoA-r zCmc5#4Xu%Cps013dT!*z*K@%KJirHL;Kn(0uI?`oe3mS^yv%dX6s0|+{i8iB`D^58 zCr7tB?cvMyT0L2%R~sX%b?lqhvR1aE#llLQ^c$MVt5f`hZWp^g)mrE*B|fzAM5~boI~3wo{;*J)qX{(Kbtq*5$Q8{_ADsz z1n~p$1iXneIEQ9D4%u=A+jkM;kmL=r^M;LmTDQOX8#Eoc(WX349G&pLUkZI=<(A%w zeSi0jnT{vu|GIjK{5MwqsK(6l6|INdVa6ffSh-zYud3_y58?^zLw&zoUFHD zywv4K`GB9_P9X<>j-K>OSob=OpI;t+tgA*2dSO4tZ?U7xkMi(iUY+*T)sMKGb@1$s z0}sl>k98Et3HY&2*YBUP4#MR}dH6A(fgG0~aVhh>EAZ}u1M zmyzSNU(WYn!2^8QvkGpm{Pr17(D-DvUWex_2H%0K6+m* zcePHz$H)oeWB8KufE)+pJm}o0a~_Zj!IaRyf}95%H*}==7KhuOkFSW%c~IEz$yv#H zpq}m|_3y;OMgF|@y8V7E>xXlG{?kHeeW>WZn>I({{|kryeJ#hq=pS^hgYmufIW#e& zCU2DYVOW*HzV2Rl*bz5zo|bmKTH^_YAGo6z*X!w(WzK`KqSkBtwf6fKj?0FXvfPJW z?)~ySS>!yZHt?r{i~JLNNuG`H{bEZu=K*@6x4NZv@H|pxN8~)9UNOEo)UWHAuiiA$ zHaQQD&Nk=4c+mb&d*s?5PPlJ#ydnH-S_RKsLsc>eIKtJF46MB(J+&U-y(nQ zzdf^Z&%16~dc-qIN`7mHystZ{qC9U@&I8^7-ihKG{Z8<%xRNu>m9LiG9_O-8e7Et|EtlRd9r)%1IxJ?@g8u$DB&_gdhxOeTqsKR1q_i{chMlq4U?^k7i%xz_@ zhumn!ybrzfdFuKfdCKi;XMX7S6f=Lu@8W|UTw1fQ`^P5E)0Rh+;8RM?cy3SrnA!O@t&tPp!=u%xw1YAy zfnRmUaJiYd1WLUE*MQvV^%bp$eMiTezgiyN{qCjqU#Fi5?lN}Y z<=cmPp3gAzt7<3>ZQkc-M=P3Pg~wd>ee`Alp{!R+P3_d%6P(f#^}-9FTqLTO(Q3a z(;Hvvd2hT!{aZ#o0uS(^y#Y5@`m+APzBMU!G^Z_Z^qC2KPN{UwlD{-^!uarX!)DLA z-~NLScYqt`P)P?cuwih`Kr0_iS4`5DM-RSjmernUU4LFv8BZ8*8auHLzR#{xo_tOTov;3FBk91?`(3 zFM$ttfE(w~wBr?N%cF;?KN_Em)}#wQ+mTjw08XE?|-oa?|@i> z--^mR)UNM|=*B5s$VYh&*}U>rNdRKA36Ovr}Hc7`eUMF z-2;D%eek!9?BuUGX?YV^cKz}@bbl|Se!0f=(XE9yB??F#k+VbAQs~JkUn6@_x>0=mD31vOIX(f2sb~%#K$QMY{Tl z{CoDiSjq47^^iNvyz2p%zh7N{sk&bOpk2g1)Hm!DS32!phqUF5UfJey5WA{OURy?k zeu$A2^@}xNQP=AIP3$h?U|~6-{>8Mt%isY%@CG-|p*8!?!M#R;&+66pZ5=w6c_W@U zTM9m5IR+n<3)EQ)PCMe_6Q@<$_djiUqgTdzmsOi|(vPp{8BbV$j2_MX0-vxPgOA}Q z_sP5-?RMPR{HwqI9Hqm!YS*V9g`a*{Z}-DGxu^Ng^kBUVqIw?;q=WTz-^?A9x`LyP+TP1M4Hh z&ny0fy&u#A_JF|GrS0QS^d7aW_Yh77aii@|7Q2RM@f?3*8TtK8Tk{Que2e0yl_`;NJ;T0Mouz+!d@vCr#N-mXIyv7jC@BqKNyXZ zj{W1TlKk)BWaQMxi9LnvA!JYC$XoQDLiQTE8nCBOJ|%I+hJjW6mt3O1oveN|^UW>0 zHBn#l@b{p(@<#4|Y*zLZe)s3ktPFqTW#ysOdN1MRsHRi?Uc$-Wm>f2ud%;z-!FlO9 zx?fT}NYm-o%{bC188w!GooU5nwf>SKvrCD(B=m^+cyIr~HGE^}K(j*boW8oSyWB6T&? z$MW$2pWKleA8?!cmW@x^Pl}~2Z!DJW+@s)A`#xmCG1dJ4m>ALM)c6h^x-y<{uhDpl@5IZP zw~-UZho=)d{0*y}^Zl}m6D7L-*seJFbHo{qC5dmp?`@@W=Oxi&6xbszm3B^WGIHW@ z(vswU8Pg^Xa>sblhd2^S{Uh$8TOs_mt0satlelx_?K+~%aYai@Yq*ko6t3?qPX=S= zc7Jb?Z;+AU@7;Q&3i_D4!A?o3)HfL~F>(grCx!ns_L~v_(}f` zzlfjoFME_PJZ}5Rwpk0@;jRU?_ssAd(4jy3xlxwb{TQw{qQC7eR-XNxy~=Osdb;vO zY7M=gzp_!etgegvy^k7F{&ByW9xmVC_MTqJ9eB06UjGo>YyAe_9@O*dvuwLeE{SZ1 zTdwDR8@$dd4R*AcKEr>oY}fpYO(!0IU%4w`zoEW$Ii}@6Cgdm6!Qt>+I$ojHQLOE|y#BM)ySe~;G8!Mz_-rqa&(e6Pkz?b-GrRSu z%f|(rxDWg|hqhDyJIl4&f|HDo@SHP6r5;I~LVtod#f@KyJBTxA*N9hGV+B9T!;kqX zz((g|o$K^-;V1B^0ALZf4`-B|y;(3{0U|cfHPvQ~Q{83M*JUbqN zKh$4K-UjhVx0hwVo#z`pA-dnuvV(`QPw{s~j@_QR?I?JF4{I~Q&0+6peA*!%nHhY> zW8%dG_<=imalM{i zS?iXrYH;v5Iy%@#NxY)FZR)0vk7vqGe!WsN6>%AB}Z`584 z-T~f;Qc1rPyesbGw9DFp-KMQAu)ps#`CQ$mPaUOc@o1a!Tybj)I{j~AL%juywwAXY zP~K5%;za(V-&xdK-uA|FdD}vzha9c1Ex*oj+>}j=TBJE#++;<*t}93U_Tm z&R=taosv>wLLny4eFKeC&IDlcJ&bW zMf@av6UxIE+BR#)JIGVao<)1@_}FpUFIFGVX6^WoKGfa&seig+hxtj7|H#X3R6}D2 zRJ0x-qUn!5^m29mlMRQ?q`j806YN7h?|jm>(|lPwE_N+F@3!*j#$;>9!+mudf%<1+ zcNvQ`a-!=wT)+ujz=`)6{N~HralvWxrU%QTF=P7J4a(RG=SeB?jFA(K6Zn7!_#g+| zIES{=+;x^~#|58l%Xg{poHIqm?&7!bQ}`|9;mi;4|_9{oaDxyjv3& zjKR`lXk_u`u7gikAg4Y)-~m2Wzg+>h`L-smI*=^xYYr82x8NgjpOItZ!<}wD0vB-N zKJeol+D>uBQ+Z7saU=a}cU+8qF>watCB%E-{u%$oIv z16>%X0mVNXIW|5Nck2;rEWoMJT8p{9MyzvvbR3oS8Zjd$8Yl1y{E@!~2AsGKew;(+ z`WmsxnEqncYs8G4Xq;Fh#+oqJh)ujvuMuPI7`Q;gYs3ZzI{cI*Dp_yGiVc11E?FaA zer}YvSMoR#2f=sZM|$lJ=g^TqKRGLF#B#eGSlQC?7H+B6}Xrf-vaIIK!xUw7>g42dH-PfI)hOXCTJA5j>3alM{i zS*{Tq_w|~ZwBI-0NA%)8^m6Z)=gDM^SkN9|A)8KHBNn<}Z0W8MLr?UE8_y$UcE}nr zzg{t3JoJvI)*7(|DvLX|{Mii$pUgl0mXrkXnyTzT)^l|?VPvB%BV`;&dVa=1jx znMcSlYQ}xzeMxL+X*V^E_|V8Zq7h-ifh~`)kDfcg2<5ZgbxY zJigIuuMr!6iEi5`799S_Z)xz{hiT&c@asR=+x@-cm+q)FVj}nBynUo2}qY~>HX z{#teY`whDU@=nMY1@<8(bnR4He8~C-LU!|G!ed)~=i4=Jn%MQG_kM6|F{Y1YTUm`^ z{-23K+-vpD#qKf&YUD)6gzx|-Z~-T-gCFP6b{YfCa&A>{TC(J?t@f8^&XS7VWp0&r zkan?iy>1t2FI}1KmdAX77riEE>ZN|nJD_RjJ8bGcmwP^x+vy=`PoXy~o9L$BeBTx%$^+if_vcK1Po5TTyw;!2^6o{dNZ2ruMe$PuiSk zY0Dcs-BGJQS>=NfeB_(*`Jk^D3Z{(E;Mdq=t;ZELd;&QJpQt?M-~m1;0B&9T+xVo7 z+tQXtzpV3^3qG4SU0p83e8UU5(5}$f6MsuWiTjM4Fg{@pb{=#5vWpWX#tvv#oU+Yh zF222b>xn&6F=Ol4BP|6dBPR|gElKW|xozSgckUQ{h$ErYKk!}X-zfYf?j+6(;!b}I zl=AR}X0>N)UF~}XDqr$>&FnHp3(tGDzh`TK_a}dh#$MAmx>Wn=T(71>%WMj#xIJ54 z3w7KHegD@UDnEGb(PiS!^~Zlv#VgZ~;JLiko@+Ws{TGpc*RETadfpKgt%v;G#GUW| z+V{(&`<}0^*FOaJl?r$4Lw(0ilpgwTJFd}lo~_TIXPM7Z;?Au6rr1^O$gOn6(32fr=(QuE`HO~4ew%7)YDZRkwu~GLAIu)? z*`nQ!^ON{JDD?_lr};_WFXAT=NO{hoZL{`WwUx5=-OOdw&j;Hzr2S;qqSnT-pa1pm zRg}14{N!xsgBAJD|N48C4iBhyefshIuivGvUoAS;J@Av*gL*zWtnEYL{P*p8?yucy zxt<64U=h$V%{Cvbw&@<_VoW>SvYJjo{G^d%)$?h75hEDbv9H*uOhK1-JLmGd!c>zYuk?ycZs9U=ew^9rXIQ-K`v2MX zE2aKy-n6+q73B4DpFEp$!AItO!gBDzVF~WqI&c9e?gc;2q3ty9ljYiXjnf^GzJq7a zf(lO3pJ%NRaf%zivL=Z*1Aj!k5{^@ZALRpn{`?_wTz=F;`WvhXLO<_lf@C=WlziIKx|27LW~JL82eKgz?8aWmxbyzt|B86S4}Q67F^jU1OB^@DMi zu>GW;%^EQ3)#MsGetX3_h8!%@5?%#|J#X2Ry)yb7=d-4?aE_=LIdSW6d{DoGm4O2+K(lKd`pd z#VJm^_F3PvRITz`=#6BI)940pvaNS;oI#rWJ2)9RRy~@=jkVvb^=9q&*cE#1H*3P( zf{|;#JI=azU_gCKUHwb41YFhx+E!5C*ZID^78kj>`yQK>wcj0IcvH_#*Ir-AZ_w*( zO7GHi%#W9HJ3sx$tm6~ik3+$PH2*>E=f^i|+WAqNCS=p}ZSr0Wt5Vq4T@wsL;uOx) z(!%{3PbmDr9lf|-Pp>T3evkY_>ow`?hhE{hZ&>}2`_Rk1U&>{%_IoJg_k^c=xNE<| z_lqsvwcqH8-tgmjq|A<3`%S%KymaDCx_+UbOS8%kddh~ri~C*XO`I>>dx59t6tY?S zJsOOc#VPUVR?q8Ls&?`A-gNtlUKua_((xx$Zo2&}_1hdPF6-~R$ed>O>r2P4sC2xh zSLv|#(wlC7ttGP=AyU7ko#%O3`@O*1uQn#XUA>6B1H2RCZ`SVw?}{rgt9N2U|D|g# zQG1kJ{z=cLzZ3S_@1%UVZ#0xQg1?37PN)2!vd5P{*VAY}z)a@O=$+sl;GM_~>UV;7#g&}>`h&|n@93kO9(7^7a`tGMd6kCi56)B1mEj@s|Mr&7-b>E@R{4^% z|3T>?hgpAc)gO1SbUgA2)sECZ6z>%#j1{C*vmo2FULpJq8O z^89VTRk(hvoDcR0DdU8WMgDKr9}NAKiAzJbHT)@dudUk)F_af>f=Lu;^G5NQ=hZ(nXBs$ber_Ka#!$P+xT#n z)%pV?$HE7*2kQ@Lx7~4MZp80FsaN2-(7#dYt;A0FMf_xSqxO@Ohc7gHKiOJTJ>5^* z>-2IX+AmI>t7+*3-5)r#E$p_KQRB z)-?Ynn<6C6Pv(E8_xnJ_Pi-2#raO6mvbE-k*vlSdu1Yj-giW1?njOSpb==+Ei)ff+egJ)h<$!2^821>DAOkHTke`pGZf zeA?Eb7<^nmIg(4~Cyku?_|TrX_<&PxtBucG_LFNa{Fg1`G5vjNQ)YfLkYnM4*#kdG zyB+5z@q19}6}Y;762FL_?0UcUlavn>@PB0QCtDkipYA6Yd*tO2I&y{fixcN*ntOvy zd9FA=S@6I40~J4Y(d$p@N$w|GdoJ{HDSq;Y_k2$2ak|n&j@JDo_Mx6*C(T#o3;BXw z&*!qAyy*2u_Y4L5n5o&?60V;d`BOSSY2;Y-e43vG5AXpOaGU&86h3p)PyXsg+VqA5u!? z)I7H7f_{O8-U3he*w`Pvv*jlz3feDDy+_l+MK+C_lSiK%>!f`8rQ`Ez&BF1$_{o{t z_XR%a0hKiq6F=-Md)^^EH{E`+(nAj8C%<(3k?Q&x>U#Zy`AO_UJ;zRQrPIzYrY&#u z$~Nzd*j26S=;;c@sYcfHU-`Y#wZmaKv>{5$G(QO*;DaXM#yPZR-}73S==T|9hflYv znc1zY7ksweRqQDy#0PscOBojr%Q5&|*W+~`^6%>3Dbyd@6BnO2xoPd2w!G0R+kJV` zCKX?INN;tP@CnN?_=KKL%_qt}A=>XaKZ)OiQm??3c3AMP%}@G%5kEP0rS_AQHyY?) zS@kDR-7v6mz016bbMlCILH@d3EI(O%pZ1GgAJBB{YMUZz>POf9lJ&y;O=!{gkI*B3 z@T%U07ye^U?jN)nIo)gI z%YP5-+V?cyAi0;FIDVw6JVQIB^pk;{a6CLb%};^{_>7&e@d3B4FGk_h^7h*dv)*Kn zkL2?ldPg)qyZZQyl{7w`DaXZ)oG?Dq;~4M&pXw`oeEfRU`Oi`K9MklAMe1XAvp6$> z&l}34G5E;(b~%ctX?#jvy82_})W-)rz-Qw9e*5p&qmiFQ;1v z$bRVM8lR~@rX0@<E zLeHAPOpuxhoVG3ByD|~;ZSsA63r?J_ahiOh^?D>Y89B*t0vB)sQ1Ig%s^jgJ)97cK zPo*~Qkzsw>w)}aOp&*|sPaI9d`#GcUi2f_}DJ;j1>~%Rep9=j%7bm0){fk|n{CR?7 zTXjrl_pcfp*Z}v|snn+|_d`oxbK!;i_l#d2y&w7@U)AbMbbV@7b8s?pV(ODGK<<}u z5c=hD;~)rNSNi zP~WSLoyKp7uJ5f5gk+iLD$90R>{?p3ack$>qU*bB&50EKZ1JB)PUHG6IDrc|p%3_R z4sEAASAtXNz~ap^&L}gBXAP{nsDJS6H5&#u_N_(Xgj8@^vgB#ygtxbR8|@ATsXBOW%JNSg<)WZinz-RJIjSslFcJuLRwHx6v zwc_$^{yckpB!6ZxH15>APK`@Yf5LL=;R7DvGxQpb54gD!eSBIC`@rX=F5l+QX9Ax) z%9FwPaPt}^DFHrVIrZ=X5AZ3h(D;CxE7QlP<#8>){=CZN+x+=V;PdP90ShwCsOE`J4OOEr0X2<$F{{gZ3?KwdUWRxDwPKBgg7DO`AUk z5Af++r||)|uAfHY6DPjm-?JRQ&vG0~;)89=pH<1dDOta^;e*E9AoxhX*2uB&F{PaG zdvF1#(knGi;5YPW6izKyBQMMG`|NQ#p)z&l?BHbNB*O_@z-hwoCxV{=SpU-P-SI8= zhq4?e${we`tBk%CoZKhR=A8NzmJ`*oy8R+>0VlKpKhB};G)^QqWi?Ku+r5>MV*xyS z7F2MO@p$Gv8IO18*BD1)Je~H9ary9gyzrwu{8-n69G4&Ukoh#1ALZf4IuzuvF97}6 zSHL zvA-NS=m)-xW3Ug$8bPb8m<%a8K#V?F~p z@Z)`6B%unV|$ZL#W9Qlxr zGvVt}zdzk_{F3E(ZkGElc+PyVUXj0KOQoHw2eR9XxTil=>5v zQx6~T0H5){*Z6>&tDTQe8;s}95I&)H$9?uJ&I5cxa_Zp&9^f;1t;Pr3T%CM;+F(3) zX7HJurTP<=Qx6~T0H5NgH9p`LjZZs_=gtg1<0H%`hOOp#te1D~(d>Cpe*!t4@}j{p zZ9Eq|z^AZD;{$F%N&kngKP`uEUUuWTK0X<(ALTiVG2?_G8**z)RPd4UTqDQA$MAH< zbHN3i_>KtpnS%P4#;N5nF2nKMnZYS{72||9GK*Y8w0I6qMou!Ezy+KT4}P3OHBRj? zo;x!*72XI=JaM)ZoWgSKH$uyE`$c?z$Hgg5JJw^j8rWqw?mjc$r^*k5lWo1MzfWc4 z#MCDr0KQMf_o(KXkpQ^X-(lvvZd*{7kdBYXEE(d*XTfy^6KaT!B z)yR`i&dT?x&N%q2^7ipvmQG!!_t6)=sp*8jZ+L8Xv;R?aXB;W|=^Fnv_n?jgpp8qk zc8Ap8VO13Sy5B8=E8|X_r=?XNPbmDr9lf|-Pp>S$Pc`&i{hsB%XTNXYiC)}?Uhe(! zJXw67s@kAGA-Kpt(JQBD_iZOPHiv#kv9B1KvO5ZA%Ra56_%Nt>O zKkC%t$o0rdOmo}6#ID}(2P^rY-x#*Kk;<>qZpPp6w(G4vaD*>cu1}XgeDcP3-}Vxb@!!{8 zsOt3a$+s@Kyhf*PdG5*n{ZiNce=1Ln{w+oLt>|C=uI=#`JG8qUq+V`UFE()_ab)!x z9Y<2X#=mUGkt@IK#*wG38EQI;^gLBc>Q2jt#E}=)O8>FuiuY3I;W%>YlYW12o2G@E zY}!chq@TAQ+HvQHdhb2{4izo$p<*@3dnW&~KlTpwgv0HW$nUuGUM2ggverXnoBW_1 zcaEy-_o(aj5BwnZ!4DR{XUEr_zp?#b+Bh(6dGl1=3h4!2R&k`*Red{lYu=w{m-lEU zj=&Fw=JQ2TTpS4=;FI&;V{pseVdGPa(pu?|`45}6JT{X!vW8Daairk0di7&li+;Yi zJsaRNo-)oyjy#Y5CRqNR`U4)|!}EjNJM_HOg(&P?_GS5mH$HoK3r^pw$@9UE-34MnD~r)kH4a)>ervWvD$Re zsr~{!$Ps2yEvejBTi5LS*SI*JxCBbQ0#}LSFKWLG9eqHbSMRm`HG(_eW{-!BEYjm1P#HHl=*nF0jvo*E zhqCA)dZ!r=!!B|4yzm3No~MmN(v}A&_2#PjkzE{98xQkVmh=Aj_a2e8&q!w;#{4DO zFX}mRq?FY2xHyLQ6@1+Hw(y9JPug}gZF#JabvrEMEeBost)6i|{%aJ+phvS5e2^pM z2im+=lM7@ku+Lm9{+kd0zJ8VXIevyr;{@=dU8IW~8_J3w)3xeB$sC zKS{eC=O^)dP})QA3;RhK55qs0@i1wH+++CU7ybUx$nmh>{AE1sFXMc{nCILX=Od0J zZX}MJ`ml~8sb3R!+i_&~SKaY2H5j&Hpr_dc3aV7c;6O*y<*2y}I~I6rYA1iFx#FjJ z_IJwjTXeh#9s0RGhr%b0cJ8X^N_YZEkTq~RC{}zf^e5F7C{@P#uTx*9Hd-iv*t((-%@EV?A_eg@O}ughvvb zzy+L2pVv5n-{kjgoYL-hNn0M<%mhxWSO21C$Y0;TOC9T>Ln{=VkRv>j-~=w96n4)v+Erv_ioNIl?0ePT&Ggo&T+I0>81J z**Lvy-Kv3$*R0b^6!QeM}yNy#% z->QpN_pNHVMx`wePFasXOT4#v)4fZJe!p(_I@U8fH2+KLldNY(j&PWclZo@d1ALGO zZiPi|Jicb#;F@*)mt4Y~&CxRk(v>&Tvh8;ZKC4&X*gffwi!_>FGkP@l3w)3xrQ`6~ zt}f6ork~vPZGZiqKW^ZUg; zZ`OYoyGwneeo@~#zo6?I^|0$sr@o!`rr>)QwQv3Ejk!&$S1a4mVqqn%N7Xmk@8)?= z`cw5gTlFpX6TnEH0SnjbhzbgX+&->?t$ z&9zhh=XRW;kvgyC6`5I%Kg;~UNJig*(6~Ojb==?A6Xl)41`Y4?4gbB-Z~UN<6D7&S zDc}J<@CP@}q3zTj3O-roJLUOin$jN9{?Q(?&zp8~>ObxF@X@L}U%GTq^}5dAIN02m zV=rAbu-0q3l(EXb%I0saof3c8-%U4n>R*$0>UOd8U(xMjzQMXvGqSE_!$AgYx@b{a~1Xyimo!e4<0`0(C>Tk&@`K54(dn6^B&$$I=l@Y%Nf zjg@gfPg2xsCuFCgVt1KGL5}cJ;bP2T{1&)?69vF;~ zH@>Tq_rLEU{ll3!s7J^V86wFKioI~&oo@Aa+VzjAo8&ypfJKScg^#Rxx%--ILn zlyhilndwKIB14s2Xp(N|zjVzdDdtNTJ#B&Nsmp=iwDUJKsgBpx;Cn8*-~PTH&pV*k z^EwobUT4&Dpxvy(E#5D<@1)A|yc_-ZX@R$2Z4ZO2pn5^-@u+~mmlTf$6g-fpci{KScA&m4VNF~;m2AcjOjy4JDbHpTW{n<`Q+h~$=yY+E^>E`{8;DiBBz(D6S=!e{i`nOs3pc@Mz*;; zUheabI=PgPn|t5yXC-&n6~iy9l-~KA%E+hm*w*+*H7)#6e=9!c=hzXwME7QMT@`+! z`wGzUpXzfc&zm)s_hDEu#lCJ%C*(EzJd}&0op*2kU&&E4?o;jyw-3YWkKBh|?){?I zV7l-F(TOPbLJ#z!F#3vKS>_Zgd|%tEaPoiG?1ntoUfhRX?)_3Oi=1Nl2Hymf=a+wC zFBxME-!JvU%_)YS=&f$49XyYe*%3L#sPDw2#sARt-dE3?I_Gb!wRi0jlP=slxpL%(_3D3ZKdb-=c{=1fZmmlNIa@z((CqpXlwYsKKQA%qB0naTehTjZ@5Jag^gF@3GJ1jiPHef`9p5{xZ%`+EYf4Ee z)nbadnjGmr>M3ZQA4EJ=cwg=4ziFQ{`fW{zZn0@2WpjJ${SeThKi$|f{=TvDOpou$ z+W8{SKF-7D)85^P9cKi0+iQj`#ufR1N zi*A?p()Ww_$&szvPf~vDeA`cEm`5v(oAeegAdi;bHz=8y!+vt|e(e`Kzolv6KWvJ< z;%L#&_X4d}uj%bP>?^8GoxORmux=v1TD?#C!H<@;9&*+A$!c|zy8eU2eiHjo&%3^+ z?SstH4R$?GJN}-wJbK|Lvl_n_yQ%N1_L>|o-=;0pU=#%fCu>S9)sJ& z%{D%@dBzk$d)o5gll8t%!Dq>m!^_2lesXG;bop|PoS+?!+}8;n;KTES+sLOP@JW#e ztAM!`Ik!mG^Zep7 zIuBdfllSvz1y*wfr#uHABPUuCaSVPnE{-8Cfl{x))s16_TZm(FU(#_5<%{pN|LQM3qarznwH~&n6UD35^-guY z{vq#?^!Kp`_1v|~(7)RCJni?IQfytb9%zBTo@XSZeYaxMkyjqnQ}FlQM%O+|g_cgl z?y_FQ$O%c>a``fke@?#=T)+w8;Kw<%oz^*K`CWIxY4fJHF6B9AiV9BBzoQ+bT^y?T z`kW?|rBsJ1)=EcD#zAkd$tP#v?23OYuiW$34c{Bu zMeO3%H@FtRWVefH*TJPNk6zL)*2dW~Y8S<>p0~8p^`_|WZXp*s>dzH(o|Muq8ac_@ z#VP;21*fii?Dx0$O&h0TQiWpfOIzNs&30{ty!+Se`-k#q!hVF&qq$##lZ;mzIU$@v ztf)ue0Y0=Z;8r;JSZhAv)gd0O{7hTk$jly}ZOiwqRA&hvBd0z--~m27Ke$aEWaHC} z4}({jrY&!HWjkIi^=I4i&dSg%_4ACJczk5M8vh#C&m%s8;Hs$j}p%izYx!` z#)tBq8|-+d)VBNB?0utSKhW)d=?=U7H}6YxzpB-$j0F$xsCY)?Uvb4V)jqZ8eQee0 zAA7I(!y)Q={eyNG`%uqaJ9T~B_LKe^#N+F8kH4B_KQGI8M&tVE*0GrHh`LYIwP)+& zq0-MYa-!=w^1umPz=`YN$2qi}`gwv=R{PlmC;7er&pA_+c9C|Fb`g2Bmz+blA2BWO z+`xv5`_`V;x1L)PQC&|unk^Ra-nV0c_ph}x*5%v#d#h#L9*$3FIx=a~fRX=W>J?wG z*4~Z!^8wIxw{EI*KlG-pdR_j6>TgA_%Xj%^buRMn-|*LJeCtqO58=E}+UnY|?$&G6 z^}`a6e_qvX%~A-8BRBRaj#~Ux&3i zVO@nE<>AK|6>{LiTo-G7SS#T2qdfeWGe-_{Y3RuqJ$*BmALZdk%!wTMp&$I1(~~vm za$rBo!;d**FLnv1942v>A3yTEq=0DQ$+46RNY!Hwks-oY6sPv-GcK*|_0MW<5c5yQ%nj;& zvE0=<1t%jXgi{1t_OG#Djs0t-U+evA>}zw2#_nJ1Xf6x3{kE!a%5>ZNc92_`<^5|z z*XudD{7srx{e5fs#ilPWy3=l=XCqqbIJ?$2f=)eOpF%l&Je$7?&4UQpj&+=pK7 z{i0_U``0EL^cCd!<)6G?vVSdnztj(R{~CItx4NZv@H|pxN9;Q3O+_o7@z6;*Jw{%e2_ce_OIoBH9PniIbnRTx*6M{-FC-fxD&qz zrCxz+ICkHzngskJesW?``$@{f7y4A$zc%qp?H9X#rRm6LZOZe+(ZU|OuLzxM``54! z^*sL>Z6EA0-}bNN68g!)LNkVdt&&jMVIxP^^SJ$M-~m3o$KW>K_OF$Go~#`nNwHp| z7RLl~f_6A^{~CCJ5AOiD&A0t)W4}y>Pk0Otnag!a?< zU)%oLeZIK!xwd}|dr;3^yUe%!Ya_w>gZlmbxc8&c-=+TM)lEiDsGirEO9U5iLJs(G z4sEA(jZfwMYqW#3i}~;9c9HfHdqbZp``5-E(d{2}8Sa>-{@v7mb``?IQ0jI8`6D-{1MRe{E!z;#4CigcFrRQSo!K zRtY@7hxP^B=G*?Y(kzWv8#(py0T1v2LU5aJ``0=jnw@^0krR)P^z-nqas52v6DWQQ zT-|;i@kTIo#xyAwaK?fuNigU zlhR)4;u#|+x}GBse+e$&#C7oF9NJF(yr=U1HP$-PE@EHWOU|J;?KExwTK{FuE&r^s zqDU(_N`!%YkL~?6PSN|JIkH@h zSxb-Hw3P8LBd1=wX!c2g3pnMT)Hs3P#9nrug|z#e(w4_gS?`k)oHlP7E|(JKlR=MW zDL5H9$#4P}a2oo9#tHl;PqlGc(YNlx{&j=Rsu$d!wmghxqCRcj^x5+0Ea7D2B*O_@ zz-j7_8Yl1@+26rw!^VET(u2*Kp(|3BN7l^XbWgeKEy?0R^k|k+pNyPjIDrc|75}Vp z0>9EJHcl^Fw`$HRzL1fTOK|$gVUeNrCGws$VrA1xCA&I;O}km>($gAHcn@# zoOT!Yt1tMj!eY(QwB?aD6F6;KzF(#D9kWxPjGTlx`M7`+aWMFeFSc>&>05Qt>b_Mi z*Qm7R!HMsNX7zmzi6gcxKfIDlxbDR0(cCX-_hem=krRcJiSxh%e2`Z3aqHa0#^;QI zHR}e~tn0r-f3$|%6VtTiji7AvooRetQpr94SAIT``tvSEkLG>__yls|@saUJ*10nt z>8|Hv9Fg^}j6<@HHas3F{3s7U=8upAAJ(C;4wrR&EB6 zpUl^=H`A?u@O9~2-&;Nr6TfG@x7^4H)xSFHLD(~!6sNhqx4asIQ`URSjhqlpZlzG? z>@8<6IeW_|zN+_@v*+9`8o#&vv^7Kh7kC>kPc~BMdW+HH>^-%}9eMBUd>i#D^=;G( z)VEQqckA^tQ}<|E-C2*X5AABk*+qBSP4sL;r+WN&+oz=$=yPbJ@~vK%c70eC#=h>} zUidcqJd}&0`5ukuxW8wb`@-${u=*qSp_hBV=(QvEmZJxHp+EYHURmxfA9|6tSGB?3 za_&Pf_kPhci@oK!qlxQya+}KY%RhO)WN&%+eyJbs-g5LrZ*@!U;CZCXj@VmHeP>=} z>dU&``|3?2b9QfeXMMcq+}?8kd8780^A7M%6h7u6-IrbrD#ZK5^zU?iaID$68jn=S;ro>40UmKs%w>NUEn04CTa_|5j zB!Js|+go1vhwFZ+^MTaI2Rk)O!NA4Iqivy4|3<*-tx{5&JI3CP8c7oZpL0H~B zg*~X}u3hHao~(&kT9abrgz9;nF*tAmC*D`^;~d&fYxSPWd$MQ;X&0+E>voa$5_?12 zcTbl6t;La@{dUl&T?hI7hoh3Ui{t)URp?yXlZAcU`UcMPZBJGq;Ws!Y7n!kDY?Xvc ze41A`8ac_@Mc!L*8hg6^{?4~OSz}kvPMm7wgm4N0EqKZtA9#Szgx|h^+kD%TH8M;6 zJR_$*KHvd9KnQO0ZBJI|n%Sv8Mov6FGKY_UjqB$TpFr_j;Oh4Ch+l|ja^KVO4CTQe z+Aez!-h-XIpWSfq$^1iKXkicS2gaXk`va~wqH}KVfo~7$dDqdlUFO@~gW@dZ z-Y{~a>$!dp&6+fD0jK;S8YkZ8`L_3<__o>uXZbk!_|3Py2SW+_+l}Iwxa;({jhtjS zfeSe0muQ^8Z@%q4n3|<_&&WxJ6S#mAaWMGJx4j3Y56x1)E|3$2lZo@d1AM5b;5Og( z9!$;BxQLMxkB`iU(l4f;Jb8=1Zpa`12QTP#pZVd5zq``&&MNg?(7)mIfeZRi-7v6m zJ(m;H)=C-n&)#)`r~CYW^3xUD-`<`$P`B5mT{Ruw)2475`G#IQ%sI5{PY3;2)+s=@ zJ#gD8a+CFjR^qz#4KfUd}wExon{y64M{C%OfOpTB%@Ur@bso2#U-dvgbN7~K$$`to* zecWI6Y=z~h*GnCIUsnGHAMgMl-eYj96%GBDcF#!f<*U~Ax47Rcq=u@K+2gbN&>Jeb ze@cc=DfB(HuwIRRi`{E`>OyifK2j2lj9&u}@PR+LaSqk^9K&hTv}bMqI@REI9DCFY zI?i6xf7$wh4J~c(pAmd+{MX7zC?2TyaN#`(_3m@8flpYD!AI`4zX42p@8aX~<=o%P z^8(JBrP+O>d0Fi{ky*8G;xkU(|1FhVFkjZ}lO?+!e8O^Ud^8`qPsaQ4t8wG~#3fML zJ#cl$`-xkKV@h}GIEM1>Q*1wCTCSmi4Hx&VZT6%0I;TlTv&8~+7Cvi%_pi0H=v+gi zduzWuw6CUJ3vC)O@_&^6?hF3jR{e)jKc_78>t|nEx%u#SsW|3<9TLZg{3|}6uXw|E z`+A6;3zaVV`1;u&RM(%a^s9f!d$dx$VAzLxj-BF4r~TG_+VV!P?php^)!uWlt2ex* z()od8e$wdC+%M{RSdOXZ_{ol?-~%4ugEVmC9GbQrOKFKi{pB*n4?i)cgvZNw^{Ia@&$eAL!}sEg*_VoLE|>QG ze%CJ6+Rg1?=1@-Iz})kQ21Ek>BqE5AfkV0Jr(} z{jQN9R;rKBSjsUuBd0z-wD&GP;56U9-!&DCDb&XY`!q{w-;A69AB&aTR~u9C{cBu| zL|g);UV&>kMv^#&xP>?dp_Jzw+AewB&r%VcTIo#tC!_o0M&-MezF`$_2&89CAQocB`d`%0;w{`(6~Tn9hSq3yI+?5Ud9 zUD{dp&eP7i@hfYr*^|o}ZT9Ad+u2&**7@!tduxybAKG2^_7b$zKfnJYIcMYu{FGl$;K!U5a^Qpi!9Vd{yZTWce#}v#Cu`vu z3lG+A`g6Xnew2qF@fC9D#|QlUF=@u=UHvEzKjwgt10SB7F@EA(2@;P`Q1 zoPNyNg`c<9j`;bl+;#-ME=@bvn%x*!xAOE0ypaXPn`Nzntj0KNVAVzagJ<`z8XVZ* z>Yem_B4+L6qNEHO+$Z%w+Iu4>)ZW+G8%*A@q&Us>{CrcvSfw3*XPuwV$O+*Tfid~{ z$j3*1zQWyljSYGG+@cNg^L6wrKQ__4tZfC=9-J7RpRX`W`T0gve!i6|Ki~L$dMQ=Q^!e#rAk-3_mZ!8$UoA$`HKg_lKd_3<)_2S99x5(SC_AYN%C%gl^6XRdi?*#9PYoYed zJG8(WOLFy|c&YY5#bvFHEzPyOL)e3u)wRof%R7{trMyE%PAF!r)3*Q@aN@lNKhB}; zG?w&K&O1aqNV_=sLqArI@tN(LcgW7iHdgRsbDs_!q0c9~lC_Hye(rAQT+2Izecbv+ z{hDuihw^VuwqLclzv(k#t0a^$7b7QGyU2SBPLr>&-{1L`cPJOcv=ZTEe+W*seF%Y^ z5KbX+a^Fg&0(b=Y`0We0&9}TmW5GUznZ?J*X@HN92lxOXxXrh`LleP!J+t^2Iq~?& z+!OxQol5{G;u9!-3qKwnOObva@eA?H*w_4ip5NbtFSLF04%vAW(HGizsP+S;(`|pi z^+t5A2gfnZ?J*iN{C!$@GhZe)9dg zpG^N5yr6BfUw?tSU*FEp+xcQYPF?Q%*O%Co=YdW*`}L>%wXo2m9{gzKwr9Rw?T6nn z`}IZsxf9P(d&~dR*F!Wn`}L1{@LF~KZxZj<$3E1{s&6Ok;nKAG?bDVw`gD7>wU&Fi zYb{S%JJ8pBDi*P;H+*}g6v{VaWM%hD{F{s?hvk?SVETT2@Bkk)0XNQ}Y4_WwEsq{q z@7EW6Rv-Ewl|rz`2}#*f@CnQD@rm58KkBz9EBwmf=eyVbPmADJ@s5G^yG){EWhXr=T`D}yt!8)(&KrZ>fh`g zBER~dPw(}HZ>fkLA~}D@8l{UqPJZ}{>iXWnIe&Mlywfswh<#{FI``7{aqs7RuI2y~ zyL#S7DkH%+F?ix=TJ_g&M_-NqD{XyPj&4iv!&27tVZZ}?c#px&m6Ud0N^hIy02F*y z-*`i%Gnm_TpWHs5cy{Y+BqUY}%Q0;|7#V!P1ANc|+&G8M)f|8|d=9;-QVRN*JaIG) z?|X>8Bl@q@pRgQ*kCd@<8`0jo_(XH}yt$eKP<+NSUUg-qkg)#5*{9Lp!6z)o#z%9I z`(*ANzZx4O`Ed#H3GE)ZhGQfdQy^|3jwwv(F$K!I`nT^l(08`hSm*Z9ez|jnrlWsv zQ}?;t^Qylu658{u6MB#O^m~-go7r5((w0UYBL9Pe+Z#2-qo+|nIa<9^Uaq88Y7GGmi_qp8jiNDtU z2I$?d{c`Vt&%L;3rv0R=2j?RH?${cHi?9(hI&NOlYd@NS<_wlQ7aSU+@lzIiOZX840LL7ro%5x5FoBVto_4D)P zhqPZFAGZB7&(SO$x_tL#!|(n1OLkNoBl3qXKT1twy{)YEu%BS)i9MGMJ@I^*=Bj(h zdnEG~*oS)V+G)Pz=M%gB^0VWXa3ac-zb#w6l!s(9XK?D|?yf@3EJOeq*?um2q0i!;d|v$bk>- zF8xm8R+k^;;Ya+29CBr#CwuVOd*$+@Jp6dikpn;UgCG7ya?Z$s{U{GV=97>U@FAa* z-_PW|cJ-q?{FpyP4r|^Rr)G}>^GL3Kl!qVj6>^xjhaYPS7(aLQqdfcyemj92`0(6} zzY`C;{3s7UZC&-v13wOo(~tSI@bgN0Pkt-69f7Y))6Rotx8|kWn~D5-ar?qoyPOY}15n zn!Ziy@31O`eck+MFr=O3JT0vbYCNIv19$Y|dOf|e%!4;^nbvE{dEdf*Ygj4Eedy)h zFVB-j9=y(=UoIS{AA*bg6MIP>yzu>EOE(W5dZM?wrFQTzA*d zSDKpI`6NJ4e{7dLc>6wWfv4MOzRBlV^YQ4Ply){)Lww(hPrBoPMSoS%Yy3NU;?@9hLR z_igAK>_78VWvIjlr8-oxqmDkhX;Us#k=#&C8sD3?^Wcqc)@?hq^CEpd`DRTUDcZTO z_BoRWYC7`pE_YPV|7>|jjoFC&y?^jc^-jLLqV=$!VC40S)%E{W*XtkhPDl)oU6RIz zFT1$!!v6ZK>t0P;9_CqpFIVj9c`vMtBwPcKe@42ob0bH`hTHC1elq{8wWj|23O*C> zssG-diGf0f$HKQ+Dsk2&wL*XNmq|EzHP6$2Dc`4Q;lnm< zByWWH%BLNNytmT%tmmsZW@gvIN*^rh5c%C*yD9mf^!1Rt%o?ALL*A*b@0U2v8uRT# zJA|F0WXs>q?pwPtO`MgsywPi!LSB8#B%}ScVpq@mKxHK8d&ME3H5f{{XT->{+M#J{ zVZj4@cz$r>99pyQc`bBUd6NiyPh9=_WAte57x)-C7Cr$p{4VXc>nFJpzXzpWfvf8$@r(G$ z(Vu8PN%`uX*ZTbirr)$w>mg5I{N!~fyUnE>atY&g=0=P@$$nAKjU20lz!64sgDosiHi?74Sgm8A1<~)v#dYzy@agdOlgxYJ#F{iQo=a1g-5Ry zq5c>-7Cr%6{3PvmoS($+L8({Z>iS9iB7QReYwaf~Ke_S0t@biYKiSH7JqDTXC+&Pq zWAE2~F}F_B{0D3bpE%l?*M1T@djGpsd-@TzetgIDCq@3zx9*~J*x%PfG&g>7^!}^V z^{1(8^$+|c_Mx6*CrX!Id!L1S+IpI{JbGpACpE4QlncS!Z73)-LW5sJ{$8Ts4+(!z z&y5_bo=@|W-~m2}0k_iMM&L6C{iNWtZTZfXiG=tRo$){H)`)_Sky9TZ+7lNaiS9i zB7So0N$n>oA1L7e$k#-@$LbseJnlhE$`SIXY{#oyRbep2KQf2UXZ!2>H=4|xLPC%f~XQr8bo z>?g4g^&C54m(K6E@3>KxezJzE_lt68!g@aBuMfmdNh$T*$g%4AG(QO*;Da1+D}F8l zpE>9!1)pupbCu3nn*TC#>f=Lu;^G5NLqCeZhl?%HcJ-6eCT-ts&+^19jk_8-7CwPR z@sqUMaeflN2c=$ttLrE6i}=ahUVd&~`jsD=Q9rpPc)%uqO!t$!SpCW32JIKCt9<&8 zHfdze5uw$p1}CYl?$&^*Pof#PhubHId;M> z)sMArJ7cYiNI$L`boiO+gq=!}!T3{c+cv-7(Lk7V2x z`%urZ6Qw8aXy1CCrJtOEYZNLbH1Q?7S4a;$nj%};^{_<#$z4Sg^IpSJLm*{-t^ ze6}s$tumDmpHj+wUq()Sd}vQxe86es<_LVa*aB@=KPhce;e`FmBMIk^TX^(Z5yoST z91EX-Eq;=AJI+ty_n_1(aCQA8ei1)8v_SVKDIX}{|HycLQl?y6I;Q){T`fOZ>eqg; z>wTI|uC{3-p+o*WFm(F?KkQNcxEY_HjPsKsfBo*4DL?q>iq=D(!1&4S2Ry8c1lXA=SGfI&!_oG@Bkm= zfZO={BJi1mep2vRed9+eh0V$E3Fm0RW=Sac7&-Ovp*?Z&LDu;9BJkm23$$JRq_jy7 zoOxztWHcE*Ej)Uy2>2K|7Cr%6{3PvmoS($+L8({Z>iS9iB7So0>Do_HzWU&d_9ssa z9IDR%X|oyxh7C9CJ9gVOEK zGjgnYKFv>p2l#*sxQ%~00-rhPCk3A+OI}?bNf^hBr^Ls|sgDosiHi?7O?*BAA1<~) z+tp7>n^e8+MLoG$@{>l6g->8n{3PvmoS($+L8({ZN;@q4wyV$?zlfhKEz*9H@__>W zk8Jys#~khQPkL_r?+^f z>by3YpX^HcEd(RSs^`=EBzS-ixPV*NTO;t9gML!*k#BC5lJ+N4?h7$;>f=Lu;^G5N z`EN$x!^IY8yZT9KlSc0RZh0(W9Mi(1*NRBHRm-;($g%JV*y1N?x8wXIeh*5$0$0~h z;urCg#b4<8Ny_KnZ||R+iM)rwLpJe4{NzyWe)1mfVfo3aAx2*NB@4UTxvAUi-?;&=HtLM3iNo(Ih z+PsBn%k#8Z=RFj=dR|9);={@OXuJj7}lkOLnm z{CMxe{I;w1g1Cw}tGc%ykDxsKp{1AWZws70a6$j68wNJ6uYEj(tI27tY)6ZQl^BV$ zcBzRY=lGshoaJgV^iJ)khCXKdEBC&*bDeX1g^F`#cHF+6{QF*fpo$4bRnBqI!#?i& z+6z=p@`Kd%`iIm9@e|mCc4+jA_3e`O8!^59$1v(^*Z8W$S>ng1_AS=FaUt*FSp%ys z>L090Xw1O5Lu~rq1(#LEHqDM7H*y-pSw0@%!+Q&E&SQ8QpO%+ZdMgIj_HXE0w<=9; zORZD3enRkBeds$YQwif>*DguV@e@Xls+)=~l#;d2bN6m3*e7D$L{1yHQe>Js__E-3^p&!iXJo5>SHI2SQ z{FTnr%ev*ivi#N5$94N#yw0b$*fg4}`D@;vuYzv>%(r_~o`&9;_E)j%v6TEr?|Flg zf8A28hv;g?&$oZ(r|SBJ>U#Zy`i6a|Z`g^_Q&+U__+OUe=Yp%}UC@&Y`WvcJ)H%jd zj?Wr7PJ7sW$iI8thnxaF-~m3U1a6bpMc^|B$Ik_yZFlX_Q%E?EIgxUovXRpOAHO|u z@d2laD6f|DYY7^6f)CZ)B&m-;~t#Jez() zmVQ#~`oo|6dwD8hzpmit+p2Hn=~t=eMoxS^mwq>RfDatOjdN%_^&14AtojXt&*n{! zmU+&ZqJqzMWp~;?+C${gPI3-?wCa9GZRz0PhBfDJ9Bi(K+*&EL(BoWht(`K?wYSwC znmhHc&YN_**!Ah?_OY`;p3Qx3d*K~No_eUlWyg$jiTr(T%d2s$=Tx*F@?56hu+K>+ z-m%X~2PYoq!XDJOiBCq`1v|DjibQG8OIsdJS&wsxO~3t*qvg&Z9;x4NK#yiA?V*uV zzdZyG@Zr4$H&_1I{i_BCHn@LHex9~Gk`{Q~dOmT%v~iS{G!%R`Zz`8ZV!nZl+_Y5i z$txyCPBcDRjv4O)7jQxk@Z%hMO5ZAewnWpGH$pW|Q;S`kPFXw9H>kuk_d02u9w|>G zj4O;D&HbVt895p!##{dU=PUoL{#_~ebt~4i>mO6qT59%r=Uu-3yj3#je%_i3niE~S zTlh-9gzp#7FLCqbGfzZbbLPRwj~?!q2tUfhkG#*w;d@)~<9lL!-@xTZdHC_&8|0uL z`DB?_BQLGXkMi&%?=f=FkMEuEeKNjN zk9j}7>*DgGJp9O;h8%DpuLSw-$uHsZqdfe`SBe~-lYCC(1tzbP%a8H_KYu(6IXowM z6!~rq`4p$|^UK4Jef`McIq4^pKZE|Z%a8K#WB()LZagRZg~?mRzGIgkRdm;Ed}C;Zq~%{~;DALZef^YK9r zd|3C#x_Z_Ry8I{)KfVWx9P9=^_Or46*X2if_|Z>94)YGwW9H}h-k{5m^6+Eb7IM&w zehKR%=^wiMC=Wlz6Olu|hjxLuigf`lKgz?8yb8$Sd3kS`?_&Jdbp5SUuVpEL%kM;yIQB< zW8`RjG{@l=`ZSmaANgmy{xp)@KI4sk|1G2MXY$-rG59RzhLjY1jGQn&hWY6$Jny@z zeJebAZ7pxZI=^2qaj!lv+^wl8p?{se;w_h-vAm;q;NtVwtn0s^UI zzqo(hVB${;NgpJ9bY1p~M|A#(@LyFw^j*KdH~jZPw_aa%R;llT{tdFaXT^s8=7!vC z0sh(T2fx3!>)M@q3cKj_0;7j$I`(wE@2uEm_T!4~dqi@H|6}Plx*m-FRMW00o5q(+ zcSYWZVZ{Rb?yi2jwigNbJ^7u*Q5@2ELg9&Q^x}Fwy)Iu*>GX8ya;?|o>+Sa~9G46$ zG2Dkx4Kk2 zcpfRU=92R^uDfKg@BFnHR2-i_1bjIcy|$}AQm+_apWIK^FYa?`mit;=-p!nwbvf+U z@vQOn>X@#_L;t2}>9aO%Bx|%ow=2+_R+f6aubk68)8p$dPUtD}kIbK<*4^w|(R#=g zGrnFtdPH4+k-A?05ZqTPA=rob3_DSJ@-w%sdmyAt+I0bG%cGa<2g!22v4*SnlX5A> z{~NjbSJ>aU*Xo^%-DO>Ykz=*@)AqH32l&7n+{Qi?fzKRVmm~OWTfS3eB;owWSjxP} zMoxWvXir>xz^Sl00v|56K(nkrS?;HjHtD(*zu(#!_{&hE(ZX}a6`}qZITk)aF}Y91 zt7*60@dj?h??I_o;2MrQ#82WE@snK->wT@1hc7fsKbbgqM|g-DKlw+03SxofCnx_! z`^CbQKK;B+L#!fyR{c2q|Fd@{aB@`D{;!0s+2JLGK@=mhG)N#2lwmW;%m@t(ix9AJ zBSVq3Kj6plqPl`5a!>&7&OB1wjQp+*$@idB`q}>klllVQ4;x81gw8Mg*@RRsO z{AA_{=_kGN|MsRuT@-R_ld_*Y#(TgPzi23hIaQSeX2I9DCGb3%H7=csV}I=dWg%~PyYTdKk5DJ-*$GdH~$FS7rMBk zAM6}GQF>_hey{iAp43j0mZx56_b2PPI)5w|y!wN{-kJ=Hayf-u1-*YQp+*$@iZ!Mtgok1?RS`;#P2~pyHb9Fc3AKeeiFZkpB($M z^plkLDxkj1{*%3~SxxoiFMO?iZ?oU3)XWx(c`T<+nd012|3%*2?F>Jeds6zv;i{w~ ze=(`YDCA2){%0>=>iWT*DzYBtou7UBjK0r4y(F@q zL_gSh{?}4JCRhC{ufN9nmbAPUIxp4!iqNa$+*rVwc;5ezxu;#T;Kc3imZpIsqXiG;Kf(;RX_0F$ngyN!QRmm&u`PD z_L{Uj^%3@7A0JQ2-i2PpSW5BAX!f2xG=6(5?AEdIZ<$;eF3NO+L@$!PFkM#C2jvH+NjsgxUt-Qbu@dT z9<5URr(cc_rv`T7elgw&F5twC;Ky%h((#t0<*A3`q`Q7r;3WD9wF&Ac_~iuQM0|t4 z4U2DxSD>_m;Ah7-#52S|+FOrU^@fzq^r~J8R+3HtR7Un+e&aqc}+#QbY zzlr+@`A@C;p(}fRMbtw`UYL82H{XBgr>FKlweEY~@35L-=jaDJM^9np>%c%LiLcw}*HimH4E!zggh3_;Vks6utRnpQwPZwHe9q@yikT zsKrGM`4(wUY09JF_bsj<{33pG^smxSQr>>Lj>$_r)6Pr0qv0p*dXGIU z{p9e|lG@kD`+ZQ~t1H)@yvS|KwobklAwO4qZ`pCCt9qC#i*qees3;>}mW4AHN*&CWQG( z@Bp8}Mum^Eqx^~>`LE@0Y0?* z;ASgP+E47`Z5=r-BSIN(52r06((km#Wu*OVDd!`Ob4IFUz)iw_#Q2$Cj_*wf9p?lW zaDp}X@f+GndHT}K?=5iJ+`mJ;|I4$sg9@BP+((>8+{Zp$;=z&qc0AR;{x9WqpRpT4 zG5=%c_uk2f`-*>*?QmgK($TU>$J1#>?MH(C`hl*#4bz^!x7~3cak*VTA^+D8oaoL~ zbX8nQQ7&JY6(vAB>n{@W*-sP+}e&zG_F`hH52>56@20mUfai3TxLAxC` zK7!waVprfwJB**iFXAT=NO^ukJ0-vOd5)dmJ7f6C+$QN4v;QqA^^Z%hyWqOMv);S2 zJN~eB#z%zw>mL53+oo5`vL5D>TzA6<`>wm;=E!~${b1+g=}C=)9vyd}TI7FOo*>^U zPn-5S38B~PFJ4=&MeIKey&}G!6#WOkoMtVGu+N3=4d4P!=mGrr4eg}qSMIn)cj#2>8NwE0mUe%LQ^z{7i= z)qDqe68!u`yGb4`+Rg3epV-4*PI}}2 z?XjPXx39spnC()634F91zx}Ljm_Gv#@Sz&u#&2lnjQ=ZqQd;NC^X0FZn01+cIlea` zbo`(EjW$ly+oqk<&zhg=xfDF-(7PrEC%+sYPE^CA6(?7yV*@oadVu`6ielti_Y#Jw-4^;W!J5^)XX=@y~SzIPDp;!rCX*}zPosBr8-0A zUCbS#@|&vh;k<90Sk(OhDj1O#&UnpJV*ka`w@!pF1w{{pEaNz&0L zB<=dKq)Ppvq@?mWLytP=@ZKk{-)F2x@@*P5IB;;3jA9iK$QxWwLw{5uL zu^w(e>YQWU>td~Y^N)C6ML!w+5TBqYN{?N6mw|iI{W(d?Q?IngfrVZjH=kVggTyDo z62m{mmn9nq)^hxDzS=7%_RLxRWpDu}Y6gDUlY(%HKXIBKPU*(`0;hUjxpzmy2|cw+ zg?)(e`hq7X8cwt?;AFQmwfR9fwOTuUe|k8n`O}p8WulEL-7>vg^ZI4Y?MXjTYu~_0 z%Q0|jVCJ=Zs{IEiZUn!~1r|;NOV=dHf}Y+ycgp+aT%6|2SyHY}&^))66O5C3KVID8zIwzn#5ctQWPC&U(S6MLCe{6NN6wxjo+-{}s<&T`{6=QJ z+{`a!98>+Fq$Bs46q#LT{Ngu3c^|53-#7Hk+i&STs^^pC>EFGyt?>=@vZ;{2^z^;l zKJ=oBsE4>d{k!LR@ywaGf2DWn_jVt*kByz9AM8B;12gU`ood>-94C9ZU9HH!(`=8^ z%m*O!>Ntm2hOQ0vo5Y*L=fCZ)BV6Mt`TF^hAKtx@_E^g?>^yXw3|zp8_Zj@g&IrOO z?rH?bSun8dQuiF1Rvs-{E9 ziN~E|omNb3G!;12^EajxhYDZP^~v9qbKbZ!79?egaTxI#JzL@=f3^O9+C42N1SiFs zI0wHQ7UvMRKxq%b*N$_DYlw4({~`A~Qa=CNKN|h{bl1Hf6F1Cpc5%mX2&Vnatu`-6V=kUJ~8-1g)0mSgv>$2n_%|B;>`9#_m7bOsNbmAzut zWrK$W-7wDI%(qS7Eabnb>kXB6zGgeO9^b3SIUANdTbcx_^UYw)! zgT13CN)^6f+I!OeNYe7uEA4gfZ#wuJu0DTSE_nNz!w`@)D9noAF4yw{cybJTZy3J; z5AfmnGYYq^{|dk-{_stT>)zAN+aU4z-*PczJ{`S4M-t+r~=O-SJV+ zNBLQ-nzgL%Cs(EHCx!e!e*R*&4q5l#E^a->NE& zy7cMJwevL3&-vE5->9sv?p?`w>&}|{$$Zj$t)3ji&KvwBcz_SMfLr%B1Mr!Iep2Ey zvy$=7Q)rIQ@KMR)7%itcKC~w`KHyaQegHmPj6plqPs%oFze>qlAJ8117>`~rBHAqx zXKFbHJ|0{AB<*&XpTzG$u`6)3{Um-7KUv%&`;(OKn$=D}IXm_MpZ1fSGiT<}E&WLK zAHT2s<6|cE6dUrTOO5A1yZ>=~<a(k~VtlC<NV11A9lUj~t=hnI&@Bkm) zV{jYUWa5+boVcXr+lkNmb@!J`pNfW0cf$U@meU*`@Bkm4AKXT6HStM$PF&LR)GzJ% zePKWA*F9a%M8v1~@?_&NT8aEQYHP4-s*GobcbC+@KHl%@f*G6MaACje`?gO0G$H@GFZ{+G|NdY_ z*2AoE^~clP>wkzmK8`-H_u_V@UUC)F-sQUT7#kc_H7|BIm&+XUGE;_G`&NFXn(Sab@X>Ob;{zVxQ`k}BgB^{&H3*;B=?C4lrJak<=659UDGq_6bNzt!Q>)+Ck=Qj5*snjN@z0-0GoEqY7@BknBiQv}t z*+6_^+tJyJ7q1#jzJ1e$vmN+cRmnsg-);SUk|l_@wH%GlE*gEl<7D9OR zVth!;(e0u8=LUZT9^k|CgIn>Q0DLClx)6cS;?I>TxtpW)pRz|Jn@`blG(L5IWyR&R zCpJFdl=*G|K3t4J)3l#7_v48+sppENmFj1r;S=N0>qUqsv>c6(pQpI5+x-LWcGx@$ zeh-RWfvY`_f?vc>l6REygepqQ@6TQP z(!TxP^j}+T9!1E1?%Gq_{5vnJ$a88`??z z2Z7T+YyW|EkaiLM(q8f#TIlE@RXGUm&MIlw{r0EC99S!Uk2Y+>2`Zh zab!*@=9kU9tgZ6Pd;}`9OE6=;e z#nS!H{WrayTTA#}a&zH(3s%fbPCIhGkQ0yGF@E1G_)#8y?Da(seO34|=0+|kn;+%j zM~)5Tz>htI-kg%!yDsu6ix05|<>AL(SLDEtz59%@lLNr!M|t>>V*)wwqkhauvNzf0 zM|t?MwjDX}qkhcMkQ2n_M|t?M78^NUz0{gn_HMHF*5*ff_^}5HIbQt~Kjz3;J8$!& zJp5Rrh#dH__XU3JS+n_39)7H;Lk@gcQ^Ot{*5=snALZdku3qGLYn9a=9o8zdmd@r! zd5@o3^M@Sjh261Mh@6xS{8V}P(dR`D?+MRM4h!}m+4`eA{KyH%UPSO9mS#+rnB3+^ zdHAu04mt3nJz%bc9B>WKtJdJbk3J-Fs26&qkHDHon;+%jM=V4=sULh9q|M9kmdqviPVX&jpa5AeypTHzC7N6LO;hj!_$4QdZQSuge#k)ZyNyHNin-Z${k za+>1<9^g}YmBa_!>{=*%I$&*3oA3#-A98@&`e^mHhmR+xIX>V4KA8m)A8@nfD}3S( zsW|Da4QdlUo?kHSM-AB7>S+15hmR+xIX>Xw;d8RY2i)umNPIeBZIHqzrQEDMXYu{P zV_y4kLqaO>5o2Cjj)9NnZp}et6fWR2@)C&?`00Z3o3f+WYZ}s98`K`0hC*^uPqP&f z^EWtYIni(e7jWWiG4QjiqwJ{z)&?n@(vG)7_D1b*DYj2wjHInHfVlZ`a>DdPniDbMJOO41s^R(;}f(th%@+Xe8Q^HIdd@TER>Y}Q7vQ* zH^sJwGiWy3jhD&1L?V`r|UBge?K3E30%8U<1JnN%<$9bO{+eDQsf=HF$~ zh-_NEO}rOt-BRe+J|hr@j9>9PDINWV#IyQ)6IcJZ)>>Bx_faqVeo?QjaYiNepkC;M z`igp`c}8XN&r(m_N&+rN+G}aji*z~MTvfhPtX(k82 zEvGp?v?n$`)Fc1B0DQO@gQjUeX|AP|ZPG`|Rc{=%x&6d=^m-BcUs{fVkH=QrC)Quk zZrk&Z+=$uPgWO5KS}wa$J*y7sdF6K=qJsy4u?;aesSb%No!e? zjwdsBtn3#+f3^IoO4oj)W%e9QbS_FEzxqGFDqp+X4sJbu;MPNY^qzxOb2g(N>>NEw zzV4d88#~v|)0}r+cG+89eg2}H_54?JJI^FI>rl))YdMCUH~2~L03UDxx2{hG;4=yR zq{QdhaxP?E6TLvIN%tIha+>2qdt&25J%;`}03R;Kpq=U`MVr*M-yh3WuV2~Requa& zy@=;0JvjzG9$Wk*?RJ=-#P30|D{!^_Bz_S;nR}J=la#NnZs*>-_luGXeNaLO&_-Ik-}dn7he8?v2i(Q1H=mn&U%zV&j9X+=c*rxEO0LSd>WvG(zk|C6rP>p=2W33I<6Y;hcKbdde|Y8%uI!gqL_Ngy z4L3aI)At(gK&!PFw?_no@=4*dh?X#?*&eq z`=?jNCMegGmJ5 z%Q0|jC`7vlF5twC;8*>=h0{Q?+>+_VH)=ghO6$o4PV3iQSI$gO?g1?)7$<>`7%#`) zhQ&9;D^S`&@U!C^;u+$b;S*(i;FkD|k&J(|V~RXU`GO6z4NF zGsTh5Lhb?UjKd>k95ecINpr`U6q#LT{Ngua&#?W;s54-oqqA@8U3Ak8<>}wOw5{=t zT@QW>`CobO-fnJzH&#SF#NVfX_dGA28J+#L-mmPkXXM-iC8ZziynBWj_YH3{?Od)) zjJ-_WNwYmp({BpBI?lnB(g%XqVH0l-pZ~VIj&NT%)>(l|R7!iSGN!LRg# zK%8Rl3rcUjygK70rT9kJ)8_uODq}Kb! zPQIOHyO(CpQ{hXFIs1|FP)NHc*1w6*=-Cn{`K$H+)9z_GAvh`4#5wrgusDaf1xkAe zzIL2LTtl4Gb%cy_C_nNMGtTLh97{cJA5pAZbXPX0aUAoE%CY^W-!A4%|E<*7GP(MO zY~TD#^tym{jpKw>Ovu0bhBMqa=E#byhk57KGhWtr^^DUZ$2sT+d$;ved@#`7CtZ#u zq1V0k+oe(rX_rkcyX&xLCmYAna>loJG2R9);6#1EkKfS$%dvze;!)AgZgKTaJ4m}Y zI!CsPw3pR8%yu!|b;ZZT?fyB9^T6hrgoPK$_Hgt7)jl3=(($xbQuDx2F%P@TZ9gt= zId<=Q|8MQ@KhhJ#!#(2O89Z#3d({19gNFs(FwWnIW9{37{F6@nNadZc+0L!U_v-z> z4NIQ!>Tt_Lqwe+f6}z1MTi`D24gFwm=!yHQkDBdb(s7!k<*8TN>x#uZ<1V-Tv|RPp z$%G*wYtWtWOf@aXXcrsifx!cOcz$pj`%wTs@rSjY&c^3|%h`zIaH9$F(Q=yOQ&jDV zjgN=Zj|1@GVhoxlK54Ei7H!flx7EtIi0chwJbJx|Xt%_ALoLU^$74(Xfp$Br|A60v zVprg5_aE?!_{q$X(oa&p`(37=?7XvkpH=+_^Q^m}^QB+R&6ITPG?RLY4f&EgT&*is z^j8}XF2CTXzuCxosfq4C2>E-w_&(P!?p=}fFe_et$Fm#vc=1;}ziD38zwndj2RqLn zF7?BmqYs&Op65bLnzXzYo9@}YLa%Oq_;NMk{*LaK#qU1|JJ)h7JGaK&zyo}EkHIbX z6BC~cwSr=OOIltFO&_22>wZ=)M2usG6U@^Ke6*bA_<#ra@ciI5GHT+J^z7ZF<*A?J z%yZIQZz$|%bN|#zCgOTFU60nj;U~2mKR%85;Arn{e2`kY)5Is~cxKY_)GO_?dxg(9 zZP^jogW6@Uvm@4Dkt+_78lgD%OIZ==T%95YLPqCF2>& zkKS&^Gbzve&W=0ru}hYD-{(|3W1h{DJwf{C>`NsbKFFkKxO9)qAHi>EPPL2Bp-nH@ zbX%pn^5-tGwyfGSmcKhNc38A#<>iAjuYgTzRLFmR`K^`PDzA3`&8heA|J-%0TNn9x z)8JE;Cx_38-0w#}*gJZHU-lN$-sQY+>~u7#_bY2V1m@>FWnj_jN zR%#*ZSIPf4@~>|i5%a#)qm#umT8^}L_42BkuAM9FQjE)h2l((P;FkSa5I(WfIXSN4 z5Rs6|cqUzZPOs#={W0daj6A>FafYst_|(+?##SFf=)K;r^yK*Qas6feqw%3VvGGCf z@U133YW^_x!ii4p_sce^r&0)sXIM8ebhpF@{j^HKN6QKJm*PG#m`uAJ<|pxcQ0xj^ zZ9j=$#81|amVT1*`M&o0$+(A@HTp^OY?kVD=@)AkNSdE-Qg90Mlf$aN4;6lD;Hv2n z{p29*Q=|CFfvaX!2CmvOv7bag*g1Nl!nO6Lolj;zIq=+!N+G1*Z~Mt?LO-eH_}gK$ zuG?Yo03YrEx6-eJ@R^)`a^SgxE4h&IaobN0C-sw_96vsdev?a4V zI-rsXi8IsolUh!5KS{eC<|pxcQ0xj^Z9j=$#7~YKC;cSliyv#RpNzZWvC&WNVw_=C z?NNR)FKKCClkz@?`N=Ugj|>%l>X4ON%F+6ht6-lR#ZOK*=uc*}PuXu9&_%!-S+7lZek#+UO&Pd*R%VR#e{xR%kj6vXkGhB@Bkm~0JqF=5I&RBPp&`ko8?jnKDM9iO6VuG z96vsdevH&s&nz0%U0wDmt0y{ecqyhrAfx6Ri1#9_MZ!#K6-Iq zxfpRhPjl^tU!}jI1<9^g~FNa6!-L$?Rv6MK83livA(?ZD?7t zbfEpjp5IUJ{J`|_+1$TFrRKFeK~Y^YY(#1B(Q=yO10LX$8=xH3LhjaEDQ0M_XLz z8E;_xfod`?!Eb1xPme#GvU1?ExIM|0gO@K^wPbnh0qyPfp5n;462>3Q^OmS@RGRh0 zwLxV>|Nq1jF6wcd8Sa|onJ&$`{~ABB8;nL)ZTXA9eS4QP&%4Hb2Sf`n#hG4@QN-Fp zaz8P~W#_ITXBs(0$hk&t68{*N;757*aTWt|c-P=Zn@p}Dn;+%j$JqhMA!jW)-pP4O zu6S`yn)nD^i26|;ew^8Z9O?%@#sE0$!RAMK__0R}Iq>7G7Wi?-lFg6u@MBLCa^S&$$J`Ba;6rW+a`lko!{$eM__1aJIn<9a zWyUy|v$3C-^6+D=B68rzTr7QZ=5%d-l!qUC1dsziZw-_hi(xI5&5!c%V{QdG@MG;U zeIC{@+x#dGKh`uL2Y%>}n1Z=5n;+%j$67+v% zl!qU=8ju4&^anroT-f|54?l7XAO}9!9c#$hOK!i31O#(U38~Ca6@T)rm_kYOYJ%Jx{H=J4E=eN*xo}491>^ihm_5tB*)6N;o zpXd60H#c)iWBEL1&Woi)WT8KM>#vEv3BO(6%i_tAF^pvD&Z$~`bnpP5%$p@X;AU4w z;uE`z?xZ)C-yVEwA#*LPNwD?N>TmGTa{Tx>4fucu_|z_w_<)-&U)fLWP&>V`{Py6J z4e6VctI*a*tG~fV%V~}ecz{oSxx@$DZ26rtmfs$HN+I^MyRC?rzrjb#X^szgfX~V4KBFax54hQqB|e=nmap(hX)K@T ztiCsRjCdbzNJs@fVvJbJG4RpctvCT(z^V8?i4*wgg7TZPqu7B$dSm(R!D%!k2lX^t z5ix&*la><=CvX8L#DgEdp%SM~7|WkukGInr%jfy3UOQyQ+b`yZgp~G9%aJ(A_Ox*g zWBy&zZftzQs-e~}c0ev#b+$&z?Oi5h?sC5{g|zs0>`2QAu_MLztObtqfcvUs9+tU5 zmbu@>o0I#R{9U*sIA_RN3$D8Ioc@`8gYF8lndhurzG!e&tc_ddTk5vcqYwNp=xmDI z@1Fdr|L?hZa_&K&IksTsVB84^pN_vax}bN(=ZhOl$ICqmU1vyIRpSJuew`CT)O|N! z*(hHNS4w;6`n06Q&q!KbA!!sIaqbcC#ag!@`W5{LTla!5<3Zwk8lS=w5>F^Rkxjk0 z-mG3%uAp@Lsi@Z$x01XE%!w6GmhVGY4LW5`Z0cU=&WRPgerWKMXFq;+<>Z%N)w8wc z#Dx5tS1&HVgz(`(m`VY4ily zHbOUCJZs|~JMZewk;-#~!{$l73a0!;$p7(SQ(XBs&zJSE1RQa}y`}RWci-9OAMs8s zba6*7QDd2;dEb(j=cz>AxHQkD5qfno?a5w4-wjE@bmR=}GlTC4{;SZt=)3vlxG*$+ ztiBuXEjW#Su=)F&Z{*n0Uy_#B!qPp@O}zVi?EFAa?(;VX##CBvvTp*X`WU=VP7qGm z5qN+P?F+cswYkv#LyNzYme=Ca$7k{4&-9dTnHYTha+=`-9^k|CgB!o0t@tp?_-WGe znpe8(frb5SzJEne!S`NkS?PVle*AL6@acBN;$Q7KOKL=X0>y8EtAEZ?#52S%#54I` z8P8C@I{WDBAE1ycB+c_MsB;`D;u+cL{D&IOood80WA9h-%ZDW$x!$DX$;_+19`vq1 z_4Pjd<-^(@&-_bB#f1D{TwZeJ7w5}*h#Q~q;+MPrbe4Pl)9&@=AKGE`gPrG;o+zE) z_~fmA+>_?zOIn_KrF|ZT(5vI*dkSBS)(#g{oU7{-?VD%kJ~=)+ZxDEd< z0H2OH4`ZH;H&a?mAn@6IztdBlAV2As)C{F)tm3loHoUygx~(y72l_(|IBFh7akgJM_UipvxHgrCGO;wQULm41@) zxf?z-;%_h0^pi)j@NcYjgWU_V~CQ z`8;!Ab-}A_gfFtx%vOteoTpBi;;gR!qCdI4;U~LSO23%BLDKxkCC#jp)MFI#W#lB; z9zu_~^{u_Nqc1IQt?_Xof87P5P4BPBdWec^Ke_ILcevN@b+0%7;3v@!c8;DX-F^HW zFZAP{bbLE$dFqw+__)xkJ8E62di!6I6io9y@%?0%%hE5$XXj#HrTl00TfhaJs1^7P z&kn*VzQarpC)KY^X-$T}X>;T+ql1Fp0=2UUG6>Zs9dHlg>x}?FyfoxkIFb^ijk@rWN|L;<9uUDanUxd90zv-6~WaqFG_b+sB02grL zedhh0@mGAUoyqHwEj2Nt?g*|t)Z{TcDVL2Nvk)R)MD50b40!O(AB%m>>2#ti7qbf zUAH#1p(gSVLjH@kJJ#((zNRAUA^xuW<*Rqgxz`Vm+%HEz*jw(c&HYx=^YN0F*J_dd zy|ng72)#Pa0hPi8#ixEbqCE`TBLN=Z!+Q*FS|9RT@A9R~SH_+Va-5{)sn1lkuCO-E z&UaLoz-^JKz-M#+oJuJoKCH=)EI{2T+C$;5{Bo4P(qkr$&XW!v;DbDH<2SVa^l=Zd zbD1P9Pd(a$Pp(q__;F zbx(e(T=k9nBP&e`K7Ki2@m{_Et^8|P|C_i3id}&#ev&wbxP>@|XQMp7p&gSa-JM@B z^Q7-*$tTKc5))5Xi1`)lrRq`8Xwx3%q#V;bf17a@Oz8%I6r{tNoN(!DOv840?| z-vsWWUxz-h^X~UF*NfVd3!9c{r;dk8o$gl7dFQsb{AiI12)&E`w_lFW&b6Q>m}-MuRZq3@!_P{ zRC}-^@Bkm$7jU!XDm#iDaV9-wfcl7WtonR>O7lMgpY`k3m$Sua<5<+ARf-+?<@oTy zj+}k(e6ZWUz7Sl%3Ay0MZ)hitlL(yB8YhuBZ3^)rJbiL1a1!wf{R-k0d;F64gLs2> zjkv`huLypWhadZ)ki)zI<1oxSFkWf%qdfdrkBl7Z$NGKh$36h|`0~7zhac;x_^CA8$Q~T9?nd5}P08;m0^7a(G_&(T=e$%zj?V!;krQ0^0kAb&TKwPUHvxKf4~C6E~&1-k;|zOi(}8FUP{kt%{DD zzyo}!C%Ew&+BtEP%r#R?EpC!eSeu}@$uCFaBXZ5ie+_Yy%BcZPZXV&{VXK!Y_dfIB^F#QTPq*oO#-G*Uj*JwTSELxxZB^^e)D|{c?hEA}0_z zfXE4yeN5&8B3F#JfYkV?$nFx&FYnAPN0$hlJy$>jrqR$3hVq+)Cl@a4~<-do&1Vpojk=PJ^^xNrE6pIY{)uW+Y~=TCL) z@%-lJj+EXj?Yee{q�#I`nLLtB&Uj`Ap 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�D=S3TJ;JxxUdQI6rXUlim_3U-5 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⪥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

    @~$sDDX?h1 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 BA|3z$ literal 7280468 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¡r(Sh}oa&`g-E4K7IJ+O8?h{PmQGN-)8)E=+Mu-ZA;H- zZ+w=TyLzZ$Vq4Gq<#+-ZXkFe3s6^$FE0ReDFj0 z(^c@{#|CJ6_~^6V(!xjTq<>zzqLhhQej0f63Jc}O=&|q##L9g#?oGYzjstTeaSuwl zB0f+Li#&;w#6{v{M~9A+@ORwbyf~R;qa_n3*=Nb#pJ4JtJswo(({ws(Q~VW0bAEjY zebLA6?)l>DyGqTDlTq2N=)d;P!+O2(50|tZV!4TvFZ$T`d#-)iA@dCvR>nWpC?)uZ za*m(y$KYq$x16V04~t*r%-TZCdbsdE$>OBZW0mtcaS}Yh2VB6d>qAxW*$3mK;3H?& z=5B6HoHTmE_^5R|&Rj+66Bi$Fnk`nrhaVfD?HVVgPWt{CFD>O;6eo?IFh0hi#7XMy zs5nX7gHo=*)s2(HMdD=NtNiw)->&Rf;EcQ8?Y1W`8dy6vGFor@P;;sEt&KEBm0KiE zj#b>lK0fyP_L*nvxR^OZ)5*j9>ytD!o~{0E;>Wr^gkF8~hMpfj<44Py9VZu6H^&qG zXZ?q?7yoBU+aWiaIC=HWm#N=xirt>XKa_L)g!-A!I_12AGQZYOHQx2}xg0W{CvkG} z?m1`5HDsaq)$_Jbb$vNrzc%xIT)XDGmhvm(u11el&Lj7S0T*yW5BSaepc+n%2h4WH zY1`I2rY3`N>!^%Ud#IeC-7h#9J@Ig&egUV9Q_sv^RShT5te>WdQ<`TCOC8m_>z*C6 zG0Ri^Pp&yAPezZ0(;TsKzqAj)1)R7M{5n4D;M6w#XzBKE3r_3S-M=$;TZ{6~Ku>j? z$Zv?ZQTYw|3Y2;f{M`J8e1`m{Ymv@x;4km8`vJy(=;k*o2R5p)!m)u1mUr{A#GtD; zX||D3uO7BQvg9}U$`$#Iy?;mUAf3lRrw`WGg=6C7HR`AK$G&La-pB! zq_sbU_|@}1T*}5A$LdSi4`B4@a=!ca6=(8K_KBb#=6wa9+%NTb4}R#l(Z=TjerS*; z$=&-V9}^8c?jd5qB$jgO3H5Lct} z81fP*@rv@b(07>BmwQxsByS;)nS7bfV*>tdb{_Lk+0A2?jj7pA7jGV`FUqa<*YT|0 zG<0brlddI?d1K{Sm>+NNePZ4V{jJ=k^OvrptLHI;p>;McuUsGfl%q>ez3@_J=r$KPczfLv6oI-fEZg zr2AAQ<>#p+kCAp|T6v84w6{23$^`8QRVbS95x>j0ztIz2&LvKQ2l(*bf?MI6Half0_V<^H!JYukEk{O=#>w9R%X{?ED<4(=u9Wh&R9Q{E zeyuVm4U34I#7W|2`5+xPiKmm-*m1L6_QsL8sn`AzH*4>W)3HRy1?aplf^)+w-*mQ$ zncjG_$2T0c!KLWmc+i$9&+AkF=6+uJrZY>$MenZqTlj9`CVp_sd-&e)_b2vT345dd z@02&n7v*i{FkRmMKYM2bCrMG>|Gqm8hPUtzgAiTCz<`7R$IA)|d%GvBdLWStjz+_+ z#~yQV+@5!PuqeuEjM+quL`m2?F(Lw46OE{eEC_fv1IenKK?Gfq=z$nENE9LRAK(A= zO!c>`tG0W#XS!!^*tI{OyJvd4>v^7feqHrERbBNo?XdJSyS-(VFPk{Eam{rJX>WGE z?A^Q{+lEa=RYhZRt(#+(TWjf6(5rLtK07e9-os{L*U4^8OTW_XA3BrpPJcZC^ymW*UUu3upX+M1zg-xkn8-i+z?Z9abw^aR z9&)1@ryhN6e%aC2o|1Uo9rmI9kL+uYQ-}V_ZvScH2sowx)_y8>7Ir10CJx@_VW;u!KhQ9i%T9>=sxuJQAgFOxh#p7#rX zs%3X8j_LhF?U#!kwtub_Y2v?I7QSZL`_>+ qkXBVfM$iHRbWy@4V$b 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

    (_^SNV`dAkJ(AF8tc3QI- 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 z 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

    &PAk7LKfr=%7?NxxmmPvZBGv@5vkeiFZkpUn42 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

    b+8_KJ`{3tY?^5<5bmo>lvofCu>S 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 Date: Sat, 5 Jul 2025 15:41:36 +0700 Subject: [PATCH 214/283] Add option to always use EXR for baked VDM. Also fix issue where auto image save fails to save EXR image properly. --- image_ops.py | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/image_ops.py b/image_ops.py index 0931c0f2..26ec58f2 100644 --- a/image_ops.py +++ b/image_ops.py @@ -47,6 +47,10 @@ def save_float_image(image): elif settings.file_format in {'PNG', 'TIFF'}: settings.color_depth = '16' + # Need to pack first to save the image + if is_bl_newer_than(2, 81) and image.is_dirty: + pack_image(image) + full_path = bpy.path.abspath(image.filepath) image.save_render(full_path, scene=tmpscene) # HACK: If image still dirty after saving, save using standard save method @@ -60,6 +64,10 @@ def save_float_image(image): if image.colorspace_settings.name != ori_colorspace: image.colorspace_settings.name = ori_colorspace + # Remove packed flag + if is_bl_newer_than(2, 81) and image.packed_file: + image.unpack(method='REMOVE') + # Reload image image.reload() @@ -136,11 +144,10 @@ def preserve_float_color_hack_before_packing(image): # HACK: If float image use srgb colorspace, it need to be converted to srgb first before packing set_image_pixels_to_srgb(image) -def pack_image(image, reload_float=False, do_hack=True): +def pack_image(image, reload_float=False): # NOTE: This hack function is probably not a good idea since it uses a lot of assumption - if do_hack and False: - preserve_float_color_hack_before_packing(image) + #preserve_float_color_hack_before_packing(image) if is_bl_newer_than(2, 80): image.pack() @@ -697,6 +704,12 @@ class YSaveAllBakedImages(bpy.types.Operator): description = 'Create a new image file without modifying the current image in Blender', default = False ) + + force_exr_vdisp : BoolProperty( + name = 'Use EXR for Baked VDM', + description = 'Always use EXR file format for baked vector displacement image', + default = True + ) def invoke(self, context, event): # Open browser, take reference to 'self' read the path to selected @@ -715,6 +728,16 @@ def draw(self, context): self.layout.prop(self, 'copy') + node = get_active_ypaint_node() + if node and self.file_format != 'OPEN_EXR': + tree= node.node_tree + yp = tree.yp + height_root_ch = get_root_height_channel(yp) + if height_root_ch: + baked_vdisp = tree.nodes.get(height_root_ch.baked_vdisp) + if baked_vdisp and baked_vdisp.image: + self.layout.prop(self, 'force_exr_vdisp') + def execute(self, context): node = get_active_ypaint_node() @@ -733,6 +756,7 @@ def execute(self, context): height_root_ch = get_root_height_channel(yp) # Baked images + baked_vdisp_image = None for ch in yp.channels: if ch.no_layer_using: continue @@ -749,6 +773,7 @@ def execute(self, context): baked_vdisp = tree.nodes.get(ch.baked_vdisp) if baked_vdisp and baked_vdisp.image: images.append(baked_vdisp.image) + baked_vdisp_image = baked_vdisp.image if not is_overlay_normal_empty(yp): baked_normal_overlay = tree.nodes.get(ch.baked_normal_overlay) @@ -778,7 +803,10 @@ def execute(self, context): for image in images: - settings.file_format = self.file_format + if image == baked_vdisp_image and self.force_exr_vdisp: + settings.file_format = 'OPEN_EXR' + else: settings.file_format = self.file_format + settings.color_depth = '8' if settings.file_format != 'OPEN_EXR' else '16' if image.is_float: settings.color_depth = '16' if settings.file_format != 'OPEN_EXR' else '32' From 361535c9c8af460a3095a0921834a9139d7ea6e8 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Mon, 7 Jul 2025 00:56:49 +0700 Subject: [PATCH 215/283] Use dedicated blending and opacity nodes for vector displacement normal mode. (Fix #306) --- Layer.py | 2 ++ common.py | 39 +++++++++++++++++++++- input_outputs.py | 67 +++++++++++++++++++++++++------------- node_arrangements.py | 9 ++++++ node_connections.py | 77 +++++++++++++++++++++++++++++++++++++------- subtree.py | 63 +++++++++++++++++++++++++----------- versioning.py | 17 +++++++--- 7 files changed, 218 insertions(+), 56 deletions(-) diff --git a/Layer.py b/Layer.py index 7e77317e..5d59bc66 100644 --- a/Layer.py +++ b/Layer.py @@ -6522,6 +6522,8 @@ class YLayerChannel(bpy.types.PropertyGroup): # Vector Displacement related vdisp_proc : StringProperty(default='') + vdisp_blend : StringProperty(default='') + vdisp_intensity : StringProperty(default='') # For pack/unpack height io height_group_unpack : StringProperty(default='') diff --git a/common.py b/common.py index 6e54d8ee..0b1a0337 100644 --- a/common.py +++ b/common.py @@ -5270,6 +5270,24 @@ def is_height_process_needed(layer): return False +def is_vdisp_process_needed(layer): + yp = layer.id_data.yp + height_root_ch = get_root_height_channel(yp) + if not height_root_ch: return False + + height_ch = get_height_channel(layer) + if not height_ch or not height_ch.enable: return False + + #if yp.layer_preview_mode and height_ch.normal_map_type != 'VECTOR_DISPLACEMENT_MAP': return True + + if layer.type == 'GROUP': + if is_layer_using_vdisp_map(layer, height_root_ch): + return True + elif height_ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': # or height_ch.enable_transition_bump: + return True + + return False + def is_normal_process_needed(layer): yp = layer.id_data.yp height_root_ch = get_root_height_channel(yp) @@ -5389,7 +5407,26 @@ def is_layer_using_bump_map(layer, root_ch=None): for child in children: if is_layer_using_bump_map(child): return True - elif ch.write_height and (ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'} or ch.enable_transition_bump): + elif ch.write_height and (ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'} or ch.enable_transition_bump): + return True + + return False + +def is_layer_using_vdisp_map(layer, root_ch=None): + yp = layer.id_data.yp + if not root_ch: root_ch = get_root_height_channel(yp) + if not root_ch: return False + + channel_idx = get_channel_index(root_ch) + try: ch = layer.channels[channel_idx] + except: return False + if get_channel_enabled(ch, layer, root_ch): + if layer.type == 'GROUP': + children = get_list_of_direct_children(layer) + for child in children: + if is_layer_using_vdisp_map(child): + return True + elif ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': # or ch.enable_transition_bump: return True return False diff --git a/input_outputs.py b/input_outputs.py index b6f62bf4..793c2b59 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -1143,6 +1143,18 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) dirty = create_output(tree, name, 'NodeSocketVector', valid_outputs, output_index, dirty) output_index += 1 + if has_parent: + name = root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA'] + + if channel_enabled: # or force_normal_input: + + dirty = create_input(tree, name, 'NodeSocketFloatFactor', valid_inputs, input_index, dirty) + input_index += 1 + + if channel_enabled: + dirty = create_output(tree, name, 'NodeSocketFloat', valid_outputs, output_index, dirty) + output_index += 1 + # Tree background inputs if layer.type in {'BACKGROUND', 'GROUP'}: @@ -1175,36 +1187,47 @@ def check_layer_tree_ios(layer, tree=None, remove_props=False, hard_reset=False) input_index += 1 # Displacement Input - if root_ch.type == 'NORMAL' and layer.type == 'GROUP' and is_height_process_needed(layer): + if root_ch.type == 'NORMAL' and layer.type == 'GROUP': - #if not root_ch.enable_smooth_bump: + if is_height_process_needed(layer): - name = root_ch.name + io_suffix['HEIGHT'] + io_suffix['GROUP'] - dirty = create_input(tree, name, 'NodeSocketFloat', - valid_inputs, input_index, dirty) - input_index += 1 + name = root_ch.name + io_suffix['HEIGHT'] + io_suffix['GROUP'] + dirty = create_input(tree, name, 'NodeSocketFloat', + valid_inputs, input_index, dirty) + input_index += 1 - if root_ch.enable_smooth_bump: + if root_ch.enable_smooth_bump: - for letter in nsew_letters: - name = root_ch.name + io_suffix['HEIGHT_' + letter.upper()] + io_suffix['GROUP'] - dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) - input_index += 1 + for letter in nsew_letters: + name = root_ch.name + io_suffix['HEIGHT_' + letter.upper()] + io_suffix['GROUP'] + dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) + input_index += 1 - name = root_ch.name + io_suffix['HEIGHT'] + io_suffix['ALPHA'] + io_suffix['GROUP'] - dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) - input_index += 1 + name = root_ch.name + io_suffix['HEIGHT'] + io_suffix['ALPHA'] + io_suffix['GROUP'] + dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) + input_index += 1 - if root_ch.enable_smooth_bump: + if root_ch.enable_smooth_bump: - for letter in nsew_letters: - name = root_ch.name + io_suffix['HEIGHT_' + letter.upper()] + io_suffix['ALPHA'] + io_suffix['GROUP'] - dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) - input_index += 1 + for letter in nsew_letters: + name = root_ch.name + io_suffix['HEIGHT_' + letter.upper()] + io_suffix['ALPHA'] + io_suffix['GROUP'] + dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) + input_index += 1 - name = root_ch.name + io_suffix['MAX_HEIGHT'] + io_suffix['GROUP'] - dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) - input_index += 1 + name = root_ch.name + io_suffix['MAX_HEIGHT'] + io_suffix['GROUP'] + dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) + input_index += 1 + + if is_vdisp_process_needed(layer): + + name = root_ch.name + io_suffix['VDISP'] + io_suffix['GROUP'] + dirty = create_input(tree, name, 'NodeSocketVector', + valid_inputs, input_index, dirty) + input_index += 1 + + name = root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA'] + io_suffix['GROUP'] + dirty = create_input(tree, name, 'NodeSocketFloat', valid_inputs, input_index, dirty) + input_index += 1 # Create UV inputs for uv in yp.uvs: diff --git a/node_arrangements.py b/node_arrangements.py index 89794a17..6d5be619 100644 --- a/node_arrangements.py +++ b/node_arrangements.py @@ -210,6 +210,7 @@ def rearrange_layer_frame_nodes(layer, tree=None): check_set_node_parent(tree, ch.layer_intensity, frame) check_set_node_parent(tree, ch.intensity, frame) check_set_node_parent(tree, ch.extra_alpha, frame) + check_set_node_parent(tree, ch.vdisp_blend, frame) check_set_node_parent(tree, ch.blend, frame) if root_ch.type == 'NORMAL': @@ -236,6 +237,8 @@ def rearrange_layer_frame_nodes(layer, tree=None): check_set_node_parent(tree, ch.normal_proc, frame) check_set_node_parent(tree, ch.normal_flip, frame) + check_set_node_parent(tree, ch.vdisp_intensity, frame) + check_set_node_parent(tree, ch.vdisp_flip_yz, frame) check_set_node_parent(tree, ch.vdisp_proc, frame) #check_set_node_parent(tree, ch.blend_height, frame) @@ -1542,6 +1545,9 @@ def rearrange_layer_nodes(layer, tree=None): if check_set_node_loc(tree, ch.normal_flip, loc): loc.x += 200 + if check_set_node_loc(tree, ch.vdisp_intensity, loc): + loc.x += 200 + if check_set_node_loc(tree, ch.vdisp_flip_yz, loc): loc.x += 200 @@ -1572,6 +1578,9 @@ def rearrange_layer_nodes(layer, tree=None): if check_set_node_loc(tree, ch.extra_alpha, loc): loc.x += 200 + if check_set_node_loc(tree, ch.vdisp_blend, loc): + loc.x += 200 + if check_set_node_loc(tree, ch.blend, loc): loc.x += 250 diff --git a/node_connections.py b/node_connections.py index 6a33a98d..70d5f8c8 100644 --- a/node_connections.py +++ b/node_connections.py @@ -229,6 +229,10 @@ def remove_all_prev_inputs(tree, layer, node): #, height_only=False): if io_name in node.inputs: break_input_link(tree, node.inputs[io_name]) + io_name = root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA'] + if io_name in node.inputs: + break_input_link(tree, node.inputs[io_name]) + #if height_only: continue io_name = root_ch.name @@ -2325,9 +2329,15 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): prev_rgb = get_essential_node(tree, TREE_START).get(root_ch.name) prev_alpha = get_essential_node(tree, TREE_START).get(root_ch.name + io_suffix['ALPHA']) + vdisp = None prev_vdisp = None next_vdisp = None + prev_vdisp_alpha = None + next_vdisp_alpha = None + group_vdisp = None + group_vdisp_alpha = None + vdisp_alpha = None height_alpha = None normal_alpha = None group_alpha = None @@ -2359,6 +2369,10 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): group_channel_alpha = source.outputs.get(root_ch.name + io_suffix['ALPHA'] + io_suffix['GROUP']) if group_channel_alpha: alpha = group_channel_alpha + # Vector displacement from group + group_vdisp = source.outputs.get(root_ch.name + io_suffix['VDISP'] + io_suffix['GROUP']) + group_vdisp_alpha = source.outputs.get(root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA'] + io_suffix['GROUP']) + group_alpha = alpha elif layer.type == 'BACKGROUND': @@ -2594,6 +2608,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): normal_proc = nodes.get(ch.normal_proc) normal_map_proc = nodes.get(ch.normal_map_proc) vdisp_proc = nodes.get(ch.vdisp_proc) + vdisp_blend = None if root_ch.type == 'NORMAL': @@ -2619,6 +2634,12 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if ch_normal_strength and normal_map_proc: create_link(tree, ch_normal_strength, normal_map_proc.inputs['Strength']) + # Vector displacement source + #if layer.type != 'GROUP' and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': + # vdisp = rgb + # vdisp_alpha = alpha + + vdisp_blend = nodes.get(ch.vdisp_blend) height_blend = nodes.get(ch.height_blend) hbcol0, hbcol1, hbout = get_mix_color_indices(height_blend) @@ -2658,6 +2679,9 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): prev_vdisp = get_essential_node(tree, TREE_START).get(root_ch.name + io_suffix['VDISP']) next_vdisp = get_essential_node(tree, TREE_END).get(root_ch.name + io_suffix['VDISP']) + prev_vdisp_alpha = get_essential_node(tree, TREE_START).get(root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA']) + next_vdisp_alpha = get_essential_node(tree, TREE_END).get(root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA']) + # Get neighbor rgb alpha_n = alpha_after_mod alpha_s = alpha_after_mod @@ -3358,7 +3382,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): ch_vdisp_strength = get_essential_node(tree, TREE_START).get(get_entity_input_name(ch, 'vdisp_strength')) rgb = create_link(tree, rgb, vdisp_proc.inputs[inp0])[outp0] - create_link(tree, ch_vdisp_strength, vdisp_proc.inputs[inp1]) + if ch_vdisp_strength: create_link(tree, ch_vdisp_strength, vdisp_proc.inputs[inp1]) if not root_ch.enable_smooth_bump and not write_height: normal_flip = nodes.get(ch.normal_flip) @@ -3639,25 +3663,56 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): create_link(tree, normal_alpha, blend.inputs[0]) else: create_link(tree, alpha, blend.inputs[0]) - if root_ch.type == 'NORMAL' and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': - if prev_vdisp: create_link(tree, prev_vdisp, blend.inputs[bcol0]) - else: - if prev_rgb: create_link(tree, prev_rgb, blend.inputs[bcol0]) + if prev_rgb: create_link(tree, prev_rgb, blend.inputs[bcol0]) # Armory can't recognize mute node, so reconnect input to output directly #if layer.enable and ch.enable: # create_link(tree, blend.outputs[0], next_rgb) #else: create_link(tree, prev_rgb, next_rgb) - if root_ch.type == 'NORMAL' and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': - if next_vdisp: create_link(tree, blend.outputs[bout], next_vdisp) - if prev_rgb and next_rgb: create_link(tree, prev_rgb, next_rgb) - else: - if next_rgb: create_link(tree, blend.outputs[bout], next_rgb) + if next_rgb: create_link(tree, blend.outputs[bout], next_rgb) elif prev_rgb and next_rgb: create_link(tree, prev_rgb, next_rgb) - if root_ch.type == 'NORMAL' and ch.normal_map_type != 'VECTOR_DISPLACEMENT_MAP' and prev_vdisp and next_vdisp: + if prev_vdisp_alpha and next_vdisp_alpha: + create_link(tree, prev_vdisp_alpha, next_vdisp_alpha) + + if vdisp_blend: + bcol0, bcol1, bout = get_mix_color_indices(vdisp_blend) + + if prev_vdisp: create_link(tree, prev_vdisp, vdisp_blend.inputs[bcol0]) + + vdisp = rgb + vdisp_alpha = alpha + if layer.type == 'GROUP': + if group_vdisp: vdisp = group_vdisp + if group_vdisp_alpha: + vdisp_alpha = group_vdisp_alpha + + vdisp_intensity = tree.nodes.get(ch.vdisp_intensity) + + # Dedicated vector displacement channel intensity connection only works with group layer for now + if vdisp_intensity and ch_intensity: + vdisp_alpha = create_link(tree, vdisp_alpha, vdisp_intensity.inputs[0])[0] + create_link(tree, ch_intensity, vdisp_intensity.inputs[1]) + + if vdisp: + create_link(tree, vdisp, vdisp_blend.inputs[bcol1]) + + if next_vdisp: create_link(tree, vdisp_blend.outputs[bout], next_vdisp) + + if vdisp_alpha: + if 'Alpha2' in vdisp_blend.inputs: + create_link(tree, vdisp_alpha, vdisp_blend.inputs['Alpha2']) + else: create_link(tree, vdisp_alpha, vdisp_blend.inputs[0]) + + if prev_vdisp_alpha and 'Alpha1' in vdisp_blend.inputs: + create_link(tree, prev_vdisp_alpha, vdisp_blend.inputs['Alpha1']) + + if next_vdisp_alpha and 'Value' in vdisp_blend.outputs: + create_link(tree, vdisp_blend.outputs['Value'], next_vdisp_alpha) + + elif prev_vdisp and next_vdisp: create_link(tree, prev_vdisp, next_vdisp) if next_alpha: diff --git a/subtree.py b/subtree.py index 7186d8aa..bf74dbfb 100644 --- a/subtree.py +++ b/subtree.py @@ -2133,24 +2133,51 @@ def check_channel_normal_map_nodes(tree, layer, root_ch, ch, need_reconnect=Fals if remove_node(tree, ch, 'normal_proc'): need_reconnect = True if remove_node(tree, ch, 'normal_flip'): need_reconnect = True - if channel_enabled and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': + if channel_enabled and is_vdisp_process_needed(layer): - if ch.vdisp_enable_flip_yz: - vdisp_flip_yz, dirty = check_new_node(tree, ch, 'vdisp_flip_yz', 'ShaderNodeGroup', 'Flip Y/Z', True) - vdisp_flip_yz.node_tree = lib.get_node_tree_lib(lib.FLIP_YZ) + # Dedicated vdisp intensity currently is needed for group + if layer.type == 'GROUP': + vdisp_intensity, dirty = check_new_node(tree, ch, 'vdisp_intensity', 'ShaderNodeMath', 'VDisp Opacity', True) + vdisp_intensity.operation = 'MULTIPLY' if dirty: need_reconnect = True - else: + + if remove_node(tree, ch, 'vdisp_proc'): need_reconnect = True if remove_node(tree, ch, 'vdisp_flip_yz'): need_reconnect = True - vdisp_proc, need_reconnect = replace_new_mix_node( - tree, ch, 'vdisp_proc', 'Vector Displacement Process', - return_status=True, hard_replace=True, dirty=need_reconnect - ) - vdisp_proc.blend_type = 'MULTIPLY' - vdisp_proc.inputs[0].default_value = 1.0 + else: + if ch.vdisp_enable_flip_yz: + vdisp_flip_yz, dirty = check_new_node(tree, ch, 'vdisp_flip_yz', 'ShaderNodeGroup', 'Flip Y/Z', True) + vdisp_flip_yz.node_tree = lib.get_node_tree_lib(lib.FLIP_YZ) + if dirty: need_reconnect = True + else: + if remove_node(tree, ch, 'vdisp_flip_yz'): need_reconnect = True + + vdisp_proc, need_reconnect = replace_new_mix_node( + tree, ch, 'vdisp_proc', 'Vector Displacement Process', + return_status=True, hard_replace=True, dirty=need_reconnect + ) + vdisp_proc.blend_type = 'MULTIPLY' + vdisp_proc.inputs[0].default_value = 1.0 + + if remove_node(tree, ch, 'vdisp_intensity'): need_reconnect = True + + if layer.parent_idx != -1 and ch.normal_blend_type == 'MIX': + vdisp_blend, need_reconnect = replace_new_node( + tree, ch, 'vdisp_blend', 'ShaderNodeGroup', 'VDisp Blend', lib.STRAIGHT_OVER, + return_status=True, hard_replace=True, dirty=need_reconnect + ) + else: + vdisp_blend, need_reconnect = replace_new_mix_node( + tree, ch, 'vdisp_blend', 'VDisp Blend', + return_status=True, hard_replace=True, dirty=need_reconnect + ) + vdisp_blend.blend_type = 'ADD' if ch.normal_blend_type == 'OVERLAY' else 'MIX' + else: if remove_node(tree, ch, 'vdisp_proc'): need_reconnect = True if remove_node(tree, ch, 'vdisp_flip_yz'): need_reconnect = True + if remove_node(tree, ch, 'vdisp_blend'): need_reconnect = True + if remove_node(tree, ch, 'vdisp_intensity'): need_reconnect = True return need_reconnect @@ -2429,13 +2456,13 @@ def check_blend_type_nodes(root_ch, layer, ch): return_status=True, hard_replace=True, dirty=need_reconnect ) - elif channel_enabled and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': + #elif channel_enabled and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': - blend, need_reconnect = replace_new_mix_node( - tree, ch, 'blend', 'Blend', - return_status=True, hard_replace=True, dirty=need_reconnect - ) - blend.blend_type = 'ADD' if ch.normal_blend_type == 'OVERLAY' else 'MIX' + # blend, need_reconnect = replace_new_mix_node( + # tree, ch, 'blend', 'Blend', + # return_status=True, hard_replace=True, dirty=need_reconnect + # ) + # blend.blend_type = 'ADD' if ch.normal_blend_type == 'OVERLAY' else 'MIX' else: if remove_node(tree, ch, 'blend'): need_reconnect = True @@ -2446,7 +2473,7 @@ def check_blend_type_nodes(root_ch, layer, ch): # Intensity nodes intensity = tree.nodes.get(ch.intensity) if not intensity: - intensity = new_node(tree, ch, 'intensity', 'ShaderNodeMath', 'Channel Intensity') + intensity = new_node(tree, ch, 'intensity', 'ShaderNodeMath', 'Channel Opacity') intensity.operation = 'MULTIPLY' # Channel intensity diff --git a/versioning.py b/versioning.py index b79707d2..bb1d23b7 100644 --- a/versioning.py +++ b/versioning.py @@ -963,15 +963,24 @@ def update_yp_tree(tree): # Mark use cage object for older bake info update_bake_info_use_cages(yp) - # Version 2.3.3 has scale correction on normal from unwritten height bump map + # Version 2.3.3 has scale correction on normal from unwritten height bump map, also new vdisp_blend node if version_tuple(yp.version) < (2, 3, 3): height_root_ch = get_root_height_channel(yp) if height_root_ch and not height_root_ch.enable_smooth_bump: for layer in yp.layers: height_ch = get_height_channel(layer) - if height_ch and height_ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'} and not height_ch.write_height: - height = get_entity_prop_value(height_ch, 'bump_distance') - set_entity_prop_value(height_ch, 'bump_distance', height * 5) + if height_ch: + if height_ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'} and not height_ch.write_height: + height = get_entity_prop_value(height_ch, 'bump_distance') + set_entity_prop_value(height_ch, 'bump_distance', height * 5) + + # Convert standard blend node to vdisp_blend + elif height_ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP' and layer.type != 'GROUP': + height_ch.vdisp_blend = height_ch.blend + height_ch.blend = '' + layer_tree = get_tree(layer) + vdisp_blend = layer_tree.nodes.get(height_ch.vdisp_blend) + if vdisp_blend: vdisp_blend.label = 'VDisp Blend' # SECTION II: Updates based on the blender version From 129c9e1f38f750545a6ff5d24ed9e11870e5560a Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 7 Jul 2025 11:06:03 +0700 Subject: [PATCH 216/283] Move `vdisp_blend` node conversion to earlier update routine --- versioning.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/versioning.py b/versioning.py index bb1d23b7..9ba8eeac 100644 --- a/versioning.py +++ b/versioning.py @@ -225,7 +225,9 @@ def update_yp_tree(tree): # SECTION I: Update based on yp version - # NOTE: This update should happen earlier since it affects how the node connections + ## EARLY UPDATE + # NOTE: These update should happen earlier since it affects how the node connections + # Version 2.3.2 has ramp modifier affect option if version_tuple(yp.version) < (2, 3, 2): yp.halt_update = True @@ -251,6 +253,25 @@ def update_yp_tree(tree): yp.halt_update = False + # Version 2.3.3 has new vdisp_blend node + if version_tuple(yp.version) < (2, 3, 3): + height_root_ch = get_root_height_channel(yp) + if height_root_ch: + for layer in yp.layers: + height_ch = get_height_channel(layer) + if height_ch: + # Convert standard blend node to vdisp_blend + if height_ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP' and layer.type != 'GROUP': + height_ch.vdisp_blend = height_ch.blend + height_ch.blend = '' + layer_tree = get_tree(layer) + if layer_tree: + vdisp_blend = layer_tree.nodes.get(height_ch.vdisp_blend) + if vdisp_blend: vdisp_blend.label = 'VDisp Blend' + + ## LATER UPDATE + # NOTE: These updates probably can be run after the above + # Version 0.9.1 and above will fix wrong bake type stored on images bake type if version_tuple(yp.version) < (0, 9, 1): #print(cur_version) @@ -963,7 +984,7 @@ def update_yp_tree(tree): # Mark use cage object for older bake info update_bake_info_use_cages(yp) - # Version 2.3.3 has scale correction on normal from unwritten height bump map, also new vdisp_blend node + # Version 2.3.3 has scale correction on normal from unwritten height bump map if version_tuple(yp.version) < (2, 3, 3): height_root_ch = get_root_height_channel(yp) if height_root_ch and not height_root_ch.enable_smooth_bump: @@ -974,14 +995,6 @@ def update_yp_tree(tree): height = get_entity_prop_value(height_ch, 'bump_distance') set_entity_prop_value(height_ch, 'bump_distance', height * 5) - # Convert standard blend node to vdisp_blend - elif height_ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP' and layer.type != 'GROUP': - height_ch.vdisp_blend = height_ch.blend - height_ch.blend = '' - layer_tree = get_tree(layer) - vdisp_blend = layer_tree.nodes.get(height_ch.vdisp_blend) - if vdisp_blend: vdisp_blend.label = 'VDisp Blend' - # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 2e23e05dbd17f34642bf4db3669be4898ef346e3 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 7 Jul 2025 14:07:20 +0700 Subject: [PATCH 217/283] Add new mix_vdisp node to mask out VDM layer inside a group --- Mask.py | 4 ++++ node_arrangements.py | 6 +++++- node_connections.py | 39 ++++++++++++++++++++++----------------- subtree.py | 15 +++++++++++++++ 4 files changed, 46 insertions(+), 18 deletions(-) diff --git a/Mask.py b/Mask.py index 63705f16..04259237 100644 --- a/Mask.py +++ b/Mask.py @@ -183,6 +183,7 @@ def remove_mask_channel_nodes(tree, c): remove_node(tree, c, 'mix_pure') remove_node(tree, c, 'mix_remains') remove_node(tree, c, 'mix_normal') + remove_node(tree, c, 'mix_vdisp') remove_node(tree, c, 'mix_limit') remove_node(tree, c, 'mix_limit_normal') @@ -2318,6 +2319,9 @@ class YLayerMaskChannel(bpy.types.PropertyGroup): # Normal and height has its own alpha if using group, this one is for normal mix_normal : StringProperty(default='') + # ... and this one for vector displacement + mix_vdisp : StringProperty(default='') + # To limit mix value to not go above original channel value, useful for group layer mix_limit : StringProperty(default='') mix_limit_normal : StringProperty(default='') diff --git a/node_arrangements.py b/node_arrangements.py index 6d5be619..9ec870d0 100644 --- a/node_arrangements.py +++ b/node_arrangements.py @@ -1280,9 +1280,10 @@ def rearrange_layer_nodes(layer, tree=None): mix_pure = tree.nodes.get(c.mix_pure) mix_remains = tree.nodes.get(c.mix_remains) mix_normal = tree.nodes.get(c.mix_normal) + mix_vdisp = tree.nodes.get(c.mix_vdisp) mix_limit_normal = tree.nodes.get(c.mix_limit_normal) - if mix_pure or mix_remains or mix_normal or mix_limit_normal: + if mix_pure or mix_remains or mix_normal or mix_limit_normal or mix_vdisp: if check_set_node_loc(tree, c.mix, loc, True): loc.y -= 40 @@ -1296,6 +1297,9 @@ def rearrange_layer_nodes(layer, tree=None): if check_set_node_loc(tree, c.mix_normal, loc, True): loc.y -= 40 + if check_set_node_loc(tree, c.mix_vdisp, loc, True): + loc.y -= 40 + if check_set_node_loc(tree, c.mix_limit_normal, loc, True): loc.y -= 40 diff --git a/node_connections.py b/node_connections.py index 70d5f8c8..9ae350f4 100644 --- a/node_connections.py +++ b/node_connections.py @@ -2234,11 +2234,13 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): mix_pure = nodes.get(c.mix_pure) mix_remains = nodes.get(c.mix_remains) mix_normal = nodes.get(c.mix_normal) + mix_vdisp = nodes.get(c.mix_vdisp) mmixcol0, mmixcol1, mmixout = get_mix_color_indices(mask_mix) mp_mixcol0, mp_mixcol1, mp_mixout = get_mix_color_indices(mix_pure) mr_mixcol0, mr_mixcol1, mr_mixout = get_mix_color_indices(mix_remains) mn_mixcol0, mn_mixcol1, mn_mixout = get_mix_color_indices(mix_normal) + mv_mixcol0, mv_mixcol1, mv_mixout = get_mix_color_indices(mix_vdisp) if mix_pure: create_link(tree, mask_val, mix_pure.inputs[mp_mixcol1]) @@ -2252,6 +2254,10 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): create_link(tree, mask_val, mix_normal.inputs[mn_mixcol1]) if mask_intensity: create_link(tree, mask_intensity, mix_normal.inputs[0]) + if mix_vdisp: + create_link(tree, mask_val, mix_vdisp.inputs[mv_mixcol1]) + if mask_intensity: create_link(tree, mask_intensity, mix_vdisp.inputs[0]) + if mask_mix: if mask_intensity: create_link(tree, mask_intensity, mask_mix.inputs[0]) @@ -2329,15 +2335,14 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): prev_rgb = get_essential_node(tree, TREE_START).get(root_ch.name) prev_alpha = get_essential_node(tree, TREE_START).get(root_ch.name + io_suffix['ALPHA']) - vdisp = None prev_vdisp = None next_vdisp = None prev_vdisp_alpha = None next_vdisp_alpha = None - group_vdisp = None - group_vdisp_alpha = None + group_vdisp = None vdisp_alpha = None + height_alpha = None normal_alpha = None group_alpha = None @@ -2371,7 +2376,7 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): # Vector displacement from group group_vdisp = source.outputs.get(root_ch.name + io_suffix['VDISP'] + io_suffix['GROUP']) - group_vdisp_alpha = source.outputs.get(root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA'] + io_suffix['GROUP']) + vdisp_alpha = source.outputs.get(root_ch.name + io_suffix['VDISP'] + io_suffix['ALPHA'] + io_suffix['GROUP']) group_alpha = alpha @@ -2634,11 +2639,6 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if ch_normal_strength and normal_map_proc: create_link(tree, ch_normal_strength, normal_map_proc.inputs['Strength']) - # Vector displacement source - #if layer.type != 'GROUP' and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': - # vdisp = rgb - # vdisp_alpha = alpha - vdisp_blend = nodes.get(ch.vdisp_blend) height_blend = nodes.get(ch.height_blend) hbcol0, hbcol1, hbout = get_mix_color_indices(height_blend) @@ -2886,12 +2886,14 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): mix_pure = nodes.get(c.mix_pure) mix_remains = nodes.get(c.mix_remains) mix_normal = nodes.get(c.mix_normal) + mix_vdisp = nodes.get(c.mix_vdisp) mix_limit_normal = nodes.get(c.mix_limit_normal) mmixcol0, mmixcol1, mmixout = get_mix_color_indices(mask_mix) mp_mixcol0, mp_mixcol1, mp_mixout = get_mix_color_indices(mix_pure) mr_mixcol0, mr_mixcol1, mr_mixout = get_mix_color_indices(mix_remains) mn_mixcol0, mn_mixcol1, mn_mixout = get_mix_color_indices(mix_normal) + mv_mixcol0, mv_mixcol1, mv_mixout = get_mix_color_indices(mix_vdisp) if mask.type == 'MODIFIER' and root_ch.enable_smooth_bump: mask_source_n = nodes.get(mask.source_n) @@ -2921,6 +2923,9 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): normal_alpha = create_link(tree, normal_alpha, mix_limit_normal.inputs[0])[0] create_link(tree, group_alpha, mix_limit_normal.inputs[1]) + if vdisp_alpha and mix_vdisp: + vdisp_alpha = create_link(tree, vdisp_alpha, mix_vdisp.inputs[mv_mixcol0])[mv_mixout] + if root_ch.enable_smooth_bump and mask_mix: if j == chain and trans_bump_ch == ch and trans_bump_crease: alpha_n = create_link(tree, get_essential_node(tree, ONE_VALUE)[0], mask_mix.inputs['Color1 n'])['Color n'] @@ -3683,18 +3688,18 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if prev_vdisp: create_link(tree, prev_vdisp, vdisp_blend.inputs[bcol0]) vdisp = rgb - vdisp_alpha = alpha + if vdisp_alpha == None: + vdisp_alpha = alpha + if layer.type == 'GROUP': if group_vdisp: vdisp = group_vdisp - if group_vdisp_alpha: - vdisp_alpha = group_vdisp_alpha - vdisp_intensity = tree.nodes.get(ch.vdisp_intensity) + vdisp_intensity = tree.nodes.get(ch.vdisp_intensity) - # Dedicated vector displacement channel intensity connection only works with group layer for now - if vdisp_intensity and ch_intensity: - vdisp_alpha = create_link(tree, vdisp_alpha, vdisp_intensity.inputs[0])[0] - create_link(tree, ch_intensity, vdisp_intensity.inputs[1]) + # Dedicated vector displacement channel intensity connection only works with group layer for now + if vdisp_intensity and ch_intensity: + vdisp_alpha = create_link(tree, vdisp_alpha, vdisp_intensity.inputs[0])[0] + create_link(tree, ch_intensity, vdisp_intensity.inputs[1]) if vdisp: create_link(tree, vdisp, vdisp_blend.inputs[bcol1]) diff --git a/subtree.py b/subtree.py index bf74dbfb..b8e82076 100644 --- a/subtree.py +++ b/subtree.py @@ -612,6 +612,7 @@ def check_mask_mix_nodes(layer, tree=None, specific_mask=None, specific_ch=None) if root_ch.type == 'NORMAL': if remove_node(tree, c, 'mix_pure'): need_reconnect = True if remove_node(tree, c, 'mix_normal'): need_reconnect = True + if remove_node(tree, c, 'mix_vdisp'): need_reconnect = True continue if (root_ch.type == 'NORMAL' and root_ch.enable_smooth_bump and height_process_needed and @@ -688,6 +689,20 @@ def check_mask_mix_nodes(layer, tree=None, specific_mask=None, specific_ch=None) else: if remove_node(tree, c, 'mix_normal'): need_reconnect = True + if layer.type == 'GROUP' and is_layer_using_vdisp_map(layer): + mix_vdisp = tree.nodes.get(c.mix_vdisp) + if not mix_vdisp: + need_reconnect = True + mix_vdisp = new_mix_node(tree, c, 'mix_vdisp', 'Mask VDisp') + mix_vdisp.inputs[0].default_value = mask.intensity_value + if mix_vdisp.blend_type != mask.blend_type: + mix_vdisp.blend_type = mask.blend_type + # Use clamp to keep value between 0.0 to 1.0 + if mask.blend_type not in {'MIX', 'MULTIPLY'}: + set_mix_clamp(mix_vdisp, True) + else: + if remove_node(tree, c, 'mix_vdisp'): need_reconnect = True + else: if (trans_bump and i >= chain and ( (trans_bump_flip and ch.enable_transition_ramp) or From 9f142544461fa85e51485ea2c6af6659d5f6a09b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 7 Jul 2025 15:48:26 +0700 Subject: [PATCH 218/283] Make vdm layer with `Add` blend type works when put inside a group --- node_connections.py | 7 +++++-- subtree.py | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/node_connections.py b/node_connections.py index 9ae350f4..dd9d6330 100644 --- a/node_connections.py +++ b/node_connections.py @@ -3714,8 +3714,11 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): if prev_vdisp_alpha and 'Alpha1' in vdisp_blend.inputs: create_link(tree, prev_vdisp_alpha, vdisp_blend.inputs['Alpha1']) - if next_vdisp_alpha and 'Value' in vdisp_blend.outputs: - create_link(tree, vdisp_blend.outputs['Value'], next_vdisp_alpha) + if next_vdisp_alpha: + if 'Value' in vdisp_blend.outputs: + create_link(tree, vdisp_blend.outputs['Value'], next_vdisp_alpha) + elif 'Alpha' in vdisp_blend.outputs: + create_link(tree, vdisp_blend.outputs['Alpha'], next_vdisp_alpha) elif prev_vdisp and next_vdisp: create_link(tree, prev_vdisp, next_vdisp) diff --git a/subtree.py b/subtree.py index b8e82076..34bbdfac 100644 --- a/subtree.py +++ b/subtree.py @@ -2178,7 +2178,12 @@ def check_channel_normal_map_nodes(tree, layer, root_ch, ch, need_reconnect=Fals if layer.parent_idx != -1 and ch.normal_blend_type == 'MIX': vdisp_blend, need_reconnect = replace_new_node( - tree, ch, 'vdisp_blend', 'ShaderNodeGroup', 'VDisp Blend', lib.STRAIGHT_OVER, + tree, ch, 'vdisp_blend', 'ShaderNodeGroup', 'VDisp Blend', lib.STRAIGHT_OVER_HEIGHT_MIX, + return_status=True, hard_replace=True, dirty=need_reconnect + ) + elif layer.parent_idx != -1 and ch.normal_blend_type == 'OVERLAY': + vdisp_blend, need_reconnect = replace_new_node( + tree, ch, 'vdisp_blend', 'ShaderNodeGroup', 'VDisp Blend', lib.STRAIGHT_OVER_HEIGHT_ADD, return_status=True, hard_replace=True, dirty=need_reconnect ) else: From a3c65bb55fa6f49fc9286079c415ff7988d9d100 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 8 Jul 2025 14:23:50 +0700 Subject: [PATCH 219/283] Fix: Bump map with `Write Height` disabled produce wrong blended normal --- node_connections.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/node_connections.py b/node_connections.py index dd9d6330..bd6decde 100644 --- a/node_connections.py +++ b/node_connections.py @@ -3049,9 +3049,10 @@ def reconnect_layer_nodes(layer, ch_idx=-1, merge_mask=False): elif normal_map_proc and normal_proc and 'Normal' in normal_proc.inputs: create_link(tree, normal_map_proc.outputs[0], normal_proc.inputs['Normal']) else: - prev_normal = get_essential_node(tree, TREE_START).get(root_ch.name) - if prev_normal and normal_proc and 'Normal' in normal_proc.inputs: - create_link(tree, prev_normal, normal_proc.inputs['Normal']) + # NOTE: Using previous normal doesn't really has actual use cases, so use geometry normal instead + #prev_normal = get_essential_node(tree, TREE_START).get(root_ch.name) + if normal_proc and 'Normal' in normal_proc.inputs: + create_link(tree, get_essential_node(tree, GEOMETRY).get('Normal'), normal_proc.inputs['Normal']) height_alpha = alpha #alpha_ns = None From a9b641222e6f902b2fdd09254bd8f6843a2c05b5 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 8 Jul 2025 15:28:04 +0700 Subject: [PATCH 220/283] Make baked outside nodes behave more consistently --- Bake.py | 5 +++-- bake_common.py | 14 +++++++++++--- common.py | 8 ++++---- ui.py | 2 +- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Bake.py b/Bake.py index 926753cc..79325061 100644 --- a/Bake.py +++ b/Bake.py @@ -1673,6 +1673,7 @@ def execute(self, context): # Process baked images baked_images = [] for i, ch in enumerate(self.channels): + if ch.no_layer_using: continue baked = tree.nodes.get(ch.baked) if baked and baked.image: @@ -3103,7 +3104,7 @@ def update_enable_baked_outside(self, context): mtree.links.new(tex.outputs[0], norm.inputs[1]) baked_normal_overlay = None - if not is_overlay_normal_empty(yp): + if is_baked_normal_without_bump_needed(ch): baked_normal_overlay = tree.nodes.get(ch.baked_normal_overlay) if baked_normal_overlay and baked_normal_overlay.image: loc_y -= 300 @@ -3117,10 +3118,10 @@ def update_enable_baked_outside(self, context): if not is_bl_newer_than(2, 80) and baked_normal_overlay.image.colorspace_settings.name != get_srgb_name(): tex_normal_overlay.color_space = 'NONE' + # Displacement setup will use normal without bump if it exists if ch.enable_subdiv_setup: mtree.links.new(tex_normal_overlay.outputs[0], norm.inputs[1]) - #if not ch.enable_subdiv_setup or baked_normal_overlay: for l in outp.links: mtree.links.new(norm.outputs[0], l.to_socket) diff --git a/bake_common.py b/bake_common.py index a855759b..4bf78fa2 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1644,6 +1644,14 @@ def get_valid_filepath(img, use_hdr): return img.filepath +def is_baked_normal_without_bump_needed(root_ch): + yp = root_ch.id_data.yp + + return ( + (not is_overlay_normal_empty(yp) and (any_layers_using_disp(yp) or any_layers_using_vdisp(yp))) or + (root_ch.enable_subdiv_setup and (any_layers_using_disp(yp) or any_layers_using_vdisp(yp))) + ) + def bake_channel( uv_map, mat, node, root_ch, width=1024, height=1024, target_layer=None, use_hdr=False, aa_level=1, force_use_udim=False, tilenums=[], interpolation='Linear', @@ -1942,8 +1950,8 @@ def bake_channel( if not target_layer: - ### Normal overlay only - if (is_overlay_normal_empty(yp) or (not any_layers_using_disp(yp) and not any_layers_using_vdisp(yp))) and not root_ch.enable_subdiv_setup: + ### Normal without bump only + if not is_baked_normal_without_bump_needed(root_ch): # Remove baked_normal_overlay remove_node(tree, root_ch, 'baked_normal_overlay') else: @@ -2025,7 +2033,7 @@ def bake_channel( if end_linear: create_link(tree, ori_soc, end.inputs[root_ch.name]) - # Set baked normal overlay image + # Set baked normal without bump image if baked_normal_overlay.image: temp = baked_normal_overlay.image img_users = get_all_image_users(baked_normal_overlay.image) diff --git a/common.py b/common.py index 0b1a0337..7311b93e 100644 --- a/common.py +++ b/common.py @@ -5513,7 +5513,7 @@ def is_any_layer_using_channel(root_ch, node=None): for layer in yp.layers: if layer.type in {'GROUP', 'BACKGROUND'}: continue - if layer.channels[ch_idx].enable: + if get_channel_enabled(layer.channels[ch_idx], layer): return True return False @@ -5964,7 +5964,7 @@ def is_overlay_normal_empty(yp): for l in yp.layers: c = get_height_channel(l) - if not c or not l.enable or not c.enable: continue + if not c or not get_channel_enabled(c, l): continue if c.normal_map_type == 'NORMAL_MAP' or (c.normal_map_type == 'BUMP_MAP' and not c.write_height): return False @@ -5974,7 +5974,7 @@ def any_layers_using_vdisp(yp): for l in yp.layers: c = get_height_channel(l) - if not c or not l.enable or not c.enable: continue + if not c or not get_channel_enabled(c, l): continue if c.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': return True @@ -5985,7 +5985,7 @@ def any_layers_using_disp(yp): for l in yp.layers: if l.type in {'GROUP', 'BACKGROUND'}: continue c = get_height_channel(l) - if not c or not l.enable or not c.enable: continue + if not c or not get_channel_enabled(c, l): continue if c.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'} and c.write_height: return True diff --git a/ui.py b/ui.py index 7176ce27..2b39f95f 100644 --- a/ui.py +++ b/ui.py @@ -4544,7 +4544,7 @@ def draw_item(self, context, layout, data, item, icon, active_data, active_propn icon_value = lib.get_icon(lib.channel_custom_icon_dict[item.type]) row.prop(item, 'name', text='', emboss=False, icon_value=icon_value) - if not yp.use_baked or item.no_layer_using: + if not yp.use_baked or (item.no_layer_using and not (yp.use_baked and yp.enable_baked_outside)): if item.type == 'RGB': row = row.row(align=True) From 04e798cf2b1da8fbfbf208592eb0df5b1cfd7dd3 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 8 Jul 2025 16:37:08 +0700 Subject: [PATCH 221/283] Add update notification when trying to use node that created with newer addon version. --- ui.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ui.py b/ui.py index 2b39f95f..5a47d3a9 100644 --- a/ui.py +++ b/ui.py @@ -4165,6 +4165,22 @@ def main_draw(self, context): col.operator("wm.y_update_yp_trees", text='Update node to version ' + get_current_version_str(), icon='ERROR') return + # Message will appear when opening file with newer node version + if version_tuple(yp.version) > version_tuple(get_current_version_str()): + col = layout.column() + col.alert = True + col.label(text='This node uses newer version!', icon='ERROR') + if 'addon_updater_ops' not in dir(): + # Extension platform releases link + col.operator('wm.url_open', text='Update '+get_addon_title(), icon='ERROR').url = 'https://extensions.blender.org/add-ons/ucupaint/' + else: + if is_online(): + # Blender with online access already has the update button + col.label(text='Please update the addon!', icon='BLANK1') + else: + # Github releases link + col.operator('wm.url_open', text='Update '+get_addon_title(), icon='ERROR').url = 'https://github.com/ucupumar/ucupaint/releases' + if ypup.developer_mode: height_root_ch = get_root_height_channel(yp) if height_root_ch and height_root_ch.enable_smooth_bump: From d1b8f1be7e1404c2f71edf3321dbbf7a96535e73 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 11 Jul 2025 00:13:47 +0700 Subject: [PATCH 222/283] Fix: Moving layer with transition ramp inside or outside a group can produce wrong color because of wrong connections --- transition_common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transition_common.py b/transition_common.py index 8c3ce2e3..3b58c81c 100644 --- a/transition_common.py +++ b/transition_common.py @@ -177,12 +177,12 @@ def set_transition_ramp_nodes(tree, layer, ch): ((root_ch.type == 'RGB' and root_ch.enable_alpha) or layer.parent_idx != -1)): tr_ramp_blend = replace_new_node( tree, ch, 'tr_ramp_blend', 'ShaderNodeGroup', 'Transition Ramp Blend', - lib.RAMP_FLIP_STRAIGHT_OVER_BLEND + lib.RAMP_FLIP_STRAIGHT_OVER_BLEND, hard_replace=True ) else: tr_ramp_blend, dirty = replace_new_node( tree, ch, 'tr_ramp_blend', 'ShaderNodeGroup', 'Transition Ramp Blend', - lib.RAMP_FLIP_BLEND, return_status=True + lib.RAMP_FLIP_BLEND, return_status=True, hard_replace=True ) if dirty: duplicate_lib_node_tree(tr_ramp_blend) From a8894c7df7a0cff3ce7e861ae3ae812fd8a7948a Mon Sep 17 00:00:00 2001 From: ucupumar Date: Sat, 19 Jul 2025 00:47:07 +0700 Subject: [PATCH 223/283] Channel subsocket connection fix (#309) * Make sure to bake vdisp and disp image if there's at least channel input connection. The result are still wrong tho. * Reconnect vdisp connection after disabling displacement setup * Remember default value of channel input sockets --- Bake.py | 34 +++++++++++++++++----------- Root.py | 6 ++++- bake_common.py | 14 ++++++------ common.py | 59 ++++++++++++++++++++++++++++++++++++------------ image_ops.py | 4 ++-- input_outputs.py | 27 +++++++++++++++------- 6 files changed, 98 insertions(+), 46 deletions(-) diff --git a/Bake.py b/Bake.py index 79325061..c8b8d14f 100644 --- a/Bake.py +++ b/Bake.py @@ -3594,19 +3594,27 @@ def check_displacement_node(mat, node, set_one=False, unset_one=False, set_outsi create_link(mat.node_tree, height_outp, disp.inputs['Height']) create_link(mat.node_tree, max_height_outp, disp.inputs['Scale']) - if disp and unset_one: - height_inp = node.inputs.get(height_ch.name + io_suffix['HEIGHT']) - max_height_inp = node.inputs.get(height_ch.name + io_suffix['MAX_HEIGHT']) - - if height_inp and len(height_inp.links) > 0: - soc = height_inp.links[0].from_socket - create_link(mat.node_tree, soc, disp.inputs['Height']) - break_input_link(mat.node_tree, height_inp) - - if max_height_inp and len(max_height_inp.links) > 0: - soc = max_height_inp.links[0].from_socket - create_link(mat.node_tree, soc, disp.inputs['Scale']) - break_input_link(mat.node_tree, max_height_inp) + if unset_one: + if disp: + height_inp = node.inputs.get(height_ch.name + io_suffix['HEIGHT']) + max_height_inp = node.inputs.get(height_ch.name + io_suffix['MAX_HEIGHT']) + + if height_inp and len(height_inp.links) > 0: + soc = height_inp.links[0].from_socket + create_link(mat.node_tree, soc, disp.inputs['Height']) + break_input_link(mat.node_tree, height_inp) + + if max_height_inp and len(max_height_inp.links) > 0: + soc = max_height_inp.links[0].from_socket + create_link(mat.node_tree, soc, disp.inputs['Scale']) + break_input_link(mat.node_tree, max_height_inp) + + if vdisp: + vdisp_inp = node.inputs.get(height_ch.name + io_suffix['VDISP']) + if vdisp_inp and len(vdisp_inp.links) > 0: + soc = vdisp_inp.links[0].from_socket + create_link(mat.node_tree, soc, vdisp.inputs['Vector']) + break_input_link(mat.node_tree, height_inp) return disp diff --git a/Root.py b/Root.py index 4145b212..368c2dcf 100644 --- a/Root.py +++ b/Root.py @@ -3247,7 +3247,7 @@ def update_channel_alpha(self, context): # Set node default_value node = get_active_ypaint_node() - node.inputs[alpha_name].default_value = 0.0 + node.inputs[alpha_name].default_value = self.ori_alpha_value alpha_connected = False @@ -3821,6 +3821,10 @@ class YPaintChannel(bpy.types.PropertyGroup): ori_height_to : CollectionProperty(type=YNodeConnections) ori_max_height_to : CollectionProperty(type=YNodeConnections) + # Default value related + ori_alpha_value : FloatProperty(default=0.0) + ori_max_height_value : FloatProperty(default=0.1) + class YPaintUV(bpy.types.PropertyGroup): name : StringProperty(default='') diff --git a/bake_common.py b/bake_common.py index 4bf78fa2..d5f88969 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1645,11 +1645,9 @@ def get_valid_filepath(img, use_hdr): return img.filepath def is_baked_normal_without_bump_needed(root_ch): - yp = root_ch.id_data.yp - return ( - (not is_overlay_normal_empty(yp) and (any_layers_using_disp(yp) or any_layers_using_vdisp(yp))) or - (root_ch.enable_subdiv_setup and (any_layers_using_disp(yp) or any_layers_using_vdisp(yp))) + (not is_overlay_normal_empty(root_ch) and (any_layers_using_disp(root_ch) or any_layers_using_vdisp(root_ch))) or + (root_ch.enable_subdiv_setup and (any_layers_using_disp(root_ch) or any_layers_using_vdisp(root_ch))) ) def bake_channel( @@ -2052,7 +2050,7 @@ def bake_channel( mat.node_tree.links.new(soc, mat_out.inputs['Displacement']) ### Vector Displacement - if not any_layers_using_vdisp(yp): + if not any_layers_using_vdisp(root_ch): # Remove baked_vdisp remove_node(tree, root_ch, 'baked_vdisp') else: @@ -2117,7 +2115,7 @@ def bake_channel( else: baked_vdisp.image = vdisp_img - if not any_layers_using_disp(yp): + if not any_layers_using_disp(root_ch): # Remove baked_disp remove_node(tree, root_ch, 'baked_disp') remove_node(tree, root_ch, 'end_max_height') @@ -2144,7 +2142,9 @@ def bake_channel( start = tree.nodes.get(TREE_START) end = tree.nodes.get(TREE_END) ori_soc = end.inputs[root_ch.name].links[0].from_socket - max_height = start.outputs.get(root_ch.name + io_suffix['HEIGHT']) + if root_ch.name + io_suffix['MAX_HEIGHT'] in start.outputs: + max_height = start.outputs.get(root_ch.name + io_suffix['MAX_HEIGHT']) + else: max_height = start.outputs.get(root_ch.name + io_suffix['HEIGHT']) # Get the last layer that output max height for l in yp.layers: if not l.enable or not l.channels[get_channel_index(root_ch)].enable: continue diff --git a/common.py b/common.py index 7311b93e..cb2eba2d 100644 --- a/common.py +++ b/common.py @@ -5507,9 +5507,13 @@ def is_any_layer_using_channel(root_ch, node=None): inp = node.inputs.get(root_ch.name + io_suffix['ALPHA']) if inp and len(inp.links): return True - inp = node.inputs.get(root_ch.name + io_suffix['HEIGHT']) - if inp and len(inp.links): - return True + if root_ch.type == 'NORMAL': + inp = node.inputs.get(root_ch.name + io_suffix['HEIGHT']) + if inp and len(inp.links): + return True + inp = node.inputs.get(root_ch.name + io_suffix['VDISP']) + if inp and len(inp.links): + return True for layer in yp.layers: if layer.type in {'GROUP', 'BACKGROUND'}: continue @@ -5732,7 +5736,7 @@ def get_yp_images(yp, udim_only=False, get_baked_channels=False, check_overlay_n if baked_vdisp and baked_vdisp.image and baked_vdisp.image not in images: images.append(baked_vdisp.image) - if not check_overlay_normal or not is_overlay_normal_empty(yp): + if not check_overlay_normal or not is_overlay_normal_empty(ch): baked_normal_overlay = tree.nodes.get(ch.baked_normal_overlay) if baked_normal_overlay and baked_normal_overlay.image and baked_normal_overlay.image not in images: images.append(baked_normal_overlay.image) @@ -5939,6 +5943,15 @@ def get_node(tree, name, parent=None): return node +def is_normal_vdisp_input_connected(root_normal_ch): + # NOTE: Assuming that the active node is using the input tree + node = get_active_ypaint_node() + if not node: return False + + io_vdisp_name = root_normal_ch.name + io_suffix['VDISP'] + vdisp_inp = node.inputs.get(io_vdisp_name) + return vdisp_inp and len(vdisp_inp.links) > 0 + def is_normal_height_input_connected(root_normal_ch): # NOTE: Assuming that the active node is using the input tree node = get_active_ypaint_node() @@ -5956,36 +5969,52 @@ def is_normal_input_connected(root_normal_ch): normal_inp = node.inputs.get(root_normal_ch.name) return normal_inp and len(normal_inp.links) > 0 -def is_overlay_normal_empty(yp): +def is_overlay_normal_empty(root_ch): + yp = root_ch.id_data.yp + channel_index = get_channel_index(root_ch) - root_ch = get_root_height_channel(yp) - if root_ch and is_normal_input_connected(root_ch): + if is_normal_input_connected(root_ch): return False for l in yp.layers: - c = get_height_channel(l) - if not c or not get_channel_enabled(c, l): continue + if l.type in {'GROUP', 'BACKGROUND'}: continue + if channel_index >= len(l.channels): continue + c = l.channels[channel_index] + if not get_channel_enabled(c, l): continue if c.normal_map_type == 'NORMAL_MAP' or (c.normal_map_type == 'BUMP_MAP' and not c.write_height): return False return True -def any_layers_using_vdisp(yp): +def any_layers_using_vdisp(root_ch): + yp = root_ch.id_data.yp + channel_index = get_channel_index(root_ch) + + if is_normal_vdisp_input_connected(root_ch): + return True for l in yp.layers: - c = get_height_channel(l) - if not c or not get_channel_enabled(c, l): continue + if l.type in {'GROUP', 'BACKGROUND'}: continue + if channel_index >= len(l.channels): continue + c = l.channels[channel_index] + if not get_channel_enabled(c, l): continue if c.normal_map_type == 'VECTOR_DISPLACEMENT_MAP': return True return False -def any_layers_using_disp(yp): +def any_layers_using_disp(root_ch): + yp = root_ch.id_data.yp + channel_index = get_channel_index(root_ch) + + if is_normal_height_input_connected(root_ch): + return True for l in yp.layers: if l.type in {'GROUP', 'BACKGROUND'}: continue - c = get_height_channel(l) - if not c or not get_channel_enabled(c, l): continue + if channel_index >= len(l.channels): continue + c = l.channels[channel_index] + if not get_channel_enabled(c, l): continue if c.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'} and c.write_height: return True diff --git a/image_ops.py b/image_ops.py index 26ec58f2..a1a92a85 100644 --- a/image_ops.py +++ b/image_ops.py @@ -506,7 +506,7 @@ def execute(self, context): pack_image(baked_vdisp.image) baked_vdisp.image.filepath = '' - if not is_overlay_normal_empty(yp): + if not is_overlay_normal_empty(ch): baked_normal_overlay = tree.nodes.get(ch.baked_normal_overlay) if baked_normal_overlay and baked_normal_overlay.image and not baked_normal_overlay.image.packed_file: pack_image(baked_normal_overlay.image) @@ -775,7 +775,7 @@ def execute(self, context): images.append(baked_vdisp.image) baked_vdisp_image = baked_vdisp.image - if not is_overlay_normal_empty(yp): + if not is_overlay_normal_empty(ch): baked_normal_overlay = tree.nodes.get(ch.baked_normal_overlay) if baked_normal_overlay and baked_normal_overlay.image: images.append(baked_normal_overlay.image) diff --git a/input_outputs.py b/input_outputs.py index 793c2b59..9f104af5 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -260,7 +260,7 @@ def check_start_end_root_ch_nodes(group_tree, specific_channel=None): remove_node(group_tree, channel, 'end_max_height_tweak') # Engine filter is needed if subdiv is on and channel is baked - if yp.use_baked and channel.enable_subdiv_setup and any_layers_using_displacement(channel): + if yp.use_baked and channel.enable_subdiv_setup and (any_layers_using_disp(channel) or any_layers_using_vdisp(channel)): lib_name = lib.ENGINE_FILTER if is_bl_newer_than(2, 80) else lib.ENGINE_FILTER_LEGACY end_normal_engine_filter = replace_new_node( @@ -328,6 +328,7 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= #print("Checking YP IO. Specific Layer: " + str(specific_layer)) + group_node = get_active_ypaint_node() group_tree = yp.id_data input_index = 0 @@ -394,8 +395,6 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= # Displacement IO if ch.type == 'NORMAL' and (ch.enable_subdiv_setup or force_height_io): - group_node = get_active_ypaint_node() - name = ch.name + io_suffix['HEIGHT'] height_default_value = 0.0 @@ -412,11 +411,10 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= name = ch.name + io_suffix['MAX_HEIGHT'] - max_height_default_value = 0.1 - create_input(group_tree, name, 'NodeSocketFloat', valid_inputs, input_index, default_value=max_height_default_value) - # Set node default value - if group_node.node_tree == group_tree: - group_node.inputs[name].default_value = max_height_default_value + if create_input(group_tree, name, 'NodeSocketFloat', valid_inputs, input_index, default_value=0.1): + # Set node default value + if group_node.node_tree == group_tree: + group_node.inputs[name].default_value = ch.ori_max_height_value input_index += 1 create_output(group_tree, name, 'NodeSocketFloat', valid_outputs, output_index) @@ -445,6 +443,19 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= # Check for invalid io for inp in get_tree_inputs(group_tree): if inp not in valid_inputs: + + # Remember default values + for ch in yp.channels: + + if inp.name == ch.name + io_suffix['ALPHA']: + node_inp = group_node.inputs.get(inp.name) + ch.ori_alpha_value = node_inp.default_value + + if ch.type == 'NORMAL': + if inp.name == ch.name + io_suffix['MAX_HEIGHT']: + node_inp = group_node.inputs.get(inp.name) + ch.ori_max_height_value = node_inp.default_value + remove_tree_input(group_tree, inp) for outp in get_tree_outputs(group_tree): From 463208e4cf1426358846fc246997d79ca48d7667 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 21 Jul 2025 23:57:41 +0700 Subject: [PATCH 224/283] Fix: Baking other object data can spawn empty image texture node on some materials --- bake_common.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/bake_common.py b/bake_common.py index d5f88969..cd785775 100644 --- a/bake_common.py +++ b/bake_common.py @@ -274,22 +274,6 @@ def remember_before_bake(yp=None, mat=None): if mat: book['ori_bsdf'] = mat.yp.ori_bsdf - # Remember all objects using the same material - objs = get_all_objects_with_same_materials(obj.active_material, True) - book['ori_mat_objs'] = [o.name for o in objs] - book['ori_mat_objs_active_nodes'] = [] - - # Remember other material active nodes - for o in objs: - active_node_names = [] - for m in o.data.materials: - if m and m.use_nodes and m.node_tree.nodes.active: - active_node_names.append(m.node_tree.nodes.active.name) - continue - active_node_names.append('') - - book['ori_mat_objs_active_nodes'].append(active_node_names) - return book def get_active_render_uv_node(tree, active_render_uv_name): @@ -734,10 +718,25 @@ def prepare_bake_settings( if book['parallax_ch']: book['parallax_ch'].enable_parallax = False + # Remember object materials related to baking + book['ori_mat_objs'] = [] + book['ori_mat_objs_active_nodes'] = [] + for o in objs: mat = o.active_material if not mat: continue + # Remember other material active nodes + active_node_names = [] + for m in o.data.materials: + if m and m.use_nodes and m.node_tree.nodes.active: + active_node_names.append(m.node_tree.nodes.active.name) + continue + active_node_names.append('') + + book['ori_mat_objs'].append(o.name) + book['ori_mat_objs_active_nodes'].append(active_node_names) + # Add extra uv nodes for non connected texture nodes outside yp node if uv_map != '': From 7c9ef2caa21f244e0ca2d7506f7752d77d6e931a Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 23 Jul 2025 15:30:12 +0700 Subject: [PATCH 225/283] Fix: Wrong other object's channel bake result for channels after `Normal` --- bake_common.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/bake_common.py b/bake_common.py index cd785775..0db481a2 100644 --- a/bake_common.py +++ b/bake_common.py @@ -394,6 +394,7 @@ def prepare_other_objs_channels(yp, other_objs): ch_other_mats = [] ch_other_sockets = [] ch_other_defaults = [] + ch_other_default_weights = [] ch_other_alpha_sockets = [] ch_other_alpha_defaults = [] @@ -406,6 +407,7 @@ def prepare_other_objs_channels(yp, other_objs): mats = [] sockets = [] defaults = [] + default_weights = [] alpha_sockets = [] alpha_defaults = [] @@ -441,6 +443,7 @@ def prepare_other_objs_channels(yp, other_objs): socket = None default = None + default_weight = 1.0 alpha_socket = None alpha_default = 1.0 @@ -480,6 +483,22 @@ def prepare_other_objs_channels(yp, other_objs): if len(socket.links) == 0: if default == None: default = socket.default_value + + # Blender 4.0 has weight/strength value for some inputs + if is_bl_newer_than(4): + input_prefixes = ['Subsurface', 'Coat', 'Sheen', 'Emission'] + for prefix in input_prefixes: + if socket.name.startswith(prefix): + + if socket.name.startswith('Emission'): + weight_socket_name = 'Emission Strength' + else: weight_socket_name = prefix + ' Weight' + + # NOTE: Only set the default weight if there's no dedicated channel for weight in destination yp + if weight_socket_name not in yp.channels and weight_socket_name != socket.name: + weight_socket = bsdf_node.inputs.get(weight_socket_name) + if weight_socket: + default_weight = weight_socket.default_value else: socket = socket.links[0].from_socket @@ -498,6 +517,7 @@ def prepare_other_objs_channels(yp, other_objs): mats.append(mat) sockets.append(socket) defaults.append(default) + default_weights.append(default_weight) alpha_sockets.append(alpha_socket) alpha_defaults.append(alpha_default) @@ -508,10 +528,11 @@ def prepare_other_objs_channels(yp, other_objs): ch_other_mats.append(mats) ch_other_sockets.append(sockets) ch_other_defaults.append(defaults) + ch_other_default_weights.append(default_weights) ch_other_alpha_sockets.append(alpha_sockets) ch_other_alpha_defaults.append(alpha_defaults) - return ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes + return ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_default_weights, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes def recover_other_objs_channels(other_objs, ori_mat_no_nodes): for o in other_objs: @@ -2582,7 +2603,7 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): other_mats, other_sockets, other_defaults, other_alpha_sockets, other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_colors(yp, other_objs) elif bprops.type == 'OTHER_OBJECT_CHANNELS': - ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) + ch_other_objects, ch_other_mats, ch_other_sockets, ch_other_defaults, ch_other_default_weights, ch_other_alpha_sockets, ch_other_alpha_defaults, ori_mat_no_nodes = prepare_other_objs_channels(yp, other_objs) if not other_objs: if overwrite_img: @@ -3182,16 +3203,23 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): for j, m in enumerate(ch_other_mats[idx]): if m in connected_mats: continue default = ch_other_defaults[idx][j] + default_weight = ch_other_default_weights[idx][j] socket = ch_other_sockets[idx][j] temp_emi = m.node_tree.nodes.get(TEMP_EMISSION) if not temp_emi: continue + # Make sure temporary emission node is connected + if len(temp_emi.outputs[0].links) == 0: + mout = get_material_output(m) + m.node_tree.links.new(temp_emi.outputs[0], mout.inputs[0]) + if default != None: # Set default if type(default) == float: temp_emi.inputs[0].default_value = (default, default, default, 1.0) else: temp_emi.inputs[0].default_value = (default[0], default[1], default[2], 1.0) + temp_emi.inputs[1].default_value = default_weight # Break link for l in temp_emi.inputs[0].links: From b400a48842d87b54cf8bc67133d4e74751359949 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 23 Jul 2025 15:33:31 +0700 Subject: [PATCH 226/283] Make sure to always set default weight value --- bake_common.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bake_common.py b/bake_common.py index 0db481a2..66057415 100644 --- a/bake_common.py +++ b/bake_common.py @@ -3219,7 +3219,6 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): if type(default) == float: temp_emi.inputs[0].default_value = (default, default, default, 1.0) else: temp_emi.inputs[0].default_value = (default[0], default[1], default[2], 1.0) - temp_emi.inputs[1].default_value = default_weight # Break link for l in temp_emi.inputs[0].links: @@ -3227,6 +3226,9 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): elif socket: m.node_tree.links.new(socket, temp_emi.inputs[0]) + # Set default weight + temp_emi.inputs[1].default_value = default_weight + connected_mats.append(m) colorspace = get_noncolor_name() if root_ch.colorspace == 'LINEAR' else get_srgb_name() From 5880aafd90055be92547fb0ea7cab8fdb87d9c82 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 23 Jul 2025 19:15:17 +0700 Subject: [PATCH 227/283] Fix: Clicking `Brush` tool after toggling eraser with Smear/Blur tool will revert to use eraser brush instead of real paint brush --- vcol_editor.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/vcol_editor.py b/vcol_editor.py index eb99f885..30fafc0d 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -1,4 +1,5 @@ import bpy, bmesh, numpy, time, os +from bpy.app.handlers import persistent from mathutils import * from pathlib import Path from bpy.props import * @@ -161,6 +162,13 @@ def set_custom_eraser_brush_icon(eraser_brush): if not is_bl_newer_than(4, 3): eraser_brush.use_custom_icon = True +brushes_with_dedicated_tool = [ + 'Blur', + 'Smear', + 'Clone', + 'Fill', +] + class YToggleEraser(bpy.types.Operator): bl_idname = "paint.y_toggle_eraser" bl_label = "Toggle Eraser Brush" @@ -212,6 +220,22 @@ def execute(self, context): if brush.name == new_brush_name: brush.blend = ve.ori_texpaint_blending_mode if brush.blend == 'ERASE_ALPHA' else 'ERASE_ALPHA' else: + + # HACK: Set brush to 'builtin.brush' brush first before using brush with dedicated tool + # This is to avoid confusion since by default, if user go back to use 'Brush' tool, it will point to eraser brush + if new_brush_name in brushes_with_dedicated_tool: + if ve.ori_texpaint_builtin_brush != '': + set_brush_asset(ve.ori_texpaint_builtin_brush, mode) + else: set_brush_asset('Paint Soft', mode) + + # HACK: Remember what brush the last time used if user use brush with dedicated tool + if brush.name in brushes_with_dedicated_tool: + try: bpy.ops.wm.tool_set_by_id(name="builtin.brush") + except Exception as e: print('EXCEPTIION:', e) + brush = context.tool_settings.image_paint.brush + if brush and brush.name not in tex_eraser_asset_names and brush.name not in brushes_with_dedicated_tool: + ve.ori_texpaint_builtin_brush = brush.name + # Set brush asset set_brush_asset(new_brush_name, mode) @@ -787,6 +811,7 @@ class YVcolEditorProps(bpy.types.PropertyGroup): ori_texpaint_blending_mode : StringProperty(default='') ori_texpaint_brush : StringProperty(default='') + ori_texpaint_builtin_brush : StringProperty(default='') ori_sculpt_blending_mode : StringProperty(default='') ori_sculpt_brush : StringProperty(default='') From 44fb3fa0d8684eb86f456de0693cacc026ea6be0 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 23 Jul 2025 19:25:29 +0700 Subject: [PATCH 228/283] Use window manager property instead so the default builtin brush prop won't be saved to the blend file --- Root.py | 1 + vcol_editor.py | 47 ++++++++++++++++++++++++----------------------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/Root.py b/Root.py index 368c2dcf..1dd46723 100644 --- a/Root.py +++ b/Root.py @@ -4099,6 +4099,7 @@ class YPaintWMProps(bpy.types.PropertyGroup): test_result_error : IntProperty(default=0) test_result_failed : IntProperty(default=0) + default_builtin_brush : StringProperty(default='') brush_asset_caches : CollectionProperty(type=YPaintBrushAssetCache) correct_paint_image_name : StringProperty(default='') diff --git a/vcol_editor.py b/vcol_editor.py index 30fafc0d..daa8e34f 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -5,6 +5,26 @@ from bpy.props import * from .common import * +tex_default_brush_eraser_pairs = { + 'Paint Hard' : 'Erase Hard', + 'Paint Soft' : 'Erase Soft', + 'Paint Hard Pressure' : 'Erase Hard Pressure', + 'Smear' : 'Erase Soft', + 'Airbrush' : 'Erase Soft', + 'Paint Soft Pressure' : 'Erase Soft', + 'Clone' : 'Erase Hard', + 'Blur' : 'Erase Soft', + 'Fill' : 'Erase Hard', + 'Mask' : 'Erase Soft', +} + +brushes_with_dedicated_tool = [ + 'Blur', + 'Smear', + 'Clone', + 'Fill', +] + class YSetActiveVcol(bpy.types.Operator): bl_idname = "mesh.y_set_active_vcol" bl_label = "Set Active Vertex Color" @@ -131,19 +151,6 @@ def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): return except Exception as e: print(e) -tex_default_brush_eraser_pairs = { - 'Paint Hard' : 'Erase Hard', - 'Paint Soft' : 'Erase Soft', - 'Paint Hard Pressure' : 'Erase Hard Pressure', - 'Smear' : 'Erase Soft', - 'Airbrush' : 'Erase Soft', - 'Paint Soft Pressure' : 'Erase Soft', - 'Clone' : 'Erase Hard', - 'Blur' : 'Erase Soft', - 'Fill' : 'Erase Hard', - 'Mask' : 'Erase Soft', -} - def set_custom_eraser_brush_icon(eraser_brush): eraser_icon = 'eraser.png' #if is_bl_newer_than(2, 92) else 'eraser_small.png' filepath = get_addon_filepath() + os.sep + 'asset_icons' + os.sep + eraser_icon @@ -162,13 +169,6 @@ def set_custom_eraser_brush_icon(eraser_brush): if not is_bl_newer_than(4, 3): eraser_brush.use_custom_icon = True -brushes_with_dedicated_tool = [ - 'Blur', - 'Smear', - 'Clone', - 'Fill', -] - class YToggleEraser(bpy.types.Operator): bl_idname = "paint.y_toggle_eraser" bl_label = "Toggle Eraser Brush" @@ -183,6 +183,7 @@ def execute(self, context): ve = context.scene.ve_edit mode = context.object.mode + wmyp = context.window_manager.ypprops # Blender 4.3+ texture paint will switch between available brush asset if mode == 'TEXTURE_PAINT' and is_bl_newer_than(4, 3): @@ -224,8 +225,8 @@ def execute(self, context): # HACK: Set brush to 'builtin.brush' brush first before using brush with dedicated tool # This is to avoid confusion since by default, if user go back to use 'Brush' tool, it will point to eraser brush if new_brush_name in brushes_with_dedicated_tool: - if ve.ori_texpaint_builtin_brush != '': - set_brush_asset(ve.ori_texpaint_builtin_brush, mode) + if wmyp.default_builtin_brush != '': + set_brush_asset(wmyp.default_builtin_brush, mode) else: set_brush_asset('Paint Soft', mode) # HACK: Remember what brush the last time used if user use brush with dedicated tool @@ -234,7 +235,7 @@ def execute(self, context): except Exception as e: print('EXCEPTIION:', e) brush = context.tool_settings.image_paint.brush if brush and brush.name not in tex_eraser_asset_names and brush.name not in brushes_with_dedicated_tool: - ve.ori_texpaint_builtin_brush = brush.name + wmyp.default_builtin_brush = brush.name # Set brush asset set_brush_asset(new_brush_name, mode) From a0f37a898807a75855f5dd3d3045058680af8b54 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 24 Jul 2025 00:40:27 +0700 Subject: [PATCH 229/283] Also use `Disable Eraser` button label for custom brush eraser --- common.py | 8 ++++++++ ui.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/common.py b/common.py index cb2eba2d..156ebf1a 100644 --- a/common.py +++ b/common.py @@ -586,6 +586,14 @@ def entity_input_items(self, context): 'Erase Soft' ] +tex_default_brushes = [ + 'Airbrush', + 'Paint Hard', + 'Paint Hard Pressure', + 'Paint Soft', + 'Paint Soft Pressure', +] + rgba_letters = ['r', 'g', 'b', 'a'] nsew_letters = ['n', 's', 'e', 'w'] diff --git a/ui.py b/ui.py index 5a47d3a9..7abc4d59 100644 --- a/ui.py +++ b/ui.py @@ -3815,7 +3815,7 @@ def draw_layers_ui(context, layout, node): bbox = col.box() row = bbox.row(align=True) label = 'Toggle Eraser' - if brush.name in tex_eraser_asset_names: + if brush.name in tex_eraser_asset_names or (brush not in tex_default_brushes and brush.blend == 'ERASE_ALPHA'): row.alert = True label = 'Disable Eraser' row.operator('paint.y_toggle_eraser', text=label) From cebbebaf2b157a33fd2b82c34cff64db15e29bab Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 25 Jul 2025 01:34:36 +0700 Subject: [PATCH 230/283] Use faster way to activate brush asset --- Root.py | 9 ---- vcol_editor.py | 122 ++++++++++++++----------------------------------- 2 files changed, 35 insertions(+), 96 deletions(-) diff --git a/Root.py b/Root.py index 1dd46723..10f501c8 100644 --- a/Root.py +++ b/Root.py @@ -4073,12 +4073,6 @@ class YPaintMaterialProps(bpy.types.PropertyGroup): class YPaintTimer(bpy.types.PropertyGroup): time : StringProperty(default='') -class YPaintBrushAssetCache(bpy.types.PropertyGroup): - name : StringProperty(default='') - library_type : StringProperty(default='') - library_name : StringProperty(default='') - blend_path : StringProperty(default='') - class YPaintWMProps(bpy.types.PropertyGroup): clipboard_tree : StringProperty(default='') clipboard_layer : StringProperty(default='') @@ -4100,7 +4094,6 @@ class YPaintWMProps(bpy.types.PropertyGroup): test_result_failed : IntProperty(default=0) default_builtin_brush : StringProperty(default='') - brush_asset_caches : CollectionProperty(type=YPaintBrushAssetCache) correct_paint_image_name : StringProperty(default='') @@ -4400,7 +4393,6 @@ def register(): bpy.utils.register_class(YPaint) bpy.utils.register_class(YPaintMaterialProps) bpy.utils.register_class(YPaintTimer) - bpy.utils.register_class(YPaintBrushAssetCache) bpy.utils.register_class(YPaintWMProps) bpy.utils.register_class(YPaintSceneProps) bpy.utils.register_class(YPaintObjectUVHash) @@ -4454,7 +4446,6 @@ def unregister(): bpy.utils.unregister_class(YPaint) bpy.utils.unregister_class(YPaintMaterialProps) bpy.utils.unregister_class(YPaintTimer) - bpy.utils.unregister_class(YPaintBrushAssetCache) bpy.utils.unregister_class(YPaintWMProps) bpy.utils.unregister_class(YPaintSceneProps) bpy.utils.unregister_class(YPaintObjectUVHash) diff --git a/vcol_editor.py b/vcol_editor.py index daa8e34f..0ab06abb 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -50,8 +50,8 @@ def execute(self, context): return {'CANCELLED'} def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): - - wmyp = bpy.context.window_manager.ypprops + brush = bpy.data.brushes.get(brush_name) + if not brush: return # Get essential asset identifier path essential_asset_prefix = "brushes\\essentials_brushes-mesh_" @@ -61,95 +61,43 @@ def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): elif mode == 'SCULPT': mode_type = 'sculpt' essential_asset_identifier = essential_asset_prefix + mode_type + ".blend" - # Check asset brush caches first - bac = None - for cache in wmyp.brush_asset_caches: - # Only get brush cache if it's not essential asset or essential assets with correct mode - if cache.name == brush_name and (not cache.blend_path.startswith(essential_asset_prefix) or cache.blend_path == essential_asset_identifier): - bac = cache - break - - if bac: - blend_path = bac.blend_path - if blend_path != '': blend_path += os.sep + if not brush.library: + # Local brush try: bpy.ops.brush.asset_activate( - asset_library_type = bac.library_type, - asset_library_identifier = bac.library_name, - relative_asset_identifier = blend_path + "Brush\\" + brush_name + asset_library_type = 'LOCAL', + asset_library_identifier = '', + relative_asset_identifier = 'Brush' + os.sep + brush_name + ) + except Exception as e: print('EXCEPTIION:', e) + elif brush.library.name.startswith('essentials_'): + # Essential brush + try: + bpy.ops.brush.asset_activate( + asset_library_type = 'ESSENTIALS', + asset_library_identifier = '', + relative_asset_identifier = essential_asset_identifier + os.sep + "Brush" + os.sep + brush_name + ) + except Exception as e: print('EXCEPTIION:', e) + else: + # Get asset library name and blend path + asset_libraries = bpy.context.preferences.filepaths.asset_libraries + library_name = '' + blend_path = '' + for al in asset_libraries: + if brush.library.filepath.startswith(al.path): + library_name = al.name + blend_path = str(brush.library.filepath).replace(str(al.path) + os.sep, '') + break + + # Custom brush + try: + bpy.ops.brush.asset_activate( + asset_library_type = 'CUSTOM', + asset_library_identifier = library_name, + relative_asset_identifier = blend_path + os.sep + "Brush" + os.sep + brush_name ) - return except Exception as e: print('EXCEPTIION:', e) - - # Try local - try: - bpy.ops.brush.asset_activate( - asset_library_type = 'LOCAL', - asset_library_identifier = "", - relative_asset_identifier = 'Brush\\' + brush_name - ) - - # Set up the cache for faster loading next time - bac = wmyp.brush_asset_caches.add() - bac.name = brush_name - bac.library_type = 'LOCAL' - bac.library_name = '' - bac.blend_path = '' - - return - except Exception as e: print('EXCEPTIION:', e) - - # Try essential - try: - bpy.ops.brush.asset_activate( - asset_library_type = 'ESSENTIALS', - asset_library_identifier = "", - relative_asset_identifier = essential_asset_identifier + "\\Brush\\" + brush_name - ) - - # Set up the cache for faster loading next time - bac = wmyp.brush_asset_caches.add() - bac.name = brush_name - bac.library_type = 'ESSENTIALS' - bac.library_name = '' - bac.blend_path = essential_asset_identifier - - return - except Exception as e: print(e) - - # Try other libraries - - # NOTE: This is insanely slow since it scans all asset library blend files for a single brush - # but I dunno any other way :( - prefs = bpy.context.preferences - filepaths = prefs.filepaths - asset_libraries = filepaths.asset_libraries - - for asset_library in asset_libraries: - library_name = asset_library.name - library_path = Path(asset_library.path) - blend_files = [fp for fp in library_path.glob("**/*.blend") if fp.is_file()] - #print('INFO: Checking library', library_name, 'for brushes') - for blend_file in blend_files: - with bpy.data.libraries.load(str(blend_file), assets_only=True) as (file_contents, _): - if brush_name in file_contents.brushes: - blend_path = str(blend_file).replace(str(library_path) + os.sep, '') - try: - bpy.ops.brush.asset_activate( - asset_library_type = 'CUSTOM', - asset_library_identifier = library_name, - relative_asset_identifier = blend_path + "\\Brush\\" + brush_name - ) - - # Set up the cache for faster loading next time - bac = wmyp.brush_asset_caches.add() - bac.name = brush_name - bac.library_type = 'CUSTOM' - bac.library_name = library_name - bac.blend_path = blend_path - - return - except Exception as e: print(e) def set_custom_eraser_brush_icon(eraser_brush): eraser_icon = 'eraser.png' #if is_bl_newer_than(2, 92) else 'eraser_small.png' From 6a25543891b3d5b0c99dc44ef982928820cfdb88 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 25 Jul 2025 13:10:55 +0700 Subject: [PATCH 231/283] Dealing with new compositor output node type in Blender 5.0 --- bake_common.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/bake_common.py b/bake_common.py index 66057415..d0a5bb59 100644 --- a/bake_common.py +++ b/bake_common.py @@ -60,6 +60,14 @@ def search_join_problematic_texcoord(tree, node): return False +def get_composite_output_node(tree): + node_type = 'GROUP_OUTPUT' if is_bl_newer_than(5) else 'COMPOSITE' + for n in tree.nodes: + if n.type == node_type: + return n + + return None + def is_there_any_missmatched_attribute_types(objs): # Get number of attributes founds attr_counts = {} @@ -1093,7 +1101,7 @@ def denoise_image(image): # Set up compositor tree = scene.node_tree - composite = [n for n in tree.nodes if n.type == 'COMPOSITE'][0] + composite = get_composite_output_node(tree) denoise = tree.nodes.new('CompositorNodeDenoise') if is_bl_newer_than(5): denoise.inputs.get('HDR').default_value = image.is_float @@ -1177,7 +1185,7 @@ def dither_image(image, dither_intensity=1.0, alpha_aware=True): # Set up compositor tree = scene.node_tree - composite = [n for n in tree.nodes if n.type == 'COMPOSITE'][0] + composite = get_composite_output_node(tree) image_node = tree.nodes.new('CompositorNodeImage') image_node.image = image From 80ff1ff4202ecbc78b1f6fec08c524ceaaae4011 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 25 Jul 2025 16:24:45 +0700 Subject: [PATCH 232/283] Fix: Error when trying to refill UDIM tiles with empty UDIM image --- UDIM.py | 3 ++- input_outputs.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/UDIM.py b/UDIM.py index e8e43ef3..fbde0eb3 100644 --- a/UDIM.py +++ b/UDIM.py @@ -36,7 +36,8 @@ def fill_tile(image, tilenum, color=None, width=0, height=0, empty_only=False): bpy.ops.image.tile_add(number=tilenum, count=1, label="", color=color, width=width, height=height, float=image.is_float, alpha=True) else: bpy.ops.image.tile_add(override, number=tilenum, count=1, label="", color=color, width=width, height=height, float=image.is_float, alpha=True) - elif not empty_only: + # HACK: UDIM image with size of 0 always need to be filled first + elif not empty_only or (tilenum == 1001 and image.size[0] == 0): image.tiles.active = tile diff --git a/input_outputs.py b/input_outputs.py index 9f104af5..00eaae81 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -611,7 +611,7 @@ def check_layer_texcoord_nodes(layer, tree=None): source.extension = 'CLIP' # Set decal aspect ratio - if image: + if image and image.size[0] > 0 and image.size[1] > 0: if image.size[0] > image.size[1]: decal_process.inputs['Scale'].default_value = (image.size[1] / image.size[0], 1.0, 1.0) else: decal_process.inputs['Scale'].default_value = (1.0, image.size[0] / image.size[1], 1.0) From 75d7135f2b30f59247d87d16193c8cf8b5c1668c Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 26 Jul 2025 01:18:34 +0700 Subject: [PATCH 233/283] Look inside all assets if local brush data is not available. --- vcol_editor.py | 134 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 95 insertions(+), 39 deletions(-) diff --git a/vcol_editor.py b/vcol_editor.py index 0ab06abb..40c35020 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -49,10 +49,78 @@ def execute(self, context): self.report({'ERROR'}, "There's no vertex color named " + self.vcol_name + '!') return {'CANCELLED'} -def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): - brush = bpy.data.brushes.get(brush_name) - if not brush: return +def activate_essential_brush(brush_name, essential_asset_identifier): + try: + bpy.ops.brush.asset_activate( + asset_library_type = 'ESSENTIALS', + asset_library_identifier = '', + relative_asset_identifier = essential_asset_identifier + os.sep + "Brush" + os.sep + brush_name + ) + return True + except Exception as e: print('EXCEPTIION:', e) + + return False + +def activate_local_brush(brush_name): + try: + bpy.ops.brush.asset_activate( + asset_library_type = 'LOCAL', + asset_library_identifier = '', + relative_asset_identifier = 'Brush' + os.sep + brush_name + ) + return True + except Exception as e: print('EXCEPTIION:', e) + + return False + +def activate_custom_brush(brush_name, filepath): + # Get asset library name and blend path + asset_libraries = bpy.context.preferences.filepaths.asset_libraries + library_name = '' + blend_path = '' + for al in asset_libraries: + if filepath.startswith(al.path): + library_name = al.name + blend_path = str(filepath).replace(str(al.path) + os.sep, '') + break + + try: + bpy.ops.brush.asset_activate( + asset_library_type = 'CUSTOM', + asset_library_identifier = library_name, + relative_asset_identifier = blend_path + os.sep + "Brush" + os.sep + brush_name + ) + return True + except Exception as e: print('EXCEPTIION:', e) + + return False + +def activate_unknown_custom_brush(brush_name): + asset_libraries = bpy.context.preferences.filepaths.asset_libraries + + # Look for brush in all asset libraries + for asset_library in asset_libraries: + library_name = asset_library.name + library_path = Path(asset_library.path) + blend_files = [fp for fp in library_path.glob("**/*.blend") if fp.is_file()] + #print('INFO: Checking library', library_name, 'for brushes') + for blend_file in blend_files: + with bpy.data.libraries.load(str(blend_file), assets_only=True) as (file_contents, _): + if brush_name in file_contents.brushes: + blend_path = str(blend_file).replace(str(library_path) + os.sep, '') + try: + bpy.ops.brush.asset_activate( + asset_library_type = 'CUSTOM', + asset_library_identifier = library_name, + relative_asset_identifier = blend_path + "\\Brush\\" + brush_name + ) + + return True + except Exception as e: print(e) + + return False +def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): # Get essential asset identifier path essential_asset_prefix = "brushes\\essentials_brushes-mesh_" mode_type = '' @@ -61,43 +129,31 @@ def set_brush_asset(brush_name, mode='TEXTURE_PAINT'): elif mode == 'SCULPT': mode_type = 'sculpt' essential_asset_identifier = essential_asset_prefix + mode_type + ".blend" - if not brush.library: - # Local brush - try: - bpy.ops.brush.asset_activate( - asset_library_type = 'LOCAL', - asset_library_identifier = '', - relative_asset_identifier = 'Brush' + os.sep + brush_name - ) - except Exception as e: print('EXCEPTIION:', e) - elif brush.library.name.startswith('essentials_'): - # Essential brush - try: - bpy.ops.brush.asset_activate( - asset_library_type = 'ESSENTIALS', - asset_library_identifier = '', - relative_asset_identifier = essential_asset_identifier + os.sep + "Brush" + os.sep + brush_name - ) - except Exception as e: print('EXCEPTIION:', e) + # Try to get brush from local data + brush = bpy.data.brushes.get(brush_name) + + if not brush: + # Look for essential brush + activated = activate_essential_brush(brush_name, essential_asset_identifier) + + # Look for local brush + if not activated: + activated = activate_local_brush(brush_name) + + # Look for custom brush + if not activated: + activated = activate_unknown_custom_brush(brush_name) else: - # Get asset library name and blend path - asset_libraries = bpy.context.preferences.filepaths.asset_libraries - library_name = '' - blend_path = '' - for al in asset_libraries: - if brush.library.filepath.startswith(al.path): - library_name = al.name - blend_path = str(brush.library.filepath).replace(str(al.path) + os.sep, '') - break - - # Custom brush - try: - bpy.ops.brush.asset_activate( - asset_library_type = 'CUSTOM', - asset_library_identifier = library_name, - relative_asset_identifier = blend_path + os.sep + "Brush" + os.sep + brush_name - ) - except Exception as e: print('EXCEPTIION:', e) + + if brush.library and brush.library.name.startswith('essentials_'): + # Essential brush + activate_essential_brush(brush_name, essential_asset_identifier) + elif not brush.library: + # Local brush + activate_local_brush(brush_name) + else: + # Custom brush + activate_custom_brush(brush_name, brush.library.filepath) def set_custom_eraser_brush_icon(eraser_brush): eraser_icon = 'eraser.png' #if is_bl_newer_than(2, 92) else 'eraser_small.png' From e01afab9e7a6eb212a120b732870b1c32f93204b Mon Sep 17 00:00:00 2001 From: ucupumar Date: Mon, 28 Jul 2025 00:45:01 +0700 Subject: [PATCH 234/283] Revert back to use combined normal for baked outside when displacement setup is enabled. This is because displacement map is not exportable using GLTF, which is the main point of `Use Baked Outside` feature. --- Bake.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Bake.py b/Bake.py index c8b8d14f..ec6cc120 100644 --- a/Bake.py +++ b/Bake.py @@ -3118,9 +3118,9 @@ def update_enable_baked_outside(self, context): if not is_bl_newer_than(2, 80) and baked_normal_overlay.image.colorspace_settings.name != get_srgb_name(): tex_normal_overlay.color_space = 'NONE' - # Displacement setup will use normal without bump if it exists - if ch.enable_subdiv_setup: - mtree.links.new(tex_normal_overlay.outputs[0], norm.inputs[1]) + # NOTE: Use combined normal since displacement map is not exportable using GLTF + #if ch.enable_subdiv_setup: + # mtree.links.new(tex_normal_overlay.outputs[0], norm.inputs[1]) for l in outp.links: mtree.links.new(norm.outputs[0], l.to_socket) From 718f0a6cab2a1ae344437511d53d4970bc9a1817 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 1 Aug 2025 13:40:06 +0700 Subject: [PATCH 235/283] Dealing with scene `Use Nodes`, since it's no longer available in Blender 5.0 --- bake_common.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/bake_common.py b/bake_common.py index d0a5bb59..2d8069a6 100644 --- a/bake_common.py +++ b/bake_common.py @@ -60,13 +60,26 @@ def search_join_problematic_texcoord(tree, node): return False -def get_composite_output_node(tree): +def get_compositor_node_tree(scene): + if not is_bl_newer_than(5): + return scene.node_tree + + return scene.compositing_node_group + +def get_compositor_output_node(tree): node_type = 'GROUP_OUTPUT' if is_bl_newer_than(5) else 'COMPOSITE' for n in tree.nodes: if n.type == node_type: return n - return None + # Create new compositor output if there's none + if is_bl_newer_than(5): + n = tree.nodes.new('NodeGroupOutput') + if 'Image' not in n.inputs: + new_tree_output(tree, 'Image', 'NodeSocketColor') + else: n = tree.nodes.new('CompositorNodeComposite') + + return n def is_there_any_missmatched_attribute_types(objs): # Get number of attributes founds @@ -1027,7 +1040,11 @@ def prepare_composite_settings(res_x=1024, res_y=1024, use_hdr=False): scene.render.resolution_percentage = 100 scene.render.pixel_aspect_x = 1.0 scene.render.pixel_aspect_y = 1.0 - scene.use_nodes = True + if is_bl_newer_than(5): + comp_tree = bpy.data.node_groups.new('TEMP_COMPOSITOR_TREE__', 'CompositorNodeTree') + scene.compositing_node_group = comp_tree + else: + scene.use_nodes = True scene.view_settings.view_transform = 'Standard' if is_bl_newer_than(2, 80) else 'Default' scene.render.dither_intensity = 0.0 @@ -1062,7 +1079,7 @@ def recover_composite_settings(book): # Remove compositor node tree if is_bl_newer_than(5): - comp_tree = scene.node_tree + comp_tree = get_compositor_node_tree(scene) remove_datablock(bpy.data.node_groups, comp_tree) # Remove temp scene @@ -1100,8 +1117,8 @@ def denoise_image(image): scene = bpy.context.scene # Set up compositor - tree = scene.node_tree - composite = get_composite_output_node(tree) + tree = get_compositor_node_tree(scene) + composite = get_compositor_output_node(tree) denoise = tree.nodes.new('CompositorNodeDenoise') if is_bl_newer_than(5): denoise.inputs.get('HDR').default_value = image.is_float @@ -1184,8 +1201,8 @@ def dither_image(image, dither_intensity=1.0, alpha_aware=True): scene.render.dither_intensity = dither_intensity # Set up compositor - tree = scene.node_tree - composite = get_composite_output_node(tree) + tree = get_compositor_node_tree(scene) + composite = get_compositor_output_node(tree) image_node = tree.nodes.new('CompositorNodeImage') image_node.image = image From 0f0054528737fa21fe47f67016dab343e17eba64 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 1 Aug 2025 16:43:00 +0700 Subject: [PATCH 236/283] Check brush image_tool to make sure `Toggle Eraser` works correct with custom non-draw brushes --- vcol_editor.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/vcol_editor.py b/vcol_editor.py index 40c35020..be7f7437 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -18,13 +18,6 @@ 'Mask' : 'Erase Soft', } -brushes_with_dedicated_tool = [ - 'Blur', - 'Smear', - 'Clone', - 'Fill', -] - class YSetActiveVcol(bpy.types.Operator): bl_idname = "mesh.y_set_active_vcol" bl_label = "Set Active Vertex Color" @@ -226,19 +219,20 @@ def execute(self, context): brush.blend = ve.ori_texpaint_blending_mode if brush.blend == 'ERASE_ALPHA' else 'ERASE_ALPHA' else: - # HACK: Set brush to 'builtin.brush' brush first before using brush with dedicated tool + # HACK: Set brush to 'builtin.brush' brush first before using non-draw brush # This is to avoid confusion since by default, if user go back to use 'Brush' tool, it will point to eraser brush - if new_brush_name in brushes_with_dedicated_tool: + new_brush = bpy.data.brushes.get(new_brush_name) + if new_brush and new_brush.image_tool != 'DRAW': if wmyp.default_builtin_brush != '': set_brush_asset(wmyp.default_builtin_brush, mode) else: set_brush_asset('Paint Soft', mode) - # HACK: Remember what brush the last time used if user use brush with dedicated tool - if brush.name in brushes_with_dedicated_tool: + # HACK: Remember what brush the last time used if user use non-draw brush + if brush.image_tool != 'DRAW': try: bpy.ops.wm.tool_set_by_id(name="builtin.brush") except Exception as e: print('EXCEPTIION:', e) brush = context.tool_settings.image_paint.brush - if brush and brush.name not in tex_eraser_asset_names and brush.name not in brushes_with_dedicated_tool: + if brush and brush.name not in tex_eraser_asset_names and brush.image_tool == 'DRAW': wmyp.default_builtin_brush = brush.name # Set brush asset From e7fe8c3e665e1acdde314834c611813e6090a8d7 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 2 Aug 2025 13:47:43 +0700 Subject: [PATCH 237/283] Opening other layer image/vertex color as a mask no longer automatically set the source input to `Alpha` since user doesn't always want to use the image as an alpha clip. --- Mask.py | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/Mask.py b/Mask.py index 04259237..230ffa87 100644 --- a/Mask.py +++ b/Mask.py @@ -1322,29 +1322,6 @@ def execute(self, context): return {'FINISHED'} -''' Check if data is used as layer, if so, source input will change to ALPHA ''' -def update_available_data_name_as_mask(self, context): - node = get_active_ypaint_node() - yp = node.node_tree.yp - - if self.type == 'IMAGE': - for layer in yp.layers: - if layer.type == 'IMAGE': - source = get_layer_source(layer) - if source.image and source.image.name == self.image_name: - self.source_input = 'ALPHA' - return - - elif self.type == 'VCOL' and is_bl_newer_than(2, 92): - for layer in yp.layers: - if layer.type == 'VCOL': - source = get_layer_source(layer) - if source.attribute_name == self.vcol_name: - self.source_input = 'ALPHA' - return - - self.source_input = 'RGB' - class YOpenAvailableDataAsMask(bpy.types.Operator): bl_idname = "wm.y_open_available_data_as_mask" bl_label = "Open available data as Layer Mask" @@ -1387,10 +1364,10 @@ class YOpenAvailableDataAsMask(bpy.types.Operator): uv_map : StringProperty(default='') uv_map_coll : CollectionProperty(type=bpy.types.PropertyGroup) - image_name : StringProperty(name="Image", update=update_available_data_name_as_mask) + image_name : StringProperty(name="Image") image_coll : CollectionProperty(type=bpy.types.PropertyGroup) - vcol_name : StringProperty(name="Vertex Color", update=update_available_data_name_as_mask) + vcol_name : StringProperty(name="Vertex Color") vcol_coll : CollectionProperty(type=bpy.types.PropertyGroup) blend_type : EnumProperty( From 3b9c5e355e9860a810202a6d5782c3e770ebba8d Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 2 Aug 2025 14:10:50 +0700 Subject: [PATCH 238/283] Bump up the version --- __init__.py | 2 +- blender_manifest.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/__init__.py b/__init__.py index 2b88985c..73e40371 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 3, 3), + "version": (2, 3, 4), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/blender_manifest.toml b/blender_manifest.toml index dab10f09..1d44a90b 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.3.3" +version = "2.3.4" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " From b2bd5f30550f10252923bac177e027189eaf6c98 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 5 Aug 2025 23:51:57 +0700 Subject: [PATCH 239/283] Fix: Right click menu on File Browser can be spawned multiple times after creating new blend file. --- ui.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui.py b/ui.py index 7abc4d59..4671ef34 100644 --- a/ui.py +++ b/ui.py @@ -7971,6 +7971,9 @@ def unregister(): if is_bl_newer_than(3): bpy.types.ASSETBROWSER_MT_context_menu.remove(draw_yp_asset_browser_menu) + if is_bl_newer_than(2, 81): + bpy.types.FILEBROWSER_MT_context_menu.remove(draw_yp_file_browser_menu) + # Remove Handlers bpy.app.handlers.load_post.remove(yp_load_ui_settings) bpy.app.handlers.save_pre.remove(yp_save_ui_settings) From b7f650267e389fd6ededc23fd977b97a01a7f79f Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 8 Aug 2025 19:33:51 +0700 Subject: [PATCH 240/283] Fix: `Toggle Eraser` doesn't work on Blender 5.0 --- vcol_editor.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vcol_editor.py b/vcol_editor.py index be7f7437..61d54711 100644 --- a/vcol_editor.py +++ b/vcol_editor.py @@ -222,17 +222,17 @@ def execute(self, context): # HACK: Set brush to 'builtin.brush' brush first before using non-draw brush # This is to avoid confusion since by default, if user go back to use 'Brush' tool, it will point to eraser brush new_brush = bpy.data.brushes.get(new_brush_name) - if new_brush and new_brush.image_tool != 'DRAW': + if new_brush and get_brush_image_tool(new_brush) != 'DRAW': if wmyp.default_builtin_brush != '': set_brush_asset(wmyp.default_builtin_brush, mode) else: set_brush_asset('Paint Soft', mode) # HACK: Remember what brush the last time used if user use non-draw brush - if brush.image_tool != 'DRAW': + if get_brush_image_tool(brush) != 'DRAW': try: bpy.ops.wm.tool_set_by_id(name="builtin.brush") except Exception as e: print('EXCEPTIION:', e) brush = context.tool_settings.image_paint.brush - if brush and brush.name not in tex_eraser_asset_names and brush.image_tool == 'DRAW': + if brush and brush.name not in tex_eraser_asset_names and get_brush_image_tool(brush) == 'DRAW': wmyp.default_builtin_brush = brush.name # Set brush asset From 44aa2893715aa00493b53f97efc631120bb47987 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 9 Aug 2025 23:02:57 +0700 Subject: [PATCH 241/283] Fix: Replace decal layer/mask image to different image is causing image extension to be repeated --- Layer.py | 8 ++++---- Mask.py | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Layer.py b/Layer.py index 5d59bc66..54931959 100644 --- a/Layer.py +++ b/Layer.py @@ -4294,10 +4294,10 @@ def replace_layer_type(layer, new_type, item_name='', remove_data=False): if new_type == 'IMAGE': image = bpy.data.images.get(item_name) source.image = image - #if hasattr(source, 'color_space'): - # source.color_space = 'NONE' - #if image.colorspace_settings.name != get_noncolor_name(): - # image.colorspace_settings.name = get_noncolor_name() + + if layer.texcoord_type == 'Decal': + source.extension = 'CLIP' + elif new_type == 'VCOL': set_source_vcol_name(source, item_name) elif new_type == 'HEMI': diff --git a/Mask.py b/Mask.py index 230ffa87..e26cce52 100644 --- a/Mask.py +++ b/Mask.py @@ -389,6 +389,10 @@ def replace_mask_type(mask, new_type, item_name='', remove_data=False, modifier_ if new_type == 'IMAGE': image = bpy.data.images.get(item_name) source.image = image + + if mask.texcoord_type == 'Decal': + source.extension = 'CLIP' + if hasattr(source, 'color_space'): source.color_space = 'NONE' if image.colorspace_settings.name != get_noncolor_name() and not image.is_dirty: From ec2a2abcd1125657d182ba4495fcbefe4eda2c0a Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 10 Aug 2025 00:20:59 +0700 Subject: [PATCH 242/283] Add base operator class for opening image --- BaseOperator.py | 44 ++++++++++++++++ Layer.py | 136 +++++------------------------------------------- Mask.py | 31 ++--------- __init__.py | 3 +- image_ops.py | 18 +------ 5 files changed, 63 insertions(+), 169 deletions(-) create mode 100644 BaseOperator.py diff --git a/BaseOperator.py b/BaseOperator.py new file mode 100644 index 00000000..0acd11dc --- /dev/null +++ b/BaseOperator.py @@ -0,0 +1,44 @@ +import bpy +from bpy.props import * +from bpy_extras.io_utils import ImportHelper +from .common import * + +class FileSelectOptions(): + # File browser filter + filter_folder : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) + filter_image : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) + + display_type : EnumProperty( + items = ( + ('FILE_DEFAULTDISPLAY', 'Default', ''), + ('FILE_SHORTDISLPAY', 'Short List', ''), + ('FILE_LONGDISPLAY', 'Long List', ''), + ('FILE_IMGDISPLAY', 'Thumbnails', '') + ), + default = 'FILE_IMGDISPLAY', + options = {'HIDDEN', 'SKIP_SAVE'} + ) + +class OpenImage(FileSelectOptions): + + # File related + files : CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'}) + directory : StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'}) + + relative : BoolProperty(name="Relative Path", default=True, description="Apply relative paths") + + def running_fileselect_modal(self, context, event): + context.window_manager.fileselect_add(self) + return {'RUNNING_MODAL'} + + def check(self, context): + return True + + def generate_paths(self): + return (fn.name for fn in self.files), self.directory + + def get_loaded_images(self): + import_list, directory = self.generate_paths() + loaded_images = tuple(load_image(path, directory) for path in import_list) + + return loaded_images diff --git a/Layer.py b/Layer.py index 54931959..b8d8b765 100644 --- a/Layer.py +++ b/Layer.py @@ -1,7 +1,7 @@ import bpy, time, re, os, random, numpy from bpy.props import * from bpy_extras.io_utils import ImportHelper -from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem +from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem, BaseOperator from .common import * #from . import bake_common from .node_arrangements import * @@ -1644,48 +1644,19 @@ def execute(self, context): return {'FINISHED'} -class YOpenImageToOverrideChannel(bpy.types.Operator, ImportHelper): +class YOpenImageToOverrideChannel(bpy.types.Operator, ImportHelper, BaseOperator.OpenImage): """Open Image to Override Channel""" bl_idname = "wm.y_open_image_to_override_layer_channel" bl_label = "Open Image to Override Channel Layer" bl_options = {'REGISTER', 'UNDO'} - # File related - files : CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'}) - directory : StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'}) - - # File browser filter - filter_folder : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - filter_image : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - - display_type : EnumProperty( - items = ( - ('FILE_DEFAULTDISPLAY', 'Default', ''), - ('FILE_SHORTDISLPAY', 'Short List', ''), - ('FILE_LONGDISPLAY', 'Long List', ''), - ('FILE_IMGDISPLAY', 'Thumbnails', '') - ), - default = 'FILE_IMGDISPLAY', - options = {'HIDDEN', 'SKIP_SAVE'} - ) - - relative : BoolProperty(name="Relative Path", default=True, description="Apply relative paths") - - def generate_paths(self): - return (fn.name for fn in self.files), self.directory - @classmethod def poll(cls, context): - #return hasattr(context, 'group_node') and context.group_node return get_active_ypaint_node() def invoke(self, context, event): self.ch = context.parent - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} - - def check(self, context): - return True + return self.running_fileselect_modal(context, event) def execute(self, context): ch = self.ch @@ -1694,8 +1665,7 @@ def execute(self, context): wm = context.window_manager node = get_active_ypaint_node() - import_list, directory = self.generate_paths() - loaded_images = tuple(load_image(path, directory) for path in import_list) + loaded_images = self.get_loaded_images() images = [] for i, new_img in enumerate(loaded_images): @@ -1822,48 +1792,19 @@ def execute(self, context): return {'FINISHED'} -class YOpenImageToOverride1Channel(bpy.types.Operator, ImportHelper): +class YOpenImageToOverride1Channel(bpy.types.Operator, ImportHelper, BaseOperator.OpenImage): """Open Image to Override 1 Channel""" bl_idname = "wm.y_open_image_to_override_1_layer_channel" bl_label = "Open Image to Override 1 Channel Layer" bl_options = {'REGISTER', 'UNDO'} - # File related - files : CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'}) - directory : StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'}) - - # File browser filter - filter_folder : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - filter_image : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - - display_type : EnumProperty( - items = ( - ('FILE_DEFAULTDISPLAY', 'Default', ''), - ('FILE_SHORTDISLPAY', 'Short List', ''), - ('FILE_LONGDISPLAY', 'Long List', ''), - ('FILE_IMGDISPLAY', 'Thumbnails', '') - ), - default = 'FILE_IMGDISPLAY', - options = {'HIDDEN', 'SKIP_SAVE'} - ) - - relative : BoolProperty(name="Relative Path", default=True, description="Apply relative paths") - - def generate_paths(self): - return (fn.name for fn in self.files), self.directory - @classmethod def poll(cls, context): - #return hasattr(context, 'group_node') and context.group_node return get_active_ypaint_node() def invoke(self, context, event): self.ch = context.parent - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} - - def check(self, context): - return True + return self.running_fileselect_modal(context, event) def execute(self, context): ch = self.ch @@ -1872,8 +1813,7 @@ def execute(self, context): wm = context.window_manager node = get_active_ypaint_node() - import_list, directory = self.generate_paths() - loaded_images = tuple(load_image(path, directory) for path in import_list) + loaded_images = self.get_loaded_images() images = [] for i, new_img in enumerate(loaded_images): @@ -1995,27 +1935,7 @@ def execute(self, context): return {'FINISHED'} -class BaseMultipleImagesLayer(): - # File related - files : CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'}) - directory : StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'}) - - # File browser filter - filter_folder : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - filter_image : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - - display_type : EnumProperty( - items = ( - ('FILE_DEFAULTDISPLAY', 'Default', ''), - ('FILE_SHORTDISLPAY', 'Short List', ''), - ('FILE_LONGDISPLAY', 'Long List', ''), - ('FILE_IMGDISPLAY', 'Thumbnails', '') - ), - default = 'FILE_IMGDISPLAY', - options = {'HIDDEN', 'SKIP_SAVE'} - ) - - relative : BoolProperty(name="Relative Path", default=True, description="Apply relative paths") +class BaseMultipleImagesLayer(BaseOperator.OpenImage): texcoord_type : EnumProperty( name = 'Layer Coordinate Type', @@ -2102,9 +2022,6 @@ class BaseMultipleImagesLayer(): default = False ) - def generate_paths(self): - return (fn.name for fn in self.files), self.directory - #def is_mask_using_udim(self): # return self.use_udim_for_mask and UDIM.is_udim_supported() @@ -2559,7 +2476,7 @@ def search_for_image_node(node, channel_name, channel_image_dict={}): if channel_name in channel_image_dict: break -class YOpenImagesFromMaterialToLayer(bpy.types.Operator, BaseMultipleImagesLayer): +class YOpenImagesFromMaterialToLayer(bpy.types.Operator, ImportHelper, BaseMultipleImagesLayer): bl_idname = "wm.y_open_images_from_material_to_single_layer" bl_label = "Open Images from Material to single " + get_addon_title() + " Layer" bl_description = "Open images inside material node tree to single " + get_addon_title() + " layer" @@ -2790,8 +2707,7 @@ def poll(cls, context): def invoke(self, context, event): self.invoke_operator(context) - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} + return self.running_fileselect_modal(context, event) def check(self, context): return self.check_operator(context) @@ -2807,33 +2723,12 @@ def execute(self, context): return {'FINISHED'} -class YOpenImageToLayer(bpy.types.Operator, ImportHelper): +class YOpenImageToLayer(bpy.types.Operator, ImportHelper, BaseOperator.OpenImage): """Open Image to Layer""" bl_idname = "wm.y_open_image_to_layer" bl_label = "Open Image to Layer" bl_options = {'REGISTER', 'UNDO'} - # File related - files : CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'}) - directory : StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'}) - - # File browser filter - filter_folder : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - filter_image : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - - display_type : EnumProperty( - items = ( - ('FILE_DEFAULTDISPLAY', 'Default', ''), - ('FILE_SHORTDISLPAY', 'Short List', ''), - ('FILE_LONGDISPLAY', 'Long List', ''), - ('FILE_IMGDISPLAY', 'Thumbnails', '') - ), - default = 'FILE_IMGDISPLAY', - options = {'HIDDEN', 'SKIP_SAVE'} - ) - - relative : BoolProperty(name="Relative Path", default=True, description="Apply relative paths") - interpolation : EnumProperty( name = 'Image Interpolation Type', description = 'Image interpolation type', @@ -2890,9 +2785,6 @@ class YOpenImageToLayer(bpy.types.Operator, ImportHelper): file_browser_filepath : StringProperty(default='') - def generate_paths(self): - return (fn.name for fn in self.files), self.directory - @classmethod def poll(cls, context): #return hasattr(context, 'group_node') and context.group_node @@ -2928,11 +2820,7 @@ def invoke(self, context, event): return self.execute(context) return context.window_manager.invoke_props_dialog(self) - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} - - def check(self, context): - return True + return self.running_fileselect_modal(context, event) def draw(self, context): node = get_active_ypaint_node() diff --git a/Mask.py b/Mask.py index e26cce52..ef1fab44 100644 --- a/Mask.py +++ b/Mask.py @@ -1,7 +1,7 @@ import bpy, re, time, random from bpy.props import * from bpy_extras.io_utils import ImportHelper -from . import lib, ImageAtlas, MaskModifier, UDIM, ListItem +from . import lib, ImageAtlas, MaskModifier, UDIM, ListItem, BaseOperator from .common import * from .node_connections import * from .node_arrangements import * @@ -1090,33 +1090,12 @@ def execute(self, context): return {'FINISHED'} -class YOpenImageAsMask(bpy.types.Operator, ImportHelper): +class YOpenImageAsMask(bpy.types.Operator, ImportHelper, BaseOperator.OpenImage): """Open Image as Mask""" bl_idname = "wm.y_open_image_as_mask" bl_label = "Open Image as Mask" bl_options = {'REGISTER', 'UNDO'} - # File related - files : CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'}) - directory : StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'}) - - # File browser filter - filter_folder : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - filter_image : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - - display_type : EnumProperty( - items = ( - ('FILE_DEFAULTDISPLAY', 'Default', ''), - ('FILE_SHORTDISLPAY', 'Short List', ''), - ('FILE_LONGDISPLAY', 'Long List', ''), - ('FILE_IMGDISPLAY', 'Thumbnails', '') - ), - default = 'FILE_IMGDISPLAY', - options = {'HIDDEN', 'SKIP_SAVE'} - ) - - relative : BoolProperty(name="Relative Path", default=True, description="Apply relative paths") - interpolation : EnumProperty( name = 'Image Interpolation Type', description = 'image interpolation type', @@ -1159,9 +1138,6 @@ class YOpenImageAsMask(bpy.types.Operator, ImportHelper): file_browser_filepath : StringProperty(default='') - def generate_paths(self): - return (fn.name for fn in self.files), self.directory - @classmethod def poll(cls, context): node = get_active_ypaint_node() @@ -1215,8 +1191,7 @@ def invoke(self, context, event): return self.execute(context) return context.window_manager.invoke_props_dialog(self) - context.window_manager.fileselect_add(self) - return {'RUNNING_MODAL'} + return self.running_fileselect_modal(context, event) def check(self, context): return True diff --git a/__init__.py b/__init__.py index 73e40371..71d539d5 100644 --- a/__init__.py +++ b/__init__.py @@ -14,6 +14,7 @@ if "bpy" in locals(): import imp imp.reload(Localization) + imp.reload(BaseOperator) imp.reload(image_ops) imp.reload(common) imp.reload(bake_common) @@ -48,7 +49,7 @@ imp.reload(Test) else: from . import Localization - from . import image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences + from . import BaseOperator, image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences from . import vector_displacement_lib, vector_displacement from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, ListItem, Bake, BakeToLayer, Root, versioning from . import addon_updater_ops diff --git a/image_ops.py b/image_ops.py index a1a92a85..8f061287 100644 --- a/image_ops.py +++ b/image_ops.py @@ -4,7 +4,7 @@ from bpy_extras.io_utils import ExportHelper from .common import * import time -from . import UDIM, subtree +from . import UDIM, subtree, BaseOperator def preserve_float_color_hack_before_saving(image): if not image.is_float or not is_bl_newer_than(2, 80): return @@ -908,7 +908,7 @@ def get_file_format_items(): return items -class YSaveAsImage(bpy.types.Operator, ExportHelper): +class YSaveAsImage(bpy.types.Operator, ExportHelper, BaseOperator.FileSelectOptions): """Save As Image""" bl_idname = "wm.y_save_as_image" bl_label = "Save As Image" @@ -921,20 +921,6 @@ class YSaveAsImage(bpy.types.Operator, ExportHelper): update = update_save_as_file_format ) - # File browser filter - filter_folder : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - filter_image : BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'}) - display_type : EnumProperty( - items = ( - ('FILE_DEFAULTDISPLAY', 'Default', ''), - ('FILE_SHORTDISLPAY', 'Short List', ''), - ('FILE_LONGDISPLAY', 'Long List', ''), - ('FILE_IMGDISPLAY', 'Thumbnails', '') - ), - default = 'FILE_IMGDISPLAY', - options = {'HIDDEN', 'SKIP_SAVE'} - ) - copy : BoolProperty( name = 'Copy', description = 'Create a new image file without modifying the current image in Blender', From 3f09e1f7d6fada912401dcd530d7f679b065e564 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 10 Aug 2025 13:04:19 +0700 Subject: [PATCH 243/283] Add operator to open image to replace current layer/mask image --- BaseOperator.py | 1 - Layer.py | 39 +++++++++++++++++++++++++++++++++++++++ Mask.py | 40 ++++++++++++++++++++++++++++++++++++++++ ui.py | 15 +++++++++++---- 4 files changed, 90 insertions(+), 5 deletions(-) diff --git a/BaseOperator.py b/BaseOperator.py index 0acd11dc..4a3c4a20 100644 --- a/BaseOperator.py +++ b/BaseOperator.py @@ -1,6 +1,5 @@ import bpy from bpy.props import * -from bpy_extras.io_utils import ImportHelper from .common import * class FileSelectOptions(): diff --git a/Layer.py b/Layer.py index b8d8b765..092ced73 100644 --- a/Layer.py +++ b/Layer.py @@ -4508,6 +4508,43 @@ def execute(self, context): return {'FINISHED'} +class YOpenImageToReplaceLayer(bpy.types.Operator, ImportHelper, BaseOperator.OpenImage): + """Open Image to Replace Layer""" + bl_idname = "wm.y_open_image_to_replace_layer" + bl_label = "Open Image to Replace Layer" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + group_node = get_active_ypaint_node() + return context.object and group_node and len(group_node.node_tree.yp.layers) > 0 + + def invoke(self, context, event): + self.layer = context.layer + return self.running_fileselect_modal(context, event) + + def execute(self, context): + T = time.time() + + wm = context.window_manager + layer = self.layer + yp = layer.id_data.yp + + loaded_images = self.get_loaded_images() + + if len(loaded_images) == 0 or loaded_images[0] == None: + self.report({'ERROR'}, "No image is selected!") + return {'CANCELLED'} + + image = loaded_images[0] + + replace_layer_type(layer, 'IMAGE', image.name) + + print('INFO: Layer', layer.name, 'is updated in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') + wm.yptimer.time = str(time.time()) + + return {'FINISHED'} + class YReplaceLayerType(bpy.types.Operator): bl_idname = "wm.y_replace_layer_type" bl_label = "Replace Layer Type" @@ -7192,6 +7229,7 @@ def register(): bpy.utils.register_class(YOpenImageToLayer) bpy.utils.register_class(YOpenImagesToSingleLayer) bpy.utils.register_class(YOpenImagesFromMaterialToLayer) + bpy.utils.register_class(YOpenImageToReplaceLayer) bpy.utils.register_class(YOpenImageToOverrideChannel) bpy.utils.register_class(YOpenImageToOverride1Channel) bpy.utils.register_class(YOpenAvailableDataToLayer) @@ -7227,6 +7265,7 @@ def unregister(): bpy.utils.unregister_class(YOpenImageToLayer) bpy.utils.unregister_class(YOpenImagesToSingleLayer) bpy.utils.unregister_class(YOpenImagesFromMaterialToLayer) + bpy.utils.unregister_class(YOpenImageToReplaceLayer) bpy.utils.unregister_class(YOpenImageToOverrideChannel) bpy.utils.unregister_class(YOpenImageToOverride1Channel) bpy.utils.unregister_class(YOpenAvailableDataToLayer) diff --git a/Mask.py b/Mask.py index ef1fab44..2fe937c5 100644 --- a/Mask.py +++ b/Mask.py @@ -1740,6 +1740,44 @@ def execute(self, context): return {'FINISHED'} +class YOpenImageToReplaceMask(bpy.types.Operator, ImportHelper, BaseOperator.OpenImage): + """Open Image to Replace Mask""" + bl_idname = "wm.y_open_image_to_replace_mask" + bl_label = "Open Image to Replace Mask" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + group_node = get_active_ypaint_node() + return context.object and group_node and len(group_node.node_tree.yp.layers) > 0 + + def invoke(self, context, event): + self.mask = context.mask + return self.running_fileselect_modal(context, event) + + def execute(self, context): + + T = time.time() + + wm = context.window_manager + mask = self.mask + yp = mask.id_data.yp + + loaded_images = self.get_loaded_images() + + if len(loaded_images) == 0 or loaded_images[0] == None: + self.report({'ERROR'}, "No image is selected!") + return {'CANCELLED'} + + image = loaded_images[0] + + replace_mask_type(mask, 'IMAGE', image.name) + + print('INFO: Layer', mask.name, 'is updated in', '{:0.2f}'.format((time.time() - T) * 1000), 'ms!') + wm.yptimer.time = str(time.time()) + + return {'FINISHED'} + class YReplaceMaskType(bpy.types.Operator): bl_idname = "wm.y_replace_mask_type" bl_label = "Replace Mask Type" @@ -2617,6 +2655,7 @@ def register(): bpy.utils.register_class(YNewLayerMask) bpy.utils.register_class(YOpenImageAsMask) bpy.utils.register_class(YOpenAvailableDataAsMask) + bpy.utils.register_class(YOpenImageToReplaceMask) bpy.utils.register_class(YMoveLayerMask) bpy.utils.register_class(YRemoveLayerMask) bpy.utils.register_class(YReplaceMaskType) @@ -2628,6 +2667,7 @@ def unregister(): bpy.utils.unregister_class(YNewLayerMask) bpy.utils.unregister_class(YOpenImageAsMask) bpy.utils.unregister_class(YOpenAvailableDataAsMask) + bpy.utils.unregister_class(YOpenImageToReplaceMask) bpy.utils.unregister_class(YMoveLayerMask) bpy.utils.unregister_class(YRemoveLayerMask) bpy.utils.unregister_class(YReplaceMaskType) diff --git a/ui.py b/ui.py index 4671ef34..db64364e 100644 --- a/ui.py +++ b/ui.py @@ -6949,8 +6949,12 @@ def draw(self, context): icon = 'RADIOBUT_ON' if layer.type == 'IMAGE' else 'RADIOBUT_OFF' col.label(text='Image' + suffix, icon=icon) - label = 'Open Available Image' if layer.type != 'IMAGE' else 'Replace Image' - op = col.operator('wm.y_replace_layer_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) + label = 'Open Image' if layer.type != 'IMAGE' else 'Replace Image' + op = col.operator('wm.y_open_image_to_replace_layer', text=folder_emoji+label) + + label = 'Open Available Image' if layer.type != 'IMAGE' else 'Replace with Available Image' + #label = 'Open Available Image' + op = col.operator('wm.y_replace_layer_type', text=folder_emoji+label) op.type = 'IMAGE' op.load_item = True @@ -7062,8 +7066,11 @@ def draw(self, context): icon = 'RADIOBUT_ON' if mask.type == 'IMAGE' else 'RADIOBUT_OFF' col.label(text='Image' + suffix, icon=icon) - label = 'Open Available Image' if mask.type != 'IMAGE' else 'Replace Image' - op = col.operator('wm.y_replace_mask_type', text=folder_emoji+label) #, icon_value=lib.get_icon('open_image')) + label = 'Open Image' if mask.type != 'IMAGE' else 'Replace Image' + op = col.operator('wm.y_open_image_to_replace_mask', text=folder_emoji+label) + + label = 'Open Available Image' if mask.type != 'IMAGE' else 'Replace with Available Image' + op = col.operator('wm.y_replace_mask_type', text=folder_emoji+label) op.type = 'IMAGE' op.load_item = True From 0bf5a49222ada8d936694a0779ff7c9952989471 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 10 Aug 2025 17:07:34 +0700 Subject: [PATCH 244/283] Add error message when trying to bake a channel with no layer using --- Bake.py | 34 +++++++++++++++++++++++++++++++--- Root.py | 1 + 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/Bake.py b/Bake.py index ec6cc120..2c6d9a55 100644 --- a/Bake.py +++ b/Bake.py @@ -1338,12 +1338,28 @@ def invoke(self, context, event): self.uv_map_coll.add().name = uv.name # List of channels that will be baked - if self.only_active_channel and yp.active_channel_index < len(yp.channels): - self.channels = [yp.channels[yp.active_channel_index]] + self.channels = [] + if self.only_active_channel: + if yp.active_channel_index < len(yp.channels): + self.channels = [yp.channels[yp.active_channel_index]] else: self.channels = yp.channels + self.no_layer_using = False self.enable_bake_as_vcol = False if len(self.channels) > 0: + + # Check if any layer is using the channels + if self.only_active_channel: + self.no_layer_using = not is_any_layer_using_channel(self.channels[0], node) + else: + layer_found = False + for ch in self.channels: + if is_any_layer_using_channel(ch, node): + layer_found = True + break + if not layer_found: + self.no_layer_using = True + bi = None for ch in self.channels: baked = node.node_tree.nodes.get(ch.baked) @@ -1373,7 +1389,7 @@ def invoke(self, context, event): if self.vcol_force_first_ch_idx == '': self.vcol_force_first_ch_idx = 'Do Nothing' - if get_user_preferences().skip_property_popups and not event.shift: + if (get_user_preferences().skip_property_popups and not event.shift) or len(self.channels) == 0 or self.no_layer_using: return self.execute(context) return context.window_manager.invoke_props_dialog(self, width=320) @@ -1516,6 +1532,18 @@ def execute(self, context): obj = context.object mat = obj.active_material + if len(self.channels) == 0: + self.report({'ERROR'}, "This node has no channel!") + return {'CANCELLED'} + + if self.only_active_channel and self.no_layer_using: + self.report({'ERROR'}, "No layer is using '"+self.channels[0].name+"' channel!") + return {'CANCELLED'} + + if self.no_layer_using: + self.report({'ERROR'}, "No layer is using any channel!") + return {'CANCELLED'} + if is_bl_newer_than(2, 80) and (obj.hide_viewport or obj.hide_render): self.report({'ERROR'}, "Please unhide render and viewport of the active object!") return {'CANCELLED'} diff --git a/Root.py b/Root.py index 10f501c8..06a026c6 100644 --- a/Root.py +++ b/Root.py @@ -2803,6 +2803,7 @@ def update_active_yp_channel(self, context): obj = context.object tree = self.id_data yp = tree.yp + if len(yp.channels) == 0: return ch = yp.channels[yp.active_channel_index] if yp.preview_mode: update_preview_mode(yp, context) From 2615928aafa30d462e5f33a568c738adc53918b2 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 10 Aug 2025 18:01:14 +0700 Subject: [PATCH 245/283] Clean up implementation --- Bake.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Bake.py b/Bake.py index 2c6d9a55..a3498542 100644 --- a/Bake.py +++ b/Bake.py @@ -1349,16 +1349,13 @@ def invoke(self, context, event): if len(self.channels) > 0: # Check if any layer is using the channels - if self.only_active_channel: - self.no_layer_using = not is_any_layer_using_channel(self.channels[0], node) - else: - layer_found = False - for ch in self.channels: - if is_any_layer_using_channel(ch, node): - layer_found = True - break - if not layer_found: - self.no_layer_using = True + layer_found = False + for ch in self.channels: + if is_any_layer_using_channel(ch, node): + layer_found = True + break + if not layer_found: + self.no_layer_using = True bi = None for ch in self.channels: From 1279898056462385f8d97bfd5f0577c74143a40f Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 11 Aug 2025 16:59:59 +0700 Subject: [PATCH 246/283] Fix: `Back to Original UV` doesn't work when the active image is from channel's custom source data --- ImageAtlas.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ImageAtlas.py b/ImageAtlas.py index 27288e55..8a9f5a4f 100644 --- a/ImageAtlas.py +++ b/ImageAtlas.py @@ -464,10 +464,10 @@ def execute(self, context): uv_layers = get_uv_layers(ob) for uv in uv_layers: - if uv.name == src_of_img.uv_name: + if uv.name == uv_name: - if uv_layers.active != uv_layers.get(src_of_img.uv_name): - uv_layers.active = uv_layers.get(src_of_img.uv_name) + if uv_layers.active != uv_layers.get(uv_name): + uv_layers.active = uv_layers.get(uv_name) if uv.name == TEMP_UV: uv_layers.remove(uv) From d56be323cf504e8d2d79d6166983761b25924b54 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 12 Aug 2025 00:45:01 +0700 Subject: [PATCH 247/283] Fix: Wrong baked channel result if displacement setup is enabled and there's layer with non-UV vector. The result is still not an exact match but close enough. --- bake_common.py | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/bake_common.py b/bake_common.py index 2d8069a6..d46e3dec 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1786,6 +1786,19 @@ def bake_channel( #for l in output.inputs['Displacement'].links: # disp_from_socket = l.from_socket + # Original displacement connection + ori_disp_from_node = '' + ori_disp_from_socket = '' + + # Remove displacement link early if displacement setup is enabled and the current channel is not normal channel + height_root_ch = get_root_height_channel(yp) + if height_root_ch and root_ch != height_root_ch and height_root_ch.enable_subdiv_setup: + for link in mat_out.inputs['Displacement'].links: + ori_disp_from_node = link.from_node.name + ori_disp_from_socket = link.from_socket.name + mat.node_tree.links.remove(link) + break + # Connect emit to output material mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) @@ -1991,6 +2004,14 @@ def bake_channel( # Make sure height outputs available check_all_channel_ios(yp, reconnect=True, force_height_io=True) + # Break displacement connection if displacement setup is enabled + if root_ch.enable_subdiv_setup: + for link in mat_out.inputs['Displacement'].links: + ori_disp_from_node = link.from_node.name + ori_disp_from_socket = link.from_socket.name + mat.node_tree.links.remove(link) + break + if not target_layer: ### Normal without bump only @@ -1999,18 +2020,6 @@ def bake_channel( remove_node(tree, root_ch, 'baked_normal_overlay') else: - # Original displacement connection - ori_disp_from_node = '' - ori_disp_from_socket = '' - - # Remove displacement link if subdiv setup is on - if root_ch.enable_subdiv_setup: - for link in mat_out.inputs['Displacement'].links: - ori_disp_from_node = link.from_node.name - ori_disp_from_socket = link.from_socket.name - mat.node_tree.links.remove(link) - break - baked_normal_overlay = tree.nodes.get(root_ch.baked_normal_overlay) if not baked_normal_overlay: baked_normal_overlay = new_node( @@ -2086,14 +2095,6 @@ def bake_channel( else: baked_normal_overlay.image = norm_img - # Recover displacement link - if ori_disp_from_node != '': - nod = mat.node_tree.nodes.get(ori_disp_from_node) - if nod: - soc = nod.outputs.get(ori_disp_from_socket) - if soc: - mat.node_tree.links.new(soc, mat_out.inputs['Displacement']) - ### Vector Displacement if not any_layers_using_vdisp(root_ch): # Remove baked_vdisp @@ -2371,6 +2372,14 @@ def bake_channel( if bsdf: simple_remove_node(mat.node_tree, bsdf) if norm: simple_remove_node(mat.node_tree, norm) + # Recover displacement link + if ori_disp_from_node != '': + nod = mat.node_tree.nodes.get(ori_disp_from_node) + if nod: + soc = nod.outputs.get(ori_disp_from_socket) + if soc: + mat.node_tree.links.new(soc, mat_out.inputs['Displacement']) + # Recover original bsdf mat.node_tree.links.new(ori_bsdf, output.inputs[0]) From c566e9b2f5962e09e207da1b8dcd9287b45c637c Mon Sep 17 00:00:00 2001 From: ucupumar Date: Thu, 14 Aug 2025 16:39:23 +0700 Subject: [PATCH 248/283] Make sure active node group exists to avoid errors --- input_outputs.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/input_outputs.py b/input_outputs.py index 00eaae81..c0506bf5 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -402,7 +402,7 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= group_tree, name, 'NodeSocketFloatFactor', valid_inputs, input_index, min_value=0.0, max_value=1.0, default_value=height_default_value, hide_value=True ) - if group_node.node_tree == group_tree: + if group_node and group_node.node_tree == group_tree: group_node.inputs[name].default_value = height_default_value input_index += 1 @@ -413,7 +413,7 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= if create_input(group_tree, name, 'NodeSocketFloat', valid_inputs, input_index, default_value=0.1): # Set node default value - if group_node.node_tree == group_tree: + if group_node and group_node.node_tree == group_tree: group_node.inputs[name].default_value = ch.ori_max_height_value input_index += 1 @@ -447,12 +447,12 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= # Remember default values for ch in yp.channels: - if inp.name == ch.name + io_suffix['ALPHA']: + if group_node and inp.name == ch.name + io_suffix['ALPHA']: node_inp = group_node.inputs.get(inp.name) ch.ori_alpha_value = node_inp.default_value if ch.type == 'NORMAL': - if inp.name == ch.name + io_suffix['MAX_HEIGHT']: + if group_node and inp.name == ch.name + io_suffix['MAX_HEIGHT']: node_inp = group_node.inputs.get(inp.name) ch.ori_max_height_value = node_inp.default_value From 62bb03cccf5617c7a60d99293f871065de5dc892 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 14 Aug 2025 19:00:02 +0700 Subject: [PATCH 249/283] Use safer animation data swaps --- common.py | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/common.py b/common.py index 156ebf1a..84432fca 100644 --- a/common.py +++ b/common.py @@ -6624,9 +6624,9 @@ def get_material_drivers(mat): return drivers -def get_material_fcurves_and_drivers(yp): - fcurves = get_material_fcurves(yp) - fcurves.extend(get_material_drivers(yp)) +def get_material_fcurves_and_drivers(mat): + fcurves = get_material_fcurves(mat) + fcurves.extend(get_material_drivers(mat)) return fcurves def get_yp_fcurves(yp): @@ -6697,11 +6697,6 @@ def swap_channel_fcurves(yp, idx0, idx1): elif index == idx1: fc.data_path = fc.data_path.replace('yp.channels[' + str(idx1) + ']', 'yp.channels[' + str(idx0) + ']') - # Material fcurves - node = get_active_ypaint_node() - mat = get_active_material() - fcurves = get_material_fcurves_and_drivers(mat) - ch0 = yp.channels[idx0] ch1 = yp.channels[idx1] @@ -6717,15 +6712,29 @@ def swap_channel_fcurves(yp, idx0, idx1): if idx0 < idx1 and ch0.enable_alpha: ch0_idx += 1 - for fc in fcurves: - m = re.match(r'^nodes\["' + node.name + '"\]\.inputs\[(\d+)\]\.default_value$', fc.data_path) - if m: - index = int(m.group(1)) - if index == ch0_idx: - fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(ch1_idx) + '].default_value' + for mat in bpy.data.materials: + if not mat.node_tree: continue + + # Get yp nodes + yp_nodes = [] + for node in mat.node_tree.nodes: + if node.type == 'GROUP' and node.node_tree and node.node_tree.yp == yp: + if node not in yp_nodes: + yp_nodes.append(node) + + # Check for animation data + if len(yp_nodes) > 0: + fcurves = get_material_fcurves_and_drivers(mat) + for node in yp_nodes: + for fc in fcurves: + m = re.match(r'^nodes\["' + node.name + '"\]\.inputs\[(\d+)\]\.default_value$', fc.data_path) + if m: + index = int(m.group(1)) + if index == ch0_idx: + fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(ch1_idx) + '].default_value' - elif index == ch1_idx: - fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(ch0_idx) + '].default_value' + elif index == ch1_idx: + fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(ch0_idx) + '].default_value' def swap_layer_channel_fcurves(layer, idx0, idx1): if idx0 >= len(layer.channels) or idx1 >= len(layer.channels): return From 1da197c9fb041da8703f81c76bcc4682d92bfcb5 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 15 Aug 2025 15:44:11 +0700 Subject: [PATCH 250/283] Safer way to shift animation data on node inputs --- Root.py | 4 ++-- common.py | 49 ++++++++++++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/Root.py b/Root.py index 06a026c6..371f7aa1 100644 --- a/Root.py +++ b/Root.py @@ -3162,8 +3162,8 @@ def update_channel_alpha(self, context): outputs = get_tree_outputs(group_tree) # Baked outside nodes - frame = get_node(mat.node_tree, yp.baked_outside_frame) - tex = get_node(mat.node_tree, self.baked_outside, parent=frame) + frame = get_node(mat.node_tree, yp.baked_outside_frame) if mat else None + tex = get_node(mat.node_tree, self.baked_outside, parent=frame) if mat else None # Shift fcurves if self.enable_alpha: diff --git a/common.py b/common.py index 84432fca..33a8463e 100644 --- a/common.py +++ b/common.py @@ -7061,30 +7061,41 @@ def shift_channel_fcurves(yp, start_index=1, direction='UP', remove_ch_mode=True if m: fc.data_path = fc.data_path.replace('.channels[' + str(i) + ']', '.channels[' + str(i+shifter) + ']') - # Material fcurves - node = get_active_ypaint_node() - mat = get_active_material() - fcurves = get_material_fcurves_and_drivers(mat) - if remove_ch_mode and start_index < len(yp.channels) and yp.channels[start_index].enable_alpha and shifter < 0: shifter -= 1 - if shifter > 0: + for mat in bpy.data.materials: + if not mat.node_tree: continue - for i, root_ch in reversed(list(enumerate(yp.channels))): - if i <= start_index: continue - io_index = root_ch.io_index - for fc in fcurves: - m = re.match(r'^nodes\["' + node.name + '"\]\.inputs\[' + str(io_index) + '\]\.default_value$', fc.data_path) - if m: fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(io_index+shifter) + '].default_value' - else: + # Get yp nodes + yp_nodes = [] + for node in mat.node_tree.nodes: + if node.type == 'GROUP' and node.node_tree and node.node_tree.yp == yp: + if node not in yp_nodes: + yp_nodes.append(node) - for i, root_ch in enumerate(yp.channels): - if i <= start_index: continue - io_index = root_ch.io_index - for fc in fcurves: - m = re.match(r'^nodes\["' + node.name + '"\]\.inputs\[' + str(io_index) + '\]\.default_value$', fc.data_path) - if m: fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(io_index+shifter) + '].default_value' + # Check for animation data + if len(yp_nodes) > 0: + fcurves = get_material_fcurves_and_drivers(mat) + + for node in yp_nodes: + + if shifter > 0: + + for i, root_ch in reversed(list(enumerate(yp.channels))): + if i <= start_index: continue + io_index = root_ch.io_index + for fc in fcurves: + m = re.match(r'^nodes\["' + node.name + '"\]\.inputs\[' + str(io_index) + '\]\.default_value$', fc.data_path) + if m: fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(io_index+shifter) + '].default_value' + else: + + for i, root_ch in enumerate(yp.channels): + if i <= start_index: continue + io_index = root_ch.io_index + for fc in fcurves: + m = re.match(r'^nodes\["' + node.name + '"\]\.inputs\[' + str(io_index) + '\]\.default_value$', fc.data_path) + if m: fc.data_path = 'nodes["' + node.name + '"].inputs[' + str(io_index+shifter) + '].default_value' def shift_mask_fcurves_up(layer, start_index=1): From c69025624a100c0e4974d06d5c1c7dfc074e0ad2 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 15 Aug 2025 16:06:59 +0700 Subject: [PATCH 251/283] When updating channel's alpha, make sure to check active material if it exists or not --- Root.py | 65 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/Root.py b/Root.py index 371f7aa1..1596302b 100644 --- a/Root.py +++ b/Root.py @@ -3178,7 +3178,7 @@ def update_channel_alpha(self, context): if not self.enable_alpha: - if not any(alpha_chs): + if yp.alpha_auto_setup and not any(alpha_chs) and mat: # Set material to use opaque (only for legacy renderer) if not is_bl_newer_than(4, 2): @@ -3189,29 +3189,32 @@ def update_channel_alpha(self, context): mat.game_settings.alpha_blend = 'OPAQUE' node = get_active_ypaint_node() - inp = node.inputs[self.io_index + 1] + inp = node.inputs[self.io_index + 1] if node else None + outp = None if yp.use_baked and yp.enable_baked_outside and tex: outp = tex.outputs[1] - else: + elif node: outp = node.outputs[self.io_index + 1] # Remember the connections - if len(inp.links) > 0: + if inp and len(inp.links) > 0: self.ori_alpha_from.node = inp.links[0].from_node.name self.ori_alpha_from.socket = inp.links[0].from_socket.name - for link in outp.links: - con = self.ori_alpha_to.add() - con.node = link.to_node.name - con.socket = link.to_socket.name + + if outp: + for link in outp.links: + con = self.ori_alpha_to.add() + con.node = link.to_node.name + con.socket = link.to_socket.name # Remove connection for baked outside - if yp.use_baked and yp.enable_baked_outside and tex: + if yp.use_baked and yp.enable_baked_outside and tex and outp and mat: for l in outp.links: mat.node_tree.links.remove(link) # Try to reconnect input to output - fn = mat.node_tree.nodes.get(self.ori_alpha_from.node) + fn = mat.node_tree.nodes.get(self.ori_alpha_from.node) if mat else None if fn: fs = fn.outputs.get(self.ori_alpha_from.socket) if fs: @@ -3228,7 +3231,7 @@ def update_channel_alpha(self, context): if self.enable_alpha: - if any(alpha_chs): + if yp.alpha_auto_setup and any(alpha_chs) and mat: if is_bl_newer_than(4, 2): # Settings for eevee next @@ -3253,25 +3256,25 @@ def update_channel_alpha(self, context): alpha_connected = False # Try to relink to original connections - #tree = context.object.active_material.node_tree - tree = mat.node_tree - try: - node_from = tree.nodes.get(self.ori_alpha_from.node) - socket_from = node_from.outputs[self.ori_alpha_from.socket] - tree.links.new(socket_from, node.inputs[alpha_name]) - except: pass - - for con in self.ori_alpha_to: - node_to = tree.nodes.get(con.node) - if not node_to: continue - socket_to = node_to.inputs.get(con.socket) - if not socket_to: continue - if len(socket_to.links) < 1: - if yp.use_baked and yp.enable_baked_outside and tex: - mat.node_tree.links.new(tex.outputs[1], socket_to) - else: - tree.links.new(node.outputs[alpha_name], socket_to) - alpha_connected = True + tree = mat.node_tree if mat else None + if tree: + try: + node_from = tree.nodes.get(self.ori_alpha_from.node) + socket_from = node_from.outputs[self.ori_alpha_from.socket] + tree.links.new(socket_from, node.inputs[alpha_name]) + except: pass + + for con in self.ori_alpha_to: + node_to = tree.nodes.get(con.node) + if not node_to: continue + socket_to = node_to.inputs.get(con.socket) + if not socket_to: continue + if len(socket_to.links) < 1: + if yp.use_baked and yp.enable_baked_outside and tex: + mat.node_tree.links.new(tex.outputs[1], socket_to) + else: + tree.links.new(node.outputs[alpha_name], socket_to) + alpha_connected = True # Try to connect alpha without prior memory if yp.alpha_auto_setup and not alpha_connected: @@ -4034,7 +4037,7 @@ class YPaint(bpy.types.PropertyGroup): update = update_enable_tangent_sign_hacks ) - # When enabled, alpha can create some node setup, disable this to avoid that + # When enabled, alpha can create some node setup and change material settings, disable this to avoid that alpha_auto_setup : BoolProperty(default=True) # HACK: Refresh tree to remove glitchy normal From 300a24e9c78ed731d7dd28c54ed2f61ac2162856 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 16 Aug 2025 14:39:36 +0700 Subject: [PATCH 252/283] Fix: Preview mode doesn't work with Blender 5.0 --- Root.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Root.py b/Root.py index 1596302b..95a40fa9 100644 --- a/Root.py +++ b/Root.py @@ -2582,8 +2582,13 @@ def set_srgb_view_transform(): scene.yp.ori_look = scene.view_settings.look scene.view_settings.look = 'None' - scene.yp.ori_use_compositing = scene.use_nodes - scene.use_nodes = False + if is_bl_newer_than(5): + if scene.compositing_node_group: + scene.yp.ori_compositing_node_name = scene.compositing_node_group.name + scene.compositing_node_group = None + else: + scene.yp.ori_use_compositing = scene.use_nodes + scene.use_nodes = False scene.yp.ori_view_transform = scene.view_settings.view_transform if is_bl_newer_than(2, 80): @@ -2630,7 +2635,12 @@ def remove_preview(mat, advanced=False): scene.view_settings.exposure = scene.yp.ori_exposure scene.view_settings.gamma = scene.yp.ori_gamma scene.view_settings.use_curve_mapping = scene.yp.ori_use_curve_mapping - scene.use_nodes = scene.yp.ori_use_compositing + if is_bl_newer_than(5): + if scene.yp.ori_compositing_node_name != '': + cng = bpy.data.node_groups.get(scene.yp.ori_compositing_node_name) + if cng: scene.compositing_node_group = cng + scene.yp.ori_compositing_node_name = '' + else: scene.use_nodes = scene.yp.ori_use_compositing #def update_merge_mask_mode(self, context): # if not self.layer_preview_mode: @@ -4116,6 +4126,7 @@ class YPaintSceneProps(bpy.types.PropertyGroup): ori_look : StringProperty(default='') ori_use_curve_mapping : BoolProperty(default=False) ori_use_compositing : BoolProperty(default=False) + ori_compositing_node_name : StringProperty(default='') class YPaintObjectUVHash(bpy.types.PropertyGroup): name : StringProperty(default='') From 878fad47799aeefc5f21ec55be6b4e4c46f57017 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 16 Aug 2025 16:32:32 +0700 Subject: [PATCH 253/283] Fix: Error when trying to bake a channel when there's missing decal mask image --- input_outputs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input_outputs.py b/input_outputs.py index c0506bf5..34c5561f 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -541,7 +541,7 @@ def check_mask_texcoord_nodes(layer, mask, tree=None): source.extension = 'CLIP' # Set decal aspect ratio - if image: + if image and image.size[0] > 0 and image.size[1] > 0: if image.size[0] > image.size[1]: decal_process.inputs['Scale'].default_value = (image.size[1] / image.size[0], 1.0, 1.0) else: decal_process.inputs['Scale'].default_value = (1.0, image.size[0] / image.size[1], 1.0) From e16d111543f2b42bbf7c08a0178102f89ad935e6 Mon Sep 17 00:00:00 2001 From: ucupumar Date: Sun, 17 Aug 2025 00:41:38 +0700 Subject: [PATCH 254/283] Fix: `Refill UDIM Tiles` returns error when there's no layer --- UDIM.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UDIM.py b/UDIM.py index fbde0eb3..bc1ccd10 100644 --- a/UDIM.py +++ b/UDIM.py @@ -549,6 +549,9 @@ def poll(cls, context): def execute(self, context): T = time.time() + if not hasattr(context, 'layer'): + return {'CANCELLED'} + yp = context.layer.id_data.yp entities, images, segment_names, segment_name_props = get_yp_entities_images_and_segments(yp) From 4e1882b4b927f77d72533cf38e50825ff3655340 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 17 Aug 2025 15:08:39 +0700 Subject: [PATCH 255/283] Fix: Paste Layers sometimes can returns error --- Layer.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Layer.py b/Layer.py index 092ced73..52f6f39a 100644 --- a/Layer.py +++ b/Layer.py @@ -5439,6 +5439,9 @@ def execute(self, context): new_layer = yp.layers.add() new_layer.name = get_unique_name(ls.name, yp.layers) + # Get original source layer again to avoid pointer error after adding new layer + ls = yp_source.layers.get(lname) + # Copy layer props copy_id_props(ls, new_layer, ['name']) From 9fc8b82df7f0ef1d45145c124ce5501676b2f530 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 18 Aug 2025 01:08:36 +0700 Subject: [PATCH 256/283] Remove `Mute Stencil Mask Opacity` option since it has purpose anymore --- Root.py | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/Root.py b/Root.py index 95a40fa9..1c8564b2 100644 --- a/Root.py +++ b/Root.py @@ -455,12 +455,6 @@ class YQuickYPaintNodeSetup(bpy.types.Operator): roughness : BoolProperty(name='Roughness', default=True) normal : BoolProperty(name='Normal', default=True) - mute_texture_paint_overlay : BoolProperty( - name = 'Mute Stencil Mask Opacity', - description = 'Set Stencil Mask Opacity found in the 3D Viewport\'s Overlays menu to 0', - default = True - ) - use_linear_blending : BoolProperty( name = 'Use Linear Color Blending', description = 'Use more accurate linear color blending (it will behave differently than Photoshop)', @@ -474,7 +468,6 @@ class YQuickYPaintNodeSetup(bpy.types.Operator): ) target_bsdf_name : StringProperty(default='') - not_muted_paint_opacity : BoolProperty(default=False) not_on_material_view : BoolProperty(default=True) @classmethod @@ -505,13 +498,6 @@ def invoke(self, context, event): self.type = bsdf_node.type self.target_bsdf_name = bsdf_node.name - self.not_muted_paint_opacity = False - if is_bl_newer_than(2, 80): - for area in context.screen.areas: - if area.type == 'VIEW_3D': - self.not_muted_paint_opacity = area.spaces[0].overlay.texture_paint_mode_opacity > 0.0 - break - self.not_on_material_view = space.type == 'VIEW_3D' and ((not is_bl_newer_than(2, 80) and space.viewport_shade not in {'MATERIAL', 'RENDERED'}) or (is_bl_newer_than(2, 80) and space.shading.type not in {'MATERIAL', 'RENDERED'})) if get_user_preferences().skip_property_popups and not event.shift: @@ -556,9 +542,6 @@ def draw(self, context): col.prop(self, 'use_linear_blending') - if is_bl_newer_than(2, 80) and self.not_muted_paint_opacity: - col.prop(self, 'mute_texture_paint_overlay') - if self.not_on_material_view: col.prop(self, 'switch_to_material_view') @@ -798,10 +781,6 @@ def execute(self, context): # Disable overlay in Blender 2.8 for area in context.screen.areas: if area.type == 'VIEW_3D': - if is_bl_newer_than(2, 80) and self.not_muted_paint_opacity and self.mute_texture_paint_overlay: - area.spaces[0].overlay.texture_paint_mode_opacity = 0.0 - area.spaces[0].overlay.vertex_paint_mode_opacity = 0.0 - if self.not_on_material_view and self.switch_to_material_view: if not is_bl_newer_than(2, 80): area.spaces[0].viewport_shade = 'MATERIAL' From ccdf4bf8c8a672244c1944346d394c6f5b803603 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 19 Aug 2025 01:34:14 +0700 Subject: [PATCH 257/283] Add compositing blur option to "Bake layer/mask to image" --- BakeInfo.py | 23 ++++++++++++ BakeToLayer.py | 57 ++++++++++++++++++++++++----- __init__.py | 2 +- bake_common.py | 84 +++++++++++++++++++++++++++++++++++++++++-- blender_manifest.toml | 2 +- versioning.py | 11 ++++++ 6 files changed, 167 insertions(+), 12 deletions(-) diff --git a/BakeInfo.py b/BakeInfo.py index 2c50dc3a..193a129e 100644 --- a/BakeInfo.py +++ b/BakeInfo.py @@ -106,12 +106,35 @@ class YBakeInfoProps(bpy.types.PropertyGroup): default = False ) + blur_type : EnumProperty( + name = 'Blur Type', + description = 'Blur type for the baked image', + items = ( + ('NOISE', 'Noise Blur', 'Noisy and need more samples but has matching value to the blur vector option'), + ('FLAT', 'Flat', 'Flat blur'), + ('TENT', 'Tent', 'Tent blur'), + ('QUAD', 'Quadratic', 'Quadratic blur'), + ('CUBIC', 'Cubic', 'Cubic blur'), + ('GAUSS', 'Gaussian', 'Gausssian blur'), + ('FAST_GAUSS', 'Fast Gaussian', 'Fast gausssian blur'), + ('CATROM', 'Catrom', 'Catrom blur'), + ('MITCH', 'Mitch', 'Mitch blur') + ), + default='GAUSS' + ) + blur_factor : FloatProperty( name = 'Blur Factor', description = "Blur factor to baked image", default=1.0, min=0.0, max=100.0 ) + blur_size : FloatProperty( + name = 'Blur Size', + description = 'Blur size (in pixels) to the baked image', + default=10.0, min=0.0 + ) + use_baked_disp : BoolProperty( name = 'Use Baked Displacement Map', description = 'Use baked displacement map, this will also apply subdiv setup on object', diff --git a/BakeToLayer.py b/BakeToLayer.py index f3587f8a..f9c78f91 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -186,7 +186,9 @@ def get_bake_properties_from_self(self): 'use_image_atlas', 'use_udim', 'blur', - 'blur_factor' + 'blur_type', + 'blur_factor', + 'blur_size' ] for prop in props: @@ -941,19 +943,42 @@ class YBakeEntityToImage(bpy.types.Operator, BaseBakeOperator): description = 'Use Image Atlas', default = False ) + + blur_type : EnumProperty( + name = 'Blur Type', + description = 'Blur type for the baked image', + items = ( + ('NOISE', 'Noise', 'Noisy and need more samples but has matching value to the blur vector option'), + ('FLAT', 'Flat', 'Flat blur'), + ('TENT', 'Tent', 'Tent blur'), + ('QUAD', 'Quadratic', 'Quadratic blur'), + ('CUBIC', 'Cubic', 'Cubic blur'), + ('GAUSS', 'Gaussian', 'Gausssian blur'), + ('FAST_GAUSS', 'Fast Gaussian', 'Fast gausssian blur'), + ('CATROM', 'Catrom', 'Catrom blur'), + ('MITCH', 'Mitch', 'Mitch blur') + ), + default='GAUSS' + ) blur : BoolProperty( name = 'Use Blur', - description = 'Use blur to baked image', + description = 'Use blur to the baked image', default = False ) blur_factor : FloatProperty( name = 'Blur Factor', - description = 'Blur factor to baked image', + description = 'Blur factor to the baked image', default=1.0, min=0.0, max=100.0 ) + blur_size : FloatProperty( + name = 'Blur Size', + description = 'Blur size (in pixels) to the baked image', + default=10.0, min=0.0 + ) + duplicate_entity : BoolProperty( name = 'Duplicate Entity', description = 'Duplicate entity', @@ -1138,6 +1163,14 @@ def draw(self, context): col.label(text='Bake Device:') col.separator() col.label(text='') + + if self.blur: + if self.blur_type == 'NOISE': + col.label(text='Blur Factor:') + else: col.label(text='Blur Size:') + col.separator() + + col.label(text='') if is_bl_newer_than(2, 81): col.label(text='') col.label(text='') @@ -1169,15 +1202,23 @@ def draw(self, context): col.separator() col.prop(self, 'bake_device', text='') col.separator() - col.prop(self, 'fxaa') - if is_bl_newer_than(2, 81): - col.prop(self, 'denoise', text='Use Denoise') - ccol = col.column(align=True) rrow = col.row(align=True) rrow.prop(self, 'blur') if self.blur: - rrow.prop(self, 'blur_factor', text='') + rrow.prop(self, 'blur_type', text='') + + rrow = col.row(align=True) + if self.blur_type == 'NOISE': + rrow.prop(self, 'blur_factor', text='') + else: rrow.prop(self, 'blur_size', text='') + + col.separator() + + col.prop(self, 'fxaa') + if is_bl_newer_than(2, 81): + col.prop(self, 'denoise', text='Use Denoise') + ccol = col.column(align=True) if self.mask: col.prop(self, 'duplicate_entity', text='Duplicate Mask') diff --git a/__init__.py b/__init__.py index 71d539d5..cfe8e825 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "Ucupaint", "author": "Yusuf Umar, Agni Rakai Sahakarya, Jan Bláha, Ahmad Rifai, morirain, Patrick W. Crawford, neomonkeus, Kareem Haddad, passivestar", - "version": (2, 3, 4), + "version": (2, 3, 5), "blender": (2, 80, 0), "location": "Node Editor > Properties > Ucupaint", "warning": "", diff --git a/bake_common.py b/bake_common.py index d46e3dec..b367ff30 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1106,6 +1106,84 @@ def recover_composite_settings(book): if ori_object and bpy.context.object != ori_object: set_active_object(ori_object) +def blur_image(image, filter_type='GAUSS', size=10): + T = time.time() + print('BLUR: Doing Blur pass on', image.name + '...') + + # Preparing settings + book = prepare_composite_settings(use_hdr=image.is_float) + scene = bpy.context.scene + + # Set up compositor + tree = get_compositor_node_tree(scene) + composite = get_compositor_output_node(tree) + blur = tree.nodes.new('CompositorNodeBlur') + blur.filter_type = filter_type + if is_bl_newer_than(4, 5): + blur.inputs['Size'].default_value[0] = size + blur.inputs['Size'].default_value[1] = size + else: + blur.size_x = int(size) + blur.size_y = int(size) + image_node = tree.nodes.new('CompositorNodeImage') + image_node.image = image + + gamma = None + if image.colorspace_settings.name != get_srgb_name() and not image.is_float: + gamma = tree.nodes.new('CompositorNodeGamma') + gamma.inputs[1].default_value = 2.2 + + rgb = image_node.outputs[0] + if gamma: + tree.links.new(rgb, gamma.inputs[0]) + rgb = gamma.outputs[0] + tree.links.new(rgb, blur.inputs['Image']) + rgb = blur.outputs[0] + tree.links.new(rgb, composite.inputs[0]) + + if image.source == 'TILED': + tilenums = [tile.number for tile in image.tiles] + else: tilenums = [1001] + + # Get temporary filepath + ext = 'exr' if image.is_float else 'png' + filepath = os.path.join(tempfile.gettempdir(), 'TEST_RENDER__.' + ext) + + for tilenum in tilenums: + + # Swap tile to 1001 to access the data + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + + # Set render resolution + scene.render.resolution_x = image.size[0] + scene.render.resolution_y = image.size[1] + + # Render image! + bpy.ops.render.render() + + # Save the image + render_result = next(img for img in bpy.data.images if img.type == "RENDER_RESULT") + render_result.save_render(filepath) + temp_image = bpy.data.images.load(filepath) + + # Copy image pixels + copy_image_pixels(temp_image, image) + + # Remove temp image + remove_datablock(bpy.data.images, temp_image) + os.remove(filepath) + + # Swap back the tile + if tilenum != 1001: + UDIM.swap_tile(image, 1001, tilenum) + + # Recover settings + recover_composite_settings(book) + + print('BLUR:', image.name, 'blur pass is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') + return image + def denoise_image(image): if not is_bl_newer_than(2, 81): return image @@ -1298,7 +1376,7 @@ def dither_image(image, dither_intensity=1.0, alpha_aware=True): print('DENOISE:', image.name, 'dithering pass is done in', '{:0.2f}'.format(time.time() - T), 'seconds!') return image -def blur_image(image, alpha_aware=True, factor=1.0, samples=512, bake_device='CPU'): +def noise_blur_image(image, alpha_aware=True, factor=1.0, samples=512, bake_device='CPU'): T = time.time() print('BLUR: Doing Blur pass on', image.name + '...') book = remember_before_bake() @@ -4126,7 +4204,9 @@ def bake_entity_as_image(entity, bprops, set_image_to_entity=False): if bprops.blur: samples = 4096 if is_bl_newer_than(3) else 128 - blur_image(image, False, bake_device=bprops.bake_device, factor=bprops.blur_factor, samples=samples) + if bprops.blur_type == 'NOISE': + noise_blur_image(image, False, bake_device=bprops.bake_device, factor=bprops.blur_factor, samples=samples) + else: blur_image(image, filter_type=bprops.blur_type, size=bprops.blur_size) if bprops.denoise: denoise_image(image) if use_fxaa: fxaa_image(image, False, bake_device=bprops.bake_device) diff --git a/blender_manifest.toml b/blender_manifest.toml index 1d44a90b..27398241 100644 --- a/blender_manifest.toml +++ b/blender_manifest.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "ucupaint" -version = "2.3.4" +version = "2.3.5" name = "Ucupaint" tagline = "Layer based painting for Eevee and Cycles" maintainer = "Yusuf Umar " diff --git a/versioning.py b/versioning.py index 9ba8eeac..d685defa 100644 --- a/versioning.py +++ b/versioning.py @@ -995,6 +995,17 @@ def update_yp_tree(tree): height = get_entity_prop_value(height_ch, 'bump_distance') set_entity_prop_value(height_ch, 'bump_distance', height * 5) + # Version 2.3.5 has blur bake type + if version_tuple(yp.version) < (2, 3, 5): + images = get_yp_images(yp) + + for i, image in enumerate(images): + bi = image.y_bake_info + + if bi.is_baked_entity: + if bi.blur: + bi.blur_type = 'NOISE' + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 673fc5df4eb21bbfb4164474bb1bad21636486bd Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 20 Aug 2025 13:00:20 +0700 Subject: [PATCH 258/283] Remove auto get/set property for Blender 5.0 compatibility --- Bake.py | 17 +++++++++++++---- Root.py | 50 +++++++++++++++++--------------------------------- versioning.py | 9 ++++++++- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Bake.py b/Bake.py index a3498542..4f1fe9f2 100644 --- a/Bake.py +++ b/Bake.py @@ -1982,10 +1982,14 @@ def execute(self, context): ) for ch in self.channels: if ch.enable_bake_to_vcol and ch.type != 'NORMAL': + + # Get vcol name + vcol_name = 'Baked ' + ch.name if ch.bake_to_vcol_name == '' else ch.bake_to_vcol_name + # Check vertex color for ob in objs: vcols = get_vertex_colors(ob) - vcol = vcols.get(ch.bake_to_vcol_name) + vcol = vcols.get(vcol_name) # Set index to first so new vcol will copy their value if len(vcols) > 0: @@ -1994,7 +1998,7 @@ def execute(self, context): if not vcol: try: - vcol = new_vertex_color(ob, ch.bake_to_vcol_name) + vcol = new_vertex_color(ob, vcol_name) except Exception as e: print(e) # Get newly created vcol name @@ -2008,14 +2012,14 @@ def execute(self, context): # Get the newly created vcol to avoid pointer error vcol = vcols.get(vcol_name) set_active_vertex_color(ob, vcol) - bake_to_vcol(mat, node, ch, objs, None, 1, ch.bake_to_vcol_alpha or ch.enable_alpha, ch.bake_to_vcol_name) + bake_to_vcol(mat, node, ch, objs, None, 1, ch.bake_to_vcol_alpha or ch.enable_alpha, vcol_name) baked = tree.nodes.get(ch.baked_vcol) if not baked or not is_root_ch_prop_node_unique(ch, 'baked_vcol'): baked = new_node(tree, ch, 'baked_vcol', get_vcol_bl_idname(), 'Baked Vcol ' + ch.name) # Set channel to use baked vertex color only when baked_vcol is just created ch.use_baked_vcol = True - set_source_vcol_name(baked, ch.bake_to_vcol_name) + set_source_vcol_name(baked, vcol_name) for ob in objs: # Recover material index if ori_mat_ids[ob.name]: @@ -2024,6 +2028,11 @@ def execute(self, context): p.material_index = ori_mat_ids[ob.name][i] if is_sort_by_channel: current_vcol_order += 1 + + # Set back vcol name to channel baked vcol name + if ch.bake_to_vcol_name != vcol_name: + ch.bake_to_vcol_name = vcol_name + else: # If has baked vcol node, remove it baked = tree.nodes.get(ch.baked_vcol) diff --git a/Root.py b/Root.py index 1c8564b2..9b293ba3 100644 --- a/Root.py +++ b/Root.py @@ -148,6 +148,7 @@ def create_new_yp_channel(group_tree, name, channel_type, non_color=True, enable # Add new channel channel = yp.channels.add() channel.name = name + channel.original_name = name channel.bake_to_vcol_name = 'Baked ' + name channel.type = channel_type @@ -2415,22 +2416,6 @@ def execute(self, context): return {'FINISHED'} -def get_channel_name(self): - name = self.get('name', '') # May be null - return name - -def set_channel_name(self, value): - yp = self.id_data.yp - - # Update bake target channel name - for bt in yp.bake_targets: - for letter in rgba_letters: - btc = getattr(bt, letter) - if btc.channel_name != '' and btc.channel_name == self.name: - btc.channel_name = value - - self['name'] = value - def update_channel_name(self, context): T = time.time() @@ -2441,6 +2426,16 @@ def update_channel_name(self, context): if yp.halt_reconnect or yp.halt_update: return + # Update bake target channel name + for bt in yp.bake_targets: + for letter in rgba_letters: + btc = getattr(bt, letter) + if btc.channel_name != '' and btc.channel_name == self.original_name: + btc.channel_name = self.name + + # Update channel's original name + self.original_name = self.name + input_index = self.io_index output_index = get_output_index(self) @@ -3372,19 +3367,6 @@ def update_enable_height_tweak(self, context): reconnect_yp_nodes(self.id_data) rearrange_yp_nodes(self.id_data) -# Prevent vcol name from being null -def get_channel_vcol_name(self): - name = self.get('bake_to_vcol_name', '') # May be null - if name == '': - self['bake_to_vcol_name'] = 'Baked ' + self.name - return self['bake_to_vcol_name'] - -def set_channel_vcol_name(self, value): - if value == '': - self['bake_to_vcol_name'] = 'Baked ' + self.name - else: - self['bake_to_vcol_name'] = value - def update_use_linear_blending(self, context): Modifier.check_yp_modifier_linear_nodes(self) check_start_end_root_ch_nodes(self.id_data) @@ -3458,8 +3440,12 @@ class YPaintChannel(bpy.types.PropertyGroup): description = 'Name of the channel', default = 'Albedo', update = update_channel_name, - get = get_channel_name, - set = set_channel_name + ) + + original_name : StringProperty( + name = 'Original Channel Name', + description = 'Original channel name for updating', + default = '' ) type : EnumProperty( @@ -3559,8 +3545,6 @@ class YPaintChannel(bpy.types.PropertyGroup): name = 'Target Vertex Color Name', description = 'Target Vertex Color Name', default = '', - get = get_channel_vcol_name, - set = set_channel_vcol_name ) # Displacement for normal channel diff --git a/versioning.py b/versioning.py index d685defa..1a66b6a3 100644 --- a/versioning.py +++ b/versioning.py @@ -995,7 +995,7 @@ def update_yp_tree(tree): height = get_entity_prop_value(height_ch, 'bump_distance') set_entity_prop_value(height_ch, 'bump_distance', height * 5) - # Version 2.3.5 has blur bake type + # Version 2.3.5 has blur bake type, and no longer use get/set prop for Blender 5.0 compatibility if version_tuple(yp.version) < (2, 3, 5): images = get_yp_images(yp) @@ -1006,6 +1006,13 @@ def update_yp_tree(tree): if bi.blur: bi.blur_type = 'NOISE' + # Update original name for channel + for ch in yp.channels: + ch.original_name = ch.name + + if ch.bake_to_vcol_name == '': + ch.bake_to_vcol_name = 'Baked ' + ch.name + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From de04ecab525c2878c5b1d7ea4aa6c36e6c323890 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 21 Aug 2025 19:43:44 +0700 Subject: [PATCH 259/283] Fix: Using `Add` blending for bump map does not contribute to final maximum height value --- common.py | 12 ++++++------ lib.blend | Bin 7275580 -> 7292332 bytes lib.py | 1 + subtree.py | 4 +++- versioning.py | 10 ++++++++++ 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/common.py b/common.py index 33a8463e..f5e6f0a4 100644 --- a/common.py +++ b/common.py @@ -882,12 +882,6 @@ def get_active_material(obj=None): return mat -def get_material_output(mat): - if mat != None and mat.node_tree: - output = [n for n in mat.node_tree.nodes if n.type == 'OUTPUT_MATERIAL' and n.is_active_output] - if output: return output[0] - return None - def get_list_of_ypaint_nodes(mat): if not mat.node_tree: return [] @@ -1588,6 +1582,12 @@ def get_active_mat_output_node(tree): return None +def get_material_output(mat): + if mat != None and mat.node_tree: + output = [n for n in mat.node_tree.nodes if n.type == 'OUTPUT_MATERIAL' and n.is_active_output] + if output: return output[0] + return None + def get_all_image_users(image): users = [] diff --git a/lib.blend b/lib.blend index 09481c7a683d8a10f005ed3161c63237ae0cd205..5a4d2e2d952e0ceb17a9ac002f65278d9982b829 100644 GIT binary patch literal 7292332 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Ým;G5~``||&X9}PPdEm@mtffy?mIpubn8S=7q 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

    f=N`0uS&3b#UVx+DUW8X|4s<_^5AOw)wzs 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 >osOwGaU-RujeVcgF9vAHTy}hsZ{NXFt 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

      K*jO%GRUVQ59B>Ke0 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

      ;YhKsfc@2+rky#2t-oG`KG+#As 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 z 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%0DK*IAosLq$`ckqcJprrbb<)zm49~HZ|wE zh4%^ao)Gs5arw5RgF71%fo_pB=I)eN* z&=T(JQs~5WXXpa0_!jF*y4|2VaawWTdU$0`*F&Wz{=J|#?tQ$^kieKZ*CMwcw1eE# zlm3_kywCYQmG3Y5*vOK3u0gmDh9NK%hQV+c0dnr$NX$_%8pe2E(5}gt1t;=S24hKc v9E^uhehF6gOv$q~0ofB_5=@3E_)jJ7G?)%E&~qlb%<>j4T_^-$|M>eqqmq%G literal 7275580 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

      J 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 z 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�#I`nLLtB&Uj`Ap z7kU@INy~BEH<)z^^}Pb_FFo%K9^g~BPT~V@BYi>m#2zMg>g$^07x!r=-En+@PkkJJ zg7B$&awIV4KKNyD8#_M` zpV$uQ?8S>$4ayCM+7x1aYX?4$mrE05KUz+6e82;IP!+iG8#;OCzj(s-QsQyqZ{qQh zugiFxIDL56PaE-g%6Tqgdl(Uq%Y0C*6E^c(=D()mmsOHhzi!g;v^#XV?B_$Dz4ffh z!b85jq223i!dgoq|LNDgv+Ou8RP_)~pw|gMduyM2eVu!~`G{{`~7LIN%odk?@Q7 z$?nfdKk1c!$Q-vy*-ysqCul!Oo(nT?;^3N&{tIIwZopAaqv;?iH#5PihBm&!^If1Q~ji9lWyGWh;qi;PtzQq7>`~r z0zO)ffse=5^OLIm4)c@vJt*yAm%^2HSnv~m62FL_9Q}&wPpW=p*Du=YCy(_Wu*EOh zPX^~rEPhM+#qK*L9eRgJ#}ijj`(mKG7N+)2gr5wnmyo~XvG48;^OL(4c5|=)hkL#G zN8m2}B>KV5(G#Ud=Xb81r|Bn!UWK2`M(nS2B{(lZ%z4Z~?c%ya0SU z!cWd~(#A*l$&BZ}+T0F%a+>2qdt&1QPPu&o@Zn+%+Npk0v`KY888Oa`@#ys;o}cvO z82ET>@sqUMVSW<72gRg1iYg5`f?izbuL;Fec3YmEmtM8V6u{0v- z*xe@e6dUp-my`Vl=;@zd*Sq11yKZcEe=?*xj*x%)=l`efCuKdvow`4H`sZ(Qum3Ev zpF}^{IeJ2V?byz>^EBIGp;zH2s}cR=XkW7aq?TjYd4rz>5AXpOaLYXxFfQH^elp$u zq`*h`$*kwUn)}IY!u-NoPIG){Pi%a^DWBdwpG^ z7&^Uog>Os0IP&k3 zdWwwsW#OZT_5I)vcW>BQep1L^_^4R-{rKV5Z9NU0 zZrXX${Q_ym!)f|Sq1StUuzR@}aXn2TLH@n^dO=T)ZRcz6^{*EM5AXqPaN{?$lh$hp zeA3&m%oDbk3cJ|ix?tKr+QY)VvOT1o%s*wehbhlP#a^+g`wh%PnR(qt@0IP~@O_fz zHkx!i?T)H_8BnMDJsZF9{?ptTv%PuULhI$qckcLWkGo!>N7h5!srwDimS1gf?)as9 zz4?ds5dC0p=!w#W!_4+DX?vEmJoQR@y@tTmac=3!MC>=PZ%5ZB+Bczh(H?3!Mtj)M zZvYSQK?=B4cMia3680MeK8qKx?a4*#H;k!$Rp=`!1s^S^IX<)}Ha^J99T9*J7h}*g z?I+ECgJ_c$oO(!aEu#Izc=UP^@X>M%d_1<|KGAQW-45$F;P;@|6}Z~{2K*v^a_m;= zCn;aty?x_r-owTCqWvW68qK_6BW39qvzsKXU2W3wL}t`Em(VAkKDl!A5vR7@PlAtK zKOuj^&rdBo&PhG89^ww|C!ctFj(dH%d%gKbyhjV&_z3-A=je&j-RE?!ou}Dv5PEfY zUG)?rjt}G$w!>PEVdo8g5CAyCn-O)r|BnC%oCpEm`g|aNtq}788yC^G4g9>{!{tI?@F5gzDYgB zhI|=QeiHhpme$x{p6pP|8MWpckUN?d=33z z=R;MgAJj2A&9w8R`)QMwr(X0Y)5;Sr^y)ZIm9r83q(A?IuG9G6JUjQ~NIO?AugDAN ze)N7^@Bp8hdXK?vY%dd^dY!St)sAC`TZm)G+e7)n-ffFx zjOT0h$22dFVcqG@MjSKrKhiH3eb~rGO z0T1xu{RFrCD+2JDgmH|(XY>8%^b{iElQ}tA9HZql$A|Xb#s{2AuMWV6i!o?=ag5BH znAUkG!e`v_qFKGgi1@^K^m-BcXqmL`v9=pI@L?|mdkxuB zVb_oH@MA49a^T~w8C84tSbJ*oqdfc=vp^2d3qRf$){fiHOL_P)Mui;s&{t(GEMrV| z{V4D8Q)~W^L;c`~{nCfF>&Kcw_%X(b9Qb%^%+y#qYyIr{Q67HoD_;K~$F3jt!Put1 zehb~km7KZ6K(+rh`*`q&%3SQRx45L3J93`u7p6FA_3?PVn&)eU=g}YO&-L%P--v;< z9O>i2#;U;se1>+0c3{wddBtFGG19N*uu8)0VHe{^LM9VG} z{Wth%IT9bmp<&J)JisTjo5Tm)Y{?Rz*eOR+%pKVtd~zZ9Y-cMX=5O%Pa+>1<9^g|_ zxxvBBu7Ec6cV@1Cw0KACn`JI%GJtXmj!Vlc37uTEBE6uYdx<_TbvX7hZo4=p5)~zh}Q7`*`@jPjq zEm88?1HrNJBXAM_gucYt68`&zF72}=s3-MyZ>fKH9#Lj%oGpP}F%~=gO=(}Mdd}!} z<{a=p?b#APRCB;PO8e&dqS8rswuI6L{=fJ;b9|t-qd7++Ob;{zVxQ~0CA2iyw( z5`@p>JzJtWLHKAn&G7*b@X0B^3~pT~1>zIi0i`!S&<^`~yj+_ge6*bA_<#ra;N`%L z-_TCVRUr0${%ReM7 zJY-VdqcECRYlond?Q9A3gT0lMp3uk046{8n-qP8(W*Lw2|C%%mOww) zIeJ1Lx!%sT^E7i6aJEGDj%ap1obU`LEyu9)20sZN-~%q;mYouS&m_!Mz}XVjFGs_t z`-Eh1jF!_JAKDWeA8;BzH2@zj#-M4&nQ8h-&Xy=ej5A|Adc6p7jFw~I zNxL29C-Hkw>BBz*%H|&rGFfKSkmmzP3kE& zid};~t(Q=yOLwjQ515WuD2jIiS7_?LUBxg$$y!fKM>r}KH10PSL z_(|IBFh7akgJM_UYWqq2qUR^SCH*Ajhrew4$?ar7!Ui` zr|UY6|Be1+){`UcJZ!xnczF2m9;^4d^imU_$(l1p=2qLYlKomVKiQq|j4Un3Ylj1K z#?Y>S4{rdtb=?+#PwdqgouB)z>b=)tEtu3$w>qN&eMP0%kCxLMAKH5xALI=U1>nQQ z7&N_{F={>ZGMo#Vy1! zwI9ehhVtF}n&aY~dq$RdCd}|(WZcsAprnQ}WBizGXJnxt?A+E<_eV@S@0@*)>Gmf% zBP$nmTs)zl)N*V)H_yld5AflY1vh>}J89ji7?1g9U3W_RM|(JQk7^H9JDJ_jY!6dj zPZN9NiXQ)DJ&k$xN9M1x9UR_8_E&}k7`G3e88!2V*ox}j6u`1pETFga7I>Pg8B_wj)9M-QTh$E+hP3%{2mm$ z!cW-!2K=JuCm)f1lJZ^qn|?CI@lWsB;(QT)Ql9-m&TRASkD;ffU+kWy#z7yIzw?T= zDpTZ!ors*-VWS5^eyTaMm42}E(e2Ig&+bc2J5M@(nY6sdE8X!=p;wVJyA-kCFr4)4 z0#A;#^RV$x@Bkm)W8Ukrr6xX;b^KG{BXVXJBKpZ%LVUCwuN@8?{{#>4;r#@+p@9H= zCgJ#}z(?fFE=8Ot>`u5IP0MMH5AD2-4>;w&5P%OCW6*e`lZ}F=I_=4sor^d=-B_b& zf1w|s<#_lQ48(n6zsrz{Gl)B~Di0FzNbz=a-Zjnsxly4OfBcIZcbNM^&9geHdrLoB zeN4t1rRnlFbUbmxsvicOY-e+#AM6r6p_lA6rd=lOA0#bLz0&TVb2eu-;`*eqgl7$C zIfh*}^v}Tqe0Y9v>w0?tK9jJ2&e@y=FJ23a%%z61^OEg%(Q=yOLpx&Q15P9F3BZSo zF=(3hlV<;%vpH)K@rm*1^&b~~(pj^Be~SKw;*&+&`+Nd!`!-_Xf= zwnWC;|I3q_bh4c-!Se>4EkUkG-Z49-=G|Znhj)vyApbii_GnQae)OS`10P~D#**j* z+59LEKYSN*$o&C7a)Z%#viVUSezdj7@%X8jlAK7`md%gy@MCNhIW|9X_~09Dew2qF zV+6>7A9^I`3}fLoKgz?8oDj%?ANnJQ8e;?G*rZLOJp9-@iyZi|*Bt$^XWiyUdHAu{ z6FKlT+1qD7FXiFKo+ac^Klp(MdvopjQ67G*?M4oK*bBj4L-thI^`kueSc{At z_^@V_JsGS$wfRvVeyj;X4$lie-WS%6+s{jRkDr>`Mh<*f3&L7h)^OSNV+|Snii#g{ zs2}{WU)HGD^`kueM%5Sqay&k2Zk9DJ%#qvmqdffZ1jw=LhkdZ-(_g=ZZdgaoTwG* zebtfpq?Jnu#-)%s-R3&8d9@rP=56RRf(Q6?&5-zjn=Mh=PwbQm9*=8IX2mSmL8)N)gi8qD=~YP^z+cT ze8wv$>~*bs6Z*B!9H2aLJ-?IE+M^OrDExqudU3s3z0y2eVnm%OQG39A-@uc4aUb=v z?-$RL#@P}zZ*CC{nN;8+{)u{tvnBlZ3th^yC61|IUn{Pw=c3;3pXwi;N0iwbXG>sL zjKy|+QQDWPo>TnUkt-hM<#7Kv@AnTM|Mc4&N89;%gDVDB4y+!`U-()IMWB?L*;+A= z^VFGBoV)A4WG-6~=REe={pa#8_aYUqD>~LCe-~aLsmCbfOIGFRgFbRyzI@88zn2|n zH+OAKwI}SH-w<}O{_In`BjkVR&M&!gS5;&^OqP#aH`~4bQTKZDk9c1fx{T3JnExO9 z=CKCu7Yr_1y?kYJ-p#HiEf4Q0j@n}}#okL5PlC{^<6Kf1{ebgZ;m^d_L$lAwIojVe zyU)HR^xozE5jo;|pd>3!F}@ixHs~NPoVfMaGk1d6mqw?f{0&;XYyOr+Hci=DEz~WXF6pK zmc2)6FIQ{CGJ=jxQSr-ml8)|gQuGx@3(9Xn_t^4a@AaQK(Di-ojc3Gj@zLKLN66pl ziCx`(>fDN~hq&vB9`4;^%fr1pt=M_oek|=U`oYc%N>A`Bj+l0ybPY(-^3*HsHCRHg zjEHoA)BxP_)c|}Z;TkM~&*uKwm8x1> zJYGBOAKyS{Q7G*&azvSC_|Tr%_#kVn_vL1PU|{K*B*Qyt+E1EsjA)Y%{=yCAq8hIi z?QlCj;Da0?BS@0CPxwjN?Jz%y--BXT;A;Cx{33pG^Z_-lruzRwkC=Y)oDsXGXty`qCHzUD{#V)W&$uIgem^;Kfb@&d>`eK4_$89s42##C z{YU>e=Fo+*J%rvk{lW67v;N-mUVNEp=SlZCB`vR?Bi%hxLa&bV{&H5e!#f39pO(&ev;Ir8Z`e6< zL@8nCVe0~TU%|(IZ%6hw@kzQzBWZcGFx4HG5$$j-r5rcno&U^?Z}eo;x`6TG80yg~ z1s~*y@?q`pLiYlAfDiJ(ZFnaWpZQBy6b85{22EOCi%hq_FYsBs_`N+PHE*_apw_hX zxZl7BIf73ZKEhAZZio3v{2r9{5d8dpGP9jK4y63U;YzN!-Y9?V+~0p-ir7=<{PLrh zx^(T_Z_c^0PWQcf`doFtxUT-W^X2lpD8hG_{@>rFKK@S+ovsIAms{Kyo4AoUvim+6 zM`B;O&zNy!=blZzoe@V0!}NbLFO~5l)PF6?_nn@2!6x^La%$S8;u05{T6!YYcLvD-h4SO3pNZMEJ;NX5*y=V*n zbKiF{cDQyc+FRdFPn_)5;pz~3dr{v`D^3)3Z2H08&=2-z>nVSt8F#AnTCrFBra3+% z=2X*K?K_s_J1r;T~J=cduU;IsQN& z*jv}@OuZC)%=Yk{<*SygUb1|dDK+}9q~(z`#Zmq6l-92Zoi2QMdU^PLa{WqhD~0s< zRQRDTx44$mOw!u9_$_epaGE7?0>8}8CQfH9UwPTU()jgES{}(_ol$*WAw`_#%vn;- zMO# zH8pR!V-xM^I<)>x;3U@fAV+X$#7V~w-~m2J1h?)(O?=K-zGT_zCCdg^$;4ya9+@UB zuLY&M&QjvjT`8#jBje30>w2{I4SbLzN{8XI#l1kkn0_+S=s)utI%#w6c>6GUQj^MY z`fGa}XGX8%%yeni{nz-3J+Riusx5yJ@5lBo=Zt#Zpqx9bX<)9@-rK;t!CVeD&YbB~ zRdXRr%)L?`eylA-4*XclOW%Suz3g>^ALZf4SRQhy7i*rF!)5K0&5!c%V{ILB;KSGv zYo{2)v!9pp@B>KXc+aWURIz56wUGY$Ep%;^J%@H13SXOc&KPgHK91+igpBbvwsVwd zjnal{IYDixF?({?zN*?gcK6NmGavZ+BVz4b;Sx!!YVBOkx29NNW!InjhSBcj zG6pXmDQRhiNyEw|{kwP{*1Am4uf10j{@5+QlhVR(C7w|D@t#vJt~aY!ntO7G9#eaT ze`>yO{&sM!TUqX-UN!4}@jPkl$<29t^aaPpkHAIz6Z#T!jsE+EF6EwFd3~+>n|e}j z_fPc?&m+ogjXk;86|q|N25Dcadd}#J_cGRErxmN6BD%H+i9x6CHO1MXUXD2pb5Cxo zEDPh{efc4$^laRDZsjYxb@x5BX@MKBWqUqX-m84XeS4MtvQ{sjx$0ln46ID@Y<_-x zpZ9_D=Rbb2n8SUfvfGJ^#+|#MoK401Dq=OB*N)Xh{LVYTJJJ0f`A+bzRHwG_oj7v# z?6~o6<2zyQYqE7Q-tVlJ8#VaOr%s*L^XWt1+54?)PUyS;f(z>JMBy{fZan$#?=OQIRbLUX^U6|23?`M1V(5Kt- zFOJbpBsj{ztdR9f$bVu>SNV`#zti*5zwhYQBi@I1g6HL(*v^?=_j#h7;2rSZiEHFL z!MjpB$!sUm-2dn{6R}k&=2_%W5bJ}?^?2Qf%NQ_woTQl(EUIGBFwG9Dm=rqegxh`yc=Q+~(e^p5NZR-uxrp3DI{% zKlB~Z6Q%P#`xr4p()B$_%Tq704?WHGK|-&Nb5|u7@$3#=kJi2kz1R0YdUE`IM|b_Q zmB#@*zz1pIHvGTS8}XTh`yT~9i$AxiQiym)K;gB?)^BM!etg_D_ZB|1CpJFdRPF6l z`$>2FTC_=(Jw8;)hUDW!A4w_pqvaU*cb!A1=nA>BX7p`bp6yJ%8_qDm8CD zF)Y%L@zA~^;G^Xj_;`1U`-GpQ-46AW%I{?r#je2B_LKNU{N%`$%1^5D)yLZBC%uP@ z@kRSdnJ2(;M<)Gw0=oL7UmQML(o&B}$McgzXRAB`iq6{SI~%rUfAWDvvwEJ&ALshP z;Qr(Ti_Uki&x-6P(GPZxo`53rw}Ac%7h}-$>^$9eSm;&sC#wxl(EqCc7O#)X@=!?kmh^(VC)KR%89 zN!k+|A8;z3wr%)H(I$!hWOah#7%j)Z2esG7Nrj)J{SNb!_&q502ClZB#4q9}yOybO zSJkg99o*J&*VqS7Xg~R^+K05G;U`BIO21fqm8AJsnshurIs6)FZ_szI-M(+}SKd=@ z_qc0VfAaB1_v(B6(K+t8>gLJ`e{SqgK7R4EzQ->juV^`bd>Z{E z?TL*KIOYElfDadA(DdTWbo-N{P5OBEhby&j-26MSrpnM-jOPq1LY%4P1WTenNxL29 zC-Hkw>f z`WBAdyRqGVGORvA{=;9o*=^JBD9d`7cRu{)>-rvk^Cu$vN%VuA+j=T>nSN5OZGE{Z zHTthK?L19CDfHU)`1$41J<;quvoKkIMav1db1^Os9^iwf!HwV0$(p}F;In?+^=^FH z-j8Tsw+Owf_K)_k_%_)d(oPl+Guy+3U$^scp1EYGt>@Ri8Ld6^uPxVg z8vmOY_jqz-d#GMsk%Q0u=>2Tq0Y1FP;Fdke#HXG|Gxn^m<0LIF>o3l~Quw5lhg0CQ ze%-naxjUobQ+i!8f2HMk{>sRYC~y@13OvAv=LfgUp#k{BUY(}!Nl>2pwF95Ui+{AS zbaym-atX&jwVdYo(B9klpogJs06tudK|3{%t?(I7j@{i;h-g1C9=%?K_D#$2@G)45 z`^5Msel@ILM_l4j<)6US?$;5w5XTH%EaMo;k8E$oF)6R7iQP}o8!GLNW85Y(@N?sF7xw<(V|Tc5)bW*}o}E>k ztK*m(k6YwkzcunaA^O42b4pJLuRhnQ<2UnC9bXfAb)0=Fg}b7)!|10~>e;y`$8YD2 z>HWd4F=ag3JZ$ER`pllH{M2b{W{0DQO@ zgQhtylIFP^qD{K#ocERs5%G!f==CC={djT=d_1=JN!sl&KZ)OiVsGGT`$_yFesW}3 z`bo+UAKF$w`3mm=Tl}K^B>OXVG5lnAUi!ttMUrM-ZPM}lWLB-Cfu6tbZM{csY`>oj zn!PVeFKrbO=VqaW-XJpn^$O6S^nn&Y2BukJpq zN;Ts6XDQ+Mrj#gkj2t<&!B6h{*tEWVAB(=82K`{?=m{8dyL76Z zr`rw-y*kdcO2+Hwh4tvsOgu_EtmXLaywOjB2lyZr+=llEz^5bpWV-841wNbmvz2PZ z^%`9X&J7p)Otl<8K8=2o_Qb{qoQnGg;KRijv{U`0Xp_Et&AZCkZ%vG!)N%}bJdNTf zX}81tBz_Nyy@9LkC-IB;$*%WFKS}xgkJ{=dkM$m~#V^`VvOi-t!%vnjlzy@JdPy?{ zlaA*n$5g)odi5!H-Fx!iuW!4b4C_yBShIW2iZ>kP_I+Max%sqzY?SKK=&*sXCm59j7P5*@#0KRj)9NI7C%Y59p)$Tdr<5OTx~yzU&K!iyDD47l)QeTFshtJfS0M9X|BX(KC9l{fF2`*xq$kK2;l4 z6!NG4@k_4!vH7wd;8nI8-ULw^pgUg&G&cr6nyK`&_$Y* zcGxec89uZpHa^s;dRYKIT#P}}w4XHRCqAHr`0(*K;3sLf z!~7(E4~kuZEA6o0x5X8NU&K$6+n4fQ1=N?6{p9gB|ERyUpJW}+9)_Q+y-E7T{8C9v zFEi65_-vf_w+7*-3e{?lVSA|^6z+5%s*y&WIe>4+D~3`U%B^^`<{#JC(#df zj-JBgC$-b0<#oN%^^-!cj`RMWk~hDiB?Wz}sr{`%*P8teJNL`+*?EJX1P}0mH@NW| zTG#I+^pgUg&G+~9R3qYpK3b*V%Ns{vSsI)TYxXKl$-Q3ge{$yBvg#6upctqK87H*XFFz>9)ndM$z;9hV35$};0 zcSRrA`Ot}`UJ4&H$Bj-~wqnidi(-d0PTF=}+aWOTin~2%_41X?RbX5dI=$kwV|%im zod;Q;Q6$z6>|D!{<3?)Vj^e5J?SKdP@ZN&k&;>#G#GdYV(%e@i`YUPTvwqz-=NG*G zN_+9qatwSL_Emug`0!GI8^58Qw9i!Flh!%e!hVL=tyB8pY15~k|5InP;Q#FW8|1km zFC2Mp$PefDf5M+q9)9HMB~K)IRN2>0eqHhd*!(CDKh|F(hkAK@RbEr_Dsv_a&r5mu zv5pWqjQg_gmT_a&@7ndFJp7o?M-F^gpTzoK);ZbyC=WmO%^}C*qt*wrPKx ztEury@9`sVk(w`rA9eyi@?Ziyv~%L3dG&Gj zwEQm5nF(1Jv@&&tl{6)d@QLuh@4;-`X3# zH-Gqza{heudP%$Ua$U`+qM}{`xv=$6)Z3={dloz;@?T}XDe1_^O={nt)^G7XtaX{8 zU;9ir zrdOw({g)YM9(=N${m1iirq>kTnO?jDyc30Y$ajKw#eOMLeJ48U>_2ZT%YI_{d(xf# zr=BZ|o>Jp5C=m(&8$UhQ0GV@0iLz z1f6W>yrCcZ3FwLE-`37~%TCa`VlBttPiS2C4IbbFF5tGUo%2?VI6qW8FWI_$Eys^f z9-MnLT+SpkcFtSQ8;@wOpVV>;d{Dc0ehuw*n4iS&L9r`vwf!W15kFb`km^sWex+9d z^(9R|Y4dL7xAv3lBR0=N&0Q(|;>cSh&A!#7OFwPPTL2&<}Qwp1@#RJLj!7 zLGiGb`KoVQxY z`X=;}l+vHna{Tx-`bpXo8z1Vit)25$ifBLRr&S6*T8@E_$4=ZQ#$9Q*!~7(E59-;K z@)Ne7#4q9}OY5bdq`X%F^(AFLnc{f>=6R@@w@JU4e}|;q?=orF{439!Q|pPLlkGeJ z^n;zFC!T*>I}ae^tyyUAxRI9QxAR6n2_E1BF5tGUod-~h*qeHg_IC#CCWz;X0A3 zC&zE+jeZh5z{kTyz1Q2^c>ojCpUio3{P;BbN!k+|A8^{%&I8Cz&^kCR$G``*dw!C3 zJIqhw_dKfX3S4bJiC@G|)>cVBNqMgV>PyOgGWJF|JwM5L0OmQl-5-~JF~45Yv1?2^ zo}bLC^8lce?K}YVgPo%%@ZQ$W1ISL$Is`4pZ|9AE5yFh7akgJN&sYWqq2B7SoC zM(HOh?^Qs3N!d@PcpiXx4r}qf(k~X?Cu#0Fi;lBTuB7}Vbh4cXfPS!Z^aS49+IaxQ zh~ut>ixSRHdUE`B-smU61AM>*+_tsz07?_oU(s^>_&5#gU1?8je86d2I}ac?LF?eO z90MQJ?)4{Wx5NA-eh-RWfvfE&@r(G$(KTv*QuQmxw!d@f#T0UDld_)_Q?9W-xebROj(kwk?1xP{p3pJnC!x=Ld1>#TFPPQ#JjXs&8&wqY|NS+0yYfr(Wj(}Y zo#*(OFJJCnzcX^4WAuZaqbG!peC6Y3`EgI0e=%u!>Xr6+079>hQ|Kvp@vxQ@^v$2w zBj|eA--w6(a(q3bhCIjM0Y2~rx8X+v@R@{pjs-rO@87GZ7!e=z)G7rZzno_H(4N@% zAh)n703R;KplRAqn&$zCHfiW(yYv>l@t7D77omuUk57&dACCk5N!sl&KZ)OiVprfw zJ1qE#{ge1b{AB6hq@Sd`R{`}UWj`4^ajy208fz0y4oKSy3t>5vCN~vz1!&)1bezACi%)?jOXws(4-HY97 zy#{ppP3QK#@8~Dp=WOr!a$)rn@~7Xl#`S~q%Ca8fPVFbBA8>x(^aEB!_LJxbJ0JR} z)EDw|FER7YC(Re1v^@2qKbcnETcKCS*=v5yv%etg)6$E+JdygZwH!Haq+Z^J zysF>`g7rUD=L+?h~s*- zgy-aHIo`OQz()Pkd2hi3e0U&m%N!bjPwebt3ZDe!sb4$rnKNgHa&cp{^U8-3&L3+z z&GDhVxA8#_L)id)xEO=Rd%GJ234H43X{2U9Yx=&^bxTiaLo|FEYZUD-v~OCDhmXO4 zI0nBO7RL~mK(Q-uwc{A#7UG!vJ7pY0d7~2UkHVS%_EnLuS41$Uu3Wxmg-lFs-!|^= zdfAyV3%lHV+&D($eRZ6_DOX^glbiXJj9Z3(AZh*91pmvtveGt=9Ue8^7Sh;v#G&|2G+!vzd zgxh(2JVw2@-~-y=#&2jRotrbowav87&EfglO-1{<#ckJU|7Z_OuUF%rs()wKBi-@O zqi5UvqyC;cbBeR7elvM-%=1u-n`Ap!xLwlG^(Gxp&Zyeg4PAKTjGlR!BiymF_V(-W zS9bk`{NZbkcIDqZU)Dq1q5E|Uk9?(j{ZRLM^N+w?*c6hcez^7sS6Fk6&8^LW`IX7J3v-$qrdJ3EHS7;(#N?hufqw!gLuQTt3 z-*Nw)g8k5**!WPZZROl>(I(B@e&^myd1CPK%hC9tb$LF582_Z*4(m7I_n@9#DL+9w zjGx3W;wL#5gz~xu^4mY_d8oM?rJu}xLsI*>#``_l&O=2X*!jrUOucMt=b@IqjhzQs z-*|7w_}6KNwH(=R2s;lIJiv$d7TmVA^H8f1$JfS3BKQvQ(Q*uY8pfx=1AO2LZv2LJ zQokKcnp=q6|vU2e9C99S!Uk2Y+>2`ZhapW0j&wD2S*k|{j z%fD9nmBxu1g}=J{pc!tzN&K7X_64%;zs663DU(KKZTO48eS4QL&ugElB4Q$PUlSAA zxy#7$M^0UG1d?0V9~0I2sXj9NIO700LOrP$e984oj(pB8 z6S@%fqdffBTaO&pQj?2=&3#=6;K#hAIxkMi(iED$;13O{n7G3RCDL3#MGHw8KHVT_(Je8vFn z`cWQ!RW)aX9NIc?CMIC*yj?%a!;iI2$bp|{Cn{DZr>4!1^6+Eq06DBNWDNyt6j_U5 zKQHCs#~d?qs2_b2d@Ow%yMC01A8VkIL%qO-wIR$c+x4S7{AlKoL%qD`R(&njX!`ky zF)GeVBzEA;MEKftvY)wI4T-(eK66*gF=9KVZaudR9^eBW;Kpz0WIuB^TM6zPrG4hE zmgC3A-IG`UXnZ(Z)W!!qY}z?ov!s?lY)hM4J1m9J48XSkmf4l6L*f9LtHwF7j<64qfZsjehO3 zSYd=;=66y$_FIW36n@}Ny|~`2UTL1WoB5Tj*U%r$_s#G3*SeMEKI&!PFP|#havksp>h|f7^4#qr4pM zA8-DGy>_?0dWG8~(~DL)D=!~({~zvY{`Vx|W#mOb0LTiGm<6jtcpMqVDw~Br^d=C5VW)DoRAfK~Yh>x`4`4HPzp)uA1(i zneLut+&uFkoavpebE?m;>YP(=r|-S*FMr(VSI+x4*w$g-@xNbJq|(#z-iI_<8gkg-`!*Onh89UVLif=MKl7*!X}` z|9&Pu?GryId&WiCq&tflS8pah#LuI5DSXgRvy}d$<@m?X@;*7ghuya48<30NgS!37 z!POggY!;7%Uv&NCV&x|(-|=59@{@yAKRHOfo29jWa+cvI$G@ihV*f3QmOp1wY{#i$ zIiR20esU_N9oBNZb{MT|KM5Y-!yVvOIM5HDndv95-DdkzC18)f?I*J<;`vD}$BR#` zpTwTn_<&Q_Q@a{*=1lgJ*IqiORB-naw$@K-IpKa1yB*{w@q1AE6}Z;;NyjhZCo|tt zev~c=kV-%K zg>QbKxaf-QV~;1%5B(fHQQgshHT(HY_LGaQcw?~;uqV~_la+yZc38{t+F`V={UmsR z4|jlD2j%(!lfCQpU-4JdGYek-;-@{-gSIQJUguA zcP+VGR(*DJqR_=2Le->CGiv%lYa*U1NMXmzfJp!!Mq@A=;y#CFWROR65` zop+r*+54V<+pg|*P5dPKp`TCPYw9WcZ@&Hffcd7_hOd&$wJCF>(phhD`o@cUAYgMjX9pwa)SH0jAOt9e7Zib@Bz1p&E~wgV}}oj`V#jlKAn+| z*r6Ullg%w8@tHsW++sdpJn0c!{o3K|@3sG4?;1a;<%Ht{9^g~?Uxg32Wghp(Cu$_4 z@QJ+b(ewDpq(44Ulcy_uB5${8F+L9# z^RC{^IL0Hm`n4R0c%1^c(KYwVkr6OIpffDgREjcaH-ow5IC&Yed5O*}r%xfN&rs&bJPj~`>@lB`Z> zfJ)<3<&un8ScutG#AIsB${G7@jCkCx$;5Y*JuY9VsQr8W>#W>+F!o}_H)9XA9AyvP1QFG;dfo~=z-RP(3LkKrIMENEsL{BC zPeSo{HK%Wa_{^U_P|QygK3YyVKHvd9Q|lBy;MQ@PA3jl|aqvkd9#0ydwQJTE3k{B! zLb^!kPj3Hl<%Ht{9^f-sR``J1XpbL0QKND2NhTgo9-ocHLWA*mCX zD01M(-V*q+C(PzYdH8XrhI+z}GlKBrY_H9a^6+EtF>>I?Sqk`Z2Fm6~dHAt6068u{ zXU{48*eh=HqdffBlZPDmfd^wM)-G*+l!qT@tC0gg@L&wUo*|nb<>AK}G~~b!JcwC2 z`)Tu|Jp9Qu@Bp9whZR2HX3JOjw8Pv_Yw*bg z*f-8D*!pPp8ho^zaD2c6e8_1AZnk`dPdm*0v<9DCz*?-#!Ii`Ze6*Z!e82;Ir~|lh z4R!G0vT2&!+|PoR#0O>9?wIz?ylVQf-2&jF<#_S&nfq~a|A9}()#33Qd$ppj-c|Q9 zxV4S*r8PM*%kG@BiO7y|s_H50;^WFu_;_xqewFvh_!>OGr|X9bA96O@<-jLu1gG|z zEVtQ4xNZ$Tm4LN7bL}%ib)6#MqveF-10LX0m{j}r5d)Cf-Dlf>FxYw#%t#BaOWiimg(K3YyVKHvd9hy^#U zp$s<_0lyGUtDy;=!p$70vz3q&!zpj{AvK>TD}i-rvr-K~hbg zc}73@fAoZ2wzS+JX?HCgOQ6mhp?+e}Ub$*IU5{ zzXzpXfvY#}*eo6izlfi#+@bs=<>3oW%ugo%?gBF>^W0c|qSb0*>{@)KC(2l#LYxNULoE(jR!+kSHL%y{^uT{&KS zYW*bk#Ks4lwzPK_WL&+OaZKWV(v=hLC$ZZ>eiFY2rC))o?I-bz_{qsHD?dqjaEG>U zu1PZ|bKxPizo7D!WcC^CdC#|c&wSMd8(ys3Hd6jaAKO;sl6-wh)dNHn-SeIYdOv#V z)(z*HL_hTN@v^C>EhX2a)az{@Jh+&@&;OnArk2INRcGDW{(HS^#w%J*a6exxObvK| z&(tFdA8^}Ja!pEn)~>m@n7h9*d@?cP7%e9pAMgO5j$0Hy;I^gYnpF6#E9N&fhEE~x z`mrk~93SuipY*pCKH#>ccz?(LXgT5dfCu=%3*5Mdwo~quf9711#NWi@QxB+koH!kQLlc{~iuo>) z+IOUwx!*^xRra@XofF6WuSt2Hpn0pZvkw9)@1IfcNOAN-e?w2`WlMWUO3wB3=D6FQ zx5~xLEw1G#dlZ??LHT;A+oX;TQ3fW#`-q<-r}A`zOuGJbs7c zCvQ@e=V_c~WiI5g7i-=s>72~ygML0$F!i#f8w4BV9Z%z+BT244V-~m4QA1HjlZA;6^oSr6pw488!zyo|Hzo_s5w=FFv zb7q?G(Q?A^0T1xWO)7lAZA;6^oC%0C@eFY({zuCR#|J#Xr{Kg*;I_r(WS*w}Q+DNe z@$ng_Ie35%?E~DnhPKnZ;y-gvX2wU1m(VZcD6XM1H79ei)-_vJp9-zj2!rJ_5psJ zS+e<29)9epLJs`cBMLwEcH8_Y4?pH2kpn;W(!h^Ba5g{6!;iDj$blbtFs5Rz#O6nN z_;F?oIq(Ay#sHkvwE0mUe(bGB4*bA_n3XdvHb2V4k3ERUfggAfW3l(w=0|z>u~!2* z@BvDSzj7YAoAHG8jFv$gqA9)4I_(6*lY0T1xW-sX&5og6@vfGT{VX7uBI zLd#(ngSG~rtQ!-XYgo*|$Ea|%C}SfnCmbK}0H5@y6+Yl**GJ(KHKQN+B$Lyx75yjg z#)2k3tYO*uX!aU>w488!zyo|H)+v0z&6cn5iJH+5dNzhs&mE z+vj8sn42@LUDJ>4766~JE60mZ?c5K!|G=l~#_;%!oTX7CxVF#99I)pv@tn-A9EFby zpz}rIDC2AJ0H2O;D15-pE(bnQBe-_Y$(#w;Gi&Y&B^{nK^R#IsfP9ehq;q&l=YO8Qdd0xd@{!JgGtL-JU|Lqn??3XRq7L^LRXzNq*Z-UB z-&={>cwW{*=cMMQpXL4B)9ss{Z1cVw*P9; zQdTb;SXuodn~cl9-WMtV_U*bi_U`f0(xr#UdPMusCU{=IHbEPpP2@JHHbGmlCAY3k zG&jPoZ446W)sbLH^r6`jilmaiUIy7b(={lx_Swb~{wd#|X&AthChz*|FqpiS_+ zer|8DWRa?S}f#ris59^e{bmx(xeGIScJiPPxmBT9rSB?w~t`Zk`89%A|Z^}*_Bih7! zM4OQHi1wjP@VtI)f;K>#$b3Py3EE2K-QOR6T$*L)lT@3iMiIheM4ca|Sw2Aa4$9FjPVsziuwuuAl zKZfrex=sAUi80M{yuO7zf21$)r<}V6&R(^u}$h1H}7!-|Ll6#yDrr69iPqjZ2Wop^P(;6F7VJX=Jod;VYG>;cCTLjr2NmO zU$t@Pfrq+Zv+!l29??G737*%lP0$8t6X|uTP0&`db4@$3_$!aR`7alG=bVlm8a?6Y zrt2t53C|JLN~BV=#SGnpvECT*UrW=Wvqa6FT3r@4kmS-lLA-*#W;x`On??8zKAp9$620 z+xla&RVu%)z2XDn_g}f!@^5}0*(T~R}`dg5NCAIePKbL(nv%n*02Ic|CCl}dFB z&S1 zjPlg4HTc}!Qw~@QMJ}{sxn4WqZ;ep;kCqdT5BA>12U(eK`ryNl5oom5T`Nf9BhUF% z66!zFXPol7{@zN1_|(>@vA=+imgC}MFp&4jvl{qSdv7*36PG~gSKx}Dl>9aelR(@; z95eAX6~|D1vb&XWO!P=l$1#6*;+V7%$7Fw^{POr?ie`RhQuGx>N1ePy&?`^7pm)~N zxjpsb7&YikB_78}`Gu375OT-9`Hf&`>z|0W6%%%JpVZ}j>-JY?B{Xg zkhtYFPTh&dF;cIo)HTJNJAWSTCv`oV`$j+4a#TMLietb7d}znu*57C16E_ZtTOMsB z?I$HZYuBtVmfgL+;rL8C;}7c7CuAFduu=h4T=plQU4?g@DfwpTLBYj4C@tp2VgX4e*k6tZ8|Iu<> zd<>TIJ{ia0SA*gh;u0wR3S8|thPZ_|roZIO$2jvc<(^i?G0m;>c@?7LnCG21<|RfP zlm5B#%l%(dv~s^my}bOsPdIsDq3ibBrSIW;|FyS#(Kf>G1<%K%s+0H8PL)PZrHMW^{qs&*R1+ zam(xH=}t6`k$O#~miA<(X}qH4sD2(4$AAa;(2l`va&Hr#xN%6_^5B!SpOpA)x_@p@ zuE98_vLxPkU(0drux}g#9^k|CgIoE@FBh<)q-?`_@q61IjK`4 z6hEougyVy~xA8$%|L#8hhaV%*Dn1d)*+nEiNzTVepYfa1(!GUgns3%}Tzrg2B#yza z2E{SNB~bbmxY}_HaSL(G+R(+ZqLf%ziaZl8<}8qIP)=YFxHjo3G@6O z6vs&U58n3|5x3mFK-EJQdfJU+QXl{R`UmfOTwi;5dcP9Kpdb1uZZ9Mhm3Zjf!wZP?+AE63Z<#kx}Wp7)7=M}ZG`fDa78 zt^aF2_?#NOLnVigT31RE9~sA_-MxiDJw$1Uvk&O2Q3^g9tgMXK6z`ld_ixx?^g};KPu!dT zLHqV|x&I=meqPmU>aw1!>%YS7a6aa|xRzt|^BO-19^eBm;MVm$AAH)vPj*-5W0J&Y z)BSJhDKv-=dTN$phqW979}%9JaSZmv#s|6SZ~NfGj}d6Q`blY%zPR;ny_IRgN6WGB zade8G#BK-qN&Fs^eg&?!pTsZXCp*5Q{3PWodzpT+UEa4K{iMq0#NO2%3_oc%#qxym zli7`m+P~MkmS>Z8T$U1kDttUyk5AO!rTp8sd(}p9?xLjXVRE|tvbS!${j$Bp@8KW( zB>JGAPu*kcr83v-=PIX8^mUB5@dHnl^t_SOY40AF7R%EV4{JGYKlhz?1rPAaZBY1t z+vGFmysN?|`hFQ_9t1T-bk0e<}_^7L8Cdp3sc z&rv{{o$5|>-c|OWwQGJ{%((0B;c;e^I?FP|FuPLPt31^jhZ5xx{6y~3sd$msd1guY5Jva>@B$dN=r)e8}`sE z$ItSD4|sr2|F4{Q!okh1+X(~9&lp~2|F!Y!xaGAZwN98MKJ(}A+M9R%m6nv`H}LVw z3Bw0Gz^D9#!Ux>!x-B@f`8*?D9&yWSUdi{LB}<;`DY*O5w4@}zfsa>C7(U41=aq{R{*8KXhIyc18GJBFrR!Xsk zX|-%;#KJ<#iDG_T<)3`c*?0a@V>~?dJ7u?Xe^9jHiUr(w=rPCit=oTn&xs6`-(J{v=(pc1eh>f9KhY2U)7I0}w&whxlan@TN@sPBIlO8O{hIW? zS*h0_zWm~ztn25(dX0!DVxD8xa@_erRBYJIxQueFC|c*TjoMD@R0{ zH7eX7mH2GBf1c=ft^G*7%Y8oV_hS9hKDW-gBl~n%w`9N1Y^R#=qdfdLKZYFU9XYSe z`U!akY<`q?`8oUSkpn-@9Wmd}dA}NdPI>sTFC014i~YNt!)70_&5!c%qrY$-fO^4? z^HA*LxA{>Xe(VE54t(%q>`SJf*!(CDKh9es2fqi-%x|zxZS$i%{K!Lr9Qg3uv=`2U zk#m^#LV5Vn>XAdcb8%rGvXjTfTffD^l#z28J2LrnxIb*4b<}QQMMS=rgz_Pv$BH{I zVA^?=-VUtVcqc!{OotNrGFCeZiT;2&$|_Ve8M++uYb$?isKz$eN@hSR$i)T|A;y#nLSUR zmy~^}*>@}CUUl75l5gQiMJM()DSAno%Kkbg>+9&(&bf~~;vBBy(tJhX356eahbx5DHfRK2F2HrtywE*le-q5fG9|KizgM%lko!-#q4dg~_e&-hvh%#;IQ8a2rVY?0CjY4R4%1ftd2%7o zYN}1}e6*Q#9UBlc7xFm+XAg?Z*k_L9I;)A0MMCu#Hy1L`OPlcKLZ%JSCd$vKHbGmN zc)c~>olq`ha;8Te8R%TdoV%JGt4(CT7j7rMz3%m;{eFE?@25WXn!d$Oe(dKCIj@wp z@?)Pic=~`$qVH)0rwjClmoGiH^R&UvRfB`eMSBnn1!v|uPge=mS5~vAi#+P7kfiC~ z+<4x`{u6E&c4A@g%7>QDi@e-V(e%3ne`I~ zR}8Ea8R45th)k)@=8CzBkY^0k9yQv;9HUK)|3%I9Kr0y)6Xp+4)MXU#W%P6vlS0S- zx}x;--mer`>>&Py*ZNmd?{aQT%TZ&;P4_Q6 zf`8tzJ?#~IvM({)ZT|x%J}1<#Lg*cF%WLMz?g^A_{^`Ac-&6Q5Hai?2U61Czx%jwp z{Kxk6AMgMl>PW|-_=8Hvx5CB>fX1Ji?#mJ^N-cz_Sj4{qak znE3Q?Lqr<4ycXLEe6H!KG-%&+J(~MQ|Iu=S@sVqd_*HwY2dTs*Q2Z7BYqoQvl)G7& z1mYIrnDkRBj-h<^eP$eU{Ocw`)NXH^hq8_f3sRd!K!A3FN1 ziff?t>X<#tnPYS4o_lO8y>i93MVuht^D+H#jFjJX$jVYGHP5Ms`2>6JagX@@0`YtJ z2Rn>j?0!z^j&GR#T;s(Z&C$5!wX|-5d~!Jjq+V00y-VqUIdCmE-Z%QWmgDK?-Fu2T z>bpg|>g@v`+G!9zqj#G4#LZzAw>;WO`mCgE^V{s1F6F1mPii?He0VrPB|g#)V;_R- zFm@G6e*;(B4r6z*!>U#8F%(&d6 zV&iMqnaU1BySM5qee4f62|N7aj3=f1)GmvK{G*+E7}ZU6Z*^E{EPb)~J^VvIM=wGB zynKV%&*P2<Ck{(Z1^_uD`mEF1M@bOCaLcR7yof@IoVJ%1XbH&N8k0(W&FP|fFp1b3`aC~$S{NPr2$i%0I8zR!U<+a#W;ImgL zKTUC_mJ^JRjAQVtL2(Rm2^4=t|C;S6O!nK&qCXP15XV&hpyC+Hw||a0a=DuCjVz>8 zywbm`qUE_J)$PXr+my3s1Dd+)a~m!@PQJr4JdTN*Vhe*baZ?&QWXj(+Ip=m~9XDLLw@dQI)!TW)aPsQ>*j;}}1fD7$< zOUY3u@tHq=``*k$)8i+#94|g&HMv}|CpJFdw8iA86E^9xo~H4>mgB_-t?ThV zc00&V;`gBRD{!^_Bz_S;IrTf`Cn?{x${g<}obx<#QY|^&S2@r9-=&*7NcqLg4vKcn zHmTOE|F_IaWe=gLeSf-M_$M((7w#wJ`_yzfYTBo*Bei549NnJzh$;vzP;?O@|{=L%3Hs2I}=*3x| zl=A<4`K7{7uV0|*VLrj1FTY>>{t@we_y<3UUV{30$HQhnkGsAYx4eF;ZV@3Rw>~NL zno8~2lbfb~uI1SM++3feod)5PzuUwo?)qZf^5B#7`lM|0hkbCYr{eC74U8nILL@5t zMfHrRE62u1vBeH!7lQ0CcGabhJpxzT4r6z*!~L_A9j1JCu4#uCf5qPKdhF0>ggvXG zlvtKLFp|z>A!&!ttd?fHV!mrKKS$Z!?4gQgUTe~Nf(y<&(Vz$Ib#CvMv*-8LduO(q z*XvCDo!L^pe2;r7b$ySlhpfN%o!M)z_<;ERSJl6VJsWly{m{?TQ|9{D)IDZDkNd93 zxaIXTDLY)*+RiCaeMgfJGcvqV-(2^b)N3lWeQ#l!?68)j`gzd1Ccy)IXvg4IxXHw) zYDc3UC=gnTTOLIxy?!k5S+e9eJ?RG5k1L+DlhmmZiXGN+Ts!QW^Bg?D2N~ct^@tBX z(aoL0Cq{Yd*BX58?#VQWPx*p)<4G+i93SkxjSqUreA5RXevCldHI9)!-CNA{6EAPy< z-Zl9O6}NQlu4v^s<)@+bL`^wy477OD!rndKw3Qf7hR?e??^rP7n0mrIzk`qGPt~td z{=f;h3ZMH_QPo5KS~@f!#P31rSKx{r zmi#u0DGdA~elq(@wLVGt^qwvClaV7>?I+pCW4>#0{NI#+9DkkTFJDl8vdf`bv;N;Q z%bfK|hmNg$^@e@_Q9WNO>}v425alO3-=MM~`120?YtTL(DSxtKwvc^(N!3Gg(S9cKb|)IgNPIReTw2OclO5J_418+dHHjUu@d2mFANkkyu+V`{Enikhb-gqi$}b$e&-!Fi{HaP_(}9bKSxiLPJg*w`+2fyAUB_ddtI~1|d}_v% z*b^HcaLWF~2OoZnK-<+%N}DwGu}}Aur)gbD%kko)6^ft4ZU^~E{2rA42ClZB#4q9} z^N%V&N%@J3Oh1|I`f=oGSI_z}^RDJQ6wCjr{9%Vc!Q!nq_<4*RYjg9rHV{NR@U zxeq>(XV0AV{TSt`UrX?L!xu}H2L0st>Uj8QIpO$V?`?e0L**+z`0!%{+OF%z(r4Va z^wd&en&xA)92Xx$o5V5r)u1?rxCBbS0$2Q`FJGXkI_w%>@U_re&#&`WVfjCCW-)^_ph`c&G zm1I3+mA!Gyom>5+ce|_is+$|0IA+Sx5B)rIm>I`perERbxN%6_@*1M<>bz@Gag5Y! zDs^iyL&O_|>2|hPVVuzXDe~jv;O# zj>$i-;uy+L^tCdMImCFzW-fFbGv&lFI~#G#mlp!jbk3qEbIIBFE4I5jzK^4^NH=uIA-c;(+VkxW-0bf%W?5BSP{qISA*gh;u0wR z3S8|thPcIzV_vDwB~pI$EHjSD9ee(l<-1#t8$M(3Xz{AF73w9$MqL}ZsFv-FSXcfyL#V! zY$6bTML*Yag8TVm(Z9e0eBcglTtiPib#Qb8ht$>Zhmc^D(SdK>hzwA z-%>0$IKM_cnx)u7EyuNozT*b)0H6K^3LkKre8!AR6+Y4TtvLHbntiOA`&)s}+BNxN zW}4>Lw488!zyo}+E8tc*z_0&AA9#D;>CHCe8s#_eht}ZprDDFpaa{vd^u2}tqveF- z10LW5Q*h%N+D`F=oS#lAo{;u!?V3lYEuJ8LAf7IG>f!yh@$a%@y;vcP%rrMj!$yW+x#dGKhCTphj-QSt`^=^$2(ta zew2qFIiQgPAI`$^&KS!j_0G|4bLAUesyDGR}QhUIIrz~#*UEpNqoQq zd^yF8=*-+{B4zcdZ(mq_<9&NN zNV5w=F&+VZQ4i_`OX@4@b?yrO8lM&(PdT^A3`8G*LdUNzW4J zXXS^Sk||>juH$HBS0>)B=+xUxip+`E{`3j#8h?{Cf3`Yv0)6dGA1;mb?bEaQ>c!z_ zPP|MK{4V8>f9sfHD)mrN)0c7)k$ZVo%^G?n2~w}(97}Qhved6tJ1~0+SECm!`kyz62A7VJ z+gJKbEywUfdR?!3&-+r{dmaT&-~vvxXYfnE&kv_V1GHEF&x;0@pExoJM23t3cwU>>CHQ(gT? zelpG>t|87T{8hy{l+WB~#yQ=;vE!T*2UiTN92gnwf5$0Qq5(>&PEky}G^^=}m)T;p za#vLjIYDO`aZctxl;4Kt{#{* zJBhgF>qS)$v*wjI|Hp#sb`|gbt@Dw%%Qy$U1oijA=gj^dx4*_M&toNRm!)1)sZSTP zm;3j3)fx?geYV)H!{HPal-~)vp?as?j##_W!#9Ntdo%v*E zeyQ>WGu}%0onDa#z%t%iRegAJ%g#39t=yH$FI6s9G&^Wg^cF;?oSX>IeV#b4cUJnX z#a72#a{?+Pb;@||8)o78htvFz%twSHX7 zG4OFUD*KuAyVz~pPjVxE4@$oRSKCkG7x9y$KU4D(lppVEsh^CTETh&>&N2LC`YgvU zUZCjY=_W;AK{Vs!*n|GxmqvS+KU(Q|vHYZzf8INa!lv&~RP~TG*M9Q6cYHwn{*8wH zB>JJBXB|DEkB+O_x1T5ZPA{ofxnHL6!^Z4zKE`~pw8L7C(a&rABzS-ixPV*bG9P?q zpr4fZELrl|4TT>yhRH@KPhd}q02wplWh>62#;PZ zLY%4P82Gqs@srr?AU}!UgVL|S)%KJ4Mf_xLv+|RaAAP6kC)+O<139I(GW=x6YULM4 zmn!NiGUAulJ%3c+0VizRaz7bVJt_Zn&ku?1aO;bz9_F2|JO6EcuRH(Dy4&SsJCgJF z=!bq@{*bAs{u|AH?yT1x5Ou+Bd1~qEWOm;q`_3q-*Zjv$>CQFS&vPG-H(t?lg8R9| z2Ry*1e^}uIZc{~ne4?HXU)9F=ELn2ZhDw9umBJPA@X>O@@c|F;$(^h40k`Z$zW5y2 z^g^Z6%?H~UpZW7&RjmBDu{dTt=6sBn6OIpffDe8E+%lK=;&VXM3C?rc8lU$S^9|0I zdG{lm9wz*XI7Z6}#|J#X2kzj;HME`1hRbnUQfI@Z|5>}{vqhe>RaD}$S@;#=JL0|U z9JPKx99Ujw#(N2`A4ClwQriigtMvnNp>J)(dxdu?`&&6l(XJ1hw4PqOoOL7U-9LSG z-@zvz-tu@aX!cFYzx$^P`rfLyWnD(*E{?}yoY}1Z|I5A zU00a)Fz&c4Zh7jJ^!mZO-m{m$^`M@@qmB8i%vJH?2`$I4hc)ve-~m27Ke!dH^ucEa z&WlKV-n;JU1-YLzhEL%W@$k`d!tueL*!X}`?lvEM_%Q-avi~Hxejshq!6)zDlWQ;@ zkMQW#BE%C~j)9NMR^C_L2jJN6pm`De9+Z9suCpDE_(}XCesXkA%P zc4zhWz4GLpO9!p{rKpGeXg~R`{GNU9${*ISpF}_ObM&P6ih1t4+qa)5xqeXit;F@2 zVxd7hJP~tVM9VSyd5xb05AXpOa4X;BgU<}~lM5%!lPGDw;akZy4O zAoIa^c38_X`gx6?1P|~57jVmO@WE#W`bmY)a~lc`?pvO^BpyCmPB=c;6B{3J%5C() zhaV%*cJ-6eCZ%t?dqcUweJT+iy;=l6spS~>xNPy0*zF)ciQj|LufWyzllVpanGEOpX_*#@{6PYsp!;VlhzYjcJ`w|pWkb*z7zW|YWa9F zXx>%Ie}1nXQHMK=x7@y>W<1&Kyes;lpQ9)AGX8A)_VXnDm}tMveVqY3wHc*@q!(%tMQX>J?)v^SKsmShUZ<;5B(fHAve3j8;!g~?AEvVnw9Ghy6tRJM78{#|L|2SJ` z=0fEcvmaM9f3`{MRW#$|afCkp%l|7q`;Xmv$9C&{QTFjj`LFr$&81Z8_6@Qgvi@Vc z$vs8t^Y|~H7QcT%{2u<1?P#%Z1?Y!<-nCNchti{eGyD08BP$1&pE;7__hxC_@>*WE z7_Er>{agEvSB@HJGTp1xYbv$0C)41(tFA|L-{|LBj_T*C@z%ay0X)E`uu9doWh7qDn&fz2;xm8#ss-f+*Z0Zmuj|v;H~Np3qw!Ji zzBq4VDy8uO5AZ<>xQ*{@;&a^a%4JQz2pOh=#w`!4S*i63pM>(QN_^I?`O*49gZUS! zN3&Go(;*6JIbM9c+{W(lzNZAgY~w_U+)qq97gx`5%Tq6zCo{>sxYD;j`;TAt^nbLm zJeky^Sqe^CP7qFtv%Ft!A|nn8iaUuTq4YoSwc}3WOyW-7`$752N6ff0*S7EU-oc1F zZ9K-ul;58Es2N|`_XS;VzGWX_*HUBk=4XP+$NjsMzxkGJMIE;BjV(97A+vGw8@7{m z4E@M&=g&^)=)=?=y0G_6-^Io|#*<4)6W zf(Q6aoulvpx60rB@QJ>JmSo=lB<-=pXa4+w;#5GM^3cZK#E;lxEys&bD)9Xb-~vvW zYaE=M{?z}1A5KwEZ>Lg8=KW6^r?qR=7CWw(9>1yOG=>wnfD?WI{L-8Ja5^yZ`x%lP z$0a$RCi~OcH5-eS2FD3abRpwb*`H*-EiK236XR?>P5=+^ff=}Q4Q;1$_7b0@&eK{bY?mD^u9V-62yywMw2YWUCd&AZu zzI%E>DkbX??IUsDN)+XJSBo|v{!7hC&8@!6OpY;_8(@rKzw?N;!5D#r>^In;|>+Pt%boZ9yDQXYQf3Puim$c0AEaB`~I{3s7Ua`qtye&iq}XE?b` zZGMz@`8j)ikOM#JN6v6^EY|RI%EOP`yU3wl>>(hxDti%ZJSY!8)>zq-ME&4P{m7MU z*N^h>W3Cf9JSS^6Ssa@m z<>5!}D&$Z<_+bw?Yhd%Eyvxs7^F|JQ$o0Zm1#(u|_>x-ze&oVH4$sS(c%GMB7Iyt8 z4?l9LA&2LMAJ5BKeVZTU;l~+QV_Jp9<>j2yRLI5~6Jo5Pu8yMC01 zAA8!713&h*!jC=aHb2V4k2BZEL4WW=f9$!n`B5Hz{(pYe6zn(I4|l|Gn97?pVc@V~PpULwSKHz4{SNOEU+)TH^C!sYBo-_U5 z{$u{FxgjQ%_;d&!T8&(51+SNI3(fiLmeqrZP151|gQ-*BzOXN4U)v?kYsQWIHUHRy&N~J9 zi=z3O{8IKc&Ka7yidLL6=$Zf4 zXVIme(z<9v-?Cp&b_qK1MaND#v>_%DZj$X`Oq4^v+l%kA{`SYl!~VV5>+xSIJfW0F zHud87uzH;vVed8aY})l*Rjf&0zdPbT(2pVX6ji=V0=o=27$T6OB`VDcml5p=OKTqQ-D9xFOCjZroF^X@|NK6Oi{CE~_)Xt0abGO(L?8HnTQB3g%r$UtpZPYm z_c5tG_)4cc6f@JbH$cl#_C9D2K6ro+2!b2e(3!e7fahy9#U5h+u!mi*Q}z%$+3_CB z9v-XWp5unk7(9CA@ah#RP;R=q)v}!t3kzvI!XB#Fhj;kSGWG_P-=XYY{-&t*&wQjk zUftQJ{vyu-O@D4-DSwYw_li1P>}&J(xb8K5dtBG;)X}WF_X>N6e&}zup3=LT_Rtv* zMI8>Ml018u(d+34W2#p#@}AO*848?F84}lIkr8t_Ub$B7JT3jZd^m#$sS64 zlG-c9^R=2{53zsP!^|6$J;YAtR+;uNsdti`I<#Dd@q?$zAUeWF#)s;iB%IMS-)Y`) zqq2jQPbu1etx4;N%sS&w=x2``-!O0g5n+qM?P1*K@`U0>6{YddQ!3 zE`z>ncNV|@RQw+P!5*R?`Wt$p^yF(ydl=WA#Vt?0QmJl%d~)ltQm?7hyi&G7d#LNt z+&Ao@mgAid5PL_v_q__&WJ zag_ThvD^0k6>h}uLFsScI@`HX^4lzoGJX+1S$>)Fla%jY-C{o(@vS7YJMoi$bLLUZ zcbb>4Q+~1QdPNI2m=t{l(fmbfeinM)ZBO(z@Yt@pvm>~Wc{SntMrq3ciuDzfd~)nDS{o=a=iV#)=z>5 z_`r&Go&J@N9iD-HQsN{1WWK?9t}dtFqOV4&i;pYEi%+ee#GcsrAa5$&uKg!jKPhdJ z^pk~veHQ2=E(ISg$H2#BFYl9n61yGbC-Hkw`Wv{~eiFZkpPX>k^C&;@Inz%*_}xdW zoIfWV-J@1F-MTjN<Ry)8+1854$Uss>dgn5T7nL z*Fhuo8FT#3*b&ccb?`m%-=Cd-{cG8mAI``8RqD_0pLv(OlKoNc%SV5=2{nVAz8hZp ze)QDn{ph37`+4q0?%yoxOx#5rM%`(jTtnOU40Os^=cK-k(!6WugG$JK7cbr!=%89P z`*+!Hw-SYTUd}+z@|=NYZgiPwAJTf*zKu0-=Cs(0z}y&n)ub#rcAz}`7*iq#KD0UJ z*07EAEBH|!eylwr2R@7?u&sj=DE4+XickBj@vA-0NsU3! zb0%OhgUq$v9zW(F&DeK*o$9~o+mq?XC(paX z8E1v>X+dvEQz`%Cd4Cmk*j>cnwV#vceO3JaC#R0Jzw;N_US)iSe(?X9+e|&>K54E6 zIsX5Eh)a-dyT?!A`t*i^+uyN-Xw0M?7wa=N<}cw_QtvW8({lX%Klp$L_>A76@Bz1p zi~aG5ny{|Amf9KboQTqZGY6SaUU-Sm{Q1WgGYzf_54f_-Hxd_<#ra;HSYY{WX7l-fXnx#xE2;=QLg*@Xl7?^UGqnL43U9 zoxm#k{DA+_a>DTe5AcB{xN!~r|M!@qiD*>fvssu<;&0;d$^BJ4PMkiz%#6pc|Gd2? zpn7_y=}MfsDz#d?2@RfcE_Ds1!a?&JImfR<<^8)} zeM)iOH6Ir-Z@K68%t^knuXwJOeWdKmj`>V+*Q<{zN+I*E`LJ7utq$Dj-V6Tm{Kk61 ziTBWp-QOsmzTUKl?K5ARtUZ*^d)YA`D5eAEX*o7Nde4SjU%@We>letz zu0rW=;Od=cl6Dxoiyh9tS=nK?{BVox@Sw88QO9w$cGx`Y(|@P3yU?x&)HM`+1=-au$_s@|bu3u6WG5?}%-O(MwQ2FW+VM^OCF%c;V}~8u@pW|# z#l!{K;j;67J*d3@k{h=v)s2Uf7y?r{i%Qv-+_+cik{f50{{7sx!{ragv%^}B-OnYW+78oBgYYTeY~nMM?XbkB@N<8BlD5NIj*X9L zhp`Jmb{M+~rN4ozZHKYD*x|{YoppF8F76s{ksV&H>~O@R@2OflY@Sspd{^0B=xAA8 zLuIR%pFlh8#KUDz?zQ`S2RGEU!$~Z)sH)ZcU&?;w_*WJ0@7-;K{4tIlMlV7AeEdUZ zKcC5V_=y{e8!Er>@8`B19*t>-wH&*jOGLFDrkw`iGgUJ2naOszicf%_Oxg}tTsbyA zmK}ENLXaKCu0rW=;A-1p>@IdVy^pfPZu!evWQT`W4xKr)Jo2k~_om!;{V#O{lzgZSM~k)V0GgpG(RK`bgQ=zxmHctnGbafxO3Shf}Fe zQMZq}^Tk0tm>)(jLH#`cMYEsJWIMdJ_d^Q`ziP}5vrjNczd?Uz{!z=Z`?)Ns?J(^$ z2%m{hnfT0PJ1p_Z{?Z?xr0uYlW8-7mVeCSX9mcLg>2Kg_+hOc3c9?yslpnv`w8QO^ zD^#A{RTz*fbQ{AC+x?-VqU><)2a4Li*T0r$Mp9$-azWMS6ZH-$U*-zkqdF&1%cZ$o zq3DBtKJ|T5FPUr2e%?-YxO(<5p?z6Or{cZI0rSJPdXDxN?68(&_jAct+hOnkpWIUl zA8^av>xWO&)s~dn*O<`0xuo%t?@cZQ*x_hs)RqDtEhiiw@Bp8#uPJ=Mt^dFM@QJ!> z4t$c>1d!}Hs_Z}VeaX3L>OWdeI6mM3J{{jv_<&pgLw@)~oh1jKBo+r-fzQTbE?|A7 zwkJgU3;jpS3C9OKzz4q!Ze4f#;S+V&9QY)$XwV9LeqYQ_6Fyo_I6mM3KC}vO;~Lsd z`{tzo`De||O8iYcj(&;LxrWZvGu#EYKk%eBompqNd0xLW+>HGh^VxHXew=+l4*Xa{!p5mu{5Y$D9B^Q-D`RiYyx9CG55Ep)?>ch80e;M>az?}E zM|t?M7alp_06+GQai+lLM|t?McN;n206+FXum|4eM|t?svylT1@MA5HJ=
        Fg|CWpUZ7`Pt^7sed<{^T<`vg>ni)p=U;v0xl33r zf9}Siiw8Gt$}Kx*Nq=M4w6l{|T;@CPO9#t$!=s0=eC=-^73t$sTqNgIE-kHCHMmji zlyd&Y!L$=A5h}tZ+qdN|db&DxuH0*`uu|;-t=>IU-pk)pRU}8e_kAj#@mGBCS#cj@ z`^m8WYh_2CiTB5*q9g2DVedxV6XdV?ZhGRFJor6rSez?)5+Vnbq>J-$>AG?Qv9pKu zE|snm_2(@(FK5J6!*!&qXk0H+a{1uKEYos@h+Jus`dV-ieyy;~Yp*}g`Rt9a@4J5O?EcET-|o(zF7z(H_sMF0$@x|C zN`%VJU9e*9WrMlXdxNJkeSi3w+nuYnU+n7re6{lKo!v0qM{pN&r@3Eq?zDI&cm{YT z#+S%vf@j6lZ0niGI-kDznV6AjK7DDDKAjam-1~v84~xA$g26!e$=g4P*XQlKTy`H%Ld*46lkMGXqe1G7q z6`McP=O1DYdB~?FF@Gn(>bBC#9V)eOre0`}NRENW_e`U;IZr6U$xhMU_9a z6UZlG_q=^S%|6JAkF!$`v&Q!|+T9ELlSD^&|~ zi(dJl`*#|A-~k_!1h>jXA$*ple9^2cytDbd!l`-vh?DTi`0i3)Pdp#$6O#{|N*9Ol z;be-?CLf#qh_X)F-6?tV#Nzp+xb;R9Q7-m!zxjGJKAu={omkgJy=|@=;6m&kA>|6L z)Wbrau#?zD?Bwu(w3Eay7x&WY%Z_`E1>CL$&U;ZQ|?Uv5bCDWK zHjsRNqS{s5t^E*x0{;PjqTD6@3H*$nkLdn{<#u=4>Mzjleo^@o`n#Nq-;wq2=p!=h z`Gy`&mZJlz-A(w318#Gc{P?vmS-V^4KYGClZW{XBzr$7gIzzi#nEMI>sp^^d~C2W%DO|Jz9O()b54{e7Jv}>+%&Le5PT$Tk<)@ z$$Rsw;_cPwp4s^LdgA#|pO}2$H2R(pKAcPu+AKdd+ugEGI?kyi?6*pB>y0R$KjG=o z_;_N)b)wx(y&cu=#_kbPuHb66yRnPd$>O`Dog{u~NlWcy>Mnl2e;PZfzbklbyR?h> z|Et2U>!Fvi5nqP)kmZf=`dx2#KJ@4ByZ*}_Zrirj8?^^egt){%!^eyu^zX4}kMqsH z-^oqKx7~DzPkK8^{!q@zCn?wM-+6E6mUEl?G`wk-+uZ#8QMHh;-B8R}5Bqwwa^7So z;Q=4Gz-{zjL-MsdiG-Ngw+2 zFRNv5eq+2Jlj7DJQLvM~9*vJD7CTA39c3r6dxVs$yy8kdEaZv)Y3w3)vi3n~Cy76r zZ>gO;&bz@WewpdE;pI3kc2a+bXXVGzE_VG?h7;e?!>G9nB%`AC=OSEr?`Nw!A906k zpIU1tqn@&dpZQ1U=ARwpwj&o+&-v@ay)vD?oqYJ254q=QXL1+Kq2Mn1Kgl1;Ir&74 z^776t=Qi!6$X7Q{x78B1S0+?H1NoFRq@4SDv~u2LC*c7f^uTR&X$YTbXeR}q1q*hr z783Fa&i^FOl7#T_^~Cd`J~8>At9EG!A5NwSJJn8#I;ryRa&Il6pPAy;8&Tln>(Tgl zV#Rf$JxRSCWhb$Fgp@0|nsySqh@I?NF6|`oCw|WeSwy=wcZZd-O$^@211qsdPG z;nw%L=TCOe$A83gBsmwVts(>Fd$Td6S)l z2YlcHx6!`~;WG{Gq~Nn)!E37Zgm$v)71{b-eLeAfs838ja4L+1@Zn^Nuv6`%sFN-@ zb6szxP3=ivkH*K#QO{1QdOONaV)qCsS8$~s7V<=U61#|Xyv@gPQn8| zaDm&v+d}wsgq>XE_Vn1>zgX}Q?a7MQAL>?GE%=CXA?BU>dNe+Z%z4|?Cng_~R=Y5S z4<}QEooXjVog~_m`Gn;s#jQ7@z{l64@$tlp>qL8!dOONaV)qCsS8$~s7V?Ch#4chd zQAqsKoqE4(=}i9}C8uv3x@<#ZgBD^X4;yj2Q$}{x?Blj4cWtQS9VNSIcG65q*B_;w z%s(wd^ZaDTVolTXJAS{g)%~tf>5yxxe(cuia~+uu{mK;=?&+?%dfYu9{}J4myWGhS z%K7lG^nB@gQZMInAD*?+rR!)@T_VSMJN-9|*NpXokp#jskcAO94^owd(r!GgC{>uuuW>xt(B5BQY!mVDsW z^;8(21*zvP%IVs6<^|iF$0N$m)-9i?=G)}Q_G{31KX4oVQy8BGsq42h z)^8qMziG|pE90uJMCV$;=aIXd>JcqMReqZIzym&{ z1a2G?cG9{BVSj9`dysq%oz(9oAJT?`k7$3twh%cIAXhd;smCQ}~qk;l3< z^pGy@m-$hw=QZ<>_{d|OB6^U+IvmymvtG@VM||Y5P60h|MIQa_tWPxWm-xtIUOjrq zKjuG^f6SvcAMue#{em9SM|q=u zW?oG&eWG2?zF*Yq#eJpUid-}7oObylw|CTD|0wrajA&QLz8|hiA7XcXJ@M@dc)(|3 zPss;vW=bTVPH306hEJ*RPmTQm^;~oN=gf>qc?=(4kFLq=H-QIy^0Oo#xS7e2d^(|B z-WopTqr>^U%FKwA$MEs>1o@0CH2J^-KIK2jb|2i#WTJm52+_S1!%8Bg))fc;il!>4vcxcxcG%!ri7@bUG;^MMC^ zPzyJX3E`7=!j--KR$9ZS65$^lLk46F;p6KG=fnQr?Dx(7-?d%jzTfN%ZYC#m|L^X` z=)c?r{H!&@N%qmCos9fakG>x>zt=8$ur2$4Z+K>3Cx7a7)zXD>{(XM63=4b9`KqwV*y@+RH|L@{!sjr2^=8xba{zQI> zee;6Xi@Y@V|0bQJ+r6am;eJG%mty~K$`$jH3h$BSOC>Ki@Hu^6lI8t{Qnxq#eG{0! zo73hc)qbnSIiHhZyP>bgKLMl0Vr0lFBD3*WEYaygAxFm09NxW{pp}Z0|4h+%GS3xsFv!M^WCX z34M*hZ>5auD11Gd{coDT3lI2^2Dptc2;tKa^LOp;S19>>znV|T2fu*)N*dyy`Fi5{ zP@kB5&{sS@gbycEgf`2M&3Q?(PWooGbY!yflj7DJQQ+h2(fD{`#dTu5mwMYAFXBS% z9wFrluGGUq-VV1)z%F7ZCoYk8lK5jQT52aP?k}Xj6JhK{X%|OlDF1h7JtV)P!mj)L7|VLe|6Lrk%ttVkf)atNLqHyRv*qOYLOpdEc|U**Agxh4lBt)bi3U_RN-HWp_RFGB)B% zeP7jIr9$TeA8>xyx2rp!uC@CM!N*LN(0~2@ySr)VcK>Fod3_n$lPZ5G=j0Q53$r`7 zoZGaMX*TbiT@R^2oQu66? z@(KBj@0ZPw@%6;>p*}JBz^VR*5I&qt5q7Gbly%bHPC22Unc~(PQ7AvY9*vJD7CTA( z9c3r6dxVrLxKa-bd7?duUG(haDrqN)-*tg*Cp%?5sMt3_Uk|FkC&tS-^`+}&%5J_& zhUWRnjyq>P=uURlgR1V1^Cj$IF0kC^u}*>jQfJmuWi zqnC4Y-W)vOGjNFH!*g8j3ggoW^BP;T9<&rOE}k_1C%XXbX{+Ff3?^qKgQRi@oAcO3J>^D zKH9-s13S^t(U(EXSxCsajPb;O?4OHcX3wpRCxM5RyYe|YWoUiZzxj!cJs zWo^mB+a6x~HTQh{M{r;6`uXG!<*l?(&!>sY^!iZEvzwoGo}GOEczoKDowYlTEAsV~ zdtO>CC$v{%8OPauJ-R=^y~76{@EKpE{0a43S1t|ZlX0FZsmK!A=d*Ro?bUk1evzJx z{UW}ecs}re5A_V(#)rfCq%A-8=Bc)V&$p|U*CZQf56+96%2S3v?(2!?0}uG13vL_} zc9K6K`h9J!j~DgZ)-8W*n?Hg7fImV0b}2uDW5QCu?@yezamBhpPE0Y}IC%M*O>2hM zPcfQz`K-NXaf&(NFNQC9kWFZ?Sn#&xpC?7;c7!?swals1}!iaze0hUY1bc8_xK@nH~pui_O zAS#~UdLaLt-%V@Q zNERacZp^U&-q!Jl)Nfi(uzu6>#C^g)fCqe7vj;aFL;j`sv_aoZYxvY6`0Qh6M8a$M zXg%?K-~k`h!i{S}_-y{Zn;A})Yb1ESazx)+=4*_7J>h&5{;gFic zo_~#=112ofTS$15Vc}$HH)==Au(Y=fN2kQwlP1MS-X_ZHI`3EV*Is){M4JcSCk;!- zs5QnaL=IM+ba7u?y0TnjJb1WFSH57rZ^3rwIxn%@N4o6$#q(sb#<=9qeGw8HKZ1++ zC-O^-!3FOZd1z}>8;y6F3$aFwRhOeFSF1LI3?cVS4 zAMw5l|BU>>{*Rnw=2L0bUIzE}@t?CDyAk<%-%e92xhCgQm0qpwO?*z9zlwYpdrxaU z;r1Us@PH5RG2BLu3gwe{vQE2>tqDF?Uh&~dzDYi{v}@aZJ@I_t0Uv0?jcdYA9b1!p zt{=1BAs>>4qFg-b)mzvn>{WG{v{%@%>N?Y2WxOXw;{MUbHB9DO-@yZ9{o8kt42O<1 z!?E%$zniR=2zze0$K7<>M?Ef^XAP6kf59nhy)@ifDXl(Ry&rlF(<>KE?cMIXpY_K5 z;y=`f~L-=&y8Yao7Tq*hOeBs$ge`v=>-x2-`e6*f;KGY{RAEf907Q%-g z6NFiopDg=(WSw+HB^NPXm*7!DqrgY&G5Gj##C`So0jmDC$7i__yGKa5g6kx8qmU=; zBz6%yNxup4hb}bjWV@_k+QnTI}zGt`HH!c5vo3C9b z^xwH}&0FL9pNdR}nez8szN`29@6{S$^S9uY;4a#AGIdisuX;GKE56%72^#l=UR_h&h2q|c)(|Z&*iP;4EYEzBe4d=Jb~pY5{sj4p zpTRX@`_5^NUlUFGqr$vjUxnWx?D-q-e|OL3n$s%%iT`ykedF0PWIDprIo7wLT#7lZ zJa5>XR@yH3tajfU?}qPlDqBZek+ChIOZdRVM;?8x=s^yBJ@~%#xdnY-A&>aTqb-ac z(uX|ic=}lF^bsF<?_T`07D zeYLFTfN4F3FW}g|8a&{`7%|-7LMZvPgReHdC46%Jn5fCeydpQoAL0vWJqDi!Ukx7c zK_lF_CRB6u+Q3(nd@`Ry8PV3+n+!-9!l&fxk$j?jHRe*lXRJ9D?K8&MnmJ(Ai25z- zIeJ=;QGR^-f}^lM@PH3Dz>RA{#itF%7+b?9AJHe6^&D5NC!7y+z?k#J9I$duoim}% zn}7>p_#Ci#%T}ydQ&jW6#-0G?3A5|-YSbLCXC`J2*b5I_?q2oyHE!Q&a;&dbQsG{5 z%&WAY9+MYoKaUJ)G9106^tZo>@^GgN^XJR3`hX0Z6f^GIL^)jN#Ug+0xj_iTZ{#{{ zSn5%8z*LAlxRWmKi%VCQbHMrzlj$0n9zO?+`$(64zj&T3=78n>IlJVL8451qpU5vU z7b$qZ$V+<;80jS4-YxYH&m-b&jyYhIE86zm=bLlDR5JabUE21$>}ao7HP4yw6Wrt< z#W8q)ckB7?`Uk~16Y=X+6K@DUMmmN5>TZLTpZsPEm5wnYMEoq?SJAfTdF{6SlirKS zJHR_pS}WfP-j&faZd>s*6^1A4s&72@_P?L+?MYJXUo^1l*cFQg&gJVW;PS zmrn4;XR6*@hHB5;qc8XRei}c;fhA`a*DP4MYQ-4?t5-Mvp7a}`f8LHGy$8Is);-{* zUNuhiJufZt^XnUq>bdivpZV8(Z-?TY5I!OKgHJeoikUC9bstJvzN1-xB1<9yY)O?oa0vgwrHR-^73;RmFa`KNj~L$)A7-I;`zV> zKKaumAGi%47{;eP_9)D<{4C#U%bp!qoaB}x%FmvPPhpDWGx*=>_-H-xeBc3}u0tgs zxb@8sbKJ8mb&?fK3DoAa{DU#^Okgcv>t;`!ybk3fR8H14&1mV zRAUy29fUbc7A+k(YhWqzl84g%WL18Ie=zXT)o#J(6Q8nRA4U9~=C8hg5YQtmohm;K zeDG)CQ=Mb_Z+(ZG<)?l6T(g~DveTK5_TF;*F>ck*H`70${;BOQ%a57s&0oPs>oM&Q zlJKwL;qy`L4!Cts59O0`UG%`B$#R1Zl9M3JmXB<+oaPoI?9V&~=d=0OMQ6)Ll%E@~U+$J7_^>XzxK}piN9&2^BgXV;e=`O@@@CWS z(QiRWy9j==Z$R%WMSSGZu161Y2z`0#J+b8xA9=h#=s^x4@+kj7d7>YNei!;-YD;84 z4DoAkYHdHv{ye}q!|ndd?uRkw@#beqyVN&ZhTX@>u&|G5ucG>4hF&kZSC!u*`a!C@ zea!3sko_=|7hKvCmSnRZWKfklhbcQ)5ClpRum76Izd14>k0|C?4<`d9&mLx9YpX_;hAJ%$JV2(5*%A zY3PS}gIQmX#f9JDqxHn|fd_m>50`u>M_s3c@#)Ndm|Ktigqx38k7W15>K0Uvb0jcdYA?uU8$C zPaGchy(wM!3F?XKhryqP&(OO~|84kmv;1^&Kg@R1KkAmJ!l$+UFj|jke|Q^2ITPcY z@PH5P4!GqPh4SghewgZRm$y}gB(KS@je9QiGCCM zN$58jzC`w$5WnjUt?f5Sx(c9i{))L?srFiFNBYi?VRexVyOx;tC92<~kXQXCYQDmY zz5j2<-0QFL`%Ro5U))T;NoF%xg#PIpe%d>C-&@_e`+m8h-{i8Z&g$9u(Z_pvAEH9) zb@GRLBe%fJm)a7u-sseRlgr*QrRU%!UvWzZh1VN)zsX2Szg6oo>kYf#1Rn6|UM%^* zE$4>u>AZfE*R0;MXYZ%J=H?^puHA1^Q2m`z?|;5oP5!gpk9#ls=~vxiMERlq$!h+J)??Zq-Uj?@c)*8t2i&^8 z63VCJ`c3L>mg}!`a}oVonfIIcdgA%O13vJBTkY|1KAqNYBFfJzK5~;=_Ukv(Kghb@ zMC*y>BlFp`V0) zlacqyeiP&j?$+9VlcZ~>8v9Mmvyi*Hr5!1(l;QCEWmp?D?Mqa@NlDE!Do&Ap{%w!{ zdB)Cn-tG6BjJ&ecOuxwheA0$O{{wIRS?|t=J>u?s*l_B86Y__8qx4=gUurj+^+u=m zo4l~y0X?IGx4FfLdc*EF8A>_dMC&o@4ZGh29`G4`pX39#+V{iwbY8#7IY;c!^V=8h zbZZgqa=YK8ma^YO>xt(B5BL<9Nj`AvyDyAS=k=Q`dGh~eZ1LBPZY`o;Yfn}2(Qi^p z+3wSN;`zV>J|oK|AGi%(9>%Bh`b`9%y)L-VEk^VU+x;eklhgHUX+4q;?H2hO==mn_ zfDd*WZX9l?mQGOo2>_Ip0*Ke)uH_>{c`G|fF+TZkZ&<=+a{T76@izr{gehwjz_{c*JdXPhi zJl=<(Jkf7LKMDONqZi746XMqf%zl%$IY(`>eU94J&i`KXnj`o(v_{&Ip>^5ph4t8{ z|Ju9gyK}t$iq@V>15Y~?`hQn=-ArfQ3$9FudBC80(V#VM5P!G+mGTqR6UPT0@X4>1eBh=f z%fEa+)9hcGyH!pT;~=d`t5C6!+WOdchq{K+Z78vaPWXn;X3K(!maDq;d~OhZ%(_Ovs&k~euJBj z=r^(XbnTOlkJb~<2OjV#e_Zl`o1HGdeoF|bUVgH0-<%fIZ&U7eOHKOM<&^!xK|OKx z8$94M{7uORZjpQvR&bI}2JTxc_^iL*%?IY`*v}rk?n>GI3F?XC0}uG*Z;*W87EF`) zoAPr&LjPLw$-sSU1)nL8x`igo&uGg1B7=J3_`m}`^s~S%l21baTJp)jeQO1u^}lpW zO_rbB)O7YIs3(pOJm3QlxN%L`PUnpY|E;)t-%Vm~d$A+)ycK7>Z(z-dOIEE}+dtk7 z^`!syteR)U(`Fxv_NnMkrT>)vRQCL*pS5;@*`J#A{?iGIm-Ci}{inAv`cwNZl=W}! z+cGSEPlkh6%8(q5nuk_YepjEWpO!CucE&^QFUC6$?QHa<4Tb*uE`O}|q2A}+hkAd~ zFc0l*x4gFJzRMr!9ZL`WspJpkt#q}SFQr>ef4o!Yq5a^5xAtsU_o$oq`|E;KcV%+^MQxY=VOu&+=hP|#;5bRui*W+#>qWtWs_%IKxn6|&c*E0qm z#REP=H%dNmD{lzn(|PmI1fO4h;%T?!_otfWr(qsi%KeSC9?6G!Ao4ZP^U&Y{AMA9u z;#R#fj8EsyLlgDeKQ8&Ln~$j9?0IP2d!+NnwH|{{!#p&2zz4qqZd?;~>O3^zAJn$_ zom=(!@WkQaaLWF=pdL|DRrzV)gFg$O+!dz(R{OkJe&}yVI2_@~@rdwe9^bdw?w|Y7 z-~YIG$KOBZ7JNQt{YL$h)jTw<$Fx7>0sb{S;6u9uZrx9X^69vFX!SOW`zyEL_cxe) zvYv;g^~Cdm2YlcMxBNH4`6Mkr*^NhJyYG=GKNnwFbBhtdAc0O_lk;nTGlqdR4=qI7y1bM{IPd58aibsFY?;on4 zy;V1u#A-gQ$DN!ovZrR!7F(z`?Mtd^+}7wfu~SmKRN9r1yG{FI-xqZ)&QklyZ}xEC z-~DQ@Z=%}co#5pCo4AkAztur!R-ASJs;9%&{N1gOc0YXOMHTyd`kYf#1Rn6o zeOU5=Tk)M?d=d`Acn?)SS8Z~8@_BIfNp3O1FG|Y8jt3vDC!P;H;8Xj8$fb1F}+zkc)e z#Pfj%e5zlTeBf64SQwv!69cM`Gdt~Re-^L*oLi3QcTCE|jt3vD$K)gL*Zq$0fKS)$ z%KoTwG0E6UGRZqDydZ?XOH^~Cdm2YhN5NIq~Y zt_|aJP{LVGj-1Cixjp@Z#p|zgYks}cT0UA&JRf+#XYf0c58SFt!}uJW*uj?Nr%nBX zDL1>-398?;o_Id+fKT-z$p>y-?+@jZ*uj>3+SET-f45up>z&q?AFU^z4?N)0b+P0F zx6-OGK1pW@;=j%5Pi1oNJ*{Ri-XPv4i6{ZZv;@cb}72Pd{aCk!m>U$T73@-tH(94Y;Stj=An^I89> zTbiKukJcmkFm59;YyS-%@ag)xvOlUEjhq$AC$ayQ<+;V8{A9{!%CFpfM8AEL#beCd zC_h?Hkk7h?aY=ZESh>tw>+e42n4?l+e>TP+%M;`mbp$B>Xz747$nEfAYdBjIv zUd_Wqk1db%u`ir0kNCbkwQo6kkjHo){WpvYHpo-)k;gvu=s_NQY0q*F-!|&i<9#7M z^4PzPa|4kFU)o>nPjAa3KJu7{haTklJXE`zecNn##7ADYI@ba{$n*10wG)|tXUii# z^4O;wJ;)>fuqT|uX3HZ!^4Px%J;)>fkjMVywmjk^k9k<=K_2;sJofFfc2wmjnd@>Kaik1Y>Bm-%)L@>G1}v9CXRkjL{PkA389dBjH^=PR=B9rECT zJofXqyIydY{o_ z%k$HBO8D~<-9kMhxVXoNg#|7O-bqsNx#j~C~|&C6M;_}^(PQTy=dH26*Oo_oQiiniwVwEXOnAVj_Fc&bZgz51KaBl# z)7RO}gK7<*YD7P?Nvr9{ZMYFWT2DM5c)+K0hvE}ajwGMN!!#MrgK7<*azsD#mJKVnW`M?7{-M30UaI=%4 z>bEwS2h|!rwL`=AXE@x>h=kYh(R$+fzym%*pO<{#W+y}ON$g-}HxH^ce2NE$^HBr% zc6N;W8a`T2JRf+#XZW*{58UhoDEpJR{7C;Ti+ND3;ggRjKd-biBH=ZBw4NXz$Fb)@ z!2>=cpO$>!W+y|HpTzbjyLnKOPge76c+TA0!^_VsZb%uzN9&P%gQ_G((%L{x)eC0iU7oOFnS3Q|0qX=)oyIC)skxf882B`3bT=K|OJN-~pf9eail*a%AV5;?oA_ zNwkQMZx@2O<~S$Y8Ikas@{{-VNdMXvC+-vT58wfx!K&l~H#;7Dk}kAv*ZrG#&b(jm zn0zuQ@O2eFA74*AA9%p0cE98UH_}b$*KY{{$^N$t+&8B+<);wHH=a4m5I#XY!8gJ7 zui*ioz8^|HaI@3q^GWDmOFr{#u?enQ!>2ewe1dx7_`m}`)dwUWxY-#8pQI~AC7%r3 zw^o&(fL*YkJ&S9<`~>vG@qq_?NCVusCiM9v^sgnKENb)Cl%L!o6V$&G&=bbz*!hn0 zu=hhbH}tGHk72p@Puy49PF~mEAVati9y|ZMbLP%g`*Td5yK2Q51FKh0p0{kpiZ#W_ z^-cGj1;@=E^SIKwE@Xf9HPr=bwx8@hMD~`vcA^_AeS(B~Fo;ziMEB zUz3Lm7v9^ma@F_T;T7_n+^&r>?0&OaKhUf96Bfxicbuxqi=X(Lc#e@}GOQgS!{IN> zaGc_rzFm~pb>7|N@5{Wu1KH`zVP38OMan;lGbB$!#G#vX@q1jl&RI$9^kMZ-nXay0 z^L-1>qh9B!;Xcx3-!D>f*1)ROOID=YQ>YfGM}Ohhc{@DsX zOWnNh*S40A))UVM9`GrAM)HB%=)c1FBxt(B5BL<{ zCEM+AEB{|8pTrKf?4QoSJ@C#u&U~LqZy(UY1o_umPdp!Zz^Cs()o-fG(ddJrd=ien zIZk%-t0kYT=7+KmXnum~H?2qViP|R*9`K>x3vS)N3gwfy0hHbR>K5=3`+!bR{igK< z`83XdhX;IUUcilO!cN`CkmqZ4NPjo|+w^x2t(N`W^n;In+U)Pn`n>Q16F%s64d;b# zVf1&8&Xe`;=-#Rx?vY{NF)~DLdH3+~!`fTrI9iw5m+SN!9-XoLffKy_C9B>N-)hfm z4;$`5MldW6EIG5dX2D81;28WR-QPn0?Kkb!yZnLoxyv7zkqPN^dmtB{vdQA10j4<0V7(2RY8t#w3mNo0;B7M|S(Y%-wm* zo`=3M*R4g^E7seWxB1z|eZ9fA;t_g$bvy~DKUM27{Rz9j8y@h<&y;-NR(>*!Pv@OS z{rii5G2@{(_qjR0ooTjb_f!x@x08H^4@$>J>xt(B5BN~ez^(YBFg~4k9`zqQKCf8O z?^YxF>o|{k_#cne%TNBmbbPd)pg%!L)cry5fDd=Tt?w^kd^+zuYEi$v;*UkQ7UA!4 z9(7>{S$?W-Psc~=G59pB*BVy#7(U%^v+U0wO+L)GO6rhfe|Qg)hZ(nLkK3d7jZ;r> z3la8*_Dt8GWcf*&ZtRcNW7coT#Xo=teDIs#R(^%qU#IwV+JM~sK>qcW~A znhhVVC!P;H-~&In<+lvyleGL~H(x&c@-uwqnQqRXpJe(6{&~mS%leIc8gEGX(R!l! z)c1#1?FaT}EbU>|tF*fa@$29hoaZIv5g&Q9OK7JchY)$ZC$>D|Bai$*4{`{RNBIxR zd(z8t+Ksd$2hW!6NaA-r(AsvSm|K?Q)7XxjWV9o@Cri6joh`%RU1c~}Fzr=TJ8~#5 zxsNFRq8)eN@gMTqZ?YY^>&&})!qRQFBNwEbycbX)^xyKfDZTeS@=5oSum4X&JMz~z z9MyB@K|gD{9ZCLB4|N@4=F7;#rX5%FrUEG%-=Em=c5FwUJ$;>9j%cUY?MUY9j_>K^ z{7NxzO6xJ}A-f$35BL<{A^E_qYe&;gNIsp}jy&7Bz%54jS#~>e=m4|6Zk7{vLhFg= z0}uF6&%kYP+b}+z*^b=(>m|1sF|K2`BTLg#^6~XZKKR*^vu;Pi13tV5aI5_ytbXgv zcI577TLK@NaDQZE3Xoy7rQG zWN4NQM~;wT=>*fhM78_6_LTN7r_Koy?XIUjKjgRjYA@Z{OuH|G`R$Uh(0|n{r}RFx z`!()UyI-EV-ADdVZW6_<6S+QE%AozM>jWrrb3f(yq{Y%zDFa z_rU``qlZa8a4YO?+TBiW_kH@vFSx~s{#(1<*LP?-zg6pr=K~M;P|v`vxN8`n&TRKh zefBGEt;zAju9@lhXg!h-ez7cvy4?p4_)t#aHnde3pU!OeP5s8#-ExHAYPb7FQnvfF z9)nLqyAOK|pP~Is`!o1+)Bbd7yYIPg@7a6U(L-(_qJHE3&Z^y~^_cY=<%4z~Jm7=h z1h?*LD4&iSKdk#)pZ}6uj^LAZyHD$h=K~M;zz=S@ZOr-v?#8 zkN87hYHhpk03KkRVPm^*E2G`l_d01ua_^L3em5Bw`b_&0)$SWr?Y&WTKBQ=Oo$|VG z`R%^$<2E(Z?#p1^tjrjpzi`)^dr$e&9quV#x;}NgkNlzD7&+0*m!Z4OdcBj|ecNq+ zqg#upH|%y_DWzYe^_caB-R^@2d;5%+9VqS>d?i)QgUAsc- ziRS|k_)yQlt?+CZpU!OeUAO!ew-(W^u*ds`)6Tp0^+-PW#j=*v?LK(G2lE2A;%~zE zbY{Eny8Ui8qpIN8hH~;8H zHy6?G$orjDyHD#e>o;Br+I{eV4}KHehJO;ur{mgvb)V~X8{AR^pRC(`T2DM5c)$mK za2t9ooKL5<`$YM9>AknP<%szVS-1PNo@hRzokshCb{g#nIMMDR#IK`#1>0$LdDc1g z$UzTs2$9G85R@m{eYEpv_YGby+kM3E{zhxteMuLzH@5q>HrjndyGuJ#K2CCATDR^NNT%}4OD+kJg0+Z9@m z?nNx0>o598CB?Y^zfd)O^R@Uh!{-6`kcYCQ&@hISwJ7(QLcoAzh0 zV)E(KcHi~)zP@*dJ-+W2Blz%sXVvc0dd&Kb@p-R{$R;`zV>KJbHE{(IqkI<4I&%FoHS|Hv)P2;YA#>vo^k6U|4o(`Y}??xP(6 zC)!JG_i^q3@k?JZ+kM43^85pF@Nz0L8-2hJH9PuhiD5$l(OdgA!N13tO;NIr10byL4h zP3X8PJ}237$A8@#KE)>a6wWDclyh6pO`H7`K$Ap@>#bK z(eASel~eW$Yd!IN-~pf7LdgeicDnrfEg>MeuX6_Oo42oXmV9{5qR)qK!o#7I{y|Vr zu%z1lH9X+cce>;QH#>DcpM?Ik%o-!FqQ*);`qP=KJ>G|Es{?{|2n&KRa?WS@DBU~`^nAg!Ib`W zP){5mc)*8Lz>RCdcG`Da*q`F=eK(2oN<}~8ycK7>Z(z-dOIEE}+n;`aD4samP_%zU ze=7Z_^rxbQ`7~S;7H8`I)FW5*FH5>WVAa4`OVS($y5){rI9t~f)!aFgq(3SwjZq%N zIg{%jys6?iyLtVolOy|6lkNi$m9DJ67u>h~#A%PpK;>u08lK6~~AqtD)6 zE6$$m{@x1eY(4g9n4}UdbP0LHM;>bs(1SeI>~IzwYkzEc#77=;ThN0%=7Mo{8FR{P zdBjH^dv2izd5ke|))r$Gwmjk^kG0(BK_2fkjL677>eB`l*8hVfi59G1t-IhmuJk39DBMvpCzyOs0`0w z5#N`m+C=EF^N%^}v@ILtsrblK?vjHZJO7vqL0c#&Z=vVBl^4st2HH;5gXA@G?NH5$ zPS~>5XQ9lQyXRAL)=|5BbCH%7bnc==3vv1YzyMqUOx{8ty z-0Z|iKFM1WYV0V3y_#FYr#ds7k4ekUmFBPEqxHn|fd_o@Zv$ab;2?t(1VTw=Eu8lx)TEnN{ z_kEjuWPeCNeZoKCqxHn|fd_m>@{$kS>|`kWV}ITBwc?Y(8l~3oDMpOFvL>hL2aUK9 zK3Y#aA9%p0v_$fOo2^FjX@@hzTf?UoQGUFRy-Ysv(RzY>8qb`B2Yg1~EBV09PL$-+ z4rhk9hELx2tIYcCRdz-syoQg~6VC@8@F~1S@`0P33}t^3j=VaK96QRuJ#bpYC&GU_ z)Xs>6*FGO#Pdp!Zz^AxW@`0P33{}4+cCaO%4BUej@u^0XpTq5pNO%n&ttXxjJm53D zkK_Y4I~j^k;`XWJlYx8CB0e>LZm?Ousl{e?c8vQPK3Y#aA9%oLWSQgxH#-4}PvZJ5 zyEDUO{g&04;XG$9qWsL_hLjwSvE(~e(58weG)WeNyLd7R>11P&Q!&}3r=#SN! zIWnrxY=of&*op7 z(i%Rw3E~sf6UPT0@TpxQ`M@obPeKn)m7fgEZHxH${Rj4wXLC*Y$p!Sp@qq_?O6w#a zxY?=l%TGcNLGd}smOK9I*6^uKQ27b!iQ@wg_*6fw?2jr(cD^Y-ZLl__HGFdZoZVoq zInK#;MkKuU%a5-|`fs*4ai17Jg$H~JUy^*_X2*k1!le)19MM(F`j<|wH&bodl6EBe=rPgLOUa)f`KL4mJpfsfV`&j%jxDSuPdZ>k&xl3xGQuip{^ zlKlr6xNlznK`ZzaC#Zf4>Is%q+rNefe7et-eBc(zC!v2W`OLG$Cb(`5pOQcRlORb= zM4|iy^~CXk2YiOVEcw9AR!RBU{A*KM!>8c)@7PbC%{6?2dgA!N13shzZd?=kd=mQC zvixLGo41Bfb%Od2f_lRE96R4}9`=4HZ8!9+SlhAO`zP)zZZEIPIT^x*@Ywn1oilg# zWaTE$UA5wjfz_)g&s(-)#hT(|W&G##uXGk1H#>I!6QL{k8G6Sf^>hTk6MvVU`18+2 z`uG&4%QYJFiv5cQR*4lU^H&XIFkG?zpmn|L-ga%JaEIJ$HGh>1%hT1Kqcikg2_iX% zk)S5S+MUYp`o0WD@0H=;k7d}Tm~r1G%Ii8W7Ww-!@9#i%`tq1Z>VJ{)kJ>EBlMr#} zCSCjNWkRFU_FfDES2NG7IL$Z8vUtzC1S3DhvTs&H@#j5X5Rqy!c?&d?ew^hQ(o|;KsX_0eVnp=xC zv|5(u{8dTIb;0%2uG?IDTY02B{VOYuGfSi+i`-{Eb<3ED?LXRi;f&DLDY356A z+BF7uIlhy4_}ZDjs(<!bzh51~C!urZrAzafoRU!Xe5Ot7uatfNxwU+>o_Id+fY0cMBp6mRJ@I_t0iVK!k`LTU{|GBT2|I60K4&)+iE(|=3O;|RZ|~Op{Lb12Ym2r;Wo5oSp9ZDVh16+`8kqLcJrrJRvw(ar(5#JEnCY+>ydn-=1;)`KD?)J zTj+9e0B2vG$ufEolp>@r<4=jJ=wRACdL%@Jbn$|3_V4BtsHh-6p($u&VYvss{Gf zx#zNHHtu@+_j|=&&C_prix)P2R`l2;B?sKe2MpWp`~9B6q$04nGZFeD?88 zyZ`HkO=GE|J|urAZzC6&`BHv)SbdoMj1k>l8Y_ik{hsY!OT(96Jbn4_lN<99{y1lh zv1U_+qg?@PH3Dz^%GCluzPAl(L)8lRck>_jgyS z5%YQcGnDqqhL6@0%}4A9hX2F<7ePNru)=TjL;NjO&OB3D{|Mf7c@g_*pvRY^##69! zybnQnVjKoP6~8s-O1~93eUn=2wYswFKV+ZN{R`Q2>qx&;vzKmRC)*EshrZfH4 z9asIVQjO>bv;EdWO20_!G3yQ6Z-obZc#q-MeS8?7&h%TaEMc7^2Z_TIN<6Y}9 z_%!&f@PH5H9d08hhwLD4&k>TdywvtCEZ8=g-=2)q0}& z2tO152fsDw2MJdAjee;7E%*if%(^^P?vV#?^!RdAzbST(_arD!_^tS<_^tW7rQeF2 zt~a;VZ#{qq7-!h%w{B_pt+|V(A6ER13`f2z!@*CQ{#lgYT2y}PXy7c3m3x0;Oused z-e)sT3ppBHM2*1m+Wm zaftfP=i}=!_%!&f@PH3;;Wn}|j8A9!ty`V8p;C>oySCq2OzF33J(5q9-%5QCAG_W! ze9Yw2$$sm~y)UigC&+KrdW`Zz@u<(YUg#BCc)*7n;5Pj6P(B^$x31j##!5b7{zKM& ztJV|ENBEieKlqtJKS;2`Z}dauZ^19W7)^ANZF4O3@Ze{qbU6)HgEcbO8jtW$Lp&3x%Dn)OB}`>j_k-NnsE*j>B7 zwUp9t)q2c&!}eR@0UzFDxDB2j#-}s=*5|f;y<3RjWBaZ7cj)pOQH(;r#&6Yn3_cBh zD?H$XP`H(sgz@Q2zxBYc=iOX{Uu65OgDLrFJ(5q9-%5QCAG_Wkywv2=$$sl|7wzVj zBHHCy_qS?2M){$5_zW_Rrz8E==PugYtwr$3+Hci*qWRSQR^|WTX9oQs z!3w{T5W57wpr0w^5g&Q*E-F39Aw(YUNl>2fTk%tUzx6ihw-SHwb*=SV599&H88-T@ zTN{4s&{w4&Hh8rR`>vH?wQTxlQGRPx)vtxX*|-&5OJP+G%?Mpj9&(~wt8@AsH5BTsN!>#s# zFg~5>w_b4nOt<>Za6Y!*+I2)azg6oo_%!&f@PH2m7jD(#!uWKi-}=y^yWTIKVDjl?zx9Hn4tI-%a6Vc4ty+&!etgV=qv&si z2Yk2zZuyHt`E;b;dcje%-Q1Dke6sdiwVr4`!q3G2!Osl(L4p;2BO!JPenCG|$Rj@T zgbeXP4{`{R$9oc#SNB_$pNikgK0d@R9b)>e#W~hKBeKBDM2zGAa-Wfekv%>0w%EcE z`@1;Ki>l~tWB9Gz*GWHY@D9@-t4B%jznOJzpk5x9;J|jZ^o>xtt>8$&zE7M^< z#GaF#nR`xtee51mA_nya`9r-?x-mYVRK0#+()q|)u3N}*-H*uEz1&TeqVE@(`D$PF zrL?<2J@{NghwZn*13vjxk`LVMbipU-_=Vb_EQ5_Mvt2hQ_*{9#A1XE9?%GdoUe{92 zKMv}N;{y-)6gEgca5GcoIPgijFiY{7XUiS`b@qJ3I{adwJr=o$ zwg$!LprkEx#pfhj?)a};!RKH%=ePUfQ&dV>eu8@9_`m}`L&K5}+=dFF?TVz^#Adh; zb}RTC6l_NW4l%J&jTXy?kw}Q_?x71|) zHj=XZ1oZ^p1lxau2Yhn3OFnRm;*->W%Wfa+R`6Nt){drKZa=wsJ(|+L4(f^H0}uH0 zog?|c%}kZ=za5m+f0KMNa1Wg9`7ECDQMY_lb9{zU&chAriQ@wg_|T4rTNIz9{#$nY zV7GwJ`cJue-~QN7ZeG_?@(JpR;{y-)kP5hQP1sKRD2e`qtoBh7?bF3muB?wE@~o{0 zg?}yj>*$}OzYbk}svnPQ!s1NbUw7oH{$&IFFwSt*z*$SuY~H-(j$1fe*LAWl@U}*O z-8hrul*VjtihX%6?s1&mdL3u77v{Zxji03LiAG8GH$s2G>o0s^hD?Y3dvn)<`&Qnq zJnvfX9T4SmOJ~=5UtWDKgR+_Q3EOK~*kg-53)ricy$>d-qzGL?9`TXKnr`+aLLPH+ z*;|#ly|z5!Bab`_9S%a%uccy&|}ME??Uz* zvgHvUd8{!<5At|lkjI)D_R{D5Bfc+>IV8%qA&>V3d8{pOkf-7!kFjm^AdmM2dCZ-( ztwR zp3#Fm@(+2;Nwwt>A9?htqX&89AM%(hV9O&u^5_Fb59NaL#$GS|lEV(C>-JXflJ>O)D%+H{!`F*3p^U)vk zN`F7zzl7ZpX8>qDX5X9Lw*wFORPR=O2kOikTfgL!wC63$GXPq{rx?L!OFJVHUc*Q0 ziRS|k_;hcSeBfp$L-I-5^Jef_ZOb0tb!+(4{I-%=Vq|-4d?^gO8$Mc3JRf+#r(BVI z;AZQPe3JIO8GMp9e^ruN!>1a-XIncX5?;ec>xt(B5BPL#l6>H1Cqwc{+Vf`cIop;! zzU$WTDfoS(X8HNA@g*+uZun?D@qFL`pOQKw4Q{p~$)_F80B8-LVg#R8*%^`W8a`T& z!KYzPGd$pfTDWmdsQ4sy5VG5|SMtef&t9Id9N{1A&J8I;_-H+nPt=@d&Ju)Au`27g zsAMoVBq<;{_aI98c)oAV8Jp!M#}>wu(%`*5pMaiVO=|ns@PNQ! z$Ddvq13p1LaeUwbpP}DKK5(UfmOK9I*6_(sQ27b!iQ@wg_~ajweBfs1 zo8r?3bKhFSr#3<5C#WZm4?N&g{k`M^w+KFMF!!xBe5!u=3FeyPywc8ygxAz>T94sh z`%=YyqJI<~@acPA@`0NlLH$AbN$S64H}|bIdc3?-_pLR2YJql%{p?v> zQ+|Sa;`qP=KBNI|ToY1$lKOAi&3$VPpWFo1Z$Uj_e2$&(I1hV26t|aWxh?np7Wd_M zl-H&0!q0d+cK&(i%$==H(VRSY)rvC)R7&Xs@Pd5~NErrhgfbdwBAC(1QG zwPW;JACb)c?1YYSJ^W8;*GJzV?MLyAG8}n@49AF`_-9dG*LktYUy<)2+3YY6A+aJW zV(uN1Cm}zhn{@GeT)NI#N$m7t{s@__!cpe?796);=c(a7(q-Q-QgYV7sx;FGg$SoG zMtv=~h<_r##2Vq?{UR?9*l+*+_E*2J6ThqHBHi9s^$*V@;w)LcVD0kNYx+-LnnA%) z@(JL}wMh4q-j|ds=6Vj_Aj=o`)vnla<MXHW2_RDVD8!q?pQ z4?p7Ry|+?6e`_yH_7U90Tu+{txt?37xt`*k;2q$d7$*IKpVZOvhL;!hh$T;CXo` zm=j*N9qJw6o#_6ud?$EUYNwj@#63T@&s(0;zorOd`h>YhWLVx-`htYigHdT5Qa&l+>9<^0*?P))uY7Lr)e%+i-3VVN5GAkK z?*nGqi1N@2pK-tV)N8ytX?o?jmmc!;i_Z%xbexA?xWxN?Z==qV_n7||@5Dk+3Hd|Y zk$mFr+UP3{pFtW!ejR_9Hon%F?Yb$EuU?*REctap6akrn(rn#U(PqkRsOWHpQE2|ot-4jNkVNW|E=t#dEP+ZmeMYE|54h> zk^eKpvFv2^Bv~I4uHNUu-v9jK)=I1GBz){Vsm(aE=K~MV@@({?%85tcrR<}&lYhPH zBJcM@z2D_wyT{Kb<&AP zFYBo`$tS_1*P~!3wH||yFBUsVy&YvIv3rD+E4We*V<)kT*vYQ1NjpjWk$1PwPI~Rh zq(j4j_9Xj6TKk*7DDC3t6Ee)bWQJqe$!^tdAbk99U+$TR_9T3K@am8AUbdw>xv;~G zsP^Q)cl&e2x%;Dc+wtsc?BtNjAIdrT#QnKnwQo7k(oTwe746AF#99sVgK+q$boH>- zW0dm-I|&c?pdW61H;3?P3p+X8>*>jEt)So|+LJ}UU%0jH6|KkMGu@f~+Izi!M^b*M zPi#JL8oWP*4?iXd+tp5rI!UxA^AT$S5(2dArPb|8AGr0$(<{&EegAO9YcGDha$WhF9{ICwPriTnL*DOq zHQk;he<Ns0fs!g^hM`xw8lUk2a&Kv9`Jm3QtxQ*Tw!ly0l zWVZd{g3q*RCs#^M@?kCy`PFPlJ*@S_^PxVm`Jk`%gAhLam>_IdJ1Od<>&l1s}2k0X(x%FyS$}#GH#lk|LkFZ=zdqm zC(V7#1|8Y&n*X=7kHx>6VbqvBy1LceIl>oyag{e`VTITBXzlnUd`Ji3HM1^rkN!lL z>#Q4cFF5JdUOL1_+sSKYebW2=4eEROYuNwAdnEc@$sfu&`9z#yw|&cbmUdF)tF!Jx zx7K7iFTFFJoz!}aa^7Gk;Q=4Gz-{o!5I!AfCk3CyQ$FqH{JCfG?a90vFCo904XKB< zo_IdgCpI7SmA2TeZO8Ys9G?_*Qe~gR-9nRm$e;0s@X>k<5??Z_>p-K?q5 z&)A4Ry82{&Ncg)8Kj$u+^v%s?Cx!mUUcQIB?8CQu|H=(^^09AU;9lRqQ`2^m{Gpta zPh`i)&qC^9eoPQ%=?`aVC%^sC&$`Qcu6K(~mh@ca=3N?C%Nka7iA+fHH^v6DmJk#>^!!<*I&-4<}+7T(-2-*w603FBWB zFlWi2|7=PA5dE%a)+7E?^}GI;VJC~flJ>Fd|0#R9m9&#p6^^B|aHO=8gy;V7`Q9b# z{<5*v?a8Qg3H{$2c$Iff-8)^G4soY$PoDe3KlOg^ncbQ`$Bz7=oR|J0^9lX=hu^v( z$oi^ZJ`s4jCn*4)uuJy=ru3p|F zq?mO_i2Fo)A0F`GJ%-!hqb8r;6-!sFO58i+IBDaP4U^P48?{~fZu*<|9LKI$G%#<) z8SfidQ`f+4O^1TdgR}Q?3r*U|AysahR-kT#kJb}b4{JW~fDiiM*7vgzK8Z(}6rU9F zNndODbi3sy?PPUMy8alg$LAx;j{2whP|w?Z$cN#FLiq4wf-u?J-Ka?L5q?Zo@_ zc(gv>qkg7teKSELsZCwT^LP_R_B04TM($V2`5xODevF-n!at;)9)7^I*YHay|A=a;!M9p;_=r|jUZ^?JJL_CEPRInO_1=1XxavtLi{8JToP z4#$!0m8H&7Gua8QWH~SGVB5(fm#*kvGj4ezPZv-1#*dqeBd_pgxQ{ye3CmddR=PLCnR3>e8l*1(XSul{Y+9Z-Vi=okHM#*KL#G~DLgIt zz^(A}P(DewOp)bh@|^y`)XRpm=X2#1msiRY#7FBf_%xhn4G;JX|F7f&xAJd8`6RC3 zboogOsTF+gspOiRM>^he!~K*WttXxjJmAwkqUtwQj=Fyo#%EgM@-u7EnFEujPOfh~ zM4FR@t>E)qB|kxYw4QiA@PJR(f60Czxb-~{#%F5c@tZoI1KN|%gR{4DOY_)swYBy~ z>xt(B5BTJ2vi!iU^ph|?iSaly2bQkscb1%49KVZY6|?Ni&x5n~aI42o3?Hp0o)0|W zGx)6J1GkZ_!~E+56FYF(?a40rWYte7{Obp2AL!1Khfx*)gLs+>JO5e zLlUj&Q1%BUjO=Nd=gt2Rd#^dpKh!JrGNV7J_MEDJ|187$tttNZ#Jl#N`KvjbZ(K|0 zf8t&9ym71NDl#4B!#wfR17<$))45HLYmq;cxAF^SK6Srn`V(po(5Xo)M7cMbndW3y z+0IuN`8xQMm6d{DAIAH8BWnKac+*aOsP&ls1oFgvVq6Oz@aalCGj)w?M?MYSF{`bL6ppo%IK{JmMpdaXj>} zZw%}8*f)lCf3`g0Bad-)^f1qp@f+rOGVW^2BR=xj&jCH;AM$8lGM;YBBR=w&r;Hxt zk&pDpvHu2p+`^am$Yb9u^dOJtrr(cw<+eQHBad-!^dJu|et)~#2hNs9eB?229zDD# z`rMr*-wXDJ8YkEyy>3R$!qfH13q1oW%+@doeagN z4aV_W!zVvCy!`BBXGFql_-H-xeBc3}(U(a+aI=#k`Lx40UTgT2BKo=CWM@ReYxrnA z@qFL`pW@3UAGq1cP~|6Sw}F%0I9_Y`R3pamUT$YZ!fW_wJ@I_t0iV*Ik`LVMWT^6E zf8F$TcH?-h;Zr<5ynfrV=_ic85k6W^JRf+#$3GiJl_Oi5lCAK9tDu3^4EJm7W}wn+CO15$?Y(R#x9aP}K#y>a$iZfAMs8)w4V$rS$2KrYIIQ1joyv2l3 zN9@qgg#2N3CKuO)rPJ=6kh9;MJ(kaS>HSx`wQJSBJx|JTM6JIb?APNwf}H5fAJ1oS zwe-7cpO9hSCuKPJRT+*))_Cp}@54GT0{Ls735G122j3?R3)9sZYbrzzZ$0VazPNN{ zdG_0gIvZ_tM*P`t+()|X`^EEQarRrzA7>cxl+P$)TspL6bpS9+F%+&Kf(wyH`j~i79p*$vRJku%N*>7dvzYSM9 zW5WXX@vSfF5$Aku*ixSJb?>!5s2pr~TPDCZViSHZViIiu*&8MFt zTsdb%er@*KyfY$CtG^QyeMaP2<0gcqc}x@}1ya8C+u46B(Zen0OxjB(GOybsaSO zZJOsC6?T;Ef$rDIaCj#(#5P8~EBO;-JB4u5wU>Cl!&=Wyw02!F^APNG?R>#!+&AXL zd4N}Y{=`%-6d%1m%FY*D;{D$Id4S{({R!lglR4Sqk?-@<0s_n-Im82t$i2ks*# z_$*%kMYj+!UPrzV<_qcgXg%?Ks84J@q@%h#gbzO^2(v6dS?(hy>ZB>>&3E&@pA}zz z5 z2p@h-5VotG6m`-YyY6!fO_rYok6w?0oz!{^KE7D&B=vTboy6`DQXj(Awv*UJ?BwtR zs*gdnD~lgD?PP}gZF;@aNqZvYK2_#^o7))c5_7vryV&;wEJbIjZeC0Pi8g0L*%PBN?6JJ<5BVTa4qe*tiB#u&ZFjczym(K$8a0GdS~N& zfVBH%ri~AutoL&ie6GCW=}OffD~RVansQyD))Q6_>-`+z0Uw?pZlm7{;gh_&ll!5j zh)?=j!RNu*+qmV3`P1kn98A04rmx566TaW3s_$(+q@#9c2p@h-5Vq@no5E(iaPXRq zg(m&X1dm>i;`=ea9-ogP5bq+Kq*UWP;am?2}yzCi1bLDer#xbo;rE6*SH%w}uvKmE-A_5SJ4 zulL4OZ+FjL&i)(Pk9qo;fA{`r)oYvfW5^%MIr&63ZC7!VV#?6viu}?^m-KRq}F5b@x@{%skfu-BzBLG zas^l0PGT3aliiO?J4yVJb6aXB5B48$oPTIL`J!qvndeaDXGptP>Xu>G+stq*btCHh zXu`Rh9;`gp^{$rN$#D9PBlIskd)FSvxy6;~5Ko}(X>=zgLD#ql?O^#1?r|fstdJNJHb`l=&feY{T@I@hfI?zrEK8x4i z=$4walOrklXg%?Ks84J@aO%4@gbzO^2;0?8iaP0i+Yh?=39^$~kHN>!QS2o3c9fmO z?h#V1;A-1R>>_ru{E)Ph#P3^X+R1GD#S>4na)h0f{o?;pcG5hDYH&Yk7f0VN!{VW4 z=x1!iA7ypUJK-zxm-hbOue&z2x?dbVcCv*2SL7e_`fz(U$#jT2w4HoK{&U{%k9fbw zf3TC}59K`HC-aBc-JdbbdD?#MwDCz7?a8eA#YMh4_Z+yX+GIUkR^uf)J*3ITS9rjO z=Z9PEnh-uI`nBtPQp6{HE#Wioh)u;N`4o;xH@>g+#PgxPxA~9{!(R^J!;cBVcI_7z zHsjpO_S{r!a$G6Fqt~NQziB-_A44R540bijkHIe?q+G!jJ1OLed2skG_%YpgNk4}8 zgV&mVOve4~=4%)iA9jm!Ami^+QPI~Fx=ee~e%TIzwuSfCiq_4-|kQg27u zN$egWojlNgz;XVe?Ii1}%>DVhj+J(Cs7Hpi|29L` zokpo0JW1Avgs0zfU1jSj>np8p??=t@dFX}DxL`QO+CeBs}1Q z9=KKS4&l>*c2e+}Hf`%l$)7(MRYGJA1@~s1$dzaQFkdy@R2oRd%JEq%Xz%XyY|Qsk@GtFkfItes4`zE$fn z%6WsGga>@!0=Lnj5I!AfCk3Br)81Uk`SXP1?PTFy>Dv2RPdp#$6Ppj5@*fM~!;cBV zcD0kDPCD`EWj%!^`6PJsdKCN^t;gWwi^Wb-Z%5fl>>eTI3a-?{LZ0Y%#V%qe2OpJo zlK8osTW2S|g;k07Vbyk$c~&ns?BwW~(k_l1rtIT^W;m9e99HvA2_OI4mwP6nJqaHl zy!zw3mu=}zF6=NPsy+Gd-Tqv0?*8cAc0Bu9a2NBe$REl%`NaLj@3e0@&(cncd=>4< zLX+*4(c{w9!&;9~&Kv9`Jm3QtxQ*N&!ly0l^{TS?^ipJH7Ve{K~FpZ0eCe>weeg z=br8Terwb1N%DtsPClWwTxs8Oo@G5O^3^+Sabu~;dbm%`zayWT4JqeZk5SGW>?Azk zgC4kzd^dzoTiD5L_Zt&@rcHZQrP?GP_RS{0nhoKj^~Cd`KC$_rZ|JKbeE2az*sgX` z)JeOZac)m>g6yQ$WAO2F6gx@19c3r6dxVrLxY~9SyNI1Ed{Np-;ulu5(oRmzz)o_0 z_zs4hEYFs9aX7ESBg}BD^{stsogCqTQ(xXY{K3b(wnuCCee_(H(9gw%sWUGw%=gx} ze$(4Cc)FJk@zHkj;_9@S7gvvOdVMSTLpdj(q+G`tTHU_oJWD$%^3_>)gRZa34OxZ84^^Czs)h9L|I2AU8@ZrY< zVY}K%Q77fjI>W6s>Bl5^^m-Kh7_GkQg27uN$egWeTrCrROD#OxoW;m9*ni}UITr^{}XWy+SZ94a# z+j;Ges@I;&t2W(OlE(LYl${j%KmW;(^zJ(=w`t$+JKp*sukZA)zxUH{(z0E9pS$U! zUfSY6;yqgEDItF-=j0Qyhi`7zaz5Q7pIyJ+@kjoGE+ z^3HI5tN(0C{t)An=K9v13_Ce=vb2kR1sN7kFvGEQ4y$=Qgx^{5ncfp$|7gqGlklAP-{=@575_T+a~40*pl+O(Y{e<mwccAki@N0#%b^{w!L5AQMDa`Q|+Y1gNwjSru!*G~#Q)8@Tw zQ~p%W0}50|C=G;NN2P1;YdwBF9J;<09`GRva4Vl0!Y6U>nYXHa#nKh4Qp6{HE#dQ- z9XAzDYK~7aB_FLPo)7iC&4+v#oFBr69}|S_y1rG|jD0@!j9WaVIX(#8A6#uD zwW*7G+{pQHL?xf9Jyo9`G5NC;7mw z@WU`Z$@jg{=YobNe;i+C&u7}SlPhIE-{Sq4aU|5Z6+T*z!Kb0U4-fbZpD6jjt@QaY zJ_jXU&#(D#Qud03hjnJp=gKQCuM|(7AUo;nG59!k`GE&~22YcG;FiBNjL+1!8!yE; zF6#B$lH{pOlbV!RNV3 zX@dMrttXxjJmAx}K=OfG`LkhsrX{Z5W-U5%VDi+-GnTF__K&03h1{Awp9g1e=a%~> zru=9<@qFL`pON=UK5(mkAdJt{bbJnIS3Y~V)d}LG^~Cdm2Ykv0Nj`AP-5$m#F&<~; zz|uAS&XO~WYeI^|xV~yd`8m+dHQCQGuA~NT#(&d#;`zV>KGlVi58V3B3FVX6KTv0^ zd)>KfR;&u7d;EX4g3nQIeuDUDJ@I_t0iW*EB_FtTpBu*Kz{Kme6rZ^(&K^jI$2+e# z>-On`v)|*^PMjF~qxG149LF1z_U1XzK7|K-%4bMEa2sA3$|te^cEZ52{w2$oEI%`~ z36gxW8V3>m2M^9(?G`7k0A^b({ETKJb7K{l;*U_v`=5{?UUH+n+g07A+k(Yao61sIos< z)^CfaT;bOI`b|G`mVe>D1@(xYzQ}Q2)sGJ!(gHWG2^TCF81zcOq6G{1X7hwEy)?b< z9~5`*yXkM<10K6#(ZIYFXS{D<&527^ty$YY-WQM z8AlrWx;0)j#~Lp>Zta?tYscS6k>f=&vbR2e+#TKXym>FVdSXY_E47O;UX**QtbcQ> zWXN+R4Ili`hi5+j@}oU2n`gX8=zs9I&wA@5zTnDqm{0QH4j0UPaEH${y^ezXp}gf+ znE6yKoAyeQS}-+fg_yP%RX=UE>)AxU{(YOGTk`8eQAG~Bo*Y$tz0 zl%K5p2~mC)uNQk+w)P|HEwLX0>wTHeVz1A}uV9@f{d26Z4$fy0@`#T-_C-Mt`v)P9 z{fAgTYRe-&@(OAmBYN2PkNp_0*gnY|A6QFHfx-MGxsioXT5*ycaI*pl0MFnWSy%m zkNBjI^YU2V$$44+`=`!jWIt~EeI`EgO6q(!^uPnTj2CjAmz_T1Baidq(1W~@s;pn= z{~g*joG@DSRzMuWP#77?UWYI&uF`tqB%b6ExKQHl-$Gmm)@Vv;Q zKb3jSwmjk^kM&6CVZ90RSZ~67b^CdVk37zeLJ#RfF8#o)XR+lGA9ogq>pvMwD;}w z5g&PYiKLVC;UCZ+$3Emic?-R!^WbWkZv5`r8hMReJ8YkMsM9lTxAL4Ne}0?UuOR0- zb64_E_>E$}GOZ`RT?7yK^qnR7z|BsHg|rTs$UFKELpMKmOS3;*6^uDj8mAj z#+z1sKYX+vgHOXeRCvIrdbZ>PH!WHIrN$|ecKZbQq@9P_8b0NSc??PWA?^HwkJe-G zX_$u!5BPMSBl*D1maocB;&IsQ=ApKRPa$F+!!CA4B)o=?))UVM9`GsskK_Y4I~j^k z;&E7Azonfl+!{W$i27|OJ0lWa!$<3h=K~M;ls_Q(z|BsE17wKaTdr-jecdbynu39sR!^#u7i z4fY2f@aZ~N@`0P33{`&YubaNkZXRlD_>>~b&z4O;Vf>Bo(R$+fzym(Tb&?OBM2PKM;u4)ai3!>1ZizrEGYh=kYh z(RzY>#5^r?9x6QGQ}~GF12;PvicezyP0w>oyHrK;$!eY!&smFT|NJ*MqzvJs^+-N) zQcdGLI(Wb*zd`bWo1GlRCvp9z`J|nP+8RE&i25ygkBOOs@X>mLe7IN7bA$(cYM+pN z;6@BWWq%TvpX}zLwuVnRVqVYQWI)OgK3Y$ZPhhGPB_n-i|`Lr{&8F45I$Ou zEI+nDai17pfCqdAzbg5_&5oz|w86Z%*6_(ktb^Fc&WME9@X>nW`M?7{sD&HXgo;la z%!_LcpK3(=G;xOs8K*+{Xgww$`ge|G;O^0V{Mvtpk5a_^t_pHtgKUgvj|p(Wlq zcK&(i%$=<^L6|&u)rvC)Ra+uyCBMBOBsP8o z7x7QzmssBrykF$y0sHO0pV(BJ{3M;E+xw~h;dw-yC94;#UA}rv|LIFJC^$+!0era@ z>3Y)pl5)kmlHAj>d~sjbT5Da&Oueq;$W{HzlBTpCH_3t$m9R-WZsBZQ|C@ct9AjMx z>2Eg7`R$MJ7&A63a3A0Lq8{(WvEB_^p3p1y9l!V5A5;!G|0HA1ZlK1^ZYhPAq@6GL znp@cMpB2Zs$({Z0T@0P!DGvWuaNo-NiRWGGy#wOi*uvSh{;rC5f_H#-qVy*<$4u41 zgGaaUod{2MQ{Ohe6I-NuCu(EV0Vf>v5qIi;9qqjfh29;@^Xl)!^}l<#cija`JWl!} zUxdkWE4FufuTVyx4NG6sd&(`}@${A|JC%3v!ek%b37$9Xo!}kdo#_6Td?$EUx^8OW zJK@z6Nw*Shd?zNQdMEN@)DuVi`{gtHU$(UOxT7EGePNfA>hHv(_dZq`{@{IXkdAW4 z=B-(qa67S}u)yEs%4-rZf^IX-VNbOvr4^H1Iho;U2B;2q$d82w-QPVlbe z&NknPdw%@b+y8#P<7gjoPXC(Xm`Q24LBvX7IvlYV_v*UT|ET8imc~2LceV5hN4}+e z!;NN$&1^`R`XX0Ua}iaz>Do&?JF(Vd(b_eMlOhtd^97%A-252Z7Dh#VWW~qT_`|gEwZ?4Myor2uoXgyD zMB7p8m4EfA_rd;ttZR|)V(y^UW3&|-=BB{|KFEh#?zRv<9e8Gi;InxB7u}-YcNuso z$&^4?JX5zN17DB%Cw#P?cs^aKKC$_rXz=zBKKz&<%(DDsxyO#Elctf1Mab?WA^lS2PLpLnI~taCQW zbcmE|JNe=tKH>eoN7Hta{GptaPvl4Kj`l6*S*{Hi`RX`-bc;=v^L(IBkGyIoq?~I# zMmcY=lkk8KI^b4#Duho5+DXA@@%n$bg@`$*xt(>ePZ(=9fg}h`0!(b zuwCt>sFU8Io#>9f)VMeR%WJGctq5r&J?Bew?ywa8F5O)Ub6)*&tE9> zhuGcsnB_d}*-UBUldi1Kb`tsOoe)teG+E9^Q?@6y9$C(#=32l5KD@_p>$}V3llE+; zwDIAS_1Qs!&y`m^T`4u$o*YTJ$Bot#RuAjBWbl9w&kwiq#t=S9J5)X4?RvJ8;Pc?@ zZQOE`<)?gdIzLA1@%f1T4Ano)hx*>;1E<_?L-_Dxg0NlBb`mz@g@e~@%s0s=!K2rs z;Kyh^J|9CQehhXs(vMMo$*2k`S8%oc82lFenA$VSk5Tc zpxz6ep633doNGM>>4x?`Jm7;CxD|d7!lwh<`-0En^*6e;Ci(Q8k4aZdt)G28}WMbJesj(|uA#{wUc%my4V1O$Y|3l_3r zB1slO#V>L3qvx0$d|#N`pbFT@p|0&q>FYkskIfH<(%{8l(@!_kWW|4 z@ub!x%X!dvA0F`GJ%(F{Z~} zzz02WE8b|~(}v^yQ9kZj&Y6Ij~#WeQ)w19fe^FAAXDww(5AFvz$u} zmY)cZJ{pDcqxE=vd?M+`(5?pcW9XLKJae-vT~nl7#*ZGmpDA z_U>Vs4snMb?{Ap7%KiP9?(g9r@g51k1^Gic@4C(C$K2;H=W+WXapUW!lJnq_>c@zD zO+C2FaIV36xF>Eq>FEjY$G`(VyvK0M|K86hZa*Y$eE1~Yj}d%kPTO<1++aOiiRs_h zdc1nr+K+(;e0YAi4SvPKrw#itqkInCXSmSd{EOUC@$4~LPdFdydy@~GN>^C;@MDCq zRr@ib%{cAyt%vhoy%Ro8i}2{9QRv5LJsuyQNcu6ft3mx3`Xz*vE4b253VC9lBK;Qn zF_r(7{TSkB?)LX%682j}UTUlT7H_B_?K^z^n2tMSyPW@~47(oihrZ0UT=XbEA>lQ9 ze>MB&{hw~S-vT~nl7#+8Zuqp@Px+oB(;@EA{g`X^zSsTz6Akxc$REl%`Gnrgcl_l% zuH7_leA0zICMmy#$k$ZrHmA^FInNv)vmW;J_{w>m-vS=+;rZcKs#y56q2EIAS+M$U zr{v{Zcs-o|Y&Q|GKxS zzIL+f%d%Z8m1J1>x<4FCX<3c;3Fprq$?h;^^6+V|O?BI%vRk)i+<(b`f@%Sw|C)=> z>fT}B^zaTpPPujmcP++0U-r^)#Nti6U%2<2hTBQGZ8>-M?3%UZL+-!*M7ccLeF@+JAGpA+@C^%}Hf$$H`Sh(b zobPRn&p^z6jMh`j$DIdf@S#32`M_zQYT?6=5yDn&Cr9g~bJiX%_cg{R!lREyp`Fxv ze0)5yw3F1^LG2{%9wFrou4X$)yGT3P^KaQs5rCrdw)?PBID zG8}RIA$uZt8EpJfRr8$)?|ku@?pZ^34K>>?ZY0CIyl>GS?miMXyX|1d(EAU5PPLDE zJbB-uZuj@EG~7;-Ka_Lw357i`wr)93vYiz9>OS*>rK1}w=e2uTkynj`lyj}eSI+C| zVR*m?9dN5WW8u?=?WEwdV8Qp-lpExeQ+tk)UyX+F(R#x9P@kB5&{uxI!iOItgss|6 ziaKeN()HQ&QH_+Kbyj|_2(EpeD z7tKkn{DmXa;eU`v_aB(^mu)X>c-h)d0Uzoa%2DP~E1wqF!?p>0RzKiWk7=y@6c@&`i)%f8KI~yDIEwNE5BTr~z>RCd zwmsY3t=|?*f7oren)?y?{;aTrss01~iNUFIzZv=&9UJ@m6Uq8k6LH6m3ax>;!lsnArPki0ot8bQi zKlHf!qVmi+7nMKJaDRgQp}dh#-|bV0+aSbH0<- z}SG(tbZ7a7O{HF8uP4}&9Cm-JLweI=byrN zk*}%L^-iWi`)4WUylt(=SI+C&NqE2qE^tf#!osHw+eyJ^!Rpmcxk0d*hq?wSxhh;n2^&1(QzmIjj+SzFMlczqi=Iydi3;lD?d&1qn^lOexhd;%uyEkxu z|GjEI{lC>-3GPR`+{q8hdFH47d>Q$%znsf6@FH(Fo8rKXMYV~E^!J=plKo+kr&qoA z#G!nHFwH|*tH|=ZifKTxe$p>ydzqav-e&VG*+a&4}5-)i^tFFCysM=sZ zhE$9W_H1L^Jq2GL)I1@}u?m z_|%=z4iESgZ;*T_M}?YQe_UVZjLx_ROp7N?y#0A}?#51fg7|1X;e6l$pMjsN z@}tU8=1(?0Gve{txmEdmz{yOIy-e!~=K~M;RDU7)z^&sd8=uH{QgiwiE$>Y&JTAXH zY7IfWW|W^jo$>^Y)3ly&KJb7~&tsAg+=_p;@`-##yE=2q-9}(}|5CC#QrHYW2RVfa z>c43{;e6l$pYpF%`BCL)rEVm}=ivU6`{LngO8Yb4sZLP;P3!UVNu|U& z?d2@vQ+U8<7Fr(S!#?=d{!Q+Pu1fm{AsE1$^qo946M!bQvDl%eGLESP?tQ=K3_T91#9*n`9U zXg=_O4|XrO4SdbUXJ+K`v;UIieM^=tTz-m7NR0nBfzRs8ob&|MZ(2_+A5pi7kLCjp z_{iVg^Ac1!;+n9P=1&RxTYmGNd&N0d;xzC>`;R@oZ~5U1mo8t?J6`*qsNWV$zkW=+ zCHW9F6zz(zcVpki-iP%$e zsAug5J{9wvXIBXuA?Z~g2k0^7 zVT0uCI#V9;k%#XWJ;-CtJ9QF!RhaUKk34*p=s_MnC7u`Glqrw+$m6UH^qBG(YvEfq zU(_=ZKjX-$YYOm^dOJ3tGqFZIxEqXM||Y5mn?daL;5&Fi#_el z=OsS!*!vVc*dGKJ*E>j-y zk;j~V^qA>`2Yc?B@`#T-)^MPQbTNmVJ;a#HZ{{EIk;j>i=z%Np*fW>48)o{5k37}@ zp@--7%8By5ah9VgkNC)A?Jat!r$`@j2wD4M$|FAV+$MSSgC5dHJA#jvwSl$rgzvrd zxEw3f_wT64Yvh_?>-gShr;?nb#&hPpzNniyH6J;@qvnf3!rX|b2 zB%fCBy*GzXI$#cAWMj3Ff$-6Ke0=JB@9=<6<#&<~+zjz4RemDdo^<)?jOlxC5}yFy z;U;EAM7;L+czVM5zym(HXCxoEnaPlRTEX|;96p(V`fY17BO+eIN9(EOvvMD^{ecI3 zy0&=cRbgv`o0$w%ej+<}N9RT);(KorpMX6gHZU_H;PDyGb18i!$<3>A9%nA zwQ%E_Q1NMjy_uTCCtz+-ns?agryM+2ty$?jcxnH!ean`0)>zd>7i*@DI%sbAGW_)n!2|pKax@*r z*Qvs%9(qEgk56uvTvK{zzIT4#QZb|Gu%&%{{2DzhfAn}~*1zUC9dD^U{Ab8LAPPsz zJx5A4XGV(T>@ZGM`G3fEW8l9stiDUuQ8jyA(q-N+QgTw?(m2z!gosqy zo9jM$S@$2oMf?-_CHB~?ys;QI%5_bAC!#)>8?XMI zm=x=sNPFv%?1?%hz4!17XMU)AvinY4HGJskJ8|3Vk9Xg3+7&)N@)t{*| z+4oM2yid0CQxmP)hCx6|o6V`X%hvuEBGdUn(LjU6%yw6#D z=6BtHB~>@+JqsVd>ul%F-c8i^0Ycob#XE7dTNjW&j1$NwViw=;UxN^LFPOOTNtamT zo8&x~yUw}NS)9Go$prXGv|jmFHRc|!T92<^ST~OX9`GR@aLd2P!lw=QVjAT$bgxtJ z##d&Khn$gNMU5Z)-;RAH%7vJRr1gaJsjB+KAuR7hrhaV$^t=dkCI_a=?{$qANz#kgnQLRxtKAs*QA1{u$PqdTN+d=Il z?H(cJ3a(~5NxMipS=>;zlf)k=_}j^&zy0_g|2iX;()Q&87Y-aU{=u{x%X_vce~7(( zj~k8nU)4^o?Q16oH2Lr?BI`E6?_h5oC*eVf}p z?(fKSh$qnPy(*vU0m4_B3)L8qs&zbNNgk1Xfv<*i%O4iEV79>Z;9CqJL={zd&uV@%SB z8=qX5tj7D*Y37>tQ4QSIa47gZI`;!k*{dJJ`!VI1XS8ZPwt864OMwS`cp$iyKV;z( zc~s!;c_aA7h)?>O!)H&Y&>)|Vm}gRHJsuxXcGN%3hkD-RLp}^_XyL<;5yEJ1cfBIP zM~wHADnFvlIO(!;he{3BZ}ll^>>KJgt;gfz6F@(Pb~UIUL%)QOas}7PN~(}2#{2YJ z=*MKXl>HduR|oz5m}Z;}=zGuxFS2ewMxG7$hH46?`1&!K|Hytz>17!c_6z!~MPJ{vQ4j+(kcz{GpuZ{^if7uI>HhymjWE zC2JQK`Fg-+rwmmat%r|^cUFwn6I{*(A9%or_ZV)a9jtsJ&p(^jzjSf$qSzacxi4Sx zd{$k%dMM-hGRNr0#5~JK>j~!r5BN~(;Kns!EA5>m>}5&qog~W7s%wAYjs=?gp}nGg z^4hDtWP3$BR+{5)uM+m-Mjk0lcJqAMXcl3gUdPv74QwjMk;T_!J)GZKUK28RAt;wS zj+6Bg;VVzx=+5ovcWs%?wNKNZFw=GGzLz@(T-f2B6;O1}K4J?u9payQ1mtN`Vq6Cg_>|U`{XE{|^aeIQk-MEKJ)gJnXR_ZZ?Q4aNO#AeH zi~4)VzahWiv+CM=hDsB}N9*zNsq4qU13sCJB_Ft@_pwSPXnp}a z;6tf|8`p%bWcN*S&wR<}h%v_{);h>twx?4SpEq?0}|wprFr9E9@2&HhdB=TNKJXfM_xtQ#?eFiytNK$?8ll3Qy%e=S6049^qBH! zBUtlf$|FAVm|Kn>(#7+#h6A6Y`MwYzd6YTykUltLgJAA!ZTf`mg1rW4`wH)seMjV) zVe8nIX1U(CNvWi47d&UdtBd`8`=s}b)_TJGj_`ob;Ine<1vk=7DEUP0IwojaY7U=L z03Sasa%21+L*~dzZlaW7S>;cF3xu^d=A$tyf`ONE`SGK-- zsN=nIZfrFx!x6RD;K))vhh6l%wUHl%Ft|a#y9DMrf(Y-CxFUyd0)!Knpx?gf1=`!yZ z@sikcF!Oo(J3?apM{p7UM1G02JGJ+VyfpV5B%P$&y=C;n^N2Wa%btU(T;Yr8*jtt_ zmAq8u-p&*L$jjk=neZI+$Q|bTy~O-`4rcx+?Gd?cWjQWBC$9;4zMyb$k*rq;e|X@1 z&Mj-7JJjsCb-eFpx`h5yultOfhQXoSI|kfzh>xCw{;v5mx~JZAWw-o3_`l+P741Ly zL;FuY5wqv4ZG7D0&Vh{^pL8WX2mQ>s_qus{;ZQZeKA`o=zq+~=(3k16@ZrY@ zVUp!1$vNnV8u#oqxTVK*H(oXhl zCfiBk7Ya>nCwC#;;|-^FnrpTE`>=Msr0n*u$Z+rjvb`i6OW&aKixSRy={{%v!^f<7 zyV^;ie`V#f&XMz($(GrJBgGyZ>?P*kn>zhx**<1In2cR0{nuTczwWrxtY){99&qCip}%wR zgYG!8G$hmEzajnC?cLuGQsYejZ?#wAJrd(d@`rL>-NBzvU0?B+^VYHVC%eak$k$E& zTUk?Tu$?TO9Iu_!dV8ovgT4DZL@_c5_JaVYu`J+je zL7k|V>K))O|2x*$Rq}jRU3>LVwZZ;GV`;3vi}IuOg!6$1e5m)~Ryx7PXJ%wRt-AJ3 z)NiYBcLE~<%NAd}p9|aHiKpbvd6Sh)+FUhrclFthh*59LlM}Lp}r60&OVe78F z^Y3*|dK(SX-uToWL-e;+{p`~0+qL#i_V+4Ie$TgN%XHY&Io7wL-V|%^cwXDuJA8)N zz)agU?*_ge$|ycs=I97r!uLdck4`$|FAV zutA{5lc(l}(5B-fGvyHsnyrLM0J5BQXJmVDp_7edLW75e(K z+);QF*5U>9RT5vT;_316sq5>*13t`^gd1E4Rr!hBmrSm&-yA;qfWCgxYrV9da6a&W z4;fUJH@)#<2bx?E_>$%#iv`>ydnd`ufZ%hR;}Yi(AJx(ww>W zr2sxjuZ7Th{N)Gyf}`jkzym(~4mYj|Sql->8kn4Kq&a*F0rgwbYl*ZTJ0I3Uu=atq z5b3SuS_sxiz=d!eYau$jm-h88>$5M3pr4D}(r^89)A_#e>xo$l@$8?T$eww?_npcd z=~K^dD#OC*(ubHiL;Dg%&9@r~Y%t6nBKutfSs7NYl41H>88#?p+_#BxxYCV9{+e^- z5oq$@`>5f_E0QN6a%eS37r%$4E6KGGg{n+fx#EA{YR5Gz-NbSq=`!yZ&y&Pjh_qK< z3yJj~!A1NN`6bpu)ZQ=h(p(EcI!U*C%jk#a5pmv*wGfmmY(oR@l;uk$FIBzH@CDA% zzQFyK_Ac(@#&L#m;tExhH=dN5GO80_pnomIIFpmgdE-NS%*THJi|%)?xHWskbB}gc zZaKnTbCAhy`N8Lgp1j~vpZ`tPt(}K1U$J0;T~f4f*Lzp7d&V0(&q<{ob26Wv>(eA*X*|zUdvE>v82`NA z${w;#&+R3{uAD!tm1X;T@I=|x5PtOff6kt_eEs3mUYqK^4`tVGm~sCl|DkR+B@6v) zU-F^udH20@c-}7S4U6AL{`s<(hMo7gboR}ENV{nZ|A==&^a;ry`h?^YvD10K|0M3b z!?^KDS1KjPR7vd*G;+k`?7U4k7|wfbKo9|)f+&B9d>8X&w4T~Np}W3()|L;s|Mr6q zJm7;)xaDrM@M*(&zoUG9z436#v*m>I8HqdJ%+piL$31(`;6r_4@`2OHg%&>i7$Hoq z{3Poi9<7u9x#4grU`!R^QLRxZKU$BEj~7SWH@ZGX)!(L#of~QQ2q|xHovdyY@yYgv@r$?m+sT$WLpU`_ogw_XGC%m|{bm-)c5(23WLWL?hvZjKm^oFA%~bfE zk-6P#|IdqVpQX9;sNiF!OX&afX?J#~9(>=hOozBbuaEi8$l>nqw>8{Ol0TI5{6R8* z(3}2*znsTC12}Gc(#1N`q->8OUsEeL87?>2P7Z!SkJWXW#{P?PuJy=ru3p~yGlUfn z`0yUXZE&uiPuw$rhSl1ukPIjz}$4Be&>S5~{weWxs&rdlj zFShWBaRzX!o*_KSXWEv-`G9?l$QQ!mvUq&7o^U?Y_a-0Gk-yl&haV$^t$K#AXfr0? z@P?CVkWYk1AB{r&ruBGyd?M+`(7p!sW9XL zH{5>8++mpxk!anI+4O}T_xDo6{TT9xaz1c^zaLXr<}c@Q`yp}TYeaH=Oj7+Ak*}!- z_a3e`*pDf%h*uA5J>mTrc)*AE7;b}?`T4}{hs2E!pQQUSg3rup-NU&C>)}FwJU&{F zR}WkJG4Oy7&kwh*b1i(LS9hsa?Z=GrIW#w1Zm^%3IUyb&ttXrh^}WdlPSv7?4?ji- zTeTk}+Kjy}-flSU*|EaM0TCX3Gz$F~t;gfz6G=aYb~UIUL%)QOas^kjA49)|eoTI* z?8gwl@&kWACRxA5PUCewdwC-IG4gC_)?xeSITshpc6s1P8CFjBhn}E-KZ*mgyb+!~ z?fp*2R_iz29%HAUN(ud)*Wa}!wem8R4v}!(k2!laqXsY<)du-Qc=XXI@X>mFd_1w@zR|T6s{RgYCu#QxDOYec+ez9*+R2_>Wjjgy{MVb> zPDY-CtJ}#pl<9Yh?<}stLuI>|`J@bc_VtHe#s>URQR4=}_w4xFS$qBb$fmcG@G+Am z^q=^>ce>;GK}V)T+@aga^L~2H>=VD&xPPDgp`4RX=*{2Ky5&5{H3uSJQ>oQXy216| zJu&NHt;bi+>)J_pzy~gH8#u(mrw!Xl!DqqhyPUi?Co6os(iL;Oul0oUp*}JBz$tT@ zg%3YQ2wSzC6m`-K$DQV68Z18%9(^E!l^RMFYt$BsVkf!$CHHT z{P;W0@6Y@6+tyAB{ZlXOb@hKwr9(V{ZYR(A@!jt4$Gg9We*||io+N)L=j0Qyi(hQr za-L*6De^Uyy3NToSk9|4{gYacubkJllkk8KT;Ntc)WW9?+eyJ^!Rou6QiFWDVvhH< zo^U?YCng^_^?cI8haV$^t=dkCI_YoSr#tBe?cxz0eKZQ~q}Jo(t%P&)`RXEg3qh=P`8uoz3Wc*_iA_0^YA_GB>6)* zC!e^l_|?xgubp%!T18#Dozm?j{>ikjo$UCyY!^#M z%djxlACA>dcBpy5gq<@}-Ov2{#-_KEK~|+1r={o2IBk1(t)1iSyla15J2~TxsdHw$ zk#T+zNIx^@yC@PP~5%7ZoFbBJNqMUI>bkh zC&zm}ANfN$C!eHTcR&9xwQf02vYq_>S~t5~4;)H2=>K9b6!NLjkaDi|_{w=*I|&c? zpa*WHBQ1Q|u$>fqZo2X8q5QJO)>VxxjyK-ddcyfopO}2$)bVKxAAXDwwrV>m>ZI)K z#o^USWO$;a8M% zttYsg3;!`Z;FI~NwgNUG@l1M&PgA{fm!TxTJ4>=j=r%`}3u8w7))VoxS3d-M7d)7plQ= zUC{e6*7x)$3Z5QceONc{h6j9dD&bv=?MB=pWDS&u|ao^^?mYu#JNz_ z6^*r5W2G+Wclc;MK0bAO#lyqnvrzJZ+rU3;d|F{I|K$0IbD>HT#7FBHgOB0?pPtW1 zK5)xaY<$}F+^z?Qawkqq`O$j9`M?7{g<};T%F%N+K9P@UO{qOv-R&rr_b&~q1RDBY zmY<~dq2OGo`~>mQdL$oZj8RX%av#P^@PJQwxoUq@IVyhL$|rLBqxc-$e{$c_)NwI} zv#I3kw@2qrbxK~l?RJ`*@S*+Ddi>=lm2&q6b@!Wv4?N&gIau<6Tj@0`pUCSA4(VIm zyKu?ECC4d)L-Z_2zWh8o_kB*O!SQU=bbEX}J>lgC9`GsdBl*B>T`0*6tlJ(o8b9Zs_6J(dydcyg@13ruk;nwkI8=v+(H}cWB`#aSMs^7GpT0Wv~ z6Cd6Fzym(=cX!_hRgSnOY$bb8(&t7#I`?xEW)H&tgFT4+#ZJUEVe6h7xqhfUi1Y`A z8LvNPzoXsGjpTVb8(=MUHh|cRfVl?vFiqb!?*=|dY!vu1InPA2p+X+>)4b>eB`lL9(s6A?v&WAU^U&)SP1UAdmDRkG=g&dBjH^dqJWHd2pc*$zJlN zJmMn{A1Hc|NBWS*9+0Ly;v)~A9eT(&d^+q2i|^BvM||W})tq1SkS^r0Hyge>lP~d+ zhff|oJTK)K8!BrM&GZo;d9={zq242X%sIsuUn@`ehB*(6zGnHea;%12Gi)7S$Sl|M z*o1RgPq5nxld^m;mM(aDz7JD*nYg*1mx#Gsx(Q|Z*`)=1AK)V6jx`O=i%__gGdbot2#)NdbdJYk`C z!bj`TX@R-_&Eb;{@Fhl_OK;{Me6$`vA9L|K{+i2J{aicUZ|d6~agBvGbXCSSs}kxBR5HE{XGkv z!JOJl?JyZ;)Y(Iov-DaFk(|S8;x_VU$6C+6DxRZbqo+s1kxgV+TuX+H$cS=}cpp}} z5y{{6+`ntG(-VnZ*83vnABD#yPeR0@n{@GeSh`L*f!OiG%+o4ekNV%YTD$p5R}J@( zu7YvDNXbckOP4L|Un2gD{3&?-QM(AiMf?-_m3G70`$b;vyyH$giUZue{8Z^A-R@7L zAD&0VS-9+|6-$;a?>%Nw0tH9OCx9>4B3;kAUsA4^+mJh4mM`uz!&aHwFm2;WsVSq0 zd&}$MJa_AR_TitI?y;^5W6W*XymGYD^P4+or&61BAN}MOS?`Sd`?md2t?U@bTGfiF z`&;PW@vf_e(o-&3Gx)9B+;l|y2<~gUQF&f-Zi9Fycn5eV@`uQGf_J6*_{sf$bnoMH z)YGdj+10tL-^P_@6SH<@P_U@q;j{Ihr06R3*Gmk{uB4P>Lto= zg#IUIJ>C7(!?T?4T=9n?`RxO4TKN3{_xIm=*L-h=;+;6!o)Iem+k z_ojrw$yPg$=euP2i1z3I&E3f<1lYvaQc3H0O!66sd5*Q#6V3-7@L?PRx6FrZe4@{3 z*ni3Lz9q{REF68#~inhZ0#>Ut>g1ccKz-DUjBqT=3m>%1e6~PV&xas8ZAF|YGZ#(|61$u z*KbI`egF^n@H^ZFHnZ}HJSk{i|I)?1i<0OcBe0FfE0sXh_RmP;>NQRHr6U;}f zk-=_d&Jl+bc0WSw3h;BQ;?a-bE$oEY1+f$6c9(WS;*WgWZzpV-eHY!jQrPTMDfaQ7 z?6VVA9NBLgxm|{%x5oI-RwFNVFDZP~Y4-laK}i()H+-XGPHN?Sj!cLD&aFmX>E7_P z%^Kc!k^G^YXYLNqCshyc9(8h=bZYw39PKLEex}IR-RFG9DR|@P@Klx0kJpc>)l)m- zFztl!fKTq5k`LU>RKh2!p+h;H=b3WHf1Ny^N9UgCy`D&Z5=P^kDEYRVn|b@F@`Oh3y>kKubGo$0IM@u}4l#s?noDLgLuz>V|}Dn4CN zE$xcWzQ~InHi6ITi=CX;&kRr5;HB~S)anW20}uF&{8sXTo0&@ZM74A%K1Y~x$A8@f zKGTa%#_MN>r)c2pczkO0gz>j@qQ9PK87el2`R3Ea3QY^8lfgq`OXKNm+!n2Ef_aQn@x7}#X5?8z_Q;FJRT6Vue|!n}%H%=2}%9v`2&c@^-0PyPwX2X5&T zt>q`GxuK@~wAQ?e^N!foEkCz7zgl{P++@wDu`3eo-?yW~4gronj?T`}u7ttXrh zJmAAPq(^bksJwJ5PUismP?cv}BG25RSJ)$NJ;=_0yKIXW+a*e3J1ePcR=buL8SO;JgavMW_(F0{qN*71#x_6P6B8^D0#Q!5>bDop2fNS)*aS zop5cRov{21*>5V8RQMwqcHJ*S^aR-n^IwqlA>l9Pyf6FV++xp8xc;_{%chaPu@h=N{&H^G3E=^s{E*}Wx6(Q`KJ8~G+gHry5XxOgrJgsqy$| zJ!9}uJm6D&Sn`2eWm_Ac_Ola;c72E3$xbPt{Frva{5kRXXg%S4-~pem#}psMEjQi9 zr~T}N7r5nT_G4dissVgVJ7G^uJE7JS&Icaw87xXZa7*uCGj6}cDS3Q&Vtd$idA#ydt0&A(SWx42_?YAN zu9^Pw)2?>H+xC2-dxzYyPW}{o`AOPNsP*{kH{J&9gz$h5zr(FK+sdcy?1X~PX1AQ< zl)q@_leC>s>j~x~?1b2@g6xFY{Rpuuz|XW3Vi&|tSez^Egv75FC&Et1Th@3uHDk^v zoZ_<+rhh8?O{E{mu;(Tj=D#jOGzHlSORB%uwOrPV_ujfr_QADh3^AXuyw~Lo*a=hP z-hYa8nW51ConKeFk3RDUL#b)=*T~=Xe8S;x&&dv6{dl(-&%CCblRuR6;ywO+DQ@R4 z=k01I{M;@pvVXtlOKVC4_Hu682?t~D!=Ux}%eiSMga>>oPf9*;D|FiUw4a@D%Bo!U z*VDhXrX0YBQ2}mX??d*h$Pu(#4`71s+lnLNt+6hZB_hHa_ z!uh}hKINMwAGnQl*~(A**$M9(?N=N*R6WUFeoQ-IDdzf8ttXrhJm52MgX9CZ!tORc z?Pn)k;+CKF_Bv-MA21Fu?S$!=e6*f$KJb7~^-;+OZl$ekeA>@WDB7Rh3)c-*PqmjH z(@r>WMLau)))USL9`Iot0=L1B+W54eop2qu|F-^K-xx}Jb|`vma%5uK2`h2uOM7}G zpCCISJmAAP32s~ywyT}+Xm|Xxc5!g1>eX*Nu|2HaE8l*H{afZq)anVd6Ea?hk2!Ad zn&K}%?P@1zx*U^C)9fU^&3>NAHV}X{0_IwJFR?Lz)qO#K3am$ z(Pv&cRPf4=pHI?uLais5kFXPBzrs$49Scs_{Rpuuz_r#+DC7|zd7d0)CqoV)@^~L= z<%xZturp$J>``ZO5I?hYBJ7Swoy>DI8g5s&j(HuQ-LZ0~8fX5W3^UKjF!v7`q9@4i zSW)&y!k@gkS@w+kf9cK(lx~A z{^ZS%y1)OXVY?&wL%lKhEq}h0U$TwMBM-}4c7OQqKXhhxv+p=gI$+#q+8wJg*I{Zs z{(8f-JHi7#rC&)taLcdnuh(V2sQv7Y@A*eh_OOc|axwvYsO7Oc=3~x((|UY->ggh)d0iVI&Nj`8ZzG36jes)LE{=9nHADvu4|G>06mSgU7qV6g@cB%dI=BRt?E$5ZYZda4|8P1vq>$NSy! zPxZm)osws_=ZWoM=8|~*w^}`-?;ga5@j86WaeHoWfB9)wyW?MGRNOKDBTm}m!-z-n zN!sqH_4w;I-UjTB@PH4$!>v5S%BKbFj>+y1FZn#{6awnE#O;oro?t%0PKe#gv=hP! zyB{HT1^AhELhORr2~9bLTl{vy`~mU|VR3r!=n0ae6)3S94@cv6MvUyLnLKGyO4@KZ zTXbEYozP54&tGIeD*YcBn!k^AEzb5ld-6U*Cw6V&+TzNtjWA=i6OJV(>hD7T+D)>hkq#NG*=boXd7{x5$Pld5&Zf(>0UzFNi$7 z>A_oussZDG@Z4G79y(@qEv_~c)aeBd^4qm55wJZhb6Yw}rj?azkt0pozi z354GXAFU^x4?N&gd{**-Ti1Y%PxNt`JV$a__(L@GYx3o1)wLr-r2zk2LrH4jCirMQ z;e6l$pY$IkAGlQ(+W17>Eyq36zIV}zzRo1Jw@seUqjNWLaslgL8p!&FZh?>16V3-7 z@ELec@_}3VBpaW|W?aQ*-0n!rvp0j!bf+*ue6*f$KJb7~`F|xJxK)?g`0N(Bg41^P zxNAC^!DlZg9pDGCydaUjqWow*;e6l$pX#3^AGqbNweg8=$JKl~V|Egn!RKJ7#^**Wq6RraqB>>cQoC;eEe=mx)P0-x!ZJJks)KUz;X zA9%p0^n&CAxBMAaJ_+>S;?I*va=%bv-&wHwdZ#==gN1s`+vvY(J!9}uJm539p5z0!jstCcc8T2n zjPglnzxU+J&)rUWg6cP|C!7yF;8Xm!tlvtCThG^Qe0Gl9f1A^{XnAjH(Fyt9F<-SY zZfHjN`GHfNpz)8^6V3-7@X4<$%MaYD7ufjh8oB)Jzhrsel4T2*pE5@7kNvaclhirw zvi*6;Nl#Gyru9fZ(vQ4yANkxX_Yw7=IA0DP@WC$zH#484|EDW*`*YyJ`HT8a>RV*W z9shL`_)Pz$Q})Ww_*2wK4BDSsJ;G8EG*1E^@IeRMxF&3+^Z!KqlhpZtviv-y); z$CQWthW&(1dBjH^`x>Ihlt=!t|E(#H_{iftJoK3I$UpWoH02Q=d7R&d9^`ROCH@lj zt2gBlA9qSg?#77?U^3h|;<9V51YRV%%@+#^)AM}{= z7+*3Ue;uQ~B0loi*BCv>yIy+TRI1$fG_$9{U-a@`#T-_Kigk@~EE~ z4|H8D>nl?p@sY=QRp>z;=|dj-#hUVnk38m$qX&89AM!Y-%9KZZsQV65g&Q%XM`S89{w)&g)-$4 zA9?H_f*w;I^%eUVnevE_JodXlk0}ox>>FarBR=xj9|%3BJn94XxiIAsA9tw>4Mz|1C?BM+e4)L35FdG*SBM_udG(93({`x+!p-y%A9<`BLJ#u1`bEj( zoI+C`@sZb~_NPJ*^33{$^+KjR;vmbpCJn|2DtVgJmr{W{8toC(Ak13D(iuI4CJmMp7 zgz~HOnB|xK1S*c?VfHtOkG%9%vb>=Ou3mj`rIeGo+b)mz$Q!&=%0mxak;gu(xo_I# z5g&O2XG?kLfh+Pj->Gz~T^{j~$2tl0z!iDSvo1Vtmq&c$aef?nOumfwS=VCnB|h@l zXBs`o^PXGT;W+Qllt+Bzji~wnJ;?L8D0%D)ZptG*^4Q-7J;?Lk8{}Ok^Ust=eB@yX zKo9b~_gcwgKcZTB!VcE4mb6P^XBn9yuaRqptuqgLR%(*_zogF9<2f?{cFMiEA!djj zOzR1^Bf|qenGGZ#xS7e3d?LG<6PyR#96p5rKa8*?Ch>uf))USL9`G4>O_p1@nQ4-I zBDKKX$1!+KRSKgN3vAFU^x4?N&gNz3vBH&egl6WPq4;5_K&@F@iF znPO%{#B2CyJ>h)d0iWDd$p>y`G9;hKZp;MdK{tm_Ibb~``}LUlG2UzVXg%S4-~pe) z+L904O#PBiE6js#4xeg3`B4r=Gdsq84Iiy1oDV$U)0L8Z;ASR3@@a*6(9PkK4p>LP zeimkajQ1KoT2DA1c)+K)q2vQMQ@`R9xdEz~#~HJe&>TLwfc_inz0Ld>?=^h1o^U?! zfKT~N*?)tZsbBGl+yK?^i8&9tIean!xVyZe}thpH`R$-5frpfb#P$Gb18i z!$<20=K~M;4E|H{ft#5O#V7IrwWj>UoUGm)KIH&Do0}OC@fto_PdFcVz$f!B$p>y` zG8CW4{e$G@K{tm_HGt2%&5Ve64Iizime0z4%zX&p0iS_&o*td24mUFyl20qlgKiF= zOu+awy2a6-gYeOMYWbw<_rp{?;FH-&@`0OQdMc&LPvrhva`T{@!>1I`zkZLI5fQK9 zqxFRIfd_m#Hj;cOM`ki4pH`R$E%_uh51Qx91(ct?xFKc;AFW6737Q8D5BQ)SZd?;e zKCLhhdiJRQCuu%;j}K3rYzUuPJz?{pM>dh=1wMl*c^#B0wO`!sQ9B56R~PDZCA%LP zatjm0r&dqxNXzUWzym(zsge)eNH-yTqBcO1Pv<=3MGu?9C++Qn6Fp^NF)2T_dcyd? z13q2rOFnQjb-^d90YULO)Ra5^>*nyuOc0-1Jz;#{0iV(ak`LU>d{cb7qV_ixpM6ca zs{8DI_jXgb5c9)G-LE1GDIkJ)qV=kTs@kO+V8~Q=|BGc36VZNxmj|5 z(?j#U^ZS;HT}}^M+85JPA!M(-b*p$ER=P3B-}T(TYqHam#k@Q3ifKF-gr`K%4p))$JpKB_ty99 z!#^|KV_lcN6wdqg-R^N7IrGEr9>$xw|2nfl`xx&$mZFHi3;q9EJkL$Tlx~@hXo3Xy zwcV&Z?+W)F5bwrXsZB@UW${k%4)9JC=E--0ccrk+{r!Iwk<{nL+aKTKUuUFJy6zv{ zrJA1`4o73{xYO=Y`{+~a&cK`Gdnc;v$~rwiO@@V!$}qj9zpl@0Y;R+8XUevwsKUqA zd4KlsSLeHHtmPSaLGQ$}hI3$iHwyhv&U(80>#tqo9RBKu-E@eLJ_GNubq;WU|E>GJ zhJVC6akR^m{Gm^np6Sn*fiHZ{$6ea=qFN->-mj@e?*HO`l0748%QwE8{nybSaSC3Y zQ1i08No7u5=A3DRJGc#0@gm&^8PAi5eBaoOp!N9s0H)0d9`NaThvWmd+|4#VQA<-Q zrF)O#c`Dnz$@1BKn;WwKcg0MnTMlz~?QRS%P zY#X0lqYim%_|UEIU$DTI{bPQYET0#zJvaODqxN(%XVRuZL?#3q^We6dj+URUo8pxp zt;ffw&gTaY_;l45L|=ET4D(e13M)$=yymfX_7bzGVKO z>Nhpk8uK+WZlHeCdcyg@13tOUBpc{!&l66a-OZg zUw$@G`JDcfsqI3IYxr)y8i2X2LPYsqI3IYxr?S1|1Gjv^$|rLFK-ywE_v<}&dH>S- zOdrQL$?{q0)^B&8^ChPgz=tzfGu?k3EkBu?!vuiE(RLU(f< z`6+Kzd=BnExi21`RI+?_aQg>e|NePSE?|86VfCcNPfI=nG5Kgcem<^s-d(;_&SF1+ z2YfoFOFnQLc+koxa{uj+zQw%@mn>XzTx_?JN z+!C++Xg!jTe@%?uyAmGo8Q4Ygfm?C4l~3gQP4n4r;iBbn%22X=UUJ8$cmMb@rxegX zz+y7+Zpo*5V>~`ukB?8?-lFh;4|YnpmGd?}Gb5LuB=>$5{kNpbPnT=o`P}wbIi-N{ z&j(cb=~z#dAGMc?`nutO@u}8R%g3_!tFjxz2Ssq>no!M2jokhux%X?5e717!qfgDb z#>t&d|BWZMhv`-E%1^BxF%nkwTV46Vo)4e&6j{HKs=~eg@}uT7%!mp|&N)GPoG{tF ztzWNnbl!tSzv9W~{YAFapiA4tjc58&bPQGOS=4cuo89rLi7=h)zC)qhcqWnCv;u5Fo&DrwvVMJazBpE(hkDpJi|3~bxjQ^26obW@E-}r3_ z@e5JDYUff2dBjH^a?pbuLgev2)XEcnWBkPUjYnolzcKMg4sEXAII8cx-fukF=Qplw zD%+8AmkdkW$}lt8-@XL-jeFGIapfyyJ1G3Nx#xZ`rr$W~+zL1bh4_tg$NtgD9eY!3 zzcKkky)m+nKVQ1O<*zr|*>BwO?wg%zz_`!!8&_lcRkWVqdPDg2;Q^n)%_SeWb=+g) z6SY=vZNKqVJKy4@1MFJV^7xH2Y7fMqauoDE{UWW$$EVJ33=jBZ-YxmSt#ZDNPkZ`} zv&Gw-azMX`emZ{R!LP*|S7<#xK6QR$c)%w=Tk?V1$bB|G?ddn(YTG-VbU?qT&To8K zJU&`aI3IYxr?9c)1GnlLE1$@AlUDW{=e~BgQw=CTrr)?4bKa8H6V3-7@Tu-9`M|Bm zvGHk7zj1fvyG|y+uC=vlQ1BafTp6$YXg%S4-~pemZ6qJKb$#B(r#=0~*M0E;ryS6K zGyTTt+vD-kdcyg@13twqBpHC1=Mxm@-+v zr0^RryZN_HKA?YK`i(ncj(@Zs$p^oHY#FrQ7#{E`Z!P)2ZDegLpUCx_=F@t9<9Rzi z?GysWKUhrg8<)QluYS{de0=KsUhwevC_5$G2L5C1A4D!ct?V~`{fcLtYC!oh{l?{( z^J27~T0ZrDW9-K8q2~oRt_j=OZ#?jgKR9Wxf6Wuy!;zSN{aQW3wio0##-0zK+=pfT zMyjf>`O8l``;9+Xy~8O5^xtS7lJXmCJ!bzv<~)95c)$n03*5S@Rz7X%H_kn`#wi5U zZ%O-&wVrT3@PH5H25uei_V*7|`DshP@xtF%oP0p}VMLyk-&pJM^D+I#_#g4};)jG2 zep^EPLX@vsKdJKKpPt<%AGl>sw((&U6wE*9 z7wuOGx}(wWlbvsW_vOXxp1=Hkw%p))tVk58T77#{E$+*k5}Tlz;fKJDi>-r$=@X17@HN7-~h z`7!;*m22XaAFU^x4?N(L-%j#@+rZ^kK9L(BUB9)~dgJ%qzeo0j4R6mD0{X3We&eg- z@zHw1`M?7{=>sGmxK(bn@o7K5@v^UO45br zrr$V!ZM^nJ>j~!r5BQ86F8RQ%e6@{F`}vJK-TuJ?dt5&|*P!3HqZE&i*5l`6`icbk?sn{81)g{DZ{=zi}~U|61$u@u~A0!vj85Wv7H& z{yR24?YG|e9@oBe*S;@4SPJMLn117tnEf}cr-xwb7p{E5mt_j=KZ+wkwA1yrA zwWi>;KRmHL9I4q8+J1-qTh?vV>Iw53W6y_A`5;-pA-#Hqzx=eT-}uQRe%bxc*PLuF zpnju$NXl=l^_cwwne+G;-~k`}E^w=S*UG2u{Kmp(^URh9XUhThgQWe&T2DA1c)*8p z1GmAiS^2bp-#Fp*;BNUTzjtU>KA`+CB2Ub3?CJ6IG5yB)AMx{6)xO7Y!f#86UkHA+ zeqP}>CO-1;YoZ4^gvjGPG35~-d87+H$RR`?<-b;*@I&Kw#t%Jku=GO{zx3JW`k}>s z@lifgKQt*NpXE(e)voRHLw6h|+okfAGVC~BhNWx#?Ny*3`YbtKD5!9|-|d)P@5tMS z#_~hQ+krngCxrf6pZZ<*xp%(L*(GqR@O)eoZgqd%q}nlm``9gY3v^|L%Z!S#^vL&F0;`5yHitM@ux zvhiV5)mWNp@6vvn+Ha%$ova`F*h_B7p0&dULzw_O8MIix+;L94alY2$<5TB{h6j9d zpO$>!)^oazPy6|yH=lBG_N5~;Lm6*=D@5eGWBQ>BareFU^!WJH`Jv$fpY)}Y58OJg zv+-#^KlF*Wo|tt8=MEJD`oX3jdL-uhF|8+@4?N(L|BB=Tw~>A;pU8GhUB9)KANs6& zK9PO*Jp)6f06wN4x>AT&ziB<;eBc3}-1(9Z+%i9~@o7Il^lz`;EBmh2s81;_7-_@#qXu)UA-+nSw2q-_MA37Iv{|v1soDV$UQ(7tc zz^!zql}}_pO{@B$D{lSv{&W63R1PRVrXRWzv;U^`g!6$1dbE`Q}jOT=pIH*Kg+fW5KBgbKYjwQ#N9&P%@H5C3L;IoO0iWuzk`LT6mst5kuHQ7D*78GlxZ~5y zveTSg03R$S_@VPL*OzNOK0bARXn4Q}J0;w@iZ(v&=ZBu}+IL>sU<)T7z{m7MS8t71 zezcxiKJ|WRc)*7q8Qi!gY*#<@{;qxWFSFk32YWtz z%3qZA8>uQ>?=L^?>W6;l@LzXt@{R5fvo*!EAfDe8bxQ%?p z%BSu8(86c4{*gZ%DqLXale8aN>j~!r5BN}SC`Y*qt$bR*51s73*P{HCZ(iT27VLZ& zktgMc)_VMW>ip2k?}(olKO~&++Y;i>qkPr+d4(UE_{j6*C_Ts_L>})$tvum3#!rmj zxZ^X@Z%q8c+RgPF!-eN)G~BN4yyPi9zj4>qvK{HTR)*NghWCI8@(zdB{FU*sQ`n||X$OuN0-6I^cyzcD=ElUpkJz^(F%jSr)salTyc?b@$0 z{_;Ww_vv^#1&K0bARV|c))<4nm1Zn<~(_YG0wim26H z4WHIKFZnMU{L`rhlpoV?JQ#C*h1TQaQ|C8^2Yd>vBpUd~I-sB<3tWqRx@=EZ0|;e6l$pONb%AGi%pwepESvm!});vZEICDJil?weXq5i zG59DR@af7+K5(l(XXDd;eq(VS?^jQmGMo>n-%P)8M@+xI))USL9`MOrr1&UqnQd(K zTjcIROP`l~;4|srOn}|Q^c$CBo?D{zg!6$1e9{Aw58Nv2TKPowtF)@$Se%#qpBd{9 zmjd{he&d0d`!i@g;e6l$pOLdAAGnpCx7Ba$=QkGTC7(2Rqv1k8{bu@&i!uGiT92QP z={JT4do?7(wfx57yyX9UV$;T< z@*8VCX8%CuJbq(%zz4qz+{)Yg+aJZJ?fk~#yyTO1Sa&$>l^-nDGQX1c8*4q`eBc2e z$_?Cl-msRRw(}c{^0Uqz?;I`!%v)kao|NBM>+$n3{l@qo@$=$`gcE*SLi|FMuUbE^ z@Ea2!dB{NzatM*f`%o)S_>J)s<2NpRMEZ@1-}A`#edk8y5BS2pue$N(_0RA7*wX$L zCyX|jq@wX~G;U|a$gY~nlP0C4Pwy?&w5;Rv8=EO9UM$;{!DasT#k?=*`t{xJaju>6 z^X!RTTexd_%h^;ae@B4^8tSSI`t91fREM_&Icaw8Thi~1Gm9# zZG58EZYjm5FXGeHMoXU0Baf^mrn%yb){$Yw{yCy7~I$@5vT zVAYyZK)<#2&4}|inW37B5`@L$)Ps~n2Gx&@Ql_#iwp!J0Ffd_o5 zr>gR!%2D|4qjNWL@)OiQ(0ao8zym(Tqa+`=b$!mpXOATM z2WpDUlGK7oU4>@wneL<~h>zA2&Icaw8N5mIfm?Brl}{4=1I1^V%O^@#p&5MkatagF zf75!x`M?7{nXgGca4Q{U<&#AJK=J8w`9$d|G=tB5~@eV$VaSQju3)SydnT z)Y^GVV*UX<;8Xgh9pk^2WV_MMoJn!soJ51i5j^{=&_a6a&WPtP5a z58N`hTKPooAM88-xW3LAow9Qss}MDT&+3Pq>IAhvT2DA1c)+LY8jEMr(GrRNwbm2P2OjY0xJ&YZTj^RGpPeK3-{gM4i%!V* zS`t65ubRMT^;1q}g8Xw@PdFcVz$f1?`M|Assg2KWk^2YAs59>IeLcD+@R|M>r#wOZ z1Fa{V4?N&gxLfjpTmD2FpWP$(uN9wz`%ms0kNKq@PpS!gR=?t;C#Zj|_4xUi>pI~9 zpOJecAGnpzu<_X=a{1BYpZMzrleWJtnEtwxnV|MZ>ydnd>~HXZPyRm12X3X~ZG3i( zTz>Xnvb=A}vW3e}v6P7MeI?6JlJ>WmzjF8Gn4tDY>#5~azitp7@L}Bm+{`>v^W!6T z;0|0ke^K8_eTz)Fn=hXE+>aNFG|7}?>B=o;<`d)KVsplP;4u3*lcyo(6FTC01{vQ4j+(*}=sQjV4 zWmbge6YF$mM(k0RJzwR%K-$j7wT!2>?I?@B(r z*Tf_A_(ZhWNj{zPkQY5np3kFmPjt$jy)HaurK{rcsnrw42OjXL{z&qHo0&?FPehBI z;&Z4ecl_7M^I0(cEGN?-pTU^>tkmiW;{y-)bo^fOft#6c9-oL7A;o83Q||b$o4{xF z#ZJzfuMnQ1Ld^41YW0Nifd_obuSh;{GgImDi8x|Xe2y^Xj{mv|e5MzjYJ=scC+0pL zwR*z%zym%5zma_4mixQkp9i0vBK8lu`xhUxa7o|%_!jRb@L7Gclk@o0=34#RlZ$zN ziq>P=gQPC{Z}5Om?q`w@+^U;c_wkq!b*D*b1!_?~)4$>t$X3F89~kB_pmz|EhkRLUzq5&PGY zPXgVyX7HK*TPJf#V|+?6_c5&16Us;NfDb(2#x-Fp*;7UPlaxJGwm*Lua~~b@A!;c4 zWnw?4+YN(nVpruHANCjFJfPbBoP<2$Baidr(PPSEJ#yibvc5Fs5g&P+ z2aFz5o;N@2({_2pM_y6wgO46l9{zsL0XEY|eB`Asl=+DsyG~=~JO8kNoS}(=Lzr$jhjGyU~NZ z!aSLO?9Wlz)Gm+s$SbOIT+n06^Vak3W0yyKdFtFK^dOJ=1$iBN2gpX(YrW6EQGTkd?j zJmMpda~9BpJf0VM#Tj;a#7ACUo!fvOfm~WZ?iamYA zM_z|I_X9o1<9U&n+srPH_{hsEdFVkN?;r9C8{6d(A9fkXPQ?E|2)gtK1~h zhaTjSf5>BhX!CiAkGza}Ui2W3{9`^`PoGSmS^p6qd1ZAj1A350{voflm;HH(k37zK zKo9cBKjam+u*)Mp@;H|OJ;)>fkjMEBX8sW$d8Jz<5A>Mwn6Jip1g1RVBX2vzHmMS^5Dz-KF*alKY z{=CFT9_J#U2YK*7UL|XnM||XQ4j_7vNB$v?^AODECB7$*_eI$~OnIyy=ls7qc`82g zx>S9S9^~=7>=!V&x&3*GkGul%lpf^4gZ&|T-eH$VeB@QHQ{_#`MIP@9`+?+p?DB|@ zyu$TT9(s^BGE0u%*gv-LLAyNSBd<%zLysws{pL!C*yRx)dF9(w`jlK#9{bbu>~5Dw zeB@QsITGkG<*^UJ$l+3++5QqAdDW|B`p{#_V|-N1+0#dSD|CNBx)im|Y(6k%vDRJ*GVRrvo3i z%OgJW@L!^bdVqPH<%6Ug{J>^?N_^xopA9{xysl43dH5|&dBjH^^RLij%BvhHeKJxH?qQ`4@)js~5BfvZiQy%e=hrbRzX8v*hJbq789`TWfe+fNi{-vkL=fzKF z$|FAV@Q0ws%)i`+r9Avfraa<%@|6DzJ!bxKZUTOgI(aHS@txfDNRt@kgLTF4DC zLt%H_*p;F6gwJz<2YkAQB_Ft%$x(dFuN%Hj?p%ZB@X23c=i{f<@Z;9q2p_E{oDV$U zll!ye12S!RljaNQg})i2xmtQ8@JwkYt?dcyg@13rU)k$m80>X3XQ zPI7UDNj}kc8`9}%4xdaw`I({>$NCFCT2DA1c)%y~eaQ!IW@03th?87gVUo|urq~GA z&EZqH%wB%v*-a6WX+(jK))USL9`NZ|Bl*D15T8=*PYaxD&>TML06xc?84>XsK3Y#W zA9%p0@QmaGH!~TEPvi!uX5XQhhaWYEPsW?a=kF10U}i+bYxrnA;e6l$pYjuu58TXT zC_a%Jpc+0gI|Q3C-b? z3n)LEm>CiA8a`Uj7vE0nGq4M;iL70 z^MMC^iq9)Pikq1X#is?%HE0f>azOujv6&GOui>Nhg!6$1eDeR1eBfp#L-J{ba}Aor z=Sq9~^I0<^B3^rZJU!uj-~pe(LCFVhW-=6?B>D$xi>RpQ8Z?Jb)yp@3|1GI)NZ_OO zg!6$1e5#L2K5z@*lSKbO@rin_L38+|1M0V4Gb18i!$<20=K~M;^i(7txS7dNy`GF1Pd1ZA9`#`TtC~pMDcOqoNrw}s!`J`D9F^}P+^+fZ52Yl-P z5I%4-i=p_$whv4`@tp|S@X3ex4-PgfBIYrCw4P`_@PJR{I@NwuJ2H!*_{6pkOg{0Q z2-)x{yYJEZ?dwmQ6%q3oK3Y#SA9%oL>;>TiH?tVRXDaM#AbiqV$ARlCgxGKY#t8{i z_-H-C2eIZl4)B0a^;g0NZsa3XeCBf8YU=TiCfwH`8$QL5_OorP7aDRte6*fuKJb9g z$eqFmZl)T=C$@c%-o6Ie@X3eR*KaW^BIYrCv>q>?wR@TE2OjV#z9f9$W)?&E#9kIR zm)^bx+3=}{^lvejmr`M?7{BQFadxS7Qe zK2u>|gKYTJL;Rx$m=zK87(QB$myhG$asJi1o%5Xez3_m~*lofGZe}rr&s5mgK=`EX zf2)VIpF_-whm_d>Z|u@PH3$;l?qk@YyN00hivs276D;k59Y(lwA9bD^53sk5`Z5sZj05?%SM? zZa?FXN_&A%$1QR!=QaMHb<$q@b=GBHgS7nz)k)&x)#LRfnf5h2;FG^s_`uC1 zK}c_%^=$amUHjU+@^p@AKVCgieBc3}(yhV=Zf2=mJ~2HA>8-P#4WIHP@$u@3;sX!( zR38#Pa0}%VbA+1SI_uf+sk-qW^UBjXru}&JMDc+KdP59}Y z@hLpu)A6kEft#5RKCk^c>)G(By6wk%SLbraniUcA7(QB$pHGARrg*@o>uJ@$sdi)* z13s_)I_uf+sZEl7?bYMG6HGqvfKT-q;X^wLQk9k4H}w zA9%oL_y*wvH?vG``-y2^r?<{}Hhju%|7Ko!I>+$w>WSh55BN|DxN%JC@`-6*r?<{} zHhl7)`=PY|C)OLDop>>tX7$`jAp=_>o5b6$NXIj+u>)GXVgC0{(@!2LRv znS9_t|B-!zgPopP1&fdA?;k34s>!<(+a%_e9l#Ab^%5}nOawktq|B`a$ANSvH-gR`=+G;qDa+&8lB{{BdU~ol$ve$GA z?s&nG*!Xd{IRBjba`p@Lp6}Gw=N#M(|Q|?FYFKJio(>lIX+85{LKXYyWW1h^VeT{uuCmjEr-Fzzhw8qSAtC?=M z7FiqMRX4=+rysm^FaDV&DR2Jpvrap&9U<-A{Cz{mFYfv?>zs}6>^`<@yVqo&R!6_H zhi`7)#_OGOnB{$O*PqzGFWKOJ6b|>p?Rua-c>Y&%Qa{KYp1ah?UB!21$28A!@?b)G zl2rDsPAh)k)ah+sE_c^M=1(OlsW-1v@6P&1T93cKH^(>dfKPt9@PXU-%0NC|l`Z|P z42NW$=7h%d`P_b6S9jj^e|kEjmaZ`RWcX-3(R|W&J}Er7)8}*BZJW(2Oj7@* z^+fZ52Yh-q5k7Dm83^JNbMUF#&+*N)kmz&L=d*nIxi=MEdo$biqxD4dfd_oXwh}&Y zs~-`>XQwH!{!#jT=FZ)Iv@}V4w4P`_@PJS4b;1X39sd!?C-wu#<4H(pBV@s6&1f-X z{$X@mZvI#71Fa{T4?N)0^?Kn0xBAY3d}2RH32lTd_}np?cm31Z^3i&t`M?7{9h(UsxOE*B$S3CPf;87Z z%7V}MXl;`CXg$$<-~pfUHwquPb?qL=X9}!;ls=!^_uI;8R-zcJiuy9M$|!#+s3{!tcu4z$XXWM6AN(R|=f76$$-zgo2~l!lfy^riRJ?j_!P>*2X13~ z2l1H`+dfEdeVq*W%)Hww|M%qZ(R!l!zym(xD})c+I(7)+GZog?$$-zg2d&!Klfy^r ziRJ?j_>A-mAGnp~1@V~*>+58|XXan5!gnTzkJjVo)3Cmd;^Fe?5k7G1*)@pIR9Ig} z_@wFIS-$RHR_WZy;iL5kpD_QZG`Yi50^60*yPpudj zTGP9-MR}8Tx-#Q(m-g+IK1_vcQ`<@9?^^6FHp<(|kj zYxZtCx0+F%ziED&{mz5)c||q(X*u3?aMG@2(*M?vQ~mH-NypBWREf#u-xU1*SnZJ8JTClF%kK`!{E>|M5mfM`Y(E6aQ?;5uN?jCCLdStJKSKGMLwrI zxkvXW{_{TfnD5Qh;qJWeK>g6(@`w8CrF3vme;C^wci(qN-X0d%Z@Ns&rR8tf{(I+l z-*M4`?plbyf&DgzU;mGLceHP~j-TlF>&&{1I>z6i_4w@x)87CO_zbTRK5#3&FNjb4 z)l>C+tf;GK=C^eDTyp=(-FyCar|w#ay~pgVk?n*}*X0TMxO#ki_R7tB+s*dBg|r`d zz^8no@PS+P!$Ev@NyA?!@zz}b^5xCoXgDWbJ_D~itosW;+qyd+V(;Mq>l*+2MEj}y zA{ig8$H%8(Jzsdhr!pXX;5PRDAU-?A?%;I$=}hcTO|yU7>Y)#Jf92KR?Oh1*2eF@H z^?BhlmazS3J<)vN0iT{;;RCmk1wnk~#%@18e`-UUXyuD^+t2b{-_?E3%%Q!@A^wK# zRnf*@7Cz%wCTl-hPc$ERz^CvT;RCnIM}zppU5zJ~sy{W&_VeCT{;hlcPdnxnL-??t z@c3U;|8`X}K3Y#SA9%p0>+`|~ZuyS|@rm7ha^g>2aa3ujm9`ReZo2Kq;j`uQAH1m$ z^8A^hicr{C?1OqjK3Y#SA9%p0@Lk~px8Z#Q`NWR5s!3Q2dygFI9|)@UroT&WSt95BTJVgb&>69}nWQGv-XwwaJN!&w>5N_a(!V zOP9}Y#03|LO<3jOIi5d`OkB_MAL_$_ec^tw;ET`BUKmAN(wEt9~MoPwf6p z^I5oJPdQ=#ruF#vG^~dW5BP8+!>#iD zAU<1_k@L?#d(-Y}h<#1}Q-4PKH|nR=6#tvn zV?KXGBK{qCzz4rE+{%{+^4U4Ag+0Ijm?KuK>RZ-1u`pb#SLZ!H-FU0xbKc?huijV+ z>EAw}RCl~j+K;y+t^5rittXlfJm7;axD{^?f8! z;eM>WCmlXokDrg%f8AwQD)EzJ?C#d-aVsjGLVXi=BE_!_KZ)(gdSZ?|@*|J940@15 ziahQUQy%$|N4e0098%=b{=M=ZwJ(sk8F93+BPEVT{#tjoaWrRbwK$)~INEey9Ibes zJeNkkB5CDRNjtvne_n;f(S}w0Z0tN4Hypav8@vDX)<2JKD2|qJQH9W|aP%L1^1%G3 zPn&D~>8)S4%i(-<9PQApcJ1DA^xmf9Xw(n=P}ev8^)hy=zaNry!(y9RQ#Ouv+RxAJ z{=lNsN6VGqc^_sRZA7hCDfQp{|9MVmJ>mV(;dZ-(2Yl*Fg%8|Dt_k83_bK6hZ@&3! z3O+O4asJj%eyMx#=ieDEhdjrfKHB*ZN6U{S8|Q01K0Xa`G>HCkY?8RZk4!(|&QZC#LVxJ^Q=Y zj+R2kDP|mP{D%qoxO$@bzym(jF9;vFjh__6r~Tq+dmj3>?yl|b87+kP$+nm7Ek_)! zCm|oLCz=mD;8Qz6_`t1nWe}hCi=(~zqb<6>^}ydo^X~f`JaGh!8AlttHd*`8dZPKj z13u&55k7DmzBh;uqbhY%wUA8JIGV#}yARE<>LGqIGmh4kkdM|A%?BRvDV`#H;8s5~ zkWXws^HhzaIsIGhjaypz5c|N4qYYn|u>H7tqWQoBK0WJ%58P@u1@URWI9lDd5B9t5 ztyaygH-G+_?9kmpa@aWt(bnh!kSL%V@n={JFVra&Am-F>f|_A`Cp z-BvMV{KJSZtvH(2(TJZAry`C5C*n?|__b+Y-Z+&LMN!K6BV9j~w0fze<)8SUFJW=7!uj(2 z8&>H(o4l+0#RGn7Z7A*)e;uRf3UKsa^`+zIzj)`J){A#m>~c6C9rwCtlYP5?Kks)< z$GxZ@`i{hME$EP9g z1rPX?&JjLv8@VuuPy5BaZhZI3?&Gihu2l?~zhcI{h7-oUv>qRyhPW3z;4^Z*@PXUd zSAzJoU)*cyc(MDA%P+P{A$E}&_bMgyn`k}JeBc3}%7wxQZnaB;__SZ#>#Bohcb|F2 zrB*d0uCl%AVu^bd68eR;o@hSsfKUE=!Ut~UF9-2yzqr?$i{9OR)T@_U<&gGc#=VLO z-;dRLqWQoBKEvM^K5#3RgZMBC3VLowe>YX*UJjo#F1*Idhs=vH<6gCd_JP(D%?BRv zsb4I7;8wURkWXyC@KlX^IsM!6EpM=@A??SEd*v@nX1{4Y(R|9NRy}0=W5&J46V5Bsdi;FMxEDO&Q@cd?z-{EzKt633_qxfpuTT7Q&8mjj z*Jj+SlrXNM^#~vQ&hm87aW8nl$Mv(Qc2v1LkWcLXZK}q-?zG3J-}&KfRx!kWV?<8e ztD11$lGfwn(-8N92Yh(C!>#MvL44XT?zOM&-&rx^POB8c$BcUwf12$1qxE?CG{(K~ zN5ZG$$I`#SseXf>PrJsw*7qGX|Cxs`w8|m=9r~ZN;$B*h`TUWZC+-Cg_~18&TgR6I z`Ltc!Yr^Mzz*SZ?giqRWFRdq<4?N&QyMbHb>w$dQF7D;DpBbaKSmluZjS*j3aWAdM z&&P~=5kDbLMH~fA#GOd-Ytz2GaVjV7MSkQV2R+CkMIQHqSKh??UMkK-+^g0naWC@M z56w321sATP*|ah4wUICGHGY{qN5=jjY4s*aJAUtfzJ$fSIxdjs--t?`xYNH~@b?YI zy^e480$MzexYwp?UD}@i-D&Gj=)1Gm!GxHBywUG8>#=S;K>aCmT#J#Hj{68xn;ukjKUZsTZ>uWvHeBc3}(k;RVZe3O&pV)rksT}t@ z@vs-IQb_wT<6d0}-zU;~qWQoBJ|kBNAGqaz5X7fF<6akDkXv60X+LJ%t0!SxQtR>a zG2>qFfKUB8;RCnA_X7E}W!&qwx6D{y3*lqNy{ZYEK~UOoYFFXfMf&v0G(H#ilq_Va1yxYuSoK4O)>7tDwLC$+ejtH*r) zNX--Xf(Lx?8{afm1p?qY~x|{q@rIMSs81&T+3L zFMrsohV<)Z+$(>5GQYjn6W(t)aW8nlr|WmZ2X0+I4&oEHHBIff*ZAdoS*44D`*kz! zRZh5$k=Enm(-8N92Yf~zQ+!lAs{SO1PkY9_3cG*Qs{J6Cj~Vx>Bpml?Jw84SaW8nl zXZ#`I1Gn)jg7~y&-0S`wK4Dc|d!H5~4ZRv5WiMK+$-U{3#})b4?N&g{G;%J z+juRIPi(*NRE~R{^z@gkLI@u-?o~_pKC9Lf%?BRvsofxa;8uJwh);XQz4p2Lt5*Gj z;OCDS_v%R4ezYDxA2aR+5BLmUD}3Nq*zxfG$2_Ktj8AuN%edEhw|v7Yh1l0-+^djq zJq4{t_~3VzCx(uD!2>=e%ul)I&RzAePW5&ID62`r>9xtE9xEKCN_>BKb`ZqWgANTWV z=eSqr+K*ZFkp7MSC#|@b)?+?@q~?ix!2>?{jp0^%yT5-^eA+VZHGA1=s}|CJ(vEv+ zJ<)vN0Uz28+=l-a*nZkF?$vqm*R66$`(ebFR@_VL@$)g`Uc^s`QxQjj6LBX}{MxiH zZ=A}BdyyY`$UzTsNRh|=;FagZy@+!W_Zm4$;$GyhZ0e7DmG=MqmCxGw7WFUd`{+Rb zn$^h``_e!9R2V7#GD1W+|`zp!>{|DcW<@eop*o8{yq9bzfS$oZ;ad; zT~9oB=VHi3t7-T(&3!tj<)-DzTlBd1;o|-ykM0{pN#_fD z^mvACjedK@13uL;;R82cq3i>f4;`I(!Um3oPv@cyoYut8>8^8#!h)yX_%0}|jwXvs zdi6x{fd_mFw+o-JcI5IQ5ENASi0>4i#Sy18`BOH0O747<=wgiAm5h&9PZS?`z^C$O z;R83blrEo`o)g7qA5(7Y$Jy{Hx^`=HiK@3H;AWQ6v0o?S zlG}c~wbsb0mT;eSt;avEKoj;`Uh#lW{T|^1w|qx1pSY39H1~;4ozKiOta6il>Pgq3 zboKc8c*lLtyd`+RXZUW#M{$EEDgE2dG273?u0&~=Z@Fyxw_=m_Ti5zz{hL>hx22kV z-~peG{}n!PgA1w4C#HQZd{Qvqvf|U^^QUxELOvcnQGDP5pZXKR2X1g7b@{}!uZ2$v z=37R5YHnPGD-KS}3GD-~o+v)>fDe8axS6GM`NXuZg-;6RTSk2HP4X$-oUHwL^+fT3 z2YlcGH;ze{F6|p0>RYvJ=~BLVZPHg?oo9P@rsYc8n*NrW4J*K>_*NZ&%STW_1 zA9<`gtc|36ywhdMBR}$3lLI}byy~VRkF~W-dE`eP zYZ#%&l*je57KbU1{K#W35cHVx$|Y$ZtX;H;>Uro7$d5ecnxhAK+%L#u4-iux`H?rS z)>1|f@@Q|!V~)8gkNn6RQ}2?X2YKv;hP<9(xo%S)`H{!mVDy;simOBpdzG8=$d5eM z*g+5SxL)KjC)kune&qG2`a=)$xSx^NrPkIl<&htG1vOV4J+8c7>GwO1lItBiDY*W~ z@5)niL(zjgt`~XCQ8&xSUMa|94Jq^>kNXdK>~UhsBR}%kBNaW!qyCV`+EJ!F@*|JA zNa%6psrnn~k$PiKTT>qSk;hur=s_O!hdkzvnexbwJk|(65Avu#fIRhAdmV(9&?Dz@{u2Ttnq^$ zE>Rkr(nDWL~Nd2)EjVX`($Ybs>dXUHU zB9A>COnKx-9(%5%2YK*79&?6GdE`ePdxWD0dGzn)1kxJoaut5AxtKqU15> z)|5wnNuBX2~F7tn(|>JNFWg=5MiKl0eC4?U*5v6WJ9tSxHF zBR}$Z7Zg3n<9dr*i@nPpeWpC}Bd@0BzM}_u@F;C5@^}Z-lt+H#b*R1X(1Sd;KX{|a zt1k_{U&xQVuFJ&-h92aNFBN;JytyjhvS4}SM_xt6bkJkU>)Ax)R-@f%EKNnpBP*|@*}UJ)<{N= zDGz(CG7v0}{K%^-dFV0a(VzD82FoKq^19UCvgk48F@7t2CRiT%kvFVjwCFMAVIOpT zK3E?4kylpbLysws=Vjr$!ScwDyn-qpdQ5rrR~=srmPdZ%5tBwwgFIzF*N+R9M}FiH zLq!km79VH*G?7Cr+U#G*k38nop~sXrcCM1AVyC7&@*|HqVCXUBjjt7X%%wBi8~KsP zoF(+o?{U5CNzU9aQy%$|#~d5<&@Us8xxdU+GUbsUdCUnx56=zcv3CS>YfO3MM;>CtcX*@fIN<0ZcF=ntw((LoNCS;fCqePe-}P*BOj^a!(q#*n!6S| zwxbnh!zb^?dYs6I{`imd_pSZ~AFU^v4?N&gxLWwY&D1Y^VovO^g(*IRrrg$#v*A;6 z=ic~<%xJxUfjQu#^+fZ52YjkesrIAVk*P%Z#O>W&K5;{5i)8&A$;74 zKxT!scnqJqt0$TdJm53(yzqgWsb2Ak+r4@AI_pemBV@y;>du+<_itO76%q3oK3Y#S zA9%ng{|n&*H?tUuPs}%WylZlHCbSW<;ZqK=ueUZUBIYrCw4P`_@PJR@Md1TCvlxoc z?6`nD{hKVmm5cir%7~BK@A%u#F=j=?Ja+lGdZPKj13uMFE_=wC?*})t7{X`wH0%Sl zJld+<@>r%qHhiifYc?EeRz%EW_-H-ReBc3}%1hFI;AR#>@kzrzP<#e$K5$MDg5qWQoBKJ}b>{-}0j z7DL$wJH?%guh*=bc#Fpr-@>u*sc&q)8#1x>$HLwthx!LvkjAO`kmpZ7CnQYaqxA?M z|M*I;DF_ev^h_5%a5IY|e7a)W2L_*5mVuNh8$P9w_OsZmh?vLl(R#dm0@kckJm6EC zA$;Iw7DMrgZ6BC?;#dY*@~MW5e?DneM9gFOXg$$<-~pemjfD^G$Sj896Wcy8`NXjd zvgA_;u@4S5Dmr z`M?7{<<|=zxS7QeK67F}e?0z!{dp!OyMmZXVZQPA^lt2@q~Fv@X>m_d~ywI>%jv)W19;fxS8@* z`-yEI$es}^SCLr0w4+ zhdh4{X}(~QXTnG85k6u59eBV8;c(-aRQT)?yZwA@mA$gd;EJIW5EwhnhEFww&mOVM z>CXrst;fr!(Z5sth_n~@bj_7xzf^t1+D5Pa+Q{>AuWm6t^|g^}E+2i(Y5oNtuO4qC z!?dsA0iWSFtNu-KGt1`ki8(@5^Ai`Da$7&nhEIKx_;~e1@qq_?YDM7#H?!VcJ~2nA zicbpe;B5F5-TA%dm8Ww|`|;|D;sX!(bi7mez|Aa`%O~atNb%Xnl-v4oHhfBx#K)^A ziVr;CQ`<@Sz|E{TmrqO!LGd}*l-v4oHhhZi_^0&}HIu__KOQ|%eBc3}>c@o-+)SPD zdF|Im&W2C<(%?Pw;>SV!H3%QAN9;HMS@zzXYWxEa_*Ax5?MJmEGar0j`?Znx&cuGJ zSA+Q+YgRIzl+kRr&*TN?S^DQGjRrmSB6{nlhzj^fp@maJam%GdUp}te) z31`0bD*K;vUTv-%mkW}brCYS*izghopNdO&9yri{WZ&RmrzdK?_?Z6wp;G6>o@TkF z2kaNJ3zwtI`{{V}?1^%CzjOXBKK1kiPWkv0=gAtui%Y%B`UV!+JFhJn=u5%4>N@a* z`Hyb1pH+LWth>{7yrg4y$of2$8}wS$PI2t&Yw6Ql;Y2%(NpSSN%zJf9-H_{yFvK?D6M4->J(vvu4klt$tr?r<9X&+h0w5 zxE?3ZiovC8Rt*mI9hE{(ymwwyt+c#7w3&{bdYcF?$W+`E%1rH zWWw>!+0Cc2w_?o9wwmd7Yms-Gn_CNfe0yon`T6nM^|oV&TPIK7YxLNz?d-L{Cx356 zNB@3%oi>`w-7!%Pv!=Hl`;`6rMfUH}ABX$lHh1cS=YQAR{Pi+^-BCX765oj*zZU;Z zblIBwbwR4*Pp3{Vy7A)ClKcEOTS{}K+R#}}y*ul-Xg&V^-W-3z13ra$!Ut}pzXkD$ z9Uf(UgSaonc`iSFKIfiu$7mtMf8$Y{=uh})J<)vN0iXPi!Ut}{o0S6EPt3umePzo3 zIhg1oCo*TjXMD6eNqn@PXg=_O&v=*cf!oMaLG35z;8XKS;lZ6gpWFA_$|_D$|EBds z^MMC^N}muua2uNu)P7iMJE(a2a(``I;i z2d77>v0uzqXtQWPdsunbzm~0ip!G!afrrcIqrwMnh5rrW6E}L`Ti+m|jgSSO1FhO5 zwI8i#1AG(@_~idh_`q%WmOwtSA3(bO#Cj>)(=BGfr_U<5xt$A5BSu!6FzVo`+Fdtn6nFf{aZpCA$>l} z*L~H>Pg48QdZPKj13u+W;RCn)%|U#o!uwYl@R|8dt8@we!i?LGt0$TdJm533r|^MW z<@G`K^_PfpLJJQ`AM=5w4P`_@PH3~eYn-058^Ww z-cJxdX}v$<_^+4G{H2w5=gnl>ziB%uBUHHTMcYp50Tu#UBWrjejsQCglN!S1U zZQX~zu*Qy;)h6P3wLQMsjSO#UTvtNhhnDQ~jAB^GD3OjXHMYMXsLc=M_BQGq#8Df!o*(L44xJ^R&Mq>MEM~ zEnPkX5AN0d#?Ft87DMcDo?f+sgiq;RCnY ztwDU|#`XvK#NdzX1{#;XelJ#`d(FzdY9_oZc4^S>xt$A5BQ91DSY5o zx;KbV{CGrq>xrbx$7w&iJoAImVo3X8J^A`_;Zwan86T}Dnh!kSgB=C8kxhd9L9xSm zIT_D7HeqPPX!3`2`8dy?Pyfd+MoaE8ETJPHnpR~ra*V^{m3rF8PS`FdzK2( zF4cGgK4oLv(RH<-5A)^YI#j3Xe7Wv#Juv_97kWplA^srNlc<~^e54**|3CJ%*5hwK zNW^}F2YmRQabmp|$Yz?y8b$c&+M0fJX#Bh7kxlgO!1@X@X>n0 z`E=Pj8Gp0?U`36?;e_9UlyMPU?V;Ml$KmbBBR}%g&#oTikRp%!!7J}k`w@Vj1iwl7 z81b8se`Mdu@S7}c*}u@}H<|A9n~c0y?6AU{l)bz{()?#6rQSmQCU;8zT2tvgo4l+0 z!C$}8!f&$nA7AfAhBx*5Ox^y^xW zzuz$DLBj(+WA70@aO=1$h)?_ZP1f$XPxr#JW>}?=ejO_oze(lxWOk9(wKfj4Qw>qqRh~LrloAlh4jE~k6%?BRv89PY$z^#xE8ke`9-^6J@4=;F+RSs!C zrr#ugcQQU&Pc$ERzy~`DZsofJ+fOr(!oYK;s^7$U{;bZ;vg#pzN7HXoN$3~WdZPKj z13pwL+=@2_@o7K5NzJz3=6z{rs}^FvnSPT}!nl{#BYeXACSz*60UvYRG5m<1PrLd} zmhJg_d(85Bs}S=1N!xFt_4wNl?E}9FJmACca4Y;ikk1tGo20vritu@_l@EE3AZ@>i z))UTW!f&F+-KL)dPWUZI85hCN^mE|Xz|T?np!hk+-!W}c{2VR6$JprSnBntt6qktI z)N`1mwWX4F^-4;8h50$k>&2cRb?n7+_Bz7#b8PmWax;F8mamI)nJIpb+unJKb~c7t_lNq@bJ-{WuR?d<26TRzY#hS)KtpJOCp{8a1lw{z3a0T1{T4i-Le z>-cLBpZ4@~Z1nnrtwP8+!1Qx;sdZqaeKh}n*AM0D@$qT!bHD>Wl^)>(x3T*I`Lv~< zlE`Z=^7AD;$42Rz_2e2DOYTmB6}%aD&oQR##%9|M=h1$&o@hSsfDdxu z*7af#pZ4@~eDTGTta3>EG5s7JHz)KHx_X39n4g3327JtMM`^mhe`{wyM`f==t-4!p ze)}M8KZn-iZ$GpT{2cIr55L2$e67FzC_ZiJ=cw%Ud8-s+zoqTx(0ao8IDQVs-C=$X z{1&8)i{NMaIq+-X=NRr6KL`2q@0t`pN6YW}H~Kj?^7%Q+eadcnzof$-lr&$Kl>0i& z&rwwN9;xGJSUCS2*U#~V=H_#>d|i~wO!0Fpoc|MR;rufa`#Go|+IjT|qh9{tZ|Cjo z=lIr9XIix;{T%s(^C-0*e>*q*9Poh8_;TR`x60E&eA?5`@zNz{S@{q?JT;lmQTMEK zYqp`NW9&?=$H%9^&jAnkbSx7-a2vTPkWX9sIev9Y#j1vk157{1u=3MKu?YGNK3b2D zPlKNW9`GrZgb&>E{};rkJ^dUD=U-rzoAh(kewA<>;OdFy0}uEVj}|^~8-6y3PkZ_~ zZpmG2Ro!}{N0U}y`Z)^f{oJ5767`+ieq24#eBc3}in62NR{UKMpZ4@~ocT!As)x)c zH2oaI3HfL}(R|+!cA+6R6Pc)*9>;nwkrzx}kcpJSo*1FIgwCv886))UUh z@pCZl4)b&1w;*L)1V7WyfnNhZN9kBKpF_>-C?7Z}evae0&zeme{Tv(n{2Z0@#ct~P zh8lldBI)per05CrbBw6@ZKRH$;lf!rxqgoFMPF@ZK1a*fMY+rrKgWf$?z1kObxmSF z2lYccAOBB(y;L6bxAS)PbNut55vv|DPBZ6o6mCp54$yl1?cDTpzym&A>x2*7#&iDX zr0{7^KgXxey3Q(u%&TKmfS;oy;d&ohkB?7-p93E7sq_mUxb_xa$uLylHoe!XT@}3kYlEL7;d`xGkMIfe zb5zxM13u=sqvwx)KJ7f8sbQpQE_GyNR+HSlw=4=DM^`uu*5(*DLih0;K| zO`1++pTd}#Z7qwppO$m>hs@<(R!wCSpP!>XD0b7>T1h8PP4K_>_y2AF-v6<;?O)hz z{%f&Mp`-uX*L2vs%U*3sIs6y%{{DZ>|MqTg4%vNHpG!NZerV@CYohB(^~1YOg>{$G zT-Vg8*Unv*S~a&H)^!#1S5MOU93DO15uxelfCqerPZd6JGs^~_xC3cf7prrTDYy0G zbk~)0_}sqVkX5~semJ^BBMIlFdi6x{fd_o*UlTrXGfN4dxC>`0K8sDctske)XZgC5 zt-{Zm<5N#)XL|KS@qq_?N z4{QCH^2m=o-W6wUBINN-2zx{GZiy+6{K(_oKlGULdemN$yd!SPBR}$(gO46l9@on| zf2KV0Bab=b=s_NHOW13fIVPq&@*|HqfaqzEr}j8yuDB_W{Kz8~j~-JV*UQ{LQy%$| zN9-6q$iqj(p40f6OnKx-9rt{J;2uhBW1oA9?J}f*$0tX7c#kWm6vck;h&L=rQH7w>5jR znDWSvym1xFLysws`eP3SQy%$|$6hDsG3C*IS+n1iM}FjCgQLfk=kic{1)1{5kGu}G zRt`9{G{SyYc8j9`y$g)>t&JNFu=1qCzM;<=hqS9lwH`bcR7j8b!$&WmIj_82{?Uyy(@ZFm7$d5dH zWaxnd@_2U|U!y6H{K&(ngB~~_k2%WtG);NrN1j+C_LxQa^5B3xVuAQ_yz&lr#<*w5 z^9A2R`BFJXu9?al%Uxp+<-|8mr`M?7{r4xk@+{|JKpSY24m(TI0+}4k? z;Zq8E{_qY)>*e(4fREM_%?BRv8CfZO;O3X^?1{E|&Ct?aV|Q?RZ;D*PXHYhLsv&bM z)n;dAb+mj8AFU^v4?N&gJ5Kn(%`AZMi9d&2^XZ(Dd`cnx8*|9b`e^kSK3Y#SA9%oL z>^s5-Zl-?4C-wu#!zZDQkWKr^hwxzztXUte9>YiLiRJ?j_*732K5#SjD?YIwKps8` zZG>$2l-yXK-#*|SCbK?TJ%*3g6U_%6@EN{P_`uE7ulU5BnvnDGNoXTv!>1f#A8c(_ zM9gFOXg$$<-~peGZweo{nZ*!3b5gJmlJ5DP4WB|t|F*4J5iyV9qxD4dfd_o@-xWS^ zGmD}4#D4zx_WU01OyKUxhEF}jetU~q5iyV9qxE?Ctli7>@4y2-Bj*YqxS7QeK0C+m z-_qOjJ0m_nXYQi^`4ijWXjGuf$JOKIlWTZ~79Q}aUnG3sW{6kgpE@bT)2;sX!(jGQEV;AZNC zPuvbp@mXxjZT&bKKD9||KVCgieBc3}!YRTBZf3nHK2zY`lWh3Z-T04r<>?&Le!P03 z_`m}`yxS6GbPuu~jYCi{?a$7&nhEK_3_qJZ94d;N5S5Filc)$k@aO0R%@tFee zp6s1_b&Kh_@)kW;K5Jj#qW)!li~El}x^HOV%KqLViraEp4T*2>)3T)C4Diu<{Ps1u z7A?u;?y|3|Hn;MGbA7AqfA)X5>Mn9z-$_!=CtbAUizghopBndf9yri{WZ&Rmr^lKT-^0qbie?NNJkRUg%BqB+I+6a{KB?Ri!DrTU$c zR-Tu%_JpKOifQ>Y=YCjg=c0b!VE^r@PFEiDxZE!i{xN*F@FYbXx+xdGN0sY@)#Of| z=I@bm_1xvZ-@Nmt*4k<~k8+vkJ0&@;Zy?EQJdTK5c?12m!^QdM)R(hHg76S-#1-YxF)zHtrCobO$$(%I5}i|0t% z^L^E>FZQ?V;@gA!)2{!KeuebuD|YWbZSXAn9k`nPu2ro&>|Lwlo34S@PIUC|x$7V1 zpZ3gmt<#=4(=LbeiNB{R^~3Xj{9FEd>DhUmkGuG9;(G)2lSoP)|NrT}8+_(52X%ks zh;LeTcYNcy+3iAdR5;@w_wHzSMm-Pe=S?fu;Iubq{-M^RW!qmjtnmmB_!Pe^eBjpe z@gP3!w}#-zMgQLYk$0VK)!hCVB2xRTAy_<2_>BEF86U03$EU$R4G))(>Sy3q+A@gG zPI28gx$ZT`tR||{n<&1MZu@cgJiPu~tM2-5{CtRCmkv?w=k8>Dw4M#{Q9R&7TZLP3 z>mWXJWAjPRKP`OH@=rVc+ruYcU{yof&km|$MwY7f^KddgT95Dv^H1|UhEL6SE*BQ~ z`Ka;dPOrUxdO@n=&l$TsGXJzIzhxC&|Bb)>Fh6JHIN`&6+-l16N9*yoALKdb9c~u^ z9`NCJxYhpk1D}1M_{3i1F}<}Z()Hg=@R@s_RSMz58jr(^(&3}^g!6IUU&k&r-$!vd zsqr%Qy=ylpJJ>s}a>fDJ{fq;OYt%Sf$>}Km(#JdPaX?(lvT+UoVwe z{(iWf#{th>`*EunV#m-cGY%L|xE8X%Y0q)Mb01!8 z6+`AhnB#!1$CBAGT91!U<2XR^fDio)?Wnd(5TEuO2kg4`vsON2o|ices6CL3kJb~- z2OjXDJEk3tY!k$%J;wpN=9XFcD}v{Fnd5+wKP2Si>JdI+;{cw=@G+mu`M3D_wDUON z>_ZQ<3L)($?QwwC<8ME-55@uTfDgaJt-MDdpSBzaoPFq0tL)y_SOiidX^#W6o^U?S zH~_meY#e}HPl~+!9b5|0C@AKH24Du2C< z|GU4PxAQpQvtM|pRS5By(droo5QlC6w1F@1$7nsicHS@!fCqf?R|_Awbv^C(#|WSH z90z>%rI}VSQMeg(`t&ukb6Jf5umXg$IwY#hMz7(V86 zx#vv(^QWE10WZDdJyt2Ce@lBDp!N9M5AB0-06gHs?{F)f6v(G7#{nEF^G z2WUOvd?wb%RrYDvH~_nz6uSX_<~RVmpK(C`KV=+1{>lsfc|oOp^%~3*b9*KX5bl!Z zQ`xg7W@cN>bbH2ztl7aD%rkuB0J9`L*NPoA{(#@!HO~t>es+G3^{zX&7(KRYyZKS` zg2M7A{oc{P<*eb+T<+9~a+va-oxjM+Z+oWwd-R8PPJPhMyRP@wOYOh>?Og24U1P`1 zJ@bMR4wcf4%Q|&hd*&OX<&b_jx;C5t6+1@j@wapHy&-tOr+S0%fm_#EL42mdx+CfH zIrp5aM~fl;nC1yYp9vqWCz=mD;L~xV@PS+X2Z4OzPHXV4n~*T%m<69lNAn@`>Z5DD z`Cs9q^+fZ52Ykjyg%8}uD}j7c=-)aMPU=mc&+YqdY!xPnkJb~-2OjVl`<3v4Tjgtk zeB!=#=WRd7H-Fa!otXun?W|hJI4!6IalWJdXg$$<-~pe~df@}N;#Y$B#9wzL&3TV$ zzBlC92e(%-=-)nV6(-4k(|V%$zym&v z3*lDzY!IKRu&#yhNo(G)w4YU0K4iX4oM%l?9-cp1kMIfe6T$;N$b=imq*G~6F6a4^ z)}CArpXKYmq~d;DZThLh$C)3B{|A3i?PT!>;U^k?#qSSFdw%H7F)yt#F1(S?AJjEn z`rq;F@ z<5xeZ{66vD6Qh1;Z{;zgUV4K1!`SA8#~x2wE$P1J;=D(3@v(m#t%mf6W?Z;(PqMg) z*5i9#HN=JC0iV)?!Ut~Si-Y*IXI%K=WB)Z;3b7~5xbX0wlJU`ce0&<>!tj6({S4eX zNL5Pt85e%jD|xFH!pDpY*X~W$ zezcxwdynTae9Y%^^;>>E?Hm_={OTu1>mhv7jtgr&{`N!raO^_oJu!H|hu`5gc5)z} zDG(P@h@!pxT zbCHJ}^dN^6dE5_PdCs_kaRlRv@h{4_!p*-)w)0KrZ~-l*jpK@qedCJK>t#IAbGO)I z^_L~B-e=g)A?r_+?~wkL)UoS-u;6nWoNt;i$Pii!j4KZM-l^6P7OY7;-<0~H->A-z z`l0|`eg1w!;>_(iuGr{Z!&Y@9xZg0x6}5!#ooPM3exqSr0T1|$JtX%n+zN*T@oCR- z#YW#d(JEaX%*Py8^xU7!F4B5@d>Y0T@PH5f4BQH*2JvanamDurPqxY-e9Uo0HR1X# zT2C||c)*8#4Q^eFg7~!OxZ-CT zq4k9GnRxF^*{9|>08ZHTq}UDcGsgkg{fq-x=aKw{ll|j>(*DMLQ)!^6Z#tFvrZF?y zS{83VE$6KNm&?7Zn#v}=aX|idv73sI`0f6QEHVD~?pNybXWrRi+uxhbe=X*lI{M#q z;BX(r+k zUvTR6tfO|dir3N3jS4dkO9|i4_Ud7b;ixd@o5BM=BQ@azH=|fN_{5!%mEJn_>GQdL zzmHob*N!o-+<#pBW5RKOM^6+Vc)(};bux~Io4-^!_#|BieX%LG_2Vq~9B$Q{Y(KSx z@gJ|AC_eCj&)BBI2X1D)srJ(qcU@G~e)citwtk!ipEXv&wKJnjRQX-9_T$wP#Rnen zDLpOy8{EuN!YA&8tn}8YPoK~7nWtC<*UmJr+<)v{ciaC<^pRuVJL{l&^+fT32Yj%j z;8wXPa2&8(Tu)(o>(FJuXWbcA&22y4T5GKHYC=Dh))PJsaO^jDz=x8+jbqZOG#_hP zZdz*du^jtt`OI^bU!1E=KXuxV6E|Ue#CQo!jH5UvEiKUFrG*2%$Ha{j4D=nhBFWcZswwV}9Ib(9xqF_vJu2IKaJ>KEu zoh04`^^VCMdE`ePu?O@ZkF{ZVhlVv~OnKx-UXNM}7(K{i%+EU?_zp~YDzHbG_t89&41L2YHkadH8fqdE`ePYaO5mdDI{BSewk0M}Fjus5vs| zK^}aO#~KHwJo3Bp)R+=Irab1@vX(-FJe41L_;S&MJgygctkGu5BR}%S)Y`pxo zlt+H#u{Jt-kVpL?j~J3EkNn7EEqwGKkNQI%YoeR-$d5ecOrpn>$2&%>WoybKKk}I4 zhaTiHx4?a8R?Pu6<&htG%t=F!DUa)AZl5WS{K#Vt6?#m0v|r|;nexbwJZwJnnDV%v zne%4KBR}%+F`b%=O&$e}@rM~A^J|t#r8;YrX80%_1{;`zlYlR1VhVKwQa5D>~ z=ETHx6?x{`cP3nWAsasRYw(3TmahJ6uK!H*7kspyXg=_O&)74<2X1Cz6rZ@RA}^nW z@AhZIC-08E{CtQRoAuG^F?_V1Xg=_OPvtS;12sv-T`)@DV-Jcf_f6U_%6@X0?e zeBfplL-Jdns_yg0yz+F8;p5d4#RnenVGnq?nWchHTmw$=IoOoj`f)aV zij&lSyn3Sezym(i6Wll^<@po0e@kyJP&Rz(u6^LGwOsC_R6xR%_M`Q9?Q1Q3(UM&5 zF1rZTU1TryRrcRbiORdlacyq!9_x#ieDQ<>_fxwXcOE#q-zJ=aKD zIaksRWRLx`b3d%Lb5p->u>TII<{WXw*ousd)jNbIDLeQ{p- zYU5p@DZ4g(E^_W$aWiSpu>&X z=g6ln@$FG8{+r$7nrEK)K`vo@G~KmEoVEWRJ?Qe$vfJLxmO>3DOP%)S%+=O<{QbS@ zAAkpZs(%+ga4Wqhh)=t&P5=ARyz3vxmXFpG%?BRv>G-Gcfm@*`kWUKjr!!&vI{o%@ z`+n1{dPsaHS*y{xX+K&|G#_}tXZR)I1Glk%59AZq{pso7rsCT4+gi0r>ff}UXg=_O zPx&d~1Gk=HAfLGIPcNV2^<5R`uPoZnj#hn=_-H-ReBc3}@qY;)xOFTF;cqxD4dfd_m>HdlTh)s8CN zfqc@i-&FgFJH}6+&+?gTt!jw>GpH@Z`HuFZ^+fZ52Yfm<7Cvwr*(;Dwde5KExMo5I zeAa!xGu zp=8h);M4Io;RCm7HIPs2@#*~jV~$v{s&85H9!~nVH2nv27jLvaKS|FYttYzu zzym(zw+kP*RsSoHPYUDHg)3GL*=;EHC;k3y?pd#2Uz{ZWwbm2O2OjWY-WlBT13`SI z!uxR<@cHc<*XJi`e5&<$`8a)>^U=>Ac)&+~x94Z6cEmC1R9b5>?Y(d3ZoSQVt~0CD zd9FC~O_^WHeAD`OWxgr%P>T=y=bKL5y>F-a=9`u}rT^{dl{9~_q~p6tO1&1|89aY~ zY)s~{*VS6RBR^i$eb)zGw&!`iHhbSX`oDAEALrMEK~(R|BLexve*XCULB8ins|V>me+KOKv***> zScQ=B><3iwO4q3Nldyl&dc5uD!g;1Y2p;emIY{`xt>?NxK0Gd4tyDAK+H!uKLHMNA zew^pey&auaDa0T2L8Z8Gz3}P!YqIvE_2~8^Y#c?p{lEi0j6>ko@r6J>vHf*A9-iDE zlxF{SifzB``EG@ce`G7o0mbS_|PrJg4gs;S;yy?)cQz<9+^UsrV1z0U!J-a4Vi0$YJ%PK@KVMX#ZY$j-MI7GJfXD55><+{=#Use&)FM^``l0 zIk}csR98FQ=V$JiE6=6MCzbtOl(g$G|MM!$&pdLUJWo4*FR3#gJnZy~?Y)*Z;AaL% z$|-*4!%n~6I_&gs+vRXR+RuE?Ci`~(e%|kz_A^sI^h3iv{(2evslOkRbq(Uun%aKm zXUk_>_5TU(hj?n>XC6`agVcZX|K~Zb_4xXs20t@A;FF&xeBf64P7t5=^fS*r{2VJE z@*Kymbp6bKPG$#dJw84Ser9;UXKcCffm`vUAU^HsXRhCNzEun1WBQr%k0#@z^+fZ5 z2Yd=kgb&=hE(zk(o_^-JhkxIyx%Lk|n)F>;sV)pZbN!)&d|W-zeBc3}`Uiv$+^U}o z;?tgf=EF|^p;fbjpFgIbxsq^?XRSy0g!!4_0iUkf!Ut~oYXbRTwm1J^RA)|QKl7=- z{Haw7u@6i?^Y8-++mEZq+kP&bXZo4p0iTY2g%8}i&J5(k1RImm%p$I?sLKa{4xE^`3IA= zAFapBhudAp0pI~2&VXCTSwVc-)6aa%S--RjZolK_WBQrLlk#!(c=SAkpUvOqp<>1THA zw^9fnJSM66nO!}8KBk`;9`J!6-0I&8?R{C5za_Vf$) z+%#s@L)wq&7cTrMS^Lp?qWQoBJ|lam{!O)`;>sXC?dcaj>8VGodXs+P^1})FxO#+7 zm|qwk@EPAv_`ofHVIUvOZ1eHA!Q-jy7ryN6f41`Ocnpg`F3I!@*Ax2fwH|N#Y4i)j z!{u|N@PS+X>w$cDTyBtudBRlo3qODPlUA`wzi|DYWbH@m(d{S5FFdYzz=v@N+(u3g zR`1ocopvCj>3vY4%*6ZK#<5v^=g{dF^-}(kzu#zQzwjZ8 zbL;CNel13U_=U@Ay^r(xjYDeQg4&u|E ze&H?dfBpJuNc%D83m4ToS#h5~T95Dv^9#cRK825{{!O)``cNRBxaJ(|hR8altzMk( z{PfqQc+WpJTVD+sSD1d`u7vGJ>+!aqM!zsT;8Xjo@PXUN&jR`Ixb)RnGY3=IFZ`RU zw^(0w;~iLRa#iMh;X=as+**%rKS6$Bc)*8o2;3^G1NpS2U-&)$*lK+#&7i>a?>Q~dT?kC#uQUzqVa zd`gR?e?wpONI#!;_6t8^OEF`!3u`^z=MS~6{lf5o&xrD?z^(H0Kt65h7k2Eo zddpj{J8iT z;Z#w6SyKEyv@fq8*O5nltE!Y4i)j13uN`gb&;*w*~Uy zaoIE%PMpeq;m(J?WYt3KH`6a%P58c-)}z}`kY5-c@L?PRxBMM}eA?14d|&Y^Rz9SE zGyTG23EPj>-*?H|C-g(AybT|(}}#DF*Dm*7Eha&%TH)~S#^z@`251<6XZEE@*V&4r0D`0 zC*JnQSLfe*_UX1icC-2RoZ)Vpto?8DK92ss{Oer{a`QG@FXiy-{>$p=3;wdYbAkWc z#v{i+dAP$})err~*ndXX6VKf_baaiPBfm*=p8#ily7Cr1?tQqp|Hz~Jh8C{u?;VOP zL(q>-z5d77&$sICxFYB*{oTkD$;N$NJ@}j*>1MwU5BL;6A$;JbOC*1}eCX)R6E<)x zd^#6x;It-wPItbR!)N)-s+Dh&PobWSk5^9=A9%p0XF&MC&8#SwPt1|I;+eeqEnsA>%ubwDA@PJS8 zMBxLs@&ke6irr(H2e~x&sY%;DSU&R}tK{uVD4&@2weU&7e9MB*%$KaZ8<#Y% z+v(xprLhKKrAEnB*jZ(f`9)mP`)-koW=(zd35=Tj>NhSv11Y_V95|6uM} zdHX&8Y(I`)?NJ*D{!{#^XvNRUF==Um_NOi!=sl*7A6iTY`i@&MxS~JywA2|}PRngP zq4QPcPko)wpW0$^a-|KlhiB*aSR1W4W$#?>&9*taNo%Oh3j2o-vds&oRQmRVvPXDXU|+xeD>xZWn*9V``o+!cG*LYj~(B= z*Jtm@BR}$3+ZH{@V=d_F-$fp4N}KY?k37~yKo9a*L!{%MB9FC5OnKyY<*9cl(c{Wf zbI*rg5_!ytZ;+?*BagK%(bFJrYq1r0XM7X8&YX|KY9c11*2+X4dn)m+v@1{TwK%Ng zu{NnGkNn7EZXM-B9z2l8UP`7s@*|Hu9ngb3Vl>EOPMs-_{K#W1F!Ugg@|E8%^~W9@ zrabZ^k9Ww>gFNmR}DUbZfW9}$=TzTq#K_2h?nexbwJoYq05AvwL`Zmh;S97mT zdE`ePYvG~?dDI{B*vrh6M}Fk7h5~w!NBtp>HE>ONA9>7GL60e~<84wt=KPrQ$d5es z@IsF%kNc0gMW#IRBac0&(1Segm)f>cKKAZ1<&htG?7@Q`Q=ZF1?b&9^BR}%ka|u1B zJnE0VcT9QYM;>e4qQ{h1*g~$Cy_QUQmn1uJoAl;K7=grabZ^k2MU?8FK#wVpz3Z8qVqP!#k;fbW^w1A*z07@ME`=$N{Kz9_ zjUM_@5Ha9CG z<}rMZ8{?Wc3ll-=5KHtnbW>)^FZc}JtQGB%#=@^SS<^MMC^ zYF`sRa5FV1J~1P4zV;J0T%n4T4WHtz!F;wdD zzbQU(&4g_D)I!?NC(Vk8c?=(|Cz=mD;L~%V;-k2k#ZY|Gd;WCBH50PoQ~ynH`#IRG zh?vLl(R!l!zym(R=L;XWnZ*!3yT`WQ(p!T=_|!Kx=Tc3)E4Q%s$f5oLv+zwE=R?}h zkxk@n<`np7J;I0amHDn5Jm6FKvhabMsZ;pu8oPfp_#|*5WW%R;b8!3F+pLI~$MDg5 zynGthcz_3d>K6zfxS7RJd}8-+CZD+0K`xgKpF&9gW>17m=t|cW452T)Pq{1ien^?C0t$(O@W#|4H&5EN+t*=br zlqMTKwUGYpom4==6h2x{G#_}tr+TsQfty(z)qY~zZ~H7es;_gW&WTq_a#OMW+!AcR zy~V7En8)zRyL!BQ*6wAtA9%p0aJle-n^_Fuv(xOj9oz(;If{=dyrtu8+D|#ezCNm@ zvW1@vAFapBr*W+ic)(};e}oU*OijXPx43xN+bQ<=QI|*fq&+?@h4gP9(~1-Q1s|

        )Gm_B3!RQ2oIOfe+eJBnT1h&V)t*#=_Y$`9of4wsePTceNYaG|9sr6h?vLl z(R#e?#~GhG|7zXNdCvTham52Zl`Dh~+{|JqKC#EA>8*8;P5UW^_;>alGix%`ArElfw8^Ry{D~H-DTBpK?h5c0lt5i#!uPT920xS#|#g5BP8f z+&Cr`KD)%`^RZR-o2vE%s}m3yJI#nsNc-6%b~*hST|TZJFP}#LThBGpUf@$XNsj$e z^$}|wy!LCo&C9*I#q`wHdgBVKZu{YzbW`|v^>{r=rhN?$_!Q3;K5#Qj=kkeZ!Kt;7 z7MXHeKhB0v$#Y+~UZxG_fR9&C6d!oNr(>P)ft#t(tt|X}v_v zAF_9Scl~1C zTFd1QF)JeGF?_ThvELA9+6VA}&v;e%z>R#Q@QG<2q`21G-r3l1u6^L=b0`&%FojRm z)f3GJ9`LEugb&=z;?TdvjWEbsNGX_ac6=cV`?~I_H}l%lIEIf`kM~Y6+Ydb8Gklfs zfty(-mru+FBz#gZ-!kG;^Vn79wWo0mAFrM$KJb7~5x~bcKJbHroELxJw-DUq!-mUV4 zvtHCH`=4`Od6^tncahXA-J&I5JmJ9o)VzVt0|)w#>>C{H^vrr+d`y4;P^t4XeFOcS z^Gm%eR^^r+u-}5*?AiV)C5|rdr{{sQC(7ad&iT9i=cgZV%EzZTPu4tJT{jk=~M*Y6Q{@YWXu0Y=7cE3pYN7o;PCn@64O}Y3zs$3_m zCU^3*;|?iTEK zHG7t`KQ`s2oRr)CY2w56IC)kKE?u)~aH#i)1kpVuwjqHpKRD%j)c%ro#oC6$r%U_d zJTsjtYa4Feu(n|?(b|RuPrqzlvvYj(wwGF4F0GDkXl=teL77wd&e4DWtUc{AjE_n= z;t6%QJ8K(qy=&}yz_~YA+t9fuxCgi=YNK*baIaK;@(bTOOvc`u~ylCIE62_2T~|;TR4D48j6}5g`m7F%X0We?YRkz=+`r z28mY z^6#3ePghq>ckfJh&t_akLrw2=eZST9>8fwlw=VZdme#+%uBMewGTw>oH&q|*Tp5o1 zzzoOIJN$yQIfOl%Wt?k%_g$ym=LZQsK_8+2;SU`+=bEE`eFLRK^E`C@vai`hc;oi$|vOY-f{W zy2`0}ZT2t%It6jQiF_A(Dri0aHh??kH~VcjyZ;V`4?N(5PPi4X3*a-~Zs8GY>@Yn( z>Fz&Y=X2pzPR{eWM)RqzO}0O?*5l`sY2ZVBV)G%VyT2U3haY2vY4S6~e)oMR z8?q)M#-j#Cq5Nn)1|KhuxKHd6OTBIHLBoyMJwnPGT>WiPVJESR*vYP+OFK#Y;q%&R zCu4fDGMPp@IoYt2<*TJ#%>G1%pLCH^@_dic^)UI?Q(N4kxKIns6 z*SP_FCa9g9{Ny*BQj>OaWK-=+AEUefd6T-j{DpY$wSd$~pN&zErR6)N-D_ zot*cXg=kQli5kF$IqwH zPEw!PeBhM*VE`X~j1hLSot(GH-A*ZFjY*704UFQoV>~?uA1@Ael6pJLPGa{6DQ|GK z?Id;)JDL5aw3Ec|y1uP;GUmv8P=9g*!%lWxFYRLOOES#fYKC6MhI}cg{v@HWlQV{Y zzTWNRjINuV8C^e1Y$wSd$~pN&b_}oV)N-D_ot!c93#ZUzJxuh{#wRy4?BvjG(k_nPE5pKw3`g#hAsJiP zJa`UJ^+j3U2=Cr#=bl^2gRXt5_KLN!E1&z%9%T5#q|fD-<^L}9-#`1o-V;B5fpbgw z7-c7KaML0`cW-p4`}-ffYyNJB;yn`MljINOymq^pFSY+L%eh)JYKv?7T9)(0nO4uI zY*di$_}2}G7JFX0>R6{3Vkb9N2`Joq&rR=fUpVGUHKr^2FJ3wK^qA$`o|6j?`1Ic) z`M|CA;~+lf{Ilp3nZN4UZRX!wze<>b=(xk?N)@ zt=WeppHX%8PpiqN{AfJ}pN8|x;Q^nn-%CDlD}6hVPs|y)#-8H7jg4A;N^yU>eE#!+ z-FudP{4^)$z1Jq6tyB`Lk4Ziyb=Fv`DTj~N6U_%6@aeuw@`2mXr9pgV#V$X_o<^-c zoN<4;e1u)Emd|hsA??iFlONxnZHcyiRJ?j_!RGveBf4C5yWSY*yHHw?P-)Q zpL5;v^VM_y!^ww~AI=;ZeMa)hzml+@=IM#%0}uF=?v{MuR{KT}pV)XZeFKY^Ey%>) zsLfY`(&Z!U&;2`|;}k;11Ex@Z?v{Lp)m(R9f|~kD{igLq^MMC^=!d|qv^0p%Ua=c+ z>FxO;`J}by)GluO?W^aU=afR~x7}6l58t?PS+uXa68br`9?3^_4&D8X#7FPR0uT7e z-!mDwaZM=uKYPXY>mIh~#Ki-r4DJA zt)`ayso%67vwrj6C;SKSfDgaJt^e#mK6}NrK!-0GJjLBKw7&EWUGc(n*YpZLCw{!> zWJBhiyjvwQyEYv@T2DA1F+UT(RhXX;zaJrf1^7wdnp|`9u*)02Ab!H~71B>g{Lycl ze!{|Gat)hUy;k=S$^zOlvU=QUF(bR$dfYjBVogydvsM+AjSN3w{sGx;DrM4Hqjt$X z|L8sN;EP=U+~%$?uIl;-bMC+K`w0EFKfPmLX5~|kOoyral6zk1z5SCr^qGHcyb|?+ zDCgu4<-BWhbUvwic%M$Fhtr&&De`sNJHO);y>@0}p85Zh-yoTt^y?9Jl8@~tga>>I z8%aKJBOW1q;yOCi-Z3d`u8?j&K=4_(>MEz!WILui;rvX$o+v)>fKUHa$p>z5A%ss{ zM~C8bH1gtyZQwJ#>=edW3rc$Xv&qVjUr!Vtc)+KyqvQiO(nF~D#6CPt@kwEGg*Nb6 zRdI4&JBB9?4zq7c#>cNGiVr;C(_NGH8g6##;1jo%VfHv@1^#`ZqwGaHcX1}HG`0GZ=%8%9)-VYG% zH+aB@l)#N^!uj(DhTPp_Pn2&Hhr#>%LF@s=g-c-~1-hP8O$_ z;aIs_d{+9$3B~-wwO4+j?fs>&(kS$cHI{4Nb)GZ&;m@o0BmTN?@`v(9K9MgYCDSjG zbpBJ)_@t{H>%P}MeU?+bC-|%mtvA^>&u``F@z;lq^AF(xAGE`*aDD)v2|E99?I+K1 zig!21r~9R3<62sepHJibL+TTo51dA?2;jqyF~ao9Pr82JdYyFT*-q)s=J>>T^m-J^ zkJe-G@x+SzgkO<*JIt?$-6N#D!PWLFVi&QK{TE0(N&M2Srk!ll{KHRs58C9HO|$m= z!>nN^yS9^dar8N9FSA?7>+W^(8Z}|_4@-~B@|pjACi48l4}bW1C;Qvra&FH* z>`yp9N9!@mx$Rek2Yg00mhUgz${Ppqi9LLs>E!u`7ry63Cl|tpb|v!w7M4353uJSj%=9BZ>9A_^MMC^YOl!h1GmDI z!1^t&+c(q6^ADHxZLm7~yWslGo_{#%+rxD%o8$i-`=j+l^MQxQ=g*Q4+-kc9@rjM6 zqvs!P|K^QX*Fx&IDJqk@)cnI@!un0?8H11F0U!DyaO;0GsD7K6^ADHxZL+!=Qhx0D zhoyw$j#`i86E?pM9`KK>qbal}yKRj`8SV%ZO)UQXhM8f#cUx$y~ zZ_hnomLD~)wMQq+dr5QuK{3DWhL4Uq`4B%;+Vc;!9YoGo zOvw3%^WVGC>Rbq)wC5jcJ>h(WpAf%Qn4b{8A0d7P_}P9!{DSxiM{bmULgJ6!I4*v| zmbd6_^b>Ak_zBAos($;Hvj0)tTKNgLksP2 z7wNJ?{DeoI{6OHOLh^@lUfasdmyr#E+L^Jt(bCW1u2ODweA&*2wAb;8b;?hk z<~aF~ewytkEIpmf&!P30<=plY!UI0#O(h?=^=}!(XJYyZcg^4Ik< zJ`H|Cc)%yOxhg-Z9F5!?$R~CMr~T}m=O^4Xf2UImX~)=p!kpTlqme-LU*MzlMDu|M ze1_j7`M|CEN)Vrk=_fq$^n0CLNcpk-gw=%e+q9l&KJf7PJS6KkxE1dX;xjSVDS!66 z4?4xWn)4GD63!3RddA?Rc)+LngyaLa{74X=iRmZ2d7np}YzQCQPnb_Qj;QrS^MMC^ zhEzXfSaBh*tk;@~iw)Q{`a6XhqQzYd>ntKZ(W&aB@ivY+tC({Fc*A?>%c{e)VNS-V{abiCq`9nF+{mIOi>SbmlD29IVDEcShk;VD50NF>xt$A z5BOw9rTu|h@$?`*6Vp%l@=;ehSxt$A5BLxt$A5BTJ#$@&d$wSNZjnV5dUB~yRuWJCN=wx6);sbqY# zo@hSsfDio;xQ+fUh|k3I6YjF|7fvx`y@Bl~97=dzuGS;@g!u{K0Uz4$aO0YABKrwH zaoqJz&eyKunS;VwQa`RwPn4fJeRN>5c<2eyTAA9j~(oM{AbTrZ_O@PJSE zdnF&Z4gDyP&xG?6e)72Y^;AYSa&jSl4%<&yOUOs-G59q23E=^s;awyjxK+Ot$Y;X& z30HiptLG!@wsHy~^Kl#eg#S!dezcxwKJb7~cDm#Px1oOz;xqC5gtA?+lT!@gWBUp7 z>yq)&dZPKj13vxll6>Gc{9i$QCZ3=0Gj93Wp!_bU;Pr2@II^W=`w6Q_%a5lgnh!kS zllzBk*TSt_3F0&H{Di{(T>7W?J0&mQOg^@sa5$m;(R!l!zym(?L*SOZB#6(%^AoPj-PL;NwQ0p=4H{J&P2k?Lozr!uJ zI*?BX_zBb9pHTAI)2W8opS1miT2DA1;U~m@g`W^V7M$?=5#m>XtKUy3a-w}DlFP&@p9SetA=cv>xWMVZR%5zj=Mt0Rqo-`>VeM0M0(c9ec zJK8BJ%~0*;MKZL1AM5($ZLf5S@7vz_RQL9-Z*Tn1Q4#tFUfS2m%-(#pNQa%?lefLX z{k^y0@AiGv8{`M|M%PR;Uq-%W)*I69?j75)CHFN=!ws8my&>{+^|t#vwUB=dR!iMJdcm3Cz=mD z;8WZ~mLIrvUmnCKe!s6?ex@z8lO5wa{qnPB?nzE*oXU^Z6U_%6@ELkpmLIs~uMFZ7 zcefnQ!%kz{igxfh!^wyEg=4%xfl(+wT2C||c)+KBt>go@{24)fV!MS^{r2g=w72%h z^!Y4YRdlN3RDQIcXg=_O&&Ugs58OsS9mHqv*cF_f- z`O$i!`M?7{qkBsG1Gmxhg80Pu3u`{p5;hXrz-QIBoLq=sD?G51k85BL=J zl6>Hnzc7$bYy;%uldzG{20qhEPBz4E(i(;EyWyktMDu|Md`8|c`M@oAW+0!~2FS-J zVI!dpd{+I~DUDP8ru9Vgfd_o@`$#@;EB_#nPwa7hAD@Jcgf{S*e!Wxl)=in?D&Zxf zwO=SdT2C||c)+LY5LLgaa+JF&h|iv}JE*e%bJ&8RY4Sw8)}GFPcN_Suy2UAYcA>p| zw4P`_@PJSCBa#o?O6LUfNum9gd>^MY_X`#NorTlyc1q(^ezcxwKJb7~X{qD`xANx# z`NVD?)b|tLL!DQis1UWI{5^`}V0pwx9{Yu$2YIZEVmyX@ zSM2;FKJwV#0zI}o&wr!#+p*;lA9<`-MvpCz{9|7WTORR|$3EBSvE_OBr`G%1@`#T- z_GLy7^4LF$@e=l-vgHvUdF&&M9$Oy%74~DcpDmC0$YUK8dXVSMuTt}pn5SjS zBR=w2w}T#A9^*f(f3oEfA9+J+o;-SNdAxtD*RkahA9>8{MvpBI9;`31mz&i5t%I49VaM||XsY%0&6Ll1J`%Q?fW2WTj7Dn9b^ugLZR zdPrZjqSgbeaoFrng5N*lBd@CVdmx?2;e9UuTFU9ZE7+bBA9?J*f*#U0be>Ef_P6`o z;Peq6d1ZBe5_*tB`5pOzl*7I&cK#6`dF&&N9@1AT%Jg~m?MuPWOMK*&)xOl|K@Rm* z_Esr}{i7Swr{W`z^YG9^`nrCu_$vQ->AK+jBR=w2heSF(Ip3D@a<@o1oP%elkNC)| zZ6e=i^pHN@XZ&BRKeEdQ@sY=VO6Wlz?;rBIejoh2#77?cxT6Poyf4UOA0<0|#77?I zN1_LL@I@Z`x7+fFk37~*pa*%hH;~7sIwYdTe>j+s;2A<=N$z_{i&5`%I$;uB5Lp zBIR^Vmi{C#M||XQ{vLYZ ziagHmD(o06kNC)ApKkQn?+gAH&P%l47vdw2{d~}aJf0hQ?5l3eBR=w~lOzxHAP+9c zWB(;v9`TXKIwJHSkM{<7qxS~C&%{R_{u%TjkM|mRto!n(PxvJZDxuU3!vj9~!zCZM+1ezZ*u(xQ z&P#6(pX&X=e1vZ|jSqaZo@hSsfKT}d$p>zBnk1jt!~Tj-!YOCyhpJ zX!ROCT2C||c)+K2pyUHLTfgKJd)P(sNjT-KjeH7!4Cb?;oe?pw;iL6L^MMC^`sYYK zaI=#k`NSSpPH|p(d&*Dg-e5lL$7JV6tJm<+dZPKj13uLr$p>z>e#xg3=B2lXPd21| zpay*H>}dHKK3Y#SA9%p0Yq{hDH#-56PbbVvZxf$C1eYK7E3xyV)oYKBrze^ZJm52W zyyOEnTfgEH+W`6I)h28tw1-bIq<&*PznvegUc*Q0iRJ?j_!K@N`M}NAulU3^Kt4VR z8wu^Fwc@^X!7zBYmr#5izgfqxD4dfd_nwr>pX#%8{K6 z#V2+L)mMHJE*@wPpKM6~bXz+kVqU{X>xt$A5BL;5B>BM2PKM$WyM2(}y!7_)$vqfc zzinq{M9gdWXgz*DD-X2yg@6ZqMn5R|z|BsENhMDu}%$LC|p{-|<>?zZU`U0o~U{0rGsR7flq!wUWcVh?FYC|+y+9@)t)+C>8^`HZqD<+@t1T%`1tks zTk>}M03Ptk9VPj|%}yPB;u;{yXWHSm+}5w#!>8c&e_BsbGcn-f*AvAD9`G4CLGpo{ ztrI?R9SDlg(YD;yuiL{XKThSxuP2HRJm53*VaW$>cD^Y--ErHSiqAo|+}5w#!>2e- zeEfQ%_`m}`!}BB`xY_vzpSTVL#pgI%ZtK_W;gk2;Z>^`OnHbb>emzlq-~k_Wz>RA{ z#b@uh_1ob~22WYASgmVEXsob3d}q0ECcal6dhtGyK0f)`a=+Q53kyyh z7(9H*i37(B4kR3@5VDW#|4i?+kzr@_TXNoJ{%#o#Z6@c}b!{UPhVS~{ z2gP$_e<{P#Y8lp^m0?T5TDV!f4=dgK$=}V~@4oExBr)&K`$NJnHN}$0|H@gum1e3-P# zBjt*HrMs_{<%|1jvxb&D>Wh5i-S_VM(wUizF6W0WSXSWf=0g!{#>|;}H6O#gb5pmp zEUo|Pb#Dmx&sXelApf!_%l1Zjp$far(3IAARoGnCD}+6pWt?k%_g#12=FNNCxv#V@ ztBphn{n_{KQn}{nA34_?{Xc5|=ofmp>5=Nyy^mC%cGDL95!{b=m5@K!fAWdg!=G4W zaF_c+^K0v2()e2AY?pj`^LPJitF@JDrmk|TUi&$WfKEZ2ZzA8tzS3HczrJ_(eVF~W zo85m0!v`MlK_}d@dk65DKXYc>{!My(`qJlf;Z;u6^RGqo$#?1Y0D0C-=<)IN`1xcS z`KbED=7X-GeFFIKV~j9OK56dTRj-qN_kE}4{0$0w1l%;NyuE_tno|Q1!RH z-hmsjdxVs?vf}D*cRcJq5_StG3motnJch3nl;PX6A1JCnb6esVjh@`rLxK9L{Y`*&(NPv1^XKItMS zA2N@K{74#7&b1zYId8O+@PH5cd9O!i1n`-lc5?EQ-*5`v_;++Y+`VBkJE`^f`83)| z>Jys}oVrgA;KPqG!cMl6lXn|-vg2eYwH||ym!sH8>g_N)iQOZlyusDBlh{S z9Uj1Eg4)TopFGE@hWPu*7s719^Bc7uKc7ZBNqu7TAswS13E;zzF~Ux^lWVU$+sTbn zJ5%d1_;@*rouu9lvy<38LdqLlZ99ow#7=f!EbS!mvoC(y@V}+(cir22z!twW+Q}(~ zogA4f?PBTUG8|rMhGVHKss1FPu#@vPS+m~la<`9nD;pU9WO$2zr~ zr*9|ceeez^+hl)*{Ao4x?4+m1U(OrtBs}1QKDZU<1n`-lc5>ct?r~~O*2AOQChJdX zJ$^ooc9QzU<^!kxLI59rj1hLSot(GH-A;a-+L>C9!N?HMen4QG#5mMgZYTHTd zB6hO$J!vP2-#@*r{mHn~VFUcG8yI%7IA7Yu{&)2)1 zoY8f&Go$NgiR~o$Lpdj($d3FWom$S*x05qQe&N){X?#-a@t5;PI|&c?zy)r#?f^a$ z)K1RmuQ+*c{&IAGziWqNc2eu{^J%n`{i;5(`M{|#7{G@gV}zY-Cua=b;1rwW6XVhA zQD|psJq907EOwH5JIqdE_XsI(aJB6ub`d){e2((F(y!ddw3C;A-=4=KrvrKkZSqTD zV9`m1W%Eyy6AtIMJaK8$?4*o*me>6PS!dp)?Boq@ zTIA>MjSlU(fA$}|YyNJB;ypUvt!l_0%6a#onJ*(BH_N$PhZT1fNhTxbS!XiI4+u$j zp2%;uU)*!&cPdUHq`$&GNW~@3{r)}f3pbKURu5}EW;wUl`M?7{BcG9c;MTui5TCfS zc-;A~gA2s*I!UKLy02Thd{(~apq}o>e(lsk`YTw?>O9G(OU>V~-}|wysfV>5gHOXe z9(cefe}?1(x9SH1`NS?jnosic_tKmPcfjuN?wM4%)hUMX*-B-6b*1Dpr1m!*i--L? ze6${ePs2KGc)+LpImriZwIhP~%!<2AA!F=wU?;w%>vYSHv|D#N#gKg{c2jAqbxS^@ zYCqtXlI-5>@$vLT^MMC^vS&#?aH}o~;uC)#vGmU0OP7x*KU4O<*C~axGucP1wovlP zZJEseXg$$<-~k`nQE)3A5X2|;bhC`y=RmXxTYdBF`_ttk?9c7nKj0KY=3h)v>htGH zKDBk`c~W-j!mhpY?UI8}b$o~-<6J(7>=d^DcFr}`W4vHKnUXPSJ}I=MaKIu2=H^B%+x(>=fPi%a`@ z&stY?vLWqj7GVspkbL5%oARUenB@n#;y%&;fd_o}oql51>_9$y#jW8wbseMR^9QFE zQhwg8GA4gWI()RAa6V!lHvR4}KL>sbLi$DUv;7?SHSlv3u91EY;+OX|{Tziu<+?<% zBC+n_sCR&QOPUYsai_(M?5dgU)|Ijkx=t09jSN4Bos#O8WIHN%l??6Q$GSdw+bf;o z`?hyJ)xEvzOQ^a&j$ELhV=Oswe;4}2nUI;4nbjg4ww#l5vz#~hITR206!Ve~+{&j1 z@rjK``JtvITjW{KoOJD^;In4#Jf}KNe6*fuKJb7~=^V+2a#UOr#3!zm#7{VFY25cu z$7=_llbq5xji+fn(R|7*X>Ni!6YM%?@6W>qh^Rp*xBea3fs&6@k zCg-2WEl-pmttXlfJm53(HOU8V)m;Ml#5O=aJ_*|hZQwJ#XV<$gO?E|eRnh!kSQ~a*v1Gmy{fqY_*Q~CHLY$LRR z&-Ck^!Z`8KdZPKj13u*+NIq~YzAK2&p0PVXK0XQevu^{RRkt|BajM_6o@hSsfY0!M zNj`8JeRm+A*!IU5=N(e}ro}S0ZQwKgZl^R(xt$A5BTJ-lziYe+7rZQ&)DsQ^!BrFNBMcu$$R6kZEnALdZPKj z13vim;WqrCAU>V2pS|Rh);O;$KYw+q<5a(CJ(7Hbpid(-@1)15aq_`rcZlfORI$v+-^z7({W zw>*-NkJe-GX_&VR5BQWXl6>Gcd_y3g*ab-Q>8yFnGe>sqx#-9po!n!=e6~_A4)d0C zYm=29t;gWgFmD+i@aeu>@_}3R*Fk(H-n?aLw{lMQPr-cbdCT2fB%9Z#^+fZ52Yj-Z zNIr1OUJ%45{&+;E&RZ7cXZYZ~oZ3UdeC&D4rG)$8Xg$$<-~k`nQE=4-(Eed&nbnJ zAA8<%^{vVHXg!io*t})>8}PCF9Ya@|d?xC=? zw=ColA9=_@4{`{R$NS)yC;TS(N${I=jYz+V7k|!p_)X@w>|bc~n`8~YN$K0N9oBV? zJb$HphYYJXndh;D`Axc2|BFzpo4chv==n`nHn-lp<>!K@9SZ%+-1Xike*7!WE#-e} z@SC){-kbcP-Y9%e<`;TP|8CYBavpT-ZePdxO~iWd6DBQi3L*8n?Kk1PAo8i%P}JAr z+y<@3tT*g=(C~my*LNfzxK&pM@tJsj6S3ZIud_~avX2JW>$cyds?Kw2mJ9d6N9!^8 zH26*60iThQ%n*#a7E{n<#2A>AM2|VCa z{GqJ(;nwxdAU+e%ZzAkQwS0z?4e>kLev@j#^~73FG#_|)eEuZ)z^(g-L3}2j-$az3 z$G7_rry62^Y`;k{;ePvC&lr3Z5BSiIf?NLsL3}2j-$dA-tN&SaY9V}VzsaZ?XTz>E z8)AR7o@hSsfDd|#id(4~#Ao99O~iWdZMx5Oa!vY8`V;Ois`W@dVSW?(8}Mo9cT`M1 z6V-3>C3n4dwS0<`4{0By?luo%=@_l3!tdj$yU09ieD1UT~~97gEj-`G4OytBLs`^ILu{ z(q)H2|GeM!_Fi!8Pn`>n9Zu}$Ab%+5!{0IUW#rptIiJXWj)y;UiIWTI2iSg&;e`9v zXgy{*xBVROfKT=c$p>y-Uku_iG5s9*>%Qp}A8yXiF{;itu*=U_*R(UW9)nMVp93E7 z>Aqj`fm`ugfqW*UpJS^_zU|~g+L^YWqbs4GL+dg4H268-0iTiolYHQoKR1Za#PoAq zaP0S-V#xd*+t1OxQ?l_>ttXlfJmAy+2gwI+g*$@yOiVw=)UDm~cSFjL?dK>Z+;>px ziRJ?jj}PrARgOl=L3}2rpX0&5{>Z6?*dN=^QB(7Z$Feu}@7N!$XAC}y2YiqRx5DK? zd?u!!qi@e^ol=M&%AOxGobdc=tw-_+^K*=-{sw%y?0&}&Ogp``=C> zq<%}=&!P30<%jZtp93E7;di+8Ulqt_!udHQpR1i*Nclsb zLi$DUv;7?SHSlxfekT1K#IJ2VE`E+r^PV*uHu^a>HT)c-KT_=`M}|YcmtpQs8KNi5 z&yiE(!i2)la8BXxo}Z)pvClT+=V$Z%#I(A7J}A$_dX`(0U9$ z4So)Iz^CvN$p>yj7Y6Z}n0}6P3NJgQkntMZ&r#kgnV&=JiRJ?j_~iaa)o-dCjhqw2 zXJYy}Hk-cADTeT|{TxFH=i6vK(R|~Gkn&^uIf`2+tKYO9$tTRuL4N~2cE6+WGn3Cm z^>f^_eE;5aYJYWVA?@q5{Ty14S$-%V_&MMKAAX11=(T}-CY+x`@HuFiyH|RMA1ZA> zht?C$NBBADcZc~o@LLelFM^-#=fJOlpCf;_^m7ou>oC*LQ8>)nzh4$mUX!LnxqpAm z$gY;7-!UnZt!rDWipu7OpQAb=+fAhhWY~1VLT)^~@=EUki@)mn7dG!*AN%(U{ktug z)|bir+L7rn6MA@MUGHv>?CAa;{h^$bKa}(S??>m8s)zT9yTMzU`}e1L&KkLu^ZIH0 zB{(c5To3QpLmypevi%(JfX~n>$p>zB>fjT%BQ5z%JKUDr`gOYdeV{+*ty|$Q!C_&W zWbGKgo+v)>fKTln$p>zB>fjT1gHgrjXj^XU*X`j`@cdBGDJmwMFW}b`#Rnen8GT6d zft#I5#iu*2r%>@Z$d=psb({Ej?ab&DjU=q!3O+qieBc3}+|MN+xY?GBcnu7%To;*`Al&7W(H zZ_n_Xli44wC%hjZ_D6&Vd`Jo0xF+nR{Sig`?O%0&MEXbcm&jlGQCt%i`gDKk;K2o_ z#NE7oaNzVsOB0+TJ!Q*DnGNfS;=Hqr(O)9H&4#5h>ML>H*p~B4l}u(Ex4$&a9TN^d z?<}spZ8n`r?-Tu{4O}5S?{c^7i5g&1X6yRdyrNIeT6X&6_S$Lo&SZ@QXFRdi!rvzs z@`#T-*21C3mdBY8teLju5g&QXNk@+@k3Dc%182)4KJu7DjUMDNSAsK>m~&yvBR=w& z6NesK9%n2tciNUmeB^PqJbG+-JTG(MYzbXy+rk;hm(dTe<-FK61?@`#T-#*Wd0JkLj@&c?#mWXmHy@)!$1k1dZg02nj2 zh*z|3xPc5u%icgyf4V( z40T%`@sY>cf6|FOue_mao&6Y=e zyIk9b}sx zJ;iSIABu@sY<~0O&y;JlM0JJt}Q^#77=;?$Luhcp#6x8*F*RM_x{y zO^+Vr!2@}${k7#0A9;+GqX&8LKwj?5U>?Lr9zFx~AP*kMV{U_;KH?*fF$(m+fj%mG z;^8Z>tvcmgs>i@|fd|@7I<` zeB|L{Ll0b$$64t3Ds6ehN1kjQW-{o3t0zy*!N#}dmv_9|*&M!0`bP2f)V?RLk!y!? zPI4!lwLRPICr`>0x3JH`IC$}r1>r)@|D}1z`Xg=_OPwfWD2X1yUB%io55j;Mhw&k{d-5x%L5c|X4 zAFZd;i~%35Cz=mD;FDh?`M}MTp2k%;~rDqt$EpXg$$<-~peZ>m?t!+4>cq*apbQ zCt(|*J$wow?KkEm+xgMzHGH(5Xg=`p_&g)|z|GdL_{26qK0XQC2<_oh4B^9?GCMz7 zy@rq0GX@{U13raYB_Fui`W2tJQ$;d9J_*|h?ctLR**j;doe?pw;iL6L^MMC^@{cJ# zikqDb$)^*}+HMb@Qb_sP*3O8S*YMGLqWQoBKBcQ9AGq1cP<&$BpY+b!ZV#Vq$eN4o z?2L$c4Iiz?&u8UBEj&Ghf=U}r?kYxrnA(R|NdM;p+>kJYkJcmk$o6~VS=*)6vb?}2_oTcIO9pEh;u;|7zYde$%HPx7!x_za zj}L!IH-wL0kH4ha_6HvD8Lp}NO>whR2cNhdAT_>_!djp<@$uT%_LHY`?eX#HiQ)qf z_++1!eBfrM3O;c=K#I@Nw%pdQ+ry_gPUXk1CyEa|;8VR)@`0P3Z>%+m+n!N;4zlI8 ze%&5E1>bw!dYZs_Z@F|TGAHSX` zKJb7K83H%12^F6XSPL{Kvu=yY>CZp#`1o@zlS!e#*RzoFQ}y(i?Q8P+@MAKWJKZD{ z_8oreA8vT6`%k1O{}FjzJW+<+Pk8t-pI>q0+-aDR6BaBU$jm=tuDf=;wHi<8@_)*| zySSbX|KG&->Nc<5C(_3!KU=PeIl8dm#DT%Xmz+3o%-}#mPpgo<@``u#{{8rWRtk5h zd5V9PVL|QPl=rR863KZB32HLTz4fXG#d8$jslxrtut_m3-zMINm2NEZcQg09FFQSX z%;WO@knl_HamkYqap)#p{2rCA6{it9dD!)oOjlW@4~hPHQ!Cv+av$lk?-%h-9~exs ztV)Q;)O_W%{s-$nf{XYk@=NSl;lE$x<(@NU&X}owU+IRVlXSa(s(*MM5ogiT`O8mT zx@^HG+_IbY2foM^>3-P#Bjt*_O1JWW&5N5FEVUCrSi_9S1ay5A(@ryYp)QY|Am)UxM_H_5|s9# zSFd-5Uj2edW8_D0Ki=g@eqjGgFPiyM{jckn`?*X1P2AR5CUfk9#mm!qtJ6IjTjuHJ zmD+Q`XNyE;W(z-xd>8W%wH~9sZ`gAa9`Nb`^)P$9JXLt z0V>UhBG!zVGxu&jhIyxGPb{tf>2)m0GR2@)P6H>rvpN^%#6SvEn|l{-1i=UjN07*gZnZ6dv;lRuPm@`>2P-|O6Ro~E4? z`6}#W>51mb`AEXOthFAaoHz8l;Q=4Gz%Bdz06r7YP6|H4PG*~I$B<90hSbAakHKel zX7<}|cK;nr`Jq0s`JlJBB!CY;#t1vsPP%oHu#?$w@{4Fa1|Kg+1)uspSE~LFvy<38 zLdq3fsfUF;VJESR*vay0X(x$a-mI;5GVXL6pPghc>nVnv9C=yV#r&%>EZ$;Gt;ppEYy0b4pJ&*Nz$5KH*-Xo}Oqv)F(C{I2FGYz=t1Wgq><9MV&No+fkL= zIN3?9$Kd1TD0Y&1JIqdE_XsIhaHSr`PGT3aleuAOCy8HrQ(Nt%F#WMU+VA?R>Q8Q9 z*vYPa<$R377BU=tlNpYsv`ftsA-wn5RlReMeWdMnGAvy}|Gm#X>(=SB9GMPrr_WA4 z`vdp)C!4mDfv0%dRXf*%6WsGga>@!0=LoA z0{BcsJL&RSGj|s!=d~}~#(l)6nv{>HCz=oSiOq+k)qW7bhaY2vooXjVopj-c&!}XZ z^vA?_^m-K9nOcv*#}kX4q}~p*lh{2%uUsiRVcSXUB6c#b<`WXX{Op0|e5X!18)+J6 zBfX;Rm%O`-MJ<$UF@-05@&!UrDkA!p&nHDM>s*AVTPf7SUK)PK~6ocPGY2ZA2t z;L~Ny6yLDlhS&FES8YS&(UwOK>GS%&YHlk&D?5F}M;>iY(uo|}2=u{eYuM={KJutT z(L?%>$DB0!3U>O4k34*Q=s^x;mNqSQr=33HBab&7J#gT;@y+9d@XHgnl{FO9-KBk^ z+aR4Ymw1j_bEh}=hkUGsw4tYPL&8v$tGch&(_`4yhCV1f;KN!MxY@~(d^%w+@$9zn zDS3TEvk#i~US(R3pO3p%-x|||2YlcGH?9d4pAMKy+#WvJ5I(BoLpH?G_TY7gbKj`#7uYCW1RG~VHW5jn( zr$~F3oiSrv*YeV?7mt$R=sX#Yd^pE1>D+H2?#K)Z?Sq~XxBk|!bZ z;7+>uJt|#ku9fWmtxQ+#PV;^9x64+#iRC`hW#2EJCzZ95o-aX2Z2Sl=;-AQ``dUff z{UR^zwUVThbR&`H5pmYXT1mfSbgE(l2fM5JEX_|Q=;#8 zyzoEHr^Yx`7*&=e7IF54$fS?*Q*a@hSOE@UDy;*T#3kUGNfj zetzRSVXk*+HOC5Lyb~kunCD#k;w>)Zd~fwX=hfed7w&(sa=|G_IeuOKcVf=s(+Ugx zKPLEII^=Ta@}2(bzJHfHr`7H^-osYJ@=ox)LGJ|b0PjTCKjk~YyHfo~d*6vYTX`Vg zy;En}J~eZ0x9`@bzLvapV({(z?{R6*(Z{`|=l!=I*!P9~zF&VQj=N&3zPqRWoAFMl zbA*o^Tyny|QaSlNSYV5PJ@c7e`tJYOkKHkZDXU*QXJ12SE24NOc;29Qf_H#-qPAAP z6TB*CCLjODd*-ePql*#_*+nj!U|U#98srG+1`1Kq74!Bx#NWkoo_y}gZnPbt{k!M4!6D%A3ZO$asr5wjp+2$skdES<06zQ} zBTTdWq`59m)Jdf?i#=7(=NnyqVmx|13VgI4gO4Xx+$Y9jsJHF01a8Fc5mK(;I$7N) z$ehSbAaPc$Fu6PpkE%6kOx;l~(Zr`kzTCtX?Ezb7|N`#EVn z1|Kg+v6Ix>VRjO`M@YGXt8FK-i`dEjJEff@e*X?_wUcq(PCh$Hf6|=CSlUGOANQ7F zZF@7shvH?h^`$md)`x^I+<&?2V_M?&J=)u!gpZY+OzDuXIY)kV8(06=obF|txuN*z z{$%NpbKT#kslUr#gZ_)1B!4L9-724mGrUpfmh&|2q{!Dy=JQU~^E*bjhr72+XeT{A zMmcY=lkk8KT;P`7JAlsww3C9*!c|{(@=dm5hE)5O{AxDDPHH{Te5g-sKIkh?3E;zz zF~Ux@lcG*~+kP{gtTz@HU4CLbdOZq!v>tGUof2rb)Y4*k6Vt zTbkimI{TI1m9RGdx!zxPKYdfX?POTGg#N!@vz_aUKiHA!5O-=jS)2c2@893IZPWAp z$sfx3=m%u}pg+HzS1H^VUp)H`SsxNEefQbDuiyW(O1s-J@UgR_Hs_?C&)j*C zYjaPm9DC^XJ@R+mj`{oLUvhu{fcty&N4!UMzqraD$~pN&?CJ;1a-Oumku*N(N_+fR z_;E2|e_!h{%6UV7A0F`G`FXF0cMRY&0sH%c&#YOySBg#6!^6r?M}9RM zQV(lA(R`>+Y(D7AzCC~sKgI~tEI(|syj+MIdXsu?cc|` zUU2_btB+sxH@98cUcY!)I)whp|NYT%TmFtrhk56Mk8a`q{;2zV^ha)pt;a0q_Iao9fKPUk zc(Mg5GXU?>P&yAJrIF%o*Cz=mD;FEugoNE=v=8WKz=v`RH?9dgX@4fs zkN#KPpNak}{n_mOvOh~dclgIvf3`#RtLt&cufO&7E{swr!r%S!Za4TFM$Y;;E zEpoXA(o06{FOxX$Y?3{GeeA#q%a#nbDp>Hj^pYP|MjyyLDaONtb4^PfPB33x>{p@n zL~DW*T;N1X;Kwy#C)q7gj{a5c7Iq4|HTsIQTiCPw1E$?dbG*`B79Y17^vzG^e5*|j zyOn#7tcSDjlVR?4xvqzBtnteJH_7oz!Uz9xS|St*JcK; zcU`;9i&CdZS>r&dG!6nRgN!DqI;*BJGP z%?G_BO9S}uV~jA(@{{IxrKpp{de@ToUPrh4Vmx|13VgI4gO4Xx+$Yw%Qg4TiS7P@F zDOYf%9v1Q*b{`45h@I^Io9f@GeqQZ~w%W-Q&P)EM>fdc<*vax#X&;AX%CNSF8M5z% zm%-MTf;!)d@QAm6s_#E$T<_MY>u0?3x;@Y8yY9yqy8XA8oJ;?Fr5cyi^Lnlu{P(`= z1}|v7f2ZPR3O);0{l%$`lRr}HiRMFnV)KDh*B1l$@MDayQ|+Xvlh*9?HMen4QG#5qjlH*$LZDVi&QKqYp?sN&M<2oqoR6sIrrr8+NjPmb8oc*)lB8 zF~hO!WbMteKS_A$;30iWx^HN^orI4EUVW*QKiXF*f6lGb|LJ`3xgRvx$x8SC*H`KO zY}0m<{GptaPw35F(7EM2O*<*_HIsSV$u(IIk0hP{>gh4cd4rvV2YlcHx5Cc?_)I`M zDfld0^}JIUr+QfHiRMFnV)KDh_38jV{1_wbR68l^q{`mcJ2lV0-`@VD)?@JTauhpB zy&YyJv3rD+E4We*d;Lje7qOEguS+{g{Gp$k{mI#@{;=;$XJ#@-7Z#j2Fep~D)wjR) z(%I~nc(Jr}u}~Ses&oW7)})TJK7D^U#IvK9gs(-A?K! zG{4=y!?*hG|HjpQ?pEf`Yv&x-U?=bY*k$hClvg!vC&?emd2w@@KWH8Ol3C7=UN$&z z>PgEA{N8GqG``k1yYAOZYrU(;*UZXcCp%8_U$q`t&gIMNp7Bus==FN=fY0zYk`LUn zCz^cR^TU=cIQ4`9olmWOOB!EmOLzYy!Dr$0?>NOK?PM*%c%j&5Q0vk4@S59i-(No8 zXZl3FdAw^1;NkI6^$gs~-!=KjeTsE1wfZe-e64SFz5Eonu*Y)`Uc6*M>ytO@d{$lM zgo-{t`o0Pdx@=0mDU6!A+ zlY6ka@pjVDYADKu7;o2l{Cxb<%yay(%Qh!s6wmHdPHLWITAW2?+yMLc)*9}hug?G0em{bKa*~|Q}9_h{W+)DB%iKn$@pkJ(R`>+Y(8)r`FH>y zevA>OS$@(S?-zB_t>^s0$&FLLP3tlEcsYulq}~p*lh{2%$`xE~JBeMyPNI5G;wT5>9KTMehAeBN&MFW-1d&KC_%iC7H*w$RoZdk3CVeG*>ko*o{En=_BcWhd$Tj=g}vRG z`(n!@KJwUej5%=Z?dR=nqxOJhPbym;@sY>g66hiSkjI)y_8PP05g&Q%O^F`lk&mn) zV=oZSp`#8VKJrSc&x{`A@!YI=VlPo!9`TXKoOkpf4=${+X77Dl9`TXK9%JYs-A;&ZEbnPM;>#A(1SeEi9CFL4LsDj znaIOpp$87+BV#knY4E2{_!>D!lQv)VL$XhaTs!QXy((s>>TBdVtAC>{V2;V9ex9tS z$87W2Ywh6ypKO=p12@u5sLo^NvgI(ny(-$o=kLLMOj<2JwiiLzN#U!ndU^~#4Sia8 zz^D5#$p>zpVD&}uiR~jwZ?B5>@TqzEW)eyJJaetb;M1^I1w7zWI$ZLBTQHy4cv9S} zqCI@FUcF=T3G>m}`7_ov-_oAD0@q1LdR-8uci3myNIFTk`=|Pc=MixhEuFvoRCns(Cl;qr zaFl!k_;M}M{jmE-$`xZ`>j#h9#P>p_JfA4` zzH(w7`_g(&a1QV!V?I&g7}?j(A1A}y4YIB$94iwGYF+~2c3*pY-^wYUylH){ix&E~ z`&y4XUuaiHrb9e|UKhRHRy+4?x7F;X=M#}Xv<=B8@@4clXB*s;&Syv(pLC@?pGf4Z zYmJ?pX9IjMyH@Ib>wd3pgLr>z;)^JY!uP867;S)tz7;&+g9^CiY5{yYVm{Gqw`8Wb ze~93-X6`ml?Rji;G#~P*)et^fPc$Fu5t|Qs3tN7vW6MvP^NB>AblU8LD*2GUFZq!) zgpbx^@bScp`^4M~>TP>0ksGmlgkHH)cEaBl6?PK4h@C7wF6|`obEmb>PLk$0p|+Ep z3pClVliBB`T^y>&aO6%i97|_e*-665XFbuo@`IDwZYSYmr%&jgG-n&PPJg>2(;@EA zc5?Dr&-6~ZX=>AUlKi2ZlTYX^|2Ci==EoRer`k!8ukM~Km1>9&-+t8Edy?5nt;Z1l6pJLPGa{6DOYf%9v1S1oy0C;Cx@Pqc9Qr*U$pGxOnY6l+#mIr z!3C!-UAScM6fecmUu3LlI@-*cEp^X@o&0HC#p}w)FvYNw{lAuWk+Ae*c}-}iF6Wg) z`OEOmvOXl7boePmseyuL^`#doOJkQ?(c`Vzej%r_v2me z!Rhq z*>Ahq-TUxhIPt!Qamr7%>f;XLRPVQ>H74Y~`_KPsTF-EkoOoYa4Mn~SPFjz_sX?5$ zU-Vz7C&KDw>RCd{AAJ4wa^3Hs>Z8ltvg-c7;Un~l`kVTi`n&L)tiREdTVvMWg^t?? zpY??s81?t)W3s+3|5Anx8PMV%2JgDC@BBwTeAD`>zlHw6qpooKF_%?jI?M+c-0JIn zgIj&K>3$CRL%m?6^PXH~m)bh%j{9)In<);>RnEgBMs z7`FIvW3?E=yj`?sPpbdv71f^I(5MfqH_LjkP?ll!8Z$JdHC_#=F?qt}=MVLDo%CIo z%lg?jR_Nca`W3gn`>Z3=A=0edv&*;qY~OyxbDORY$sfvF*Z-MzqwuKNo;`TM35}W5 z!e5fc*Q(@t-n91l5&4?Q^fn&fC94m$9$6o%m$zY`A9%pWdymz7U3`;iuX>j( zUNRVaw9!31HDP@COwP=9OXj3ZZK}PGOkD%FH602*Yvvy3$Jzc4dQ~A+)JU&KV z2tK0!hg}Wp|Ise-Ld%X%R#Jt$hh5&ZTWH5rGjeVn@v9?dJLd9@ZNJ=HaY*Tr3tHUD zt{!Vz%h9|%5$%}s>Q~JD*~nUHhwPukHK7t{*yOa^G!pzTm8{c8t*f z&?&pRHh1&YG96}0A9`+szK5RMx#@Nc`9V1!y3fp)kw2T|{DVuU^)5JNU~s{-c?(vU zs++n>8ec0(_dHIKr%zmdfs+fFL$CEF`$j#i^#ql3T@S+pKEuC~eBd_v&jvnX+U=50 z$LEtMzRsO==gN8+^2$Xg=_OPvN(Uk19vqs~hXJ*Vc)opg;#8$R&SdZPKj13tyuB_FtDf8W68ki|=uE?p51PsZhw zD8A0JHt?DLV<$UK1F&#Jqe{5ZAWw4P`_@PJSDCdmhG zUALHg+*b9pxe0azPa40ie5OC>6vl~<))UPK9`GsuPV#|U_lu2u`UXyGv6riJRq#m? zUrTC3`(V`*PHvq199mB_A9%oL_+H5eZq*k|J~WQw=5f;aZRIoluTH*6KcP-XYu{*J zYdz6?-~pemM9s7!Qb*~9G7tU`E&Z-_xO?P%`YzWFF*f8ckl0CIx-z1-Tv|Y zzP{yKexhl=IQc`l%s(abhuj#>nEl?QJn$IY|Lol=wS!tBgsP^8${}b&;F@6jW z`0)I2D?Mo1wWQ#q%I`~9emp(!QS-d(^S$-BQd!maHXrh# zwn0Go;l~(ZollH-c9gWo_l3}=YM-=5pjPGMt!^Zb%mk?6k;A)TW z({7<1liyOdV~AhT@+m4M25qUYr;;NUoYmv6}Gj@(XopLmn~ngm;^T&3Qm_^a%o`Q z)TD@}ZWHB5^uMuF*sX50=NtBH^e3j>`r$qH{Cc?(@URvqrm6L!tw!^nP1r4Y>f>u_ zit;9g-Rinc*26VNhPiuW*#9@Pe)a@fUq;?3+lhobAM&5QnXf#2W4rCv6e}HE3jI4D za#wFAv%MqJA%4;Q@0|}h-~Ih|_xI=zc8mO>ypd1DF5G6?t)%Nclg1}qX|ETpbIm+k z8Evv&WG_V0(`+d6z018>>uIiDgbSR|2fys~L7d`mu+Yhz*38|^>3^uXb-n(*D#^2E zLO5wX&2gfBfsc=Nt?Lza)ScN}rMlvDwU=r8=Glnyr1cn_ zcswtp-h&IAxB-5-yR7oGVDa)KJ4B|r&N9t?qXef}vp!d;j+0+Y>j~y0_=tWv_BO0v zPJ4xrdJwL5znu0A?HhO#e`MHf-%Pv7Zr{Xf(Z`EL>SVuM_U`DHZ)&t}vLmt`Ls+|C zUXT8?x%N#_wQmT!D?2%Vn0r%CyW2PV3C(Xp|BYK+d{ZWKUPY!u{I1(K-IcA~-=A=Q zkN!~3$rrnv6T7;xSsy3ml{7x-67_L?|GsQPf1-BL;oW#5Thq=ppM#sr+YCS=m z>f;T+65|e(C%C|ge4yUR{letbw?y{NxUbbPX?(3O-EnlmY0d3#>#2>?Ja4Th+HO*h zhuKZ+AR+Z5{QP!P*kSrP$g}s8V?Pq?DEppZk8OFxM;`mQq6azbQ-wWezbjiF@sY{Edr(#85e_A_POE_>0_E+Rhi zSm%u%r2_6!cHIYk;k|gdKkArF5@1o%eUnbA9;*Zqlfj6$Yp&M<0|&^5+8Z= z=g@3{p>9q)E&ILmt;K$;fav4rk$T zHclZg&&1)(94~_UqRz(o;Hk?7PF=ca*@|h0EnmEB(P@hp4GhY&a_k5p*Be-W&;QXp ztAwAcXTLHoXX70D*G>B}`z`4i-iR}CWLQ%3vHGX$c_o6?<|MGmFuT!_^|NtmSsC_k zYKBdUY56wsKCESt~Af=DLp0gsdise-!ICC zeP$2oB;D>U^$*V@;;fG|dnoVt54+wk%e_ioLy*>)JqHiEyFj=zl;h46nY?AXXZ94l z`CAQ-T>rx%Yfi5G-|1(}ajtt)-^gRfy5o?!o{RUmr00|!dyO$kWe!$M`^1WA3tOFJ z60ExZ*IVEHl{q`_`WAOC?aCWR9-C+AjEL6olXzc+?csSjvuBd;%pTqW-igu%@}1ya zDJ;Bm$)i4lo%TBsch-92J7J#L(~ucs{Gl|)JMn{MbNkB2^!K>drT6Nu3nsaqy)Jma zGy2bMZ}N-wH4*%OPW*kRE#Ka^)0RiM@5FTH7su}DrX${mcY@~)dM9`XcqhuUTHv8F_3kWjplP)8k)X=>EQk`nwU;xDfAz z@C}ha^l8Z_ZqB`}yxeael8zB4jZeB*+mhC~ydqySnX`JTo}CCIAX6}s@N6%w$KR)Q z$1<$BhVXz7&kwiZ9Rv8ppHh=akI!s5Hn@d7Hdvpt%VRVh3O;LYe@{H1=q>yMj`KEw@Sb+VkbwplXjB$g&p5<$KQNaN6L0Gc2h&!N#>xMd)^oS zEbU_92^kizHN&y&WcgjvP7=QG=?i;bzG~;T+e!GqlkmK?C-)xm`gN}UJLjCZe9s0u zdEVOP?(aWs+D?)`lymY4eWSZ?W^hkhPLswbU1{4%k*}G|89k*Y>*4aQ+SjPlH1;>j zxz^(^=Z$s}9`Hc}+`4uP;L{OyQtrW>Ry#)US#$d?JtePi?C%Nka7iA>S638b`d){w5ha{#J8U-T|2qQKDPX3ueF`z3{3MZgwj8yUCd39V;&<< z%4@>0>}1zovb+)g#d)^(pW|RB!=C@3Lx0=5^A+xRk!vSE5nv||I`sFwJMWrxe~fCak=2^rdUxl5_H@Qb(F=2mF>+zTKMmq@)_`n5jx$Oh^bcCIp zooatl@DX-0KTh?q))UQ#dc@`fr^40&eE2a&*r|3>)JZ>b?PRgZ@)P6H>rt?iT92QP zmWrLE-VU>q*gZnZ6-1>>#J&7leyP^ zJ|pd8*UQRYK5K@IHH2v`sD1~#M0zManhplb)SPVJ+M z=E!@r-*u-gcX!8c4r$s>l0TGl@(JC=C7tUxO4Ck?e04|MD}^TOVdk)qPtAsubFIfH z=M8>Wc)$leaLX?b;L{OyGTr{9;B)CEFII|8@+l}k5c$7-6T{Nl_;q{QYm=R2nBcsrC5z=nTb9Qg4UZN$egWy;poi+QsrDX)kq7#{2gCh9B=c?~BK|_Nl$&lVPb7 z`k&wMOt(%yvLe%A-ue6&|E=%&FP_n~og{xK=XO4IZ(){mHRm?ApFGWSo~E4?`TEVB z&bq1EWI6ZG@iYlUUr`ThJ>lhC^!MQbAEd*LYr;<23q|lrYcCYRXV$E@y6w~UegvO~ z-F&D1qdr6{_2lRUR(<#{x`)^B2FlO&x~wO8&St}BR-EkIwcS_R-fsv?kI;Yb-)?aA z@1xRT-ucXm1@7;6kNMsR?xMVrAC$MzSIvCMpKI2Ka;-?*S$LTg=L4iW-YoL8cJAGk zLX&%unz`Qm74@Ok6I37SwLI{EPvJGm2X5Ub2l0u&hgW*@5!2^$=_P9`#c|@J_4xU? z{RXig>Fl>1O!5gc)*7n;l?##C$%Ti+*?i5Z)@h}9G3L^zh=*GqrE|Yi~5Xy zn^->~KFA|J@)&1E5Av8dL-}L=jV+J($YWjsdXUHXBJT_H0&IE2M;_xZ=pkLmV?Ge$ zo|EO{de2LIq-%=PYlpOn&)Q%jE-q-lw&hb07XRUYE4Y-aWzeTL|c6TIqSD7}s1(5mluK(*V<{DS@R=+qtYrVg_?&{vm zWnbzU`G3+Mo`0VV`_)?S?7Q{+K9TlT*LrvDChhv@?lP<$W`;a(+M#$KR=PsTUwf@B z`e^5HoirS}U-Ha8U~=`he^$CmxQ}$%_ltC`kG0;UgLIJ}q*tUX&9&a6YE69i)6x0G zeWc62U!*gQwcbUq9mbQJp?H4rPrP4ZT*iODC?ED(Z_-J+-COD(o=3!4A8WlS@A!X* z`((LS$!iGGUe_CUfTeL=Z^qawvLWGP{2~8Zbi3gL{byG;d-*tLwY%2)6T5uaos&1d zYrRKq-Db`U+idBMcYV@%;lWimjqy04Ka2Nu1NT>+mo=RJwcfk~yc4w@b~PE53Qy*w}PgnwNx?*Q*asYkvOyesW`C+d4b*uq=5p4#wE zBwOoU^4hP#iTKzNoAqsU{I`2Pd(5_dE50uGggAejLwdJ)|1T>381=T|(gFWgLH?g( ze_yxt{(aZ)b){QRoZzf19h|tH;CXo`{PhIy0PjR$bNNp2uGkNe@|?rAt@SP+EZe4C z2gtCxnHh%FgFJ6m?TbXXzSnyH^v65)T)lXfYqLJ+44wKR^&aXuhd=%CLGJInyT3<& zgzY%qZK#kx^l8Z_V!u(=dW(F`WOj9m-q?p|#f5)HefwpF-_`hw$amor(t7-T+WNTE z&Hk||c)$mVaC@Vy^%i{A%-zo^c)qk~KIBuYA$+u+Xg<^@HXro9QPz5kI_a_puB;TA zEI;H=tD(oo)8pr(rHT8*7#8)mJ;uSE*gZnZ6w&xU&p%+neE7c5+ntmI&APTJMT;LhmDw{LHn3bDjKqKHOj@ zE6yqI?>}zZPLe;A^Qy`xIKNTWdW(E@`^!$wYdc5R!!>mdH2KtQNIBPf{N=pSPQn8| z=z-fCWv#d1vu5u8PWEN`yU~1dGqf+5JZmO|kJjVo<4UmBdQ+d+e9-kqS?ew8q_=$N zhn1S=kBH_&{g_N)iQOZlT*1}0lh{SdKo^mN&xnz1I7o_ukg~!o^}O_gv@506Y26d++RhVVjNI-=ja` zJrey%@`rLxJ`wwkvesMVtFV(r&leqC&a>}NRu5}E{&L=EC*c7fxWMg=vesMh5q7fB zq@5(6S`Dd(wVr4`)F(C{^uAHndW$+~Yu8Senk+x$Ppct(v>rbnEe$(Ky&YyJv3rD+ zE4bQr61#|pk*T)qmVWhW2x`dVSV6e%ANDn@)Dt*BUmV z|EwK;#-Y7bMl@)XAC>(o4aBX zh`yqnYdzuRT(o200UxBpjcdYAnsc7!8aBaa&D{69<*vOS!AJPlsQ;)Bb6d;$kb2Ti zMWJKYu$gOm?Q~c7mGxr&pm_D;L|el~eo)@Z?=$n|jkbm@H%|TmttY5H)N^0q0iV&g zNIr0Tqpe{pj1wQN$InO1O|JLtyftj_fDiQw-0b?NbLNh>XAN7?<6}R0I@h!({CXN& zF1q}{13shzZd?;~QhVZGbq$+nPtbm#Ju$MQY){b6AioLI^+V2#y+%~*IVH#IIKv=o z%!wS{LA4)d$S{{T!?1ZfJZEiZ>2D%Df182cP2c*eJ5JW#Jwh7Gh)mJCi~9Q3U38M$ zf9iFzpPbb&Ubk-RL;BWjJ!mg@^fiDmc6pZgWv%lo*!=A2L|w&fO}~PK5ORgj9tX8~E?@+&X=ZGwsUV8|>t*H=NNoF#jt}+ez|= za!x*>yS%-*H%ZcRnlwJ?O8X20k*}G|j!w17`Gu^d)9GpM8|7Tvy)nnpHJg>D)ouY2TuP#duIYCS5fW%n+0iE!#>D1 zvbKU44B)UQ(@kg~Ad(345FZK2gbrjQ3k-`oV#F2!#m6!Ui#~+d;({XZ2G^t;p+%xR z^x?3G5fGb2MFbpH|5aV}y|-@lcDws_r=9uV&nG#3=iWM}?)lX@r}paEqXa%Ytb>MW zKVhC>AbnEm>{Xd`i{hjw$Hd1|C~*?MT`o=%_n_DnxY}`&xJaBtBI&t@h8ZWtajGAJ zZ>`jelk7RUi7!q@j#qK9YjaKa^wVl_GOfpDpu4TwHU7?=cbXn2OGin^`N=C+$A7YH zweaajXJ2~vp+#}>CkI|D*4Eq_I8LG;>>NFTL*L8))23(QO%Am^DfQ|&@6F~~G%oMS zG3~tA4}%BzfD5<{KU)Hy5f~>WKI^6(oXrLF!vp&@7AHM9CO$&@R(rBb`x6@De>3lM|$|t4}u){kU!!#`Ly|w9)7InLJs}IqHor zVZDjme?VT~L3;Qxj~+SjV?Hh82+V`G`H>!e%r`_1`GOzoUzq1>e=q6bM|~SP@L?Vk z^MsiXW%DCF{Me%eIq(5z=2Ou=viXr7eoDJyt-Nj*P)?XvKsjc9hskfIFj4kA!GHBl zQ}rYG+H|DvZI&+6P7cePx&F(QQ_6pN<7?mnKI}~cZl&>Qhdov&hgv`5JJar-Cw@f2 z-rLNRW8za{d|K}n1U}>w+_;Cf&-iq6_BM+e{qTHqm=yal<#;7Q;v+B5e%Qmw#z(zZ z{QpSb+bmhee#RB6qOQMyk0-~pACDz_o3WP}dz(d%Pof-?Rl?i#|#-~m&)>9>)vM3 zGgMs9@22R$Oh4s&!=|!4^b4lw*WOzSdDQE;ZeBC#FZ+F&uMM%c8TlYz z=!5T)`3iGyvz`}J`R{tmZwF?5v0upKJ@RG0FY_73-e!p^aYTN<{3pwo+}q52U)o2} z-e&r{$hUZ*r$$6bql0p??3-!xdyF!T5{*uDPKD+W2OjiZ(ftD@Bs&Q#+MyItnNqLes}tNDHG;? zca#CjME+1!CMYY3Z*BkB%QCR(E37g>?5KCpZrsE%j%u&}ORupT=Nq#lzd>ov?Q<@j z;;!iLvj6qQ+Ss;#+&KQq-O5iKanvpG4;}e|teK*g_Jf(O+V9TiPmizay+im3$5HaD zr6~Q}^%MGgDHG;?ca#Cj#Nc~XnV_uLoI@VRt^bT&(OabE1vB4iysu0oyLEfzLy8W? z{FHi>{e9ebd{DKcpeH5|jqQ8VH$~l{x$}a{&39UM=RWaecOECo#6HV!goa{P4#Yxh` z7uq)a6Nose&e;8@t~+hyi<9ZYbzIy}QSx6eow(x8_@l4MeOH?sC(Gqe%AYv?KH<|J z>{j{kzd7;VyW$h?y*F^2L_gU1kfo>5vOj^;>->v0jV0ZFw#t6k?0@znQ27o&?8zx_ z=dvCH9^eCaaN{1@PU{K7+@C<=Gk5OuqQ9%Tm&8ZM{?J)t_oRh+Twu4A#kJe+&* zG36B3Ts->$5AY!u;Kn_)o$3?+&ifNkf1o~*-b2+VsAr&WXvqDLA)dS8-|r}~gYv(F z9g0SF@zZkSF??t8K-J#_-O%T5{OOt_yDzx)FwwqSKV|5d1N9h|*AMxpYvzjQ2k5`^ z6~$EArL4cBAM6c1kz%x*yCL=JIG1$i-7(B!FNIDd9oF-F%)bTsjX(6{Sn(Y_GEYpr2YP_T$Mh z@$tCH_vHEy{C2s1Na7w8y8>6cACkC8oE+Fo#Yxh8IZ(esj+6CH^>Dm(mz=xd-^Zt? zOU1>m!xT+#;iuK&5fCUj70*ji$y=RQa4Vzax8o_L*gWUyIh{faWWck z-bBh+FM_UuQ0&~3W7>IfoCFW>K?b;umUA~GJ~B?G1J+~EQ>_$yJUNx|>C*nh#s|5h z<=hSFlfEzFWHexZ4Em{+f{!Q1#K+?%-;?c0{C2rGN!){CSKw;LN#Y`LGJ3L#lcbN{ z?w=DJa-6KYJvq){{^zis*W%yDC$*JsKTg;2@?(BlZhk8o@6+eOLGS-E-<5H&`+eti>2{;n@4Bk@CNXFDJAvaQ`oYfAT2Fj`*Q>wzjX4** z(fzg>O;5hU-tSK8)p0KCP6dpU(MI;Z%ylDO>cz_Sz4{qt#O5oEL`}j;2mKol@ zy%L{w4<6nfarIW(KG09S6hG|AsfB*P0pD_2klRjzN z!?ueh0=DQC|U7wGy zIcQ}ePQG$?ahzQ9YAU|w)$4-CNv$9396ceoYs>bv^DzCe)T@k>`G9uLJ_P6~D8Pg}&vc&Kqw;!}u|0o#*Z4X$H}xN=Ndr<5OT=Bz_-+ECsBQ6prkx2Tk z#Z8Tq^=?n#Y$L2uttVt(*v))#a_BS_7Zax|I`|1ctrjOc_R{MKH9g{A--u7z`-G;q zC(G5AJI|gIpK#Y_g-?HJ%0GT}a8Y}*^ZB{)3Ck}D94FBac8;FFe`tsHwev9Jq|~e9 zT-qHCXy=1^eiwQQN{N%69G{&R#Yyl0ALM{rZu1iOv_+hp9BQ1D_^f;I!0u!~e9%*^ z6ns26mGQx!*!Unf5-EWX59^@q8YiVsy6~)RV)=15JojqBd6n~Eb$qmu1bjR>K78Ca z<$JQ<75`l>P7?Q^*cG^%ak8*4te(FIKf7NEKEzG<5Pxlcq=z5tl&OcqhxRV;I5Lz9`qMv&Bwqex!$=DotV?u8xyLb2ZX@vFFX2+xehfLDZAyIP<=GGW zbK3Z*_lo}?>HF3u+;Z({O=@9Wu`25N3;1|)O#AUzvTrT>)Ut1Fmb?#hb*~)JRW_`O~$mBipWxp@;8OFY~IoD4~ zj>VV!e)&(9FS(D4`M$Idd*52}NxsD^g^TZzX*R^Zwb(oT!aW~QcCWKnM8ev8F#P=} z9bdn2QO2wMAyozMk+vTt-^<>E=6;lv0m?*rmMRmJ6#kMSYj_VdF(ozLzp#?ng-(piJ~7RGFZx*pfpn6JmesdM6|nmx;#qtxb)u z+`c%h=hDokub-N|SL|hc=AIuD<2TXnR_k~`-CbJloeZ6*kz*L$v4}Cyl-u~il6xU*5_yU``S>q+_(0bt!5O;L@W2L zeeU$n#h0G&3*jd&%XU5S8J};mF{*S=nc#a%l?loKWn%bLRVFAaHvjhBf6Bjat)1`4 znX3JgpQEV#yxRRp+kXmu(9hBHUcX*O+x}DeF~kX3vk(80wpiE~)s<7KpTp~i0uS)% zo2~Exx6!u$RH8-Wn4TOHpW=R8@BknD3b@%NsD1iz!=1Ox{!>Y#f7Sl>Fz&G*Q%jfaxAE-|xPE_>?>KQioaOZc|eXNeLuf{ti_xJ6Y ztNrgcH2t!lmTOn>y?uJU3-rs|_r^Ba?oCm*YwrHO#WtdHH2IcCVx1>%5qH)&_x^PI zyLDUCTL(4ymd9hA4{sWH-WvMB-XdC0e1GI4N8a@hBQuT8n`tyX`4Sr(ggUMz_3HHh zEgN3-nY;HJ*{ItuP#K@p zRBs#woduyTKCT=SAHl)KNBa{SA7u3%QUV_y)?@8gPo%%WDmY)aQRb4RvNX_M$?n8u-6Mqy*kccvyp&yp3>vmUVei8 z!Vi0Le0E+mzZ*Qj2Pxnd*{uXVBQQ=%eCDnm&L-X|J--dTK!+N{$CG2?Q@joee`4c9 zK6>^jfe#PspkdlinCpe5Pn!9``?Arot?9S&WK66*Uk&OhzCwXLJ?MY9L ziI32})tqHNqYOMLXMLm?)&fG&p2_JZa-e5X!I68EjM?8?@jCVVbBe|@BiI* z?9%<+`IE$)f@8CN3y&A^T3%ki>)m%8EuPDB-zs0S9L*F(8U0}AIjtvBkCuJ^rCuFp zuWTw{d!?(v_KGLRwDaOP2_E1BF5os=_WhUmtebXdHrXOS?8&K&5B|i)2b@OBzW>rE z-SqfvnUp(@+uS(m$uaRk>)v`-{C2rGN!){CSKw;LN#Y`LvSWsdlce`@pnioMC+nRS zX|yNV_us#tao2S!E)LwPXzF@DtrjN}yQ_LBbVKj^pUKXS{qc|gBjVt+Y+}EU6~)O+ zc7b?)N8mV#ez0@&1m2@%-+!rBF~>EV4(Nv?@y6OKo*dK8i{m7CfDgEU+i2PMU*fZF z+7a1^J5Q{#AMR+hJ?Y9Z@e$g$+LQPb8y|2QE&KjUpS1Py-^=6!+7J4vmC~N{o}X5W zlWFY_p&NSN|37@-m$8?wmHYZn%brvsPX6Ho55->E{#}9lUC|GAj-J4KwCwvY^(y0J zGGKc$e^_I2(vxG_d2yTs5AXpOa2qZA{!4shoQ%5ht8$z~Pqk9~uqUT7KKK(GALNdf zegCCT+E&I%cdbox@$uxC_@H&8J*oY7xj0GOgSvL5tFZa<* z?$G1!;<`OY*&m$+~|{(+zzN%F@m6j4!?7=fdBe zm;Kczep=MOw)BL%#2VCl1N%etgT0|AzCZO=iTMCLtb>L*FDuM_Yo%Tt=j3cYpg$Zw zw6S)BC&%Xxi{>?g2l$|JaO*kLAFm4fZHxIDlZ7`7?;I3~&$?-6Ws?Etoua2&De=ma zQyCxpiH#3(J3dzeA0F00!?d3;=QT>7v}}j5*+h%lb)Fm_KCVV3j&lA#{<~befw%|7 zuE5o9HxL)yIH~vVBE6dd{UhW!8N$3q&I{Yzw~tSHK*hzuFDg2`&`+zy$u7O#2D+io zL0Ng@P4Shxd{6lF}pA^N(mB0ULeC6*8=ZV>n`R-*onkni>=m$GTPrRHyvVHA5 zOg}93>Np?GCIa>kq>pMWPI_{Dc3u=G!2^6;TqxIx68N-5oD8>JC-GS~ZEiLh5TB&6 z-yk{*Lfts&$}#aN?*GJ}*!Uo;ueSs~JgkGZYn+rmX^Zp6WK*u*gmY=a1wNh}6CY0? zaT32>E>05np!h>@EsB#mE)pk^NP6y}A;-zO&q0yv$<#S0oENr*FHS}-P;oJOg`!>a z{Ipt}95`6{L+FM+2j#h)zYu@!hE>9+pPxPS+iQ#BONxm~m3-)p4e0lL70)9gX^7SB}rli{d1BfDgEUThFT{+WT!0Cnty6o|O2k zo0iO`TC@(!lT#TV{E3YZI7RN}sgFIpeY^w_Gb))cz}S2Iq^_9^RQ;b*TiVO=@v=2(}``a7E+>EXvd2*`mC>kC-F$2tX@AL-%8 z{A=W}KMeU~pDWhU+x$omKjuLp2Y$@!WM3xchswQxG|u(fe+)3%EWkJr{f@p?_?Z>ekI1U%@&8@@s(uMyn~wBzTGFmx z_WOVTovoGN_tKBZ{rx;SrTo9QKN)y{5Bu!1@4hWr;WKj2X~~trC+u@tJUJ#lqMt#W z0V3wSPNn?;9^eBW;Kn_)efIa85^DXH?~AzeUHMD66#Fsdc(y6=k(XyboJV2fquwk2 zzkTLkOb+$jc)m1Jru{LF7aF84KCT?oemv%!)55tdoYRt@tj=lS{1z{T`W57ymJ=6s zPMtM-*`g(OV&mQ`GwP3#i2r;FUQJxunsZv-TKr1PIdiuu1GDwKu%(JdyHx+ppfP`6 z=DpT)T2c#CTucl<@d{fvV6(; ziRSy#KJ0T^$S3(0uM{r6N2b{j=d@t&^jr6wqwHR1uZV=b*M7Yn*Tv^AG#CHv25>G_tbhxA>jX#OHUEm!7|KN!>XBTY|C9va*C zq;CqJ(A@o!<#(03PKw_)<+8+kg`c=l_=!EVpYZnWI4S;yc)o*pUip$`LiW#~AKEYI ziPWh@qhowa>eX?+m`w*=XQjtI(Nj<=^67+|OwFbP z?mt$?rx%jA_T$Pi@$tCI_vCmK{@d=)=1t-r6uSb~vHC^HZ@nmT#6{v{zE8zT(!&=T zZk#-z-s*ITeLKea>Q3p;==S=2MF*GpX}Nj;-x=*z_6FV1^FVIcaz*ThEgukZ@Y&2} zyKbfHPF|e6VaqRw=RXe|C(#df-l6rx_m7r&AX2Z6b5kbbwx=rl;XYk1&{I%~oqKY8 zc3u=G!2^7d18$>b9*D$e)yiBZ>H5dY_@Jj+DfoDDD&vDcvGGCfXqg8hebSosR~;2? z5k8(AA3mtvop*rWE*B?>dr<5OT-nULi$h;kH2)PptrjPH^tx~8hF({2`qq!d_J6lL_w%XDgr9a4#mUpR{zGj4FKjNJ zSH7e_D6}WFez0@&MC#G9u0ZP5aaLt=0oyB#!=R_26hG|A@!5G%oCFW>K@R15aFnbo zkoc@xd2c2a&<_ta*q-#{nD~@vPilW+;{#5kWnF>vN&PP!JvkAuo{4^HrPz-r$Hd3u zCf}3oN&I%XI7!@tVpqfoJ5CZ8iIZK6RGcKemjm@H3Es)(`s=ta;$1kLO1j}^{4VX#GlF^D&pWXnP+~uLs6W3D*2xHQ^~HtaT5Jt z=jaK%N6R{OsaMCjA(IanCv(R%*01Nu@!5G%oCFW>0T*x^E$h@JKC4#Vmr1zuuA1AP z^yE~=XGr@K8y^>^QL;{5`lQa^?J_yyjwdu1A5V@CAJp!)C-K|m;v{hoid})L9Vdy4 z#L4KnDo&E#&4B*Ve*0T-{*M2gx}K|5Tul78qV{*xdOvRE$Kp2+-?e|xhC~m)1 z{a)?&S7&0ue(TOL&c+2X|I++_Ec(Yy)P?>p!r|ml4EOnZ{{NYS4 zpg*kei4`B=4?Q`h{GqoV06f5latm%<=aj;y9oEx?dw#OSXVuELGWizaoNmH%9@TKPrXeNsxNe53c=?4-}7rZ~>_vB{5Z*)8WG%Qv6g+VRDR zx;ySli*^4h<-hXFyE7|pJ3h1ZltpXZ2Q~hXesjD?!}l`hbeyxT+eT!}gEpewx5HQ= zeW8ps(x*CB=Sj+veY2#8UtZ7ALk@gsGtwtZ+tcPpdiXJ?3^|lt=KkR0nL{Mk56FxB zksf}GDImw@hfiV-pv{l;@MEq8a^S~z!;di_n;+@nM;ih;e5Z?xo=eMEu+5M3@Kf3l zXV~jGA>crrm9{@^2a}(y`>@6c-_2Sh_}a96>OPa5F!y5NJ0lyHK66>9DwK=5k0-~B zt%&gIKHvd9ya8_9Llr*lQ1@xlTGdEte8OH!9C78C_!QTDSd(Yt10FUV>1$P^o0P_9 zoUMpD@39|Gj){-Ql(nj?O=YcWYN}eR${JQLh5F^LRTT^3mi5l*G}b1a@sVj&yVzWI zw!i3j*}q1Q7jqNdd{mwpz?GP+`V^)oXU*wdB2N;Sv81<`r}fh{kKMX<#nPW-BFj}D zZ}iKG_UW~%$wRy`AekNFL{N#z2UVN7Bd2KOML!M7r`GpmdFU63(67B#5Pr3O59!L$ zzE>5VX$x1gzSA!f^B(!K-@xll27t2UMXCBk4&>6)~aIfv=N8TQ+BVj z=Oo@ZYSB}M|7pK59_B*$*Q%!OQ2u532a57N_0o%H{6fqvbNV;b7>|^HKiVe@vGR8@876u0FvdkP_Nhep1%Qd;49LpbCXV8KN_)u=aE&56+ zeA=O(BYb=&O`4TSysI_%cydg9isw*+2l!ALz>RxoJH@Lo$9VX@W>ex7@rihqyI935 z;@H6d`r}o&bD1aBy*757h*xSZbLl-K2Jcb+H~J$*2Y&3Q)$}`{&t!!Tr;ih{AotT| z$17R)DRoKt>%V@Xh*dl2e8{)FwXwtL$=R1adR56-X7VFmp&#rGJ@Ibe5B&bH(K!W; zrYB$GaB-ob@XmBnxIUXnm+4pZ<_^Me2@-q!`~=@&j{Q@LgKS-S|l3@ zh);*n&xp=~Q1J2OnD__|R(%40V&j9X{GBE6;b9##Jo^c^K2h*Vxy>?(fbHKpKE03x zd^|Z8KAN$7PmU|&x9xFEg!4-f00?HVVgPueU$CX)_mKXrV1Aqn_+a!hv$p05rZCwsJhuygc;HgbPzS3939 zkPo#zDRlOHCKu2Tqn}zScJ9eB?Y!6zg9rE^58OI_TmqjF7$;@9UpH-&Y${-TGN_ullbj&agw+P#omY$cAO+G5+}(T>A8ot%iQ{LTiJ8#{qrWsZ%~?a{bcDBYMk)$ zZaKH!aXJN6bL;K5>+VRl88zu%mZR~4H{Z+L`Z31bdfH5sG28dh*Fas0z6$DOW*IBY zt=GN_e)NqY2R@WJ>U5M{n;+@n$6N;T$(RB8bjQ|oAH2o z>EQ>I$RU4xH)Bh*Ax(ZWh1+4yAwHS8hw!y&`;6&^Tc_bWQ?9N0eX{?Kw`-^PWKWLe zldYHu9^ivSaN{02(&w({%hYMYp1bbJG4Uy`b23NQ#s@rX+CFo{nsm-mnYRBpTM>2M zV?PmBj){-Ql)3B7RcG#c^8IS=I&<2+6zZ3ryFP8!1-(l;W64t*k4f05j_^f^nZ&$i~ArSM*SD16e zlbfn?Hn_FFyqR&oUu2f|$d~=T{GKr8h)3Nvj^tQ;*>l9r_oXiFIpXA#e8Z9Nk!d!> z9C7T5wod*!Wnbj4=ltdG+6fTEAH!tRuc_>^Lz8{G#kLyT3PM%B>gPFYS@5u*zbIq?lFiw<-t+I)qhH##d z{@zk$f-*pv7`Q~03CfC{$*{^qqx%hPQ?%cJ|2!i*-_`DO?%d4MZ!Y`j3E5wrcdqaW zmHR~M9t@L4{NqXfc^8RiRUL3>ouawF`)N5p$oCHE@g(T=@B4;`6F(DWqPb^WZB7O( zx@&f~_^w%b?%5}@ORlaDZoZ$YTkyPQvN$`LSd70tT<5AfkdaO>Ew z1U@5hJW1lSZrX|2sL|#|7p3U1K1-m~vr2yhA5%^xeDEhWKFEk3Tml~+)5SpX67FlR7RECsQj_oFqMbq3yd4*MD|L-(PfJ$$CY}f4y|^8$I!x zFZsKOPtA>!gewC zf1rC8Zk&{QP0!pun+xcN2OFFxZptZV=dvCH9^k|0gB$nIc3RgY=f#Az4p-u{ZrZ-0 zZ=<;v{t*9%KTLi@`$O#~?Oe3WUaPX*;9rO9Kcm6Uch?ijFXn$&pMR8Xx%>8f&)N;; z52gJ4&6fy&yrs^E{|lFWG$x*3E1p-rB<|AQ&A0S7u(}=}DsVptD-SL>3S0q!d;gkb-FTsKqgetf_Ke4>sTvjR6eR|=m)>^}#- zKi2J^44kCQiwd9oMkU(~Q)kUywrEM2l%@VG?Pt}>Z)XxM!pD>&@zINQ1U~Ze_Ui)= z@WJncn|j~-U)xW;LmL1EDLvy-WPM`>qx-xw-9M`X|T-^u~{WKX&8C{~42KSAO~89lO=v zy?){wKYq7({<3&p`Jz67ey}(6MC#npH~MgIw4bWc^yEv{_rhFvAoVKGuFMB)|C)1J zygXI^MSa4Q>m;A6_Egb)72 z#s_&_$CSW_hjq{}?I+BBV(F9mpE-VV+MVNC$HxUo0zRf310R=zd{6chDvzg>Idry&k(;c67M;2yBmLE;{#6VwSIiU7-wm;M^WW1 z+9`rAQi>*J>yZrQ=eB{{t=x@QV7V*>R;fEa~hkStx<%If``Mol} zGRGhPF!YS7f56wKD!#VExI>fHiUn-v*m?-bc(2*hF3r3`|>TS|Cn+-e4HYDSW9N(Lw;=< zM*XzLWq)=S^nG*ITILMDQ$}z@e|GK1kmL7nial#BSzF0k%UrkWhhPn+otY|YE!Ene z8B1o#wH@N9#KIH=C$^+_)>8k9Cp%AF|L~uWg51<4tyydNrw{HFcOLo6n%wnjK2Fzn z6wR}b;Bj7iPUd}EG8m8!Zl}hp^E)frv#Xy5WK;8NvOM&QROr`Ug9k(Eq1-o0lVjCd zMkxHioqX}UQoh1mYuWR*Dra3ARbFe!d*sW0Uw%&*Yc2DJouVU?N?hbWsV{jRkNLjT zrM=dYe3EbRO5x&rWSR}J))Kp-f4A>aWnVgbPI~XFeB)tZt)XhSwU*H;@%i5QhsHOX zFVB8Y#6G%4t+l-D{-=~t|V>NTFZUrd^Nt$oWZ!$|Jm%1-#IB`%B#yI}xo>Cjl3X)Ez~7JWJvQFE&HVWO7fs9l>6<^E5-?fO zYm^DTw^W&+3{WOIzM{$mWyNM1YMBu0^y^)0SzIRkYc1`3SG!MFDHE^$_mP>4zqNJu zzFYhvcGn8ECOh}nq3%Z>{jhI5ZrjfxmuM8%8JdoZRXmIVNEt? zKKj>I^gOEigp+S58hy@B%f&{%H>u~^L2tWfWqj^m-Vr`~!_2iC|AEiM$A9N5qCW9# z=7wFw9!G`Cn`<|I!6l-;aaG{8X6T1LCiKMjM;CwQ>!V>!w$!VfLlCV}pF}Tx4USQp za%8(wUqx%O!2^7F5!`xqDuK@koNFiXk#h(VLGdy6_d;husPvU`49b*K2_O84jSsR0 z_A7x859^@qI@eD6q&1ITbyO-KK6QM0Aqn`HatwT2w(>nW=8xaD$Ao#2xaU$GFTi!I zeo^w1?QY^CakA%|Do&CfzR)n^WCPV{XRI41-_X-x{BzPH<5Zt&$7?D+M*h!F%k?Yp zor$AWA20N>$2W~H`~Kk~J~cN^mfO2zpFO`G-{+P)g-@TC{m)O|l2Q5e;^aPaZV`Po zKL{Kr(GPZxp7{R!S2iDGu0?3nP8&^6zQUf9F7@g-M`xo|+Ed8yIm+w%=WjtMc5ccs z?7S#Wf(Q5@1Khf;V&g+TlK(h$e7o9D zm~+ylPrCi6=QHUR#Yt0+fe&ggjE%@RiQg_4Cy9G5)$syc?KnwXBu=Kks^TQ+-3;g- z?YDQy>pD*Q=cMNzQ*kl%PetwTsP+ElZ~Z!c!etY)&5o1h@+IZpyzd`{PhXN%`S8Da z^9v8fZ+_tqf#W3l!OpAcseR@wgu8Z2>UHm zfDaPDjeBT2t!0&Se!|+jMB=k<+H7HW&An(h;Q#Q4iOY4nLAM|5T!h?iIN0VN^xkVX zaE4aIdHU9!j^f|IZ2yCu%DJ2XF&ddF89#2htH1BSo!<48_FN{{@0Xv?|;n^ z{%)7-{GN4dR6f0SL+>_mF?MriV1I~yus8I?_YZeJw^6&+d!)UEwP%~utK+2i%6768Mb3c7w!c-Lx&T$$)!fB=lM8=qo4%A5%^x zeDEhWKFAwpWWxF}wKy5kYgwTmK55_hHQDz!z1^_2t#Ez+`097ZA78znn8UDtcK?ee=z5eFCl_Zo zk1x*d8#qp)AM6}GA%6JP{!uXwb-_NH#P@%5hio+9S^?(RqNkt~J2&MRc3u=G!2^7d z18$LrOW@NMaWdSsHVU7;vx$KCpr=|X_?U7k;e#Ks@j-5GqtP)ArF_zE*>sEWG36Ne zpmw)^4ZmG3P7?Q^*cG_iagw-5ob0+%#Yxh;8PGpMj*~L<*L8V&BM~Pz@x{r+uT^~P z*;vQRh@Y05qeNzUbex3FIe(MbBaiMF+fePvU)^|D_n&_?SIF<^zH7yig38N_lfSz0 z7vg#K`Cif=$o?DjgPo%%#aFCx{&f4=d6?}fp-~m41 z0&cn0CGZ)6aZ=*5?!g(|(SYMn=&4ppoHXTl_!OUCnA85m#s|5%FO|TDhjq|)ZBI&{ zbXxaLvBVa^_Drec(+f$!$CTsY<8hVm$)JMYE*B?>dr;S|G_H1>BrXys6W>yClJs5< z)US}^WZjzqc>S*IA-Jh8PIhgg;^OchRlH1Zs_voH;$-4rJzqo9-yeHhY|3vsnjR;? z$JYBz%fAx4Y59Nr<-=e7)H=L5!CO)pQ?e_`jQ9K+6w;v{&04-&v__#Y1xe+T#&FV&el&sh3OO!^1jgnD!H9zpL~~6OMXMEZL$s zY05G1aWzVu#DABIlf*rj>UaUJ_+iO!y%0oPBu=u1oAho5^pE!4LvS-+oE&~Y#mA1# zReVfs;ir68xjh7jb-MwYnUh_6$%6l0^TS(H!mqY|4?!vai6{Gn>~UF{51IdE$A8j| ziz|LHS3F>NGW?{nWid+3DghoxQ}=ck!;Ks!%2xQC!A$8YEUJ&wQw ze82(RxQDjS9xV!=u=dcA_^eu)&!ht4lRBxfd5xwViI1KPR=h`x_9r$z;9=7+<~z0H z9)i**4Q=0dr<6(IAO<0;v#X9e3PDgX#1W) zw7D-%l3(cXmMTsrwpEnB2c>fD;{IDL>E2NNu4?V%JsHP&KBMyC&w2lE|5L23TqmAa zzT7ye^?{uyx2mic?T71b|F`QIM9w$w5&C>!O1?#QZp!i7xj#;V2lxy=r0RW?V;kjm zs>g)cUXl1b_~5k3k$`d1)=SWP{IDsSMKR)0AK0{k8`vEswZlm>>c0Geg;xl*d zSJviQgpVnwQauJdz$f~!vLA3OjZfX~&9SyQYv81{aQ8x%_)MC#OD5kUd`vlp{RnmU z|IBwrl*R*m`W{jEfLm#N4yb!R)3HlCr;2?p7Wd9^YC2=f&WG&Jl>RNOc7Vd?+)T7Z z@yC>7*pL29Z!b;o03Yg2*paOl?ceI&?6h6a@RInfT6uFO+9LZgm_&iv(-isdUrL@18pGN!3o;OT;ig_#eGv>dH)fs>v>EXvbapb^< z`J&99VV<|mkM!_kUkBvS{|P_(PnpNc-jC#u^e#WW4*_!E!+LS%!Lpx&oxeV7PjmYJ zk%Ru=N4#d=2s?kICx6U~Kn~-gd^h9ejMv!tBR%|B?~5Gr2VeXl!e^aCOXKCFLaeI)CvZ2gfQe)L-*hy2mM zKz*5h3Oj$Khacm4$g%n1|LAA5`H>!e_ygpSFUkx3CXC~m-z(=Yv6m};IJ(2XOFKH; zd8Ftu(xQ5dDaT*W^taQ%1AGQL6h7cazM<{Yj&2S<$rj;b%Bh48cz{pjJqjOi0~cuf zw4H_K9ySeQytAFpq=>f2znOCU{!M9|GbuQOf-@;1 z6V;g%oK<1tQ_qg)$7 z{J@=j@w`&L!aS2Ar_ZA3c~|8#DR_^3+3(Bm3FAzP+%}c{wZujKllqcpQkd^cUD{_- zkWcb0UMXCBk4&>6&ZNMum}ZvGo&bnXsAHa9>;|#xztWQdP>tNIQRk?=4j( zCEvigVR+?2Ns87^;sO2^j#yA@lGWRb% zMYypuDWX-{`y=j*EB(Ec39~*y8K6u=f33;{WyLNNVXob@dDn99?Qu~0Op5gH)!d!L zf2cNNVqZTkS6?CzgD2=VtfnLFObYZv9}{}w`$yfG6kAuWJD``Y)4VnfIYhJ34H~n;A6_Eh>!LsHa^H3ZD&&Cw+v=K=%-c+ zKBgQ4AD5kcPwsJm|F-8;@FH;!id_*W%sCb7g&^W0adK!##Yxh`7uvpiZTrup==z9? zi+vwbl>FCAN7`Q7=m$Hmrl;V&el&qiwJ4WQ*DjrW^ww)b8#fir+5RZXoVKu`6)3 z+YQ7;H%_iragy|I2K0}R<7C})>WcT;_Mb_Sny%tv^k_vpPWIDkaWbdv4LZ{H+D1Rv zIeG%`QMcE2KtIgfA@mfK(mxP2-Co;9{6Yt%Xve9I zwO8_n9K+6w;v{&04|xH%(YDuiq($u&Q;vsE@m|~b6B{3J8f|-R=c>&2K`-@E;-o3Z z!^h)FoWyUJjgva=^=XP-fvX)SiHpR^hxX?)US}^WZjGCy!jgJwe3HXqHm^( zi}^`9KJMqI)#Bu!_J`1sw%0cL!OqbWc#pQdwi5y81DI=2&{YtMotttDJ1>fp-~m3! z0JqV$*LFUjAC7#Y!Fr4#$H1p(ukAtYPi%a^Y1Hkt9dH~M{nSdapQItjz{h1roWyUJ zi<87XD0T&|cAO+G5+`$ysW?e`Hv{@d`|h>vKa(PLxQdH?$Le@F%TM{Pa(iv(|3ldu zbfoRIjef9m^n_k)s@FE#e-3=#y?nvq1~%3+xrbYrduy=Qb~GS9J<}V*$CM-SDYw^lUi%XpAMmhg81tRl zd9Uq6KzwYy1idFtnsWU1qc{;K@!RF%BykUlU4g3|Cy9&1$+TX>O?vw~+IO#Q|Ctna zzB~3*adPNXMeXO+?nl~Q+vo#3Pjpw-i}u5HxBuIHukB=u?A(;&w{w4-1P|~@?WOPm zH@m#HQ$40Bdu_L9{3~L}G4LtcYa2YkCvt$o2i(fwQ+GY4-S^r~wWwd*lvAl510LX$ zK1tyNZl&?5+r72@Ufa1A;bY1%>_@2EzegB&fX~2Gg%7xu#%BcYwcVom7g0lwVLw{k z-X3A#0Y225z^x2EZLmjJ_h{ zjW7HD;oTeRY@&Vk{Ca$!TkedDotv`%`RQ9SDxcn&@cYcUCBDy`ABg9bFWK&v>x|G3 z_J*EFo&U<_V|Jo(E&kZ(S(}ZfCtqQobu0DiI7er50mt8RdOeJnpJ2b}7cu2Xf2gmb z@i*`QA6^8vuIozRGXl@LmH4cic3L)J%ix_U zwfT`AeypcL4t!Ww!8}veL)rXD4?p&GKn~-C@MD~j^&af~$oG;Se(Xbl9Qd$aob@8C zJGb*kdiXI;jvVv{KiakI8)4^<^zdW;Aaa<0#CJ3Qh(PM>mU^CLa{^16P49P$T0`qhXdHb2tCkMT0(z=!p(*ahp5ZT*oR zevI!Rhy2kGPrnlV`F8$D4?pI;AjjrMJAv^yn;+@nhr>V)`J%iqzQDM=`Mt9K#9prW z|42gBFX3y`_UUhK&YtZlV_t;)?P1(ge=_Cx{lCAz89cxzeTc#b-0VEHPk(cB@JY9* zy>H5?gb#Rt&%h@XKHydcpEl@kZqAt$xfbDL%8~e}#&hwR6yO0q$*95y+)Crq4*ku| zv7cy*>bIsGzy0|8o591yNAD>PZl&>QhyLa!oq5nAeA0#-&wkLh*Wb(@@8H85;Kn^v z$DcOnZ*C4g5o2B}-y9~TeqhQm@G0(Z)_d>U_>{|281sVK`AmwWF-}}g2aWt4d`vlh z|E9QeCIx3ua3)3KICUlkXI0pFsq0LN*pl8^OM88+>^${t>^~!bmm@E}{OGI3%ZbSs z{XpJNPtKatyX3@0b9!ei>GiWFX-)L6v&Y0I=YN;!xlPUY?f73sdrnmI=emyf=F!RQ z)OsdG?wcyEcYRXVzpn7pnlf9%%d$N5i}%s5eO3XiXvcBiC>@9>JfZLdO7g|?O8E-& zOp55cRlainP-kY4FSFg*FaF4T6&ZNMu82{?HL)n+kUJ(gKc>VE*&}PdzwFF2=FD5VY}Ufry`AsxoLz9RXUv^7ds%}g zf~WpICo?;>tr)9$Hv7}FF3p%SYxyn9>v)lX?=7{5G-ZG?G5lNYbF~k)<%L=%Z00rG z7ng|!&!nhQC+L22$L`B7oH=F9n7_yNz4V?!nOJ|=cJcG}>Yrj}d)Aptqei)SU+2D^ z@=s@qr3P+cd7qge;P0y+-!*>dcfS~S`ftnr_{^7lG6S+GyhfQw>F+I7CMW}xiBwj{ z<1+pt)G{G92n_G+ng-9LsM61O*;9|KeeT6G1r~|e#hXnpl!@D3zb1aidFOYVmVykDITqqNN+uVsSIdioS zpV^BRES|NbxAXjY%aWao<;fe1mM`t}xru;Z=zs0iQ|^qvddfOcCYEG>d)nJ;{ZE76 zQ6~7_Qe}cNK$%FURhgiy*wVr(6XBmz(%6|4=_-C=lP5ouUA4p!Wnp{quTzwRsIM%b zr+WP!>B~_mKic_)ybt_Dw2ZN-5PDjGfAPpMmbU*`WcbdqYjLSO#FzhbdNrevEv z$I4K(FGKfD_-$-gcr-RUwTXCM`I2QqjuE0C`k2rYsr!D@ z|8*1hM(0R1nx1@xJ;zGw)p2HIlU3Rn$WI*S^=a_8AXMsof_TxCBVgbvnqvhX;KPgH zHuOLVd`93LD~Zp#Y4ftFfOD*dk8KPeQ%)s(@FzAt;1u~$34C~12MyDH!kl9zebP%i zj?d<*#MC-I*_QM8X7%U=KKi)NqGyKL(G zMYEO(F}3x2NxeGGKsFuF4>Jbf$EIM` zXnOK9*3tNEW8+hhz-xi2#Aoj6o3p8abH)1_+=Jbeqy4ZP$JGD4v1af9A3g}&xQ7oNI|>_^6o z3H1e0;3rd$JxwTrF3RpoG5?dJO4(nGiQ2 zxA*H`Qzhy#>MWUebSUtjCDSuo*IT+2P4Dif)#@=RebylKvCp5|{lv>Z67`48MBK}X zdRyr}AX{Ix-j~8&@|f`SqiYZU{2ztf-(}zb(icTOq!MlX`WWpJ&r8vU5|8hjsDZvfu$e-~w)ghn2u*1h)4jK66+9 zI-3uOPo%*!C`~yYKB68odFT7Yzp2;{{=~)yoVt!Ffe#PspzYe;mp*B`t{bz7D&wzp ze6lYIanh7y;N!kaoWyUJi<87Xms)Y6C{F6QNSsVPrQ#&%-3;g-A;-zOYrtN=IC0W{ zmP~Siii^29I$qB8)2eY&xA#+;{`9Kl-Iw1!qv>%{2Yp-ZPU6@9yLSJ}pYC@0KbJje z#&a3DgM#PiCREJw0m9DQKt9rG&drG3_zhHK|irxS1c z%;fYA!S?>GtljcY@x!JZzn%Nnn1ToR3@udnfSWC;eb$(UkI&q>m#s}~-x_>OIR-wW zU);Y&4m@0ZCM$fvtqeYOk6g6to`%wXCQaHgli#T|_?U7eKIO)hhBO}FlR8`B18$}9 zX@@nY;oHxoNeeQO7TJ#}$FLuvZomD22lx!1qw&$WmB#0Qy8EBia;(mp$4%{g$oWf! zaf^_~Wu^VBTKTn1e&-h1k0HmfAN`r$xF2|c5A`N+v-Q$GYfPJg&jXoMi|oggW8fpl zWyR&;10LX`o{POhv>kB|9jSX7D*Jh*YP}ad)JtXkZM^`5_7Ux+#Ph1XL^~?|-Sd3o zFd_FV)_q2`*RS}d4w?Ql#Rkt+{x`Z*(Sc=t%DSa;`s>m2_Mi{GxL^FpU+&-Ze#NcJ zWT^l0gX8^||A$z=bA9%jY-iEhymhn-ADt zN;h~GhbhOXPZaelf(Q733*~yWoKY?DnY;JZ*<3(;&{M6H_N*zV59{t#TpYL3K7;v#W!V6C2~qWc#I&i;PC zxjrG}IC-%9fi?ap-uu^ordZ@W6&HIBQnc@UKdlxg(>hK<*B(AQK4azY*KVkO#pO@T zk01Ki&x<&?XLjeo(?mYx<&D2BKYfu{2YYGYIEj9+bM&P6iu!5ya~rkiJe6?A-=to} zH)j(8?cCgJ16>87_+e9yVdq705G{E3YZI1Rq11U@{hgSPAVoAgQJPo0v7F=g%JJK|fBX$R zzz5#o#ywQyQ}_5zyPmx%@maO4`P7)W1lRbGACrRHmqj~!r z1l3Wg_q_Jx>$)iW&ypETskoT?ilQC;ep+t77i2~CnIX{I?pYb1`c9@aYd{{&GN9xB9!+p6tBoIcDXl{b1+l33<`QpBWYV97w%7&SjaL zF@A>*O3~p4=hd5X3_CAsPl5;dkQZ?4*{K9RBd|Rw@maO<&P;yCV178?;6460FtJ#k8+Me|flIR-wiMv0U7?Q(IFxCh0qz!g6%`N{D~ z;v#X9JzYufWvbW=W}jO1}ysO_Ji?Pul?@WF94FBa zc8;D9Tk=dV9@as_wDU0AlTxpaGcg+p7$=hr_UoB)3_CB1li&e9s2to%o{2XC3;9i!vSHR+R1`_`IFG@$*UpIWJlk0Hmv z$7M&H#BZ02lf*qJb_K3>oFpz1ClN?`?xD#O)E?||AC_a5ELy%;btv#SFfF9*tTVBY zGQD$*BlpC1oPX*#xuq{oMlVxwF?qeBg;yK+@A_LGi?2EMb`hVN8z;+UQOdu5uNQ?+ z-!ZH5;eYe`KRq75{!h;bj+5vIJFljvF#3(cIh!He@h_>@^|w5q$p;+&O6xNL{MxU6 zhn<^p%Gvo$@c=x)2MOTDJ+z(XHOhKSatC|;*(vjuEL%QnJ{b;3B|ht>ZKCI`1x!@O zYxr08d&0lk``56ZjD1E}PsTn?rhk>=WTb~5`}!e=b=dG@eLnjQ+5AWkKlX7%4t&_p zjr~*DhtcLodiXI<4LQu`gdgh(*k_KjBhVk|;m3F}a^S=K8TP4Tewv*>(!-Db9OS@< zaYE+dFurf|BR%}+e?Sg=XeTmWNqf`gM|$|Nj{|bhAN*K%L4T30KhndG^~lJ9ALWL5 z=t29#lGvoX zvs;{c(AnrHRk-Wi(PPr6=kvEPDfJ9fj=!GaAKwKJ@JW1L;R9}V-r8sUy*c=#S~PxW z%JJjlUmpe@;1l_g!Ux>S;8XYbdwA4M3W2alf#;y$M@y~&i~^5S}FLLa{T^HapVk7&g|q2&*WTnh9_rx z+VUGX!?SbBoH;H#J5Pi9Y(@74{Uh<`)}Ge&9~NcwQ-AVV>a``IpMq z@avV&@Z>%6Wxp@KCyX;ZBUSvh#6|v-`jX=n=KE5Y_8Fe!lYEO;3K!oa(`<+{Jh3ar zi6XyI_NB8|M8Z0AYwD6&3wp)beDyYHiqBzd@C?r?;{+q_3{U;NoVhhdcurZC*NcKk z8K6ugpH*dovSJsCP|JkPyoUSYGSS!>p6M!m1|#hZPrkQQnV<|%CKBJ)akz}X2(?VK z(HWk}D)S#l+8LgFZ>cgt8K6uI-=)d~WyLn#u**cfhw~NtiN?jfxl@%1%8Fek!kx1_v0gV( z^$gGamsDFZ{VCmM{Gy+ht1t1rNxdgEbflf(iGJu~LQj1Es5`^6N*e>cBtGKxY4Eoo zRMy`MXLuTNXxEGMMRRt+1ALGHZlmrD&wy(u1{<7HoigN9!e>DH6B{3J8f|BIri^lp z4#K3^k15B%#}y^tlXJlE+xDCaUL@|hRL2W&HRn_m+TA)X5+{f5QE`&=@P+=noZ;Db zrHYF~Hz=B4?Wfh^WK^Fu2OVi=c%mQdeE1TjA8@v5qi1k7n%>KgnzI|$Tma7Sj8|5jTu(SJ8Y=@2@Sz-on=Q9+hG4xNn}S)R>B&!1&WIFec;>6LZIGXz z-B>-wl%xHy#76(~#+tzce2@=r+(Qfct@{KcjZXvV$wyQ05odTt0>;VV2Ist+aw_42 zzqj#04>oP|49-T=lb>dt;h6~N-^fR;6#r(*sZ@_4u9mCE&|ZgPSKw;bW2m=KkBR|e1eX+Gd#6^u=Bju6L^oh zGd!z|6`+@TDR!PV3Hrmecj2L=D7o}*&+{WrLrW_BS;{F)? ziH#3=8g*xQwrEac!jNO&gWBCagz?+u;v{hoioJoW9Vdy4#L2GjsyIn{Hv{@d$Z@jn z8fr+o_xr&VZz+Y zf-^iLMt`U$tN2%BeuIA4kYm_+QJe%1@F6GQ#yzy4-?rGxBHX$EoZ%S_7$?z3t(1C< zDW?)X_!AqSa&j9j|Ba^i@)hpcSDfJ)Y0+5-rW^ww_wyuqW02se2Jtcxz0< zwR6t!Otz@s$du!^bN?Ds@Bp9mH3}bav&*Z-$NqER`%squ7Nmubk37ROXVfnOe^d=G z5+_YL20o%++`q;YJiuq*W`z&9*`hT*b&p(xx5hO5Gw$RWp3xTJW6F{Elp9w95Af-@ zPT>P?rSYlTy@j~OG<^G!XL#mY_@BH8}|bb@S)xWZe{RkgEgk%`?pmqAIKzHgpVo5z^7>396Z1WJiv{6Xglq7CC|VO zYp<(TpW#XSi1t$Sd#b%eI|_Y6L+)2>+8LfbKU4m9_sKW1L9r`vwfhx`i^R#u%PLNi-pzpi5ptZY z{|rwt3bVA3r#E!d(tn2M(C1WK>`5z{yu(kc#mT((htQFBh9~;L&e0QikG3;Ba{=w# z+-n0}1)N|`*snAUjN}M$1`0d<3{stc4 zgA8!v9@^;mPP?DsnG1+dvO#=IITD|8<2yszpV;_-hfTxSW3SQOkyW0;9pB*$&s4yA zjIEcT_t=jq$8SIS>-0Po{C2rGN!){CSKw;LN#Y`LGWR1DCrNLAN0{wNn|Ceu-h9r| zXL#m+tKwqUw-il(+fU2w_d*_WI!;1I+8Lhc2RlbkeE(=W!!sSQKHPOuWAiypIfk7V zwI{&?e82_VM%x*lx!r=D;n{UYWB8bID&d1avGD6P#9bEEd*<2S z$9?j2WpB_{o#Bamn}&UcC;Gw8(^^l+9c^cLMg#icRD*ullw;U=QJe%1@BtTa8*OKJ zCIaG#F*cR_!Vtv}MkkM+p(lfaL1!#s5M0kHXz9)9eXg&g=%uHnaeNt++(;YYgxIq;(# z!jJuYY<{GNAN5@1pf~CxwD+mk*!)NjKm0Xv$RGSzM@GBE=0|$?G46&O_)w3co`s*b z%M0n@$2bvk$RGXrtfOLFz|J4(;m7X%&+w1$f(Q5{f1&Hm8aMI{ZJ+V? z=HQcRQG3sntHR~24+9VI8C<9E0XJK|!l!Qc7UKHK=GaeUk6`U6TQ5QH!N-(S$$r2Ce4_dc zHgL1$YWt~sf4|t0-dRg~JH__5%N8xMnb&mRoHIQ0d$k51Qx5i1>I_ft03TEYZrnpP zK5ekRvN`@O-y;8J$^jpt<0AjYS%o$};9=AD=_hK=8J_7qTVp?_9KU~48s`j8&g^v0 z@H|zW;mO&aHa?u;Id5U_tRG-$?S};QPl90y56Pf&>z)3v_^J;UzhQ&U%ZWe?Xw+WM7xmtMrmTqbR*9z)7x_=>t8j*=@xIih zeTFCbB;Vqd!o~NZ~!DD?!dXyr6LRmYzcEKf^Qfu(IQxN3?yf^i!8nnIE~cm0y9by8p`9 znsiVm=e9p9<1^ggd50ZvI>c{8U1+&g-q`KN@dh!+a zxePQsf-W#sFi|`Cr9C9^O5fr=7s9`YL7?oKJ^kPeh*y7>K7%y_2QGL zw@{DCzpCmnq#xSkVP8F_|4F+ZGrf25tR=IS)mV`sRlOA%S&!)}d<*AB_|Kh=I48d- z>+8_O(<)B)jZuF`U*%}mLRF86oU5pacUfoMj>4U6uzF1Pz%Ol;b)2g+Dj)uwue$#W z;`vVEdF4yuUZ}@t{gkuwo-5ne&gFcH{5EzyroIzs3b;D+Gtq!?lJ;|DEf+t<&OJHG z&euIS?I`| zk58lZ#75JTKUvR|`{1RvwEbJ5o#wq3@RzioNt1TTBzJF3J;sw$9v@kcA-+9N{} z)Jvdt95?GRk{{{eN8CmZe4y~7JlOn54?on69QZ)tN4YcktrsRiy^4BP?seTCtNV>Q zR{Q&lLfy|{|A`0HJAgMfI!2tyEw8tAf6-Xy>05U?ihqO8sJP_PH}$=y=q;)H;kk$Q z=yoUcwFCPytG4?<=JFFhEBY5&-(Mu5jFCMZTWxui2|2y za9*(|$Mi$R=W`9}a#{|buB-g`=<&RI&BgRjMD|9=Lm(5 zS59jC<<_%YIVL_HFZo`ZOe*ZT1pseV|N`AxsDOLyAsuLTih!J+$MSB{Af-a`3J>4)(P<@_*y z6^gxqtL=yJyZGVcM#>Mn>3`y{54X!YyKd3`NRBJA-)gdMWg<3;HvU-E?GZ zL)A;A{0skcs<7QVyJbFP{>^&nc`x^f=Z6>m&bO7K_(Sw!+Z$;HzUudfBeh;C_3Ahe zcjwEDw^9qDUYc8^$_07~N~PZAc(^CW^oPauQp#yre4g>+Gg9lNvdk~|$WF1OJ6{h( zl;+220K)1Y@Z^~IcqmI8WxW)?P_ABzUxi|C;A+=P@w@n8=FO5m@iV_4ZkKZ}w-NQy zjSK4em#&w-%jbtZ&8c6xjg(&=ezm@Os;HM{1*iTESTD`4y8qiE59R8me-Y2WFY{RO z!VjYl?A+E%`mcUFZ`2QmSud62Md6KyOPy|($(QLLsHn^u9=d+mm80yOv2aPv@o?|} zA4Gv0_t18#mxg(+72nrvD)Eu^Qv4tO5V`nC?xD%JTF)Tomrh+WYeBtZ5lec{o40h{ zqJ{9Sm5$qLjI&W85&qCW&$(895u=}^R9fW^FYk7o?PHG9DQM|=&h^%_OUZ1;-z4ti z1!KNlYF@`UC#}pZot|RsSBAu(!-BFQRKjfd{Vby?wy@K(!-Crx5y!X^o21- zO`n>bKhndGu`}erhy2ke$DCU`f24;Wb5D^&{unc1%$u8=7+HH{#{&4;w0&arWMN0)&0XU=qgC2WyjL$JR(o)s}Qt{) z^XU1#3wjqW3%Fj={@y`r%^Gr3*&SN4M)Jp-#$(SP9?ABN(`zJ;P;_vX>RT9YaE)Yc zXVu1nc08flT2Q_>Y%0q`zhH`f?X`2r!%uVHC>{8hT7w9MpR7N~i+u6CQoh1mBbnGl zt&tqkROQCe^P0ST@gDiI-*gd3mvazB0j(i>x|cbe0E z?QUK1&Np8Y?T2Xhu6O=2bK8@j?>66@H@CBQ{?d9|R3<0?@24kyEOzDm1#zeUj_fC2 zeBCG0|7PVoSzcw^f$z234(mlhqzq6d67N=Jg0eEO$SM=ZdF{z#mMmJnxKNp^oR3mZ z3u!y+Oe`46^(OxQHUD}OTW0iGV&pl@*nuVZ{2L8b@njlL54XWTk7=Q$F9so z%k-mH)@JahQtxt{!;@py35&-$zyo}c1a90z|9}4)ny8OTe560b|KSh2HdX!*KRJAf z-yep1F2lsS=dntExU}%;tiSWm3m+O*{%_#Vil!sV4??SHtwZlq0)6f7o3aN!e6H{} z&0T*-UxS@LDgVU<2V|Z8wK^a2jhEb5`P$tp#q+}g`$P1Dy`d-M=Hq^U*yz0BM$?lo zQ7aY5j|pvkiqxyqe|t6&&>tp}jg9+ya!h~d6rIZe9^k|GgInZn|9DVAzh_LGSa1Js zc=${X9iO>-|1g_!`@dytBK(VZ<;n5zIeGBJDbD1b?-T!~QlG$&*!YmMzU|uAe!{Fz zNS}1YftO|TZkw{X_;_+We9*b15+B)Tj^DQXe0i6+2gR;PWtEV_jRba7}-I`$G_`%scAKtxnAWDp${E=XZGWK9eR*nv!afANJ&U_{{p){~cKrC$%53@d2mQ zZYA*HVI4HQdQ7@BtTa>)NRVJ|i$rN_-|wnm#4hqV}XG z$HV7{O+H_QPnY&5Ha_4qFu4RiJgkGZYn+rmX|E|ybf*IL$JFuZg(TE7JvkmeCQsrd ze!EiIW{$syIpd$evA&ll3kGH{vAwxBA!HwTg3Uv%Z#9iQ5|>2b1LZA{AFV%96&qCNRDl@FO~FHY|Kx7XKf zF>AeeUil(Uq95!WJ&`(nT>IL2m~m3-)o~_tM+4S}hxGmc=qV`0&OJFkJ1_FX-~m3! z0k^JWOW-pCZ9P}$?@>{?lH5Du-lXP5gQ+*Cr>JY4-f00 z?HVVgPulURC%Yr=`i17=-1kQxgKg@I~5=EFR1uv>aw2S$G_{s_=-cX&p4mjT*S)O?^`A1KYPcO zVjcdL*+M?7k2wC)i{sBOxk5azd=V$n4|Z8>XFy87HM)yKj6XlMYxP zHs_31*0ldAe%O;!-p*xvA3VSZZs5i}w4LT_NPLnz*!vrvGH=PU<+J9K;WncZAK7le z|KSfKTPc5tpG=+X_lF_R*Eq0VwG@v-ZR}eg+VdCPpZ1cX`5m=?)Rg&o<>Yti`XO}J zJHM1U{=mUZv&W(29H&y()039QUS9b#;foK-zBFw!kq>!!?S`i(eNsICp?F^T!XKg^ z?5#`diPVF8`~6{~{;bjTU4)%%S)4RQ(tJ(39iyhehoM@Bkkq zfLnU!68Mb3c7w!c-L$>4sTQ>xJUJddJMVwOVRpL#e`4bUPD6W?z=wx*&@k;M%=sG9 zCmp`c<(XW-c6S}0UPyxdcyc^^OrG*R*>1pZmuoi=_n_DnxZ3Ro;v#V}*P-Gh>GLa^ z8Yd4nzp<9zUYukcD&mWisZCW}%>7lx$&P>cX|*_+(EHgyJ5T*%_cOO7v(1i^v6f}icD3`#qE;H- zyhf>4r~k@qv_<^`o*dK8i|2WR2l#*sxOI&$flph+$#CbLN_^(-y)v5)7$*lBoOkNU zG4Uy$cZxr;@d2lvjuQCrunyX;aZ>uEw@*Adn+w?PuH(}SN!&Q;%JJdjvL#O9x68#z z;vN)x16Mmv5*LY+gYQvslJp(BH#JTkq5{| zP>P*Dl94~kuZD}Gq=ll`v5MdIXu z-m8K1Lzgx+PJY<@##(-RagzBOoA~17@MbD5_Uxo+atlAL7AF%6)ciH*cMiBbcH9*U ztF|Y5I}bmikw6JPwl1bWv2A?%6CW1s$**T;UV2bbdvf~eJH)4-eo){ziGHwi^n~25 z54EqIhZ!fOUY-7{vgv?!o@>w#dvbhsUKA(61AM>*+;U?};4=c_q{L_L-Zx}(0o#)u zdXE|O6_iqs`G4%437i~Nwf~ERrGa4BX;~zK;IIgRur!D=nI2)#5RlDgPap{s2uTPD zG>atc4M9NMIzibK7!?!|p;4bE-2)6t-Tf*%3Lih7q&zY4!CrNo4?bLsAlsEEMVT})o2v|jjGqXP zUQgoU)l-of(3GX3^D{!S8h9}`gcoLhWFCN`eo{ZAus%LS`I;E<)PY>R!pA6|E9e0&t2U&{&}X& zgF97Lys%`Yysp}lH_rK3_l4& z#d!lyf(Q733%GS0>VwZHwwsQ zg>`f6gTwkeQy=Nk$9!q*xO$v*>#W~nor0;4^yp*X3+%8?fq9s$UtvC{sgLyNV_pV! zcwTosy|aH6>+(%~q(>k9a@av1Cs0&5_Wh_+WX8`rQg8RM|$)zeuEwI zg+9iy>Gw1Bksf`tudstY`t8w2|G%k^^ys5KfF1NuZ)5y``k$$f^yuq#cnv$?iaz#P zp#5g*BR%>khp~g-+<2pZ->IjW`bdvH=1F3Qe4&r}Exc*!BR%>kFtCFj=H*ciFhA0( zZ<^h|#2%eNO60}pWfUbpRwE!Q-Y7O!_*6e(Y1jSV(TZkJXyogI48GejB*ytr6K%*m`o0$+f{X z<aPONEPb7B0oqTbN`os7x^<~yPVG?#)0(xW1F8x zl6jwu=e`}I#r2OW_g5Y|?9G+uWwy<(jrB;v{>Dd5w#R=qt>?qU_qsM>^?Tar_Xm>RW5GQJl-Q@R7(Q?d+ku> z${R24x2%i1!3R9RXKLu9C`myRdKK)pAjUVBYAw5FZ)(GJsx~K z53PAP-Vg9mcJ%t$nl+2p*#8!T4|sqN3VQePZB1S)ZVuF}PXkXaDN~F5&fj zQMZe=HnQsz`u@xMe)Q@0%ksCdla#fcb;)}aBnO@O&dA4KvnmgN^n~(|<7Gh#L;jum zvw6F)f5*=!PCj|ZuaqDDXqTN2@loStsjIguU;2@|y5!%3|4(^{e~35yM9Pj?S3cv# zJ#K$}-1Out>GgcKul}d)&uQg!$ofPo<~ihEJD#v=7%u}4@ZtHvZSXiBd`97TnZW1d z9d9h>$5Efa6aF&q><8my1--jSUhL_Rvb38nd7dEI;lvwq_UU6QSDszA`DyK(Qy}cm-*BVJ zSDyWP`O34!`g`$-&Xf3uILA*?uf6Z&QJa2js^>+F8>ey8ldq(C@^7cCW8?Znx#qU( zlqJ7!nc1qJ*YA4J--vUs9glk(coICo2fg6dcYqH*qmU;hKEE$lL$>P%oq5yvE35<` zubpQ2P@b6hU@te#2Olm*kV(c*k~}HPr02`k_lyirdhK}daXku8Qf>$FB)o?tuE5pg zNq7;SWc-KpZU&q$?Xq9iv37e>oHb}!tb5nbDd^Zk@?vT)DV^*`7E>>|s_W9}-7V+I zpbQH8_kLum-8Y`9$b9H`PQ9dPU+=cBH~)zDXqx?k;UD6>xMy=eIpfm@9@JcY;8jom zXW%{IE+o6ITKM(!^ljz5JAa^gE{ZYBVXvK_I2ZVU2l((FgPWO42cJyT1+q^6r#-N3 zY98+I2hZx2Vm$MnQ?~1}tgUTMm|)8e`(NWH za))lCs+Rmk#O1oSW}eqPqgC`B(8oue$m~<1Z=AM2V@UKNFb9M>7U|JPnU5V)A7h5} z0h;H;P`5Po zksf`#7}z0SJTG-q%1-a|3NB<05oK*|-{y6d_8CiW&0NRYMkCWE@!C;bXwP-D^s#jC z03YUhfgAWE+h;7j(`Lft_E6&aN^V_Jc}-l~gd1W?>MF`k^RaaB03XbQ8^4k5GnU>O ze9|M-_wBXgeG|;OBy%FcXQ;W6?b8-(&0OKk5Oo{g)2Nd8@!Ij?gI;l;;2-b+AFhKN zzme_J7HbVY=^^HB;)kdbe7ttN_z*wLeB`BJZ=z zj1KX;)G6y-nTw_DJzL6weDnI)5Ne0KEZ&DD_Feeboa2iE>Y@COD+k9*Jdx-Fck;#c zX8B5TE_ZqpnXf)ak}q$)d5Qf;?jv93{UTiwbGg%QeMe|){0LmcKjAOYXY0LR_|lxq zO+LxDeM|kr^N2KSV=gywMc+f=P#IrN_8LUH^gWE(G}*p~;t=(x@pr#fIq|dW+x-pA z`yL_>k~er-|AVkU{_byAGK+q?Lgqui9`=`bUq#;o&r9FKSZmAryS&UbrF@HaNk5Min9~Ec06I#FwX!yzy~X72e-mg zKKP8nc?QhK%MDRxT2 ztq6}^PXazAj~x#_u3B+leZL8({5Jb=xe?w&5?A2rt&0ktgcsq--VaEgBz@_Omhxoe zbs>#Bsn5sD9U*zKcCeJahv*W21<8Ul?+W?M>~$;usExJPnXR4qc*6eb$6o9FM{WDc zE3f{uEb|?GJ|6xd&hZoeD15Jd<2=c};gioAQ~5`J{Yoz6e6PL>VwS@mJDxai;7RZR zA8-M;(w}_r8HGG4@!6_U9HK3Ye==9Z!^dl<89tOJCO+h&D=H$m1@Xxc<{n_<*?U|C(avq59x}gAIcLGAM%v>yAM8Gj3C>UCuNzmU!@qbKPJMX*OS1L zUOOIqT($5d<#rHH!h1;K3S3Q|gcsq-zU?JXlD>9POL;QtG+Uo_(CcdZ24~KcyjVQX z;mgBx={h#xOVw#lBKxMVQ`w~R*tN!!!v2!q?>2dp&N+5IrpD$;{6n1MC)|P=M6jw9^eBm;MVb9KKP76o|O2^sANLUl}N>G z?|bbu!zb^QCni4N)VJCPA1+3a?aGs~Oggoa3t5ke@aXj<@TAv{2On20JW077#FOwI zlDGm_lPBRtc(P+p$&;jaGvItlcziPQxu%Wn$@MgzEF2_xvF8LSs~^#&`CR7js$FB)o?tuE5pgNq7;S%)3!V9nRcQq-f7wbJzFEYioRx_T)8p{df7AyS{1XLwut5 zyW$_>96w3D_FTn>+P6NObbIoeyS`tphK%#lqIl)7*N!L78+Z~tzz1BwE%O~8d`4+| z@|wG<-jMAJO1uB?CTFY?M(Bk`Yqlgu?7l%5a$EaoBO4G z*5D?)AFuG~H%`8>TpXc(Bd;Aj&h<68-~m3V^Cdpu_V2QvwZLcjvQjzk;-h;_z1i`; zQ4T9RL#)Ad@Bp8|!zDi8X67cLHMpkQ2)~n$pXJM5E*C?NTSUlkJqh@D?Reh=)(}#@ zfd}~X&5-yIM`k`8d?Jqn%KdgGOf~fm|9A5EteUcZCGY7c8GfFIP60k%JI(L`5Adm; zBk=(@)1re<-18KUHT4evcPsGOu96<1`0?6lh7WjvPkNTb2i#1*Irv1~PRw%R=VPYc z;s0(0J`*cN&-~lr=V|B^#E;ibGkm}Ue5lugn`u$vb5P{ zZL|NSeg3$<|7A*R&z3$V%iqlYQj-6u@|7v4W{>*(5iRfc4a%Ref8jk3Wi9K}ip+<8 z=POgrvaf&JzTW&peGmT-Z-uj(`>B2QTuF9+Md8;iXWmgRhOF=9W3CVM+VPf$pawqR z0Y0gZNqoSK`;iVl2Sr`z2Qtp?WN@L`9LMJNw_@?`(lo3 zdF?dC$H4=9s7HZY06zOnjM!pw@JXb-lsrBMRcfC1+I)8JZ|@#c-oFp^o%XEPPBVPK z1ANfm=itU~WIMH&1U^Z%mjwT;n!>z#o;GCwkHICjVv?LPJ^pkC=6@2u}F?36d?W8E)y$RFdMk1TkL=X z@y5IY+6ksU(xZ?180{KxKp*RWaON?v-i&&fsgLyNgYU2d4&;w{ z`P3UseWXVpB{z1!0e#G0gy+2a>f`jz9*yu~W{Rv=qSutNpSK;(ot|v7V)A=2=R(#i zO}~WwO})iyN7Y*z_sRwj@JVMRKJ2Y&+Lie16SZ5z@|?R8`RoFjr`GJnoN>oVl-Gp4 zr1#2JcAAgVg9rF@bV+=`%^#oG=T4hyBm8a+KKT)fAFmznn_%`kfd}{uOp^G3o9Q@b zoH1&*6XT2tjMKLUpVA27GkKw8J=kYw)R! z5I$Zz&G2E*bMP5lB+EDOFlGCU8@A{yfDxKUk@nc};)B0MIVjpc-~m3h#S$NI<9;OL zQc)||Ju_z~aAuy!O>6MUdHlvRCn@0{uN^NwX8jF3z$bU1#0T8Wyn#>D3Y^3ziFuZ- z!6!dL_;~F!!v{RTr+S>k2i$`2iCTek@JXcpmgIUKp0hMU_;~F!!v{RThqE`pjeH}C zpQsf$2cJahZ!N)R+i>HC_+z+|@~z~t(+nT*03Ymu8^4hbK5Z~=*qZXKw#~@k9#>@p%=gpXT+=7`io7)O=b=HC7E1jRZ zdu4vIT<2aq#aZvZM9v>7KX2RB3_r+iSVy^ zh79_K`#huzlIgd<_(y?Lho$4{?Vn#_C+0r#W!^9HwQx?5mE`}9zsLvq!V>uv`AYH( zqrzC}r_6hr`-}U?mwCU)XA)-^)ja(tJiAwl=NJEkzr?&-@BJb^%rlJ0C;7H-segDL zk!Ee2VMM$$-#NXPjC&`0R?mt%=e{g5=X}~_zH^s7HYDdezdfG3{qFAV4&`6pC9-@; ze_BfJi7K~#=}|G4cuA}Gxd_Uiu)p<7YwSE+Rrb4Q>z96HUwbC zZtH37D&_n|3x}WBPBF%Qn>MJYT;r67>uBpgOr?d(WVzUTY_#%m%a8huJ!D@$Pvo)bhj_yu#9Qy>x?g%etCxqepFQH_PCG|QmWN5Uqoq&B zm5W=`PV+0Jnz}U9Man~EM=K8-_Wc157a!-n1-G6b`{5I{m(a3~Tr_9l?D=zM&s-4d zahlwe?0Q9k&!kDy%e5^>1|Ma|i;q2zrE~ko?SF?6Ka?ZjgG0cL-^h02t0dPe@_en9 z@D=<7U!{(cdioKbcOAac&(W%0AV|k6X=GL8Yaz-?`blD=lktCm-So)IN0`<@ZD@yx||>4L@;j zX@y=M#^sy1>B(2p=S|jewSHC3rNfnneKGevS9ZMRq18|xf(Q8U{NR>a;)73H>{Hii zM`m*KE(JcTri`s*Lbk8)({LsA31z1_K9naWKG@A)?t>2(BgiDF)(d$WEd|W$Te3VvkpWsQ#?I50n z_mIRDxKa)aeRZC6coCjt9GLVS{VnCm$ormeF@g5vI}T6k=V%SyAbBx$y_ET-x>TO^ z|5kK(61iu2kL*bBq(AzWCG2ng(yf6!xo3HQ`}!9{^CbQu&hZo8NMGN+ah@bk)^W9Y zvbI&YIPbY!&5OWSVI*;`>}W_g@FaME4>rIp^_UMnZNZbBc55=Z_N2f^@MJM0KKN<4 z5`2`M=J-&anD}5f|F{o6T#O*wl_y1+BzUqoLhVUqN5jYUC_G8I9mtao@1-0`T!E{} zlkg%ui9yoy8`;~f#t9EwF#X)9Q??e&ykPeEv*$%#yE%5Vb*%O3nPQyKYC29x{)1%R zjYI!Czlir}U0X5FyU6ZS5PiMtSX;Vh(9mY$ z9W%Lsz6R=2^i@zN^S)#Cx}C!<=%eovJLut^qfW=WYw9CC`k2c=J{dD0pNy^1w_@re zJ^E;qV26A$c1|oYhr!fGdh~%KcE}&k&DaucNUy$WHaN^Vq)cY+A$m>OK4ZF__Is5a zXY!osfH7V19w+gEGnE~!Om3*tfCu=H2XNyzQsUDNW4e=Df=|gUOLatKd5ssMOYl*4 zy!bS>{h6a{;uDmE_L(Ernz`$xfI7|CAcqX|?=C*B9WOpg8FSZ}tIpi@!K38db>_6I z6!M$z-1Xz;O*rQ8u3^kvZ_LwxF=rRMg||j#?)vs`?3!IMV_Laznlo2xnv^+bucm>8 zs*NThYjZLfQf7WE`w9mBL(0MLOIiA|lp)m&`!?}DEU{DJUvus-3dKC+BtNF_r_mMC2ev!{4=B{VlK4hL; zm*V-wKk_!MSPfZ*U2aOwr{C_cpi~vZOmOK-f4rSkCbumWY6mTls@-m)BfiV z`uk$<+L^T;-z)|@#G z$Q2Xzs$4W@tFEEO^rp<7J9B#M`EHH56ZWkuQ)RnGUY7aL?^!Y71NQZa_Vwl;@xD&8 zUpD+hy#zmzy7#>Q)aI^d=gpZH=dt3ZCtqVMIc7AtMXtVvOUxNQcHWui%v>1FLfx;{ z%`0o}Sb>Pd;17Hle24!P>Ltn!bpX50XsLhT10LXmR&XnPS;r?@6r$C#;-*)cBtCsx znfM$wXWsOM$J>kj&YC-OhPr)-Zvvl5lXfVl-TGW}d^#>t^^_r0YnQ=C*^&6jJ+qb^ zI&bqU54Nlclfj4b#KZ@s9Y^T+M0-2YW?6C5qe;Y%nER4c{D?AX;LMFXbMBhd=J=40 z;Y#pPc8DKclekax`%rG1{UF>8?;(jRaP{_sthOHsUW6xW`$(Q7eeFt}CzpKN?Hv{(d8|>@NKg1>eATA3P-7m$P^thD$ zo{^VcTB3hvK>`CTN%ODp>4#5SubdA#C#|`6gRjEB%8nbCVt%3XZ^@zH10LX0`mV$W z+y+1Ahfnl=>B)2E_f8Ma{xGgM^`rHC>#v7RKXc)*+Cc)JNs~@2XF|3whLKV2R`5}F zBtCK?k7!?rkHQB$z^CsPi4VBtXZYc>Pt+}mEO(<1nUNU(PadD;%f47H1&r&&$f%YS ze3YH$_<#rabU5WcxMhmI_(Tq%B-?+YeUViAPsGpiWh=`05vq46I}#t!{@eTegC8~9 zf8YT=fDLZ^M*iPgJv5Tg~6UVr{jL{}6Az-`4$!!Lzcje-^h02D}hf^XFKtHt(Nc=`~+WB_m_MHkM({*=c{SoGy4sX zoShei(J()DsyIvL>U*J_Rkz8SIejfax-84z{9TUxPhAd`-JS)qpB`DecGs?bPkq&X z&b8BTDD1y`=l(Vy?N^rh5Ko}`4QtmapzJg+55WU`c#pwtaHft= zef%XVS=srDo1SM+x;`QBS@qPomFbY}t3fAj$xm1bKFW?;pYZKJ0uS)P4!9Mr_Q5CW zWCB}x9iJHK$zLn*nKkRRmBo<#d-*HljejaTL*V0-_a;90A@x}we7G1vw(Iz(;EZM8 z`bJkSWPLosqt}xVKgy1akET-GSD*Lp#A(p@C-o8}ag}#)9ph*f`b4{%dJFZKyfZ(L z^u>K!R*%u1Z@53kOjyT~^%&*}t*5Qk$lWb@x%jY@gJ0FCsnzIqm;p$JB@a==<{On`XEDSi1#Brb>Dn z0R71JnQPT))yH-cS}VZwRo${vAKMwr4KXDgsqDBM>08GH5AdlzA@Kn>GdpqD04F#0 z=HQc1Uo+2{3+QW3dJV9$Bk>8EYXu(Q!x~6%Bi~4gPdm)Dl54b+8XM*L@&SEin{h)- zN&F}~&G7*b@WDK|@f+#j(*|>`Wc(yG*NW#W1>oas3dU`bCHN>i5}%;8Hmnr}pP|+a zx6j-UxrRQmwKk5&GXeY~&#s6Ji<=O9lpTqWdxP^u+$ZV>-~m3|2X6dEI{37~+z$tz zr1>YHk5H`rP2vMSIoFPV`Nkdx>}kLr2Lqp!dmOO$fte?5j{|!#^}=E8Y@oF1wIjRT zvAMpsn>%~{Ix>44biI6YcK#!$mupAMIT)$WNZGqsj+xc2R%2%(?_xZ8IGIx|-Ya2>geWQ7Oc{n!w?iKID68i%FHP@JvhI&1}TedNo$ zU*v0T>~TOo$QS+~zan2r?r|_UN&2alY3?uXBVXqIBA-d@agcN8sPW{w6wfdIiT6wF zap1jQ#D}@Z0r@1~_AT`f&m+>TjXe&Ccl!LQ$H};NvS$tUKQOf>GUt4f>hp`UN1e#Z zm`#)2XRhku3!c?0OaJfZoj<6ZQF-BoA7;O`=lb>-VMo`yx6jYcc<6`Pc;PYLLiB&m7Nd_W7;0vF07%oyZ&^-wEE8+(|8bCt}RZ zYkVh~ujd`ggGG1VkN=$yFL`&x;{Sc9^VNgvSCccS@P z(xH4$AMu z=JZcF{>L|WKDuh3%JrB2IJ@+lk~@0$oS$8>^XuAc(B+>z_FtzxxG?+cKW*PV>#Z9q zlaJUU_B+Az`n?mp1H2OhC&+h#cct_b{hgTqk~yb4JMY{x?2UqkIj`GERo`naio?X7 zNf*@B} z$Z|d;K7H4#eh-zWp}&c^5Pc-dPIG*~1AMRmZnfR@_=(FEanqB(R^YRI+0Es2z&Mq% zE58-4jfao2(;OeldlMh>liEPX=ZJHspEZ+<5oFx-m=tpflibrva7O1Bw_TYDi4XZ0 zt|Wex9f^;rN8BgoZNRJMxIXt&FF{i7fvdM)PPBokw@{BM zQ;*T-bQf=zyxg}!=V$yhT-kg3@!by}@IU3XRgV$&dvDL%oI9l=^PxXM?~b|d-W@Lp zU5~*(#ChQhx}SRY)Z^S4uZh|`t?!)^r<~wvlb$my{Q9jUx2O~Y#yhc#OnJr!_*)oB zoGUxQaW3ka-~m3o$Kckpw=X`C*SaS+pF`F&3*&wF&I#ix?H+;8swo|ns@q4^yq=ja z#N$b2r#U|00X}3J-1v?BzqQnOBAOKOBlrq_g0FhdkbDJ?^&PGARkG)g?h~~u#@fi@ zT(!3yzFJ>fgH(M$mcIk{NSXeoF6n;^@?On3XA(JcGpoC6haFqaS3%MEM8`YX8P9Fe zeazxH<*&UvxKid@twH+egPV7M^udXt`3nCKZ}cXuzk}L!@E(%50#~zL2QR{t`JE(Bl78UpE#=9H?gI|< zi{eT49N9qQ$({!#FJ?X~W#K+u4#ks2XRjUPFD|+`jDLu8{6y;FEA1QSVxE3dJh|EBOKqQi zu3U7-teTg@gG=L;!^(~~&Kr3WJirHBz^!k*Pd#Q7@}$J)JLO_np1d(8KCYeS_)wmh z_<&P-Gar1o7(uoxPs%dsu5#7&Tl4sd@aXj<@T9Wi#Ybs{Cn>jscoN=25?A0#IV|*v z_9VOrPxf9ed6M+Ct6IvFk#`enz4Z~?d47C!ilLY|cP98yk)-1{kYQ#^c> zo#yxyobtrP2b@aJwQoH$$@ZiylipWOPY8F;J^mT4geR39FFr~eJW077#FOwIlDGm_ zlPBRtcrrIb@+9d~GjyJ8-!nEg)Ob>PPJZis+~Ljpr8KV(^?T}7yH}q1ufes(lfwS| zonBvQExF0bho0l9S52s7HrvV0U-OT6k3_#7{vghKp49!)@w^`A&br9v%9~sj)8UdD zCrolafbi+U{kN%9cNm#CS9WBauX<|Aq5Sin;Q$`sll!^E2i%Gu*Lkvi)_o^?Hj%(* z)s#Ie>77OfA7w`?ha1k=01xmPd`98}ZiTD;@HwbSgfzc XmhZ$bjo23vv8{y6_;fXovM^U$fzLUW{0Q-nveO(N@Nn^Q>P_HQnCpvAV>Yo3!k7zIT%yRk_o&Lq* zF?xGx$#2Z{A;->~KYhXUg~MDRLaL|>M8x`#eEnr$uiTBa_R_#}viwD6o|nISe=Q~N zQIO0#XY&@$m;Ds8rmovH`173IpSO0_hY0)2xA>6VZ}?VO=0nf*1)shb^!K*9 zK*uL;MLKSJ<%eYXO1$%*-ga_1^S+VcD`m&aSDvSH`WwIld?;7IZSX)HpSTt2xamDl zP+xzL)cCc)XZf=0%ej#8qw+DlZ^VzX(;Of003WP@+rYs(K5;A3anqAOF%K`veqV{t zL*?2C_4_J2!T5-IMDQ#9zP-jCRBDv$$A#)2hY;$S;@`^o+w-%>C-rVyRlZ!s{TguQqO8BOE2k? zJt~5XSDpG5a?MfKW@qg8O}iemcIsKT+q)3*DLY<#lva3`a@*ud?u7S{#1*)jJP9wtlYJLSo+N$gn=R$Z1IYJqWg}0H z(|EGucaj&2|4+))A9OhsPxf3Y`yr6K_FkKP{Dm*HoF~D@^v9!*T%UdPz=yNlzx-&| zUFY7~C9f-Ef=^2=Sz{C<<# zlqVw({41Vhed#6|Pv-wy^5Wp2l(|3YawwiGIy{Md{@%B;TR(em%Xu=W6qx;we`X*0 z!Is@GpKx#2%P0Jr3$uagLvO<4T9OZ=5H|lV7d9n|=9&=elYk z=bM(CeUtH1SV?_Y+407CBTs?{_+SUz@<;mMGYWZ9;`4A@xXD-b?`@4s;ci#FPd!N+1D#FZh zy?=4@@T-4*Cj08Ap0xAU{3G5YF&`NJ5a&6^Po&Nr-M(?2Bu{QK^M>r5C*M=4hMX@~ zxFKeH(zWA_^G2Qo5AXpOa2xof4?d%iC+qn9^8QNB^;=L)QhKN_=DHbW$BU1x+t??A za>T?3oYE)w;KRiTvR!$yUM6k#jY@HZ<})fg20o5Y;YrHvAfANxki-?Znmh?F!jtJa z&iJI$t}LA2N}k*&f$>Rra=gZqJ-bML99$#$v3Do=8#xqD4m#~g7sN}=;>&5JMRd&2_-pG^S0Y2aYZnc~bKBJH)>-hY>Tq%WYuXxW#!e?P5 z?G)e|y!a@s@FeAS z5KqE;Na6}yO`e1o;mMA(B~QBPuW2by?x&t`c;6a%ax;x52gXQVOl>J;@om|zL=MH1 zd8gkMx!=~;uGRMB#1pT}PW;6~*;TJ!Qd#x-sSP~&!xNWge|X{(q5EC&4{?s4K%um# zed9byo;>HI>$9sC&a6~J@?ayy78;XNdA z1+FGf!i(@^da2||H~l#+<;lqF+c%nE?i0Vc#*@`?k{=5@N}1VCmqYPnhqJFA@<*Hh zGdtn4JFjeYdopPB<@?94$^QE6t-61@{_&Ncu76+yPfq#tj@?r}{gKe~c<>K#j-Pnr zQa^6rI8Tx%FWJND{^>Ozt>i<-d0*UhA+8;7oHz0$cz_SMfLrY$AACk3PfC1_tdv5w zS28i{G0Kh?AFE*=59Nu84>_2{XGVDRdJ=e2+0pQE)xwjM z+d(`D?;(jRa5Z@nUW6x8b0trbKEJ4?JQ;bP9@Uex@mc^f6pZQuB_x}0G zCO%jntoq=?#R#%pc~X{1#d2Fugc!F|R=o90U@FF}p zc%IYm>a;6+FKi`GPE25Y5}w>rAtmAb-2^X!)G3gN-i*XM7U*(It;( zH+kRC>nB^qlg~W;WcHb(-pF3M$w6H|x~Ayxqgp@t%+o*14xY7MXr9DB#5sP#4Y?QF zH_nqRhsQnhlkAVKxvnc0k|%R9*BvN3-Z*dMN$>z4Z~?dK?|twYg*++nxpb3Hbrnab z99DL`_%!k)<%o$7IOQrn_;4|TY*(I?WzwRqT*&d`2#;P*LOn*=(eQEAx;*KW-$6VH z?;(jRa5Z@nUW6yB=S%(|eaGTf^5i}V>@xsQZl&>LW?hFDUz0pp+ExBW4%P3PcluqC zPkid}>>aOlmWS$hZ52;emJehr+rFNizR@L>=^HhUPga(%%AT=m-OxOVe~9y%<0oFY z%&*%w&XeTHcW-?%JN^0@m14*^?~OT+N7?blc_UAP2l%+SIPdj9zYjj6kS8TR=U37r zw6C7B}dG7YT-%B?I50n z_mGr_;A-+Dya-PYERsA)`t;>3<;ev08Gt9Z)_AgSJ;{qb?~yXKhc1U&7t-tWuOU}- zt;t%yn!eV?C(lk>-Dg*~>RvqIdzHl#?r9jGJi9oi`|RR`&^(EMh;#hJ3zvDked9by zo=h#Xx)-nhdZiXJ&O2hR3sH8wao)(2-~m410&ac3@xiApcrw{@tn2tp`%Wbja@|4g z`gr}~%8nPGMxLZRG4TPXj-UJB!^H@)U3s!zCf#v=r5JMjIKrdXlfaY8j)sq`7M`Ts z4&q684@q2stI3n_B0QP;jO0nur><-zPwpG}9P91uQIPZN-eFzHHX2Xn-<9pio_{#w zlJAo|nRet*JehX(T|xeSc=m-OzF*0OEQhNx_Zd)jym9Wslg@h!KHvgw z`CEMOX$zk0Omuv*j?a@TE13~$PbxcJd>VO@a>T?3ocgxin$zg{*7a2QX&ql@|OnszB zAA6r+hrN#3ql&$f+3U*GM|$)PTq)Z)*dbr&V@!m->P&s4M;~*Eu!A1_$lhDIANu=` z^sc@|GJn|N414A{6z-FHnCoEXFYTm9U+Frj4?CRoTgpj%IV-sOfPel-kG?*qjffrc zg+Aug4BX?dkM!uH?;Jbm!GGy*NL3;Gj=Yt)0F94^nl)VJtM)P?|k3RY+u)`icv?bZYhc>CHkM!uv zJ9`jg2d+gQTuq;nsgLyNV@)@9&_j7j8@ccWfB%sleVp}x9q{En1Yg#in)s3)ee8*i z9rRJIa^?$r(VO~6kG{ccWch*}^il4kkG-%>eWXVpd#qsxeUw|AA;Vecrasc6Z@}qu z#E#3C&fZP#8NSY*fu=svqmQ#4u!BC{YxJ>KhN+MA=wlCT?4S=kIK!5+I81${N8g~c zW*s}|0}u4EXSu15^yn)&W1H9k4|oYYdLESTv#F2t=u0_k1+hc^(8rmuna}#`BR%?9 zqmLc*@xGw1*6**6^yp(PBX-b7ym2Nfdn%aEOM3LNCmnXsNBN9C)}EUBNRK}D?!gZF zCYHX)R�D=S3TJ;JxxUdQI6rXUlim_3U-5 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⪥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

        @~$sDDX?h1 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 BA|3z$ diff --git a/lib.py b/lib.py index f65a0ab0..d91c8b78 100644 --- a/lib.py +++ b/lib.py @@ -163,6 +163,7 @@ TB_DELTA_CALC = '~yPL Transition Bump Delta Calculation' CH_MAX_HEIGHT_CALC = '~yPL Layer Channel Max Height' +CH_MAX_HEIGHT_ADD_CALC = '~yPL Layer Channel Max Height Add' CH_MAX_HEIGHT_TB_CALC = '~yPL Layer Channel Max Height with Transition Bump' CH_MAX_HEIGHT_TB_ADD_CALC = '~yPL Layer Channel Max Height with Transition Bump Add' CH_MAX_HEIGHT_TBC_CALC = '~yPL Layer Channel Max Height with Transition Bump Crease' diff --git a/subtree.py b/subtree.py index 34bbdfac..260753ba 100644 --- a/subtree.py +++ b/subtree.py @@ -1902,7 +1902,9 @@ def check_channel_normal_map_nodes(tree, layer, root_ch, ch, need_reconnect=Fals lib_name = lib.CH_MAX_HEIGHT_TB_ADD_CALC else: lib_name = lib.CH_MAX_HEIGHT_TB_CALC else: - lib_name = lib.CH_MAX_HEIGHT_CALC + if ch.normal_blend_type == 'OVERLAY': + lib_name = lib.CH_MAX_HEIGHT_ADD_CALC + else: lib_name = lib.CH_MAX_HEIGHT_CALC if ch.write_height: max_height_calc, need_reconnect = replace_new_node( diff --git a/versioning.py b/versioning.py index 1a66b6a3..bce28e24 100644 --- a/versioning.py +++ b/versioning.py @@ -1013,6 +1013,16 @@ def update_yp_tree(tree): if ch.bake_to_vcol_name == '': ch.bake_to_vcol_name = 'Baked ' + ch.name + # Update to proper 'Add' max height calculation node + height_root_ch = get_root_height_channel(yp) + if height_root_ch: + for layer in yp.layers: + height_ch = get_height_channel(layer) + if height_ch and height_ch.normal_blend_type == 'OVERLAY' and height_ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: + check_all_layer_channel_io_and_nodes(layer, specific_ch=height_ch) + reconnect_layer_nodes(layer) + rearrange_layer_nodes(layer) + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 081fff2b0c5a2ee78874074133ae49daa00fe147 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 22 Aug 2025 14:19:14 +0700 Subject: [PATCH 260/283] Fix: Merge layers with normal main channel will returns error --- Bake.py | 48 +++++++++------ bake_common.py | 160 +++++++++++++++++++++++++++++++------------------ 2 files changed, 131 insertions(+), 77 deletions(-) diff --git a/Bake.py b/Bake.py index 4f1fe9f2..328d82d2 100644 --- a/Bake.py +++ b/Bake.py @@ -2261,10 +2261,11 @@ class YMergeLayer(bpy.types.Operator, BaseBakeOperator): default = True ) - #height_aware : BoolProperty( - # name = 'Height Aware', - # description = 'Height will take account for merge', - # default = True) + force_mix_blending : BoolProperty( + name = 'Force Mix Blending', + description = 'Force to use mix blending while merging so there\'s no missing parts on the merge result', + default = True + ) @classmethod def poll(cls, context): @@ -2279,7 +2280,7 @@ def invoke(self, context, event): self.invoke_operator(context) node = get_active_ypaint_node() - yp = node.node_tree.yp + yp = self.yp = node.node_tree.yp # Get active layer layer_idx = self.layer_idx = yp.active_layer_index @@ -2349,18 +2350,30 @@ def invoke(self, context, event): return context.window_manager.invoke_props_dialog(self, width=320) + def check(self, context): + return True + def draw(self, context): row = split_layout(self.layout, 0.5) + main_ch = self.yp.channels[int(self.channel_idx)] + ch = self.layer.channels[int(self.channel_idx)] + blend_type = ch.blend_type if main_ch.type != 'NORMAL' else ch.normal_blend_type + col = row.column(align=False) col.label(text='Main Channel:') col.label(text='Apply Modifiers:') col.label(text='Apply Neighbor Modifiers:') + + if blend_type != 'MIX': + col.label(text='Force Mix Blending:') col = row.column(align=False) col.prop(self, 'channel_idx', text='') col.prop(self, 'apply_modifiers', text='') col.prop(self, 'apply_neighbor_modifiers', text='') + if blend_type != 'MIX': + col.prop(self, 'force_mix_blending', text='') if self.legacy_on_non_object_mode: col = self.layout.column(align=True) @@ -2444,13 +2457,14 @@ def execute(self, context): if not self.apply_neighbor_modifiers: neighbor_oris = remember_and_disable_layer_modifiers_and_transforms(neighbor_layer, False) - # Make sure to Use mix on layer channel - if main_ch.type != 'NORMAL': - ori_blend_type = ch.blend_type - ch.blend_type = 'MIX' - else: - ori_blend_type = ch.normal_blend_type - ch.normal_blend_type = 'MIX' + # Force to use mix on layer channel + if self.force_mix_blending: + if main_ch.type != 'NORMAL': + ori_blend_type = ch.blend_type + ch.blend_type = 'MIX' + else: + ori_blend_type = ch.normal_blend_type + ch.normal_blend_type = 'MIX' # Enable alpha on main channel (will also update all the nodes) ori_enable_alpha = main_ch.enable_alpha @@ -2483,9 +2497,10 @@ def execute(self, context): # Recover original props main_ch.enable_alpha = ori_enable_alpha yp.alpha_auto_setup = True - if main_ch.type != 'NORMAL': - ch.blend_type = ori_blend_type - else: ch.normal_blend_type = ori_blend_type + if self.force_mix_blending: + if main_ch.type != 'NORMAL': + ch.blend_type = ori_blend_type + else: ch.normal_blend_type = ori_blend_type # Set all channel intensity value to 1.0 for c in layer.channels: @@ -2578,9 +2593,6 @@ def execute(self, context): for lay in yp.layers: lay.parent_idx = get_layer_index_by_name(yp, parent_dict[lay.name]) - if height_ch and main_ch.type == 'NORMAL' and height_ch.normal_map_type == 'BUMP_MAP': - height_ch.bump_distance = max_height - reconnect_yp_nodes(tree) rearrange_yp_nodes(tree) diff --git a/bake_common.py b/bake_common.py index b367ff30..1daef952 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1773,6 +1773,101 @@ def is_baked_normal_without_bump_needed(root_ch): (root_ch.enable_subdiv_setup and (any_layers_using_disp(root_ch) or any_layers_using_vdisp(root_ch))) ) +def get_bake_max_height(root_ch, mat=None, node=None, tex=None, emit=None): + + T = time.time() + print('BAKE MAX HEIGHT: Doing Max Height baking on', root_ch.name + '...') + + tree = root_ch.id_data + yp = tree.yp + scene = bpy.context.scene + if not mat: mat = get_active_material() + if not node: node = get_active_ypaint_node() + + # Do setup first before baking + book = {} + ori_margin = scene.render.bake.margin + high_margin = 1000 + ori_matout_inp = None + if not tex and not emit: + obj = bpy.context.object + uv_layers = get_uv_layers(obj) + if len(uv_layers) == 0: return + uv_map = uv_layers[0].name + mat_out = get_material_output(mat) + if not mat_out: return + + book = remember_before_bake() + prepare_bake_settings(book, [obj], yp, samples=1, margin=high_margin, uv_map=uv_map, bake_device='CPU', margin_type='EXTEND') + + tex = mat.node_tree.nodes.new('ShaderNodeTexImage') + emit = mat.node_tree.nodes.new('ShaderNodeEmission') + + # Connect emit to output material + if len(mat_out.inputs[0].links) > 0: + ori_matout_inp = mat_out.inputs[0].links[0].from_socket + mat.node_tree.links.new(emit.outputs[0], mat_out.inputs[0]) + + mat.node_tree.nodes.active = tex + + else: + # Use high margin to make sure all pixels are covered + scene.render.bake.margin = high_margin + + # Check for height socket + forced_height_ios = False + if 'Height' not in node.outputs: + check_all_channel_ios(yp, reconnect=True, force_height_io=True) + forced_height_ios = True + + # Create target image + if UDIM.is_udim_supported(): + img = bpy.data.images.new( + name='____MAXHEIGHT_TEMP', width=100, height=100, + alpha=False, tiled=False, float_buffer=True + ) + else: + img = bpy.data.images.new( + name='____MAXHEIGHT_TEMP', width=100, height=100, + alpha=False, float_buffer=True + ) + + img.colorspace_settings.name = get_noncolor_name() + tex.image = img + + # Connect max height output to emit node + create_link(mat.node_tree, node.outputs[root_ch.name + io_suffix['MAX_HEIGHT']], + emit.inputs[0]) + + # Bake + print('BAKE MAX HEIGHT: Baking max height of ' + root_ch.name + ' channel...') + bake_object_op() + + # Set baked max height image + max_height_value = img.pixels[0] + #end_max_height = check_new_node(tree, root_ch, 'end_max_height', 'ShaderNodeValue', 'Max Height') + #end_max_height.outputs[0].default_value = max_height_value + + # Remove max height image + remove_datablock(bpy.data.images, img, user=tex, user_prop='image') + + if len(book) > 0: + # Reconnect original output connections + if ori_matout_inp: + mat.node_tree.links.new(ori_matout_inp, mat_out.inputs[0]) + + # Delete temporary nodes + simple_remove_node(mat.node_tree, tex) + simple_remove_node(mat.node_tree, emit) + + # Recover settings + recover_bake_settings(book, yp) + else: + # Recover margin + scene.render.bake.margin = ori_margin + + return max_height_value + def bake_channel( uv_map, mat, node, root_ch, width=1024, height=1024, target_layer=None, use_hdr=False, aa_level=1, force_use_udim=False, tilenums=[], interpolation='Linear', @@ -2247,62 +2342,10 @@ def bake_channel( ### Max Height - # Create target image - if UDIM.is_udim_supported(): - mh_img = bpy.data.images.new( - name='____MAXHEIGHT_TEMP', width=100, height=100, - alpha=False, tiled=False, float_buffer=True - ) - else: - mh_img = bpy.data.images.new( - name='____MAXHEIGHT_TEMP', width=100, height=100, - alpha=False, float_buffer=True - ) - - mh_img.colorspace_settings.name = get_noncolor_name() - tex.image = mh_img - - # Bake setup (doing little bit doing hacky reconnection here) - start = tree.nodes.get(TREE_START) - end = tree.nodes.get(TREE_END) - ori_soc = end.inputs[root_ch.name].links[0].from_socket - if root_ch.name + io_suffix['MAX_HEIGHT'] in start.outputs: - max_height = start.outputs.get(root_ch.name + io_suffix['MAX_HEIGHT']) - else: max_height = start.outputs.get(root_ch.name + io_suffix['HEIGHT']) - # Get the last layer that output max height - for l in yp.layers: - if not l.enable or not l.channels[get_channel_index(root_ch)].enable: continue - lnode = tree.nodes.get(l.group_node) - outp = lnode.outputs.get(root_ch.name + io_suffix['MAX_HEIGHT']) - if outp: - max_height = outp - break - create_link(tree, max_height, end.inputs[root_ch.name]) - create_link(mat.node_tree, node.outputs[root_ch.name + io_suffix['MAX_HEIGHT']], - emit.inputs[0]) - - # Use high margin to make sure all pixels are covered - ori_margin = bpy.context.scene.render.bake.margin - bpy.context.scene.render.bake.margin = 1000 - - # Bake - print('BAKE CHANNEL: Baking max height of ' + root_ch.name + ' channel...') - bake_object_op() - - # Recover margin - bpy.context.scene.render.bake.margin = ori_margin - - # Recover connection - create_link(tree, ori_soc, end.inputs[root_ch.name]) - - # Set baked max height image - max_height_value = mh_img.pixels[0] + max_height_value = get_bake_max_height(root_ch, mat, node, tex, emit) end_max_height = check_new_node(tree, root_ch, 'end_max_height', 'ShaderNodeValue', 'Max Height') end_max_height.outputs[0].default_value = max_height_value - # Remove max height image - remove_datablock(bpy.data.images, mh_img, user=tex, user_prop='image') - ### Displacement # Create target image @@ -2365,20 +2408,20 @@ def bake_channel( create_link(mat.node_tree, spread_height.outputs[0], emit.inputs[0]) - #create_link(mat.node_tree, node.outputs[root_ch.name + io_suffix['HEIGHT']], srgb2lin.inputs[0]) - #create_link(mat.node_tree, srgb2lin.outputs[0], emit.inputs[0]) else: spread_height = None create_link(mat.node_tree, node.outputs[root_ch.name + io_suffix['HEIGHT']], emit.inputs[0]) tex.image = disp_img - #return - # Bake print('BAKE CHANNEL: Baking displacement image of ' + root_ch.name + ' channel...') bake_object_op() - if not target_layer: + if target_layer: + # Get max height value + max_height_value = get_bake_max_height(root_ch, mat, node, tex, emit) + if ch: set_entity_prop_value(ch, 'bump_distance', max_height_value) + else: # Set baked displacement image if baked_disp.image: @@ -3842,7 +3885,6 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Remove temp bake nodes simple_remove_node(mat.node_tree, tex) - #simple_remove_node(mat.node_tree, srgb2lin) simple_remove_node(mat.node_tree, bsdf) if src: simple_remove_node(mat.node_tree, src) if geometry: simple_remove_node(mat.node_tree, geometry) From 8e9c6c05541401e3df01d260d41531e2d5297fa2 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 23 Aug 2025 08:38:32 +0700 Subject: [PATCH 261/283] Fix: Baked `Normal without bump` sometimes does not get saved when saving the blend file --- image_ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/image_ops.py b/image_ops.py index 8f061287..37a38ad3 100644 --- a/image_ops.py +++ b/image_ops.py @@ -248,7 +248,7 @@ def create_temp_scene(): def save_pack_all(yp): - images = get_yp_images(yp, get_baked_channels=True, check_overlay_normal=True) + images = get_yp_images(yp, get_baked_channels=True) #, check_overlay_normal=True) packed_float_images = [] # Temporary scene for some saving hack From a24b140578d8ffbbb70e9bc4d6bf5126ecc88a03 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 23 Aug 2025 09:07:25 +0700 Subject: [PATCH 262/283] Make `Transition Bump Max Height` be able to use negative values --- Layer.py | 2 +- versioning.py | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Layer.py b/Layer.py index 52f6f39a..f29443c1 100644 --- a/Layer.py +++ b/Layer.py @@ -6571,7 +6571,7 @@ class YLayerChannel(bpy.types.PropertyGroup): #description= 'Distance of mask bump', name = 'Transition Bump Height Range', description = 'Transition bump height range.\n(White equals this value, black equals negative of this value)', - default=0.05, min=0.0, max=1.0, precision=3 + default=0.05, min=-1.0, max=1.0, precision=3 ) transition_bump_chain : IntProperty( diff --git a/versioning.py b/versioning.py index bce28e24..31b7e549 100644 --- a/versioning.py +++ b/versioning.py @@ -1013,15 +1013,22 @@ def update_yp_tree(tree): if ch.bake_to_vcol_name == '': ch.bake_to_vcol_name = 'Baked ' + ch.name - # Update to proper 'Add' max height calculation node height_root_ch = get_root_height_channel(yp) if height_root_ch: for layer in yp.layers: height_ch = get_height_channel(layer) - if height_ch and height_ch.normal_blend_type == 'OVERLAY' and height_ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: - check_all_layer_channel_io_and_nodes(layer, specific_ch=height_ch) - reconnect_layer_nodes(layer) - rearrange_layer_nodes(layer) + if height_ch: + + # Update to proper 'Add' max height calculation node + if height_ch.normal_blend_type == 'OVERLAY' and height_ch.normal_map_type in {'BUMP_MAP', 'BUMP_NORMAL_MAP'}: + check_all_layer_channel_io_and_nodes(layer, specific_ch=height_ch) + reconnect_layer_nodes(layer) + rearrange_layer_nodes(layer) + + # Transition bump distance now can do negative value, so reset the value by reenabling and enabling back + if height_ch.enable_transition_bump: + height_ch.enable_transition_bump = False + height_ch.enable_transition_bump = True # SECTION II: Updates based on the blender version From 03677133d00eefe69d4b8100583131424a23acc1 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 23 Aug 2025 15:08:15 +0700 Subject: [PATCH 263/283] Compatibility for the new Blender 5.0 bake API --- bake_common.py | 58 ++++++++++++++++++++++++++++++++---------- vector_displacement.py | 22 ++++++++-------- 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/bake_common.py b/bake_common.py index 1daef952..e0009b96 100644 --- a/bake_common.py +++ b/bake_common.py @@ -81,6 +81,38 @@ def get_compositor_output_node(tree): return n +def get_scene_bake_multires(scene): + return scene.render.bake.use_multires if is_bl_newer_than(5) else scene.render.use_bake_multires + +def get_scene_bake_clear(scene): + return scene.render.bake.use_clear if is_bl_newer_than(5) else scene.render.use_bake_clear + +def get_scene_render_bake_type(scene): + return scene.render.bake.type if is_bl_newer_than(5) else scene.render.bake_type + +def get_scene_bake_margin(scene): + return scene.render.bake.margin if is_bl_newer_than(5) else scene.render.bake_margin + +def set_scene_bake_multires(scene, value): + if not is_bl_newer_than(5): + scene.render.use_bake_multires = value + else: scene.render.bake.use_multires = value + +def set_scene_bake_clear(scene, value): + if not is_bl_newer_than(5): + scene.render.use_bake_clear = value + else: scene.render.bake.use_clear = value + +def set_scene_render_bake_type(scene, value): + if not is_bl_newer_than(5): + scene.render.bake_type = value + else: scene.render.bake.type = value + +def set_scene_bake_margin(scene, value): + if not is_bl_newer_than(5): + scene.render.bake_margin = value + else: scene.render.bake.margin = value + def is_there_any_missmatched_attribute_types(objs): # Get number of attributes founds attr_counts = {} @@ -239,10 +271,10 @@ def remember_before_bake(yp=None, mat=None): else: book['ori_material_override'] = scene.render.layers.active.material_override # Multires related - book['ori_use_bake_multires'] = scene.render.use_bake_multires - book['ori_use_bake_clear'] = scene.render.use_bake_clear - book['ori_render_bake_type'] = scene.render.bake_type - book['ori_bake_margin'] = scene.render.bake_margin + book['ori_use_bake_multires'] = get_scene_bake_multires(scene) + book['ori_use_bake_clear'] = get_scene_bake_clear(scene) + book['ori_render_bake_type'] = get_scene_render_bake_type(scene) + book['ori_bake_margin'] = get_scene_bake_margin(scene) if is_bl_newer_than(2, 81) and not is_bl_newer_than(3) and scene.cycles.device == 'GPU' and 'compute_device_type' in bpy.context.preferences.addons['cycles'].preferences: book['compute_device_type'] = bpy.context.preferences.addons['cycles'].preferences['compute_device_type'] @@ -628,12 +660,12 @@ def prepare_bake_settings( else: scene.render.layers.active.material_override = None if bake_from_multires: - scene.render.use_bake_multires = True - scene.render.bake_type = bake_type - scene.render.bake_margin = margin - scene.render.use_bake_clear = False + set_scene_bake_multires(scene, True) + set_scene_render_bake_type(scene, bake_type) + set_scene_bake_margin(scene, margin) + set_scene_bake_clear(scene, False) else: - scene.render.use_bake_multires = False + set_scene_bake_multires(scene, False) scene.cycles.bake_type = bake_type # Old blender will always use CPU @@ -864,10 +896,10 @@ def recover_bake_settings(book, yp=None, recover_active_uv=False, mat=None): else: scene.render.layers.active.material_override = book['ori_material_override'] # Multires related - scene.render.use_bake_multires = book['ori_use_bake_multires'] - scene.render.use_bake_clear = book['ori_use_bake_clear'] - scene.render.bake_type = book['ori_render_bake_type'] - scene.render.bake_margin = book['ori_bake_margin'] + set_scene_bake_multires(scene, book['ori_use_bake_multires']) + set_scene_bake_clear(scene, book['ori_use_bake_clear']) + set_scene_render_bake_type(scene, book['ori_render_bake_type']) + set_scene_bake_margin(scene, book['ori_bake_margin']) if 'compute_device_type' in book: bpy.context.preferences.addons['cycles'].preferences['compute_device_type'] = book['compute_device_type'] diff --git a/vector_displacement.py b/vector_displacement.py index 7699d238..d8ca4bdc 100644 --- a/vector_displacement.py +++ b/vector_displacement.py @@ -37,10 +37,10 @@ def _remember_before_bake(obj): book['ori_material_override'] = bpy.context.view_layer.material_override # Multires related - book['ori_use_bake_multires'] = scene.render.use_bake_multires - book['ori_use_bake_clear'] = scene.render.use_bake_clear - book['ori_render_bake_type'] = scene.render.bake_type - book['ori_bake_margin'] = scene.render.bake_margin + book['ori_use_bake_multires'] = get_scene_bake_multires(scene) + book['ori_use_bake_clear'] = get_scene_bake_clear(scene) + book['ori_render_bake_type'] = get_scene_render_bake_type(scene) + book['ori_bake_margin'] = get_scene_bake_margin(scene) book['ori_view_transform'] = scene.view_settings.view_transform # Remember world settings @@ -79,9 +79,9 @@ def _prepare_bake_settings(book, obj, uv_map='', samples=1, margin=15, bake_devi scene.render.bake.use_cage = False scene.render.use_simplify = False scene.render.bake.target = 'IMAGE_TEXTURES' - scene.render.use_bake_multires = False - scene.render.bake_margin = margin - scene.render.use_bake_clear = False + set_scene_bake_multires(scene, False) + set_scene_bake_margin(scene, margin) + set_scene_bake_clear(scene, False) scene.cycles.samples = samples scene.cycles.use_denoising = False scene.cycles.bake_type = 'EMIT' @@ -141,10 +141,10 @@ def _recover_bake_settings(book, recover_active_uv=False): bpy.context.view_layer.material_override = book['ori_material_override'] # Multires related - scene.render.use_bake_multires = book['ori_use_bake_multires'] - scene.render.use_bake_clear = book['ori_use_bake_clear'] - scene.render.bake_type = book['ori_render_bake_type'] - scene.render.bake_margin = book['ori_bake_margin'] + set_scene_bake_multires(scene, book['ori_use_bake_multires']) + set_scene_bake_clear(scene, book['ori_use_bake_clear']) + set_scene_render_bake_type(scene, book['ori_render_bake_type']) + set_scene_bake_margin(scene, book['ori_bake_margin']) # Recover world settings if scene.world: From 3a66169c4ac10d257d59a4e9b15bca76c06dcbc0 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sun, 24 Aug 2025 10:18:47 +0700 Subject: [PATCH 264/283] Use safer object deletion --- bake_common.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/bake_common.py b/bake_common.py index e0009b96..1fe189b1 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1670,9 +1670,7 @@ def fxaa_image(image, alpha_aware=True, bake_device='CPU', first_tile_only=False remove_datablock(bpy.data.node_groups, fxaa.node_tree, user=fxaa, user_prop='node_tree') remove_datablock(bpy.data.materials, mat) - plane = plane_obj.data - bpy.ops.object.delete() - remove_datablock(bpy.data.meshes, plane) + remove_mesh_obj(plane_obj) # Recover settings recover_bake_settings(book) @@ -4819,9 +4817,7 @@ def resize_image(image, width, height, colorspace='Non-Color', samples=1, margin if straight_over.node_tree.users == 1: remove_datablock(bpy.data.node_groups, straight_over.node_tree, user=straight_over, user_prop='node_tree') remove_datablock(bpy.data.materials, mat) - plane = plane_obj.data - bpy.ops.object.delete() - remove_datablock(bpy.data.meshes, plane) + remove_mesh_obj(plane_obj) # Recover settings recover_bake_settings(book) From e61a5f3d8056d541c6ca7a3aadbad170dc184db5 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 25 Aug 2025 09:00:15 +0700 Subject: [PATCH 265/283] Expand mask UI after baking it into image --- BakeToLayer.py | 7 +++++++ bake_common.py | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index f9c78f91..ce2eedfb 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1324,6 +1324,13 @@ def execute(self, context): reconnect_yp_nodes(node.node_tree) rearrange_yp_nodes(node.node_tree) + # Expand entity source to show rebake button + ypui = context.window_manager.ypui + if self.mask and not self.duplicate_entity: + self.mask.expand_content = True + self.mask.expand_source = True + ypui.need_update = True + if image: self.report({'INFO'}, 'Baking '+entity_label+' is done in '+'{:0.2f}'.format(time.time() - T)+' seconds!') diff --git a/bake_common.py b/bake_common.py index 1fe189b1..003951f7 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1238,7 +1238,8 @@ def denoise_image(image): gamma = None if image.colorspace_settings.name != get_srgb_name() and not image.is_float: - gamma = tree.nodes.new('CompositorNodeGamma') + nodeid = 'ShaderNodeGamma' if is_bl_newer_than(5) else 'CompositorNodeGamma' + gamma = tree.nodes.new(nodeid) gamma.inputs[1].default_value = 2.2 rgb = image_node.outputs[0] From 429de9b0ea55d0d084a7badf3b221bdf119a7f58 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 25 Aug 2025 09:10:08 +0700 Subject: [PATCH 266/283] There's no more `CompositorNodeGamma` node in Blender 5.0 --- bake_common.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bake_common.py b/bake_common.py index 003951f7..5419fed2 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1162,7 +1162,8 @@ def blur_image(image, filter_type='GAUSS', size=10): gamma = None if image.colorspace_settings.name != get_srgb_name() and not image.is_float: - gamma = tree.nodes.new('CompositorNodeGamma') + nodeid = 'ShaderNodeGamma' if is_bl_newer_than(5) else 'CompositorNodeGamma' + gamma = tree.nodes.new(nodeid) gamma.inputs[1].default_value = 2.2 rgb = image_node.outputs[0] From 6d352a31855cc191eb3380009fcf52570893d8f8 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Mon, 25 Aug 2025 09:30:04 +0700 Subject: [PATCH 267/283] Prevent merging VDM layers since its not supported yet --- Bake.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Bake.py b/Bake.py index 328d82d2..842befae 100644 --- a/Bake.py +++ b/Bake.py @@ -2424,6 +2424,10 @@ def execute(self, context): merge_success = False + if (layer.type == 'IMAGE' and main_ch.type == 'NORMAL' and ch.normal_map_type == 'VECTOR_DISPLACEMENT_MAP'): + self.report({'ERROR'}, "Merging VDM layers is not supported yet!") + return {'CANCELLED'} + # Merge image layers if (layer.type == 'IMAGE' and layer.texcoord_type == 'UV'): # and neighbor_layer.type == 'IMAGE'): From 6b4baa3c794f51f7ff52636f2ca742acb51870a9 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 2 Sep 2025 12:51:15 +0700 Subject: [PATCH 268/283] Remove temporary bake function since it can create extra images that won't get deleted automatically. --- Bake.py | 132 +------------------------------- BakeToLayer.py | 60 --------------- Layer.py | 12 --- Mask.py | 11 --- bake_common.py | 201 ++++++++++++++++++++++--------------------------- ui.py | 31 +------- versioning.py | 10 +++ 7 files changed, 107 insertions(+), 350 deletions(-) diff --git a/Bake.py b/Bake.py index 842befae..3f887087 100644 --- a/Bake.py +++ b/Bake.py @@ -1666,6 +1666,9 @@ def execute(self, context): bake_device=self.bake_device, margin_type=self.margin_type, use_osl=self.use_osl ) + # Get bake properties + bprops = get_bake_properties_from_self(self) + # Get tilenums tilenums = UDIM.get_tile_numbers(objs, self.uv_map) if self.use_udim else [1001] @@ -1692,7 +1695,7 @@ def execute(self, context): self.uv_map, mat, node, ch, width, height, use_hdr=use_hdr, force_use_udim=self.use_udim, tilenums=tilenums, interpolation=self.interpolation, use_float_for_displacement=self.use_float_for_displacement, - use_float_for_normal=self.use_float_for_normal + use_float_for_normal=self.use_float_for_normal, bprops=bprops ) # Process baked images @@ -2877,129 +2880,6 @@ def execute(self, context): return {'FINISHED'} -class YBakeTempImage(bpy.types.Operator, BaseBakeOperator): - bl_idname = "wm.y_bake_temp_image" - bl_label = "Bake temporary image of layer" - bl_description = "Bake temporary image of layer, can be useful to prefent glitching with cycles" - bl_options = {'REGISTER', 'UNDO'} - - uv_map : StringProperty(default='') - uv_map_coll : CollectionProperty(type=bpy.types.PropertyGroup) - - hdr : BoolProperty(name='32 bit Float', default=True) - - @classmethod - def poll(cls, context): - return get_active_ypaint_node() #and hasattr(context, 'parent') - - def invoke(self, context, event): - self.invoke_operator(context) - - obj = context.object - ypup = get_user_preferences() - - self.auto_cancel = False - if not hasattr(context, 'parent'): - self.auto_cancel = True - return self.execute(context) - - self.parent = context.parent - - if self.parent.type not in {'HEMI'}: - self.auto_cancel = True - return self.execute(context) - - # Use active uv layer name by default - uv_layers = get_uv_layers(obj) - - # UV Map collections update - self.uv_map_coll.clear() - for uv in uv_layers: - if not uv.name.startswith(TEMP_UV): - self.uv_map_coll.add().name = uv.name - - if len(self.uv_map_coll) > 0: - self.uv_map = self.uv_map_coll[0].name - - if get_user_preferences().skip_property_popups and not event.shift: - return self.execute(context) - - return context.window_manager.invoke_props_dialog(self, width=320) - - def draw(self, context): - node = get_active_ypaint_node() - yp = node.node_tree.yp - - row = split_layout(self.layout, 0.4) - - col = row.column(align=False) - - #col.label(text='') - col.label(text='Width:') - col.label(text='Height:') - col.label(text='') - col.label(text='UV Map:') - col.label(text='Samples:') - - col.label(text='Margin:') - - col = row.column(align=False) - - #col.prop(self, 'hdr') - col.prop(self, 'width', text='') - col.prop(self, 'height', text='') - col.prop(self, 'hdr') - col.prop_search(self, "uv_map", self, "uv_map_coll", text='', icon='GROUP_UVS') - col.prop(self, 'samples', text='') - - if is_bl_newer_than(3, 1): - split = split_layout(col, 0.4, align=True) - split.prop(self, 'margin', text='') - split.prop(self, 'margin_type', text='') - else: - col.prop(self, 'margin', text='') - - def execute(self, context): - if not self.is_cycles_exist(context): return {'CANCELLED'} - - if not hasattr(self, 'parent'): - self.report({'ERROR'}, "Context is incorrect!") - return {'CANCELLED'} - - entity = self.parent - if entity.type not in {'HEMI'}: - self.report({'ERROR'}, "This layer type is not supported (yet)!") - return {'CANCELLED'} - - # Bake temp image - image = temp_bake( - context, entity, self.width, self.height, self.hdr, self.samples, - self.margin, self.uv_map, margin_type=self.margin_type, - bake_device=self.bake_device - ) - - return {'FINISHED'} - -class YDisableTempImage(bpy.types.Operator): - bl_idname = "wm.y_disable_temp_image" - bl_label = "Disable Baked temporary image of layer" - bl_description = "Disable bake temporary image of layer" - bl_options = {'REGISTER', 'UNDO'} - - @classmethod - def poll(cls, context): - return get_active_ypaint_node() and hasattr(context, 'parent') - - def execute(self, context): - entity = context.parent - if not entity.use_temp_bake: - self.report({'ERROR'}, "This layer is not temporarily baked!") - return {'CANCELLED'} - - disable_temp_bake(entity) - - return {'FINISHED'} - def copy_default_value(inp_source, inp_target): if inp_target.bl_idname == inp_source.bl_idname: inp_target.default_value = inp_source.default_value @@ -3969,8 +3849,6 @@ def register(): bpy.utils.register_class(YBakeChannelToVcol) bpy.utils.register_class(YMergeLayer) bpy.utils.register_class(YMergeMask) - bpy.utils.register_class(YBakeTempImage) - bpy.utils.register_class(YDisableTempImage) bpy.utils.register_class(YDeleteBakedChannelImages) def unregister(): @@ -3981,6 +3859,4 @@ def unregister(): bpy.utils.unregister_class(YBakeChannelToVcol) bpy.utils.unregister_class(YMergeLayer) bpy.utils.unregister_class(YMergeMask) - bpy.utils.unregister_class(YBakeTempImage) - bpy.utils.unregister_class(YDisableTempImage) bpy.utils.unregister_class(YDeleteBakedChannelImages) diff --git a/BakeToLayer.py b/BakeToLayer.py index ce2eedfb..1ae718f3 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -137,66 +137,6 @@ def update_bake_to_layer_uv_map(self, context): objs = get_all_objects_with_same_materials(mat) self.use_udim = UDIM.is_uvmap_udim(objs, self.uv_map) -def get_bake_properties_from_self(self): - - bprops = dotdict() - - # NOTE: Getting props from keys doesn't work - #for prop in self.properties.keys(): - # try: bprops[prop] = getattr(self, prop) - # except Exception as e: print(e) - - props = [ - 'bake_device', - 'samples', - 'margin', - 'margin_type', - 'width', - 'height', - 'image_resolution', - 'use_custom_resolution', - 'name', - 'uv_map', - 'uv_map_1', - 'interpolation', - 'type', - 'use_cage', - 'cage_object_name', - 'cage_extrusion', - 'max_ray_distance', - 'normalize', - 'ao_distance', - 'bevel_samples', - 'bevel_radius', - 'multires_base', - 'target_type', - 'fxaa', - 'ssaa', - 'denoise', - 'channel_idx', - 'blend_type', - 'normal_blend_type', - 'normal_map_type', - 'hdr', - 'use_baked_disp', - 'flip_normals', - 'only_local', - 'subsurf_influence', - 'force_bake_all_polygons', - 'use_image_atlas', - 'use_udim', - 'blur', - 'blur_type', - 'blur_factor', - 'blur_size' - ] - - for prop in props: - if hasattr(self, prop): - bprops[prop] = getattr(self, prop) - - return bprops - class YBakeToLayer(bpy.types.Operator, BaseBakeOperator): bl_idname = "wm.y_bake_to_layer" bl_label = "Bake To Layer" diff --git a/Layer.py b/Layer.py index f29443c1..c1ccfe1f 100644 --- a/Layer.py +++ b/Layer.py @@ -4611,10 +4611,6 @@ def execute(self, context): layer = self.layer yp = layer.id_data.yp - if layer.use_temp_bake: - self.report({'ERROR'}, "Cannot replace temporarily baked layer!") - return {'CANCELLED'} - if self.type == layer.type and self.type not in {'IMAGE', 'VCOL'}: return {'CANCELLED'} #if layer.type == 'GROUP': # self.report({'ERROR'}, "You can't change type of group layer!") @@ -6994,14 +6990,6 @@ class YLayer(bpy.types.PropertyGroup): update = update_voronoi_feature ) - # For temporary bake - use_temp_bake : BoolProperty( - name = 'Use Temporary Bake', - description = 'Use temporary bake, it can be useful for prevent glitching with cycles', - default = False, - #update=update_layer_temp_bake - ) - original_type : EnumProperty( name = 'Original Layer Type', items = layer_type_items, diff --git a/Mask.py b/Mask.py index 2fe937c5..3e63825d 100644 --- a/Mask.py +++ b/Mask.py @@ -1850,10 +1850,6 @@ def execute(self, context): mask = self.mask yp = mask.id_data.yp - if mask.use_temp_bake: - self.report({'ERROR'}, "Cannot replace temporarily baked mask!") - return {'CANCELLED'} - if self.type == mask.type and self.type not in {'IMAGE', 'VCOL', 'MODIFIER'}: return {'CANCELLED'} if self.load_item and self.type in {'VCOL', 'IMAGE'} and self.item_name == '': @@ -2535,13 +2531,6 @@ class YLayerMask(bpy.types.PropertyGroup): update = update_mask_object_index ) - # For temporary bake - use_temp_bake : BoolProperty( - name = 'Use Temporary Bake', - description = 'Use temporary bake, it can be useful to prevent glitching with cycles', - default = False, - ) - original_type : EnumProperty( name = 'Original Mask Type', items = mask_type_items, diff --git a/bake_common.py b/bake_common.py index 5419fed2..d4805f13 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1900,10 +1900,72 @@ def get_bake_max_height(root_ch, mat=None, node=None, tex=None, emit=None): return max_height_value +def get_bake_properties_from_self(self): + + bprops = dotdict() + + # NOTE: Getting props from keys doesn't work + #for prop in self.properties.keys(): + # try: bprops[prop] = getattr(self, prop) + # except Exception as e: print(e) + + props = [ + 'bake_device', + 'samples', + 'margin', + 'margin_type', + 'width', + 'height', + 'image_resolution', + 'use_custom_resolution', + 'name', + 'uv_map', + 'uv_map_1', + 'interpolation', + 'type', + 'use_cage', + 'cage_object_name', + 'cage_extrusion', + 'max_ray_distance', + 'normalize', + 'ao_distance', + 'bevel_samples', + 'bevel_radius', + 'multires_base', + 'target_type', + 'fxaa', + 'ssaa', + 'denoise', + 'channel_idx', + 'blend_type', + 'normal_blend_type', + 'normal_map_type', + 'hdr', + 'use_baked_disp', + 'flip_normals', + 'only_local', + 'subsurf_influence', + 'force_bake_all_polygons', + 'use_image_atlas', + 'use_udim', + 'blur', + 'blur_type', + 'blur_factor', + 'blur_size' + ] + + for prop in props: + if hasattr(self, prop): + bprops[prop] = getattr(self, prop) + elif prop == 'hdr': + bprops['hdr'] = False + + return bprops + def bake_channel( uv_map, mat, node, root_ch, width=1024, height=1024, target_layer=None, use_hdr=False, aa_level=1, force_use_udim=False, tilenums=[], interpolation='Linear', - use_float_for_displacement=False, use_float_for_normal=False + use_float_for_displacement=False, use_float_for_normal=False, bprops=None ): print('BAKE CHANNEL: Baking', root_ch.name + ' channel...') @@ -1920,19 +1982,36 @@ def bake_channel( objs = get_all_objects_with_same_materials(mat) tilenums = UDIM.get_tile_numbers(objs, uv_map) - # Check if temp bake is necessary - temp_baked = [] - if root_ch.type == 'NORMAL': + # Check if baking fake lighting is necessary + # NOTE: Only needed for Blender 2.80 or less because those are the only versions that can use non-baked fake lighting as bump + ori_bprops_name = bprops['name'] if bprops else '' + if not is_bl_newer_than(2, 81) and root_ch.type == 'NORMAL': for lay in yp.layers: - if lay.type in {'HEMI'} and not lay.use_temp_bake: - print('BAKE CHANNEL: Fake lighting layer found! Baking temporary image of ' + lay.name + ' layer...') - temp_bake(bpy.context, lay, width, height, True, 1, scene.render.bake.margin, uv_map) - temp_baked.append(lay) + if not lay.enable: continue + if channel_idx >= len(lay.channels): continue + ch = lay.channels[channel_idx] + if not ch.enable: continue + bake_happened = False + + if lay.type in {'HEMI'} and not lay.use_baked: + bprops['name'] = 'Baked ' + lay.name + bprops['hdr'] = True + bake_entity_as_image(lay, bprops, set_image_to_entity=True) + bake_happened = True + for mask in lay.masks: - if mask.type in {'HEMI'} and not mask.use_temp_bake: - print('BAKE CHANNEL: Fake lighting mask found! Baking temporary image of ' + mask.name + ' mask...') - temp_bake(bpy.context, mask, width, height, True, 1, scene.render.bake.margin, uv_map) - temp_baked.append(mask) + if mask.type in {'HEMI'} and not mask.use_baked: + bprops['name'] = 'Baked ' + mask.name + bprops['hdr'] = True + bake_entity_as_image(mask, bprops, set_image_to_entity=True) + bake_happened = True + + if bake_happened: + reconnect_layer_nodes(lay) + rearrange_layer_nodes(lay) + + # Recover bprops name + if ori_bprops_name != '': bprops['name'] = ori_bprops_name ch = None img = None @@ -2536,11 +2615,6 @@ def bake_channel( # Recover original bsdf mat.node_tree.links.new(ori_bsdf, output.inputs[0]) - # Recover baked temp - for ent in temp_baked: - print('BAKE CHANNEL: Removing temporary baked ' + ent.name + '...') - disable_temp_bake(ent) - # Set image to target layer if target_layer: ori_img = source.image @@ -2559,99 +2633,6 @@ def bake_channel( return True -def temp_bake(context, entity, width, height, hdr, samples, margin, uv_map, bake_device='CPU', margin_type='ADJACENT_FACES'): - - m1 = re.match(r'yp\.layers\[(\d+)\]$', entity.path_from_id()) - m2 = re.match(r'yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) - - if not m1 and not m2: return - - yp = entity.id_data.yp - obj = context.object - #scene = context.scene - - # Prepare bake settings - book = remember_before_bake(yp) - prepare_bake_settings(book, [obj], yp, samples, margin, uv_map, bake_device=bake_device, margin_type=margin_type) - - mat = get_active_material() - name = entity.name + ' Temp' - - # New target image - image = bpy.data.images.new( - name=name, width=width, height=height, - alpha=True, float_buffer=hdr - ) - image.colorspace_settings.name = get_noncolor_name() - - if entity.type == 'HEMI': - - if m1: source = get_layer_source(entity) - else: source = get_mask_source(entity) - - # Create bake nodes - source_copy = mat.node_tree.nodes.new(source.bl_idname) - source_copy.node_tree = source.node_tree - - tex = mat.node_tree.nodes.new('ShaderNodeTexImage') - emit = mat.node_tree.nodes.new('ShaderNodeEmission') - geo = mat.node_tree.nodes.new('ShaderNodeNewGeometry') - output = get_active_mat_output_node(mat.node_tree) - ori_bsdf = output.inputs[0].links[0].from_socket - - # Connect emit to output material - mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) - mat.node_tree.links.new(source_copy.outputs[0], output.inputs[0]) - mat.node_tree.links.new(geo.outputs['Normal'], source_copy.inputs['Normal']) - - # Set active texture - tex.image = image - mat.node_tree.nodes.active = tex - - # Bake - bake_object_op() - - # Recover link - mat.node_tree.links.new(ori_bsdf, output.inputs[0]) - - # Remove temp nodes - mat.node_tree.nodes.remove(tex) - simple_remove_node(mat.node_tree, emit) - simple_remove_node(mat.node_tree, source_copy) - simple_remove_node(mat.node_tree, geo) - - # Set entity original type - entity.original_type = 'HEMI' - - # Set entity flag - entity.use_temp_bake = True - - # Recover bake settings - recover_bake_settings(book, yp) - - # Set uv - entity.uv_name = uv_map - - # Replace layer with temp image - if m1: - Layer.replace_layer_type(entity, 'IMAGE', image.name, remove_data=True) - else: Mask.replace_mask_type(entity, 'IMAGE', image.name, remove_data=True) - - return image - -def disable_temp_bake(entity): - if not entity.use_temp_bake: return - - m1 = re.match(r'yp\.layers\[(\d+)\]$', entity.path_from_id()) - m2 = re.match(r'yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) - - # Replace layer type - if m1: Layer.replace_layer_type(entity, entity.original_type, remove_data=True) - else: Mask.replace_mask_type(entity, entity.original_type, remove_data=True) - - # Set entity attribute - entity.use_temp_bake = False - def is_object_bakeable(obj): if obj.type != 'MESH': return False if hasattr(obj, 'hide_viewport') and obj.hide_viewport: return False diff --git a/ui.py b/ui.py index db64364e..4aedfbd0 100644 --- a/ui.py +++ b/ui.py @@ -1522,10 +1522,6 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i row.context_pointer_set('layer', layer) row.context_pointer_set('layer_ui', lui) - if layer.use_temp_bake: - row = row.row(align=True) - row.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') - if layer.type not in {'GROUP', 'PREFERENCES'}: #icon = 'PREFERENCES' if is_bl_newer_than(2, 80) else 'SCRIPTWIN' icon = 'MODIFIER_ON' if is_bl_newer_than(2, 80) else 'MODIFIER' @@ -1613,10 +1609,7 @@ def draw_layer_source(context, layout, layer, layer_tree, source, image, vcol, i ccol = rrcol.column() ccol.active = not layer.use_baked - if layer.use_temp_bake: - ccol.context_pointer_set('parent', layer) - ccol.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') - elif image: + if image: draw_image_props(context, source, ccol, layer, show_flip_y=True, show_datablock=False) # NOTE: Divide rgb by alpha is mostly useless for image layer, @@ -2941,10 +2934,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): #rbcol = rbox.column() rbcol = rrow.column() rbcol.active = not mask.use_baked - if mask.use_temp_bake: - rbcol.context_pointer_set('parent', mask) - rbcol.operator('wm.y_disable_temp_image', icon='FILE_REFRESH', text='Disable Baked Temp') - elif mask_image: + if mask_image: draw_image_props(context, mask_source, rbcol, mask, show_datablock=False, show_source_input=True) elif mask.type == 'HEMI': draw_hemi_props(mask, mask_source, rbcol) @@ -6623,17 +6613,6 @@ def draw(self, context): # col.separator() # col.prop(mask, 'enable_blur_vector', text='Blur Vector') - ypup = get_user_preferences() - - if ypup.developer_mode: - col = row.column(align=True) - col.context_pointer_set('parent', mask) - col.label(text='Advanced') - if not mask.use_temp_bake: - col.operator('wm.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) - else: - col.operator('wm.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') - class YMaterialSpecialMenu(bpy.types.Menu): bl_idname = "MATERIAL_MT_y_special_menu" bl_label = "Material Special Menu" @@ -7208,15 +7187,9 @@ def draw(self, context): col.operator('wm.y_new_ypaint_modifier', text=mt[1], icon_value=lib.get_icon('modifier')).type = mt[0] if ypup.developer_mode: - #if context.parent.type == 'HEMI': col = row.column() col.label(text='Advanced') - if context.parent.use_temp_bake: - col.operator('wm.y_disable_temp_image', text='Disable Baked Temp Image', icon='FILE_REFRESH') - else: - col.operator('wm.y_bake_temp_image', text='Bake Temp Image', icon_value=lib.get_icon('bake')) - #col.separator() col.context_pointer_set('entity', context.parent) col.context_pointer_set('layer', context.parent) col.operator('wm.y_bake_entity_to_image', icon_value=lib.get_icon('bake'), text='Bake Layer as Image') diff --git a/versioning.py b/versioning.py index 31b7e549..59c84177 100644 --- a/versioning.py +++ b/versioning.py @@ -1030,6 +1030,16 @@ def update_yp_tree(tree): height_ch.enable_transition_bump = False height_ch.enable_transition_bump = True + # Version 2.3.6 will remove the remains of mistakenly baked fake lighting layers/masks + # NOTE: The function won't run because version 2.3.6 is not finalized yet + if False and version_tuple(yp.version) < (2, 3, 6): + for layer in yp.layers: + ltree = get_tree(layer) + for n in ltree.nodes: + if n.type == 'TEX_IMAGE' and n.image and len(n.outputs[0].links) == 0 and 'Fake Lighting' in n.image.name and ' Temp' in n.image.name: + print('INFO: Unused image named \''+n.image.name+'\' is removed!') + simple_remove_node(ltree, n) + # SECTION II: Updates based on the blender version # Blender 2.92 can finally access it's vertex color alpha From 33be89ee53298e8cd99b8c92f6228ebd8b846935 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Tue, 2 Sep 2025 12:55:31 +0700 Subject: [PATCH 269/283] Only use float image for automatic fake lighting bake in Blender 2.80 since older versions has wrong gamma --- bake_common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bake_common.py b/bake_common.py index d4805f13..f40290f3 100644 --- a/bake_common.py +++ b/bake_common.py @@ -1995,14 +1995,14 @@ def bake_channel( if lay.type in {'HEMI'} and not lay.use_baked: bprops['name'] = 'Baked ' + lay.name - bprops['hdr'] = True + bprops['hdr'] = is_bl_newer_than(2, 80) bake_entity_as_image(lay, bprops, set_image_to_entity=True) bake_happened = True for mask in lay.masks: if mask.type in {'HEMI'} and not mask.use_baked: bprops['name'] = 'Baked ' + mask.name - bprops['hdr'] = True + bprops['hdr'] = is_bl_newer_than(2, 80) bake_entity_as_image(mask, bprops, set_image_to_entity=True) bake_happened = True From 7777f32a2db1f43e05d61ef2d921b60a1b466f25 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 3 Sep 2025 13:37:43 +0700 Subject: [PATCH 270/283] Only check enabled layers and masks to determine if object can be joined before baking --- Bake.py | 2 -- bake_common.py | 2 ++ ui.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Bake.py b/Bake.py index 3f887087..8d3831af 100644 --- a/Bake.py +++ b/Bake.py @@ -2811,8 +2811,6 @@ def execute(self, context): mat.node_tree.links.new(node.outputs[LAYER_ALPHA_VIEWER], emit.inputs[0]) mat.node_tree.links.new(emit.outputs[0], output.inputs[0]) - #return {'FINISHED'} - # Bake bake_object_op() diff --git a/bake_common.py b/bake_common.py index f40290f3..7f1d0b66 100644 --- a/bake_common.py +++ b/bake_common.py @@ -150,8 +150,10 @@ def is_there_any_missmatched_attribute_types(objs): def is_join_objects_problematic(yp, mat=None): for layer in yp.layers: + if not layer.enable: continue for mask in layer.masks: + if not mask.enable: continue if mask.type in {'VCOL', 'HEMI', 'COLOR_ID'}: continue if mask.texcoord_type in JOIN_PROBLEMATIC_TEXCOORDS or mask.type in {'OBJECT_INDEX'}: diff --git a/ui.py b/ui.py index 4aedfbd0..a8e3f7ab 100644 --- a/ui.py +++ b/ui.py @@ -3389,7 +3389,7 @@ def draw_layers_ui(context, layout, node): # #box.prop(ypui, 'make_image_single_user') # return - # Check source for missing data + # Check for missing data missing_data = False for layer in yp.layers: if layer.type in {'IMAGE' , 'VCOL'}: From dfe091e8c9dcc8525312b20a935607030e60377d Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Wed, 3 Sep 2025 14:00:02 +0700 Subject: [PATCH 271/283] Fix: Baking channel with multiple objects can cause some objects has wrong color when there are missing vertex color data --- Bake.py | 4 ++++ Root.py | 60 +------------------------------------------------- common.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 59 deletions(-) diff --git a/Bake.py b/Bake.py index 8d3831af..f2c25b51 100644 --- a/Bake.py +++ b/Bake.py @@ -1651,6 +1651,10 @@ def execute(self, context): temp_objs = [] ori_objs = [] if (len(objs) > 1 or any_uv_geonodes) and not is_join_objects_problematic(yp, mat): + + # Make sure there's no missing vertex color on any objects + fix_missing_object_vcols(yp, objs, enabled_only=True) + ori_objs = objs objs = temp_objs = [get_merged_mesh_objects(scene, objs)] diff --git a/Root.py b/Root.py index 9b293ba3..b74193f8 100644 --- a/Root.py +++ b/Root.py @@ -2104,35 +2104,6 @@ def execute(self, context): return {'FINISHED'} -def fix_missing_vcol(obj, name, src, entity=None, entities=[]): - - ref_vcol = None - - if is_bl_newer_than(3, 2): - # Try to get reference vcol - mat = get_active_material() - objs = get_all_objects_with_same_materials(mat) - - for o in objs: - ovcols = get_vertex_colors(o) - if name in ovcols: - ref_vcol = ovcols.get(name) - break - - # Default recovered missing vcol is black - color = (0.0, 0.0, 0.0, 0.0) - - # Create missing vertex color - if ref_vcol: vcol = new_vertex_color(obj, name, ref_vcol.data_type, ref_vcol.domain, color_fill=color) - else: vcol = new_vertex_color(obj, name, color_fill=color) - - # Set attribute name back to source in case the name is different - set_source_vcol_name(src, vcol.name) - - # Set the name back to entity - if entity and vcol.name not in entity.name: - entity.name = get_unique_name(vcol.name, entities) - def fix_missing_img(name, src, is_mask=False): img = bpy.data.images.new( name=name, width=1024, height=1024, @@ -2246,36 +2217,7 @@ def execute(self, context): objs.append(ob) # Fix missing vcols - need_color_id_vcol = False - - for obj in objs: - if obj.type != 'MESH': continue - - for layer in yp.layers: - if layer.type == 'VCOL': - src = get_layer_source(layer) - if not get_vcol_from_source(obj, src): - fix_missing_vcol(obj, src.attribute_name, src, entity=layer, entities=yp.layers) - - for mask in layer.masks: - if mask.type == 'VCOL': - src = get_mask_source(mask) - if not get_vcol_from_source(obj, src): - fix_missing_vcol(obj, src.attribute_name, src, entity=mask, entities=layer.masks) - - if mask.type == 'COLOR_ID': - vcols = get_vertex_colors(obj) - if COLOR_ID_VCOL_NAME not in vcols: - need_color_id_vcol = True - - for ch in layer.channels: - if ch.override and ch.override_type == 'VCOL': - src = get_channel_source(ch, layer) - if not get_vcol_from_source(obj, src): - fix_missing_vcol(obj, src.attribute_name, src) - - # Fix missing color id missing vcol - if need_color_id_vcol: check_colorid_vcol(objs) + fix_missing_object_vcols(yp, objs) # Fix missing uvs check_uv_nodes(yp, generate_missings=True) diff --git a/common.py b/common.py index f5e6f0a4..56124537 100644 --- a/common.py +++ b/common.py @@ -7788,3 +7788,69 @@ def enable_eevee_ao(): def is_image_available_to_open(image): return not image.yia.is_image_atlas and not image.yua.is_udim_atlas and image.name not in {'Render Result', 'Viewer Node'} +def fix_missing_vcol(obj, name, src=None, entity=None, entities=[]): + + ref_vcol = None + + if is_bl_newer_than(3, 2): + # Try to get reference vcol + mat = get_active_material() + objs = get_all_objects_with_same_materials(mat) + + for o in objs: + ovcols = get_vertex_colors(o) + if name in ovcols: + ref_vcol = ovcols.get(name) + break + + # Default recovered missing vcol is black + color = (0.0, 0.0, 0.0, 0.0) + + # Create missing vertex color + if ref_vcol: vcol = new_vertex_color(obj, name, ref_vcol.data_type, ref_vcol.domain, color_fill=color) + else: vcol = new_vertex_color(obj, name, color_fill=color) + + # Set attribute name back to source in case the name is different + if src: set_source_vcol_name(src, vcol.name) + + # Set the name back to entity + if entity and vcol.name not in entity.name: + entity.name = get_unique_name(vcol.name, entities) + +def fix_missing_object_vcols(yp, objs, enabled_only=False): + need_color_id_vcol = False + + for obj in objs: + if obj.type != 'MESH': continue + + for layer in yp.layers: + if enabled_only and not layer.enable: continue + + if layer.type == 'VCOL': + src = get_layer_source(layer) + if not get_vcol_from_source(obj, src): + fix_missing_vcol(obj, src.attribute_name, src, entity=layer, entities=yp.layers) + + for mask in layer.masks: + if enabled_only and not mask.enable: continue + + if mask.type == 'VCOL': + src = get_mask_source(mask) + if not get_vcol_from_source(obj, src): + fix_missing_vcol(obj, src.attribute_name, src, entity=mask, entities=layer.masks) + + if mask.type == 'COLOR_ID': + vcols = get_vertex_colors(obj) + if COLOR_ID_VCOL_NAME not in vcols: + need_color_id_vcol = True + + for ch in layer.channels: + if enabled_only and not ch.enable: continue + + if ch.override and ch.override_type == 'VCOL': + src = get_channel_source(ch, layer) + if not get_vcol_from_source(obj, src): + fix_missing_vcol(obj, src.attribute_name, src) + + # Fix missing color id missing vcol + if need_color_id_vcol: check_colorid_vcol(objs) From 1d5594ad59b1e637881cd3c0cdc89159de8ca829 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Thu, 4 Sep 2025 07:10:50 +0400 Subject: [PATCH 272/283] Allow adding layers from an asset library ucupaint material (#317) --- Layer.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ui.py | 13 +++++++-- 2 files changed, 95 insertions(+), 2 deletions(-) diff --git a/Layer.py b/Layer.py index c1ccfe1f..48b8baa6 100644 --- a/Layer.py +++ b/Layer.py @@ -2694,6 +2694,88 @@ def execute(self, context): return {'FINISHED'} +class YOpenLayersFromMaterial(bpy.types.Operator): + bl_idname = "wm.y_open_layers_from_material" + bl_label = "Open Layers from " + get_addon_title() + " Material" + bl_description = "Open layers from material to current " + get_addon_title() + " material" + bl_options = {'REGISTER', 'UNDO'} + + mat_name : StringProperty(default='') + asset_library_path : StringProperty(default='') + + @classmethod + def poll(cls, context): + return context.object and get_active_ypaint_node() + + @classmethod + def description(self, context, properties): + return get_operator_description(self) + + def execute(self, context): + if self.mat_name == '': + self.report({'ERROR'}, "Source material cannot be empty!") + return {'CANCELLED'} + + obj = context.object + if not obj.data or not hasattr(obj.data, 'materials'): + self.report({'ERROR'}, "Cannot use " + get_addon_title() + " with object '" + obj.name + "'!") + return {'CANCELLED'} + + # Get material from local first + mat = bpy.data.materials.get(self.mat_name) + + # If not found get from the asset library + from_asset_library = self.asset_library_path != '' + if not mat and from_asset_library and is_bl_newer_than(3): + with bpy.data.libraries.load(str(self.asset_library_path), assets_only=True) as (data_from, data_to): + for mat_name in data_from.materials: + if mat_name == self.mat_name: + data_to.materials.append(mat_name) + mat = bpy.data.materials.get(self.mat_name) + + if not mat: + self.report({'ERROR'}, "Material cannot be found!") + return {'CANCELLED'} + + if not mat.node_tree: + self.report({'ERROR'}, "Material has no node tree!") + return {'CANCELLED'} + + # Find yp node in source material + source_yp_node = None + for node in mat.node_tree.nodes: + if node.type == 'GROUP' and hasattr(node.node_tree, 'yp') and node.node_tree.yp.is_ypaint_node: + source_yp_node = node + break + + if not source_yp_node: + self.report({'ERROR'}, "Material has no " + get_addon_title() + " node!") + return {'CANCELLED'} + + source_tree = source_yp_node.node_tree + source_yp = source_tree.yp + + if len(source_yp.layers) == 0: + self.report({'ERROR'}, "Material has no layers!") + return {'CANCELLED'} + + # Copy all layers to clipboard + wmp = context.window_manager.ypprops + wmp.clipboard_tree = source_tree.name + wmp.clipboard_layer = '' # Empty means all layers + + try: + bpy.ops.wm.y_paste_layer('INVOKE_DEFAULT') + except Exception as e: + self.report({'ERROR'}, f"Failed to paste layers: {str(e)}") + return {'CANCELLED'} + + # Remove material if it has only fake users (from asset library) + if from_asset_library and ((mat.use_fake_user and mat.users == 1) or mat.users == 0): + remove_datablock(bpy.data.materials, mat) + + return {'FINISHED'} + class YOpenImagesToSingleLayer(bpy.types.Operator, ImportHelper, BaseMultipleImagesLayer): bl_idname = "wm.y_open_images_to_single_layer" bl_label = "Open Images to single Layer" @@ -7220,6 +7302,7 @@ def register(): bpy.utils.register_class(YOpenImageToLayer) bpy.utils.register_class(YOpenImagesToSingleLayer) bpy.utils.register_class(YOpenImagesFromMaterialToLayer) + bpy.utils.register_class(YOpenLayersFromMaterial) bpy.utils.register_class(YOpenImageToReplaceLayer) bpy.utils.register_class(YOpenImageToOverrideChannel) bpy.utils.register_class(YOpenImageToOverride1Channel) @@ -7255,6 +7338,7 @@ def unregister(): bpy.utils.unregister_class(YNewVcolToOverrideChannel) bpy.utils.unregister_class(YOpenImageToLayer) bpy.utils.unregister_class(YOpenImagesToSingleLayer) + bpy.utils.unregister_class(YOpenLayersFromMaterial) bpy.utils.unregister_class(YOpenImagesFromMaterialToLayer) bpy.utils.unregister_class(YOpenImageToReplaceLayer) bpy.utils.unregister_class(YOpenImageToOverrideChannel) diff --git a/ui.py b/ui.py index a8e3f7ab..a6af1645 100644 --- a/ui.py +++ b/ui.py @@ -5260,9 +5260,18 @@ def poll(cls, context): def draw(self, context): obj = context.object + + mat_asset = getattr(context, 'mat_asset', None) + mat_name = mat_asset.name if mat_asset else '' + asset_library_path = mat_asset.full_library_path if mat_asset else '' + op = self.layout.operator("wm.y_open_images_from_material_to_single_layer", icon_value=lib.get_icon('image'), text='Open Material Images to Layer') - op.mat_name = context.mat_asset.name if hasattr(context, 'mat_asset') else '' - op.asset_library_path = context.mat_asset.full_library_path if hasattr(context, 'mat_asset') else '' + op.mat_name = mat_name + op.asset_library_path = asset_library_path + + op = self.layout.operator("wm.y_open_layers_from_material", icon='PASTEDOWN') + op.mat_name = mat_name + op.asset_library_path = asset_library_path if obj.type == 'MESH': op.texcoord_type = 'UV' From 4d9ce706382d5952925b22e73033aa235795f86b Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 4 Sep 2025 10:29:49 +0700 Subject: [PATCH 273/283] Always remove loaded material before completing operator execution --- Layer.py | 18 ++++++++++++------ ui.py | 12 ++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Layer.py b/Layer.py index 48b8baa6..8e94f704 100644 --- a/Layer.py +++ b/Layer.py @@ -2711,6 +2711,11 @@ def poll(cls, context): def description(self, context, properties): return get_operator_description(self) + def remove_mat(self, mat, from_asset_library): + # Remove material if it has only fake users (from asset library) + if from_asset_library and ((mat.use_fake_user and mat.users == 1) or mat.users == 0): + remove_datablock(bpy.data.materials, mat) + def execute(self, context): if self.mat_name == '': self.report({'ERROR'}, "Source material cannot be empty!") @@ -2718,7 +2723,7 @@ def execute(self, context): obj = context.object if not obj.data or not hasattr(obj.data, 'materials'): - self.report({'ERROR'}, "Cannot use " + get_addon_title() + " with object '" + obj.name + "'!") + self.report({'ERROR'}, "Cannot use "+get_addon_title()+" with object '"+obj.name+"'!") return {'CANCELLED'} # Get material from local first @@ -2738,6 +2743,7 @@ def execute(self, context): return {'CANCELLED'} if not mat.node_tree: + self.remove_mat(mat, from_asset_library) self.report({'ERROR'}, "Material has no node tree!") return {'CANCELLED'} @@ -2749,13 +2755,15 @@ def execute(self, context): break if not source_yp_node: - self.report({'ERROR'}, "Material has no " + get_addon_title() + " node!") + self.remove_mat(mat, from_asset_library) + self.report({'ERROR'}, "Material has no "+get_addon_title()+" node!") return {'CANCELLED'} source_tree = source_yp_node.node_tree source_yp = source_tree.yp if len(source_yp.layers) == 0: + self.remove_mat(mat, from_asset_library) self.report({'ERROR'}, "Material has no layers!") return {'CANCELLED'} @@ -2767,12 +2775,10 @@ def execute(self, context): try: bpy.ops.wm.y_paste_layer('INVOKE_DEFAULT') except Exception as e: - self.report({'ERROR'}, f"Failed to paste layers: {str(e)}") + self.report({'ERROR'}, "Failed to paste layers: "+str(e)) return {'CANCELLED'} - # Remove material if it has only fake users (from asset library) - if from_asset_library and ((mat.use_fake_user and mat.users == 1) or mat.users == 0): - remove_datablock(bpy.data.materials, mat) + self.remove_mat(mat, from_asset_library) return {'FINISHED'} diff --git a/ui.py b/ui.py index a6af1645..391907c2 100644 --- a/ui.py +++ b/ui.py @@ -5273,12 +5273,12 @@ def draw(self, context): op.mat_name = mat_name op.asset_library_path = asset_library_path - if obj.type == 'MESH': - op.texcoord_type = 'UV' - active_uv_name = get_active_render_uv(obj) - op.uv_map = active_uv_name - else: - op.texcoord_type = 'Generated' + #if obj.type == 'MESH': + # op.texcoord_type = 'UV' + # active_uv_name = get_active_render_uv(obj) + # op.uv_map = active_uv_name + #else: + # op.texcoord_type = 'Generated' def draw_yp_asset_browser_menu(self, context): From 4d9a0709c6f53b3057499ed71c2d8ab11d0c4361 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 4 Sep 2025 10:36:02 +0700 Subject: [PATCH 274/283] Add "Smoothness" synonym for loading images to single layer --- Layer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Layer.py b/Layer.py index 8e94f704..1d29403c 100644 --- a/Layer.py +++ b/Layer.py @@ -2116,7 +2116,7 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str='', imp 'alpha' : ['opacity', 'a'], 'ambient occlusion' : ['ao'], 'metallic' : ['metalness', 'm'], - 'roughness' : ['glossiness', 'r'], + 'roughness' : ['glossiness', 'smoothness', 'r'], 'normal' : ['displacement', 'height', 'bump', 'n'], # Prioritize displacement/bump before actual normal map } @@ -2266,7 +2266,7 @@ def open_images_to_single_layer(self, context:bpy.context, directory:str='', imp if root_ch.type == 'NORMAL': image_node.interpolation = 'Cubic' # Add invert modifier for glosiness - if syname == 'glossiness': + if syname in {'glossiness', 'smoothness'}: Modifier.add_new_modifier(ch, 'INVERT') if image == main_image: From da039994fb4eb2bd0de0edd71edf0ba2fb1e4aed Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 4 Sep 2025 11:00:43 +0700 Subject: [PATCH 275/283] Bring back mistakenly commented object type checking when loading images from material asset. --- ui.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ui.py b/ui.py index 391907c2..068e55fd 100644 --- a/ui.py +++ b/ui.py @@ -5269,17 +5269,17 @@ def draw(self, context): op.mat_name = mat_name op.asset_library_path = asset_library_path + if obj.type == 'MESH': + op.texcoord_type = 'UV' + active_uv_name = get_active_render_uv(obj) + op.uv_map = active_uv_name + else: + op.texcoord_type = 'Generated' + op = self.layout.operator("wm.y_open_layers_from_material", icon='PASTEDOWN') op.mat_name = mat_name op.asset_library_path = asset_library_path - #if obj.type == 'MESH': - # op.texcoord_type = 'UV' - # active_uv_name = get_active_render_uv(obj) - # op.uv_map = active_uv_name - #else: - # op.texcoord_type = 'Generated' - def draw_yp_asset_browser_menu(self, context): assets = context.selected_assets if is_bl_newer_than(4) else context.selected_asset_files From 7bee762e1b74112e2d04e970a117044d440440e8 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Thu, 4 Sep 2025 15:31:42 +0700 Subject: [PATCH 276/283] Create new file for decal related functions and classes --- Decal.py | 147 +++++++++++++++++++++++++++++++++++++++++++++++ Layer.py | 96 ++----------------------------- Mask.py | 12 +--- __init__.py | 5 +- common.py | 21 ------- input_outputs.py | 28 +-------- 6 files changed, 163 insertions(+), 146 deletions(-) create mode 100644 Decal.py diff --git a/Decal.py b/Decal.py new file mode 100644 index 00000000..bbf0774b --- /dev/null +++ b/Decal.py @@ -0,0 +1,147 @@ +import bpy, re +from bpy.props import * +from bpy.app.handlers import persistent +from .common import * + +def get_decal_object(entity): + m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) + + if m1: tree = get_tree(entity) + elif m2: tree = get_mask_tree(entity) + else: return None + + decal_obj = None + texcoord = tree.nodes.get(entity.texcoord) + if texcoord and hasattr(texcoord, 'object'): decal_obj = texcoord.object + + return decal_obj + +def get_decal_consraint(decal_obj): + cs = [c for c in decal_obj.constraints if c.type == 'SHRINKWRAP'] + if len(cs) > 0: return cs[0] + return None + +def any_decal_inside_layer(layer): + if layer.texcoord_type == 'Decal': + return True + + for mask in layer.masks: + if mask.texcoord_type == 'Decal': + return True + + return False + +def remove_decal_object(tree, entity): + if not tree: return + # NOTE: This will remove the texcoord object even if the entity is not using decal + #if entity.texcoord_type == 'Decal': + texcoord = tree.nodes.get(entity.texcoord) + if texcoord and hasattr(texcoord, 'object') and texcoord.object: + decal_obj = texcoord.object + if decal_obj.type == 'EMPTY' and decal_obj.users <= 2: + texcoord.object = None + remove_datablock(bpy.data.objects, decal_obj) + +def create_decal_empty(): + obj = bpy.context.object + scene = bpy.context.scene + empty_name = get_unique_name('Decal', bpy.data.objects) + empty = bpy.data.objects.new(empty_name, None) + if is_bl_newer_than(2, 80): + empty.empty_display_type = 'SINGLE_ARROW' + else: empty.empty_draw_type = 'SINGLE_ARROW' + custom_collection = obj.users_collection[0] if is_bl_newer_than(2, 80) and len(obj.users_collection) > 0 else None + link_object(scene, empty, custom_collection) + if is_bl_newer_than(2, 80): + empty.location = scene.cursor.location.copy() + empty.rotation_euler = scene.cursor.rotation_euler.copy() + else: + empty.location = scene.cursor_location.copy() + + # Parent empty to active object + empty.parent = obj + empty.matrix_parent_inverse = obj.matrix_world.inverted() + + return empty + +class YSelectDecalObject(bpy.types.Operator): + bl_idname = "wm.y_select_decal_object" + bl_label = "Select Decal Object" + bl_description = "Select Decal Object" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + group_node = get_active_ypaint_node() + return group_node and hasattr(context, 'entity') + + def execute(self, context): + scene = context.scene + + decal_obj = get_decal_object(context.entity) + if decal_obj: + try: bpy.ops.object.mode_set(mode='OBJECT') + except: pass + bpy.ops.object.select_all(action='DESELECT') + if decal_obj.name not in get_scene_objects(): + parent = decal_obj.parent + custom_collection = parent.users_collection[0] if is_bl_newer_than(2, 80) and parent and len(parent.users_collection) > 0 else None + link_object(scene, decal_obj, custom_collection) + set_active_object(decal_obj) + set_object_select(decal_obj, True) + else: return {'CANCELLED'} + + return {'FINISHED'} + +class YSetDecalObjectPositionToCursor(bpy.types.Operator): + bl_idname = "wm.y_set_decal_object_position_to_sursor" + bl_label = "Set Decal Position to Cursor" + bl_description = "Set the position of the decal object to the 3D cursor" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + group_node = get_active_ypaint_node() + return group_node and hasattr(context, 'entity') + + def execute(self, context): + scene = bpy.context.scene + entity = context.entity + + m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) + + if m1: tree = get_tree(entity) + elif m2: tree = get_mask_tree(entity) + else: return {'CANCELLED'} + + texcoord = tree.nodes.get(entity.texcoord) + + if texcoord and hasattr(texcoord, 'object') and texcoord.object: + # Move decal object to 3D cursor + if is_bl_newer_than(2, 80): + texcoord.object.location = scene.cursor.location.copy() + texcoord.object.rotation_euler = scene.cursor.rotation_euler.copy() + else: + texcoord.object.location = scene.cursor_location.copy() + + else: return {'CANCELLED'} + + return {'FINISHED'} + +class BaseDecal(): + + decal_distance_value : FloatProperty( + name = 'Decal Distance', + description = 'Distance between surface and the decal object', + min=0.0, max=100.0, default=0.5, precision=3 + ) + +def register(): + bpy.utils.register_class(YSelectDecalObject) + bpy.utils.register_class(YSetDecalObjectPositionToCursor) + +def unregister(): + bpy.utils.unregister_class(YSelectDecalObject) + bpy.utils.unregister_class(YSetDecalObjectPositionToCursor) diff --git a/Layer.py b/Layer.py index 1d29403c..2abd3f37 100644 --- a/Layer.py +++ b/Layer.py @@ -1,7 +1,7 @@ import bpy, time, re, os, random, numpy from bpy.props import * from bpy_extras.io_utils import ImportHelper -from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem, BaseOperator +from . import Modifier, lib, Mask, transition, ImageAtlas, UDIM, NormalMapModifier, ListItem, BaseOperator, Decal from .common import * #from . import bake_common from .node_arrangements import * @@ -3902,7 +3902,7 @@ def remove_layer(yp, index, remove_on_disk=False): wm = bpy.context.window_manager # Dealing with decal object - remove_decal_object(layer_tree, layer) + Decal.remove_decal_object(layer_tree, layer) # Dealing with image atlas segments if layer.type == 'IMAGE': # and layer.segment_name != '': @@ -3935,7 +3935,7 @@ def remove_layer(yp, index, remove_on_disk=False): for mask in layer.masks: # Dealing with decal object - remove_decal_object(layer_tree, mask) + Decal.remove_decal_object(layer_tree, mask) # Dealing with image atlas segments if mask.type == 'IMAGE': # and mask.segment_name != '': @@ -5164,7 +5164,7 @@ def invoke(self, context, event): if not self.duplicate_blank: self.any_packed_image = any(get_layer_images(layer, packed_only=True)) self.any_ondisk_image = any(get_layer_images(layer, ondisk_only=True)) - self.any_decal = any_decal_inside_layer(layer) + self.any_decal = Decal.any_decal_inside_layer(layer) if get_user_preferences().skip_property_popups and not event.shift: return self.execute(context) @@ -5393,7 +5393,7 @@ def invoke(self, context, event): for layer in source_layers: if not self.any_packed_image: self.any_packed_image = any(get_layer_images(layer, packed_only=True)) if not self.any_ondisk_image: self.any_ondisk_image = any(get_layer_images(layer, ondisk_only=True)) - if not self.any_decal: self.any_decal = any_decal_inside_layer(layer) + if not self.any_decal: self.any_decal = Decal.any_decal_inside_layer(layer) # Do not check baked if current yp == yp_source if yp != yp_source: @@ -5659,80 +5659,6 @@ def execute(self, context): return {'FINISHED'} -class YSelectDecalObject(bpy.types.Operator): - bl_idname = "wm.y_select_decal_object" - bl_label = "Select Decal Object" - bl_description = "Select Decal Object" - bl_options = {'REGISTER', 'UNDO'} - - @classmethod - def poll(cls, context): - group_node = get_active_ypaint_node() - return group_node and hasattr(context, 'entity') - - def execute(self, context): - scene = context.scene - entity = context.entity - - m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) - m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) - - if m1: tree = get_tree(entity) - elif m2: tree = get_mask_tree(entity) - else: return {'CANCELLED'} - - texcoord = tree.nodes.get(entity.texcoord) - - if texcoord and hasattr(texcoord, 'object') and texcoord.object: - try: bpy.ops.object.mode_set(mode='OBJECT') - except: pass - bpy.ops.object.select_all(action='DESELECT') - if texcoord.object.name not in get_scene_objects(): - parent = texcoord.object.parent - custom_collection = parent.users_collection[0] if is_bl_newer_than(2, 80) and parent and len(parent.users_collection) > 0 else None - link_object(scene, texcoord.object, custom_collection) - set_active_object(texcoord.object) - set_object_select(texcoord.object, True) - else: return {'CANCELLED'} - - return {'FINISHED'} - -class YSetDecalObjectPositionToCursor(bpy.types.Operator): - bl_idname = "wm.y_set_decal_object_position_to_sursor" - bl_label = "Set Decal Position to Cursor" - bl_description = "Set the position of the decal object to the 3D cursor" - bl_options = {'REGISTER', 'UNDO'} - - @classmethod - def poll(cls, context): - group_node = get_active_ypaint_node() - return group_node and hasattr(context, 'entity') - - def execute(self, context): - scene = bpy.context.scene - entity = context.entity - - m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) - m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) - - if m1: tree = get_tree(entity) - elif m2: tree = get_mask_tree(entity) - else: return {'CANCELLED'} - - texcoord = tree.nodes.get(entity.texcoord) - - if texcoord and hasattr(texcoord, 'object') and texcoord.object: - # Move decal object to 3D cursor - if is_bl_newer_than(2, 80): - texcoord.object.location = scene.cursor.location.copy() - texcoord.object.rotation_euler = scene.cursor.rotation_euler.copy() - else: - texcoord.object.location = scene.cursor_location.copy() - - else: return {'CANCELLED'} - - return {'FINISHED'} - def update_layer_channel_override_1(self, context): yp = self.id_data.yp if yp.halt_update: return @@ -6987,7 +6913,7 @@ def update_layer_use_baked(self, context): reconnect_yp_nodes(self.id_data) rearrange_yp_nodes(self.id_data) -class YLayer(bpy.types.PropertyGroup): +class YLayer(bpy.types.PropertyGroup, Decal.BaseDecal): name : StringProperty( name = 'Layer Name', description = 'Layer name', @@ -7195,12 +7121,6 @@ class YLayer(bpy.types.PropertyGroup): update = update_layer_blur_vector_factor ) - decal_distance_value : FloatProperty( - name = 'Decal Distance', - description = 'Distance between surface and the decal object', - min=0.0, max=100.0, default=0.5, precision=3 - ) - use_baked : BoolProperty( name = 'Use Baked', description = 'Use baked layer image', @@ -7331,8 +7251,6 @@ def register(): bpy.utils.register_class(YDuplicateLayer) bpy.utils.register_class(YCopyLayer) bpy.utils.register_class(YPasteLayer) - bpy.utils.register_class(YSelectDecalObject) - bpy.utils.register_class(YSetDecalObjectPositionToCursor) bpy.utils.register_class(YLayerChannel) bpy.utils.register_class(YLayer) @@ -7368,7 +7286,5 @@ def unregister(): bpy.utils.unregister_class(YDuplicateLayer) bpy.utils.unregister_class(YCopyLayer) bpy.utils.unregister_class(YPasteLayer) - bpy.utils.unregister_class(YSelectDecalObject) - bpy.utils.unregister_class(YSetDecalObjectPositionToCursor) bpy.utils.unregister_class(YLayerChannel) bpy.utils.unregister_class(YLayer) diff --git a/Mask.py b/Mask.py index 3e63825d..8e37c6b0 100644 --- a/Mask.py +++ b/Mask.py @@ -1,7 +1,7 @@ import bpy, re, time, random from bpy.props import * from bpy_extras.io_utils import ImportHelper -from . import lib, ImageAtlas, MaskModifier, UDIM, ListItem, BaseOperator +from . import lib, ImageAtlas, MaskModifier, UDIM, ListItem, BaseOperator, Decal from .common import * from .node_connections import * from .node_arrangements import * @@ -213,7 +213,7 @@ def remove_mask(layer, mask, obj, refresh_list=True): mask_index = [i for i, m in enumerate(layer.masks) if m == mask][0] # Dealing with decal object - remove_decal_object(tree, mask) + Decal.remove_decal_object(tree, mask) # Remove mask fcurves first remove_entity_fcurves(mask) @@ -2339,7 +2339,7 @@ def update_mask_uniform_scale_enabled(self, context): reconnect_layer_nodes(layer) rearrange_layer_nodes(layer) -class YLayerMask(bpy.types.PropertyGroup): +class YLayerMask(bpy.types.PropertyGroup, Decal.BaseDecal): name : StringProperty(default='', update=update_mask_name) @@ -2496,12 +2496,6 @@ class YLayerMask(bpy.types.PropertyGroup): default=1.0, min=0.0, max=100.0, precision=3 ) - decal_distance_value : FloatProperty( - name = 'Decal Distance', - description = 'Distance between surface and the decal object', - min=0.0, max=100.0, default=0.5, precision=3 - ) - color_id : FloatVectorProperty( name = 'Color ID', size = 3, diff --git a/__init__.py b/__init__.py index cfe8e825..1e81a644 100644 --- a/__init__.py +++ b/__init__.py @@ -15,6 +15,7 @@ import imp imp.reload(Localization) imp.reload(BaseOperator) + imp.reload(Decal) imp.reload(image_ops) imp.reload(common) imp.reload(bake_common) @@ -49,7 +50,7 @@ imp.reload(Test) else: from . import Localization - from . import BaseOperator, image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences + from . import BaseOperator, Decal, image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences from . import vector_displacement_lib, vector_displacement from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, ListItem, Bake, BakeToLayer, Root, versioning from . import addon_updater_ops @@ -60,6 +61,7 @@ def register(): Localization.register_module(ui) + Decal.register() image_ops.register() preferences.register() lib.register() @@ -89,6 +91,7 @@ def register(): def unregister(): Localization.unregister_module(ui) + Decal.unregister() image_ops.unregister() preferences.unregister() lib.unregister() diff --git a/common.py b/common.py index 56124537..2e3aa017 100644 --- a/common.py +++ b/common.py @@ -5684,16 +5684,6 @@ def get_layer_images(layer, udim_only=False, ondisk_only=False, packed_only=Fals return filtered_images -def any_decal_inside_layer(layer): - if layer.texcoord_type == 'Decal': - return True - - for mask in layer.masks: - if mask.texcoord_type == 'Decal': - return True - - return False - def any_dirty_images_inside_layer(layer): for image in get_layer_images(layer): if image.is_dirty: @@ -7746,17 +7736,6 @@ def get_uv_hash(obj, uv_name): h = hash(uv_np.tobytes()) return str(h) -def remove_decal_object(tree, entity): - if not tree: return - # NOTE: This will remove the texcoord object even if the entity is not using decal - #if entity.texcoord_type == 'Decal': - texcoord = tree.nodes.get(entity.texcoord) - if texcoord and hasattr(texcoord, 'object') and texcoord.object: - decal_obj = texcoord.object - if decal_obj.type == 'EMPTY' and decal_obj.users <= 2: - texcoord.object = None - remove_datablock(bpy.data.objects, decal_obj) - def load_image(path, directory, check_existing=True): if not is_bl_newer_than(2, 77): return bpy_extras.image_utils.load_image(path, directory) diff --git a/input_outputs.py b/input_outputs.py index 34c5561f..d1002de6 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -1,5 +1,5 @@ import bpy, re -from . import lib +from . import lib, Decal from .common import * from .transition_common import * from .subtree import * @@ -484,28 +484,6 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= reconnect_yp_nodes(group_tree) rearrange_yp_nodes(group_tree) -def create_decal_empty(): - obj = bpy.context.object - scene = bpy.context.scene - empty_name = get_unique_name('Decal', bpy.data.objects) - empty = bpy.data.objects.new(empty_name, None) - if is_bl_newer_than(2, 80): - empty.empty_display_type = 'SINGLE_ARROW' - else: empty.empty_draw_type = 'SINGLE_ARROW' - custom_collection = obj.users_collection[0] if is_bl_newer_than(2, 80) and len(obj.users_collection) > 0 else None - link_object(scene, empty, custom_collection) - if is_bl_newer_than(2, 80): - empty.location = scene.cursor.location.copy() - empty.rotation_euler = scene.cursor.rotation_euler.copy() - else: - empty.location = scene.cursor_location.copy() - - # Parent empty to active object - empty.parent = obj - empty.matrix_parent_inverse = obj.matrix_world.inverted() - - return empty - def check_mask_texcoord_nodes(layer, mask, tree=None): yp = layer.id_data.yp if not tree: tree = get_tree(layer) @@ -526,7 +504,7 @@ def check_mask_texcoord_nodes(layer, mask, tree=None): # Create new empty object if there's no texcoord yet if not texcoord: - empty = create_decal_empty() + empty = Decal.create_decal_empty() texcoord = new_node(tree, mask, 'texcoord', 'ShaderNodeTexCoord', 'TexCoord') texcoord.object = empty @@ -596,7 +574,7 @@ def check_layer_texcoord_nodes(layer, tree=None): # Create new empty object if there's no texcoord yet if not texcoord: - empty = create_decal_empty() + empty = Decal.create_decal_empty() texcoord = new_node(tree, layer, 'texcoord', 'ShaderNodeTexCoord', 'TexCoord') texcoord.object = empty From 86a9ebadf07c44ba9f2a2bf3b835ffa8fe7fafc2 Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Thu, 4 Sep 2025 15:39:27 +0400 Subject: [PATCH 277/283] Add a button to bake other objects color to a mask (#318) --- ui.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui.py b/ui.py index 068e55fd..adf1fffa 100644 --- a/ui.py +++ b/ui.py @@ -6545,6 +6545,9 @@ def draw(self, context): new_mask_button(col, 'wm.y_bake_to_layer', 'Paint Base', otype='PAINT_BASE', target_type='MASK', overwrite_current=False) new_mask_button(col, 'wm.y_bake_to_layer', 'Bevel Grayscale', otype='BEVEL_MASK', target_type='MASK', overwrite_current=False) new_mask_button(col, 'wm.y_bake_to_layer', 'Selected Vertices', otype='SELECTED_VERTICES', target_type='MASK', overwrite_current=False) + if is_bl_newer_than(2, 77): + col.separator() + new_mask_button(col, 'wm.y_bake_to_layer', 'Other Objects Color', otype='OTHER_OBJECT_EMISSION', target_type='MASK', overwrite_current=False) col.separator() col.label(text='Inbetween Modifier Mask:') From 2a069f9094b52ed3c6a7b2903ae670df99255a1c Mon Sep 17 00:00:00 2001 From: passivestar <60579014+passivestar@users.noreply.github.com> Date: Fri, 5 Sep 2025 07:25:26 +0400 Subject: [PATCH 278/283] Improve other objects baking workflow (#320) --- BakeToLayer.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ bake_common.py | 5 +++++ ui.py | 7 +++++- 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/BakeToLayer.py b/BakeToLayer.py index 1ae718f3..e7309a98 100644 --- a/BakeToLayer.py +++ b/BakeToLayer.py @@ -1408,6 +1408,60 @@ def execute(self, context): return {'FINISHED'} +class YSelectAllOtherObjects(bpy.types.Operator): + bl_idname = "wm.y_select_all_other_objects" + bl_label = "Select All Other Objects" + bl_description = "Select all objects in the other objects list" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() and hasattr(context, 'bake_info') + + def execute(self, context): + bpy.ops.object.select_all(action='DESELECT') + + for i in range(len(context.bake_info.other_objects)): + so = context.bake_info.other_objects[i] + if so.object: + so_object = so.object + so_object.hide_viewport = False + set_object_select(so_object, True) + if so_object: + set_active_object(so_object) + + return {'FINISHED'} + +class YToggleOtherObjectsVisibility(bpy.types.Operator): + bl_idname = "wm.y_toggle_other_objects_visibility" + bl_label = "Toggle Other Objects Visibility" + bl_description = "Toggle visibility of all objects in the other objects list" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + return get_active_ypaint_node() and hasattr(context, 'bake_info') + + def execute(self, context): + bi = context.bake_info + + reference_obj = None + for oo in bi.other_objects: + if oo.object: + reference_obj = oo.object + break + + if not reference_obj: + return {'CANCELLED'} + + current_hidden_state = reference_obj.hide_viewport + + for oo in bi.other_objects: + if oo.object: + oo.object.hide_viewport = not current_hidden_state + + return {'FINISHED'} + def register(): bpy.utils.register_class(YBakeToLayer) bpy.utils.register_class(YBakeEntityToImage) @@ -1416,6 +1470,8 @@ def register(): bpy.utils.register_class(YRemoveBakedEntity) bpy.utils.register_class(YRebakeBakedImages) bpy.utils.register_class(YRebakeSpecificLayers) + bpy.utils.register_class(YSelectAllOtherObjects) + bpy.utils.register_class(YToggleOtherObjectsVisibility) def unregister(): bpy.utils.unregister_class(YBakeToLayer) @@ -1425,3 +1481,5 @@ def unregister(): bpy.utils.unregister_class(YRemoveBakedEntity) bpy.utils.unregister_class(YRebakeBakedImages) bpy.utils.unregister_class(YRebakeSpecificLayers) + bpy.utils.unregister_class(YSelectAllOtherObjects) + bpy.utils.unregister_class(YToggleOtherObjectsVisibility) diff --git a/bake_common.py b/bake_common.py index 7f1d0b66..2249bb75 100644 --- a/bake_common.py +++ b/bake_common.py @@ -3994,6 +3994,11 @@ def bake_to_entity(bprops, overwrite_img=None, segment=None): # Recover bake settings recover_bake_settings(book, yp, mat=mat) + # Hide other objects after baking + if is_bl_newer_than(2, 79) and bprops.type.startswith('OTHER_OBJECT_') and other_objs: + for oo in other_objs: + oo.hide_viewport = True + # Remove temporary objects if temp_objs: for o in temp_objs: diff --git a/ui.py b/ui.py index adf1fffa..7067fa6f 100644 --- a/ui.py +++ b/ui.py @@ -180,17 +180,22 @@ def draw_bake_info(bake_info, layout, entity): layout.label(text='List of Objects:') box = layout.box() bcol = box.column() + bcol.context_pointer_set('bake_info', bi) if num_oos > 0: for oo in bi.other_objects: if is_bl_newer_than(2,79) and not oo.object: continue brow = bcol.row() brow.context_pointer_set('other_object', oo) - brow.context_pointer_set('bake_info', bi) if is_bl_newer_than(2, 79): brow.label(text=oo.object.name, icon_value=lib.get_icon('object_index')) else: brow.label(text=oo.object_name, icon_value=lib.get_icon('object_index')) brow.operator('wm.y_remove_bake_info_other_object', text='', icon_value=lib.get_icon('close')) + + if is_bl_newer_than(2, 79): + bbcol = bcol.column(align=True) + bbcol.operator('wm.y_select_all_other_objects', text='Select All', icon='RESTRICT_SELECT_OFF') + bbcol.operator('wm.y_toggle_other_objects_visibility', text='Toggle Hide', icon='RESTRICT_VIEW_OFF') else: brow = bcol.row() brow.label(text='No source objects found!', icon='ERROR') From 047b31ed9b10ad3a001111189239cda919af5ead Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Fri, 5 Sep 2025 11:38:13 +0700 Subject: [PATCH 279/283] Simplify decal nodes checking --- Decal.py | 140 ++++++++++++++++++++++++++++++++++++++++- Layer.py | 11 ---- Mask.py | 11 ---- __init__.py | 8 +-- input_outputs.py | 159 +---------------------------------------------- 5 files changed, 145 insertions(+), 184 deletions(-) diff --git a/Decal.py b/Decal.py index bbf0774b..1ef40fad 100644 --- a/Decal.py +++ b/Decal.py @@ -1,4 +1,5 @@ import bpy, re +from . import lib from bpy.props import * from bpy.app.handlers import persistent from .common import * @@ -17,7 +18,7 @@ def get_decal_object(entity): return decal_obj -def get_decal_consraint(decal_obj): +def get_decal_constraint(decal_obj): cs = [c for c in decal_obj.constraints if c.type == 'SHRINKWRAP'] if len(cs) > 0: return cs[0] return None @@ -65,6 +66,132 @@ def create_decal_empty(): return empty +def check_entity_decal_nodes(entity, tree=None): + yp = entity.id_data.yp + m1 = re.match(r'^yp\.layers\[(\d+)\]$', entity.path_from_id()) + m2 = re.match(r'^yp\.layers\[(\d+)\]\.masks\[(\d+)\]$', entity.path_from_id()) + + if m1: + entity_enabled = get_layer_enabled(entity) + source = get_layer_source(entity) + if not tree: tree = get_tree(entity) + layer = entity + mask = None + elif m2: + entity_enabled = get_mask_enabled(entity) + source = get_mask_source(entity) + layer = yp.layers[int(m2.group(1))] + if not tree: tree = get_tree(entity) + mask = entity + else: return + + # Get height channel + height_ch = get_height_channel(layer) + + # Create texcoord node if decal is used + texcoord = tree.nodes.get(entity.texcoord) + if entity_enabled and entity.texcoord_type == 'Decal' and is_mapping_possible(entity.type): + + # Set image extension type to clip + image = None + if entity.type == 'IMAGE' and source: + image = source.image + + # Create new empty object if there's no texcoord yet + if not texcoord: + empty = create_decal_empty() + texcoord = new_node(tree, entity, 'texcoord', 'ShaderNodeTexCoord', 'TexCoord') + texcoord.object = empty + + decal_process = tree.nodes.get(entity.decal_process) + if not decal_process: + decal_process = new_node(tree, entity, 'decal_process', 'ShaderNodeGroup', 'Decal Process') + decal_process.node_tree = get_node_tree_lib(lib.DECAL_PROCESS) + + # Set image extension only after decal process node is initialized + if image and source: + entity.original_image_extension = source.extension + source.extension = 'CLIP' + + # Set decal aspect ratio + if image and image.size[0] > 0 and image.size[1] > 0: + if image.size[0] > image.size[1]: + decal_process.inputs['Scale'].default_value = (image.size[1] / image.size[0], 1.0, 1.0) + else: decal_process.inputs['Scale'].default_value = (1.0, image.size[0] / image.size[1], 1.0) + + # Create decal alpha nodes + if mask: + + # Check if height channel is enabled + height_root_ch = get_root_height_channel(yp) + height_ch_enabled = get_channel_enabled(height_ch) if height_ch else False + + decal_alpha = check_new_node(tree, mask, 'decal_alpha', 'ShaderNodeMath', 'Decal Alpha') + if decal_alpha.operation != 'MULTIPLY': + decal_alpha.operation = 'MULTIPLY' + + if height_ch and height_ch_enabled and height_root_ch.enable_smooth_bump: + for letter in nsew_letters: + decal_alpha = check_new_node(tree, mask, 'decal_alpha_' + letter, 'ShaderNodeMath', 'Decal Alpha ' + letter.upper()) + if decal_alpha.operation != 'MULTIPLY': + decal_alpha.operation = 'MULTIPLY' + else: + for letter in nsew_letters: + remove_node(tree, mask, 'decal_alpha_' + letter) + + else: + + for i, ch in enumerate(layer.channels): + root_ch = yp.channels[i] + ch_enabled = get_channel_enabled(ch) + if ch_enabled: + decal_alpha = check_new_node(tree, ch, 'decal_alpha', 'ShaderNodeMath', 'Decal Alpha') + if decal_alpha.operation != 'MULTIPLY': + decal_alpha.operation = 'MULTIPLY' + else: + remove_node(tree, ch, 'decal_alpha') + + if root_ch.type == 'NORMAL': + if ch_enabled and root_ch.enable_smooth_bump: + for letter in nsew_letters: + decal_alpha = check_new_node(tree, ch, 'decal_alpha_' + letter, 'ShaderNodeMath', 'Decal Alpha ' + letter.upper()) + if decal_alpha.operation != 'MULTIPLY': + decal_alpha.operation = 'MULTIPLY' + else: + for letter in nsew_letters: + remove_node(tree, ch, 'decal_alpha_' + letter) + else: + + if not texcoord or not hasattr(texcoord, 'object') or not texcoord.object: + remove_node(tree, entity, 'texcoord') + remove_node(tree, entity, 'decal_process') + + if mask: + remove_node(tree, mask, 'decal_alpha') + + if height_ch: + for letter in nsew_letters: + remove_node(tree, mask, 'decal_alpha_' + letter) + else: + for i, ch in enumerate(layer.channels): + root_ch = yp.channels[i] + remove_node(tree, ch, 'decal_alpha') + + if root_ch.type == 'NORMAL': + for letter in nsew_letters: + remove_node(tree, ch, 'decal_alpha_' + letter) + + # Recover image extension type + if entity.type == 'IMAGE' and entity.original_texcoord == 'Decal' and entity.original_image_extension != '': + source = get_mask_source(mask) if mask else get_layer_source(layer) + if source: + source.extension = entity.original_image_extension + entity.original_image_extension = '' + + # Save original texcoord type + if entity.original_texcoord != entity.texcoord_type: + entity.original_texcoord = entity.texcoord_type + class YSelectDecalObject(bpy.types.Operator): bl_idname = "wm.y_select_decal_object" bl_label = "Select Decal Object" @@ -138,6 +265,17 @@ class BaseDecal(): min=0.0, max=100.0, default=0.5, precision=3 ) + original_texcoord : EnumProperty( + name = 'Original Texture Coordinate Type', + items = texcoord_type_items, + default = 'UV' + ) + + original_image_extension : StringProperty( + name = 'Original Image Extension Type', + default = '' + ) + def register(): bpy.utils.register_class(YSelectDecalObject) bpy.utils.register_class(YSetDecalObjectPositionToCursor) diff --git a/Layer.py b/Layer.py index 2abd3f37..96978728 100644 --- a/Layer.py +++ b/Layer.py @@ -6961,17 +6961,6 @@ class YLayer(bpy.types.PropertyGroup, Decal.BaseDecal): update = update_texcoord_type ) - original_texcoord : EnumProperty( - name = 'Original Layer Coordinate Type', - items = texcoord_type_items, - default = 'UV' - ) - - original_image_extension : StringProperty( - name = 'Original Image Extension Type', - default = '' - ) - projection_blend : FloatProperty( name = 'Box Projection Blend', description = 'Amount of blend to use between sides', diff --git a/Mask.py b/Mask.py index 8e37c6b0..aa60bbfe 100644 --- a/Mask.py +++ b/Mask.py @@ -2390,17 +2390,6 @@ class YLayerMask(bpy.types.PropertyGroup, Decal.BaseDecal): update_mask_texcoord_type(self, context) ) - original_texcoord : EnumProperty( - name = 'Original Layer Coordinate Type', - items = mask_texcoord_type_items, - default = 'UV' - ) - - original_image_extension : StringProperty( - name = 'Original Image Extension Type', - default = '' - ) - modifier_type : EnumProperty( name = 'Mask Modifier Type', items = MaskModifier.mask_modifier_type_items, diff --git a/__init__.py b/__init__.py index 1e81a644..497809fe 100644 --- a/__init__.py +++ b/__init__.py @@ -15,12 +15,12 @@ import imp imp.reload(Localization) imp.reload(BaseOperator) - imp.reload(Decal) imp.reload(image_ops) imp.reload(common) imp.reload(bake_common) imp.reload(modifier_common) imp.reload(lib) + imp.reload(Decal) imp.reload(ui) imp.reload(subtree) imp.reload(transition_common) @@ -50,7 +50,7 @@ imp.reload(Test) else: from . import Localization - from . import BaseOperator, Decal, image_ops, common, bake_common, modifier_common, lib, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences + from . import BaseOperator, image_ops, common, bake_common, modifier_common, lib, Decal, ui, subtree, transition_common, input_outputs, node_arrangements, node_connections, preferences from . import vector_displacement_lib, vector_displacement from . import vcol_editor, transition, BakeTarget, BakeInfo, UDIM, ImageAtlas, MaskModifier, Mask, Modifier, NormalMapModifier, Layer, ListItem, Bake, BakeToLayer, Root, versioning from . import addon_updater_ops @@ -61,10 +61,10 @@ def register(): Localization.register_module(ui) - Decal.register() image_ops.register() preferences.register() lib.register() + Decal.register() ui.register() vcol_editor.register() transition.register() @@ -91,10 +91,10 @@ def register(): def unregister(): Localization.unregister_module(ui) - Decal.unregister() image_ops.unregister() preferences.unregister() lib.unregister() + Decal.unregister() ui.unregister() vcol_editor.unregister() transition.unregister() diff --git a/input_outputs.py b/input_outputs.py index d1002de6..7a62ddc8 100644 --- a/input_outputs.py +++ b/input_outputs.py @@ -484,161 +484,6 @@ def check_all_channel_ios(yp, reconnect=True, specific_layer=None, remove_props= reconnect_yp_nodes(group_tree) rearrange_yp_nodes(group_tree) -def check_mask_texcoord_nodes(layer, mask, tree=None): - yp = layer.id_data.yp - if not tree: tree = get_tree(layer) - - height_root_ch = get_root_height_channel(yp) - height_ch = get_height_channel(layer) - height_ch_enabled = get_channel_enabled(height_ch) if height_ch else False - - # Create texcoord node if decal is used - texcoord = tree.nodes.get(mask.texcoord) - if get_mask_enabled(mask) and mask.texcoord_type == 'Decal' and is_mapping_possible(mask.type): - - # Set image extension type to clip - image = None - source = get_mask_source(mask) - if mask.type == 'IMAGE' and source: - image = source.image - - # Create new empty object if there's no texcoord yet - if not texcoord: - empty = Decal.create_decal_empty() - texcoord = new_node(tree, mask, 'texcoord', 'ShaderNodeTexCoord', 'TexCoord') - texcoord.object = empty - - decal_process = tree.nodes.get(mask.decal_process) - if not decal_process: - decal_process = new_node(tree, mask, 'decal_process', 'ShaderNodeGroup', 'Decal Process') - decal_process.node_tree = get_node_tree_lib(lib.DECAL_PROCESS) - - # Set image extension only after decal process node is initialized - if image and source: - mask.original_image_extension = source.extension - source.extension = 'CLIP' - - # Set decal aspect ratio - if image and image.size[0] > 0 and image.size[1] > 0: - if image.size[0] > image.size[1]: - decal_process.inputs['Scale'].default_value = (image.size[1] / image.size[0], 1.0, 1.0) - else: decal_process.inputs['Scale'].default_value = (1.0, image.size[0] / image.size[1], 1.0) - - decal_alpha = check_new_node(tree, mask, 'decal_alpha', 'ShaderNodeMath', 'Decal Alpha') - if decal_alpha.operation != 'MULTIPLY': - decal_alpha.operation = 'MULTIPLY' - - if height_ch and height_ch_enabled and height_root_ch.enable_smooth_bump: - for letter in nsew_letters: - decal_alpha = check_new_node(tree, mask, 'decal_alpha_' + letter, 'ShaderNodeMath', 'Decal Alpha ' + letter.upper()) - if decal_alpha.operation != 'MULTIPLY': - decal_alpha.operation = 'MULTIPLY' - else: - for letter in nsew_letters: - remove_node(tree, mask, 'decal_alpha_' + letter) - - else: - if not texcoord or not hasattr(texcoord, 'object') or not texcoord.object: - remove_node(tree, mask, 'texcoord') - remove_node(tree, mask, 'decal_process') - remove_node(tree, mask, 'decal_alpha') - - if height_ch: - for letter in nsew_letters: - remove_node(tree, mask, 'decal_alpha_' + letter) - - # Recover image extension type - if mask.type == 'IMAGE' and mask.original_texcoord == 'Decal' and mask.original_image_extension != '': - source = get_mask_source(mask) - if source: - source.extension = mask.original_image_extension - mask.original_image_extension = '' - - # Save original texcoord type - if mask.original_texcoord != mask.texcoord_type: - mask.original_texcoord = mask.texcoord_type - -def check_layer_texcoord_nodes(layer, tree=None): - yp = layer.id_data.yp - if not tree: tree = get_tree(layer) - - # Create texcoord node if decal is used - texcoord = tree.nodes.get(layer.texcoord) - if get_layer_enabled(layer) and layer.texcoord_type == 'Decal' and is_mapping_possible(layer.type): - - # Set image extension type to clip - image = None - source = get_layer_source(layer) - if layer.type == 'IMAGE' and source: - image = source.image - - # Create new empty object if there's no texcoord yet - if not texcoord: - empty = Decal.create_decal_empty() - texcoord = new_node(tree, layer, 'texcoord', 'ShaderNodeTexCoord', 'TexCoord') - texcoord.object = empty - - decal_process = tree.nodes.get(layer.decal_process) - if not decal_process: - decal_process = new_node(tree, layer, 'decal_process', 'ShaderNodeGroup', 'Decal Process') - decal_process.node_tree = get_node_tree_lib(lib.DECAL_PROCESS) - - # Set image extension only after decal process node is initialized - if image and source: - layer.original_image_extension = source.extension - source.extension = 'CLIP' - - # Set decal aspect ratio - if image and image.size[0] > 0 and image.size[1] > 0: - if image.size[0] > image.size[1]: - decal_process.inputs['Scale'].default_value = (image.size[1] / image.size[0], 1.0, 1.0) - else: decal_process.inputs['Scale'].default_value = (1.0, image.size[0] / image.size[1], 1.0) - - # Create decal alpha nodes - for i, ch in enumerate(layer.channels): - root_ch = yp.channels[i] - ch_enabled = get_channel_enabled(ch) - if ch_enabled: - decal_alpha = check_new_node(tree, ch, 'decal_alpha', 'ShaderNodeMath', 'Decal Alpha') - if decal_alpha.operation != 'MULTIPLY': - decal_alpha.operation = 'MULTIPLY' - else: - remove_node(tree, ch, 'decal_alpha') - - if root_ch.type == 'NORMAL': - if ch_enabled and root_ch.enable_smooth_bump: - for letter in nsew_letters: - decal_alpha = check_new_node(tree, ch, 'decal_alpha_' + letter, 'ShaderNodeMath', 'Decal Alpha ' + letter.upper()) - if decal_alpha.operation != 'MULTIPLY': - decal_alpha.operation = 'MULTIPLY' - else: - for letter in nsew_letters: - remove_node(tree, ch, 'decal_alpha_' + letter) - - else: - if not texcoord or not hasattr(texcoord, 'object') or not texcoord.object: - remove_node(tree, layer, 'texcoord') - remove_node(tree, layer, 'decal_process') - - for i, ch in enumerate(layer.channels): - root_ch = yp.channels[i] - remove_node(tree, ch, 'decal_alpha') - - if root_ch.type == 'NORMAL': - for letter in nsew_letters: - remove_node(tree, ch, 'decal_alpha_' + letter) - - # Recover image extension type - if layer.type == 'IMAGE' and layer.original_texcoord == 'Decal' and layer.original_image_extension != '': - source = get_layer_source(layer) - if source: - source.extension = layer.original_image_extension - layer.original_image_extension = '' - - # Save original texcoord type - if layer.original_texcoord != layer.texcoord_type: - layer.original_texcoord = layer.texcoord_type - def check_all_layer_channel_io_and_nodes(layer, tree=None, specific_ch=None, do_recursive=True, remove_props=False, hard_reset=False): #, check_uvs=False): #, has_parent=False): #print("Checking layer IO. Layer: " + layer.name + ' Specific Channel: ' + str(specific_ch)) @@ -654,7 +499,7 @@ def check_all_layer_channel_io_and_nodes(layer, tree=None, specific_ch=None, do_ check_layer_tree_ios(layer, tree, remove_props=remove_props, hard_reset=hard_reset) # Check texcoord nodes - check_layer_texcoord_nodes(layer, tree) + Decal.check_entity_decal_nodes(layer, tree) # Create mapping if necessary if is_layer_using_vector(layer): @@ -701,7 +546,7 @@ def check_all_layer_channel_io_and_nodes(layer, tree=None, specific_ch=None, do_ # Mask nodes for mask in layer.masks: - check_mask_texcoord_nodes(layer, mask, tree) + Decal.check_entity_decal_nodes(mask, tree) #check_mask_image_linear_node(mask) # Linear nodes From 8dc9076562332ee371640e7d5f93f7d5aa51b330 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 6 Sep 2025 14:42:08 +0700 Subject: [PATCH 280/283] Add contraint option to decal object, it will add shrinkwrap constraint and automatically apply the transformation after doing object tranformation. Closes #314 --- Decal.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ui.py | 35 ++++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/Decal.py b/Decal.py index 1ef40fad..5d605f28 100644 --- a/Decal.py +++ b/Decal.py @@ -44,6 +44,23 @@ def remove_decal_object(tree, entity): texcoord.object = None remove_datablock(bpy.data.objects, decal_obj) +def update_enable_decal_object_constraint(self, context): + obj = context.object + decal_obj = self.id_data + decal_const = get_decal_constraint(decal_obj) + + print(self.enable_constraint) + + if self.enable_constraint: + if not decal_const and obj: + c = decal_obj.constraints.new('SHRINKWRAP') + c.target = obj + c.use_track_normal = True + c.track_axis = 'TRACK_Z' + else: + if decal_const: + decal_obj.constraints.remove(decal_const) + def create_decal_empty(): obj = bpy.context.object scene = bpy.context.scene @@ -276,10 +293,61 @@ class BaseDecal(): default = '' ) +class YPaintDecalObjectProps(bpy.types.PropertyGroup): + enable_constraint : BoolProperty( + name = 'Enable Decal Constraint', + description = 'Enable decal constraint to always follow an object', + default = False, + update = update_enable_decal_object_constraint + ) + + last_operator : StringProperty(default='') + last_operator_pointer : StringProperty(default='') + +@persistent +def ypaint_decal_constraint_update(scene): + wm = bpy.context.window_manager + if len(wm.operators) == 0: return + op = wm.operators[-1] + if not op.bl_idname.startswith('TRANSFORM_OT_'): return + + for obj in bpy.context.selected_objects: + if not obj.yp_decal.enable_constraint: continue + + # Get constraint + c = get_decal_constraint(obj) + if not c or c.mute: continue + + if obj.yp_decal.last_operator != op.bl_idname or obj.yp_decal.last_operator_pointer != str(op.as_pointer()): + obj.yp_decal.last_operator = op.bl_idname + obj.yp_decal.last_operator_pointer = str(op.as_pointer()) + + # Apply the constraint after transforming + mat = obj.matrix_world.copy() + c.mute = True + try: obj.matrix_world = mat + except Exception as e: print('EXCEPTIION:', e) + c.mute = False + def register(): bpy.utils.register_class(YSelectDecalObject) bpy.utils.register_class(YSetDecalObjectPositionToCursor) + bpy.utils.register_class(YPaintDecalObjectProps) + + # YPaint Props + bpy.types.Object.yp_decal = PointerProperty(type=YPaintDecalObjectProps) + + # Handlers + if is_bl_newer_than(2, 80): + bpy.app.handlers.depsgraph_update_post.append(ypaint_decal_constraint_update) + else: bpy.app.handlers.scene_update_pre.append(ypaint_decal_constraint_update) def unregister(): bpy.utils.unregister_class(YSelectDecalObject) bpy.utils.unregister_class(YSetDecalObjectPositionToCursor) + bpy.utils.unregister_class(YPaintDecalObjectProps) + + # Handlers + if is_bl_newer_than(2, 80): + bpy.app.handlers.depsgraph_update_post.remove(ypaint_decal_constraint_update) + else: bpy.app.handlers.scene_update_pre.remove(ypaint_decal_constraint_update) diff --git a/ui.py b/ui.py index 7067fa6f..b02a5fde 100644 --- a/ui.py +++ b/ui.py @@ -2,7 +2,7 @@ from bpy.props import * from bpy.app.handlers import persistent from bpy.app.translations import pgettext_iface -from . import lib, Modifier, MaskModifier, UDIM, ListItem +from . import lib, Modifier, MaskModifier, UDIM, ListItem, Decal from .common import * @@ -1764,6 +1764,25 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i splits.label(text='Decal Distance:') draw_input_prop(splits, layer, 'decal_distance_value') + if texcoord and texcoord.object: + + rrow = boxcol.row(align=True) + rrow.label(text='', icon='BLANK1') + rrrow = rrow.row() + rrrow.label(text='Decal Constraint:') + draw_input_prop(rrrow, texcoord.object.yp_decal, 'enable_constraint') + + # NOTE: Show constraint target when there's more than one material users + decal_const = Decal.get_decal_constraint(texcoord.object) + if decal_const: + mat = get_active_material() + if mat.users > 1 or decal_const.target == None: + rrow = boxcol.row(align=True) + rrow.label(text='', icon='BLANK1') + rrrow = rrow.row() + rrrow.label(text='Constraint Target:') + draw_input_prop(rrrow, decal_const, 'target') + boxcol.context_pointer_set('entity', layer) rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') @@ -3067,6 +3086,20 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): splits.label(text='Decal Distance:') draw_input_prop(splits, mask, 'decal_distance_value') + if texcoord and texcoord.object: + rrow = boxcol.row(align=True) + rrow.label(text='Decal Constraint:') + draw_input_prop(rrow, texcoord.object.yp_decal, 'enable_constraint') + + # NOTE: Show constraint target when there's more than one material users + decal_const = Decal.get_decal_constraint(texcoord.object) + if decal_const: + mat = get_active_material() + if mat.users > 1 or decal_const.target == None: + rrow = boxcol.row(align=True) + rrow.label(text='Constraint Target:') + draw_input_prop(rrow, decal_const, 'target') + boxcol.context_pointer_set('entity', mask) if is_bl_newer_than(2, 80): boxcol.operator('wm.y_select_decal_object', icon='EMPTY_SINGLE_ARROW') From b8f92d82d44b3b53c0f50b93588d6e0313fe3108 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 6 Sep 2025 14:53:57 +0700 Subject: [PATCH 281/283] Blender 2.7x has no shrinkwrap track axis --- Decal.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Decal.py b/Decal.py index 5d605f28..d5cbbabb 100644 --- a/Decal.py +++ b/Decal.py @@ -49,14 +49,13 @@ def update_enable_decal_object_constraint(self, context): decal_obj = self.id_data decal_const = get_decal_constraint(decal_obj) - print(self.enable_constraint) - if self.enable_constraint: if not decal_const and obj: c = decal_obj.constraints.new('SHRINKWRAP') c.target = obj - c.use_track_normal = True - c.track_axis = 'TRACK_Z' + if is_bl_newer_than(2, 80): + c.use_track_normal = True + c.track_axis = 'TRACK_Z' else: if decal_const: decal_obj.constraints.remove(decal_const) From 174a663cbecc3ce2f12a92b8a31cd2280cea29c4 Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 6 Sep 2025 15:22:13 +0700 Subject: [PATCH 282/283] Rename decal constraint to decal shrinkwrap since "constraint" is a broader term --- Decal.py | 16 ++++++++-------- ui.py | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Decal.py b/Decal.py index d5cbbabb..8df3a898 100644 --- a/Decal.py +++ b/Decal.py @@ -18,7 +18,7 @@ def get_decal_object(entity): return decal_obj -def get_decal_constraint(decal_obj): +def get_decal_shrinkwrap_constraint(decal_obj): cs = [c for c in decal_obj.constraints if c.type == 'SHRINKWRAP'] if len(cs) > 0: return cs[0] return None @@ -47,9 +47,9 @@ def remove_decal_object(tree, entity): def update_enable_decal_object_constraint(self, context): obj = context.object decal_obj = self.id_data - decal_const = get_decal_constraint(decal_obj) + decal_const = get_decal_shrinkwrap_constraint(decal_obj) - if self.enable_constraint: + if self.enable_shrinkwrap: if not decal_const and obj: c = decal_obj.constraints.new('SHRINKWRAP') c.target = obj @@ -293,9 +293,9 @@ class BaseDecal(): ) class YPaintDecalObjectProps(bpy.types.PropertyGroup): - enable_constraint : BoolProperty( - name = 'Enable Decal Constraint', - description = 'Enable decal constraint to always follow an object', + enable_shrinkwrap : BoolProperty( + name = 'Enable Decal Shrinkwrap', + description = 'Enable shrinkwrap constraint, so decal object always follow the target object', default = False, update = update_enable_decal_object_constraint ) @@ -311,10 +311,10 @@ def ypaint_decal_constraint_update(scene): if not op.bl_idname.startswith('TRANSFORM_OT_'): return for obj in bpy.context.selected_objects: - if not obj.yp_decal.enable_constraint: continue + if not obj.yp_decal.enable_shrinkwrap: continue # Get constraint - c = get_decal_constraint(obj) + c = get_decal_shrinkwrap_constraint(obj) if not c or c.mute: continue if obj.yp_decal.last_operator != op.bl_idname or obj.yp_decal.last_operator_pointer != str(op.as_pointer()): diff --git a/ui.py b/ui.py index b02a5fde..10c8ef32 100644 --- a/ui.py +++ b/ui.py @@ -1769,18 +1769,18 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') rrrow = rrow.row() - rrrow.label(text='Decal Constraint:') - draw_input_prop(rrrow, texcoord.object.yp_decal, 'enable_constraint') + rrrow.label(text='Decal Shrinkwrap:') + draw_input_prop(rrrow, texcoord.object.yp_decal, 'enable_shrinkwrap') # NOTE: Show constraint target when there's more than one material users - decal_const = Decal.get_decal_constraint(texcoord.object) + decal_const = Decal.get_decal_shrinkwrap_constraint(texcoord.object) if decal_const: mat = get_active_material() if mat.users > 1 or decal_const.target == None: rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') rrrow = rrow.row() - rrrow.label(text='Constraint Target:') + rrrow.label(text='Shrinkwrap Target:') draw_input_prop(rrrow, decal_const, 'target') boxcol.context_pointer_set('entity', layer) @@ -3088,16 +3088,16 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): if texcoord and texcoord.object: rrow = boxcol.row(align=True) - rrow.label(text='Decal Constraint:') - draw_input_prop(rrow, texcoord.object.yp_decal, 'enable_constraint') + rrow.label(text='Decal Shrinkwrap:') + draw_input_prop(rrow, texcoord.object.yp_decal, 'enable_shrinkwrap') # NOTE: Show constraint target when there's more than one material users - decal_const = Decal.get_decal_constraint(texcoord.object) + decal_const = Decal.get_decal_shrinkwrap_constraint(texcoord.object) if decal_const: mat = get_active_material() if mat.users > 1 or decal_const.target == None: rrow = boxcol.row(align=True) - rrow.label(text='Constraint Target:') + rrow.label(text='Shrinkwrap Target:') draw_input_prop(rrow, decal_const, 'target') boxcol.context_pointer_set('entity', mask) From 87e4c3aae9617681ce2c32d2c7c0a03e6d00725d Mon Sep 17 00:00:00 2001 From: Yusuf Umar Date: Sat, 6 Sep 2025 19:25:43 +0700 Subject: [PATCH 283/283] Back to use "Constraint" only for the UI label since since shrinkwrap doesn't make any sense for a decal --- Decal.py | 9 +++++---- ui.py | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Decal.py b/Decal.py index 8df3a898..ac9cc550 100644 --- a/Decal.py +++ b/Decal.py @@ -294,7 +294,7 @@ class BaseDecal(): class YPaintDecalObjectProps(bpy.types.PropertyGroup): enable_shrinkwrap : BoolProperty( - name = 'Enable Decal Shrinkwrap', + name = 'Enable Decal Shrinkwrap Constraint', description = 'Enable shrinkwrap constraint, so decal object always follow the target object', default = False, update = update_enable_decal_object_constraint @@ -323,10 +323,11 @@ def ypaint_decal_constraint_update(scene): # Apply the constraint after transforming mat = obj.matrix_world.copy() - c.mute = True - try: obj.matrix_world = mat + try: + c.mute = True + obj.matrix_world = mat + c.mute = False except Exception as e: print('EXCEPTIION:', e) - c.mute = False def register(): bpy.utils.register_class(YSelectDecalObject) diff --git a/ui.py b/ui.py index 10c8ef32..a58936e4 100644 --- a/ui.py +++ b/ui.py @@ -1769,7 +1769,7 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') rrrow = rrow.row() - rrrow.label(text='Decal Shrinkwrap:') + rrrow.label(text='Decal Constraint:') draw_input_prop(rrrow, texcoord.object.yp_decal, 'enable_shrinkwrap') # NOTE: Show constraint target when there's more than one material users @@ -1780,7 +1780,7 @@ def draw_layer_vector(context, layout, layer, layer_tree, source, image, vcol, i rrow = boxcol.row(align=True) rrow.label(text='', icon='BLANK1') rrrow = rrow.row() - rrrow.label(text='Shrinkwrap Target:') + rrrow.label(text='Constraint Target:') draw_input_prop(rrrow, decal_const, 'target') boxcol.context_pointer_set('entity', layer) @@ -3088,7 +3088,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): if texcoord and texcoord.object: rrow = boxcol.row(align=True) - rrow.label(text='Decal Shrinkwrap:') + rrow.label(text='Decal Constraint:') draw_input_prop(rrow, texcoord.object.yp_decal, 'enable_shrinkwrap') # NOTE: Show constraint target when there's more than one material users @@ -3097,7 +3097,7 @@ def draw_layer_masks(context, layout, layer, specific_mask=None): mat = get_active_material() if mat.users > 1 or decal_const.target == None: rrow = boxcol.row(align=True) - rrow.label(text='Shrinkwrap Target:') + rrow.label(text='Constraint Target:') draw_input_prop(rrow, decal_const, 'target') boxcol.context_pointer_set('entity', mask)

        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 z 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

      i^YNk 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

      E^Q~ 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 pRHPc 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 z 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⁢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

    ^C_no-wMi;JT2C||c)%zBTFD1){ig@= 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ýZww$6NdigpY#zt9*$i?4_9OHN|3>|qx=$zY z06q{8-0&N;rG*^W)7Ck!r3HW4HuQ@xcz&>cz1~V5oHeLcaRaz&2%DRM2s#e&L|z=$y^fT|A;RBe z{ueZNGS6quVHD@HixSD-qWoOqx~JLr-|X(?#xpM*H0Zhz^ZfEyDQ~gMx~+aKedlpw zY5R|f{>SyJy000qzIEw}$Bd;be&To>0`;QW8+6y5A^StG>+HPpqg;Nkd!_ZN_5DJR zI$Tc~@^GFXT~8_W6#7Fv9idA97VQ=|MNehz7aYN}WSkjR_+;=Z-GB|lALdi z`%uld8oL(EAunu}mTr-CWqB^1Zk0YUOY^NK^AC^x$@h`+tbAnZv7p`yY)9Z&bLrM@I!$X zIgSUuFZ&^{ao8)rcv`l8#jkTbXuWEEcj{q>aU#Cj+x)xGqxc~u&jKF62kjWRg>IMe z@fwG{@|P2z_Ax8;fa$-9(<<@_DE_+0tM%$^c3QQrxTRoN%JGbS2dr(oybo>;s1cIn$IAAK|YiHEz4)XADblSGyc9;fEo%V%QzTr$w!C&n6w??2io_xY+j0!W2EnY`SH zd~puRSDw{7hxg|5nZol`pA21QM6Nv7aXy3kfxRbgl=GSR*|NQRT~F(kUsOjuLEgXf zRcXCyeLvNs6&g<$dYHZ2%|`(b;DdGy+yXOXe7vrw^~w)?{9f-#@o69Pn4WbwZWLJW zE#DM+On)rat`xji1U!Hbo*%fS&$qy*^llr(R_%L5d3;tFdca|SAm(vByU`WQVV==(FLv6^|&-nc?|LrP}mi4Rr46+EoL6` z9?N6EpKdK@9&^0(jHUb#c?`~pA0_88FSEFuyPeVaPh~n-9uw#1#(_R}>#_R%D-Rwt zkD1ptzqhqz(PGW#bK*ZcB&Q$!JUs{g6@9|EYX{^ppB?fsxqjDx@fx*GX*-%ty0#Hs zKd|%gvvMAj`;KhqUh@#I{Ng$4ea&NNy=r|VPTo+V@nKUBvva#V26zA;v}53w`ksuB z*F3~4Kk)H8kD>Uqk6EK99s1$8*M0s?J*FSF%wvED@WJx~x4N%e;Ikd(F?oDeJguGp$MC!bc}(n1mdAiU-cimx#{GIzk;mX%zx|{^$~uIgbg(WIOkohj`@|^-=F@9z*L@>szUZ9QG$gIZFFR?U(vtp@-SIT^<8G zfDhU+aEo=x_;}4jyz-+q{LW)2KJ8;3*Ru}&aMEL(6nacQY?;RZ58#962X2Y^7Wiz3 zc}yOk6>IdUL;DH;&f9pI&{G^A_5q6G!}-J0k`8S=V zvO4+Uj!Q@$8W=+6mgooj)di(ICh{Gg$NY}b)LNOQpJ&e*Sa<|KFHFd$-!gnW2K0>| zCynbaJ;=Cs>!L@857q1mgFfn>2J>5EuY8SyS0^+g?)CP_Ge?l z-fJD_F{mHddFXjLkBLr}?VP_K4Rs|`Kj)GC+>e*mtERQ;byryL^NQYO>>KAjdK77J z;Z^SaaFEoR&?DKoh?UBE8Q=n(vb;S5zr-C@IJuv%_3!;?fA>wMIIW$uSdU*~jT74| zLDRCAGn`^Cdc#TRafTCc0ZuRw;FrF^3a4XSzu4*D`_ca6)V|_cJ$$J(PP_Ap$=t_q zih4Ltn%a}l;|wRn0Tn0U6^_a{OO$zP5-T2I>Gv@?Iu z$dwGIQlA_5(>#OXB=kr);Wm>Z&q3U^%X5&ofWjXFUzQuN^Qvi{gS-ZLPV_Do|G{5( zo}A~b8mFF{$&fs+r?qoodsoi_v&6-}Fs>Stt<-n0=y=T|c@>|tF0VFP%5&lg7Pmp8 zce3B0$a7H2w3*MczeIIDUc>2w-|jblIkbhu#PaTEhw`ZOqZ5a&+3?9A*!v277pP8!+&Q!VE!9=0<&cQeanMtKedsZW7pH#)Y{u>K9qwmjH{+p zHd8Y7-#z(XTe<(de4d%b=`WaRIw|c+&`^2#s;~%$mZ!`b>@GiTrdHAdy z)@ZACHC}J~fctMz%7-u7ZOy~)k?VteDDJaKgFt=2FJy0K^#bL-jw58vPHJb?RB3@TBkFnPtZeG zS0=s*J=S)q?o$a|fK&Kxh7<4$oo9)Y>wWe79EbI@e?oCuJ87~WsSr*=kA#zLKN7eA zr@&1NC*YTwW{Fejj*kZkKgVJH$7!w}uMkc`k29Qr3vf!jz;FV7iLYAWwEgW<$?Pen zN6kF0y!nXGBjLnbv)HE+cmSWkI))E$i$$#PacxFE?o;V+zDV(DUvZrtu28-x^ay;c z_NfFOz$g4ih7WKHwp!uie%+vd`&2S~{Mx57kIxwL9=W?(-I%o^ML;CQ&|T8 zM)skISIEB!J;J|P?NbRnfDhUQaKmrVfA3R?ns7&{f1~3N7on;}GoZg}?G~_5-DHh}e4Of9sYrn)@}Qse8CzetC z!T2ER2lj?~0(bNqvOn}N#GV)Fl^^Bud!CfmtERospKv(No_^iiJgLxA=nw7BX9q68 z3H1Q{a&xV4+WyXGr#Rhl`5B(y5>Jh1vt|K_7 z)y<40j%o&`R*=z{u*kDu!Ys88Cb z^SJ(Gh0c`{dL(?z8bzFh-?odBhEW{?bNh?ab5!1*w3b6sel^{Q#V>v=kKtcIVRyh4t_S@V_+R+ry0@4=27m5$ z*&qA6|7+>vv8ZR-Z(;kte#rgtmn46j{4Vpq;fJ{&UL#Y;v7<@uk3pC1^hwjxKmKLI zs;44F{qcg1SZMB|9x^n0R1F`aJ*s9&TgQdb-XrXEIr)2D|DJ)y@kq zU!8WCcSStzmoD@$JLip;kFyIu3_O4j+A(m;E|l@{x?hM_e&FNxej^m0+S<|mS#y3I z5fU0@n(+`XsUH@4Og}8vgca=n3Os-hN&(yw*ID4R9qu>6@LABGb~q28@wl&@&{G_r zAouqwKENq7!vY^%bU~|izmca&%y|08=Qji#+K-Dz&$A$p5qeB~B$4z!n#Uln+T}6G zOF&^)z*Ws-khdU@$v(*P81RRd%Xv)j)wd3y{jkYh^V;%zhOk6dDyx$pdEOeA%tS#0 ziDrSkq7Qf|sFCuR=rb%XCm)pKvy-w}-Lti4_tRh4Wgf{Niq9`w@%r&Ms(%b4cL91!q4ekF2{z=b=g&%}pOf6%65&kl9zw8%%o|kgH za97MrVcpFkl3xtn$NXV>6{D%ROflYu_N3AT-){$WpE(Dfe$pjx>Vx@3+P9nEdP!SP zOMc|y$b#>xijsamI_`$1M_1lS`XUGDtBxDBnlX!csYknSYIsF) zO_BYg*Ku*L{3sXtcYd8$M(b76KI#wKjN=Hs>|5Mp|3T=H{NjLlDc}KoP!8ahJ>LSK z?QmX-;E~uaO}6ljCF=-jgM>Q>70O46VU? zvS0B2!=X}~G%JpO34V{o$?OV7)$4=(uD|j);|IrFeA-}faxgh=uT%Z?SJHizC+e&m zvZVSi#vAot>_e^>{~#|#eZbDs56JbBTQ1vq^}Hv`<~#iAKhQc&)ZVu`;qV;w;q36YMJXH7lH|;XPS@=Xt5$yW{p1{UL|v%Q;6zzLVmVpXW98NI3DE#rzNO06ww% z89u-*cD)rouFa@w-;-tdywIO?*gueK-T5!zBlHM-tlpCa9>6D*V)y{J$RaCzw!ime z89rP3qZNA3Pv~Lzu%wrqXPo~C`vD%nC-wxx2e`$*VTI53_ns`pXYHiD^>l^oN9ZYz z5AXm!=#K!mPtM_Dq2k?O>1#b8aT215i`SFi` z((!tXJ763l`CT>+f$@pR|H$JIeyxvX!`UqhyB77h+LukNkKN42Ar6zqAtFiUe?jYh z!hVCI9oemq%|61${XoCJ;FbFOAOBJRsNF6rx*kh@E>8;#QN%o@`d9z4kLW%@r{$o3 z9JSkp=6b9PU%&RWtAD-3{4FsT{GfTqY_g;U^`hDvZcQ(?^oO`yGWBmB)8F;6v|h<- zNImRueQe0%Jf_f7=nvKE6nO>Os~t|c%VnIl*Y&Zq?XP>|gZ_}sx;fw1$C`SqaANq- zbtUi*cH_eEub{9y;Hr)b!~en`*Yz`h4E{i(O#ZmLwWoFd{MJ~@{I0HUwLK30`%v>7 zn~%9aK3ww0nO`vfn|zJY%y0PbFYPLwTN66O=6waeZ$T`@{POocNi_DpHLYRX-E)ik zV~@{e_vBQ6WX_IcuJ34_mV@3m?(Qk3|NY)4cQr=-FqB*`{((P6{lLyskFfdyccxFa zb2cvQetd+j8HRNC)bD)@XuXor+Wxf7xbVKbsL4-zAIqO(^Q!y#IXW&Z^hkDYJKhLf zfK%Xc-ky2;4%}mf(=o0);>!HLd!V#>vZ{ovD|t(OuVmu{aEsk*iI3}ko}cfN_>a#A{Ye{q zM)FF|>I|R2bMEbkjx!29h4_&DKNNg`2k=2W0B+%{t?(J|+J4M)V-EdmYCSTZ(J(;c_pzAF1&YdbQ}>H63^PSlQs9&4O{5AXm!KoGcvS6brZdf?vAe8JCkR}`Q2 z_I0bHHhyj|UNONDEFPhrN~Or>gdQt=ME^R%`+ewNC;4yaMSmF-c?9q)>|fLVI`|bw5t!TxQvE{y6A z)-56W=kapTl8g1z!=F1<-|hQ1lk3Gl@I$B{_#xC2xFe6re#q-SX0^^ilHQtQ0+UxXfq zIC1|1oK!y(c*F`PpjkTg6DL3OW9p-ZxBa!hu0reggdPc}0Tl|r2V8&?Zp?E0az9aU z+D`W^q&Tgew1=L&%{o6uy?CX_zl0uZoalWtUqZZ9^Ba@{`3flfAn;T38{{*{Z&W$> z4H|qwyf-_sha7!~3nfyreR0Raj;_uU+05IA?KMPWeSNHZ*QET$ywTy8u-Ol?W|(@# zCB|c?K2KudC^8;i(?I4Z$-jXg*9(pZiYm)rXgk`0NXGLnA~`PkkNn#weqJ~ zZA?9z9%qN)j7;+^K7MBKa9(n>S@1(%obL$js z=nmB|UTSjz)HkoP|H}mJbk@romU~=lFSjz)HwOY-tTkJ*l&;pJ>)auPRM%L6~; z#a`ym%gdRA9R9q)hnSq$x2@%YAM$d1ZUTDHjv+UF4wI94i%}I1@Izjh?*$4yiSM!J zOvHHooyX*)8m;AlAM%nJ_Po#oJWP2Uk6?$jJn%yv)|fyK+6&5=ypYLBPOz2-e#lGk z=Y<}`YOE=mc!v&qJ*xH# ze#pZfcF+U6z~0F5pR#gc4|?@^!4G-ZLk4;v$K11wpTU5=&(!jPAM&!?zd#S&5#W3A-VQvz7;9npY z{sm*7syy&RUW||FKo9H}@?gK1i&W)-AM&DnZ(-=c88FC;aHeADdDfm)`vpJbVay47 zRCzf2FZ(-d`v5=WMR@#$9<04ZJ>s21^sUtLfgkdM8(2Jop7<*)uGRgJ(cm;zuE1jJ z=LJ9HC3t&*9^}u7N0>b1&xwiF&kKIY%W;1NJ&Bi?9LS3|GdZy(*5v~~w%l?MPb6!r!$vni$85_^!q~}@713%=Yc>9AM$O+uQ2k}l`_*o`Ttv~QX9`>++9>{|~g*>eJ zQ00Li@_2V!gC593Jcm5&IZ`NZHtGDw4`p*c81qXXSbPqsdftJrC*v0W?ahpOOxcW~ zV+|edb4%&CNRTiKJ=SA>1Kxq>xB#bM9m5Iuspa7~xgL`8^Bwqd;1slZw|ZB#B3%9k zPC}1_lkJ=oZ~;!)_nBX?vn!61+oeF7pYOnz1E;Lbn!4Rx;-azvC!xm~PQV2?~HeFHv1kHE+39eCgYeB!$@ ze1Mx;7>1AgHL3oc6@6MhZ}4jmaXe?poI{fF!J1Uu=avE=p@-qa^O6DYzylB9lRARo z1KiYd@Hpi9EC;+}t;#L^H}h|P;}c$P?ccDLuJm%s9Kc8Dk?`R+3;zZ@fDfbrH~a?W z__$t+3Vdq9tv%Hke*!lCZ6qqdBLzM}kMM6+@4!bsWch%Kk6kgUXK!JD_cFrsrft@& zV68Cjb4w{cv|l9j6yh^b>g4mtiMqtqMh{}|D0Y(X)bpmB*zfdy*6%J(KJSW4&Ye_q zE`P(aX3E^T^B2*@2sP)lc6WDlURZN(PaAztv6n7TXqhs}=B+{5%ac8oCvN?U)!9yg zKb?J8;olSQ-JIWhygAxBudRpfKz?3No7;sH1=W)J)m{2a|2fo%eS?h?1)7+@i}JNz zi8t9e6=k7i-@ky@$=A%qJiZ%@)_urnl2Ioz+}uOkMIT{A{nGxOTK7~g#x>}7KR&St z!xI!Tq1!AMzpq%iF6johcN&<<$`$^a+};Yu#rlXE+=p_h_tTOrZtL-~42O!)qGnvp z{~Yi?iVOWm>x=GnUwA*Q%kg8!jUC6Y_YsP6qTJ+9`466l@^mb0S=70(w{^~Z9}I`f z2LZnLP0PKJ{1JAAwNj}~%+7FMsDD#e;aQS?t(Ee!&We_8=m>w;N~O&;ad>i>&VFu~ zaZq}5gF$tFD!zZ31loZ6dvrwF$J9z|&=H6RviQ zWi>EzK${riY5iPw8FFju8oo7im%i6Asm4dg-_>->XN&S}V)nR%arhm3No~S>KQwkp z&6jKPZ|Bq;U4xb~_EJsDHyQGUwjBD~*=OmBr;MYYzh2k0cl6HT(+PF=L7TwyTD1wZ z0knzK&sm#5TZz6Zw+VmGRHG}}+()wo{)KF|T&GNUZ;DSgXy zh}H7=c;JVivfwlFOGehrv($_fni-9};SC?5r#L?F^C~_lP4HRSzj-|q%_~33Me(8U z@WkI%_gZnMfyRsjt{rN`Z$-{i93PaUR0{hMdQ5yIQS?3<^$}Oqbpf~;c?l@&3b-Op zQh6I`Zp-r)ec90z zU(W@4QTIv4Nh4_fP~J1u>{=Pse^K{nl1CrR%Rx&n-hI7j(*)z9O$SJMw$-yy+-V+z z`hlIJp1>0h%6{1E*(F~2Q7+^$e$9*0deyXjjeyy=u|q(Vz|A+(~7&ubO}Ouru%c#HY4-e!#Yv$@!sjV%jgzkD14W$tjK|3xq&Qi(6N`(H@r)+6vVK3Ps9Ec83I1LM=+~$B=|}zWDB@Gg z8z*-meOapy)gPPr=YCC_YOr$9yF{FP;=#q_`sd_&@ekr8>IZg?dIERkjq0^?Ki8+w zdL^UwM%%dnS{s~Hm-C)r*~f9G*>M=4GQKW1?;^>;=?pEDXg ziN#G(v)13z{Cx`0(d&Xn%R@(&Jx&g@E{;a^kN@xYiBF%x%Rz4xadPyuQRMn2a=rKm zaT4_dJ4Zc%JHA%2^R~IYT|Ky3I`wn!7aAx1I=hY5D>=8&2-&QMR-ZKKVO)={qY-)} zI~QZG${v=$1vsHRz%Tcl6;AF0W;Nqf+kCbWafnmSBThn(Go0XGfRpNH0g+gM0@0P2?Vy-+({0QqFJuo%eS?kwxFZ?@#Mh zt6yM*9nM>da+LOs);pc|7kZeTv&K7c-XC}XAGBk$UH?hOCqFCb`mITg%`1E0M{W2$ zuT1f&UDjhn9nNRO-}X2TVCpgbu*f|N=KX;O@WJx~x77O<__%j>RXgvW$7lT#BW~7P z@o|8RM|^~y;`qSNtM~w?P|I1Q>^AME$Eb)Ck2!1z>(;xr5{PT=<(V6PMf6H=RtDkDHa?o-MyS#tPOXT|Pj>k_?Kd?*G6KW%Q za<$rJJ@Lr?opDC%RjViSj1}r%2tATr4md*#cmN;Z0^GvA7WlXyHm%zAI251SW#<@i zhxt*!>pZZjN5W^odK~x@6(8Ufn`eO!F1n!A8rP^#dh_n%jJU(~QZ61n&w~6_=qbcU zNJah%zipSlBJP30-hiu`zalOoPDb8faT5I5XUZ8TkD;$Jy84JXnd5PCXDLo5_T}Sn zyD=L5l*LKV!IVb%x>eBj89(YjWZu}a=dX5glIlNpYHNeGYMQ~yL7zax$@Uq`$n^;g zgFP2*N3)3%)DP@D$Lk6F!3EW7=l;e?TCduwGmUhG>|E$6wDW=MaexQ#0WQET_9Y8^ zw!=6{@u?j-#mG8b?~(qKw{bY3N5W@7oP-}y@c~Y$uUp`Qi!Nxj#!2dvM(llp5vow0 zDfATLBPtYe5`Nn*P9pAs!rp+Z8YdAK5hr7hu{a6-I)p@_3mJrm~Lj=L)(i^Gd_7?|GT@*UGzY75J#-qxxrmu%uC|-^XC( zpm&HkxhnHMxxS!LduH{J!}&y%qf`p}5qeB~BvJG}I*5$8YL~|#F9C&J z0awIHDsLlk3CLTJ#{{3|GtAED=~~pC-&jv7s-quy-kLl!Syx>8 zgg?z=cFJqQeATW}9-|f_^bQ{v*W`Gu-e>olonc1yW+-zWQ%wKVE2fh*B4f!}YP1~k zXX@6)#?-A5$MaRF57>F)T~wcyZFIvt|?qmcjgp<%C;UsbzW&JmB0Zx$v7*4RO@CBAQx!!Qu&wa~%$EkTY zBU~YzgdS%&0T^7gcBFC*mey+bd4FTc-_sYk+z zixvC&0uSI*w~65c+yZm0@No@~kNcMUyN)7{&-zhDvO?p~LXW`5YTt6;0eq7G$M6Ae zp(R%MxK0~1|Mo3s`1m#c!Q#<@Mz%uu2t5oRyYUa;0es?{89u-*bfy(P$GF}v2K!>W z^$&uN<#oQ|(|m{#a5z3C%2C=k^xuS@;`jg$;1l5e5#Sb_Zi$cUeF}h&_kGLD;NO;w zF_IPPUkg3Lzgg{D4m^MlS_5#yZ_t*Owpedl=e(8{{AJtFFTP;*6IieA(>1-Lr*~27 z{B2XLLA7EW0^<%ChX~!z#vw315qqT);}E3}G!7hx*sbU|M0hXOFNg)*jYAxM%Q41_ zQ;$4tTa80d{fFPO2N`ELOK0VfAwGP>(Z=B;IZJMG`1K45R*kX$c;gDw4` z>x80O$02B)e(T89tCJP#Hwit3{!k#Ljza(!;FR8x;RO7Gr&{8)-Hk&~oN8;2>knK} zneif_N5aW=90Irir{FFeCvI1Xm?ciGJ5bd+4nc9c8yW7>58Jz$ddO!w0y<>#gu{ZALzh zL-0KCEj16EIKQj4^wD>QPo_Uq z1Nfjn0^D*DOMI$e9KwJ9wsz8ydb&d65JHdeZ&u?FzytUo`T;lm2L1Oq1Zu(^#W)1U z9WV|N{yiIq!1zSu33(i1$CUm32fLzB{bz0dD$(D{%OT%+R_|ittlkpVL-6{5 zy#@A@>m~D_vOhexYhg$Jh&x%W<6mC+p~&y`5VTIOcw>T*u28>8=qdDvcsfv#mjf5z zl&WVqp*=?%Wt=8=^(^o*`014&PcVd^qu|$mcoe7Fk*6BD3gIO5IKv6Jm^jT~I03(G zjf|7mbthi=1x_r#@D-=#CL?rZWyXty9)~z_T!2%kf#C%FQfDYQ^(<j$dfDjMJH&bGsIh<5*E&rBbi_&{vN5RJ(q%kyu(8 zoP-`{H~|;nl)RP4CvI2KSu#%aAYGa(cFaYMl}5etLt9yJ8hM_PyuLCx2|dnm0xrM_ zc`)#+yGX{Vp>^)X?X7cNTa;IR;6%@9@pBzmK96XgX~Ziu{wnlX;Uw}r-~oK_{J<@I zw2aTWT^*gh9i43p7vj#+s8@cWtqk}q`??XW(D;$iV~@{9I&aJS#pov||H}Hw=s$;l zCHIr>eL&skD*pz6s5Xb++;IuvLjyxJ_6`L0>)b=?C)Z74{yNdfX#7H%nrG84JmRFn zbIGA0`5b%S81#)FCynbaJ;=CsD?PWh$T^)5;4|I**7uAF>wZi6$v5e5&fG2k-oU+E zTS-~iXZLA;HYV)7mRv9X!F)aH2X+}aoz)MxQ{!a2>-c{gc`GNq*(^v|h>B zgC4ojI=*3+B=(K-9zBXQxX60<@1fK82815TE^X(5feUa#dj@`?@m4swUIwW7*Z=Y# zr?rz7>*4FHaboWfXg`_C+v0k@#81EH=ldNrmi*ygiwEB%B6_qxaX5zasA1y&s9Z1r+`e__Ex9ye&`U z(L4uv4f34m6D-dGf8_5UbQPXUy=t5~AHa}2ucx(hVLKU&98hxWKQOKuldaU3B zBYDxE^L-xnl=7VL0v5MHV-wkLlYWCeCrTGE-&1CP3Gj0pKp*^ezwyhVEhHwEcb^B8 zN2MQ~ICRa1PyR~u?_!*N@-z87r*NN#kM0<&DCMm0?Yd^xemkrYf3f~Xai2}&Hm?u(g>;P73%GJ! zvR~L<-*2aNI%E0-z3!XN{5R^SR7&fe=4(Qau**VO>bi2^0-WOCWjF!9=zm$_R0ZqG z**aLi#uF$`YbQ~rVJ8%+uB%EyHEN}r%*{?I4fM0l`B~GO~KK^ii_EY_g zvka%XdbC3JB=k7L3AmUzEn+wUzvLJzoT_16xxeG)45yeLHv28e61-T?KwfH3G#?Rq zB%C;dnAga1Jb+KMnc)N6GCfxKxHhAzT~|)=X;}8ejx!alpUZ>*_!;PzV^Db3P7%`hdOVZe#U=YKR>#`@`uSZA)rA3bySmOkIfCuow^8>fY1PgqcIu`b}cFt|X%_Y!0J|6gmD*y4R9l3*%tx(=4 z^w{G=;~U}`;#=@XEWRP`#rILh*X$-ku z`~$m0{lG3$*UI&jK2f$yuj?X+LHG2wELvQ=bc0{@d!Cfm>zo_^M-SZKY@9v$uD5wo zp~u=TQ3JpUxBw@#XW&#-HvR`Yn$KOTBSI(k4foqhx4Stcf8>w^jPDh&W8XO z-~=3jAAW;YQ~xY~Ug1CM{$o5|A$~>rc>j#|(<1xJ@oVKvYX6KS?dPL}R;pe8S_`NGX0L;>;h{&1E!j1EYyqvY$2uDqrIKJQvWn54o*z!xQ&xv-m~z zzkSGtMy>B1ot1+YSe)nb_91tY>#sB_k1^mU{37ZH_J(=_Ltv8Z7d>>%@*=(Rqg;N+ zFIul!-|zIO!}yiWdh?4ykK`9^=O2L!a6&x*zvN0QoZKIPR?RrIkNLfxbr`?ue(wz@ zp~o3c@Grng^)sm-THypVOQ(L~c{B13!z8CX@FSM z?{WVRoNy!XtGi0UsdfG$H~nbH_3ykofBVxEr}h<(>*)&hr-dGCoG3nY9W&ys-Fi9n zuR-AlfgjewQF*j~j(i6BP55e--+(_iT+VOGunvwaVJ>|hduWY%&dWYheuMS}8l1xN zn(P_Q@*D7hh7W(S|Ja5fZ?pV{>hJ#F-5a#}T?|$Zl#J2v;ZOE&?ELL%@?Qu3f}Nv2 zVCUiKa=nCKknOyB*1`F^zKYiA{`WnuM{lZ(KNfnd?Og5m0T^ z?`sY8NbdeZ{TR(}gdS%&0TTMD};~GBk-|W2M0WWPwYm94{!@EwZg~kXt7qc z`>Qhh*`y~cgpbg}@UdG52RwjJ=5~e;a0?`@@TrD%a4fI$>zo&6KU?%bh1QV@J;m_> z9>53v5#W}-(h{HTZXF!Or*_#;BYNi^e7_9R87;$y<_UBiw$LN|o7Flv-~oJ4B;bbM zpw%?bLdU88SXx!`2#imp&yvR>>fcl6S(@9r$(~ugZIPL?0FDC+t{TEt z>bulbJe_BGBCqG~e4b@rX&j>NQs#d_!*{aZ;iZhGHnHclD{A;RY@9azETgl#mmAN# zaL}OZ;1-khVlDGJdbC(6yUp5_Li~N{JC7Sn+kZ^-KdxWZeGM58kv~gUJZ3Ci@e^{r z_y^+}_b-nVVTz=29(0bMSexb)4_M1X~@-}`i^c4C-JRPCRIi_g0 zz$tPjYro)#=rT?bTyROf@(Z>8o=ZX7etl}W9>1e9aZBj2#tC)=Jb(}U3vf$bE#os& zRFJE0UipPm|M6)bbB`Xqw=(z$J;m_>9>53B58R@08J|*O7-SVvulzz*8Sq*0fS#_9 z{Rlnw_|SP3#97R%BzW9KJs>{;McjgY70#@wp($NAP+pYyGE`|dQ})ovjAQ~I#W z`v&A&@7CX8yjy>x<9rMC13#4bFFB5e7weCul(i2hrTD5b{NNV9`O-+isJ)3 zfDfJ@xMi2g_;`)OUinczlF<8ZKkX}4>e<_!*^ekkY2Pq@BlHyF(|4-cPl3Nz@qyO( zFJyeY_6NQ4qg;N!S4CsS)xY|V9G%=bjQ=y9&+I4VGm+UW zK1aUIX!>TE4wlbEc|HT$`@~q|@cl;{%kMvhtc5MI?=T-fBKb_smuu$H*V$SY&TXCV zbgkEpHWm0}@^T~c#W^Hjc~53f7`TO=knw5kn%~vq zdi9D%`WN2#fzME$Z^qwN&&$kfz-^8x#ixDDV|v_Sz8T%*eteJSn?jH2kHy**P0Y6g z58#6b0&Z!;0-w^mZ4k@w@xTv3Wx;2Kp(h=VOQiqe4IiPWI6mxbterfT5Jm%A3CmXlU+S_p+gZhD;r_Yk}n7XHBJNKH0c;y%M zQJ?Qu`jyAfde!fyU8)2|eIn4R0@F~9@(M0h&}ZlU!uK3?+>ul&Hr?>I^EX&>`A zu{~$_#Q*FqP6|DyAGXe8I3BjF$44*aa*u2iqBq z^~!XxJSNEZ!3TZr)?@YiR~|g*c#OGkg3Iw3;G@>XXNTnUqn}TZ{N)vW!nkV(`)qIZh7oG0fond@ac_nL=zs9M}OiwzDlcF4@ zeS@6~J;j z9z$csfr;DnY=!a|p~u8Ws!ilEh^uya4Du3C*cEU^oJ1ajyajm-l!70>L4z-d{mUlO zBYbh8MB3A~xMN{QS7(WA=Iz7w8ltf|m@jx9qe*#;d85NGVH0O-hN)LvVmx;0^CV9g z)u?GT4Vo4r{|0_M4DAmTR))V&+;<>y@w|&jPDB19|MtnB9Yg0Xah4I(_d;t1Dh~26@@IxNPM4$&aV2l@Y+!!lX<$)jaFc$$mkb`n!4gq~O zRUY^uFT&4ogC5`jxmZ((xg)jxfgke1e`I4o(3AQ(!y~+BMEb!C9Uv z9^i+(B*z1KRCzeV180V+&kKIYi@(kAfF7L99DSYP5!jDCXYgb8+-mv24|y3b4|?FQ z;-qyfz|5?h(P+-}zLzz=!hH@W@tazakz4gS2JGI^OX*7Cp)dDwdjdf*2jFLpGOQ+FJr zYI_Dh)KJY^x_E>|S;L{8T#G~LYtX#-#)%pWJ!zOMokKLg_E5od=9XITbz^oEaHC5~^V%Tc6?&}uZ0cS&zy&ykx*1NuPc06|$#s{) zzq859gHyl;r(M;GaQPcJ2|W@{Vth(jqYhkvQ(z&(3HYhS;W)Y8q{Gj>ZpvX#nQN@= z31^e5^-=0?;3V`o!wI+mr|_o?C*Y@+gW*&id)@f?t_PkoYK~#h9=-VNC%$_6MscEJ zi9(Nr(2>8~j?61Gxd4H92-`y}{>{n)sM{ z7(P5Nq49`(g#7>y;FB{LKERFLFaFQtkn6?zI8#hWbo;HoJownmW$op*mop%Eaf3$+ ze1sl`4--4^U8%YcnY{p?x+ME;SB&a8qr=}l3-P=`n=`0(#tj}R#fSEbgq}it1`4P5 z&nBS|xBw^I3H zkxufRW-!T#?057aM%7|XKJSW4&Ye_qF4?wd{`}Th&6K%w=P#m@e&pDP?(UAx3v15p zVVfG!zlGS5eMe|5QzkV@qNuLIPv&b|ze3BQe&TPPeOTe&6Yt%80R7z@ZJpQFGr4PC z+j%{0-jfe)RO{HrF}vKLhfiYuE)(UHuLVtg!p0M6`DoeqR|`7G@62Jl<>zm5ZHz`P zU^Fp<(LvZD`f6usd^o)4Kjp z!0gwW1TX6uXvv0-@Oe#w`7Rx5NT#!&8)h7o-rTt5*GDvsSpPm*mk??gzUS-4bzAn8 z-pereN+VvDj|tW^celDaAF!|l2VAztnhATS$@>g@8BhFTLx175Qod8%^J^0L^QvnS zXq!MAK${56Wo-g&CG~U}+XQ(7+U*jwfo)=lr*$exGsm{B;af9z>3bcMYJ7D3T}`)q zwkY2wW{*o4hu^W6)Fv#}+twUigO)P(QccTmuSdSnUH0g2XP>1jo-&Sp{(4>0-XZTl zPbbvf2WsS6PDd{Y{ zZ?NxZ6L?;$Hi0&PHW53XwF$J9*mH85@OPgCx|+z{XW+X0VN#n2{gL%u6Kfd_JuK6~ zvSH{Qdx_Ynts35=BT$f+R*Knb}oKoN;^c2Sj z{$9lg`ofo5;Dd`UXtl1(r!nJzYlj+HGv_IIMS$(xT>z{!Oh4^Kw($F z6>*Zvqx~J^Ey!b1=de5m{Mp~jdCaPH1NM6=@kCZuQhFe(mkpn29>eA(w(@DM9i%)a z@ivRgskaynzA97HmmQ6K!2BWTMcpSECyk)_LwU~?w`*lo|3%%SN#E*VUJhDvaW3mc znc8roJ8CMg}nh+HBKTfB2Fg9u{a6-(5GdMldk9TMV!RGh&xJgGITeOlfPj! zagR(z&02rUVvRDVU!UHmAN9kdh)*qVoZN-Pf2$AGADj7SGWIjoVCA59i8%ShgNw=a z&&l=TAKH#+oJ9S=&QrXez#Z!U%c8>mzE?Z-%8zpSz0WhPS2AN_#LYD;*7Xnlk^l47 zpA>ou?c5?xay)xw5irN?i{q2{hc|qLp5pkxpQ!i%r$Cyq>_Fy;`yJwz<7sJ-Avr^>e>)Ixg%1v_W`q-ajI=T+X&dKfkVB3#y<0glhES~C-@iOr23iU zdsaB1w53!3aPoJpBK1+@W*lpTzHR+(Q0Y%<%|ZPbwI`uR!f5~#{2p)tPPh^H1&1}s z_S8Cmk(Z@`)tcW>oNAX%Fp?D-2M~I!aYBBBcx#v6AYTE69|W#yeuI1l`Au{N%WuG+ zzF*F7{GInNJ+DD~r1=dyAK@Q-ynH7qzX|??R7!ChirjTPtQ#`)`opXMpad~`N z+4CFVqn3;6pL2c%6^J ze(_ZG1bP4F{b{{w^$Uz-h59i<53_T-d4J#me9(@8TjWR?AFuQFUipEK-}C+ypW0zOvx6eu)usI8GD!oBOGxTj234;Q_Iuj8PUF5|OUj;KKF4=k?DGCCFOloFJ03qp{lG3!PpFsFp>q87 zYFA$QQ7*sNcd9ZjEi;%h!VK@hWIP=NOn2kJWSvLe4rD!)&1GRZ@M2gt=jcC z6rb8<=NNH^`D=Q!xBOM;k?{PJ%!2lXAw%W9aLxu0A48;(V`Nq&OMe z#NuMz%Z#R1$aFBJA-;b*X#0#G^&c{CY}xZyJ1c8roJ8CMg}nh+HBKTfB2GqTvN#F;;N^0h{QvBo37i~7z4#{y zgaHyc!ZDD5i{#}EhY$$Jf&$C#0t19I9K)fTCD~;nVG}o-Fo?jasN;>0rz?1Xe_01a zA3POT4h`EA9ghgg0~Q1yD9WgaJPo*9;omjY->#|N?%AI1p2@s?oDZRiTxo z?^kz(<5lY60(=v8QjS->Y>iiKui44$*Q8y{{MZUN>fvN6$E|tdgzLs0YyZhtA2r)+ z^_{m0A7}c6{>9H<-Vtltr6AKG?of7e-Pm8u-!JQM#&cd{C&?emdF~0BKiog`wC)dw z9d8O7pL8*AHL7*0B45qjN(v>Pc5*CaJ*@P|a_%)=1rPY}9>Z;XYrP&0JKhvFK767c z4-tG8EZV-1^l2yauZ6RdN{?L+yN*}E13o-I+;V@_%TL(xrm*ozUtRdzuwxU$?2bhYm8QhxX`Kv?DzAf7Wy)Z0OZNAAJ#6iL8hGXYZ^3E7tZfSUPc>$~s?wuzQa+7i{x@9UR4PeMl&g`a zT+7pfYVS<7-=aKoAaYKNW)w0WXG2tbrdocZJSjc?IKc%@=|4+O@XPG&R-T&U%z-G^ zO_j^j4LcPw4f1c49*vWQT#S`A?|aZu3DH>-U}b4r#c^a zz=!q-+)~@Q@(H|8L3C#h)S-U6VO}BGAU;Zus^7#}9nSqn-~k_4!;NdguCAW!Ku_P& zt}gzvdBQi}lh`Bri)Qo82OT{kH_wm;iMVlxMA*fhZKHw<^jiTu6_uif9`c} zG5Z-#He@>V1kT;@;KJM;^}UMqJLHw%F50)`2jwmEl%6l8XWjgXLjpS#&Dswk^7K;& zJn+EyryJA0ReCDxLq*Ej4*?fA#YZG3_$6n$+N~z&hmdwFs(uK;X~BZSM~523N$Jrz zdGBcW!JDO@xf05GTj}u(rl)FQ6f?x3=H%`sa z4-u^&D9Y1~U;OrHra^w7(xY**Dn8W@0T1|$e@pU#TjF^)K7or-g#8ef9~jX-bdt~5 zXsSW;d6XW-$F(2A;sKw`e@Z@Z8`<8?9tCzABJ78de4=XS3O*YaPBAhK;-mCPK3@G0 z@PJQ#o#aC~O6}vuXUpq{kbHJCk`3y|Q+lfNfd_nOkHD?8vn!t_=!b~De%r9{03&yc zY;USsNBP20e50R8>8aE-u^$2+@F5LwxpK3)C`^C8|+wI8B%kF1Zg56Msy z=HuezjoHF$M;%i4^$%W25&BQwc#f&R+e(Li=g9+W3MUWvpASKPP~Ot_>G_h_Q?C!t zSg~r^fO+hpuGRll*!XCQdOn26)2p94vXE}jzEDa}Wqrug5h}kNE^x{jk`w%Lvvp3V zt?0ijOy_6V_&mWBYd?jk`XL0T1+$JV6n*ZqMmlN@MZGBIttdVIIKc%@rC&)-@Ef0_ za|%1}By4>0r5@#J!J^K>c!M}8J^nbs1x{l>k(}UH+RwqMe|1kwh(d98$oO^Tbi+x7 zc!T=&lpcSa-~y-APpx{-Dp#e~oc$3?R$OKt(Mx{S8lKb_E}mXKq$g<<2PtuCBqon09FXk*4RlpcSa-~uQ7VEARW z(K)quFS)e0dr9CD6*fMc#J&(w&I2p^5sS_*l>T31+P_MV8z<%G!2>=#Kiu+DbUtUS zSk^bNtgmO)D(#l*s{@}K-cu-jqd|OZJ>Go8cs=c6+R4RJWcp}7$FI@b$#qya z5Su^0_WpJ?UeEbfJ5+5aryrK}cYbSmc01=4E8f+=UHh>|3rFo>?w7fl)(u>6#EkV9 zTt01mZ18)=x9`|(!n%PAzOeoJ3wGaXef6i1XOfHYdh&yES^RIAKg7?x==4KYt{&*x z^2X~$o}PE^kw!At82hI5xRuLT%sE~U7dYh~lbqle|98FqY@T%k(T)QPP8$}UW{fn* zUsQTDPM+iSaDmgv4ziwsUu(>jQ|%R>RY03{yk2rzVzf4>{iXEy;{+EtWsa1b;5Yt) zTfNr|tczvtI13ty6k`LTQ zHoEcI^2Y0B`MJp`HmH76daCn*2YhIcz%BlYE1xZHyk3@{VWVibQ_V(69X^cLD?O@y zb6Yn65BQKIxN%MRukm_vB3Q_HJ^c>!LnOOoy-NSY*tL2;#C3N#_uK9;`(OLJJG%$E zYe|WW)lzFTTZQO{kjHe<53ys_eu(TQ*?!BsP1eh`_CriR{jtK47hbyA`XOfDG-Lhj z--v#Q>4kG%cxFOB#O&9$UqAaw|NRi;2jwksxXc$aIQ>VxK0J3>&*d#44r2-%pL9h% z4lMF?|0Dik6hG0Jeh8(fvOeVLR4B@)=r4i`oOplXmw3d5(*-S^Ju7QFrx49$P9fqW zC+dE7!Krun4I`CrjNhm9xO0LJJmACg!!7%&3!lzqs|LFJmIOI(tIQ`ve9~7BJ_}}T zRVX#c?^Alb`G|gY>>2hg(JkK}>|W-2-M+Q`*=gSv^{h0<7zcXN=U<>QZ_;nXYB8e) z*`P<*xBJRkIQMfW&AyFqE9+~*c)PqFIa-FrnUoXvq~`ud?pHSQq6``*!W{J%wwBziIwn{X@AV zU!3KV*x97sFBrnKl|_b)Pr8JCi}Ku0k*~4A?-)g&{eolGdqH~qh9cj~^PFrw?&Z?C zUYPe5PPw=0e#rP^di|O9n;?(-!p2u(qg}@%-u7;@ulhcr_$P$eEy`EreuF|D@sWr9Mh|ibk;nVslt+Bz z!3RCaAw(YUU8OwXZ{c6zZ{-%r`i%JbqV8|a|EtsA>R55v#pXnm+T5*}70YtBg6%_a zfBE4#CunEQ-zs%VyEOEg>_-?oQ(hBJ=5M8+liUeEvTLTW-Fb6-`&$P^>~B3ccvIoI z*e6W=BgV9=1}FGi&$ZoHc&_b}zWpuohk7Wnw{FLiFYEPCSUVgxKJPjEI>#eg?xeJmACg!!7-W&L^xL4jZ5JMSaeeC_lZ!cN#^X;W-s%w^872tW_vxH%%2&z{29W5`wlA1-E)t^+FOt5FjqUZn>}ylKbMcye`NYIE&I1D z72VWbtCn;x_uCh`wTnpcr~C6)71D2>YWgd`F#4tsl>M2tx9)GIMSkv2URg+AbB1q! zhWw$tr%%xRnW05`|54a;Cc?(&IjN7M+8;sWYi#g8jZA~;W2Hxycdz*t@PH5RG2GJa zI-l}B`GI#+ika<;hORM z&kwiUp)P!CZ?+*;@(B?iL3QCXTrhGz`y~?Ad9tL(Z-_sm^i=0VeedLhzRW@wKKvLU zY}Rusgw6QU2R~_)8dSe2JvJXLH}PYzt6qK#ehDGv3a(B+2EPSAX6Q^=Ul4yJS5H4C z_&h}A$8av?E}9>c+)3Ky(wnkhru25}+6pK0V^Sqq9}-@4@H0m4=KA|F@X_F#7ytb5 zv4!iO*unHuHW-`Ux@LkO^UrBV7p}ixXWxDd`9nEREY$s&^h&*)hxJ3k##i~#Rvrh7 z%8wEG8XLUR$TVpFfYKw&xtAXU5BTsN!>!n%^9k#RgpCiMsO_ZS(>w28Bk6N|r4-VS zQF`op*wv4L2Yh&bxRu&m_=NC7%6vk^Cw+C{GrZm?`Yb=iko}rU&m?@Tdfv&0d>A{` zg%3Xl2%FW9Dcg+Pr;NDI@)O|E%Te$%l^&aqCK5jeyXxh~;Fl2E<;voUofPuK_!54L z?Z?cLehl%`->Ih`^A7D9Yq?N<%s;LEm|ZnLW~fct<>aw4ES~5HCz;Qax6TbE{N?qB z8MofK_oV$XOM8|Nba$;@W6tLZ)E@&MXI{Lr&$w~$gF~kO@|bbt{EtlVV_w`1BA`$#|WD-XXx`r zyg~Jw(qr?{auYuWyXxh~;Fl0muHcHDwEY;%Z^4flKVJGV#2@;Z?#HZ~@7yO-ju4*R z-`%&W*W9E}OSSifjMZXCt95R&@MG>Si+{uNV|LU1n4P6v9F=ig?Fy$H{Zq?dQRkn(aO0HqPaeL} zcYh4|;#JNQhv?-z>^N}P_~c8}^O8lr#@fvD&wcJIG4`k6b~0f;gwmsxb7dt(B+9U^qpOO^Gqm`_E0 z^cAzsVg6VCaF4j4{-(aB{?49b)!&w$+-LOqyAJy|nN@e~`!9(4TR-=Ccdh=GPptl* z?U40%YLVXFQg>AUmYVyk(ZkwrH|x#KQ-2HnE5ARpJ=V5eL8e1bZ))!Sqfht!{5buu z6R!mK#pVk^eo!yuPSx`z^M1WvXr6PQqum!sZ2Ykkkl6>ISdb}H- zX4t<;`gM`=8GhABHmLti>8Z{K9`K<(0=MkBu6&NHd?#x89^JXm(e588%FluurWWE2 zs^63zRlm9I-vkf%kk@eIn($xyH<1&;Li!=-cc334b)oEspnoF&3B4cU=G&a>El=!U zv3h0Ai3k=;shJv|Vy;mTpVzH^7_k=Vwvk1aABo1usFBga?m_pYrgJ7_EwDQlfA z;ZwKg3m<*|UWJ=Ct?sD0KEa9~bujb#KNpVt_0P?I;!hjDJ%2{IANl4@-DXDGSXcdw9oS?Te|iTVXj&Uz-d*o~7{DklGX zl$@fppQ4T$KjdyB=d(Ob{-o}Az)9)RI8BH|y$2UKaU=ZV%N?A$m#_A_h8|g!;khB> zD_PO@cL`3t!|RN^&-t_}9kqQE`7Xv=lpc3Z;y&TuU~j$r8~hbQ>OuH9{Tuul{F~Ne zq<=&F*6-{7P2%xqW{Y~`v=vKx%6&1?(XH*F&AZESTLMNlHUF0Dj1iypapKi*{*BV(Ue3uLyFRwK zz=`)6e&gM)oDK~-f@iPGAt3?7dT{C;zR?)>IiDo)W;jktk2@#lydSv0iEMM0EB@Y0 z;}Bxs-}u9;?0S9CiY1r!44k{He_(Z(BiMP=x`d*9JZ-kquvgfxQm-`*VYSmo{-E2h zI?iXWY1N8opUe5|oFg$?vtRi+(ryu^-XgCF<4fdolDT<%TwDGnZmsVjJmP)dY5(!E zvo@RkieGt4`?dF9)Dat8XAJCpshJM(QSI~imESXeKdVFj-TVL4i{y*5yb&|erPqsL z+XG?aldh=iMUk(u*bj`7Py3bK6s}%WdbE1cvwhC{>cuH{QuA_(vfU@%{V#9xF(ZAW zzkU?nms&$nKEybL(xY*jAWqyb+7;9jUhN9%SwhMmd@I`(<@StKA5Au&o%)*kdn_aC zHS}ce((CU?$B}DYgjA7xZ?ngdS&uYFtH09;tG@m>8Rp)hht%I*IKjG8!m84S?@FaS}$_rwB?N> z3r-srUSza>-kp*WvO zw-8bv!ne{N675v{8vGm-5}#|r#6zl|^@M)&s6&3JG3@VIvuxF}6@4{Evu~fa)0CLp z`}R$%pEaiWIrfb{zvLb3uAR}&y!wj5J;y$1#A3UdcCp25+qm!N8*uo}sjhC<;yv2R zl+N?6Hs1kZ%csP4DX--eJ~wNNdB>b{#5gOAHKd%q$6D^`R_b|YiH|(?_(zW|$67PW zT4UxwIOP!^dF)A#9?sUV_oTMY0%LFM$}%9Hm-xuz%qR3X<#Bchd(k`P5g&O)YmOay zn4^JQ=6G^4J3xJ;-721@@3+&lIOT z;vkYVC+$zy1P44v|bkG#0GcNKc<=d|R(Blo}V@`#T-<_@BV z_l0zh|3=CgdB$BH@sYZ{b#Ql2w?#7AEC6`4Nt zWX_XvkXQVRl#_qKBYjqUI z;%e>DoW512i#>&$`A2-@jagjLgIyzi>`BC!m{T6{kw;%OdRSWm7kdrX*JL`K@`#T- z`cBY;Jo*}0qfg(aQy%e=M;jkK$ib(lZ7D5#KJu80 zhaRWA_=uE8-+@ye@sVe_n=$l|F5W}hKFm3(eBQ;P4YaT91{I$Q7aLq1{i>|t@7 z>9-uAT{THF{g6zu}hN1^n%w|$*s*>Hi=$UMmje$M1roB}t=qFX!C zRu@i*A$LyOJ2N8SHJp?ljgx2JEL`A}OiE7hb0){))C6ls>cc7dId@L<`8o5W)@wK^ zJ^nbs1y0!mB`5ef(;+!E#~v2txgimqQOI-VJobv-of|@if|D47RC+W{$4K#N4-0s} zCw;Kw12<=KB%i>=DAGMF>cJ;&&m|E(R_ZfNeGT;uK1z?`h>9&7Nu&L|_E-w-}ZkK|+dCBhz=A60(f0iW?6$p>!oe)WIL z4h0@0WRC~BB4Fw<3E>e0b`An25?q6)0Lb$+*JK@JQp~a~Q=3>`}Q^sR1 z#2#co$Pi9Sk2@#Yucw_Ii#=p=%AfG~eqxPEpZQ&QFsZl7>td%2oyj`w?5nRhV`0k~ z-TmFmmv?7dPG7QQ`D!s}YA(NBxpGEicl>AIr!t#42_A*Ef6#pE_dzoxouu3RQ~AU5 zh&anub*=6*4co=OPxQ5f_z2+3ts>n|n}4KSF{dNnC(9T2wf@(GD}GlIIjT7wVdjH~ zv`yVH+BqFb`;1YZTn`uja#~@p;>M0wf3jcajt~FEoY#?TpT5Iy3LkxS*Fxo;YpgSx zV`eRD^$E5tTG_oMY*je>%D1dPa_6FX4&P3N`@Zw!Xr<0tz6#BFPD-QP@${QP?3 zU(Mged2`i2;+80?og!0svz{kc<}>T9 zg}hHbtyY_#{PG*ZN9n1~hx*>h2Yus5E!FC`u;;;rjZeBn`4Q_Ia?d)~!3WbIY{u-5 zOf4ksKH%!*hji2$!bj<``DmiVeZuNvU!8M$xEa5Mka7iA?4*$QwE0N*E%-6nap}hp zf8+t(k6HKY34TnCJLAceijDD1M<(zXlJH~XxCHC(x6=HW%q7w;C(o7PSVj-YFRw6V z%_Ss!@5*---nFCfAL@G^k=I)$^uKrI9%kEWZz~-ln`HD6DV{6S$=DVd`OubizBbVx- z%31esd27uF;d{;sdf|1=tlomr6S5O*m%dEXst%-`QI zf3N<*PLe;AbMlGULl-n}Igip#ihMOoRUzXscZvKU%vt?ET>A~Fhn1enaz4>c!UI0& zfm>;{3!g2}P6|E?7M)ti*kgC@<%9f*ZymC|Z|kYfhx)|HhjgT`T&%Sx!`iv9@ky6C zx>;^dMr9{Oo%H!L4=?0>mLHXl+P+bKl%7gHN)~pKdfUrRV)qCsS8#RON$etaGJm?X zlf)l-R&P(%VZZf2qiDiT%Kg?~v+U$_%}ypSlXh{a&$5qa%P@Yv3{}p$e@k2aYlM6J zI#KBQ_5pRblhfRj6BGIm{rX?bI{kDj9pXl1C-*pOH}m%w&EKnku#@Bu<(zyXc6zC! zoSRc{R`m00?O~MrVhB4K)!HDDud&z(g|Yu|U(4Wp(xHC_Z?A|sa7vF>&Q;&5qul}* zIFTOsm9BH+6x?7oGp7ZMPASAa=D?9Jgo&+!+e^Vo>G8*D#HwH5&MNvo1Kku+Y&SRgM+Mm=thN#B`C#6T@G$9i89$etWjqpo+(7`F>e(BBX-v~|% zZaA_~wEe>B{wMiVYbf$vj0Y+`?wrJZq8|Wz>*e3zuh^kw=i%z~Z}4aEZ?d~f|Hh90 zciq2 zo~q3xAKkdW$k$lgWrbXW%DK`b%emLMKRn=LzsJ^lJ@Rp#PkB@@=)@{BbHm1mPt@c7 zg3p2*`U@GK^D;6a{2EaYD?N5StbEUkaesKghv$de(A&GUet>fR2Cwd#cHF zd7pfSrUdsp1s|oSI-jgn-#huhDY?m|{P1IdFxaU4L`6}L`wN?KOy`A#l+W>|i7E2; z7yKBd$L6C6z>mSMdigQnr-@oX)|CIcpT#`@Z zOL2O$mdmzs`y#4w5|OX5wp5|mpmM47Xyx))=X?)%zy~gHOKk7LCwRAM)6T~cd=}hr zY9VRw1MF2oWDe!5J>|$RzajpS(xdU2Fdv8d#K{MJxfw2e_%T4(taeS*Nx%Kd;f2z- zS*uf>Pk=`+M}d#hQ^`k37553FLcQ(fzhd_YDQ|Ff`mfkU>}2|NYu>8m$0om9PdjqKa}$kE1!s;IqBV6KSJ1Y8a6)ZihACv z$k*7qlM1EV8&uA1J(cBr;(Q!5oq-WIvD6qw$$w zC#g@IeBhKm*M$#11_+}oKhd`TM4hzb&PNnV|LKoUfJZM!vF)U-r;?A7ik+n1_Og@M zJwnPGT%C3jyNI1kZIX79_=&r9I~n14m3p`U--Ml%<5e$Pc5-{oPGTpQpkJStP=2B@MCg^$@-l5*`Mlu zOyW^>{?>{8D^{;8Z;GiU)z?KiZc90`Ij^|(2?N59k!K4sUNuAWW1NYIA1Li~{uJF_ zJMZ(lmgjGodo$G8kEy2r%&X5e=ZG9+o&zS*p?}WYw5D+8rnK+zD)NJJp4(Q>m&5_@ z(c1gg-lu^#54Pq(_Q|>6dfIEbni7k49;C?A7ap8a8233}wU)G2-Yd$Rm+F zajV5<`Gkwj=`_g+e(|eZIn`dEti(on=0KF^A_`6mW^Gd_UgvNAcV*t!@*Pe}kH$&) zG>-Y-Ig1ONMvjr3;Flh9kVx?!h6&S(3r8jEVb2~J|Zl+vSdvZAVehTs98)Y*~` z+*<$3jZffW6yccz(e|U2`8>Q^A=M!NQ|VEB+|C?;2Ykl2lYHQooZaQ(Hw1PYB0O_I z@`-9sdufm66!LfY>;I@$MymZr`B8c#AFuuoc)%yQv*ZJ}#IbIC4hg(p413yFdj@~M zNxv>qK8yA##P4hjAEl={A9%or_6Xd@zVFH>@ID3b34i859qP9m<`q&t`=|W9Llf_! z{3t!DeiLVPIOn6l13pNE8`p$gT|L=>p1!4BUHoP9gm1nn%TN4a=RRHMF6$py-MxJC zBx_Qwf{*Bjpx=Rhh}M`axAafs=IZ-^)TbY!_KwDh{SY&&_CqB1llAe?{xY02gB&-^ zz3!00ug*N+xXslMA@t9^?k#3N!^wtBhn~Q>J04t^yQ98Wv3`fV65K`mmi(Z+m5$f* zCA-eGJ`C(oG;2SE$kR_9@W2Bj4O)+>^i|&RetWdoAU{y)(KuO! zRrN!_13syFk`LTkGj4nW7o!OKAuK;IqJ11CpRv(QgZd$q9>vGCAHw1RpW-yh2X5Ib z-1r1`8zSt7h_;<8_-t4>#mF?MA5ZC#e7yQ0-~pfb1(J_lj{fAvXUpq{kbHJCiVZ41 zN>6n@@PH5P5xA8eb>-6p{SeXDZyOdKV8k2LkEisg`pvB$0v_yFJBXjsWa+M>$&{Io)wq%4D?@7Ls9}n(WHxh zh)u>6 zP2uDL|MMZp56av4>3Y75oOZtEkDsw()iQDHp{~{cRoM7wih4eT$kVHzI62d$kP!jzZ@=b%63Xl@Jn8zb2@EB|7Br1Kf}i738q;4UPjdqAvi6Vb!;JZePcK& zJ^nbs1y1n}$q9bB)jFrJ^G?FXSDd7O5hmV_~Qf@IF(|O6a3Qq>6}jLTe9LZ^N3#ZtJW}VeDu}B zJ}r3ov_iH)^`6q>j}u(rG&a{NPgc2VJy7Q)4p$bw;<6>=SZ!h0_-LyOr&(tg#v4@c zDLwu;!39qE!SE~HsB>!XUUF$~_maRRDr|f>iS@2g&I2p^5sS_*shsmJ8KKW##h?vz~_ed6!PC{%sdvQ$D5BBucuv1J2^R3 zrjPb>{AInJT!-=c*!=mm_qVI@dd|1np=vw1bdapShi1u;^NJPk>ff&Y*rSD`b};wL z+)V2RE;wSw`U@_fwmvraJ>%PV>^5QDzy)8}e*FczZ?(SqQ^+&P#dtmWLAe||OXdsl zQ@82ma!Xw|AoBFQbB{Fg4H^eldfduoEan`qhl|Z=rsM>_?47Qhwz%sQMe$3(mr}T-E6Z|s&?aHb4iq9&b%{pE$IV~}U8ng~a>G8)2E^uny+TvvK zOYC}q);}ogy=EA%kJcZNoU%sB-nYaw3U&C1{&=x&K`M@o|!i~?CH(p=nGw*XoszH2| z9?8dRydEC#8QD?tfm{BgZhW@9@p@T)ZZh%>S~sBdRObT^_|P7KTlVv=e73mpdRcyk zja-A~Qz$*EesdkKx7vsBp*M$EXuO}yhg^btJ??699Vk_AXLH|VF(EA~-yTiHP zc8A&j+TY#TJh&Lajr#%we~|yKmD=7kr!UN z+4>=7-!xVE9!Azk*E6~@ed>3pni6xr?Nie=~O7nr|2(&3!Hd=;g`ADh0_HsojofD zGD@2NZ)Hv);ww$jwwnZ}-r+ZlOoRLirN^BUeBc2eo*!=69v42H%T}4Y4=m~7<{H8> zpAhkts_6MFn6*`**r0I`rN^63xu4y#XV|y+bZOtPd%3Okb#ZNfcG|Z^JuA&I#(|#n z`4_0noAev8TFhucHs}%d?Y^=W&i&j;vu~NBWPMGT+Cg3q9Vf$lALAYFNzJ?|&v(pC zmHWyqUb(jL(}(t&)V{4T?LgPkW&N>iEwl67(@^=>YyWs};o9EYP5t*8A6)t23HI&U z;d=_#4u8}9z50i8NxnGCC9%hDag@s~^xRL8ud%`J7zv;Kx2@LxljM`%P~^K99O zmrLh*VcuIf#dp>Hknxo|r?lS$dE6H^z7iYlIv(-vw~eedat-PiRC?SwQI6mNAL7DmgBiA7RL+Po`2OjX@`QeuNzRsr>8-}dPFl>A!s}6jI zZ!?MwDnCk(H=kDXVX?F9H#qcn{aj_cy>0m^*e%Le<$i-g9`TWf{YHPPxxE-SNL1w+gSYx*7Iez(fzIYe|7p>9V;%o*qn$`o4aM6t5=R?xm&^Z zA-KQ%@SGF0v*vGQcawH0Jzs{U-Su!Xe=BdDvrhPtT{DI4&YR=g-#RE_f9tuyn+ngx zK4Iz~F{WKLIKkg~uIw^8=v=_eVwB^CrIRL zZ15%{?sGkEDa1MJVth~OanwVO{q^7hAKqiQl@8YVgtfzAh zTj{CJ2OjX@`QeuC()on7!(ro-zNpU+5#^_M_)eqLpne3Ur;^XaeT}H^oqWiL^iLkq z>bDSGrDc&})0&KpBdjr+UNXXGRz&J zhm-j;rPrk&OE_@fL4~<{?on8K>oFa%Sh3yQnaKR-^0E4lOn;_j|CXhqo4RY&lJ4bx z`$D&N5h?z3fBvdM`pr{Kf8`fO-}Hg9KeP7M{mrz<&;7|O3+Zdl@a@l#Ka}^@1-d^o z@`zsE!=5t{Ha^cueH_(3fFfUGga2v78`Q2+dSrR`nr{IQ`0yUXE%8;IPuO!N!p4VB z)aO(PKE3nqF_J$0&EzJ%{Ykne3q}1Z{7t3Du8-B+%!+f>;Q=4y!!0%J!l(9T8)BRG zT=g=a;ewI(S$>Kk{Y|B(Iv?tLCm%9&gC7amk?5};Og{a@LTX>O4~|5hWMpd>gmS>pNFXY7|x~KMe}3E-YM;J;(E(} zxj_#n^J7xh`F4aC9sG=uySe^;416^B=EXlhd~D(RCw4IXlnutFx2~Ds$NY2J(S_?T z*x9!qL;g_CGvCtvn9Q4cIS=cHgpIHAqs{bSr^KT2V?@5j2JbXd4O$1L^vH7V<;TDS zKD@_pOD=d+YgdN#L&C;~Pt<;l;L|(rUZdo*UncWvI6p?|vFl-1KL#G~;rZb?LR zN!=;!a%;B?NAA+Y$^4kORo)1HdHrF=t#|G{X@AVpp5+7GU8~oa^LYaG$H2##7q9Fy zZXEpJkmc@zDjSZUZ{RZ`qD?PHDd-*Z&fDi96+>%+HPgp-BY<&1c?Z*f{z4O)^NuPd9 zdh2lGOG=Mj54-v?@PH4`54X})E_}8?Kc>uQ_(3D@(~lV&59enpJ=OV8-#huhY3LLe zKKvLUY*s%;*o-+tpEq(1YNshZHXkiF@nf*7UVaRI2_fYQuGmTZ82lFenBsxbk0Jih zdfks%H{ZEWrW_$WyT7|{Rj;{8pO$Lx3mL1$j#lg3WZ}o$T^9d_<;U!%`7vW(kan4H z{G0Nc(7EoWXmgfn9Km6^# zIA+aLCp~^cQQi{f%}S3}&Xuin%$MPP_2N_-ZC*}Mo*OFO{o$`XVGK2BeU#Fpahiae zdYO8{t6rv_C3MzHmG!b1-=aSHirMBc|0{pEM_f>UQ(semk8N+w3$WUwxu59ucOCX` zGOO;|_g@h8w|?&P?ppmVpIH4r^&zVr`eD7jrS7QyEj9O7qldNMZq}Qdr~VfDSAKtH zd#r7{f=q{=-qhUtN1yKd`EmMRCteBei$y!s$`9&=q3`PXlG*<;t-rQ;_HUB&t)r^H zMV{_?%e_XfLFd#eJ*r$*QgZI!1Q$5P@0Oh4H-4@wrzY6HNv_L_l2h-z9~;F6?F*#z zXq-IlEL`B!nw6a3SK8Z^Q|%R>^|C~_e^VVe4L@XLKkLsQs(klr`HnxN^!Vch7dXY= zCpp0{KJ3P6%iF(6)O)@2eq)sEb_-rYEfgldS8x*kh|;5RvIMC8o8SST(nXRF+|swZ z@d;dvns)!DGN0i;7#W}QZ6+t-eg}M%9>vFP|0a0ACv%NeeynoTnsMV3eBMNVPjA=C z<=uUL=T*8trTD9?=b{>im*wY0Bh{dBDy2vA@#?>Z2Yj;qk`LSxFS+q)hW(qQUl%E# z;a81RgT@z>p6Yzy0iO}8Jp#Af+%Y%5`$+Hiy818Co%D?OF^FF0*jxW>qP z^!Lj?Nt4f2l2h`P;Nz}>lhWgl6I|fLdjY@JuReA8?|7NaADiji=P1Wz1gGBNj~F?R z^?fs~j2XK{avBLS4^wbbdi-(14mdf%D|v^`>GahDD_0M61@;4@toNcEml3w)ZwDT1 zp^3UUt@I8*hnUc}x4X_g~Zz8(e1$?0sq3&xysOHsJ#2Xm8=vQhdc0iZYb^EyBktknpqDT^Gx)qRQ7Mb9i69I3+eU zFQ+K$W%2HRd7Fml{G zS35PiQTn-rha8;in49{}=;mst-g?)EJ6^hTlUY9x8rR(Q?5N0!%696lcje6AU-4ak zlRwl8W6Nazkj3d8e(UB}^K;E%v)11tUt_Tojg&|GhcZJuwHOaqe=9v&z2I4Y!v#*f z&+tpOKjFe@%WJ0!P8$|pWVCwNS!X*nA7cKtu(L{!KTdFg69oi*smt6r9TIq;FS_ya zX!{c+r}r5}k9ld%c53T3;mVWJvp{&@Tv{G9ww($67&wxs(xcRu3mkCztg)b85$Z;+hiIn`l&@a0`r~J7e$Mz>X}61AGE7`4!_4P(du|JKe962d{T#yEhIa1!-`{`T z*j)1hh5p-y4)2T&{>6~#5D8Z8)Y}rfcHWj)(CK)L3751}$sfu)`9y^LV|sZH>!*Z` zPr9ORr;2=y4L)v+c=R8lmoTwyxO!RX(aO80p92>-kq-Ec9Q_;3&yo4uHGh7_)YcwG$tlYI1W`wgA9A-b(x7>^ zN{_~ALWWZB!39p-2)|ONgH!kN)nVo&of|Sf>0@3~RQtXPPQAnHjEv8HxKui7`zG>T z^t&iM?ws&%u(w|R4gLxt^&tG5{tf;N{>{*#RzHr_pHqB8_iqx9KQmj5&!4tpX-|31 zfOK?gdua3Sa@>}HkBkIx*`GgC7FFecyDvGZ^NhVd zxY_(0p?~)!%S~H+hauCUCwBMWpVGPe@0a=ZZ^$3YdHxDLpT>LiavrulV;+#xKOpuc z2>FTHzY+PGf6H}7(Wl)Un-R`#Dn0Jyoa~`Kh6|i{pW&Ch$(7TgL1&uU`$v$FfMGp2 z^$y=?jQKoYJic8xPD+nErwQv*ta=7cWE=drCTynpa$>$g{NYu0y}oG0l1qCA&Ry0& zu)2FW32w4bln>E9$6jH-NG5iTYr@1s%6^^DZyt5X4>gAUJ!_V&TDGFE#%T8K({`E? zlY8I3Y1yxsX20wkeSXQ?eu{g9Gq1j)aL=(1n)YkAj##Xv-D^MJfXyOzrFHnL;J%e9 zm*-t=z5}AKeM)SX^4OG^tH9b~d?e=_G0qBO4Jl{uv6ghYm2P}4;@k49F?#eMhq(`| zHD(UP1bJ3`b3WPgX}neXBJ9=Xlt+Bzu?H@Cki*^!>^;SvDNcFB zM;?38p$883-kQ71^sz^$Qy%e=#~!fgK@RC;k5Bf>a>^q<@>;F6^XP#CayiR|J$s$+ zAMuelZq2Pl&(KE6Be$z;3yfuEl=X`mXya_K_?I5BX7tm&*+&TZ>E&ToJ42-5g&OO zt8WH9tue_VxsMFTPq&`;GWopD^bsFp%+*5|m^bsFHkUJf#77=&5A@^?ljQ?@ zG?bR2g@g6cZNnc*&^DZ`>-}I-XKH8r7>*O_ZoniCrVR4-4w@0@J z5zm>t(R~cWZfJ31z)-Xc#9R-h$6p@-T;P;gDmlT=nH-B#;3ipgYe(AZ!l~pjrntQ` zBLZH-N$Jrzd5$T<1x}fafTCd@x^!Vch7dYj5Bq#Ve z(;+!E#~v2tKDTF_eQqZ#U(qdRZ8+2J=Q`!FN9pcUa1vuxN{`0r7%4*SVF3^L zjQ2`DaC54Zd;(8xi*yf*dhp43?2$0dnGpf6;iL2@K5lzhzym(|2{ zBSA?F`mL?(FGS6!=)q^FpviQ^gOAdq@v-h!eBc2e#KDbgLW@t}wTtj+Np<%x?dw^! z3c)ppl224~B~V}T;4_OGLWb~BdL$nycH$YI*^kTe0-w~S^4cpI%`?Uw?OtR&Z^>iM z5p#CAFK8(Eh<1_EQ^{wdRB``ev;7JeIB_TZxF)nXHNhBneK_Sj+OK<%0U<*;DLw9- z7~?+e>{#p}!Rf7!?aniV7gm|MB6L-L#&Vn9>9$8m?hmKzTlx2)KYzA7 zroAZBy|kxa%vd_RzbEK`Z$$zIZ~a#L)1UnLX!Qvigvg&?}Z%tv&8o(K8Y(NPeNp(n{@GewRBxk z`_?z8n-Gp&CexL=Mt|Qb``-r5Slmatoc9aCYkK;_OcxL$VsU$q!t&*W{|PSQpU5vU zH?H!2k(Y-aH2;;vCFKvf7^cdd%kMw5B3q<#hebF*Ey#{yc4_wyc4;8`A+bzWY4ef zI}x-KcH%oRCDc5h%p~u`5ex4%_Fh!#D5ihdvGStx%J0OZAO1_{FHSntsHAgw&$3H0 z;-x6R8wa-}%i#enE6s^b`&Hgp@k@tOA4gFYMjo#1)h-U;3T-ig%v zYa#xTdyC{L)iQJ*9)Kd$>SZr`01j~ms5+%@5Gn- zU+bK;??c)w4e!d(Ir=-X?$^%sdcl_5iCCuTsA(^m z%EuP#^<;aV{qv@2@5Imw%O~uUVeSKZNIh67v+{dpmh?#p-?{xAoh|#^X4;AB`}m7$ zp;At*-<>v|_*V}c-g)&v+I%NwcHI4*>#TZ0t=GGH;}NE9Imi6H`bWGIi%liu4{gY# zl~2ST`Q2-p&k%OqN!a+L%k8h{gg$zM7t1N7Aknya>n?j9Bl5N{_#9BHzVW zfYPJ26^@NL&R>BCe9!{7(yv|k1Yf2XYi2$R7R>3$e}_7|I-k;X)s`gB{DkmPdaCoG zK5_Cv*T{EW`0!(ZFiJjReO`3sC*67Xd#>t8e%~LT0FPdd0w1ME<70~z_lY^a)Z5NE zBixAHBcxoxwX)6nwE4uZ=D-XI>Ypns@us}NIU6F2iL`w>pF`s{>rS=pD_LD!3lP< zc;^G1#XBGJZ70be$~pOjzM)?>Z#j?BPKtbu#dhvUea~Mx&+Z(q9#(p^az4RM!UH~V zfm`tr7d~5{ofLd}d&k?8KJ6rZujH5C(5{DVJ=OV8pE&uTZ~RFYKKvLUY*srd>ZI0# z-rZ69uD|jV;L*!b;G^_td~C7UN$PDcJBi&Rq+G$(X(zFZ*vX-l@_C7$j@8FbcF7JJ z`}u19qU_|jWhb}R>}2uN(k_-hA;YmjJ)F!=I@7b&U#A|w$A6tycRM-Fso1)Hb^2qS zuYR;-*6BZM-*;nnf}MQzgfX*U>N($blKi2ZlTWB`eXM!Qd6afiFq7Gr|$Mw50@&&Cdo5DA@#7*Q=Jd>iIWey ziql?i(*Bre&vy}Z($4Qcrz7RF{E$DjhBhBtkH*IqC+-vNKkOKGEju9JAMD-Oi)U+m z>ay=g`*Ek(3G?}-UG$Ze?`7Tebj_}{epcEsLZ4ziZ|i+-yW>xvx2Ap4_MfMOa6btB zz2BI1yg4uMIGGMzUhl`YKfZSx@q6`;;J(=8PQG}ROQ)27?Ni{)k=m{)Z+HY}WJqiIWeU@?$Q1_%T2jW%-G6Ttd`IyYwAC z8u!^>8Q{^&QSc*`9*vJJR@^7XC8)Q(`dhGjgp@0|I{RC&i`dC@R@zD87yn*YI~jQK zk+PGF-^VpOnf`y$E*8Ho!`5LvoXk!Zt@A$!uUa?f__K=7Oll_`Q@jqSn9E_a4Dw~| zwQD=qZZ&My>2EXIW(-cSlWPnA(Ydzpb>DW9{GptaPo!<=`^{UBT) zSlv#JB*OK#C_P#^pI|590Ux-)Ej8}KXA88Gg3pG9vy9}3zy6j)*!dN+< z6#sz>AASrFHmjW!b<&R07LMk8mY)ERUXFsDRC+W%wpi>W^|qIt#O@JNuHfpllh{S< zWa;m64Fd5?GwU-h5o~sxogEeJN$ljdnw`vlL)yi}Z8FT=?g*`Uze=M1EpP3WLinXa z-|XD&BTr9iCq;X*YgymYo~$m<@0C|Ay?ps$oy(V>XV&R&HDY(2H^ELWfBqev%b!2n zx1A(^DCgu8>5Ok`-f|wLofP>Ri@iLW_vsIhS!;91C%+-(Tj`~ zoX>G1@~762@}u-r1Q9IKkeI2l0TGl@(Fp_d-Qr(uFVg;G(UE6_o@h1mWtFxJ0D!+t2rlPG-Hno z>YfT~zti!D%jcaIVXtw7Mn?c2Yk>0x6-|Cd=3e`w?zoo zj-**(^n7mo;>OXG$2=-|DUTkD~1>GyxFx}6O9T%^kx3jG(qILEBh z4>v?Q#P8|%57~C|vfeLsT)c8m-*%Gxp`0hy$^1cY_D#KnIS*0k(fCYg@52K=lpDBZX6WrnS$+a9e~CpkeiOBy zDay}=h4YNK-CwQynOj>KGxnV1lMm^~C_UBrP~XER_kdo%C7;#HkLAZK2wH%m^fRMu z?+cr8OkZp??oodJ-QtseQu5(Ft~Ip%7+a6V#} z&zqsOQ&KZzdt`i6+Nb2t^bkc}{dp;CUO(Z;nomE_GVT4NyUn<=dOJlHIIEws_U9s9 z&QRz-_T9@&-A5QA9pd-hW?W*oQ=Wd}rFF-?yUV_I#^)M4LH;(OJxv=A2wjP&ysIouLdT-$a7r3=CyQ(+mX~KPCn?(PuKZusr`APPAU$Lj^;f0MBSgK z^yqwKzAHOUz3sG<@WJj8Qm)|Yw3FCH>?C_s62Eky-k+CvRGo`hKAX4PP({1{P@d~6 zBL~?IX;#aWm}J2Eo|&4Rbf#qFf25tv6!dnT^FFWZeb&F%D7|M7(>_hIzk`>6kbf8Y z+dpx?ssGhcnGRjxKI<2ozyGRiKlNYqE9@lsK{+qIq325?u9tJ!9})aa1lgZgb|Uly z)qEw}Q&H_1F7ouA^R6Gw*!D~BkEl6$9ucUAl^$8nEho>4rS=Sm2Yh&M;g-H%Z%;K- zf01ZUMak#JFWxtr_o#W%xptks zs@RKzy{_0pr_v`9@`#T-_Vhsya##b+o*?Ws;FL#v=Lq{~i#n=2 zrfZE^AdfY0=;3)upZ&bnULH<)#77=`$&pUx3X@Le8nZ^n`MktO9(xC(hdvzANgoq? z|2fk~d|RG1CkZ_h}@tdo)sT?tWiS`@_262$6RZtJmMpdF(uYqFg8y9F}BW{ zLZ>|9Babl<^x&J5PJDaDlAQ90k38nMqKCQ@dDt+*UO3wG0_{fV}V^Zir9?y+D`Y4_9h>twx zQlW=@&K1D7ne2Rl=4l%oSMH;U%J(E6 zi}o0m-ZqH(yfme!()Wx_@IB!HAJPdot_ho`ZO~R9KDIBU^Ixw(m+pt_dw4iXP#8b(x2X(`}IlvJPPhj zl^S#Y$x#=5-st_qe;BEv9D5ntD8t+~a*kB1HCIZcOQiik66iB5-Yfeo;u~a`dP#=4 zF}*Ltr#RoYiT7d9yqo-Wo{NDX>=M^u!|{(xo`lGQJL%&0YUzsd{FBV(GF`2o(%-jA zyE14dmitJT^M3I>QJjC0v&Y7T#EBolMf?-_CH4raykF#{^ZXOiNxIEj${(Ib#MvC@ zpHQx73%CABmM<%Lu~On8ZEvQ<-sxtKAn z?{@4-S$>PZmSO&RJ#-aX@yBdj)-Qy&%^2xef5F<($@*@^oR8I^c8jSAvZN~lP@2~hC<0OBu|LHgN`mS_Brmyncn-jX1RHUZ%uVLdWjdD(W zRQ{RBS24de=di zCq#VGS06rIM$xvHcoJyT!?d;Mx&GJ5uWbL>)>EAi^}Ul1n$l}r`0!(ZFxcBYQIX&y z`qrZ>Kbtx(e)|)nDZAZKozKJ+`TGlelpdRpCP3UL`X8~Y&i)2hHT*0-{FMQg3 zB>Wcqn9{@2k0E~Y;RoyG$CyX)1h04}`Z4;MUD;nsyF9d`oU=9Zvb-iFzr4b<)z3sY z{R`jkxaZXm8Gihj=;nW`)Cv95zwky!Z1BGgnGW%r@?)ld;Xd>Cao>In`9nD`J*fLJ z#XsxiJggrQHonS@!=D- zofLd}hewULPd_th?ZHKQ{D#!SN{?L+yZSNkfDd}$HokP3)($A=ZwNmmY<$vJ7e4bg z7#WW_*XSi2v-+R7_8Y=S>8Z|#dfv$geW_(GeE2aySmqNTo-<0+evGgg?>>61k@LyN znI6B_@KJhfKAH&p80@N-AA?^)NV$Tm(~rS#!H*gHg7jmEAK$fZ{V`#V6fEzxB>Q97 zYe_$6vURHTU&hu;`#km!J=8MS<)XN|v{!@|{^IVA?|kA9lln2yt?|$kCG=nTi`P41 z>t+{ZI>hhFkGb#{_nN=|)3+Z({!q?GX6kE()2sAy9@Y;D8(-x{w0?}p*Vy39Lej6D zwEF2(di;H(oGU%m{TO(_hxZt6`Pn+3uzpC`_~b&=c2e+J@bJ!sqE9~Yu^*rT;SYiXLj2>vEB_{20Ri-Oe@EJ@xfT{TLTfHT_ASBd($f{m&j~j%yA6 z)k=r>P5CkXyDc<-&zs|3)j#4rT5R^ikw27k@`>2-+j_M2WZ1o3!^S6FQSVV8@-;U2 z8>8g29?n|tg-VaVZ}>4vk5>&XU_@D)DrN>?PG{v5g(e8yM`1H>Eqfzo%4-ai0 zuD?v_sm_P`#K{Lv#X%Q7{1_mNviwB3242)jPakx*k+H{n>N{?s^k{tS9K}vjZ+qEE z?4BK3_5!X>JBeMyPR1XSc9Qt5FV@vg2KIo(xW%e+?qDbNvyoFjk#@28C(AzmP7m#j z_4typ#@Pv%?RC2G-D8K^>pgDa^_B_!zdq`trXBp$s7!}QxU!SW_B!7D{YKw*lKi2Z zlTTzv>YnB;=TWX<7Wr!Kh&EdCm>)}i5HjzNYrmmwCv81iIiFxB;Q=4?z->I)JJFBX z0_~*WvtYryN0UD5;gOJgVJSV;`3zb0iIWeU;&WX1@MD0mS?#2#lfHZG-1fLnKPJGV zm!nXAlpc+bEfzaTz3pWuv3rD+E4VuCBz6%yIrfOOlf)nYfo>w!WSQ&(f)^)DTTqU4mJCpz4unGSHHN> z|A8aVF?H`*5a|%iD~#ND#eQ3t3y1EhaFsex?hRWC z(OyZIkE`^!mvfmTYCatAs~4x_e7!#2Quq82?|%P7+ZOU3_EPRQVZPThqS?b&>2c#E z`H1;e)DK?uG4(4UIt9&#pP$+@tpsqcReHm4Wldkw$VGhI0a-oz}*y)L6{UkXkee$n|r(&yPdr4XFNUdu|4 zJ13iu#RERnH*m|OUHJsw#4I|0FWP=s!DqpOtw%FH`J_VlHG+@Q0j4+cASjWQfoBum*+nXl&|Oy z)z2bF*Xyt8gUZGnz2@jc}D1L5>9pKJW_)7u#J_A6*tIFb_+`ez*V zALh8>C#-acJ5+z@^e-=qib7f}7B)VTqV_99 zzQ$tjGfE!qJoFOgL(H!ceudJb)rV@1P1~Fwo9CL@XX(HNPNV~V`PNJHe$jGkH+aWr zGjr;l_hBP(lRy8ja-BMP<|h>8LvT`h{Bfdwfm7U3&m?BJaq^QQ_j{t`B*qb=^3z2f z^^X(wH!|1xUhZ{T8cdR@N1@Jl@I#wqxCLzMj{QO>^+oHi_6VB{M#uBh}lI63^! zti=O9r4g&1vC32Y0N3%L!2McL_M1e{CuQV(_M23%rM!Q|UMfA+`M?7{>3b|b7Prjy zZhQ_6!DsnEcLY1Gh<04m_1uPq?>6E$G{)~#dK`S%yTVb9-~uP?H2kug-0Han-Y?1| zzeKl|JleC6WIfk!q#9JuDLoEO4nFXJ57`Sht_ho||FK-p{U7Xq6#hQ*%kcM|>wM{t zWZnt>0`pfY{e2;i_{d{?0X@iLeJAo*m(Bifv`2`KJl2V$2RZbYvd)xo1!ww*k38mY zp@-*0F7tC($LdTU@sY>8cJ%PP$mM-zzMWGZ@sY=RCG;SV`Lg66^Vyy9h>twR6VQV^ z)~Vocu)fSGkNC(-TI&(fgB*CUUWRc5r##{#k9``@!*e2+dBvv2a_N{WtBR=v<*7y#3;DKCtu#UkgkNC)AKPdFj&bH?% zSpD$KcW~w(@sY=RM)V+$=cV1xel^bY5g&Q%hlC!|1z+Z0u-?ikkNC)=KNvmaAL*kV z!~RuHdBjIv${G(v5At|!xFo$`o}JnSEOoaw`#q2Ibv z-ePlbgZ)3Tv#s}6@2_Z{c6poGBNN^HGV(FG*4oogOkHw zg$H~_ijoi9oLVeCA=-T_2QrbI?Oh)}MUQqlXGc5pqtQRnnhvY(Z%8}Be@!>W*6!#0i z4lZzFKX>@q5v(s3r@-}Hl>S1L{lq+H(!*ci3|H<88d8pw9(PXgfd_oh3pcI_Ej~>! z|M9p;$Gv&J%)07leRE&X5I#ze8=t{rIe&ulCOCg0xzFR}btjxl;Y>%>^Cwz5R$R7n zc~92IITTL+we@}ac>w55J=d7?C)$qu+UN=UK5mTPV6Dr(TZSY5F6ZNA_EP%-h_oL@ z0)2*wZaEIzdZG-A2U+1o`uMOJCH zr7OzwC*qgNbfvG=-?z&Cpg}XS+(){c_lxI=;{1uykEjoX#EBolMf?-_CDyZ4-Y@df zdHw|HB;DpM5|nB{)-+?rZc&-tXBxLM|T;SGk^HN=9&*9^uPH2;n7%ZKPw&L3DkVw?9u0#zu#m2 zUi~B9SK*(LKiGfriP(vy`q{x@=dFc}Pr9PsCrIRLEVi|gx}WkcN}~6tc!07u-giy> zMdW*V-kYsQv;PzJKY#~(kO;T*i7tGCPxFmM$EU5_FB(;Uo8Yry;hsk3K7V}3r&>e! zC_R;Y%(H_X?a)@MK5_Cv@5qiWeE2ay7#*Kz$L~d*bivwXqq%z;!$;|<E|2d{wD2W z@@(nvCgw3zB{&ybyqmEeYE<>h6{I2Ze zn)iIb{QVyD_v#<)B>6)*AAeEi7qMIC=;b`@zP@4OlP>IJROd96xel&1^7r~H=Rt@8=HuW#7+GW{`gy_#Id8Pz#6f=}8^{|@LTfqk&@IepU@_V`P3A`&>^PbaG<}-Yok^7;)@)O@T zT=`LYCgEe%_f9@=8ac*=4?hM7n{{7cVKWA=={7Px%TItuFGr#LC_OeGO(cE{cGb&| z!7m}CTw%wZehhvKeoW@~(vPv@?_W1RCf1Yfx-96ilcK#Z&o^KnC;fbbk#|~t%cU~R zAEJj^=DJ)Y_p#dhR#>)or|$B=WPVI+S>ICYxdzM**2q3Wzw~3?Zp6yz5Tb+oG2{>B zym-9K9}-+TNH6DM{gANnNmpI`m{@5v=d+x*wuG#QZ9Ucf7T?@+sNDfSk?W^ z?3{4rN9n1~hx*>h2TsW^x$xn~0AVxxF*kpF{%FxBp8$_uj)EVf^w@kfk@zv#S1&&X zzl6{(SC$=j`Z4$|_%ZqWq#r~4+#dDuW4iPOX*D}E6a5(de1qJ@(k_oLkzrzi9%`BE zaxpYlmN!D-M|^hO4=3%9(I3l2aKJy=eoR}uAk!fP1@~jfAIf=lh3?0+epWB%Vf~P> z@m03T_I{-OF|mzC%BP(in;otmR(h)YG4Oy7?=jrQ*Xn%2`XOQC!>1m8Oz-d}Bj=M( za$Yz-N{?L+yZSNkfDg|Px7_V6e6~*se>gr$Pjx=j_f9@=N?hr} zhaUrk&FsgdS{^d;KFd#lM=wXgk5PJTKAK4U80@N-AA?^)NV$Tm(~rS#!H2x*s7N69eLqla4Nx?HsWn=EgHVjOtYi^oms$AleM z@@mc4^DhQ(v(h0Ft^Al;=U=$R= zpGuFvZu>+WkSrd*3_nYev#%J)C%3I6JBIROdr| z;^bp<`n(Gtehd&sS$?9NUoPff9F<*a?HNJmz~7!5mK(; z>a>&CMeJnj&!nBS{9>i;C1Vf@}W@>|bNYA1QF$>e+e?scA_&_BcYvJqRiTS2BnNKkfihVfhT_ph1h ztNs!1k(j4Q{!q@zCt~M5(7fe5%6+s&zQ)$gEM$DnvuX|7Ua|FP<$Qvjga>@!0=LqL z3!g2}P6|E?X3Z*;eD=HMEdQ4L@*7eQD?QcuP@g#Ypl@Wk3m<+A5H_ow6m`;tUtGyPOL@1|IMkYn6QB7Pq1Ay7Fm)^{~7DmIqvUfQX)@&avC>nW4?N&QJp;G# zt6cds!Ft#_@EQJ*QSw=SG9lahN{<^KHP06w@S(DS8`p%*v>)I96&uyLkB)J6u=)<)mYibFu@)cq^FT)C%KA6AmkiULdWfRZu5#Tq*Muc& zoSpFSe_Lbpb>CyO9{0tL&2jFd(Et3v``TlJFPGCH(%E|4XU(+8&*A^J-2DBdcCNib z+TG+2<&AtI-uS3qAIg1D0-LMY#oepIY^zVQ%rM&eP~>ZD@L412(QaV>hICw>Cs?^2 zy&_SQex==@^i$TwUd?B z;ymvsAIl#P>W;^vo4*t7`an@9egDp% z8%2-t1J2_dd3!YHaVkAJADQp!JWlFuuXZqS7JBIPQG1+{!=RNyyW!*3Y)XtE%aaV zdb|)D{G)5T`;rgrSGeQ@+n3KxuJ&wpIk)nIa-M0?^Ck5my_`!sd060cC8BJ1M>!59 z^7QjFzhx8~G!CWoXytr@orDK`TKBNtUyEC|-;K|fcbwfqBh?^2N{@q&a~-|K z13tywB_Fu8-tWfe@W6ng^fRL_KfUutjkwQ#k!p2QwcqeFl^%`H1V08I@EJNr^0CX& zJ#Kss3EU89RzF6TpI;b74?nY7p4ajle3TxI&&2UJiwAttmR*Kh@#}7Unqj}nX#LDG zpLvfNB@aKd76#Ssg^$uxoew92 z52ez-7yF42A9?gkqX&7cqs4x){+)f?#QRg;pTz3dMjq?&(SscN*;vm@f3!1w#77?U zut+D*iCpH{uwK}iKH?*f`2^_Ud6CQe%)B|LJmMpd`PAq^9^;gD{#o;5obrf|Jo=&0 zgFNQZQXew^-6@aw$YZ?(dXNJT=JV43?371*dBjH^`(&Yqb};!!JDT~?PI<&f9_u{OL;Bc% zCvExj?BnCiKjI^gb-n1Z4BzkyW ztw_InhJ<;7t1Hr*x)|_{hWlp~oo?f0KTg zN_k>@m3=(1v$@0cb~y40o2MP#X6|e-B^K3uYMw9U(O>;`ZU`CT2Pr+8A0(w$_E%dx z;FG>k@`0N(Ig(G{W?n4pIslcP3%9iTl~X13vLS$;Yc4 zNj}Zc4zEx7DS7mh1aCR%5aFZrRPvcPo&XQ{uwOCUbm_5}ReqYF9bO+kNqb)ny~NCN zW<aO0X#@(KPnMR%TKefZ=&?9VhZAY=$1rKdU{_VtEO_PFZ) zLG#Ryi}sv%vOVsxpX$Nf5Hf_1(xdUQrHlK7{{|2E6s`T&;bup$zF2$$*Kg7J2le5T z@t8->d;@2G)OrmcrKdU{c)$mJaO0ZL;uCnnL3I7V_2HBA;KO_a@*!vlAEn2Qk2)`c z^C37dBEGMjx5POT&UCn+7qM`~ij_VNiKq~!Ti;l0{BnK&er`=Y-ag49EADb|c>xx}rQUVq~>U*T~28_pP$uV$e)1_mM8={o;9| zI4>e)`=dhQ#E;-2{)zk&=S5WBFY?lPUIghR-R3Rj56>gwY>x9HC|AsL$$dzcFDrSm z#3K)C^Ff<$eF^(V>gPrLfA-!5PL8U~|E?r}jVJ=%1`&+HV#^`~hRbMBl9>RFhJX-s zR5S^Y&{=Xb7aR~FikC+5vaXj&78P}ky{_x>_p;8*vaabKwAVF)cpH^fP=wY+WY^mW zDsMe~&bLmT(^Wk^RcDgkto}HudJ4iu`-O`lN9G$hT@r4_m^&zppuT?~4xUdVdM^ga03xXV+8p@mp8N*8yw) ze`3}ij>KnMuCR5^ay3h@2laLCn$+tRv+mhBnsV-%t79d{KFq$5nURy^|BWXhJ#j_G|>VY`g@48UIslWe>S}~=cV`@%)YvkN#V&o*_1U}#aK26=;fLq_v zM0|Q6j`okw_H8%Rswv|HERr{|SUdL?Ck zmHDB{28B-}=YAj~$HJ#=eh56k2Y&!=rB^25b7BsBe4YQU@bT4u68qV;_^A41N;}8- z?~PG~PbFtNXXH5eq@4c_F5rY^gJ1E`B%HGLa)ZF%Jl;&$(evtsl=aSYbj1|kt#B&l zJQvZ(ad2|lIpQbqnOy9|3v+CI7>CHZvCe0_AnR#;*^$IxyACbvY<}>{*16DDt%cZd z{`<%(g%9uXbg9H?5-%7zt|XfyaUHmT6Y(zijqI0*Q|9*0-+Z3mb?JiBs#X89vysxz zWj?R+q5L>WKi9}f#tD4D1AIUc+?tO`#HT05A$;z;5q$dltt;sxgO8gKA}kCBsv zkJ+C}zmN5i73Ulp`pZz_aO^8S4=i!R1GJ`0@TA2R=~v@!rMx z-5mza^!MriNBs2sLSfAA|M&IE{@HLA(cV96pG(DaK+8*%zZyH=_FMcu72SH#Hx}G@ z$tM@=sd)vFfA8B43Hz!C)s-H$#&cixriJ&ut zUS{_b;1BJce!_yVhd9gIxF63~N%5ag=7yXU|7qkn?Q)9$1Q&1`8CE!fpR1O_sTcYQ z3McRTFjK~r(#}tC>u0KK{AVeWW8u`+PXG__nRuqc2i#nF8lN8MC(H~!ji}z3xm7j5 zJfT}3)4c{CBgew0t)BoM;KMp|aC7DBb}n-O>aU-m@bNXj!E+W;<_QnwhMbgk&d71_ zNonW61)NX={J4fHoHE1Yv7azA`n!)B0&-I9$jEVUa{3AE%K)F!k)7iO<_WXT z0V<;l}Ju9PT&I`;DbDH;~J{*>4AB|nZc(T)tenJFi%K5WToI^I45j`PX*6G)_p$FM3ku`T16U-es#c zu3x)sbLfk5eEj-<=I5J{z0(rrP%)t>{@=*4{l9z80C<4U@D~(5;8uP~53b+-9lJMz;aRUGN$h>@UH{oOCbjAlfz=xLt z+_;AR-MQ}f-sWwm#0(eH3(i` zFQnudBu{7YNmg0k`szN%&+A_dMq5^pDS~qpz=*Q}Cg6 zEL`meA0sD@PkWxuipB$c#y+j^!Hz~2CE>I8<>?grS+(PD>c!fDr^z`=@miBB#_>m9 z?*|_v$Cl*A*nheJ}<79Qt)BEuKFfF z_!v1!_^5q-cZWeE{apIJ;6s0SuHxE3(2g%^ZHMEz;(OdY;*uES_ig7hPG@{rX9qrouXb+V^mtHD#LYhU zn!EKSqv)PsAPn10LYRdPs1K3g|C;`}*x>z4LgGTOZTC1|K7*Gd|z} zKF9+%uAzJT`t4#$e86}R^^lcY>+fpTA0H08}0S9$Zh;$_pIOk^}hGjZ{D)CHugQWu5_fP=!DLDRd}w- ze=K^5?$1KOE@}Cb%5O}(SJ9CV+O$hH)4omKhpk~L>epS@3q#-Qw;MMoJR7gEacxbN zhCm3)&oBR^zGPfBe!tj6J2fKX%@%K*hw2hj(6AZb~M9t3>0W$-mFK z=L6#(`sybKgWxGc3%>t^kg9cHcOMee;w4UuUwHg3@@GBs&Eo^-y?x> z>po#oo_9<5;>o)=CwNlpUA{ZK;2q$d==&%2PVlab-2b3;#?V3IuRHX&*9O4_2WO8!>XXO}^befU4? zi*H&MuD#ncXAFt_V;}xNJqZ3VsPwS)KK9{>@b??T-#dTgomd{?PW=$8QcsjFo%f?H z@!U&8>({K`$d4Il-tvf?tl3IXOkfH8U#lUl^e-@3FJbFk+|-b zO1(>tIU|QyHC%TVn1A2{9^iuX9aPO~0%C7w|E16h4n{-MaPk^@m*d{2-XS z5PWD)TzueM_??YUwzm^*L6EmRoWy=)ti+%Fe4u{xd8Z9Ey0jnkm@Wk$BM1AjImvyJ zvx#=w&56X__&q3g1+KI8jl%El@Rh?a;wPK$(|%INP>ny>e)3Cqx_M#5FFTATuIJwQdD_&co%>uHA@v#r=hT}idu8yN1NR>IZ8=-6sm~gm zZUtcHMoyBQn>9n=0Y1FP;5Ig%girRp(dTSgvw8J~HLF+V88m2Bir=%A1fN}tFRm9- z{G=LZ4A1=gu)=3dp9z^2A0sD@kM8fs_5y+j_#hA5xQ1%`nchScg+qGgic2=<8qkS& z%>+KLtyiP|WF#o@OMI>>@rIN?Vn1;?*rpnfk%Gp4XzyKoU_beQZ9lAy;P>fLpY5B^ zI7WQNqFGO=S5nqS%+U|pcfYcq={`62gO8CDw;%3Ob28H3$FHWvF~lX%sNK_k+>K+1 zTcSATwWsw*LO=k@L?QG@5qzZQ0=BGnOps?%t%kq`!Yz>xYMRe}5k< zjw#-({BrdjicZvQn#42yw=o^ZK!1MBeYGEaXP@vnJNNfx5`FIAnw9G=jdRQYUE~ih z{mQ~{w|iabAv{fg|L4ctS-ZKqF8saohd74%!OjP6u;ZA*-L{>F?PzDlQ~a8@ykW1} z;qo1cbXXYDsHFA`l>z7x~$O%8D9R?5Z;XMYozFTd4TH~gf zy`&y@%~4+I9|XSVEd-zK+Zwe>5LEUy^9a^Q20y&KKz)0_UgQa_>A-3^FRMq zNQq-IJZfSQ;us?*!pFK_?vpqMznT`u5SKu)D{yU#V|3g?98-N*#W9qhe6k(K_?)+x z_CmQ>jhK0hN3<*0*NS6CuTy?`>^4OUZ?QDVdb;>yA>~))0 zhI5#kuT11R^&i2F^7$B`V%&fDfKzyo}EesHUPECHXraNa`j>F<9@ zt=eTfTs6*Vc{q9`}jrtWMiB5le+xGp)=|yGbg=~b#Q8a z|4-Ua?q~VQ;#ZVk9QmB4|6x;8v&r8I+TNheV_!4=-jnaHP1WB&d!4Mz%{~*J_LhnK z=CMo0gRR%ql^&wE@srI@ts8HC>b$P!EvO&toO+@*M!(XlcD^7)-d~P9sn;O5q+Uvy zx1c`qQtaHwiQ9R5I}9G+gM4snd?5j!z0gkzKD!o=)Jt8?ACKmoS2A+q_ylcn%!qDJ zTztT({9pn;{Fs6Es-KiLY31XeSZ{Q>PBFuyw~AmtMvjF~#1=nEyPf7I@q1A04P0G6 ziC@G|Rz9NqB;_YJ+J5r9F?U=%L~!Z)X^)IAJAdIh=LND8E89o>q*{K5pL~qvCnx?v z`9)}RgSsBxsHiKocxnAql?ze*Qqbc!!`fed^@W4ue>(fQLqV`1{I~ma$%_21zHq;= zO@De#=^=Vv6zZZrU;X0g<6r$^p=&=$y`yhQ1fApxw4pmd;_mP{I z(heIr>Fx0H@D%|M@IgMfjeOR|XW^O+&hHKlf;g18ls)a(SM#ZMT-qzS z9tT5fR=FO3uU&h=ic711r{d3nEy;1Hf~x!fzx~vo4mMwOXZVhHUa!$T$LZZE^1uAI z*MxEC)|%48F8}sZe;@w7If_&5U(J=^E`F8z!LPdYRQ|5*SIN1Nb-+zJE_0{ddog)a&1`y=P~$%l>CM=ekBCC*7|KKHvd9JU_T`4c%LF)d@cR{b$s8&Y7aLhqQmR zhsdLyoV?j-55Hsf`nT57w-%UEs(achJ2zwDP|Op<_Ru~6=Ffl{ZR`Qu;In!Bl=VdO;Zp%q8sufPL*DxXmJfLq_klkmyD z0Bz~U6|!6*NA?ZgN7WDXHI5?q^!Hy`tL&zJx{;&sNgGE25Ad0Iy}}3FhVM@oSHcB zxsS!?yu8@Y_HB363SF)*oE|FXZtyX3qV_GkNslkY_OXBm_>8sn$Wi#D<*fh@@F8vjH-o(TrsIRm?c1~$p1TS}*Q$NUd?9*%kh~#`$HI^D@FO1ra@a@2zG(KBkxK+`oWKJ zWcF*f@zdqu$NmlEz=!oy?Du9JmCKLv@MAqY>nY*Gx?|R1v2VlWM|t?Me*rn*06+4! zu>Zj2M|t=${(&6&%kU!}XMMHHkMi(ipD1$RLw}p~*^GO*{3s7U)^8vO{djNir|b`P z`B5Hz>@!9V{Ft{VzGePj@*T>D_nGqWBhM0Y;DdgwA7G!Is~_dz$2=)=&<~vPPvpgN z`B5HztP@2J{31Ki{bJ@_+~=h{{McuToQR)ZA4vSkx?Wd5%EM39Za99a*9*Wesy`h! zu`f8TpNy-KV--Kq_bwG@!Plj|)6ZWJj_}O#mVb)pY({=uysPA8>P(Qut&Jg9Cs4e1(s%ek9LXPU+{{XmR)SDfk#U3ZJxoK6rpn<=qOO zG&@rG^g=&>X7FjGtowZG^r1*B0X{}fXMDf|e9C{L@Buehh_;_o-M@Ex?XRD&@bR@? z0{sgq_#Dg)IVt!UISL=ew!NPZ9^gZ+Z*X(f(e{(Mf%DhTSNQnqNAjG7lyR~rb3;xV z;S^TYhSt6_Iz3Uf%NP#oixZeQ|PN zSEDw;jn<50`Bpx`#76cnov(;hjT|dhZQFwh9^eCaaI5}D0zP};9$CRha$q;2zFud1 zh+(O(ZYlT}Ii2yLJ#q0tUiHTb`0!%}>eGIFu2~@mb}^-|m*G(pi-3=jW8o8(k^5xs zm-gG8o8dMM;_4^{0UbZ*0J-ir{Osnn&NkIm2LC(Dr>>|Bpm z>-A}3=gUL81P}1x`N3^q(#9w6m~-Cp=tmsmYfO|gm8wy_b@r3R=jX%6$Wi#Djak#4 zxcE>Hg-_Y|-@i)pZR)41G#AEc>rlxl7 zwqH$ZKMCFIaxUrm!Op2CYNGjR+s^aGvw6#-R}d^{%}x30Pm*(~8QEXwcG&1Ky>HmL zkrTJ`&{r;a`j^9hXW}Qp1ALIidp+?l3Ha=V{Yi2z6}!xRS2;ePpEPpf_yleE(4M&X zfYaC)6Y$~34Ah_f_{}9j&ZY7lyXQLtz2CvUgyJa5jVyyYW9&}YEF@g-cNKhgeeLSO;%@SjMov0D zGVV(Iji00)rylTo5yf9-$$bF71`GK4>`Ce?r%BDfNS2ZTwNy5Bx@V+J059&FAN7Q=k1$pE|r{J?|@n6*|DRGZ` z)@S47eEkL^CytN!gYaK$d<{In2ZI1NuA$m~GVh)6xd-33{p?zNZN2#)*bh&fO#5PM zjg#+4{ww{4xEyR#$1`C;V?RyZ-n;m~z40U4e)iV0K3hIx&Jp!eO23=EmA=mUG;-qh zL#?YdwG!v!SKTuVFM_ zD}9Z2*tCvDrukORxn9G_vFyBUo&!9<2Mxfj?>YCiuRGlf=b;22$;H)({A6c*MhEi6 zF-A^je1>&<;^G5Ng>w?{;l~Wrr~UXGUz0ZJrk}ohVfFUz>?gycw~7$Q7&#U`5nH*h zHNK|X?=(M&--BXT;7U6z{KQY<7x9y&x9NE(-S4liwf$u8=2*7R{uueO>c0;E!S2UK z6*|o?L(3Kqjjj0Wom2VAX|nD5c9H+l<3APl@9(TBJ?x@G%U&A({)zDS&L8|F^@E*H z{=%-O%0k=DduOkzIuqO1UR9~rb;Ap4g)ZCS=5hJjVIwEq&Lxfk5AfkV2Did967e}P zYmeV&JM6PRDfn#P_O@E7OMI%Q<-^Cw>5LC}fDcv&Zd^lqDW_WtA5S^m6h5B|}{ZF*Gr*bw})zcEpzIapfxX_xfgGq$@e;Zsn;MlzFtmg4^^J^Fs{4k>RXPT z9rlNHyl6D)?wi!RDF*DERZ!~8*Yxx%NEbKQ}V6XBC+Ki~mA_yKS$oRWl3=H>1|%YHoI z<9pmn+0VLqIc3~xj((5&E>`#q=ZyD^oCu##LTkRiMQPu_1AKU$!EN~YN%)+Q8K9vx z+0Vs9H$@i&67Tt1wDdiK#TRa{m+T*c2k zXSei^PaYkgy!r!sY@AZ$|M7iq3D?lPtgiI1HUHzc-#`AxZ@;zcbxCDiAG8~jhuQVg zILdA}bk0Lt=rpc+_3R_5(-;2e!df|{UonkG?074F*T{+5jl{SWJiur4@d_VsYd$s+ zpUiR5;AL|?Ey?zKwvOPlecO9$m6W)(W2H~yNANLn;&D+BJo@OhkB0xQ#qWX#_zZtt zwJ+c{aaI8olPa}+pfj?*Gs#}{}?%u|7qDx zt8X4#cL^TgQ+R^1A8>1)n}pBacQ%#6=ZJds-*?k`g-DLVCoTU6cz_RaEx5TBt>d@M z{c^o7cJ<1fXIHXc%U6CDg-?II5cSL5C--wr`xciYW6q4rC@IGOfCu=X1-Nky?WK9l zR=?cSJf^~@6t0<@*^l5O{bTaf(LZ+Ask2U%{9>$MCNE&Te=Phc4?pr2Acy{Q#8<}| ztWS6OQ67Hmb3hLK*so5!!oGLOmn$Ehm-6r<{}6KEgMRFrXPvLBALZf4I52Y1kGwOq zH{^?Q`B5HzjQb;p^;C>Eu%3$XU-x+_4?pJNkb_?EBcBfA{VqSsNBs0U6y)%{@T335 zI87TrT^@d{n?MeHm{(_~D*3(fd)!cjWS;Jp9<7jvV-*C;L&!Gw9+$dH69eh@1#t@+s+lHv3&& zew2qF>qn6j@zdja^amM-bNNvoe(c*o4*bA__?Y#+Zv9aneyX(y_YdoJuJEHhz#p;C zCa#~Xmm=ppeylXt9w&l7w0Fjd7PRJPe645W`N~u5@8G_ylsLo4iQ@FcaU$>lpUNDC z54gE{XncBLoJis0YyOPqY^3yapUDk5Dfk#U3Lm}rsBN4GJiupiAB7LNx#}o4kBknZc)+GLGl_Y%?P#j!*mi zGkAbc@koUaxFzG$3*$rzA7AUAc+N)3IMKn}kdtCRMvlTqu@!v6f3a~Q@BkmqrU5rs z9c@3E8#sS?Vii8V#vyplW{UsueYTmAqwq-^Cjt-fK~Hew8mi-i9vCND*oxnL<5P}} zukp-2DfSbWW5$Wv+c(Z|0-veQa_XJ^A~SThS%i-r5!mBw*%1SuLL?{Nz8Su9pY(sg z1AMpx+_;8ne0pHNh{DIW|7oVg2ZvGtIVt!UIm!5N_8e!;arRu}WOeo&XVSUqq@O)E zcc{F2&86xDI=58&wf%O6>$$huXKqoV(cC>}&%J2XS>rccxTN0voZ4qN@DGX(>vho8 zQ_cPz(R~pLc1epbQE^xKN<}BGQgnD&(Jt9c`!;zWwuYssU-#@U7&30bbzWK-QFu0; zGX>-0En7n&+=pK7{i4^NIC~B~(2M#&U(w6w*>fX*rRrv#ZDemfd#)P! zrM5?I{oyws`|$XGKkFlda`xP!?>`}=#qeJc+_js|o)h`M`N<9Ag-gy}xL^NZOLnrR zo&PHD>ptNvJa5w3bG!q*6UBd2?*#8k(^JKP_Cdd2>zaAx~g(AkQCKIzE5s z@UGW%QZH_-O1(_{=0B|*AbE2b=Pi$35{>xWOCj|d1n;ReQ^x9zT=lJ}-v{^aQ(Z@~ zY9vR+s%bfpd0)ZDeQ!&@v+>Eh7b0(Yp5J#4WO?VG_?yoR7Nb6x8%-lQ9|a#HC%G>n z_eoz5JirI(;5IgCG-tPcIft-xlP(} z>H)t8r9A|{+4@GoTli5Pei0un2R=~v@t(x_Ne*QE&7X512i9C=Sg(5C<r?PploXFZPnO2wa}zg4s_X;a#jG&=lT z6^}x1`{32%3vc{YZK@m-XRni<^2#)}Q~o`zRTufUeemUB3{|NsJ%p9XF>%}BSB>9x z_(fgErPL38m3l(Kfqi~x#ie=o80IaHUcS$;l6nn-HTBYNihGQlxL*zDAe=L-zyo}E zesCM!oPf_>m^)DLS+!$py_m8_fqH>9bLKEGa^m=eKGMO5_Qb^pJ%(SEfDb=rp#JQ~ zZ(J&E(m|I!y6N}JqFmfz>qB6vhwA*eR$&L6uDE0=f@i?;OC$(S1PxifA z`AN!8+&ZIvGV|PgdyZZEtjDptlwWMzuIRv{Hl@DOXhG+sfG&FQ1N8?VSTZ=ZpWM81 z-KN!>uS{b+#oxily-nm-?m9AD+uo=tJ>(AKCl@{Vp78hQPPz77-XrOMQa{)^^@QB= zWxZ?Xt=wn#Y&vY;u(Fn{zjWmV>o2){<>oWjtY5Ji^}D80ui-kATCvOi=UC2M=SGfY z=WXpUcz_QN1a5sNC*ZRe`boiO`?gQk8eQU3)$uL$)h(qRHgY=SLwn-lgS_fU0zUkh zf%dAOls4(X2i~}_vYX;eBgeugs!{wT?RKi4)PAo>zfk)NaHSmRob58aWD| zv^Ajx-Hy2UAgTCL8=t)If8O%w<$E4V+N6(edcja5T04+7B8CRpDEJsT*pJOm?vr^5 z+U+zyiQj`_SK#XUN&F&ya_ko6Cn?{&+V+z^$6f6woZgk`PyRtqsoH1HHJ+sWNWIJ3kqHKS0-|vO>g8_cHY*X1P}1x`N3`U zWeND~h5bpvXVt2=?JRaVuE&~I>Z@ByJ8a~1#%DmcCoVq78(W%y4?kw0KJCZndH`vY zK6Phxu$i*=D8r*B76Bh4$HFHngP)Ar?a*x}d2ak36uSaf+F{`*{Ym^HezN*OZkDJ1Kg=X?`(&k{tN<*=FSlfa-uWZAFAs62ez0@uiP96#?_E3hIqoX; z8U#nyi_zNYB&(uU!ts{{`T8qHj%B}XeiA&u2Mxfjd`$vAd!e5ce0D7!sF%9Lr<@ZX zBd0Syv?ne;;52b<0zUkhf%dAOls4(jZ{1NVcZpAiM{gCuPZ~KEJ`r2|B<*%ue-gh3 z#je10w&sYR#4q9}3-3{WGAh5;_LE-EiU}QM)(Ohl1ooNpGMAcaU&d!Pq8kKRNf$7&#F>BB9NGzyo~n)8N*3RU$r_4_g{samnSEZCt-) z-KBYRqx(GzOWDuu^-{`s8M&y6TNFN(=jH3C895d{`YkZ+8+d?^z99g&(FKY4WNzSk z^(-G{Ki{iYQt)}Au9(p)6h73`bZHbHL~;~93jcQhLp%#UZd_X!wDHloEHc|qug?2P zOnk(C*VG$Pz1i&>XO&eNe(*7JlI$mpesuf>9^k|K0B#fIM0_$I#@MU~vH1%>_!v3q_{h90{X6>6^z*=pelawPyLCS@-j8na)BQyF!3R0;ff6V3p2Ydd z_%;1-`sJfvRQ+jjyb%24P`{C5rbm^C0bn4JPTi>~G zPxZ@1{v{v($WRdcu%`5|pWw?cS{VL*WB7aL5A6o^L%UHa+4WTIPi!|bcl=uY`nhtV zPri@ue!0}^AFf@vv-F+ra`jho_REc&^maq~<=_E6eOnYh;5PD#M0_&mkW%>g*j?;5 zZWVm``}eICzS|u>jhySDjGWH+fCu83@w})yTCi_6W&wirM^$Jq2L9nb|m`H99LlbFz2JSuZ+sDohf{C2tU`9?- zduYbNzyo|r`aK4>#+D>}vPKg@aL$%Bn^$jGRCDwx7%fq|eTRT@LCu9vAyrwc}0oQWWoXRxO@GwDX&2A*(i~kOefKN- zp?;=I!Na>YqvX4`1t5}`#nQf@R2j93tjfRyT!x34}6Rqg%9(&?itj58V~T9 zJX_%dZiNkr_+*}M70cP|Vc^R5K0bxd7i-Nf$9>&;@AevejGV}RVk}HQ06f5_Sl0Mx z+(w3y@W~uz_Uswq3ZG`Jn9@&+RbH;I;A7-i_S3eW1Uw>qu2uMe+t}qv_?(>CepJgA z_R~D9ClUYS>+CeaN6w%wMEw90o#z6?DGWYFj)hO#*=a?M2lxzZRQP~fV_qUYnfn2Q zm*rjO!vp*GKf4wmQE%=he2kpV_<#rajGe3T(YQ4?CgIZyXQ#~sKK=D(Ns#kVXd|>1#d=&2O<51uMKBHR| zKHyeek%Z5QnF9o$c`^haUwJYVKCh}5QpO4M+70EgA0tQMla?m~Jiv#3JGj9Ys`{s= zWbXg?94GXT&&GNsYTtNbzZ87pawHOAy}puW;%o2#AG85CuA#j&@7QYJJk2|b{jAz? zU29&6XPpTu_{jJl`|lb5bI0u&_ha8Q<9_5jh>!mXKgz?8ysF4yd=S30kBry5{3s7U z=6#R@Kk{i3?~|8P&IOVW&r5mujp+GBh_3;Ya>LgdA`nuNwQ`$y@01qdfd3^t=pm#`GCO=tq8i^3b^aC=Wl*+dvNd(3AZ7?ALek zpgjE8Uxgg%55C|_{(hGq<>AMEAmqT0b(D;MvA)ygM|t?Me+4-%KgMfV-|6zBJp5SC zkDNAsdVGO>D=t6ENBs0UIOMqe=!db6zm1|TwS^ws~FO-KL>x@{h z=kjAcEbFyg{U{H=hTgA&9NuH}Baag6i`w+l<>ALZc;vLzpC0#NpNgv=<>AM=9rVO* z*r{3s7U_JJb@K0Gh`d|9vKJ}>3rM?O#F@VxM)f6l&rS3k-}{Pa3#N)op%&|w9mu`%mc^ull7XMbx2&%T&v=8_`0-r<|P&cGJo%D zUV`T=Me_yrxX^RCAtxp7GjgJSQ{ub?cz{peJU#B9&!}|O(fDMJ%l*wuD13a4+wq*G zC@#10Ii4GG(g>eOj>0E(UP9vmK7}_be8A0BN8^)uT-D#a#LU=FHL5oopUfS3rvkyp z$cgMHcBkn#fd}|ZzE<|V)bd>VhL z@Bueh4UJC^%uCD=J}KjNnHOp}6&T?Y$?1#_c!1BybqXJFbJ(kO2g`b4USekOX{6ZC zQ{9Tlcnv;AP8^^1eaPSeK82+UA8>Qk(EcZL{N`_7LgC|UKL^iQNQtix=7yXUe2g50 zk7C4kX-g^#a!37)f@5+6L78*)(|>Y4Z}`0X~QaH?E-y zpI(@kSlH^H`o^akwQoGJUkW~PIT9PD%}Y#NrP?#_8Cj#Q)3nm-mwRA8?t<1ivcAU; ziYe0(F6&UY zA~IfskCD?EAMgO5;bDajxVdVOrzC5<>2E*o%-Byk1)t0TkyC--W8`$k2Ry(BcHqV} z6nwJk>u*2q%-ByO1)t0VT2!2-;A7+@AZ;g}HzQ}dqckxq|lDaOvAbG#! zlBL&NdEVl=t!j?tygFy~$lMFpty#V9@?hDyix&kWj#_P(A}jtWuKCk^ISay}(cicSv`__=6Cwhl}YJGSfDYJUhvMuX2ZC-Kl z8V?4o`9s`yUi7{@{3G_xezK8|Df_3KOZ)D)Cpx$C%#AD7X4Q1#$}3jq0qL-Lvx0qF z%00@|O2_?V?sK@;m1tbS{Y710b=8N*3+L|`41%W&4SxR#Ayxb0?>Z!?#Y=ceQ5k2b zzl;2*EPx|Y{q5Nzg!F`{wD9^hkdJpb68_gQDphifqTDHF|G-UwBDy?xCUOT7lcdurvB zzPORAz73ygVk7srPS;|Kve(--1C2~haRp6u{ViJi9?A?`@XK? zQtWHwxpwXgpJ#K1N2z39lOS>Frj}U}m(I50($du`{v3FvqNA&A+A7-Ne$sHq z!LL$J!c{(n@7jJfZ;qP0<&{?Q{{j^!ttMdcSKPgJygu}!J3G+NPTb3zwA z_<{O^4=fp++D~p?DT{KiOk+I7-@(VdP2^YZIWR`5lXtbZ!~B?m`m}SOep2c+>>JgpU5?+3EzQ>s8#$Jpx3$CI0X|eY zxDD^~pY8bUg?>`-*}mGNiN(q<7G9v}z;kVCI3<6Z(0&qn(rLe~FS>vE z&{TdhnOpw9iu{vKyE$yr|1_xduz8+z+JA??e?I)Z^9Mgk{b1+R6QwI(w(UIcIC$Rj z=;iwi1F6>_IBKXE&3$&Z^WhigYln>->|Dkm%|Gw~5Afmn!EN#@Ha>anDQ|i7lW}y3 zV|=aI6@2>p4;-p==_iXz^5J9TD16e^RMVcg_)rfM_t^O4egE^8M=#&=P|_xSbkhrl zs$JrP9@C{_7cx(1Umnd4j$fi?CE1seGIF_9vxH`qZ7(!9uk6sB@f|;n7<~z{kk3@QK*sC!=;d zR3}NJKKg^2VprfwJ1qR}4jJGVBR}~c+E428lc(AJ$=*FvazD#YR*%zu@?=G$ip=;$ z&VJgP&XlBnu=BB1c0CmWdt9$~_OSUs6Hm^REOt3=R5?GNpEPok?N{t_d1#m50X~z< zb)2W)>uTL@hkIuao8L2R)R~3*)|y@V$>H2Jmq%X-DgUcbbLp=SN|e~2fjAMA~KqV(7!c6*q&UzWE#difp~k$Me+BkR@3k0kY?jP%Kz^9M$b z)gHEui+~6CpaHmz%(CP0R{idU<0693uEhiOVwdAqjkELlDj@+jGr1qZ^3v55>`RwI+Sr??uE^ziT>$VG)pBx)desS{SiVpvWqNSaR zQn8aiJ)*Ujo@;19=kgua^w*DUtIvPjE5oto#|`a?{e&XF`MYO_^6$}lh^EF*{`!&k zhQFT>{@(e6pQL`U^N|NN;HUT>uI8|G-) zja66P(mH#&l&>8&aw0p|dw#;T!Qp&6_<#ra6fRfzfZOnQ>^Mf}mdgxKYrmQYe0;|- zg3qcQ|5R_L;6v`E$+Zffu~;sQ*lRQ8SE+YthmD*FpYX4;4njT#AMgO5f$J4M;5P8R zBz&@GQfb+bhYjpAVLz*mzNKDBiDULx6&I8?DtyZ4=CdCoC&DMue!v5K3SUw9fLr5B zN%&+xGpc1j9`KnN`x&p7Q}8)h<1@BN;Zw*tu4v>$_=tpd`_XuS4}Kcl8v7>spA)jC z#tLHjfO2ll^*e6WYTu5&yejYf{FNQ{Ox9&&A`_aOW^6-NXa^M3cPUJm_^OJr#{c!r_W9*kzp>j5-S6Y)X;Yu=hR=OsQm;X6QZ>~4)PR0knJMdwR&-3#2`;448J`xv&{}w#` zOza0dzz2f>H?E=Delm}IOgo@Na2xfH&#E17s+S{t+5}pEi02TsewgBdxHT>Z+e{ia zp}lwULCnZEZTr!2Yvyq+pY5B^`33PA$6Q*h7w<~8AI2T~?pO9h{Y;mFkC79%AHz-V zlQ;&y>c%nLNn8Sr+CA;Z-8hE0g*e9LGx;Zbe?s4POb*MlHm={Yp=F?y>YldB&dpdj z6mv+}hg7jCIV>M*#WAiXeYYq-J#drluig97uKVBeq4CM9Kd^I8%`b?2Ie$0U`o6l- z!`8I_%ny$DpZU(N;~44#J1>3Gu9wnJY&%!&@JX2+Wvl$$X{WWcA2Pi1y$?z1^o2jV zuvSR1^EL%C{sB8Taw0oV93KS_@M(Na;R9~NzevO+B7M&lhW@AM74{jGV}RVpy7f0C<4Uz}FQ%;MVwVlKo^3GXsBT56*=BG;5Xr z+&%ahIhOsj%`bol`1E~4;R9}CyOQwfg|i3!Bj)hO#*@NH#K8?>S ze88>mwj_K`$!tI^&olSpm8;foTp5OiEN0A*J7^~GIig-p8Rv*KKDoZ)e~g^Y_<#ra zj5HKJ;5K$|5MB%fsUfE6dW8^4&((;&$X*|G(aTRcL zouL{(=!LT({o}K0$945`tl#K9yN~NAK8VSYaa`8dDH*2!10LXm4&cT$w3qfZwc0mN z`C zADK^a`B5Hz%*!DMe&jo)KSthEIk!nZJTK+pM;;~Qzz6-vyUMth9tv_Ie&kWm z=k1VB!Nr5}@SD)y3tjBQqQ67G*H${%ikMT6t zW4Qb%4?ou5A;;y%_z&w$U4E2@AN%Z))5cH7^Q^mb`B5Hz>`s2%dUQuhadaakmJ@L;|Z)Qb@ih>{MZ+a z9PF0;G~}yfUyaL;^6+Ed7INUj^Rh38{lMm9DQ)9W$dNBc~Cz&w3iKNg_5nhp$U}XWnQ*IAb^~ z@HOtua~7j`OrkOKd9L}I>l<;OkrVZs66cM;1AO{!Q22nGtBl5{2j-0wKECFSc+P6d zyu|U`kduOsk)!ZQn>PXv@F|Wfe8A0BN8{52^F}jcKcy7=$vlwkR3P{mIg$Ou?lk=- z@Bp9D4=8-VEmo-YRpFCeTYvLLGh{z0;|_Lf=hjO1*Wgo)|$g%Kgn>PXv@G1VI!Ux=3H55L*FmE(7_*7HoU0>i< zM8<3IF>*TN10LWr@CAhrxVdU*`{{vsqZz^{#eOm`baE;%!Y7i`86WTfpV7N?`=;&4 zVIL@bdSTvZX7DLQ>tk(?^HjGYGG2p^krT(KeP0)NfKT-!3LkKD)lm5K!n~2f$5&oo zp0knCz8%aBIVt!UISL=ewte0RJiuq7s{N0)BUc@5KbZqKfBEkfKECFSc+O@DK2PR` zoD_VF9EDHXyb*YS58}a%YpBAf7v_x?w#E;9N-uQ-pR+hpmh$j@9~{divO|a-O_4j>c4}JkrQvlJw*1 zY2)Qr-B4?OLFIcJ{&z(iI&X2~0<&LJbbne@vb!&(zftW{bxiw@e^GS!bBcDyW%_r? z`>-`EM*SWTes}9$xH9h~-+g>0u26UmTxa77#OTF+=;huodTn0gL!<6^pci_e7p2ix z^ty5bf6Y$^^!q=&v2%TKA9}g>izaeX`s(%Taw*lEB2Jd)mw!@Ug^;h$O`o=3{8-n4AXx=ou`T)f7EL2LdH_njBL?+*Wny|W*)_}9wrDd*C@ zJIsE}GdHeSn^n_|E3a6c2c*Z&n-%QaQjYzYLC5`=?sK@;h1h(6`k&U94n3)ev9(U6W_7@v#HVPeS7{#w%3DKe|_gn z_xIDZ68W14pA+`y@2)95>^qzbBBI& zR|-Dcw~f|{DQk;djK*@FDPiPv#s@sW2R*=zYiKX+d2aOsJneZ__|#hcDxP&FDE)5y z6aK33KIO0QW0mu5e|6s2>kj?xwLxI!Ov8v{>H29W2V8dk!gJ0GvY$&ZI|$DqXjKgT z?tLtORk&HTztGX!)OGXU?RJ^EZ62$ho9n`vs(&@PP|*YKe9ib*511eJb2o(l8iUMP zaQ{qGk$=FQCx?B+#!jV&NW3W2MSTu9fBpCY=MQw>@7DF>+8g|e@3Gs%Fz)B4Of+wK zBUH7AzV@0)y#~SDouw}QRXOJwNJfro5A|NN_PsLteFY!)y&c|W!0uS&(KJ83nyNyrYWkh+)qaQiEe68gZeER!m4^_If zAEU?gzJZUCla7y!Pt$(WucIADDt-^@`iXeIPWVwCe(*sKe4y~-J&E%x%n8>DXn%7| z$Veh&euuB3>|u~AJ@#YK)?L{N zbl6v8wH=opH15Ww*>-niE7h{Y*8e0f{aEW8>n8TK;?l-jRs30+P;}z2ZE83rf9rdZ zibtW}eecu9FZ$_UhH>D`uA4~KCJ03Sr=RnydJw#KQ0Zac`Q0ZyE&P2l{Jrx>a9=L{ zbX`CARqBb-12@`!HE-OKw>*0JKKoJXHCz!jSWFo&MJ|-JrCfJQ@vBA-epP&i`3FAW z0Y1n9x9SINeDc~;-ty=tagX%VeeD4fd{(Xc%wV(2+=~M_&$cyk6h7<$T7SrO&kusR z3&Dr>#Knht7C+nvL)G0Bml`?P4^O73;3IJ)?Y0|7ayNbt zid}&#aiZ|MJ8UoUi}*>GPw5M`pX`-0K%N-dqJ0L)ewLr)IiS_IDL+~HJ4N|>xAgcA z|BZ}|Y~53SQsf{1j5mfl?3d^Zk6-ql@#B|WCpvcgVCU2ac3ytBT`!ea+IF6I-Gskf zCw_Ajt2%vLty{3!J<>(`7NW#?(*H{bz2lea2-z^!?HB0gESDtTQu;d9<8<4+Mjk(_uttmBy2S!Uo7;qy*~54bfhOu}dH%TX-&Y~QxMR_b#7 zXGah^{0KfqPUkpgQsV(WwEN)Zic;;{iJ2E3`CQi`_TwwgRQQb78nO4RBYFU{Ar+BZ-0bqb#cYdq&nQNc&zNBVihkM4SG#z%-Bqw#3n zua3u$!jJOsWBomHShvDDT-GzOe%|FrdH6A3f*kaNALFB}4|e%c9)7HQL=N#UeDSZ0 zzq-^wHKMy%BKl}^p^IZKX4?osNAP0WnOM6Ja z+~r4k_%WZ49QZKbOFx5k5iUQmK8H zEDswj_QujKjr>15E`~p}cjDp&VUH-B)4pRi3#PoJ%x|2xQpj2q}Y$|985-z!Y6Hf4?MsJJ;9A@Xz#?u3tR1* zZ+wbT4h){yFQt8p%Q11W*pGZ-ak0+D06tUYWYFuqdte>t%;b=1M)=t6o87NawV37q z;A7;(+c(2e?vwZcJiv!LDjGMgp&FkaSO+>YIb@nCy_pGZzJKID)gXAC)H zn*Azw47p`ob=({>a|hR~Tz9F;B;(%O>Dqof!+z15?A#fYE&XKo7Nc*I)2w(pBt1MGGU&Mg{;S(x9NGc z_?Fvjj&wbj8g_Sesg?eQB$oslaSd`~Y$|1u$z&kPWR_zP4Z>YZTm+OBV zdnbJ5kXd&2lBH)Xx!~-jFF$VHybL`&SqrtPRV}R1w{yspzo`5Ehbvz+@CS7bovKEQ zI*%IkYwvjC`2AZy9b(aWEtEN;cq$3Wzt2wob0G3Z54$Iv-`!eMddQ6?hs@U=e{lHw zeTnnGahCE{iQj`_ zSKvxJEd1^cUpf3DezJJG@{^RG_}mQn$S+?SnkekMn0{Ny8gIf zF5@Q;8QyQ`kl|~>-#dS>bLs~>r=BQ1aZ>Nvxzv%bIR&ZLAh@B{=&~IiiRGcCuDYR- zokwykJ8x@;!2^7d0d9>y{HQ&S*$e%o;In<(KiA4Ba|+Z8bXe~_<+@u6K1NO)pPLrC zev)>?#RqxKgL>C~e6CfKHtB62c=p2PeaU&xsgJxAe2knpK8Cy8Cw`LlJIznx_n_Dn zxVnB4zlfh4Tdw>hoy-MV)I6y7|o?89L~emwsug{$wlHgBo|9O2o8&7x|mte1GT% zkF6^`q`2{uo8P=6{QbvW`$_5tJ0Ck))elOIJi)f}ynD9umPar4ZunXoA@v#r_tly| z?#|99&d=9hF>;ihr>z+V5AYe#?=iRyA7bOv+Ix{k2Av1*ez2EUpX#}Jo5BfHXm z+>K+1TZm&Ozop_B$`8NAj${0fi(8M`^@Zv0lWWb+T~j<&`Q=7Y(Y~hc_iH+pph=xm z3%cQeN^PHm{%y+s{!ERFi~M*0`dy*?{b1+R z6QxI%+IF6ITrO{U^dgS&)!&zT4T76?R-*PXdAtSrqd9YT8#$JpxAphI1ALGVZjECS z@YxId`+`q@|6kM!QGC%EpK8wjzL68hr+r+U_Qb^poGSAY@ZrY{)TjOU?C(pPw9i4W z8LaLmKWXH|@i7&OpQPPR^ON{JD0T&|vo%ZMC*$JyMf_ynXOy3${OAX5KiPXZNq?`q zOm;4fvBxO?IQmSxA8TrKdf#?DTv&9+CpLy{YUlam>2dA;Zjry^;lB(=Nd8b$de~)m zTy?;r9alYP$`KU&B=v)xyY*B$#kTXjYf)QkjXfM_=)1on_4@0-|6HxyWq-df=lrCR zlWyk{$AAa;fHt^s4eg~pbgg*{PkZPDpY7Xz7~0*;erOMA|7Z^z-&gG+?PT?8yFK*Q zZ!q(OnI6>i8(2?c=S-;nrEU)g6s`PB^&6m532o@JccAm{oKrvP!Cy?-9+p;Ia{1iz z*1vY;#;GJE|Nhu;4lL;-^3S_#_QGK6TeKc>m+3cL@pr$fZ9V*F|CUrX{x{k~>IZup z)%C=^6NlUFVcxhUZ+Z0c-EWY34OchT%U#B$ql5XzKaCu#J#6bYfCu>S{NOgRUjjZo z(QjA~zQO+HaRr}Ui?69yy2OWinl2T)XyvqsCHo$LkKQH}2_f{4>L&w~By|krT(qaFzR7d&716oz`!_??JIEaCQ3)_(l9=`FiCi zDPMY#?I(LBw~)*e+PQ@u(=oSD^FZY<`<|PvA92(t&l}&jRN1+w`VAugs82pOTqC)) zuJkbPhI~8fm?h&!9WyWdz4He@Nqu1FrIYM>X#fz;`& zL(Z#JqxLa5PU&2$Q~!#c8#$4kC(c8G2l$ldD15+e;K@n&WZuFS_&jUEH$L09y{A^( zP52l&5k4_+%{(D^fKTB_g%7w*J}n8K>=U^@&zcZ?e9g0q{cPWMYpu~`zdKf$)B1}2 z7&!``w0U;$0H4X@6+YlL{IVo``ZMPsIAdh<#ual_2JbZ+$}6VzaMsO!bEheM?yHq| zQygRDSor8CH1-1?;4^ZR!Ux>SPfx@rbMB{ewyfE_dc&I4D=*a`S#>_03;+1YI*3A- z^E=bgG=4AkW8_%)hz|-s1|RSMpThGMKHye*Mj}3$1BATul1hL1|4iU>c)j$~-O~>+ zaysJ!9^f+It*30*TPn$q5 zf53j?awJmJ{zuC&_5&W^GjW)1-?SaMN-2C!%5Oh&7q7T79Hi?le9o#@qWHjlazEGL z6PMEoAMgMl`i0=;YNheX9Kad-S-g7P<-z4H|L(76!hSBQ7bE}Ey(ZJS6MW)wI^hEz z;Dao1;~Lsa^CqovC{Oby62I+Q{F-nqcV<6=&)p#)jQ=nmL{19EiCisw&6}LFVskmu z#wxAQW9PCDnKKy*)_73)0p%Z?f1%pp;{T{?sQX;*bye@Hf`0UKU#TB|?UoRinVm;w zyw24}W!+{?<^B4f_2s^Cqi4ec<@lE|Pu9oj-#6a=~5K5B5eqrIpS*ZkxBf z(aZ1IiI;u$%k_DWzP4WKvOOHrXLT5Ty8A|Z7?&gMq5ibZn}7%Sa3i>J4Q*|eYJr7TuOyfCplJ7|VEBM6abi#*r#Kk9>dl2M(|MQkNdZ~EA*Lp>1ljdD} zZN1#3{TMx__YHjFa$@*I%;Y|qH=*55n>WGlMO3$k;7U6z{KQY<7x9w_q&(M9U;C@V zU0JZqMCD8dwZDq>1^ZimvbewUk0bLHtpqlmN@!WPhtRoCc=Gtj{b%hlKPmDT9C2?b zf2^+bkS8#Ha_+kh34i}t*M5@v!Oj~8tNKZ+m%RI<@|HJx`8`up>NVKG_HuGWLnK@KQTF-@S(kT@k!Py2wL@<_G1@+ z&s!c5f{)L6NAVfAZu+ZwBUW$7@=1wf;&L=TmKfp~{AyYpLtFyIuD~@O$4FenzDoGH z`}pYhv)_vOXZCHm{3s7U@=qYg<;Q#}`z|HFpL}>;%EOO*3CLl6JNw#MAJ6`HmmlTf z$2wr-u&{3`B5Hztjj|Vdcl|d|Lh-j@t{2X z$eV>6@Zhj=9%(s%)$K^+P__2QpIW9lu2g%Fj@}oTbh&zyj zUc5Kt8Df8hTYr>?AN_sgpda?e_$2X$s~_dzhu=jGeCS7DxAgN}{U{GV`~-4b{g@x3 zU2yfIe8f-hS3-`ucI?nRDV{N2Ppo#S~ukA~Q3(^h#e`zIEJJ-J!l)T0Y1&UmHmL5 ztATFcdSD&Y%-~Z_!RIgBipY2kK1NO)pKzaU>tpN(Jiw>=BxOI~=BlCb>49}nGlNef zWu51dZbf9g1|K6Qj!(-6g`5pO-~m3RU+Q^8ZAY#e8lU{@I9$flzMdI;N-6j}bK3eP z7XTk4r!zj_0X~znl>LC4D@Ehe1M8q>2A@K-&eMHzKiA+Bmm|JS`JeXo4LrbyvnasL z)k@*h3+td3w&H8w@j)Sq-`pqna~I|JM{3P{e4jOC-~d&qiI>q`!y~$^M9gy9}0F!tAom~mo8Rx_&V+9->PVrY^Hsi*z4A?6!q(# zB?CjomAKAJN3K?Q7G7`T8Xpha8Vcb)^m6YPz4pXeM(BZF)Cc;CUOvwEkS;V${#%$!#jnFaPBIlCzBB_lteFXBnXZMB{k(}^C_3;{n@%OOxJb2k(Atlm zF~0KV#}4hO^`avGO}G6%T<5ZUr_w{7z^sF*U3_@>`=7$!JAdSTm2q?Ghq#1#qV(jQ z-)ztK&W{>S})oepV5{1@G){a<3oGm;sZ|2>k{zc#|+e`{j~Ns+>>~Q z`Ls2YHfiO}UmvWd#P!o=m{I`yF>)+?qEd37tc#%CcIO$n5x)n;uD~@Or`;XCa`;93 zWZ|32Pg1^c@Sx=3b(#bsD2UG(2~wq3N4@in(;3Wo>IU1fLDaRvN0GU5&qkKACZ6k z?avR_HvU~*^bpBcA8=- z8mjFlvjK(ctv9dFjg4rtpf!H%YhOhRpQArmFYcy&v~fAuW(%8EMH~B}op<=~lee&_!=kFCBr{b64gA^S*!ltHX zlfMm|quN907ax3}{y+vW`C&2|Kfu?!uVxDP3a+eoBsY6AG|;O{U2KKP4W|| zzY6Zs-=}`CbLxq*<#*Y3p4U$EmPaq&c{Qb8!#dqrh}vP(IvSbg+wd#$`AH+kvh%k7 zK6ro+8h~5%`UHIT!v4PC)8D^utvoe)3%*9WBtaZt_xPAWK=&w}&wQ`*DkL43=YB(i- zt7tz7ef*D)7~k)jjYBi-CzG`a0+Ii;@!y4Q`oTj=5Btu?U;Om&_dkTccmCifsUPf| zdZP63XKg#ryZL)M(tx~KiQ|}iP5K9ik%xd*tzaYN`Er8o)0|0 z2RYzYxxvOKuRY~0kAB24#rqS-T`yd>Y4v66R$gjupW>U~)89XLsM=*5Gxq9ye$vQM z_^9<7TTfqq$aT*Tg1HN^AKDWaA0DUiIUAq6?|6pQ!v~ z=}JZ2->14h{=ot z@I>|Af?Mf5N%(je7x$E()z`SI;M3o~qE?FPZD#Q?aw2>L)wcdVcz{piVP!wyR{cT} zKADHb1GVL9-G(ijJG^9F{p2@)q2RN9+xA*zH{oOCD16fPU4aMqRGzBr2iz*RB;u2Q zUqV+Hbh^oJJ}8CHc&(W-F5XF#>HJ3fX5_@}r+qvIJiuqPL(H>{|THdSN%=W8^4& z()!Wh0Y1E+;Kns{Z_S^}^UXAs_U-O4G^GDZf3|wD>d(^89sQ_1?t9*tJMJ5f+%H`( z-IZy5mYu)wob!SeYp1_LOo@?kU$vl`bzb&4tj#y5_7_@xxw;-XUr|@t%4zDk`TK+( z_Z@wS8b>`{0*`4kPs%uJc-0?J^#3zBK2!VkAekhiUOR z?<@GY@9oG}Y<%*L3+62kKEB5rpA-k?x}eek-zj`e^(2F z6SN*uYi8ZvCx7_*`X_(5Z+)t|6x_wHQa||BfnmE|3fI_vRn4iyMH#xX0)I5W#2rwlCL8DeDo4QX8*Q_!MLL1Y$}}`Bmy&&cilxB7DNX5+9iL z?cf1EeXmsbfLq^C5*WWM@d-oZ)~D}c-M-~q z_iE%s_=No1?FT%-N2?KlTjRPUd``#=(9oLfV_@i}=z>=J=4)I;;q$C|;pfTtkiTZ) z8ikLoOZQi_Z$^&7CoMl0@e=sBaZ~vQ8y~%YC-XdIua1jI%=M)&{pjDC4<_TYzlLD! z4Sw)3a^m)5a3($g5Afj*a2vTc5uX#Xy7*pQH!k?BT6N3L;zP;!NM02Al(zc8$H+;? zN5(PeKQN9#Kcb~f_&@qxP~tl9qe~)q3qQ)k4?f6&50p5B_ax5m?$AZk&!gYhr}HvV ze&Tm_zpw9m_Z%kuq$TSwUD?_@t_&VEx~8qNb2AnWrCcy~Rv>wCg5Y7@?|Y1upJnn@ zDh?}NZTDwdMY8%Sg!{@Qj) zyFvZXZcM)2uBY;rWs+h@N|@agYAyH-kxTU~tOdF0&RI$aYN89ANt0T1wj zH@I;P?WOti7CxTNpXK>xnhHMRukcU!E9BzGxQ6!KVf@vZ8&|Ad$q&<{8&_VjdeiFl z>!w*Ox_!>UvjWuzepLG_JD*r|W0zkFKcl@$E}+(f-w^tPr-VLZZb*~!q-2c)lcoCq ztKhy*$d>2b621fBf8oC;MP~r9H;9++*K{K&0> z9M-0wCu>xhb94Do9)9EkK@R+=NBEIjK=K~S2RtYr@zY}y$Z`3x29O*eu72$4g&%vD zkOM#Jk2Rm{p?3LE9)65HA_soFf2^@$ubIn_^6+D<89C@hjLsfYVtu#%C=Wlz-jIV{ z@MA9yeG!)*<>5D=@jwpG3qSS*Fy`j+qdfeGv5@2PV+}iFL@qzd!;hE%Ip~GYpsz)2 z<>Enk_^G!uY*BSA=<=hlMJy2Kw>)gT$W=@1F#38s_J%*SclNd{`2X2E7dSbpD*ty9 z9?feZATr3qQ4v~13`BHRS(wZOXx0!AQOC!c1Tvu`NhXE>!(Ws^kZqr!V4OrmM8pfw{0a5<<^sR5*y0@!(da9}?&HSy;CpleH_nvd> z{^~sLTiM+Wd}MTgX7#>Bt_e5zM?_;|SK^yYsLpV)oI z{+R)WWz1jg(Vt>OpZ(B(eSCa5L3|q5wtxrtAP(HPhiZH}VQq`npS0Gt@P1kUySDXbe-b35 z;A7-ye4^I2aP|ZEl%_ZX!W*-UJ*b>s-*$V>M5#u^2aG8vgs0w4m-yPq3F?pGE;!cP zKOP?7Lke)?9_r!K0e#zxQk~1q`;{W%>jOxTkfJ|EPB=cCS;HAMoLQ4!qW5OzEE~5t zOV4UNv!=Um&EUF~`s5lnebl{eJyf6HmG)U3Kf;^aRNi0y$@e8=^TG6@AMTko zl#_C+B=w8;kvu!%%o_BaF{aw6y;gDZffL)Z7k_$l;n|zd9%Cvj({`ony`G&J(KNfs zwl`68;j8CryO;Cmg%=+=e)BaSS+t|(M2P$gFWyzHCp@vD%ORhSnG1j66Gx0+_{47N zdGm|7g!&;a>ABLWm&tpqHD)@lkKHWp*tzghuWDsLx#YKpL=(;B&V>*9L6d6gUw&NT z%kkrq(0*C)0H5ro8Xs_*m|A)kXWNopD%FT~G5zMuh0iBEQ^?5i@d?!* z@BknD0Js$%3d1MvjIWH|6RHE}!fSjEs^lW@Vcdzi@B^<)rawlGk58!nfCuRfn@&w@%RqTif;i?rs#8#x*u-LKea--f+-34GkRY2d3iK3=~?>~W1w zoeM89*Gsn zvk_~tq`f6qT65uzoM?PxUKQ;J=26g&s24{4N4pD3TnB!^egfe~e)z!$Iq-oJhwz;Q z`E6I<5A8hKePjQs+kJliyXX@^(y60rhufIBb$=PRZ72l`rZ}B8e^Hdg?P=)!hrM|iTlItz&a!3l(PkH}MZyvw@rq<64rGC&i>Iu0$_u2L^>6*=?`6-u* z)K#RSVwIH629|nNb-Fbl5$77Y`WNGN?%$`nr=QZuvFu^P{3`GOANYgY=)EEM%)+y_ z1RptTtLV?WRYt4HHJ0#9S0g8gPviVI?1_sHMJs(T1Roy8plRw)ntREKO*-?sVqZR@ zpC!hthGy~g$Cnet$7GRo(yqg9yX`ts;`gBF6}V!D@ss#P{AAG^$0vXGdA-(nUZ})(+{rb za@ZW6bx3hM_sR|GdGkwfU#?6I^?{y`eb}y-{7-B>*W-C{TXmU^Jwrt5^pf-Dmvg@U zHMhgfYd88SdT!+SdLB9+0UqF!yGG*!Ze1_EH)Omu{&LvVB&Qa>F((%_$*vF zST42bC!-N){serC93LOa*bv8n2l$L$tMLK1!oo0oj*Sh_nQCjE`WZaUUt`LrvPXdU z$+Y@K1fMON)!uL|#+g$VFd_l?7&#U`UM{oF0zANH;B^`waO;{AhEMzf?K(cGY!smJ zNoyU9#^;`LF=B6?i0Yp9pTWn-(fCBIg8>il!7qbb?TAo(VviRkZNHidN#DN7-f)E$ z`xQ+&ruPecjGUnUG`0i41ALGMZrnpVso$#J4tR#{;XwRNJWl-*r*jXTt$R4s{P_pG zsZAvwzT(=V>bII5dpPjEVS6~xH$$7x?F-=Bpv{I2rR^7N^GO?${P1HA6mndC=sbNl zE#l}l`tl#l%IV=M(Zl#j7TVlL)_xctZuKl=WW10VW^ z8B=8p#eHA$!;d*i$Z`2Grb?f`%a8o;MCi|cR6s%sK1NPZe;V70tjzI%NuC~`wA}_n|%&aNSziLxu z-_IRcnb@M|>h!Gl=IkujYYe*HYStPEa?hrKEz-$f>$q$9i<;I(ZQ3H6X(tms98tNb zUw2I>3~6_9pOofr)p&MYYvUShe~u_2q@!GJdMVeASW`?nC>QlXd8J%wt|=b=oUW(Z zC!5z7=_r?*Udoxqn&Q$FePHtb@=v}mnd2NxFZ$uGDW;s1TP3MqypQDB5o?Okclta_ z-_UyR6)%&!+n%eJR-b2*J#VFKbN5Mi-`bi#ca=A{>7Bb<`Ir!U8f z3mf{fzyo~X4Q|!dA^6O~`I~~z=;qBQ7W{e>?-_lKzBw5_Mox2luqQ4)l&t67A^7kx z22E3c(wx63Hfiv-@AMU0#3#n9*R!BMMvjG#&sNgO*cNu%9h)H`eh=#FmFFk0!@^Je zBz_S;SzM+4q@Vv@J9bLzY|{D}HAgQv_T?0On$(<48othp1zk?F4^NvZS|ALcd5vK?{{B0o*B8RBIS_hm+Wz}DvQ1f-(NTW z-qTxO=Rp0S=VMEB{lKs1JX_C`_F1Q?=V`8Uka|_C;3|cP`I}hfo(KNs2XZ!Pc3DC@ z?8^z$b2Fv@9^k`w3~r@0Vfe%!lS^+O*>u;T2tKQB{z#?j*BglFFO@O5o=<9gs^0!_ ze8;U)?68pFg6JNw9j2lyZd+_;B&`V)K5=j0XVY#d6w$FG#8SG6$GTPIY<=kQNd zvi|&9-Z)(fK0!I=OAvhIGWwJA?7fSRPN({;F0l2->$8qMK|M|TmS!9yKI5F{y|Ge@ z(4To;g>?N|>ksuaT?#%%PEdagH%TXP41P5#jv+3AV)ww+jbn&gh+~EeI*uWKcCOvt zU;dSM9QfF!>a06|UrW^iE{n&fd8u4SFIW&;t?TXmbL%oWYtLSXGQ3** zJ&p;s_s{s|P3rmI`*BT_5c!UlD+56Npy#8f+i}d;g|?n6I~v8ZrN1Z5Z-i(+nbz35 z)N3a5j!NF|^EKAd$TYu73HMzxa8Lhwnj?^qq*1orXY| zS(Qdkb9}J(EGBYKco>7m+ufv5Q0nW1l+PG=>(P}`i~7@8qSpRG9Ao78_*e{x zWALj{aSU+@6ukmhH;y50A&$x4s^b{)7sl-Vn9kcL=?Tvj>|~u8+%u&8a%sKopRG!r z#?2k?{BZxRXYZxrhvsq2G+0h6smQ%IOtd4miKX&J8a}c>$$|4-~m3M4Q|{+J83;ry}kbo zUC)I5!yb-q)%FlOIl8yqu1j+qH%Y_JjN`Iz+|HIgoZP7G;KW6mR&Tc{-%%7D_2x7| z?|SIL%KOg#j%ow6*B;`p+;WNhyB@k(+2h`_E{CKrLc77p3F2e8(r&ZkVJ?31)Ad{CJMCim$^2)vUmW|P=Py5FQ^P6z*MK*U3*GA%hmP;^ zE}4VYUOyRLnoLIIKWF@LWz*;P>vGsB_d5Gv_53OIy!nNnq<+wI>WSR7M{GS$+P+Vk zpK_($ZjgG-WM1B1XwgsBy!eUov`W!)BL_YA#t7?YH<)oK@Bkm=fLrc&HaFR6wJ^LNyC-Hkw^a@;EKZ#$&PmW!${UrH^ z|JU}Dow8q@_(^-ex?L?lY1f{b`S}g)Cu?8Q)O|kH{YyW2jk2eiksakHMgB{l`)*Z+ zlR|yrOP76Q{H4n-mohfJ-wUQTDE}y$>GX zQ~Z?12iyi84Z|me`GOs`-=oH7yj+|ie2knRKADF8GVlPO?4zE2^Ym!+!7zM|iG2WK zn)5l+?2pm-JXFs4cBj4e&BzJjt&;6q#sZiT19@HsYifRJW8TJ$Ha zcC_fvwk6N2r=D(%@qJrC=5vQ~RG`vq-(p*^3__qG4l z)D>5Kvwm;>Uh?`4CcX6yFJwhLy#iO_c;P2;3~>u_410=_zpHG=F)6P?vCiBpuOy-)( z!Kdu)#VaO`$&6Ih^Xt{~<`;ID`a#dBCvs=+w)H&e{O6?kDHr`~sqGnFuh+{eg%(M@Bkm)AKXfN+4J`5^*amKA7m6ht8RXOrP$(lT`}Q4e@0FapT_Yz z?1_sHIAwp-x%!i4|C-pO553^nO0h-#p?;=I@smbQ5Ff)0KZ)Ir@{{;ID0&61uAjs& z;wOJgu`H>%f#3smrALV1NDQyCmANk?O z+H>TScfwj);8Nr%!mmm4z#~vlf;XUC?n}*P@T2~i+e579mXG}Kt9ol+kpn;M0^bXJiMiz?Km1s$ zi5!<7bHmv4&n+MMeSY5g6Uc!dddyr+*48%g^YX(_*KQ_*9QdJk%)Ma^Qjp(rY1?|| zSrDU*{@CuTg+H`&=EV1^)@}Od@>L^Zw0TrOLQ0Hg%?>7+k;QZ zZ=2W}!ydYBeN6Wre2knRK5CrW!3R9Rr}Pz#54gGVJ^kr`Iq~hmC;NZH^=H0Y5i#$< z$H)odBXbJsI^@r}1`qJz+$(T%i{arDTY=J>6W<tIsWL z>^@x`*XHe(yzKNPQ%ygzt%o|V{)6^;amX#spP6$L_x*JD_;t5_znt5k=V+BK^Qbp> zejqS6Maq6O1#FQH?4|kD_Rw@eatfi{#uyd49&S7nFnPVo%lxG70%D@`oQeYCQAi z7xmuu(YbZmA<3rvlYFl`sZ_i#V>a_L&#HgR+ZEP)1AG&c7kReY^9`fD4-fq!@J*yO z-(}gUOV2uK>1$6t>y7bt-IVoY_Iwxn+{B6BdVMoxO|w6>=~R_h@b>M4PHZ@EeBSqe zudrx7-{sVG8wb~&zk1`vQwfN8J~!g;BLBAkk-Z^zD(iAcLNniG;?ZZT=l|E62NS_W z{aL<=n@1`Qp~8{A8>ArkhUWA9l-2)VYc8tLSpr91c5j>G)wsE>JeV`GudPKG5^xm|ZW0 zt86{jeQvXFA2F%ZIs2Yb&bMfXo7ZmiQ}o=(@%21(%oIGpXZQ~qA8^aRBNU(5gQj(S zyVF?Ro9;ehg3p%CA1N0i#^j=Fe0op7$H>w6M2(q(hmX&HX?(yf_t7wXj*YEA^>uU8 z-rb_H4$@v1ukrbMIUCU@+E{{ke*qsO$Jd_#L$hD)u!jfujDB9@18$Qa48te3`ef?( zq@h0Ey7;u_9B6!gRj$pD{unvU^#?q_Cp+%p;#-4L<(y;2|?oj)-ZArFL zm?8gT$8;uXRWiJcGC;6Cm;yDND`=4z~4yj}#<{Si!Pokf`ee>m5 z_(+VPE`twv`1stU@d3BoxuN*P9@9?R|D($<|F;7lwJu?X?3q_<)wo1hfi|->0YwpVzpUfXW{dfO2OZE%6;>6?!hN0rx`xr0Y0?b3m$H6sXTmQ z$Ja)GmaJZPUgkWPf9v<{(4V(gvc7$5y(H5~2|htN&F}#a@Ie;1aSxrX`y@(yz3TAG zryQT49^z8LNBZmNpQFF7aIfyKqaSbb!*+jNYU5h@Mg6Z{cE;&%IO)t-16yWXi~VTq z^TE5m{O{c22ym!tp^nq(0=o|m)nNyByO~rSr=Q4jk>=OBpp8Br-Oy-`l zE{CKt<5~|~GpU|$RL`4Vg1d}sQ9tNg!K){7cm0DM?j=R z-))Y!2ji1o)5Si2df;c;FIN9u)1Gf>I{a^%!fE)shkEC3@E1*c-lFww%$o;t?c(eE zC!hcK?f%o^t`&=u9wk*t>?Pk5WCx| zWA_DS1I`YNw%KrGnmwz(zjf4=TS;|y4EJM!$yv;=b__T-~m3Pk7#_rt$0Bg zKC!z+GW9O`_}K%>qxaQIYpt2!vu(-CEBT1|IiOYj2aQi5AwEWqkB@pcSt}!#=@$VH z@X6n$@d3Ai_k`gSyIVx-PYM$b)84mDm0X1W%+oMsy3W@4-|zjL{$P z03WXy8E~tu3B%`@*Z}pfiGOwhWz)1*wPe*<2KSwRket`GbZF(^YlqG`Z*b$uYlc>A zRNIqo9NJ)KXnLpdxuBAdXa}%XX5w8MpQg;3JS5IEax^|Vcxtq7#7p4g#!VAf+xU2E znPQJScIv)|5_8>EyrrCrh!1x2>U`|7bnr29g8E~C6&$6X13bWo6yP@SPoel66W7Ie zYCBEv*|PaR%hiZ}4q1aCSAHZNe2koEe59R5`+;^E?TC6|)PJ!Jxh%L4!vlX#ozn-8_GMX-6!%7z34@1iQ%3V zT@L#t4t+ek_|V4>SI?VY*bV9jyD?C;>#66H;dUdgH7`GZZ(RM@ZI(UE&-!ZsV2SV{#m<*pZCS;|%pSs|)W%GUIQj7g>`GoWSjhtXy zlxb-9fd}}Yb>PN5w3Ej3ByP>7bncnP=SgK3+k1)K5`Tq%!e13{(*6oRR_wF=RU5|h zV!fyt&tqTaT`Yf9{I0gY`5$Q7^*=V9O6cU9bbAf@RH0hl|E-Tr>93ORy|KIcmclNP zpFR4yeVNRAE4mz#%Jfq{Rk)+P&s${Q=H?gviuys{s3&p{TxZ+Eq;YD}{FE#0cD&SU zCbO0Y1DxxK)Qj@ac&0yk7MMD|`6!&~`kp(J~c$R^5DA zB_Gib)-t0h5{h2PIw&J2h)?5q9`?k=2Qg!VA^7kx22E3c(j3ndoAjOo4y{xp+VL@7 zH8czO7&$?FOcqHe?K%DG^KIp)cFcNik$=N&7b*FR zy>iGK7(aR25k>Xk?HEgZ6*ls8#T+eOf zSbE;zC&2@Jzy;j8-XDTbNBGHf$MXcAg$s8p=UQxck0u?D@Z|*YX#@X7;urCg z?14poQv&@ft@h+;D>fElO$_x4w0k%Ep8VPKllD2-h+>uPvn2`<%=r&AM-i&Z;L92T*gn{bKrBvKd^Ap`@4P` z_CJ1-`a#dBr?5Qox1@TSG`}fVx_0>BEuX3E|9?MGsrln3MpD?X+?r(L!a+HKo`VKI z2_E1>S-_2ZXuW=Cp`Wbd^Y+hFvMu5h+_R6mX@z2kgL0bTGvL`17oR9uNx%Q3`Axa> zdXu!;`*oZ2=etXhLO7j=^1my(q@kL2GX-{Ieqx>X(4~kxaD|T4;NqZ8%h@V6t z`MHOtb*}GetA}A3i^_R;`dnZ7UF~yyi+}dokB@8G^Mp;O5<0+MnI3)YiaFz7{O`+l zn4c8+5AOD_O8yTkx*YNb#!o)D+g~aV?pAKuPf|bVd48VmM~JGIr04P`&2P$;?l_dx zYi8tYm6G4@Y9xjInoQW949XEb_kz5JaVYQrpQ`sAgPU8n*?O+8;Ir!R@k+Hte1;Ro zF+n+=9S)s;2p-@A9^l43H0im#N%K>Vw8z=&_}u)RO07kF1`_H|P);*^u=g%L)PqZt z&QD94pYo)=FOB$&A02&7CHFLE5g;jDN*oiEKm1r1fE@bU;YWWx>)%{{C-14y>5%afQe&mNA z^Ffe9xtK4&JUiyqxZex;;m3F?a$J7Qvtu5JTR!r`k9|au!~62xus;doJuW};!;gJ0 zkpn+}e?o7+Aoe+Q`H>%f^ot|M<;VUu>{IIUBR~9zi;zRP&^z{Bq(9ungZ%KLKLRjA485?KK3`kZn@r%ZQE$*zhOeVc~iM^_&*@m;}p28p7UUHsW5i#%a$5mgB-~S#O&w>Z|jP0b`gW%>C z!^0=;baM}%H0C90e9~I4!F$%849DlWBuGfX$H>w6M70OO1AMZ(X?(!VEsn;g6ZTnb zkNy<=@7mU%1Kf&;c@I8Dj;}ufj%K|Rcz{pWQ`)|PTOd>Yr^Y9?`lPteVte$b@RxA? zvC(pCrS*FsA74&${Q(c~nf!~!2i#oAo_&kG-YLC(7TbeQ?N8zO9N|_(%zN-La)S6Y zu15n8@F`@peFHbQ7#=>c7p$j!wqx4@r-?vGBe7j>?v=>afeBl|ur{>FPjt_W%&*-iiA8>P}XnZKvu0M(QSzJ_a|Dj5ADW}gy<;+yKIKi_~tz%I$EgXm%U?w^pyt1SA8JaxH?>94NqrPHs&-kxi z{mpXE7j=9zdg!z2`-Am-_8?8atf`bs%6=FHY?0QUJfO~J_z6w(yLHv?OGj(kBAaO^ zlkZ_f<)VJwvngRnzbyAjX|1I3EPTPnHQ1j#qJ)r+a=GcHTsz`yRLViQs1M33NP77x2HldyvZe%Rl+PWM770deIN}Y*flgxmA+-#rsH} z9dR})`p!JJ+-+L_z2Y^HPB|NO_XTq@dXKHAy{_SmwQj1R;8Xme_5^+@JmES2^s(`S zF8h3+oQ>N1lf4zyXQSS~Z>Ai~k;+zBL5ALMk$=t~t{7i%rN^w z?;CbDD&GL##OUSvo8VjN+WnEXoQ*1L1meAw&NWw^`F4K&Cu`~Kvr)5qYhN>Ykfz0B zY&wII@jYuH!H~nd|%xx^|a!5im_i@voexjaV z-}2l?>W5gBdP02d!XqvWo{5`uj&joclq>Bu=Tfg~&%@rTZxh^T%}ADC`I}8_WIt(s zN33e(SZ#@hH3HxPK5z%O>eV6m%)&JSg3qc|@7r4P`%0SQQ~0N3_!v3O@xh+B_<+;o z>JWT*7=xy%KWVNx7n^kJ_e*^xKZa_KPmEWuXF-3A919$ckDv7X=b zDD@RZC%t-x){c7n__fDvFHhwsPhBUG`(PB?DgPezm5Kb?QA^c)_RA}}9Ky=@$=a>! z#%s5pF+P<5!Cm@vs2}v4dLn=6mQL04Ue$I_Z|@JO*G%S|N-d&Khx$lL(Q_jwsOODq zn!y8nkPmLvi$n04g?>`-*|uc3l5H`L8Te8%KWXFy@lj)@y$9c;{+*2eU{73pz-e+M z1Roy8pq=U`#U>5zwO=LgkI6+@uoy2L$b$YDITk*CN=YYv61yGcC-Hkw^bK5HKZ#$& zPv#!-`WU@-WpzK>Po6R6p0%J5JZos$n<*|kbJ1yMWa96CEPhfqNb!^QnMAc;YX1oB zdA9bG6T52aSFHD=_&U39rRuH8sd;<&9eGCY_&!JH`ZJmJ>R+{wJ_eUhyY5B)k!S3r zZ2E$-E{8~Ziz`jj+3<)ht@`*rBvy02Sz{_1nr z4X!lFr}!oKEL^y2f40ST!|?6N+6_jI#z)VY8#!@k-^*W_$#gFQAMA;X53e(^#>OY< z_n$OB=r!o3o^oI1;<<#*w7P??KTka3xL@e&Q$b zi}=a0ztwZY$UnBf?I%0$%#=y532dL4GJ2Tyi^X}GQa^F&+JnB(zv^{YY~4|QQsl2a z=nu+If2XX=VZX`RgKk&PA5zboU+6jYgP!O1wCgEHzd!Dwx*`MoihlxY=ef7`!o_dWs+j;ah{oPl+IPtgFcK7%G zZrR;C%3q263;uqS@<*?$=yJ##m~r{vUVEf^{^6GW74?I@4Ikn7t97lf|{@SQN-~m1e0=LO8hT${&&UV)LoLtFA z_#f6{rgpZoFGu4Owbqb@Ym=|W(6sxlB<6b4(_Q6kX7BnM zyx>35{R0X)Em8UVM_C87Aty0e`HpM?w8mP--#P1cafmDbtLMou(7 z(yvJSfqq5W5%t2T|7dsl)N8MRU$9@XK7Q`CL*NG=uzLOw7>8GTfN4szA zPkKBLKBG^z=L|6KY?Ihazs$O&KY9I>_8DOLN4&3q^}P9o-JpK38#S+< z$Xz(kwi`+Nv6AMeTxqu}q+TZYlejgzXAnP7ogzw>tB&u_rD*;52+e2tGWFLDSTqH0PO#O)BiYQ(rB@ z@5Xr5&@8kojGQ1oCX1vKKZ)IT{Uj;zdrj`EWt|AyafQ}XZf z${{5;e)8R~nb>;6@4lvH)X^t03y=F3N%B6_@9qI!*{OM$N z*vPT;yul8G2lyZ#+=`cm;4=&Tq~Nn<^9|*!@4x5~rABO8OWMEV%L(Gs=qIr!E!Ts~@Gu7LR6i*;>9C*OvM4u0^RbPbAU>u-@srr^C_jncgQ8d9I@e=~pTsZXC)pE; z{MkKiKbh({;?WC^eYttXY5jV>KaR-!Q2Pw9+zYf{9NtIMuHWhQB@|(kCA}9G_s}tK zekk-^ho3OM_s+j6U$V!W)VR~kuUiuNpZxT$YK_h16)A_5^O8MIR%OxGyKa8f_$Obm zd&}#Vs2}uv^f7yUHTOwd&-FNB{DG!4^*l{KDfODkoK`7Cv?sC3JrDfN4~|mG({p1& zKk3T}({nRU1s>qTcMNXBZw@Ip2SQh%O)FR6U>6 z_>>a1CyksSJ~9qc_m%$oUhn`PY75-BhkE)GTY=QNzl}qQv60fW1D}g3#lUyXJBQJp zz#e;H&!he({z}HFf^y84Ao$2-^anfd;-k|kJzi<+4|`Jbe7ZDE`<7;VUwp>mInSkS~7UCErl7HZrcE5Pn z4}X5p&Wg#>p_PNDY#6#=eO*Dx)jF-`?T(pQiIKBR^;{M9c-y_{9&e@JXg@u+yN+vG zFR4!Xrt3G2AN13o-91%%f4Y2IO)v7_bm)7O&s|>8<*;+U>8&3ff74s9Y&njhKG5^* z;dZ^`ing9>I~;$$fIojXp)F2(yi@A*_CLR{ob$(tjdiqZIN2R~ZshoS9y*@`Jiupi zCyfud72X|&Pi!}tIcviTwFG73>Y;VX-c$Uf*x|I+#|u6S7hYU0%n&|Cj>gC9Ol(&jfQ66pMpeWMCroyNBs~z~ z0(gK={uLS@aGSV16rb4hZO$BAyJGda)$7jf);k$=7Cujwvoq9RX5=)-2Ry)M;D2=d z1a8A02*c-?*!q)ZJ37sFfcT$nOZKhgX9yo7N8_UvuCW~r9^g|tK|6}B6e4^IDf(Q7}?f^H}kb3cT?2f23`#I9b=lDv&_do8N zr*n`03CfX3p82F&is|P75AdNB;Kn_)lh$9=?c0C2>la_Ydc(#GR;;1GEmEyNuTgV@ z+ItB;GGBpx0_eYR_uplI4b~5{9}eq~gZ&r6kNogszh&gmkHNmH^n5{rqU(u&Sf9U@#%zq#`fS-jKJprDj*>RA0wwZKHvd9gs)cB;;&&Ye0e7j@Y zxBW?wkb;kqqw$IAX9N%MK|Hu|57qcA?0|m8MfLbPZG5UeKD=?d6nuhm#WzF)BQ$L^<%j~VzFIYIko_)0oypMnSYkOJJehkE#Qz&>dj zpS1l?KEnSTNChOM;A7;3oBNyDbsM@91Vxu1xzap?Ik(xXuTM3vFVa!2Q765WGmSHt3%;G=&21|0FaPBG zk~5ft=|w->GngqSugpTS(4 zukFgfexAL#U$^^m9_9U_XzmMoJqdKSowrN<5SLI-)W_&x^@9JO&fCph8Qw0YKA`!4 zALMVXP~s9J$BIiD*5iT)_#gw^hF=+i&n#Sz%Xz!Ch`645ffBE9-zo(kBd0k&*bx^W z);-9zMqW;8q^?DZYDfx0Ne0;W&PUdZ3x7~3@65{uu=oPpIkS~7UG!f zqdJZu|KuV&j_JH}=brMWvdp#CDV7^YHBw8SHYWS2tDe_|E?^#VOjr< zT8}I8k9zWBYTooyeYzZWxsQ5sLOs7uJ#T)AJ&IXfip2%H%iLK{J_YY2*pK_&r zo{rROCi8;++U3|`ThEaT4fcEUw^k^2*vLW8Js(-$!`s9$-~m3!0Jn*}jZe~X?45cC!oB))zMpK4&%iCo_I)vOG(Iv;_|iLTC%EU%VNYCqsE2{Sv++s# z{U^;&xzb+GE;i}#Gmh`iwx~apW4aXmF>=r!o0Fuguha1Cca)#R??KTkaCQA8ei1)8 zahC2ECx3RC?I%;-r!xM2&Po?`zc~9j&$Ikw;bH9;Cmzvs;3=EhwcB{tbF0=j=Wy@Nr8d^0%-4O*xafuB^);Da<~VkKA#gdj4niy!nNnq<+wI>WSRN z#kQU&ZLcTIPr0zeX|-3RURAGGx!R%~&LwQ`8#$JqH}s2x2l(**;8r~$1fN;hFE02j zT=>p%E~33py+Dfz_jfXKEPOKVe$Lnv7az(o_UaIPco>7GsXuA1>lT|d_P+=A)gs!H zFDA(b9T-#U*^qEIaSlKciJ=*jKCi!KCAsC^zgUeR=(q~L;H4=pRCJ2*+-j>s@R@~vQt;Wbxm?b-XotrVo~LHy1o2UAe&^f+?1_sHI1Rrh1Roy8 zpq=U`?@%`BzK;}pOD&G?$9VO67W|}<6U4`G#ZO|lqx>X(4~kxa>s*f|eiFZkpUlqJ z?Md>NUfotd8GB(^}E{VnCC9_{NzQNX5Vd7Q?uc}ie7sXT083PIFLXPs#dSjhrApnFc?JJ#q1&9Fr%7;KRchv{U`0*rdU|_N(M(sNdDd zvGDP06hDdGj`EZEJt+DHuCAZNFXAUB_tk!q{P{Pu)lbHr7-Ib7q~|B?^V5ef*M70* zy_(k6+SISuh#$k=d}L_iMtK^X8X)N6VEnrhd?K>WSO~=XI{0r|Bo9Ue&6xO1{N@y#eohMe3H|H`Ut`xx&%U;vd+YJ1s;0>2ow~2S)amVNU;UDAADi3Z$QPXA0e;fR@%21( zzbo(npXxt)->>%_=S~a5C-yK#M(;MgZv6%Ew*>KOAl-ez1s~a0zdA$s7&#iBsQs?M z1AJ<)*Z6?jz~N!|bi#gD>El!1SHHz^iz(D3@-g~T@Z~he2Ry)Mc#Xyf+;SFX*F{untHJ`MX_fd}~XyjkM|ZrSID;?n{9U9|(BC(E@fTAN22sUTB4 zK!1#!=Jd=ml-zl~-~m3gJHT!7En)a9j2*xQc8$@Y+!Xd8 z`mwfeX^q!te2%YFXGnjHoS^m^yG4Fe+yS@TKu3*r;=Or=6OM1f6sB_w;#W$ z?fvrf2f5`F`LDlcUp0RH^NKEqq%i&RuRnR=`0G#Jzvcc0>IZ$Jo{(GG&$fq2`vsHc zr(9{zhn9NHjC{9JYH@tDnDjhiUyfxD8|K@B2l(**;MTQ&2tKp0UtaK8b@)#z*%s#! zl@iXwGjc3^8pchqCoVqVR5&FBA0Eb_Y3fg!^P$Biz47|bR`Py7KzsY^j2sIezedHc z$+{uzc2vJSeh-RXfh%?xKZ#$&Pfk2r`$_VTo@V>WRQCz--){Opp6~Ay@`TrQwwvWA zCzg1A@@!3Wuk`$6UQ;9vfA`Si<@{dv>hk7`OnCFX-gns^{r4U7)pEPXuibKRFY^EG z?)Ud+MmAM+Ipm4)lkdB1fA##zmdCHDAM|{z$F7&^5w@P|e)-tlR+;+xz}T%0Y9XWc zhSBRcix0T_OvhV+DD|4j{Cy?w`!8G1_1I4)Gw_y6?mS9;Cj$x3g*S41JrC`d2M_Qm zy+z{#ZlkXV!zX?P*Bf*3vm1a?J{Ml_*|ua^B^%Li1zOdA(D>wTPd0vS^^f@u_k*QO_No~Hb5c9cyN=J{S5>MJ z{)hQ&6YtXa#4S4b7&#gr9XvJSL%ak&MJH~WSZ3qn?Xwem+$5g&Zmf;8_YaVmtJd{Y zIU9k`Ze9__E=va=BPXao<~;?+<;v-S2l$Wz+`8TriqA1|U3{mu(*&PwOZKZ2BIX~; z{>5_TN7BK^$ce^B+G(^OXs6MRs24{4N4pD3TnBzMNd#}&HJoNZLtDhgJ@rqIQj6uN9tRv`p)HyJKcnQu>tbmHn$T zna90$-|kksZ}e3<4jVqfZqL-S#Q1ONquIriN1a&SQSCmFzx2@;FV18Rs_1gqFR^sP z9*dW5c#(SE{K9TfKiG|)#dbaAR)*V+xQ^GKkJY?*Q$9^QZk2jH;agkExfc81CX(() z;LC}&8)DbN1AMZ7r||)|!h%qIVxPZ}=6GJ3^U4LEEt|*7dB5Ih>4kqP*`)KzeL2nX z0T1xO&Vbv*b3*Z17*~JNobQu9J`a^^5pj`=(rChYk#nbJ0;*7C(9QfF!napboD^?C}kf=gMm}d=%yO`Fs z?94@{oso&(w%e~;wdLv(*>8FeE1sA*N84ZM*y;K{KWO_+3SBr;$5Gtpz3)Ejjo*}? z?j65w$;(uq<9hY4s@^s?%{PW~JSy_bPwyn-sbyUb;qw+%7JZd3Jz>0j>8>r0w^A>z zzQJ$oWwt$3``z*=7EPMp2-W?_X`PoV^{QHBTT2oBU`DR~HF|Theo7-p+ry~&!+fvc z<9@ffm)rOxZHFh#Pd%mGj+bwK>EZMHtG=Ia9#2q?=~A(W`>0GtPIG?+9^ivKaGUs` zjZeZ!SKj=4q$Hu~&fgMzR;_xhFV|u`5x3;vW8_5RBkgYNH|=ihIPxbvzvolWUx4de zFQLd4e&mNAe30Ywfv?Ap?;*%9J5QbCEDw(`R)Fzr?UFd)nB|m z+dB20Nxr}S-RsZ(YyIec{f?{$;!@&J;?nw;uKq*MxQBM#XZpEL-mqeA+#Ops3|_eU z{MAG2;5%J9Z~mN&9y@#5bM5wdVbkST^v6%bbIQ8EPwaGwibbETV!>`j!{gGp{m0=_ z)BmgBzLR3h`(B`oqS(bbnP=6{z7reFnM>GUcP~)(mglS;_NM2ID{L$_o&50QtP14# zeAv6*JJXH53SEBWhaY>FAcr}ul#{vmoKfNOBR~8&>jXLQ^Y^Uq)@ZW#g`68G7w=1c z__3!oa^OSx*gJ#0{@wDCAAam#vELJ@goK-*V+VISZLKYWBSFzAxl-&Kmw+<@e`g(wZyC`xT~`OGCQ2RQ#;;As9J2 zhEac_{iUdxO9LL@Gqy_O18#0PyfdrZKev3J-Wq<5Pg;F&yg(@eABh9gxWLEA(fCC6 z!FhOq&%l7j2i)8;X?!|i4S##^sYc*)fLjqU@4?5&X^szgfKTlTjSqU{7Q@3Q_GIYv z#`M~QPtI>E+8T3^TM;qu!NgA0wwZKHvd9xz}iXz|EEB`JdSOlirz@8lSY*AoHGu z2z=&~ARz@GBS+(-*-9U+`WINk4<6t%dZxw)+}z@L`V+gWC%v<}G(Ksa)x~?3BJkOt z1PLkl7&#iBs5SiH0X~QaH}0VtpH5iA-yZ#`M&R>YDj*>RA0sEIKPtv{_P);*w7!5( z*9H1Msu7TmapdiZp}oVi7H z{Ye|2;=SScJdX-UNWsU*3CCyYS((gz>Jurw;>RzNx!vp3Z~0=fi}Zadr>R?Z#XrP}7{?*U^B)t|FLN+JmRF0?_oq`q<&>hgp}XCTs++8)4k8$qVXKtY~!k?Ez~c{MLNngcB7qM z%C+%aFVhSV%0)T+a(VATdF$m`GXn+kMEK?M%0am(0p*o)U7XHhw>s$eU6$@|McsV`Y85=<}O{jow7jmID2>Y|i;yZR$`h`9^ZC+xYU6DRDm{uhDF zY0X`z&wDs}!Gf1lz-iLCS2xaGIO4w#Jn_~QPo40~&m1Iu*wead_cX`*d6$lke`9FQ z;>mmFE#Bwo1N&s|LhXacSGsqdR}Kp5TQj(BW%t^_jfJ6=-5ZCxSFIlIRRaW8Z(_yygDbm-)^*oEj=>Gx=MP=5;he$l zbJUFV%!*8I!{Dk{7B+5N|H_xX^z1c5=T7UJxc~mk$3Op?@&2_J{V4G_!TW}N6MO@F z6Qw_EJHfZo^TWL@JF)yL?%ey+Ru4~m=6xoka)noZi+`QlJtw2xI(wbXwddY{SjR^_ z8#Jw*Xw#|0On7@*L3__Cj#nQTQCPJ13=;gJTRxFLQd+C#iQn3%%ONSu9xlDl`p5B+ z+>3-N`rP^HG@!IV|No@uB0i(K@~!=~7WF5_tJkxjKSqv^ zkHu2b$vj&8syok!#Ka{~^a@<@lfrMi`s9dPh+}Gh)Nu^?yMEHPI7YR0;u~HQ$FPQQ zo)yOoEYg0tc%i1%KATcsQ8f2y-R}f__|O&O$Nc89w#PAg{&{1mME=8vo}hg0ZGE~N zlE%a_4`2V*@rSRM^>EEE!Cm4Q>IXe9oo~l6lf$;2Cyhgr<~MKEn`#^*^_t1-*Pojq zJvVZ+o=3$o-~m2-$KaN~*2X7k9FjCY_@wP81)o)`p6n~M7-ts#)$|urrdB9+*vRqi zaA+I@9^iuvaLaux1fK+PNTMgA0LaQq?0%XzZwmm9Cph2pV?bI|D}4~{F3iT;uz`&J$LJ=>w~tQGfyOLpK6+Vp5{Dx zsn@=~H}_XtjAMf1s?BTKeu|zOInjD9_<#razzy8EhyHbM7-}LO6@0dUj3?TMvAB z{B;K$x5MnA$p6;L8&n(Qi+#Er_8WfdrrXB9bZr4#C=v(1pyIx8gZF{KaH7496 z*)DRdyR`QnkvhF)kA3@#Ew&qC6q@ zwwmxtckdCwXVt37zLFo$E2Gth3w(?mA0Lq>7^%zjPh&^GM?Y8V!W=!~@15kY>Su90 zL-#VnKjE*aU;G&N(6r`VblRQ~S>ImqrZ(07>K)2o&5k`IcwffYgL_6WCPf?39RuOp z@cXL0Sb#onnU5rw*Z^sBk{^Eb6(Psvht4x*u~$oP6fsGbg|27y6tk z=IWaq`d7%D{O;GT9U9tL$mps0Zia|^+j?X&V^`aAe#usxp*i{8b6?j#^5<7=9ea-M zL!CTE)1H6RV=IMw%@~W6{ZIy}VBvbIf!9&KQMo zY`g>)`6u-ybIgP3r7qn$=9H6it0eV{_mMn1Vvad_MO$a|X?u=&@suA81?QNjdj8+h z3;s6lFy!w3`G3qEwfDyx9nt!mzr>@r*wm|jf9(_Z(4uEwpz`g2S<-x66Yp0L(isU^ndyij+!P9=$H+a^+`u9;KlkZjHXX*$4Pd$;Z z`1`M|3*z26@pHQ8|BZek)4THS`@fO(^&Ly7Yl8SW`{LpH`G3W`jlZF;TA@7$&2fTC`u_RPEAMDOd1LY2<^K75m8CpM{3P{*o>Nc4SFY06 zZ9SjOesb~r7niH!#Kq11Ha@f2PcEK+YPlG(#v*M$Y2*a)q1Mef1a>>h zPvZBW=oPrSeiFZkpB$)ZKS}Q!+lhhA-PCZdC!@sokd^Y>ZO`A*QY(#&u+n${8`WdLF zRw?nYk>l%msGkH6@Iel^Rev3ZPh4&C=XxL}0ZqR>xoPt~C7Qb&(WJdYPt}(4|P)Yy0176U#quZ0W zF1uvW?+$oHpOhy_dy@J=QjD_75NY(1aNe)4w*9N1Tih=*N2IqJnvx|Ul1A3tg2 z_m)^Ok8i9}NC#&})^OHu7kB_SQMn8!?aq$7C>ep<1 zX0xCC;Y%M|RPy)2vioDwZciFHL42rn<0rA(QGOD?2Su;I)%BD3Mf_yXgStIQ{@iPA zKiM&Bsk%9*o;Bh2TB`hn_KUTTYiepT-mmxXe`WvHmtL&=Q+xNei7K7QfB*j9?$2ay zFY9vHDc`^U`_=P%)$`_;*lQV|q<+xz;=kDSRQheGo*x^xpS)AoQc1mT|5&E47Ga0o z+RSZDW`~WOXgwEvzyo|H|3l*gZe0(C;}h3Y*750%eVm?OO=+(Q7km~je8Hk>i)&i5 zcO}Ee$Z3ubcz{p#evJ>fO+FNkPu$fv8lUt1dXD>}9r$ef_RF>wBHEK~Idci)7$c`S zKHvd9lfTvYfZNzT;rJw4E80EizV5W|+kwx*g>%Z)h;a+IfWry#F>;#Y10LXmp9Z($ zH^T9Wd+3PPpNrhro%Vfu@OfRi)*?Q^`IyrwJnb|ir#U|00Y1nAH}0XGv^GlS|7V|} zYomz2iN}j`biWmGdi6Rx9#46`V2{l0h;tp;FkjGK%Uk-cw!dR#O}lC~MP^jLRrTxI zuR|rh8sFLB{Z>aUJg0Bd<}W1fx1xT~H|mLcsqK5`|2OjmH*LPYFB=i>x&2nmQ>UI< zrPxCw$G3-}{Z`-sKF9&L>i%K)#Er%~eSBx6FWchyPVF1X;&CI#$46CtW4{&l#Kp(Q z>7_P4v$@}D)8?!CiV^Wd+Wl5WP7ohz-Sk^wx1;*4@Ox173S8ZOEBqpU(qFgY^L_2MY z!nFJte2g3)AH}1wodzD@)Ac=#54ep!9;QFBkNVVmVx=&yrCKs6pH;ZNyl~;7a&3m} zn~~ETAMgO5;h$-Iz%BbkC_b?Rgu4Eu5FfMypDml;SI$PXqgz&xDH5VTMox2lzyo{+ zKB4gex9kz2_APdRpz%o_AG8ObJIc8kvTsICb9}%9d}z0WTW+sVd}0R(8lU9xL3{AI zznq&P{V{Ty;{zVxgL;A+_s~un*OK_{nL4gT{~Y~w)Gz&b+(T#Uo_~2?A9z!j<|}WT z^C~ruYj*7U$NPru`N!A|eZuY>WWEjhgy}<~Z#dW|EaR5shaY=MAP0WTZKThGIg&0v z^23icx5$AXYt(6@v)0|^M}GLRHVHZKV=W(TO4bCr{KyYK##)dAKh`|Z24d}m%a8o< zW6m*h;0GSW?2L`M{KyYK_KrXf{CqsTwiv`H>%f%oRiq{J;aB!`d;IANk?O+&1KZ19JlyD`AeH%a8otK%a8op2mmm4zhowahIKYp!M9gss z@{>84>}5vmQ2LdQz2WQ9&KY~?RWoAJ-xIUs`!aiOynW}^O6&Kujf@;WwhJA501xn~ z-LCNgH&?R8rxV5=+JjF%qHQ$Kt%#WS;A7-8#|J!oeEwbI18#0HG(NGr7WCL%3VjQ6 zGws2r5P=VKT-^GY?mhSzIaA={;Q>CSF^vznx$-qWvAY&Le3JJqvEDBok<%O>@Bp8#J3V|n+}sjqd}4Pkc=#mmTWA+P#fUusc5^Et<~{frInD6_5AYfI zg=gP9J#veo@#%!I2W{Wd+Eb4AEJoNj*`qU!%g4u; zc7UM!=8~_e;XLoO@ySKlx4qnohGpIrwC6)AlW@7~UM^4p?*B zo-+Yz5&E-#RE13Q@8DzP1o1Jt_3m5abs3J>msBGbp0|IQrYG4wC!V7FMhr+^}?L z<=|Nx29v8}CUeq0TSvb6yx!8mdhP4LuHN2l-Wt$a;9Pkr`*hE68QAB*53ok;^F9k^32o;NF3nrG5XenEd{#cS;EjZchn zk&be?>E(UWIFqLKUF9wlR1>ZZq(!KS7a=Z6@;(K??C-U!J+^^&>^~xbB9`Wma!S{|; z&(BlOn_r?w(!Qa7@c$Fv(Dg&^(wY}pxSzb@93I7@N%I?_y$bm`nZkYN*Zqxnn%54U zbKc;_lh+Kb*r>#8oYopWsn<+q|4MBe`i>;AjO{%P<4AHHL7 z>sn{yQ;)A=uUzofmL$ke9i_b|ir}+t$&r;}M0|!^=&% z2i$U3h2RtS04~M6j&FkelrQb^H;vDUl|n@O6S+w#_!v1pKD~;!_s^W?jlFmAp&W$` zA^7kx2Cd^0BcGck?X|(;GxCpIU9PsMKW=$iy$2s7$H&KFA?aj(CVthOk40kQ5-55F zu5-PF!f(4W*~BfxF}YXkb^`fF-_XuDCT_1qFpl|?He1R2(Dn*MDV;n$x_vqRSyAH*w7Nw=Go9KdPQLzXW%QW2hhW zy!0tMjv2k$*7KxsNYeb~t$I_9W29a)nLR4ih<+v`H`y;=&wV*s&!gfP@BkmaV{prU z#Kvc~#xa7=wk6$_!nazBGe;Bdm1E@ib~rSS0T1xu>j1amYeMiz5QlVX9Ha3$u9Baj zc7T!793Skxiw`&rYzo1LhcRfU#xdeE)*m`tF3nIJW90bwShYzUgI|q`V~9(j=oPrS zaSU+_am?^M9mkM=ptqfI%*(BJoX(Buk9o?AW9&1Xa$nGXx%zEQhrevosbo!fXTv}< zXY_CFe&IoV?T%x1jw+avpV{=Zl0UDa%OMF(9FytY>+Z~^->K)#FX9;L2R$GCq8-On zKW6KB(l{h(e)Cqnsm3vaYbJATx#q_gD#&ZYMI2+~Xg!aLW55G^_>RG?YtqJNw#G4n z&z8-1m1`}=F{Olia2q+k9S)6Szyo~vWWa55{*hLHX3{t$X@1I=c7K`1r&cb0r?ogU zIDST%TA}EVk<%O>?7fQ*vhuYM{o!E@+Np6&-DkY$jlJ0!vTsI?kB?QG#4-5Qs5pkW z1d3jPs~g7$!}iZsrB36f zdzZZytK=i?j$@*VB=Wm=S)j^rML8@@_mz7u?!NLRQpTniaSZi?p1bu_e8SdqZ(d34 zfk1D1L({Ug@-S^XtZ{v0YpF#$+;wlVy>X44Xg!zyGVlN&>IU4nhj!AQ7tiFq+_8VY zJ>1!w$Kti`iXXG>VY=h&F9XhLQ`4^di)Rn*vz4k}(RMI5uIcE%*>oy_16BRqL-Tun zwUT+^LCO}j_iUwk5d{yRMFF=Gm3p48=W0j<$zU?K0Q*e}VcKm8oyN&sAS$d*hfWD=qSS_k2o?37=Ha<&Z*~IHq^ce^JjLSI?VY#4*$l zdOrF*T|eX=c+}SOq;W{n{FICJ(rL{XlzLT|Rthtu=SEKRI0ihxhwm8Nh99=^nXPe* z;InPX^C~4jzKGHg{e|>=HDSBkm*d;v&^QJ>z=!V>+)9sy;4=&37>&=%D+Ryan&U$~ zO_vhK7&*=H!QQ+0AUF4~A^7kx2JO^1MtsH%mt0b=w%BhKavIZ(oGw%$qz-vwu3x zb*Z{e_beA?s6WQY@%22^Pl5;d@ZEyj=sbHISK||R)qT2W>j^$-#hHT7!i6i!`4-37 zn|y*zA7O`$9F0#@e;Igy56r=hduS((9|%6r)IGEDPxve97eB^5bhhr9UGV$AcvG8d zfAxXB*|KLg?;EyfHfx=TiQKt1^vU>ZAiS{|)=~sxBI#KnKm3@3j2!qdhR<3I<^s6< z$PYi-TF8M9a~qjUz#K`JANk=&A2f2{Lk!0pOJYHnANk?O7%XzoE$R^;L?4;UkNogs zZVhrM7jq+sO&NQ2`H>%feCf!ceAFX0n7L4_9Vhl-tvj}xHSh3sY3IZ~z4fuE;sfrQ z&t$ErTtpi*trjW1)yQcc`+x`dfCsp75AB@TN8^)L?8E!zBHEzyNRW{F`1o>~$3E;0 z;o=ijjLwX~}$?A23D>k&eQ;Ol{+Kb$c_8u0b%s*>p_DtF5>-&^1d9bU$XAeC#GjO=3 z`LF1{&aAh$fs{+iz7qv(kxm?|+sx41Zu%bDBAaO^lkZ_f<)VJwy)t`UeOjSc5D5je50GbHx%46W&O|HJyZIJ)}F1b%{2E-@p5%f zGaJRK@0oIO{f;#{&Ymf+(t6yppQe*1+tgVoT;DV0b?eSweeSx!l_vQVzocF>nY*{<{kFJhV)Rw>{7!U=@F)0xBS-ry zdrxY!=L2|v58pAkl|E|Yb4s|_mj9YGzY&x^J_{EfSFZVSZF79`cP1MHHFBEc10LYR z`-9uWbv8bIB#23q<~L%~$7jptE6Ujx_e`0rB*VwZX^s!}-o=M{82hA+xyoIA+F z7&K{qM5euGO5JDt?&7<%E!sEAFGb8Z}S%7&o})+4@UTF-U#g5%;&ZeYt ziaiMW`W5NnQy*jdd1#zzU~KW1eDk;U?NlyC*x`8|pNT&Y*YRnQZ9_8bu#pqQ$0WxN zV;7?AFm@G+zJaT@U1|p;W!J?HV|TH`#S^t1CjZ1S?X|;kKb%H8Z14Fn@PxL*(CUfW z4nwKgC_9|@_P~LPzV5T7R^IV;c%UNXkn$(7!_-TZo)3S<*7Ky}F`aFPPp#x5;$d1Z z*x^DsSv+jy1ogbp4)dKx;WJRO@tMtb_=>|1s1zgcN!rQ^WSJNpG#!@K&vNs{f~w*>+&x4(!*fyzHv^71<|7m%}da zmV4i;o*$&1H@}FtsFx@`pS;c1^Q7(8r1^QPwAZZHam}nL=OW@Qt19^nOXb z%U;z+PP83fuADP?fDd*B+`7JK^Q6Q_6B0F zW_vG;vE#h>u{9_zQgo4|a0$bGAK9dmLr~fKHP>zhNB4UQ=JlYkLUoS)}iwh>Pm~t9tEC zsPzA3x77M}eE;9bA}NQIKS}=|_2TLq_0n^k9hc4S{=dmZ+3$t#ZQ}O-F^`dYYL#LS zjhvu8Z0!HzJB`F=R~w(C{;HG5VRkz0#=cwxKJz>P(i(>`a)S66lm$nLbFm9%?)XXTcAf3Kc@S<2Y-A}*yq&~vw5YIAKpPilwLj7!s86RhiW&vHIO&zn}}G#+Ay zjU27#^!*79_Wywg_#g`0xQBL9T>6Y&bLy=dz#dY+*h%i8vvtjB$zLPSo7z;{!`ZXu zl=lr=b4u)m&voa-&l>U8}zy2!^san#&(edKjuQvN5z~9mmm4z$J}G&z>hIO z`luKibor4Ve$16c4)4jFIbsXu-nsn94?pI1B8T_%`FV5Jm?P`*BR~8YlR*ye2|va@ znTzZ4BR~A;dq57lPd#FT>GN~>ksp3&4ss}$-`4fk9MI_bMI$*qs+-s7u{oaVloHDImcleEp0UM$tymUHEE{#*td5!y`C#luYx zK1NP>n~61&^tJeFB!8{fNV0a)O*GN)M$_+=}NAm25HInERZHKPYw4PDE;R(A>JFT|E$s1Oz zO)}SfzkTLpcCHulX>XrcdyORJZ4KqXZEkj{JLH1)xkGmuQzdPYIJwc)*lwHf9>?&?mE8DdHa=j zRR5aDzy3e}UG<-RyR6G$zv1a`+gUyTj(Xnwl5b+U!kzjcCLDI^C3}9l{cCB?b53(T zgVgExPd-$x`8GkUbNZLmyUgD*a)L2o<2VO+fDa`CH}0W-?O&rN;!(jz>>>6KdpLQ9 zwujis!oS!)^6u}u^Nmkiv9U1yGDxnY7c7XqpiAuG`E{|(H@4S(bUm%d7m7z~`&at2 zzK2d#;t6kFDfHazA7zi1_vvy-LbI3p(=R$)J?~M^ zn_t*N>IZ$Jp2$7C(YA+4#|4w-r(80hwLZ@xrS)A>uPW~7%li9m(Q*582#_#gq?sw+b9Sr%WR(!-}Wb$nK>`cPjrqK}DsNlL-T$T9ewIkt3> zyFL;-;^IR&a{m~D4-aF|^zcb{KC9TIfxFW*t>K_3fjkd#1O$CK>nt@6RWBrnkGEr>cJSJWoA!btMV- zIC30(+&sm5VoV>qt&jQgE`AS+UV-a)^`hV>{3L!6KbbmA`bpB4pKGX}jQnlFYCq}S zmow5L{o}|xl%Gs{DfJaZQ$LjU5c=AMKPhvnd6l085AXpOaLb(PgU=ZBlLDW4HxCp`A@QM}MoY27jvNP{+mD<5-YP$-?1_#K za!XhF;KRcRv|0V6ut`6=JXg%w^Z2#N4gw8$@#6`{WkeMrC-cWm9(YH zOX~?ODL)BK{&~&d%w2~X?k9H)$e57-gV$b5CzfwFB=R9%bNk7Oj~!$^f8LHS1K3o~ zSrYLi^@E;MPox{kHm{zW^pm1q6N#6L*^qjkd??*={NrSp{SR*6hG<6aqwBSa-ViRp2VK$_>hm>r+o0?VFcQ&ep1+^J3jmC zVt#nb;N!?~@NriseiFMKww3*gxRPcFNKOgke`HPn>o4tSxHyIUrvB|1;>>u{9JYCvD>}2Xj zuRSyzH$*)yIWc}5>opi(+umaj%Lhq2nB7;>;YnV~`n(`mvIDZ+L)+(%>zuu6iPc|k ztUa_K@x3+<-qZQ~CTp?6@>_}*zUjS{xWT<%W8>i3&W(ewbowTC{SkXe{h)8u6R)Pu z@!G?<_AG9C@|8%mCrsKyQLl;R*A_Fs-ZK3jM~>SbRh8_ce! z5%|nIcy%%NNH~1h>p*>lr9v;n`a(xeZG5mNIzGr7Ug?7m4`eSyzhOkLLoj9wQ z*+OxHBgc)8Q=tM!F&Ks24vHJ_drT%YU?<2`| zjrhr=$4_=2BK=}!e?^bisM<^9)Ufy0fbx^jXD46V+4iNK>&6W|tw+7Lb;{%^)89QU z(%2#RcynV#3kM{-b~)f}R$TB(p|ECEhkWj=Yux4f9lLh9J{3A{pnlME>Iu2s=QXdM zoAi^SUK5G$6>=NH+2Q8V)9FLw?jjw?R_}I9pc0K%QAAH83pA`74TKPnw^iVi_ z+Bw>8Q{9irD0`yggRIQgeDL961lp{AQrM)U&sa8?3E7W{Q1nU?@Nwk0 z@o~7~C$ZZ>e$tKymH)#Yf-81d@DuSQei1*JoTB1Mm44*+4fT_UJ0%?5FDIVl9Lya& zeloeU^ozNKq^VXftrt&rtM8LS|M7f(=Qb-Zs2flAv>qMDO{#ASRoBH{uk6sZ*DHrv zHvQYh16sSP;>o=(+PQ15iw+I#C#fIwoO(iXsjqqU+@zlr^_obmET$d~XNL!3e)qwV zKPha|t`pBHW<%;vgrZlH*!b9T-1sf-)bIeM~|N@rKDfXPEh{wCArQqrD#1r*`n+r^pq1{>b$=^ zp{}1y#PpLvwa|6@5nWxkpJv(gnZ?qRtE{+ITuwaMHTm6LU6cPiw4bDY&~xfZ^0oGp zpV+*5ZqiSRdQBwWQ!Iz<50AuLui?n?=y{c&1P|~57jWzE^ucEg`bmM$`WYWAWlnb`1trqWk+;;z^VTeKKSr30&P}5DQwc_-c5ya$ap_O(JM*tla3rWJ`Pv> zBz8NL(pF~y^I{r<}PqLqUCy$@Z94`H1-#?^(9NtFW zL+km;yox8GD|S1s@Qa7GZ}_@K`v4iOQnop@t8>LZw^{R#bBg!gwWi`H-Rl~+IrRkV z`7PG-+LvfYVm$!$gPv1Qq;8qlyn1fZPl|d?B#tSTLyo&9W3K;q>Up90#AtD_X1e$zexye84Gnnh!oaj6j>!PYRp# z^l9ZnK4d>LLeVQp@RN=l2Ol?2{3Lce$WP+;ptfEqKjHS1VgikMZ}{osO7LO6lJ>#8 zr_PV`@WZYk2R_8B%$pMT>ikF#Klbw?hx1{`C+GA~Zk-?L;m5uwug;J3 z@Z($#Sa|3jKq=z5z5OUzdcs=J1FkY|oBR%}+ zzas}e^s^Z6r@yB2BR%|BH;5eC3H%rrA>PvYksf}m*GCR~>~(4?E?~W&&X4r)V_Xk8 z;L18;_D`{%Sm#H2_%WY`9Gj0?C%}4S#$k1Sq=z3i13BmgxS+qxe{%LE{U^@o46^_5 zhsHfq*xdPK9Y*~#<;w=dNkQxFNEeo3{~bAQ`(GW$a%O5+e41xHvOH5bY3RHp>NgwU zpC|A_Olsp}%W>o5Ft^VXR%Zxvrf}a{d8ROD4Ld31FU}NRI(zZb*7UN4=d^xsaqpa- zC35YJ{&w)a-X8Pc@t*NY%FJGeym?!Ui1o+*=dYS1?oZCnp4+qdgxcXniIJ~1^&a`s-xuXEai(zIw%62< zm+EH@9uNdFT{!Ho@`O~SXGlduToI8KX{N6=6|FHMt zcQbpYaMCpo=a+}_vKxzu#Mb*BiIBhH57VqXyx1Z0;g`$$e-nDNjrAJkPW@e(#i*-C(tuW3A`4FVQAuS-4Xl^a=ahYS&BLK6|ET{#n_jweuG4so6E<8~z~b zbmv0S9`g*Bi_yL%>Rqh)cgqoeKwVX1p5OsK*)K|bz>S1ZiBIIE+ll|0-PdXcBlGx7 zpFX>gv&TFsu~`Z}ZaFS|60g60@$1&Vi_stO0H0xHSHMlroy6ze`kzDJ|JVGv3wqA& zF|fr?;*;H=?;$*PLGSFP$IhO!w0CjnTqP1he^#wrRVdkWx1&fridVtMEl1#^=7_BC z-HB`YG2jCp;3J<~{!Zx;_t0kA<7x7ncM_i=U!OtQO;AzqqCY|Zf&N748rh$qpP|cY zzCG`p4dXqNdt{BYzomt>{iI&Lp!V3imoZ&t1 zk-t$e!HTcscp_^`yk{@>e^T1P@Gt^3sXr#ac_eJo#;>;&O0K!22*s}O z#d~562zFbaL*_;N9u&O-SNB-Ih#T;W_(`45z%h;UlgNrf_ptpWd)~cgFPHnJU+i8b z>A)N>ttYdrzS#nO_q|_8uU>U>d!zj%_~`i)^7otbAuBG}qbTzs-f;ZnyYF3XJk=joO(iTxxab!+~nFzQLl-_6NPffxS>VOiBeBtDSGaf-E8B z4Ejld&-xkL6f+_58IIYHam%TN5B5aI2b_lA?}HByBhY5`lfovQdhfpnGh1jJ-z~?5 zk6okqN$hrzpTzG$(JOGp4#N+ETEJ6FD{?HE&71F|MKWBR%{83_0YF@-kjbyuca_fyXQhc-EAl zf2l7^{|;ZBHqSg-yVY|UmoUAysvI(o(Ca1az3snTa$NdX<-foKd|3MfZo1s&nMZ33 zKB+BaAKh|X_*BiKfd}}22e@$$ZJv2FxpvglJR0RoZlQTJw;X{_&^#JzRCH_?EFPN-UXyf5)04a)tXe# zQ%SAW(-Y;k(Av@N7kBDR6s}BXE>rW3t0irFRE{V1J>ZNhioCb#8Le}l8dh=qlPZ4C zOPYMCw!g2#w(eu$@0MF{QNQ|{LKx65;XW=MR%j4mF}orU%W@Y^!G(RjjU;{6Q_#ui+`fNk`~Ro-WU3zuW2Qp z$j$rHb9#gI8U|-+KS#N49~enKWE&E$Gmf{<2?KLb4#SJY3r4A_$Dva%cb9! zhoujMzW&``7C-S+y4dKkWMLcpE+PN*@8+y;&fTW+A>MMvl3)MsFRbTZwDMQ`5;km> zC4~B+uSz`yrH(t66*s+;FSB!cqFxirR~1vP7}=3k{i`kJSfyKz3+t*_96Z2>oPZnm z&`SM|!Lek4&%A?gD(38S;V7{`P5s*GyZXQ3|5u?Gm2<{ja%$m&J<;*;=blK!ZU1r8 zJNYuZ=2+OIfpdC_xjH`8kss}sjgL!?3m==Qcu&l^Vz>3NOJ2n9LD4I4b&rK^vIOB5 z@spW(%1;LLp$z-U$cxp*-Vf;~nRE57)hwT^{N&}zKc45M)K?HqsaO$u^;xrvKfYJ& zt!V7`IKW5GmymzpgWs~gcYC|ahj_#BlUJYh-`4Y=7W8!bJ${n%t@e`&5AdP<;MP6lgU=ZBlLDW4 z2j5aGyX+%%;YUj`{iIt?EqsQRJ<;(YPs0!T;KRcR)TI8HT$?0p(#Ph^FD4)5{NV_N z3y}mr>6YWd$L4^a#BK-qN&FrZy#iP4u;3^BBz_S;+5aQyCrNK-K>cW%J(AXUtGs(8 zy=!>&e3!l^{p83QlIqXv-ODkCt+z+AGRAQ8_SP7~B;S~E)4?fg3}Q#?dF=~7NqwN_ zee=EbQhqjd?(bX;v3cfphY}|Bd{d=PcP`}Yee$kC*RIM@Jw?wQIqq{ataD8g7g*R` z&;>r=0X_pWBtGD#3s-Zyk=MjG>mEsgkJuxb+Cp~NEyvvw^gWW`0Y3dFN_@c0AD?OO z)c+p#zFGH33Vg&K$;=kQ$1O+T6EwFA9^ljRIf)Orm0$I@AW1 z+V{KH`gZiO*g0?kC;T(`b-(V1Q{=66iS+!XMv!U@PJb>8T(@O#a^!@=30%O576E?T zLz`)jU8TQZXpf!Hr}Z;-_U(gFb`wUJj zxADyPB)=l<@yJqTm#_9xy`*A1u4vYywzu#40W`bIsGdf-m4U5pz?$4yVZOpjxUdQBwWSImX{ zuIxzM@8#KYG`pzzE${#z$`5YkZ}{Ld2FI}kKI>m-*ns!wA%*{+Nt!g-zPw;pYo^d!DQ|J`svuNn+z;%kki2vlZ`& z`5x?c&^Q);4~kxat3Hl}U&K!i-zohh>Fo@tABO$p5jy{{_s(~K@RQqm{AA`9=@;9s zlQes-m)4V0{)Ji>q3A=$9n*FC-QP%WEk7ybKXjb%lUEjGK12x|Kl#vo9bFIIH#4-K zq<+wI>WO-3`BL-hxyd~WqFyab3uRmXYU_FTWAWyD96266ub%Hw?G}8%1>DM4_~0`J z{iMK0jAJE3jx)AxjE9dSr#3#=6CEFL8eZ;$4-X^IX7!W8CY^rwJJYF<_(UjrB?*4g zk>kO~W{aQ1eh2wU{2mm&0$1Hn;urCgrDf7jlHSgM`eE2lMm{8NM|)kwKh==mb{;>O zIzjry%=wb$ulG{DT>5>V`aUJ}>{qVpI&MaLN2C2@kd+ql&%WpzT?2QWIQW)>b5=gY z<@m{qKGWKD(Pxeh?I)=p^qhKzta^C~|H9^iuS@`0y|S zZB{=iY|{Qy$F-O2JrzL~EJC4ONo@VG<#_P1-^5R1w}bp7eh+HvmGTq1pTsZXC)<85 z{Uqt_45%Mw{p8fh^SIT1a(j=T?7v3Ek257rp5&!^x%B%1bv6fdVsS;+o6Gw)eEp!F z5AKEhiJfb#JWMaXxxAMemv{W+>AC&7PR|_~+D}qH=y_Jv6Y}yuZC*V$=_hASxVr1j z+5L-2dpxwZo{z+gCmlH+J+JbU-~m410&b-neefBBep2FdSTPk6pX?*?;z>tNZG5mN zIzHeue7g@mJd8k_)lW*B^p;{aBt8*}UP*$VbmVyOvDxA$vD-m@62AvUufSFJllVpa zWbPj6CrNK-K>aZ5C#Q&^G6~KbEIGF`;epq7kFtsp&7Lw4f>wn zUe$HWs`nKd9Zv@3OUQrEN59c^%KB>xx2&3KNbful4=)wau&NCjI0U zlU8))SDjeMht%_2%y`9-8y^;h!>B#ZmW3$CiVz-0*Bz_Ny zUV*FbC-IB6pZvP?lccvZpnjP3lT)YY{KMW?$CEpF{AB+;nEoe7`)yt*dC)K(}=<$ax z?z-|FFVyvueN!e!-_&4b0(|uR2>AzJdqvlMU!7RI@*U4q`N{X5`Pa?^?%X@{xGVL8 zp7*JGLT+Z~w|e%Y#nsce>B*Pr^{&r-OW^vqLh8wIdY+Ft?&`?#=y|oDRCs_712)E|@kLWE7){kMg|)E4rSjvNm@c8%gEvD-m@62E6tD1cwq|SDq7InjGvwpKx)NA4B=LVCH;U~TI zs^8_*zFPh7_3p95ZaMA|D*gNn@UZdujKl}ry1(hQ!wR3NQ5TReN-S8`Q?C%Ao|`?- zRNymx`uhvnkbW{7vmfKg3AV$tEZ|BC5AbR0miU0%NWmYUsDn*Qni!u|E3Yi1LgLe} z)_sI(O0JjCA4g7Ye82;Ia;GbN6mFSM`{FY#>Hud?Q{yvGDB0)FxUG(>g4NG_%y|n( zPHlX^1AOq);Fh|~7oVw7{m*$#jnD52*^uLz{c4|THFCB8g8n#iYU2YQ-~)GX;~v^f z=b2Q-GYy?*BK*(#8QX2K^GxV}(;v^CDf{E})2VOh>RT_|=N}g*5+`S8&+S=!Lhsz3 z;}-WW3-=utcnDfaHF?V6Q5OszxWhO#7xJ>|kMH8?kLN!t?QiBxNmD&uN?wvn-g=Zg zhl#&P+NZu54&C)FpXj`N{HFFz*Usv+ym8w4Dy{Wz%UweL$YW(o_D)5S47%iPJ!get88aTTVEfzy+LW72sE1;)m1J$mf!q zJU7ieP9ud(fIjV_DrWc_5~qBObFKwWj+}5f;Rke_z^ngqFHS1XjT+`AOxit@=MV~C z@}1XzJD3l^X$Msy-4{!osGreN?4BdXgHshd@xJI2;CF+@9qG3~v4`Mmnd-_V_-(R` zIQ<&CpQFCnMtb$SP1>K=`#C4~oHKjz?4>>3r+vhJtNssCwOYw0PZ|As7I7ZUk1JyS zt@=4{@bq(%S?RZ-BcGS|-3z?_JSeASwZ1y3)-AmHQ)a}jgsPE#YcLbXK9*k)FYle?1l(*14kR!(* zCt*KlSxp5zzz6$+y=l4Ci_d9J1x5N5H@zd&JU**d<_fux4ctIUURQYPH58w*0t~kiT*LwwCODiXtB(%ggr?bI$TQ{k@+a%zy2l zY3_q4euDbJ4&~Q*{dnIiUORO1(#1WC&RUuc;#=?Uann2e+Y=%VHua5lQLl-_R|=^o znCGqC-*WOXx?k8KM~<{Zvhj-VScq%+G2jCp;8VU=;sb7_=e+oI&0k_2&^{;fRBhb! zGXLU#v-7+HpH(Z@7D^%44ZFYT?c}NcFYs~XIDTTs-@N%K$-()~2zY=Gb_U!AcJZz! zjJwVuZhEH%hAR4#d`kaL!m$f_XOI3n3=*H`3n_b@L~Z@)i}^h+M~;J!&>Q_bFyH|` zlpoysCwlQYp?C4Z*)hIJ9ydMt8<$vH!N=6Nxxi=rj2(;lkntq>7%dh0(_$rZr*nf{K2@a-Fp_~zii*MGf5zBl5?3BpO1RNyN5 zvGjxVekb*jRsBdP`Uk%5ey8Ba{0#i`c>wq@?gt;n55;%t#YO%|4?o7Mk;C`e;Kz4T z828unM|$`%&Vn4BAK&v}enIC)dYhjb$3qVJqTkN=DE)W6yqrS}KhEz*4tzMDl=y^m zPIZ2yhaczYA_sn)3r>8(`Qkc1(!-DaR>*-L`6E8z9BQ2(>EXwD_{bq&>;vJvbM}Mi zc#s}`EovSLIphz%EXxuC&+;h=OD0-m-9<> zex!#V>#dMOdxjt1OXGY7ogeAp$9a;-fe-5wINyQwaXKEPhacyMB8T#Fjv(db{7*f9 zq=z5t|Byp@;YWEn-%#gAdYhlxFM}NTP+rcxWZj=$Ud|PRAN#_QLp$a?DE6swj+>r8 z(!-B)0FVPe_5;I@a}{)cq=z5p)FFrZgCF(BK4qOB>EXwEGUULI^4k2=xr;hK(!-DS zPskx(;K9CW){*IWkRE<~*B3eD3x1sI#kwb*AL-%O_MqHHgB-rc&G$n29yi||)%lSg zetiEOIn*C~sXxB=t=Avv;YYt5IXXYS|JK$k<4~O+>EXwEXyi~%{5s!Nr9ZBhm-O)C zJHE()A9&dO)cSrsf24;WaUyakFMRnPA>YB)`H>!evNvM&lT>^IKgtU~;zKvTSysrD z8kY4+KX~Ld?|2OSp>fywn2RT6ykaVzqSQd zoEdvOhQFAl;NzAf@KJ;DRpXi90Y2SND*aJH$8XF zvrn%v_+$ds$?Tz5M8tdWapZXP$mS~E6a8)Q0H55e5+8806R02H6V)S`+o#tceC+ir z?pAI4bG$hkz zBhSeDzO|C-**W2qPo4k48LiebjoI_h$}Vj^@!X!ptsM)_$<9v9JaIf5iq$8XF*21mZ?}Wzju-N8TrcB8BY@B7ym?k zB`xZHU$pyalc!7;hjmk*n+=EmiCBrI&InTRK+fe9lXabp1m+?PAh3+EVvxMVq9X|O6FcyLp+JZA&>8K%x$w@ zIr{0FCaLirJ@>))$vSv{|H=NLyCx5Hj@&z;YvSa6(qbQP`HM#tTeqK3aC1#B=vg$k zbz#raZ13FGrM<25=J&OJ=(u$2xwEZvOIpv%_AF{$wq*XIvs!0YeA(nBJqzY7vGzpw zo;P_;@4~mbS$Tdh{=^+af1Gs2&@TDaoe!?R%U);cc`3w=zePcR}ysnU>-&nmcp; zq6PC8^-P}g)0^*> z#EE}BZD{;#=pK}9g0`a9kf}DYxaZvYaUA^kiMsEY;90A$ z=eyp0)*egpe{<6HcMK(V{ki2c-q<T6SsS| zWBJ!}mi%ZJzJv1mwF%k)ZKCgDWha!q&?TE{6Z9vdj<-~|iEU!FiCmpFvFRO`6*oTm z=C#&NbW2CSS7{Sdx^FMO?_@7NGUU~3E&hFSXrG~pxd)4>$;H8Q55F{ao1nb3iE*y} z1Z{vek-SayCzQR=OVjd*)5olw_fnbE(ch|nUrF046GzxWZJiS{E+OYt=wohMvrY8< zRmR$-e@a?Ehu$}i_|VluM_wuR@@$>68-@G@H(orHNUUv_`OxyW`--6>cE7}WUi%Vu zVwTm9q&^sv>;8wgUPjL8IOcKD`BayjyNjy9i9|(LtmN6*aEwaL?kyB`y8m&XPGlWtv(1G5tXg?%2jy%O75XFMU;GpPD*r?2ukd5Ke3NJL zPo84po8hmiF_G;&{wnvZw7>l?D*C9G>gCe!OApAgY3RBGJ~7la=PC=A+Wuye4~F(v)DQYbJs~`Qsn;IHJrg`` zdh(S>v|BwDbKgdpeEm5?xqHv;NV?`m9a-jn;ji3s9IUN1kJ?%w@Bklj0&baQKKL}n znfzw=pbC68Z5Tc}RcCyP`eAN~`>+&z+;SXzs@H1uD|@2jgS>%reemI71Zqxy%=RaQ zP1^N~ueO)$Ir0dF3y}nT+;Uv_*c`-rl|6IHe(P(*c@e({Mc=@6yn0da6MhoEh@UL~ zQu;~K!x!2#XY#jNwz85b&H&xs<0l9HB>iIfZ<3P#sPwiS))rSje!*6Y>xBI7J(d;| ziPdXmKD;HlZHIfT=by5k*S-Yqvn<@HAM{+Wr~VaQJ!h>&)X2`Ho}2WOqF&c68kbJm zV?BP_=hUftZr}N9{a@(0BgYdr*bKl2Jivz+z>RxoGsO)RdiU+M1(`P0_yKXmV!S32gLbgq>TaXE3rv;&VG zns#7o=(vIULEoq+$=8}=&wA})TzeKbJ^3xpX?9{3LWr_YK9* z-Mmd*KdJLEb)W3o-I^nOqB!fgyW0PleM6O>oYH-3an>Cl2^}|3Kj=C2M1Hf2n^(_G z#tml|cN-f1)uxVeNIRVWLp(p}mgCa%s_`}O03UDxw~^C)@EL=CQsDEQZ=TeV5800y zcqSe`ZaKB^!Jg>&fYb2lKKSr30&P}5DQwd4uWsx}KDCAR*tz7m@Ud$YKZ)HA@{{;I zn<{?+u5Ldm{4V3R@YDNa%ttZa#=Icob~-=O!!N1&-^hU;{;-2OKhndG27ny+5buL4<1TJ~ zm2ot+R|9=!&jx&T+C1wc%+5Da&XlcZUM=(9@%HE`{a#0odmPP*8!MM{<|%l94-(m9 z!#z~u6S;e7aD7CF)l)S$A4vIfc7Mf-$OK-9Nx{dFQyU-lHtF~TWutk7=_U#9!H~4&mom;A zepu3hM*}m45#<;EMEk1jt#iFE z^h4iUM?T57^-ATUJR;53*jtCbGtQN|PwKtOUSjxwx1aMnmn$_p&NcdPMv*VE?pcm= zF&~uhjB{lZ`&RaH508_y?=fj-pzsNzBWgSYI(}w8ee*lt(phgESrEUlf2Y0c?+f{t zyhD7Sv%N#+L%iY42aTWkW9#{;*7MqzXs@DQPyNs@p`J*ce9u%5?s4PnxarB4>G>d0 zuNKdA%03In)z}@O_OG@-IeyUoV~8L0OB^}weo6Iw5O{zOBEYTuULSnM;5e7SXVuC_ zJ4*JRw%Yilo{NW%Bgc(T^?VR^M90U*X_5~W|6!AYqdp-gjJQCZzsED0(Fc z`s2v);A68D?}>3K?6y7*!i)GlD0&61*kQqMlhx$#i}=ap1JX~DzSP<{KS`dWP{&WQ z-g=zJPi7`a|Ck$){xS6}FRdrD?P;lR(3jKO6i1G2X}F&ZvI0W>>ec^j7x|X?5WgHh z`H#!~R#^MfiEG7QYh40&;U}pd^qhJkZQnu7s^{%i56Rs4il|pB>Pu(0ke)ko+$Ssb9xw7l z5&N9O)mp8$%^+N4i;*}GGMxEVCD(h^^s2#imljE$jhs4D?bMN_NrSD4nn}1r; z>^+iZekv&$?t9SxY~`eyf9qCs!cV{6xzoNAI`=#ET5D`koIjMZ{%yHS$e+05K3$2# znu5rOki6fipRZ8yd%{n@(K+#oH(JkYU&Kq)5Bk>jJ*{5;>1PikcPC_j&rrN1#uZJ) zOQK$_leasP0sV2l8Pa|FMRy-&HMpD_Z?0X-)lad9jvU)x`S$m~1AOw|m-v9&$Z>x0 zZ1f5?884X}_Z9d|pFVwUCIBD2SLqCiPj}35MMsW}j|FD6zXA{N8TpaK2i!(J=7&$@ z?w-+j$+Z5=n^zdj2jC;mAGY?n&64;Gm*dTkI&y4$eDw!Bzz077Zrz{p!zZdYQs=4} zh-Xc&FOd54&O$Drzc)dds+Kb)KFOH+am%#^%32yn1_~A1(GC(H#<3fK- z^~VK1t5$xdko`UTG_Yv0Ms`sZGyExuk9!>?bry!=e;hdypP>FY{Uz|x`%NvUd+|~0 zhNH(zVmviWLF&9?dOS$;A8M{JBll_+zdXBoM3z^`;t`Lz`Pc5gv^Z-cM*Tl zuLD0B+sO5uf*eG zsf`bKfDicqH}0X$G)`H;=Rb6u690t1qJHsX+(S*BnIHE%3KMqIzoX#YCqRC~(rg)f z<)1>VtN7VbKeYVS8?AAzR*U+NQ$`;t@|SD+uflF_V=<+?`kDEaK9-7A=@aQ=3#^T$ zPs7?;VoZ0RNbn;){21#aCT49B{8+odn1ara^zdVCIC6A;%;nM-)cKJfe(VK64r`n! zH*2I=%dhhzJ^b)-$RU65V=Vw{m34lkhaWZ>In*0EOJ5h?rt>2`{8%%H9GxG1U2L(= zkM!_ktPnYrmwIFk1Z&R3ek*Z_wpr zKH#Rym-s{;0y8+q-x&SL2IvoCV0wLw_8xp3IW|7N`U4)|lYL0y18%x}r9Y8lrOF)H zw1j~*QH{}`d;mVX=@k+29()`*Ha>!*z{t9sHHF{-KJ2{*H~GHvzrrW-ScADWQH{YT zW%u2^_Dvlq>r_O6>1J9vi_JGtCMH9m|CMjwU-0z8*|LO7nOpKBgapF zWdC3EufYR+kPB|yLlr)e{g1h^y2hNXlYGu!e^^69Jw&D8o{SUTz8DJ@Tc$FY>iD&ekCxglTd!0u$|KTjjk9&ocgD;|)=9lr z*-MQ4#5>3PpK`WN+wWwYH?WPgFMVxZO8J6l=}9?P1RZN<>rg-ROQlD$e5`Q`4Ik`@jt@AM*8AYY!wA%*{+K*7fU|YVcD!0!e4h6$=N!&fbnDM1v=u2=lNS03OlC*eC#y%N$hrzpTzG$(Km3d@{`Ih;wOifNIyyX z@)KS^*(_^@)0VaLt{L{8tuKaFubwy0JVayG z4Ch1khqKSei&q>u!FoQ+>c4^q_|T5QE>sK20zWVK&}p&2T34fLQr1Dq9cN4s4!TqP4ZIFALw7=aSl62%SN&DX9 zwad(R>9yFR>{7pq@5CO&v2?Zp^@F|*O!C&tK+$Ut<+_H*<}gv|ml{}5ZF-N3z*X!U z%G8;c9XaZP%Gn0VXXDvJM~-a|eb;S)2l!;BN_@aA_pl#6(JQ#w&o)Q}>|JEEt#7Kt zCl}LSIdW`#EYo1c-IdE(cLE;ZliE(=18(^>e)vRQb|Ur1z~1>r=#MztAQvz$!n%`| zzn?G928nsLfg{Jp$5(&A1AOoU;MVswKYSu@o#!k#-Hk-JH{0J6_HFv~cNS6saX0I_ zvqww)VZFm>Gfv#?$g%OUSXJu}cz_S`z^!e-51*-#70BGWI*E^|b#($CakfD|VBCsz zZ^Oq(eBA3$sIxE>d>lCvpP;i1=r4hf-f!yLG>FM@}$4V*ZWzfpJCR2qY7CLFw0lpL<+U@FP9^;Da3aK8 z+?Q1A-ALcRy*KV_mNUTjNa$yPd(SqYUZCCYk^Qpr2fgtP&+E~#b_O{0f!%1?!&@)8 zAA9YFjQgVZiz@4-qlYCnJf`hBXMmUN@hKt+TcnX6*bPUHZ8v=Tt>6JZrGq3s;MV`R zA3o8~d@>pLnOs-F8Q@v_8=;NG$B|>>W8q)jZv_wV>Dy7_18&JX{qTvr9mL>%H|cjx z?KhD4oKYxmA^maW*!cMB4|sr2=_rX0xV7BqhtJqO13VM3AH;}pvzTDt962^VLPXWL z33z}{em98^xDBuM#V2yy=h~1EvkPms-zv|TE)e)IudmNFHdg)j@TZi)covp)IDKU9Y8{1}WEHO1}YZ>Eo$K)c$Cq4X_YeEif z4SvJ~jA`rqNDn{Oh9gJkM<0o?2%R74;m2M8EXxP1>{g~BWiA&u@=^V==?|zKh_K)N9V^_3u_j1ex!#Vb5+QpywoFoBG#OV z{Z`@0H1+r5+88W^P$c*h&&i% zZmdD#V`>i+<;(>1#W`P^_o7npapc(eSS+ji;@|;3<((ux;HKw8;uE>Cw?7dfd6o5|?j5SF8F>T*U0kJG|%zAx{_8$FltqAwm|5dQJB>=w zA4iU#{>c8n=wE{e_#hYDxQCAQvvtY=_RaL!I*uHFd^lT&wZ)vR)4fTat;3l+-~z34 zwodH>bzovqJ)TJY#CxU)ujaPU**ZsT*EaN-eSVP6e?+b=PkvF-%(AVWwD(Y81+XRNh+1$saxgSbAGaJ0Pf;;)* zJ@Qrhk@tO(ucc?j%}x09>s*o@=)i{*)ao!h#! zw{_n9zSa*Nmu@|G_JUhwGu#f@mMm2>h{c^S)}V4dP7o^29+Db)sO6aA;l zHbGm_#hGpsQ3nO8+r+p;oHkLaV*_ryaLv%=huqrPcl+I)w24ipKUt`16SJ4}%x&#m z)LLmAJ&RkH^e$UGr>AvJ@7$i&#KPH2voq(2&za3UQ#78L^A|0czo=*OoVO-Iw26&B zzhr3B>dQLU+}j_!O;BFHHbEPpO=NCVZ6d&4m~InM1KsL2F+NtCDA#EdSMJq6bjuD` zcV7F#cD9{peKK8TCnVGo_J#BNW}bQe(w^2-jkYj~HgV!#Pa7J)-A6l%`Q@?O1m*Q> z6SM)^ME`}dP0&^vWhdf(V`cnA-FJAu1+C}1-hIm6FX#W}r0ee(O6>Y`%V)f?bL5=| zRD4I}&HMi{=uTl^OOuT6SsS|WBJ!}mi%ZJzJv1mwF%k)ZDQanvQ5xd zbjhaeMAYTA)or5oT57!<`hCt`Yo#zGBcu(>0uF1uRU!PTYdt!T!%)mrG4`>sVmo_oZ)t{gZ&?a&pQ+7hx z3!Sa$HW5{?s@uf23DLLYpPuh}_xU<~%zaPz)!@mSANRD053IYbxchx?_t9(r`QV(VLnJv!Sp|J?ajZ?e)fTF*Sc z)s)@1-f8HZ=6xCLVEkxWwdHvc1ZGbkBI$O30+KMi(5&Lka zOc}ig5$Ed3an;w=^uhKu+eFKuax5;{8f{GOh!0&obmWyK3yZDujZqr~4oG>2xVzZiVv4rJ~-&xUwV19=rFQ+XoNuY5TCm2i$Ud`{6TsJ)&F{+hrxs z&gL&sso8bv0-yEk4ofEk=2oKSQcnjyjvN~w@oLrFK6rpn{#1z%xDCAcCLjHYJhgB1 z`~|TN+SEQAfzPUyw{|4Akp4JwY(xDEfw51+_O%Q%1GoMzOY4eMt7 zEVqU5apc(e`05XMfDe8d+;sg^YcC=zkh!%N(!QD6=OOfG-n{P)=Iynaddbb)W8d6z zgnJL#=K&tzLoUFLd+1o*=OOT!KK<^uOtkcV8;|}d7JmsB$Mvg(f~J^k^vL!|xff2X7)AMw(l7?kq%|547>LqD+YIx9xs(TdIL^v7Ed zZC$c>PULbSU#EvX^(`xIe}8e;y>3hIx>s4nXfN8a+Ix<@t$6MiW)<~x`n|wi^v9_m z^o@Gr{r-i&UgYkN#~qJ|o1T1Gv#}QP*4eFwzBBrlCvUat^wD%Fq&@78d5*GMjQ@{>Dw{N(Vl(l2)JA}RTgN+-2m+nIaip!T|cGOB<&>4f}A zt-rPWbiN?-;Y~29b(Qt}5$k#FOW-d2B=v)yw;k=Rr*iJKquqY8na%|>xu;9iYuoBa z2UE75`)Qw3r`ed_O>*RT;yPOZ_<#ra(2l_^v)mV-rZ^YOWIsmWGktnTArlgxftdI> za%$rP9^eCj;Kn_)nc}(%J`d~Pvp;qI;-$-Gk9N7Hz-QIUE4El%hkwFfwJebS3O`1D zL(Rr@(a&evaU5~oE6QK(=;e@?s1uM^iz>Atl%>yD3vj_ar&^le1dlU@(p$L&|fO;0{d z$8}G(e!DpB)!wy9`@AMclHae=pW~f#?Uv*6j8$04xOHpEf+VV_1eB5$s;e$QV@$t`{&#Cw%9Ae8+MitF%uQ1l91^|%hdh@Z?}BK;)k`_BH;Iqv?wSwA@? z@&u4G{`qg^CwKDr$(9c37xO7ev!{D$(0U6hysYA9=oNSUzR>#CFInS_b;dto5Rpy@ zNH_bz&4r5!>pE6HJU6{z{_R#i#O3(OPaOW6Lf`4fT7JCtMchFBpy$*Rsr%m6yyG_} zgjv%^nfw}bp7 ze$S@LUx2IbC-IB;$?_+ppCrAV0rkVMpFCXWANIc5PwwpTlchIEzu3|(X)di%wT?MR zUZ47IJoKX5o-OP*?-|Pv)%KHWEoZ8-PM~LQ@TRZ;!4s@GFu&{M($j_SJ+Yx<;8!y` z79IY!DnI$gmmVnO-?hTZU+oJ&N&TSb)KgIExc%9<>79I;ohO`Ee6q0U@Lkebm;Z8P zRsSkI7t;>AQCY9aB6creB5$s;e$QV@c|E= z#%=#`(>wVwyRK5$q{p&PbflgShmVtw(fz_ty5+d=v6+jXOw^B`>5`EaUvYtjB zjqooOPwwLJles;mUmQL|(#%XRtrt%YsP79xuSnmSp3%3!Drap!S@DmpC!aTe>6~o6 zIvCCKyAJ+d`XhVH>%8q>hov96NW`_`a^lIm4lY^GPY*p$Nd2Ja$rEJ#NWRtoA3J+a z^&dy^m$>O2QD(pIbij*0PM>|(=hEen<9dBD?XX*p&~w#ztJY702l&vA!Of`;`77>s zJmRJ&Kc>H5C))jO|H`IwA>+yN@8kJNw;W}Meb-Ne2l!BaaN{0Ysoxl@?Bb>;AExmU z`g7?Qj!x%8;?wOqONcy$q4-I+oLcx`?{$2FWL4@n=wXPz$4!q2)BAU%&&a0puKqc) zOi~*kmz-Mt82oBbKZbq@6ukmhy&prrg?>!xb81{%#r=9&4afVDHx@bZKJ&+K@bqK) zXGp)CeV^*TWV}=_mwum7Si}_G2omf~O`TTP*O=^CRRxk$SZF{L8b` ze}DD1s(wuGp1WAjp9npFO#Pte)RQik`?&E&-1Owb^!)L!_7J#Umo9}I*UQJW!)`e) zJ+F%Q!2^6KKe%xZt<>)r92Xb(Jpb~==~Bq~$!yH|W4D}I_+*ql(eVKfoyKkdann2b zF&pm-oAmcruS{n{>W`C;(fz_ty5+d=v6&I?W4D9+Bz_NyUV$riSnw0;g7J&^$(GMc zKS_E!1L}uaKRGqBKXKMsy{bZ{T|ItsWH03>_m*_v{a&hjy4ZWY8`a#dL zs-ASY+{e|^xarAEvI+jqAD3K6Ua`{}+1hmgDHT^(}$+{qD8?9V^}w z>$brIe2@Tc+(Rq%I|luv#Am;B^2KoY47?C8-gnD!@Uix@YxrPKbbP==r*YeV-1JU< z%=$@TljfXsWI7+RALHa>bidFaw;UHfHZ$>_SZ9UZ4)T-uJt%qwuGnG0PxwjvB7TxH zkx6f7K>aZ6C!@!ct*l3WP5H@*9zU5nUi!u17D+SvdZ}J6{eD=jXM;Yt;p0O~zI1y> zy>an{OLb18yZ6Iha1inz+>jZ{E;xSek}o}C{`X(eUJhx8Im?~;3QNJqEyuy9+D~FnbbOH4{c9h5co>12(;u^b zQrM(t-tyj#Y{-60grZlHfR9^_3m==Uc(39o>#Rq{??KTwaMk@Jei1*3K+=~lY}|Te zWJRHqENdyxW57@D=JAu6bERMG`?m6zYrM3c%#>PZ1-;?vHwJWT zeV3eC_zWw1qT>Tj$!GrGSdT1i(lhB~$aQek&uA%r(k;h@kIfE0iQNv0C-Hkw^a@;u>Nksf~7 z5#&%_+6(9G(Qd?dTf{|sAwB$<4?>R4kNU&z>-HJ6!KhCj1 z4&~&$5%hv{OZ569J^a|WgBbuwO^#M|$|NUK%;H z7x>X$*cYVNAL-$jQhoy6_Sg*=DE4{p=hadCV$N>lVu}_3`BsxFR!;f))$B^zf6~ZJqL>=H20k-f=D}C0` zJFfP6ae3x7Z$+o{7aTeExgoym0l@=&MsAS!fSaBZbzZ0b=g{}&&LcKEZb$)2c0bsQ zkN1wZM^C}Wkz?ayF|)=EE0^=FRPX?wd3M2@zo#j03W^;32y%QMBa{W@I2xM>5si0-HXozy&@vs+xlb6vGK7uR_hOVfDdB9 zjeBVGoJZVInHMp29x>%h+T-qCeAJ{HuSKTd zz4zYIClUhz--0e}p>IJ?+U544)FXR$j$EnM&%bT2qqenzrIvrmbv6Tvic*NYkM>*8 z!%JnqYv3kHvjbl0tsQfBqCG6P*ipawH*b+d+{JxdI`S*|4dLORdcWjV0V~3bu&i6~Z zq_UUj{`SeezjGN;qu*p}qHjUx>frsRi~EOu);q3iYkdp)iHUa%4SnSFq2cZ)J6C<` zB{jbcO5v$!uiIF!Q(nHw=J^)1Y6G;1R9?0T+Di6{#4bUda-;r$sd(r&`Z<{c?UUN$1fuixPtV3a6!+6g+l;I!A z{!!^{Nn5V-(t4VeQTw5xFC2gV(DQeH-NK^wI+S{Rqdph%UpW3$Ydz+hI%PftCubeX z3lE$-^uhz(q1S6tKg3nk6Zsqd*s&h}5O*C(-1Owj^u7jBuZhI5of&%`-Q^S=q4uwV zzr|ZO@5u4QRaNUyzyo~90Jx>*_~0`J*P#e}rca;JnY72-YU9)QYCL=#IUao4^?eQ4 z6CEFL8o0^_A09@aCiTbUxp=}RE!+R|ovDC%r3gj!O(Oa?B4&2vc<`~)i1);LP3*Ql zkI0MoJt%qwuI~6`lhx$#i}=aDePw)4`nK;h)K5n3Iwc%G$v*iB9zWSVUyUPtL(-8? zcq#Q2MEjMWgr0U!W@x)-mN(o_P6)`5kbl}e2U#}#p|s40c+v5br@iOcq0`=z3hgJU zAM`w{>Iv~9A8lSeH@RL@)N3N~hR#e#J@4LTzsmR*^%Rz(=Z+kYo>%!v@Bkm=fZNDw zAAH83pA`7aoA+WmWydzP{iJ(5k~#}R!N-x~!KcbkVo!8@kd-~d2Ol0rpv~$hg-zP7 z=VP6@kops$=#?bky`2ox}U@^;wRfWq@N`H@YlS4vT44b zWyO&b2_%Qzi++C3K!^_;#}!|mZN0T~nWPrK)ItB>2hR^~&z z=#CpcX~hjQL&psxs(#Qn>Iw0EpYqznxb`e=dh%s@d`;A=HH(%`2CSQNckA0Y2md+>+n+!KW$WhW3O>eDkJQK4 zuqQe`$Q`)Z2Ol0rpeFUlbc0=BmHFgQ>)k)F`Ocva@BPk(`^lhu2>B1pU2WO)+tV^1 z-Zvk(@s6PfZu~}QKS_O{=cVs>>m@VGtLJgomzz8fSm?Q_{TZT8zqQluohAD`;M(Ii z-dYcTXY08w$JTS-_2u9JKD1kK>!0g~PxSTW;=J?OiNrZs>%VxH*>fobKJ(^{q|0`_ zH5MO7j*X9~j;j3`-~m3=8Mtu|ZKk-c;wKG#cbD=tnhO09aUK2%e^q9^r;6|LPkQ~8 z$+*s1UKRbE3(H@5&+pjYy)^y#N}=0e7G zS=ah>>MRTeA4g7Ye6S}vKFI3+jt@ROj6hB5kIA@B*rd(_zR{Ts*l!b|sJ=O6LB4OJ1DNh??KTkaK#P_e!@@U7x9w_Bt7>~Q|piy_nbR_$^70$@Et9ku-mwV z+|x;1m+<(>(elgKdgz~0#&s83e)5ghzt*&cg!QlbihRIjHLHgFMc}@T#hLQ5=5$^vn&_;+gXlw2^CfY3N;l~<1yPyCW32&lC?|6utPx-?sw#iVH^EP$WsO0pxij(wU&feN8{+0S%d$!ArNRfXrwYD0 zZJsfQ_JkPwH8tiyIkN#i$n>6eM~>}-e8(KX1ANFQxN#4a_%y?qLq`Q4(|bPi0e$QV zR6tBB?4DR#>BzD1vHn`UXPUi-IzB1*}ary{FxgR`rboQ>v-_@sI+fL;t7S1s5^0yFP_)Rm&rY*<#jS& z-HOWGSaUP#2l?VX@}<8oUN^DFv}D_Ba^j@|7x7QzORPC_zc1=i-(yNX$+z`N<)S{y!I~lz*{}I$Nh$F-1JVV%zgt`)T^+bYHap}j5^Ndlq-6{QY=@LnkJzh#i`yZ3>A@|Un8efCvFH3fw^o|{@ ze!|w-125!nOkW|!$BQx_BBxG2CV$!P*7M7(=d~}Y+5x zix1;~QB|O6=W;EZwDI^W3aJ1;DdKiB@RQi>AU}!UgQ8d9 zs{2X&B7Sn@tmmAN0I@ zo2(yFm*45t^SJSP-1OuNJ8bFUmJS4<6t{I|jFr zgF4SKBN1w z!NJns`G$0mhlx;VR}%1X_0*>-V^kd}OZTd0ZvwTwLOTRpDrKI`qdTBjz$=9VlgdTjyH#-O3(?8hg zeoWAwTp|D9JD#&*(?g3gAEE?KKjz>&^49asq2qn(2R)~rsF%`-UOkT+Z^TVczUar8 zT2~_K)tZ4UmPW$qd0WhQ-;v|d^Qt|$-~m3AAKd!)^}(kp)^4{~`Y|T)SwCY^vGmVy z_)t%yrM4Zm<+$-#{;sM$xyqjC_#n6Ma36el7=fD9ACqghg-!bN8@dbmzikKOMs_$j#ukd4;pL+e3+41S9Cz;7JB;?XwbY-N_P1@7q6@r~b`(Tg)S1=L z>o$z^GuiJ2t<&Tap%6y2NJ8|80AKbRw-Zx%XOjzsDWInu^-TTHT ztmkX2=d~}GJA%-1TTC{iI1f7j^oxQ(6mI`x}(Cu&RjgPPXfCu=r^h$id zZ6xJ~PvlRZ@U3z^+Y#=~>(8o{zbuqPj$1{@a3u-&IC5-!tmoDG10LXmUk109kNe>> zHL`*0nt$&6xd!(6iuqBYKc?1s3H!Eci!M7?SihKedJ*Iq+kxHGLY^Y*+D9>EXxR2Xb_N*m(9_==?|zKi0MmD>>wg zv3AywGv}f6BR%}s8;czBNBxmM*0gfAf$(vn{zwl$_6i~ge(dR@{@4?%^CLa{SSyMg zogc9qd(Cuyq=z4CYLG*|C@*`}Sj(o@AL-%8SQK)=gSme2V9sC9AL-%8*dub_!x#i> z1{gck^GAC4F*k}F$_YQ#>M=H==a2O8W9%9^@S*)Nw!)mKo5!|?kD*qGNz?qBPJ1YLiRP0XqQUU%)?V;ke$P|1WITD|s z*qyV%z^C3BVa>CqPM(=(>P!|YJoPVs`?dow#H2Ppwj8(qILyU+qW=aS;KLi>#yvFd zUgpZ!KFng##++%GwCl}l-`L9>E6Y}5@Nwk$QXBxJi zys)=-X;vO>IHkshbZ_acvqJ9jKhrR`h0Ziw@$g;gO-FpCFfdi_S<1Djvr5!=)7tiu zXB&$85P82`ub4Xbsf=9H&_7Mmz8R91|4+2F4t2!Yk41Y}ZrxG8`dN3pNL zCDz`%-xqbMpJ_-w$+z`N<)S65WQlox8-1|Un+Zv)D;_h-Det_Itys#nG1Rr z&7HX@F{PF@A{W(k$Eve{yx%YG-$v>6pJZG${FRcrfcDei>#`v3%KfeF*&X+nqTqte-;X%PFbLhvcyvXaG zZBMqI58LYPvr2%;P{Q% zJrB3vb$mtd$^mnejNgo0BJs)m!>iw65dt4aj*XASqB{Nr5AZ1`mAz1Ul>eL`KFu(G zWA+RRVV7R&*tU=lSVPMAP3CfmPwt=b@NwkW`1tA%cz{p8@&n+O`+^@n%`kprUVmQd zczdB7F#gH-P5CB?Ps(*hcv#&L@7ele%dzqC)gSNxA7p`Bx#WjWbF94({>Rk#jqpDQ zUGafJE4YTcf9yC&-jg88)ItxCfV_r?DqwX zuQ7g;`kcgvc05{&{$y-9ZvAn%iT6bR4LrbyH^8m*Jzsp9VozjcZOl_k?C%+$+&kyv zJxh;W&^vo6#RyFWKEl40?0AhHn`9y4Epe5uHiM5NCm5f~-gFf|FyBfXA#-ExIacEt zQ2OKG=Z<>?KhnbwKEx^Tfzp4Zow)gJvZ{zUkGL;$jEwt8-|~fq#(mbYE~er>@7}@W zcCvpl@Vty?S|-Z-wkN&uO;Fr7qT;=rIs-)XZ%*61q7X9fv&v=mBJMkF^SZ)!OXn8^ z_c(DM^@H8W?dI)|mGAW0jj=dKKXx2e86qs%YOKb&A9Kh z%{LY@0sU4z?(2`KKaLz5A7A|e5AeYcfLrMSKYYe!+;`gMfkGx=UQ3Vr%5m|r<=FW6 z>JNB;4|WvX`d0ekGdAPC#kuWNAEX{Jmke^EXRGq z|72~yK#xGSSkrNzBgd^jXonnM5pf@QfDdngTke~__>9T8PuRCq06wPUK1WV4J|a#d zejrXGj<9i3^J~Ok^y|RS9j6I?q=z4TkOLnm{SexTo1cjLi1Ud1M*bkrj3Isgf`-O@ zJ?7^7w)1@ZV_=-@pSS!=_Q(3RS8-n{T-?{MzL8i~RK#8P9rD+(abFL(n4-jeo4>qw z@xDWzj2-t;KiG{-!W+-@ecEd`#&Xea9^g~DSK1YD>%QL)pRpPD zZT|9vVmYASs>gjTF~4Ev$g%P9)gSNxAN&Bgl`r+fXKcoOo4>qEv25ENESj`ndfeCc ziq{W>wR6}vM~;n;ul|4s_#g+|x-av?XKcoOe|culVkTfcy&m^v)jCJ&D=Y;cM~=iN zDDI=b1U_wAzbU`ki_ch&`-J~V1=u&!ai1f{tv?RR0>?_+r|<40oo6oY+ujrRb?+$sSKp(uKbGI5=o`F#EoiQ`9A6gyV3WeHy&9kM@}eV(Nqc=C8Y4ACkNbw>;$zFP@$uCk@BknD0Jyb$ z-VdL#8TTD|QF}2La7LXT_YKF4`y4qoKEC<`9^ivL1-I-~e)x>dxbL`M9#>4+?b@q9 zdfb7}`{*x$PhRUcWq;zuXDr8k!vEv~;tJDopCiYuKWK+D-v=Jx!yDk1 z`I0X_V>0d&_AMWPkLkG2krRxMh|`E4h|`E8z=^mEYWM3@oZ^nt1V7Tl4?f6&50w5R z?ZnMb#C^nh#C^jrsBapndB5@<-ng%6zG*a$ZyNFKzoaMbOAg97ru-LgJVSkrmTvy+ z{#_gHUNE?|&Q=!kH-EO>`kukAMVSw82{v!v+O>K6qeFiqg8IR3WcT#O!(Q%*gtF^X zqk7&<&-}BpqhG$QXT!QTyZ;3N8GAgBzxdPCtF`ONKb5op#VyC};a`9K;@7Qz7c-s* z9^jLCPPSuk)8*LsMC`gsd|FS?`Hud+LHOAHqS`qch&i8>amlHL4|sr2?%xt0aMN>X z;}h|#U<#j;b-ts&Zwx-Uu=?{x=RAhdGIJbc`8YT*MO;FEn->JPZ-xwP?#ICP@$`EQ-?=w(*JAKd9gnub0pme6k_!+dxcw+;VE+10LX0`kTZD+ye25 z*FTW>#Oft92A^_B`&%|Vl{h@2`Abxv$F+lJysqT|X@B#-khK42lBWJBDXk@FokmX0S9Pm>P-30L7k>I! zN4Rwwa5qO;r?Gmceb*j4^Nnf2InFu_>IZ!*J?^cS)V1Dm{;|AHokOY%h~PP+kZ2?PQ#HCjE`7XLHxkF3gQTGBJP6H zuLD2#x(dOM^zefZa^M4{A3{5E^Aqbdi1Ud1IOm-7BUgFjzUKV~_RgNTk9vWQye#`= z*>tpd_C3#he{tGhj<({hojb)j%+?AQ>))2Ug!~WYmK73-Q&m2^viCgmm||+^O6z&; z3%fymU^n^--ndWaBICYyMeZ1VaBHZsHz%N-jCI@Bt6-8QviA0XIEQ z5}&rnk+mD2Sko{K!YA*lH@)m8?!m_`rxrfo0X`$^B|hM$=SkrcIWTwQ6Kfi#LHLwj zq2H>P+{``rxaHKs2Ry(h`=G=J-1J;2d?F8Qx$%iL4bvcevi7)%UUD<{;NzB43m@os6o8MB{(;0N zYA>NN_+;#Hd%fgl?$IB&oLcyR2l#Y9Ch-9`Jy%M9{x5lN11CpOCjL(n0t12s9AuovQiIVI_7`+HcxVXM1OR`~dCRyBUa1n&a>%gh_3X`0A5xF=BcyK7L=qZ^A zIHyFSh%V>L1@O4>?eyNf^_73uRDHXvYr1=9x~nJq+y8tBHNDgIJk|B>s(PM!jcp%T z={jg6Djhzx4%KhEo+v)>fKTcBk`LTM_{6pk)I8g`MuC=`bogXD(2|o5pL&PNkFF<*4?N(L{k7x+ zx6yC-$0b$$rsY$6UmG@Cdr?B}mV9iTvn9rCwrzc;Qgr(d^jr%`LX1CSzj=D1$MxX> zpPt`JK5#RWK>HKdfRi@01@j=K{^EJH{wA2?Kk$H0e~%ougj*P&xCWf$W5GN~ ziBIv_&h)?OdZPHi13uY{Bpe4_rOb_5nQLgLb%aO*oa-;WW;9e9S!OamBjfkxMSA8O^jh#Fu<=7`4G#$wJN zbA6ffXU@&$-C)ihWt6$qGgZ2UE+LQj$m48Z^qBJS37C_;zafwK$m7f?^dOHjK1m;E zF`MZlKJwU$96iY6>=@*6#+NCN_{d|AJM0?hq zQy%e=S5tfNp$B>JWeyl~MNN6cM;>QLq6c~KV9pX}!J6`jk37yMK@ala!5kaT7&7G% zA9?+1tpR$F2M^|iuy?g7kNC)A?GJj82M^|+uqT=+kNC*TtFu1PgFJXJ=FVJOQy%e= z$C;7nK^{C9Bjzk!Qy%e=$5|xkK^{C9i{^|bQy%e=#~!!nK^{C9JLL=#Qy%e=$66os zAP*jl8L_9FDUbNbE2=$S(StmAFvh_eA5$Ljk;fU4=s_Ml=#$UQl0JkfkNC*r>=E=J z4<7U(b2g+YkNC)APh0dL4<7V+a^{FBkNC*TO~~g!5AxtaA02zyn(~N`JkD@L5Aw)A z`Yh_%;QS*#@;Dm=J;)>f@Uc0&(M%ulk;k61=s_O&hfm0vAf`OxBQK}cuAv8ctw>7DJEw9;?0bSqs1(ZKgcpBQK}+@<9(ASj){>-|Q)7$|FAV*t-cma6les z$gu~ODUbNbW3M6fzyW!jO~9T_raa;!kG*lw0|(@}dzPxbx=eY*M;?2*pvUCFS_<|u zGUX8;dF(xc9+L-WrL%{NDUbNbW3LSKm^?UxkG*0{dBjH^dpn@V@6A!i5FMB%Z@>V&pLCT~8Drc)+KBt>gnYGaZUg?7mOE{3IJeNQuu3 z);ya}Zs*$Nqv?s_0}uFg{gvbcH#1d=Pu!^mzWOcM1cQ|LbZBfetLcg20}uFQkC%Ml z7Q!d)(6x_GvUvvS@F{o5KG5|<@qq_?#^0jaA61S*_*k(IlFc(nhfiG_b1|RY#x?bu zt|y8QJmAywD#-_KW}0OEHWk(;q{AntwF~C6+qj00t|y8QJm8aCDfz(7Oq1ec#XgYb zC$5!{4xg+$cglQnJJ;~h^+fT32YiYvBp*Zy`s-%6eV18T! zE?J*}o|<&ZPp(7lkFG~&Z;t=K13tyGBpHpC$0e}`7AfZ#<)(0PqssIt93n5 zeBc3}(kj*dsB&axoZ>SD)+VIGr_dq$K-Uw+2Och;g{pp2C9qpMjp5boi7z z=AHQHwXPGfC?<@q7C4wWBWkNzf@_5nQLGw~+L2W}=OmrqOs&Sw8k z8hpxb`7xi|&Nbyn*AvAD9`Gr@Sn`3JnJSl0Oao5wv0%V0ZtUr8dwx~9L-v8LCyEa| z;8VL;@_}0zpM8JEXgYlA9jf1SJyCq%0iTJ*k`LTM`NTBfZ1(S@QNPtXRKMwZqWHiA zK7}_+K5z@=6SD(O@v+d&lTP``b!dKwt|y8QJmAx_PStO!9EI{pW*=DS=1GT7xkLR2 zx}GRL@PN<6M#%?mp?s3r2Nt?{(&3ZuQ2EjIMDc+KeCjWdeBc(wXWySOnhu{rhxq7v zqWHiAKJb7W*M!*D`~Hm4bodlI#7EZ?#OK@#GnqZk52ato`NkWa@8Z7EU&-sSiQsw2 z=U#Z_W#=#JUOqBBupx>_o#GTb_ubQhxxC`bk!g5zi+&Hq>KAVmwCTPiSz0w*(Rd# zFtthiZNWwS6Y0u2p?<%}%Z2mi&zrA)-{OR%lXN?OYJ7Me5og_|m76zi8X34~y@i6K zi{D?asVr#m^_vz6S3F_I3 zlg1}qw$Gdt`I^c6w32oEZ?uQ@l)B$W5A)g^_m3@n5&1sHxzE$%tMAXsEPnpO&cCza z0}uG10&cm_2k==rKla|cQ<=~1Wd~I2Zhaih2fKj$YBhw9rze^Z^@+&`eZ{W^@ZrZ8 zp-nzE``1LBRJ}G^DY*Ru(R^Y&dLs&aJUu=>u2^wjWB(vkf1B&Qxsi5{ka7jrnd(L% zPqdS?i?ox4KdH0lm0gNlLYwX6y!gdBM6hep|;@Wje$idOKNjet(`D# z-<6Dyrze_ES=A>dA2=1y4&cL&F~X_ZPKr9|!MVp&3J1`ClX5%h>hbY$bChLJ{g+7 zPj-Fn!h5Q7ZriXV?RGLO9YTM0@WN^)^B)zN4*#9kF1*wE{Tyh)toN~5BN~;!!37SQ2B{DS;I+} z6*P@3vCn7Q)*Y4l><*P5S5I{Lfd_ne8{oz@;mVbRqa%YG*Q{L0U-nJ-?6Yb-)6!nx zqWo;zx~G!%(_rsm-(l|+p0CE|RR4&Xj_r4t;|J#q4{dILASqrfFEuCTW;lH#;`2w< zFEYz#@0DIB>)+h5GAtb@!=4w(5J_E+Qx5ox49A}%{j0*!GJN4%Z|J+>umASJeP!>*AXu zZbD`{?UmU7u=rDR|HHna^+Ut%eXV{G`I^Z*Qz>MF-vd+5n0g<~zfX2ed!_49?Uh*K zp#E(+3ws3flE>aijgQwf;@kZ|79YEw(>;O4|8O{if>?eEjnjy!s7$2|lLXWa?J) z3uDgCRrY}?G{&{4--JJF&pz1QSHA!FO1(pTbUj}A@iGGY03Pt+4!Chm$o$W^P5e~# zXN66?XwkbWHFtjrp4e_k`O)=+@e$+K_z(2U<42Gx{4PT5aro)|@88mG*#LPk3iQHGDVuLXnJ?!$#chn2{YV%bnU+%-73g z{-CO^{d|7k*xAw!8#^u9pJ|9_;eQXEQtw;4wD#b>^81ATi;g^cshHy=)8S9_L#O$Ts)A7x{YjwR0+k{qXy=mpvdW z3kk==Jw3jDFjo_N-~pe)OV#_V-s}9_Kt8eC-E)VAHw>)rwotuGzueZkS;1$~qQOeJ zMLwm3eubwenh!kSLp=jG7pVF|yBpWDumDD-#6F*GTR&0BwP+XV^Zd;`in^xV)%66G zRLT!L;DcNiXM$fEpg+xl?F`jN38uqVi0>hnZ(e&i2_8 zq_@?u=+;-kF~qoi?-%aq-B)Ky%6S8?uU=bN)GN~woX*MqD$1KUQ4@GIv_HS%nQueB?0)3O&eSt_pKOne$@GBR=w&8;%~*hdjojn6qZe zBR=xzD@G6UNGD_W%w1)zkjUG{^QyjP$dpHXIxzym(nzm$C7W+q4Vd76K2`P!cEl@6c0J7(bLA99sXQY!0@k97{dZNn@Yp>x`J3qSpnL2$-DeXz%&VBOp zk@J+}b0H>timo0XA8u=`aTfLgJmAx#*2u%njiA0LK2xA?X^GW2iaci_r2RRN8xn@_ z@$^LVfd_n04>zs}r%vBeO6AA3-*{rXA$*FO9)C%d`qOGA`Z7zmRBHbz*HDiAw+u%QkaGu$FYx9N zh_v5C0$U8nK7Vv$uaMGZFKC40Z)gl<-O^_ zCi%lXCoHS3+WFAe_tn^JL;tI{R5DwBq0-?`@I5E=R#(0HV-^2jo3F(CD(o}zgZ6*) zJ<;~F^lz-3sob2Xw*F#wjlwD?Pxn9iuuA^G=#Rnen85@y&;AZMod}4PH zX#Jnv%T3{JUEAj)#%7Bh>c7$TMDc+Kd~zR?kw-7#7>;uUsu9c7m zpMh#&lKv<&Kia*fe$(|t@qq_?#*2~<+)VwleoK0$vMDvrbsBswt>!yqALx3b_`m}` zV}B$0z|G7#_{233)R`g4x(*tNvd?Gjj_a!R4wWBWPZS?`z^8t>=TQ%FE{x@Au z6d!oNXW}}^2X0!1`1r&%5EP%dMuC=`6!^^j`)a;Jd~`igeBc3}{7sS%+{SNs??!#k za8-V^d}{A&!)9wQO32-kkF7P=Vtirkj(@0T-SGuI*FusILoQrw-cte| z@F~4p@`0O~1jQ%enaUQ-1Iv4eHTcYZpqlSc`=jg8-vo2~2OjY0f3M^Nw=h0&?YCro z26}2zsNZ(%s+P5RXSz09-zh)3o+v)>fX~=NY95IyM`pSxKXL81WPJvDYEs}c_t9#t zLws~SQGDP5AIAORrss(G4xhO8Te3a_JvAxt+3`d*+aW%>o+v)>fDbtUH?9e%(%Q+! z9+sBYPRjP@r&XRatx(i&dmSLm?_s{r#6fZoKIQ?L`mOH4m*8-MgR<J#@}r z+PJ2Bqy8r=--Z7EyKi^W@MvY?>W`{DLC_rB#E=l8#Bc@IAFhw?W1Nq@f7PYANd z<60AT_guEQ7sJ*Y`})RSy|t2e$0PJwDwAQoR@eUj^QBW~I`i0%^5&Pe0~UM2)8m_u z-Lzf{9`MQEBKg2AcTNzW*vo-3(w}YTiNfx+yVn1?TbQ~T#i+2y0>nzvqS?8UPDbS2zl)YB7PerS*3Q+w3k z{`CBXpU>1;uVvRB|I>SJ>szzT*~`T3Z}9VBz1G-sB_H17c0;#*bM^T6xZ=cpjrCfJ z2Yj%b;8r>|kWbw1)Qr8ofb6aZk~Y`9m9pEP>gU6Ht-=fK@bUCS^MMC^0BDvY{yufq zYuPV9@Bi|{m9n;uif6VNQhszj{x?Bt6ZeVzGw>hSUjaXYG~ss4k}?sm1!exLuWorw?2b|m{v8BTm%hNEBb zw=ZFS-?%!Hu4j(4Q-t5O_O4$#{#Gk~-zKulT8Q7bXvLw`wRb(`q(gk-`+ejO^+u`Y z&zJEx`|EXSw@y#LZ|=qQO4*&i=P%8s-#4bt443)e`v2W}!`0)f*PHx4c)+LrDfJ$! z_d5U9AU@O6@0)w^|5fU4z3%736@FhW;n}*Lo@hSsfDiQy+{`y)I{ST(P3%|Awm8oz zmynOH2lgVbO}`Hw@PP;1vab&+Khx9idu;UJYR=`O=UTJhmwj$BzueOkU4Cef;WPRz zfBVyapr6ll_WQoO`4^RX2p`*ipQp#ihvMPx(*X~ckFuNK*54h-XIlDwi&kW+wUB-j z+kT&?XA(Y&2YdhsH?9e%v)}jL|2(Lg>(Dr+uE$@K%ACee!+*d}!;gRmewQ06yN>du z`)R_DBtG(xgC19o8n?r~$KTQAHT*v1=i&F&50-u(a*$7G+wY6(Ni_R?{xi2GzAxL6 z{%^}L|3ew}e8%6tg!z3%hEWCIq49e z1b&~&AL@<%?f!fzp6svJr?cPpmVZ6AT66s|e`z-TzWhPS>>^K(uU>ER```he^6ioj z?{&|?L42mC-}jc4Csu1Ab`iAj`$`GNlRQ1qeBc2e>KVAn^6CA5I{SUwZhvVt>)J)$ zGY5T}NO)Gft_Su)kLmZp13sh$ZapUjm7nS9_icO8qH50Nqvu+)-&fo}S^ehei7r31 z$M7kC*Wdo+=KJ|fXTR^Bwa>5SUAxuK$F|?+>GAQQc({HaJm7=f1h>+HKt9vb@B96X zldFXgKDPZnPfs)-c)$mMaO0YAI{SS~Ke?by}SMcJ zo!IXqf2cRQzUR-E>>_`?KAru(MYk=kmJg=h@Rw%O@9TeFGP}srwZ35;rDeNo{W#DCz=mD;6ptFH?u@fXTNXL#c!L zpWJ_4O4x6r>w&${VETRVfDfsFTX9ZM`I(-6-==@>uhv59x7jLVnCF>0I9d7e^hB2* z+GF_C#{BKi#9@9u)7kI4@g=?0>|vB2{jJVqZ2Ntl9v>fyhwJyj13uVIaLX?Zd|ZZwaew;~=J)lee$SdZH(3ihbt1G1g4{_2VKHhlWn%}(E`TbLU^6%mQ7w_dNhdcR0y)kyHKVNb){q_2E z_4}5+ptrB#GaWu> zR0=Jw@2e%WTRlC|eBj~oQS}Vm%n~?V{k{gDkG-{0KcuyGH=A(0PuHWjyQbeqy$>IF zz%92qsQgSnzpqiheeAMI;UM_vxz;@1$2mFVSF0g*k*6oR{Lmi5r|?mK`%~WH=QCaX zz8^gF>As;)oKUGB8qCMG-{79{GX?xUyX(h<%~d+^b(Nx9 zzxm6LZNJacGYKEX13mzR8`p%>)$bGKXXmAxDs|U>; zpO!Vo3-G%LvFqTc`)NWR@sWpLf}esMLgZ0iO?kve9=U}c@7bBERpo-;hO`4ahp@^i~!BW`!h$c~ofGiGGOd0d&ypXAne&M93_ z|NU`i@h^LwY?n&g{OwaCN{s(q(0%CAyNW{<{7Ay05Mb`+uig6@S&Gh04emFe({ zx?uZZOE1`d+EV{to3Cgm$RFyV(lycfL_M@1W=k{H){yHq3d)^Fv6d~`ig zeBc3};@2b}xP|gbX1_^3iL5yLeAe#RQq8wI|104>jJlpEKJb9g_??mu+(P*zv)?42 zL{?l1eCGa5wccv|X3SGC^C|3__D9zf#Rnenp`QhArXJd#Mak?p$tRH&mja(1AFpOx z?8hv=Aenuw>xtq65BR_XZd?B-0f<< zeR|I%%8%$zrT>)vR5a4h$~9rv9-%)4HM98&uDlGb1DCl0K{Y zQxEXRM||Y5b{{>+ zW3LO&{$|e%Qy%e=$C?oIxboB*EY7NC&Aus*_{d|f1bUFi+&s=!W{#gJkNC*TtF`dx zK^~kr3z#_)raa;!k3GB4gFJX}b}f4J;4Dkl7MSvgk39AwM-TGg!P$$(StmAaCR7L zahl|*_{d|AGxQ*j{NpSo_6|4Y5g&Q1ooCN% z*z3TQM||Wl28ABvk$;@6!WtS=9`TXKm#}a+}P4ZNHMVs=7k39O6=sSl4@|Y7&->E5& z_{gIV1U)7X#`5V)GUX8;c_rnuqsQdIUc&T!nDU5^ynf|lqQ~UH9##12raa;!51$A< zCJ)v=<6D~Yh>tvF-ek~Y@?cIqzK||&m9XJIFZ&wso$5EpYvh`toFm#3+f;3w0U$&YqJ_~?2f`6wRn$=xIQz|GXJ_{8kF^Ycm6 zwVD#2VvA$1X1=s~4If=k6d!oNr~gL9M{zUtDn2oL?)-cbb*-kvC*L7Hx}GRL@PJS0 zUdab;A$($v?D_d5>RL^SPoc%J2{T_>y{7!=dZPHi13uaNBpyZ7X>xtq65BOw1A^E^9 zgpU>bAlU$HI(+IKs^4@yQGDP5pZXUiAGn3^v0@)28-PuRPq{<&o31B{4?N)0^L|x+ zR5=RaW5qs5HUOIrpIV3PH(gH@A9%ngzf1CgTQHvm^Wz!_R=N%viAsl0u0!pQt|y8Q zJm6FQfaC+WFg|e&1T{A+S=T{|dd)obiGT~8Drc)+LsOOg-VOuf>6TQEPa zfuQ&#>pDo0Ppw1kkFF<*4?N)0^MK?7w=h0&4Fts}S=T{|e99eae{?-jeBc3};ul_U zrdYEFw=h0&4Fts}S=T{|e6lUhJvH;C)obcET~8Drc)+JHEcw9A)T`<@^Up0`H*B_+ z?~b}r+6RR_f#VBj53C*;8jgw{@>|}u5Aa-Omb0X=EoX`Q z#P|<9;FH@S`M}LouJ|m7YrjdG+JbqIQvX}FL;k6*M}HH{@gI1=r}lZt2X0|};@WSL zj|KA}B|e1~*G8K8(&{zkN7oa@2OjV#T_*X!&D2ZziEF<}J{HV_wD@$$J}78m|$iQ)qf_>?{?`M?b>gf5?$27=B0gEaW$I^>_~dZPHi13u+z zBpBqV`_%%r-;p16@xPA9%oL{L_*T+|0BoK2uA*BBx zW_506Ut=B59Oti|p5VR-`VZg%pX?gR2X3YUxBSHHfK%nCVP>1M+q+JOPrgI-o31CS z{J;Y~6JL~k;AZ9-eD?j?{B-!#I>blU6U7G}@X6jG`M@odPs{?Zm!IxL-8|{=sdtEv zt|y8QJmAxFwd4c0P(I1*Hw)c7>F}v_$Ue~ZMDc+KeBc2$t_j`xEt&mhp_?ZiKG_cS zkLr4Y_?&xTCbP%+p=X!eGkBx(UEDYN6L~%QEA|qGj114c@XE{1U)H^RWO!iR#f6dX z^DZ46?pBr78`h0xR-U(P(tRI=B-Rllz2{qhew7#(G(Y*SlTXtBUi$gXjrAnU3j=Eg zhsDmH7Y+{&nz7oyzH8~zeS01|rdof!JiDScM~1~0$vqOXCwqG(h1!=|Gx3+kuL5dUFQ8FCC;m#WSfJ=!(_F7@}Q>^T*N<-F0sd~e!s}eh4bdm zo3DP~;)JA=bUS})e0UxaXWgcin>TJ68MtV@g@U8x6Tp{ik?y_DA1PPtMN$4=c{V8b z6@Kv2OPY|7d97ww6P|XWQ2Qs+3#g)3RXWMo}(=?cnJNYLC77AMk(=;^0<$ZvdZ#+|_>A z$h`#d(Ks_B%a2VyyO%w;T5plh_)9!{jWo3q!pGC&@)2c6{qy)tsQTXIgRb(e0etu| zMi}qyZdN4ti2i9?d_KAs+zk57QOudzRoYG2Lu_}q+L zLP&Xo>r8c{khfQ~XUcBDjw!udopq=DhOQ@5vt#DXpC9*x^GwFGV>qK=hTo34SGLQA zFUhd~Dt}0Rg@yT?EN_H+u3TQ({=wXmePzc8{iVg9@6BXRsLFJRlzVo}o-1GK{Jzck zJ^CZKH|!XdKa}&@7QY=+e~-VMC$&S8#`m7et{o%tHIw;frPyLQpV0hfFHMtwqnvws zWI0zxc#|Ci5BTsNmle11Px<*IwL_A|CkJe|lY-B-t^ZT0yZbOi*TeZ^61J1B9=9G2 zY$xFXAD$m>#cKliB(OuKsvRTv>|Sh!EubBDK9 z&U2?EYbQNDzH;7lW-mP8!}G(f=k5SLE9b{vuWOIbV(WZ%FFUSUJi0YLF>v!q~K)B%x=al{-|80S-y6%wobN- zUDv7b6aLW4+2C(Is(+2}@h4|5-Ez`>skf7}gOigH`X7HX=Zrm{Rh8)wH+t>l;{(~H zj}Oe9bZnY(PX18N3)^M>puY40e>qR;uP2R9x@aeDja!I(ZM2gu*2DTZxtFHNzflk8 zTs^X!hpvlMJmAB747dKz`S~RE*OSI42Wn+y9qY3R8Pmfy<2m1T)fDg}4 zIqJD8fX_7a_a&eC)mn>oW<6nljHhQ3KB~Sq`M|0E^#DHn7$cmj{=R54_SV)^$}RTC z#CY^Z6zVrmkITm=5<7-=HO!8|E+M2`bt$f<9fRG19W%a6`uoH$9qRY@r^?yNy~5{f zX7JTZ_xsybP9OKdj(=F|4Lb{@4Uui#D)e77 zxXNjB53R~{_@iI*Z)YvN=HK4lvK>SIP|imO{rQx=*^#iq=c*?n_C%l}ma{6Q70UzFDxD{)Ge3I?&(C$M8-fy=*M)29T z_4}24i|u6BOOy4-czUAwzym&H1>CqMTsck8uHyO94n_Id>y!)HC)%sxzevBEc5J-v z_q(^>VfIg-Gd#4p{fVQESo0RdU0#zpF+0N|d%ZU~ZRN|VG94nFp5I-*?r`V#>ss!gCVwbz z0Oy51k;ePZ$ZP;QZ;iO! zF(W%lp6B>=2Q-v%#^e6JcG65o{Z83V<_2VF{yy3D(YHTc{g1!=`v>=xUnle*efuY? znM}7zhd;$f-~JQl_uHJ`qd$VX@Egbv%6ajV{(Kp~!C%gkwv#sdKW)xC6?yvg3%e_| z4$ar_^tk0bu>TVt@X5bJ@`2m<7lZi3AMa_jlW{9?-z#T#oKWytv}kjs&>=pa9+!{v zbj@}QJmAxRx8wu2{Eb0;;@dHe@?*h{u|02F@Y%NY_Dc2`{0+Yy<9js{T+mK>dR#t% zQkP_pfs$y{(3Mx4sIFA?)ELcfPN8 zU!A!goT~Q!D!A|GMB{lmbA5((<~nn@@%hZY8r}`&-qOY~XI}UD#9UzFBaglX^dJu( z5SxZR8dDzekw@P;dQ5rL@$?0m@`#T-)_|bLO_!QWg>Orrx+#zN$YX6RdPpDnNBUU% z!QKXfmB>HhyYf`u8G4Y%nlSQ@HL*?dRD9&IrUE^tJbVDwnwj#5k38m{vZj%A@w}{6 zW6rmkf5b-~a}3Y}59YMNgSl~L`iPG_=9HiZIgBkcXOcM~X8MSaJjUM8!*e2!Iqi&j zo9QDy@|cr^9^^2Vz?eB>Zf5$3k34D#^uQOnw6V-Z(&Y)?oxMP4n@bn@eRt#&P95KU zvD0f~Z_PE&S9Wb0zwP9|;_miCY+Fx{Yug6;9`JzA#0|<~Vl9?2)ncV}-f_)JW)N7&SvvnBV; zv$dxL8J-K7+k7B5Bn;u>>CwxNCtTbo>^FG8hdbcLHDS^*)<)kX!V-n)>}gmFnLEoE zYoa7Ok>TU%3FgC|hU{VJ?rHd_v|rfk&`i%Hdm45x-!L@ftaY7qYeUmsE!^+lV-CH= z4((}}xp(!0i*NaAW&F8nuI~&P7M?HXB6MkU97Wo%CxI=7xnD@TtG>Fsai&{#kqmS5 zW!R#awr>;f!xkqN`D^ZVhd}&7u9JpcW0EH!^59Oo_&q9JHup5Fsl79c5BlFX-S6Du zB$oR~mwCT<9vgca=G?I)A+h-*xQKruzr@^b{eF>`=AMS6lXN?`G(J3!h_f&DG^AY7 z*IPSRmM@jOOjqUcA$?CnTXPgwIvY1`T(fdxCg!r=gPP_j`ulpvZkOeH^a@qJ-z&qy zjWXo-Vm$ z>}OM4%hxvNUfArv`O56&eXlINu2KlG&!`vkuerQ2M{!KO7cD=yx>4l2*fY=5*BY(B0Ymrr2% zfd_nO2jEuT6~t#M^xxPoKWAL>x0QOxniTqP#&VKRAz}UI>2di4mLGV)hxY+){T~V9 zGd1R3i1x=;|BYyW&OhRFm261=H2pVYhemxC3s*t$}=|#F{&s zbISxDQNI=4cH7TK_*>%Bf2)Sh(=_j?=jC6ph6 zJmjDUIfU3DyeGQ6y-pV4=i&F2zc1IO5x@U|RQu%Yzi&eA!Q3ua>UB?#TW2di4mLGV)hjsvN#e0JIOi#aW{OOCT^$@?p^!vutcuL&*&C}!Z2`oSGfDiiMHgRtd zpXurM{oBj`x>^qL%T2$puIv%=tJRS9$I~PEg!+BTUV@KlH}(I(&u2ROeWLxThl~r` z_WL|Ndin7vKHPzwTN@ALGcEl-QNI;K%8zxw&(#yoNBC*@5BO>L5pcrqBE+tP zpYEp#dBjH^a?pbuLhKOU6J4J0`|$Jd`^FBJ<9)=hzv%mEj`wZKWa4e}+dSUq-!r@X zugXq-P=>Ytmf`p_G9=%^{Jw(Pizk1A=l9)m-{Y;0_c_mH_k-W}ttYb8TkhLg5z>?R zedG`IM%RQtUkdm6>y7E`_g!)5H!9hX{ye-4{JxTUAKIl$yX)z3>y1FW6&~=(&6M*` z;MVnU5TEJk_la^>4(ZP`{k|U6FBX@Nr^n^vh-&ux-~pfVA(9W=ir)z0Gd=yjTkiW= zCD)?gmrLmPd3szvf#nAt@X4xn0B&R74&pOC{k~i7`%@(!!pHRcx)S<*o*tJ^VEKUu zd?>GQ%k2r`Gd=yj@t5vjEx7h1Eso3))9E&V=GzvV*uwQT!+o}O?%!cW70 zz)!=EfD?X~8!CSVe!8C~Fgs^fiw z_Qw1CXFyCmBK?@ICsp`O8Rnn$`!`{JUrvo1jBE2eul~bvt&aB%!o^mI-*@#NURk~R z4~Hcl?<0SxH*){v&zJHK{q@Fl_WL&9aYVHi;#W}1ZiNSY#{VSw zz^&`YL42mC-zUml!99x+BC=$eeqTMIU+(E~`8bN2{XTfWr|?I~2X4im1o4@ke&5x9 zcyTo!((an$ed9^zdAfRBK7r*29`Ky`OY1OiuZ~pRQ`hD3Gla0rE zdR#t%r(a-d`!D3U-a{t z&VHY0e~KL%@ALHN<%iPY`F-$!4|l+AbmslObvlaAwDkK#{Zn<*gm{Q|h+g<-6^7Z(8c2vr4y%C+J zY{K;wx*pvEd-mC@o^}3R#XJspz$gD5$p>y`DqTJ?O;^dM`&?6Q``7mQY}>l0QfrY< ze?q%e*AvAD9`GqXrTB!DBbQIiQ>PT4WakBPD*AvAD9`GqV zPx67AKUE%|xQFJc_DAwbWF@4*=kjW~yEQ(wgnV>8QGDP5AN+W@h4M*eA4ooltOWaf z*3Kn-xp_d7H5DC(N|sJfmgKJb7Kvf;)x;mT=xW~k^tSi9pRjd6IMHH}d45&d=a z&(U938dqnAs`(nZ{eiS!`VW-#@aV7Q^~BRMBu~TU zY4oe{_)%3qiFp#+fA_?Lt*y&Oy1kHj8mFK2yvl+|!)z8*76<9(B9q(6xK zp}duTY2?cb{QdmXd7j3DXU#mT=GKRLE#>vaGf!hI;Tg)F9#?kYI5Rxp)Bi)s2X5u= zAU-jjCFiASG*od5qwl4&+g^$NxNZ~W?s)78KOb|RM(LPj_MWH5<>NeE^E?fBz^CUY zk`LUvP7LA`)0l8lVDl_AyZhO_uCH+A^*f6v1oJWHX-p*SZ}9ZEd;-f4Jm5n+0JqZ1 zg80OAW+^`w&Z=`pVl#q|t@8*(`6*oa{hj%c`pulD!9KUXBHh9T_MWH5<>SN-C_k!Q zh7T&>HhN4DpXoVI5UIqRG^D6KoTuy3U1pXIx9sKlp6+#~Ik%t`gAcqh;g!e?3C;UGAJp8`A z+UK13_1S*E@Bh^^u*b)wT~?eU{Xp`q)o|nwe_7po(nX8+)jSQMf6uS3s${nOw@QaU z$Qu z$G_WIJC1sz&E&LrJ9d$-M{nWHc^dG5PtP|bAGn!n6`$DcuEryBd}4QO>3k9m!=%FJ znM%Gxd~`igeBc3}{#}v}+(P)+un!VW*0A6H>|U0w*4=(B^U3X8Q@`nYqWHiAKBZaG zu7#VKDpkK(u@B^6X51;AY4AC|T5$Wd%qO>V4If=k6d!oNr*@F!12;2OlFuux*awnN zTq_|BJ`1aL*Dp7p+|D(8bUjgg-~pe)zsdRyZf2?!A1n5Oy`suUk9_JQOR*Gfo(&)cfS4%yebo+v)>fKSi=NDhsD9J+MDc+Kd&%8#xm ziVr;CGybUL12-*08ee7owjkanmW~9)C$3STB_{!(wnYE+ z+PQaE3$ER(=UPY-V*Hu%>P!7YZ;e*0y|*5NS! ziuqV1lX+TP6L#%+(tXaehX*#qeZ`&WIqNp98`_B6cEee7W@KhJB0a07sveMe`tOfB zi+}CP%TCgsi1|=2IP9annaoknT9Kd}c?nnn5kBIjehsq&f=_wSYI@crEK zg(#Q%Id}8Co1Nk>YJgdpBQoMQG3SrD*v$De&*J6XV9wr{vf-ISy}wEg@`#T-_WDK- z^4v2yRoltg$xg9qe2_IGS>h~MQy%e=#~!ulK^}aWW5XFDraa;!k25aOgFN^$CxkuBOnJmd9&3NlgFN^$ zhk-MYOnJmdUR|y2M-TGg%a}WJZB2Q^M;>Q~pa*&IV2qfvbWM50M;?39q6c~KU`&&} zx=ne+M;>Qdq6c~KU<{5u;7obMM;>c^(1Sd9FlNLVQl>oOBdtwZ3PBI@;6a~!ZdCdZraa;!k3DG7gFJZ9_s( zJ#auCXWX&JkSUM&$YU=T^q4$YOTnHvraa;!kG)6GWAfmvboOvDRa7d2mJ`dphXyRyoFR?iaG2!1tUuO!j>u z*9>Lf^i)`zu-LKP?XB75IkO#_TcGRFdm+reX?VaVJ6rOB8|fxgeByRZXY{$d$wm;; z;Zt|lZ1Ti*L*Zx5aYX8RqWHiAKBce8@&q?Cb&}6iSeuXzpWGyU31)t@dkr65PZS?` zz^D9M$p>zxe#Iwt-=|)Fl8qpw!zbIJu^nAc6d!oNXLP6J1Gf-9aibGPQ4AS9~ z?@;;C^+fT32Yl)k$p>yBeBusW`}icAXOIq`tUI^Bd~!S2)Ni_;C_eCj&)9b*AGn#R zQuUh^`ykmogLL@hJ7mAVP5IIFMDc+Ke8yfY z`M}Lgl`KCC=EpSxtq6 z5BStqOFnQ5;}h3@OV($grzRaf#SZb&^+fT32Yko@xN%J=%g>^oS;8V)W>#($N22$Kzqiy!@*xVbD=goGg|613hzX_&& z01x=|ze4hX8|fx=`NTBfZ1(S@!Kc`v@i|>j6d!oNr{^yuAGpDV(B%`;fKz-d7;uZN z?k&pm)jDKf>w2R2zym)0gOU&2NH-yT_Wc>7>F_CcX#7Xl6U7G}@EQF}$p>z5A$0k~ zG~jIZ@1#+`7<8`#{$d z#Rnen$<3F1;06~$`0V>LM$_R_>rna8^+fT32YlcFH?9d?KFRC@3*9{F@F{l4KG5|9 z@j3UxOlFVs!|0=Oyl|uQUEJ68u)H4qN$@!0xffn}+4;-5myZk&th=}{(tX~ggTvi# zST~wkdET<6Kx`pA#JHzC_UBiLJqpZEt?T5I^uL#Wesg1u|MJ4Xn!#bQqrrv4gK-!7 zYs!ARcmL{^*T188{AEX;DfHFulwr@S<=J_qGrcqPL_R%Ni`&ZA;>ogJD&H!@@f&2= zzf*>-$cS@~=ug_>L?nO3**_xv=7)9I=HKI9kA6k+EbsJlKAV zmwCTPiBnZ1*;b?RFy%?=Px1WXpGa5M3HAHMd%tkr{CV@$?^~RZbdql8PmK@HBjT*v zv~u&tO(O#rt+!CoDES0tSrqBs>->>=h`mqx_sTPfiC3HXi@qOgk!|gL(%3g;-u(Gz zps3Ao=7-F^PcoU4e|*eYcMbgUHDdphHpOKMCkD4e$ob;GmUi7YZ&%;M!?TvonRiUD z*!!gZfitV!2h6H)j|h9$4{lu3yqFtnz7WT<=Xy3y_n>#GbYT7F!R~h#1~+zZ z-n4Gx#oYtzFDVRU=4~2Wzjl+;#tglC-s+(ZFVRK$z7N0ao?X8@?(Mq{DR1w4boYJE z{wwi5g1gxJgy%K)J`wK(?*Q*a_UH1Q;9bf6-_KKhCt|vsndWz5MxuA3esc6Xar@=B z?YjQtJNiaH|3Dw_#NN04Yo+O(7}zwprh8~(cjM)7?3hhMn}=5qcCU7 z)kEuthF3ZTf8&~!>o%@mw{dXZ>X&3%cqhL1(EE1n-F{u)Z4Z|czY{!f&^y69z&nwD zO1=}kEA_XgTTjGva|7OqnTg(s;)|o-i4PuG+V$B3Kiv26U+?eM6W#yX+f+|T)DruK zb)zdUx@=^yI~VaTwDC@y_up^cHFN*B_EpPU62B8XZ_qozJHR_pK0?~Eyes9U>AVw3 z_syEwv~Sj|MEhpdCwV81`_w(VGKW6ov>8YBO}zYsM%&S-y}$XNJM~)J$`Qu8K=obd zKkg@=+%;$aXO?XFMA6Y7??cWyaT)wwbSG~!Mjp;Svv0o_C(yh$C}@X{Sv(s z1#R9?P;Ph4`q|Fsf8-lGpMCZmr;L7~@lMR||9o}nazCF&2Sbp6gnzrJ{?+QPJqxPW zo%pKCc?#UgDe_;Jy>vuf4lEBXfYS9(U}?g!F@>Z@>1d)x`%csP30}Tknj_VLqL~F@pa} zJ;Cz^y%W3xyc0bq%6EcyrRRtg--+O4xAfQNHMJf4CweDplhhOQ5Bl<1SIs_r$&8)f z?E9bnj&YdedcV5&@ahGB^}oKCK<>5La5XNvEa7QxdPbBt9#*~kz^nU8kKVC!#!W*vV@vC)Z|%E?HE(|GshF9A zGBYxp8mj&rxDV&p(X#KY_!`wG_fmg2St=*akbQ!LkDTzXT}xNr?9>wnJ3MNQwj)T! zhLNDZw*EJ#>JIz}{g0e*?ylbqKlR|!)n9VbAwIux-^U*w{zTu#8xNYan^x2ls~jcd z4}JIKla%Y!hX1tqEWHn6h47{MF-Dj)zNb>o{mVXS?t6Ro`k{gLGk@NvF4X70{E<)AN$-KdwiBUCDY#C zP=e3iJ>##*zoa!j^y!mdt%mT?^>}=oDWC?QaaEs~e9$-c*#JKL7$daF$L8D^Q70Yx zfj=$IP10`@ZQMw^M@V^t>r8c{khj-SM7!v=lP{9C z6Y;x#mufp1bHp^GwUd8T?PS(xJB=S9+r`>i8BUz#5AhesH#00QlIlj#%OMLS9UP|nFG z;+MZQb<4TUdidmjzpMI#U);aA{-W0E;k-7cN?x@RQqFZfS~+j3hv5Mqbil3n?EpU0 zu$>fqj=brJorPR$e8%T_W8UOhDiW9?KKvLXoT}}lsFQY_|I@FR zC+&}j@z7cn_~?2xKJK03KG9B6Z-=#$w0ne2&6hM58M(=9`AZ{iw~QRe3ZCiMtOqo-ajwIGzIM_~NbNk?PUhYrL-Y5^uFtsO z!@K_CgTjy8H|?a*zy9{Cb~&Sx6`2lyiqAOwL%Ys6{C&>v(I4?1iFT6wpq!7M?$4Ln zHh(#nYsun{I%YC`V(@N3#`#}#`X>8zraC98_*2uLY-pG)deiSBPme$6>fV}L4+oXL zrf6;dfpYHYap(Ssad`D_%USS&2Yh-?l6>Hn|6UNExIO!sOrsCoiC!3J`_YUDcF&0t ze0D!_YH!xHW76g0>2djp=TmbfJU;Mn`4l7{xaIB$;uCWszmtH*+a0%)UL%x7`PsJh zjwN}wKPFv1o*tJ^VEO4$Jm532Lh^yz#G^rcV!Lg!{4C6f`6>xN_RG(nN0xm(@7ggb z^KtdKd_;aUl^=M(hjtlmg$IK8EQk%LZ~edqJ5%xOp0g(Ex3z2kac8|l<;T+_`Gl=y zh6j9jso};o;mVbRqa$Kw&Px8WZ^CDvRddBHowFwREL!xkO4?5&+I`V)h5d~^-t$vA zzLQgS`sl%iJ^qAYkIPB>Z6{aS<1r&U+Ik&(T+H!wdh%4i)j>Xcd?F|7-`qJeY}}gQ zf5&xyys!Aj7cbsd_PEf0T=x&1v88fFro;a*$8~RWe*gZYV}aOvq^)YqTkAvJudRKXZsU7vu^)%bbD1^oUC8O)8lKe+`Mr4C?4?P zJ%(HTp+G*d2TX1Di`eW}6nqvfT2jfk$Y=EQWPCh5(R|Qto~(cKZNj0akmWDRS>x z46Ys-8g6%XrHs|xZZsFWuw&#bx<4qt`(U3PlO0fY%uzC|zg*cdy)tAju`AH{GOp%} z5N^NrQ`MP``IP%+98AphUVPwrP8vSfJ2Uf4lO41D+OqTen_HeQLjF+B^D3XnhMxQU z{&?Rg=eizI&cpg? z-~k`rW4IMQaH(jd<_trJwcI+;Igo1&3oVPuLHj=~4BtXM1M6c|P!f z52=CM*w+I1#I6U)z9oC@Cw;KPqG!l~L% zBioFh^=3O{$LM;Z>=@eBFgpgjgphItSK3KYuZn&e>=x{p{ClMxL;Ttc{dSDy^{=r@ z_CejOfBlo{r+Kc=jwu~0+vV)*WmxmBzI(C+<4+$5pS+eW2JI|Wbj@h6LnFViM z^!CYg1pN*l^EaV?;hGb6y<^3fmYjCyawi?)e4@%T9NEsg#&>JyU>X)4qM z`0!(l&?X<7{=TS_PP_By-hw;dGRDKT5QXxi>(ThQ62yJN->2RVYbR;<2q{-^r5>i8 zq+O()92=7DB=HNs_OE}n>+hfLK3}_Eym=YFSMB7X{&sSuY!~~_Rqf^T{UQ5cgz2rT zb&iC8v8`UY;IIB+(snXTUaNnf9dhGg_y1evt0({Sl9{*M+&lA@Z#A`(eOGK-+IPhr zt+$gZe<8xvi~#&Ald>zpv|2^>CoS4-fe8{BSFOGJsEP zuVCu>`=b18Tv_TZw%A`bnvjpKCyGy2)%PYJIAyB=eE2a&I92_9*=F3`o9j^hrt68a zV`x{y>=^74Ldq3fO*;m=1v`el;EA6<-|z3+wPWJ1*Yn0Luw&-7$rt;OBb}iYn z>fj}(cOBPc$J{q#+tT}Hv~I_cKa}(O34S}K`~`nGPiluGjqhcb-EoU&p7)c=+pjyY zx1jY`d%Em>bNv-fk0|G%c8uZyAKqiQjsMKgC#fBhG(I_H+l~?MePRCBmgHOPj~P?* z)<{pQA$)W_QSBr=;Da8@QP)oc_)J4PMwFjZ@48?~wnaNLo3y`7(-Xyq`rhONr{b3a z`0!(laLU>-PMaahPq9P&F}fbb$CsP*$Iz~Z*)iB9gp@0|nsy9!3w8`jiC?@pO*!g%|k4$?TZy0_oQg-qd?<@3PVLj{Oil|Ds{PbT5DR zx{=i}b~7dSo5TC&exdg*&s*Df*Y8g4{r(jnX|iKpfAM`wUw?6><^CA*hjLzfq2G=v z?ev%Pq;^Qs_+F04aSL1PWKQ_aS9|~Zz8ibXE&40vS0(fJbv>RP)4UG>JmAB747Xa% z&nKxJk~BViY}+y7y}#>sh2DCLeCjVt#z)r^)lR|#K0H6%N}mhhGY#z+QGTv@|7&`) zt?sLuaKAWRPb42z-Y$z+l)eQS+oCQJl>>H@B?%`QFaXNYM32^ zUE+qSeJU%ix*a3Nso1Xf`&6*cD*L&xU#lsP_{b}%^Ao9Jnhr}i;o9-1kS_{d|Q zNc8Z$?B~bxvM-=1kNB=UH9n0V(uX|wvae^8JQW{#tVci(`NlkC=KV0AS)3myKG@~N zM;_w>tVe+>@>uW1`Vmte@sUSAHhPdle9;hWm-xuT-$xJmhCKFVWZc0_AMufg ze~KQ`hacglPxa53@`#VT9@S2uhx8$j^wFPS$|FAVunW+G9O@VRBieN{|A>z~>_GI8 zZ^)zH7<<4>AMsszYCQ~kc%PBS{zlk;P4ZNHzqujASA?q!5d8?d;inCX- z7e>G4_lJ;AICb`&l>NH4_POEtYOcNDZ^h-_rrZ@j#9r|9WSrS(jZfhCCp_R&_=4mE zH!~%YPy7ul?Cm=#`Pe#Vg6Ax|{Zf8D{wwZoKZK8`$K~S)bLQDKKHhwEc)+LYYRLy~ zW(p*q_~Td&dpm(YMS5mt(kVYV*B|l|37c<2dRh(PP%MRy!wr^*x@tTne0<%A3VA5q;2~k>&_$g^Et3x z5Fz)&$J3*iA1{))PuOqpfDd=TjcY>1XA10tr}hQ4bPg5IS9I4y`T0DD8xn@_@$>}q zIrqX$W{;DEu7~A(x{c0vk)nxj$m`KZgXh_ud*PLroxiMm`N;6Vx{C`V-RC(6!*|O? z_1(P#tKWICv&X-4Shus?T4v>W%fg2}{7>)f8&LJ1QBO8xk2(1yeSeA4&u>0XTzlu! zT{t|L~+x2r?^epUD+KnocLQA zmLHN~JF?ojSG*5foCxHvc+bqd7xM7C#CIE?{5K@e>_dL8y8ph#QN(?u%e-HtYh=BR z6tyOU{30Esi`b-Br0X&}8$>rmkCR{Dj?ORcBVAeJej&^$lAG2IZEVPm`@gblhXqRz z&oBOo{1W^4>i3KHYvH{4^X9AHw>Tl`B;C%R8XulV#96m#<>rl>Mh2X7yw$Jv0`r|0 z>E7%7k@C(sd+s7x?$Mn4_41*ow8(bX2gW|m&zV(ct`E%k#@Rq+iL?E5BtE><=W?pLu%p zcF6I&jP+;mfDh?_+vr^Ze5T?0K*49*)+d(KL+pC;g|MLJ`EuQAD9VN4u2^xO7)eas^lFVIfbnleCMplg0aFJ4yVpucg;clIA#}*G{q@&m z;bc0qYTglH{+OpK>$koj^>$J-Nqk8Z`uA@8!IDg7?_!w_@w3-X=8yTd^ZO0X@6jK@ zU9^+r59OSEB6j&rQ?;Bgb}S@&>*z(kW-{}8vmyQa}&^ZSVNd-R8PlKh~YmpG5%DDo5~u5A8JE#_NH6Vo&_h#{L?pyf>%aZ)xzURB|2S z1B z&+VAyv(G24Rd&o~8IFHZhGSzgoGgDQRKGsq5pOFqE3wKF!5u6-Uh?@s7H;?3td z6A0=%Wje$Yc>P#MJTY(S5l=)+Fi;QdwpS{DC~rBHPvlGSet&(K^qhdC@ky8M^B_dN zioU_(Ct9;BCKB|M2>aaAqt}N{KM7~p8}>O|;6y&~eouTUh*SIyEqk06J0*06weuhZ zr`?aN*;)8hYn;fZc0*A<1Sd~VYn-TG;AGY_+gy>>btj;dnZ2L z8BU%aA15!P)HmuqxWI`U;n(wj2B&FyZinEs`;pP!e2e4UGC08SI<>FH8G|__Ztj_RaP?%yY>aCwsU1*qKJGdGqJT?I<}h zJ45Xh#rdlH`RtqiE2JHh-!8+RTVz=Jir>Boo3~g~`_1LmI`mmz`$XS!j-A!_{1qQ} z#_DR0os)C^b?zhd&pGHAr!Bs%BGMr=KYzvFG(z!x*4IAWH|M6K!Y5FQo172jocy7j z*Y5P^OZ{$tIhXw=vE6Zb9(e3t7nyePf7|;Kh z@yTzo!^hJT&PVuZ_z(DL_z{i7IRC@%BE+tPpYEp#dBjH^a?pbuLhKOU6J6e3=l#LY z!|!AL67kDd`~AMIC!TDqqdIqJ&0xcKlLek+v>Z0#cE^nDXj$&mzGD4ICd0nRvwePF z{p-pOtN8tyMwA%;yYmlkU;65sA9H-Ybo;f#k|y+j|Girrzi!JCnGXM*cV50~>0Os! z*|Oh9{!njpZT06<*Y5-CjfHU=UYq@JHv3COzJBT(xAac5I9^^%u-}>JFZJ{U*Bel! zeuoR3YU+K4U*XGvoMJoZHs=A_^#25>-H%+@TMpTWfqWzEPv~EGdV)E@2OjW2Kis$` zoJ!-d4L*-Go$J1Ccx3ZH2bWHgH7$iA-$lDcJ4L%iWZE;X3A^@q?bg}D0~_M56dWGB zbX}4~lCut*k&(VI^CkW3??`W}VP3Q2gW`z!ieEqTOHR9Wl+(Y}?S#SomGOIwg0$NI zo8Z2mBbMjg?7Rccf6l)n+&$ayS+R}GHBGEJ!M0(|3cjXp8wp#B_{d`o8+w?Vi(KaR zvIfnRM||WlmmEFrTmrS0oVjbPu`%TlA9?giq6c}TlQ}%hMHcID#Yg0=cwXWok3Jgo zAdmcG?jts+q>C{NY-q+lOnJmd9&H9=*T|tx zVeEvqw~2>pbC5?LBzj06^03KiE6nr}A9)Q}&i_cKnSaay!sgfIt#S$rdkN51josw8 z`H)XIb>;=7EM%_n^SB{lD9V+v`8+*7Tf*zFH0CnE1x`J?Bq#Wp$x@u+ zn&z_4(n9TM%#U`j1t&4~>gmxrHTPM<13sloB_Ft%`lrrZ<8;bV ztrR?m;Yc$hVqQ~@JUu!ePpCQ97%p&P4;A=%G37T^j$->x_U0O=Q;u>Ag3HliW=6!k zrW|>Ce4Ipm=X|_5`|yB|{N1rbRC(f>Q1OX9cxG>|aXNeot}QPtTkqrVoA>_S?l<^& zdVGA8IFAo|4Z&x!J%?1^{}kvWT4Hr=68YTq$>4hKXl_UtQqOsMg7|n!#QnmqgA1Iv z1Abf+Do(NMIeUFX>FkwOera$$#~cpwA#O-H^7I6AVy`szMq{tE@qd=-V-Gbm9Z`Fw zO}asvCd^-pIR0$Szeg0e<~y`k+WZe*UwQDfpH;fnsI{%{lVMr;OT)_-iIwtEb`afs|tbmV_YWVD}K zM+x_lF7tkou6?mr8tEWi9V<3TJBMqPhH=P&M)pGUFQ8Foi_GLtIeaH;>rD? zcz*FuykBChOTS-~ZF8?Q(n-3VTN)ppN5t6|d!8mYnmgQb0FH`vNsh8+`rQNgN z703McDt)iUa|hpj&fw67!I9z1h}1$DBZ^O|SUdB9#$Q_Nt1Z@KJu`kuy!vLvtg-4h zmmXT(S7VGq|6Tj9arA#qrNfsUnH96{bAI3G{2u+mE+Id#OA6oe=S%+jm-@J$KeTDx zNP-Orlg8(%W@MyYQhvN?Y-Dit$j~tNwHk^%9XxSiwcg^|nO5bR_lbNL{Y{>pV7o-d z^Xz=Mz^QnRCJ2bo@$pBH(_&m4mwbO#r?q%mxb6bP$eDo#_;pFLQjT2np z)N{Aw1i$fX{hTfw*m&{aM!EVgPMVX(M`s%4Y4@_XRr@D5|9}ollBg5-f$4hb2 z_-IXq(~b{RvmIJ9=;>*V6I|eg9Spz1Ha{oPAG>y7b?g$AG(Mc1y@4D3g|^16gdMSV zZmC*y{X4TK#?zeSnYFw{dXOChlx6Od8+Q zmI9w0w^a)-!~af~kEbV`&t4}9_{I3iV|PnG8UML7&+wBUH`idwS(a}Y7-{RQY8k7$ z-DobJ<~=6-d!^=wWqsZMQDq0+E5or(GIRxnd@0PA{epyFnX{trBiRFb)Ao~Dvt%Yq z=zmA{-o8xcrxlqFafi3Z#8>95a(=(d`91n0%CG3ZCx0lHKpYQT;Rlw@EiSr!D*WAF(EjuUHib!V#wMu@+D~~^1Wd%x_W{+iTfJ!Usbzn&Oam_ z*eit8gYeVGp@e;dJ%fEyc#E`e-1u+u+c&GeXxcZ<=;sCJIPHFWA2DW{GZS5 zgny6Qu}@1orf|Isd#>__lj+W#F6|q_D;I2AviBA-PkZ02H4^&gpDp&H|8qsALp*_J z-(0!i=g#j(wrt;!Ka}&rC;fI`{e%8;e)hoX$+9f+_oVSX;c^YOtu?+PUo)BaSMnkA zuspr;Td~I*4>x~{x~80adSp3Q^N5<}VZp=Yquyh<)jsU!(>SX&!FW& z+qT|c$%m{VMK58`qJ(^0J#Ibh*`C@wIqDVopdW7Kj|K2aut$Wwvv_6sv9$(U^4VJ{ zx7e>zUzm)Krze^Z^}WdlPWg|V>>KB7v>998`qbjOYhO5x zehMGzH&2ht$EOWDhITc~j=?S=q+G$(v}3Sauw%;al6DO7`#0ZZ<@voWo z?*&@>m~5BFKjm+qeVN+M#RZS|?YT7n;J&hBGLHVt9fvq;qQ6j)=`a$1!N2rnUhzddu8*iQdq_bXLg%smHPK~EZr{a-`ruWr{@>?lsedy}()rU=I zVZsAGqyujK_XY5YKb(-U$7iv1KHIiFP$_q4Jl4~r^V#wW^Q=5(haY2v z_W0P{TT9eQ^;0uT>LKfJV?1hL6xZH!_2_)ODEM{M+hKkk?H(cJ3a(9looW|pC-YyC z?IiKDSNhvY+j}6#?XvOqK<2DcV=t_-Y!|b?kYOn!*U9w%T3(a0VS6Cw)tTO-YERYj zcmJpQ(9PHP&M92&^Z|$OftBQdH?79`BHd|zkf}xLyhazW!M9Gefu-Xc|sZ5_UlBxW-_N&if;Sm_ZwJ0#~#S6 z+w!Ms@+-=@r^hYlf&HKGfKU1Jk`LU*Hw5vC-$BhD$c2H)pC$SZyLOD=BlZZ*x%H!; z4_EAgJeJV!_Vl=X#N#%NAHV}XT_>sfMU|tmOM>{s^}1F0iCbA}z|tr`+qQnbQg})5 zyfWq!u?KQ3;U3kV9+yvG`GE&~Xb0ey8xG^;hv?xzWP#77=-&|}KOPUL;i<^6x`y$fJmRk`**y#T{ipiomT8bHc`Pzpf_;DKBQ zI!Gy{Ef^4KLz^&>lGHRUsh|Ww7?nGSX+cDRGNM5B;2{T5+RT9C5fs6Cg6H^AE_&t@ z5k%K*hCfa$l`(oC<1jLiN z&TRKhl(V;|iC!4R$yuMgy|D)}`GQRCs(9JRQ)c^y`<3LOZyc5t&kSs>@jR*j&^LAv zY1m%0Q^tM{?Tuv*?cGVHvFu0s=OqGn@`HLK_eV2dMz1jI4Qu})-}Sm0&-33d;ibY} z_p0)Am*GZ_dmxjJYNgEgIuS_gG3pJ?T^;-3feSdL|6Ab%e#tA{aPr^2p#4|v`;C1* z+5kk18%9WxZ$(yoxLsbS+{oGaB7^^ zQEEL7d`g^=2`=D-9{|6R+ud;TO_OK``YVJ+sPOG*-P-JM)Z;u%BPmr}U`JYy11Ed?#(8;x>znkMMSUR$mo* zobge|)8{uPJ}W%&F((K;&iJU4=%aGRM|k3^v-+axQzPG)gF;)6xj@eN2v2;B(W8eo zB*e!W6y|<8<0CxrG1neFq>r&b(#II06JNp;U*4KSfF9yujwoZ0%&~W-kMP9DTyylW zCYbox1BSWc&iDvVe5{>B5ARESw3V3)>wI6r6Q3;W@`E1Y0T<@dvPP&leX=da-hKGK z#6Qfon2KHhJ8{}#O`;VZ{@&!V5^F2N-kV(Oad49o91>i>DLPqkeelx=sc#CWiO?2P zIEA&x1MitC(O1n_56}6Pa7eAkfs=znf(Q7p7bdtl)1mO02yL{6EYmZWJLOu9#jkM}J-b~Qo>r(Lw+Yp;Iju01eD;T^%(frvCHQqUjPsA;Q?^t8VNpr zJyCdb^TOTBhWAU9*z?*P)8y&urHzlR#~mN`yk?JU_PnlpMa_v|FKlNDD(rb(-_m?q zWbqkuvL*spb;)e^1HAGu7I}Dn55UXu>eMShT8nXWMRyiWey z+VlFk^7+Mcq^r*Hyi8{pdtRq)Kf;@vQog_ZljTdURV;p9+Q*nZudQ^FZt+Or!~4iE zTVu~_?43TvXhzw+mApvwjpiO>&+7@dm)GBI*YWbb`<}$#(9cx;(!Yad*A|2JP3Zt^$wi2(Y?GRPMw|i zZ%Wu})}1X9aweFR`7ZbJ(t6x+lF!NUBK)nhzn)aUSCG_$;73zQ#`T z8^X8UZ}OXow+F_k#c#~LO8bAWcuaoZaN1Az{dHmdsiFGjTJsxlbV{lJzQ3+6_+pg~ z^NIUbogKe#Ri9^mL;hgrjsIoxzUV`yozw5)cePYl^>Ns1J!HN<{qx&5#XQc%8a&NE zzmayX^^~@A*)Ikj;6phEx7=6V@!9(QV&SfplK3<<959@;`>V>=!y{IIjAf>7eDu$zznXY!d)@b*9NkU%siA+W zdN}bLC6j+Q>*Z2wdmF7iF#3;E_0#;LbHh_lx_qmx?UnjR|E<0?64@&w(;-1GUfVnW z=!eDq>EeF*kHlTphvX0T7MpJR_1Krq`cRFt`Sn&4cWtlCSJA6BoG(!yI@k6lnuGZ( zt;enpbz8h>Z$t0^pV2L<+=5%(m)!92Jq&7}b)IZ5Uw$gz4cA{ueAcbKb~tL!!8838 zSFG)gEeM8>)??!%UwO>hMDPHg^a09#z^(4z-SF|tCMNFMUWL!U4M!`?_h4;re^7jE zJvKhB_5&W^gC795*k|4F+4k1__Xd@o}{u@Bkkx z84++By37rqZEtO_#OLX`+htNE)?SCbwpZ&>_^8JIz?k|Cz63r_-ZXf*iO;sWwpVhl zsVBYM94p~}!d}~}^%(YpdDv@v!2^7F0Nh6IbH&H^qLuLGd4#)WMdH)h`D9bB1U_>7 zQ+~o)+pG1I#z*!m(te;{k#hnLIl!Jy=3c#xZz!G|ouT+x+y15`-%81x z)!succ;!!-C(=_zyQ;Ql4wzn9r%vi$@XEI`qNjRTr9gzojiu8;U!4y z3S6B$2HpaX8NFKZ7{bRk)RM>e?=R3i=AYJhtGS2s&~KGrj=ig7>H~_$Ajz*%a?qML zg#7e|yD~?;)mU>L13u1lN&SCW@*&}K=Qpc#$R{+9`Sga{#r=~!^BD36J5T@F9rI>Uk$VLcg0%f zda@diKz@3kYh-_n@OicEj{zTNlBE8>95Xo+8Mw_#hkT-l$L#Ytaeo)jJcj(i&ikjR z{6g>Ov!nvo%o~aP zljBPG)sj5M;w7V&#IC^A$z$Lx@R-=+7LT#QkBrok$M~OTuX)T{7LVD%*!zCuWyM=Y z-cqt{d*!E*M&`O)q^Z*f=4&K!&v5kU@v(EQN7;EP z9s?dWK2|vfxAY?>KHDmfk@&1z`_tj*ao+HWT6Rlm@hYi@wH~`3cI7eDE8v43a2xrd z3qIQ*k5TxH4ksGC;X^)EE5S$W0Utd#M$VIw&&hTg^}G`w^hU36!H1hZxy=GZP+zUoFLB;3Y`x3S6B$2HpaX8NE>P7{d2IVe*)Xa)!@j;myo5 ze4+-AF>_DMr=F(#bmNYuzji)X>Uvu{!-xF9&Kv8^e2HaDJGb^x-Dc15i4Km>K0aEH zVdvUcI`&fq7jPOqSm6YI{hxEg$^UrmL_fnPIZkJfXgv;`9Qc3-_#_Xp>KV(PqEEWv zGZFTU4tJj=&hY8Kb$skd>v7;yV&75y-r`>__xdrsW{ zib!Ai5A8hi2Yc(^tn!D@iEoo9fd}|d zj=`<}M@`K#i6!F8Fb{LStsvGv&gN^|p~eiHBiA2fhlew_Sxq?z{ku?`myk+?$IvfXtz14Iy*!i_4fCLnb`&v6mEjh=)BAn9I-J4RU{e`N0MVPkhXYMGqXD z_~;8_?*?c32v2vA%5h<>GN(XjNON| zCpzz!_^NwfUD#(OYCQ%g(7f8w7X&Wg6w51|z>oAJ6;2bO&s*UX_F0Mf5^d8`XLFD* zUZu^gZ9NX09Qc3-_;7|2xH# zPN)Yzu8~%K=Xo90Q+9XOB&sJ>hF}R${uu z*k0IYC2BneJ~r$UN68n!1AKS@+_*-9k6%v|-X40jIV&+%VlJ6Ak(6xkEwLZ1#~mNe zO5|)r&Pr^1UD-EhC^{3uS&6GISk|?={*3PWc|E-sw=a(r{&7BB=GxiAm3BGvO$JZR z7^kxmBLhQX4p(FDVl{UspHi}MjvB)lJVi;FCYknX&q_>nsj-xFqmo1Cm{P`Di;pZ1 z10rJb*LhYQI^p?T2bK9hsx$wP#0T!Ai~Hr$73P_QBY#op8v1kjGYNT)bUB}w?-RzE zggJW*nH(~u#6|we{E}x97C$fZ(s?E!=_K9ak-~@fkzuyRnS|ICeT&IQlzmyr8zVMM zy==ytmq#M{Ow@TDm(1ztxwxaRcg>imOaI^_h!L5bBX?clmv`+dn)3*yG#(Zg$>qwf z8|NwMyzl+GwtFv>Plwcfa*1(Jd7jW@aliaWmRITj$q)R0-SOq~Wq!}fuD-6G?((sh zz8f?=F;9vp{~um|fy~ogh8yj64w}N1GT&u8r&y1)dH0W=vkWfals-e@1b)u&mfLs! z?D;xqcofOABjwzYFmY;VXdmvk`*qM1t^}uIJzj7E7jPOmN#O*3&QvaH@4m33yU+Qv z=j)*1QB(_iTDNxHaQUT^{zaEhL{IVY|#2ld63`)(%&<>vJ)>sZ*c^rDWwQ-im0({ z<`SD{+YYs;`a1U^%fDW1O5Q6v|M^3u{W(9;kE;GRGYM9rBKzOZ>r^XNmjkJ-3s|AMA4QJe5D_8+!lAJuej%95v45e-DGO=MslC zUMur85_xJkR$@&&X9bS7J^Sy6yOb01tCGYnwVvXBaycJTessMF9^lh>tilJ}VtaEu3n3pk}a6;9wcI@`^T{O>WZa0)Of*?O5;;Pmv|-7}*laGGN2ZTzIdiE$1i zZ#`Uqlh)%6CvX8L`~vu;j&#Gx|Jiim^<#u@PfyQ1IMct5ehe%~Wxjnj-4_&2iK1~R z5AfKJfRol^;8b!R5x9U85rSX(e_ZQ5zceD!($yER$4aHJHuiLUX2foHnK&^x(0{4I zDVNaWh2)tR2~Jv%H=IT+KIOy-o$13(d$Pvaed9Dy`)?&D`}e z?VR48RV!3M;I?O32wU$nu+Y+Sz@&&A&x}Mkn`N@G_OLFg{C2F@=Z9%cG{2NvQ(<|nD^#@Ea90gus_ zd`$AL0dbf7b*{r9AUuuhptA126`n}q19#HJ{c`CFbG=pa_bOe{H_Y-@%-aS;VtI~q zIiHvB6UKV0RM9*v8K?8(TyItUyv$4IdMnaNx`~hXkzuyRdMoUT{?EoAnCq=_Z+vnj z3J4;NVeRE~ikx;kYxZovGgl_>J}IKc=)A4BBEL(?gguYQ{fW!^_iDcFq^nwI-Mz52 zv2mz15{b3Uim%`F(3IV?#UZGGXV%+26!o3GJr`SZ_Ulh?Us3$H=kHtI)3|B&feE4a zux#!}w~M|`e;;YzQ$1C)u;dsUgBtfb$pVVUsvT7^(!%Y-?%u-d5e z71mttc;+kFh5P(Av(Ggfx zsF=iB*DPJ$u~ICSUcTng;_#)u&%Wy5Cr-KIi`huiXR`bJ=J~*7g7?>;Na z!M>vYE?p+(boABtB|B76Q0(%;uD;}|3ucKmhexgwC1usc?Y)IBvdFkAbNN;3zvrM- z=HcIM-=fmt@{ot0C=`}I!n7_QEePu`eD)Cn+2`k#WJC+|WTB6H3>Q5Hs zqo=q2MA;HqAy`M3Xn34xdztd@uFAw6nYnu(H>}c8{`pdODHFV}TbZB?P$q`vt1>}Z z>HkMfUH04VOr+`K*}kt|Xy|l4Tke`N!TVAsCKd4s$^c~| zy+D--%1Zxp*F+zxL7!D`$Lg+?0rs4kHm1+YJV&KmzPR0s+2=mH-Hk*pI)AV1jZY1V zdSbfaJMMboq~YQae%sc?akzb#`hWS@uQPwydwBRSdtYtnbbG$kZC`;r6@SH|n9n4c5c% zWXx|*Ua7_*a-UW*I>(gs$q{#M_wN|%VpG;Q3G$2gAJKgG&L?G6naByQ>E7-jzOdz$ zdwjil_JN1BMg|VdZurl?TlIwAC+f;Q{v__#i}G6jBg@2+Nn$*}${)rv$tOZLPN{pg zxc_=#UvEeEg?&lxS1W^t*ZS1_fUwrX%6yFs%*dun?CYuZ2Ky%SUG5{G^%SpXDR3Tf zx4s#Czyo~H4sPkGCO$#W_6QoD^i7T^d{VDC=e7IOAn|EqZP2nV4 zBh=r{`ELZm{~@t2@SSWuDD?|+7{O1Z#cPK3rZVm=A~Jk0zIfy!<%>z%==vJ@;y$$` z)So97yA_I@Fn#gPhA(dHP`r`qD9^?(n4I8yM*62~PX3DhS}e8`8yo9{KaY*1esG(71F+ZW3^>6L>X z%Or1SPIB$=k-k{#0UzG1SZZHP{awlz5K6bweZFGUVL%l4&{qUTiflX zFRpt|ulrumA-azH{0&hD2`h75`eNC$KFMD9y^Gyj|nH-PJ)$GW8PY(1aUNLYmnnePQ&Z|iZdOPurO zDX*n)N=!C!5(XIvC^etE!pnHL9d?}$PD5+Qr_R@UD&tgWe_8cKsXCu}7K#0VZ*iT! zMYuESVd~|!Od!H!v@?@)C4y!*5 zT+{Y^y7C-v@Ld1(vTP%1J#O}{`@<-wrSR$B(Zpw>)W;GZxjr^*d=lf-hShpX<0I=~ z>V;DEF!d@DdjnTzJxskzJv?;1s)q?b^q^S}FZtf3j`K!N@9JMLNASh!J|fht*+O|avL05Oi~rrKhj%mT;pB-{J$!|dsS`|DYThm?hOGS_I9NTb^(Z@6 zg_pi6T@Ql?_>5ZR7~DqQYvNPrYx298MC4M?@MLt@ep2GoFzuXd(xab@o)Ziot;ep1 znb&6aRatm|5AP3dxm{iG@jGD~d;)|geKo;n;rZF9$G*h63xnaK^_0hl`re5T`7nBp z3qIWRA;atI4VTAApYi^inzAW-?rr({&Bv=3f=Ito7#Fwo*!UPx%I74H!LOF$G4K*3 zb_K3Z9s_TI$E40yJcjVGxXEJ%{*RN#EbLez&cf*HsE*7mUa5i!r&Bctk{Kg;On)JV z*x&Iz29HS`ru;Ip?HF}E^g$&n@t8JiKX~L9H*S~R`IsMWH6C-{;It?18`3VpHC?eniKGZAV)^@y!&z$O#Gv?`_;dO-Jo^vAc zX_&Soo3z)mmA4`s57G}@BKsH2bm zVfDxCZt|FBRqrRyQnLRjQ&!?JxdqB!A>#*pEpxoM&7q=@6Z6z~8a-XGi=-{XSMV*mSlgojU4p}#Cld>R&hDx31y zA45J>EAf+BkAY8<6CdgmCqC%SeZU1DZu*en;S(;;ly%ZwyR~Jbc00VbJVxs=@Ue4L z;wb$j^>!&giQhwFSKvxLEaTfEUJ1X5pG@DV{3PKUzg9ax>3i^4UI+p{T2C=PI#&E7^>!&giQhwFSK#XOllVpaNc0q*-_*t-?IGVo`#={#g$*oA8q-|m8PuZC!>p0eTcmAH{WUb@XtS6b3X|_MXy@; zy5Z>Ovm3tqqikfLEqlqPqsREk4R8EscEcMv&wi5p!OqDi^w#Y;aqT=zKPmGyGH^yV z=ds^tWJy3jY3niUd`vwI9^eBm;MO?P1)puuPfC0mo?DcS+WA(BNs>eUB=xY?Q;g5R z<4!+0Xw@f9e9)dg#04L2`j8XVPs%#!v4In^v2mIQr}Y%$qcapgNxfalPvZBG*cG@^ z56k#udlJ8hpG@7V{3PM~`%ORj$5Cg$Yja;;Z`TFYt`}L%n$4A67k2B{^!!b>C$A_x z&Hf3~3_t0Ns6V0nWbETgI{jp^y&}$`=%lwwQJvbe>1h@T4p3`K~fg&z&yz z+8QT5to4+(^CiMA!2^6Kx8PQHsENY&ZR8i1Wt-y@T|dYX11Bm1TPwelyXg{6PO| zCEHFjrPFUZ6O)*)+7ZZW-oIn~*q0|&^qbCjs=bESIK!Q?>1)|jny(jqhX0cN+vlf^ z@tdbyacB0FD{k=Iz9fIJ_vk9qZ{|*zxb`mFmtonv%-6`kk=fihjkjn$#r8gS{y2Dm z59Ju#Mn7oc6LkJ}(D0Pku;;}|d>WoRCL8nE4;u?QFV5Cu*R!tk$H4=9czFSP&nHh7Hju(-(0RepN(NhK@s7-#q= zKNiVu{LXhbZmo52t54kXiPfLoQOtEdSe*Hh7ktY6tiE%PCsw~t%rCF-k+?4rM40@* z&Ql9a9y551Y3K8MR(ACT*aJ0acwQ^)_NC0z>yCaaQ@3t>_8-uC-0fVwr*2<@3pkA~ zR5*cOM^xXn2j2n%|S&>|C$tuctxc)Ua@JHZe{(X+7R>0vB-VU#xHfzx0VF zPC@sR2^wDG6mEY_0jFDb$fm~$C#}aDPT&Gg`6UV`@T+Tb;MBXS!#cx@EUQW`3K$+` zwW#+Rp4%lmGEO*YJ>GBv7jSC3K;Z;_sb&+WQ@h0(7+u|}YlBRyLIw?ws+!<5ZO?4f z-d`w;UMy0prQ`*5;!^AJh7-7eQ{pEIC-56N*~CelYaGBv7jS|HgJ1vsCQjBlWxg#cXn1gv^X%pRCSlFvR{lw}>+JrD+SyZ~ zU1#fY!%6cz@Bkm)AKdyoOnm0|h!cLgy5(8FzCJ<2Yo+0?cPilX+yU9tIE}|?J*Dy4 zB8mv@V%o{EyHq=w_VdsRvz`3R5zcn9KgPy5xz6wEzR7m-gM}cplc$$$C->iD`B_Uk z+sP@%-p0<<-2ZrM_BWBMMEg{pJu&|K#q`u2^hD3l4ABlgHG9XdAF}%O^*IAQ{RckL z(Df!UU4-?sY6^nOtXe&wy~fnRym^LQWmgZ-0Fs2};FY5)Fu zH;63~2^yZ5!ro6+=Bqqsq%G~u{zt6yXGo7%NjpUAG3;NDDLLl%g9|vJ5B!F%bHmC1 z#L|h3lRR%E_APHX4Ym27_bc0rT8}rJ@>cx9+5aTJhyW;Ww+xb zvk3nq^S!W-l&!}dC;6Nl2gL7|8V7{0AgKqz4{jvmlkFS$4E$!~n~L8MKGkUQn-J$S ziDjkLozGjG`+7dpAFcUJbq2o~xk~Yvk=vCV9W-TeTyEdnto1U;GwyvM-Zt7Nc*WM) z4^!$tJ>DBW{T0?*kdID@pVWHF<3oM##D{pJ?{~q6n?B@3ozEnF z#`GV4DHHW*KR#Z)5X8pE)??#iL@A$>JO;m7ipRi9kk}QtI(ZDd1s)T3pu#_0I3UH=ce+o+Z9@cuYM0 zm3Tax7Cv{w@SDeOX>q1Ae$`++e${=Rc?|i1ohQC(@|eW=j}8}~2OD%gQqb_cZ`k9I zGEd*$cU?=H$M!$zs8&k*mF<76$KB3VyqeE|3pgdeqi_PhSi6Z+(D_I~!;>$y!0G9y z&TC2Dr8YQCZRuY>J~(MT-f#jJ za2ols!U_EPI~+I#oR2h7=QGKAuc4u#IXzA|X+7R>0vB*<++@{zmR&VoWa1QbK2p%| zwY8@YY#JS>dQa=|h7-7eQ|zY-C-7^Fm}jL1osSeWd@XV6?0joe<2d1@^?1VxT)+t) z41S4SO`L+xM+zDqoWh>Zr0Tshhoep2+TA)G)qS(ub+#TioHWk^5AZ=7xDCE#o@pC& zK2p%|q>pvcVa+#__^exd^Ki`0xAOf~Ivv%010SuYG(NJwpLQ|rRfXd@p}-P`G>Wjk3-d1F4qK1Mrv=uTB%$L>-xdbcS@E3}jIr>TBjWOv8h_zl0@ zJY4H`GW{6(P1U#6mwYF_`ftOc9Xu%$zv|n~>Q~+0zxt8y##cYG$$LB5${*~Kd_r&j zGbRrSIxZJ9Jn5ppKP%r4p@bN#5 zAu^HiS-19;;iSiUGu07nJVxs&#%Jt4lGG#MV<86r3*LZ zPw-|xK3=^L1iz;B6yu{~mCwokWa{lw{mJ+}Bz6U^)Wb49=_m1v_{scz%1;u0@D|fg zhC43qdmBkH{>DBZoD;dP;V0|#^%$*Ku+103Y5T+|p;c;NxrLOvOA=$Hfcy%)Bm> z_h>(4kYTgde)0mOMr>Gk+h=WBzQpg8d906MIDY<@ECw ze|grFm9(aDR9a9`omnN{0-q zdCW_{zFXWEJg3439z*_M=XF_=#|*A9+bcnNNYL>5wZc8`TIOpc@}HT6$N5RQfILR) zDbHiT1AHjQ;MR7giBC`-5;Q#cgw10lKAr1d%p^RvC)=#`Mx@89q#o9K?0VRh$AAa; zpao%32-4O!Ob-cw$f<5;VMi zt0vJC7v8?BGG8MD|C&i2H$MHYT92}GMZ(AKy9yrQLpcVw{(qYI1mz(?!-G%QJVxTv zIrE2^lwCiT?=MRSx<#;e~l0SAuD*w=FHhI z42@kCXX43nEkFnc}URkIww>;9M-s!%-6`kP$vH`WMGE)?2v7QIg3tP=GYOA=vMwGBAFZbXK30A2#D{#yH@e`%O&@Zi@)+qe zzIEiynY71tfR9%%1cAqBJvKf@l<*k*YAGHAFR`WNpBgP(ojeBK0*|SCSM^ia;jgPD zk7+R8v6>6bW8ScM%=--V#>bG}_KlIMyHRmzlQKru;|ZzC`rHkw4gZ|8*vh8QkBr z^PoH=Xn6frsvZujKSt(jWaF;cq{sH8PDgd$WWE>nMYr`RJ1@m!zyo|J$KW=2nu$+P z9uhP>xe+#xk@z%Bo0g3>d*d;Qvx2qvwH~`3cI7eP0Y1Dxxb@F-!DmA7m~i(eE8w%R zE*tZRPk+GqWm->pe5mi8_}Dld>w*tAeaMN*W2Dd6ez(77avs|OK3=^Lg!)bEvGFmY zl+VdovG~6>cFV?JcOV>K7LKjuw~#~fhrn87b9 zznuP-lDV5qSxMKZHGYTu!~QSC_rLC};aacjEtM{*{|{gNqu?p$XH+`mlX`y4A3m`q z{)bO^-^Y{u!Oq)mG{SQyw4cdnZ2N)L-v{4>x_tiOOT7&zQ4x!*G6_ zc#PI#<74C|JO;m7ipRi9khWb}e%#4p;4Sc&k+_;4L-=UI03=n8ryapIYI4n%r8o&tobp> z15dtb({we9Amj{@`o(3wMk42AQYGg3 zZf7a3+v%dA!!aHbQ-!3xqV>4hx#lt80X~#ta2vYE4IjVO6p6I1S-QMKZTM5gTaA6R z7Wh0pw>y(6F+XOCm4vp}J{b-^wjS`2bFlRv_5&W^Lr#EO@-8=g{I6?hS>DmTtfRO7 z=vl|spWW4Q$%>v{UrQoufluf9D>CU4_Cu>6`fND(Xg%OV&P%E7hx*=$4^KxgHSsxP zRiCWjd~XCYQF)B?8F$AH%;ZY619q@7B>!qS_-H+D_z0h6^~c~>OYs zd|N~zgSWtA>b6+(W2}Ce*w;-S6YBmkNBM7{=>C|uEgo}_!DFJ2D!)AXkdh^!)Ja`)4m}{c9%DbU-$~#~(84zV46t;Q{-K z`)^slJ45Sh>S6K+J5N1m@|e+UOgj(SpAs~@euJh0j|ppBN#<)LGA)}gVdq+Jux~Qo z<+zg8qwKuYxDt4P59Ju#hE|*S1no}=8lKz|3iue{i;EYo zS&)64zkCFH^OsmVL zJnru^8gN`m>#^%$R~`c%;KTcaTmD-v_)G{MqwFWF{>%bC3-`~)JmNz>RV%R{t;fcv zNyKIS>HZk%dnZ2VO+Mm+4>x_tiOOT7&)D%m!DGg0p0Czp<74C|JO;m7ipRi9kk}Qt z;wNQ%vOfmi0*@KmN%0uM*WF!99^=0sT=N*_#~f_%nA8)>FUS6&WdHv)Wu^X@SgRUm zNB(2a)3e`hmONtX@R(DsT97^EDxrU1e)iSGOpCAR{+Lsy&d;7Q)jN+Nf3Wl1<0g+8 zS!vpNP#zLAyfy|^4~NwsBl9)V)RIk(Q$4KpC_693W55G^D97Md_jwbapgbgKc<>3E z$4Gn{Zkdx!d&Fnx69MPP*m~@G*p!1U4g5U$G}_QG0~UQcnjg97uJ%;gt1=fuU3D|OoPV^{!{to(Z47e`;93p@tA&# z#~^pPp)Py;^^zylmd8vnP}dh{N8XqHcI3@WWaGl@nlB$ZhR2*eu&=oPw&!sr@&`K~ z`J2gO8rPb39+Za!4X<;eDb)TLnXi$7le778s)w~6W#^@M40wPK#^%$R~`c%;KTca+vxXP@R<-iCfxN(1$?H>&qh6t zE43{RhL6@$9v|v^CqCem>T$t`n?B@3lgS*iZc;@aQ>*ip9-IEt%wyA2g2x<~eX8Y8W5$&poBm^Q|2oe+ zhWx?KM~_qaL!oO+nsy$PhXf5zy23tRN#<*0V6SZ2qn}J(5Ud{7ddl+{@BkmmF}T&; zVd4{%hXf4|K4J41iBH3GGqMSf_~ZlbgQxY_^{^|C0T1xu{lP8y1s8m_K^{}UXWIL- zQIGS>>e_CXlp0qeeClJh_=L@4Bt8wdoSKb!>=#c5Z0~D5c0KIMW2jfahxZ4!#tkm`Y=b8>U`1k%h^2u?%ot&$5nr9hc1M z=()I~uXl}+;_?>+5lgRqP4<;M=DLE4cPt)rsKH~L+K2W~e!4%RWF;Qs41e`^re{Ag ze5>FIwH;S->gD>G1NY0`b@CfR|8FvnKJ&RTeC3&M%nSB8ITZ5A3|| zSd+)3zG~X}{GOFveO*1>#8a&d8XkRD?km^J%M!S-XX!;9eP?$p?d$2~ zIj>UY=_g{hW(M!ye5hJ~U%T=BI*}-?$KB3Vy7f3exPVjiUB$=2Z*Yx?)4ZPEi`$ob zefzP`1r1M(wZN%!{hgWUedB|Z*5eH)Z~>>>RAo=#H+Y|kQ_z0fpy6wZ)68#X8pjDI zt;ZWq-~vwlvlLF?7i)Lm)Vr#qK7dgy3K+hoIIaKJOmv*;J*~$ZPT&Gg$rBV#;Fmbx z#Oc)Tr9BsSbzew+RV#yrM_*0qJ#oI==s4k|^?1VxT)-)Rq{0dOa$hlVn%~~rF1cdY zQgW<188kfFYJ$`HTqgCc@$pYuk2jpa1)Si);Fo*Q#Hpoy=|!FGOMP2Z(D2|S$KT|6 zbI})_eD9RyJ?+(RJtFyD=gj9aIeQFVz5 z>h4(SbFZAB;YpvIni@Jj>wld|C%o-@tkY55H`?7=PicJQI+A{?T}(SUI!U#YX+MwL zZ?==`e)*!^J}K-mR@k_zx-`nC3t{Vh1{UEb*H4P5y;azs?69)!Jm3lJK7l0Vp6>HssJ zqEWLx47#6Lc>Nq|{4=b6Lz%C?>1@d~dTf_P1B|c9enYLtji-p+N8i2tUGaB0IDrc| zHCp8v{PH`w;&fd3Qc(JCSmXDT1mB+|{tFYQr{{hwll0ghmHU|g`9cyWt;ZWq-~vwM zF!*teoJjsl;uHPkfxeik{TjDxUr}OCF`-sXNm>KEe|p=ZBz&bHh1zlXJ&8FV~qq z!V@3+c%z4NuQ)e?bF(<_#Tg&riLXDQ@((?vi~XB9Pn3Pvo$(Q#_+r+1Dd-_xb>FaX zvCg#`x!pbg2v2-DD?aqt`#COA@v)y{-G8~qM|k3^o2T9vJ;ay4&x|kjh3l{bNBcNPkd=BKJ=s)sQ5@j0}A z{CyQq>c8FNBRuhOel&VW7v-@3SrrfGxH-!U;qCaWebCTD`Y4C}R{A(MdQ5y)c;e$6 z0`!nR$|33Fd=_VXgeSh#5>;L}r-}4oAEb|c(w*@Up7`Js=&{ph*$3$x{Fyr*geN}y z9(qU@JfHpe;SbLA5uW(^JJtK52fHP{(Lt-cSp3l$AK{5F)uG};&&W4bd5+$rWbCIZ zzM(sn+}=??6Q1~ntodl@q1{4!v>#)4xyMI%;u~D7(ubbLJFRqC{-ggM6;E=Vdwhf^ zzPbxleCWX+4K7mgCVpbYccOcIgeSfctNft{KSX>(D^xtAS19SkgYd)`wdNzChxpPr zs`L?GEbg8@!V@3+7@~)CrEXR6rA|=s^sjbLAK{6Q^=s&1zZdqeW4{>oopio0;farV z6h5uW%4t#udZAwKev_}J&r z86V+^k9{@JL%B=bq29OcG?l*5kGQ`t;fas+t>_^h%FRej#lyOPXZi?Fe5^A;5Ajj{ zh>!Jm&iDvVd}*saiXQTh@J zA@fO{@e!W*QkH$72m2sC?1Op2&iDvVd~H_!haU0`zs|aWWKQAijF0fd7qk2&dhB#r ze3JQl>F3?!BRuittoYDlw_~jOG=Hy(C%Vc#KEe}U+InB~4Bl+j^VeJTK|;loILtjh z!V_QA+K&%CLsmSrliH54;%jz~kMP9DxnAhO58+1!S6cD)xW`9$;_Gi$^(lJb1vW3b zTgAh9UQWJ2c;d6@NCZ8^XY(Q}zLBd`yv6Y?5&f;{_o;q1XFmb)I_1O}hiESJ=Y%y5 z!F%RPj1TV00|BLM*B8cbZ9V13A@Y+UU@IF?Gr#OW6ecRnTW8@+lUT6H#OwhbVpItM5ZoM^JP(Q!7XQ`MQQQt6Yw)tG8E2*paGxGd9 zuIF+^_c`RC;`6!&e|JM+ykF0YU(_4MK~uZmx=$u`W?N?DVAanuI$6n><)3orDL*CC zEYrSMapFCEZ(O75EoA;n>N@oqB|Svp>k(Nl21H2mcW3e4nfEec{Gj|E#;5Uhg(s3Y z(M`IzUoKs1e2>keRm;IGDqX2p%<@*u8wbSWJV&~m&&wEBcl53dFjZeh5y{PQx3j`c z@sGqs{>l83RTSzwdwVXfzp$$>x$1&hV$SxFt3*jzb#Z%d;fpLXZmL{=llt#DD3y8mciXq9 zbhtiN@kh!8@9S13CYHU9^(Tw+(bHRhqGa|f zI(qxMI#!AcyiECbS7qXk%-p??8&>Hk|9q*tlnLI~txQk`C==;jRGFZxIO7hhOu!=i zE|s6WyOU2$HRi=R(_QI0dTRMH@y^>%XNKaRYECcQ+vFJ=xsUoeZ6213GTnWx{%2%EY81K0z6vOeFVG zWrDKeh%yp(nK;I&z~lAUGO=BtGLdL4UnWlc*O@9S13Co2aqr%)!AtX{ThhlBRc7UvNi zKQrs?nTU#MslStUtE;n#|$XuNaPOoRV#O>Eyum1n=usCMW}xiJ?O+K4H}t z#qTS>hgBweJ63lE=`a{uCUyu^CQ=pJ9T%OySN6uI1_hs(F3N*$cii>FNyEi?i^|qzs~$+@8RLU?0vPN)9v|Ezfn){zLW{0Eozkk%EaIis!UK;oN~9xPJ%leE9|qj^Xz5o z$?cQhxLa%AlIvO{1L;g|YRsx9^!YXUjdkLFN|e{~A6X`rOo~LvAI2$0wwU8d(SN-6 z*=SK>g65SlZNx5;Q#Nl2uliJVxegByv+Gb@KSwxz?lXycCZC z5AdNJgInVw6Q7_wBxrc>37f}Ad^*?Po=Mx|pylh~yfxpS^mvu{Nv+4Ohh2FLcz_Rj zz%3bf!N-4f7b)NqAUx@-2|hE|XOeb*QF(lrA47V)O7PKo%Hu;l@5Bdv`9>FfxamVq zR30OJMry~iGRbk`nOcvHkCB@a#{!SB{Awv411~{hSK#X8G4K|6O!|Y0#}M8~gt!Qo z$N1h>B%*l?{V_WkJSKXC^2>w2Rs1FKk|`_kn51uzt0{+OoivtQ^N8pC7udvk`k@4Y{U{K3xab~JfRVvcF&L3v2f@VXo}h00@Oz6w5= z$&FKcMe9*^UW&(n2l!Bq!7X~aiBC`-5;Q#cgzYCKKAr2|%H%!nZ`Nq7t0X;MC4N%t zvFl-19s?fWgC1~8%y7Xc01pX|$0+*=tGzGrX}D!_Hs+DXkWbZ0@X>l~e40dD)}QW= zp}u$GgWlLjUGU+i4>?hJjPx1tM}M42cx(swc=bXM@X>l~e2ggJG5FO|JO*BZwC&3B z<4zs}Z?SpIYij(N@J1rUMYuf1?~DX7{w%zi+T@k~n4JwClRH}Z<;G)_9EzE;5|2qN zQ}gMOySBB)m(9=AoX1RYX1H~|-@`+#`#t=Q@VU|KiBEoCq(gpmf6RUl|3KXTySQKe zBg>KOk0F1s^O4<59y7SVY3D(CNYL>5tyDc6*0_?)*T}%1Gx>4iFx_tiOOT7&v^eq zPiIo&RKICGHalhwm@fLVY>PXceLwF+*;v!rgQ{9@K;%1B4?Kqa!OqhkGI`8U!nE_CJS1p%{Z`?g!zc4K z68ZLU%${#upLDXb+Ck?8g$cz_S(7~GQ6O?-m#kf7nofv|au z#An^wUk=CYH4^3VsS9}Cv({tR!>&9AJiv$d2e;e;7ksus9wYI2dTt~W_2?&a*1Bu* z%d5nGw4U<#P|rK@L0^Bp3qIWRAtx%2kv`+RAMCm*@39@=>f|x-7I;kKaTbrU!W)SY7j+YEKkc_H9OI< zY0G?_b>MG@8^7+pABmaEV%@&ApO^FZO4rhU>%>D^kGq{a_tOR!aH2ee-~TK7X-k}* zo*T_1zUd98s5Smx2^Z&maMF6b;RG(=M7-d~HFEI;Iu9bu{j?QM`&<3RylwbW;2b~F4};t;Fd z{b%LB20y5-k)_t_k@AE!PYl`JF*kn0FE`iRf59(E2lCEeeY^F}U%es53lhVp_WwtV z`dzof@BGzw#QoPik0+2n*jviVC-mh%^XPE#I+e5Am#^}>XNrt7Xn4{k&lM}!TS(`M z$$S;POPkUj=Xa(9)QfVRiq>P)izh{z_IpzNog(d0j`x5E`0)PVHh7u~K8t-G$~?jG zX=vDWIOVawIu_s@2#Jr@Q;d(;W5IzB^@tN6aB92U1s`tukYU~m6O zo<6m7zt&NY=kbt^YNgC~+0N5?-0fV&tNX3N1)LJQTl~+$FV=426yRv+g6g2*$(LH- z)X=bfYx-_)?L5*^tpq2n#~V)I0#31M3McSOU2WnN^c=CE;mMa;;MCcAza2TlRcOP{Fct;>3^v-9DWq{sd(%1gBpd(wKm;RG(=)c;q$(P#LQ>tZXoX+vqdc5HTF5r}}Q#gTNTf|&99rV2Ppy6wY)6-8iwhWfo zXB@pjCHAECc*6-?zzH4$ts{1B! zlI=RJ#|(IjT1gvPicI%h$2F} zn09jhH>y9G_Os3p^)1|aUDfToTbvfzPFC~Nnb)B_dQB_UB?x0ey!G{?9v*{mve{2N7tL+0X|8q9D`fi znI=9#=Vb*AuhK8qjf6Y@S>hx2JxY6=*EJMye!A9U*PE{My1)Z`cz^SY$ZsE?nP ziF(Ax$Ez2DfREN=<6}fApOgLl_|;PV{qPbbb_K4^{(g81JZA89#bXF>Btl$lIqWjW zxVY*etaks>#TRt-wRd0G(cQOLZn(d=yQlYJr>=6>lj|o%9x6QWj^zsWFnCPv66Kd; zS1TEfo09!)(UI8uJBJpZmov)wgO+UE>#FASk3K%D_Vmn&acTGSCG6c@i8v(rrGr*v zrq6kJI5IGr`PF+K5PV90Cfoh{UplB$+|LcG-%I~1%h3|SU&$ZroO~i=;}o;~x3I6b zqx(WXGayuqLBo?S*}e#KTwLaBWZ<`%lt&(;(^1_w>|E<9wsSG=TKLpAgAaIs58A*j zJ=Me~XgwM@t%e+cBXsq8s&?TV|?+RrZ0Ae-|&S?n|HW-zly%t z87{2rOI}-%`NOZiCw%eROxsIK$N1t)Uh5S1f9%;8lMkip5@)*op{!#G8lITKu1jQ| z-qv_!CSi{iqA6TST~e&4v@NT;Bq5TJu*&6qmhH!iCRFF9a@O0lvi2YSg0la%>y-4KQuXA$;!Ldv9+mq% zZJjDTV&8ip7d&O50_a&kbkssK!P z786#VqRi6=9vx}Pk5ijl>ruX3H6-EUx=#^2zy}P$jcepYnzLURi+OGg*X!!-6UUd4 zV2@Jb)7km$7LSkneoWeh}|;2&g@A_-AsIhCqC9nqKCbOSewtD zQ|zhXjF0fdM;{$}NEd7D*t3zftI}Esrxk!V@2JxY5JdA#-gR>t)U^XAM)H32(<|t(`{?e1iC> zub6W`CO#`X@ikgwHs~Q9@{zgWteJPlM|k36?Rd=6Lww{T@iA88jF0fd#~#P%fhXDN zv)UP~8F%7Ac;e&i2lNmhb_`Ev4_0UT2v2-efaoDUyWXJCUPdZ+N( zZEB82SbabwF?qlHTwK*Q;3@x7;v@Tjv>x|980XqpZ~-S$0DfE}Eu4_057(m!_ z2YHXd5_8*k~@qeW5&+2;cEzTq`6E<(rXV=W1 zTW^_#Jb86#$I6xUb2~08%-!_LD;>MH(>zHFXx&%MMxha6NqMl|@l8w!1> z3zO~3I(lVK>Z0C`Ad3erMFa0FZGL9UO_}sh)mU8P+e(hCQG1jnFV%aM$+YiD0zJx+ zhg7>8Ir?pN9s8=k_P9s2h4ae?#KYw8&f>c>?`2&0LHRw5PwKxEo=DAa(^U%U0*;a}eRwPAS%a?@_V68&xJ z4CKAX=?vs!|MuUlJqMo?k2D>U9e6oeu|LiIEmV1(DsJ+=oMTyh1~O%UGLia|s&gqT z&bY%a6Mi=c7<;zqq(EgNRiR8=aOLZ*hyUBvtxb&=#b>rZQ799id+VXhU(V_f-}R?u zc}KT!iuFg&I<`L9zOue^dDn^+9n0$b)T9snV3pqn4tl4h?X#a3p8c7YneCPL6)qLM ztP5nB;C+AT?{$49w)-wE za&F8!@4nv5+?cOB&b#%0I*7YoewF$Uk8Pjn|K10OU)elw6Teq0DHFUeWuo}JTgm`s zV(=MNCMYXTone&;e23q2v8V0sEE7|Lm5B=V#AW?^HQ#p9Rjsq`Uf9~$DE6`zzGGH= z{icVe?4B*oBglK$=VEVpPvfT92PTBx!?L*_-JU7dSWSKp+rgim>5=+B znw>3t#~+4OI^+|2Ex|Hv}2MDR%Rhkga}iO_8qzrN}v@f@F^ds_qz zPdZo&5DjT>8JVw<$ok=!-F_%~X|2@$R<~NWU+o_~e3AKH=%2Io812U~dzXL*_@DyZ zq9?fEvkmSoBk@_c_LnX-(?A|ieCr*68sj~DxZ_%uhiSl@eH2C?;)`(aHSrW@yT}gpye0wll{L? z+==kSiwt+oT!6jMMK6`PW^OyfPd47D{Nm_ml}vxyl)O(V*|ngdf0W%9C&~a?+>MC3%d+OW-Hi6}UQi47>#%liFRi_X%$#LR?JTz0kKecuaDE^2>=U zP5`C@Ystamch2_!7jU9H zgJ0c0O+GVm=6i&X)6;X8Wa{ko6y^D5qcy+4iC?8_StCbfeSdH2mH83F5X7> zLYMaR^xRdx`>4sEN|JUs{tEvU+fVr~{F*bKaNFSl_O2OoCfN>#|H_@J>f`iHO133T z>3lEe^^kS85%N<@?~DJY=bEkNzoh<8y*woLuKBNwN{39bZij#B?sWW9cR%9Ue~~}f zTdLFaUxU9g>&2k$=%C>>KB`^}s~s-$H4=F|6Sc>%%GZm<^R0B6Du08gYCWo6EY%JN z5AdNJgIj8ElV1dFM+Xg04usv#llXM5|8XYo5ufNK!PVJ~n!hbpiWHw4U<#P~SW8AsvZ*UF?UOK4bwOAK{!q!fuC4 zpYg^cgPGVk?U|tU*!UQ)NIM+ATB;omFR`WNpTO1G4u`kEW9t4z@fgAzi4Ygz@)-Xe zpn4BJ&UA?yJf`jz<(EemDw#jUl%?jR@xFQMY*plO5AGD-YsRrP=P}?zI*`Zy?bX&h z-mVio=07tVKXs+Wb2X1S_HTb|z2nm9o_P%UgPlh|Zt|E!+N_6z@{pk6$p`kX35&*!8mD0X~#ta7#XC;uDmI1PxDagzYCKKAr2I$V5G! z>5>k}W3(Q-9(Lt1-~m3oKe!ETbirprj3+dSk=RM0^;Z}0nfXj6F`xA%<=X+|Q?(NN z(RyrrnnYaIpI&cHeec8vy(2fc;KNNHa-#AW=`*$r-I|G=F+TWcJvKf@Zo*^mtEG4h zyab6|fh&Ge#wX`Rz+2!ki8{q&2yY}pT!hPG{2R9BG5@fdv^yF+CcRYo<^C@!nYz`K zm3YiZhica$|L2_M_<4sk*PO>pab~!6ed>LO$4|ZQ48ddmJM&6^Y7CD#^^hauryg>; zXC6cTVCO?unLK9nQPa+Y@{pk6b+)K_I4m9`^EDFLn2DV>PIhkVQFdNx-w*HrAIdSf zjsD!kCnygI8XkPY<}nhV&h`J1$$9jX(SY*@wH~`3cI7eP0Y1DxxV7Exf{*{|PR&~h z5T5ka1fQ9kGwIX4*$?YTNsm_vkI{O{<3oM##0P!puespEO&@Zi@)+qedLLVxNzCO% zmwn~s{~5z$ety%RTJt&Y{W0VZcAhxV{d#~pLJ`4BB#ysLfI;xe}kJe-3(QGd@wJ+=dUym}!B_-H*gK1P)A82oA}9s@72rRAT% z6+bECll?L97I@5Plj1RiHxeN(!sRi3cLGrRFe@HIf6UGXk4c=R{Br-v7JoU%l$Cf) z<0lo5LGIet8ecX)Q*$0O#hKyObpe4OwQQ|*D&M(mNxbccR|uZ6YwMCVceE;8 z^!%9b{NsXn+h+$n^BD36JMTZw56{Haf|x-7I;j4s^T$(HxeN( zLf&7?_ktzKV^$Ut$GFn229K$mr~LBJ*-GY?n6lJ9gS>D5rxlMue)5h#w0t}Iz2;i; z81Nw-$P>T3cl^XJHwvG-OY0-s-#muLoVa&g{KUOK?3u@qKiE0>gud9fOgj&{zfaKc zq>Ft+!rEU;=4&K!RBPU2Jv>yjKeSF$CZfWA|?Y5AZ<)xYd2#1)ptje=Uhm zL&LtUd5`_#BLR7))>Dj6WX%3&)F)1Sz-j24F8FZMhYZtx!rWg=)=B4GInbK($TNMs zdLan*qxBg0*wNxAskck{N&FrXy8>70VHw{R(M5}2wEbj@@{@$O6JUMWFx7c}^#<{ z@`dLIzirz2{GOFveO*1>+^<#!4UfLC&$p0y`r-N~TXXk#+n0iLR4Zk^%l!_t9(Oxe z@#=A8Z~>>r3lvV^H~3`}r=Vy41`SWX)B>k+yyYxPVi#OW_25x&LtB)Vr#qK7dgy3K+h&INjSCOOKB| zX+7R>0vB)^`J}=L{F0BEIGx(PwCCckZZ(yGOshf$4UekY)O+h%+rBYAIB7lJZ~_-_ zN-S46fnVZr6Q}v@z3q}Kb}c2xs*^#(qpdbL-O!pVah@4^gG!r6*m}I-1TNq-Wbt6| z8|gQ3YH443QD^&7-xd`#yv`@J-(Xn%B9iZ|n{icZZk*-|YCUc^X`Tlj;KTcaTmM5Q zKJ$CJy8F7i#o1*%S)B|TUTah50)~lCLql(Ca-7=TT2EQcC%e>oitTc2e=>N05AP3dsV}+UvkmqqOMDs{_HK=N>`#te6l{K< z)>Dkn*#2bd6DL04lwa$D4>x_t@a!jC-XZIxOZzTuO?w=V@$u?~Ad(--c_mtpfsY-n zd`_O%K)qe6KRIvtJtX!9uFn2s{33obcZ%vyCcK>h>&so=ymZE!mq#M{Jk&Y8J*!qY zAFFs>2qij`{qC@IV04n0Lnc4?$=wY<*}qcx#kSQ-Hf}a0esbu5krRr~dnMs@)_hvz z=yoq``pa2!T9+@qO4O^l7S2E8`C7}#x4hVT?Au3+Ion@ro!S1oLcj6IlYIp#bx*$K zx2?xsD$hMC|B>ZL_9v4+*m=HB|D1mzyo|J$KaOhcEiX2`qWx*D+!Omua@F5@De2T9=K8!%lKq_AKn6wX&X`PeZrfm z5c@Ix^2Nfr?(#(U0v9PbIOkK9uM1)8eFhfM%l5v);9a#ODzb;cW1J}%{gv|5{~vj8 z11CpS<$qTa0?nK9rgQ{k5DhK57!p=Tlx1E5G#COxfbn%QAv5%lkc7zuCcwgoh%F*0 zDo(P#ph#!|5fpKB5y{l7+wK}c`HQo@M%3L_S5}495fPqy`_{K^-`myQ)m7EQJlXyb zPSsT1b57mgJ@=gZUVPN_*Y?pl{(*Cy2wU_p7-q?0d^P#WzVXD27)V>5V zPe1>)sjk8dwfD6gW#_fl^MMEWfGW6g5AB^r`~R2cCq25+uP4r4fBu^O;d2LvhBx)C zMd6TC;xjOCmuNS%_D6k4{YQP+{#R8WQcv1i>^!<^p3wTCi~81{-q&0K?_D+M9sk`s zFtq-n-gSbDEvw$WtPj6Xet~w~0Y-h8yIa+Jh2MGg-~%SL&*M!Uc<(DK+jj+T-zw;J zcl=%Ft$Uw1DbKZjKH7Ef-v85`i(Yngw=?>($$NhA7q8x%D|Au6ckllP@x0By=kGS9 zJ|uszH}Z-13-_D#;n~AO{p&6m&hfli8aKU`*CCLf<0RGpDf87CT`-vsxjs|t(cG2H zciDfVt;8Vs%#!7}SrarOpAs!e>E`G7mMZD!^aYB}J;msL{j zi>beB`C|N^Pd&c@zP2yMPbBS&W!%8Nxac}=?aRV`?CfXCe(vl;T&b(%M|${i9x-y* zPmKLI*pG~TbZma4hacxEAqTxUhn9U>IX~LwM|${i{seN+i}Q5YXM}UGY<{GNANwaF z2aL%_FlK*zn;+@n$G+0YAx0t}iQm{a(dI{b_^~e%a?p=_L_hYuwfT|W=jWYsg&g!F zAJLC}TdMeZ>EW01_Mb!!`hhR{abB^_kM!{49M*A94*G#F`f;9_&5!i(UV8Yk4i-7|_p@%C@dEbUu=$Z5eyrPM zpAhCju)dCY6s*&;`H|k|=gqf64)YJ;$9z%N*;euM(!-B=K*)g)-^;o|_P4P4ksf|& zul{3S2l@y3Zu)7NN3y%;0%WWu>p#-NZ`$i$Lk{0N_J}GkeDCy`s;yx2BR%}s4+J^r z2S4;nUlGiY^zh4UP;Cz6_RIJnq$ z1b((Yv*&zqHNQWpen7snbZ2neV^3a)Nx@0WsgKk06^`?WsPEEGs(D-M#I@{In0`v# zxBr3pT&7~nS6sRI%w=t!Su8$p{m|OgPVX7Z8cv)u*?432`j68;d^T_%Vg4mY9a%a4 zH1?Yt%j1c9{^W|GBqqi^b=xQ1A8%jfjy$RS?8psj9%tbqY=W( ze^T|-bn3`A%I_&XtL~wpm_&F?pUkh6pq1~-^0oMwMaL}io{tKOp6D(9RQ~ZjGR@$|-c9Q^ z4)?8E+wVP1j@V^h>b+C^5qoEBA^SsR|41$z{IU&?S0qk9qUSxGESGljVv{sZS}AJo zesdf(x0ZQNjxn~-q&iOCpQj(3^0d7^+V%TGZtuG1GtYEi*84-zho9-n9b0m*9Q%yX zpMUB)S^E0h)(^B@Dt*IZZw#gF^ggi&b|jd2h`&De#Dsg{!~fakI6Jpr*86QkW{Bke zD-!qJ#2w$eNnk7Co#Px-F3Yk^PzERyJ%9Fmg6A7D|8_*{%0!Gg{qq*tWnxaOGLiD< zbo<$7T)cn%b(8Pi_DlDt@Bd==)I)OxHkq!`gCCx_=To~+RK9qQC=ct(vtimU>f6vZ zC~UmHZ*|)R&F`X9$<=Y@^?hve;499VT=wg^lmB?x|GMVW@OP96zLzpFucAy)1}GEl zKla+=UVTyeZfna#q)mfF793brCg#Q~6Q>2oh2-{AT~|)7+W%?yckkF^=`CKFDE@P| zYnO>t{pa^>66IoWKopJPSGSedH?&|pul+f<|NP+5vv>47qfDfyRBW2QL(%NLiWa`1Xrml$ANFEqkB*+W zq5GNA0isT*KWDb55#t8W=hb*FN0e0CR_3dyVchW=eGtfnme%Pu6n_gtWxmTk z2rb8G!+7JKV(hcy&~J)=C;K>gd;_bnGMa_R{a0={6%Q0}ON`yUu3pnv2 z_)TAD;ncTwQ`Gj6@ECkJn zSD@5`;5yfPQS#dq9gwq zF22bQs`?S??6bam$I!`cqxj}601=VStCdd3cdq@qm;-;8tMrgB>iEXlXR~-d9zMSD z@&`L7pAet=sAcEnD3+(q)8y*oWaAr&t24UQErpD43f`G1&E|l#HyPh(Ifk9rjBmgN zoRFLL@XM?Y!fDrwZzN6w3vY8rJ{Qh!PQO21e52)r!-@I@oa}mLd{q!mpxHc4&YqHu zZ)6=c@cKbF_33apHUH%*1@@%n7&uk2mG8@T9k_rKFM?lw$iitCjc+7QJCDD@z?R>e17JVSglwYwVgBmMaJOvE?MFQu)HZ{{2EP3gZ> z9FzKrqGR7ywCA70#Wy)`?-uBWkqzBfj@{cZzIiJK6Oq=6Z>0S8H_HB-zl!k&sfYaO z_-4b%W#W1G{u}ZKJ13tMU$Hi3y=CXSXnZ5{)p369j)km`r(?!9T8?4oHRBs_0VnVQ zzv;IJ;k4_;Hxj3TZBM$zkT^|w{jTI!Sc>1&a>C(6{Q^#QJ(IgW2&b@GRlhe|;~QB= zow$$dmTsGw_(sbyaH`5M;u~-QCtd`<+&e9tcG37o;xw>rhgT#cghzjG(nivHygAm;+_C@BJ@~|H zL|jpSe5w)OsL!SR`^H`an`u0kbAmhHbw6jko~k;j%DZ8xDznDt*Rrm!9QLhin(1N3)c6ftF+8 zV=*M2!N1muXNXUr)PH#oUpt;5ej%PowW)Z9^qF6q@l5(Z^jyvIK67f3fu(KZTeU}B z#KeMqmxyQN99hSC+KXrQFyfiaeab(Nf6?^Q9?zsjR%khm?Opbtg9|u;I{0x9?VUw?)k&OE3GG$K_qCeJdUmJCcj`gv#mrY! zy-0nTbIdvH9lx>Ld1v=;5a$#PH`&l5mDkWauG#OE?YsxdiP)sPW2!!cj*P4O z{C_CQ-2GZ|^P5%qAKR#?Xb-qY?A`cG%PzLytHn6t-yeJ8OYU7id7G%0pXpk#Ws_)| zn7_xKxLZ8$7tibeXy=hHw!M+MXN_4e#;w=lrbn-&=OM~`b)0>>dqVcRrEiQ^FKRh8 z>P5S~=apM=PrG1^pQW9b^482EmG}gT-@>0)w(}%E(!&q` zjU4zu;YWF}`H>!ezFwZ5@PWdQa#zVu##_W!#9LG6t9Xm_>ED{|(AM;;Hyv)3_exj& z>VNavp?ezfR_Z&-FZFy@(XmgOv{AfO^5#WCHyk!cjMsly#5vDTzxu2D-a2vN!*_Iv zcBojhDCS36zgPDy7SC_)vi@9ki=QBWsE4v!O+TK!(X5B!`r)|g^@k+eFDUcXaX!_Z z3F#+TL$CD-cSSv<bOnlCT7jA4iX7skEQ8NTlUh_*e{yXYjAJ z;u+!-DD@xs+VKqW3-L^`-#uD^ zJabJ~A!L2rWA)c+z3N}#FSQ)Y-mQ2BJiv!?3~nPgoA|_yN8+Z}U!OcaJHEZBD;skD z`E*Qtw4D0*fCu>S{ovNK!o(+TJQ6oO`n4jS*}CQ4&QeJG$;Q~%rrbZ{%c+kK^}US` z`OtoziBH^kByM{2YDGMARpe4s~(XYjAJ;u+!-DD@xs+VKqW3-QeK z11g>&{q(ENc&0`3dzwDHzIuMoK1MuK{EhO@(AGo(cBerrd@O#JcqZ$eJ4rqepZL`C>)2OiJR|v$ z9)9?59#N>Ue8&_q7LA?{C&@ zyhXm)^$_xMx0>}(-1br2^yt-^`PA2Rr$e5XI2NP*n-(9T};>JsH)9c(w zKHl28<)6B9GlY+pQy(Aj03W^|+_I;c_{5Eu;-*KxR@l$hEg$U8&QQFi<P%D&rZ+kM!`veBp>fz2!sr&>}ol>v|(57Gh+)rOsL743-xd@s_Pg>Q~B7<(@SCmHl3= z`}@XTD$g?*eZI!)r2O2me|8<`@rfWE?@J#lo zrn@11Ws;1yOJdG$rD!)XY|~p z;tb-C!q?1oTRV@wV!@xTavXiuq#8Loy>A21grX{yIIpLTM#cTqa{-d9$hsaf>qIYSrRdHCcP4*s6-<1ZF{JH;;1gD(Ef+)v71 zeC|`O^Uw=CJ*4cpLKpR0@T$Ya^S^|TGrau4-pD8TjX!ACi)RlH^{>02xigvIC28FB znpcNFUhGSe(7F?uug*jBCyO(5ZiSXpSuc*tI79r}I*9|p1ANqTu@2P3t^G?TKHclr zt{>v12sCbbM9y^-KKWnT>w=<5koYV)aPP_Dd7QDd2|=S+O!j<3f}k6uZ~6|zp6djBun_IqX~uF!IPeE75qs&JC+eCltzUCzt+KPdJE zzH_}7CGK)_Cj3M}6vL!SqU60(FvIuai$^}Me6g=v-fZ*Vvs;xf?!WYu=1-7}kc8|j zQ|XI8P`<(!?`Qa8<7IKve!KF;Q%@;sKW}vZ{u>XUy#36=1a1{U7# z7QQ?)IB7ZIZ~_-_O7E_40>50z#OX}2zu`sw;t2Zl$+6~W-1JCm2~OMYb*E>jO`_$5 z!wFo#i8vVia$hrX>I!|*H#ut3xal=F74Ie0_afuHfrSsaxfL_hw%2lkaME!ecz_Sz z4{lTcY~pj~`oVR>;z)>%8+o%i8aKU`)&hLCebX)V%nUwSPHlW-JDGMd?d0(bR6CjW zv(687m3~Bzjh`&5Jo|-^_r1NFH}np!8(804<|5AVXl|Hj-UsJ6^UJbmC+{!rRKJp< zAr2PJm(;Xz7xs-Wuo*cukXa`L$M{d zu1qwy2VHfUI6$Zxy-cLe!dC4sR`;q*+#;|zM097>E)%Ep54R2H`c+YA8yH%DQQHNB z!?{hXjuEllYc`3Jvgx9}q4I?+GQq+E{#q^*Q}tBU6Q_!L;>DuROzIKs=a&iZ zdxOdZWq>j&irPdplK^iGzfy(aS{k>@a1bP2jPA-Fo88wf%h?``b2& zf8~;}p>JLP+T%qleRY4^NuqqLA8PxDwljy;Z|ENy9_-&JZtya8PMi0tp2&zY@ee`= zsYkRQWrFVwDif3e$^?=qE8IhqDicHfmke%<(T_WCe>h`;%e=S;S5KpMNcGq{Q zG4M7)gU7(5&vL4zS+akpOz^#wi8)?8A;*o_pObMTdp}6#VX~hb^Gw-SZmy@YlqLC* z9)9d!h#dCGg&+F>vk#=rkM!_k|1IROE(dN0-ex%Kh^zh?cJmipn@M9h*=k?nBNDn{GaYGLI#yL)fZ>W6ZJSdwV>EXw@ zW60tBZuoKjH|Mw6{74T!&dos%-w8j?+vJ=$n;+@n$9WUTfe+`iaNZT?bv10L8N^9b3;+~!Am_~qZN_#p>=qINRcco}NXaA(+(8o3YXLS!>o6eqj<{hH#KPRzy=6q-S{lR_u zs=tP}qEi_M$a&^kj?u?OyY57LT_3oB({xJp>4TrGk-{l@1eWAjW-D;Y)xb&i2PN?X zCoRXoNsF-OnR~c^6EA`v_fQX~<~k5bENF7`%sX3RPt#utwx@k7z9G&fIB7ZIa4J1( z)_aX~m_6s_B|F!K?;fc!mbo`C#H8S)<b6Tok7bh+2Jn-7cIm&KeM9BEaQ zHy$GI^}P5ML;X<)8W1ArQ@4H6-MM|0+jFn#r^&QTTv6dhs55+3!oe zhS!q1^%T9(1HF)pzEZEv5!Y0}tCIHoUgcM2%CrMJzjzP5?Dr+lOZtc6ba$22$~EYt zlHV`?$^4S%%T~TG%h%##79F$5dp;^CdZM@ZQ~AgD$TWi+dpE7yINY~tZ2|`E@rT%D zUh2J5{1JPnPcr)@W%s1BX;OWXamP64R*i8=O=Ukd|7^|c-)BONUFWYy7p~&mjtaL6wPJXN;5Y4Js3q0m{VGr&XDttk^l! zx-!w+7-w~vm?u9xaqsFfF+WzBC^qmNVaL4}+ZmS7z1m~ukFJ`p zCCA^R{U{TBFJ+=K#-t4RWn$2aC%pQ?mVD3mFSqssP&>*9GsxNR*1K1!r1j*ES#)gk z{nv60qMC*FjCYRf?nar&{6+QqP3^7v&r{E+`yNN#*V9ct%U1&)CZ2z_Vf`V?#7a>YkU#WalTV0m z|F}8lIqtqeanqw$()&Ehe07`y-Au?eQ|(vk{x@_ALuJ0p@gOb7=>H-Ht{M*l7jQxr z_)TSlaOz#OsCknrv!2a3?O2v^iy_x|_Ca+Lym(sB%(s@PKRfeSeCBKS>TXW`Vhc2k^Qz;k1!N57=^eUvzD z-7-FrKbP?p*+-N7Pv*NEqtJ4Kagy(~i}&!m_Phr)BVK`04}$Al??uT^#=HeDo*}*& zzfHwAq=zrGHStaJkz#dxvxgDi2>>Ui;umSfm?&G-gfz=@m(zs%|&oOZqVM&dNE z@HRJdZ}2<{@&%e6jfaz#6AmZp7jUxcnekOYIH7IxG&y@pHolQ{)WGWp-SLq2)clvL z6tW(Z?FB8zz^RHY^&Yr@6EA{ae#pWpW_&VR;~R<7j%8Q6dB3lx#qo_VCm1J*kBo2d zw>9G%FJ2*Tp&kTRJH8>FA->7H)r)UDKHv{+O?=b*w6^N_CS}Ao*?mM4H~sb? zoOZqVM&dNE?MZhkZGtd+U{;;vBN>!6#lL;)>^Ik4!25zOfgIwc|Ir zN)Pi3a>xF(`@ZzP;(7fac253a=jrpzxNjt9+IdfXwhf=gO|JzcdrrE{SI1f7X8n1v z_2ZkuwbA1n*-xwGSaxo$e*q8hp&WzTSigx++061V*jW)(DUdd(_%`x)4Fom&d&C#Sr6RqGS(O4eJ_ezctW_)y>5 z_#iEHfr(Gtcrk8z^h$a^ap^OTyYwt~s>Zq`&iP8sQ2SELG3>o&e+{^R)AU;uPT=={?VPV-jdi`% z77^_))XQ3qfs5;PVFlcPT=={?VPW4$bL1Qq0L=^la><>CvX8L`~mpcT6pW^ zn_FB`!Nl7xyontOD-u^+CLQOcS%$SM?i4$%49lx>rx6bb0Aoleh zZnA@mR9**Ha|`^0QnG*RfwFSXdi`5_8}VSiQ`N`N(i!T0{8&Y6tvTR($G!PUsduUN zvgikKkJ$TVqA#R=|5j4_WS|H1u_wOd-u08WiCFNNt_52*2|di;V^7>Ip7#gFij{9- zZ{&+@Z@k;HX7;xKlHBJ-=BwlE+g%8G2F!Gf{w>-5({jT3FUl=AwZBl6UvMg}HF1jD zj~F*SdL=zyRF?hgmz~v}57`f?^=R%&+DCc5s4piNC+rA3z=!$;+|r*i@rm1y7&pDn zjiu$Yl#<$8U*fZ5$s4;f{#xlEudk&?y#gOCr#?R50Y1nDxADy;K5_dI@yft-_7hh!+ zO?Q~IQM{G+_7{R~IBbrXr}SYF=hTn4$fu;~tNY$MapA*vbUCB%66b}L| z`ORI{pQ~>16XXx|Q0j2gk7sW*>!G-QIBt6VA<2%1$b5C2PjzQQ`U&=(()xtE!cS;9 zRy}0(=YR+JjCxRuT_@rmn)BnVzC8;<|+RxSn@9R$a@o9a0#wzw}(>gW20v|1>K0eg< zHapXuaxR`Sr0c$Fg@To&gW=p&Wx-{uUFTxbaBb^!n?Q_m@kS9Nk^;^R2$W z%;)3bqvh1c2Ry)s?+3T3519DGjYs09N559s&ypnvb>~C&OZ3F(e=Yax`Eu&xLw#@K zLq23KH}Q!ZkHk%nUag2{4()hL_mn@LSKofnqgg8Jx3oy4%e!CUvE0?{VXixasxRChspD=bElu z$o`qJ80*<&eXQkJ_HM;9-~m2061PW<3oLK zSvHq`mn)UtuTD3NXT14+cDBX7*YkUvj=Ar6vMQcwc76}}Qp?^;qqEoElb_#{?;Hzh@0I79 zGy^L3uI1FQcPp-;+=5f_EHm!xx!S}jZrm6*z0Q;5=a0PW?z_4&A^T~x9?f0hH?^E# zoaB2eMQ8;c;FI&}7jR3z)x;-m+!!~#&W+^p85kJtDuj${v>we}fsd9`A0O}lAEbfX z^ruaH;>L|})1#k^JD+>u+{DHO<@~E1-_CSpLasB^dNg+hK3Yy~eA)$T{4DWI%Id!( zKJlsN*Rik4ct-LgJ^b+B$np7j{WkbP%7e|1^zb7$kW-5v<*t&SoZmxyMZCrNS@3~B zv_x{J%qg6t!6zGw|x{hJ$lLZRr2xHHQo7;`_tvFi$30x79XMI1lL3M z`KFXxa2k1?8E=h$(8MWjyc9P*IJLrGbYHivyLfiEaZ9a7b65BaEhiW!;w|t1AHRO_ z>YL0>CO&cFrMT&JZY1x|w{H2T?#v9~qvh1c2Ry)s?+3T+X(m2#mjvS&JX#u9BaOw}`KZx8MgK?xE@b_<8x<)aC0}_n$Jfe$xhZ;4Y6t({kFj zh>3-ivxV1{=S4cs)82gQ{f&5QWV!N7xwo1AshlLj|Bm|Yp-Yc_d8hk)jn_%}NB#E1 zrD8s{tMo8G;;1!;FFk6_38D9AB7dld?0lNuXx2ls=UnAv<1Lx5=>vM*v5@;26k?1A zr3GYKPH;U0s`zto0Vke=ANSDSS+uUVJa6~WjedP`_WJYJ^bemqI5fPeui2w`B~Ck* z4Ga5g?N8>rthbprPd#hT)24p(=XrYZ74tnS>siT<^zdU|F>+YH0zcO0FhASoM|$`% zFAh1hm*Gc$0Q10Yex!#V^SF@1_cD(I|HOO{n;+@n$Gjut@V)S3{SfoFY<{GNALHi8 z;d|jne+BczY<{GNALG2p;d>b;!hbT)!RAML_%SYt9KIKRtZ!m`*XBoh_|eWo4&Mtu z`coK3w)v4Bew>4Z9M-Gz-TpotUVLNoBR%{$cK|t*JI?7~emm!V*!)NjzmgX>AqQO9 zSDX1q?5}O}BfZbh>pwvb`Nlq!jQ_EpWfea!J^a|G4>{zY&(GUGiT#6Zex!#V`^vFz zF8Rj3Qk;*%{!}(U(!-B^(2zsE!H@mO*-y^qM|$|-_mJa%r?+1@`+u@;oz0K*@SFDf zF_D8_#G~xLg`czeksf}Wr+^&r!0y676q8!Lj>;*PG1eg_u;9i*o$u%Q51=n)_LS3pkA(rf>p3TP<(@ z9sAFr@002;p5wFzr(%sbT@>j=e&D3#7&vJe);Kh{fK%Zg6i(o$6RIl@r{)h{@E9ev zPfDwB%GKC+Y+pMgBHn|OmJ<#qZ~-U8gCFsZvgmt=jup zjkKBmsgYK*r+*^h^NPF=&()ZJvv;G63HcnHw456DoyJ!53XO=)_I20d&aVc9akosvaHHK6@T*V8|D+# zRXj)?a@3KPe;@nJjphD`vvYl``-fyN=8B>II0r-`>)~76>&8xXQ~#*u2li}KH0A9V zJ$|bmr<3_~H0eUp@!QpTI@9AGeb}TS*);u{EEl6975OX6o7CU_5ntMWk9wbdO5s`f zv56}XqZjX?m;JufYq;6Yrl?Abbm)a1=mkskm3nR7z+dCjkw2(>8vA4Y{Ng?Ivfr1Q zT+%{qmp8FWHY@`MxY)i;r1!%p&jksG#VH-r`T?AKxR>3~ub* zv~J^Y->S7q7_=wABX*gWdhZl}#NHV{Dc-8=-b}6U(vRrzlaq(~E{dw@Q2!-^aX^~8 z-yCOtS*_>1@e{`wKhYY8yUI1d`+wVCG5Mq4eY(qWUM%LU{JvA{mk!79q)W2TWm7Srv{8~;W zKIFRY)280G`=EIfzX$d0%JUO*y%%MuMHlrU zJ~WM%O0$=9eQzz_vUl=a!%wDC$}jfpqiAtolWI=ES7Tm%2wii??%mGu+b3G>Cxf*S zr&kI2_wV~Y;RichrHA?EnnU&z&#wvXC&?e|oP2_7dX8BScduU?=V*5)ZhG{Z>-ow2 zFKs^=O+p!0=TNs8($0(Co=E5umQoLEIoSEA7@m)G+9auhzQuYB~x^#{EB zc*kk$1Rv@X8y`NW{YA6aex#pF%6?>>G`f7Ao0*|Gq*@O4Lyjvd@sV?VsJCnRN&Ftv zw=2(2*nSefh@Z?|to$VD3rkEtnPhuX9G)4uNv_+IoS`|-@ROw@lwZuf*z=DsH>sJs z)px}kRJ#Fs`l$ym{nKZT7k;RTd_ws6o~E70ZEwU)k6t295D`*xdv?lvb(|ZziZir!Qp>5dbKxhgF<>*TTp;>GC%p++7HXPlQh|Cz17*jAOK%N_;d|{3P{uEkB9hgJN&sYWqq2 zB7So0bIMQp>EF;&KN)#)l=hR)czyA^8Gf>Tq4JCA0~F04Xi}ZC!B?4Ul)XXE`11F< zFTC==mix(Cb3LT|!dv$db^0w2DLtg#+E1SGN&23*x71I{CUT^o_LHpnn{W8Z>4TJCEF9(e$D>W!NNA3|tUP+* z@{^X1?mV>ReiD3a{iOU0m*<2Z9PLng$Tzf~yzo1xEWPkM{h|FN`GcL4Psq(JnZ0(N zWP4KPtK+=9D;sjJmyFlXKt6?~*twQdY3J4LN$>z4Jpr4fZY~8Y@vk?}0mFXu}e%T(MJbiHFtW&zQrs1x7 zyOy1_ykV_go0s&H7nC3W#cNOQZurTmgOy(#e~F?~$C$J>XZ0lG?YRn_`^k}|3lDsc z_|De$yVlZ6%AfP_2Skp2XF};A-_(9`?n^IUI_Jjg8|J9QeWk#i{K3wrU#0Q~`D6Q- zc7Af-`8$xt62sToqn9 zJ}G~rCxQ=nfRA5}y>gvjVB%9Aoo#wYFC|s}KW=(BB|UyD@!7iN+KEy~e5PZz_q80q z9@gvDD)0dh@ZtNxZM-c2pT)e@JT2oBBRvvZgU>w^sgV7y?Kj11?`t{WqsR6u?T7l_ z#)o_;{9OP(Jd8l2&5o!RB=Jdd{8;*oWecC~OwG{vv6cfq<~PdvO*W44tF_`7;u4>F z{s~;|IEJ`|I41RR6~~Z1^DZ-vnJs(#bjdNqau!W{am*e@9Ftw7{BqCnrhhhbHT+%2 zo*!QNlcyh^c)sEoDZk@=pA|m$m9Emm)V<@>k1Xvt_14gF4Eckd+xgV~UuM6nw}vkA zcz=1VWLt!Q*ZfQ;>3Ue^>sPLv@1{bw_oqJ_vmW;4)V6aOXMzX#kPYC*J+yZh-P=dv zvt!vyT)wkaRMxMuT}S;#eVD&f)rZuR>D6X^nACil-fU<0n|jYY;saw_rZ=&iOAUCzsj3?rj|G4SVOWIG8oe#7Faz@5y!p^>(dx1AY&RU4g6JZon_%C&#Zk$IE9+NhbR`B|{psT(&Z|OU){->6= z8^FibPs(5Qy@jG(u-a96$Tzf~Ty@s&OIMxs^3d%D@&`L7pOD*gKtMgr!w57!jCg-#L+=AwQ|*RN_Of>vfFO+qL{8eh-RWfh+Z} z^t-Y>iC@G|PCcajBijIHKq&jDVuco}c z384$FzqR}7o^-?ZWH7hze+3^qg_OVG`d@cDqaSmX9`X(CCl_2_5YKxQr1bGuYQA@>J5hv`O_?= zJ*nkX;-k6Io}}KcAoHvq9-A_e!X(OIvchZLbg}PpJpj` zuH{tPd9|Me5AZ=AxJ|t(0H0mZPfC22EZKje@Q!fxaN$$&{G^ssiH}p&FFx+oCpJFd zl>NH^e0UgvCK+cY=_h5Kbo58B?ka|iVA$L9sV* zwf!W15kFa+P=1p1z5?DwQsa|ezw2=}|FHMfesUkfPv*a({9@@}6fM5nq>beCcxUfG zUv|WUZt~j(yk3+EbX(N9`XycpM2R7Ulq?U6Z+Nv;U~!-?3{ceb?VQv zH6BjZPs)6CMsIR+GZYVNIhA%^?I*zle82_VMqc=Tqdh6{8CduUHx;rT&VMYPpVV?H z@d;S(@6{(ZKHxMmJzMQ3+3`tPC#^p995+8h_M_!g;zO?Mepl-4T7DA02gTm-6Skkk zFXAW1v&v7BKJ~HV-?WNELY;*DWaJs;+E232>b{1b%-*Q{V(O!c=595q&e`CrDQ}-u z=wpRDJFmX?%`Nwn6m@crO6escgmyI^}# z;xn-AF1Hl2Jz4y4JbbjAN_?vQB=w1n4>*l&3BZSk5onV3lVp2R)=ArYhTT#~`-$-B zWzQF8vO+Tjhs4t(> zTb|gh^$dHZ&iIX(SO}5p822a(V~_e57=F^$W9oa#PZsV|)PCOR{)Df+dh+sberWqO zcOE8uQL&3X>Kmm?>baEv_A};BI-_^EQV*N&3CABj`SyqRn6&?H-{U9A5A3}C<7U1T z4>a2=-dRUByU_PZ&i|Kop42{(GEYBs@rsGm49!E(a(p`vTqg$};4}Scg%7xmEDXYD zapZY%`p})wkk)unwO5i_XDad8y5%DinHj=I%Tf4vi;Jq)nR524|sr2<_8KN z?5Om(+1^+6+mguZo6hRLsBduH;JORq!sE?HPS$=(6Qvo#N6V>?4|sr2;om*`@$9JZ zTp&J?_t86PWO%60!zPybv;dzS%l33rec{HH0*xcYAAS4r{qoee%^|*}{wvAXZ#$N~)GfYcX7JH+D)ABh&E;POJ{}(6({qo) z2i)?%4YHre=Hqmp(U!s5#n+MNqx*)_ z)}8BHx2`|>v7O1=&%m~KyIJ3U>@QE|-ml*(SNLbOE2M&Fp|Ml+1f4E=ZQh)!AMtmDRXS~RMPs;!O&3`}Pbj+VrddN5QxcvkD zuMyARF=3~(?HVT4J_FmP-AqV)GBNR~lq2yGzrg+m z@Bkn6su-!PVMpcsjlAl`+xId?dh}}rK1)74XENva*C8pGj(j4X{Zz`Shfmh4?`?d7 zwes?}*255gPo%R>$Vs}tPWp`FKlQI}E~Nd0_|(8xi1#Yxc=#Ca%lG6wef(;zc@@MZ zQ0xj^@sq?c#4W@z2qiuD(1hn7z81dC(nH$VABFjc`x$Xe`iDjk@#jxzNkLaVG56o7lv82nRr3$Q1ANd0+_;C9 z^LH1Ve^|!np(!`(_bc+n!F2rAcz&`{PCb06Pi%aGwQ`)eyPJL5B%C2C*a z-8~J_kM!{4+-2mz&p#j68;|3hU7H{2;aBp`Uq_D3k8umm$+o|j^zh^S804^ykMCt2 z;Mnf!du@KChadY)A&2t~IoE>o5jo$&=0|$?v2Qu7mviuJex!#V=c6Krast2X0#!~p=ga0tdib%QF>>HTx#65J&eyd0ksf}mBR~%M z#{RkNL(V?NHXfvhAM2=*!~TNgBl{CF&)Mcjdib$lDRRIUyYuJodHXd~eXkd%z>ocE zkOM#TWWE{uDcbx<4?oT;LQnW%cg$;JKMk87>EXw|X2`*Au{-vy;(RGP|40u%`ZJJ& ze(+^}5c|;C`jH-f^j{$dezcRA&q904=0|$?5l14&=12cM{Z=+V(!-B+7sx>`{2T2* z{G6SCq=z5t9g)L&G|DsU*;prI^CLa{=)XV?-wR*H%ULgHe=q6b$NoOZfgj(^_#ypG zwtl3CA8{jc$T!L}aRK`=+5AWkKLQfupdWl0KO@es{9f75Jbt@suM%I5+^p{5Yg0Au z7I|1y%xl}QX*iL6?>oc@!<@wCz4M(Je_Ygz`pi4tZk`ffYB~PAoWOoe@Bp9ucN9M0 zW^17EnGN&a6+TIg1Mr<$zn{!RpCjyyh_Ga}->kB={>5})dM)!+d>x$i1` zz|B@e;S+gUPJ;8^TZ2#5@4q$cw>|BQhqgYPbl!?i!AHwc z_|%&Bp7QVjpOHz054hQyD14U8f_d+)v7cPUe02NUleh<;N;%R}mHkx5Z{Ptw)8igK z9&WZy3ZL09@4d6!zms(Rmh$b#{_?dF0 z7x?BRDfm>%sf*9U%3f@IYUwn4&IRpA^!#7GH|NifFyn)HybzOukCvnSkIi=Z3deaw zs4)GQnisrITuY5co>BMX{~kPFc=?JeH=ntzO>ghfCRXxxi9;DL7+Sw+-Rd?u@4feo zWev}NGQZw&a{v468|KqlU!iRFkfV;Q{QKB%ZahTZpPlPl-9NN^{p$V|L;d{~2_jy0 ztoXP)_15d$_Dj9}Z?9G~?afmuRLm!my1%SRIhpw{f1}hp|0`t=rM=XB`?R`ml3nQ6 zWqBACZdcg{P zrCysi@Ynb>`?$)lY0D1m{Ng?Ivfr1QT+%*SV|TAe$HSv^84jKnP2kU?8^6L z`C5F;qGJ|$&qoDCPxKalD*yN%nPzZf@1}Jdhx=BoO~9Z%{t&y&OTBlBKVt99t1aY} z-ILCy=|}W_WhW2yT@+Q*q5ew-w~pTvDPk(BS< zB+7vJ&za{OR4&W1Oi%_W6JyI%nV_r`E;jeDOL(qzKjtTln`On>Og^1f$PAEO(TiQ=Pd)WVq=R@Lo{U3gk{K3x2CsOxJ z%~m__5V2lzXKcxQb(~waXZ*P|wGbd@qEYNz%c-<;(P!Op=r_f`lfef(zz3<|Hno31 z9J34hNr}&rC9jw$`eO?9@tKNwc8Hc!iH{i9w(y}ovGDo#=d zX2^cD90MP+z1;qjev*2-mY>A$L9sV*wf!W15kHwbOZiFCr%!5~pFC#KqR35h?I$_2 zd7j}Xr~X;_#nhFGj$CC@KVxfLjD1MOrO@3k8|qHI?LznY@{>~jyc515&KG{jReDIp zwV&MmvMa>%uZ8xL*``bmk;z{0P(Ilm9EzMmY4xd(}sQ;AQtpQJvq@d2l??*-t)!w7V?wkKtsG;#B_ zZaySF5k9?~gg8^nG4S!(%J<5C(yPB~`APg96ng_#+fU*b@ssJxm7gU2^ebEHCnK*Z z(0=l--ZZS;3_sa(wepMk_bHlPpvL~7e#X|g$o`Y^lhBLyeXiRbTh;RR_rVFJhkQ}{$@_PoyY&9u+Zv7m(_SHeuygVW@x>!%@0qhnwkKu2I?mdOQb<3U ziMiL1mSfm?ReJ?Izz1BwZR(%^e0D)UDe>95<(7$*KQ>z5Po}rT>vz?1>f=K_V&el& z*%t@k!@~%4w)#m~C%I#Hbml|i6XDa#Nqj%)%Q5ir+2SYtdRr8ipb~@MgJM_UYWqq2 zB7U-Gh4Pc6FD^IzXE}tJCD0(Tio>MmGqu`GG861!!2IG9JL^;Lb}+SKjvOTS`PLr+LB@o z5&yskJirGHdOX}pFE#OrYfo|0qaS;YCNbz6O>3RDVUwgGEaG9}q^{|%X+j-!cPVfMq>4OwL;8u8f5I)f} zxO~82^yC^KaaLQB?R|;Qj%7!?g#ql;#D}}$I}|?SABl;NFUQA6e4C78cvyv;*dOMI*gR;ggGLKU$8DkC0Gp zKi~mAo*E9gjpu^S(u;o9RQKAxi<*y8(5jMllB=wgY6$b@u9;CUQ0GhdnvQ-<1qLT27_? zXryUJg9rHV2Dqg!4a6t%rVq2VKU3nfb;|=2Dc>&;5vUxIYiZ;!JDLnWT25_z>t%~jC!ML91%Rg2R*f=mX7fJrbqdnS~T}b)z1Q*oIJ$6@LLbJd>j#cY`vuXj%8PDcbo$zl^*g9 z?I$NE_jlVCen&j7|0BL8f3WkZgH`_2N*(uXySVAKUaJ2ssrISNSLdO5lR1B!N=pj5 z8u!XY(6f4f!_F(^2=n8t-KzdK@BkmmF}T^X;`TqsO^-fF_rFPemK?a}WUilj7)imj z7_=#THLfTKyr(*VBSIDV{5B0r` z5BXrza{k(XY~ns{dPGTlWE_*!o}SWYeEH=+cME?14w90k)Nhq?JbVm6@;%w!$FJ6k zV~9(j*cG_qCnY}_#}Ky=$E4q`;uz8wmb9k5-<$31epBz6XPkG^S;lvUy_q|gv+=W}FYj#FtlmF*QV4q~ly1P|~57jT<;RRBJ-qP^eYB#qC&!hd#)zW)lU9m$>O zlzLdpsl=zFqY59d94NF?MZ+%JBd{=(+2biX+JHSA^h z$@E{9Uo7sc{N(h1s(WZ7Y3<(rDA2p|eO*6$&BYDyeG@v4;ns#Qz79cR*2 zddSDxPo6t@jd*^%cwYa9pCo^%nCo5?0hJR&%m|^+`QjjsqZIKAC1?Z)N<DR0!`9>lI$0kb<*_S*SVRHab|>1FDJoIYB`noXs-B4>g`&762IqD&tHHm z^|0h8+mrZ3{A8(5`AO1i4b)Y_elqe|>)KD!p4{8;lT(iJk3BzC{&DPoOlp6ZeV_9B zZ=kpT;*0JNK5%@?{ba3LK+0eKuWu1;pMs}{)L8q;+kf$S@%((DU;Q6`lKjEW$tP0x zber=|;@WB4^ynql!X(;Wk@@P3-t4Ak$j-H#N;|Lili&e9d_TCgzas#jUC>WTdy$2MQ}fd}P{*f9kAKO0 zea~yRP837hc|PVotXfWOJ6|b+CGY?r$}zZ29~X$v;;1X2x-MudFA?xFI`T!bW8OY1&8jc!SGfUPzt9yI-%kx8@ zd#*#pnUC7@tj--A8s5~`>@f`rpC?4U*xDcMx{~Lg@K;mb86WtuOt7Bw~ zWoKw!qn6|QtHAj*-~m3WrS#!a;lC;PO=UmH;`78rK4iQXtW)E^f{&I{iI3

    AK}i^#$L5o2Kgh~;g5l!qT@I3Nc;_!0URoB?OIALZev zthey!&RLM~!_LsRV2^ok{T2)7$yvzsQENl~V_(SWoHhKt!tYN@P0Y@HO^(UQxyzGQ zo^jUDns}oWg@Czc(H%?VBmL~If|Hh`Vi@r!`d@&nPaf6QO{@2!3VA1z1W6Ep?~9^g~WD}2Dsmap*X zgf;x_!KV~}&+c|ZMEngtT26C(zyo|HRx5nK&8~)nPvm6iXGUhBf@)0X`$=D}2Dsu7-n8b z&2I!BEvGp?-~m3FQH2k<+0q>U6Ip+fJJV9(lhhhyo--SevoMPrVp8zYauhy_tsJ8j z|2%8>!2^6oZdUk!n_V48edgc0)w`4L({=2FIC8>-?;<**Tx=y@`dLuTF`aUs?|e-OPm<_v=bK0 zPo?J0Z6#=6oQcQH|M9lpd2^@udwQSe9`gQupjXY&>D;lCR}V#mXk?+H>C`kLt zH4(D@_Q%Gu5*1@Q0hs&#h>aQo=28hcFt*QSDdqE@bu*g z7#fE^#MVVw@6FOJcj16v z>~YjBgU`S9*I(FEj$ya-Dc#u|?^j+_9J_1fwE4ArX3XF9kUjcj?!v@Bzq!)2-HftV zP~Y;Q6-&C#9$J%Mxuk2&%C4o$3SA=B?)uQ+^0h-<=jMl2bgex{4*Lu)UzHzB9dgdl z@}=kG2bZio_mDGIo_(N~mGS+NU2h#5JN3O|)!Z-pH(dC%$e)Pzk+{p;1)g`Uz*fRL z!^vHc?*#7v@5K09)H}hul7DS`--)P$HjVGZv{amTqB_Yt@ymC8e(W99-}a}*Z|&!u zcC^x(lgXat_=~}s>tNwBft?oK!<=WL}40W9$=895-sqWQ7OW&AZvu4#B4?Xns z797wkxRz@{T*ZdXP^6E?016a^?N6H2Y4sC-=W?K-j(dnb}{V4;&0fw_Y0R5 zTF$&rr9`P{FS=7|de^j+a_j7MHr>d*uU(+xqtbdsiytxRWWvXtH7C&ClSjtJ9~~B0 zwD$}W{GweyDSvqMY>_8^OP{KTyhHEd()-enjtzIO64#r5q@7qSYys^k@YbrIXzxXZugtVH;e`LGMd08z-*=IHHC&yjo zN6*WG2l((FgIjvJiBEl2x|I%;66pRvZh06bz1C9VBXhfR-wuZl{VnPfmV%F#9xZ;=&NJd>;u4oS{s~<1lak+N zVX}!^h+|4esW^u6nTOjJ$B5oebi=FT7}gNZFyojnD!)8&y`tS`o0RqnqQ(DIYsH{X z?lU-c*zYcGdmN+k&l_tcEEU68Cx>6>Fn+J)#`}h!)N+)b2gNbq;o{@G$2AAH zfvZe>;>ICy%hNhZ`$>t<(xuP#l|tI#Qd~dj%5m+mZybYN0Uw?p+`2#OgHMb&q*LP< zh0hQBa_-nb^L{`&=3aDKPIG*)_clJ@R6XAZA1+3qof^kTpK;i-#r?%Q!u10pJbJwd z_D#!i@iAD+`(zx0Uk!?5h)bZZUO9f;j$?>hh-0!Rs5pl5-BmM=>Aby_o>#6QHPeV= ziYt^~&R=NyXQNSD_%Z9%yN!M1((~FL#{^YL%HQ{Gk5p2rBl}f7%sXd&VHa`z*W!Bf z4{;3bgPz;%l=){<&&d;sI;NVWo+p_nFWa@R?>+rRcb=xX9rn(vHg9S3s;lR&oM1hd zaVB_x58S|w-_U>T4MR&rqY@w4ufzUf51CiTPLAAX*~7Q#HMsTt;_3-+t=B>AH5ak4 z5I0*y_vYE3+ZguHuF*hI*~Q!q(d^?79{uXrJ9j@~tJy;-{|8I17k!W~_o;fAPxyly zZyo!=jsF_DUq^eOZ{wdZ+huf(X%AIiW6V90%_>LwmGtGC4CBE z549ZE9{Tnhzyo}EZ^12dqaQv|cQQ+{_lTTZjrmD-?-7a5(xtV&s@vac?ysU&9(=SM z7az$|VkAC#d>TB!M_m`=Zk8VL_fGOxGVk=ox|bRL34cZV;>Y+6O)BrA)Ao!gy7r1E zHL3Df=L>%|HTI0)d6{GP?is!d&=`JW3pM`>zDvt-eV1=+0UqE3 zcW~o3RN>PJvBkVPK8fdi2h6R`paEi1@F}`-Tzmv)pWFl|_t?fKs2ZI!R?(g{ErkI6 znHAI^E&d&Rv>Y!!ni)Cycocykn&R)54O+KYk^X&owzwO9( zwCiiWIr#(6Z<(C@uIcaWAO72$HjXS&W2l8=70o!g_=WrRKAN)b`vg2!(4TYPQhn0y z?W(u%I~;z^d$;UDEz?Pt(S9Ovw9_&V?O>$ zr(V08@0-`}4~xojAN3lw?w8M#M2>mYV@D-V`y+9Y|73f~9CPpevMuc#bLvUG#Vz#@ z&m+rhjU03IioQ;>E1yyYBCxn#uQ7#?Q15{-1WD+{hokwZe;g=fuy>zRd~k=~Mh%s&~oV zkK9#q`?^>{)e^+d>DLtQkmvtpzpwobZ54*fc9*%MT8``gedA~F03T$4Tj?u)_{5H% z5fg(de3FWvB|h6e{*jF}*B+br%y4Qt@M?w6gp(`P>H~m}mgC|hST)Aa*b^Hc|+pPe#p7Z1j`Uj5(~_8s!(W=PEi{Fe&X7py#xcnFhje2@fgg>U%bGd2C>{8?v~vjK68?I){o&-rxaxcG>s zZ}gMc6B{3Jsy=MuGnM`1{8`79vu>`68OJ2;C$$_eKD4@?hrn(J`APg96ukmh+fU*b z@sk6~m7k=1>7w@f$*7v$=qJs!i219PU#zZEG=GapY1tq@nR`(ANvOPk-TKdObw9ao z{ZGs5)~}E4Cutw_oOYsJ3coh>d@B3Nb?ZmV1=l{BdT#s4QRls&ox)Q5q?Y6Axv!rD z5AZ<_xQ+kT51**o_aZf5rBb>Hmt?-`8?nd_-F``bq4GjSmes zal47nRQ8kW)_=2{4Tv)n_mi$1FFv%o_LJD{AU}!UbE)Gmz}5DX_(lBW$kEDAQofLH zub-6rpG5gI`bl%GTj|5fFLqz5X!@fjMP`tnEI4~DLFN6A?f$C1t=*rz<+KatJ+}Mn z`(%CM^e1T_^qh8*eB~$mJ5$f6vY&ix_dWWmA^qgYLow~JE63GyUq1;R;G<9x&kns~UM-}bELP*;qvg2xh^BA!lh_j*A8;D~mWj_)_LDz5^e^*ruKzOQ z%%uIKmgB{TR@Z(KyB*{w@q1A83S4bJiC@G|=H9OSB;~tLGW}%7tflJWoO;%Tn`@~? zu26olaGj#MC8K@2e9mS48xK8C_^0;nZ4*>GDgW|0_lfz(+sdjQ=AD<%xm;YoS6pxY zk^LGuKS}$b=ef(xb{hS?ubv+sb)39Y*HX!L-Tc{9Uojv*$!^VD%>Ig&6RhVFAMgO5 z?tfAEfLrEqe|(~P$~rz>k&n}Jn$Gwgv4jyd-43FmeU*`@Bp9UH3}ba zt3Bb5Pt?^n3ZHY_c8>a`9r$dz?{ynX0pqTAJ&Q5%(Q=yO10LX$zE(=Zy3J(@tS2_E5`l?V<0u6?lLTa=>kT zjvqczqw!9k-x==91ndE1&+iPx9JkVPTzo{+H;!9jPi%a^Y4lJNpQ$`i%^B{JbFsnn`+D)kbl9(Il2Dz1M*TyOqi+=})<&j-F@ zwoB$PQ_t1>PSjB=k!!hf`O4MJs}}02>^CHPR@AEU2d3TFmkqGPp(+*PCj6w9Zw~;;l@QFHV1wP4)TP2OphV>WED+J8H zg)m*AZo$53InD6_5AZ2`P~ih^xxbm?R?7cG9kl|VWX7$M$LCvjmjdRmLp6Sgo4`lQ zX^szgfKTyj3LkJQ?dYdJheZw$)CtBR9%Ry6lHGGj##~F6KD@EGh5V0}a z&-mgKIY6lEPXh5lJMh`C{^RA^7Q#o%X^szgfY10Hj{kA=D1CsheTy6*D173_2kpV< z>*d-OvTs^Wb9}%9eCW4>Tldbs_(Tp66h86egZAL_NVyO&jytJ440!|bftJ%8AMgMl z#DE*Wp`A3ZCF8dj>%11@bBx!~zKrAX8#-0@{Hwb9z?0f^pz?ufZxVT2Q)ACRp4V^B zKjv;26Si}Zc{do-Wekb2Vego*oVTPr{MbtZIq)O5kueW)ByE0_haYQhkpn;0sMAMh zt-H;S^6+DA5^~_jT0XZ=>8v5Q`B5Hz%(Wl~eyn+*55$@zn;+%jN6s;F;0GSW?97eX z{3s7U_KrXf{J?`4lN@oIALZf48e8PR4?Kuv+3UmRM|t?M7701<0}p&SYocv_l!qU= zg2;g%c;ItbJ7)8vJp9OQLk>8Q!^>O=If6Dn%EOObEaZR#{Ky$5r_JU^d6%D)JA@o? zfFFB5kb~90&nXW-a$S%E4)9}*EIC6qKgz=oOG}OuIKYp!MC7=5`PFkWoxRM69kSn1 zu{V5e+BtI%y&@wf`8_cU0dtIIro7!M;eWfaoh!$U?R@7Rzyo|nzpLLX&5booM3|$u+oRRr;G^X<#|J#XCv%s=2i$D=3ZKYB3u^8zfw6_@sW#ygupc@( zE_Qpg`rF0FmD3y_@Bp8YyA?j*X3JOjL>^jj@QFXR&@Ozk0b|?h%nG|TTK^3`T26C( zzyo}08x=m_X4gRB6M1OC!6*LMLc8$ExbL-T-?q0KBI0lG(Q=yO10LX$uPA)L&8~*R zrxWHLlzmHTPdT157ob0KkIp1M;G^ZZ_z3oma}VGFKBapVKHz58$-yUbfS|_a;;*UU zJny9O$p+}p&UQmY{0%-@PIG*~1AHd_N8tl*b~PM)A_oY`%{{b7e==^|YuY#G@Ho3U zTK)|_T26C(zyo~P(;3|C3OM*g4iJ)?duR_nxd8nk$I@<(R)2$!meU*`@Bkm=fg8V} z4nC0sgyiNP+JjFa!2isq0b)|{(Q=yO!`|oMQ+-<5x1ee`Im#Wd=C(a&0@UvI&%K%x z)F3VX9elJLFFu-?yibnrfCu>Geyi{SH(f$~1D~h?LUOr_ZNg{FAD`XrhKTsv#mAM? z93SuipTctrA8@m)0X|U!1clEzHrtke%l=QYxmT(R#f|>>?9p-!{R@DPmeU*`@Bkmq zcmOwB3iw0~5EMSij32ZEpKL&G>7I5&MEngtT26C(zyo{`3vT>|f=|={LE)3c_`$rk z=ua&GpS@{-m=t`p9DjT`lZG>BIFqK>ug;|5tQxyI=9x6duUvih;PPevZ)i!^z|gWY z^J_vMOk?&g#60RN%rioeJHGdpIg=)J^sXC+zyHeKfrV=AYhkHFA69GA2Rv)kW!+mn z!zKN!@*5M+E1LVeNqOF+seB)X1ykDBKC1+Itv(Osf@pRZg(sBzz@2(=y;;4IJd-Bl zoPm?x&wSs!^KQeUvfM|#?EB^OBylE9se(V192-COnKa(}Wn0>3(oj$84M(0wmf0F- z(x6x5;-ufH^o#oCF5GvO_iU2I-}u=Z{&G<&by9wC$%!Rc$vl&0d_w8*z@HTD{;NqRt7qxQ%DzD7{`k$6u8q5w+r8%# z@4H<;DgW;I{X+inPCeuuPr2t~7U%|BAVW&eiu!T*>3tlEdtqstF8a6e}7 z3@$~Yam#C=y#jeLf4xoaYkwBcA>Y80R-SRz(3)eGuN+(>#H?v)jh<}RRBBG8_8;iG z)WqaJuK#!CDF3g8cH1=J@j1s^TPjn91Z3%~<>kOOYrpYp*c>H%DWc^%&v<*8rN^KS~DqbkLK@f+mE zrQoCGxcKx6-p)ULo;UX1#)o?3SNq_@#R#;HPlR%Ik)+oKOP?|D)ThfuH=b#)ebaJW ze2hnwILiD?{HmRg#m&SeP*<-UKR(^LQS#d?9*MYxIA;94DvqIi@m=kVW1@~)c;lGo zoT(i1%%G8N`hP3^T>fF@pQ}GNDeV6=)Q**+ zJANt}rwt$14!d%co(IJ--~m3o$KaN}!o+8)#xW9~O$)jzwUBmrBIe$RT8?Xned8GL z03Ti%a4THtgHMb&q*LP8X8z1E6*7@MW#R#-h;~42P zR_#+L7w_3J_-HvUK1ORw9AzAXUk!?5h)ba86}Z}Q3~>u_OnQxqV&2|hPVWZUV*C}#}Ky=$J9Tqe< z@1Cy9cA4LG*=uDTn|_F6Xdm?4Zl{rFOg(qlWr>(so$k`qai;NIN|0 zjMIgwtM?x4u$B|7=W@IZJirHD;KpxgC+&IhV&2Og`-eT8$T|Hwr++u{S<@aSJJ0?) z;B1-de%;?4duX1mH1G>$2TPAATKv9AClfgG6E!{!9oXsiO6t{n3R~3Pvz2B9R7}eM zbY^iSl{&$xhrChu>jrlEs<{3EalQEmdr14BZxcT>{l@4oO?w!(UlzB#eyZL?`*n3( zQ!lIJwou%obNFOq$&N$}e|sR&?YElTIcz{eZHE(B7SH?;n2pzr|Q)d*hg((NQVC zccD%J^U&Zz2AL1C=2R$#=%s3|Zw5jKDAURf!H9G@PE8OLZjt{wJ`W55G^ zct62y^e;a6Ou;xt;d5lAw1xCX%V~}e_TI(^oVvg3gAW%Y&`ynGq|dnif(y#kErgGj z{@Q5dCO`Ju zcIPp1dAQwiOi&f1{DGZ*BF0-vzT?yTUABX`{*bud{6ic=d!XmzFPQC;e$do&XJ3To z%$r^E zylD5#cGkV(uV`QV7{8%YbAK|G;-iW z3`dS7v7pV5^6+C07CGn^?T8OzjLhaodH9iAgBT86QrEY-a+=3J-~m3!0XKd_ zJ16#W@JT54;rWUIb5S$6AtnVMEvI?x!`=`!K0(#!oZOc7?3q#u$i)xLnGR~GfWL!} zmgDM=QGz{F*dv8KQ!=NjJyY0A#V90xuxE&@zw zci&alm`sLPd-H%s#_e@#!-}as<{VUHtU09nI_f2t1b+uTGYSs5lIj{bU zH9F>=Db+DG7B>E4MYI2DQkPM{m+||RU4d@6_mlm-A9-fp)*3sM@;BW36ER}$<_kvu**>2_-t5zX}RR?1tdLL@Mq!|@$k`dn&X4LxACE7rRz+5jyrqs%sAm{-15{b={-~G zKI5_T?#{XKOmlpwN2}DeZ>}8w{*An^K0fF8S9?4Nxx^(<>>jv!`pFHXl3oj9VZ(Nv_?&M4hLYq)2fBEkHLiSj_9`e@A zzpQrSmRn!4R9t_9`#XpgaSZJfr03bIEInVbYVDfSqHhj1lv=(vj-AlYqwH`}XJ6ED zP2E(^xpNApp7X1F`gwO8EMB;Q|BPpcwH&XWi@o1^_qs>?I|h7sPlNC&-eBV6j59@^ z1U+RiIeg?CTT=MQcmCGCndNGLpPb>m7}dWO>iFpQq_uC@VJ*jtkLHCP#x4ZeVeBdt zeFIlzyTlGi!mdj@jNQc!7f)AqnDW)b+G~fSzBr9`*xd7B;2vdnq4~73%TQW2$PRb^ zROuU3>g%o>Cdymi4(BSe9@e*Tr00b%n0g*}KBlwn@Ntz)fS%iSIQN@)c38{t z>UpCb<~n!Ry!c=(l--o^Fm@rx4r5oL=o`4&b{M;h z9nR;K9j5$vk7a;qv~PScf-9O6W8|?*PDNc zw`i9jJ+Iwr>UrFLYuxfYRnlwL>$s+tmkaKA4we^*CLM@5E}`WpJ>PWSf}{8+&+G#q z-dFIcRn_}UZANb~@rgTb8n-<45|*ldRz*_raQ&UnAKzPW#|xU{qwCSyH`(qoXH&}w zw!@1>6~F_0uq)t}`Lc;m+;P*m<#lT$kI&MjS8S{X^e464c;CQB%V~}ecz_Sm!7cyh zTa9@OVc27R;+EIKlgFp0XYX<~q?Ua4W^b>LWQ=J=UNnD@Wm<>69>dn__-qPk(?2widY=@*D2M_Rp8@TZs+DWlaavcnUzqs6HrE|p_z!&@;ft!%jW7EuTP zJu5fd`v-CTtFn$wKg6Z92YPO|%fxh3&*R$RB;(Thn$v{V#i%yjsa)Ga<4anO(sRcC zB=wH}fd}{iD!B0*+DUQgi+Rl{_78hV`(h{g4V|iMPHV2;<4H}b?BUc|bISAjtvMz3 z!spsKF^u8hGZ~}8_j-M<^x>3;A9K6NfgiaLj8TzOVe_Lr{K!2<4*ZzYV~mQqL7N}t z;YY44a(GTRXU^&4kb7tIqdfe`?L-dG2|sd1$dR@AQ67HG$smX4gdcOC3Ro@C)d%OA#4auhE+vNK&EK1S7_S!iZ zCcQ>-;x*1%M28{=J4C&>uUWm4Tq9Y1sj63L2lIXN`W4w;+(*6a`{nZ_u|~4$+5^e4 z@nf%%^xiMq(q1D;J*hVwc^+A2Ypjt(ujo5uZdLk4{R&lcOgpK*!!fG|&yJI8K6}?` zscq_&e8Jf#)?6b={ln6t>!1BghL)cb=gGX>^!J&k?B75CkU=qrcSmLL9Y^=+E3JK#`YmlF&ujM`kA$hvItkk9;R&%uag{6WZ;PJ}24nwIuVLlU&ar+jQ*VPnHYr zc!IRf$$w=^dUNWCmj$tH~&nnwh#2tNwka;lOzl^u;L(B2n!&JliJMaJ>o*&%C z2Yv84ExJM_hfiv)4yrPi%a^sr#co_;4`-O%9)A z^I4@$I^y*1{!&Q&iSX$4BE%C~j>gB!Q{E@X^s(Fam@oI@_n_z%xK4LRWE@srtG zl%J&h#P8bbCnKLt*ytzCbvYw@Ib%Y5E1G|WNolVjnw@a`q(lFH{x>Usd-;mWUcZnEM|LCrJdDfZhqn*N1slRf3P0KO#yunX`2lyZd+)D5A!DkBkNr}(W z{U59pLgGU^wMxN9%hC9}WrvS8;DbG}@j>pyS|5D47=d=GpOiM~@R$8tCG(@b9#;Dl zx3|Bqq1aUxw zy%|=GTm*4YFbTCFjsoW2HPxT4?wan|-tL;sxW9itPjaTWyUsaP-#T^b)U9Vv8mPOU+$lgYA^-dT z{&#y~yanHS>4lS+=q&a2vC@Bklh0k`sHKKP75KPm8;@yqc8xd+4HLphC<;wP0Hh0mJR z`?l)wB<+cg4|01y>4OgsBhW_mlcG(!`!l~P<{ugze3Tr8kGnYWleF7GeiFY2#je0r z_mlWV{N&J=q@N^x@@L+7vhnum|I=Q>vqR$dw@o>Te@$meznDK>Qg>NK`F-25OFI91 z<(I5@t-kY`Cq=o=YJIeje>j|-Cu90aB`4U<1wP;bKA;M2+(R2_y@tT&KlK}Yw12dR zO<$1hA?;+#t={&~aNH2}xa7q6aje&1d~HWhdsseCwu8OzvEzkPyp*+^)F++x{-5k0 zLR%M(>zKP{nblvfZ+mE&g73Ad|K5%lHd~7oR(_*+$(!C;i5uMOH8%CH@7UD;T8D39 z*B@yQDIe^Oa^lsN3%u=N-1aPPdh|*pS}kicw_Zb(YhvY%#pH%??V-|RWWVT_Dmm`< zuzLL(cz_Smz%BDpAAA}jZZNx^M&PsHu(id~&%@!vUI)r6ECnAWr#3z%yFJnIL0)OK z4?aAMK+V~Y+4UNtP5Q~?ImP@a#dS)K8y{7m0!J|zMY|moH{kc6*c-U&aRYu4Kbik8 z=_g6w_flQ`WYpuVE8jl*QsO&&kla;Wr+}3i^OGfeT_g0lsW*0{KEKPb zaYJ|W3GZy4Hg(#JV6FEiH;Aly1wj#4-X^IM)i}TO*--1 z75%AE>SroBZhTaM;wNdhgZw0Z4~kuZEA6o0w^_vTwqL|gw%jHCBkmM&)p1 zzf?TQIhYeYezNam=@-*SNt!?1ONaB5d3ziM`u7)d9owz`#IW&Xck_vH+@$?Yq3W{O z>$QoUd%bp))uw-|cwlp9RXn-ZrMq$f#qcjht>J(qa9i{oT&IP0u{_<&Fo2CJgH* z6EXc{P$_iYb!=znU1wWu`t0K1(`&4_R$MBc?3{XBXXn%phW3+`4|YyDNxs&;;!_*f z&Q1DBQLc%^JBrDWezFvEU89oYvGXcF2_E1BF5s5y@WE#c`bmM$hFPZ-Qz6^ok z(fMP6&xToN7PC&d1Gx+36;dJlnGv#HNdi7fj>5;y6F*729poqRdr<5OT-|=MGT&+UkKw0}E5V2PO87AE zsq-T}{E~LN!u&dXh*z06CGOSvksf~R=S2?Z!=NYU^pJ0zAL-%8z9;0sk9~&lV;`^1 zkM!{4Tn^;Ghy4`nS7cv?&X4r)V?GQy=*ND4M?d?V8J!>L9ey_6$bk>z?3_EmczqQ= zt-jEIM-F`GXEEMSe@*8{dh}!6AaNV@1b&Q*5N}oSv&YNf$9jF_z=w5e^dDI-sPiK| z{213mPX||fe<}NHSWm3;BR%|>PeTstiODzXkr{{8`H>!ev>C|3F2Du*W&V@1FX=yV zMrTm_4}WOfGlk8aPu6DCKa;YGyl1?Ua`3u;jmnwAj=W3keG;Fs*FD*12@m~2jr$1QgZ90_N2jTo zGVbmBh@|<9m+J4Ex)=3frNxZ$)z6wm4(%%UacP%*b}tlu;ErBAucepCGlkO!$$FMb zdh46pPp!0++u}^&LEEkv z-|G6Tv@i72si`xCmv&#caM{A1B|87G_v3dnd!}&ee%AN;YcRCp)?y;D?Y>7MX_I>R>p9$Cg?(>ly+nRFQ+PsR&&r-&v4(~^K%GcmE$akzMVHYi-|P~5xkqxQ zaPM5%)~C*uRL|FN_p(kTR@Qq@Mvxw|PFUx2B%Uewy)(4pW~?D0+sk2$L)ye`xee$)O}(1q7f&oN+9tW+CIHboKbR0&;0H)dggtsd-=>oJ#&}O zoI7uM&(f+i!G93;vu5?0Le?4c41PDx6YR$=N8n@65n1266W7X1b z_s~Y#<7x7ncM_igU!OtVO;AzpqCY|Zf&N7Ki?TmKKSP(*czfPC8^(Jkcjj2x{$^Wi z`$;{2LHCQtU)k|L>)+PDt@;x}{^Icub|eyO3Q`ZRri;g4V?DpmdS3g&-Y6gJZMbr> z$Cx6o4Kw4bMBdEqAr$4hcm9w<*%=$3$_}nlskdyFGLjwMR7}KhZJ0Es@yI)Ctl9JfBX4v+~dw^$4!r3rrX0xxh7sLTP zli6pthtT8hyS9DpnloDK?I*!U*H6gbf8P78xL}W>)I+?X{N!=>t+k$ag^n92AMBiR zLhewmaqZmX+DlQciNsTdTu3_~a(!QwvI;}7bGICqomcru@BklVfLp4^2cI$MCj~wm zW^Gq2JA3&k34fZ68`rty)WV1MM8^lMO7Hf;hldepqxwnFCY^QPzxtD|{$GUb4Vwh} zam#Vx6*VfbP9@YDOt_*?klZ{e%+BR%}6x5#1K4!+Dk;Lmk_ zq=z5l8_0nl`Y~QkJEQX>J^bi@A_qRi)07+I8ahAH!wEyrblRsIV+z=yRz;HJxOoO!f5 z;WJ9@W634Qg-`W7n!Oeae82hnqp?O# z$0taq#u?YI&)U)SD9uB=<+$yKa%b%*YeiW*nthjCJIb0;-iLbDj?P@Tq}#iIbXj8Y z1-x35>N;ii@~-70anold~eDyVjB&1)$eOy{POyb$Kvlmx)e`=*A zg!j-(e_!ae+`y`Zu=%09&;z|lkG?`LlWSVD2g`Cw9#Olzcn`hw_l2G&*0g4aX{SW~ z#XnJAO%`>(FKk<1(~6$xZM{;t$d5>~E!MPR?~EH}uatIgt5-!DW=-p4vuj$j&Yp&< zELZ-p`Sv3Rw&j{uA%F8>+gm!AS<^~>{noTn2dERN&&fJLUC~R(@SJP(bH<&qWaeDQ zdG_%SrKPXwI$zS{952=LrQhf6?-N0{e)r+x$A8yetoK;5-d8{`A%E+4d#!KI-D&F~ zo~W_pt>68*_55>|ezh;rhKX35@}aLvIR&MTJC+qUz0%9SFJQT${w4t9Pwt*KyJ>=H4mk;D^1G z`~=Zn`4-{^&ljx1zq^;{YFBFCqV+N4{x&@AfWR5AlZblQ*3ILF@TX3VJ&I z9zRL>VCR$*@2Bqn@h;zSRm8Y<8aF+9nO>VD$~Cd_E5)2^u1(3R{#D)@uN`*FaTRZs zp9Bx^K@)IG5BT6S2K}VKXTf3C_f&_8Z784Y>+$e$%c+GA?TL;LdXygV!H0(ts7d=V zxi(3(NgtWFu$T&oPlT*jlHe!Za$NX0Z1Iz{+d+O3zX!#xz?F7b@DqL#zlfh~x!xXI zwBt%g0sBY8?2)v-Tjkv&>0QIC>pgU&^pj1CCDoq~cQ3~nw%s1d${54#J6dB5Q+#8_ z&4;yEV-P!8&ud@!Ny-B|A8PZK%g}Qz7e3>vh>bJ1JCHDG=bI~KYVDD9?A(><+C@2{ zr`WlY<32aTI@cue2@AVVbUOIhcz{pWX%ZiB(}mk}yOGz#H|icqflp;V_#FKU-yUJ~(c?I zoz%Je?YCLuMD-oVnxHFU-wXLSZ#u8jnkge6Tml ziPZV;c-zIeadh1D=w*5wOO$IO@vdUh8ON&azgnJ;IZoop(b`4LZ-EE+kbiI+`kD_u zV{jZx;Im=Yhl(ku+-l>KkNbTCM^0^ghV1r4$H&2Gg%3VFj6hA=kIDE}v`G_x`9dM> zlv{0lB4oXiM6_FCzEsKa;N!3r?}_;y+U=lmEc_nSu`3%_eH;tFh@b5Gru37fcNDOH z81|FL>iomrtM35eC%54NZd}&x`=<+Lw-AW{AAw>=@*k1N!pwBQaxY#ea`+qCG?}OUEg`~tk$-A z`^lhITFC$CrC;mJuRFE>ki&W{J;bH_4=OnxJFoJS-~m410&ab)eDE2Aep2AG^!#tH&xgdPY>xv` zUSTQiu#!_7AKDWgALM2J#|IxCMxc%ACqpp;N!slo zKZ)OiVprg*`$_yFelmBt^pm7_6tI7o^^?;h&*N76$sIj@vV5`hipFF2`|ITxIj}Pr9DIe^d zazb9;Pa4wG^TsHY-JX6Wzn;uR&wW9LS5xZs{Se z=zfy&!Okfs$=CY+`ufJTbCZ7ZnklO~`_`OVNQJcXbj)}~$?@2Em7fF;@BtTa>+Sc! zXAJsDfzO#6t}K*7;?oy%TwKYijSuaKjt@9x27K`0VFcQ!ep0kaeQOpM$|3QIko8Iu z{G^iO!N*~XpQPOm@{{;ID0T&|x}U@^;wSsQD*Yts9R=(kX8q*!X*&O~_to*_M30|r z`L^_nna|t)@`qkJoSd?K1}OCE16Fl*f8ytL_me@o0kCuO%MIzHgk^r{a&Jd8ja)lbSc>B&O=k#P7#$a*CS zep1Qt;N!5xPttA&`APg96uSaf-B02d@sqi=(od4!QNaFT)=y3|Fz#Bm=O=ga_{qT^ zNWVCEwWNL5da0f-{l4#yvOR>p_sFH4*S+=6!}`hWw5icIHCRf3kFJl9f7p%Jbl(5p zlZ)5A_1P*v`OfqH+Hv4__6a@iO8H>tloN8hb~(bcA1$t(#!Zi2rq{bZ|4o7G-wL^q zc0L$$orsd-vGXcF2_E1>{=uzfk`F!&;U`_F^f))7Ozt6;C@)x7i4l6me@u5A@ z@d2mQAOGL*ld?@3S1fHB9ek7=4?Yxoc?|1hP zH||<5KPlw@Df`*Zs}~|jk^vl8tPbn?CzocB;|vhQ%;hvwT@?BpLUps z5on|O$xD_l@7(=2SM`@e#w&v{_k}1q9y_n{li&e96gjx{mVDabG3X~HKL75|jZ!p8+1=)Ax0W54fej?rn!{e5OZTK)xigXhpZ4 z*+}xmSfHzD>=3C0T1x$x>Mod8Uxt7!IH0zvJPf#)Xp<0+x>6)nGs`(=s58JW5ByO*BQGr#-fr9CUcea8hJ zf>u&Zopwyr1%n4o9B0pkylVHyclGqgo4zdD-{ftQcHQWu=#oEJe#3@)=%Bq`5IX6Q zk9S-(esk;Q8|QRbr!=-(C&5_%M(+~x%fB76Wba%QdI-szZ=7Y_%WKjhmsrn#@7(iu zor<_l^d~4E>@BlimJjcjzvXQYbTheuh#EZ_K18io5M$~|els^oau!@%>nzy+MB&*0beaX*}*daZ=fbJI-Yv}X0g zg|2|}xa8TR)_G_DC2?ws(eD#DDLLVA0vB+iR)F8oGC!QAM?RO_Zudoz*QgXuKgdfmxLT>IVFHUxx8#T;Lm~8h#Qe+d=e)tw z&l$Q(`fX^sSKgPu;q~W1nr7{Jm_B)h>UGyAvIxTBE&`qPJ4oQV*}@ zug~7D^Yz&Wg&udLT!QSq?;Bowk87`S)011%{TxxQiNuyd-|7DLj$G)Fef|RXVJY^m z7zeWFw{uca5&povD_Q$nxrS=seKMxFx z3KglWepcl3|MqAem-uFd(`$BrYm%qGRr;p%OD#D`bF017qm0i@$v*!Ndd@o^?JpcM zuWjXC&DJ=?=#MK2`I|OuZ^_=bDD)62uiQ(_Im_#ucYdnB@5}#a=RSzyCnz7WUN7+hx54MV_;fB@W*yKzFY;7v-1Jg^@xR%5UV+b=)$0r8kodU2>8*4c z{uh2+$x(h{r^gRIL2^*v837OQp`8J@{I1^hgmKq7#7(bCV4z|@y_59sB+OjYGk4_Q zVUYN|P$)kdZk{Ujn%AEyy=wn*@NwiQe1zTT-+=)S@PRwHEXxu{m6k2=aUkjaL%dDkMs^ddw&#i;K#Y(#3!6DUd7K&4?p%> zAqRfwM|{G$$2vdK!;kauIqw&}*vG*+_Us4I@gP0?Sm%x$^n)+@@%@4-{p|5s`1RTN zB8Pmk{+4rQS%<6hBR%{${{%hZ!#N17k~NNfpu0o9%VZ{{5U@pIpmjf1j#Swf9m>?9)7I}<$Ofe{ptB7J^a`gjvVSS=RvWbiF4el^t1Ps!;feabpN(!-DSWXORZ`Gp_nXzBb&4?osFAqTy{gMHJiBh&F9J^c8tFLKZe zew^#Yx+k3<>ESnIpNESazNgLiM)@8$-yPNYksf}0{~bA$AABi4zW1${AL-#ozZ^L_ zKfeFgb-s*4b$+CWU&&r?iyZQaU+253^vCu5k{*71#}_&90}uGI4qDfb^zb82L=O3d zFW>d#yURL1(!)>oMy&Be`+LLiBfsz?K6LY&V~xXQ*U56FADsTacRU9E(75Y-%*B&- zykaPxB!B6EaeJ$%j9kQ%N{+i9Tpdq>2l!;aBJlw?U8%#c%OWxoPGBE#ViFM zw;VV2`o0M80H2|oBtGD#Yu7m66>Y2FV`@B;d?ua!o&3ct1s}H@fsZ{HUp1Zy9^jL{ z*|s0sj&$uLK2di?m|P!c+mE5~81k8UzyEm5_Ph|23Vg(PjFRJS-|TOSif@bR^ZPa~ z;Dj3B$30Zy6n!0|x%F}N!Ko`?eH`l;DTk;OoRpk!IOQ*s_5)76x6At=JsM}9UaQgX zkdxokD7ANPIko%|c!1B)_ar{xhThP|*{4?@e6r3yN_VLx5_?bpF)98?$?@2c!(F^5 z`rF_EKAAftKH%mguz!G0RF7nCpI&|N$p`Gyv;DbV93#F5A0?+YKHvd9rGAMIxakVe zzHR$`diB949bi9u=>-w-9(etYNvRz7VkaX~2FAc>c z!b_q)thCZmzB^mLeTq4u;}JoWCrR!QiD&*$FRl~px6q6C(5q#C@B2cp<>z}?*YyUy z&;z~52l`g@im?u0q?tf3^gu88ps&#D;*oFPgiRG4OiDb`Z}#Hi9*13NrQ$vG(%%=1 zt)^nx!k#7KXXL9i%y^Q>zxXH0tI4A7_eH%wdg`>P;;?SY6Ft$}dQ`c{k4Up{+3Xcd ztYuT@Ei%y1*!&^7EegFhTYsb-V!dVQV%Z*%PN$hp*)ED5yfc^1T^v=@O4=9;F2}DL zm)O3d+*YScc=(h1o^b;gr2jkr`*dz#-PD1O@_iFJCr{nC zUF_o>`rHY{<{c*#+$q`@buXFUytsRLre}Wh@}A}e3$xAdKe@g6!nxMDCCwLQx|cMs zShjG<`OR}HzHI8U?nMihS$m>;E}A;8XYmnkR-WHWKYsVXi&M@W*tKtM$0HloIqNJv zFNL@fxNm2@M}AjWbwJdO35h)`byd^}>Hu{jf3NMMY@elzF7F|8h(w4wvFT@*4{Tn0WydY|<>J=~JHLK) zf;vE*==-s(6Vw&Gd`#Dgs2eG(>%{n2bt37^1L--I_t))}8~Db=8#-?M^A1is(fo9K zRXZV}mas2gn4Nvz#ml>!TWZvW5!8uO|9bYo_#HmnQS4h8yH1c_zdAu3pibm|D(eJw zMK2*!bz*7vg$v_2`0qun4j5sA;y2{DEj^D>XmhKG)7&pUm)`r@PH)W!!qz=uKuH}0X0bheo|bHvoyX2O2f ztiGd-eAbH!`w{Uk{t188yV>r;*nJsYzR5HBr%p5R&G3KQV}4N4|~ABRa?$h5UyOJZ0c7OP^WaIqwH{{ZMD} zKlIfl0}p-mw9x*F^1C!rLCkJrg``dh|*pTCJXnxo@LP{ptk+z4u+%mUHcG zQ?ktc!e6=ND6FkDkJ?%w@Bkk)0k^IdKKL}mnfzw=pbC68Z!Ddd8)kfp@?ma?`>@o( z$0bMMQ@vJ;_C&`AdHD-{@Zn(uYR-Pl_9sM}H0g7%x2A`gLx_-NPZIEP%W>i3yer-l zd)#QZ^)=$Wh~I-^Z{RxKeo^ofeiFZkpUnJB`bpBm7uqmq@;8r5h&h`?f-^vO^!Ul# zr=(xZ4@ipsQR$r%*B4hm`H5{7*9rOQJ(d>}iM8vc9^RbXIq_cW`6sRCwJ(AD91C~K z2RqlxDYwdN=d87e8rhk&bCZ5jl7{zU^!q;h8^F+`Z)qKvclvq5wug(CHy_!&Z0Wq|AD(fp&NIwC z{z`vW$Upj)0|xH9<+ZkXr(bC4Aubg+9DUG<14kd!96D~Ge6TmlN%FPEV=~_MFm8Jm zH$8fpJ{#qWZxXns+jGv^KqblVS5wSyL%ZdumbW@?01xm%7jP?o#s{A<7&l0K_HQqT z?3ZR@p5gD7qwuMY8)#2-e86ewzkKlFVFYT@eoTJLOSDPzPCvdq<%|LA)p82HNeQxBp` z_e;On^m9qG4|r+Nd>8p_`KvsO2s$l&bMfliw;R?^lHN3J>fGI$BYdhj=j3&*FJ|6Q z`$OU52D^N)bIJ+5GfNxS&P~P*A1&@SQ2NE@wo*txnTh$W8@C*nomY*o zfd}}23-!8uwhumI&`%0{zWw#n+tN;4M@jh8-k4{Ix#iTthxSCr2dzry_~66C2((fC zq-c{$zqqw6?;4kkkiB7(;3wU3T=+QY@sqUML4Fdy2gRzELq1Vd1cf37viajei?r}6LZmeAD%v10HA0&bs_fUyXht0oS3-4N6B&Hqa-+c{_H(|?DpHn)k zy=zF$k0t*kX?Z*Ojo!Yk>I_<8S$m>jNSghfj5AYzkaTEr=O13N7!B?rX-GCBeofSe zl~yXsSKr$NL$OcFf@g$s_GNaQYvkXILJzU-S&nltAC&NnbEP)QcBbzalJ;)$QuqYX z(#x{FgN~ow*M9rk4(S+f9a#{+uz#ojt-mkiU;b9{ea_Z4sfTz&%?FL2{Uhu7S=RH~ zm#D9zUr+haFQJ@B-Sm#>9^B)`*>TgOm+AQ+QLYxx_L4Ks?5gZasPilTPvr-lKZf{0 zzeLG#_e-khgTMoP5CLvO@AScE432XNeAcXfqOBYfpC(s7g)$36!AHq)<5N8!M0=v+ zgRIOHAAEQifts`*lk-8MP5R}2<2tgVv@TuA@!;c>sK8N-OVMuY;~>0<--BXT;7U6z z_-z*LrR^8-lPxbwKS}z*=KA?bbdExmpJcuDIFFw!|4RDB%;S=_Jn5yw$;{jHuh3W9 zw=0%sChP7egIZ}Jf9=|Tv>7wbmtY7k-lR!Okfs(q<2B zR6B3AdPwHRS46p5QD1v$lG{6`>55X?`P}bee?9>_pRq*J$CI2KS_CD=cSUjT!s$w zw!?AfAv(liBvBV@yRtOi`u3Wz^PxTTZ+lfFxZVu+Q^VfT+9*K|I|DYcz{pucscG0ZmH+I?XW$M7kQ$Hea_XIkMu8Q_q_;wX3UsaNILt* zYWvBNYRmiJqvSaFSg%<9n98N_0T1vgPmuV4Ti+l2@QHfjOd?UK-H}&glgos4{(yP= znK9$sLTZ%oQF0u7eC-E3z$aUl?HjlypZCLOdemd0m}jjVz@F?s@pg403Z5I z;MVe2Uwk4ra2<>0M)}0DkAd0k+xB|@pz`g{nRDkY?^)`TD(Fwb|EyX4Vj(|D_$WCN zAGvv^8XxcgAM^(|?xBseA4~M#Ozp=afAyxKf3Vr=dJrEGFJ-pKc!@YF^T<)2_;~Fd zk7?f$ubdz>Vs$I2tg|hncJK~r8fW=_ak0+adp=ouciDf*?PB*cH_P^T@L6wMkUHM~ zY~_-@UbV$Ob9ll}zS6PteiJ(OKkG(oY*Cy))MEV`y-UcSywkp&iNq}hp@)#X|5=}{ zQ1N@hPrlYM`I^10=d~~5CCUeT%TJW$MC$B6{My6F-3i&>GZZh0aYa+{k|}nTG>5~#4_c}<*EDQx7B}d{D)E{rM`%B=X_nVUEc=55< z4M&fc#CU3$j12RR>G2@Z=h}I{_3fzud?woZiQ3X&w>SCY)?Ps-@b|Uj^gTCX$Bu9Cm5f~`VTvPU|x$jLTaPp zF5)lxb>Jss8@awy@FP9^;6t3^@UiE+=!Z~G-26n`N1R98$9ik{^!0h;zD7Bh=nSjx z?>(2udj@guzIMF#25&q=d5x6LzV`6WJ$8MXJ7jsE3V76Njg&LdSiS5A8<&Wp6w@wA#1bh}?0FHjCxWqqr08y2*a4DA#MQ`bvAYW${74T!#`=)Mm^l1cyTF)&&X4r)V{JHcbbid`(ihbEksf~R1wamKoX9t8 zq*%+Z^CLa{@NvjNKlrg0fVIjxKhndGHW@jT8#YT{7vHAyBR%|BGl(3WAAMcgVx1r9 z;m24Za>y^`$lNV!&cuEzaf!Mq>I>=NM{JH9_@O6rjr7fRex!$AMVL#D&X2h<#!}q* z6@3ZzJmRaelWO;g8)r>atL3T8jqy{Csel-fF)-eXN}U+qk>m6we8(uk1AKB%$-X$a z>3THInkb1+?1ZC2%VU5tUb{uJpa_$WCJJ{CWpF-jW`@G0*n?FZa+ zB_uwPhrkSu@z=+G(!-2_>E$ufd+Z< zRDJ9x8(=@X=>-w-9(2Oq&vU}RltO(A%I4}0&yO}?-GxABQQ)?jW;RDJNtJAHR= z`(_^~s|q6GFYr-vJowmL6+YkrK8OW3?x8k5ksCO3b1-ePe_&`1hWuq6zwO0m4_=5# z!AHrF_;~SG_;5xA_zZVeg*^uo*?!E8)ycD4Os&zN*s}p+LCi7pUR3Jfm(1f&(^We z+|l*$JzMAGrE@P{HgE2t?q-*JseQ_hxAm~*S`PP~DT3U={YU3)o#ju=>PV!1-k&Yn zYx_3Xdx!sSpE2KGL&wh7Ong;?z-+_D++u^k?tf0{J#YMSWOlF{6C-vrUjg zoXve)nwui=9Gv9E)g6DYw1n^;dg<>Ay|%^KI_QC3ln43>y-c31Q?~1W@7}e`i}%n= ze_!Zn;%uFqt9>W$ZYuIG{)ze}<{I7a3;WQ|)-y}mt}F4e!Z!2CC=8#1&muLx$@Ug%(bIRj=NuCjVo#2Xaf)MK@V^%J??|g7(6q8 zvvrbB`}Z3u7id$=wbx3H8y{=jLc@plM8^j`1~>TN!@~&Fr2UvYGk~*oashF1gsl1| zpv*yV$rQ%;mi{@0Ca=dDKlBxmcSL#~CQd`3#K zb0x=Z=hc1^JirHeWgEAlbw2ovK|jgaI;DW|W6A}ZwZDS&_$T~T*UzQD!jI)Ac+Z0SPdVG5Z*STD zmJX0K_lh0YZIP5xW4?=fXwI(pP5+YhU+h5~OJ^HUKG<8!-@N6LFM8WUxvn8{bC{^~ zOARcjHoeD1;41bFp&Ov-u;ZoR+s!zX$H zH~QHIP<;)j?h%7PIog`nmxMDxanD(ROIQaP54|sqNegNFEU-rW%^459If|Hq! z^}pHv9%mbr1NwWc>&~1g?WfCL?=aFV(BD&X9DFQR)%F7(;DbDHOXdCWnI74I%&n`l z<0V7u>Nwk=6fpnBy0_9v5}%T59SUU@hJufhBk>73+kpNO_@uRdQ+Bf#pSWimm>RdL z*VzWy0DL&xp!^TnzJF zMb0)zIpY9c|0C9$h%3LRv>$ml^8dj{$qB}%vhT@`9~f68jzBVT7nFV-__@aw1wYcm z4?e^x@PX0~p`N(;iMWqAkGQYJUhhWw+>YM3uTjnb-y@-)0q#B9fO3Jh93=bA=_4fN z?_ud!I|H2Zpxwwfd&{NwN8WZr#(mNIMV0l^(Zdo4Ce!V@a|U=ozts^O^9Sul-jU<9 z8@~Nk@Bp9O!4e;E%RT9bPxLdNOvZgC*Ht)YfCt2VF=26%gHO_tM*7O}ed?IfLF}UB&J|oxQ8T#T3@RC!ny?)mz;Fv$aN6B&U@wFfD0H3BqrTu_g z@>V~5#_k#5<$(PLF=26%gO8Hq;3M9t8aDwC@W~z~@d3BedS84Z$9=912{F5{X8W!3 zjOjw59MErd3OMEu2Omd{8=va-4LrbyeiOJ2-t3D{EXwkLFDNC7;9n8g3gch@MEqDIpmjeq))_}GqK-FT*7CF`a*j6F*b}G_@O60oUtLD zAL-#&5$2Mk^TX#bmhaB57^7s*Bfe_zNbgt!{Gp9A*3fE=GMPVHCmGO}U=D_Ih)U^8 zC^=4F&o@>A5AaF8)$WVidsTHk?6VCb4+fbVYmoSu+5<&COU@X8HohNDTcuD&{Ea^yi zjpSWXA68lkC|~_-6L=A4b03%X9U<{-n&`z9+|i5o(5tkw_kE$)^7G?r6Fxn9p$B@A z5A?0*wJ1E_xNo8tdY~74(O2kY^30#)J`#_XoxHfX$5B>VGI+(w%c(JMs6oO|j#jaJof}v;b)chs z--OP|Q}=Bb=j0E4?u26VjuQ&*6zz+;m&|Wo+`T;0GrxIxPxFF>+2;43+}?cQ+(j$8 zn=i_AFKJ$}Y~hmgo99-Jg`K*rd(nbrnYr_OE}A;8XYmnkR-WHWKYsVXi&M@W*tKtM z$0Hlob$A|*;6~I}aZWz@Wh{S!b&8vKw%MwP)B);5@)21ls4KcS({&>1pg?t<7?+4s zCsM=IiCZtZW#FpA@94iHc<%Dd?0MpIX0y)|m1p+CC5sj=>7F|8h(w4wvFT@*4{Tn0WydY|_*C!z+r)pcTgtU8e$rcPY9S8m`N6L09a@y|Or?L_m_?N#lBgj&MB zcwu(-c^5D5Zf>bj7e-JgPW|iI1LJr2a7VFkW$ZdZe*NkMb$~iidQ8>{>Po%pMBHzz zjGwIg4)3?1b-jnX&ka*2rhN78fyAVrSw3U$j`G_MtoV)!&j()Wck?!|rOD0C`7Pv6 zdFrNt$vZsPw(={zmi%ZJzJvVw)d}hVbz-n2>jZU0mu%X1L|tB6T_=gdyB_(PA&d&>zu+{ z5<7ZiIxmIzL7gDK)QNGf{seV^I??xAStqC~x){@SBC1_g*NN>DqHoDRUGL%UOT*NO z{Z9Es{~24J^wf#>JalJq_xs=CX~#|N57PBL>UTdZrVDQ_9(d%O_THU#_sG=Wt#wbG zAisWff;vE*$UY0wjSFA! z$n@9P|F6^u^6OV8r~}lA)C;msP*-%$_1K3qZQ95^h&WeIj;n69rw?|lStrWVntruX59GCknrPqn9i6YhLd%44Kdl)D&L zR&t!Nd*8Wz@Bp9Gza>84*1L}%J|njy@=~`&qEyyZt!_A3f)0?(sivIl{dM?ehQ+@Iec3;~qLz_jw3>X3Tg?fqd4B z3Vg&o0R3Ps*d}S| zy8;f-(i*M6Ycqs?O|V1t=&*M4gZVw&@D%_hxS$Vy#eq5A6^8vp%3}sGX~GOmiXM; zUJ8j%YUgEUJi**gsfMRU_Wj-E_@ue z;ytlfh<01w+rx|aJt%esuH)?&1wY{@@r(G$%mnEtNe^FWk#*W_C4s9LQPev6mOgbTdO7m|lKiyZ5dUz8|X5ET8oC{{MA0zOYF{7=Jd^X&;Vrp_sd>lEo@c|F;0YGr$9@TluT~4!YBtqn}m0ed{m!H;%ucRqCnYx@qY< zigWJ%Q0Tah^16Jca8Va zIW9Y|@{`~JK4=4O>8U>Wj6pvs@wvP`{rhn3aMK&&;p3K53m@7O9UpK?KfkGA=MPN! zNzo>4T)3(|>+1he1|}(f(k;h@k0S~{NxL27C-Hkw>)zS>Xj;_;K&k4e9n$x51D;-$m+$(;TD2>L-vQud&F#qU2iiH;9==rnHqkDFfUV|HDoXp?@Md8#cRvY)B+7}+oU zq+5;)ABP!!l6E`DPvZBW*cG_yeiFZkpG>t#KS_E=0sF_C|9$MZzh9O}oMG(`?p}I| zwOiCW_QKjstiLzhy_IU}wCKaGmGw08XoP>-@#L-^Kbc%E{bIgb((;8~I-H+uDa&{g zdQJOx+Gk}KS^2E(CoBH3`HYJeE}xeft_()F?KxdVl9XGwrF6z&+k z>~`39{WN%h5BUc-?xB_Pjj_ruZhG`EjgPROE3Q4UJr^>bY>J7GTTU%}Xzz7=CMC29=d~|(;{HI!;D8BIO-1b*qzq6_z)3fKU*7K)A&mU7h*g55-%jG_9yb(7& zdYE1p{EIyVt~a&kT=u7ARsSl-ZHHZQTy|a+?}G>Upb5Bf53Q8%7#tTD_`LAyW$js4 zxshi-n%W^=KhrIz7Cy8mIzE0niND3I|8dhRz0Ah@qD^|`_3PTRu5m0S%iJ&gq+5;) zA4d@JKJ9jppTzG$u`6(;9Txn=x?ubwezN6A=_g6=C}96E>nEp2_9tqc)$4Z1G|A&9 zyWS`L;$V-YrHj2(&zF8bX!}X%(YLe?%sc(OVg2Od<#Gef^bgNCSLYe#9(?q7h5Vy$ zIbh(vTV89Mclw1@e)8ypP8>M;pytr~*(o3FoO06Tav#@Dc+JVA<#IY8!4`eDQLf)5z}quooPJ{6{u+4P+L*cm1-@ zKW6D6E;TOx&{vlXJoMGmLi<=p@EL=CQsDEzyRT_2hs1}o+$pcH z6nxxr6h75{lJ-Q$2YKmV`QXFD2-KYYnDvvQO?vi_cebTN#`_VnUP%HzZaFS|9Jb;; z;U{UggZw0Z&!L*1(ETKS5kHAQ(hpryzxBw-ibAJYt))DV0YAB$$4}-m(k~{@m9*;; zFC9+i(5rI(7<%*X-!QQKrhi&-T-ld(kGoPn*g55d+;qZcy(o?DK~ z&a2`T@Bkl*9NhA6@WE#c`bmk;W9|8n^ONbA>yh1ZYT-kBqT>TjP0#+nu^w5rNzb;Y zLau|Od`3#~lWsXKd>nT8N!sloKZ)OiVprfwI}AViU+~k%EjYgjzsWgY^mlcBq=z5- z0g(eA;#K-(j5F!{NDn{uuOSCM>@y;6X1|iokM!_ke?4-@FZ{?a`wew|q=z5-!I8r} zFZ+d=CuU#0&X4r)qg_T0dclwVSnLDW`H>!ev?ItNztk7b*`wZw@3x4G`a*j6F&~5+ zogd{#yRY*jJ^VNq2sz-(Jb;6*J@2gZBR%|5_I^j?IQg{C%f&7@w?r>L(!-B^JIFyV z&M#qpgL8*;ex!#V`%I7nANCV)jtct^)$GRQlQ2($y&b?!On$C~(@ME18a?lHYtXE~7 zm7ZVH!;krFy_BkaK34Z`1QjdiY7}w#JX_d3X3>cbtpL zxTKrk9LrJh4K?};nfJ(e1im_Lob!m~xYUrL^Hj-a$%(7IUR<7e&0Ena{RJh*IXA?2 zJs^01Pt!*wKH#QnVxQNk|2g!%x$}t4jvJDJtTVsn#m9Tc+assoqvSaFSj?<(!^)+; zl?ooSr zxIXricH$wg#Z1r(BH}&vqvSaFSRAYE2Ry(BvEar%v~kWOZmZ0T3>i9)nEYh}@UbV| zcr7voA0xHqNjP$A@o0^X+H81)X}c{1!Cdh}L!T z{T6iB+<6~sZf|>UV)m)CIuoZ}uzca-6^r$h-g|HDw9dCa()+Dh-X0vKZ$VGl^{#=I z$M)$+Z!gycmM7cm=8s|j$XWnUPJqO-xqpqi*G@r2YQhY^sVSM(!&K~6e{I~9_R&2 z^c8xU{1)_}ZI|iEUR>Pc2rDg_yoX-;`$A6>--6B!voBfXU;Gp0CB6mieqY$F{w-+q zL~rYr%0+%enr-ndXxbs>moo>+_Q+N*k^a^hJMJL4VX+)LkdS#IE` zJ>xpJ)wiIZntb=bz=zHmD5an7So6u3?fGS|j$!UZecjG_F=^+QZ?d_+1x+2GP7LlX z>jZTrb4`8gMAWZ*Re$$4-nXF3!>qx4`h#B|IKA|Tj>O>I&bOfda{YrN`WAFzZlYyr z_k!ay%a>np{9E68-lCrKLw_G!)QP8_x?2zUcATb%Ol*)d}hVb)t8x{7xTr zC4H^8PMBST@Cg&+k3UT95gr4ylLWq}HMQ`N0bZ{`_D%{CZ8he2A+kC-f_QWTwYI z#9c=cH$8fp-q#??HIbOvQ3{BAm0bC2a5vSD*Pqq87wxm?^D8-?xTTPJ~L)a>&Q86wyV=Zp}1&M%=4I(91lLN`o0F*6CEE^$zSh-4-X?yllEis zTs+YxtvKMb9i@=?M96w2iDN&G91lJYTk)P)uSvVD&m;08eh-RWfvY<{*=$ug{33p` zG(+~CNT2$4UHxR#u2Vw!N%qN4@c7B}2c=(3eO%J6`CdwS1<|fOWqSxc``)gB9iClT zcRx8HKp`Rj?0XNj+Vn@;r5@r%iIkQc0bH zjQC@>Lw6sz^3xaB-A@LoC*&XW9&ujGu^mzm@0+{bHpzPad+T}aOVlGVPe=J+=XyDH z-R8A(=INpi0GPCMlYUZ^YkT{LJ95sxhT3-C7jxabk`rv_0w3@IA5aB1?xAD#`%L7o z-c;Cyh#P4CXb)R)Q4m{n7d5UmQQ-=aI&*@ z{}6iiy_XGipR-rp+rwQ06ch5#zV{rfkK4Ll>LFfq#|{5w#SODV#|@MZ_C`4&KKn^; zdl5;ylemF)J1B0z??JIEaMj}m{33p`_dw|_q&p|Ibvcc9zyQfv2)+`<=_E6)LU@N&G*A6`ucKl-uc`_;)0CzU%bogxfBAQ z1q;gUC1?GR)%eumq8(Op9DIbds{I+@0Y0b%Zrno~DXtUtW9qxRzhb>7 zeys0lufH-G*ICP}qMvhN`77`F9Xopb)zFEu{cXBj(sZkr4p+Wedwv|c>DQkhxavpW zt-HUXKcVX<1r#*tF(Tq5T!*gS}Bs$W1Nwwuf>1m2uOf zm+81plxrffv?CRAoU6-T2d(r8_lx#W$SIIGy5GYfzON? z=X8`q`m4OX-ih)GOTkCUsf`cqiH;BQ(%<&MhldfUN&7Jw*NHZ% zaY|I+DArBTZU@D6_&q3g1+KKi_(}XCeiDJC=N@Wm9rDud3l}b1*s}z_Bc&5|8<&uK zI*IEN9zQu!eq{$||CBPWyTtO7dt3jS+pUu{t$)>5=ogeApH)xNUB8U9K*U7KF7FOp+diXIXg&g=X z76U)VboBBgJ^WZ}fE@Da%z@Zzj+l$m^&>s}BwE(qKzr^Cz2M6j6Kg}<{N`9;8+)nn zLF}o5uTC3h%%L?Q#(qtWIgrm}Kp)QZo^~b2@jHT z&wKzr6DWX~RJ40yZL*T%;A8!@de1a_4|RNk)M%W!{`&06%{so_J0@g&PrD<>jgKmI z_T;h$mp!?qX>w04dv#R``OAM#Zui3TGs~OX=FgYAa`i+$_xJ%GbsgZ{^QZp)>Jwt@ zo~x@>j^(RwW1hLRyPK!c>EK}(b|k0lP%OP7_q1f2S+gtGtfpLNN(yyGx+iyNP>zk{ z{>P>RlBRB!G`i-sQwn=sX}v=E>U$4Kt>eMpqtddyCl?AIphPd8*V4=69@E}kWj!lt z_08?~S6a&Q9(w8Ti~N|_V_I_Aso<$!0vGX5l$Tg@=6+w4rM|}$J<;2GrE-xUk!D-$ zF~zQk?ehPWc4n)W==;S%7r6JB8vF(>A|lc8mY0^_z-4WVH?|wRO4@JV)siMZ>!rg9 zP1}1=pbt!4QGBNP?QPp?@0gJP#d9AmBoYVMdWamTG0+F5e$0CQob|l+CF<)OtFlo( z`2SR|x4r9q@CXm?alc_3H@(W0*>B*Aa z03YfxxRoFB;!~LujWMtgH$CMvKG9m~Kbwkg1U_q4zg)-%oSA~$xK!9hrT^^6@#~+d zGu6NYe2@=rnTLJwi9F+zNSK`SHW_~kd^XH_L$TzPoA6}8S4+&bVM>mJk8k`*d#~ez zX8CiD^t5l4^5tO!8aF*6O@9Md_>94~-_u_Xi4S^=lwv6go&lQeU^m!fF)T{1r89$L1?*Pwk@Hg%l-)`?a>VcYD1 z7xFi?Un9oHi&77vsp`k{UAepU{7UP2?Tda4<%6A5PNXiK?X`0`&J-1`ggiSjdUDjV zsM)zfQLfgAeIfY=zFFjLhq)`Cbn!h$Srsm4@A-5o6zV5-uH?Awyn37oJirGb;Ff9g z!zcPUVC8Js7=9N0>VeOOS-TZe0du(%Y{4zpN_=`_egjv@sf`cqiH;BDFu1^r595GQ zO`u`ta;-LL(|fNeqyz8~al5$E-4Y*pH}e0nA0@|)kK%`)q}>kkllVQTV^_AH(ETKS z5kHxGUHVBU{rA0o(qO!AEqOXdWpISQRJ`whR!nJ??I-V*G<&y~4kvENUfTlQ_{lR0 zYp-i*tGAz|UDovz@^h_swI>n>7Ns8I4do{{e)7%M^EKA<+82J3^1;q~?~&z0>Y=xJ z?L2P09ydLD(GHtB!&a1QBJn^W8FDRt#&zbS(rNf#*twD;?K~*n2M_Qm+w~aS%8R}D z#EsYErl$l%ykat*6!@%J{kKB$1^<2wa-qqlc;hijj?)hN#*^RyKF9~RRK^FN82yk6 zJ~7gxUp?^IFl$mVH53k?!IBo4_^6C1#-EX;H($Y`7bU1N&yFG*+cK6pi^6$v?*SjARv?o`{KkV-3t=RO) zqSQm=K=oq|ySvYNz9n?LPx)ZyS-YGlm%&rLb{;q0h?^e0=*O5^S0c*Qnt?24{}|5B zORjlxrPJ`guyZBHW9LRla$j)DflQk zZhTh0UEh;Sd!plm-0U$v`0y|SHEBO4*KUh8=}&J+7jiF#v!4iAuOtBe5l9Z)-uf(p9c6Q zirIM!fzO)Nj}`JE@E32ufOU&(c2!z9bb-{Ug2bR zJ(?)jL}K@1`cL8drSA35N~hs}(JxhUWP2#br>p02!2^7#$KaOk_Tm$Fd^v7Cvw~_?%G8hP0nd z%=rT)XBd3!_Fl(_a>!5h!H0(tsLB4g$un|<&-mT#*A()jG(N55IQV!u+)clQehm9oNT2(qw;$6eXJPGO^&LlY7FJ79`sv)4y#Cr#$Te>Ex%KzO zKfU+1_1h}$7V`JG^`>INT8}36@G85{txs9cZ?T@&zKFXi59~a%$y+X6onAYSyB^J? zpEPObqD+5!W^$#L+pUajtDf(Q8Izaa4ex6F}#_(WeXXtEz;+J4ro zzO|4FIc}wwd)RyMQF0u7eC-E3z^C*pi4VAyTm0~e{OJ?ERUS4wHQqCCKWkP$Tu6>m z`=;bL_*i+Zwjb~SAN(@7B|qke&-BO*T<5|I7tS}Z&sWTkR_w>nx5`EPwq|v?kR2ua zQF0_cL2)#AfDaWG+_;A}(zv3)=Rb8^k^VRRamtr|I``1AdWKQf*&jeoy;Ssv+rD*q z`&c={i2VAUVZ_=rVm^IO1a*ToMUIcN*Jiq7KC!2X^zdU1KXTy5T5I|=tl8H2ksf}` zeIQ5YM;p(c3!NY7;m6um-v!%evCaL2R@8Jux5an^WKS#_sTkHcsr`YK_{MKT|3lFh*w; zm640sL&2OnSi0T1xu%p-8q)sXl! zLhN2A`w55*<@mQ=8Y904pS&Z-!N+1&Z9m`vK1c*N?xD8-iQK@Mi{0C#|1lK1lfRNv zZeEXL@1f$g$P|2(9Ene0>~5b820p``5!N_s>g1Vurp{!cz;gj>wkGmIObR|qj@y0| zbMc<&zkvt%@J7zYjeBU^z08%deVE0f^*Pfp`Dg#R7xps8QrSujK1z;1KAdUD8HSu` zm_1gWS;1L{x<134Y1n+m;+~%68F{qfv>F@Iy{(7U&z~G{rr|R$kII>btA4qzeeC_bg49w0CE@RwRFL$BUe;D0II{FPLHOt?xShL8Q;UUDBby%YImIr@S8~dF02U zKCHA-Q@;9HcQ7U{NxiTz9+7RP6T~|qbx(wZw;dJW?w9W#UX-CC6<)iW~hm@Bkm)0Jp*K`Qp_h*@s_v-Z!m+8k`s)Nn4c$pV7`?&qN0rTA8{9yejWI^<6gm! z^zefZa^M4{A3{BG^V@8>0OCC2zWm$my@U2ROY+*f#(mbYE~er>@7}@kt+F4M+8}AZ zBx&z2B&FPf;=ZPdvVG0F;=Z%DtSW?z`>cGKy@>nH-tti4yMq@O1ot>`ALT>4G5Daj zT!y~mZ8yep+}GOrsX{Vf-h^HfabI%(cz##OaoP>vek*u@PkNoi2i%%2_rqsw#(l!> zQUU8K^tdk_GcH$h9DFQGtB(7?1ALlt5+88Of58u*u^IQBz2(+IE}-A4$9<_c#9kMdrQ8M4%mCE$9=u~#luI*aq#iAAMgMl;m^bcZrRm- z_>9fCZ)xxSg>1mOBt7oS#f#{<{-+$!KQJBlDLHQY zk+vcJC+-6e@Zk+`>;1YfK4UWO6YX0mzs$ zf*abS8OSy0>+E$X?S^l^6+FPF<=1xowd?iZRet!4&A4ySvb$73 zyROH5`IvFJlH=fGnQ(R72Oi*)T`lnexAX&k_>9fCZ_5`Z6!QW0qsM){G2=cZ$HB+f ze!v5K@B`pBbcG*2V>9mC@`YWC`H=H{eKE&PlpF^iU;6#{<{-+eszL}2ulpMGHU>z#%0}t@w z4R9-e&KI9C8TX0yEf-)vrsF;(Cm0_Qrx8C8rx8bh6LA-m{y6x#<21pK^zefZa^M4{ zA3{BG^Am9&aUOAB*N!soBmLlob&dNjG8gyl=!yHXPsx7R;4_luzbR?*7D*|$pt!GW z$9r8n$?;DScO8G}QN@t+eHX#s6eaFE{?hjpkH7SwqTm~6zK`;u-57dWE0+!4c4I8Z zeQ!DP&|)@VK1q-J2B*Xu4_9)WcEh*d3LfB-{++}J-1>gthtJrI`-I)41Ll+TxNj)t zIyEK7!N;<+>bMU)z^8Am#0T8U_xj;8HsikIFFm%H55Px{`%*E-O_Ur5A7A?c5AeYc zfLrpje)x>dxbOH&TZ_4n^L;Hb+czc0!N=Erzyo}QKNA$eWHC!2K3)d$9+mpFg_wqBYq%GBaQ$k;w~utI`DJHX@Vc=;Rhe&zz0e{ zgnHuUC*nThJmS98L>c!v>F@T&eGT(Xqj7xGh;RQjdE&m*7TFK$-Rg~JD6f&yEuT4{ zbK^aW`nT2D%0m8@&$L?KGniDAdU$iNWyj{uEjykV`Wq3H5A8Uq1m z7oMM4?$tTko!R{_=#Y2%Mf}B|W@64Kx#bX33Q1eHUbfZxcNy(Ecz{pevl1V0)3tN( ziP&|O_%xrQ^BwtpeelUS?RssEvT^&ZE;+UE0T1v={=sf<0_@1aC*oJZY<$kBo%=9P z>w`}zr2Uj*&L_F$)WQcmz$bIN#0T8;k^-NjYn*+dr*Yrg_`J*gw`jlXgHPF2uWRX* zah;b@>plIMXt%`vB)6Pe_<#ra^bSdUz)k1x;1hA^#Kz}?I^U7s*9V`pvwyj^MoovP z^Gs^L>3s@5ZaKB^0T1vgeM8~{ZeH$*go97Sp+_4Z1IGZ>2cK+6d@_5+!^bVB7Czts zKIP|a|6|)xAU^T>2Nitc^%ClXPbnlmU3M#3Ppn=- zeefxV#3%j6c=)*G)WQcmz$gD_i4V91;WHy%|3KmstCvt8e3BviZ>cxM!^bVB7Czts zKE(0h7Kl&0{(;0NRxhDG_@qMO<38_9FQZ!b^bg!}YT*MO-~(@P;~v^b-(C>sGyJE1 zdx7ye#_P&&mE(1cPThUZ-*KH+F7MzT$r#Cv6t{vRihGH&3SIIOF`j^UUA@KIuskA8^a}`{5HYShDI; z#Zg5yMo%?2>#xLlT*B^>fAPmhU#HO(^E@sk$HB+SozFTA8xQd5J5u5UZslA3@QK)& zurx6FEi|*|*@<@X+P3UV{`lzYG=^g0qvSaF_}UM6fDe8EJ4)W-hfl;{7W*;q&0T9I z*6K}+Gj?8$u%D^_dbzdqcYl2JecAb46{_KhAfb*dBbsC&QOnHT+^v9JPiBHfvjilXQ0w2BK)c3F#AA7tm;%I~2 zzJ<+9jrYVit4)6EQJnWA{7){ReKWmIL&xC=_Z4*cBfDg-~$!w){lfe(~^2=&CxZ?jc@ zi1Ud1hU|0BNngI+8}~KtH?Vi{#C?XdG9VB{nCk6ytPY* zIEUFfY0dgKdY6!YTJMTNB5{_jhgbHV=bcn+8Mw}RUi+fmpgd?dN)u|Ai;Vl;9=T(5 z+S2X|o8@FoZ3TyYYW5qkh)eyAc7wl|rTAU99AZi#NnfV{9^jKdK;i>#x^^}`k^Qa< zpLo+Sw%;{%&La6t{$q6Tam%TN4|sr2*Y*-0a6@mX#3vOwvUcMWYZ|6r_&9!-9Gj)s zPtql)7CztsK7)r#e85fD&c-KlVD82z)-+6=@F_XtT6)gS+=Gu>PAz=E1AJPVBtGD# zYh~jTd0@+pPpoN}I^mOd;yyj+X70hqEvFVf-~m4A!z4c7rfX&6W1@f1Tp5GZ1%$q@ zPyZn6YIj1bGJ+Su$1SH8KHvd9ga4HC8Q`Xiw(&92Kai7|QI~Yq2cO(1*^gUJEquTO ze7g3R_5*JI_#9`Xe<1OR+DoVpK1pZXM9;aId+f(8rxrfo0Y3R1?DoyJBV8+LKgSvA zA4q(n_7duYPi~ajH@BQx_<#ralwOqW8@L7FW2Ao|@rl|?s1H8nQR=_B<v zZxSDH3&1CG|G>!5K}D(h;FBAr@dLM}jN?HjlS;1jujV6U@{+9`0UQy+ZN zqlAxJPAz=E1AJ1iO8WsfSAkT1O8+xG+Q$nl4mLhfI|VLv>Vr?tnb&uTGWe7Jfm=>3 ze82;Ia?R3yz)e>Te4=&`Yc2cP^X^$*-~YT*MO;FH>2;sb830;&82pQs%K z8=t710+%}V!6!RP?VDRpEquTOd|KWp@d3B&{oZ*=8y{CWjqGQo&o;6o0dGruh75gY zOU&7?djmPWGt{bPwt@{+1f0 z@dLMn@rN zbPwu;Pid6;2W~kv@v-p$pYl|R54Z*46Se;qZ_L20O?~w4U;e{gJ6c#N+5tE?+C*gx1X>*!+M>A$&4&0R0z{ic7Q9o)EwHqt&E zfzN;HJ{;Cxu^x-^Wt|rH&`jqg&i6)VE}gr$n+GGL*7BT%%NF)58DTQ#^$C;5CAP2J zZDpxy&GlGL!hj#8Vde|OdZ^XeKU!og=|5@1Ob{13eyTUSm z(E^N1>{&UBtFq>AXSo)eHGlfrZ0d%yX3zF@tgRkzD=lORex!$AmwnbZYl?M##00F# z-a+F>die3pDCEG8Z-ml@@GWLtKhndGv&fMHKfWCUKfdv$^CLa{IO7gE@Z(Hk_;Gf; z&X4r)V=oYL;Kx~4@Z(HEogeAp*JPh%f*klc_}Xh3Su3jZBR%~1h9q*}2Og|h;#;sf zKhnd`>f^rnid9LG13&O!jSb%z()p1dew=xW9Qc6;YeG1?TIWZ4__6l~Iq(Ay)-Z4; zn$C~(@caMRdmA`8iZb!Plkl=2NO&J!T~Wh=5E6ngpuoOFvTAsdL>xgS3)wI^Ll*Ob z!>JGfb@6;VUvQFBFNa)iQSjgw#SuLvGZFWvM)3t5^w5aPEvKiR=gTN6zpknJc30PQ z_x5(zO!oHwpAVs?ceg9l?Atno4B5g&P+5y_e)bBj`aMJm^E_Y)Dfc z@sXET`;l^N;w* z<7^Q0AdmcW%XPD_inANd^bsF<>^X}bMJ z@_`%i2o;~SUDJ*}cQ@MzLVNg>Iy82m>xtt75BQAFReU1Kk>oQS)+V%vPkxfV1m4rM zA$@DQo;W`6fKTx#$p>y`IuxJOeV=;y$u@$}9zOLBjqT`q;`qP=J`>NCeBc(rC+*aN zK>e0&f<=z8M#zym(H!zCZMMes>GbRFQ6ZJt4U_*6Pnzv+77_`m}`qerOv zO_ievK3435Z1W7-!zb^}{V<>0&b8P6XnNxKzym({lO!LwnW>WP&vaOu&>lVwE#J&% zw{Z<0T~8bzc)(}$RLKW!W||ZqEB1jbKWVLm_VCGf$Ue~Z#PNX#e8&DP`?cT}!N-by zkZqnpd-&8ly=Q=_WiQrib=?ryfOgJz=I!>7=p`c2mp#|Iwp>G^M2e&80)XF9A+Xb+!8 zhvrV{dgA!N13vYIvi!g;iceYt!QR@0Hu2Hw9rM|3TvNX_G(B;A-~pe(MUoHP%rwdR zZQ+8n27&f zx#IahdagO{NQRvce0)7pcGRAO@PJRxnX>%A%}f>LC#?aOtxtt75BQXRC+j!3nHi_}OoO!v z?cvktQ2(f|Cyoz1;8Q+JmLIr9@kwjHW$QE0Q_~(kl@663T~8bzc)*7ofE(9@viwYk zwF#1sZTq198}{DQbIozYhTAqi*ayBIr)hgc*#{H9m-QKZy3Us6Cn_zRA(nR6Xq){z zVr_!$y%8H7>VMPq=x>5)AHV}XrE?@7xS5pdo;W`6 zfX~DWB_Ft%sq*-wG~g5;3kF{p-q4J~aiQ@wg_>A>QK5&cVlg&P`(9P2xK7|hXr@EdvKJb7~Zb0&Z zTO^-s_JM_No;LC6Q2kcW^u+Oj2Yf~sOFnRm;3JH$uV6UOJF<&N{P`$Or>$DR=DSJ%4##C?rt$?N(88N!9|qUAT< zaLLl{WgFHFt-hwXq5I6quDxz(U9wg8teZw|`H<~TigcKt!S5XLsQ&lC zUb)79S#fCP@VbjeRt_&;H=InRDLQby`bg#jPHa}L+p^_&d zzo46R@q1jlZn%!v*~8-TGF_wR1m8D(-PI;n4fl~Q^L~*M_tnp`O@t8Pl(crP`3K{F zf{XYk@~g`Y_4`F$o<4uU`~~XwO>Rg!Nw@o_=7;AIaaOOta^u?d8-}i0W1-+E`2_Ig zTBLio`$x(ZdwGmK_5EhO!+mD>;J3be_U~_U9KW1jIJBW?-ZlAkx>&y4*=}iB-@N>5 z=w2R;7t8WnTq47smBG-L6#i}e1X-^T_U`yp^-Ui=*X>Sj@7YS;!x+gD`ZvA#f_`@| zk(x}0xZ&6Cwfyw%*y{d%ym!st%}{V(;c_Q`X#dG4?$1{azwUAErMYZq&BiQmW!Ctl z%l4U*B3~Wnr`57o-nEDJm3rR_NBixK_s0ZZM83~;@ALHp>ihGZ-eVtf|6Kqdc)$l0 zaO?SG2%jq#q~3dXI`i4Jbl+MfAs_4l@+)ZwA74*AAL6)*C!dJj_1q)=ztT?j zJI*hvxj%-Fvy&f$xt(>ePZ%~)93{ueE2a%I9=OGQ71h(@2G0&sbqXoJbE(<<;T|(;NyuE_lb6r zdONC}q}?N=T)~xkSjZFYB<&*YWZ^2+Zxi8HPM5QKMLQ|amuGLt*@1S_%Q*F=J}BGC z@|$F6{yy3Dt*75xn|sH#eeG^1qtYStcMUJEInFPuG9AG?Z$14J?(eU4e~4k)96wmHZe-)s2a?jo@>6p{&n&lZM120N`bFjh?7jS2S^t)Y zW!QL!497-fh@{-{;p4G&)h|*~^ce=liC+-&^e<*J~Zw%%O`9mn%tCW+YTp>-rF1m?t! zna`)}3G>g1ubb_a1wOXNcLbkZOS@{hr<3t1X6zTy_4xM0Cc(%3_9ZYo~6dpj{7pW&304 zY#v#^Eve-b^3hW=mGAgVx*owNIA6i9->{e9W7N725|tndd~`j2`SAr{AHV}X+yOVP37P+ywuzsv{;aTx7cF{ywb7yS zqw9&{Bl_j>ALy6IkAMe$7a?{X{Pcc#A&>aTLk@b7Lx>&1d!ozR?Is*Q55JFjnZz$X z^6RmivVsj6$QfZsRvHfe`VTpI7s zG({x%-=!Bbewfo%~+|SAFm>_xJdZS8u5Nq24IH zJeW`AlW*Ljb6537YRAuJKeEkz??t{|aO>P^-m_b^mpvpa#}CbBxB7Yl{a~IZ_`m}` z#f_2=@AcrkP(G>K-HS%nT|2a<+d}m&{c>CDW(A)`i-xO(gnY&_&g=8_#Pfj%e5hyO z<^fe-Xm`_k78by$l-TF9W%GxtIggL|dJ;-6M3v+y#^J2;)KJu6wPC7{+@)(O^&YCHY_{gKL7(K`% zos8Wxca^n5B5%d>5+8Z=ouLPL*zCx|moViKA9?hZqQ{g65BkhZdBjH^eMjgq<#}VR zYOKMOM||XAbD;+gJTG&Y=rc0q5g&Qj2+ zd6Y2pnCZipqb<|lzZGubV=WwQU*%;%+aCFZS^GTg&Eb)KYPM`gp0DB6#X*Z<4mV^B zu}yqE0o$=<4i7xwGqFkXft#5e)#qvcIq|hU->W@*>Rz8skWcU`@#D7K2p?ZhJRf+# zhc%^eGZiR4X}i?q95^cmetY2H?9dKpVUJJ7U%G^ zhfl-nlh$+1QD>x+3+Y4n_04^go&>o+;R^)$$a%`?xeyaR zzMcRdZfmY_7WM%=;KLeuxOoxO7sY29^ey#SoukNe79z^ee%z2TgpaQ$o)0|WgL=4e zO*nn}mfBN(Dqi{FiS35)(e(sNs?^7x9_-=4o*wy^$hl+e^8hL+eBX4xbCa7`?jv31{o;9S?CFv7>T4mf^&_~5eZ@$V+oi57J4x z-CLR;o=3#l6MK44uINjhxI~sOmAsZ<`mVupV*65aqtZSsY>u}RTOL^b;ojqy)>iEJ z(iivC*lbh(xtprark|^H1XFtN@%^u;hbqRUy@#nav}Cy(e=dffd_o@ZlihuG_)q*VX!8>A#s$ViMmBA6-uzA9%p0{w~P}Zl+?%$KsjF zrh>%R_WA5udSI>4q4J~aiQ@wg`1D*T`M}N0F2%=+eb5|6NNpvwgU<=Ia)05FcGnEFZ-KK8;sPK5z@?ll4qx zQ)-&)cJR5rR_Kubqw9&|0}uFA-mCa1Zf4F&`(WXMv<8AYGbCHrK{HYI`K;RZ)>^$o zGYLGejz6llq51D|bMYK;!{kLr5j_`m}`T_2Qu;HG6rfKOTjLGejz6llq51D|>S zT+4fVZEC74ex?6F*AvGF9`GsMF8RQ%{`NPo)%OfnJhO*m^|C$JUvnVtirM zwtuaayzxXm*L1zvzQf1YBjG6#V4)(maWe~PfZ)@w{1IX^$zv#=z8M#zym&A*GN8a z({n_8r~IU~-?H@?=&5M~pLyS?l{-{^bUkr=-~k`T{o$tPh|VXi{g$oIKu=8@_-uQ$ zmhX^#t?P;70}uF+190P-a5}A>6nlQyT01G*pP$xv&US^uKG^L7VSW$ued?FW`9918 zGWA>CgD=D31p9Zf2Onqn1kWZI-y-YZ{D);Yx=w~;ACV!?6*YgdaJZUJsLt}a@A7j8 z8aIE$olhgr@OkdaKlLL+58d;Z)~@VctN+Q$ccH&<&z)`>zEN%5{C+jB$KQkRzRQ=m zzyD+6J^08U%3JR8V7^QoA7+oIwI=NDxomSUhRwGP3{=kDTrEVb2V%WeZlB+N=9Jlv z)01&8247ELK6cA`EqHi*{!#LQThEd(KB<=jIntlC@v7Qg>wm`)=ec~wss+!V)msri z4~zRtJ`=}e+bhG@2-6yf)%IMKA-&f1J%06C;o{V z&&tL}*Q37)roRLa_>iic;#N8%to)?4#_jI8Y`cETkN@9l$>XEvn!jGF@;q67#|Q1^KXEtN3g? ze0)9eeBc2e0Gj29zfYg_TK3D&J3sqSwc?c@p4e_k`O)MLk{JxUnG}tZe6ybNRy89Qdzm>%ATTgab3-S9FU3O4y z)!mP~=@6gvejoWmy)n8qm@oBL1?zQbx6VwzZ{9T%)rMDZ1WU8&_l-U~o89W`3DoN? zeg!<>Q@>L3f!p8}VSHw$-#71?KUDKxKYx%9SNMHns=r2-kL3TSUibCH^MMC^sAu42 zYM#k{-?tlk)e0UT^T~tPWmTUB|2p{(d9~z~pCBLGexI)=z=z`D z?b87d_+U4|tj{=rsSiI5{{cS@KY~=@cM)ROQNDCPP56<-M;>y}gB(KS@t)}Ngx`mshu=5& zV(Ir0ANho~{l2uGM62HyJacPewQNTQ|4oMZ?J_Lf8*E>q{Jz{_vi+;8c2M|Tf0}ii zI}V$~?;9q&tcCb}f0}h>?N76EZaTy#z28UvP;ZQ{3Fgb_iNSh(Ci{Jt|LEviBck0k z{l0ugyU5oQsMlNkK6t=q;**jO-0}y6@tK)^-{n`HP^)6x~k~ejo9X zhaB`EhY)$ZC%Qc0_u=Q^_mwY~ejo9XPiWikI|IQ}3|sv^z^gTnaCOuui@34^tY zSFZ>8aE0GDk#Ri9*AveN9`K=_fty*PXR_b7{+gH9a(hvJ%qI_CH!_}yrt5*d&|vy~ z@PH4gfZOQYu<|oA{l4}8QK;oTK6?XJkE)L~0BmKT_?{xP)iYPy}{XSn$ zJRf+#2Y_(nns6rjeaEeMWi9Xdcj8Df51<}k04d}U4+h~cuMR;<{`o7@Vh@+p8?MT<% zGOT}2hU4|%KK)UCUrDXwsvj%+r&s>^g#+dNo?T5e-k0KeCW|8UpWgV`z}IfQxmw=u zKsO!YUHvmdZYaDV7uEhJ6NyJRKIWOv-$^eH|47Nr`b<6 zSei}0ZzAJ(lCLLFuebPp@PJS80m%n$i0GIeBg>|dGBO?-&n@=eYzgli@Y}dK6t8}p5NE3 z-#&0dwGd&qn&W+(lS6(b4Y7-SJ@Ms-_82}rcLm#@u}wifGu7|=-k1JqVC2KcSIZIo zj<)?iUr&IKhZ*|-9`M0#f?MO-P(IVZ@3XspOxRrI{a#WnN0cAiexI)=o)0|W13)!H@>F)FYG$_>3*7! zM||Yrm!Ky~9_7`PM||Xwe)L4il#yL6%Vy1T#Ccqf^B1}GoqI~xPyYFs^ZA$mzVsI-ei8H=n^98y z@6zsr7T-NO;`(oL-l)4{NPh}3siO$}mv*1N*xB?iHJOf}s7tpVy!g_sr!5Ztwe^a2 zg8ZQ#%GcuaiF#;Z%9dif?n5H-_4$wgpK8JDzirJk{V!b^*Q4or^m@p&gW&<6@`U6A zH$6?_JA6)0=}M}7Pc3ZRXm=kH!Dq|nf3H?%CG%4n8TsgX;`qP=K7&71d?Lz`$0y}P zdBta$$$jeA_WA5uI;Ym~?5y|{6*G=c>3ZV$zym(@KT1AuGgImDN$E-|K34X1wz*G? zC_lTF=4y?Ee*Q$(dA*vRI6m-zPq88Sz%7zb%8eTpA1nJh+vjs?EtjzU89g#+kDB=u zb&VaY>xtt75BT(aR`P+{#L`ed@&zfIAB+3Mw4;9OuT{MIP0zK~+%9CCU*zkF_aor} zpNU5#AGnz*^Xj)u_FK1woyyw5=asdRR_~b4u3vX$oWG*$(cc8qeuD>m8o!r(;HIZZ ze234Xlm$rDZ*qIuOjcYw_^her67m_$x^6+!6UPT0@F_na`M@obPd58a^2uby+2^xr z+ooFGtKZBg4_@chxN7jPlV8#P=z8M#zym&|f0KORW@_}xPd58a^2ubywSmvPzpLf7 z_u71R{dzPbA6-uzA9%oreipdtX%gQ(KH2Oy$tRN)*9Jb@K3K~qwBLG;%VxjndgA!N z13vJ88`p%>Y2R&OU)$PuTlhb#=51B;?Ri@Jp{UdsTZsp zx^|c!rWmdpzJB%k)g!4lsGc)-mLta$pH}^;`v&?`rJjeT zmu@!4o#X|q5r|ZEmS8y_LDxDj!C10-XOT|<^IC+Zgk%PQ7-2=hc(yWHOBx{ zp9g*RrjNj$?DV;FHVb3n`zXyqmykz%&l zV;`nG;v0kOvRWu4PYU zQy%d>d8*F{J;;LxXRWeVSBpFqA9<`XKo9cZ!P%g!0XO9lA9>6zV$C}8;K5mztSvC* z5g&Q%MUEci!K19sUSv*@DUbNbV~;!ZAP*j#704dsraa;!kG&JngFJX}wjF!hnevE_ zJl5o(2YK+|EH?H`Fy#>+dF(}v9^}D;v%^@6W6C2w^4Q}HJ;)>fI7^AW!%ca_M;>eE z(StnlkF$T+lg^Y!eB`kv13kzi|2V6Ly$(!y#77=uQ0PG(`N!ERtf4XG5g&PsnV^UF znD&FQXvUsQdBjH^ef;Qw1M=7lmoY9=9`TV!pEP>lfIRkCqHo`nM||Ybhl(CJAdj{2 z^hKNUh>tw_l+XhQ9+L-i>hXnic`IDwt>Xb=t$Hpsi`)nQeyf z(e=dgQ9R(&^B#|Iwp8GK6dQQS=Z ziciX(yC9!TU8`;4Q_$)i^Vw}&!$;Q>#|IwpDg08^Z>k)bX;OSrj_d{bWa?UN6Q4?l z%8#xmjt@NGGq_9gfm=AAvu)T183$n7)Bcna_I;cAlJuJLqw9&|0}uF&|4Qyx ze9{^SYHn7xu7fu6X>`cG*7d~kfd_o@|1J5zEs9TC13~f0)^*TEKIIOTA6-uzA9%p0 z>pvwQxJB_vYal2-*}4we$S2<+`#{$d#|Iwp$^BOHfm;-xv<8CWldbEZjeIH{vafYL zaeUwbpVH4IAGk&EG5?(Sx@of|zB}$lX&+4N9Xh^n!O+zkM%KkekNByxeA3!) zl8*)RpiO-09cq7cJ#l>C0Uvn4jcY>cx3u<~+(8EFLUen{M!6p=jnrHTc3ZB?+_ndPb?qB13q1!mwe!6a)QsEUz^_^K7|hP z(e=dffd_mF-&1@d%8|z>rGa3x|DYY^r_>=nx}G>b@PJRxUnL*7MV6nG27=B0gLd#K zcZiR!Cyoz1;8XgJi)gSGkXX@43X zA3fI`CuMbRW?yq1&s_JfzMk;D3HlG<0iW{Ik`LTW1z!7;vI9<)pQf2@%AVSFd-zm3 z)PJq((cgrY{sYAWK3%h}cv9?X1~)U$;Irq~=C_AWqeFajJ#l>C0iV)r$%k?j$tPuj z*UL|Lrf#10@X2{+3Yt%D=i2j6H9c{B-~pfU9m;-F<;YBxSAMeDZx*_F+QTQW<(v8J zHm>2L>xtt75BQJi|@-#)6Adzn1D zVyvLTMRJdX-0A*a2_iYd2Aj&Ke1vQ_8kef@xiTC-PKHyFHI;isdEMkjAb+3Xe%G?o z6J_%7en|Nx|02ng5HaW`UHl%Gt{bi+cJ{FAe3`D|*}?a1wh~RcxQ}$1_lw)zS3k=( z2ThHoN$LZ^Mf?-#5_`<*_lvwdeg1;^3)JtM+>msVZud{k56>gwtX_ZR#9@iqT`1E(r{{2nv-nw2ncWakRm-KUg z(oob%Sw6Gf(sE5xz+cr~6i#3-ipGyrf5hIh9FOgk*MyVl?#j!0h43r$H`X5SKC5p} z?d>b{f8aIWsyfbbDjnhp{4-*{GXHh%?@zeD$A1L(6)sQmhxUJBPO!c!ec|K)cX!}E zUhpKpW{vNQmwWTrnqMID)p5qFWv{$zFT1bQ`&Llzh4+VqUqrr(w#nC{&o6LV<`=*N zJ_Yq2!>w^^kk7!#nvr#BCl|Qs${L?+nCDQ|F{t!@ zZFbE31q;%iaPBz19m5#~vjTR^_&%~-F8)~BFZnKcO-O!4g@yUDyb(Tp(mY9#ua5JTYVM$9<-BxewtCptBg?rm!dvVZc)*AE7;g2C2Ki*QL$bz) zkL`9+@Y%BYx7FMM$@mODFC!mMk5>{@zIt>EQb zd^=HuC6b^G3%R` z*fFyMcFgFPWxHH|T=m23r}|}7=t~O!RytAEhlKO){n$X|h2&%5_Y zcVE(zYcd_;M&FK^ckh_{`%m59<3HFjFWuU^OiGv;Q=3>A8z@3Lik*{AoY4(dwhDEcBV}}yOthP ztL&eQ5BW6Jkap77qx0ExmeYIeL+-x|C_iJW9x?f#xA?XYKKz&>w8zKpnUKl0-qckKE6noNhd(QhXo8R}a6$k4n=$EGRgsjNI zF4{?3;}#-cMLSt}X0m!%A1C+IH2F8mxvxi-^Qd)^@PH5RG299t5Aw>giPt#l=;-%>n!GYWisJszKcNO7OAV`x_+?HFa3 zlvGH$f~#rAV7Fk$jGn9P7!|*KP|)9>E@vzEyIzGnTlpzv$LtlfV-A$pj78uI68+oc*uH_k&4Jb!EGq6#2Si-rd!5LVvPyRz`o{(-U3JSGZlj@PH5RaYJz% z9S`M`ZGVSUM9fHb&#n@Dwru`xHJ`9wypeH!jISr24?N&QF2Idz!kKz@70=i1P_%!$ z-Eu+uM0=HACEF|7vHC>N@7{Ws*+0Ex-N?qNPaJK=n!hmZ@*3xau37F_yZA6)aPL5S zHF$`ue=CQ|Fn38XB!5dU4xfKrIaSt6gkx{*8hGO9^Y&PKCG>x%{~c~$>ZvuE4)FxO z-#zx$L)_ornz(=9jq`7K;1u_Tt7!An{WMMf4ZGCWqt}P6`w_tdK4^ej}O4{YT#Uk(%Rlt8@fYeB_-!bbr6Y{XPC8xC_65 z{GgnVbqDjM{`O!w&)QDf?Ekbm?^NXJ7ngTe%Ms-~J~xy9N;&uSc;!5_{}UeY8GVlA z1GoC8!}z2h@3Cpe*xa{5@L9BIV>Oqs|1&v};GOXC^>}>T8(Zxdc)+K;Sn*NiXz;c$ zKI!e4X8EyT$Jm~?E%7>Xlh0 zB6*Lm);(C74=u}2qgw7z`SJBgK9S?2iU)jne7JE~yXPr_Gt`2b*WE2iLih-lSo}D-Yo@ggxB%iMRCcsWaEZQ#JL!3hsNk(RkjC z?mHkn%~{%+>&)TC=QI0icsH1POB=_WdEMs|V}ry;9(@bwK^{IJwkW=&DUbNbqi-EO zrabC+`hrY(#77=$K+r?F=*z{orBB_IM||Y5HWodkkNhKjto>kb1Hnqz~<`|#{9?WTj z2Xo`h^bsF<%qc++au}OtZXI)U%=8f-d5pcGhv!5dbJ`j6Hq%FZtw?6>5Ia17GCQ#xfU4mnVF8_5z`8E*%y0-H}f?eSG&`w_dZi=9=d#d2NNL zIsH%Y%K!URzhT?@dSo5#$_e#7-~peBLCFVhrhdsMwP`DTkF*`Ify78Yw)(gcosXDX z7Bv@>cu7O}_OMD z^n~+aPeb-FWKYBVIdU!ydmWnTnPgAH?q%1GjJRuEC*9gGSi3t;Js;d-4!z?){!K^r zG<5E}`oZ4YKVR)Bs<~4a$}s-|IftmI<`Ri?iL}3s1SSjzKP>I8+y`aY^;sECd`^Z5 z#Z37&@jh&FW0Ak+UUvw@FXTFF*id^05+V=oq>JC<(q(f`!_kHEJsW#r@O{($&P{G& zxsP<2_lxJTv8Q3(vv-8V){o#K{)zk&bG!BXMP8bF8j?=Z?cUP-@H`^Up4iinaz$Tn zVL+BIl{_a`ePl%6)6mu&#Vg&78`rM9a;=kc+3)@>a}+=k|Wdz?$8ws)Hx58*p3C{(JZTbU%5dhu(APf3)yj=$~DFY~al6 z{v2@ZO*;0*?;r7y_XG~U4BWmUFA_hvx>4l2*wfJ0alb@Gu&4aJUCk^;zx;qqqUVeOO*l+NF4|l+AbaN=5X|d+c z=G-#DN7Qfm2tLB!5}(4+cKG;uqWOsNdHe^)Tk#{BiE;mj-$jUB2S45K74nFWJmjDU zIfU5ryeGQ6-EI|wpNHR9Tp|5F;ujuhtKatqdwySV57^QIX@?EIQikI%lVQ&(G9=%k z{JyfrdjL*#U`$W0RN7zNC-`A6I zuXJCJ$Hy&ct$yFA;sKx163GW{xql7gGc*0Z`cDeALPYs7{l0OvC*@S@MeHJ9kH;sp z{J;Y~v;%M(y*G@{%=G)}Ke?(_ir{1VeO)JI^UHlb9-q+i0}uG{KESPUUl^a6>G%EY z1%Fe^d;T&lj?59$?;Fgxcc-sM@`>{Mu$SOt+D(P;1^LWmzfZJ3<%oV^+kT&~M=w8= z4mr*w`t9KXAMSwLcs-QQjP(0N{nm)!W83fZ^+fX#ej5G*ej0uRobbB{vFqTc`)NWR z@sWod^dN^2JB0T{mnZx_{5<@={1WN+5r5*j-)-l3-+ISMx6N^NWMk+ePf(qrux@}-*x-;N0N^BxzA+$N1P`ec#@EJQx@_}3Kp)fu( z)9(}IE}w9`ub6R`PeWMxMU0;t^Z-m;d@PJRHAo;*8_gEO8nd$e5a+i;2 zcg^v>dPY9J9*>V(gj@YSc)+LUa>)m7qdyGeGc*0Zo1c1KtrX#xn||MD#(9Lk9*<9G z`GE&~Xb0eyD~Iu!nSS5RPn}k)MDQ{FzMhQZvA!OUPiXmp2YhHJ;nuh%jL*#U``&Zm zS+!Ecd^7TkQQGOrx5`0X%X>c^iXD0i7qWvjEv_H1}K3|VsekdKj-vOTUl!#lwT+ebeU5oLQWi!x_23Gjj@ylpVG*=+BT} zQw=}#_~DB;Ja}1kPwlNN^nd8_yn80jmYPgQ@CiP2Rc`Tzt~xXEnK|SS^~S`N@%iM{ z8!26j!Qs`{6gLFZobJl*`WKO}$KAWFn%DZNPT4Wv1MzU$=wLpQ@FFdHeR9YiQ@wg_>2upK5#Sh4L+x*+@nnKd9f*X>eu%9 z>{@zAt)7riDdRk8T~8bzc)(};3{}6Wa%AS4$0udiiQ@B0Q|{ES+rj6=S|cH!a>nwb z>xtt75BTJ+k$m80=9|YSlYP)_VH==!@Oe?KemG|onNJ?Pp2)~Y*AvGF9`G5zO7ekQ zFjbD@@yTW%H2Gw+657G%<+ak>WPBPK*Xihb;`qP=K7+lI58NX8WU~(>pG;OlJNT@s zH4^d}&p01Q*AvGF9`MOusLGEjM^Svz9-61xAIT?^mCz18Z>$v#PF8+$+J0JQ9>rZV z-%-~S#|IuBALYlx&D2HxwkVr@Ao*mn672I?HE*<5I4Bt(eZMm^kK(R9KAN6bK8go? zkPSDk38&N93u1o;TW2qb{)1K9-q#$5=ULkk3O=I0j{Z6N>v~=y`|Ie(>p3piUuSne zF6WGt?vc|vKRVpR??G=*s`T1gBkJ;t=z+@Wf4*G#)&E_W5Pc z9@lFrzc1dKr;%}fzOToV9Xieo5BM}zOFnQL>ki|S(php}nr1_lwlD@>I=k(a*pKTD zx7_6qp}h+7G3RLvo|dgY$k*fXai6Yro(4SNQ+%D|1Gn4>VSG{=6K)D@o`q(2Kf9L< z6mNXnj@*&qe9U=51)U7qm!@bmEdy3{`B#GlwZ z==T->m!5$=xK`R_xf_H24f!`&xZ$an)pkGUs@^>{PebT`_`hzdI-CASr6ZW)4Nvve zCVu~ZcOFUnhkAqjpx)>ih|d@4_nnp6FuG*j@b%rYvobz`lm06AS+r#ri9D@7_QxGL zuU?-t0jX}F-PQHzHIz9|10L`xpDOvl%}j*ile*p2_+%S~aqU){`z#7Rix$1SnoHQv zZ{|zVYmbknCyoz1;8PiqeBfs4m3;E4J!_p$reT;i@Y%BYebrLJett7wl3v3{*AvGF z9`GsNEBV09)T{WUcFc7?nTBE7!sqkV`Vshj=9AmGhL5f%jt@LMJ~vA~a5Gb-_@wUG z()nZ>hG`3*C#ogSZZ)6W&NX~=J+XWg5BQ9|N%Dc4nJUG{hJBE6vWETkXV=oMTDe2@ zo31C04?N&g-m3U0ZV`N}*avbjGwqblcJMi_RyedX^_#9Ijt@NGQ`{{1z%885*;ecW z$tSIq&<;MQ*D4+2qw9&|0}uGr?~{Ds7Qx4geIWUywG!IFXGyKnq54hN6UPT0@EL!v zs^3&Oir{0#K9GFUS_$po^Xgi@L;k6*Cyoz1JU;&-`M@oLPip(XO4mU%QSIRK`dYn1 zxtt75BM}TNj`AXGNkzxK4}dE#V4&%pe3gbe741L6rZ&ATedy}JvD8x59WQZ*60u) zT~8bzc)*8w8F1_R&oKMo%(Qr%#jCGhy>eL3=d|D3U>|JzajoRFKYFgEO=D|3>Nj6c zynO%<_#hE(ToX>GbvR=Ffvt5o(ti6z$JXI6|BCroXEg`ooYB|?ks2TW~8UpRMmZ*pZxPN=ksr>^6Ha}7l`>#&pP=1 z{f={lyVj-K4SU>wt)J8bDy^adf06UCURgcwgnjyDIs!i@z7XYdFZXVqccaTv)Btmw z!yNHjbFU}0)`U5K=2^VF8_e0mhG!1-J}NcHBR=xj>zg^>$m2{-$~eY4jkEvuKdVnPH|p;v;WV@j(yr z;DJ2mx|=+RkGzW78y`KUJm!EgSJX@&@sY<_BIrRLe3`SvS+J%&;vh>twh{-6hW@MR7IXCRsKh>yIy+EWxg$b)ZDjkz<| z)|5wle64<7W=BC| z(1Sek4Z`ak39AkLl5sUYp+=gz#eU8`iPG__QFCB9FWIZ-|Q)7$|FAV*t-cm za6les39tv2DUbNbW3M6fzyW#eQORCgraa;!kG*lw0|(@B#vOYMnevE_Joa)ykI93z z6zqv($|FAV*n0#$CJ)X^XAc)s9`TXKUK!{yd2kj3d&QXYh>tw>c0iBGgFQakBg2$O zeB>$f&_R#MgEIoz(?OTF!Zm&eKP<})zGv4R@*25jDEro?!`g&i*LJtJW|Qa4b!co< z*CTuoK4#xEJm6D!kK_Y4;t?u7X}hK!eeQ0y5rp>e$!lX`JhRP^z8hUn93ObVr|0#O z58TYONj}qIZ9;qa6gpIXbUkr=-~pfVI>`ra5qwhjed^^W+XzCN_;jfJ6f`|?eBc3} zv5!kWaEsuRc4|SOe#Nj0a93ObVr}Qz&2X3Z*RllVjx(@Kk zHqW3vd@9;|Z9cn=YxwAT;`qP=K7((SeBfrLN%65_A7qlWzZ*0eWay!@X(e=df zfrrOuyW|5mGgXq$bXc3v9zLZG*$29wSU!ped`54VeBc(r$BKO*%THP>p*?&m9V$P% zo;W`6fKTO9ijU$J!N-bykZqnpd-&8l#7EZ?#|Iwp8NEsJfm;Nh)b@d#8)`~TbKM?3 zl@87Q(DlUefd_mh?v#AsX6Bq~e^T2AYVK~fu7hTx+QX;Rp}Ez%o;W`6fKTH?s{E*O z6wYTltW9VSpGJrLA6-uzA9%p0ev9M-wxtt75BL32At%x%oLmAx;=by9cq7cJ#l>C0iTKMB_Ft%8K?M6gS83m z;gj!>f2!+=;{y-)T~aZM=8&vaOu zAoK*ET)Ahvhfd_m>?~#1q z7Re{20jKy_FyMNv?k&o5);lzQs_Tj40}uF&-yr$GjdT-Ie)jwsqwV37*Vg3n%r-;n zH(gI0A9#3tz99L)%}kreC#3;rvwx>8^;?Jfcj}s+SU!ped`j<>eBc(zCuIkm;$xwk zr#^80`Kf0bcKJb7~`8LHzaWm88m7i?(frW0K_VCGdXnaA}6UPT0@F_hY z`M@obPd59&LN`x)_~bjpN7oa_2OjX5_?+Yew{Gkl%zn9_IKCcda?j$mk+#~FfP4124uQ>ZBB%2-9VJDH9m0>|6u%2JiquS@~g`Y_4~zp zfBO6d^B1V!H@P9{B;D?xnjfA=#96)m%8hH+Zy362jfILv$tN(&qDc2{_m9*=?0qu6 zUe-s%8=w92fycDSw)Q@0?wc}y!GbeUG{tcCd(FL19OuNxjynJDp+BD|_CJ}TIH!Dc ze0%xnAC-4*pTBdU@z9*bbLSt`FZMo}c-M<+-TTg|>bm;Z46j|;eeLju;>gPG4I|yF zR+qXjUDDru{m`0?!`*Kv4zKOrxPJB8Yr2QlTvr@&=C2=KvueHD#*DmS{?#Mbo}`Nk zd|&tadw2fgnAhw)aBSXX9XsE4;#~u!Pd+ffJF)xKKdQF86GQ8VS9XuA?QXst zt{t;}WaGN4hr6$Kt%`2v+Mx}_E3Y0|GqUbVx8Sc`dFAT0YgVrvo`3a8PJ(yhJ70Rs z&fQzzI&jBB<;?E{&l~nm@DA`!OpGY|Mb#G*SG2dDNa^N=yc4rCy%YK4|_G?#{uDt4o4a40%G4H|@-ieF<=T$pr?{mdKZEREK zcY@~)dnb4Ycqi(wm+u7c%Gl!eyc1dX&6?e^Z`Pbl`({-pu@#Q_=)F6ggTCap8Al8> zUT}P~?P%8CU-|DHdM$3{2xDEK`Y!Yz^TUtqoV(8xeVaZ!>grGTq3z&#!`=zr0p5w+ zm})yzeNjBMJ?{keMB2T_THlGiGQAUpTzox|oAcz3W8e4X9Zx^K#4V$rYQ7T-3ZJYk zUKZqIp@TaV_Ei&~ukCzzVePFays-Ml$4<%oPVl_E6SLG_YQmo29pIfPyhXkfyeor; zwD+AzTdrE)iM=zu6P4rQ-wDV0wOb!__qn@qc<;p4TkomOa`p|>IIk*U)`98=sVYa9w{V!@|D>!^u)PahmKKB>dX( zuiv@&>i4+y!~rgk@n+i*Cga)-VSi2jH@E5z{RsVEJN}}bzh3wFgNv{JjGGSe`L*{x z{@{>D2iD%U|D@ftqMlgcDj|R9yCs-x8C#hK8VYNFU^lB!mROqmAx)`dwUPf z|LAo)M<2SrFL%sj?S!9#G~YzN&vhf}dVJQK&Ubo`eaQWH0es*AA9TX4{<#o7S1w3> zZjL=Zi>>q7{c!!f(y__-(5Fv+B@N-D>+$)xQ$P(q)F&n%^i}>PgbzQa2yODQIX6bs zNe8{_FTLeSeDoBL9EbuRU601cyI0&N_7bMvHuq}dM%q0>${So~s~d&9-L4|qMcT>A z2V^@*{M;Yg+D@jNQRQgu7CAM4`U{x5#pj$dqC)+goq?c{>OU9}bWUS69_pWwd2mht*U^^-J9R7~Ob`&P{cV!MW`m^!T^~CX^J~8=toc=L{4?m^|r)xVY>ZEO#{Pc^B zgykp2qc@{aesnz=A5W~fPqdTN+fnT#?H(cJ3a(~5NxMip*|SZylf)lfX!J3>)IZl@ z$-0q^*EJUzdC5%tr5U$dMowb|&vvcWeVf`i*I~avJ833lY=>+odq!nw{yy3DnV0_k z&U4-^{K!4iP73{N?!0NIYuQv~I)W)a^N{!MJoAvZxWC7LXeY@J%K7NdV7`oR36^uY zmMrb4qvH&S!MlZy`@i_~P4??-bxzd8p#|@Jk!2%SzixO#Q^RD@TYeXLdfbwm`}1Bo z4=a5w(Wd+d%DJz{oBJci;nlxQ=fejc@Tt5_@`2mncf$Cj?b&ynW*@p6y*M=GM>8VW zJts==+4Z$k`b$URPqvqjugBvfo=?q{@cF<4KE*FfK5*-~D~wOdiTrK?ns0a7PI`?{ zJIc?N&3E+`y#AQ>^6~X}d_v0)Jm6Cwmwe#X_(m9?)NY$BKc_olzDmZA{qpnh*Oq>< zTw|_=x;yDL?Rl5A8DCiVuYGS(qBoz?z|J?M%h9d(N7u-&U>qKRfbXe_4C^ z_x(Kk6&om z<8spel#?m#@syEWZT+r2F6MZ;BNeLOYX5*eUiqr5e+R!J!{)6S{&!6G2M0#~{Jh>h zWseK}$8`U|9a|c!%5(%D=9um+?(g57bSw~ikNly$O}s0ZPoZC|2cKDN#U6@0dAen-dJE7~X8 ztHC>Ddqq1|z986Mt@w1ye1z4d6q9w_WlmY9BRKodn&rr)ER3@}BiLU3QP#it@5!*| zsbI)^6crX+*_Ln{X%GYG`8|{^@N7TGg_B%Y_!+Q+3`kg^Os(&tZ zlC#D~v2A-omb=aUm4xHn`r1O$lq7_Yu1B?uq5Tu^fDbz0)_5X>Plo;{(~h}p zSTr3|on0wobx$>#hh5k)ath;9%I`iPV8`_Al6Fhu-({Hlz6?uGt82CPz!PYEnK)0D zH^QyAezZ2bIiGURjDv}}-o5)>?55%4{j;4XTI`suw~o2Lzbf&35%Py}PCk(h`R&1S zE_w0m)WfXt(Kt)_-J`QiJ0_im;al!@^YnZDgUhc^v8k#xC8s{F7$oIcy1OUmgb>Dx=eN!OEv6ZH$6sAtHLi4TQw;@7E% zHaRutSz0Pj_dnz1&GJ+%Br8u-e{vZ^v|oagu1Dk4B39hL!o2}5aNj~q8eM5U2W#3@05K<4q&$Mr_XRvQZ-ze=H;+LKuv~TS8)1-G? z#JUmLPs6&A0|WL=es9_DFjklL%-})tnvnN8D(q5w$q+ugGo0#P$vOLpiS>80@EMRD$I^Yd=fY z_cBpu^^wU{VZAI zlUKI;X~cU!QGT+&qU9U9!oqw8`&01I^{9H-w>=$yo)0|WLt5Zg`9cVv)U|@$c|JD# zX+-&1e${vSa|!#=#$TM??rfGHO-~#j>Uon7oQmHJ;lqz9!s*&iBioE8`%9Col}+); zfhg2(x}G>YhITc|j=?VRLe)OOm3C6-75y~WE!Z(#AD4Cv@yDMXv|}ut9qq%`*db%;*oK{WAI+8J7PX3|FaE>a7bPBVB7Z37!j^ul)R*W-#g;QgYW-Y_46nG-@e(mzo&op?O$zaCkNiNW%0n9?n>NF zl0TI5+<(jbL4DrwS^sJ{;n_@D=F zV;>3OliDkozW%-_KWncn_m>m)$Bdqn&5qIa#POlNH~GM+s}{nCA5(b+4 zuw%x5A=~B3<1(CZq+LTenH^Jlp)7BNf4k$!>e#7Y>YHrbLhXUp(_9ZVyfS(-<%kz% z?}!gV6Fv+v;*2lSnhJEp~s**0}uG{9>cBvWROo*J0xp-a>KSA zBi{Ssf-m%y655$v8Tawf^~AN4@PH4`54YS;L-@=J3+?*v*vOZwxAYq4Wqdd>F5 zFTJLkxIc#cp`2Id2IpUtcLd9MRy!nXd_PCjx=u^$WRCy!=llO=`)&PoZCuya)%vaS zqHO-8uE)1yTK6G<2Yh&s;Wj=V`PFFidwi(6# zN{7akbUkr)4DD)^9fMs$=#?wgj_Y=eu#4EQ7kTFRCHqvc&no-5uwSbwkNC)AeHVI= z!?+duy)xcx$|FAVm?wrF_{d{i06lO;9_zhWKVr%wKJw_tMh|l6Z)AQo{g&qQ5+8Z^`{*Ix zkjK7^j60a=BR=x*PtimA@FPec{)j1$_{gK3Ko99d9_gb$!IVdQWWkzcKZenLgqpkNrZ>!~2Xp_BX=*GvyH zZ-v`XarP?q!svcMe+c=6(`VmF)vs%5-$|Y?AF*$q+}o79(ueeW_<9_7Hd^x&I{pa{ z_!MSKK5#QrBKf4>u)^NHlakNqLFRhM=DrSQvJ+odyngqfl@+{7EUx87`1pD}KJLBl zJiF${pN|d?_>9kyeBfp(kbKgQV>RvV4E_}9neDWv{4^r?M9sG$JxN3O_p(E@IfuyxF%Hf zTWUb|_MPl&&Lf_%)E~$5H9UVc$j3Yrp8Ka7dVD-Rl8@?4R^t5njkDO{GufH!(`O&N zUPsJRwY3i(`CRb&j~#`(Q?Om*yU4N{@4@0bHlanKleW;cdES3pCdyvO&2Y{@rFy5b}!qo zZfNy2#SPsTy9dK}%SH9w{X(7;TSLGEl9KTYA`9(5JC}zsHiT7cX8;krE@0pgJo;>_6?++Qjbe$@BmQ{#2-GATY z{*n7gmwCTP*M>F3ZhuIAkq**@X3{Itb%UJ^qMM?}PM7&Lcv`R=nEAzhq|3Zt2y=_% z`qd+An{w0sFE`2l2IBd}KapQzA7A}`@qV2?f5H3(>i11ouL*g+sIb(l<_oHD_LXD(+g|Y8fyu_%qvR$1JMX)BztI1d(^k0p zd;4TM#2x8AqeLZ?R|6L)WbraXeVhGX(uP{k?kb$D_>||J4u?;gnm28 zen7JV?PSj(vVE-oNVboqZwAB3bdIZe^@M{*Jzib2`B`mmCpD8KkVK(>_m=PVInM50 znGW%@-%bu5^>z36x4XZ`e*|~YPLe;AbMlGUW3Qa9<-FImknF9a7y0Tq3;Oe3zf=?f zawc6!IrsJG<-E0>ga>@k3b(PfA$(?FJ1O{V*?eDL&f6C_o=_u zsvk-DmHGDu+sR@Z&d2l~atdEWJ1NJIIUjR&pq(^Db^V8GCyz+ifA#X*=W2ic&E0N0 z6hCj<)NAWn=)YsZ-_#suZGF=iErXohrbUZ}*%(!D-Q={i=DdpRawKgx~M$(K)&HO!MQ9=fML$ zh3`l{aO>K4NuXawmZQ^C7X(?3vQJoOM>$%w=rz^CtJx2@eSAbY^7ZI^Bpvbpr=Py* zY4_hv)OT=!Q`h0LzJp)+d!gkh^?|@@-ol#f2WHwYM_V?RtEGr>S3d`{eG~aE%8{=p zz^SDi!2>=e)lS2$J`u_%^~4`-?5~L`{nNICPqkX_Q2>N9WU8&%pyemL2Xs>-9HSbR7KkQW(yAuc|cF1&yl>7Zy zhdnxf@nMg~OfXOnN_$2AP~J)^pU98V`-Ami)^h@~#wT62&w~*8D*6V;yz?O9?TYaX z<2}Nz@b&2Rq1#Ww8TN*K4i`9)5AbVzCX7@14lR3}dfgK0_BUGcqXeg2Ut77O{_@V) zf4-h%oTy*mWY#nFZ-#M#=F~%bob39$qK^93?PLA9S9XSzuP4B%B}1wA-~uOZgkSy- z2B#T%ZinEs>uaU{Mu+S`Ur#tE!AFeK(cVV&KVq*CQV+t|b!M^EvyR>h-_%{aa zo2_@5=aMx~_U1K795!RkU$7u;N686Yv(!#eoUgi9z`mI{Qra=&N6RpOtPIDF3)(kP z^A?NBzG*C#cFvqHe0bm)N6#5J_OcJUV|C-Mozvs~>)c1^pS%B2Zd-guRir~`KK8P| zYlh6u0n{AFQ$7N!PdZ=F!h%k;A7fN<@W{oOrLd9(qFT+PDF2{`LIr^@)kRMd_8*k@o8hf!2>?r z0k_fzL-|aDby9Zw>jj@xt3J?QiYPx~{ebukZnDG2*AvZ0_-XhL_-XhN&BVC>!|x)* zu7jWMrwMt)M;>y}gB(Ka5Z)7A-fq`u!q3C+WBn5G$8HY#eZ>pqI;x9CRt`6PH(B6G zM&hs;w>xEISIaWD_7&?#9EW|6_YU}djb}?ctoWRuKhuno;(wob>NShceb2XDU$4FW z+EGap`oH_;O|Dd~(8Jtb@SZJZjB~ zScfY5+8Z=(Vz!;VeEvq*W^KbP~`&{S~GxKAr*Md`Xj-;nY=hWI~2@m*; z{YvtIo2h^L%r$OLIU2h>yc`{FW<<(s%8{=}=i>`C=NiKWPVAuqKR>4Yrpi%j-^t!w z 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

i^YNk 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