diff --git a/.idea/dictionaries/chengwei.xml b/.idea/dictionaries/chengwei.xml new file mode 100644 index 0000000..39b12c0 --- /dev/null +++ b/.idea/dictionaries/chengwei.xml @@ -0,0 +1,7 @@ + + + + cgspread + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..df245c4 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..2a814aa --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/nuke_plugin.iml b/.idea/nuke_plugin.iml new file mode 100644 index 0000000..6711606 --- /dev/null +++ b/.idea/nuke_plugin.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..40e0966 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + Python + + + + + PyInterpreterInspection + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1462342724858 + + + 1462457927320 + + + 1462458082075 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/command.py b/command.py new file mode 100644 index 0000000..3a285e2 --- /dev/null +++ b/command.py @@ -0,0 +1,127 @@ +# coding=utf-8 +# author=weijer +# http://www.cgspread.com +import nuke +from python.packproject import nuke2pack +import python.pw_multiScriptEditor as ScriptEditor +from python.Channel import autoComper, PreCompForArnold, RenderLayer +import python.ToolSet as ToolSet + + +def run_pack(): + """ + run package nuke project plugin + :return: + """ + wgt = nuke2pack.PackageDialog() + wgt.exec_() + + +def run_ScriptEditor(): + """ + run script editor + :return: + """ + ScriptEditor.showNuke() + + +def run_autoComper(): + """ + run autoComper script + :return: + """ + autoComper.autoComper() + + +def run_preCompForArnold(): + """ + run preCompForArnold script + :return: + """ + PreCompForArnold.preCompForArnold() + + +def run_RenderLayer(): + """ + run RenderLayer script + :return: + """ + RenderLayer.RenderLayer() + + +def run_presetBackdrop(): + """ + run presetBackdrop script + :return: + """ + ToolSet.presetBackdrop.presetBackdrop() + + +def run_browseDir(): + """ + run browseDir script + :return: + """ + ToolSet.browseDir.browseDirByNode() + + +def run_SingleToEquence(): + """ + run SingleToEquence script + :return: + """ + ToolSet.single_to_sequence.main() + + +def run_switchShot(): + """ + run switch_shot script + :return: + """ + ToolSet.switch_shot.main() + + +def run_correctErrorReadNode(): + """ + run correct_error_read_node script + :return: + """ + ToolSet.correct_error_read_node.main() + + +def run_ListShuffle(): + """ + run correct_error_read_node script + :return: + """ + ToolSet.ListShuffle.main() + + +def run_replaceReadNodePath(): + """ + run replace_read_node_path script + :return: + """ + ToolSet.replace_read_node_path.main() + + +def run_toggleInput(): + """ + run toggle_input script + :return: + """ + ToolSet.toggle_input.main() + + +def run_toggleStamp(): + """ + run toggle_stamp script + :return: + """ + ToolSet.toggle_stamp.main() + + +def run_releaseNotes(): + nuke.message('

Nuke ToolSet Ver1.0

' + '

By weijer

' + '

联系QQ:250557277

') diff --git a/config.py b/config.py new file mode 100644 index 0000000..a9a2971 --- /dev/null +++ b/config.py @@ -0,0 +1,660 @@ +# coding=utf-8 +# author=weijer +# http://www.cgspread.com + +nuke_config = { + "toolbar": { + "cgspread": { + "icon": "logo.png", + "list": [ + # + # Image + # + { + "name": "Image/CWSlate", + "command": "CWSlate", + "shortcut": "", + "icon": "AntsSlate.png", + "type": "gizmo" + }, + { + "name": "Image/a_Text", + "command": "a_Text", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + # Image icon + { + "name": "Image", + "command": "", + "shortcut": "", + "icon": "icon_toolbar_image.png", + "type": "toolbar" + }, + # + # Channel + # 1、AutoComper + # 2、PreCompForArnold + # 3、RenderLayer + # + { + "name": "Channel/AutoComper", + "command": "command.run_autoComper()", + "shortcut": "", + "icon": "autoComper.png", + "type": "python" + }, + { + "name": "Channel/PreCompForArnold", + "command": "command.run_preCompForArnold()", + "shortcut": "", + "icon": "", + "type": "python" + }, + { + "name": "Channel/RenderLayer", + "command": "command.run_RenderLayer()", + "shortcut": "", + "icon": "", + "type": "python" + }, + { + "name": "Channel/Multimatte", + "command": "Multimatte", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Channel/akromatism_stRub", + "command": "akromatism_stRub", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Channel/L_MultiplePasses", + "command": "L_MultiplePasses", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Channel/Aberration_Chromatique", + "command": "Aberration_Chromatique", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Channel/AutocomperArnold", + "command": "AutocomperArnold", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + # Channel icon + { + "name": "Channel", + "command": "", + "shortcut": "", + "icon": "icon_toolbar_channel.png", + "type": "toolbar" + }, + # + # Filter + # 1、RealHeatDistortion + # 2、iBlur + # 3、vectorBlurGizmo + # 4、zBlurGizmo + # 5、CWDefocus + # 6、Turbulate + # 7、Mosaic + # 8、DilateErodeFine + # 9、Lightwarp + # 10、Glow_hub + # + { + "name": "Filter/RealHeatDistortion", + "command": "RealHeatDist", + "shortcut": "", + "icon": "RealHeatDistortion.png", + "type": "gizmo" + }, + { + "name": "Filter/iBlur", + "command": "iBlur", + "shortcut": "", + "icon": "iBlur.png", + "type": "gizmo" + }, + { + "name": "Filter/vectorBlurGizmo", + "command": "vectorBlurGizmo", + "shortcut": "", + "icon": "VectorBlur.png", + "type": "gizmo" + }, + { + "name": "Filter/zBlurGizmo", + "command": "zBlurGizmo", + "shortcut": "", + "icon": "ZBlur.png", + "type": "gizmo" + }, + { + "name": "Filter/CWDefocus", + "command": "CWDefocus", + "shortcut": "", + "icon": "CWDefocus.png", + "type": "gizmo" + }, + { + "name": "Filter/Turbulate", + "command": "Turbulate", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Filter/Mosaic", + "command": "mosaic", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Filter/DilateErodeFine", + "command": "DilateErodeFine_CB", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Filter/Lightwarp", + "command": "bm_Lightwrap", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Filter/Glow_hub", + "command": "glows_hub", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + # Filter icon + { + "name": "Filter", + "command": "", + "shortcut": "", + "icon": "icon_toolbar_filter.png", + "type": "toolbar" + }, + # + # Keyer + # 1、AdditiveKeyer + # 2、DespillMadness + # 3、LumaDespill + # 4、EdgeExtend + # 5、EdgeExtend + # 6、hairEasyKey + # 7、KillOutline + # 8、alpha_edge + # 9、EdgeKey + # 10、Spill_Tool + # 11、RemoveSkyEdge + # + { + "name": "Keyer/AdditiveKeyer", + "command": "AdditiveKeyer", + "shortcut": "", + "icon": "KeyerLuminance.png", + "type": "gizmo" + }, + { + "name": "Keyer/DespillMadness", + "command": "DespillMadness", + "shortcut": "", + "icon": "DespillMadness.png", + "type": "gizmo" + }, + { + "name": "Keyer/LumaDespill", + "command": "LumaDespill", + "shortcut": "", + "icon": "LumaDespill.png", + "type": "gizmo" + }, + { + "name": "Keyer/EdgeExtend", + "command": "EdgeExtend2", + "shortcut": "", + "icon": "EdgeDetect.png", + "type": "gizmo" + }, + { + "name": "Keyer/hairEasyKey", + "command": "hairEasyKey", + "shortcut": "", + "icon": "Keyer.png", + "type": "gizmo" + }, + { + "name": "Keyer/KillOutline", + "command": "KillOutline", + "shortcut": "", + "icon": "VolumeRays.png", + "type": "gizmo" + }, + { + "name": "Keyer/alpha_edge", + "command": "alpha_edge", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Keyer/EdgeKey", + "command": "EdgeKey", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Keyer/Spill_Tool", + "command": "Spill_Tool", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Keyer/RemoveSkyEdge", + "command": "RemoveSkyEdge", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Keyer/a_IDKeyer", + "command": "a_IDKeyer", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + # Keyer icon + { + "name": "Keyer", + "command": "", + "shortcut": "", + "icon": "icon_toolbar_keyer.png", + "type": "toolbar" + }, + # + # 3D + # 1、RealHeat CameraProjection + # 2、EnvRelight + # 3、ReLighting + # 4、FallingLeaves + # 5、RainMaker + # 6、TX_Fog + # 6、3D/Tangent_Space_Normals + # + { + "name": "3D/CameraProjection", + "command": "CameraProjection", + "shortcut": "", + "icon": "Camera.png", + "type": "gizmo" + }, + { + "name": "3D/EnvRelight", + "command": "EnvRelight", + "shortcut": "", + "icon": "ReLighting.png", + "type": "gizmo" + }, + { + "name": "3D/ReLighting", + "command": "ReLighting", + "shortcut": "", + "icon": "ReLighting.png", + "type": "gizmo" + }, + { + "name": "3D/FallingLeaves", + "command": "FallingLeaves", + "shortcut": "", + "icon": "FallingLeavesIcon.png", + "type": "gizmo" + }, + { + "name": "3D/RainMaker", + "command": "RainMaker", + "shortcut": "", + "icon": "RainMakerIcon.png", + "type": "gizmo" + }, + { + "name": "3D/TX_Fog", + "command": "TX_Fog", + "shortcut": "", + "icon": "TXFogIcon.png", + "type": "gizmo" + }, + { + "name": "3D/a_RelightSimple", + "command": "a_RelightSimple", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/a_ReLighting", + "command": "a_ReLighting", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/a_ReLightingP", + "command": "a_ReLightingP", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/a_RimLight2D", + "command": "a_RimLight2D", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/L_RimLight2D", + "command": "L_RimLight2D", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/Tangent_Space_Normals/Multi_Tangent_Space_Normals_Generator", + "command": "Multi_Tangent_Space_Normals_Generator", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/Tangent_Space_Normals/Normalise_Tangent_Space_Normals", + "command": "Normalise_Tangent_Space_Normals", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/Tangent_Space_Normals/Partial_Derivative_Blending", + "command": "Partial_Derivative_Blending", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/Tangent_Space_Normals/Tangent_Space_Normals_Generator", + "command": "Tangent_Space_Normals_Generator", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/Tangent_Space_Normals/Tangent_Space_Normals_Previewer", + "command": "Tangent_Space_Normals_Previewer", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "3D/Tangent_Space_Normals/Tangent_Space_Normals_to_Cavity", + "command": "Tangent_Space_Normals_to_Cavity", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + # Channel icon + { + "name": "3D", + "command": "", + "shortcut": "", + "icon": "icon_toolbar_3d.png", + "type": "toolbar" + }, + { + "name": "3D/Tangent_Space_Normals", + "command": "", + "shortcut": "", + "icon": "Tangent_Space_Normals.png", + "type": "toolbar" + }, + # + # Lighting + # 1、Mask3D_RS + # 2、ReLight_RS + # 3、RimLight_RS + # 4、MT_Relight + # 5、NormalLighting + # 6、P_Matte + # 7、P_Noise3D + # 8、P_Ramp + # 9、EnvRelight + # 10、ReProject3D + # 11、PP_Mask_hub + # 12、DepthSlice + # + { + "name": "Lighting/Mask3D_RS", + "command": "Mask3D_RS", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/ReLight_RSS", + "command": "ReLight_RS", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/RimLight_RS", + "command": "RimLight_RS", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/MT_Relight", + "command": "MT_Relight", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/NormalLighting", + "command": "normalLighting", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/P_Matte", + "command": "P_Matte", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/P_Noise3D", + "command": "P_Noise3D", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/P_Ramp", + "command": "P_Ramp", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/EnvRelight", + "command": "EnvRelight", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/ReProject3D", + "command": "ReProject3D", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/PP Mask hub", + "command": "PP_Mask_hub", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/DepthSlice", + "command": "DepthSlice", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + { + "name": "Lighting/Final Flare", + "command": "final_flare_tool", + "shortcut": "", + "icon": "", + "type": "gizmo" + }, + # Lighting icon + { + "name": "Lighting", + "command": "", + "shortcut": "", + "icon": "icon_toolbar_light.png", + "type": "toolbar" + }, + # + # ToolSet + # 1、Preset Backdrop + # + { + "name": "ToolSet/PackProject", + "command": "command.run_pack()", + "shortcut": "", + "icon": "nuke2pack.png", + "type": "python" + }, + { + "name": "ToolSet/PresetBackdrop", + "command": "command.run_presetBackdrop()", + "shortcut": "ctrl+alt+b", + "icon": "Backdrop.png", + "type": "python" + }, + { + "name": "ToolSet/AutoCrop", + "command": "nukescripts.autocrop()", + "shortcut": "", + "icon": "AutoCrop.png", + "type": "python" + }, + { + "name": "ToolSet/BrowseDir", + "command": "command.run_browseDir()", + "shortcut": "shift+b", + "icon": "", + "type": "python" + }, + { + "name": "ToolSet/Single To Sequence", + "command": "command.run_SingleToEquence()", + "shortcut": "alt+F2", + "icon": "", + "type": "python" + }, + { + "name": "ToolSet/Switch Shot", + "command": "command.run_switchShot()", + "shortcut": "alt+F3", + "icon": "", + "type": "python" + }, + { + "name": "ToolSet/Correct Error Read Node", + "command": "command.run_correctErrorReadNode()", + "shortcut": "alt+F4", + "icon": "", + "type": "python" + }, + { + "name": "ToolSet/List Shuffles", + "command": "command.run_ListShuffle()", + "shortcut": "alt+F5", + "icon": "", + "type": "python" + }, + { + "name": "ToolSet/Replace Read Node Path", + "command": "command.run_replaceReadNodePath()", + "shortcut": "alt+F6", + "icon": "", + "type": "python" + }, + { + "name": "ToolSet/toggle stamp", + "command": "command.run_toggleStamp()", + "shortcut": "alt+Q", + "icon": "", + "type": "python" + }, + { + "name": "ToolSet/toggle input", + "command": "command.run_toggleInput()", + "shortcut": "alt+shift+Q", + "icon": "", + "type": "python" + }, + # ToolSet icon + { + "name": "ToolSet", + "command": "", + "shortcut": "", + "icon": "icon_toolbar_toolsets.png", + "type": "toolbar" + }, + # Release Notes icon + { + "name": "Release Notes", + "command": "command.run_releaseNotes()", + "shortcut": "", + "icon": "icon_toolbar_release.png", + "type": "python" + } + ] + } + }, + "toolMenu": { + # Multi Script Editor + "ScriptEditor": { + "name": "Multi Script Editor", + "command": "command.run_ScriptEditor()", + } + } +} diff --git a/gizmos/3D/CameraProjection.gizmo b/gizmos/3D/CameraProjection.gizmo new file mode 100644 index 0000000..04fa126 --- /dev/null +++ b/gizmos/3D/CameraProjection.gizmo @@ -0,0 +1,71 @@ +set cut_paste_input [stack 0] +version 8.0 v4 +push 0 +push $cut_paste_input +Group { + inputs 2 + name CameraProjection2 + knobChanged "\nk = nuke.thisKnob()\nn = nuke.thisNode()\nn.begin()\nif k.name() == 'inputChange':\n nCheck = nuke.toNode('Card3D1')\n if not nCheck.canSetInput(2,n.input(1)):\n n.setInput(1,None)\nif k.name() == 'projFrm':\n card = nuke.toNode(\"Card3D1\")\n cam = n.input(1)\n frm = n\['projFrm'].value()\n print cam.name(), cam\['translate'].valueAt(frm)\n print \"cam proj freeze frame: \" + str(frm)\n card\['lens_in_focal'].setValue(cam\['focal'].valueAt(frm))\n card\['lens_in_haperture'].setValue(cam\['haperture'].valueAt(frm))\nif k.name() == 'projType':\n val = int(k.getValue())\n card = nuke.toNode(\"Card3D1\")\n iList = \[nuke.toNode(\"FrameHold\"),nuke.toNode(\"cam\")]\n card.setInput(1,iList\[not val])\n card.setInput(2,iList\[val])\nn.end()\n\n" + tile_color 0x9b0000ff + note_font "Bitstream Vera Sans Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_color 0xffffffff + selected true + xpos -163 + ypos -30 + addUserKnob {20 camProjectTab l "Camera Project"} + addUserKnob {4 projType l Mode: t "You can use \"stabilize\" mode to generate an on-the-fly stabilize of your plate at a specific depth. Great!" M {Matchmove Stabilize}} + addUserKnob {26 ""} + addUserKnob {3 projFrm l "Projection Frame:"} + projFrm 1001 + addUserKnob {22 thisFrmKnob l "this frame" -STARTLINE T "nuke.thisNode()\['projFrm'].setValue(nuke.frame())"} + addUserKnob {7 cardDepth l Depth: R 1 5000} + cardDepth 20 + addUserKnob {20 camDetailsTab l Render} + addUserKnob {41 format l "output format" T Card3D1.format} + addUserKnob {41 filter T Card3D1.filter} + addUserKnob {41 clamp -STARTLINE T Card3D1.clamp} + addUserKnob {41 black_outside l "black outside" -STARTLINE T Card3D1.black_outside} + addUserKnob {41 motionblur T Card3D1.motionblur} + addUserKnob {41 shutter T Card3D1.shutter} + addUserKnob {41 shutteroffset l "shutter offset" T Card3D1.shutteroffset} + addUserKnob {41 shuttercustomoffset l "" -STARTLINE T Card3D1.shuttercustomoffset} +} + Input { + inputs 0 + name cam + selected true + xpos 271 + ypos -159 + number 1 + } +set N19699c90 [stack 0] + FrameHold { + first_frame {{parent.projFrm}} + name FrameHold + xpos 113 + ypos -248 + } +push $N19699c90 + Input { + inputs 0 + name img + xpos -138 + ypos -311 + } + Card3D { + inputs 3 + translate {0 0 {-parent.cardDepth}} + uniform_scale {{parent.cardDepth}} + lens_in_focal 19.42200089 + lens_in_haperture 23.759161 + name Card3D1 + label "\n\n\n\n" + xpos -138 + ypos -159 + } + Output { + name Output1 + xpos -138 + ypos -1 + } +end_group diff --git a/gizmos/3D/EnvRelight.gizmo b/gizmos/3D/EnvRelight.gizmo new file mode 100644 index 0000000..ae9bb3d --- /dev/null +++ b/gizmos/3D/EnvRelight.gizmo @@ -0,0 +1,702 @@ +#! ./Contents/MacOS/Nuke6.1v2 -nx +version 6.1 v2 +Gizmo { + inputs 3 + help "This gizmo allows an input latlong or angular (lightprobe) environment map to be remapped to create image based diffuse and specular relighting. To do this requires renders of point positions and normal vectors of a 3D scene, and a Nuke camera. Note that Nuke's own ScanlineRender shader outputs are suitable for relighting using this gizmo.\n\nTo use, select a surface type (diffuse or specular). This will determine whether to remap the image using the normal (diffuse) or the reflection vector (specular). Try it out with the EnvConvolve gizmo on Nukepedia to pre-convolve a latlong environment prior to input. This will allow fully diffuse as well as glossy and specular effects. For a more naturalistic result, the diffuse lighting works well with a bent normal render." + knobChanged "\nk = nuke.thisKnob()\nn=nuke.thisNode()\n\nif k.name() == \"type\":\n if k.value() == \"Diffuse\":\n n\['point'].setEnabled(False)\n n\['camera'].setEnabled(False)\n else:\n n\['point'].setEnabled(True)\n n\['camera'].setEnabled(True)" + addUserKnob {20 EnvRelight} + addUserKnob {6 use_alpha l "use alpha" +STARTLINE} + addUserKnob {4 type l "surface type" t "Determines whether the environment is remapped along the normal for diffuse effects or the reflection vector for specular effects." M {Diffuse Specular "" ""}} + type Specular + addUserKnob {41 normal l "normal vectors" T Shuffle2.in} + addUserKnob {41 point l "point positions" T Shuffle1.in} + addUserKnob {4 camera t "The camera position is used to calculate the specular reflection. Choose either a Nuke 3D camera (cam input) or, if available, derive the camera position from RenderMan OpenEXR metadata (vec input)." M {"nuke camera" "renderman openexr metadata" "" "" ""}} + addUserKnob {26 envmap l "environment map"} + addUserKnob {4 env_format l format t "Set this according to the input environment map format." M {latlong "lightprobe (angular map 360)" "" "" "" ""}} + addUserKnob {13 env_rotate l rotate t "This allows you to orient the environment map independent of the scene."} + addUserKnob {41 filter t "Set this to Impulse if you are using a convolved environment and are getting a seam." T STMap12.filter} +} + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x7171c600 + label "reflection vector" + note_font_size 24 + xpos -349 + ypos -249 + bdwidth 446 + bdheight 788 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x7171c600 + label "orient angular" + note_font_size 24 + xpos 580 + ypos -329 + bdwidth 290 + bdheight 320 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x7171c600 + label "orient latlong,\nremap to angular" + note_font_size 24 + xpos 930 + ypos -547 + bdwidth 422 + bdheight 532 + } + Input { + inputs 0 + name vec + xpos 392 + ypos -538 + } +set N1e618160 [stack 0] + Dot { + name Dot12 + xpos -49 + ypos -200 + } +set N1e61aac0 [stack 0] + Dot { + name Dot1 + xpos -487 + ypos -200 + } + Dot { + name Dot2 + xpos -513 + ypos 1044 + } +set N1e61fe50 [stack 0] +push $N1e61fe50 +push $N1e618160 + Dot { + name Dot3 + xpos 426 + ypos 861 + } +set N1e622870 [stack 0] +push $N1e61aac0 + Shuffle { + in none + out rgb + name Shuffle1 + label "point to rgb" + xpos -316 + ypos -107 + } +push $N1e618160 + Dot { + name Dot4 + xpos -89 + ypos -453 + } +set N1e62d590 [stack 0] +push 0 + Switch { + inputs 2 + which {{parent.camera}} + name Switch3 + xpos -88 + ypos -403 + } + Matrix { + channels none + matrix { + {1 0 0 0} + {0 1 0 0} + {0 0 -1 0} + {0 0 0 1} + } + name Matrix1 + label "working with callback in init.py" + selected true + xpos -88 + ypos -366 + addUserKnob {20 User} + addUserKnob {3 frameHold} + frameHold {{frame i}} + addUserKnob {3 doThis} + doThis {{"\[python exrCam()]" i}} + } + Expression { + temp_name0 R + temp_expr0 Matrix1.matrix.3 + temp_name1 G + temp_expr1 Matrix1.matrix.7 + temp_name2 B + temp_expr2 Matrix1.matrix.11 + expr0 R + expr1 G + expr2 B + name Expression5 + label "Get \"point world\" value \nof camera position" + xpos -88 + ypos -312 + } +push $N1e62d590 + Expression { + temp_name0 R + temp_expr0 Axis2.world_matrix.3 + temp_name1 G + temp_expr1 Axis2.world_matrix.7 + temp_name2 B + temp_expr2 Axis2.world_matrix.11 + expr0 R + expr1 G + expr2 B + name Expression1 + label "Get \"point world\" value \nof camera position" + xpos -232 + ypos -324 + } + Switch { + inputs 2 + which {{camera i}} + name Switch2 + label "select method for getting camera position" + xpos -183 + ypos -59 + } + Merge2 { + inputs 2 + operation minus + Achannels rgb + Bchannels rgb + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask -rgba.alpha + name Merge3 + label "Cam to surface \nlight ray direction" + xpos -316 + ypos 65 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize2 + xpos -316 + ypos 137 + } +set N1e653750 [stack 0] +push $N1e61aac0 + Shuffle { + in none + out rgb + name Shuffle2 + label "normals to rgb" + xpos -49 + ypos -113 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize6 + xpos -49 + ypos -56 + } +set N1e6629c0 [stack 0] + Dot { + name Dot15 + xpos -15 + ypos 233 + } +set N1e669820 [stack 0] +push $N1e653750 + MergeExpression { + inputs 2 + channel0 rgb + expr0 (Ar*Br)+(Ag*Bg)+(Ab*Bb) + channel1 {-rgba.red -rgba.green -rgba.blue} + channel2 {-rgba.red -rgba.green -rgba.blue} + channel3 {none none none -rgba.alpha} + maskChannelMask -rgba.alpha + name DotP1 + label I.N + xpos -316 + ypos 223 + } + Multiply { + channels rgb + value 2 + name Multiply5 + label *2 + xpos -316 + ypos 263 + } + Dot { + name Dot16 + xpos -282 + ypos 379 + } +push $N1e669820 + MergeExpression { + inputs 2 + expr0 Ar*Br + expr1 Ag*Bg + expr2 Ab*Bb + name MergeExpression5 + label *N + xpos -49 + ypos 368 + } + Merge2 { + inputs 2 + operation minus + name Merge6 + xpos -49 + ypos 431 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize3 + xpos -49 + ypos 482 + } +push $N1e6629c0 + Switch { + inputs 2 + which {{type i}} + name Switch4 + label "surface type" + xpos 220 + ypos 475 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize1 + xpos 220 + ypos 673 + } + Expression { + temp_name0 radius + temp_expr0 ".5/pi*acos(b)/sqrt(r*r + g*g)" + expr0 "0.5 + (r*radius)" + expr1 "0.5 + (g*radius)" + expr2 0 + name AngularMapProjection + xpos 220 + ypos 699 + } + Input { + inputs 0 + name map + xpos 591 + ypos -532 + number 1 + } +set N1e6a2ea0 [stack 0] + Mirror { + Horizontal true + name Mirror1 + xpos 972 + ypos -459 + } + Reformat { + type "to box" + box_width {{width i}} + box_height {{width i}} + box_fixed true + resize distort + name Reformat2 + label width*width + xpos 972 + ypos -433 + } +set N1e6a96c0 [stack 0] + Expression { + expr0 (pi+atan(cx,cy))/(2*pi) + expr1 sqrt((cx**2)+(cy**2)) + expr2 0 + name st2polar2 + xpos 669 + ypos -221 + } +set N1e6b14a0 [stack 0] +push $N1e6b14a0 +push $N1e6a96c0 + Reformat { + type scale + scale {2 1} + name Reformat3 + label 2*width + xpos 972 + ypos -387 + } + Expression { + expr0 cos(2*PI*x/size.w+PI/2)*sin(PI*(y/size.h)) + expr1 cos(PI*(1-y/size.h)) + expr2 cos(2*PI*x/size.w)*sin(PI*(y/size.h)) + name Expression2 + label "latlong unit sphere" + xpos 972 + ypos -347 + postage_stamp true + addUserKnob {20 User} + addUserKnob {14 size R 0 100} + size {{!proxy?input.width:(input.width/proxy_scale) i} {!proxy?input.height:(input.height/proxy_scale) i}} + } + Group { + name RotationMatrix6 + help "Use this for rotating xyz vector data such as P and N." + label identity + xpos 972 + ypos -257 + addUserKnob {20 RotationMatrix} + addUserKnob {13 rot l rotation t "Link to say axis' or camera's rotate.\nYaw = y axis.\nPitch = x axis.\nRoll = z axis."} + rot {-90 -90 90} + } + Input { + inputs 0 + name Input + xpos -304 + ypos -17 + } + ColorMatrix { + matrix { + {{cos(radians(yrot)) i} 0 {-sin(radians(yrot)) i}} + {0 1 0} + {{sin(radians(yrot)) i} 0 {cos(radians(yrot)) i}} + } + name ColorMatrix14 + label "yrot (yaw)" + xpos -304 + ypos 89 + addUserKnob {20 "" l User} + addUserKnob {7 yrot l "y rotation" R -90 90} + yrot {{parent.rot.y i}} + } + ColorMatrix { + matrix { + {1 0 0} + {0 {cos(radians(xrot)) i} {sin(radians(xrot)) i}} + {0 {-sin(radians(xrot)) i} {cos(radians(xrot)) i}} + } + name ColorMatrix15 + label "xrot (pitch)\n" + xpos -304 + ypos 127 + addUserKnob {20 "" l User} + addUserKnob {7 xrot l "x rotation" R -90 90} + xrot {{parent.rot.x i}} + } + ColorMatrix { + matrix { + {{cos(radians(zrot)) i} {sin(radians(zrot)) i} 0} + {{-sin(radians(zrot)) i} {cos(radians(zrot)) i} 0} + {0 0 1} + } + name ColorMatrix13 + label "zrot (roll)" + xpos -304 + ypos 165 + addUserKnob {20 "" l User} + addUserKnob {7 zrot l "z rotation" R -90 90} + zrot {{parent.rot.z i}} + } + Output { + name Output1 + xpos -304 + ypos 280 + } + end_group + Group { + name RotationMatrix2 + help "Use this for rotating xyz vector data such as P and N." + label "manual env rotate" + xpos 972 + ypos -219 + addUserKnob {20 RotationMatrix} + addUserKnob {13 rot l rotation t "Link to say axis' or camera's rotate.\nYaw = y axis.\nPitch = x axis.\nRoll = z axis."} + rot {{env_rotate i} {env_rotate i} {env_rotate i}} + } + Input { + inputs 0 + name Input + xpos -304 + ypos -17 + } + ColorMatrix { + matrix { + {{cos(radians(yrot)) i} 0 {-sin(radians(yrot)) i}} + {0 1 0} + {{sin(radians(yrot)) i} 0 {cos(radians(yrot)) i}} + } + name ColorMatrix14 + label "yrot (yaw)" + xpos -304 + ypos 89 + addUserKnob {20 "" l User} + addUserKnob {7 yrot l "y rotation" R -90 90} + yrot {{parent.rot.y i}} + } + ColorMatrix { + matrix { + {1 0 0} + {0 {cos(radians(xrot)) i} {sin(radians(xrot)) i}} + {0 {-sin(radians(xrot)) i} {cos(radians(xrot)) i}} + } + name ColorMatrix15 + label "xrot (pitch)\n" + xpos -304 + ypos 127 + addUserKnob {20 "" l User} + addUserKnob {7 xrot l "x rotation" R -90 90} + xrot {{parent.rot.x i}} + } + ColorMatrix { + matrix { + {{cos(radians(zrot)) i} {sin(radians(zrot)) i} 0} + {{-sin(radians(zrot)) i} {cos(radians(zrot)) i} 0} + {0 0 1} + } + name ColorMatrix13 + label "zrot (roll)" + xpos -304 + ypos 165 + addUserKnob {20 "" l User} + addUserKnob {7 zrot l "z rotation" R -90 90} + zrot {{parent.rot.z i}} + } + Output { + name Output1 + xpos -304 + ypos 280 + } + end_group +set N1e6e4840 [stack 0] + Group { + name RotationMatrix1 + help "Use this for rotating xyz vector data such as P and N." + label "match latlong orientation" + xpos 773 + ypos -219 + addUserKnob {20 RotationMatrix} + addUserKnob {13 rot l rotation t "Link to say axis' or camera's rotate.\nYaw = y axis.\nPitch = x axis.\nRoll = z axis."} + rot {0 90 0} + } + Input { + inputs 0 + name Input + xpos -304 + ypos -17 + } + ColorMatrix { + matrix { + {{cos(radians(yrot)) i} 0 {-sin(radians(yrot)) i}} + {0 1 0} + {{sin(radians(yrot)) i} 0 {cos(radians(yrot)) i}} + } + name ColorMatrix14 + label "yrot (yaw)" + xpos -304 + ypos 89 + addUserKnob {20 "" l User} + addUserKnob {7 yrot l "y rotation" R -90 90} + yrot {{parent.rot.y i}} + } + ColorMatrix { + matrix { + {1 0 0} + {0 {cos(radians(xrot)) i} {sin(radians(xrot)) i}} + {0 {-sin(radians(xrot)) i} {cos(radians(xrot)) i}} + } + name ColorMatrix15 + label "xrot (pitch)\n" + xpos -304 + ypos 127 + addUserKnob {20 "" l User} + addUserKnob {7 xrot l "x rotation" R -90 90} + xrot {{parent.rot.x i}} + } + ColorMatrix { + matrix { + {{cos(radians(zrot)) i} {sin(radians(zrot)) i} 0} + {{-sin(radians(zrot)) i} {cos(radians(zrot)) i} 0} + {0 0 1} + } + name ColorMatrix13 + label "zrot (roll)" + xpos -304 + ypos 165 + addUserKnob {20 "" l User} + addUserKnob {7 zrot l "z rotation" R -90 90} + zrot {{parent.rot.z i}} + } + Output { + name Output1 + xpos -304 + ypos 280 + } + end_group + STMap { + inputs 2 + channels rgb + uv rgb + name STMap1 + xpos 730 + ypos -174 + } + CopyBBox { + inputs 2 + name CopyBBox1 + xpos 669 + ypos -135 + } + Expression { + temp_name0 radius + temp_expr0 ".5/pi*acos(b)/sqrt(r*r + g*g)" + expr0 "0.5 + (r*radius)" + expr1 "0.5 + (g*radius)" + expr2 0 + name AngularMapProjection1 + xpos 669 + ypos -109 + } +push $N1e6a2ea0 + STMap { + inputs 2 + channels rgb + uv rgb + name STMap2 + xpos 591 + ypos -58 + } +push $N1e6a96c0 + Dot { + name Dot6 + xpos 1156 + ypos -422 + } +set N1ff32c60 [stack 0] + Expression { + expr0 (pi+atan(cx,cy))/(2*pi) + expr1 sqrt((cx**2)+(cy**2)) + expr2 0 + name st2polar1 + xpos 1237 + ypos -164 + } +set N1ff3add0 [stack 0] +push $N1ff3add0 +push $N1e6e4840 + Expression { + temp_name0 u + temp_expr0 0.5*(1+atan(b,r)/pi) + temp_name1 v + temp_expr1 acos(-g)/pi + expr0 u + expr1 v + expr2 0 + channel3 {none none none -rgba.alpha} + name SphericalProjection5 + label "Convert normals \nto latlong UV coords" + xpos 972 + ypos -179 + } +push $N1ff32c60 + STMap { + inputs 2 + channels rgb + uv rgb + name STMap13 + xpos 1122 + ypos -165 + } + STMap { + inputs 2 + channels rgb + uv rgb + name STMap12 + label "latlong to angular" + xpos 1122 + ypos -108 + } + CopyBBox { + inputs 2 + name CopyBBox4 + xpos 1122 + ypos -46 + } + Switch { + inputs 2 + which {{env_format i}} + name Switch1 + label "env format" + xpos 591 + ypos 33 + } + Dot { + name Dot5 + xpos 625 + ypos 767 + } + STMap { + inputs 2 + channels rgba + uv rgb + name STMap24 + xpos 220 + ypos 763 + } + CopyBBox { + inputs 2 + name CopyBBox2 + xpos 220 + ypos 857 + } +push $N1e622870 + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels rgb + name Copy1 + xpos 392 + ypos 958 + } + Keymix { + inputs 3 + channels rgb + invertMask true + name Keymix1 + xpos 392 + ypos 1040 + disable {{!use_alpha}} + } + Output { + name Output1 + xpos 392 + ypos 1215 + } + Input { + inputs 0 + name cam + xpos -225 + ypos -562 + number 2 + } + Axis2 { + name Axis2 + xpos -215 + ypos -503 + } +end_group diff --git a/gizmos/3D/FallingLeaves.gizmo b/gizmos/3D/FallingLeaves.gizmo new file mode 100644 index 0000000..7132178 --- /dev/null +++ b/gizmos/3D/FallingLeaves.gizmo @@ -0,0 +1,2530 @@ +#! /Applications/Nuke8.0v1/Nuke8.0v1.app/Contents/MacOS//libnuke-8.0.1.dylib -nx +version 8.0 v1 +Gizmo { + inputs 4 + tile_color 0xd77b58ff + addUserKnob {20 FallingLeaves} + addUserKnob {26 title l "" +STARTLINE T "
FallingLeaves
v1.0"} + addUserKnob {26 damianbinder l "" +STARTLINE T "By Damian Binder"} + addUserKnob {26 guidebox l "Guide Box"} + addUserKnob {7 guideboxtranslatex l "Translate X" R -100 100} + addUserKnob {7 guideboxtranslatez l "Translate Z" R -100 100} + addUserKnob {7 boxsizez l Stretch R 0 10} + boxsizez 1 + addUserKnob {7 boxglobalsize l "Global Size" R 0 10} + boxglobalsize 1.1 + addUserKnob {7 guideboxrotation l Rotate R 0 100} + addUserKnob {6 guideboxoff l "Guide Box Off" t "Make guide box invisible." +STARTLINE} + addUserKnob {26 particleoptions l "Particle Options"} + addUserKnob {68 leavetype l "Leaf Type" M {"Default Leaf" "Custom Leaf" ""}} + addUserKnob {7 emissionrate l "Emission Rate" R 0 5} + emissionrate 0.5 + addUserKnob {7 leavesize l "Leaf Size" R 0 2} + leavesize 0.4 + addUserKnob {7 sizerandom l "Size Random" R 0 3} + sizerandom 0.3 + addUserKnob {7 maxlifetime l "Max Lifetime" R 0 1000} + maxlifetime 100000 + addUserKnob {26 behaviour l "Environment Options"} + addUserKnob {7 gravity l "Gravity Amount" R 0 0.05} + gravity 0.015 + addUserKnob {13 turbulence l "Turbulence Amount"} + turbulence {0.05 0.03 0.041} + addUserKnob {20 wind l "Wind Options" n 1} + addUserKnob {13 windto l "Wind Direction"} + addUserKnob {7 windstrength l "Wind Strength" R 0 0.05} + windstrength 0.01 + addUserKnob {20 endGroup n -1} + addUserKnob {26 groundoptions l "Ground Options"} + addUserKnob {6 ground l "Disable Ground" +STARTLINE} + addUserKnob {6 killleaves l "Kill Leaves" +STARTLINE} + addUserKnob {20 shadowoptions l "Shadow Options" n 1} + addUserKnob {6 shadows l "Enable Shadows (Render)" +STARTLINE} + addUserKnob {6 shadowsonly l "Shadows Only" t "Solo shadows. Shadow pass without leaves." +STARTLINE} + addUserKnob {7 shadowopacity l "Shadow Opacity"} + shadowopacity 0.95 + addUserKnob {7 shadowblur l "Shadow Blur" R 0 10} + addUserKnob {20 endGroup_1 l endGroup n -1} +} + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0xaaaaaa00 + note_font_size 22 + xpos 195 + ypos -629 + bdwidth 222 + bdheight 268 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0xc6ab71ff + note_font_size 42 + xpos -750 + ypos -914 + bdwidth 486 + bdheight 654 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x8e8e64ff + note_font_size 42 + xpos -1249 + ypos -738 + bdwidth 409 + bdheight 450 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x8e6e8eff + note_font_size 42 + xpos -686 + ypos 594 + bdwidth 382 + bdheight 544 + } + BackdropNode { + inputs 0 + name BackdropNode5 + tile_color 0x5a8848ff + xpos -101 + ypos -819 + bdwidth 152 + bdheight 110 + } + BackdropNode { + inputs 0 + name BackdropNode6 + tile_color 0x6b728eff + note_font_size 42 + xpos -286 + ypos -247 + bdwidth 425 + bdheight 944 + } + Axis2 { + inputs 0 + display off + selectable false + translate {{parent.TransformGeo2.translate.x} {curve} {parent.TransformGeo2.translate.z}} + name Axis2 + xpos -665 + ypos 618 + } + Axis2 { + display off + selectable false + translate {{parent.ParticleWind2.to.x*6} 0 {parent.ParticleWind2.to.z*6}} + rotate {{curve} {parent.TransformGeo2.rotate.y} {curve}} + uniform_scale {{parent.TransformGeo2.uniform_scale}} + name Axis1 + xpos -665 + ypos 697 + } + Camera2 { + display off + selectable false + translate {0 28.14999962 -1.230475732e-06} + rotate {-90 0 0} + projection_mode orthographic + focal 0.3 + haperture {{parent.TransformGeo2.scaling.x*50}} + vaperture {{parent.TransformGeo2.scaling.z*50}} + name shadowcam + xpos -665 + ypos 776 + } +set N8fdc6fc0 [stack 0] + Dot { + name Dot14 + xpos -641 + ypos 1016 + } +push $N8fdc6fc0 + Input { + inputs 0 + name img4 + xpos -932 + ypos -647 + number 3 + } + Reformat { + format "200 200 0 0 200 200 1 200x200" + name Reformat5 + xpos -932 + ypos -578 + } + BlendMat { + surfaceblend modulate + name BlendMat8 + xpos -932 + ypos -500 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card6 + xpos -931 + ypos -409 + } + TransformGeo { + rotate {0 150 0} + name TransformGeo8 + xpos -932 + ypos -322 + } + Dot { + name Dot8 + xpos -897 + ypos -218 + } + Reformat { + inputs 0 + format "200 200 0 0 200 200 1 200x200" + name Reformat2 + xpos -472 + ypos -866 + } + Roto { + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 0} + {t x42c80000 x42c80000} + {a} + {curvegroup Bezier1 512 bezier + {{cc + {f 8192} + {px x42540000 + {x3e999900 0} + {x42dc6666 x41140000} + {xbe999900 0} + {x40666680 xc0233338} + {x42d48254 x4175e413} + {xc0666680 x40233338} + {x3e4ccc00 xbf866660} + {x42c7a790 x41f19998} + {xbe4ccc00 x3f866660} + {xbf400000 xbfe66680} + {x42c5f905 x424fac38} + {x3f400000 x3fe66680} + {xc11b3338 x40833330} + {x42ed1bed x424a45d0} + {x411b3338 xc0833330} + {xbfc66680 xbf400000} + {x43096095 x422d1746} + {x3fc66680 x3f400000} + {xbfe66680 xbfb33340} + {x430aa666 x422f3333} + {x3fe66680 x3fb33340} + {xbeb33400 0} + {x43160000 x4238cccd} + {x3eb33400 0} + {xbecccc00 xbe800000} + {x43214000 x423ccccd} + {x3ecccc00 x3e800000} + {x40166680 xbf666680} + {x431ecccd x42440000} + {xc0166680 x3f666680} + {xbf933380 xbf599980} + {x431e3333 x42550000} + {x3f933380 x3f599980} + {xbf800000 xbfa00000} + {x4333199a x428f4ccd} + {1 x3fa00000} + {x40700000 xc09a2e80} + {x43247333 x429722e8} + {xc02cccc0 x40a904b0} + {xbe999800 xbfecccc0} + {x4326599a x42a88000} + {x3e999800 x3fecccc0} + {xbf0ccd00 xbf333380} + {x432dfdac x42bdd61c} + {x3f0ccd00 x3f333380} + {x40433340 xbee66600} + {x432b4000 x42c00000} + {xc0433340 x3ee66600} + {xbfa66680 xc0db3330} + {x43287333 x42d08000} + {x3fa66680 x40db3330} + {xc0799980 xc0800000} + {x4333199a x43024000} + {x40799980 x40800000} + {x3e4ccc00 x3dccd000} + {x432f8ccd x4301c000} + {xbe4ccc00 xbdccd000} + {x41300000 x3fb999c0} + {x431e0000 x42f74ccd} + {xc1300000 xbfb999c0} + {x40399980 xbf666680} + {x43090000 x42e74ccd} + {xc0399980 x3f666680} + {xbf333400 xc0066680} + {x4306a666 x43010000} + {x3f333400 x40066680} + {x3e199c00 xbfe66680} + {x4308cccd x43107333} + {xbe199c00 x3fe66680} + {x403cccc0 x3f666600} + {x43053333 x430d7333} + {xc03cccc0 xbf666600} + {x400cccc0 xbfaccd00} + {x42fee666 x430c0000} + {xc00cccc0 x3faccd00} + {x3dcccc00 xc0033340} + {x42fb8000 x4317c000} + {xbdcccc00 x40033340} + {x406999a0 xbf4ccd00} + {x42f3199a x43170000} + {xc06999a0 x3f4ccd00} + {x3fe66680 xbfc66680} + {x42d9c5d2 x432d46fc} + {xbfe66680 x3fc66680} + {x3fc66680 xbfb99980} + {x42cb199a x433c599a} + {xbfc66680 x3fb99980} + {x3eb33300 x3f8ccd00} + {x42c80000 x433a8ccd} + {xbeb33300 xbf8ccd00} + {x40000000 x40233340} + {x42c63333 x4331c000} + {xc0000000 xc0233340} + {x40d66670 x408b3340} + {x42afcccd x431e0000} + {xc0d66670 xc08b3340} + {0 xbe199c00} + {x42a38000 x431e3333} + {0 x3e199c00} + {xbe886e00 x4078a040} + {x42a0094e x43171870} + {x3edd1800 xc0c97460} + {x3f8cccc0 xbf800000} + {x4291cccd x4311c000} + {xbf8cccc0 1} + {x3eb33300 xbf0ccd00} + {x428bcccd x43158ccd} + {xbeb33300 x3f0ccd00} + {xbdcccc00 x400999c0} + {x428a8000 x430acccd} + {x3dcccc00 xc00999c0} + {x4094ccc8 x401cccc0} + {x427e3333 x42ee0000} + {xc094ccc8 xc01cccc0} + {x3f199980 xbeb33400} + {x4234a2e9 x42f5ac38} + {xbf199980 x3eb33400} + {x40819998 xbf800000} + {x42050000 x42fd199a} + {xc0819998 1} + {x3f8cccd0 xbf0ccd00} + {x41a3999a x43087333} + {xbf8cccd0 x3f0ccd00} + {xbf266680 x40299980} + {x41c46666 x42fce666} + {x3f266680 xc0299980} + {0 x3f999980} + {x41dd3333 x42e46666} + {0 xbf999980} + {x3ee66680 x40566660} + {x41fddac3 x42bd437d} + {xbee66680 xc0566660} + {xbeb33340 x3f333300} + {x41e694f1 x42ad9746} + {x3eb33340 xbf333300} + {1 x407999a0} + {x420f999a x429a0000} + {xbf800000 xc07999a0} + {x40b4a790 x3f9c8240} + {x41b0094f x42888df7} + {xc00a2d60 xbeef6a00} + {xbfe66670 x3e199900} + {x41f53333 x427f3333} + {x3fe66670 xbe199900} + {xbfaccce0 x3fd999a0} + {x42206666 x426d0000} + {x3faccce0 xbfd999a0} + {0 0} + {x42270000 x425c6666} + {0 0} + {xbfc66680 1} + {x4241094e x4258745d} + {x3fc66680 xbf800000} + {x3f666640 x3fc66660} + {x424904a6 x4247904a} + {xbf666640 xbfc66660} + {xbfacccc0 xbe4ccd00} + {x425e999a x42440000} + {x3facccc0 x3e4ccd00} + {xbf4ccd00 x3e800000} + {x42706666 x42416666} + {x3f4ccd00 xbe800000} + {xc0000000 xbf8cccc0} + {x428b199a x424d0000} + {x40000000 x3f8cccc0} + {xc0400000 xbe800000} + {x42b7199a x425e999a} + {x40400000 x3e800000} + {xbf933340 x40100000} + {x42c0f45e x4258586f} + {x3f933340 xc0100000} + {xbf0ccd00 x3f266640} + {x42c26666 x42023333} + {x3f0ccd00 xbf266660} + {xc08eb100 x405094f0} + {x42cfd176 x416d745e} + {xbc152000 xc03f6b10} + {xbf8cccc0 x3f866660} + {x42d1cccd x4115999a} + {x40300000 xbf000000}}} idem} + {tx x42540000 x42c78385 x42bb5867} + {a str 1 spx x42c80000 spy x42c80000 sb 1 ltn x42540000 ltm x42540000 tt x40800000}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {100 100} + colorOverlay {0 0 0 0} + lifetime_type "all frames" + lifetime_start 53 + lifetime_end 53 + motionblur_shutter_offset_type centred + source_black_outside true + name Roto1 + xpos -472 + ypos -815 + } + Dot { + name Dot3 + xpos -438 + ypos -733 + } +set N90210f00 [stack 0] + Dot { + name Dot4 + xpos -438 + ypos -687 + } +push $N90210f00 + Constant { + inputs 0 + color {0.486 0.248 0.104 1} + color_panelDropped true + format "200 200 0 0 200 200 1 200x200" + name Constant1 + xpos -638 + ypos -873 + } + Dot { + name Dot5 + xpos -604 + ypos -733 + } + Merge2 { + inputs 2 + operation mask + name Merge2 + xpos -559 + ypos -736 + } + RotoPaint { + inputs 1+1 + output {rgba.red rgba.green rgba.blue none} + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 512} + {t x42c80000 x42c80000} + {a} + {cubiccurve Brush90 512 catmullrom + {cc + {f 2080} + {p + {x4306999a x42873333 x3ce0e0e1}}} + {t x4306999a x42873333} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush89 512 catmullrom + {cc + {f 2080} + {p + {x43046666 x42a0cccd x3e109091} + {x4305cccd x42a0cccd x3e2cacad} + {x430acccd x42a1999a x3e48c8c9} + {x430d3333 x42a26666 x3e54d4d5} + {x4310999a x42a26666 x3e50d0d1} + {x4311cccd x42a26666 x3e2cacad} + {x43130000 x42a26666 x3e28a8a9} + {x43140000 x42a26666 x3e28a8a9} + {x4315999a x42a26666 x3e28a8a9} + {x4316cccd x42a26666 x3e38b8b9} + {x43190000 x42a26666 x3e44c4c5} + {x431a999a x42a26666 x3e48c8c9} + {x431c999a x42a33333 x3e48c8c9} + {x431b0000 x42a33333 x3e3cbcbd}}} + {t x431283a9 x42a23a85} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush88 512 catmullrom + {cc + {f 2080} + {p + {x42d13333 x430f0000 x3da8a8a9}}} + {t x42d13333 x430f0000} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush87 512 catmullrom + {cc + {f 2080} + {p + {x42c33333 x42eccccd x3d30b0b1} + {x42c13333 x42ef3333 x3e0c8c8d} + {x42c13333 x42f1999a x3e109091} + {x42c40000 x42fd3333 x3e109091} + {x42c80000 x43040000 x3e149495} + {x42c9999a x4305cccd x3c808081}}} + {t x42c48888 x42fa6667} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush86 512 catmullrom + {cc + {f 2080} + {p + {x42700000 x42a1999a x3e109091} + {x42680000 x42a1999a x3e38b8b9} + {x42640000 x42a1999a x3e3cbcbd} + {x4258cccd x42a1999a x3e4ccccd} + {x42500000 x42a0cccd x3e48c8c9} + {x424b3333 x42a00000 x3e3cbcbd} + {x42480000 x429e6666 x3e3cbcbd} + {x42480000 x429c0000 x3e38b8b9} + {x42480000 x42986666 x3e3cbcbd} + {x42480000 x42960000 x3e40c0c1} + {x42540000 x42953333 x3e149495} + {x4258cccd x4296cccd x3db8b8b9} + {x425d999a x4296cccd x3db8b8b9} + {x425f3333 x4293999a x3e008081} + {x425f3333 x42900000 x3e20a0a1} + {x4269999a x428f3333 x3e24a4a5} + {x42700000 x42913333 x3dd0d0d1}}} + {t x42598d8e x4299cfd0} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush85 512 catmullrom + {cc + {f 2080} + {p + {x429a0000 x42aacccd x3d20a0a1} + {x429ccccd x42a93333 x3d989899} + {x429f3333 x42a7999a x3da0a0a1} + {x42a1999a x42a60000 x3d60e0e1} + {x42a40000 x42a33333 x3cc0c0c1} + {x42a60000 x42a1999a x3ca0a0a1}}} + {t x42a04444 x42a66667} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush84 512 catmullrom + {cc + {f 2080} + {p + {x428d999a x42ba0000 x3d909091} + {x428b3333 x42bb999a x3db8b8b9} + {x4289999a x42be0000 x3dc0c0c1} + {x42846666 x42c13333 x3dd8d8d9} + {x427c0000 x42c73333 x3e088889} + {x4271999a x42cb3333 x3e149495} + {x426ccccd x42ce0000 x3e109091} + {x42626666 x42d13333 x3e0c8c8d} + {x4258cccd x42d3999a x3e088889} + {x42480000 x42d8cccd x3e0c8c8d} + {x4244cccd x42da6666 x3e149495} + {x42433333 x42df3333 x3e109091} + {x42433333 x42e13333 x3e048485} + {x42400000 x42e2cccd x3d109091} + {x42400000 x42e00000 x3d909091} + {x42466666 x42de6666 x3d989899} + {x4249999a x42dccccd x3d808081}}} + {t x42624242 x42d19f9f} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush83 512 catmullrom + {cc + {f 2080} + {p + {x42f86666 x42ac6666 x3cc0c0c1} + {x42f4cccd x42aacccd x3df8f8f9} + {x42f4cccd x42ae0000 x3e58d8d9} + {x42f4cccd x42b00000 x3e40c0c1} + {x42f60000 x42b4cccd x3e44c4c5} + {x42f7999a x42b66666 x3e48c8c9} + {x42f93333 x42b93333 x3e48c8c9} + {x42facccd x42bb999a x3e4ccccd} + {x42fc6666 x42be0000 x3e48c8c9} + {x42fe0000 x42bf999a x3e48c8c9} + {x42ff3333 x42c20000 x3e50d0d1} + {x43013333 x42c40000 x3e54d4d5} + {x4302cccd x42c5999a x3e6ceced} + {x43046666 x42c66666 x3e70f0f1} + {x43056666 x42c66666 x3e7cfcfd} + {x43083333 x42c9999a x3e7cfcfd} + {x430ccccd x42cecccd x3e808081} + {x430fcccd x42d2cccd x3e828283} + {x4313999a x42d8cccd x3e808081} + {x43146666 x42da6666 x3dd0d0d1}}} + {t x4302947b x42c07ae1} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush82 512 catmullrom + {cc + {f 2080} + {p + {x42df3333 x4293999a x3d20a0a1} + {x42e13333 x42953333 x3e109091} + {x42e2cccd x4296cccd x3e0c8c8d} + {x42eccccd x429e6666 x3e109091} + {x42f0cccd x42a26666 x3e2cacad} + {x42f4cccd x42a60000 x3e38b8b9} + {x42f86666 x42a86666 x3e3cbcbd} + {x42f86666 x42aacccd x3e64e4e5} + {x42facccd x42ad3333 x3e2cacad} + {x42fc6666 x42af3333 x3e048485}}} + {t x42efc290 x42a23333} + {a r x3f2147ae g x3ea49937 b x3e0a0ce5 a 0 ro 0 go 0 bo 0 ao 0 bs x4259999a bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush33 512 catmullrom + {cc + {f 2080} + {p + {x42956666 x42920000 x3d50d0d1} + {x42930000 x42926666 x3d40c0c1} + {x428f999a x42930000 x3d909091} + {x428b999a x42930000 x3e088889} + {x4289999a x4292999a x3e149495} + {x4285999a x42926666 x3e24a4a5} + {x4283999a x42920000 x3e30b0b1} + {x42816666 x42920000 x3e34b4b5} + {x427b3333 x4291999a x3e4ccccd} + {x4275999a x42913333 x3e50d0d1} + {x426e0000 x42903333 x3e64e4e5} + {x4268cccd x428ecccd x3e6ceced} + {x42620000 x428d0000 x3e808081} + {x425c6666 x428c0000 x3e50d0d1}}} + {t x4281ea0e x429103a8} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush32 512 catmullrom + {cc + {f 2080} + {p + {x4287cccd x4291999a x3de0e0e1} + {x428c0000 x42926666 x3e109091} + {x428e3333 x42930000 x3e909091} + {x42903333 x42936666 x3e929293} + {x42940000 x42930000 x3e8c8c8d} + {x42963333 x42926666 x3e848485} + {x42980000 x42913333 x3e848485} + {x429acccd x4290999a x3e848485} + {x42a00000 x4290999a x3e5cdcdd}}} + {t x42937778 x429205b0} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush31 512 catmullrom + {cc + {f 2080} + {p + {x41b80000 x4284999a x3e4ccccd} + {x41db3333 x42850000 x3e74f4f5} + {x41f1999a x4285999a x3e808081} + {x42100000 x4286cccd x3e808081} + {x4220cccd x4286cccd x3e828283} + {x42273333 x4286cccd x3e38b8b9} + {x4231999a x42870000 x3e30b0b1} + {x42373333 x42876666 x3e1c9c9d} + {x423c0000 x42883333 x3e1c9c9d} + {x4243999a x4289999a x3e24a4a5} + {x4248cccd x428a999a x3e2cacad} + {x424d999a x428b999a x3e30b0b1} + {x42520000 x428ccccd x3e30b0b1} + {x42580000 x428e3333 x3e2cacad} + {x425e6666 x428ecccd x3e149495} + {x4266cccd x428ecccd x3ca0a0a1}}} + {t x42308666 x42892999} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush30 512 catmullrom + {cc + {f 2080} + {p + {x4223999a x42aecccd x3e2cacad} + {x421e6666 x42aecccd x3e929293} + {x4219999a x42aecccd x3e989899} + {x42120000 x42aecccd x3ea4a4a5} + {x420d999a x42aecccd x3e969697}}} + {t x4218a3d6 x42aecccd} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush29 512 catmullrom + {cc + {f 2080} + {p + {x4224cccd x42b0cccd x3cc0c0c1} + {x422c0000 x42b13333 x3de8e8e9} + {x4231999a x42b1999a x3e28a8a9} + {x4235999a x42b1999a x3e28a8a9} + {x423c0000 x42b0cccd x3e30b0b1} + {x4240cccd x42b0cccd x3e30b0b1} + {x4248cccd x42b0cccd x3e34b4b5} + {x424ccccd x42b0cccd x3e2cacad} + {x42560000 x42b06666 x3e28a8a9} + {x425c6666 x42b03333 x3e2cacad} + {x4264cccd x42afcccd x3e2cacad} + {x4268cccd x42afcccd x3e2cacad} + {x426d3333 x42af0000 x3e24a4a5} + {x4272cccd x42ae6666 x3e24a4a5} + {x42773333 x42ad6666 x3e28a8a9} + {x427b3333 x42ad0000 x3e2cacad} + {x42800000 x42ad0000 x3e40c0c1} + {x42823333 x42ad0000 x3e44c4c5} + {x42856666 x42ac999a x3e48c8c9} + {x42876666 x42ac0000 x3e48c8c9} + {x428a3333 x42a9cccd x3e50d0d1}}} + {t x425f3332 x42af15f2} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush28 512 catmullrom + {cc + {f 2080} + {p + {x41ec0000 x42ad0000 x3db0b0b1} + {x41f5999a x42ad6666 x3e8a8a8b} + {x42006666 x42ad999a x3e888889} + {x4204cccd x42ae0000 x3e808081} + {x420b999a x42ae6666 x3e48c8c9} + {x42100000 x42aecccd x3da8a8a9}}} + {t x4202eeef x42addddf} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush27 512 catmullrom + {cc + {f 2080} + {p + {x42d93333 x426e6666 x3e2cacad} + {x42dc6666 x4270cccd x3e44c4c5} + {x42de6666 x4271999a x3e58d8d9} + {x42e0999a x4271999a x3e68e8e9} + {x42e5cccd x4271999a x3e6ceced} + {x42e83333 x4271999a x3e70f0f1} + {x42eacccd x4271999a x3e6ceced} + {x42ef0000 x426f3333 x3e6ceced} + {x42f3cccd x426c6666 x3e5cdcdd} + {x42f66666 x426b3333 x3e58d8d9} + {x42f86666 x4269999a x3e58d8d9} + {x42facccd x4267999a x3e58d8d9} + {x42fe0000 x4265999a x3e5cdcdd} + {x4300199a x4264cccd x3e5cdcdd} + {x43020000 x42633333 x3e5cdcdd} + {x43044ccd x42606666 x3e60e0e1} + {x4306999a x425d999a x3e60e0e1} + {x43080000 x425d3333 x3e5cdcdd} + {x430a999a x425a6666 x3e60e0e1} + {x430b999a x42580000 x3e4ccccd} + {x430d199a x4256cccd x3e50d0d1} + {x430e8000 x42540000 x3e4ccccd} + {x43100000 x42513333 x3e4ccccd} + {x43114ccd x424f999a x3e54d4d5} + {x43128000 x424f3333 x3e60e0e1} + {x4314199a x424e6666 x3e60e0e1} + {x4315199a x424d999a x3e5cdcdd} + {x43160000 x424b999a x3e40c0c1} + {x4316e666 x4249999a x3e54d4d5} + {x4317e666 x42480000 x3e50d0d1} + {x43194ccd x42453333 x3e44c4c5} + {x431ab333 x42433333 x3e44c4c5} + {x431c0000 x4241999a x3e44c4c5} + {x431d0000 x4240cccd x3e44c4c5} + {x431e199a x423f999a x3e48c8c9} + {x431f8000 x423d999a x3e44c4c5} + {x43216666 x423acccd x3e44c4c5} + {x4322999a x423acccd x3e4ccccd}}} + {t x4308ec78 x4259286d} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush26 512 catmullrom + {cc + {f 2080} + {p + {x4327e666 x428c0000 x3d70f0f1} + {x432b199a x428d6666 x3d888889} + {x432c4ccd x428d6666 x3db8b8b9} + {x432d8000 x428dcccd x3dc0c0c1} + {x432e999a x428e6666 x3e008081} + {x432f999a x428f3333 x3e40c0c1} + {x4330b333 x428e3333 x3e5cdcdd} + {x4331b333 x428e3333 x3e60e0e1} + {x43308000 x428ccccd x3e8c8c8d} + {x432f6666 x428c6666 x3e909091} + {x432de666 x428c0000 x3e909091} + {x432ccccd x428b999a x3e969697} + {x432bcccd x428b3333 x3e9e9e9f} + {x432ab333 x428b3333 x3ea2a2a3} + {x4328e666 x428b0000 x3ea2a2a3} + {x4327e666 x428b0000 x3ea2a2a3} + {x4326cccd x428b0000 x3e9c9c9d} + {x43256666 x428b0000 x3e909091} + {x4323e666 x428b0000 x3e8e8e8f} + {x4321999a x428b0000 x3e70f0f1} + {x43208000 x428b0000 x3e0c8c8d} + {x431f8000 x428b0000 x3e048485} + {x431e6666 x428b3333 x3e088889} + {x431cb333 x428c6666 x3e0c8c8d} + {x431b999a x428d6666 x3e20a0a1} + {x431a6666 x428e6666 x3e24a4a5} + {x4317cccd x42903333 x3e24a4a5} + {x4316b333 x4290999a x3e20a0a1} + {x4314cccd x42910000 x3e30b0b1} + {x43138000 x42910000 x3e40c0c1} + {x43124ccd x42910000 x3e48c8c9} + {x4310e666 x42910000 x3e48c8c9} + {x430f0000 x42910000 x3e3cbcbd} + {x430c8000 x4291999a x3e30b0b1} + {x430b8000 x4292999a x3e38b8b9} + {x43096666 x42946666 x3e3cbcbd} + {x4307999a x4294cccd x3e30b0b1} + {x43048000 x42940000 x3e2cacad} + {x4302e666 x4293cccd x3e20a0a1} + {x4301999a x42936666 x3e189899} + {x42fd6666 x42936666 x3e1c9c9d} + {x42fb3333 x42936666 x3e38b8b9} + {x42f76666 x42936666 x3e58d8d9} + {x42f4999a x42930000 x3e6ceced} + {x42f16666 x42920000 x3e70f0f1} + {x42ee3333 x42903333 x3e70f0f1} + {x42ec3333 x428ecccd x3e78f8f9} + {x42e9999a x428dcccd x3e74f4f5}}} + {t x43188b33 x428ee887} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush25 512 catmullrom + {cc + {f 2080} + {p + {x4320e666 x428b0000 x3c008081} + {x43230000 x428b0000 x3c40c0c1}}} + {t x4321f333 x428b0000} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush24 512 catmullrom + {cc + {f 2080} + {p + {x42f9cccd x42920000 x3e0c8c8d} + {x42fc999a x42926666 x3e0c8c8d} + {x4300199a x42930000 x3e149495} + {x43018000 x42930000 x3e189899} + {x43033333 x42930000 x3e1c9c9d} + {x4304cccd x42930000 x3e1c9c9d} + {x43063333 x42930000 x3e34b4b5} + {x43090000 x4292999a x3e3cbcbd} + {x430a999a x4292999a x3e44c4c5} + {x430ce666 x42920000 x3e44c4c5} + {x430e4ccd x42913333 x3e48c8c9} + {x430fb333 x4290999a x3e44c4c5} + {x43114ccd x428fcccd x3e3cbcbd} + {x43124ccd x428f999a x3e28a8a9} + {x43146666 x428e6666 x3e20a0a1} + {x43158000 x428e3333 x3e189899} + {x4317199a x428dcccd x3dd8d8d9}}} + {t x430a3dbe x42914e4e} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush23 512 catmullrom + {cc + {f 2080} + {p + {x432ccccd x42bd3333 x3d989899} + {x432bcccd x42bccccd x3de0e0e1} + {x432a6666 x42bc6666 x3e109091} + {x4329199a x42bc6666 x3e50d0d1} + {x4328199a x42bc6666 x3e50d0d1} + {x4326b333 x42bc6666 x3e4ccccd} + {x43256666 x42bc6666 x3e4ccccd} + {x43240000 x42bccccd x3e54d4d5} + {x4322cccd x42bccccd x3e50d0d1} + {x4320e666 x42bc6666 x3e50d0d1} + {x431fcccd x42bc0000 x3e48c8c9} + {x431ecccd x42bbcccd x3e2cacad} + {x431c199a x42bbcccd x3e20a0a1} + {x4319e666 x42bbcccd x3e189899} + {x43184ccd x42bbcccd x3e1c9c9d} + {x4317199a x42bbcccd x3e28a8a9} + {x43160000 x42bbcccd x3e3cbcbd} + {x43146666 x42bb6666 x3e50d0d1} + {x4312b333 x42ba999a x3e5cdcdd} + {x4310999a x42b9999a x3e5cdcdd} + {x430f3333 x42b93333 x3e50d0d1} + {x430de666 x42b90000 x3e50d0d1} + {x430c8000 x42b90000 x3e50d0d1} + {x430acccd x42b83333 x3e30b0b1} + {x43096666 x42b7cccd x3dc8c8c9}}} + {t x431bd1ec x42bb5812} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush22 512 catmullrom + {cc + {f 2080} + {p + {x43240000 x42bc6666 x3b808081} + {x43254ccd x42bc6666 x3ca0a0a1} + {x43268000 x42bccccd x3cc0c0c1}}} + {t x43254444 x42bc8888} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush21 512 catmullrom + {cc + {f 2080} + {p + {x43096666 x42b90000 x3df0f0f1} + {x430acccd x42ba6666 x3e5cdcdd} + {x430d199a x42bb6666 x3e54d4d5} + {x430f8000 x42bc0000 x3e50d0d1} + {x4310999a x42bc6666 x3e30b0b1} + {x4311999a x42bc6666 x3e149495} + {x4312cccd x42bc6666 x3de0e0e1} + {x4314cccd x42bc0000 x3dc8c8c9} + {x4315cccd x42bbcccd x3df0f0f1} + {x4317999a x42bbcccd x3e088889} + {x4319b333 x42bbcccd x3e088889} + {x431b199a x42bc0000 x3da8a8a9} + {x431c8000 x42bc0000 x3d50d0d1}}} + {t x43132d4a x42bba56b} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush20 512 catmullrom + {cc + {f 2080} + {p + {x42823333 x42eacccd x3dd0d0d1} + {x4282999a x42edcccd x3e048485} + {x4282cccd x42f00000 x3e149495} + {x4280cccd x42f06666 x3e60e0e1} + {x427ccccd x42f00000 x3e28a8a9}}} + {t x42815c29 x42ee999a} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush19 512 catmullrom + {cc + {f 2080} + {p + {x42800000 x42eb6666 x3d109091} + {x42823333 x42ea0000 x3de0e0e1} + {x42843333 x42e8999a x3e0c8c8d} + {x42866666 x42e63333 x3e109091} + {x42876666 x42e40000 x3e2cacad} + {x42886666 x42e1999a x3e30b0b1} + {x428a3333 x42df3333 x3e38b8b9} + {x428c0000 x42dd6666 x3e4ccccd} + {x428dcccd x42db999a x3e5cdcdd} + {x428f3333 x42d9cccd x3e60e0e1} + {x4290999a x42d83333 x3e60e0e1} + {x42926666 x42d66666 x3e64e4e5} + {x42940000 x42d43333 x3e6ceced} + {x4296cccd x42d23333 x3e6ceced} + {x4298999a x42d13333 x3e68e8e9} + {x429b0000 x42cfcccd x3e6ceced} + {x429ccccd x42ce6666 x3e6ceced} + {x429e999a x42cd3333 x3e6ceced} + {x42a16666 x42cb999a x3e6ceced} + {x42a33333 x42ca6666 x3e50d0d1} + {x42a66666 x42c7999a x3e50d0d1} + {x42a80000 x42c5999a x3e50d0d1} + {x42a96666 x42c36666 x3e50d0d1} + {x42ab999a x42c16666 x3e54d4d5} + {x42ad999a x42bf999a x3e50d0d1} + {x42af6666 x42bd6666 x3e54d4d5} + {x42b1cccd x42ba0000 x3e50d0d1} + {x42b3999a x42b7cccd x3e50d0d1} + {x42b56666 x42b66666 x3e50d0d1} + {x42b7cccd x42b4cccd x3e50d0d1} + {x42b93333 x42b2999a x3e50d0d1} + {x42ba999a x42af6666 x3e50d0d1} + {x42bccccd x42ac3333 x3e4ccccd} + {x42becccd x42aa999a x3e6ceced} + {x42c0999a x42a86666 x3e6ceced} + {x42c1999a x42a60000 x3e70f0f1} + {x42c2cccd x42a43333 x3e7cfcfd} + {x42c63333 x42a3cccd x3e868687} + {x42c80000 x42a2cccd x3e6ceced}}} + {t x42a374d7 x42c76ba5} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush18 512 catmullrom + {cc + {f 2080} + {p + {x428a3333 x4310b333 x3dc0c0c1} + {x428b3333 x430f3333 x3df8f8f9} + {x428c0000 x430d999a x3e34b4b5} + {x428ccccd x430c6666 x3e38b8b9} + {x428d6666 x430a999a x3e38b8b9} + {x428e3333 x43093333 x3e3cbcbd} + {x428fcccd x4307999a x3e38b8b9} + {x4291999a x4306999a x3e38b8b9} + {x42936666 x4305b333 x3e38b8b9} + {x42956666 x43048000 x3e38b8b9} + {x42983333 x4302e666 x3e38b8b9} + {x429acccd x4301999a x3e38b8b9} + {x429ccccd x4300199a x3e38b8b9} + {x429dcccd x42fe6666 x3e38b8b9} + {x429f999a x42fb999a x3e3cbcbd} + {x42a16666 x42f96666 x3e3cbcbd} + {x42a3999a x42f6999a x3e48c8c9} + {x42a60000 x42f3999a x3e4ccccd} + {x42a80000 x42f16666 x3e4ccccd} + {x42ab3333 x42ef0000 x3e58d8d9} + {x42ae0000 x42ec3333 x3e60e0e1} + {x42b03333 x42ea6666 x3e64e4e5} + {x42b2999a x42e8999a x3e68e8e9} + {x42b56666 x42e63333 x3e70f0f1} + {x42b7999a x42e53333 x3e989899} + {x42b93333 x42e3cccd x3e9c9c9d} + {x42bb0000 x42e26666 x3eacacad} + {x42bccccd x42e10000 x3eb6b6b7} + {x42c03333 x42dd0000 x3eb6b6b7} + {x42c20000 x42db3333 x3ebcbcbd} + {x42c36666 x42d9999a x3eb8b8b9}}} + {t x42a3bc49 x42fa8c64} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush17 512 catmullrom + {cc + {f 2080} + {p + {x42a26666 x4319e666 x3dc0c0c1} + {x42a3cccd x4318199a x3e048485} + {x42a50000 x4316e666 x3e149495} + {x42a6999a x43158000 x3e24a4a5} + {x42a76666 x43146666 x3e3cbcbd} + {x42a86666 x43136666 x3e44c4c5} + {x42aa3333 x4311199a x3e40c0c1} + {x42ac0000 x430f8000 x3e44c4c5} + {x42ad999a x430de666 x3e48c8c9} + {x42af0000 x430cb333 x3e34b4b5} + {x42b06666 x430b199a x3e20a0a1} + {x42b1999a x4309e666 x3e20a0a1} + {x42b30000 x4308b333 x3e20a0a1} + {x42b4cccd x4307999a x3e24a4a5} + {x42b66666 x4306999a x3e24a4a5} + {x42b7999a x4305b333 x3e24a4a5} + {x42b8999a x4304cccd x3e20a0a1} + {x42b9999a x4303e666 x3e24a4a5} + {x42bb0000 x4302e666 x3e30b0b1} + {x42bd3333 x4301199a x3e30b0b1} + {x42bf3333 x42ff6666 x3e44c4c5} + {x42c26666 x42fd999a x3e6ceced} + {x42c43333 x42fc999a x3e6ceced} + {x42c6999a x42fb3333 x3e70f0f1} + {x42c90000 x42f93333 x3e74f4f5}}} + {t x42b3ae14 x4309de36} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush16 512 catmullrom + {cc + {f 2080} + {p + {x42f70000 x4313b333 x3d50d0d1} + {x42f60000 x4312cccd x3de0e0e1} + {x42f33333 x43116666 x3e088889} + {x42f10000 x43106666 x3e24a4a5} + {x42ec3333 x430e4ccd x3e50d0d1} + {x42e9999a x430d199a x3e58d8d9} + {x42e80000 x430c6666 x3e5cdcdd} + {x42e4cccd x430b199a x3e60e0e1} + {x42e1999a x430a199a x3e64e4e5} + {x42decccd x43090000 x3e68e8e9} + {x42dccccd x43084ccd x3e68e8e9} + {x42db0000 x4307cccd x3e64e4e5} + {x42d93333 x4306e666 x3e64e4e5} + {x42d70000 x43060000 x3e60e0e1} + {x42d50000 x43053333 x3e5cdcdd} + {x42d33333 x43044ccd x3e64e4e5} + {x42d23333 x43036666 x3e50d0d1} + {x42cf0000 x4301cccd x3e70f0f1} + {x42cd999a x4300cccd x3e7cfcfd} + {x42cbcccd x4300199a x3e7cfcfd} + {x42ca3333 x42fecccd x3e7cfcfd} + {x42c86666 x42fd6666 x3e7cfcfd} + {x42c6999a x42fc0000 x3e808081} + {x42c4cccd x42fa999a x3e808081}}} + {t x42dbe000 x43078333} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush15 512 catmullrom + {cc + {f 2080} + {p + {x43076666 x430d199a x3ca0a0a1} + {x4306e666 x430c3333 x3dd0d0d1} + {x43066666 x430acccd x3e088889} + {x4305e666 x4309b333 x3e189899} + {x43053333 x4308cccd x3e38b8b9} + {x4303e666 x43074ccd x3e3cbcbd} + {x4302e666 x4305b333 x3e3cbcbd} + {x4301cccd x43048000 x3e40c0c1} + {x4301199a x4303999a x3e2cacad} + {x4300199a x43028000 x3e24a4a5} + {x42fd0000 x4300e666 x3e24a4a5} + {x42facccd x42ffcccd x3e0c8c8d} + {x42f70000 x42fc3333 x3e048485} + {x42f3999a x42fa3333 x3e0c8c8d} + {x42f06666 x42f80000 x3de0e0e1} + {x42ee3333 x42f6999a x3de0e0e1} + {x42eb6666 x42f50000 x3e28a8a9} + {x42e9999a x42f3cccd x3e3cbcbd} + {x42e63333 x42f1cccd x3e48c8c9} + {x42e3cccd x42f00000 x3e4ccccd} + {x42e20000 x42ee999a x3e4ccccd} + {x42dd6666 x42eb0000 x3e4ccccd} + {x42db3333 x42e90000 x3e48c8c9} + {x42d93333 x42e7999a x3e30b0b1} + {x42d76666 x42e56666 x3e28a8a9} + {x42d56666 x42e30000 x3e34b4b5} + {x42d33333 x42e13333 x3e34b4b5} + {x42cfcccd x42de3333 x3e38b8b9} + {x42cd3333 x42db0000 x3e58d8d9} + {x42cb999a x42d86666 x3e58d8d9} + {x42c90000 x42d5999a x3e58d8d9} + {x42c6999a x42d2cccd x3e58d8d9}}} + {t x42ecf99b x42f6db33} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush14 512 catmullrom + {cc + {f 2080} + {p + {x42e46666 x42c16666 x3c008081} + {x42e5cccd x42c43333 x3dc0c0c1} + {x42e8999a x42c7999a x3e2cacad} + {x42eacccd x42c9cccd x3e109091} + {x42eccccd x42cbcccd x3d20a0a1} + {x42ef0000 x42cd999a x3d109091} + {x42f10000 x42cfcccd x3d888889} + {x42f33333 x42d16666 x3dc0c0c1} + {x42f50000 x42d33333 x3dd8d8d9} + {x42f70000 x42d5999a x3df0f0f1} + {x42f9cccd x42d86666 x3e008081} + {x42fc0000 x42da3333 x3df0f0f1} + {x42fe6666 x42dc6666 x3df0f0f1} + {x4300999a x42de6666 x3e189899} + {x43018000 x42dfcccd x3e2cacad} + {x43028000 x42e1999a x3e30b0b1} + {x4303999a x42e3cccd x3e30b0b1} + {x43048000 x42e5cccd x3e34b4b5} + {x43054ccd x42e73333 x3e30b0b1} + {x43066666 x42e96666 x3e1c9c9d} + {x43074ccd x42eb6666 x3e24a4a5} + {x4308199a x42ed999a x3e38b8b9} + {x43088000 x42f00000 x3e3cbcbd}}} + {t x42fbc1ad x42d99526} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush13 512 catmullrom + {cc + {f 2080} + {p + {x42d00000 x42a96666 x3d40c0c1} + {x42d2cccd x42ad999a x3d888889} + {x42d43333 x42af6666 x3de8e8e9} + {x42d66666 x42b1999a x3dd8d8d9} + {x42d86666 x42b33333 x3d989899} + {x42d9cccd x42b50000 x3d888889} + {x42dc0000 x42b7999a x3d50d0d1} + {x42e03333 x42bc0000 x3d40c0c1}}} + {t x42d7799a x42b27999} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush12 512 catmullrom + {cc + {f 2080} + {p + {x42ca6666 x432fcccd x3e3cbcbd} + {x42cacccd x43310000 x3e808081} + {x42cb999a x4332199a x3e8e8e8f} + {x42cbcccd x43340000 x3e828283} + {x42cbcccd x4335199a x3e60e0e1} + {x42cbcccd x4336cccd x3e54d4d5} + {x42cbcccd x4337e666 x3e50d0d1} + {x42cbcccd x43396666 x3e54d4d5} + {x42cb999a x433b3333 x3e58d8d9} + {x42cb3333 x433d199a x3e74f4f5} + {x42cb3333 x433e3333 x3e7cfcfd} + {x42cb3333 x433f3333 x3e7cfcfd} + {x42c90000 x433fcccd x3e64e4e5}}} + {t x42cb3b14 x43381f82} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush11 512 catmullrom + {cc + {f 2080} + {p + {x42c2cccd x428f3333 x3d808081} + {x42c36666 x42953333 x3d909091} + {x42c4cccd x42983333 x3df8f8f9} + {x42c4cccd x429b0000 x3e008081} + {x42c4cccd x429d3333 x3e0c8c8d} + {x42c4cccd x42a00000 x3e34b4b5} + {x42c63333 x42a60000 x3e38b8b9} + {x42c63333 x42a86666 x3e30b0b1} + {x42c63333 x42aacccd x3e34b4b5} + {x42c63333 x42aecccd x3e30b0b1} + {x42c5cccd x42b3999a x3e34b4b5} + {x42c5cccd x42b7999a x3e34b4b5} + {x42c6999a x42ba0000 x3e30b0b1} + {x42c6999a x42bd3333 x3e30b0b1} + {x42c6999a x42bf999a x3e34b4b5} + {x42c63333 x42c20000 x3e60e0e1} + {x42c46666 x42c46666 x3e6ceced} + {x42c43333 x42c70000 x3e74f4f5} + {x42c43333 x42c9cccd x3e74f4f5} + {x42c43333 x42cbcccd x3e70f0f1} + {x42c43333 x42cf0000 x3e70f0f1} + {x42c43333 x42d23333 x3e6ceced} + {x42c46666 x42d66666 x3e68e8e9} + {x42c46666 x42d86666 x3e6ceced} + {x42c43333 x42db3333 x3e6ceced} + {x42c2cccd x42df3333 x3e68e8e9} + {x42c20000 x42e20000 x3e6ceced} + {x42c20000 x42e46666 x3e70f0f1} + {x42c26666 x42e6cccd x3e70f0f1} + {x42c36666 x42e96666 x3e6ceced} + {x42c46666 x42eccccd x3e58d8d9} + {x42c4cccd x42ef3333 x3e44c4c5} + {x42c4cccd x42f1cccd x3e44c4c5} + {x42c53333 x42f43333 x3e44c4c5} + {x42c53333 x42f66666 x3e48c8c9} + {x42c5999a x42f86666 x3e4ccccd} + {x42c5999a x42fa999a x3e48c8c9} + {x42c5cccd x42fd0000 x3e48c8c9} + {x42c70000 x4300cccd x3e40c0c1} + {x42c73333 x43026666 x3e34b4b5} + {x42c7999a x4303999a x3e189899} + {x42c7999a x43058000 x3da8a8a9} + {x42c80000 x4307199a x3dc0c0c1} + {x42c86666 x4308199a x3e008081} + {x42c8cccd x43093333 x3e109091} + {x42c8cccd x430a6666 x3e1c9c9d} + {x42c90000 x430b8000 x3e24a4a5} + {x42c96666 x430d3333 x3e30b0b1} + {x42c96666 x430f8000 x3e34b4b5} + {x42c96666 x43114ccd x3e50d0d1} + {x42c96666 x43124ccd x3e64e4e5} + {x42c96666 x43143333 x3e64e4e5} + {x42c96666 x43166666 x3e50d0d1} + {x42c96666 x4318199a x3e44c4c5} + {x42c96666 x431a3333 x3e38b8b9} + {x42c96666 x431b999a x3e34b4b5} + {x42c96666 x431d0000 x3e48c8c9} + {x42c96666 x431e6666 x3e4ccccd} + {x42c96666 x431f8000 x3e38b8b9} + {x42c96666 x43208000 x3e38b8b9} + {x42c96666 x4321999a x3e38b8b9} + {x42c96666 x43230000 x3e50d0d1} + {x42c96666 x43246666 x3e50d0d1} + {x42c96666 x43256666 x3e54d4d5} + {x42c9cccd x43278000 x3e60e0e1} + {x42ca6666 x4328cccd x3e64e4e5} + {x42cacccd x4329cccd x3e68e8e9} + {x42cb999a x432b6666 x3e50d0d1} + {x42cb999a x432c8000 x3e4ccccd} + {x42cb3333 x432d8000 1} + {x42cb3333 x432eb333 1} + {x42cb999a x432fcccd 1}}} + {t x42c6f3ee x42fb93e9} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush10 512 catmullrom + {cc + {f 2080} + {p + {x42c30000 x4275999a x3dc8c8c9} + {x42c2cccd x4271999a x3e109091} + {x42c36666 x42773333 x3e38b8b9} + {x42c30000 x427e0000 x3e38b8b9} + {x42c30000 x4284999a x3e30b0b1} + {x42c2cccd x42870000 x3da8a8a9} + {x42c2cccd x428a3333 x3d40c0c1} + {x42c2cccd x428ccccd x3d20a0a1}}} + {t x42c2f334 x4282199a} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush9 512 catmullrom + {cc + {f 2080} + {p + {x419e6666 x43063333 x3e0c8c8d} + {x41a9999a x4305b333 x3e30b0b1} + {x41b4cccd x4303cccd x3e40c0c1} + {x41ba6666 x4302e666 x3e44c4c5} + {x41c5999a x43018000 x3e44c4c5} + {x41ce6666 x43003333 x3e44c4c5} + {x41d80000 x42fd6666 x3e44c4c5} + {x41df3333 x42fa3333 x3e30b0b1} + {x41e4cccd x42f80000 x3e30b0b1} + {x41ec0000 x42f66666 x3e2cacad} + {x41f33333 x42f43333 x3e2cacad} + {x41f8cccd x42f26666 x3e34b4b5} + {x41ff3333 x42f00000 x3e38b8b9} + {x42040000 x42edcccd x3e3cbcbd} + {x4209999a x42eb0000 x3e40c0c1} + {x42106666 x42e8999a x3e40c0c1} + {x42140000 x42e6cccd x3e40c0c1} + {x4218cccd x42e46666 x3e40c0c1} + {x421e0000 x42e2999a x3e3cbcbd} + {x42220000 x42e13333 x3e3cbcbd} + {x42293333 x42de6666 x3e2cacad} + {x422ecccd x42db999a x3e008081} + {x42326666 x42da999a x3d909091} + {x423d999a x42d60000 x3d909091} + {x42433333 x42d33333 x3dc0c0c1} + {x424c6666 x42d00000 x3d30b0b1} + {x4257999a x42cbcccd x3e0c8c8d} + {x425d3333 x42c96666 x3e40c0c1} + {x4262cccd x42c6999a x3e58d8d9} + {x42686666 x42c2cccd x3e54d4d5} + {x426a6666 x42c10000 x3e54d4d5} + {x4271999a x42bc6666 x3e40c0c1} + {x42766666 x42b9999a x3e34b4b5} + {x427b3333 x42b5cccd x3e28a8a9} + {x427ecccd x42b40000 x3d30b0b1} + {x42813333 x42b1999a x3da0a0a1} + {x4283999a x42ad999a x3e189899} + {x42856666 x42ac3333 x3e38b8b9} + {x42886666 x42a96666 x3e28a8a9} + {x428a999a x42a70000 x3e008081} + {x428ccccd x42a6999a x3e048485} + {x428f3333 x42a66666 x3e1c9c9d} + {x4291999a x42a50000 x3e1c9c9d} + {x42936666 x42a2cccd x3e30b0b1} + {x4296999a x42a00000 x3e70f0f1} + {x42990000 x429e3333 x3e78f8f9} + {x429b6666 x429c3333 x3e78f8f9} + {x429d3333 x429acccd x3e4ccccd} + {x429f999a x4298999a x3e4ccccd} + {x42a23333 x42963333 x3e48c8c9} + {x42a4999a x42940000 x3e969697} + {x42a7cccd x4290999a x3ea2a2a3} + {x42a9cccd x428e6666 x3ea6a6a7} + {x42ab3333 x428ccccd x3eaaaaab} + {x42ad0000 x428a999a x3eaaaaab} + {x42aecccd x42893333 x3eaaaaab} + {x42b03333 x42876666 x3eaeaeaf} + {x42b13333 x42850000 x3ebcbcbd} + {x42b23333 x4282cccd x3ecacacb} + {x42b40000 x4280cccd x3ed2d2d3} + {x42b50000 x427e0000 x3edadadb} + {x42b63333 x427a6666 x3ed8d8d9} + {x42b83333 x42766666 x3ed6d6d7} + {x42b9999a x4270cccd x3ed6d6d7} + {x42bbcccd x426d3333 x3ed6d6d7} + {x42bdcccd x426a6666 x3ec8c8c9} + {x42be3333 x4264cccd x3ec0c0c1} + {x42be999a x42606666 x3ecacacb} + {x42c00000 x425c6666 x3ed8d8d9} + {x42c26666 x4259999a x3edcdcdd} + {x42c3cccd x42553333 x3ef8f8f9} + {x42c4cccd x42506666 x3efefeff} + {x42c70000 x424f3333 x3f008081} + {x42c86666 x42533333 x3ef0f0f1} + {x42c90000 x424f3333 x3f159596} + {x42ca3333 x4248cccd x3f1e9e9f}}} + {t x42811e52 x42b294e3} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush8 512 catmullrom + {cc + {f 2080} + {p + {x42c43333 x42506666 x3dd0d0d1} + {x42c70000 x42553333 x3d909091} + {x42c8cccd x4259999a x3db8b8b9} + {x42cc3333 x42606666 x3e0c8c8d} + {x42cf6666 x4265999a x3e34b4b5} + {x42d23333 x426b3333 x3e44c4c5} + {x42d5999a x4270cccd x3e50d0d1} + {x42d86666 x42766666 x3e58d8d9} + {x42db3333 x427a6666 x3e64e4e5} + {x42ddcccd x427e0000 x3e64e4e5} + {x42decccd x42813333 x3e64e4e5} + {x42e13333 x42833333 x3e64e4e5} + {x42e4cccd x42860000 x3e40c0c1} + {x42e6999a x4287cccd x3e40c0c1} + {x42e80000 x4289999a x3e68e8e9} + {x42ebcccd x428dcccd x3e70f0f1} + {x42ee999a x4290999a x3e70f0f1} + {x42f00000 x42926666 x3e70f0f1} + {x42f2cccd x42956666 x3e808081} + {x42f50000 x4297999a x3e8a8a8b} + {x42f70000 x42996666 x3e8a8a8b} + {x42fa999a x429b0000 x3e888889} + {x42fd999a x429d999a x3e808081} + {x42ffcccd x429f3333 x3e6ceced} + {x4300e666 x42a00000 x3e34b4b5} + {x43020000 x42a1cccd x3e2cacad} + {x43033333 x42a43333 x3dc8c8c9} + {x4304199a x42a6999a x3dc8c8c9} + {x4304999a x42a8cccd x3df8f8f9} + {x43050000 x42ab999a x3df8f8f9} + {x43054ccd x42ad999a x3e0c8c8d} + {x43060000 x42af6666 x3e1c9c9d} + {x4307199a x42b1999a x3e20a0a1} + {x43080000 x42b3999a x3e28a8a9} + {x4308b333 x42b56666 x3e28a8a9} + {x43093333 x42b73333 x3e28a8a9} + {x4309b333 x42b93333 x3e34b4b5} + {x430b199a x42bc0000 x3e38b8b9} + {x430ce666 x42be999a x3e48c8c9} + {x430de666 x42c03333 x3e4ccccd} + {x430ecccd x42c16666 x3e54d4d5} + {x43103333 x42c3cccd x3e64e4e5} + {x43114ccd x42c53333 x3e68e8e9} + {x43128000 x42c70000 x3e64e4e5} + {x4313b333 x42c90000 x3e5cdcdd} + {x4314999a x42ca6666 x3e5cdcdd} + {x43158000 x42cc3333 x3e58d8d9} + {x43168000 x42ce0000 x3e58d8d9} + {x4317999a x42d00000 x3e2cacad} + {x4318cccd x42d23333 x3e048485} + {x4319e666 x42d40000 x3e0c8c8d} + {x431c0000 x42d76666 x3e088889} + {x431ccccd x42d8cccd x3de8e8e9} + {x431db333 x42db3333 x3de8e8e9} + {x431e3333 x42dd0000 x3da0a0a1} + {x431ee666 x42df3333 x3df0f0f1} + {x431f999a x42e13333 x3e149495} + {x43208000 x42e36666 x3e189899} + {x4322199a x42e73333 x3e189899} + {x43238000 x42ea0000 x3e109091} + {x43246666 x42ec3333 x3e0c8c8d} + {x43254ccd x42edcccd x3dc8c8c9}}} + {t x430576eb x42acf473} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e322d0e bs x404ccccd bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush4 512 catmullrom + {cc + {f 2080} + {p + {x42b7999a x425e6666 x3e58d8d9} + {x42b9999a x4262cccd x3e969697} + {x42bb6666 x4266cccd x3e929293} + {x42bd3333 x426b3333 x3e909091} + {x42bdcccd x4266cccd x3e9a9a9b} + {x42c00000 x4266cccd x3e989899} + {x42c20000 x4266cccd x3e949495} + {x42c46666 x4266cccd x3e929293} + {x42c70000 x42660000 x3e929293} + {x42c96666 x4265999a x3e78f8f9} + {x42cb3333 x42633333 x3e5cdcdd} + {x42cd3333 x42600000 x3e58d8d9} + {x42cfcccd x425e6666 x3e7cfcfd} + {x42ce0000 x425c6666 x3ea4a4a5} + {x42cc3333 x425a6666 x3eaeaeaf} + {x42cc3333 x425e6666 x3e6ceced} + {x42cbcccd x4262cccd x3e70f0f1} + {x42c9cccd x42660000 x3e70f0f1} + {x42c80000 x426b3333 x3e70f0f1} + {x42c63333 x42700000 x3e70f0f1} + {x42c5999a x42773333 x3e70f0f1} + {x42c5999a x427b3333 x3e70f0f1} + {x42c4cccd x427f999a x3e78f8f9} + {x42c30000 x4280cccd x3e7cfcfd} + {x42c0999a x42813333 x3e6ceced} + {x42c20000 x4282cccd x3e868687} + {x42c30000 x4284999a x3e74f4f5} + {x42c46666 x42870000 x3e74f4f5} + {x42c53333 x42893333 x3e828283} + {x42c5999a x428b3333 x3e808081} + {x42c63333 x428d6666 x3e828283} + {x42c5cccd x428f999a x3e828283} + {x42c5cccd x4291999a x3e74f4f5} + {x42c80000 x42940000 x3e64e4e5} + {x42c90000 x4295cccd x3e50d0d1} + {x42c96666 x42983333 x3e4ccccd} + {x42c96666 x429b6666 x3e848485} + {x42c96666 x429d999a x3e848485} + {x42c86666 x429f999a x3e8c8c8d} + {x42c7999a x42a1cccd x3e8c8c8d} + {x42c7999a x42a3cccd x3e808081} + {x42c73333 x42a60000 x3e2cacad} + {x42c6999a x42a80000 x3e30b0b1} + {x42c5999a x42a9cccd x3e30b0b1} + {x42c53333 x42ac0000 x3db8b8b9} + {x42c53333 x42ae0000 x3dc8c8c9} + {x42c53333 x42b0cccd x3e1c9c9d} + {x42c53333 x42b30000 x3e0c8c8d} + {x42c53333 x42b50000 x3dd0d0d1} + {x42c53333 x42b7999a x3de0e0e1} + {x42c5999a x42b9999a x3db0b0b1} + {x42c5999a x42bc0000 x3e2cacad} + {x42c5999a x42be3333 x3e40c0c1} + {x42c5999a x42c03333 x3e44c4c5} + {x42c5999a x42c2cccd x3e149495} + {x42c46666 x42c5cccd x3dc8c8c9}}} + {t x42c5c0e8 x428eaccd} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e418937 bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush3 512 catmullrom + {cc + {f 2080} + {p + {x42c2cccd x41ab3333 x3e048485} + {x42c2cccd x41a33333 x3ea8a8a9} + {x42c33333 x41b4cccd x3e9a9a9b} + {x42c33333 x41c00000 x3e989899} + {x42c2cccd x41c80000 x3e989899} + {x42c13333 x41d00000 x3e9c9c9d} + {x42bf3333 x41d80000 x3ea0a0a1} + {x42bd3333 x41e33333 x3ea0a0a1} + {x42bccccd x41f33333 x3ea0a0a1} + {x42bccccd x41fb3333 x3ea2a2a3} + {x42becccd x42000000 x3ea2a2a3} + {x42c2cccd x42080000 x3ea4a4a5} + {x42c33333 x420c0000 x3ea8a8a9} + {x42c20000 x42080000 x3eaaaaab} + {x42c00000 x42066666 x3eaaaaab} + {x42c00000 x420d999a x3e9c9c9d} + {x42c00000 x4215999a x3e848485} + {x42c00000 x4219999a x3e008081}}} + {t x42c0b60c x41ee6665} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e418937 bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush2 512 catmullrom + {cc + {f 2080} + {p + {x42c0cccd x41bccccd x3c808081} + {x42b53333 x41f33333 x3d50d0d1} + {x42b40000 x41fccccd x3e189899} + {x42b6cccd x42080000 x3e149495} + {x42b8cccd x420a6666 x3e24a4a5} + {x42bacccd x420d999a x3e949495} + {x42bc0000 x4211999a x3e8e8e8f} + {x42bc0000 x4215999a x3e8c8c8d} + {x42bc0000 x4211999a x3ea6a6a7} + {x42bb3333 x420d999a x3eb2b2b3} + {x42becccd x421d999a x3ec0c0c1} + {x42becccd x42266666 x3ebebebf} + {x42becccd x422a6666 x3ec0c0c1} + {x42c13333 x422e6666 x3ed4d4d5} + {x42c20000 x4235999a x3ed6d6d7} + {x42c2cccd x4239999a x3edadadb} + {x42c2cccd x423d999a x3ee2e2e3} + {x42c0cccd x423d999a x3ee4e4e5} + {x42becccd x423e6666 x3ee6e6e7} + {x42becccd x4239999a x3ee4e4e5} + {x42becccd x4231999a x3ee2e2e3} + {x42becccd x422a6666 x3ee2e2e3} + {x42be0000 x42240000 x3ee2e2e3} + {x42bd3333 x421a6666 x3ecacacb} + {x42bccccd x42140000 x3eb6b6b7} + {x42bb3333 x41fccccd x3ea6a6a7} + {x42bacccd x41e00000 x3ea6a6a7} + {x42bacccd x41d33333 x3ea8a8a9} + {x42bc0000 x41cb3333 x3e0c8c8d}}} + {t x42bd054c x421772c2} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e418937 bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}} + {cubiccurve Brush1 512 catmullrom + {cc + {f 2080} + {p + {x42d80000 x41100000 x3e8e8e8f} + {x42dacccd x41100000 x3e888889} + {x42dccccd x41166666 x3ea0a0a1} + {x42dacccd x4119999a x3e8e8e8f} + {x42d8cccd x4119999a x3e8e8e8f} + {x42d6cccd x41166666 x3e8e8e8f} + {x42d4cccd x41166666 x3e949495} + {x42d40000 x41300000 x3e9a9a9b} + {x42d13333 x41400000 x3ea2a2a3} + {x42cf3333 x41400000 x3ea4a4a5} + {x42cd3333 x41400000 x3ea4a4a5} + {x42cccccd x41500000 x3e989899} + {x42ca0000 x41500000 x3e969697} + {x42c8cccd x41600000 x3e9c9c9d} + {x42c6cccd x41766666 x3e909091} + {x42c40000 x4184cccd x3e828283} + {x42bf3333 x41980000 x3e64e4e5} + {x42be0000 x41a00000 x3e58d8d9} + {x42be0000 x41a80000 x3e54d4d5} + {x42be0000 x41b00000 x3e0c8c8d} + {x42be0000 x41b80000 x3e088889} + {x42c13333 x41accccd x3e3cbcbd} + {x42c8cccd x418b3333 x3e74f4f5} + {x42cc0000 x41800000 x3e7cfcfd} + {x42cecccd x41766666 x3e808081} + {x42ce0000 x4184cccd x3d50d0d1}}} + {t x42cc7e07 x4167a17a} + {a r x3e6b851f g x3df05db6 b x3d4998ed a 0 ro 0 go 0 bo 0 ao 0 opc x3e418937 bu 1 str 1 spx x42c80000 spy x42c80000 sb 1 tt x41880000}}}}}} + toolbox {selectAll { + { selectAll r 0.63 g 0.321481 b 0.134815 a 0 bs 54.4 str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createOpenSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush r 0.63 g 0.321481 b 0.134815 a 0 bs 54.4 str 1 ssx 1 ssy 1 sf 1 sb 1 ltt 0 tt 17 } + { eraser r 0.395 g 0.1738 b 0.079 src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 tt 19 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_autokey false + toolbar_paint_color {0.6299999952 0.3214814365 0.1348148137 0} + toolbar_brush_size 54.40000153 + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {100 100} + color {0.6299999952 0.3214814365 0.1348148137 0} + colorOverlay {0 0 0 0} + lifetime_type "all frames" + motionblur_on true + brush_size 54.40000153 + brush_spacing 0.05000000075 + brush_hardness 0.200000003 + source_black_outside true + name RotoPaint1 + xpos -559 + ypos -690 + } +set N9024d7e0 [stack 0] + ColorCorrect { + saturation 0.9 + contrast 0.855 + gamma 1.05 + gain {1.105 1 0.415 0.87} + gain_panelDropped true + name ColorCorrect4 + xpos -385 + ypos -599 + } + BlendMat { + surfaceblend modulate + name BlendMat4 + xpos -385 + ypos -499 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card9 + xpos -384 + ypos -406 + } + TransformGeo { + rotate {0 30 0} + name TransformGeo7 + xpos -384 + ypos -315 + } + Switch { + inputs 2 + which {{parent.leavetype}} + name Switch5 + xpos -385 + ypos -221 + } + Input { + inputs 0 + name img3 + xpos -1032 + ypos -647 + number 2 + } + Reformat { + format "200 200 0 0 200 200 1 200x200" + name Reformat4 + xpos -1032 + ypos -579 + } + BlendMat { + surfaceblend modulate + name BlendMat7 + xpos -1032 + ypos -501 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card5 + xpos -1031 + ypos -408 + } + TransformGeo { + rotate {0 -62 0} + name TransformGeo9 + xpos -1032 + ypos -323 + } + Dot { + name Dot6 + xpos -997 + ypos -154 + } +push $N9024d7e0 + ColorCorrect { + saturation 1.105 + gamma {1.005 1 1 1} + gain {1.195 0.88 0.71 1} + gain_panelDropped true + name ColorCorrect3 + xpos -491 + ypos -598 + } + ColorCorrect { + gamma 1.26 + gain 0.855 + name ColorCorrect5 + xpos -491 + ypos -574 + } + BlendMat { + surfaceblend modulate + name BlendMat3 + xpos -491 + ypos -501 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card8 + xpos -490 + ypos -406 + } + TransformGeo { + rotate {0 -62 0} + name TransformGeo6 + xpos -490 + ypos -314 + } + Switch { + inputs 2 + which {{parent.leavetype}} + name Switch4 + xpos -491 + ypos -157 + } + Input { + inputs 0 + name img2 + xpos -1132 + ypos -647 + number 1 + } + Reformat { + format "200 200 0 0 200 200 1 200x200" + name Reformat3 + xpos -1132 + ypos -580 + } + BlendMat { + surfaceblend modulate + name BlendMat6 + xpos -1132 + ypos -502 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card2 + xpos -1131 + ypos -409 + } + TransformGeo { + rotate {0 162 0} + name TransformGeo10 + xpos -1131 + ypos -325 + } + Dot { + name Dot9 + xpos -1097 + ypos -85 + } +push $N9024d7e0 + ColorCorrect { + saturation 1.015 + contrast 1.01 + gamma 0.558 + gain {1.565 2.69 0.565 1} + gain_panelDropped true + name ColorCorrect1 + xpos -615 + ypos -601 + } + ColorCorrect { + saturation 0.83 + contrast 0.765 + gain 1.275 + name ColorCorrect2 + xpos -615 + ypos -577 + } + BlendMat { + surfaceblend modulate + name BlendMat2 + xpos -615 + ypos -500 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card4 + xpos -615 + ypos -405 + } + TransformGeo { + rotate {0 162 0} + name TransformGeo5 + xpos -615 + ypos -315 + } + Switch { + inputs 2 + which {{parent.leavetype}} + name Switch3 + xpos -615 + ypos -88 + } + Input { + inputs 0 + name img1 + xpos -1228 + ypos -647 + } + Reformat { + format "200 200 0 0 200 200 1 200x200" + name Reformat1 + xpos -1228 + ypos -580 + } + BlendMat { + surfaceblend modulate + name BlendMat5 + xpos -1228 + ypos -502 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card10 + xpos -1227 + ypos -409 + } + Dot { + name Dot7 + xpos -1193 + ypos -16 + } +push $N9024d7e0 + Dot { + name Dot10 + xpos -700 + ypos -602 + } + BlendMat { + surfaceblend modulate + name BlendMat1 + xpos -734 + ypos -501 + } + Card2 { + rows 4 + columns 4 + translate {0 0.04300000146 1.879589595e-09} + rotate {90 0 0} + type bicubic + uv_position {0.207051456 0.4006408453} + control_points {3 3 3 6 + +1 {-0.4740000069 -0.4799999893 -0.07400000095} 0 {0.1665000021 -0.005000025034 0.02199999988} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0.002000000095 -0.5 0.008000001311} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.476000011 -0.4670000076 -0.05999999493} 0 {0 0 0} 0 {-0.1625000238 -0.01299998164 0.04199999571} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.4740000069 0.01999999955 -0.07400000095} 0 {0.1610000134 -0.001000000164 0.04900000058} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {-0.006000000052 0.01600000076 0.03999999911} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.4600000083 -0.01400000043 -0.07999999821} 0 {0 0 0} 0 {-0.150000006 -0.005999999121 0.04899999872} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.4699999988 0.4959999919 -0.09499999881} 0 {0.1680000126 0.008700013161 0.02099999785} 0 {0 0 0} 0 {0 0 0} 0 {-0.00799998641 -0.1625999808 0.02099999785} 0 {0 1 0} +1 {0.00800000038 0.4835000038 -0.05799999833} 0 {0.1569768488 -0.002877918305 -0.002093020827} 0 {-0.150000005 0.002750009298 0.001999996603} 0 {0 0 0} 0 {-0.007999999449 -0.1317999959 0.055999998} 0 {0.5 1 0} +1 {0.4560000002 0.4690000117 -0.1000000015} 0 {0 0 0} 0 {-0.1579999924 0.01499998569 0.05000000075} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + drawPosition {-0.2805423141 -0.08216268569 -0.01403256878} + name Card3 + xpos -734 + ypos -405 + } + Switch { + inputs 2 + which {{parent.leavetype}} + name Switch2 + xpos -734 + ypos -19 + } + Card2 { + inputs 0 + cast_shadow false + receive_shadow false + image_aspect false + rows {{"int(Card1.uniform_scale * (parent.boxsizez * parent.boxglobalsize)) *2"}} + columns {{"int(Card1.uniform_scale * (parent.boxsizex * parent.boxglobalsize)) *2"}} + translate {0 20 0} + rotate {90 0 0} + uniform_scale 17.1 + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card1 + xpos -113 + ypos -167 + } + TransformGeo { + translate {{parent.TransformGeo2.translate.x} {curve} {parent.TransformGeo2.translate.z}} + rotate {{curve} {parent.TransformGeo2.rotate.y} {curve}} + scaling {{parent.TransformGeo2.scaling} 1 {parent.TransformGeo2.scaling}} + uniform_scale {{parent.TransformGeo2.uniform_scale}} + name TransformGeo1 + xpos -113 + ypos -121 + } +push 0 + ParticleEmitter { + inputs 6 + selectable false + start_frame -199 + emit_from faces + rate {{parent.emissionrate}} + lifetime {{parent.maxlifetime}} + velocity 0 + rotation_velocity 5 + size {{parent.leavesize}} + size_variation {{parent.sizerandom}} + translate {0 10 0} + uniform_scale 20 + name ParticleEmitter3 + xpos -113 + ypos 11 + } + ParticleTurbulence { + display textured + selectable false + render_mode textured + strength {{parent.turbulence} {parent.turbulence} {parent.turbulence}} + offset {{parent.boxsizex*0} {parent.boxsizey*0} {parent.boxsizez*0}} + name ParticleTurbulence2 + xpos -113 + ypos 65 + } + ParticleExpression { + velexpr "vel* 0.9" + channels {a} + name ParticleExpression4 + xpos -113 + ypos 111 + } + ParticleGravity { + selectable false + to {{curve} {parent.gravity*-1} {curve}} + channels {a} + name ParticleGravity2 + xpos -113 + ypos 181 + } + ParticleWind { + selectable false + from {{parent.windfrom} {parent.windfrom} {parent.windfrom}} + to {{parent.windto} {parent.windto} {parent.windto}} + drag {{parent.windstrength}} + name ParticleWind2 + xpos -113 + ypos 262 + } +set N9053f8b0 [stack 0] + Dot { + name Dot12 + xpos -242 + ypos 269 + } + ParticleBounce { + selectable false + out_bounce_mode kill + out_new_channels {b} + in_bounce_mode kill + in_new_channels {b} + bounceaxis_translate {{parent.TransformGeo2.translate.x} {curve} {parent.TransformGeo2.translate.z}} + bounceaxis_rotate {{curve} {parent.TransformGeo2.rotate.y} {curve}} + bounceaxis_scaling {{parent.TransformGeo2.scaling} 1 {parent.TransformGeo2.scaling}} + bounceaxis_uniform_scale {{parent.TransformGeo2.uniform_scale*500}} + name ParticleBounce1 + xpos -276 + ypos 430 + } +push $N9053f8b0 +push $N9053f8b0 + Dot { + name Dot11 + xpos 83 + ypos 269 + } + ParticleBounce { + selectable false + out_new_channels {b} + out_bounce 0 + in_new_channels {b} + in_bounce 0 + bounceaxis_translate {{parent.TransformGeo2.translate.x} {curve} {parent.TransformGeo2.translate.z}} + bounceaxis_rotate {{curve} {parent.TransformGeo2.rotate.y} {curve}} + bounceaxis_scaling {{parent.TransformGeo2.scaling} 1 {parent.TransformGeo2.scaling}} + bounceaxis_uniform_scale {{parent.TransformGeo2.uniform_scale*500}} + name ParticleBounce3 + xpos 49 + ypos 349 + } + Switch { + inputs 2 + which {{parent.ground}} + name Switch6 + xpos -113 + ypos 353 + } + Switch { + inputs 2 + which {{parent.killleaves}} + name Switch7 + xpos -113 + ypos 434 + } + ParticleExpression { + velexpr 0 + channels {b} + name ParticleExpression5 + xpos -113 + ypos 565 + } +set N90564180 [stack 0] +push $N90564180 + Dot { + name Dot13 + xpos 79 + ypos 572 + } + ParticleLookAt { + selectable false + region box + scaling {30 0.1 30} + uniform_scale 20 + name ParticleLookAt2 + xpos 45 + ypos 661 + } + Switch { + inputs 2 + which {{parent.ground}} + name Switch8 + xpos -113 + ypos 665 + } +set N90575740 [stack 0] + ParticleCurve { + selectable false + curves {r {} + g {} + b {} + a {curve l 0.004726409912 L x0.001226557884 1} + size {} + mass {}} + affect_rgb false + name ParticleCurve1 + xpos -514 + ypos 661 + } + Reformat { + inputs 0 + format "8000 8000 0 0 8000 8000 1 8k cuad" + scale 1.3 + resize none + name Reformat6 + xpos -398 + ypos 793 + } + ScanlineRender { + inputs 3 + motion_vectors_type distance + name ScanlineRender1 + xpos -514 + ypos 797 + } + ColorCorrect { + saturation 0 + gamma 0.2 + name ColorCorrect6 + xpos -514 + ypos 855 + } + Blur { + size {{parent.shadowblur}} + name Blur1 + xpos -514 + ypos 887 + } +push 0 + Merge2 { + inputs 2 + mix {{parent.shadowopacity}} + name Opacity + xpos -514 + ypos 943 + } + Dot { + name Dot15 + xpos -480 + ypos 1016 + } + Project3D2 { + inputs 2 + name Project3D1 + xpos -590 + ypos 1013 + } + Card2 { + display off + selectable false + cast_shadow false + receive_shadow false + image_aspect false + rows 1 + columns 1 + rotate {-90 0 0} + scaling {1.5 1.5 1} + uniform_scale 20 + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card7 + xpos -590 + ypos 1037 + } + TransformGeo { + display off + selectable false + translate {{parent.TransformGeo2.translate.x} {curve} {parent.TransformGeo2.translate.z}} + rotate {{curve} {parent.TransformGeo2.rotate.y} {curve}} + scaling {{parent.TransformGeo2.scaling} 1 {parent.TransformGeo2.scaling}} + uniform_scale {{parent.TransformGeo2.uniform_scale*10}} + name TransformGeo11 + xpos -590 + ypos 1097 + } + Group { + inputs 0 + name Wireframe + xpos 325 + ypos -537 + } + Input { + inputs 0 + name Input1 + xpos 118 + ypos 215 + } + Card2 { + display wireframe + render_mode solid + image_aspect false + rows 1 + columns 1 + translate {0 0.5 0} + rotate {90 0 0} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card7 + xpos 118 + ypos 253 + } + Input { + inputs 0 + name Input2 + xpos -412 + ypos 209 + number 1 + } + Card2 { + display wireframe + render_mode solid + image_aspect false + rows 1 + columns 1 + translate {0 0 -0.5} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card3 + xpos -412 + ypos 249 + } + Input { + inputs 0 + name Input3 + xpos -307 + ypos 212 + number 2 + } + Card2 { + display wireframe + render_mode solid + image_aspect false + rows 1 + columns 1 + translate {0 0 0.5} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card2 + xpos -307 + ypos 252 + } + Input { + inputs 0 + name Input4 + xpos -201 + ypos 211 + number 3 + } + Card2 { + display wireframe + render_mode solid + image_aspect false + rows 1 + columns 1 + translate {0.5 0 0} + rotate {0 90 0} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card4 + xpos -201 + ypos 251 + } + Input { + inputs 0 + name Input5 + xpos -95 + ypos 213 + number 4 + } + Card2 { + display wireframe + render_mode solid + image_aspect false + rows 1 + columns 1 + translate {-0.5 0 0} + rotate {0 90 0} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card5 + xpos -95 + ypos 253 + } + Input { + inputs 0 + name Input6 + xpos 8 + ypos 214 + number 5 + } + Card2 { + display wireframe + render_mode solid + image_aspect false + rows 1 + columns 1 + translate {0 -0.5 0} + rotate {90 0 0} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card6 + xpos 8 + ypos 253 + } + MergeGeo { + inputs 6 + selectable false + render_mode off + name MergeGeo1 + xpos 118 + ypos 277 + } + Output { + name Output1 + xpos 118 + ypos 301 + } + end_group + TransformGeo { + translate {0 10 0} + uniform_scale 20 + name TransformGeo4 + xpos 325 + ypos -489 + } + Dot { + name Dot1 + xpos 359 + ypos -449 + } + TransformGeo { + translate {{parent.TransformGeo2.translate.x} {curve} {parent.TransformGeo2.translate.z}} + rotate {{curve} {parent.TransformGeo2.rotate.y} {curve}} + scaling {{parent.TransformGeo2.scaling} 1 {parent.TransformGeo2.scaling}} + uniform_scale {{parent.TransformGeo2.uniform_scale}} + name TransformGeo3 + xpos 211 + ypos -452 + } + Switch { + which {{parent.guideboxoff}} + name Switch1 + xpos 211 + ypos -406 + } + Dot { + name Dot2 + xpos 245 + ypos 766 + } +push $N90575740 + Scene { + inputs 2 + name Scene1 + xpos -103 + ypos 742 + } +set N90695650 [stack 0] + Switch { + which {{parent.shadowsonly}} + name Switch10 + xpos -113 + ypos 932 + } + MergeGeo { + inputs 2 + selectable false + name MergeGeo1 + xpos -113 + ypos 1097 + } +push $N90695650 + Dot { + name Dot16 + xpos 79 + ypos 1162 + } + Switch { + inputs 2 + which {{parent.shadows}} + name Switch9 + xpos -113 + ypos 1159 + } + Output { + name Output1 + xpos -113 + ypos 1403 + } + TransformGeo { + inputs 0 + translate {{parent.guideboxtranslatex} {curve} {parent.guideboxtranslatez}} + rotate {{curve} {parent.guideboxrotation} {curve}} + scaling {1 1 {parent.boxsizez}} + uniform_scale {{parent.boxglobalsize}} + name TransformGeo2 + tile_color 0x48ff4dff + xpos -63 + ypos -754 + } +push $N9024d7e0 + Viewer { + frame 83 + frame_range 1-100 + colour_sample_bbox {1.149999976 -0.6200000048 1.150500059 -0.6194999814} + input_process false + name Viewer1 + selected true + xpos -234 + ypos 1299 + } +end_group diff --git a/gizmos/3D/L_RimLight2D.gizmo b/gizmos/3D/L_RimLight2D.gizmo new file mode 100644 index 0000000..003626c --- /dev/null +++ b/gizmos/3D/L_RimLight2D.gizmo @@ -0,0 +1,149 @@ +#! C:/tools64/Nuke6.1v2_x64/Nuke6.1.exe -nx +version 6.1 v2 +Gizmo { + inputs 2 + addUserKnob {20 RimLight} + addUserKnob {26 setup l "setup "} + addUserKnob {6 showrim l "show rim" -STARTLINE} + addUserKnob {26 explain l "" -STARTLINE T "勾选此项可以观察rim通道,并能更好地设置。同时也可以作为一单独的通道使用"} + addUserKnob {41 in l "control range" T Histogram1.in} + addUserKnob {41 Angle T Emboss1.Angle} + addUserKnob {41 Width T Emboss1.Width} + addUserKnob {41 size l Blur T Blur1.size} + addUserKnob {26 illuminate} + addUserKnob {41 white l gain T Grade1.white} + addUserKnob {41 multiply T Grade1.multiply} + addUserKnob {26 "" +STARTLINE} + addUserKnob {41 maskChannelMask l mask T Multiply1.maskChannelMask} + addUserKnob {41 inject -STARTLINE T Multiply1.inject} + addUserKnob {41 invert_mask l invert -STARTLINE T Multiply1.invert_mask} + addUserKnob {41 fringe -STARTLINE T Multiply1.fringe} +} + Bezier { + inputs 0 + points {{ +{774 606 70.6 -2.43 70.6} +{812 326 70.6 -0.8 70.6} +{1164 202 93.3 0.71 93.3} +{1146 614 93 2.34 93} +}} + shape {{curve L x100 0}} + center {1024 436} + name Bezier1 + xpos -342 + ypos -196 + } + Input { + inputs 0 + name mask + xpos -355 + ypos -61 + number 1 + } + Invert { + name Invert1 + xpos -355 + ypos -35 + } + Shuffle { + in alpha + name Shuffle3 + xpos -355 + ypos 3 + } + Input { + inputs 0 + name Input1 + xpos -119 + ypos -306 + } + Dot { + name Dot2 + xpos -85 + ypos -248 + } +set N4ccc850 [stack 0] + Dot { + name Dot1 + xpos -195 + ypos -248 + } + Emboss { + edgechannels {rgba.red rgba.green rgba.blue -rgba.alpha} + name Emboss1 + xpos -229 + ypos -208 + } + Shuffle { + in alpha + name Shuffle2 + xpos -229 + ypos -157 + } + Histogram { + name Histogram1 + xpos -229 + ypos -122 + } + Shuffle { + in rgb + green red + blue red + alpha red + name Shuffle1 + xpos -229 + ypos -86 + } + Blur { + name Blur1 + xpos -229 + ypos -60 + } + Multiply { + inputs 1+1 + value 0 + name Multiply1 + xpos -229 + ypos -3 + } + Dot { + name Dot4 + xpos -195 + ypos 69 + } +set N4ccddd0 [stack 0] +push $N4ccddd0 +push $N4ccc850 + Dot { + name Dot3 + xpos -85 + ypos -40 + } + Switch { + inputs 2 + which {{showrim i}} + name Switch1 + xpos -119 + ypos 94 + } + Grade { + inputs 1+1 + name Grade1 + selected true + xpos -119 + ypos 137 + } +set N4cce330 [stack 0] + Output { + name Output1 + xpos -119 + ypos 276 + } +push $N4cce330 + Viewer { + input_process false + name Viewer1 + xpos -229 + ypos 428 + } +end_group diff --git a/gizmos/3D/RainMaker.gizmo b/gizmos/3D/RainMaker.gizmo new file mode 100644 index 0000000..f32af93 --- /dev/null +++ b/gizmos/3D/RainMaker.gizmo @@ -0,0 +1,1054 @@ +#! C:/Program Files/Nuke8.0v5/nuke-8.0.v5.dll -nx +version 8.0 v5 +Gizmo { + inputs 2 + addUserKnob {20 User l RainMaker} + addUserKnob {6 rainonly l "Rain only (No comp)" +STARTLINE} + addUserKnob {6 dropspass l "Use Pre-Rendered Drops input" t "If you have pre-rendered the \"Rain only?\" outpout, you can use this instead of re-siming at rendertime. " +STARTLINE} + addUserKnob {20 globals_1 l Globals n 1} + addUserKnob {7 emissionmulti l "Emission Multiplier"} + emissionmulti 1 + addUserKnob {7 res l Resolution t "This controls the resolution for the render of the effect. The default value (0.5) works well in most cases." R 0.25 1} + res 0.5 + addUserKnob {41 start_frame l "Big start frame" T ParticleEmitter1.start_frame} + addUserKnob {41 start_frame_1 l "Med start frame" T ParticleEmitter3.start_frame} + addUserKnob {41 start_frame_2 l "Small start frame" T ParticleEmitter2.start_frame} + addUserKnob {41 lifetime T ParticleEmitter1.lifetime} + addUserKnob {7 ygravity l "Y Gravity Component" R -1 1} + ygravity -1 + addUserKnob {7 xgravity l "X Gravity Component" R -1 1} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {20 particles l Particles n 1} + particles 0 + addUserKnob {6 bigenabled l Big? +STARTLINE} + bigenabled true + addUserKnob {6 medenabled l Medium? -STARTLINE} + medenabled true + addUserKnob {6 smalenabled l Small? -STARTLINE} + smalenabled true + addUserKnob {6 trailkill l "Disable trails" t "Turning off the trails, will speed things up considerably. Its best to disable the trails while you get the drops right, then turn them back on later (if you have moving particles)" +STARTLINE} + addUserKnob {20 bigparts l "Big Ctrls" n 1} + addUserKnob {41 seed l "random seed" T ParticleEmitter1.seed} + addUserKnob {7 bigamount l Amount} + bigamount 0.1 + addUserKnob {41 size T ParticleEmitter1.size} + addUserKnob {41 size_variation l "size variation" T ParticleEmitter1.size_variation} + addUserKnob {6 biggravity l "Gravity Enabled?" +STARTLINE} + biggravity true + addUserKnob {7 gravity l "Gravity Multiplier"} + gravity 0.1 + addUserKnob {41 probability l "Gravity Probability" T ParticleGravity1.probability} + addUserKnob {20 endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 meddrop l "Med Ctrls" n 1} + addUserKnob {41 seed_1 l "random seed" T ParticleEmitter3.seed} + addUserKnob {7 medrate l Amount R 0 5} + medrate 1.5 + addUserKnob {41 size_1 l size T ParticleEmitter3.size} + addUserKnob {41 size_variation_1 l "size variation" T ParticleEmitter3.size_variation} + addUserKnob {6 medgrav l "Gravity Enabled?" +STARTLINE} + medgrav true + addUserKnob {7 medgavity l "Gravity Multiplier"} + medgavity 0.05 + addUserKnob {41 probability_1 l "Gravity Probability" T ParticleGravity2.probability} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 smldrop l "Small Ctrls" n 1} + smldrop 0 + addUserKnob {7 smallrate l Amount R 0 10} + smallrate 10 + addUserKnob {41 seed_2 l "random seed" T ParticleEmitter2.seed} + addUserKnob {41 size_2 l size T ParticleEmitter2.size} + addUserKnob {41 size_variation_2 l "size variation" T ParticleEmitter2.size_variation} + addUserKnob {20 endGroup_3 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 endGroup_4 l endGroup n -1} + addUserKnob {20 effects l Effects n 1} + effects 0 + addUserKnob {7 blobify l "blobify radius" R 0 10} + blobify 3.95 + addUserKnob {7 displace l "Displace Amount"} + displace 0.23 + addUserKnob {41 size_3 l "Displace Noise Size" T Noise2.size} + addUserKnob {3 trails l "Trail Length" t "slows it down considerably"} + trails 20 + addUserKnob {20 endGroup_5 l endGroup n -1} + addUserKnob {20 comp l Comp n 1} + comp 0 + addUserKnob {6 alpha l "Copy rain to alpha?" +STARTLINE} + addUserKnob {41 size_4 l "Blur Size" T Blur2.size} + addUserKnob {7 ringing l "Gamma Lift"} + ringing 0.19 + addUserKnob {7 ringing_1 l "Ringing Ratio"} + ringing_1 0.25 + addUserKnob {41 mix l "Emboss Amount" T Merge2.mix} + addUserKnob {41 displace_2 l Displace T Group3.displace} + addUserKnob {41 size_5 l Defocus T Blur1.size} + addUserKnob {20 endGroup_6 l endGroup n -1} + addUserKnob {26 txt l "" +STARTLINE T "\nMade by Matt ()"} +} + Input { + inputs 0 + name Drops + xpos 1107 + ypos -58 + number 1 + } + Constant { + inputs 0 + channels rgb + name Constant2 + xpos 667 + ypos -220 + } + Reformat { + type scale + scale {{parent.res x336 1}} + name Reformat1 + xpos 816 + ypos -173 + } + set C2e46a880 [stack 0] + Noise { + size 120 + zoffset 1 + octaves 4 + center {960 410} + name Noise2 + xpos 953 + ypos -173 + } + Input { + inputs 0 + name BG + xpos 1815 + ypos -818 + } +set N2e4e33f0 [stack 0] + Camera2 { + translate {0 0 42.04999924} + name Camera1 + xpos 1485 + ypos -562 + } +set N2e4e3760 [stack 0] + Constant { + inputs 0 + channels rgb + color 1 + format "256 256 0 0 256 256 1 square_256" + name Constant1 + xpos 1043 + ypos -719 + } + Radial { + invert true + area {9.5 8.5 246.5 247.5} + softness 0 + color 0 + name Radial1 + xpos 1043 + ypos -597 + } +set N2e4e3e40 [stack 0] + Constant { + inputs 0 + channels rgb + name Constant3 + xpos 1537 + ypos -680 + } +set N2e4e41b0 [stack 0] + Card2 { + translate {0 0 38.72000122} + uniform_scale 1.7 + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card1 + xpos 1327 + ypos -656 + } +set N2e4e4520 [stack 0] +push $N2e4e33f0 + ParticleEmitter { + inputs 3 + emit_from faces + rate {{"parent.emissionmulti * parent.medrate"}} + rate_variation 1 + lifetime {{parent.ParticleEmitter1.lifetime}} + velocity 0 + size 0.024 + size_variation 0.5 + seed 2 + name ParticleEmitter3 + xpos 1175 + ypos -517 + disable {{1-parent.medenabled}} + } + ParticleGravity { + to {{"parent.medgavity * 0.0002 * parent.xgravity"} {"parent.medgavity * 0.0002 * parent.ygravity"} 0} + probability 0.1 + name ParticleGravity2 + selected true + xpos 1175 + ypos -459 + disable {{1-parent.medgrav}} + } +push $N2e4e3e40 +push $N2e4e4520 +push $N2e4e33f0 + ParticleEmitter { + inputs 3 + emit_from faces + rate {{"parent.bigamount * parent.emissionmulti"}} + rate_variation 1 + lifetime 100 + velocity 0 + size 0.05 + size_variation 1 + seed 1 + name ParticleEmitter1 + xpos 1327 + ypos -597 + disable {{1-parent.bigenabled}} + } + ParticleGravity { + to {{"parent.gravity * 0.007 * parent.xgravity"} {"parent.gravity * 0.007 * parent.ygravity"} 0} + probability 0.03 + name ParticleGravity1 + xpos 1327 + ypos -523 + disable {{1-parent.biggravity}} + } +set N2e4e5d30 [stack 0] + ParticleMerge { + inputs 2 + name ParticleMerge1 + xpos 1327 + ypos -418 + } +push $N2e4e41b0 +clone $C2e46a880 { + xpos 1537 + ypos -404 + selected false + } +set N2e4e6410 [stack 0] + ScanlineRender { + inputs 3 + ztest_enabled false + filter Impulse + motion_vectors_type distance + name ScanlineRender1 + xpos 1327 + ypos -361 + } + Erode { + channels rgb + size {{0-Erode3.size}} + name Erode2 + xpos 1327 + ypos -308 + } +set N2e4e6af0 [stack 0] + Erode { + channels rgb + size -5 + name Erode4 + xpos 1217 + ypos -309 + } +push $N2e4e3760 +push $N2e4e3e40 +push $N2e4e4520 +push $N2e4e33f0 + ParticleEmitter { + inputs 3 + emit_from faces + rate {{"parent.smallrate * parent.emissionmulti"}} + rate_variation 1 + lifetime {{parent.ParticleEmitter1.lifetime}} + velocity 0 + size 0.006 + size_variation 1 + name ParticleEmitter2 + xpos 1043 + ypos -488 + disable {{1-parent.smalenabled}} + } +push $N2e4e6410 + ScanlineRender { + inputs 3 + ztest_enabled false + filter Impulse + motion_vectors_type distance + name ScanlineRender2 + xpos 1043 + ypos -373 + } + ColorCorrect { + inputs 1+1 + gain 0 + maskChannelMask rgba.red + name ColorCorrect3 + xpos 1043 + ypos -309 + } +push $N2e4e6af0 + Erode { + channels rgb + size {{parent.blobify}} + name Erode3 + xpos 1327 + ypos -271 + } + Merge2 { + inputs 2 + name Merge1 + xpos 1327 + ypos -228 + } + Group { + inputs 2 + name Group1 + xpos 1327 + ypos -185 + addUserKnob {20 "" l Glass} + addUserKnob {7 displace l Displace R 0 20} + displace {{parent.displace}} + addUserKnob {41 size_1 l "smooth vectors" T Blur1.size} + addUserKnob {7 abberation l Abberation} + addUserKnob {26 "" l Defocus} + addUserKnob {6 useDef l "Apply Defocus" -STARTLINE} + addUserKnob {41 size T ZBlur1.size} + addUserKnob {41 max_size l maximum T ZBlur1.max_size} + addUserKnob {41 shape l "filter shape" T ZBlur1.shape} + } + Input { + inputs 0 + name img + xpos -289 + ypos 81 + } +set N2e4d5b40 [stack 0] + Dot { + name Dot1 + xpos -255 + ypos 634 + } + Input { + inputs 0 + name control + xpos -64 + ypos -388 + number 1 + } +set N2e4d6220 [stack 0] +push $N2e4d6220 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy6 + xpos -64 + ypos -354 + disable {{hasError i}} + } +set N2e4d6590 [stack 0] + Dot { + name Dot2 + xpos 94 + ypos -343 + } +set N2e4d6900 [stack 0] + Transform { + translate {0 -1} + center {320 240} + name down + xpos 60 + ypos -140 + } +push $N2e4d6590 + Dot { + name Dot3 + xpos -122 + ypos -343 + } + Dot { + name Dot4 + xpos -207 + ypos -343 + } + Transform { + translate {0 1} + center {320 240} + name up + xpos -241 + ypos -180 + } +push $N2e4d6900 + Dot { + name Dot5 + xpos 176 + ypos -343 + } + Transform { + translate {1 0} + center {320 240} + name right + xpos 142 + ypos -221 + } +push $N2e4d6590 + Shuffle { + in alpha + green black + blue black + out rgb + name Shuffle1 + xpos -64 + ypos -311 + } + Transform { + translate {-1 0} + center {320 240} + name left + xpos -64 + ypos -285 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.green + name Copy2 + xpos -64 + ypos -228 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.blue + name Copy3 + xpos -64 + ypos -187 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy4 + xpos -64 + ypos -147 + } + Expression { + temp_name0 l + temp_expr0 red + temp_name1 r + temp_expr1 green + temp_name2 u + temp_expr2 blue + temp_name3 d + temp_expr3 alpha + channel0 {forward.u -forward.v none -backward.u} + expr0 (l-r)*width + channel1 {-forward.u forward.v none -backward.u} + expr1 (d-u)*width + channel2 depth + expr2 (abs(l-r)+abs(d-u))*width/2 + name Expression1 + xpos -64 + ypos -15 + } + Blur { + channels motion + crop false + name Blur1 + xpos -64 + ypos 13 + } +set N2e54f130 [stack 0] + Dot { + name Dot6 + xpos 89 + ypos 22 + } + Dot { + name Dot7 + xpos 89 + ypos 193 + } +push $N2e54f130 +push $N2e4d5b40 + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels forward + name Copy1 + xpos -64 + ypos 67 + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels depth + name Copy8 + xpos -64 + ypos 175 + } + ZBlur { + channels rgba + math -linear + shape 1 + name ZBlur1 + xpos -64 + ypos 229 + disable {{!parent.useDef}} + } +set N2e550260 [stack 0] + IDistort { + channels rgba + uv forward + uv_scale {{parent.displace i}} + name IDistort4 + xpos 98 + ypos 491 + } +push $N2e550260 + IDistort { + channels {-rgba.red -rgba.green rgba.blue rgba.alpha} + uv forward + uv_scale {{parent.displace/(1+parent.abberation/10)}} + name IDistort3 + xpos 66 + ypos 314 + } +push $N2e550260 + IDistort { + channels {rgba.red -rgba.green -rgba.blue rgba.alpha} + uv forward + uv_scale {{parent.displace/(1-parent.abberation/10)}} + name IDistort1 + xpos -188 + ypos 309 + } +push $N2e550260 + IDistort { + channels {-rgba.red rgba.green -rgba.blue rgba.alpha} + uv forward + uv_scale {{parent.displace i}} + name IDistort2 + xpos -64 + ypos 311 + } + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + name Copy9 + xpos -64 + ypos 372 + } + Copy { + inputs 2 + from0 rgba.blue + to0 rgba.blue + name Copy10 + xpos -64 + ypos 412 + } + Switch { + inputs 2 + which {{parent.abberation==0}} + name Switch1 + xpos -64 + ypos 491 + addUserKnob {20 "" l Weta} + addUserKnob {32 knob l "update input order" t "changes the input order according to the input nodes' horizontal order (left most node becomes input 0)" -STARTLINE T " reconnectInputs"} + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels depth + name Copy5 + xpos -64 + ypos 616 + } + Output { + name Output1 + xpos -59 + ypos 747 + } + end_group + TimeEcho { + framesbehind {{parent.trails}} + frmaesfade {{parent.trails}} + name TimeEcho2 + xpos 1327 + ypos -124 + disable {{parent.trailkill}} + } + Switch { + inputs 2 + which {{parent.dropspass}} + name Switch2 + xpos 1327 + ypos -48 + } +set N2e603160 [stack 0] +push $N2e603160 + Reformat { + name Reformat2 + xpos 1449 + ypos -124 + } +set Ne638fb90 [stack 0] + Shuffle { + alpha green + name Shuffle1 + xpos 1651 + ypos -221 + } +set Ne638ff00 [stack 0] + Blur { + size 11 + name Blur1 + xpos 1982 + ypos 88 + } + set Ce6390270 [stack 0] +set Ne6390270 [stack 0] +push $Ne6390270 +push $N2e603160 + Emboss { + Angle 53 + name Emboss1 + xpos 1327 + ypos 32 + } + ColorCorrect { + gain 2 + offset -1 + name ColorCorrect2 + xpos 1327 + ypos 102 + } + Reformat { + name Reformat3 + xpos 1512 + ypos 102 + } +clone $Ce6390270 { + xpos 1653 + ypos 96 + selected false + } +push $Ne638fb90 +push $Ne638fb90 + Erode { + channels rgb + size 0.25 + maskChannelMask rgba.red + name Erode1 + xpos 1576 + ypos -124 + } +push $Ne638fb90 + ColorCorrect { + inputs 1+1 + gain 0 + maskChannelMask rgba.red + name ColorCorrect4 + xpos 1576 + ypos -64 + } + Merge2 { + inputs 2 + operation max + mix {{parent.ringing_1}} + name Merge3 + xpos 1576 + ypos 3 + } +clone $Ce6390270 { + xpos 1716 + ypos -3 + selected false + } +push $Ne638ff00 +push $Ne638fb90 +clone $Ce6390270 { + xpos 1473 + ypos -330 + selected false + } +push $N2e4e33f0 + AddChannels { + channels alpha + color 1 + name AddChannels1 + xpos 1815 + ypos -738 + } +set Ne63924d0 [stack 0] + Blur { + inputs 1+1 + size 8 + maskChannelMask rgba.red + name Blur2 + xpos 1815 + ypos -330 + } + Group { + inputs 2 + name Group3 + xpos 1815 + ypos -221 + addUserKnob {20 "" l Glass} + addUserKnob {7 displace l Displace R 0 20} + displace 0.4 + addUserKnob {41 size_1 l "smooth vectors" T Blur1.size} + addUserKnob {7 abberation l Abberation} + abberation 1 + addUserKnob {26 "" l Defocus} + addUserKnob {6 useDef l "Apply Defocus" -STARTLINE} + addUserKnob {41 size T ZBlur1.size} + addUserKnob {41 max_size l maximum T ZBlur1.max_size} + addUserKnob {41 shape l "filter shape" T ZBlur1.shape} + } + Input { + inputs 0 + name img + xpos -289 + ypos 81 + } +set Ne6392bb0 [stack 0] + Dot { + name Dot1 + xpos -255 + ypos 634 + } + Input { + inputs 0 + name control + xpos -64 + ypos -388 + number 1 + } +set Ne9df2c40 [stack 0] +push $Ne9df2c40 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy6 + xpos -64 + ypos -354 + disable {{hasError i}} + } +set Ne9df2fb0 [stack 0] + Dot { + name Dot2 + xpos 94 + ypos -343 + } +set Ne9df3320 [stack 0] + Transform { + translate {0 -1} + center {320 240} + name down + xpos 60 + ypos -140 + } +push $Ne9df2fb0 + Dot { + name Dot3 + xpos -122 + ypos -343 + } + Dot { + name Dot4 + xpos -207 + ypos -343 + } + Transform { + translate {0 1} + center {320 240} + name up + xpos -241 + ypos -180 + } +push $Ne9df3320 + Dot { + name Dot5 + xpos 176 + ypos -343 + } + Transform { + translate {1 0} + center {320 240} + name right + xpos 142 + ypos -221 + } +push $Ne9df2fb0 + Shuffle { + in alpha + green black + blue black + out rgb + name Shuffle1 + xpos -64 + ypos -311 + } + Transform { + translate {-1 0} + center {320 240} + name left + xpos -64 + ypos -285 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.green + name Copy2 + xpos -64 + ypos -228 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.blue + name Copy3 + xpos -64 + ypos -187 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy4 + xpos -64 + ypos -147 + } + Expression { + temp_name0 l + temp_expr0 red + temp_name1 r + temp_expr1 green + temp_name2 u + temp_expr2 blue + temp_name3 d + temp_expr3 alpha + channel0 {forward.u -forward.v none -backward.u} + expr0 (l-r)*width + channel1 {-forward.u forward.v none -backward.u} + expr1 (d-u)*width + channel2 depth + expr2 (abs(l-r)+abs(d-u))*width/2 + name Expression1 + xpos -64 + ypos -15 + } + Blur { + channels motion + size 15 + crop false + name Blur1 + xpos -64 + ypos 13 + } +set Ne9df5fd0 [stack 0] + Dot { + name Dot6 + xpos 89 + ypos 22 + } + Dot { + name Dot7 + xpos 89 + ypos 193 + } +push $Ne9df5fd0 +push $Ne6392bb0 + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels forward + name Copy1 + xpos -64 + ypos 67 + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels depth + name Copy8 + xpos -64 + ypos 175 + } + ZBlur { + channels rgba + math -linear + max_size 2.2 + shape 1 + name ZBlur1 + xpos -64 + ypos 229 + disable {{!parent.useDef}} + } +set Ne9df7100 [stack 0] + IDistort { + channels rgba + uv forward + uv_scale {{parent.displace i}} + name IDistort4 + xpos 98 + ypos 491 + } +push $Ne9df7100 + IDistort { + channels {-rgba.red -rgba.green rgba.blue rgba.alpha} + uv forward + uv_scale {{parent.displace/(1+parent.abberation/10)}} + name IDistort3 + xpos 66 + ypos 314 + } +push $Ne9df7100 + IDistort { + channels {rgba.red -rgba.green -rgba.blue rgba.alpha} + uv forward + uv_scale {{parent.displace/(1-parent.abberation/10)}} + name IDistort1 + xpos -188 + ypos 309 + } +push $Ne9df7100 + IDistort { + channels {-rgba.red rgba.green -rgba.blue rgba.alpha} + uv forward + uv_scale {{parent.displace i}} + name IDistort2 + xpos -64 + ypos 311 + } + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + name Copy9 + xpos -64 + ypos 372 + } + Copy { + inputs 2 + from0 rgba.blue + to0 rgba.blue + name Copy10 + xpos -64 + ypos 412 + } + Switch { + inputs 2 + which {{parent.abberation==0}} + name Switch1 + xpos -64 + ypos 491 + addUserKnob {20 "" l Weta} + addUserKnob {32 knob l "update input order" t "changes the input order according to the input nodes' horizontal order (left most node becomes input 0)" -STARTLINE T " reconnectInputs"} + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels depth + name Copy5 + xpos -64 + ypos 616 + } + Output { + name Output1 + xpos -59 + ypos 747 + } + end_group + ColorCorrect { + inputs 1+1 + gamma {{"1 + parent.ringing"}} + maskChannelMask rgba.red + name ColorCorrect1 + xpos 1815 + ypos 3 + } + Merge2 { + inputs 2 + operation plus + sRGB true + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + mix 0.085 + name Merge2 + xpos 1815 + ypos 102 + } +clone $Ce6390270 { + xpos 1815 + ypos 178 + selected false + } +push $Ne63924d0 + Dot { + name Dot1 + xpos 2131 + ypos -112 + } + Merge2 { + inputs 2+1 + name Merge4 + xpos 2097 + ypos 205 + } + ShuffleCopy { + inputs 2 + alpha red + name ShuffleCopy1 + xpos 2097 + ypos 310 + disable {{1-parent.alpha}} + } + Switch { + inputs 2 + which 1 + name Switch1 + xpos 2097 + ypos 389 + disable {{1-parent.rainonly}} + } + Output { + name Output1 + xpos 2097 + ypos 474 + } +push $N2e4e5d30 + Viewer { + frame 476 + input_process false + name Viewer1 + xpos 878 + ypos -11 + } +end_group diff --git a/gizmos/3D/ReLighting.gizmo b/gizmos/3D/ReLighting.gizmo new file mode 100644 index 0000000..010ccbf --- /dev/null +++ b/gizmos/3D/ReLighting.gizmo @@ -0,0 +1,191 @@ +#! C:/Program Files/Nuke5.2v1/Nuke5.2.exe -nx +version 5.2100 +add_layer {NORMAL_normal_final NORMAL_normal_final.X NORMAL_normal_final.Y NORMAL_normal_final.Z NORMAL_normal_final.red NORMAL_normal_final.green NORMAL_normal_final.blue NORMAL_normal_final.alpha} +Gizmo { + tile_color 0xff590000 + addUserKnob {20 "" l ReLighting} + addUserKnob {41 normals l " normals" T Shuffle1.in} + addUserKnob {6 normalize -STARTLINE} + normalize true + addUserKnob {26 "" l "@b Light Pos"} + addUserKnob {12 light_position l " XY position"} + addUserKnob {16 z_light_position l "Z position" R -1 1} + addUserKnob {12 light_pivot l "XY pivot"} + light_pivot {320 240} + addUserKnob {16 sensitivity l "XY sensitivity" R 1 10} + sensitivity 1 + addUserKnob {26 "" l "@b Shading"} + addUserKnob {7 intensity R 0 10} + intensity 1 + addUserKnob {18 diffuse_color l "diffuse color" R 0 2} + diffuse_color 1 + addUserKnob {18 ambient_color l "ambient color"} + ambient_color {0 0 0} + addUserKnob {7 gamma R 0 2} + gamma 0.5 + addUserKnob {26 "" l " " T ""} + addUserKnob {41 black_clamp l "black clamp" T Diff_Grade.black_clamp} + addUserKnob {41 white_clamp l "white clamp" T Diff_Grade.white_clamp} + addUserKnob {26 "" l "@b Filtering"} + addUserKnob {41 size l " dilate size" T Dilate1.size} + addUserKnob {41 size_1 l "blur size" T Blur1.size} + addUserKnob {26 "" +STARTLINE} + addUserKnob {41 operation l merge T Merge1.operation} + addUserKnob {6 Merge1_disable l enable -STARTLINE} + addUserKnob {26 "" l " " T ""} + addUserKnob {41 mask T Dissolve1.mask} + addUserKnob {41 invert_mask l invert T Dissolve1.invert_mask} + addUserKnob {41 fringe T Dissolve1.fringe} + addUserKnob {41 premult l "(un)premult by" T Premult1.alpha} + addUserKnob {41 invert T Premult1.invert} + addUserKnob {41 which l mix T Dissolve1.which} +} + Input { + inputs 0 + name Input1 + xpos -277 + ypos -394 + } + Dot { + name Dot2 + tile_color 0x9597bf00 + xpos -243 + ypos -328 + } +set N123c4cd8 [stack 0] + Dot { + name Dot1 + tile_color 0x9597bf00 + xpos -116 + ypos -328 + } + Dot { + name Dot3 + tile_color 0x9597bf00 + xpos -116 + ypos 14 + } +set N128dce88 [stack 0] +push $N123c4cd8 + Shuffle { + in NORMAL_normal_final + in2 alpha + alpha red2 + black red + white green + red2 blue + name Shuffle1 + xpos -277 + ypos -298 + } + Expression { + temp_name0 MOD + temp_expr0 "sqrt( pow2(r) +pow2(g) + pow2(b) )*2" + expr0 0.5+r/MOD + expr1 0.5+g/MOD + expr2 0.5+b/MOD + channel3 none + name Normalize + xpos -277 + ypos -272 + disable {{!parent.normalize}} + } + Expression { + temp_name0 LX + temp_expr0 lights.light.x + temp_name1 LY + temp_expr1 lights.light.y + temp_name2 LZ + temp_expr2 lights.light.z + channel0 rgb + expr0 "sqrt( pow2(LX-r) + pow2(LY-g) + pow2(LZ-b) )" + channel1 none + channel2 none + channel3 none + name Expression1 + xpos -277 + ypos -246 + } + Invert { + channels rgb + name Invert1 + xpos -277 + ypos -220 + } + Grade { + white {{parent.intensity}} + multiply {{parent.diffuse_color.r i} {parent.diffuse_color.g i} {parent.diffuse_color.b i} 0} + add {{parent.ambient_color.r i} {parent.ambient_color.g i} {parent.ambient_color.b i} 0} + gamma {{parent.gamma i}} + white_clamp true + name Diff_Grade + xpos -277 + ypos -194 + } + Dilate { + channels rgb + name Dilate1 + xpos -277 + ypos -168 + disable {{!size i}} + } + Blur { + channels rgb + name Blur1 + xpos -277 + ypos -142 + disable {{!size}} + } + Crop { + box {0 0 {width i} {height}} + reformat true + crop false + name Crop1 + xpos -277 + ypos -16 + } + Merge2 { + inputs 2 + operation plus + Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} + output {rgba.red rgba.green rgba.blue -rgba.alpha} + name Merge1 + xpos -277 + ypos 10 + disable {{!parent.Merge1_disable i}} + } +push $N128dce88 + Dot { + name Dot4 + tile_color 0x9597bf00 + xpos -116 + ypos 52 + } + Dissolve { + inputs 2 + which 1 + name Dissolve1 + xpos -277 + ypos 41 + } + Premult { + name Premult1 + xpos -277 + ypos 86 + } + Output { + name Output1 + xpos -277 + ypos 129 + } + NoOp { + inputs 0 + name lights + xpos -492 + ypos -154 + addUserKnob {20 "" l User} + addUserKnob {13 light} + light {{"parent.sensitivity*( 0.5 + parent.light_position.x/width - parent.light_pivot.x/width ) - ( parent.sensitivity-1 )/2" i} {"parent.sensitivity*( 0.5 + parent.light_position.y/height - parent.light_pivot.y/height ) - ( parent.sensitivity-1 )/2" i} {parent.z_light_position}} + } +end_group + diff --git a/gizmos/3D/TX_Fog.gizmo b/gizmos/3D/TX_Fog.gizmo new file mode 100644 index 0000000..11807d2 --- /dev/null +++ b/gizmos/3D/TX_Fog.gizmo @@ -0,0 +1,1883 @@ +#! /Applications/Nuke8.0v2/Nuke8.0v2.app/Contents/MacOS/libnuke-8.0.v2.dylib -nx +version 8.0 v2 +Group { + name TX_Fog + inputs 0 + help "TX_Fog\nby Tomas Lefebvre\n\n/// v2.0" + tile_color 0xccccccff + addUserKnob {20 Settings} + addUserKnob {26 noiseSetupDiv l "noise basic settings"} + addUserKnob {20 noiseTabBegin l "" +STARTLINE n -2} + addUserKnob {20 Noise} + addUserKnob {41 size l x/ysize T Noise0.size} + addUserKnob {41 zoffset l z T Noise0.zoffset} + addUserKnob {41 octaves T Noise0.octaves} + addUserKnob {41 nyquist l "clip at Nyquist limit" -STARTLINE T Noise0.nyquist} + addUserKnob {41 lacunarity T Noise0.lacunarity} + addUserKnob {41 gain T Noise0.gain} + addUserKnob {41 gamma T Noise0.gamma} + addUserKnob {20 "" l Transform} + addUserKnob {41 transform T Noise0.transform} + addUserKnob {41 translate T Noise0.translate} + addUserKnob {41 rotate T Noise0.rotate} + addUserKnob {41 scale T Noise0.scale} + addUserKnob {41 skew +INVISIBLE T Noise0.skew} + addUserKnob {41 center T Noise0.center} + addUserKnob {41 xrotate T Noise0.xrotate} + addUserKnob {41 yrotate T Noise0.yrotate} + addUserKnob {20 "" l Color} + addUserKnob {41 color T Noise0.color} + addUserKnob {6 color_rampBT l ramp +STARTLINE} + addUserKnob {12 color_p0 l p0} + color_p0 {100 500} + addUserKnob {18 color_color2 l color} + color_color2 {1 0 0} + addUserKnob {6 color_color2_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {12 color_p1 l p1} + color_p1 {2000 1500} + addUserKnob {20 noiseTabEnd l "" +STARTLINE n -3} + addUserKnob {26 deadSpace1 l "" +STARTLINE T " "} + addUserKnob {3 subdivisions} + subdivisions 10 + addUserKnob {22 update -STARTLINE T "from __future__ import with_statement\nthisNode = nuke.thisNode()\nsubdivs = int(thisNode\['subdivisions'].value())\nresolution = int(thisNode\['resolution'].value())\n\nwith thisNode :\n\n\tnAll = nuke.allNodes()\n\n\tfor n in nAll:\n \t\tif n.name().split('_')\[0] == 'sub' :\n \t\t\tnuke.delete(n)\n\tfor j in range(subdivs):\n \t\ti = j + 1\n\n \t\t##Noise\n \t\tnoiseKnobs = \['octaves', 'nyquist', 'lacunarity', 'gain', 'gamma', 'translate', 'rotate', 'skew', 'center', 'ramp', 'color', 'xrotate', 'yrotate']\n \t\tnoise = nuke.nodes.Noise(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('Noise0').ypos())\n \t\tnoise.setName('sub_' + str(i) + '_Noise')\n \t\tnoise\['color'].setValue(\[0,0,0,0])\n \t\tfor k in noiseKnobs :\n \t\t\tnoise\[k].setExpression('parent.Noise0.' + str(k))\n \t\tnoise\['size'].setValue(\[0,0])\n \t\tnoise\['size'].setExpression('parent.Noise0.size.0',0)\n \t\tnoise\['size'].setExpression('parent.Noise0.size.1',1)\n \t\tnoise\['scale'].setValue(\[0,0])\n \t\tnoise\['scale'].setExpression('parent.Noise0.scale.w',0)\n \t\tnoise\['scale'].setExpression('parent.Noise0.scale.h',1)\n \t\tnoise\['zoffset'].setExpression('parent.Noise0.zoffset+' + str(i) + '*parent.variancy')\n \t\tnoise\['xrotate'].setExpression('parent.Noise0.xrotate')\n \t\tnoise\['yrotate'].setExpression('parent.Noise0.yrotate')\n \t\tnoise.setInput(0,nuke.toNode('Base'))\n\t\n \t\t##Ramp\n \t\tunpRamp = nuke.nodes.Unpremult(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('Unpremult0').ypos())\n \t\tunpRamp.setName('sub_' + str(i) + '_Unpremult')\n \t\tunpRamp\['disable'].setExpression('!parent.color_rampBT')\n \t\tunpRamp.setInput(0,noise)\n\t\n \t\tramp = nuke.nodes.Ramp(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos = nuke.toNode('Ramp0').ypos())\n \t\tramp.setName('sub_' + str(i) + '_Ramp')\n \t\tramp\['disable'].setExpression('!parent.color_rampBT')\n \t\tramp\['p0'].setExpression('parent.color_p0')\n \t\tramp\['output'].setValue('rgb')\n \t\tramp\['color'].setValue(\[0,0,0,0])\n \t\tramp\['color'].setExpression('parent.color_color2.r',0)\n \t\tramp\['color'].setExpression('parent.color_color2.g',1)\n \t\tramp\['color'].setExpression('parent.color_color2.b',2)\n \t\tramp\['p1'].setExpression('parent.color_p1')\n \t\tramp.setInput(0,unpRamp)\n\t\n\t \tpreRamp = nuke.nodes.Premult(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('Premult0').ypos())\n \t\tpreRamp.setName('sub_' + str(i) + '_premult')\n \t\tpreRamp\['disable'].setExpression('!parent.color_rampBT')\n \t\tpreRamp.setInput(0,ramp)\n\t\n\n \t\t##Blur\n \t\tblur = nuke.nodes.Blur(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos = nuke.toNode('Blur0').ypos())\n \t\tblur.setName('sub_' + str(i) + '_Blur')\n \t\tblur\['channel'].setValue('rgba')\n \t\tblur\['size'].setValue(\[10,20])\n \t\tblur\['size'].setExpression('parent.Blur0.size.w',0)\n \t\tblur\['size'].setExpression('parent.Blur0.size.h',1)\n \t\tblur.setInput(0,preRamp)\n\t\n\n \t\t##Edge smooth\n \t\tsmoothEdge = nuke.nodes.Multiply(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t\t\t \typos =nuke.toNode('Multiply0').ypos())\n \t\tsmoothEdge.setName('sub_' + str(i) + '_Multiply_SEdges')\n \t\tsmoothEdge\['channel'].setValue('rgba')\n \t\tsmoothEdge\['value'].setValue(0)\n \t\tsmoothEdge\['invert_mask'].setValue(True)\n \t\tsmoothEdge\['disable'].setExpression('!parent.softEdges')\n \t\tsmoothEdge.setInput(0,blur)\n \t\tsmoothEdge.setInput(1, nuke.toNode('GradeEdge'))\n \t\n \t\t##All the ramps\n \t\tdecay_x = nuke.nodes.Ramp(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('Ramp_X0').ypos())\n \t\tdecay_x.setName('sub_' + str(i) + '_Ramp_x')\n \t\tdecay_x\['type'].setValue('smooth')\n \t\tdecay_x\['color'].setValue(0)\n \t\tdecay_x\['disable'].setExpression('!parent.decay_XBT')\n \t\tdecay_x\['p0'].setValue(\[100,100])\n \t\tdecay_x\['p0'].setExpression('(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48',0)\n \t\tdecay_x\['p1'].setValue(\[100,100])\n \t\tdecay_x\['p1'].setExpression('(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48',0)\n \t\tdecay_x.setInput(0,smoothEdge)\n\t\t\n \t\tdecayx = nuke.nodes.Ramp(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('RampX0').ypos())\n \t\tdecayx.setName('sub_' + str(i) + '_Rampx')\n \t\tdecayx\['type'].setValue('smooth')\n \t\tdecayx\['color'].setValue(0)\n \t\tdecayx\['disable'].setExpression('!parent.decayXBT')\n \t\tdecayx\['p0'].setValue(\[100,100])\n \t\tdecayx\['p0'].setExpression('2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48',0)\n \t\tdecayx\['p1'].setValue(\[100,100])\n \t\tdecayx\['p1'].setExpression('2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48',0)\n \t\tdecayx.setInput(0,decay_x)\n\t\t\n \t\tdecay_y = nuke.nodes.Ramp(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('Ramp_Y0').ypos())\n \t\tdecay_y.setName('sub_' + str(i) + '_Ramp_y')\n \t\tdecay_y\['type'].setValue('smooth')\n \t\tdecay_y\['color'].setValue(0)\n \t\tdecay_y\['disable'].setExpression('!parent.decay_YBT')\n \t\tdecay_y\['p0'].setExpression('(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48',1)\n \t\tdecay_y\['p1'].setExpression('(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48',1) \t\t\t\t\t\t\t\n\t\tdecay_y.setInput(0,decayx)\n\n\n\t \tdecayy = nuke.nodes.Ramp(xpos = nuke.toNode('Noise0').xpos()+i*150,\n\t\t\t\typos =nuke.toNode('RampY0').ypos())\n\t \tdecayy.setName('sub_' + str(i) + '_Rampy')\n\t \tdecayy\['type'].setValue('smooth')\n\t \tdecayy\['color'].setValue(0)\n\t \tdecayy\['disable'].setExpression('!parent.decayYBT')\n\t \tdecayy\['p0'].setExpression('2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48',1)\n\t \tdecayy\['p1'].setExpression('2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48',1)\n\t \tdecayy.setInput(0,decay_y)\n\t\n\t \tdecay_z = nuke.nodes.Dissolve(xpos = nuke.toNode('Noise0').xpos()+i*150,\n\t \typos =nuke.toNode('Dissolve_Z0').ypos())\n\t \tdecay_z.setName('sub_' + str(i) + '_Dissolve_z')\n\t \tdecay_z\['channel'].setValue('rgba')\n\t \tdecay_z\['disable'].setExpression('!parent.decay_ZBT')\n\t \tdecay_z\['which'].setExpression('parent.decay_Zmin>='+str(i)+'*100/'+str(subdivs)+'?1:parent.decay_Zmax<='+str(i)+'*100/'+str(subdivs)+'?0:1-('+str(i)+'*100/'+str(subdivs)+'-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))')\n\t \tdecay_z\['disable'].setExpression('!parent.decay_ZBT')\n \t\tdecay_z.setInput(1,nuke.toNode('Base'))\n \t\tdecay_z.setInput(0,decayy)\n\t\n\n\n \t \t##Opacity\n \t\tdissolve = nuke.nodes.Dissolve(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('Dissolve0').ypos())\n \t\tdissolve.setName('sub_' + str(i) + '_Dissolve')\n \t\tdissolve\['channel'].setValue('rgba')\n \t\tdissolve\['which'].setExpression('parent.Dissolve0.which')\n \t\tdissolve.setInput(1,decay_z)\n \t\tdissolve.setInput(0,nuke.toNode('Base'))\n\t\t\n\n\t \t##Card\n\t \tcard = nuke.nodes.Card2(xpos = nuke.toNode('Noise0').xpos()+i*150,\n\t \typos =nuke.toNode('Card0').ypos())\n\t \tcard.setName('sub_' + str(i) + '_Card')\n\t \tcard\['rows'].setExpression('parent.resolution')\n\t \tcard\['columns'].setExpression('parent.resolution')\n\t \tcard\['translate'].setValue(\[0,0,0.5-i*1/subdivs])\n\t \tcard.setInput(0,dissolve)\n\n\n\n \t\t##ProcGeo\n\t \tproc = nuke.nodes.ProcGeo(xpos = nuke.toNode('Noise0').xpos()+i*150,\n \t \typos =nuke.toNode('ProcGeo0').ypos())\n \t\tproc.setName('sub_' + str(i) + '_ProcGeo')\n \t\tproc\['x_size'].setExpression('parent.dNoiseX')\n \t\tproc\['x_offset'].setExpression('parent.dNoiseXoffset+' + str(i) + '*parent.dNoiseVariancy')\n \t\tproc\['y_size'].setExpression('parent.dNoiseY')\n \t\tproc\['y_offset'].setExpression('parent.dNoiseYoffset+' + str(i) + '*parent.dNoiseVariancy')\n \t\tproc\['Octaves'].setExpression('parent.dNoiseOctaves')\n \t\tproc\['Lacunarity'].setExpression('parent.dNoiseLacunarity')\n \t\tproc\['Gain'].setExpression('parent.dNoiseGain')\n \t\tproc\['Speed'].setExpression('parent.dNoiseSpeed')\n \t\tproc\['disable'].setExpression('!parent.dNoise')\n \t\tproc.setInput(0,card)\n \t\tnuke.toNode('Scene_layers').setInput(i,proc)\n\n\n\n\n"} + addUserKnob {3 resolution l " resolution" -STARTLINE} + resolution 10 + addUserKnob {26 noiseAdvSetupDiv l "noise advance settings"} + addUserKnob {14 blurSize l "blur size" R 0 100} + addUserKnob {6 softEdges l "soft edges" +STARTLINE} + softEdges true + addUserKnob {7 softEdgesSize l " size" -STARTLINE R 0 300} + softEdgesSize 200 + addUserKnob {7 opacity} + opacity 0.25 + addUserKnob {7 variancy R 0 200} + variancy 100 + addUserKnob {20 decayGroup l decay n 1} + decayGroup 0 + addUserKnob {6 decay_XBT l -x +STARTLINE} + addUserKnob {7 decay_Xmin l " min" -STARTLINE R 0 100} + addUserKnob {7 decay_Xmax l " max" -STARTLINE R 0 100} + decay_Xmax 25 + addUserKnob {6 decayXBT l " x" +STARTLINE} + addUserKnob {7 decayXmin l " min" -STARTLINE R 0 100} + addUserKnob {7 decayXmax l " max" -STARTLINE R 0 100} + decayXmax 25 + addUserKnob {6 decay_YBT l -y +STARTLINE} + addUserKnob {7 decay_Ymin l " min" -STARTLINE R 0 100} + addUserKnob {7 decay_Ymax l " max" -STARTLINE R 0 100} + decay_Ymax 25 + addUserKnob {6 decayYBT l " y" +STARTLINE} + addUserKnob {7 decayYmin l " min" -STARTLINE R 0 100} + addUserKnob {7 decayYmax l " max" -STARTLINE R 0 100} + decayYmax 25 + addUserKnob {6 decay_ZBT l -z +STARTLINE} + addUserKnob {7 decay_Zmin l " min" -STARTLINE R 0 100} + addUserKnob {7 decay_Zmax l " max" -STARTLINE R 0 100} + decay_Zmax 25 + addUserKnob {6 decayZBT l INVISIBLE +INVISIBLE +STARTLINE} + addUserKnob {20 endGroup l decayEndGroup n -1} + addUserKnob {20 cage n 1} + cage 0 + addUserKnob {41 cube l cage T Cube1.cube} + addUserKnob {13 cage_position l translate} + addUserKnob {13 cage_rotation l rotate} + addUserKnob {7 cage_scale l scale R 0 50} + cage_scale 1 + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 displace n 1} + displace 0 + addUserKnob {6 bend +STARTLINE} + addUserKnob {7 bendX l x R -1 1} + addUserKnob {7 bendY l y R -1 1} + addUserKnob {26 noisetxt l "" +STARTLINE T " "} + addUserKnob {6 dNoise l noise +STARTLINE} + addUserKnob {7 dNoiseX l "x size" R 0 20} + dNoiseX 2 + addUserKnob {7 dNoiseXoffset l "x offset" R 0 100} + addUserKnob {7 dNoiseY l "y size" R 0 20} + dNoiseY 2 + addUserKnob {7 dNoiseYoffset l "y offset" R 0 100} + addUserKnob {7 dNoiseVariancy l variancy R 0 10} + dNoiseVariancy 1 + addUserKnob {3 dNoiseOctaves l octaves} + dNoiseOctaves 5 + addUserKnob {7 dNoiseLacunarity l lacunarity R 0 5} + dNoiseLacunarity 5 + addUserKnob {7 dNoiseGain l gain R -1 1} + addUserKnob {7 dNoiseSpeed l speed R 0 10} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 dummy1 l " " T " "} + addUserKnob {26 credit l "v2.1 - Tomas Lefebvre"} +} + Constant { + inputs 0 + channels rgb + color {0 0 0 0} + format "2048 2048 0 0 2048 2048 1 square_2K" + name Base + xpos -371 + ypos -473 + } +set N1daaef30 [stack 0] +push $N1daaef30 + Shuffle { + alpha white + name ShuffleEdge + label "\[value in]" + xpos -23 + ypos -456 + } + Crop { + box {0 0 2048 2048} + softness {{parent.BlurEdge.size i}} + reformat true + crop false + name CropEdge + xpos -23 + ypos -374 + } + Blur { + channels alpha + size {{parent.softEdgesSize i}} + name BlurEdge + label "\[value size]" + xpos -23 + ypos -348 + } + Grade { + channels alpha + blackpoint 0.15 + white_clamp true + mix {{parent.BlurEdge.size/100 i}} + name GradeEdge + xpos -23 + ypos -290 + } +set N1da76ee0 [stack 0] +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+10*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_10_Noise + xpos 236 + ypos -20 + } + Unpremult { + name sub_10_Unpremult + xpos 236 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_10_Ramp + xpos 236 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_10_premult + xpos 236 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_10_Blur + xpos 236 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_10_Multiply_SEdges + xpos 236 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_10_Ramp_x + xpos 236 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_10_Rampx + xpos 236 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_10_Ramp_y + xpos 236 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_10_Rampy + xpos 236 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=10*100/10?1:parent.decay_Zmax<=10*100/10?0:1-(10*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_10_Dissolve_z + xpos 236 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_10_Dissolve + xpos 236 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 -0.5} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_10_Card + xpos 236 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+10*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+10*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_10_ProcGeo + xpos 236 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+9*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_9_Noise + xpos 86 + ypos -20 + } + Unpremult { + name sub_9_Unpremult + xpos 86 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_9_Ramp + xpos 86 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_9_premult + xpos 86 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_9_Blur + xpos 86 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_9_Multiply_SEdges + xpos 86 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_9_Ramp_x + xpos 86 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_9_Rampx + xpos 86 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_9_Ramp_y + xpos 86 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_9_Rampy + xpos 86 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=9*100/10?1:parent.decay_Zmax<=9*100/10?0:1-(9*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_9_Dissolve_z + xpos 86 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_9_Dissolve + xpos 86 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 -0.4} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_9_Card + xpos 86 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+9*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+9*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_9_ProcGeo + xpos 86 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+8*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_8_Noise + xpos -64 + ypos -20 + } + Unpremult { + name sub_8_Unpremult + xpos -64 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_8_Ramp + xpos -64 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_8_premult + xpos -64 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_8_Blur + xpos -64 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_8_Multiply_SEdges + xpos -64 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_8_Ramp_x + xpos -64 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_8_Rampx + xpos -64 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_8_Ramp_y + xpos -64 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_8_Rampy + xpos -64 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=8*100/10?1:parent.decay_Zmax<=8*100/10?0:1-(8*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_8_Dissolve_z + xpos -64 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_8_Dissolve + xpos -64 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 -0.3} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_8_Card + xpos -64 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+8*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+8*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_8_ProcGeo + xpos -64 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+7*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_7_Noise + xpos -214 + ypos -20 + } + Unpremult { + name sub_7_Unpremult + xpos -214 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_7_Ramp + xpos -214 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_7_premult + xpos -214 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_7_Blur + xpos -214 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_7_Multiply_SEdges + xpos -214 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_7_Ramp_x + xpos -214 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_7_Rampx + xpos -214 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_7_Ramp_y + xpos -214 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_7_Rampy + xpos -214 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=7*100/10?1:parent.decay_Zmax<=7*100/10?0:1-(7*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_7_Dissolve_z + xpos -214 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_7_Dissolve + xpos -214 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 -0.2} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_7_Card + xpos -214 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+7*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+7*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_7_ProcGeo + xpos -214 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+6*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_6_Noise + xpos -364 + ypos -20 + } + Unpremult { + name sub_6_Unpremult + xpos -364 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_6_Ramp + xpos -364 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_6_premult + xpos -364 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_6_Blur + xpos -364 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_6_Multiply_SEdges + xpos -364 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_6_Ramp_x + xpos -364 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_6_Rampx + xpos -364 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_6_Ramp_y + xpos -364 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_6_Rampy + xpos -364 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=6*100/10?1:parent.decay_Zmax<=6*100/10?0:1-(6*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_6_Dissolve_z + xpos -364 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_6_Dissolve + xpos -364 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 -0.1} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_6_Card + xpos -364 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+6*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+6*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_6_ProcGeo + xpos -364 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+5*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_5_Noise + xpos -514 + ypos -20 + } + Unpremult { + name sub_5_Unpremult + xpos -514 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_5_Ramp + xpos -514 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_5_premult + xpos -514 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_5_Blur + xpos -514 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_5_Multiply_SEdges + xpos -514 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_5_Ramp_x + xpos -514 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_5_Rampx + xpos -514 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_5_Ramp_y + xpos -514 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_5_Rampy + xpos -514 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=5*100/10?1:parent.decay_Zmax<=5*100/10?0:1-(5*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_5_Dissolve_z + xpos -514 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_5_Dissolve + xpos -514 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_5_Card + xpos -514 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+5*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+5*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_5_ProcGeo + xpos -514 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+4*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_4_Noise + xpos -664 + ypos -20 + } + Unpremult { + name sub_4_Unpremult + xpos -664 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_4_Ramp + xpos -664 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_4_premult + xpos -664 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_4_Blur + xpos -664 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_4_Multiply_SEdges + xpos -664 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_4_Ramp_x + xpos -664 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_4_Rampx + xpos -664 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_4_Ramp_y + xpos -664 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_4_Rampy + xpos -664 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=4*100/10?1:parent.decay_Zmax<=4*100/10?0:1-(4*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_4_Dissolve_z + xpos -664 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_4_Dissolve + xpos -664 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 0.1} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_4_Card + xpos -664 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+4*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+4*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_4_ProcGeo + xpos -664 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+3*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_3_Noise + xpos -814 + ypos -20 + } + Unpremult { + name sub_3_Unpremult + xpos -814 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_3_Ramp + xpos -814 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_3_premult + xpos -814 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_3_Blur + xpos -814 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_3_Multiply_SEdges + xpos -814 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_3_Ramp_x + xpos -814 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_3_Rampx + xpos -814 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_3_Ramp_y + xpos -814 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_3_Rampy + xpos -814 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=3*100/10?1:parent.decay_Zmax<=3*100/10?0:1-(3*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_3_Dissolve_z + xpos -814 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_3_Dissolve + xpos -814 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 0.2} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_3_Card + xpos -814 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+3*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+3*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_3_ProcGeo + xpos -814 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+2*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_2_Noise + xpos -964 + ypos -20 + } + Unpremult { + name sub_2_Unpremult + xpos -964 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_2_Ramp + xpos -964 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_2_premult + xpos -964 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_2_Blur + xpos -964 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_2_Multiply_SEdges + xpos -964 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_2_Ramp_x + xpos -964 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_2_Rampx + xpos -964 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_2_Ramp_y + xpos -964 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_2_Rampy + xpos -964 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=2*100/10?1:parent.decay_Zmax<=2*100/10?0:1-(2*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_2_Dissolve_z + xpos -964 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_2_Dissolve + xpos -964 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 0.3} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_2_Card + xpos -964 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+2*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+2*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_2_ProcGeo + xpos -964 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size {{parent.Noise0.size.0} {parent.Noise0.size.1}} + zoffset {{parent.Noise0.zoffset+1*parent.variancy}} + octaves {{parent.Noise0.octaves}} + nyquist {{parent.Noise0.nyquist}} + lacunarity {{parent.Noise0.lacunarity}} + gain {{parent.Noise0.gain}} + gamma {{parent.Noise0.gamma}} + translate {{parent.Noise0.translate} {parent.Noise0.translate}} + rotate {{parent.Noise0.rotate}} + scale {{parent.Noise0.scale.w} {parent.Noise0.scale.h}} + center {{parent.Noise0.center} {parent.Noise0.center}} + xrotate {{parent.Noise0.xrotate}} + yrotate {{parent.Noise0.yrotate}} + ramp {{parent.Noise0.ramp}} + color {{parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color} {parent.Noise0.color}} + name sub_1_Noise + xpos -1114 + ypos -20 + } + Unpremult { + name sub_1_Unpremult + xpos -1114 + ypos 6 + disable {{!parent.color_rampBT}} + } + Ramp { + output rgb + p0 {{parent.color_p0} {parent.color_p0}} + p1 {{parent.color_p1} {parent.color_p1}} + color {{parent.color_color2.r} {parent.color_color2.g} {parent.color_color2.b} 0} + name sub_1_Ramp + xpos -1114 + ypos 32 + disable {{!parent.color_rampBT}} + } + Premult { + name sub_1_premult + xpos -1114 + ypos 58 + disable {{!parent.color_rampBT}} + } + Blur { + channels rgba + size {{parent.Blur0.size.w} {parent.Blur0.size.h}} + name sub_1_Blur + xpos -1114 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name sub_1_Multiply_SEdges + xpos -1114 + ypos 210 + disable {{!parent.softEdges}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48} 100} + type smooth + color 0 + name sub_1_Ramp_x + xpos -1114 + ypos 271 + disable {{!parent.decay_XBT}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48} 100} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48} 100} + type smooth + color 0 + name sub_1_Rampx + xpos -1114 + ypos 297 + disable {{!parent.decayXBT}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48}} + type smooth + color 0 + name sub_1_Ramp_y + xpos -1114 + ypos 327 + disable {{!parent.decay_YBT}} + } + Ramp { + p0 {100 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48}} + p1 {100 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48}} + type smooth + color 0 + name sub_1_Rampy + xpos -1114 + ypos 353 + disable {{!parent.decayYBT}} + } + Dissolve { + inputs 2 + channels rgba + which {{parent.decay_Zmin>=1*100/10?1:parent.decay_Zmax<=1*100/10?0:1-(1*100/10-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))/(parent.decay_Zmax-(parent.decay_Zmin>=parent.decay_Zmax?parent.decay_Zmax-0.01:parent.decay_Zmin))}} + name sub_1_Dissolve_z + xpos -1114 + ypos 407 + disable {{!parent.decay_ZBT}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.Dissolve0.which}} + name sub_1_Dissolve + xpos -1114 + ypos 580 + } + Card2 { + rows {{parent.resolution}} + columns {{parent.resolution}} + translate {0 0 0.4} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0 0 0} +1 {0 -0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {0.5 0 0} +1 {0.5 -0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666865 0} 1 {0 0 0} 1 {1 0 0} +1 {-0.5 0 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0 0.5 0} +1 {0 0 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {0.5 0.5 0} +1 {0.5 0 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0.1666666716 0} 1 {0 -0.1666666716 0} 1 {1 0.5 0} +1 {-0.5 0.5 0} 1 {0.1666666865 0 0} 1 {0 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0 1 0} +1 {0 0.5 0} 1 {0.1666666716 0 0} 1 {-0.1666666716 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {0.5 1 0} +1 {0.5 0.5 0} 1 {0 0 0} 1 {-0.1666666865 0 0} 1 {0 0 0} 1 {0 -0.1666666865 0} 1 {1 1 0} } + name sub_1_Card + xpos -1114 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX}} + x_offset {{parent.dNoiseXoffset+1*parent.dNoiseVariancy}} + y_size {{parent.dNoiseY}} + y_offset {{parent.dNoiseYoffset+1*parent.dNoiseVariancy}} + Octaves {{parent.dNoiseOctaves}} + Lacunarity {{parent.dNoiseLacunarity}} + Gain {{parent.dNoiseGain}} + Speed {{parent.dNoiseSpeed}} + name sub_1_ProcGeo + xpos -1114 + ypos 805 + disable {{!parent.dNoise}} + } +push $N1daaef30 +push $N1da76ee0 +push $N1daaef30 + Noise { + size 300 + center {1099 567} + xrotate 5 + yrotate 5 + p1 {204 926} + color0 {1 0.1200000048 0.1200000048 0} + p0 {494 52} + name Noise0 + xpos -1264 + ypos -20 + } + Unpremult { + name Unpremult0 + xpos -1264 + ypos 6 + disable {{!parent.color_rampBT i}} + } + Ramp { + output rgb + p0 {{parent.color_p0 i} {parent.color_p0 i}} + p1 {{parent.color_p1 i} {parent.color_p1 i}} + color {{parent.color_color2 i} {parent.color_color2 i} {parent.color_color2 i} {parent.color_color2 i}} + name Ramp0 + xpos -1264 + ypos 32 + disable {{!parent.color_rampBT i}} + } + Premult { + name Premult0 + xpos -1264 + ypos 58 + disable {{!parent.color_rampBT i}} + } + Blur { + channels rgba + size {{parent.blurSize i} {parent.blurSize i}} + name Blur0 + label "\[value size]" + xpos -1264 + ypos 107 + } + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name Multiply0 + xpos -1264 + ypos 210 + disable {{!parent.softEdges i}} + } + Ramp { + p0 {{(parent.decay_Xmax==0?1:parent.decay_Xmax)*20.48 i} 100} + p1 {{(parent.decay_Xmin>=parent.decay_Xmax?parent.decay_Xmax-1:parent.decay_Xmin)*20.48 i} 100} + type smooth + color 0 + name Ramp_X0 + xpos -1264 + ypos 271 + disable {{!parent.decay_XBT i}} + } + Ramp { + p0 {{2048-(parent.decayXmax==0?1:parent.decayXmax)*20.48 i} 200} + p1 {{2048-(parent.decayXmin>=parent.decayXmax?parent.decayXmax-1:parent.decayXmin)*20.48 i} 200} + type smooth + color 0 + name RampX0 + xpos -1264 + ypos 297 + disable {{!parent.decayXBT i}} + } + Ramp { + p0 {100 {(parent.decay_Ymax==0?1:parent.decay_Ymax)*20.48 i}} + p1 {100 {(parent.decay_Ymin>=parent.decay_Ymax?parent.decay_Ymax-1:parent.decay_Ymin)*20.48 i}} + type smooth + color 0 + name Ramp_Y0 + xpos -1264 + ypos 327 + disable {{!parent.decay_YBT i}} + } + Ramp { + p0 {200 {2048-(parent.decayYmax==0?1:parent.decayYmax)*20.48 i}} + p1 {200 {2048-(parent.decayYmin>=parent.decayYmax?parent.decayYmax-1:parent.decayYmin)*20.48 i}} + color 0 + name RampY0 + xpos -1264 + ypos 353 + disable {{!parent.decayYBT i}} + } + Dissolve { + inputs 2 + channels rgba + which 1 + name Dissolve_Z0 + xpos -1264 + ypos 407 + disable {{!parent.decay_ZBT i}} + } +push $N1daaef30 + Dissolve { + inputs 2 + channels rgba + which {{parent.opacity i}} + name Dissolve0 + xpos -1264 + ypos 580 + } + Card2 { + rows {{parent.resolution i}} + columns {{parent.resolution i}} + translate {0 0 0.5} + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card0 + xpos -1264 + ypos 779 + } + ProcGeo { + x_size {{parent.dNoiseX i}} + x_offset {{parent.dNoiseXoffset i}} + y_size {{parent.dNoiseY i}} + y_offset {{parent.dNoiseYoffset i}} + Octaves {{parent.dNoiseOctaves i}} + Lacunarity {{parent.dNoiseLacunarity i}} + Gain {{parent.dNoiseGain i}} + Speed {{parent.dNoiseSpeed i}} + name ProcGeo0 + xpos -1264 + ypos 805 + disable {{!parent.dNoise i}} + } + Scene { + inputs 11 + name Scene_layers + xpos -206 + ypos 1173 + } + CrosstalkGeo { + crossover {x {} + y {} + z {} + x->y {} + x->z {(-pow2(x*2))*bendX C 0} + y->x {} + y->z {(-pow2(x*2))*bendY C 0} + z->x {} + z->y {}} + name CrosstalkGeo_bend + xpos -216 + ypos 1266 + disable {{!parent.bend i}} + } + TransformGeo { + translate {{(parent.Cube1.cube.x+parent.Cube1.cube.r)/2 i} {(parent.Cube1.cube.y+parent.Cube1.cube.t)/2 i} {(parent.Cube1.cube.n+parent.Cube1.cube.f)/2 i}} + scaling {{(parent.Cube1.cube.r-parent.Cube1.cube.x) i} {(parent.Cube1.cube.t-parent.Cube1.cube.y) i} {(parent.Cube1.cube.f-parent.Cube1.cube.n) i}} + name TransformGeo_cage + xpos -216 + ypos 1404 + } + TransformGeo { + translate {{parent.cage_position i} {parent.cage_position i} {parent.cage_position i}} + rotate {{parent.cage_rotation i} {parent.cage_rotation i} {parent.cage_rotation i}} + uniform_scale {{parent.cage_scale i}} + name TransformGeo_transform + xpos -216 + ypos 1467 + } + Output { + name Output1 + xpos -216 + ypos 1640 + } + Cube { + inputs 0 + display wireframe + render_mode off + rows 1 + columns 1 + translate {{parent.cage_position i x1001 1.745000005} {parent.cage_position i x1001 0} {parent.cage_position i x1001 0}} + rotate {{parent.cage_rotation i} {parent.cage_rotation i} {parent.cage_rotation i}} + uniform_scale {{parent.cage_scale i}} + name Cube1 + xpos 48 + ypos 1402 + } +end_group diff --git a/gizmos/3D/Tangent_Space_Normals/Multi_Tangent_Space_Normals_Generator.gizmo b/gizmos/3D/Tangent_Space_Normals/Multi_Tangent_Space_Normals_Generator.gizmo new file mode 100644 index 0000000..e7f6355 --- /dev/null +++ b/gizmos/3D/Tangent_Space_Normals/Multi_Tangent_Space_Normals_Generator.gizmo @@ -0,0 +1,122 @@ +#! /Applications/Nuke8.0v1/Nuke8.0v1.app/Contents/MacOS/libnuke-8.0.v1.dylib -nx +version 8.0 v1 +Gizmo { + tile_color 0xffbf00ff + addUserKnob {20 multi_prewitt_tangent_space_normals_generator_Tab l "Multi Tangent Space Normals Generator"} + addUserKnob {20 parameters_Group l Parameters n 1} + addUserKnob {26 largest_Static_Text l Largest} + addUserKnob {7 largest_size_Floating_Point_Slider l "Largest Size" R 1 256} + largest_size_Floating_Point_Slider 128 + addUserKnob {7 largest_intensity_Floating_Point_Slider l "Largest Intensity" R -5 5} + largest_intensity_Floating_Point_Slider 1 + addUserKnob {26 large_Static_Text l Large} + addUserKnob {7 large_size_Floating_Point_Slider l "Large Size" R 1 256} + large_size_Floating_Point_Slider 64 + addUserKnob {7 large_intensity_Floating_Point_Slider l "Large Intensity" R -5 5} + large_intensity_Floating_Point_Slider 1 + addUserKnob {26 medium_Static_Text l Medium} + addUserKnob {7 medium_size_Floating_Point_Slider l "Medium Size" R 1 256} + medium_size_Floating_Point_Slider 16 + addUserKnob {7 medium_intensity_Floating_Point_Slider l "Medium Intensity" R -5 5} + medium_intensity_Floating_Point_Slider 1 + addUserKnob {26 small_Static_Text l Small} + addUserKnob {7 small_size_Floating_Point_Slider l "Small Size" R 1 256} + small_size_Floating_Point_Slider 4 + addUserKnob {7 small_intensity_Floating_Point_Slider l "Small Intensity" R -5 5} + small_intensity_Floating_Point_Slider 1 + addUserKnob {26 smallest_Static_Text l Smallest} + addUserKnob {7 smallest_size_Floating_Point_Slider l "Smallest Size" R 1 256} + smallest_size_Floating_Point_Slider 1 + addUserKnob {7 smallest_intensity_Floating_Point_Slider l "Smallest Intensity" R -5 5} + smallest_intensity_Floating_Point_Slider 1 + addUserKnob {20 parameters_endGroup l endGroup n -1} + addUserKnob {20 about_Tab l About} + addUserKnob {26 description_Text l "" +STARTLINE T "Multi Tangent Space Normals Generator v0.1.1\n\ncolour-science.org - April 9, 2015\n\nThis Gizmo / Group generates tangent space normals from given input using multiple Tangent Space Normals Generators.\n\n\[1] Kolasinski, K. (2015). AwesomeBump v1.0, 1–7. Retrieved from http://awesomebump.besaba.com/wp-content/uploads/2015/01/ABoverwiev.pdf\n\[2] Wikipedia. (n.d.). Sobel operator. Retrieved April 7, 2015, from http://en.wikipedia.org/wiki/Sobel_operator"} +} + Input { + inputs 0 + name Input + xpos -260 + ypos -33 + } +set N9fe7960 [stack 0] + Tangent_Space_Normals_Generator { + name Largest_Tangent_Space_Normals_Generator + xpos -40 + ypos -9 + parameters_Group 1 + size_Floating_Point_Slider {{parent.largest_size_Floating_Point_Slider}} + intensity_Floating_Point_Slider {{parent.largest_intensity_Floating_Point_Slider}} + } +push $N9fe7960 + Tangent_Space_Normals_Generator { + name Large_Tangent_Space_Normals_Generator + xpos -150 + ypos -9 + parameters_Group 1 + size_Floating_Point_Slider {{parent.large_size_Floating_Point_Slider}} + intensity_Floating_Point_Slider {{parent.large_intensity_Floating_Point_Slider}} + } +push $N9fe7960 + Tangent_Space_Normals_Generator { + name Medium_Tangent_Space_Normals_Generator + xpos -260 + ypos -9 + parameters_Group 1 + size_Floating_Point_Slider {{parent.medium_size_Floating_Point_Slider}} + intensity_Floating_Point_Slider {{parent.medium_intensity_Floating_Point_Slider}} + } +push $N9fe7960 + Tangent_Space_Normals_Generator { + name Small_Tangent_Space_Normals_Generator + xpos -370 + ypos -9 + parameters_Group 1 + size_Floating_Point_Slider {{parent.small_size_Floating_Point_Slider}} + intensity_Floating_Point_Slider {{parent.small_intensity_Floating_Point_Slider}} + } +push $N9fe7960 + Tangent_Space_Normals_Generator { + name Smallest_Emboss_Tangent_Space_Normals_Generator + xpos -480 + ypos -9 + parameters_Group 1 + size_Floating_Point_Slider {{parent.smallest_size_Floating_Point_Slider}} + intensity_Floating_Point_Slider {{parent.smallest_intensity_Floating_Point_Slider}} + } + Partial_Derivative_Blending { + inputs 2 + name s_Partial_Derivative_Blending + xpos -370 + ypos 15 + } + Partial_Derivative_Blending { + inputs 2 + name m_Partial_Derivative_Blending + xpos -260 + ypos 15 + } + Partial_Derivative_Blending { + inputs 2 + name l_Partial_Derivative_Blending + xpos -150 + ypos 15 + } + Partial_Derivative_Blending { + inputs 2 + name lst_Partial_Derivative_Blending + xpos -40 + ypos 15 + } + Shuffle { + alpha white + name Shuffle + xpos -40 + ypos 39 + } + Output { + name Output + xpos -40 + ypos 63 + } +end_group diff --git a/gizmos/3D/Tangent_Space_Normals/Normalise_Tangent_Space_Normals.gizmo b/gizmos/3D/Tangent_Space_Normals/Normalise_Tangent_Space_Normals.gizmo new file mode 100644 index 0000000..d61e571 --- /dev/null +++ b/gizmos/3D/Tangent_Space_Normals/Normalise_Tangent_Space_Normals.gizmo @@ -0,0 +1,47 @@ +#! /Applications/Nuke8.0v1/Nuke8.0v1.app/Contents/MacOS/libnuke-8.0.v1.dylib -nx +version 8.0 v1 +Gizmo { + tile_color 0xffbf00ff + addUserKnob {20 Normalise_Tangent_Space_Normals l "Normalise Tangent Space Normals"} + addUserKnob {20 about_Tab l About} + addUserKnob {26 description_Text l "" +STARTLINE T "Normalise Tangent Space Normals v0.1.0\n\ncolour-science.org - April 6, 2015\n\nThis Gizmo / Group normalises tangent space normals.\n"} +} + Input { + inputs 0 + name Input + xpos 290 + ypos -57 + } + Expression { + expr0 "r * 2 - 1" + expr1 "g * 2 - 1" + expr2 "b * 2 - 1" + name input_offset_Expression + xpos 290 + ypos -33 + } + Expression { + temp_name0 norme + temp_expr0 "sqrt(r * r + g * g + b * b)" + expr0 "r / abs(norme)" + expr1 "g / abs(norme)" + expr2 "b / abs(norme)" + name normalise_Expression + selected true + xpos 290 + ypos -9 + } + Expression { + expr0 "r * 0.5 + 0.5" + expr1 "g * 0.5 + 0.5" + expr2 "b * 0.5 + 0.5" + name output_offset_Expression + xpos 290 + ypos 15 + } + Output { + name Output1 + xpos 290 + ypos 39 + } +end_group diff --git a/gizmos/3D/Tangent_Space_Normals/Partial_Derivative_Blending.gizmo b/gizmos/3D/Tangent_Space_Normals/Partial_Derivative_Blending.gizmo new file mode 100644 index 0000000..9fd0f0f --- /dev/null +++ b/gizmos/3D/Tangent_Space_Normals/Partial_Derivative_Blending.gizmo @@ -0,0 +1,67 @@ +#! /Applications/Nuke8.0v1/Nuke8.0v1.app/Contents/MacOS/libnuke-8.0.v1.dylib -nx +version 8.0 v1 +Gizmo { + inputs 2 + tile_color 0xffbf00ff + addUserKnob {20 Partial_Derivative_Blending l "Partial Derivative Blending"} + addUserKnob {20 about_Tab l About} + addUserKnob {26 description_Text l "" +STARTLINE T "Partial Derivative Blending v0.1.0\n\ncolour-science.org - April 6, 2015\n\nThis Gizmo / Group blends tangent space normals together using Partial Derivative Blending.\n\n\[1] Self Shadow. (n.d.). Blending in Detail. Retrieved April 7, 2015, from http://blog.selfshadow.com/publications/blending-in-detail/\n"} +} + Input { + inputs 0 + name n1_Input + xpos -370 + ypos 63 + } + Expression { + expr0 "r * 2 - 1" + expr1 "g * 2 - 1" + expr2 "b * 2 - 1" + name n1_input_offset_Expression + xpos -370 + ypos 87 + } + Input { + inputs 0 + name n2_Input + xpos -150 + ypos 63 + number 1 + } + Expression { + expr0 "r * 2 - 1" + expr1 "g * 2 - 1" + expr2 "b * 2 - 1" + name n2_input_offset_Expression + xpos -150 + ypos 87 + } + MergeExpression { + inputs 2 + expr0 "Ar + Br" + expr1 "Ag + Bg" + expr2 "Ab * Bb" + name MergeExpression + xpos -260 + ypos 87 + } + Expression { + expr0 "r * 0.5 + 0.5" + expr1 "g * 0.5 + 0.5" + expr2 "b * 0.5 + 0.5" + name output_offset_Expression + selected true + xpos -260 + ypos 111 + } + Normalise_Tangent_Space_Normals { + name Normalise_Tangent_Space_Normals + xpos -260 + ypos 135 + } + Output { + name Output + xpos -260 + ypos 159 + } +end_group diff --git a/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_Generator.gizmo b/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_Generator.gizmo new file mode 100644 index 0000000..d415ae5 --- /dev/null +++ b/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_Generator.gizmo @@ -0,0 +1,114 @@ +#! /Applications/Nuke8.0v1/Nuke8.0v1.app/Contents/MacOS/libnuke-8.0.v1.dylib -nx +version 8.0 v1 +Gizmo { + tile_color 0xffbf00ff + addUserKnob {20 prewitt_tangent_space_normals_generator_Tab l "Tangent Space Normals Generator"} + addUserKnob {20 parameters_Group l Parameters n 1} + addUserKnob {7 size_Floating_Point_Slider l Size R 1 5} + size_Floating_Point_Slider 1 + addUserKnob {7 intensity_Floating_Point_Slider l Intensity R -5 5} + intensity_Floating_Point_Slider 1 + addUserKnob {20 parameters_endGroup l endGroup n -1} + addUserKnob {20 about_Tab l About} + addUserKnob {26 description_Text l "" +STARTLINE T "Tangent Space Normals Generator v0.1.1\n\ncolour-science.org - April 9, 2015\n\nThis Gizmo / Group generates tangent space normals from given input.\n\n\[1] Kolasinski, K. (2015). AwesomeBump v1.0, 1–7. Retrieved from http://awesomebump.besaba.com/wp-content/uploads/2015/01/ABoverwiev.pdf\n\[2] Wikipedia. (n.d.). Sobel operator. Retrieved April 7, 2015, from http://en.wikipedia.org/wiki/Sobel_operator"} +} + Input { + inputs 0 + name Input + xpos -590 + ypos -33 + } + Saturation { + saturation 0 + name Saturation + xpos -590 + ypos -9 + } + Blur { + size {{"parent.size_Floating_Point_Slider - 1"}} + quality {{"size * 0.5 + 8"}} + name Blur + xpos -590 + ypos 11 + } + Multiply { + value {{parent.intensity_Floating_Point_Slider}} + name intensity_Multiply + xpos -590 + ypos 35 + } + Expression { + expr0 "x / width" + expr1 "y / width" + name gradient_Expression + xpos -590 + ypos 67 + } +set N1d121b70 [stack 0] + Matrix { + matrix { + {-3 0 3} + {-10 0 10} + {-3 0 3} + } + name dx_Scharr_Matrix + xpos -700 + ypos 63 + } +push $N1d121b70 + Matrix { + matrix { + {3 10 3} + {0 0 0} + {-3 -10 -3} + } + name dy_Scharr_Matrix + xpos -480 + ypos 63 + } + MergeExpression { + inputs 2 + expr0 "Ag * Bb - Bg * Ab" + expr1 "Ar * Bb - Br * Ab" + expr2 "Ar * Bg - Br * Ag" + name dot_product_MergeExpression + label "\n" + xpos -590 + ypos 87 + } + Expression { + expr1 "- g" + name invert_green_Expression + xpos -590 + ypos 111 + } + Expression { + temp_name0 norme + temp_expr0 "sqrt(r * r + g * g + b * b)" + expr0 "r / abs(norme)" + expr1 "g / abs(norme)" + expr2 "b / abs(norme)" + name normalise_Expression + xpos -590 + ypos 135 + } + Expression { + expr0 "r * 0.5 + 0.5" + expr1 "g * 0.5 + 0.5" + expr2 "b * 0.5 + 0.5" + name output_offset_Expression + xpos -590 + ypos 159 + } + Shuffle { + alpha white + name Shuffle + xpos -590 + ypos 183 + } + Output { + name Output + xpos -590 + ypos 207 + } +end_group diff --git a/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_Previewer.gizmo b/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_Previewer.gizmo new file mode 100644 index 0000000..334a854 --- /dev/null +++ b/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_Previewer.gizmo @@ -0,0 +1,408 @@ +#! /Applications/Nuke8.0v1/Nuke8.0v1.app/Contents/MacOS/libnuke-8.0.v1.dylib -nx +version 8.0 v1 +Gizmo { + inputs 5 + tile_color 0xffbf00ff + addUserKnob {20 tangent_space_normals_previewer_Tab l "Tangent Space Normals Previewer"} + addUserKnob {20 parameters_Group l Parameters n 1} + addUserKnob {26 environment_Static_Text l Environment} + addUserKnob {7 environment_rx_Floating_Point_Slider l "Rotate X" R -180 180} + addUserKnob {7 environment_ry_Floating_Point_Slider l "Rotate Y" R -180 180} + addUserKnob {7 environment_rz_Floating_Point_Slider l "Rotate Z" R -180 180} + addUserKnob {26 geometry_Static_Text l Geometry} + addUserKnob {7 object_rx_Floating_Point_Slider l "Rotate X" R -180 180} + addUserKnob {7 object_ry_Floating_Point_Slider l "Rotate Y" R -180 180} + addUserKnob {7 object_rz_Floating_Point_Slider l "Rotate Z" R -180 180} + addUserKnob {4 object_Pulldown_Choice l Object M {Cube Sphere Cylinder Card Custom}} + addUserKnob {20 parameters_endGroup l endGroup n -1} + addUserKnob {20 about_Tab l About} + addUserKnob {26 description_Text l "" +STARTLINE T "Tangent Space Normals Previewer v0.1.0\n\ncolour-science.org - April 9, 2015\n\nThis Gizmo / Group helps previewing tangent space normals by using angular mapping lighting.\n\nThe Environment input is expected to be in LatLong space and diffuse or specular convoluted. EnvConvolve gizmo from Garrett (2010) can be use to perform this convolution.\n\n\[1] Garrett, M. (n.d.). EnvConvolve v1.4. Retrieved April 9, 2015, from http://www.nukepedia.com/gizmos/filter/envconvolve\n"} +} + Camera2 { + inputs 0 + translate {0 0 4} + name Camera + xpos 410 + ypos -30 + } +set N1c9ccef0 [stack 0] + Input { + inputs 0 + name Normals + xpos 400 + ypos -273 + number 3 + } + Reformat { + type "to box" + box_width {{Background.width}} + box_height {{Background.height}} + box_fixed true + name normals_Reformat + xpos 400 + ypos -249 + } + Expression { + expr0 "r * 2 - 1" + expr1 "g * 2 - 1" + expr2 "b * 2 - 1" + name input_offset_Expression + xpos 400 + ypos -225 + } + Input { + inputs 0 + name Diffuse + xpos 620 + ypos -297 + number 1 + } + Shuffle { + alpha white + name Shuffle + xpos 620 + ypos -273 + } + Constant { + inputs 0 + color 1 + format "256 256 0 0 256 256 1 square_256" + name Constant + xpos 730 + ypos -321 + } + Switch { + inputs 2 + which {{"\[exists parent.input1]"}} + name diffuse_Switch + xpos 620 + ypos -249 + } + Reformat { + type "to box" + box_width {{Background.width}} + box_height {{Background.height}} + box_fixed true + name diffuse_Reformat + xpos 620 + ypos -201 + } +add_layer {tangent tangent.red tangent.green tangent.blue tangent.alpha} + ShuffleCopy { + inputs 2 + alpha alpha2 + black red + white green + red2 blue + green2 alpha + out2 tangent + name ShuffleCopy + xpos 510 + ypos -201 + } +set N1c931270 [stack 0] + Input { + inputs 0 + name Object + xpos 730 + ypos -177 + number 2 + } + ApplyMaterial { + inputs 2 + name ApplyMaterial + xpos 730 + ypos -153 + } +push $N1c931270 + Card2 { + control_points {3 3 3 6 + +1 {-0.5 -0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0 0 0} +1 {0 -0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {0.5 0 0} +1 {0.5 -0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666865 0} 0 {0 0 0} 0 {1 0 0} +1 {-0.5 0 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0 0.5 0} +1 {0 0 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {0.5 0.5 0} +1 {0.5 0 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0.1666666716 0} 0 {0 -0.1666666716 0} 0 {1 0.5 0} +1 {-0.5 0.5 0} 0 {0.1666666865 0 0} 0 {0 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0 1 0} +1 {0 0.5 0} 0 {0.1666666716 0 0} 0 {-0.1666666716 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {0.5 1 0} +1 {0.5 0.5 0} 0 {0 0 0} 0 {-0.1666666865 0 0} 0 {0 0 0} 0 {0 -0.1666666865 0} 0 {1 1 0} } + name Card + xpos 620 + ypos -153 + } +push $N1c931270 + Cylinder { + radius 0.5 + height 1 + rotate {0 180 0} + name Cylinder + xpos 510 + ypos -153 + } +push $N1c931270 + Sphere { + radius 0.5 + rotate {0 180 0} + name Sphere + xpos 400 + ypos -153 + } +push $N1c931270 + Cube { + rows 1 + columns 1 + name Cube + xpos 290 + ypos -153 + } + Switch { + inputs 5 + which {{parent.object_Pulldown_Choice}} + name Switch + xpos 510 + ypos -129 + } + TransformGeo { + rotate {{parent.object_rx_Floating_Point_Slider} {parent.object_ry_Floating_Point_Slider} {parent.object_rz_Floating_Point_Slider}} + name TransformGeo + xpos 510 + ypos -105 + } + Scene { + name Scene + xpos 520 + ypos -78 + } + Input { + inputs 0 + name Background + label "\n" + xpos 620 + ypos -9 + number 4 + } +set N1cdb0a80 [stack 0] +add_layer {point point.red point.green point.blue point.alpha} +add_layer {normal normal.red normal.green normal.blue normal.alpha} + ScanlineRender { + inputs 3 + samples 4 + motion_vectors_type off + MB_channel none + output_shader_vectors true + P_channel point + N_channel normal + name ScanlineRender + xpos 510 + ypos -9 + } +set N1cdb45c0 [stack 0] + Input { + inputs 0 + name Environment + xpos 290 + ypos 111 + } +set N1cdc3380 [stack 0] +push $N1cdb45c0 + Shuffle { + in normal + name normal_Shuffle + xpos 620 + ypos 39 + } +push $N1cdb45c0 + Shuffle { + in tangent + name tangent_Shuffle + xpos 400 + ypos 39 + } + MergeExpression { + inputs 2 + expr0 "Ar + Br" + expr1 "Ag + Bg" + expr2 "Ab * Bb" + name Partial_Blending_Derivative_MergeExpression + xpos 510 + ypos 39 + cached true + } + Expression { + temp_name0 norme + temp_expr0 "sqrt(r * r + g * g + b * b)" + expr0 "r / abs(norme)" + expr1 "g / abs(norme)" + expr2 "b / abs(norme)" + name normalise_Expression + xpos 510 + ypos 63 + } + Group { + inputs 2 + name Angular_Mapping_Lighting + tile_color 0xffbf00ff + xpos 510 + ypos 111 + addUserKnob {20 angular_mapping_lighting_Tab l "Angular Mapping Lighting"} + addUserKnob {20 parameters_Group l Parameters n 1} + addUserKnob {26 environment_Static_Text l Environment} + addUserKnob {7 rx_Floating_Point_Slider l "Rotate X" R -180 180} + rx_Floating_Point_Slider {{parent.environment_rx_Floating_Point_Slider}} + addUserKnob {7 ry_Floating_Point_Slider l "Rotate Y" R -180 180} + ry_Floating_Point_Slider {{parent.environment_ry_Floating_Point_Slider}} + addUserKnob {7 rz_Floating_Point_Slider l "Rotate Z" R -180 180} + rz_Floating_Point_Slider {{parent.environment_rz_Floating_Point_Slider}} + addUserKnob {20 parameters_endGroup l endGroup n -1} + addUserKnob {20 about_Tab l About} + addUserKnob {26 description_Text l "" +STARTLINE T "Angular Mapping Lighting v0.1.0\n\ncolour-science.org - April 9, 2015\n\nThis Gizmo / Group performs angular mapping lighting using a LatLong diffuse or specular convoluted environment texture.\n\n\[1] Garrett, M. (n.d.). EnvRelight v1.5. Retrieved April 9, 2015, from http://www.nukepedia.com/gizmos/other/envrelight\n"} + } + Input { + inputs 0 + name Normals + xpos 290 + ypos -537 + } + Expression { + temp_name0 norme + temp_expr0 "sqrt(r * r + g * g + b * b)" + expr0 "r / abs(norme)" + expr1 "g / abs(norme)" + expr2 "b / abs(norme)" + name normalise_Expression + xpos 290 + ypos -513 + } + Expression { + temp_name0 radius + temp_expr0 "0.5 / pi * acos(b) / sqrt(r*r + g*g)" + expr0 "0.5 + (r * radius)" + expr1 "0.5 + (g * radius)" + expr2 0 + name angular_map_projection_Expression + xpos 290 + ypos -489 + } + Input { + inputs 0 + name Environment + xpos 180 + ypos -537 + number 1 + } + Mirror { + Horizontal true + name Mirror + xpos 180 + ypos -517 + } + SphericalTransform { + input "Lat Long map" + output "Light Probe 360" + out_rx {{parent.rx_Floating_Point_Slider}} + out_ry {{parent.ry_Floating_Point_Slider}} + out_rz {{parent.rz_Floating_Point_Slider}} + format "256 256 0 0 256 256 1 square_256" + fix true + name SphericalTransform + selected true + xpos 180 + ypos -493 + } + Dot { + name Dot5 + xpos 214 + ypos -462 + } + STMap { + inputs 2 + channels rgba + uv rgb + name STMap + xpos 290 + ypos -465 + } + Output { + name Output + xpos 290 + ypos -441 + } + end_group + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy + xpos 510 + ypos 131 + } + Premult { + name Premult + xpos 510 + ypos 159 + } +push $N1cdb45c0 + Merge2 { + inputs 2 + operation multiply + name diffuse_Merge + xpos 620 + ypos 159 + } +push $N1cdb0a80 +push $N1c9ccef0 +push $N1cdc3380 + SphericalTransform { + input "Lat Long map" + rx {{-parent.environment_rx_Floating_Point_Slider}} + ry {{"180 + parent.environment_ry_Floating_Point_Slider"}} + rz {{-parent.environment_rz_Floating_Point_Slider}} + fix true + name SphericalTransform + xpos 290 + ypos 131 + } + Sphere { + translate {0 0 4} + name environment_Sphere + xpos 290 + ypos 159 + } + Scene { + name environment_Scene + xpos 300 + ypos 210 + } +push $N1cdb0a80 + ScanlineRender { + inputs 3 + motion_vectors_type off + MB_channel none + output_shader_vectors true + P_channel point + N_channel normal + name environment_ScanlineRender + xpos 400 + ypos 231 + } + Switch { + inputs 2 + which {{"\[exists parent.input4]"}} + name background_Switch + xpos 510 + ypos 231 + } + Merge2 { + inputs 2 + name environment_Merge + selected true + xpos 620 + ypos 231 + } + Output { + name Output + xpos 620 + ypos 255 + } +end_group diff --git a/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_to_Cavity.gizmo b/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_to_Cavity.gizmo new file mode 100644 index 0000000..9d896b5 --- /dev/null +++ b/gizmos/3D/Tangent_Space_Normals/Tangent_Space_Normals_to_Cavity.gizmo @@ -0,0 +1,77 @@ +#! /Applications/Nuke8.0v1/Nuke8.0v1.app/Contents/MacOS/libnuke-8.0.v1.dylib -nx +version 8.0 v1 +Gizmo { + tile_color 0xffbf00ff + addUserKnob {20 tangent_space_normals_to_cavity_tab l "Tangent Space Normals to Cavity"} + addUserKnob {20 about_Tab l About} + addUserKnob {26 description_Text l "" +STARTLINE T "Tangent Space Normal to Cavity v0.1.1\n\ncolour-science.org - April 9, 2015\n\nThis Gizmo / Group performs conversion from Tangent Space Normals to Cavity."} +} + Input { + inputs 0 + name Input + xpos -40 + ypos 15 + } +set N1ca33240 [stack 0] + Shuffle { + red green + blue green + name green_Shuffle + xpos 70 + ypos 15 + } + Matrix { + matrix { + {3 10 3} + {0 0 0} + {-3 -10 -3} + } + name horizontal_Scharr_Matrix + xpos 70 + ypos 39 + } +push $N1ca33240 + Shuffle { + green red + blue red + name red_Shuffle + xpos -150 + ypos 15 + } + Matrix { + matrix { + {-3 0 3} + {-10 0 10} + {-3 0 3} + } + name vertical_Scharr_Matrix + xpos -150 + ypos 39 + } + Merge2 { + inputs 2 + operation plus + name Merge + xpos -40 + ypos 43 + } + Expression { + expr0 "r * 0.5 + 0.5" + expr1 "g * 0.5 + 0.5" + expr2 "b * 0.5 + 0.5" + name output_offset_Expression + xpos -40 + ypos 67 + } + Shuffle { + alpha white + name Shuffle + xpos -40 + ypos 91 + } + Output { + name Output + xpos -40 + ypos 115 + } +end_group diff --git a/gizmos/3D/a_ReLighting.gizmo b/gizmos/3D/a_ReLighting.gizmo new file mode 100644 index 0000000..6650965 --- /dev/null +++ b/gizmos/3D/a_ReLighting.gizmo @@ -0,0 +1,246 @@ +#! C:/tools/Nuke9.0v3/nuke-9.0.3.dll -nx +version 9.0 v3 +Gizmo { + inputs 2 + tile_color 0x4dd637ff + label "v 1.0\n\[value lit1_cbx]\n\[value lit2_cbx]\n\[value lit3_cbx]" + addUserKnob {20 reLightMananger l jarr_reLightMananger} + addUserKnob {41 normal l "normal vectors" T ReLight3.normal} + addUserKnob {41 position l "point positions" T ReLight3.position} + addUserKnob {6 PositionToPoints_Display l "PositionToPoints Display" +STARTLINE} + addUserKnob {26 ""} + addUserKnob {7 mast_RX l Master_RX R -360 360} + addUserKnob {7 mast_RY l Master_RY R -360 360} + addUserKnob {7 mast_RZ l Master_RZ R -360 360} + addUserKnob {20 light1 n 1} + addUserKnob {6 lit1_cbx l "Enable light 1" +STARTLINE} + addUserKnob {26 _ l "" +STARTLINE} + addUserKnob {18 clrLit1 l color} + addUserKnob {6 clrLit1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {7 intensityLit1 l intensity} + addUserKnob {26 ""} + addUserKnob {7 polarHeight_lit1 l polarHeight R -360 360} + addUserKnob {7 equatorAngle_lit1 l equatorAngle R -360 360} + addUserKnob {26 ""} + addUserKnob {20 endGroup n -1} + addUserKnob {20 light2 n 1} + addUserKnob {6 lit2_cbx l "Enable light 2" +STARTLINE} + addUserKnob {26 ""} + addUserKnob {18 clrLit2 l color} + addUserKnob {6 clrLit2_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {7 intensityLit2 l intensity} + addUserKnob {26 ""} + addUserKnob {7 polarHeight_lit2 l polarHeight R -360 360} + addUserKnob {7 equatorAngle_lit2 l equatorAngle t "\t\t\t" R -360 360} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 light3 n 1} + addUserKnob {6 lit3_cbx l "Enable light 2" +STARTLINE} + addUserKnob {26 ""} + addUserKnob {18 clrLit3 l color} + addUserKnob {6 clrLit3_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {7 intensityLit3 l intensity} + addUserKnob {26 ""} + addUserKnob {7 polarHeight_lit3 l polarHeight R -360 360} + addUserKnob {7 equatorAngle_lit3 l equatorAngle R -360 360} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {20 Use} + addUserKnob {26 aaaa l "" +STARTLINE T "使用方法:\nmaster:\n normal vectors: 如需使用relighting这个节点,此处必须输入一张法线图(目前需为世界坐标)\n point positions: 此处是否输入位置信息图,并不影响灯光效果,配合positionToPoints Display使用,在输入位置信息图且勾选下面显示按钮的情况下,将nuke切换至三维空间可以观看灯光效果。\n master_RX/master_RY/master_RZ:为全局旋转信息,让下述三盏灯光整体旋转。\n\nlight:\n Enable light x: 开启灯光\n color : 调节灯光颜色"} +} + Phong { + inputs 0 + diffuse 1 + specular 0 + min_shininess 2 + max_shininess 57 + shininess_channel green + name Phong1 + note_font Verdana + xpos 363 + ypos 361 + } + Camera2 { + inputs 0 + name Camera1 + xpos 335 + ypos 160 + } +set Nd1f2b000 [stack 0] +push $Nd1f2b000 + Light2 { + inputs 0 + color 0 + intensity 0 + name Light1 + xpos 643 + ypos 365 + } + Axis2 { + inputs 0 + rotate {{mast_RX} {mast_RY} {mast_RZ}} + name Axis1 + xpos 1103 + ypos 263 + } +set Nd1f2a800 [stack 0] + DirectLight { + color {{clrLit3.r i} {clrLit3.g i} {clrLit3.b i}} + intensity {{intensityLit3 i}} + rotate {{polarHeight_lit3 i} {equatorAngle_lit3 i} 0} + samples 0 + sample_width 0 + name DirectLight3 + gl_color 0xff0000ff + note_font Verdana + xpos 853 + ypos 347 + disable {{1-lit3_cbx i x1 1}} + } +push $Nd1f2a800 + DirectLight { + color {{clrLit2 i x1 0.245} {clrLit2 i x1 0.245} {clrLit2 i x1 0.245}} + intensity {{intensityLit2 i}} + rotate {{polarHeight_lit2 i} {equatorAngle_lit2 i} 0} + samples 0 + sample_width 0 + name DirectLight2 + gl_color 0x30ffff + note_font Verdana + xpos 857 + ypos 263 + disable {{1-lit2_cbx i}} + } +push $Nd1f2a800 + DirectLight { + color {{clrLit1.r} {clrLit1.g} {clrLit1.b}} + intensity {{intensityLit1}} + rotate {{polarHeight_lit1} {equatorAngle_lit1} 0} + samples 0 + sample_width 0 + name DirectLight1 + tile_color 0xfff6adff + gl_color 0xffe500ff + note_font Verdana + xpos 857 + ypos 177 + disable {{1-lit1_cbx}} + } + Scene { + inputs 5 + name Scene1 + note_font Verdana + xpos 764 + ypos 220 + } +set N972bd400 [stack 0] +push $N972bd400 + Input { + inputs 0 + name alpha + xpos 743 + ypos -43 + } +set N972bd000 [stack 0] + Input { + inputs 0 + name dataPass + xpos 485 + ypos -48 + number 1 + } +add_layer {worldPosition worldPosition.NX worldPosition.NY worldPosition.NZ} + ShuffleCopy { + inputs 2 + in2 worldPosition + red red + green green + blue blue + name copy1_alpha_in3 + note_font Verdana + xpos 485 + ypos 26 + } +set N972bc800 [stack 0] +add_layer {normalWorld normalWorld.NX normalWorld.NY normalWorld.NZ} + Shuffle { + in normalWorld + alpha blue + name normalWord + note_font Verdana + xpos 818 + ypos 26 + } +push $N972bd000 +push $N972bc800 + Shuffle { + in worldPosition + alpha blue + name world_position + note_font Verdana + xpos 654 + ypos 66 + } + PositionToPoints { + inputs 3 + detail 1 + pointSize 1.1 + name PositionToPoints2 + note_font Verdana + xpos 743 + ypos 145 + disable {{1-PositionToPoints_Display x1 1}} + } + Scene { + inputs 2 + name Scene2 + note_font Verdana + xpos 626 + ypos 163 + } + Switch { + inputs 2 + which {{1-PositionToPoints_Display}} + name Switch1 + xpos 616 + ypos 278 + } +push $N972bc800 + Matrix { + channels normalWorld + matrix { + {1 2 1} + {2 4 2} + {1 2 1} + } + normalize true + name Matrix1 + note_font Verdana + xpos 485 + ypos 124 + } + Matrix { + channels worldPosition + matrix { + {1 2 1} + {2 4 2} + {1 2 1} + } + normalize true + name Matrix2 + note_font Verdana + xpos 485 + ypos 166 + } + ReLight { + inputs 4 + use_alpha true + name ReLight3 + note_font Verdana + xpos 485 + ypos 279 + } + Output { + name Output1 + xpos 479 + ypos 464 + } +end_group diff --git a/gizmos/3D/a_ReLightingP.gizmo b/gizmos/3D/a_ReLightingP.gizmo new file mode 100644 index 0000000..fbb9726 --- /dev/null +++ b/gizmos/3D/a_ReLightingP.gizmo @@ -0,0 +1,110 @@ +#! C:/tools/Nuke9.0v3/nuke-9.0.3.dll -nx +version 9.0 v3 +Gizmo { + label " \[value picSwitch]" + postage_stamp true + addUserKnob {20 User} + addUserKnob {52 switch +STARTLINE} + addUserKnob {6 picSwitch l picColorSwitch +STARTLINE} + addUserKnob {26 ""} + addUserKnob {6 pos_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {18 pos l Position} + addUserKnob {6 pos_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {6 pickPoint_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {12 pickPosition l pickPoint} + addUserKnob {26 ""} + addUserKnob {13 rad l Radius} + addUserKnob {7 fall l "Falloff Exponent" R 1 10} + addUserKnob {7 gain l Hardness} +} + Input { + inputs 0 + name posIn + xpos 105 + ypos 473 + } +set N2e7fe400 [stack 0] + Expression { + temp_name0 distR + temp_expr0 (Br-Br(pickPosition.x,pickPosition.y))/rad.x + temp_name1 distG + temp_expr1 (Bg-Bg(pickPosition.x,pickPosition.y))/rad.y + temp_name2 distB + temp_expr2 (Bb-Bb(pickPosition.x,pickPosition.y))/rad.z + temp_name3 len + temp_expr3 sqrt((distR*distR)+(distG*distG)+(distB*distB)) + expr0 pow(1-len,fall) + expr1 pow(1-len,fall) + expr2 pow(1-len,fall) + expr3 pow(1-len,fall) + name __POSITION_KEY__ + xpos 33 + ypos 542 + } +push $N2e7fe400 + Expression { + temp_name0 distR + temp_expr0 (Br-parent.pos.r)/rad.x + temp_name1 distG + temp_expr1 (Bg-parent.pos.g)/rad.y + temp_name2 distB + temp_expr2 (Bb-parent.pos.b)/rad.z + temp_name3 len + temp_expr3 sqrt((distR*distR)+(distG*distG)+(distB*distB)) + expr0 pow(1-len,fall) + expr1 pow(1-len,fall) + expr2 pow(1-len,fall) + expr3 pow(1-len,fall) + name __POSITION_KEY__1 + xpos 188 + ypos 543 + } + Switch { + inputs 2 + which {{1-picSwitch}} + name Switch1 + xpos 95 + ypos 623 + } +set Nd2c3f400 [stack 0] + Expression { + temp_name0 gain + temp_expr0 parent.gain + temp_name1 lum + temp_expr1 "0.2125*Br + 0.7154*Bg + 0.0721*Bb" + temp_name2 val + temp_expr2 .5*((lum<.5)?((1-gain)>0?pow(2*lum,log(1-gain)/log(0.5)):0):2-((1-gain)>0?pow(2-2*lum,log(1-gain)/log(0.5)):0)) + expr0 r>1?r:r*(val/(lum+0.00001)) + expr1 g>1?g:g*(val/(lum+0.00001)) + expr2 b>1?b:b*(val/(lum+0.00001)) + name KPGain + tile_color 0xd47f3b00 + label "TRUE GAIN\nFUNCTION" + xpos 95 + ypos 683 + addUserKnob {20 "" l User} + } + Expression { + expr0 r>10?0:isnan(Br)?0:Br + expr1 g>10?0:isnan(Bg)?0:Bg + expr2 b>10?0:isnan(Bb)?0:Bb + expr3 b>10?0:isnan(Bb)?0:Bb + name normalize + xpos 95 + ypos 763 + } + Output { + name Output1 + xpos 95 + ypos 839 + } +push $Nd2c3f400 + Viewer { + frame_range 1001-1158 + input_process false + name Viewer1 + selected true + xpos 433 + ypos 813 + } +end_group diff --git a/gizmos/3D/a_RelightSimple.gizmo b/gizmos/3D/a_RelightSimple.gizmo new file mode 100644 index 0000000..01a0741 --- /dev/null +++ b/gizmos/3D/a_RelightSimple.gizmo @@ -0,0 +1,435 @@ +#! C:/tools/Nuke9.0v3/nuke-9.0.3.dll -nx +version 9.0 v3 +Gizmo { + tile_color 0x2bffc5ff + addUserKnob {20 Light} + addUserKnob {41 in l "Norm Channel" T Shuf_inputNorm.in} + addUserKnob {6 spreview l "sphere preview" -STARTLINE} + addUserKnob {7 xangle l "X angle" R -180 180} + addUserKnob {7 yangle l "Y angle" R -180 180} + addUserKnob {26 ""} + addUserKnob {6 bckl_switch l "Back Light . (light only the edges)" +STARTLINE} + addUserKnob {7 bkl_erode l "BackL Size" R 0 20} + addUserKnob {41 blur l "BackL Blur" T Bckl_Blur.size} + addUserKnob {26 ""} + addUserKnob {4 out l Out M {Mask Relight "" "" ""}} + addUserKnob {41 offset l "Reflex (offset)" T G_Offset.add} + addUserKnob {41 gain l "Diffuse (Gain)" T G_Gain.white} + addUserKnob {26 ""} + addUserKnob {26 version l :: T "Relight Simple v.03 update Negishi ::"} +} + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x7171c600 + label BackLight + note_font_size 42 + xpos 201 + ypos 404 + bdwidth 466 + bdheight 285 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x7171c600 + label ColorCorrect + note_font_size 42 + xpos 91 + ypos 742 + bdwidth 290 + bdheight 388 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x7171c600 + label Sphere + note_font_size 42 + xpos 960 + ypos -482 + bdwidth 266 + bdheight 707 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x8e8e3800 + label relightMask + note_font_size 42 + xpos 532 + ypos 121 + bdwidth 354 + bdheight 245 + } + Camera2 { + inputs 0 + translate {0 0 4.3} + name Camera3 + xpos 970 + ypos -139 + } +set N8d232400 [stack 0] + Constant { + inputs 0 + channels {rgba.red rgba.green rgba.blue -rgba.alpha} + format "256 256 0 0 256 256 1 square_256" + name Const_256px + xpos 1070 + ypos -401 + } + Dot { + name Dot18 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 1104 + ypos -292 + } +set N8d232000 [stack 0] + Shuffle { + alpha white + name Shuffle1 + xpos 1070 + ypos -238 + } + Grade { + add 0.02 + name G_Sphere_color + xpos 1070 + ypos -209 + } + Sphere { + name Sphere3 + xpos 1070 + ypos -183 + } +push $N8d232400 + Scene { + inputs 2 + name Scene3 + xpos 1080 + ypos -139 + } +push $N8d232000 + Dot { + name Dot19 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 1204 + ypos -292 + } + Dot { + name Dot1 + xpos 1204 + ypos -30 + } +add_layer {normalCam normalCam.NX normalCam.NY normalCam.NZ} + ScanlineRender { + inputs 3 + antialiasing low + motion_vectors_type off + output_shader_vectors true + N_channel normalCam + name ScanlineRender3 + xpos 1070 + ypos -34 + } + Transform { + translate {{parent.width-256 i x17 0} 0} + center {128 128} + name Transform9 + xpos 1070 + ypos 57 + } +set N8d8e9000 [stack 0] + Input { + inputs 0 + name Input1 + xpos 579 + ypos -340 + } + Dot { + name Dot3 + xpos 613 + ypos -210 + } +set Nd0c12c00 [stack 0] + Dot { + name Dot5 + xpos 280 + ypos -210 + } + Dot { + name Dot7 + xpos 280 + ypos 61 + } +set Nd0c13400 [stack 0] + Merge2 { + inputs 2 + name M_Sphere + xpos 351 + ypos 57 + } + Dot { + name Dot17 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 385 + ypos 127 + } +push $Nd0c13400 + Switch { + inputs 2 + which {{parent.spreview.main i}} + name Switch_Sphere1 + xpos 246 + ypos 123 + } + Dot { + name Dot16 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 280 + ypos 488 + } +set N7eda6800 [stack 0] + Shuffle { + red alpha + green alpha + blue alpha + name Shuff_AAAA_ + xpos 333 + ypos 484 + } + Erode { + channels rgba + size {{parent.bkl_erode.main i}} + quality 5 + name Bckl_Erode_Blur + label "\[value size]" + xpos 333 + ypos 510 + } + Blur { + channels rgba + name Bckl_Blur + label "\[value size]" + xpos 333 + ypos 548 + } + Invert { + channels rgba + name Invert_0 + xpos 333 + ypos 586 + } + Crop { + box {0 0 {input.width i} {input.height i}} + crop false + name Crop_Auto + xpos 333 + ypos 621 + } + Dot { + name Dot4 + xpos 367 + ypos 663 + } +push $N8d8e9000 + Shuffle { + in normalCam + in2 alpha + alpha red2 + name Shuf_Norm2Rgb + label "\[value in]" + xpos 1070 + ypos 110 + } + Dot { + name Dot15 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 1104 + ypos 204 + } + Dot { + name Dot8 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 840 + ypos 204 + } +set N8d1cb800 [stack 0] + Dot { + name Dot9 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 840 + ypos 250 + } +push $N8d1cb800 + Expression { + temp_name0 dirX + temp_expr0 "cos((-parent.xangle+90)*PI/180) *\r\nsin((-parent.yangle+90)*PI/180)" + temp_name1 dirY + temp_expr1 cos((-parent.yangle+90)*PI/180) + temp_name2 dirZ + temp_expr2 "sin((-parent.xangle+90)*PI/180) *\r\nsin((-parent.yangle+90)*PI/180)" + temp_name3 res + temp_expr3 clamp(dirX*(r)+dirY*g+dirZ*b,0,1) + expr0 res + expr1 res + expr2 res + expr3 res + name Rim_Dot1 + xpos 710 + ypos 200 + addUserKnob {20 User} + } +push $Nd0c12c00 + Shuffle { + name Shuf_inputNorm + label "\[value in]" + xpos 579 + ypos -74 + } + Expression { + temp_name0 dirX + temp_expr0 "cos((-parent.xangle+90)*PI/180) *\r\nsin((-parent.yangle+90)*PI/180)" + temp_name1 dirY + temp_expr1 cos((-parent.yangle+90)*PI/180) + temp_name2 dirZ + temp_expr2 "sin((-parent.xangle+90)*PI/180) *\r\nsin((-parent.yangle+90)*PI/180)" + temp_name3 res + temp_expr3 clamp(dirX*(r)+dirY*g+dirZ*b,0,1) + expr0 res + expr1 res + expr2 res + expr3 res + name Rim_Dot + xpos 579 + ypos 201 + addUserKnob {20 User} + } + Dot { + name Dot2 + xpos 613 + ypos 250 + } +set Nd0de6400 [stack 0] + Keymix { + inputs 3 + channels rgb + name Keymix2 + xpos 710 + ypos 246 + } + Dot { + name Dot14 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 744 + ypos 316 + } +push $Nd0de6400 + Switch { + inputs 2 + which {{parent.spreview.main i}} + name Switch_Sphere + xpos 579 + ypos 312 + } + Dot { + name Dot12 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 613 + ypos 570 + } +set Nd0dc1c00 [stack 0] + Dot { + name Dot13 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 472 + ypos 570 + } + Merge2 { + inputs 2 + operation multiply + name Mult + xpos 438 + ypos 659 + } +push $Nd0dc1c00 + Switch { + inputs 2 + which {{parent.bckl_switch i}} + name Switch_BackLight + xpos 579 + ypos 659 + } + Dot { + name Dot10 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 613 + ypos 949 + } +set N9869a000 [stack 0] +push $N7eda6800 + Unpremult { + name Unpremult1 + xpos 246 + ypos 822 + } + Dot { + name Dot11 + note_font "bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + xpos 280 + ypos 892 + } +set N9869a400 [stack 0] + Grade { + name G_Offset + xpos 101 + ypos 888 + } + Grade { + name G_Gain + xpos 101 + ypos 945 + } +push $N9869a400 + Keymix { + inputs 3 + name Keymix1 + xpos 246 + ypos 939 + } + Premult { + name Premult1 + xpos 246 + ypos 1020 + } + Dot { + name Dot6 + xpos 280 + ypos 1083 + } +push $N9869a000 + Switch { + inputs 2 + which {{parent.out i}} + name Switch_Out + xpos 579 + ypos 1079 + } + Output { + name Output1 + xpos 579 + ypos 1196 + } +end_group diff --git a/gizmos/3D/a_RimLight2D.gizmo b/gizmos/3D/a_RimLight2D.gizmo new file mode 100644 index 0000000..003626c --- /dev/null +++ b/gizmos/3D/a_RimLight2D.gizmo @@ -0,0 +1,149 @@ +#! C:/tools64/Nuke6.1v2_x64/Nuke6.1.exe -nx +version 6.1 v2 +Gizmo { + inputs 2 + addUserKnob {20 RimLight} + addUserKnob {26 setup l "setup "} + addUserKnob {6 showrim l "show rim" -STARTLINE} + addUserKnob {26 explain l "" -STARTLINE T "勾选此项可以观察rim通道,并能更好地设置。同时也可以作为一单独的通道使用"} + addUserKnob {41 in l "control range" T Histogram1.in} + addUserKnob {41 Angle T Emboss1.Angle} + addUserKnob {41 Width T Emboss1.Width} + addUserKnob {41 size l Blur T Blur1.size} + addUserKnob {26 illuminate} + addUserKnob {41 white l gain T Grade1.white} + addUserKnob {41 multiply T Grade1.multiply} + addUserKnob {26 "" +STARTLINE} + addUserKnob {41 maskChannelMask l mask T Multiply1.maskChannelMask} + addUserKnob {41 inject -STARTLINE T Multiply1.inject} + addUserKnob {41 invert_mask l invert -STARTLINE T Multiply1.invert_mask} + addUserKnob {41 fringe -STARTLINE T Multiply1.fringe} +} + Bezier { + inputs 0 + points {{ +{774 606 70.6 -2.43 70.6} +{812 326 70.6 -0.8 70.6} +{1164 202 93.3 0.71 93.3} +{1146 614 93 2.34 93} +}} + shape {{curve L x100 0}} + center {1024 436} + name Bezier1 + xpos -342 + ypos -196 + } + Input { + inputs 0 + name mask + xpos -355 + ypos -61 + number 1 + } + Invert { + name Invert1 + xpos -355 + ypos -35 + } + Shuffle { + in alpha + name Shuffle3 + xpos -355 + ypos 3 + } + Input { + inputs 0 + name Input1 + xpos -119 + ypos -306 + } + Dot { + name Dot2 + xpos -85 + ypos -248 + } +set N4ccc850 [stack 0] + Dot { + name Dot1 + xpos -195 + ypos -248 + } + Emboss { + edgechannels {rgba.red rgba.green rgba.blue -rgba.alpha} + name Emboss1 + xpos -229 + ypos -208 + } + Shuffle { + in alpha + name Shuffle2 + xpos -229 + ypos -157 + } + Histogram { + name Histogram1 + xpos -229 + ypos -122 + } + Shuffle { + in rgb + green red + blue red + alpha red + name Shuffle1 + xpos -229 + ypos -86 + } + Blur { + name Blur1 + xpos -229 + ypos -60 + } + Multiply { + inputs 1+1 + value 0 + name Multiply1 + xpos -229 + ypos -3 + } + Dot { + name Dot4 + xpos -195 + ypos 69 + } +set N4ccddd0 [stack 0] +push $N4ccddd0 +push $N4ccc850 + Dot { + name Dot3 + xpos -85 + ypos -40 + } + Switch { + inputs 2 + which {{showrim i}} + name Switch1 + xpos -119 + ypos 94 + } + Grade { + inputs 1+1 + name Grade1 + selected true + xpos -119 + ypos 137 + } +set N4cce330 [stack 0] + Output { + name Output1 + xpos -119 + ypos 276 + } +push $N4cce330 + Viewer { + input_process false + name Viewer1 + xpos -229 + ypos 428 + } +end_group diff --git a/gizmos/Channel/Aberration_Chromatique.gizmo b/gizmos/Channel/Aberration_Chromatique.gizmo new file mode 100644 index 0000000..9a5acae --- /dev/null +++ b/gizmos/Channel/Aberration_Chromatique.gizmo @@ -0,0 +1,184 @@ +#! C:/Program Files/Nuke7.0v8/Nuke7.0.exe -nx +version 7.0 v8 +Gizmo { + addUserKnob {20 User} + addUserKnob {41 distortion1 l "Inner RED" T LensDistortion_RED.distortion1} + addUserKnob {41 distortion2 l "Outter RED" T LensDistortion_RED.distortion2} + addUserKnob {26 ""} + addUserKnob {41 distortion1_2 l "Inner GREEN" T LensDistortion_GREEN.distortion1} + addUserKnob {41 distortion2_2 l "Outter GREEN" T LensDistortion_GREEN.distortion2} + addUserKnob {26 ""} + addUserKnob {41 distortion1_1 l "Inner BLUE" T LensDistortion_BLUE.distortion1} + addUserKnob {41 distortion2_1 l "Outter BLUE" T LensDistortion_BLUE.distortion2} + addUserKnob {26 ""} + addUserKnob {41 operation T Merge7.operation} + addUserKnob {41 mix l Mix T Merge7.mix} + addUserKnob {41 saturation T ColorCorrect1.saturation} + addUserKnob {26 ""} + addUserKnob {41 distortion1_3 l "Radial Distortion 1" T LensDistortion1.distortion1} + addUserKnob {41 distortion2_3 l "Radial Distortion 2" T LensDistortion1.distortion2} + addUserKnob {26 "" +STARTLINE} + addUserKnob {26 txtFr l "" +STARTLINE T "Chromatic aberration gizmo by Fury"} +} + Input { + inputs 0 + name Input1 + xpos 492 + ypos 29 + } +set N2e575040 [stack 0] + Dot { + name Dot1 + xpos 382 + ypos 227 + } + Shuffle { + green black + blue black + alpha black + name RED + xpos 348 + ypos 347 + } + LensDistortion { + serializeKnob "" + serialiseKnob "22 serialization::archive 9 0 0 0 0 0 0 0 0 0 0 0 0" + distortionCenter {-0.3 -0.5} + filter Simon + name LensDistortion_RED + xpos 348 + ypos 445 + } + Dot { + name Dot5 + xpos 382 + ypos 547 + } +push $N2e575040 + Shuffle { + red black + blue black + alpha black + name GREEN + xpos 492 + ypos 349 + } + LensDistortion { + serializeKnob "" + serialiseKnob "22 serialization::archive 9 0 0 0 0 0 0 0 0 0 0 0 0" + name LensDistortion_GREEN + xpos 492 + ypos 444 + } + Merge2 { + inputs 2 + operation plus + name Merge3 + xpos 492 + ypos 544 + } +push $N2e575040 + Dot { + name Dot2 + xpos 667 + ypos 234 + } + Shuffle { + red black + green black + alpha black + name BLUE + xpos 633 + ypos 351 + } + LensDistortion { + serializeKnob "" + serialiseKnob "22 serialization::archive 9 0 0 0 0 0 0 0 0 0 0 0 0" + name LensDistortion_BLUE + xpos 633 + ypos 443 + } + Dot { + name Dot6 + xpos 667 + ypos 758 + } + Merge2 { + inputs 2 + operation plus + name Merge4 + xpos 492 + ypos 755 + } + Dot { + name Dot4 + xpos 526 + ypos 970 + } +push $N2e575040 + Dot { + name Dot3 + xpos 110 + ypos 32 + } +set N2e65d720 [stack 0] + Merge2 { + inputs 2 + operation minus + name Merge6 + xpos 76 + ypos 967 + } +set N2e65da90 [stack 0] + Expression { + channel3 alpha + expr3 r+g+b + name Expression1 + xpos 229 + ypos 1077 + } +push $N2e65da90 + LensDistortion { + serializeKnob "" + serialiseKnob "22 serialization::archive 9 0 0 0 0 0 0 0 0 0 0 0 0" + name LensDistortion1 + xpos 76 + ypos 1196 + } + Dot { + name Dot7 + xpos 110 + ypos 1280 + } + ColorCorrect { + name ColorCorrect1 + xpos -76 + ypos 1277 + } +push $N2e65d720 + Dot { + name Dot8 + xpos -210 + ypos 32 + } + Merge2 { + inputs 2 + operation plus + Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} + name Merge7 + xpos -244 + ypos 1277 + } + Output { + name Output1 + xpos -244 + ypos 1424 + } + Viewer { + input_process false + name Viewer1 + selected true + xpos -491 + ypos 1520 + } +end_group diff --git a/gizmos/Channel/AutocomperArnold.gizmo b/gizmos/Channel/AutocomperArnold.gizmo new file mode 100644 index 0000000..31ecd17 --- /dev/null +++ b/gizmos/Channel/AutocomperArnold.gizmo @@ -0,0 +1,489 @@ +#! C:/Program Files/Nuke7.0v8/Nuke7.0.exe -nx +version 7.0 v8 +Gizmo { + inputs 2 + addUserKnob {20 Comp l Arnold} + addUserKnob {26 DD l "DIRECT DIFFUSE"} + addUserKnob {0 obso +INVISIBLE} + addUserKnob {41 gain T CC_diffuse.gain} + addUserKnob {41 gamma T CC_diffuse.gamma} + addUserKnob {41 contrast T CC_diffuse.contrast} + addUserKnob {41 saturation T CC_diffuse.saturation} + addUserKnob {26 ""} + addUserKnob {41 mix l "INDIRECT DIFFUSE" T MERGEIndirectdiffuse.mix} + addUserKnob {41 gain_1 l gain T CC_INDRECTdiF.gain} + addUserKnob {41 gamma_1 l gamma T CC_INDRECTdiF.gamma} + addUserKnob {41 contrast_1 l contrast T CC_INDRECTdiF.contrast} + addUserKnob {41 saturation_2 l saturation T CC_INDRECTdiF.saturation} + addUserKnob {26 ""} + addUserKnob {41 SPECULAR l "DIRECT SPECULAR" T MERGEspecular.mix} + addUserKnob {41 gain_3 l gain T CC_SPEC.gain} + addUserKnob {41 gamma_2 l gamma T CC_SPEC.gamma} + addUserKnob {41 contrast_2 l contrast T CC_SPEC.contrast} + addUserKnob {41 saturation_3 l saturation T CC_SPEC.saturation} + addUserKnob {26 ""} + addUserKnob {41 mix_2 l "INDIRECT SPECULAR" T MERGEindirectSpec.mix} + addUserKnob {41 gain_2 l gain T CC_INDIRECT_SPEC.gain} + addUserKnob {41 gamma_3 l gamma T CC_INDIRECT_SPEC.gamma} + addUserKnob {41 contrast_3 l contrast T CC_INDIRECT_SPEC.contrast} + addUserKnob {41 saturation_1 l saturation T CC_INDIRECT_SPEC.saturation} + addUserKnob {26 ""} + addUserKnob {41 reflec l "REFLECTION " T MERGEreflection.mix} + addUserKnob {41 gain_4 l gain T CC_REFLECTION.gain} + addUserKnob {41 gamma_4 l gamma T CC_REFLECTION.gamma} + addUserKnob {41 contrast_4 l contrast T CC_REFLECTION.contrast} + addUserKnob {41 saturation_4 l saturation T CC_REFLECTION.saturation} + addUserKnob {26 ""} + addUserKnob {41 refrac l "REFRACTION " T MERGErefraction.mix} + addUserKnob {41 gain_5 l gain T CC_REFRACTION.gain} + addUserKnob {41 gamma_5 l gamma T CC_REFRACTION.gamma} + addUserKnob {41 contrast_5 l contrast T CC_REFRACTION.contrast} + addUserKnob {41 saturation_5 l saturation T CC_REFRACTION.saturation} + addUserKnob {26 ""} + addUserKnob {41 sss l "SSS " T MERGEsss.mix} + addUserKnob {41 gain_6 l gain T CC_SSS.gain} + addUserKnob {41 gamma_6 l gamma T CC_SSS.gamma} + addUserKnob {41 contrast_6 l contrast T CC_SSS.contrast} + addUserKnob {41 saturation_6 l saturation T CC_SSS.saturation} + addUserKnob {26 ""} + addUserKnob {41 emission l "EMISSION " T MERGEemission.mix} + addUserKnob {41 gain_7 l gain T CC_EMISSION.gain} + addUserKnob {41 gamma_7 l gamma T CC_EMISSION.gamma} + addUserKnob {41 contrast_7 l contrast T CC_EMISSION.contrast} + addUserKnob {41 saturation_7 l saturation T CC_EMISSION.saturation} + addUserKnob {26 ""} + addUserKnob {26 txt l "" +STARTLINE T "Autocomper Arnold by Pierre JURY"} +} + Input { + inputs 0 + name ID + xpos 36 + ypos -340 + number 1 + } + Dot { + name Dot5 + xpos 70 + ypos 848 + } + Input { + inputs 0 + name BEAUTY_multipass + xpos 683 + ypos -329 + } + Dot { + name Dot7 + xpos 717 + ypos -216 + } +set N45eb42a0 [stack 0] + Dot { + name Dot9 + xpos 845 + ypos -216 + } +set N45eb4610 [stack 0] + Dot { + name Dot10 + xpos 966 + ypos -216 + } +set N45eb4980 [stack 0] + Dot { + name Dot11 + xpos 1087 + ypos -216 + } +set N45eb4cf0 [stack 0] + Dot { + name Dot6 + xpos 1217 + ypos -216 + } +set N6d362fd0 [stack 0] + Dot { + name Dot8 + xpos 1346 + ypos -216 + } +set N6d363340 [stack 0] + Dot { + name Dot12 + xpos 1487 + ypos -216 + } +set N6d3636b0 [stack 0] + Dot { + name Dot13 + xpos 1629 + ypos -216 + } +add_layer {emission emission.red emission.green emission.blue} + Shuffle { + in emission + in2 alpha + alpha red2 + name EMISSION + xpos 1595 + ypos -140 + } + Unpremult { + name Unpremult8 + xpos 1595 + ypos -73 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_EMISSION + selected true + xpos 1595 + ypos -19 + } + Premult { + name Premult8 + xpos 1595 + ypos 81 + disable true + } + Dot { + name Dot14 + xpos 1629 + ypos 762 + } +push $N6d3636b0 +add_layer {sss sss.red sss.green sss.blue} + Shuffle { + in sss + in2 alpha + alpha red2 + name SSS + xpos 1453 + ypos -139 + } + Unpremult { + name Unpremult7 + xpos 1453 + ypos -76 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_SSS + xpos 1453 + ypos -19 + } + Premult { + name Premult7 + xpos 1453 + ypos 77 + disable true + } + Dot { + name Dot15 + xpos 1487 + ypos 665 + } +push $N6d363340 +add_layer {refraction refraction.red refraction.green refraction.blue} + Shuffle { + in refraction + in2 alpha + alpha red2 + name REFRACTION + xpos 1312 + ypos -138 + } + Unpremult { + name Unpremult6 + xpos 1312 + ypos -77 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_REFRACTION + xpos 1312 + ypos -19 + } + Premult { + name Premult6 + xpos 1312 + ypos 77 + disable true + } + Dot { + name Dot16 + xpos 1346 + ypos 558 + } +push $N6d362fd0 +add_layer {reflection reflection.red reflection.green reflection.blue} + Shuffle { + in reflection + in2 alpha + alpha red2 + name REFLECTION + xpos 1183 + ypos -138 + } + Unpremult { + name Unpremult5 + xpos 1183 + ypos -78 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_REFLECTION + xpos 1183 + ypos -18 + } + Premult { + name Premult4 + xpos 1183 + ypos 76 + disable true + } + Dot { + name Dot17 + xpos 1217 + ypos 458 + } +push $N45eb4cf0 +add_layer {indirect_specular indirect_specular.red indirect_specular.green indirect_specular.blue} + Shuffle { + in indirect_specular + in2 alpha + alpha red2 + name INDIRECT_SPECULAR + xpos 1053 + ypos -135 + } + Unpremult { + name Unpremult4 + xpos 1053 + ypos -77 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_INDIRECT_SPEC + xpos 1053 + ypos -18 + } + Premult { + name Premult2 + xpos 1053 + ypos 76 + disable true + } + Dot { + name Dot2 + xpos 1088 + ypos 359 + } +push $N45eb4980 +add_layer {direct_specular direct_specular.red direct_specular.green direct_specular.blue} + Shuffle { + in direct_specular + in2 alpha + alpha red2 + name SPECULAR + xpos 932 + ypos -135 + } + Unpremult { + name Unpremult3 + xpos 932 + ypos -74 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_SPEC + xpos 932 + ypos -19 + } + Premult { + name Premult3 + xpos 932 + ypos 77 + disable true + } + Dot { + name Dot3 + xpos 966 + ypos 263 + } +push $N45eb4610 +add_layer {indirect_diffuse indirect_diffuse.red indirect_diffuse.green indirect_diffuse.blue} + Shuffle { + in indirect_diffuse + in2 alpha + alpha red2 + name INDIIRECT_DIFFUSE + xpos 811 + ypos -136 + } + Unpremult { + name Unpremult2 + xpos 811 + ypos -73 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_INDRECTdiF + xpos 811 + ypos -18 + } + Premult { + name Premult5 + xpos 811 + ypos 78 + disable true + } + Dot { + name Dot4 + xpos 845 + ypos 174 + } +push $N45eb42a0 +add_layer {direct_diffuse direct_diffuse.red direct_diffuse.green direct_diffuse.blue} + Shuffle { + in direct_diffuse + in2 alpha + alpha red2 + name DIFFUSE + xpos 683 + ypos -135 + } + Unpremult { + name Unpremult1 + xpos 684 + ypos -70 + disable true + } + ColorCorrect { + unpremult rgba.alpha + name CC_diffuse + xpos 684 + ypos -18 + } + Premult { + name Premult1 + xpos 684 + ypos 78 + disable true + } + Merge2 { + inputs 2 + operation plus + bbox B + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + Bchannels {rgba.red rgba.green rgba.blue rgba.alpha} + also_merge all + name MERGEIndirectdiffuse + xpos 684 + ypos 171 + } + Merge2 { + inputs 2 + operation plus + bbox B + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + Bchannels {rgba.red rgba.green rgba.blue rgba.alpha} + also_merge all + name MERGEspecular + xpos 684 + ypos 260 + } + Merge2 { + inputs 2 + operation plus + bbox B + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + Bchannels {rgba.red rgba.green rgba.blue rgba.alpha} + also_merge all + name MERGEindirectSpec + xpos 684 + ypos 356 + } + Merge2 { + inputs 2 + operation plus + bbox B + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + also_merge all + name MERGEreflection + xpos 684 + ypos 455 + } + Merge2 { + inputs 2 + operation plus + bbox B + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + also_merge all + name MERGErefraction + xpos 684 + ypos 555 + } + Merge2 { + inputs 2 + operation plus + bbox B + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + also_merge all + name MERGEsss + xpos 684 + ypos 662 + } + Merge2 { + inputs 2 + operation plus + bbox B + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + also_merge all + name MERGEemission + xpos 684 + ypos 759 + } +add_layer {ID ID.red ID.green ID.blue ID.alpha} + ShuffleCopy { + inputs 2 + in2 alpha + red red + green green + blue blue + alpha red2 + out ID + name ID_in + xpos 684 + ypos 845 + } + Output { + name Output_comper + xpos 684 + ypos 1100 + } +set N6d591350 [stack 0] +push 0 +push 0 +push 0 +push 0 +push 0 +push 0 +push 0 +push $N6d591350 +push $N6d591350 + Viewer { + inputs 10 + input_process false + name Viewer1 + xpos 117 + ypos 1100 + } +end_group diff --git a/gizmos/Channel/L_MultiplePasses.gizmo b/gizmos/Channel/L_MultiplePasses.gizmo new file mode 100644 index 0000000..5a5be90 --- /dev/null +++ b/gizmos/Channel/L_MultiplePasses.gizmo @@ -0,0 +1,482 @@ +#! C:/tools64/Nuke6.1v2_x64/Nuke6.1.exe -nx +version 6.1 v2 +Gizmo { + addUserKnob {20 L_MultipleIDP} + addUserKnob {26 ""} + addUserKnob {26 tag l "" t "note color" +STARTLINE T " R\n G\n B\n C\n M\n Y\n K1\n K2"} + addUserKnob {26 ""} + addUserKnob {20 R n 1} + R 0 + addUserKnob {41 size l R_edge T Dilate_R.size} + addUserKnob {41 size_1 l R_blur T Blur_R.size} + addUserKnob {20 endGroup n -1} + addUserKnob {20 G n 1} + G 0 + addUserKnob {41 size_2 l G_edge T Dilate_G.size} + addUserKnob {41 size_3 l G_blur T Blur_G.size} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 B n 1} + B 0 + addUserKnob {41 size_4 l B_edge T Dilate_B.size} + addUserKnob {41 size_5 l B_blur T Blur_B.size} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {20 C n 1} + C 0 + addUserKnob {41 size_6 l C_edge T Dilate_C.size} + addUserKnob {41 size_7 l C_blur T Blur_C.size} + addUserKnob {20 endGroup_3 l endGroup n -1} + addUserKnob {20 M n 1} + M 0 + addUserKnob {41 size_8 l M_edge T Dilate_M.size} + addUserKnob {41 size_9 l M_blur T Blur_M.size} + addUserKnob {20 endGroup_4 l endGroup n -1} + addUserKnob {20 Y n 1} + Y 0 + addUserKnob {41 size_10 l Y_edge T DilateY.size} + addUserKnob {41 size_11 l Y_blur T Blur_Y.size} + addUserKnob {20 endGroup_5 l endGroup n -1} + addUserKnob {20 K1 n 1} + K1 0 + addUserKnob {41 size_12 l K1_edge T Dilate_K1.size} + addUserKnob {41 size_13 l K1_blur T Blur_K1.size} + addUserKnob {20 endGroup_6 l endGroup n -1} + addUserKnob {20 K2 n 1} + K2 0 + addUserKnob {41 size_14 l K2_edge T Dilate_K2.size} + addUserKnob {41 size_15 l K2_blur T Blur_K2.size} + addUserKnob {20 endGroup_7 l endGroup n -1} +} + Input { + inputs 0 + name Input1 + xpos -542 + ypos -309 + } + Dot { + name Dot_input + xpos -508 + ypos -256 + } + Dot { + name Dot4 + xpos -508 + ypos -82 + } +set N6fc6c80 [stack 0] + Dot { + name Dot17 + label K2 + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0x919191ff + xpos -68 + ypos -10 + } + Expression { + expr3 r>0.3&&r<0.52 + name Expression8 + xpos -102 + ypos 34 + } + Shuffle { + in alpha + name Shuffle14 + xpos -102 + ypos 106 + } + Dilate { + size -1 + name Dilate_K2 + xpos -102 + ypos 172 + } + Blur { + size 2 + name Blur_K2 + xpos -102 + ypos 244 + } + Dot { + name Dot18 + xpos -68 + ypos 518 + } +push $N6fc6c80 + Dot { + name Dot15 + label K1 + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0x686868ff + xpos -178 + ypos -10 + } + Expression { + expr3 r>0.1&&r<0.22 + name Expression7 + xpos -212 + ypos 34 + } + Shuffle { + in alpha + name Shuffle13 + xpos -212 + ypos 106 + } + Dilate { + size -1 + name Dilate_K1 + xpos -212 + ypos 172 + } + Blur { + size 2 + name Blur_K1 + xpos -212 + ypos 244 + } + Dot { + name Dot16 + xpos -178 + ypos 494 + } +push $N6fc6c80 + Dot { + name Dot1 + label Y + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0xff8d0fff + xpos -288 + ypos -10 + } + Expression { + expr3 ((r>0.6)?r:0)*((g>0.6)?g:0) + name Expression6 + xpos -322 + ypos 34 + } + Shuffle { + in alpha + name Shuffle8 + xpos -322 + ypos 106 + } + Dilate { + name DilateY + xpos -322 + ypos 172 + } + Blur { + name Blur_Y + xpos -322 + ypos 244 + } + Dot { + name Dot11 + xpos -288 + ypos 470 + } +push $N6fc6c80 + Dot { + name Dot7 + label M + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0xff00ffff + xpos -398 + ypos -10 + } + Expression { + expr3 ((r>0.6)?r:0)*((b>0.6)?b:0) + name Expression5 + xpos -432 + ypos 34 + } + Shuffle { + in alpha + name Shuffle12 + xpos -432 + ypos 106 + } + Dilate { + name Dilate_M + xpos -432 + ypos 172 + } + Blur { + name Blur_M + xpos -432 + ypos 244 + } + Dot { + name Dot12 + xpos -398 + ypos 446 + } +push $N6fc6c80 + Dot { + name Dot6 + label C + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0xffffff + xpos -508 + ypos -10 + } + Expression { + expr3 ((g>0.6)?g:0)*((b>0.6)?b:0) + name Expression4 + xpos -542 + ypos 34 + } + Shuffle { + in alpha + name Shuffle11 + xpos -542 + ypos 106 + } + Dilate { + name Dilate_C + xpos -542 + ypos 172 + } + Blur { + name Blur_C + xpos -542 + ypos 244 + } + Dot { + name Dot13 + xpos -508 + ypos 422 + } +push $N6fc6c80 + Dot { + name Dot5 + label B + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0xffff + xpos -618 + ypos -10 + } + Expression { + expr3 b-r-g + name Expression3 + xpos -652 + ypos 34 + } + Shuffle { + in alpha + name Shuffle7 + xpos -652 + ypos 106 + } + Dilate { + name Dilate_B + xpos -652 + ypos 172 + } + Blur { + name Blur_B + xpos -652 + ypos 244 + } + Dot { + name Dot14 + xpos -618 + ypos 398 + } +push $N6fc6c80 + Dot { + name Dot3 + label G + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0xff00ff + xpos -728 + ypos -10 + } + Expression { + expr3 g-r-b + name Expression2 + xpos -762 + ypos 34 + } + Shuffle { + in alpha + name Shuffle10 + xpos -762 + ypos 106 + } + Dilate { + name Dilate_G + xpos -762 + ypos 172 + } + Blur { + name Blur_G + xpos -762 + ypos 244 + } + Dot { + name Dot10 + xpos -728 + ypos 374 + } +push $N6fc6c80 + Dot { + name Dot2 + label R + note_font "Verdana Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 30 + note_font_color 0xff0000ff + xpos -838 + ypos -10 + } + Expression { + expr3 r-g-b + name Expression1 + xpos -872 + ypos 34 + } + Shuffle { + in alpha + name Shuffle9 + xpos -872 + ypos 106 + } + Dilate { + name Dilate_R + xpos -872 + ypos 172 + } + Blur { + name Blur_R + xpos -872 + ypos 244 + } + Dot { + name Dot9 + xpos -838 + ypos 350 + } +push $N6fc6c80 + Dot { + name Dot8 + xpos 262 + ypos -82 + } +add_layer {idp1_R idp_R.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp1_R + name ShuffleCopy_R + xpos 228 + ypos 346 + } +add_layer {idp2_G idp_G.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp2_G + name ShuffleCopy_G + xpos 228 + ypos 370 + } +add_layer {idp3_B idp_B.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp3_B + name ShuffleCopy_B + xpos 228 + ypos 394 + } +add_layer {idp4_C idp_C.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp4_C + name ShuffleCopy_C + xpos 228 + ypos 418 + } +add_layer {idp5_M idp_M.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp5_M + name ShuffleCopy_M + xpos 228 + ypos 442 + } +add_layer {idp6_Y idp_Y.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp6_Y + name ShuffleCopy_Y + xpos 228 + ypos 466 + } +add_layer {idp7_K1 idp_K1.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp7_K1 + name ShuffleCopy_K1 + xpos 228 + ypos 490 + } +add_layer {idp8_K2 idp_K2.a} + ShuffleCopy { + inputs 2 + red red + green black + blue black + alpha black + out idp8_K2 + name ShuffleCopy_K2 + xpos 228 + ypos 514 + } + Clamp { + name Clamp1 + xpos 228 + ypos 558 + } + Dot { + name Dot_output + xpos 262 + ypos 662 + } + Output { + name Output1 + xpos 228 + ypos 765 + } +end_group diff --git a/gizmos/Channel/Multimatte.gizmo b/gizmos/Channel/Multimatte.gizmo new file mode 100644 index 0000000..c23680c --- /dev/null +++ b/gizmos/Channel/Multimatte.gizmo @@ -0,0 +1,394 @@ +#! C:/Program Files/Nuke6.3v4/Nuke6.3.exe -nx +version 6.3 v4 +Gizmo { + inputs 2 + note_font Verdana + mapsize {0.15 0.15} + addUserKnob {20 Multimatte} + addUserKnob {4 channel l Channel_select M {Red Green Blue Cyan Magenta Yellow White Alpha}} + addUserKnob {26 ""} + addUserKnob {41 size l Matte_Erode T Erode1.size} + addUserKnob {41 blur l Matte_Blur T Erode1.blur} + addUserKnob {41 mix l Matte_mix T Erode1.mix} + addUserKnob {6 premultiply l Premultiply +STARTLINE} + addUserKnob {26 ""} + addUserKnob {6 invert l Matteinvert +STARTLINE} + addUserKnob {6 invertmatte l Invertmask -STARTLINE} +} + Input { + inputs 0 + name Matte + xpos -438 + ypos -110 + } + Shuffle { + name Shuffle1 + selected true + xpos -438 + ypos -69 + } +set N25c91680 [stack 0] + Shuffle { + red alpha + green alpha + blue alpha + name alpha + xpos 79 + ypos 456 + } +push $N25c91680 + Shuffle { + green red + blue red + alpha red + name red_matte6 + xpos -136 + ypos 281 + } +push $N25c91680 + Shuffle { + red green + blue green + alpha green + name green_matte6 + xpos -33 + ypos 284 + } +set N25c92010 [stack 0] + Merge2 { + inputs 2 + operation in + name Merge8 + xpos -122 + ypos 363 + } +push $N25c92010 +push $N25c91680 + Shuffle { + red blue + green blue + alpha blue + name blue_matte6 + xpos 68 + ypos 286 + } + Merge2 { + inputs 2 + operation in + name Merge9 + xpos -3 + ypos 368 + } + Merge2 { + inputs 2 + operation in + name white + xpos -58 + ypos 449 + } +push $N25c91680 + Shuffle { + red green + blue green + alpha green + name green_matte3 + xpos -1158 + ypos 245 + } +push $N25c91680 + Shuffle { + green red + blue red + alpha red + name red_matte3 + xpos -1261 + ypos 242 + } + Merge2 { + inputs 2 + operation in + name Merge5 + xpos -1228 + ypos 310 + } +push $N25c91680 + Shuffle { + red blue + green blue + alpha blue + name blue_matte3 + xpos -1057 + ypos 248 + } + Merge2 { + inputs 2 + operation minus + name yellow + xpos -1181 + ypos 373 + } +push $N25c91680 + Shuffle { + green red + blue red + alpha red + name red_matte5 + xpos -526 + ypos 276 + } +push $N25c91680 + Shuffle { + red blue + green blue + alpha blue + name blue_matte5 + xpos -322 + ypos 282 + } + Merge2 { + inputs 2 + operation in + name Merge7 + xpos -423 + ypos 372 + } +push $N25c91680 + Shuffle { + red green + blue green + alpha green + name green_matte5 + xpos -423 + ypos 278 + } + Merge2 { + inputs 2 + operation minus + name magenta + xpos -423 + ypos 438 + } +push $N25c91680 + Shuffle { + red green + blue green + alpha green + name green_matte4 + xpos -824 + ypos 249 + } +push $N25c91680 + Shuffle { + red blue + green blue + alpha blue + name blue_matte4 + xpos -724 + ypos 252 + } + Merge2 { + inputs 2 + operation in + name Merge6 + xpos -768 + ypos 321 + } +push $N25c91680 + Shuffle { + green red + blue red + alpha red + name red_matte4 + xpos -927 + ypos 246 + } + Merge2 { + inputs 2 + operation minus + name cyan + xpos -768 + ypos 397 + } +push $N25c91680 + Shuffle { + red blue + green blue + alpha blue + name blue_matte2 + xpos 40 + ypos 42 + } +push $N25c91680 + Shuffle { + red green + blue green + alpha green + name green_matte2 + xpos -70 + ypos 42 + } + Merge2 { + inputs 2 + operation minus + name Merge4 + xpos -28 + ypos 109 + } +push $N25c91680 + Shuffle { + green red + blue red + alpha red + name red_matte2 + xpos -180 + ypos 42 + } + Merge2 { + inputs 2 + operation minus + name blue + xpos -142 + ypos 182 + } +push $N25c91680 + Shuffle { + red green + blue green + alpha green + name green_matte1 + xpos -400 + ypos 42 + } +push $N25c91680 + Shuffle { + green red + blue red + alpha red + name red_matte1 + xpos -510 + ypos 42 + } + Merge2 { + inputs 2 + operation minus + name Merge3 + xpos -454 + ypos 101 + } +push $N25c91680 + Shuffle { + red blue + green blue + alpha blue + name blue_matte1 + xpos -290 + ypos 42 + } + Merge2 { + inputs 2 + operation minus + name green + xpos -386 + ypos 177 + } +push $N25c91680 + Shuffle { + green red + blue red + alpha red + name red_matte + xpos -840 + ypos 37 + } +push $N25c91680 + Shuffle { + red green + blue green + alpha green + name green_matte + xpos -728 + ypos 35 + } + Merge2 { + inputs 2 + operation minus + name Merge1 + xpos -767 + ypos 102 + } +push $N25c91680 + Shuffle { + red blue + green blue + alpha blue + name blue_matte + xpos -628 + ypos 45 + } + Merge2 { + inputs 2 + operation minus + name red + xpos -670 + ypos 150 + } + Switch { + inputs 8 + which {{parent.channel i}} + name Switch1 + xpos -551 + ypos 589 + } +set N257cac70 [stack 0] +push $N257cac70 + Erode { + channels alpha + size 0 + name Erode1 + xpos -427 + ypos 626 + } + Merge2 { + inputs 2 + mix {{parent.premultiply i}} + name Merge10 + xpos -551 + ypos 662 + } + Invert { + mix {{parent.invert i}} + name Invert1 + xpos -551 + ypos 722 + } + Input { + inputs 0 + name mask + xpos -195 + ypos 782 + number 1 + } + Invert { + name Invert2 + xpos -326 + ypos 776 + } + Invert { + mix {{parent.invertmatte}} + name Invert3 + xpos -432 + ypos 779 + } + Merge2 { + inputs 2 + operation minus + name Merge2 + xpos -551 + ypos 782 + } + Output { + name Output1 + xpos -551 + ypos 846 + } +end_group diff --git a/gizmos/Channel/akromatism_stRub.gizmo b/gizmos/Channel/akromatism_stRub.gizmo new file mode 100644 index 0000000..1dff1f5 --- /dev/null +++ b/gizmos/Channel/akromatism_stRub.gizmo @@ -0,0 +1,171 @@ +#! /Applications/Nuke5.1v5/Nuke5.1v5.app/Contents/MacOS/Nuke5.1v5 -nx +version 5.1500 +Gizmo { + note_font "Verdana Bold" + note_font_size 13 + note_font_color 0x7f1f00ff + addUserKnob {20 aKKROMATISM l aKROMATISM} + addUserKnob {41 multiplier l AberrationMultiplier T Dot1.multiplier} + addUserKnob {41 mixRay T moxDot.mixRay} + addUserKnob {41 which T Switch1.which} + addUserKnob {26 ""} + addUserKnob {26 "" l _ T "st.Rub's Akromatism\[6.1.2009]"} + addUserKnob {26 ""} + addUserKnob {20 about} + addUserKnob {26 "" l _ T "If you need any updates, or suggestions, just contact\n\ndonald@donaldstrubler.com"} +} + Keymix { + inputs 0 + invertMask true + mix 0 + name Keymix1 + xpos -160 + ypos 109 + } + Input { + inputs 0 + name Input1 + xpos -133 + ypos -363 + } + Dot { + name Dot2 + xpos -99 + ypos -292 + } +set N19953c10 [stack 0] + GodRays { + channels {-rgba.red rgba.green -rgba.blue} + scale {{parent.GodRays8.scale}} + center {{parent.GodRays5.center.x} {parent.GodRays5.center.y}} + name GodRays6 + xpos -15 + ypos -189 + } + GodRays { + channels {rgba.red -rgba.green -rgba.blue} + scale {{parent.GodRays5.scale}} + center {{parent.GodRays6.center.x} {parent.GodRays6.center.y}} + name GodRays7 + xpos -15 + ypos -141 + addUserKnob {20 User} + addUserKnob {4 sasdasd M {Read1 ""}} + } +push $N19953c10 + GodRays { + channels {-rgba.red -rgba.green rgba.blue} + scale {{(Dot1.multiplier)+1 i}} + center {{(format.width)/2 i} {(format.height)/2 i}} + name GodRays8 + xpos -117 + ypos -187 + } + GodRays { + channels {-rgba.red rgba.green -rgba.blue} + scale {{parent.GodRays2.scale i}} + center {{parent.GodRays8.center.x i} {parent.GodRays8.center.y i}} + name GodRays5 + xpos -117 + ypos -140 + addUserKnob {20 User} + addUserKnob {4 sasdasd M {Read1 ""}} + } +push $N19953c10 + GodRays { + channels {-rgba.red -rgba.green rgba.blue} + scale {{(Dot1.multiplier)+1 i}} + center {{(format.width)/2 i} {(format.height)/2 i}} + name GodRays1 + xpos -229 + ypos -178 + } + GodRays { + channels {rgba.red -rgba.green -rgba.blue} + scale {{((Dot1.multiplier)*(-1))+1 i}} + center {{parent.GodRays1.center.x i} {parent.GodRays1.center.y i}} + name GodRays2 + xpos -229 + ypos -139 + addUserKnob {20 User} + addUserKnob {4 sasdasd M {Read1 ""}} + } + Switch { + inputs 3 + which 2 + name Switch1 + xpos -104 + ypos -70 + addUserKnob {20 User} + addUserKnob {41 which_1 l which T Switch1.which} + } + GodRays { + scale {{((moxDot.mixRay)*.05)+1}} + center {{width/2} {height/2}} + name GodRays3 + xpos -104 + ypos -24 + addUserKnob {20 User} + addUserKnob {7 mult} + mult 1 + } + Blur { + size 0.6 + name Blur1 + xpos -63 + ypos 66 + } + Output { + name Output1 + xpos -104 + ypos 229 + } + Dot { + inputs 0 + name Dot1 + xpos -297 + ypos -172 + addUserKnob {20 User} + addUserKnob {7 multiplier R -0.1 0.1} + multiplier -0.036 + } + Radial { + inputs 0 + cliptype none + area {0 0 {format.width i} {format.height i}} + softness 0.18 + name Radial1 + xpos 152 + ypos -270 + hide_input true + } + Blur { + size 300 + quality 30 + name Blur3 + xpos 152 + ypos -223 + } + Grade { + blackpoint 0.015 + whitepoint 0.4 + name Grade1 + xpos 152 + ypos -166 + } + Dot { + inputs 0 + name moxDot + xpos 259 + ypos 11 + addUserKnob {20 User} + addUserKnob {7 mixRay} + mixRay 0.065 + } + Viewer { + inputs 0 + name Viewer1 + xpos 32 + ypos 229 + } +end_group diff --git a/gizmos/Filter/BokehBlur.gizmo b/gizmos/Filter/BokehBlur.gizmo new file mode 100644 index 0000000..9aa8480 --- /dev/null +++ b/gizmos/Filter/BokehBlur.gizmo @@ -0,0 +1,1482 @@ +# BokehBlur 5.1 +# By Jason Bidwell +# Updated 11-10-2014 + +Gizmo { + name BokehBlur + tile_color 0xff7524ff + note_font Verdana + note_font_color 0x20202ff + selected true + xpos -197 + ypos -126 + addUserKnob {20 bokeh l Bokeh} + addUserKnob {41 format l "output format" T ReformatMaster.format} + addUserKnob {26 ""} + addUserKnob {4 Iris l Iris_Shape t "Choose iris shape.\n" M {Pentagonal Hexagonal Heptagonal Octagonal Circular "" "" "" "" "" "" ""}} + Iris Circular + addUserKnob {6 userShape l "Custom Shape" -STARTLINE} + addUserKnob {41 BokehSize l Bokeh_Size t "Amount of defocus." T Controller.BokehSize} + addUserKnob {41 PostBlur l "Post Blur" t "Post blur on the iris\nshape." T softness1.size} + addUserKnob {41 Irregularity t "Amount of iris Irregularity.\n" T amt.which} + addUserKnob {41 Rotation l Iris_Rotation t "Rotates the orientation\nof the iris shape." T Controller.Rotation} + addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T Convolve2.useGPUIfAvailable} + addUserKnob {26 ""} + addUserKnob {20 ColorCorrection l "Color Enhancement" n 1} + ColorCorrection 0 + addUserKnob {6 specSwitch l "Specular Gain" t "Turn on/off specular\ngain." +STARTLINE} + specSwitch true + addUserKnob {41 SpecularGain l "Specular Gain" T specGainer.SpecularGain} + addUserKnob {41 SpecRangeHigh l "High Range" T ranger.SpecRangeHigh} + addUserKnob {41 SpecRangeLow l "Low Range" T ranger.SpecRangeLow} + addUserKnob {26 unnamed l "" +STARTLINE} + addUserKnob {6 chromAbr l "Chromatic Aberration" +STARTLINE} + chromAbr true + addUserKnob {4 CAbr l "Aberration Type" M {Radial Offset Both "" "" "" ""}} + CAbr Offset + addUserKnob {41 rad_abr l "Radial Abr" T radial_abr.rad_abr} + addUserKnob {41 Aberration l "Offset Abr" T aberration_offset.Aberration} + addUserKnob {26 divider2 l "" +STARTLINE} + addUserKnob {6 twinkle l "Twinkle On/Off" t "Turn on/off the twinkle\neffect." +STARTLINE} + twinkle true + addUserKnob {41 speed l "Twinkle Speed" t "Speed of the twinkle\neffect." T speed1.speed} + addUserKnob {7 Twinkle_Size l "Twinkle Size" t "Size of the twinkle\neffect." R 1 1000} + Twinkle_Size 150 + addUserKnob {41 intensity l "Twinkle Intensity" t "Intensity of the\ntwinkle effect." T Gainer.intensity} + addUserKnob {41 Seed t "Changes the random seed." T seeder1.seeder} + addUserKnob {26 ""} + addUserKnob {6 SatBoostCtrl l "Saturation Gain" +STARTLINE} + SatBoostCtrl true + addUserKnob {41 Saturation_Boost_1 l Saturation T Saturation_Boost1.Saturation_Boost} + addUserKnob {6 con_boost l "Contrast Gain" +STARTLINE} + con_boost true + addUserKnob {41 con_boost_1 l Contrast T Contrast_Boost.con_boost} + addUserKnob {20 endGroup n -1} + addUserKnob {26 divider3 l "" +STARTLINE} + addUserKnob {20 DOF l "Depth Of Field Controls" n 1} + DOF 0 + addUserKnob {6 Zblur l "DOF On/Off" t "Use Zmatte to control Depth of\nField." +STARTLINE} + addUserKnob {7 ZblurAmount l "Zblur Amount" t "Amount of Zblur" R 0 10} + ZblurAmount 0.2 + addUserKnob {41 center l "Focal Point" t "Center of the Zslice Focal\nPlane" T ZSliceBB.center} + addUserKnob {41 dof l "DOF Width" t "Size of the focal plane." T ZSliceBB.dof} + addUserKnob {41 blackpoint l "DOF Far" t "Adjust the blackpoint of\nthe Zmatte." T GradeBB.blackpoint} + addUserKnob {41 whitepoint l "DOF Near" t "Adjust the whitepoint of\nthe Zmatte." T GradeBB.whitepoint} + addUserKnob {6 ViewAlpha l "View Matte Only" t "View the alpha\nchannel." +STARTLINE} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {26 BokehBlur l "" +STARTLINE T "BokehBlur v5.0\nBy Jason Bidwell"} +} + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x222222ff + label CAbr + note_font_size 42 + xpos -589 + ypos 816 + bdwidth 515 + bdheight 291 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x222222ff + label "Spec Gain" + note_font_size 50 + xpos -1243 + ypos -600 + bdwidth 710 + bdheight 330 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x222222ff + label Twinkle + note_font_size 50 + xpos -1022 + ypos 302 + bdwidth 856 + bdheight 430 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x222222ff + label CC + note_font_size 50 + xpos -749 + ypos -1049 + bdwidth 420 + bdheight 343 + } + BackdropNode { + inputs 0 + name BackdropNode5 + tile_color 0x222222ff + label Main + note_font_size 50 + xpos -418 + ypos -602 + bdwidth 880 + bdheight 851 + } + BackdropNode { + inputs 0 + name BackdropNode6 + tile_color 0x222222ff + label Zmatte + note_font_size 50 + xpos 428 + ypos -1225 + bdwidth 513 + bdheight 519 + } + NoOp { + inputs 0 + name seeder1 + xpos -260 + ypos -111 + hide_input true + addUserKnob {20 User} + addUserKnob {7 seeder t "Changes the random seed." R 1 10} + seeder 1 + } + NoOp { + inputs 0 + name speed1 + xpos -907 + ypos 407 + hide_input true + addUserKnob {20 User} + addUserKnob {7 speed t "Speed of the twinkle effect." R 0.001 0.5} + speed 0.04 + } + NoOp { + inputs 0 + name ranger + xpos -1009 + ypos -508 + hide_input true + addUserKnob {20 User} + addUserKnob {7 SpecRangeLow l "Low Range" t "Adjust the range of\nlower specular range of the highlights to be boosted."} + SpecRangeLow 0.22 + addUserKnob {7 SpecRangeHigh l "High Range" t "Adjust the range of\nhigher specular range of the highlights to be boosted."} + SpecRangeHigh 0.65 + } + NoOp { + inputs 0 + name Saturation_Boost1 + xpos -454 + ypos -872 + hide_input true + addUserKnob {20 User} + addUserKnob {7 Saturation_Boost R 1 10} + Saturation_Boost 1.5 + } + NoOp { + inputs 0 + name Contrast_Boost + xpos -479 + ypos -1014 + hide_input true + addUserKnob {20 User} + addUserKnob {7 con_boost l con_booster R 1 5} + con_boost 1.5 + } + NoOp { + inputs 0 + name aberration_offset + xpos -539 + ypos 881 + hide_input true + addUserKnob {20 User} + addUserKnob {7 Aberration t "Adds chromatic abberation." R 0 10} + Aberration 5 + } + NoOp { + inputs 0 + name radial_abr + xpos -243 + ypos 978 + hide_input true + addUserKnob {20 User} + addUserKnob {7 rad_abr l "Radial Abberation Amount" R 0 10} + rad_abr 1 + } + NoOp { + inputs 0 + name Controller + xpos 106 + ypos -501 + hide_input true + addUserKnob {20 User} + addUserKnob {7 BokehSize} + BokehSize 0.3 + addUserKnob {7 Rotation R -180 180} + } + Input { + inputs 0 + name Image + xpos -1552 + ypos -1245 + } + Reformat { + type "to box" + box_width {{parent.Image.width}} + box_height {{parent.Image.height}} + box_fixed true + filter Impulse + black_outside true + name Reformat13 + xpos -1552 + ypos -1164 + } + Reformat { + resize none + black_outside true + name ReformatMaster + xpos -1552 + ypos -1140 + } + set C2c076f50 [stack 0] +set N2c076f50 [stack 0] + Dot { + name Dot18 + xpos -1547 + ypos 1258 + } +set N2c082a10 [stack 0] + Dot { + name Dot23 + xpos -1547 + ypos 1501 + } + Input { + inputs 0 + name Depth + xpos 438 + ypos -1288 + number 1 + } + Expression { + expr3 a==0?0:a + name Expr + xpos 438 + ypos -1165 + } + Reformat { + type "to box" + box_width {{parent.Image.width i}} + box_height {{parent.Image.height i}} + box_fixed true + resize distort + filter Impulse + black_outside true + name Reformat12 + xpos 438 + ypos -1141 + } +set N2c099180 [stack 0] + Dot { + name Dot9 + xpos 740 + ypos -1137 + } +set N2c0a5010 [stack 0] +push $N2c0a5010 +push 0 +push $N2c0a5010 + Shuffle { + red blue + green blue + alpha blue + name blue1 + xpos 755 + ypos -1019 + } +push $N2c0a5010 + Shuffle { + red green + blue green + alpha green + name green1 + xpos 661 + ypos -1022 + } + Merge2 { + inputs 4+1 + operation max + name Merge7 + xpos 711 + ypos -968 + } + ZSlice { + Zchan rgba.red + dof 1 + name ZSliceBB + xpos 711 + ypos -942 + } + Grade { + channels alpha + blackpoint 0.045 + whitepoint 0.65 + white 2 + white_clamp true + name GradeBB + xpos 711 + ypos -904 + } + Blur { + channels alpha + size {{ZblurAmount}} + name BlurBB + xpos 711 + ypos -866 + } + Shuffle { + red alpha + green alpha + blue alpha + name Shuffle2 + xpos 711 + ypos -828 + } + Dot { + name Dot16 + xpos 745 + ypos -742 + } +push $N2c099180 + Switch { + inputs 2 + which {{Zblur i}} + name ZblurSwitch + xpos 438 + ypos -745 + } +set N2c105bc0 [stack 0] + Dot { + name Dot10 + xpos 547 + ypos -632 + } + Dot { + name Dot21 + xpos 547 + ypos 594 + } +set N2c10fac0 [stack 0] + Dot { + name Dot12 + xpos 556 + ypos 1335 + } + Shuffle { + red alpha + green alpha + blue alpha + name Shuffle4 + xpos -198 + ypos 1331 + } + Input { + inputs 0 + name Mask + xpos -155 + ypos 1202 + number 2 + } + Expression { + expr3 a==0?0:a + name Expr1 + xpos -155 + ypos 1228 + } +clone $C2c076f50 { + xpos -155 + ypos 1254 + selected false + } +push $N2c082a10 +clone $C2c076f50 { + xpos -440 + ypos 1254 + selected false + } +push $N2c10fac0 + Invert { + name Invert3 + xpos -82 + ypos 584 + } +set N2c149330 [stack 0] + Dot { + name Dot22 + xpos -48 + ypos 1136 + } +push $N2c149330 +push $N2c105bc0 + Invert { + name Invert2 + xpos -167 + ypos -752 + } +set N2c155ff0 [stack 0] + Dot { + name Dot20 + xpos -610 + ypos 553 + hide_input true + } + Constant { + inputs 0 + channels rgb + last 100 + name Constant1 + xpos -782 + ypos 339 + } + Noise { + size {{Twinkle_Size i}} + zoffset {{(abs(frame%5-frame))*speed1.speed i}} + lacunarity {{Twinkle_Size/100 i}} + gain 0.31 + gamma 0.685 + center {1024 778} + name Noise2 + xpos -782 + ypos 411 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + resize distort + black_outside true + name Reformat8 + xpos -782 + ypos 435 + } +push $N2c105bc0 + Dot { + name Dot17 + xpos 395 + ypos -634 + } + Dot { + name Dot5 + xpos 395 + ypos 216 + } + Invert { + name Invert1 + xpos -207 + ypos 206 + } + Constant { + inputs 0 + format "2048 1556 0 0 2048 1556 1 2K_Super_35(full-ap)" + last 100 + name Constant4 + xpos -293 + ypos -546 + } + Dot { + name Dot2 + xpos -259 + ypos -443 + } +set N2c19ae70 [stack 0] + Dot { + name Dot1 + xpos -362 + ypos -443 + } + Noise { + cliptype none + size 1000 + zoffset {{seeder1.seeder x1015 0}} + center {1024 778} + name Noise1 + xpos -396 + ypos -113 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + black_outside true + name Reformat6 + xpos -396 + ypos -87 + } + Input { + inputs 0 + name Shape + xpos 232 + ypos -497 + number 3 + } + Shuffle { + red alpha + green alpha + blue alpha + name Shuffle1 + selected true + xpos 232 + ypos -473 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + resize distort + name Reformat10 + xpos 232 + ypos -352 + } + Transform { + rotate {{parent.Controller.Rotation i}} + scale {{parent.Controller.BokehSize i}} + center {{input.width/2 i} {input.height/2 i}} + filter Mitchell + name Transform1 + xpos 232 + ypos -298 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + black_outside true + name Reformat5 + xpos 232 + ypos -232 + } + NoOp { + name Custom + tile_color 0x1f00ffff + xpos 232 + ypos -166 + } +push $N2c19ae70 + RotoPaint { + cliptype none + format "512 512 0 0 512 512 1 square_512" + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 512} + {t x44800000 x44428000} + {a} + {curvegroup Ellipse1 576 bezier + {{cc + {f 8192} + {px x44828000 + {xc35ab47b 0} + {x4478cccd x43c40000} + {x435ab47b 0} + {0 xc35ab47b} + {x44ade666 x44450000} + {0 x435ab47b} + {x435ab47b 0} + {x4478cccd x44940000} + {xc35ab47b 0} + {0 x435ab47b} + {x4415cccd x44450000} + {0 xc35ab47b}}} idem} + {t + {{x44828000 x4483c000}} + {{x44828000 x443e0000}} 0 + {{x44828000 0}} + {{x44828000 0}} 0 0 0 + {{x44828000 0}} + {{x44828000 1}} + {{x44828000 1}} 1 + {{x44828000 0}}} + {a spx x44800000 spy x44428000 sb 1 nv x40400000 view2 x40000000 view3 x40400000 ltn x44828000 ltm x44828000 tt x40c00000}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {320 240} + colorOverlay 0 + lifetime_type "all frames" + lifetime_start 1044 + lifetime_end 1044 + motionblur_shutter_offset_type centred + source_translate_round false + source_black_outside true + name circles + xpos 125 + ypos -348 + } + Transform { + rotate {{parent.Controller.Rotation}} + scale {{parent.Controller.BokehSize}} + center {1024 778} + filter Mitchell + name Transform3 + xpos 125 + ypos -301 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + black_outside true + name Reformat4 + xpos 125 + ypos -235 + } + NoOp { + name circle + tile_color 0x1f00ffff + xpos 125 + ypos -165 + } +push $N2c19ae70 + RotoPaint { + cliptype none + format "512 512 0 0 512 512 1 square_512" + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 512} + {t x44800000 x44428000} + {a} + {curvegroup Ellipse1 576 bezier + {{cc + {f 8192} + {px x44828000 + {0 0} + {x4478cccd x43c40000} + {0 0} + {0 0} + {x449f8000 x44000000} + {0 0} + {0 0} + {x44ade666 x44450000} + {0 0} + {0 0} + {x44a0c000 x44840000} + {0 0} + {0 0} + {x4478cccd x44940000} + {0 0} + {0 0} + {x442ea148 x4483499a} + {0 0} + {0 0} + {x4415cccd x44450000} + {0 0} + {0 0} + {x44320000 x43fd0000} + {0 0}}} idem} + {t + {{x44828000 x4483c000 -}} + {{x44828000 x443e0000 -}} 0 + {{x44828000 0 -}} + {{x44828000 0 -}} 0 0 0 + {{x44828000 0 -}} + {{x44828000 1 -}} + {{x44828000 1 -}} 1 + {{x44828000 0 -}}} + {a spx x44800000 spy x44428000 sb 1 nv x40400000 view2 x40000000 view3 x40400000 ltn x44828000 ltm x44828000 tt x40c00000}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {320 240} + colorOverlay 0 + lifetime_type "all frames" + lifetime_start 1044 + lifetime_end 1044 + motionblur_shutter_offset_type centred + source_translate_round false + source_black_outside true + name octagon + xpos 12 + ypos -346 + } + Transform { + rotate {{parent.Controller.Rotation.main}} + scale {{parent.Controller.BokehSize}} + center {1024 778} + filter Mitchell + name Transform6 + xpos 12 + ypos -293 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + black_outside true + name Reformat3 + xpos 12 + ypos -231 + } + NoOp { + name eight + tile_color 0x1f00ffff + xpos 12 + ypos -166 + } +push $N2c19ae70 + RotoPaint { + cliptype none + format "512 512 0 0 512 512 1 square_512" + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 512} + {t x44800000 x44428000} + {a} + {curvegroup Rectangle1 576 bezier + {{cc + {f 8192} + {px x44828000 + {0 0} + {x441f0000 x446f8000} + {0 0} + {0 0} + {x44658000 x44920000} + {0 0} + {0 0} + {x449b8000 x44888000} + {0 0} + {0 0} + {x44ae0000 x44458000} + {0 0} + {0 0} + {x449dc000 x43f40000} + {0 0} + {0 0} + {x44630000 x43c90000} + {0 0} + {0 0} + {x44218000 x44160000} + {0 0}}} idem} + {t + {{x44828000 x446d0000}} + {{x44828000 x4448c000}} 0 + {{x44828000 0}} + {{x44828000 0}} 0 0 0 + {{x44828000 0}} + {{x44828000 1}} + {{x44828000 1}} 1 + {{x44828000 0}}} + {a spx x44800000 spy x44428000 sb 1 nv x40400000 view2 x40000000 view3 x40400000 ltn x44828000 ltm x44828000 tt x40e00000}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {320 240} + colorOverlay 0 + lifetime_type "all frames" + lifetime_start 1044 + lifetime_end 1044 + motionblur_shutter_offset_type centred + source_translate_round false + source_black_outside true + name heptagon + xpos -87 + ypos -351 + } + Transform { + rotate {{parent.Controller.Rotation i}} + scale {{parent.Controller.BokehSize i}} + center {1024 778} + filter Mitchell + name Transform5 + xpos -87 + ypos -298 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + black_outside true + name Reformat2 + xpos -87 + ypos -232 + } + NoOp { + name seven + tile_color 0x1f00ffff + xpos -87 + ypos -167 + } +push $N2c19ae70 + RotoPaint { + cliptype none + format "512 512 0 0 512 512 1 square_512" + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 512} + {t x44800000 x44428000} + {a} + {curvegroup Rectangle1 576 bezier + {{cc + {f 8192} + {px x44828000 + {0 0} + {x44240000 x447a0000} + {0 0} + {0 0} + {x44778000 x44944000} + {0 0} + {0 0} + {x44a68000 x44798000} + {0 0} + {0 0} + {x44a70000 x44148000} + {0 0} + {0 0} + {x44788000 x43c20000} + {0 0} + {0 0} + {x44230000 x44130000} + {0 0}}} idem} + {t + {{x44828000 x446d0000}} + {{x44828000 x4448c000}} 0 + {{x44828000 0}} + {{x44828000 0}} 0 0 0 + {{x44828000 0}} + {{x44828000 1}} + {{x44828000 1}} 1 + {{x44828000 0}}} + {a spx x44800000 spy x44428000 sb 1 nv x40400000 view2 x40000000 view3 x40400000 ltn x44828000 ltm x44828000 tt x40e00000}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {320 240} + colorOverlay 0 + lifetime_type "all frames" + lifetime_start 1044 + lifetime_end 1044 + motionblur_shutter_offset_type centred + source_translate_round false + source_black_outside true + name hexagon + xpos -184 + ypos -350 + } + Transform { + rotate {{parent.Controller.Rotation i}} + scale {{parent.Controller.BokehSize i}} + center {1024 778} + filter Mitchell + name Transform4 + xpos -184 + ypos -299 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + black_outside true + name Reformat1 + xpos -184 + ypos -236 + } + NoOp { + name six + tile_color 0x1f00ffff + xpos -184 + ypos -171 + } +push $N2c19ae70 + RotoPaint { + cliptype none + format "512 512 0 0 512 512 1 square_512" + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 512} + {t x44800000 x44428000} + {a} + {curvegroup Rectangle1 576 bezier + {{cc + {f 8192} + {px x44828000 + {0 0} + {x443f0000 x4488c000} + {0 0} + {0 0} + {x449b4000 x44888000} + {0 0} + {0 0} + {x44aac000 x44268000} + {0 0} + {0 0} + {x447d0000 x43c40000} + {0 0} + {0 0} + {x441e8000 x44210000} + {0 0}}} idem} + {t + {{x44828000 x446d0000}} + {{x44828000 x4448c000}} 0 + {{x44828000 0}} + {{x44828000 0}} 0 0 0 + {{x44828000 0}} + {{x44828000 1}} + {{x44828000 1}} 1 + {{x44828000 0}}} + {a spx x44800000 spy x44428000 sb 1 nv x40400000 view2 x40000000 view3 x40400000 ltn x44828000 ltm x44828000 tt x40e00000}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 tt 5 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 6 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {320 240} + colorOverlay 0 + lifetime_type "all frames" + lifetime_start 1044 + lifetime_end 1044 + motionblur_shutter_offset_type centred + source_translate_round false + source_black_outside true + name pentagon + xpos -293 + ypos -355 + } + Transform { + rotate {{parent.Controller.Rotation i}} + scale {{parent.Controller.BokehSize i}} + center {1024 778} + filter Mitchell + name Transform2 + xpos -293 + ypos -304 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + black_outside true + name Reformat11 + xpos -293 + ypos -234 + } + NoOp { + name five + tile_color 0x1f00ffff + xpos -293 + ypos -173 + } + Switch { + inputs 5 + which {{Iris i}} + name Shape_Switch + xpos -87 + ypos -99 + } + Switch { + inputs 2 + which {{userShape i}} + name CustomSwitch + xpos -87 + ypos -65 + } + Blur { + channels rgba + size 0.01 + name softness1 + xpos -87 + ypos -21 + } +set N2c3e2300 [stack 0] + Merge2 { + inputs 2 + operation in + name Merge2 + xpos -330 + ypos -15 + } +push $N2c3e2300 + Merge2 { + inputs 2 + operation multiply + name Merge1 + xpos -330 + ypos 22 + } +push $N2c3e2300 + Dissolve { + inputs 2 + which 0.1 + name amt + xpos -330 + ypos 82 + } + Crop { + box {0 0 512 512} + reformat true + name Crop3 + xpos -330 + ypos 120 + } +push $N2c155ff0 + Dot { + name Dot19 + xpos -728 + ypos -425 + } +push $N2c155ff0 +push $N2c155ff0 +push $N2c076f50 + Crop { + box {0 0 {parent.Image.width i} {parent.Image.height i}} + name Crop1 + xpos -638 + ypos -1140 + } + Dot { + name Dot11 + xpos -604 + ypos -1019 + } +set N2c421c10 [stack 0] + ColorCorrect { + inputs 1+1 + contrast {{Contrast_Boost.con_boost}} + name ColorCorrect1 + xpos -580 + ypos -981 + } +push $N2c421c10 + Switch { + inputs 2 + which {{con_boost i}} + name Switch1 + label contr + xpos -638 + ypos -928 + } +set N2c435500 [stack 0] + Saturation { + inputs 1+1 + saturation {{Saturation_Boost1.Saturation_Boost}} + name Saturation1 + xpos -562 + ypos -832 + } +push $N2c435500 + Switch { + inputs 2 + which {{SatBoostCtrl i}} + name Switch2 + label sat + xpos -638 + ypos -792 + } + Dot { + name Dot8 + xpos -604 + ypos -565 + } +set N2c44acf0 [stack 0] + Keyer { + operation "luminance key" + range {{parent.ranger.SpecRangeLow i} {parent.ranger.SpecRangeHigh i} 1 1} + name Keyer2 + xpos -890 + ypos -514 + } + Merge2 { + inputs 2 + operation in + name Merge6 + label "Z only" + xpos -890 + ypos -435 + } +push $N2c44acf0 + Grade { + inputs 1+1 + white {{parent.specGainer.SpecularGain}} + name Grade4 + xpos -890 + ypos -356 + } +push $N2c44acf0 + Switch { + inputs 2 + which {{specSwitch i}} + name switch1 + label spec + xpos -638 + ypos -362 + } +clone $C2c076f50 { + xpos -638 + ypos 212 + selected false + } + Convolve2 { + inputs 2+1 + name Convolve2 + xpos -330 + ypos 206 + } + Dot { + name Dot6 + xpos -296 + ypos 380 + } +set N2ea1b0e0 [stack 0] + Keyer { + operation "luminance key" + range {0.04016392235 0.6462028021 1 1} + name Keyer1 + xpos -672 + ypos 372 + } + Dilate { + size 1 + name Dilate1 + xpos -672 + ypos 406 + } + Shuffle { + red alpha + green alpha + blue alpha + name Shuffle5 + xpos -672 + ypos 440 + } + Reformat { + format "512 512 0 0 512 512 1 square_512" + resize distort + black_outside true + name Reformat7 + xpos -672 + ypos 464 + } + Merge2 { + inputs 2 + operation multiply + name Merge5 + xpos -782 + ypos 515 + } + Grade { + channels rgba + white {{(Gainer.intensity)*4 i}} + gamma 2 + white_clamp true + name Grade1 + xpos -782 + ypos 541 + } + Shuffle { + green red + blue red + alpha red + name Shuffle3 + xpos -782 + ypos 567 + } + Reformat { + type "to box" + box_width {{parent.Image.width}} + box_height {{parent.Image.height}} + box_fixed true + resize distort + black_outside true + name Reformat9 + xpos -782 + ypos 590 + } + Merge2 { + inputs 2 + operation in + name Merge8 + label "Z only" + xpos -644 + ypos 584 + } +push $N2ea1b0e0 + Grade { + inputs 1+1 + channels rgba + white {{Gainer.intensity*2 i}} + gamma {{Gainer.intensity*2 i}} + black_clamp false + name Grade2 + xpos -534 + ypos 590 + } +push $N2ea1b0e0 + Dissolve { + inputs 2+1 + which {{twinkle}} + name Dissolve2 + xpos -330 + ypos 584 + } +clone $C2c076f50 { + xpos -330 + ypos 795 + selected false + } +set N2ea95020 [stack 0] + Dot { + name Dot13 + xpos -296 + ypos 857 + } +set N2eaa0cc0 [stack 0] + Shuffle { + green black + blue black + alpha black + name red + xpos -434 + ypos 918 + } + Transform { + translate {{aberration_offset.Aberration i} 0} + center {1024 778} + black_outside false + name Transform7 + xpos -434 + ypos 944 + } +push $N2eaa0cc0 + Shuffle { + red black + blue black + alpha black + name green + xpos -330 + ypos 918 + } + Merge2 { + inputs 2 + operation max + name Merge3 + xpos -391 + ypos 980 + } +push $N2eaa0cc0 + Shuffle { + red black + green black + alpha black + name blue + xpos -545 + ypos 918 + } + Transform { + translate {{-1*aberration_offset.Aberration i} 0} + center {1024 778} + black_outside false + name Transform8 + xpos -545 + ypos 944 + } + Merge2 { + inputs 2 + operation max + name Merge4 + xpos -483 + ypos 1020 + } +set N2eae6b80 [stack 0] +push $N2eaa0cc0 + Dot { + name Dot3 + xpos -127 + ypos 857 + } + GodRays { + channels {rgba.red -rgba.green rgba.blue none} + scale {{abs(parent.radial_abr.rad_abr/20)+1 i}} + center {{parent.Reformat13.box_width/2 i} {parent.Reformat13.box_height/2 i}} + name Radial_Abbr + tile_color 0x36252bff + xpos -161 + ypos 1014 + } +set N2eaf62f0 [stack 0] + Merge2 { + inputs 2 + operation max + name Merge9 + xpos -308 + ypos 1020 + } +push $N2eae6b80 + Dot { + name Dot15 + xpos -449 + ypos 1071 + } +push $N2eaf62f0 + Dot { + name Dot7 + xpos -127 + ypos 1071 + } + Switch { + inputs 3 + which {{CAbr i}} + name CAbr_Type + xpos -308 + ypos 1067 + } +push $N2ea95020 + Dot { + name Dot4 + xpos -640 + ypos 799 + } + Dot { + name Dot14 + xpos -640 + ypos 1136 + } + Dissolve { + inputs 2+1 + which {{chromAbr i}} + name Dissolve1 + xpos -308 + ypos 1126 + } +clone $C2c076f50 { + xpos -308 + ypos 1164 + selected false + } + Dissolve { + inputs 2+1 + which 1 + name Dissolve3 + xpos -308 + ypos 1248 + } + Switch { + inputs 2 + which {{ViewAlpha i}} + name viewMode + xpos -308 + ypos 1331 + } + ShuffleCopy { + inputs 2 + name ShuffleCopy1 + xpos -308 + ypos 1497 + } + Output { + name Output1 + xpos -308 + ypos 1636 + } + NoOp { + inputs 0 + name specGainer + xpos -1014 + ypos -354 + hide_input true + addUserKnob {20 User} + addUserKnob {7 SpecularGain l "Specular Gain" t "Adjust the range of\nthe specular highlughts to be boosted." R 1 10} + SpecularGain 1.5 + } + NoOp { + inputs 0 + name Gainer + xpos -601 + ypos 510 + hide_input true + addUserKnob {20 User} + addUserKnob {7 intensity t "Intensity of the twinkle effect."} + intensity 0.09 + } +push $N2c076f50 + Viewer { + frame 49 + input_process false + name Viewer1 + xpos -1757 + ypos -1271 + } +end_group diff --git a/gizmos/Filter/CWDefocus.gizmo b/gizmos/Filter/CWDefocus.gizmo new file mode 100644 index 0000000..a03f59d --- /dev/null +++ b/gizmos/Filter/CWDefocus.gizmo @@ -0,0 +1,221 @@ +#! C:/Program Files/Nuke8.0v1/nuke-8.0.v1.dll -nx +version 8.0 v1 +Gizmo { + inputs 3 + addUserKnob {20 UserDefocus l CWDefocus} + addUserKnob {41 useGPUIfAvailable l "Use GPU if available" T Convolve.useGPUIfAvailable} + addUserKnob {26 ""} + addUserKnob {14 size l filter_size R 0 100} + size 76.5 + addUserKnob {41 value l light_amount T Multiply4.value} + addUserKnob {41 saturation l light_saturation T Saturation4.saturation} + addUserKnob {26 ""} + addUserKnob {6 user_filter l "use filter image" +STARTLINE} + addUserKnob {14 userfiltersize l "user filter size" R 0 100} + userfiltersize 50 + addUserKnob {26 ""} + addUserKnob {6 show_highlight l highlight +STARTLINE} + addUserKnob {26 notice l "" +STARTLINE T "Enable highlight,The use of highlight can be adjusted to highlight areas."} + addUserKnob {26 ""} + addUserKnob {41 range T Keyer4.range} +} + Input { + inputs 0 + name mask + xpos 143 + ypos -499 + number 2 + } +set Na94841a0 [stack 0] + Input { + inputs 0 + name src + xpos -323 + ypos -760 + } + Dot { + name Dot25 + xpos -289 + ypos -653 + } +set Na9484bf0 [stack 0] + Dot { + name Dot26 + xpos -85 + ypos -653 + } + Keyer { + operation "luminance key" + range {0.01642003989 1 1 1} + name Keyer4 + xpos -119 + ypos -601 + } + ChannelMerge { + inputs 2 + operation multiply + name ChannelMerge1 + xpos -119 + ypos -511 + } + Dot { + name Dot27 + xpos -85 + ypos -431 + } +set Na9483ac0 [stack 0] + Shuffle { + red alpha + green alpha + blue alpha + name Highlights + xpos -119 + ypos -271 + } + Dot { + name Dot1 + xpos -85 + ypos -143 + } +set Nbe68d580 [stack 0] +push $Na94841a0 + Dot { + name Dot2 + xpos 177 + ypos -361 + } + Input { + inputs 0 + name filter + xpos -990 + ypos -526 + number 1 + } + Shuffle { + green red + blue red + alpha black + name Shuffle1 + xpos -990 + ypos -384 + } + Reformat { + type "to box" + box_width {{parent.userfiltersize}} + name Reformat1 + xpos -990 + ypos -270 + } + Constant { + inputs 0 + channels rgb + format "255 255 0 0 255 255 1 256x256" + name Constant3 + label "512x512 Constant" + xpos -780 + ypos -537 + postage_stamp false + } + Flare { + position {{(width+1)/2} {(height+1)/2}} + offset 3.55 + radius {{(radius.2*0.96)*parent.innersize x60 0 x70 0 x71 108} 490 500} + size_mult {{width/radius.2/2}} + inner_color {{parent.innerBrightness}} + outer_falloff 2 + inner_falloff {{parent.innerfalloff*10}} + vis_out 1 + corners {{parent.blades}} + flattening {{clamp(1-parent.rounded)}} + sharpness {{parent.sharpness_1}} + corners_angle {{parent.rotate}} + asym_repeat 0 + name Flare3 + xpos -780 + ypos -457 + } + Shuffle { + alpha black + name Shuffle5 + xpos -780 + ypos -392 + } + Reformat { + type "to box" + box_width {{parent.size}} + name Reformat4 + xpos -780 + ypos -326 + } + Switch { + inputs 2 + which {{parent.user_filter}} + name Switch2 + xpos -780 + ypos -270 + } +push $Na9483ac0 +push $Na9484bf0 + Dot { + name Dot28 + xpos -417 + ypos -653 + } + Multiply { + channels rgb + value 0.74 + name Multiply4 + xpos -451 + ypos -592 + } + Saturation { + saturation 2.4 + mode Average + name Saturation4 + xpos -451 + ypos -505 + } + Dot { + name Dot29 + xpos -417 + ypos -431 + } +push $Na9484bf0 + Merge2 { + inputs 2+1 + operation screen + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} + output {rgba.red rgba.green rgba.blue -rgba.alpha} + name Merge3 + xpos -323 + ypos -434 + } + Convolve2 { + inputs 2+1 + channels rgba + filter_channel rgba.red + name Convolve + xpos -323 + ypos -270 + } + Switch { + inputs 2 + which {{parent.show_highlight}} + name Switch1 + xpos -323 + ypos -146 + } + Output { + name Output1 + xpos -323 + ypos 7 + } +push $Nbe68d580 + Viewer { + input_process false + name Viewer1 + xpos -190 + ypos 1 + } +end_group diff --git a/gizmos/Filter/DilateErodeFine_CB.gizmo b/gizmos/Filter/DilateErodeFine_CB.gizmo new file mode 100644 index 0000000..96319f0 --- /dev/null +++ b/gizmos/Filter/DilateErodeFine_CB.gizmo @@ -0,0 +1,236 @@ +#! C:/Program Files/Nuke8.0v5/nuke-8.0.v5.dll -nx +version 8.0 v5 +Gizmo { + inputs 2 + help "select between the 3 erode/dilate filters. This gizmo allows you to get finner adjustments." + tile_color 0x75002bff + note_font Verdana + note_font_color 0xffffffff + mapsize {0.15 0.15} + addUserKnob {20 Buehler l Dilate/ErodeFine_CB} + addUserKnob {41 channels T Dilate1.channels} + addUserKnob {26 ""} + addUserKnob {6 round l "round box filter" t "Gives the box filter a more round shape" +STARTLINE} + addUserKnob {14 DEsize l size R 0 100} + DEsize 0.5 + addUserKnob {7 AR l "aspect ratio" t "Relationship between x and y size"} + AR 1 + addUserKnob {26 ""} + addUserKnob {41 maskChannel l "mask channel" T Keymix.maskChannel} + addUserKnob {41 invertMask l invert -STARTLINE T Keymix.invertMask} + addUserKnob {41 mix T Keymix.mix} +} + Input { + inputs 0 + name mask + xpos -223 + ypos 385 + number 1 + } + Shuffle { + alpha white + name Shuffle1 + xpos -113 + ypos 385 + disable {{"max(\[exists parent.input1],!clamp(Keymix.maskChannel))" i}} + } + Input { + inputs 0 + name Input + xpos -7 + ypos -330 + } +set N2f7f65d0 [stack 0] +push $N2f7f65d0 + Dilate { + channels {{{parent.Dilate1.channels}}} + size {{"((abs(Dilate1.Amount.x)+0.5)/3 - int(abs(Dilate1.Amount.x)/3)) >= 0.66666666 ? (ceil((abs(Dilate1.xHalf)+0.5)/3))*Dilate1.pn.x : (floor((abs(Dilate1.xHalf)+0.5)/3))*Dilate1.pn.x"} {"((abs(Dilate1.Amount.y)+0.5)/3 - int(abs(Dilate1.Amount.y)/3)) >= 0.66666666 ? (ceil((abs(Dilate1.yHalf)+0.5)/3))*Dilate1.pn.y : (floor((abs(Dilate1.yHalf)+0.5)/3))*Dilate1.pn.y"}} + name Dilate2 + xpos 207 + ypos -213 + disable {{!round}} + } + TransformMasked { + channels {{{parent.Dilate1.channels}}} + rotate 22.5 + black_outside false + name Transform1 + xpos 207 + ypos -167 + disable {{!round}} + } + Dilate { + channels {{{parent.Dilate1.channels}}} + size {{"parent.round > 0 ? (floor((abs(Dilate1.xHalf)+0.5)/3))*Dilate1.pn.x : (floor((abs(Dilate1.xHalf)+0.5)))*Dilate1.pn.x"} {"parent.round > 0 ? (floor((abs(Dilate1.yHalf)+0.5)/3))*Dilate1.pn.y : (floor((abs(Dilate1.yHalf)+0.5)))*Dilate1.pn.y"}} + name Dilate3 + xpos 207 + ypos -121 + } + TransformMasked { + channels {{{parent.Dilate1.channels}}} + rotate 22.5 + black_outside false + name Transform2 + xpos 207 + ypos -75 + disable {{!round}} + } + Dilate { + channels rgba + size {{"parent.round > 0 ? ((abs(Dilate1.Amount.x)+0.5)/3 - int(abs(Dilate1.Amount.x)/3)) >= 0.33333333 ? (ceil((abs(Dilate1.xHalf)+0.5)/3))*Dilate1.pn.x : (floor((abs(Dilate1.xHalf)+0.5)/3))*Dilate1.pn.x : Dilate1.xHalf" i} {"parent.round > 0 ? ((abs(Dilate1.Amount.y)+0.5)/3 - int(abs(Dilate1.Amount.y)/3)) >= 0.33333333 ? (ceil((abs(Dilate1.yHalf)+0.5)/3))*Dilate1.pn.y : (floor((abs(Dilate1.yHalf)+0.5)/3))*Dilate1.pn.y : Dilate1.yHalf" i}} + name Dilate1 + xpos 207 + ypos -29 + disable {{!round i}} + addUserKnob {20 User l INVISIBLE +INVISIBLE} + addUserKnob {12 Amount l INVISIBLE +INVISIBLE} + Amount {{DEsize*AR i} {DEsize i}} + addUserKnob {12 pn l INVISIBLE +INVISIBLE} + pn {{"Amount.x >= 0 ? 1 : -1" i} {"Amount.y >= 0 ? 1 : -1" i}} + addUserKnob {7 xInt l INVISIBLE +INVISIBLE R -10 10} + xInt {{(int(abs(Amount.x)))*Dilate1.pn.x i}} + addUserKnob {7 yInt l INVISIBLE +INVISIBLE R -10 10} + yInt {{(int(abs(Amount.y)))*Dilate1.pn.y i}} + addUserKnob {12 traw l INVISIBLE +INVISIBLE} + traw {{"(abs(Dilate1.Amount.x) > 0.5001 ? abs(Dilate1.Amount.x) + 0.5 : (abs(Dilate1.Amount.x)*Dilate1.double.x)) * Dilate1.pn.x" i} {"(abs(Dilate1.Amount.y) > 0.5001 ? abs(Dilate1.Amount.y) + 0.5 : (abs(Dilate1.Amount.y)*Dilate1.double.y)) * Dilate1.pn.y" i}} + addUserKnob {12 tf l INVISIBLE +INVISIBLE} + tf {{"(parent.round > 0 ? (abs(Dilate1.size.w)+abs(Dilate2.size.w)+abs(Dilate3.size.w)) : abs(Dilate3.size.w)) > abs(traw.x) ? 0 : (abs(traw.x) - (parent.round > 0 ? (abs(Dilate1.size.w)+abs(Dilate2.size.w)+abs(Dilate3.size.w)) : abs(Dilate3.size.w))) * Dilate1.pn.x" i} {"(parent.round > 0 ? (abs(Dilate1.size.h)+abs(Dilate2.size.h)+abs(Dilate3.size.h)) : abs(Dilate3.size.h)) > abs(traw.y) ? 0 : (abs(traw.y) - (parent.round > 0 ? (abs(Dilate1.size.h)+abs(Dilate2.size.h)+abs(Dilate3.size.h)) : abs(Dilate3.size.h))) * Dilate1.pn.y" i}} + addUserKnob {7 xHalf l INVISIBLE +INVISIBLE R -10 10} + xHalf {{"(int(Amount.x*2))/2 == xInt && Amount.x > 0.5 ? (int(Amount.x*2))/2 - 0.5 : (int(Amount.x*2))/2 == xInt && Amount.x < -0.5 ? (int(Amount.x*2))/2 + 0.5 : (int(Amount.x*2))/2" i}} + addUserKnob {7 yHalf l INVISIBLE +INVISIBLE R -10 10} + yHalf {{"(int(Amount.y*2))/2 == yInt && Amount.y > 0.5 ? (int(Amount.y*2))/2 - 0.5 : (int(Amount.y*2))/2 == yInt && Amount.y < -0.5 ? (int(Amount.y*2))/2 + 0.5 : (int(Amount.y*2))/2" i}} + addUserKnob {12 double l INVISIBLE +INVISIBLE} + double {{"(Amount.x <= 0.5 && Amount.x >= -0.5 ? 2 : 1)" i} {"(Amount.y <= 0.5 && Amount.y >= -0.5 ? 2 : 1)" i}} + addUserKnob {12 Mer l INVISIBLE +INVISIBLE} + Mer {{"Dilate1.Amount.x>0 ?17:18" i} {"Dilate1.Amount.y>0 ?17:18" i}} + } + TransformMasked { + channels {{{parent.Dilate1.channels}}} + rotate -45 + black_outside false + name Transform3 + xpos 207 + ypos 17 + disable {{!round}} + } +set N2f7f7a70 [stack 0] + TransformMasked { + channels {{{parent.Dilate1.channels}}} + translate {0 {Dilate1.tf.y}} + black_outside false + name TransyPos + xpos 317 + ypos 263 + } +push $N2f7f7a70 + TransformMasked { + channels {{{parent.Dilate1.channels}}} + translate {0 {-(Dilate1.tf.y)}} + black_outside false + name TransyNeg + xpos 317 + ypos 192 + } +push $N2f7f7a70 + TransformMasked { + channels {{{parent.Dilate1.channels}}} + translate {{Dilate1.tf.x} 0} + black_outside false + name TransxPos + xpos 318 + ypos 126 + } +push $N2f7f7a70 + TransformMasked { + channels {{{parent.Dilate1.channels}}} + translate {{-(Dilate1.tf.x)} 0} + black_outside false + name TransxNeg + xpos 321 + ypos 60 + } +push $N2f7f7a70 + Merge2 { + inputs 2 + operation {{Dilate1.Mer.x}} + bbox B + Achannels {{{Dilate1.channels}}} + Bchannels {{{Dilate1.channels}}} + output {{{Dilate1.channels}}} + also_merge all + name Merge1 + xpos 207 + ypos 86 + disable {{"Dilate1.Amount.x==Dilate1.xHalf ? 1 : 0"}} + } + Merge2 { + inputs 2 + operation {{Dilate1.Mer.x}} + bbox B + Achannels {{{Dilate1.channels}}} + Bchannels {{{Dilate1.channels}}} + output {{{Dilate1.channels}}} + also_merge all + name Merge2 + xpos 207 + ypos 146 + disable {{"Dilate1.Amount.x==Dilate1.xHalf ? 1 : 0"}} + } + Merge2 { + inputs 2 + operation {{Dilate1.Mer.y i}} + bbox B + Achannels {{{Dilate1.channels}}} + Bchannels {{{Dilate1.channels}}} + output {{{Dilate1.channels}}} + also_merge all + name Merge3 + xpos 207 + ypos 221 + disable {{"Dilate1.Amount.x==Dilate1.xHalf ? 1 : 0" i}} + } + Merge2 { + inputs 2 + operation {{Dilate1.Mer.y}} + bbox B + Achannels {{{Dilate1.channels}}} + Bchannels {{{Dilate1.channels}}} + output {{{Dilate1.channels}}} + also_merge all + name Merge4 + xpos 207 + ypos 292 + disable {{"Dilate1.Amount.x==Dilate1.xHalf ? 1 : 0"}} + } + CopyBBox { + inputs 2 + name CopyBBox1 + xpos 140 + ypos 344 + } +set N2fa20470 [stack 0] +push $N2f7f65d0 + Keymix { + inputs 3 + channels {{{parent.Dilate1.channels}}} + bbox B + name Keymix + xpos -7 + ypos 385 + disable {{"(Keymix.mix) != 1 ? 0 : max(!\[exists parent.input1],!clamp(Keymix.maskChannel))" i}} + } +push $N2fa20470 + Switch { + inputs 2 + which 1 + name Switch1 + xpos -7 + ypos 430 + disable {{"(Keymix.mix) != 1 ? 0 : max(!\[exists parent.input1],!clamp(Keymix.maskChannel))" i}} + } + Output { + name Output + xpos -7 + ypos 504 + } +end_group diff --git a/gizmos/Filter/EdgeTreat.gizmo b/gizmos/Filter/EdgeTreat.gizmo new file mode 100644 index 0000000..ff2b570 --- /dev/null +++ b/gizmos/Filter/EdgeTreat.gizmo @@ -0,0 +1,194 @@ +#! C:/Program Files/Nuke8.0v4/nuke-8.0.v4.dll -nx +version 8.0 v4 +Gizmo { + inputs 2 + addUserKnob {20 treat l EdgeTreat} + addUserKnob {14 erode l "Erode Intensity" t "used to control the intensity of erode.\n控制边缘侵蚀的强度." R 0 100} + erode 1 + addUserKnob {14 uvscale l "UV Scale" t "used to control the range of erode.\n控制边缘侵蚀的深度。" R 0 100} + uvscale 1 + addUserKnob {14 uvslope l "UV Slope" t "used to restrict Erode Intensity.\n限制Erode Intensity参数的强度." R 0 100} + addUserKnob {14 range l Range t "control the range of effect.\n控制影响范围." R 0 100} + addUserKnob {14 soft l Soft t "soft the edge of effect.\n软化效果边缘." R 0 100} + addUserKnob {26 "" +STARTLINE} + addUserKnob {26 text l Attention: T "please make sure there is a alpha channel\nin source input stream.\n\n请确保在source输入箭头上游有alpha通道."} +} + Input { + inputs 0 + name Mask + xpos 225 + ypos 627 + } + Input { + inputs 0 + name Source + xpos -179 + ypos 139 + number 1 + } + Dot { + name Dot3 + xpos -145 + ypos 252 + } +set N7c65d230 [stack 0] + Blur { + channels rgba + size {{parent.uvslope}} + name Blur1 + xpos -290 + ypos 249 + } + Dot { + name Dot6 + xpos -256 + ypos 308 + } +set N7c65d910 [stack 0] + Dot { + name Dot5 + xpos -483 + ypos 308 + } +set N7c65dc80 [stack 0] + Dot { + name Dot4 + xpos -592 + ypos 308 + } + Transform { + translate {{uvscale.w} 0} + center {320 240} + name Transform1 + label X1 + xpos -626 + ypos 386 + } +push $N7c65dc80 + Transform { + translate {{-uvscale.w} 0} + center {320 240} + name Transform2 + label X-1 + selected true + xpos -516 + ypos 354 + } + Merge2 { + inputs 2 + operation from + name Merge1 + xpos -516 + ypos 392 + } + Dot { + name Dot9 + xpos -482 + ypos 440 + } +push $N7c65d910 + Dot { + name Dot7 + xpos -256 + ypos 326 + } +set N7c6d7900 [stack 0] + Dot { + name Dot8 + xpos -365 + ypos 326 + } + Transform { + translate {0 {uvscale.h}} + center {320 240} + name Transform3 + label Y1 + xpos -399 + ypos 404 + } +push $N7c6d7900 + Transform { + translate {0 {-uvscale.h}} + center {320 240} + name Transform4 + label "Y-1\n" + xpos -289 + ypos 372 + } + Merge2 { + inputs 2 + operation from + name Merge2 + xpos -289 + ypos 410 + } + ShuffleCopy { + inputs 2 + red red + alpha blue2 + name ShuffleCopy1 + xpos -289 + ypos 436 + } +push $N7c65d230 + Copy { + inputs 2 + from0 rgba.red + to0 forward.u + from1 rgba.green + to1 forward.v + name Copy2 + xpos -179 + ypos 423 + } + IDistort { + uv forward + uv_scale {{parent.erode}} + blur_scale 0 + name IDistort1 + xpos -179 + ypos 475 + } + FilterErode { + channels alpha + size {{parent.range}} + name FilterErode1 + xpos -179 + ypos 513 + } + Invert { + channels alpha + name Invert1 + xpos -179 + ypos 551 + } + Blur { + size {{parent.soft}} + name Blur2 + xpos -179 + ypos 589 + } + Premult { + name Premult1 + xpos -179 + ypos 627 + } +push $N7c65d230 + Dot { + name Dot10 + xpos 97 + ypos 252 + } + Merge2 { + inputs 2+1 + output {rgba.red rgba.green rgba.blue -rgba.alpha} + name Merge3 + xpos 63 + ypos 627 + } + Output { + name Output1 + xpos 63 + ypos 727 + } +end_group diff --git a/gizmos/Filter/RealHeatDist.gizmo b/gizmos/Filter/RealHeatDist.gizmo new file mode 100644 index 0000000..6646b87 --- /dev/null +++ b/gizmos/Filter/RealHeatDist.gizmo @@ -0,0 +1,818 @@ +#! /Applications/Nuke9.0v1/Nuke9.0v1.app/Contents/MacOS//libnuke-9.0.1.dylib -nx +version 9.0 v1 +Gizmo { + inputs 3 + knobChanged "\nif nuke.thisNode()\['disttype'].getValue() == 3:\n nuke.thisNode()\['Vel'].setEnabled(False)\n nuke.thisNode()\['DistortionScale'].setEnabled(False)\n nuke.thisNode()\['HeatBlurScale'].setEnabled(False)\n nuke.thisNode()\['windx'].setEnabled(False)\n nuke.thisNode()\['windy'].setEnabled(False)\n nuke.thisNode()\['tracktranslate'].setEnabled(False)\nelse:\n nuke.thisNode()\['Vel'].setEnabled(True)\n nuke.thisNode()\['DistortionScale'].setEnabled(True)\n nuke.thisNode()\['HeatBlurScale'].setEnabled(True)\n nuke.thisNode()\['windx'].setEnabled(True)\n nuke.thisNode()\['windy'].setEnabled(True)\n nuke.thisNode()\['tracktranslate'].setEnabled(True)\n" + tile_color 0x141414ff + note_font Verdana + note_font_color 0xff5242ff + addUserKnob {20 RealHeatDistortion t "Created by Damian Binder."} + addUserKnob {26 Version l "" t "Created by Damian Binder." +STARTLINE T "
RealHeatDistortion
v2.1"} + addUserKnob {26 bydamianbinder l "" +STARTLINE T " By Damian Binder"} + addUserKnob {26 Track l " Tracking Data"} + addUserKnob {12 tracktranslate l Translate} + tracktranslate {0 0} + addUserKnob {26 distortionheat l "Dist & Heat"} + addUserKnob {68 disttype l "Distortion Types" M {Classic "Agressive " "Jet Engine " "Custom Noise " "" "" "" "" "" "" ""}} + disttype "Agressive " + addUserKnob {7 Vel l "Distortion Velocity"} + Vel {0.15} + addUserKnob {6 affectalpha l "Affect Alpha" +STARTLINE} + addUserKnob {20 DistortionGroup l Distortion n 1} + addUserKnob {7 distortion_amount l "Distortion Amount" R 0 100} + distortion_amount {25} + addUserKnob {7 DistortionScale l "Distortion Scale" R 0 200} + DistortionScale {15} + addUserKnob {20 endGroup n -1} + addUserKnob {20 HeatBlurGroup l "Heat Blur" n 1} + addUserKnob {7 HeatBlurAmount l "Heat Blur Amount" R 0 25} + HeatBlurAmount {15} + addUserKnob {7 HeatBlurScale l "Heat Blur Scale" R 0 100} + HeatBlurScale {30} + addUserKnob {7 overallblur l "Overall Blur" R 0 20} + overallblur {0} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 secondaryeffects l "Secondary Effects" n 1} + addUserKnob {7 gain l Gain R 0 2} + gain {1} + addUserKnob {7 chromatic l "Chromatic Ab" R 0 10} + chromatic {0} + addUserKnob {20 freezegroup l Freeze n 1} + freezegroup 0 + addUserKnob {6 velocityoff l Freeze +STARTLINE} + addUserKnob {3 freezeframe l "Freeze Frame"} + addUserKnob {20 endGroup_3 l endGroup n -1} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 windtitle l "Wind"} + addUserKnob {7 windx l "Wind Direction X" R -10 10} + windx {0} + addUserKnob {7 windy l "Wind Direction Y" R -10 10} + windy {10} + addUserKnob {52 pythonscript l "Python Script" T "nuke.thisNode()\['knobChanged'].setValue('''\nif nuke.thisNode()\['disttype'].getValue() == 3:\n nuke.thisNode()\['Vel'].setEnabled(False)\n nuke.thisNode()\['DistortionScale'].setEnabled(False)\n nuke.thisNode()\['HeatBlurScale'].setEnabled(False)\n nuke.thisNode()\['windx'].setEnabled(False)\n nuke.thisNode()\['windy'].setEnabled(False)\n nuke.thisNode()\['tracktranslate'].setEnabled(False)\nelse:\n nuke.thisNode()\['Vel'].setEnabled(True)\n nuke.thisNode()\['DistortionScale'].setEnabled(True)\n nuke.thisNode()\['HeatBlurScale'].setEnabled(True)\n nuke.thisNode()\['windx'].setEnabled(True)\n nuke.thisNode()\['windy'].setEnabled(True)\n nuke.thisNode()\['tracktranslate'].setEnabled(True)\n''')" +STARTLINE} +} + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0xc68484ff + note_font_size 42 + xpos 204 + ypos 326 + bdwidth 505 + bdheight 249 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0xd29e8eff + note_font_size 42 + xpos 761 + ypos 289 + bdwidth 494 + bdheight 461 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x9ac69aff + note_font_size 42 + xpos 1319 + ypos 295 + bdwidth 457 + bdheight 345 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0xcc9ec9ff + note_font_size 42 + xpos 1838 + ypos 365 + bdwidth 222 + bdheight 220 + } + Viewer { + inputs 0 + frame 33 + frame_range 1-100 + colour_sample_bbox {0.03229166567 0.21875 0.03333333507 0.2197916657} + samplepoints {{0.03229166567 0.21875} + } + input_process false + name Viewer1 + xpos -194 + ypos 2103 + } + Input { + inputs 0 + name Source + xpos -195 + ypos -45 + } + Dot { + name Dot29 + xpos -160 + ypos 877 + } +set N1bb2dbc0 [stack 0] + Dot { + name Dot30 + xpos -404 + ypos 877 + } + Dot { + name Dot28 + xpos -403 + ypos 1859 + } + Input { + inputs 0 + name Mask + xpos 346 + ypos -40 + number 1 + } + Dot { + name Dot4 + xpos 380 + ypos 139 + } +set N8fb2ffe0 [stack 0] + Dot { + name Dot24 + xpos 127 + ypos 139 + } + Dot { + name Dot25 + xpos 128 + ypos 1458 + } +push $N8fb2ffe0 + Dot { + name Dot3 + xpos 605 + ypos 139 + } +set N8fb36fd0 [stack 0] + Dot { + name Dot5 + xpos 796 + ypos 139 + } +set N8fb39520 [stack 0] + Dot { + name Dot6 + xpos 908 + ypos 139 + } +set N8fb3ba70 [stack 0] + Dot { + name Dot12 + xpos 1087 + ypos 139 + } +set N8fb3dfc0 [stack 0] + Dot { + name Dot14 + xpos 1199 + ypos 139 + } +set N8fb40510 [stack 0] + Dot { + name Dot8 + xpos 1329 + ypos 139 + } +set N8fb42a70 [stack 0] + Dot { + name Dot10 + xpos 1441 + ypos 139 + } +set N8fb44fc0 [stack 0] + Dot { + name Dot15 + xpos 1567 + ypos 139 + } +set N8fb47510 [stack 0] + Dot { + name Dot17 + xpos 1679 + ypos 139 + } +set N8fb49a60 [stack 0] + Dot { + name Dot18 + xpos 1847 + ypos 139 + } + Dot { + name Dot23 + xpos 1848 + ypos 449 + } + Input { + inputs 0 + name Custom + xpos 1969 + ypos -67 + number 2 + } + Merge2 { + inputs 2 + operation mask + name Merge1 + xpos 1970 + ypos 445 + disable {{"! \[exists parent.input1]"}} + } +set N8fb52fa0 [stack 0] + FrameHold { + first_frame {{parent.freezeframe}} + name FrameHold5 + xpos 1869 + ypos 503 + } +push $N8fb52fa0 + Switch { + inputs 2 + which {{parent.velocityoff}} + name Switch9 + xpos 1970 + ypos 555 + } + Dot { + name Dot11 + xpos 2004 + ypos 927 + } +set N8fb60f70 [stack 0] + Grade { + channels alpha + blackpoint 0.095 + whitepoint 0.88 + white 4 + black_clamp false + name Grade2 + xpos 1970 + ypos 1205 + } + Dot { + name Dot36 + xpos 677 + ypos 1212 + } +push $N8fb47510 + Dot { + name Dot16 + xpos 1567 + ypos 440 + } +push $N8fb49a60 +push 0 + Noise { + inputs 1+1 + cliptype none + type turbulence + size {{parent.HeatBlurScale-2}} + zoffset {{parent.Vel*frame}} + lacunarity 1.16 + gain 0.8 + gamma 0.355 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise9 + xpos 1645 + ypos 375 + } + Noise { + inputs 1+1 + cliptype none + size {{parent.HeatBlurScale+36}} + zoffset {{parent.Vel*frame}} + lacunarity 1 + gain 0.336 + gamma 0.285 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise10 + xpos 1645 + ypos 436 + } +set N8fb72c00 [stack 0] + FrameHold { + first_frame {{parent.freezeframe}} + name FrameHold9 + xpos 1562 + ypos 512 + } +push $N8fb72c00 + Switch { + inputs 2 + which {{parent.velocityoff}} + name Switch8 + xpos 1646 + ypos 582 + } + Dot { + name Dot21 + xpos 1680 + ypos 1191 + } + Dot { + name Dot35 + xpos 679 + ypos 1191 + } +push $N8fb3dfc0 + Dot { + name Dot13 + xpos 1087 + ypos 436 + } +push $N8fb40510 +push 0 + Noise { + inputs 1+1 + cliptype none + size {{parent.HeatBlurScale-2}} + zoffset {{parent.Vel*frame}} + lacunarity 1.34 + gain 0.695 + gamma 0.42 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise7 + xpos 1165 + ypos 370 + } + Noise { + inputs 1+1 + cliptype none + type turbulence + size {{parent.HeatBlurScale+90}} + zoffset {{parent.Vel*frame}} + lacunarity 1 + gain 0.256 + gamma 0.89 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise8 + xpos 1165 + ypos 432 + } + IDistort { + uv alpha + uv_scale 32.5 + blur_scale 0 + name IDistort3 + xpos 1165 + ypos 512 + } +set N8fb95a70 [stack 0] + FrameHold { + first_frame {{parent.freezeframe}} + name FrameHold3 + xpos 1062 + ypos 555 + } +push $N8fb95a70 + Switch { + inputs 2 + which {{parent.velocityoff}} + name Switch6 + xpos 1165 + ypos 605 + } + Grade { + channels alpha + blackpoint 0.095 + whitepoint 0.88 + white 4 + black_clamp false + name Grade1 + xpos 1165 + ypos 708 + } + Dot { + name Dot22 + xpos 1199 + ypos 1169 + } + Dot { + name Dot34 + xpos 677 + ypos 1169 + } +push $N8fb36fd0 +push 0 + Noise { + inputs 1+1 + size {{parent.HeatBlurScale+20}} + zoffset {{parent.Vel*frame}} + lacunarity 1 + gain 0.694 + gamma 0.227 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise2 + xpos 571 + ypos 402 + } +set N8fbaaa30 [stack 0] + FrameHold { + first_frame {{parent.freezeframe}} + name FrameHold8 + xpos 474 + ypos 435 + } +push $N8fbaaa30 + Switch { + inputs 2 + which {{parent.velocityoff}} + name Switch2 + xpos 571 + ypos 478 + } + Switch { + inputs 4 + which {{parent.disttype}} + name Switch4 + xpos 572 + ypos 1188 + } + Dot { + name Dot1 + xpos 606 + ypos 1272 + } +set N8fbbdd20 [stack 0] + Dot { + name Dot40 + xpos 606 + ypos 1298 + } +set N92dae250 [stack 0] + Dot { + name Dot38 + xpos -142 + ypos 1298 + } +push $N8fb60f70 + Dot { + name Dot33 + xpos 450 + ypos 927 + } +push $N8fb42a70 + Dot { + name Dot9 + xpos 1329 + ypos 440 + } +push $N8fb44fc0 +push 0 + Noise { + inputs 1+1 + cliptype none + type turbulence + size {{parent.DistortionScale+13}} + zoffset {{parent.Vel*frame}} + lacunarity 1.16 + gain 0.8 + gamma 0.355 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise5 + xpos 1407 + ypos 375 + } + Noise { + inputs 1+1 + cliptype none + size {{parent.DistortionScale+51}} + zoffset {{parent.Vel*frame}} + lacunarity 1 + gain 0.336 + gamma 0.285 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise6 + xpos 1407 + ypos 436 + } +set N8fbc9f00 [stack 0] + FrameHold { + first_frame {{parent.freezeframe}} + name FrameHold4 + xpos 1332 + ypos 508 + } +push $N8fbc9f00 + Switch { + inputs 2 + which {{parent.velocityoff}} + name Switch7 + xpos 1407 + ypos 588 + } + Dot { + name Dot20 + xpos 1441 + ypos 905 + } + Dot { + name Dot32 + xpos 452 + ypos 905 + } +push $N8fb39520 + Dot { + name Dot7 + xpos 796 + ypos 436 + } +push $N8fb3ba70 +push 0 + Noise { + inputs 1+1 + cliptype none + size {{parent.DistortionScale+13}} + zoffset {{parent.Vel*frame}} + lacunarity 1.34 + gain 0.695 + gamma 0.42 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise4 + xpos 874 + ypos 367 + } + Noise { + inputs 1+1 + cliptype none + type turbulence + size {{parent.DistortionScale+105}} + zoffset {{parent.Vel*frame}} + lacunarity 1 + gain 0.256 + gamma 0.89 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise3 + xpos 874 + ypos 432 + } + IDistort { + uv alpha + uv_scale 32.5 + blur_scale 0 + name IDistort2 + xpos 874 + ypos 512 + } +set N8fbecc90 [stack 0] + FrameHold { + first_frame {{parent.freezeframe}} + name FrameHold2 + xpos 771 + ypos 555 + } +push $N8fbecc90 + Switch { + inputs 2 + which {{parent.velocityoff}} + name Switch5 + xpos 874 + ypos 605 + } + Dot { + name Dot19 + xpos 908 + ypos 883 + } + Dot { + name Dot31 + xpos 449 + ypos 883 + } +push $N8fb2ffe0 +push 0 + Noise { + inputs 1+1 + size {{parent.DistortionScale+6}} + zoffset {{parent.Vel*frame}} + lacunarity 1.335 + gain 0.333 + gamma 0.34 + translate {{parent.windx*frame+tracktranslate} {parent.windy*frame+tracktranslate}} + center {960 540} + name Noise1 + xpos 346 + ypos 403 + } +set N8fbf9770 [stack 0] + FrameHold { + first_frame {{parent.freezeframe}} + name FrameHold1 + xpos 231 + ypos 434 + } +push $N8fbf9770 + Switch { + inputs 2 + which {{parent.velocityoff}} + name Switch1 + xpos 346 + ypos 477 + } + Switch { + inputs 4 + which {{parent.disttype}} + name Switch3 + xpos 347 + ypos 902 + } + Dot { + name Dot2 + xpos 381 + ypos 974 + } +set N92d12e10 [stack 0] + Dot { + name Dot27 + xpos 381 + ypos 1082 + } +push $N92d12e10 +push $N1bb2dbc0 +add_layer {idistort idistort.x idistort.y} + Copy { + inputs 2 + from0 rgba.alpha + to0 idistort.x + from1 rgba.alpha + to1 idistort.y + name Copy1 + xpos -194 + ypos 962 + } + Grade { + inputs 1+1 + white {{parent.gain}} + black_clamp false + name Grade3 + knobChanged "\nif nuke.thisNode()\['white'].getValue() == 1:\n nuke.thisNode()\['disable'].getValue() == 1\nelse:\n nuke.thisNode()\['disable'].getValue() == 0\n" + xpos -194 + ypos 1078 + } + Dot { + name Dot26 + xpos -160 + ypos 1155 + } +set N92d24f00 [stack 0] + Remove { + channels {rgba.red -rgba.green rgba.blue none} + name Remove4 + xpos -194 + ypos 1224 + } + Blur { + inputs 1+1 + size {{parent.HeatBlurAmount+(chromatic*1.3)}} + name Blur4 + xpos -194 + ypos 1316 + } +push 0 +push $N8fbbdd20 + Dot { + name Dot39 + xpos -268 + ypos 1272 + } +push $N92d24f00 + Remove { + channels {-rgba.red rgba.green rgba.blue none} + name Remove6 + xpos -328 + ypos 1227 + } + Blur { + inputs 1+1 + size {{parent.HeatBlurAmount+(chromatic*1.2)}} + name Blur3 + xpos -328 + ypos 1316 + } +push $N92dae250 + Dot { + name Dot37 + xpos 606 + ypos 1323 + } +push $N92d24f00 + Remove { + channels {rgba.red rgba.green -rgba.blue none} + name Remove5 + xpos -74 + ypos 1232 + } + Blur { + inputs 1+1 + size {{parent.HeatBlurAmount+(chromatic*1.4)}} + name Blur5 + xpos -74 + ypos 1316 + } + Merge2 { + inputs 3+1 + operation max + name Merge3 + xpos -194 + ypos 1382 + } + Blur { + inputs 1+1 + size {{parent.overallblur}} + name Blur2 + xpos -194 + ypos 1451 + } +set N92d49750 [stack 0] + Remove { + channels {rgba.red -rgba.green rgba.blue none} + name Remove3 + xpos -194 + ypos 1565 + } + IDistort { + uv idistort + uv_scale {{parent.distortion_amount+(chromatic*3) 0}} + blur_scale 3 + name IDistort7 + xpos -194 + ypos 1637 + } +push 0 +push $N92d49750 + Remove { + channels {-rgba.red rgba.green rgba.blue none} + name Remove1 + xpos -318 + ypos 1563 + } + IDistort { + uv idistort + uv_scale {{parent.distortion_amount+(chromatic*2) 0}} + blur_scale 3 + name IDistort9 + xpos -318 + ypos 1637 + } +push $N92d49750 + Remove { + channels {rgba.red rgba.green -rgba.blue none} + name Remove2 + xpos -77 + ypos 1563 + } + IDistort { + uv idistort + uv_scale {{parent.distortion_amount+(chromatic*4) 0}} + blur_scale 3 + name IDistort8 + xpos -77 + ypos 1637 + } + Merge2 { + inputs 3+1 + operation max + name Merge2 + xpos -194 + ypos 1753 + } + ShuffleCopy { + inputs 2 + in alpha + red red + out alpha + name ShuffleCopy1 + xpos -194 + ypos 1856 + disable {{parent.affectalpha}} + } + Remove { + channels idistort + name Remove7 + xpos -194 + ypos 1946 + } + Output { + name Output1 + xpos -194 + ypos 2028 + } +end_group diff --git a/gizmos/Filter/Turbulate.gizmo b/gizmos/Filter/Turbulate.gizmo new file mode 100644 index 0000000..3e5fd95 --- /dev/null +++ b/gizmos/Filter/Turbulate.gizmo @@ -0,0 +1,96 @@ +#! /Applications/Nuke5.0v2/Nuke5.0v2.app/Contents/MacOS/Nuke5.0 -nx +version 5.0200 +Gizmo { + help "displacement based on noise\nv1.0 - 090321 - fs\n" + addUserKnob {20 Settings} + addUserKnob {7 amount R 0 200} + amount 50 + addUserKnob {7 size R 0 200} + size 100 + addUserKnob {7 detail R 0 5} + detail 2 + addUserKnob {26 "" l ""} + addUserKnob {7 seed R 0 10} + seed 0 +} + Constant { + inputs 0 + channels rgb + name Constant1 + xpos -184 + ypos -224 + } + Reformat { + type "to box" + box_width {{Dot1.width}} + box_height {{Dot1.height}} + box_fixed true + name Reformat1 + xpos -184 + ypos -150 + } + Noise { + size {{parent.size i}} + zoffset {{parent.seed i}} + lacunarity {{parent.detail i}} + center {960 540} + name Noise3 + xpos -184 + ypos -105 + } + Grade { + white 2 + add -0.5 + black_clamp false + name Grade31 + xpos -184 + ypos -78 + } + Input { + inputs 0 + name Input1 + xpos -60 + ypos -213 + } + Dot { + name Dot1 + xpos -26 + ypos -143 + } +add_layer {displ displ.red displ.green} + Copy { + inputs 2 + from0 rgba.red + to0 displ.red + from1 rgba.green + to1 displ.green + name Copy6 + xpos -60 + ypos -39 + } + IDistort { + uv {displ.red -displ.green} + uv_scale {{parent.amount i}} + name IDistort1 + xpos -60 + } + IDistort { + uv {-displ.red displ.green} + uv_scale {{parent.amount i}} + name IDistort2 + xpos -60 + ypos 39 + } +set N1ed84630 [stack 0] + Output { + name Output1 + xpos -60 + ypos 125 + } +push $N1ed84630 + Viewer { + name Viewer1 + xpos -208 + ypos 91 + } +end_group diff --git a/gizmos/Filter/bm_Lightwrap.gizmo b/gizmos/Filter/bm_Lightwrap.gizmo new file mode 100644 index 0000000..48f42b0 --- /dev/null +++ b/gizmos/Filter/bm_Lightwrap.gizmo @@ -0,0 +1,794 @@ +#! C:/Program Files/Nuke7.0v6/Nuke7.0.exe -nx +version 7.0 v6 +Gizmo { + inputs 3 + help "Uses a series of blurs added together to create a more optically-correct glow.\n\n\nCreated by Ben McEwan\nwww.benmcewan.com" + knobChanged "n = nuke.thisNode()\nk = nuke.thisKnob()\n\nif k.name() in ('disableLuma', 'showPanel'):\n switch = n\['disableLuma'].value()\n if switch:\n n\['lumaThreshold'].setEnabled(False)\n else:\n n\['lumaThreshold'].setEnabled(True)" + tile_color 0x222222ff + addUserKnob {20 tab_Options l Options} + addUserKnob {26 ""} + addUserKnob {6 effectOnly l "Effect Only" t "Enabled: Renders the glow over black.\nDisabled: Renders glow over the input image, using the operation set in \"Comp Method\"." +STARTLINE} + addUserKnob {4 GLOWCONTROLLER_blurFilter l "Blur Filter" t "Set the type of filter used in all the blur layers." M {Box Triange Quadratic Gaussian ""}} + GLOWCONTROLLER_blurFilter Gaussian + addUserKnob {3 GLOWCONTROLLER_blurQuality l " Blur Quality " t "Does what it says on the tin." -STARTLINE} + GLOWCONTROLLER_blurQuality 15 + addUserKnob {4 GLOWCONTROLLER_layerBlend l " Layer Blend " t "This is the operation used to blend each of the blur layers together." M {Plus Screen}} + GLOWCONTROLLER_layerBlend Screen + addUserKnob {4 blendWithOriginal l " Blend Original" t "This is the operation used to blend the glow with the input image." -STARTLINE M {Plus Screen Over "" ""}} + addUserKnob {26 spacer_01 l "" +STARTLINE} + addUserKnob {20 grp01 l " G L O B A L C O N T R O L S" n 1} + addUserKnob {26 spacer_01_2 l "" +STARTLINE T " "} + addUserKnob {7 GLOWCONTROLLER_glowRadius l "Glow Radius" t "Set the size of the glow." R 0 150} + GLOWCONTROLLER_glowRadius 100 + addUserKnob {7 GLOWCONTROLLER_glowIntensity l "Glow Intensity" t "Set the brightness of the glow." R 0 5} + GLOWCONTROLLER_glowIntensity 1 + addUserKnob {41 globalBias l "Global Bias" t "Shifts the midpoint towards the centre or outside of the glow." T ColorCorrect1.gamma} + addUserKnob {7 aspectRatio l Aspect t "Sets the pixel aspect ratio of the glow." R 0 2} + aspectRatio 1 + addUserKnob {41 saturation l Saturation t "Adjust the saturation of the glow." T ColorCorrect1.saturation} + addUserKnob {26 ""} + addUserKnob {20 grp3 l " W R A P C O N T R O L S" n 1} + addUserKnob {26 spacer_04 l "" +STARTLINE T " "} + addUserKnob {6 disableLuma l "Disable luminance-based wrap" t "Turning this on will add lightwrap from the entire bg, as opposed to just the highlights." +STARTLINE} + addUserKnob {6 viewLuma l "View Luminance Matte" +STARTLINE} + addUserKnob {26 spacer_05 l "" +STARTLINE T " "} + addUserKnob {26 lumaThresholdText l "" +STARTLINE T "Luminance Threshold"} + addUserKnob {7 lumaThresholdLow l Low} + addUserKnob {7 lumaThresholdHigh l High -STARTLINE} + lumaThresholdHigh 1 + addUserKnob {26 spacer_06 l "" +STARTLINE T " "} + addUserKnob {14 blurAmt l "Background PreBlur" t "Blurs background image before glow treatment is applied" R 0 100} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {20 endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 grp2 l " C U S T O M B L U R L A Y E R S" n 1} + grp2 0 + addUserKnob {26 spacer_01_1 l "" +STARTLINE T " "} + addUserKnob {26 ""} + addUserKnob {4 GLOWCONTROLLER_glowPreset l Preset t "Choose between 3 presets to get you started, or select \"custom\" to create your own glow." -STARTLINE M {McEwan Caauwe Wieber "- Custom -" "" "" "" ""}} + addUserKnob {4 numOfLayers l "Blur Layers: " +DISABLED M {1 2 3 4 5 6 7 8 9}} + numOfLayers 9 + addUserKnob {26 spacer_02 l "" +STARTLINE} + addUserKnob {26 layer1 l "Layer 1"} + addUserKnob {7 blur01 l Blur +DISABLED R 0 10} + blur01 1 + addUserKnob {7 mix01 l Mix +DISABLED} + mix01 1 + addUserKnob {26 layer2 l "Layer 2"} + addUserKnob {7 blur02 l Blur +DISABLED R 0 20} + blur02 2 + addUserKnob {7 mix02 l Mix +DISABLED} + mix02 0.9 + addUserKnob {26 layer3 l "Layer 3"} + addUserKnob {7 blur03 l Blur +DISABLED R 0 50} + blur03 4 + addUserKnob {7 mix03 l Mix +DISABLED} + mix03 0.8 + addUserKnob {26 layer4 l "Layer 4"} + addUserKnob {7 blur04 l Blur +DISABLED R 0 150} + blur04 8 + addUserKnob {7 mix04 l Mix +DISABLED} + mix04 0.7 + addUserKnob {26 layer5 l "Layer 5"} + addUserKnob {7 blur05 l Blur +DISABLED R 0 200} + blur05 16 + addUserKnob {7 mix05 l Mix +DISABLED} + mix05 0.6 + addUserKnob {26 layer6 l "Layer 6"} + addUserKnob {7 blur06 l Blur +DISABLED R 0 350} + blur06 32 + addUserKnob {7 mix06 l Mix +DISABLED} + mix06 0.635 + addUserKnob {26 layer7 l "Layer 7"} + addUserKnob {7 blur07 l Blur +DISABLED R 0 500} + blur07 64 + addUserKnob {7 mix07 l Mix +DISABLED} + mix07 0.4 + addUserKnob {26 layer8 l "Layer 8"} + addUserKnob {7 blur08 l Blur +DISABLED R 0 1000} + blur08 128 + addUserKnob {7 mix08 l Mix +DISABLED} + mix08 0.3 + addUserKnob {26 layer9 l "Layer 9"} + addUserKnob {7 blur09 l Blur +DISABLED R 0 1000} + blur09 256 + addUserKnob {7 mix09 l Mix +DISABLED} + mix09 0.2 + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {7 globalMix l Mix} + globalMix 1 + addUserKnob {26 ""} + addUserKnob {20 tab_Flicker l Flicker} + addUserKnob {26 ""} + addUserKnob {6 enableFlicker l "Enable Flicker" +STARTLINE} + addUserKnob {26 ""} + addUserKnob {7 flickerSpeed l Speed} + flickerSpeed 0.7 + addUserKnob {7 flickerAmount l Amount} + flickerAmount 0.04 + addUserKnob {7 flickerCentre l Centre} + flickerCentre 0.5 + addUserKnob {26 ""} + addUserKnob {3 flickerSeed l Seed} + flickerSeed 7247 + addUserKnob {22 randomSeedButtom l " Random Seed " -STARTLINE T "import random\nnuke.thisNode().knob('flickerSeed').setValue( random.randint(1,99999) )"} + addUserKnob {26 ""} + addUserKnob {7 flickerOutput l Output} + flickerOutput {{"(1*(noise((frame)*flickerSpeed, (flickerSeed*5), 0)*2-1)*(flickerAmount))+(flickerCentre+.5)+(flickerAmount)"}} + addUserKnob {26 ""} +} + NoOp { + inputs 0 + name GLOWCONTROLLER + xpos 118 + ypos 717 + addUserKnob {20 User} + addUserKnob {26 ""} + addUserKnob {4 glowPreset l Preset M {McEwan Caauwe Wieber Custom}} + glowPreset {{parent.GLOWCONTROLLER_glowPreset}} + addUserKnob {26 ""} + addUserKnob {4 blurFilter l "Blur Filter" M {Box Triangle Quadratic Gaussian}} + blurFilter {{parent.GLOWCONTROLLER_blurFilter}} + addUserKnob {4 layerBlend l " Layer Blend " -STARTLINE M {Plus Screen "" "" "" ""}} + layerBlend {{parent.GLOWCONTROLLER_layerBlend x1 0}} + addUserKnob {3 blurQuality l " Blur Quality " -STARTLINE} + blurQuality {{parent.GLOWCONTROLLER_blurQuality}} + addUserKnob {26 spacer_01 l "" +STARTLINE T " "} + addUserKnob {7 glowRadius l "Glow Radius" R 0 150} + glowRadius {{parent.GLOWCONTROLLER_glowRadius}} + addUserKnob {7 glowIntensity l "Glow Intensity" R 0 5} + glowIntensity {{parent.GLOWCONTROLLER_glowIntensity}} + addUserKnob {26 ""} + addUserKnob {26 ""} + } + Input { + inputs 0 + name bg + xpos -434 + ypos 229 + number 2 + } +set N239253d0 [stack 0] + Blur { + channels rgba + size {{parent.blurAmt}} + name Blur10 + xpos -434 + ypos 255 + } +set N23925850 [stack 0] + Keyer { + operation "luminance key" + range {{parent.lumaThresholdLow} {parent.lumaThresholdHigh} 1 1} + name Keyer1 + xpos -434 + ypos 371 + } +set N23925bc0 [stack 0] +push $N23925bc0 + Dot { + name Dot17 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -400 + ypos 474 + } +set N23925f30 [stack 0] + Input { + inputs 0 + name matte + xpos -713 + ypos 370 + number 1 + } +set N239262a0 [stack 0] +push $N239262a0 + Remove { + name Remove4 + label "\[value operation] \[value channels]" + xpos -831 + ypos 358 + } + Shuffle { + red white + green white + blue white + alpha white + name Shuffle2 + xpos -831 + ypos 417 + } + Switch { + inputs 2 + which {{"\[exists parent.input1]"}} + name Switch2 + xpos -713 + ypos 417 + } + Expression { + expr3 a==0?0:a + name Expression2 + xpos -713 + ypos 443 + } + Input { + inputs 0 + name fg + xpos -597 + ypos 229 + } + AddChannels { + channels alpha + name AddChannels1 + label "Alpha error fix" + xpos -597 + ypos 253 + } +set N23cf1ca0 [stack 0] +push $N23925850 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy1 + xpos -527 + ypos 338 + } + Invert { + channels alpha + name Invert1 + xpos -527 + ypos 405 + } + Merge2 { + inputs 2 + operation mask + name Merge16 + xpos -527 + ypos 443 + } + Merge2 { + inputs 2 + operation mask + name Merge13 + xpos -527 + ypos 471 + disable {{parent.disableLuma}} + } + Premult { + name Premult1 + xpos -527 + ypos 497 + } +set N239acf30 [stack 0] + Viewer { + inputs 2 + frame 0 + input_process false + name Viewer1 + xpos 290 + ypos -9 + hide_input true + } +push $N23925f30 + Dot { + name Dot12 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -399 + ypos 531 + } + Dot { + name Dot18 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -524 + ypos 531 + } + Shuffle { + in alpha + name Shuffle3 + label "\[value in] > \[value out]" + xpos -558 + ypos 2255 + } +push $N23cf1ca0 + Dot { + name Dot13 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -563 + ypos 1858 + } +set N239242a0 [stack 0] + Dot { + name Dot1 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -563 + ypos 1976 + } +set N23924610 [stack 0] + Dot { + name Dot15 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -563 + ypos 2189 + } + Dot { + name Dot16 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -538 + ypos 2214 + } +push $N23924610 + Dot { + name Dot11 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -387 + ypos 1976 + } +set N23925060 [stack 0] +push $N239242a0 +push $N239acf30 + Dot { + name Dot2 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 573 + } +set N239ad2a0 [stack 0] + Dot { + name Dot3 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 682 + } +set N239ad610 [stack 0] + Dot { + name Dot4 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 790 + } +set N239ad980 [stack 0] + Dot { + name Dot5 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 912 + } +set N239adcf0 [stack 0] + Dot { + name Dot6 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 1031 + } +set N239ae060 [stack 0] + Dot { + name Dot7 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 1153 + } +set N239ae3d0 [stack 0] + Dot { + name Dot8 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 1271 + } +set N239f47c0 [stack 0] + Dot { + name Dot9 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 1393 + } +set N239f4b30 [stack 0] + Dot { + name Dot10 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -493 + ypos 1512 + } + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?0:parent.blur09)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?0:parent.blur09}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur9 + xpos -447 + ypos 1508 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect9 + xpos -447 + ypos 1545 + } +push $N239f4b30 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?0:parent.blur08)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?0:parent.blur08}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur8 + xpos -447 + ypos 1389 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect8 + xpos -447 + ypos 1420 + } +push $N239f47c0 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius*3.2):parent.blur07)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius*3.2):parent.blur07}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur7 + xpos -447 + ypos 1267 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect7 + xpos -447 + ypos 1298 + } +push $N239ae3d0 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius*3.2):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius*3.2):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius*1.6):parent.blur06)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius*3.2):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius*3.2):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius*1.6):parent.blur06}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur6 + xpos -447 + ypos 1149 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect6 + xpos -447 + ypos 1180 + } +push $N239ae060 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius*1.5):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius*1.6):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius*.8):parent.blur05)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius*1.5):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius*1.6):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius*.8):parent.blur05}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur5 + xpos -447 + ypos 1027 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect5 + xpos -447 + ypos 1064 + } +push $N239adcf0 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius/2):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/1.25):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/2.5):parent.blur04)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius/2):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/1.25):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/2.5):parent.blur04}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur4 + xpos -447 + ypos 908 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect4 + xpos -447 + ypos 939 + } +push $N239ad980 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius/4):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/2.5):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/5):parent.blur03)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius/4):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/2.5):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/5):parent.blur03}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur3 + xpos -447 + ypos 786 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect3 + xpos -447 + ypos 817 + } +push $N239ad610 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius*.07):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/10):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/10):parent.blur02)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius*.07):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/10):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/10):parent.blur02}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur2 + xpos -447 + ypos 678 + } + ColorCorrect { + saturation {{ColorCorrect1.saturation}} + gamma {{ColorCorrect1.gamma}} + name ColorCorrect2 + xpos -447 + ypos 709 + } +push $N239ad2a0 + Blur { + channels rgb + size {{(GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius/100):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/100):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/50):parent.blur01)*(aspectRatio)} {GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowRadius/100):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowRadius/100):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowRadius/50):parent.blur01}} + filter {{GLOWCONTROLLER.blurFilter}} + quality {{GLOWCONTROLLER.blurQuality}} + crop false + name Blur1 + xpos -444 + ypos 569 + } + ColorCorrect { + name ColorCorrect1 + xpos -444 + ypos 600 + } +push $N239253d0 + Remove { + name Remove2 + label "\[value operation] \[value channels]" + xpos -281 + ypos 217 + } + Merge2 { + inputs 2 + operation {{GLOWCONTROLLER.layerBlend+24}} + mix {{GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowIntensity):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowIntensity):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowIntensity):parent.mix01}} + name Merge2 + xpos -281 + ypos 600 + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowIntensity):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowIntensity):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowIntensity*.8):parent.mix02}} + name Merge3 + xpos -281 + ypos 709 + disable {{parent.numOfLayers>0?0:1}} + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowIntensity*.8):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowIntensity*.5):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowIntensity*.6):parent.mix03}} + name Merge4 + xpos -281 + ypos 817 + disable {{parent.numOfLayers>1?0:1}} + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowIntensity*.6):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowIntensity*.3):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowIntensity*.4):parent.mix04}} + name Merge5 + xpos -281 + ypos 945 + disable {{parent.numOfLayers>2?0:1}} + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowIntensity*.4):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowIntensity*.1):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowIntensity*.2):parent.mix05}} + name Merge6 + xpos -281 + ypos 1064 + disable {{parent.numOfLayers>3?0:1}} + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?(GLOWCONTROLLER.glowIntensity*.2):GLOWCONTROLLER.glowPreset==1?(GLOWCONTROLLER.glowIntensity*.2):GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowIntensity*.1):parent.mix06}} + name Merge7 + xpos -281 + ypos 1186 + disable {{parent.numOfLayers>4?0:1}} + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?(GLOWCONTROLLER.glowIntensity*.1):parent.mix07}} + name Merge8 + xpos -281 + ypos 1304 + disable {{parent.numOfLayers>5?0:1}} + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?0:parent.mix08}} + name Merge9 + xpos -281 + ypos 1426 + disable {{parent.numOfLayers>6?0:1}} + } + Merge2 { + inputs 2 + operation {{Merge2.operation x1 8}} + mix {{GLOWCONTROLLER.glowPreset==0?0:GLOWCONTROLLER.glowPreset==1?0:GLOWCONTROLLER.glowPreset==2?0:parent.mix09}} + name Merge10 + xpos -281 + ypos 1545 + disable {{parent.numOfLayers>7?0:1}} + } +set N23b5e610 [stack 0] + Remove { + name Remove3 + label "\[value operation] \[value channels]" + xpos -105 + ypos 1577 + } + Shuffle { + red white + green white + blue white + alpha white + name Shuffle1 + xpos -105 + ypos 1627 + } + Multiply { + value {{parent.flickerOutput}} + name Multiply1 + xpos -105 + ypos 1653 + } +push $N23b5e610 + Merge2 { + inputs 2 + operation multiply + mix {{enableFlicker==1?1:0}} + name Merge12 + label "Flicker\n" + xpos -281 + ypos 1653 + } +set N23b5f3d0 [stack 0] +push $N23b5f3d0 + Remove { + name Remove1 + label "\[value operation] \[value channels]" + xpos -110 + ypos 1763 + } + Dissolve { + inputs 2 + which {{globalMix}} + name Dissolve1 + label "Global Mix\n" + xpos -281 + ypos 1764 + } + Merge2 { + inputs 2 + operation mask + name Merge15 + xpos -281 + ypos 1855 + } + Dot { + name Dot14 + label " " + note_font "Arial Black" + note_font_size 16 + xpos -247 + ypos 1956 + } +set N23b9e940 [stack 0] + Merge2 { + inputs 2 + operation under + mix {{effectOnly==0?1:0}} + name Merge14 + label "Effect Only\n" + xpos -192 + ypos 2028 + } +push $N23925060 +push $N23b9e940 + Merge2 { + inputs 2 + operation screen + mix {{effectOnly==0?1:0}} + name Merge11 + label "Effect Only\n" + xpos -302 + ypos 2026 + } +push $N23925060 +push $N23b9e940 + Merge2 { + inputs 2 + operation plus + mix {{effectOnly==0?1:0}} + name Merge1 + label "Effect Only\n" + xpos -396 + ypos 2026 + } + Switch { + inputs 3 + which {{parent.blendWithOriginal}} + name Switch1 + xpos -298 + ypos 2122 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy2 + xpos -298 + ypos 2204 + } + Switch { + inputs 2 + which {{parent.viewLuma}} + name Switch3 + xpos -301 + ypos 2261 + } + Output { + name Output1 + xpos -301 + ypos 2323 + } +end_group diff --git a/gizmos/Filter/glows_hub.gizmo b/gizmos/Filter/glows_hub.gizmo new file mode 100644 index 0000000..1683e17 --- /dev/null +++ b/gizmos/Filter/glows_hub.gizmo @@ -0,0 +1,632 @@ +set cut_paste_input [stack 0] +version 6.3 v4 +push 0 +push 0 +push 0 +push $cut_paste_input +Group { + inputs 4 + name glows_hub + help "There are 5 modes available\n 1 - Bright Glows\n 2 - Bright & Dark Glows\n 3 - LightWrap\n 4 - Merge Under\n 5 - Output only Bright Pass\n\n\n-1- Performs simple Bright Glows but with some handy parameters.\n - First use \"view threshold\" tickbox to finetune from which luminance the glow shines.\n - \"Soft Mix\" : mix between Screen and Plus blend.\n - \"Post Gain\" : Used to boost the effect but it can also be used to add a global tint.\n - \"Thin Glow\" : Usually 2 glows gives better results. (because the light behaves not linearly)\n So the main one is a big one and the second is a thin one.\n\n-2- Enables Dark Glows with some same parameters as the Bright ones.\n - There are extra options to avoid that the darks darken the super brights. (Because it hasn't to)\n\n-3- Performs a LightWrap with all Brights Glows options available (2 different size glows, threshold options)\n - Of course it has sense only for RGBA sources, and assume to be premultiplied\n - The input \"glow_source\" has to be connected to the background plate (which will be comped under)\n\n-4- Same as -1- but the glow is comped under the source.\n - So the source must have an alpha, and is assumed to be premultiplied.\n\n-5- Same as -1- but the glow is NOT comped on the source.\n\n\n- All inputs are optionals except SOURCE of course.\n- \"Brights Mask\" allow to restrict the brights glow source areas. It is not masking, which is quiet useless.\n- \"Darks Mask\" i think you've understood ...\n- \"Glow Source\" allow to choose an alternate image to generate the glow. Especially for the LightWrap but for example you can use a quick comp as\" Glow_Source\" and then processing brightGlow and darkGlow on a RGBA source." + onCreate "\nimport os.path as op\nimport os\ntext = nuke.toNode('IF_glow_source_not_connected')\nfoo_text = nuke.createNode('Text')\nfont_path = foo_text\['font'].value()\nnukescripts.node_delete(popupOnError=True)\nif op.exists(font_path):\n text\['font'].setValue(font_path)\nelse:\n path = op.dirname( nuke.defaultFontPathname() )\n for file in os.listdir(path):\n if 'arial' in file.lower() and 'black' in file.lower():\n font = file\n text\['font'].setValue(path + '/' + font)\n" + tile_color 0xffe50000 + label "\[value MODE]" + note_font Verdana + selected true + xpos -65 + ypos 176 + mapsize {0.15 0.15} + addUserKnob {20 GlowsHub l "Glows hub"} + addUserKnob {4 MODE t "For LIGHTWRAP Mode you have to connect \"glow_source\" to the background and the \"SOURCE\" must be a premultiplied RGBA image" M {"Bright Glows" "Bright & Dark Glows" LightWrap "Merge Under" "Output only Bright Pass" "" "" "" "" "" "" "" "" "" ""}} + MODE "Bright & Dark Glows" + addUserKnob {6 useGlowSource l "use\"glow_source\" input" -STARTLINE} + addUserKnob {26 ""} + addUserKnob {26 BrightGlows_1 l "BRIGHT GLOWS"} + addUserKnob {26 ""} + addUserKnob {41 threshold_blackpoint_b l "threshold black" T Threshold_brights.blackpoint} + addUserKnob {41 threshold_whitepoint_b l "threshold white" T Threshold_brights.whitepoint} + addUserKnob {6 view_threshold l "view threshold" +STARTLINE} + addUserKnob {26 ""} + addUserKnob {6 Dark_NOblend l INVISIBLE +INVISIBLE +STARTLINE} + addUserKnob {41 bright_glow_MIX l Mix T Bright_glow_merge.mix} + addUserKnob {7 soft_mix l "soft mix" t "Mix between a PLUS and a SCREEN Merge" -STARTLINE} + soft_mix 1 + addUserKnob {41 size T Blur_brights.size} + addUserKnob {41 filter -STARTLINE T Blur_brights.filter} + addUserKnob {6 smooth_blur l smoothed t "Performs a an additionnal slight blur to soften the main one" -STARTLINE} + addUserKnob {41 saturation T Saturation_brights.saturation} + addUserKnob {41 white l PostGain t "You can use \"PostGain\" to colorize your glow" T PostGain.white} + addUserKnob {26 ""} + addUserKnob {6 additionnal_thin_glow l "Additionnal THIN glow" +STARTLINE} + additionnal_thin_glow true + addUserKnob {7 addit_mix l "thin mix"} + addit_mix 0.5 + addUserKnob {7 addit_size l "thin size" -STARTLINE R 0 20} + addit_size 8 + addUserKnob {26 "" +STARTLINE} + addUserKnob {22 infos T "import webbrowser \nwebbrowser.open(\"http://www.nukepedia.com/filter/glows_hub/\")" +STARTLINE} + addUserKnob {26 philhub_2010 l "philhub 2010" -STARTLINE} + addUserKnob {20 DarkGlowsTab l "Dark Glows"} + addUserKnob {26 ""} + addUserKnob {26 DarkGlowsText l "DARK GLOWS"} + addUserKnob {26 ""} + addUserKnob {41 threshold_blackpoint_d l threshold_black T Threshold_darks.blackpoint} + addUserKnob {41 threshold_whitepoint_d l threshold_white T Threshold_darks.whitepoint} + addUserKnob {6 view_threshold_d l "view threshold" +STARTLINE} + addUserKnob {26 ""} + addUserKnob {41 dark_glow_MIX T DarkGlow_merge.mix} + addUserKnob {41 size_1 l size T Blur_darks.size} + addUserKnob {41 filter_1 l filter -STARTLINE T Blur_darks.filter} + addUserKnob {41 saturation_1 l saturation T SaturationDarks.saturation} + addUserKnob {26 ""} + addUserKnob {6 DarkGlow_dont_affect_Highlights l "DarkGlow dont affect Highlights" t "Avoid DarkGlows to darken SuperBright areas" +STARTLINE} + DarkGlow_dont_affect_Highlights true + addUserKnob {41 mix_3 l mix -STARTLINE T HL_saving_merge.mix} + addUserKnob {41 blackpoint T HL_saving_MSK.blackpoint} + addUserKnob {41 whitepoint T HL_saving_MSK.whitepoint} + addUserKnob {6 view_mask_HL_keep l "view mask" +STARTLINE} + addUserKnob {20 MASKS l Masks} + addUserKnob {41 brightGlows_mask l brightGlows T Shuffle_bright_mask.in} + addUserKnob {41 mix_1 l mix -STARTLINE T Merge_brightMASK.mix} + addUserKnob {6 invert_brightMSK l invert -STARTLINE} + addUserKnob {41 darkGlows_mask l darkGlows T Shuffle_dark_mask.in} + addUserKnob {41 mix_2 l mix -STARTLINE T MergeDarkMASK.mix} + addUserKnob {6 invert_darkMSK l invert -STARTLINE} +} + Input { + inputs 0 + name SOURCE + xpos 300 + ypos 11 + } + Clamp { + channels alpha + name Clamp1 + xpos 300 + ypos 46 + } +set N12d449d0 [stack 0] + Dot { + name Dot15 + xpos 1190 + ypos 55 + } +add_layer {shadow} + Shuffle { + red alpha + green alpha + blue alpha + name alpha_source + xpos 1156 + ypos 414 + } +set N12d45030 [stack 0] + Invert { + channels rgba + name Invert6 + xpos 958 + ypos 414 + disable {{parent.PostMult_LW.disable i}} + } + Input { + inputs 0 + name brights_mask + xpos 921 + ypos 129 + number 1 + } + Shuffle { + in alpha + red green + alpha green + out alpha + name Shuffle_bright_mask + label "\[value in]" + xpos 921 + ypos 230 + } + Expression { + channel0 rgb + expr0 a + channel1 alpha + expr1 1 + name Expression1 + xpos 921 + ypos 282 + } + Invert { + channels rgb + name Invert5 + xpos 921 + ypos 320 + disable {{1-invert_brightMSK i}} + } + Input { + inputs 0 + name glow_source + xpos 461 + ypos 71 + number 3 + } +push $N12d449d0 + Switch { + inputs 2 + which {{"\[ exists parent.input\[value glow_source.number] ]" i}} + name Switch_glow_source + xpos 461 + ypos 129 + disable {{MODE==2?0:(!parent.useGlowSource) i}} + } +set N12da3530 [stack 0] + Saturation { + saturation 0.7 + mode Average + name Saturation_brights + xpos 648 + ypos 200 + } + Grade { + channels rgba + blackpoint 0.11 + whitepoint 0.9 + name Threshold_brights + xpos 648 + ypos 240 + } +set N12edf730 [stack 0] + Merge2 { + inputs 2 + operation multiply + name Merge_brightMASK + xpos 738 + ypos 320 + } +push $N12edf730 + Switch { + inputs 2 + which {{"\[ exists parent.input\[value brights_mask.number] ]" x101 0}} + name SwitchBrightMask + xpos 648 + ypos 374 + } + Merge2 { + inputs 2 + operation multiply + name PreMult_LW + xpos 648 + ypos 414 + disable {{parent.PostMult_LW.disable i}} + } +set N12edfd90 [stack 0] + Dot { + name Dot1 + xpos 1119 + ypos 377 + } + Dot { + name Dot3 + xpos 1119 + ypos 1155 + } + Input { + inputs 0 + name darks_mask + xpos 71 + ypos 114 + number 2 + } + Shuffle { + in alpha + red green + alpha green + out alpha + name Shuffle_dark_mask + label "\[value in]" + xpos 71 + ypos 185 + } + Expression { + channel0 rgb + expr0 a + channel1 alpha + expr1 1 + name Expression2 + xpos 71 + ypos 288 + } + Invert { + channels rgb + name Invert1 + xpos 71 + ypos 320 + disable {{1-invert_darkMSK i}} + } +push $N12da3530 + Saturation { + saturation 0 + mode Average + name SaturationDarks + xpos 417 + ypos 210 + } +set N12ee13e0 [stack 0] + Grade { + channels {rgba.red rgba.green rgba.blue -rgba.alpha} + blackpoint 0.1 + whitepoint 0.165 + name Threshold_darks + xpos 417 + ypos 236 + } + Invert { + channels rgb + clamp true + name Invert2 + xpos 417 + ypos 274 + } +set N12ee1a40 [stack 0] + Merge2 { + inputs 2 + operation multiply + name MergeDarkMASK + xpos 510 + ypos 320 + } +push $N12ee1a40 + Switch { + inputs 2 + which {{"\[ exists parent.input\[value darks_mask.number] ]"}} + name SwitchDarkMask + xpos 417 + ypos 377 + } +set N12da3bd0 [stack 0] + Dot { + name Dot5 + xpos 80 + ypos 381 + } + Dot { + name Dot4 + xpos 80 + ypos 1105 + } +push $N12ee13e0 + Dot { + name Dot2 + xpos 166 + ypos 213 + } + Grade { + blackpoint 0.37 + whitepoint 0.575 + name HL_saving_MSK + xpos 133 + ypos 637 + } +set N12faaa70 [stack 0] + Dot { + name Dot8 + xpos 166 + ypos 1054 + } +push $N12da3bd0 + Blur { + channels {rgba.red rgba.green rgba.blue -rgba.alpha} + size 140 + filter triangle + name Blur_darks + label "\n" + xpos 417 + ypos 428 + } +set N12fab0d0 [stack 0] + Dot { + name Dot13 + xpos -66 + ypos 432 + } + Dot { + name Dot11 + xpos -66 + ypos 1004 + } +push $N12edfd90 + Blur { + channels rgba + size {{parent.addit_size}} + filter triangle + name Blur_brights_thin + label "\n" + xpos 793 + ypos 458 + } +push $N12edfd90 + Blur { + channels rgba + size 50 + filter quadratic + name Blur_brights + label "\n" + xpos 648 + ypos 458 + } + Merge2 { + inputs 2 + operation screen + mix {{parent.addit_mix i}} + name MergeThin + xpos 648 + ypos 509 + disable {{!parent.additionnal_thin_glow i}} + } + Grade { + name PostGain + xpos 648 + ypos 533 + } + Blur { + channels rgba + size {{parent.Blur_brights_thin.size i}} + filter triangle + name Blur_brights_smooth + xpos 648 + ypos 567 + disable {{!parent.smooth_blur i}} + } + Expression { + channel0 {-rgba.red -rgba.green -rgba.blue rgba.alpha} + expr0 (r+g+b)/3 + name LtoA + xpos 648 + ypos 600 + } + Dot { + name Dot17 + xpos 682 + ypos 659 + } +set N12facd80 [stack 0] + Dot { + name Dot14 + xpos 953 + ypos 659 + } + Dot { + name Dot9 + label bright_pass_only + xpos 953 + ypos 934 + } +push $N12facd80 +push $N12faaa70 +push 0 + Switch { + inputs 2 + which {{"\[ exists parent.input\[value 0] ]"}} + name Switch1 + label "\[value which]" + xpos 254 + ypos 632 + } +push $N12d449d0 + Dot { + name Dot6 + xpos 334 + ypos 149 + } +set N12fad710 [stack 0] + Dot { + name Dot7 + xpos 360 + ypos 398 + } + Dot { + name Dot10 + xpos 360 + ypos 570 + } +push $N12fab0d0 +push $N12d449d0 + Invert { + channels rgb + clamp true + name Invert4 + xpos 221 + ypos 472 + } + Merge2 { + inputs 2 + operation screen + Achannels {rgba.red rgba.green rgba.blue -rgba.alpha} + Bchannels {rgba.red rgba.green rgba.blue -rgba.alpha} + output {rgba.red rgba.green rgba.blue -rgba.alpha} + mix 0.6 + name DarkGlow_merge + xpos 417 + ypos 472 + } + Invert { + channels rgb + clamp true + name Invert3 + xpos 417 + ypos 524 + } + Merge2 { + inputs 2+1 + maskChannelMask rgba.red + mix 0.35 + name HL_saving_merge + xpos 416 + ypos 637 + disable {{"1-DarkGlow_dont_affect_Highlights || \[ exists parent.input\[value 0] ]"}} + } +push $N12fad710 + Dot { + name Dot12 + xpos 334 + ypos 710 + } + Switch { + inputs 2 + which {{MODE==1 i}} + name SwitchDarkGlow + xpos 416 + ypos 707 + } +set N12da4270 [stack 0] + Merge2 { + inputs 2 + operation under + mix {{parent.Bright_glow_merge.mix}} + name MergeUnder + xpos 416 + ypos 863 + } + Dot { + name Dot18 + label under + xpos 544 + ypos 918 + } +push $N12d45030 + Dot { + name Dot16 + xpos 1190 + ypos 824 + } + Invert { + channels rgba + name Invert7 + xpos 1008 + ypos 821 + disable true + } +push $N12facd80 +push $N12da4270 + Merge2 { + inputs 2 + operation screen + name Bright_glow_merge + xpos 732 + ypos 732 + } +push $N12facd80 +push $N12da4270 + Merge2 { + inputs 2 + operation plus + mix {{parent.Bright_glow_merge.mix i}} + name Bright_glow_PLUS + xpos 597 + ypos 734 + } + Dissolve { + inputs 2 + channels rgba + which {{parent.soft_mix i}} + name DissolvePLUSandSCREEN + xpos 661 + ypos 786 + } +set N13077690 [stack 0] + Unpremult { + name Unpremult_LW + xpos 841 + ypos 786 + disable {{parent.PostMult_LW.disable i}} + } + Merge2 { + inputs 2 + operation multiply + name PostMult_LW + xpos 841 + ypos 821 + disable {{!(MODE==2) i}} + } + Shuffle { + alpha white + name WipeAlpha_forMessage + xpos 841 + ypos 854 + disable {{"\[ exists parent.input\[value glow_source.number] ]" i}} + } + Text { + message "please connect \"glow_source\" input to the background plate" + font C:/Windows/Fonts/arial.ttf + xjustify center + yjustify center + Transform 1 + box {0 0 {input.width} {input.height}} + center {960 540} + name IF_glow_source_not_connected + xpos 841 + ypos 878 + disable {{"\[ exists parent.input\[value glow_source.number] ]"}} + } +set N13078350 [stack 0] +push $N13077690 + Dot { + name Dot20 + label bright&dark + xpos 725 + ypos 860 + } +push $N13077690 + Dot { + name Dot19 + label bright + xpos 658 + ypos 858 + } + Switch { + inputs 5 + which {{MODE i}} + name Switch_MODE + label "\[value which]" + xpos 661 + ypos 925 + } + Switch { + inputs 2 + which {{Dark_NOblend i}} + name SwitchDarkNoBlend + xpos 661 + ypos 1002 + } + Switch { + inputs 2 + which {{view_mask_HL_keep i}} + name Switch_HLsaving_MSK + xpos 661 + ypos 1051 + } + Switch { + inputs 2 + which {{view_threshold_d i}} + name Switch_threshod_darks + xpos 661 + ypos 1101 + } + Switch { + inputs 2 + which {{view_threshold i}} + name Switch_threshod_brights + xpos 661 + ypos 1152 + } + Output { + name Output1 + xpos 661 + ypos 1195 + } +push $N13078350 + Viewer { + input_process false + name Viewer1 + xpos 247 + ypos 739 + } +end_group diff --git a/gizmos/Filter/iBlur.gizmo b/gizmos/Filter/iBlur.gizmo new file mode 100644 index 0000000..50dee3e --- /dev/null +++ b/gizmos/Filter/iBlur.gizmo @@ -0,0 +1,1678 @@ +#! /Applications/Nuke6.3v2/Nuke6.3v2.app/Contents/MacOS/Nuke6.3v2 -nx +version 6.3 v2 +Gizmo { + inputs 2 + help "iBlur v1.0\n\nThis gizmo should work like the iBlur from Shake. I'm still missing a ramped blur in nuke, especially for technical stuff, where a zBlur is just not the right thing (and also too slow)." + tile_color 0xcc804eff + addUserKnob {20 Controls} + addUserKnob {41 channels t "Select the channels you want to iBlur." T Blur11.channels} + addUserKnob {26 divider2 l " " T " "} + addUserKnob {7 blur l "blur size" t "Higher setting means more blur. : )\n\nBlur size values are equal with Nuke's default 'Blur' or 'Defocus'." R 0 100} + blur 10 + addUserKnob {4 blur_type l "blur type" t "The gizmo is indeed using Nuke's 'Blur' or 'Defocus'. You know the difference!" M {blur "defocus " "" "" ""}} + addUserKnob {4 quality t "This gizmo blurs the image in blended in slices. \nMore slices mean more accurate blur-ramp, and also more rendertime. \n\nfast = 7 slices\naccurate = 13 slices" M {fast accurate "" ""}} + quality accurate + addUserKnob {26 spacer l " " T " "} + addUserKnob {26 divider l "" +STARTLINE} + addUserKnob {26 credit l "" +STARTLINE T "iBlur v1.0 | moritz eiche | 2011"} +} + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x2e2e2eff + note_font_size 42 + xpos 32 + ypos -426 + bdwidth 2731 + bdheight 633 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x2e2e2eff + note_font_size 42 + xpos 33 + ypos 320 + bdwidth 2733 + bdheight 625 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x262626ff + note_font_size 42 + xpos 114 + ypos -367 + bdwidth 2572 + bdheight 269 + } + BackdropNode { + inputs 0 + name BackdropNode5 + tile_color 0x262626ff + note_font_size 42 + xpos 108 + ypos 373 + bdwidth 2572 + bdheight 269 + } + BackdropNode { + inputs 0 + name BackdropNode6 + tile_color 0x262626ff + note_font_size 42 + xpos 108 + ypos 653 + bdwidth 2575 + bdheight 237 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x262626ff + note_font_size 42 + xpos 115 + ypos -83 + bdwidth 2573 + bdheight 236 + } + Input { + inputs 0 + name mask + label a + xpos -113 + ypos -764 + number 1 + } + Dot { + name Dot6 + xpos -79 + ypos -312 + } +set N1ad2dc60 [stack 0] + Dot { + name Dot87 + xpos -79 + ypos -51 + } +set N1096db80 [stack 0] + Dot { + name Dot57 + xpos -79 + ypos 430 + } +set N1ad30ab0 [stack 0] + Dot { + name Dot2 + xpos 246 + ypos 430 + } +set N1ad33790 [stack 0] + Dot { + name Dot4 + xpos 445 + ypos 430 + } +set N1ad36560 [stack 0] + Dot { + name Dot32 + xpos 651 + ypos 430 + } +set N1ada5d10 [stack 0] + Dot { + name Dot33 + xpos 850 + ypos 430 + } +set N1ada8a30 [stack 0] + Dot { + name Dot34 + xpos 1045 + ypos 430 + } +set N1ad81fe0 [stack 0] + Dot { + name Dot35 + xpos 1233 + ypos 429 + } +set N1ad84c50 [stack 0] + Dot { + name Dot36 + xpos 1438 + ypos 429 + } +set N1ad87930 [stack 0] + Dot { + name Dot37 + xpos 1634 + ypos 429 + } +set N1ad59f00 [stack 0] + Dot { + name Dot38 + xpos 1834 + ypos 429 + } +set N1ad5cc00 [stack 0] + Dot { + name Dot39 + xpos 2036 + ypos 429 + } +set N1ad5f920 [stack 0] + Dot { + name Dot40 + xpos 2234 + ypos 429 + } +set N1ad62620 [stack 0] + Dot { + name Dot41 + xpos 2432 + ypos 428 + } +set N1ad65300 [stack 0] + Dot { + name Dot42 + xpos 2624 + ypos 428 + } + Grade { + channels rgba + blackpoint 0.9 + white_clamp true + name Grade12 + xpos 2590 + ypos 521 + } + Input { + inputs 0 + name image + label rgba + xpos -282 + ypos -767 + } + Dot { + name Dot1 + xpos -248 + ypos -272 + } +set N1ad76680 [stack 0] + Dot { + name Dot25 + xpos -248 + ypos -155 + } +set N1ad77d10 [stack 0] + Dot { + name Dot86 + xpos -248 + ypos -11 + } +set N35ade9c0 [stack 0] + Dot { + name Dot88 + xpos -248 + ypos 106 + } +set N1097ab70 [stack 0] + Dot { + name Dot58 + xpos -248 + ypos 470 + } +set N1ad7ce60 [stack 0] + Dot { + name Dot43 + xpos 152 + ypos 470 + } +set N1ad7fb40 [stack 0] + Dot { + name Dot44 + xpos 354 + ypos 470 + } +set N1ad88cb0 [stack 0] + Dot { + name Dot45 + xpos 557 + ypos 470 + } +set N1ad8bb10 [stack 0] + Dot { + name Dot46 + xpos 756 + ypos 470 + } +set N1ad8e7f0 [stack 0] + Dot { + name Dot47 + xpos 954 + ypos 470 + } +set N1ad95250 [stack 0] + Dot { + name Dot48 + xpos 1142 + ypos 469 + } +set N1ad975b0 [stack 0] + Dot { + name Dot49 + xpos 1347 + ypos 469 + } +set N1ad9a290 [stack 0] + Dot { + name Dot50 + xpos 1543 + ypos 469 + } +set N1ad9cfa0 [stack 0] + Dot { + name Dot51 + xpos 1743 + ypos 469 + } +set N1ad9fcb0 [stack 0] + Dot { + name Dot52 + xpos 1945 + ypos 469 + } +set N1ada2990 [stack 0] + Dot { + name Dot53 + xpos 2143 + ypos 469 + } +set N1adabef0 [stack 0] + Dot { + name Dot54 + xpos 2341 + ypos 468 + } +set N1adb0610 [stack 0] + Dot { + name Dot55 + xpos 2533 + ypos 468 + } + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur i}} + name Defocus13 + xpos 2499 + ypos 521 + } +push $N1ad65300 + Grade { + channels rgba + blackpoint 0.8 + whitepoint 0.9 + white_clamp true + name Grade15 + xpos 2398 + ypos 521 + } +push $N1adb0610 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*9 i}} + name Defocus12 + xpos 2307 + ypos 521 + } +push $N1ad62620 + Grade { + channels rgba + blackpoint 0.7 + whitepoint 0.8 + white_clamp true + name Grade16 + xpos 2200 + ypos 521 + } +push $N1adabef0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*8 i}} + name Defocus11 + xpos 2109 + ypos 521 + } +push $N1ad5f920 + Grade { + channels rgba + blackpoint 0.6 + whitepoint 0.7 + white_clamp true + name Grade17 + xpos 2002 + ypos 521 + } +push $N1ada2990 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*7 i}} + name Defocus10 + xpos 1911 + ypos 521 + } +push $N1ad5cc00 + Grade { + channels rgba + blackpoint 0.5 + whitepoint 0.6 + white_clamp true + name Grade18 + xpos 1800 + ypos 521 + } +push $N1ad9fcb0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*6 i}} + name Defocus9 + xpos 1709 + ypos 521 + } +push $N1ad59f00 + Grade { + channels rgba + blackpoint 0.4 + whitepoint 0.5 + white_clamp true + name Grade19 + xpos 1600 + ypos 521 + } +push $N1ad9cfa0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*5 i}} + name Defocus8 + xpos 1509 + ypos 521 + } +push $N1ad87930 + Grade { + channels rgba + blackpoint 0.3 + whitepoint 0.4 + white_clamp true + name Grade20 + xpos 1404 + ypos 521 + } +push $N1ad9a290 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*4 i}} + name Defocus7 + xpos 1313 + ypos 521 + } +push $N1ad84c50 + Grade { + channels rgba + blackpoint 0.2 + whitepoint 0.3 + white_clamp true + name Grade21 + xpos 1199 + ypos 521 + } +push $N1ad975b0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*3 i}} + name Defocus6 + xpos 1108 + ypos 522 + } +push $N1ad81fe0 + Grade { + channels rgba + blackpoint 0.1 + whitepoint 0.2 + white_clamp true + name Grade22 + xpos 1011 + ypos 521 + } +push $N1ad95250 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*2 i}} + name Defocus5 + xpos 920 + ypos 521 + } +push $N1ada8a30 + Grade { + channels rgba + blackpoint 0.075 + whitepoint 0.1 + white_clamp true + name Grade23 + xpos 816 + ypos 521 + } +push $N1ad8e7f0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10 i}} + name Defocus4 + xpos 722 + ypos 521 + } +push $N1ada5d10 + Grade { + channels rgba + blackpoint 0.05 + whitepoint 0.075 + white_clamp true + name Grade24 + xpos 617 + ypos 521 + } +push $N1ad8bb10 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10/4*3 i}} + name Defocus3 + xpos 523 + ypos 521 + } +push $N1ad36560 + Grade { + channels rgba + blackpoint 0.025 + whitepoint 0.05 + white_clamp true + name Grade25 + xpos 411 + ypos 521 + } +push $N1ad88cb0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10/4*2 i}} + name Defocus2 + xpos 320 + ypos 521 + } +push $N1ad33790 + Grade { + channels rgba + whitepoint 0.025 + white_clamp true + name Grade26 + xpos 212 + ypos 521 + } +push $N1ad7fb40 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10/4}} + name Defocus1 + xpos 118 + ypos 521 + } +push $N1ad7ce60 + Dot { + name Dot56 + xpos -248 + ypos 587 + } +set N1f49a8b0 [stack 0] + Keymix { + inputs 3 + bbox B + name Keymix1 + xpos 118 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix15 + xpos 320 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix16 + xpos 523 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix17 + xpos 722 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix18 + xpos 920 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix19 + xpos 1108 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix20 + xpos 1313 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix21 + xpos 1509 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix22 + xpos 1709 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix23 + xpos 1911 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix24 + xpos 2109 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix25 + xpos 2307 + ypos 579 + } + Keymix { + inputs 3 + bbox B + name Keymix26 + xpos 2499 + ypos 579 + } + Dot { + name Dot67 + xpos 2886 + ypos 587 + } +push $N1ad30ab0 + Dot { + name Dot105 + xpos -79 + ypos 688 + } + Dot { + name Dot62 + xpos 243 + ypos 688 + } +set N40890140 [stack 0] + Dot { + name Dot65 + xpos 442 + ypos 688 + } +set N408b5500 [stack 0] + Dot { + name Dot69 + xpos 847 + ypos 688 + } +set N408b7a80 [stack 0] + Dot { + name Dot71 + xpos 1244 + ypos 688 + } +set N40883830 [stack 0] + Dot { + name Dot82 + xpos 1634 + ypos 687 + } +set N408ae4d0 [stack 0] + Dot { + name Dot89 + xpos 2035 + ypos 687 + } +set N40872240 [stack 0] + Dot { + name Dot91 + xpos 2621 + ypos 686 + } + Grade { + channels rgba + blackpoint 0.7 + white_clamp true + name Grade28 + xpos 2587 + ypos 779 + } +push $N1f49a8b0 + Dot { + name Dot106 + xpos -248 + ypos 728 + } +set N40307bc0 [stack 0] + Dot { + name Dot92 + xpos 149 + ypos 728 + } +set N408d8500 [stack 0] + Dot { + name Dot93 + xpos 351 + ypos 728 + } +set N40871320 [stack 0] + Dot { + name Dot95 + xpos 753 + ypos 728 + } +set N408db0f0 [stack 0] + Dot { + name Dot96 + xpos 1153 + ypos 728 + } +set N40864fb0 [stack 0] + Dot { + name Dot100 + xpos 1543 + ypos 727 + } +set N408e0c70 [stack 0] + Dot { + name Dot102 + xpos 1944 + ypos 727 + } +set N408fba00 [stack 0] + Dot { + name Dot104 + xpos 2530 + ypos 726 + } + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur i}} + name Defocus14 + xpos 2496 + ypos 780 + } +push $N40872240 + Grade { + channels rgba + blackpoint 0.5 + whitepoint 0.7 + white_clamp true + name Grade32 + xpos 2001 + ypos 780 + } +push $N408fba00 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*7 i}} + name Defocus16 + xpos 1910 + ypos 779 + } +push $N408ae4d0 + Grade { + channels rgba + blackpoint 0.3 + whitepoint 0.5 + white_clamp true + name Grade37 + xpos 1600 + ypos 779 + } +push $N408e0c70 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*5 i}} + name Defocus18 + xpos 1509 + ypos 780 + } +push $N40883830 + Grade { + channels rgba + blackpoint 0.1 + whitepoint 0.3 + white_clamp true + name Grade43 + xpos 1210 + ypos 779 + } +push $N40864fb0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10*3 i}} + name Defocus22 + xpos 1119 + ypos 779 + } +push $N408b7a80 + Grade { + channels rgba + blackpoint 0.05 + whitepoint 0.1 + white_clamp true + name Grade44 + xpos 813 + ypos 779 + } +push $N408db0f0 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10 i}} + name Defocus23 + xpos 719 + ypos 779 + } +push $N408b5500 + Grade { + channels rgba + blackpoint 0.025 + whitepoint 0.05 + white_clamp true + name Grade46 + xpos 408 + ypos 779 + } +push $N40871320 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10/4*2 i}} + name Defocus25 + xpos 317 + ypos 778 + } +push $N40890140 + Grade { + channels rgba + whitepoint 0.025 + white_clamp true + name Grade47 + xpos 209 + ypos 778 + } +push $N408d8500 + Defocus { + channels {{{parent.Blur11.channels}}} + defocus {{blur/10/4 i}} + name Defocus26 + xpos 115 + ypos 779 + } +push $N40307bc0 + Dot { + name Dot107 + xpos -248 + ypos 845 + } + Keymix { + inputs 3 + bbox B + name Keymix29 + xpos 115 + ypos 837 + } + Keymix { + inputs 3 + bbox B + name Keymix32 + xpos 317 + ypos 837 + } + Keymix { + inputs 3 + bbox B + name Keymix36 + xpos 719 + ypos 837 + } + Keymix { + inputs 3 + bbox B + name Keymix38 + xpos 1119 + ypos 837 + } + Keymix { + inputs 3 + bbox B + name Keymix43 + xpos 1509 + ypos 837 + } + Keymix { + inputs 3 + bbox B + name Keymix45 + xpos 1910 + ypos 837 + } + Keymix { + inputs 3 + bbox B + name Keymix47 + xpos 2496 + ypos 837 + } + Switch { + inputs 2 + which {{quality i}} + name Switch3 + xpos 2852 + ypos 842 + } +push $N1ad2dc60 + Dot { + name Dot23 + xpos 255 + ypos -312 + } +set N1f4de520 [stack 0] + Dot { + name Dot26 + xpos 454 + ypos -312 + } +set N1f4e10f0 [stack 0] + Dot { + name Dot28 + xpos 660 + ypos -312 + } +set N1f4e3dd0 [stack 0] + Dot { + name Dot30 + xpos 859 + ypos -312 + } +set N1f4e6ab0 [stack 0] + Dot { + name Dot7 + xpos 1054 + ypos -312 + } +set N1f4e9790 [stack 0] + Dot { + name Dot5 + xpos 1242 + ypos -313 + } +set N1f4ec470 [stack 0] + Dot { + name Dot9 + xpos 1447 + ypos -313 + } +set N1f4ef150 [stack 0] + Dot { + name Dot11 + xpos 1643 + ypos -313 + } +set N1f4f1e30 [stack 0] + Dot { + name Dot13 + xpos 1843 + ypos -313 + } +set N1f4f4b10 [stack 0] + Dot { + name Dot15 + xpos 2045 + ypos -313 + } +set N1f4f77f0 [stack 0] + Dot { + name Dot17 + xpos 2243 + ypos -313 + } +set N1f4fa4d0 [stack 0] + Dot { + name Dot19 + xpos 2441 + ypos -314 + } +set N1f501130 [stack 0] + Dot { + name Dot21 + xpos 2633 + ypos -314 + } + Grade { + channels rgba + blackpoint 0.9 + white_clamp true + name Grade8 + xpos 2599 + ypos -225 + } +push $N1ad76680 + Dot { + name Dot24 + xpos 161 + ypos -272 + } +set N1f50f120 [stack 0] + Dot { + name Dot27 + xpos 363 + ypos -272 + } +set N1f511d20 [stack 0] + Dot { + name Dot29 + xpos 566 + ypos -272 + } +set N1f514a00 [stack 0] + Dot { + name Dot31 + xpos 765 + ypos -272 + } +set N1f5176e0 [stack 0] + Dot { + name Dot3 + xpos 963 + ypos -272 + } +set N1f51a3c0 [stack 0] + Dot { + name Dot8 + xpos 1151 + ypos -273 + } +set N1f51d0a0 [stack 0] + Dot { + name Dot10 + xpos 1356 + ypos -273 + } +set N1f51fd80 [stack 0] + Dot { + name Dot12 + xpos 1552 + ypos -273 + } +set N1f522a60 [stack 0] + Dot { + name Dot14 + xpos 1752 + ypos -273 + } +set N1f525740 [stack 0] + Dot { + name Dot16 + xpos 1954 + ypos -273 + } +set N1f528420 [stack 0] + Dot { + name Dot18 + xpos 2152 + ypos -273 + } +set N1f52b100 [stack 0] + Dot { + name Dot20 + xpos 2350 + ypos -274 + } +set N1f52dde0 [stack 0] + Dot { + name Dot22 + xpos 2542 + ypos -274 + } + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*10 i}} + name Blur10 + xpos 2508 + ypos -225 + } +push $N1f501130 + Grade { + channels rgba + blackpoint 0.8 + whitepoint 0.9 + white_clamp true + name Grade7 + xpos 2407 + ypos -225 + } +push $N1f52dde0 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*9 i}} + name Blur9 + xpos 2316 + ypos -225 + } +push $N1f4fa4d0 + Grade { + channels rgba + blackpoint 0.7 + whitepoint 0.8 + white_clamp true + name Grade6 + xpos 2209 + ypos -225 + } +push $N1f52b100 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*8 i}} + name Blur8 + xpos 2118 + ypos -225 + } +push $N1f4f77f0 + Grade { + channels rgba + blackpoint 0.6 + whitepoint 0.7 + white_clamp true + name Grade5 + xpos 2011 + ypos -225 + } +push $N1f528420 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*7 i}} + name Blur7 + xpos 1920 + ypos -226 + } +push $N1f4f4b10 + Grade { + channels rgba + blackpoint 0.5 + whitepoint 0.6 + white_clamp true + name Grade4 + xpos 1809 + ypos -225 + } +push $N1f525740 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*6 i}} + name Blur6 + xpos 1718 + ypos -225 + } +push $N1f4f1e30 + Grade { + channels rgba + blackpoint 0.4 + whitepoint 0.5 + white_clamp true + name Grade3 + xpos 1609 + ypos -225 + } +push $N1f522a60 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*5 i}} + name Blur5 + xpos 1518 + ypos -225 + } +push $N1f4ef150 + Grade { + channels rgba + blackpoint 0.3 + whitepoint 0.4 + white_clamp true + name Grade2 + xpos 1413 + ypos -225 + } +push $N1f51fd80 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*4 i}} + name Blur4 + xpos 1322 + ypos -225 + } +push $N1f4ec470 + Grade { + channels rgba + blackpoint 0.2 + whitepoint 0.3 + white_clamp true + name Grade1 + xpos 1208 + ypos -225 + } +push $N1f51d0a0 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*3 i}} + name Blur3 + xpos 1117 + ypos -225 + } +push $N1f4e9790 + Grade { + channels rgba + blackpoint 0.1 + whitepoint 0.2 + white_clamp true + name Grade13 + xpos 1020 + ypos -225 + } +push $N1f51a3c0 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*2 i}} + name Blur2 + xpos 929 + ypos -225 + } +push $N1f4e6ab0 + Grade { + channels rgba + blackpoint 0.075 + whitepoint 0.1 + white_clamp true + name Grade14 + xpos 825 + ypos -225 + } +push $N1f5176e0 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10 i}} + name Blur14 + xpos 731 + ypos -225 + } +push $N1f4e3dd0 + Grade { + channels rgba + blackpoint 0.05 + whitepoint 0.075 + white_clamp true + name Grade11 + xpos 626 + ypos -225 + } +push $N1f514a00 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10/4*3 i}} + name Blur13 + xpos 532 + ypos -225 + } +push $N1f4e10f0 + Grade { + channels rgba + blackpoint 0.025 + whitepoint 0.05 + white_clamp true + name Grade10 + xpos 420 + ypos -225 + } +push $N1f511d20 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10/4*2 i}} + name Blur12 + xpos 329 + ypos -225 + } +push $N1f4de520 + Grade { + channels rgba + whitepoint 0.025 + white_clamp true + name Grade9 + xpos 221 + ypos -225 + } +push $N1f50f120 + Blur { + channels rgb + size {{blur/10/4 i}} + name Blur11 + xpos 127 + ypos -227 + } +push $N1ad77d10 + Keymix { + inputs 3 + bbox B + name Keymix11 + xpos 127 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix12 + xpos 329 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix13 + xpos 532 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix14 + xpos 731 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix2 + xpos 929 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix3 + xpos 1117 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix4 + xpos 1322 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix5 + xpos 1518 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix6 + xpos 1718 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix7 + xpos 1920 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix8 + xpos 2118 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix9 + xpos 2316 + ypos -163 + } + Keymix { + inputs 3 + bbox B + name Keymix10 + xpos 2508 + ypos -163 + } + Dot { + name Dot59 + xpos 2883 + ypos -155 + } +push $N1096db80 + Dot { + name Dot60 + xpos 253 + ypos -51 + } +set N52ab350 [stack 0] + Dot { + name Dot61 + xpos 452 + ypos -51 + } +set N52b3170 [stack 0] + Dot { + name Dot63 + xpos 857 + ypos -51 + } +set N5248c20 [stack 0] + Dot { + name Dot64 + xpos 1250 + ypos -52 + } +set N5252080 [stack 0] + Dot { + name Dot66 + xpos 1646 + ypos -53 + } +set N524d760 [stack 0] + Dot { + name Dot68 + xpos 2046 + ypos -53 + } +set N40337940 [stack 0] + Dot { + name Dot72 + xpos 2631 + ypos -53 + } + Grade { + channels rgba + blackpoint 0.7 + white_clamp true + name Grade27 + xpos 2597 + ypos 36 + } +push $N35ade9c0 + Dot { + name Dot73 + xpos 159 + ypos -11 + } +set N52620e0 [stack 0] + Dot { + name Dot74 + xpos 361 + ypos -11 + } +set N5282010 [stack 0] + Dot { + name Dot76 + xpos 763 + ypos -11 + } +set N52b6c70 [stack 0] + Dot { + name Dot77 + xpos 1159 + ypos -12 + } +set N52668b0 [stack 0] + Dot { + name Dot79 + xpos 1555 + ypos -13 + } +set N52bff50 [stack 0] + Dot { + name Dot81 + xpos 1955 + ypos -13 + } +set N403b1f40 [stack 0] + Dot { + name Dot85 + xpos 2540 + ypos -13 + } + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*10 i}} + name Blur1 + xpos 2506 + ypos 36 + } +push $N40337940 + Grade { + channels rgba + blackpoint 0.5 + whitepoint 0.7 + white_clamp true + name Grade31 + xpos 2012 + ypos 35 + } +push $N403b1f40 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*7 i}} + name Blur18 + xpos 1921 + ypos 34 + } +push $N524d760 + Grade { + channels rgba + blackpoint 0.3 + whitepoint 0.5 + white_clamp true + name Grade33 + xpos 1612 + ypos 34 + } +push $N52bff50 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*5 i}} + name Blur20 + xpos 1521 + ypos 35 + } +push $N5252080 + Grade { + channels rgba + blackpoint 0.1 + whitepoint 0.3 + white_clamp true + name Grade35 + xpos 1216 + ypos 35 + } +push $N52668b0 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10*3 i}} + name Blur22 + xpos 1125 + ypos 35 + } +push $N5248c20 + Grade { + channels rgba + blackpoint 0.05 + whitepoint 0.1 + white_clamp true + name Grade36 + xpos 823 + ypos 36 + } +push $N52b6c70 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10 i}} + name Blur23 + xpos 729 + ypos 36 + } +push $N52b3170 + Grade { + channels rgba + blackpoint 0.025 + whitepoint 0.05 + white_clamp true + name Grade38 + xpos 418 + ypos 36 + } +push $N5282010 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10/4*2 i}} + name Blur25 + xpos 327 + ypos 36 + } +push $N52ab350 + Grade { + channels rgba + whitepoint 0.025 + white_clamp true + name Grade39 + xpos 219 + ypos 38 + } +push $N52620e0 + Blur { + channels {{{parent.Blur11.channels}}} + size {{blur/10/4 i}} + name Blur26 + xpos 125 + ypos 38 + } +push $N1097ab70 + Keymix { + inputs 3 + bbox B + name Keymix27 + xpos 125 + ypos 98 + } + Keymix { + inputs 3 + bbox B + name Keymix28 + xpos 327 + ypos 98 + } + Keymix { + inputs 3 + bbox B + name Keymix30 + xpos 729 + ypos 98 + } + Keymix { + inputs 3 + bbox B + name Keymix31 + xpos 1125 + ypos 97 + } + Keymix { + inputs 3 + bbox B + name Keymix33 + xpos 1521 + ypos 97 + } + Keymix { + inputs 3 + bbox B + name Keymix35 + xpos 1921 + ypos 97 + } + Keymix { + inputs 3 + bbox B + name Keymix39 + xpos 2506 + ypos 98 + } + Switch { + inputs 2 + which {{quality i}} + name Switch2 + xpos 2849 + ypos 103 + } + Dot { + name Dot75 + xpos 3248 + ypos 106 + } + Switch { + inputs 2 + which {{blur_type i}} + name Switch1 + xpos 3214 + ypos 842 + } + Output { + name Output1 + xpos 3214 + ypos 1164 + } + Viewer { + frame 316 + input_process false + name Viewer1 + xpos 3464 + ypos 1164 + } +end_group diff --git a/gizmos/Filter/mosaic.gizmo b/gizmos/Filter/mosaic.gizmo new file mode 100644 index 0000000..116ff94 --- /dev/null +++ b/gizmos/Filter/mosaic.gizmo @@ -0,0 +1,47 @@ +#! C:/Program Files/Nuke8.0v5/nuke-8.0.v5.dll -nx +version 8.0 v5 +Gizmo { + tile_color 0x55bfffff + addUserKnob {20 pixelate l Pixelate} + addUserKnob {7 amount l Amount R 1 50} + amount 14.8 +} + Input { + inputs 0 + name Input1 + xpos -62 + ypos -176 + } + Reformat { + type "to box" + box_width {{format.w/amount}} + box_height {{format.h/amount}} + box_fixed true + name Reformat2 + selected true + xpos -62 + ypos -121 + } + Crop { + box {0 0 {"int (parent.Reformat2.box_width)"} {"int (parent.Reformat2.box_height)"}} + name Crop1 + xpos -62 + ypos -75 + } + Reformat { + type "to box" + box_width {{Input1.format.w}} + box_height {{Input1.format.h}} + box_fixed true + filter Impulse + name Reformat1 + xpos -62 + ypos -30 + } + Output { + name Output1 + xpos -62 + ypos 36 + } +end_group + diff --git a/gizmos/Filter/vectorBlurGizmo.gizmo b/gizmos/Filter/vectorBlurGizmo.gizmo new file mode 100644 index 0000000..95cf1b1 --- /dev/null +++ b/gizmos/Filter/vectorBlurGizmo.gizmo @@ -0,0 +1,86 @@ +#! C:/Program Files/Nuke5.0v2/Nuke5.0.exe -nx +version 5.0200 +Gizmo { + inputs 2 + lock_connections true + addUserKnob {20 vectTab l VectorBlurGizmo} + addUserKnob {6 VectorPremult l "Vector Premultiply" 0} + VectorPremult true + addUserKnob {30 add l Add t "Add to vector information"} + addUserKnob {26 "" l ""} + addUserKnob {7 strength l Strength t "Intensity of motion Blur\t" R 0 100} + strength 6 + addUserKnob {7 offset l Offset t "Shutter starts at frame + this" R -1 0} + offset -0.5 + addUserKnob {7 growbbox l "Grow BBox" t "Add this many pixels to the outside edge of the image" R 0 100} + addUserKnob {26 "" l ""} + addUserKnob {7 mix l Mix} + mix 1 +} + Input { + inputs 0 + name Colour + xpos 573 + ypos 45 + number 1 + } +set N26df5eb0 [stack 0] + Input { + inputs 0 + name Motion + xpos 413 + ypos 47 + } +set N1d48fe80 [stack 0] + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name alphaCopy + xpos 653 + ypos 98 + } + Premult { + name motionPremult + xpos 653 + ypos 159 + } +push $N1d48fe80 + Switch { + inputs 2 + which {{parent.VectorPremult}} + name motionSwitch + xpos 413 + ypos 132 + } +push $N26df5eb0 + Copy { + inputs 2 + from0 rgba.red + to0 forward.u + from1 rgba.green + to1 forward.v + name vectorCopy + xpos 506 + ypos 207 + } + VectorBlur { + uv motion + constant {{parent.add.u} {parent.add.v}} + scale {{parent.strength}} + offset {{parent.offset}} + grow_bbox {{parent.growbbox}} + method forward + alpha rgba.alpha + maskChannel -rgba.alpha + mix {{parent.mix}} + name vectorBlur + xpos 506 + ypos 259 + } + Output { + name Output1 + xpos 506 + ypos 360 + } +end_group diff --git a/gizmos/Filter/zBlurGizmo.gizmo b/gizmos/Filter/zBlurGizmo.gizmo new file mode 100644 index 0000000..63e191d --- /dev/null +++ b/gizmos/Filter/zBlurGizmo.gizmo @@ -0,0 +1,61 @@ +#! C:/Program Files/Nuke5.0v2/Nuke5.0.exe -nx +version 5.0200 +Gizmo { + inputs 2 + lock_connections true + addUserKnob {20 zBlurGizmo} + addUserKnob {6 focalSetup l "Focal Plane Setup"} + addUserKnob {6 occlusion l Occlusion t "If checked, further objects will not blur over nearer ones"} + addUserKnob {26 "" l ""} + addUserKnob {7 focalPlane l "Focal Plane" R 0 5} + focalPlane 1 + addUserKnob {7 depthField l "Depth Of Field"} + depthField 0.5 + addUserKnob {26 "" l ""} + addUserKnob {7 size l Size t "Size of blur at infinite depth" R 1 100} + size 1.5 + addUserKnob {7 maxSize l "Max Size" t "Filter Size will be clipped at this value" R 1 100} + maxSize 15 + addUserKnob {7 filter l "Filter Shape"} +} + Input { + inputs 0 + name DepthMap + xpos 416 + ypos 56 + } + Input { + inputs 0 + name through + xpos 587 + ypos 68 + number 1 + } + Copy { + inputs 2 + from0 rgba.red + to0 depth.Z + name DepthCopy + xpos 506 + ypos 117 + } + ZBlur { + math far=0 + occlusion {{parent.occlusion}} + setup_mode {{parent.focalSetup}} + center {{parent.focalPlane}} + dof {{parent.depthField}} + size {{parent.size}} + max_size {{parent.maxSize}} + shape {{parent.filter}} + name ZBlur + selected true + xpos 506 + ypos 187 + } + Output { + name Output1 + xpos 506 + ypos 287 + } +end_group diff --git a/gizmos/Image/CWSlate.gizmo b/gizmos/Image/CWSlate.gizmo new file mode 100644 index 0000000..4b8a69e --- /dev/null +++ b/gizmos/Image/CWSlate.gizmo @@ -0,0 +1,6552 @@ +#! C:/Program Files/Nuke10.0v1/nuke-10.0.1.dll -nx +version 10.0 v1 +Gizmo { + inputs 2 + tile_color 0xffff00ff + addUserKnob {20 main l "Shot Information"} + addUserKnob {20 st_main l Main n 1} + addUserKnob {4 mode l Mode M {"from root" "form image" ""}} + mode "form image" + addUserKnob {41 proj_logo_c l "Project Choice" T control_font.proj_logo_c} + addUserKnob {41 scale_2 l "Proxy Scale" T proxy_scale.scale} + addUserKnob {41 slate_frame l "Start At" T startframe.slate_frame} + addUserKnob {41 font_color l "Font color" T control_font.font_color} + addUserKnob {41 font_color_panelDropped l "expand font colour" T control_font.font_color_panelDropped} + addUserKnob {41 c_font_size l "Font Size" T control_font.c_font_size} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 crop_set l "Cropping Settings" n 1} + addUserKnob {26 t_crop_off l "Crop Toggle" T ""} + addUserKnob {6 ratio_on l "" -STARTLINE} + addUserKnob {26 treblack l "Remove Black" T ""} + addUserKnob {6 re_black l "" -STARTLINE} + re_black true + addUserKnob {41 ratio_choice l "Ratio Choice" T ratio_control.ratio_choice} + addUserKnob {41 t_value l Transparency T ratio_control.t_value} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 proj_more l "Project Logo Settings" n 1} + proj_more 0 + addUserKnob {26 t_pro_logo l "Select Logo" T ""} + addUserKnob {6 pro_logo_on l "" -STARTLINE} + addUserKnob {41 file l File T Project_Logo.file} + addUserKnob {41 translate l Translate T Project_Logo_t.translate} + addUserKnob {41 scale l Scale T Project_Logo_t.scale} + addUserKnob {41 rotate l Rotate T Project_Logo_t.rotate} + addUserKnob {20 endGroup_4 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 comp_more l "Company Logo Settings" n 1} + comp_more 0 + addUserKnob {26 s_comp_logo l "Select Logo" T ""} + addUserKnob {6 cp_logo l "" -STARTLINE} + addUserKnob {41 file_1 l File T Company_Logo.file} + addUserKnob {41 translate_1 l Translate T Company_Logo_t.translate} + addUserKnob {41 scale_1 l Scale T Company_Logo_t.scale} + addUserKnob {41 rotate_1 l Rotate T Company_Logo_t.rotate} + addUserKnob {20 endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 g_shot_infor l "Shot Information Position" n 1} + g_shot_infor 0 + addUserKnob {41 left_p l "Left Column" T control_font.left_p} + addUserKnob {41 p_center l "Center Column" T control_font.p_center} + addUserKnob {41 p_right l "Right Column" T control_font.p_right} + addUserKnob {20 endGroup_5 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 shot_infor_set l "Edit Shot Information" n 1} + addUserKnob {26 infor_shot l Name T ""} + addUserKnob {41 shot_asset l "" -STARTLINE T control_font.shot_asset} + addUserKnob {41 shot_on l "" -STARTLINE T TextFields.shot_on} + addUserKnob {41 plate_shot l "" -STARTLINE T TextFields.plate_shot} + addUserKnob {26 infor_artist l Artist T ""} + addUserKnob {41 aritist_on l "" -STARTLINE T TextFields.aritist_on} + addUserKnob {41 plate_aritist l "" -STARTLINE T TextFields.plate_aritist} + addUserKnob {26 infor_tc l Timecode T ""} + addUserKnob {41 tc_on l "" -STARTLINE T TextFields.tc_on} + addUserKnob {41 plate_tc l "" -STARTLINE T TextFields.plate_tc} + addUserKnob {41 choice_content l Content T TextFields.choice_content} + addUserKnob {26 st_cont l " " T ""} + addUserKnob {41 plate_content l "" -STARTLINE T TextFields.plate_content} + addUserKnob {41 choice_dmpt l Department T TextFields.choice_dmpt} + addUserKnob {26 st_dmpt l " " T ""} + addUserKnob {41 plate_dmpt l "" -STARTLINE T TextFields.plate_dmpt} + addUserKnob {26 infor_pub l Publish T ""} + addUserKnob {41 pub_on l "" -STARTLINE T TextFields.pub_on} + addUserKnob {41 plate_pub l "" -STARTLINE T TextFields.plate_pub} + addUserKnob {26 infor_ver l Version T ""} + addUserKnob {41 vers_on l "" -STARTLINE T TextFields.vers_on} + addUserKnob {41 plate_vers l "" -STARTLINE T TextFields.plate_vers} + addUserKnob {26 infor_rate l Rate T ""} + addUserKnob {41 rate_on l "" -STARTLINE T TextFields.rate_on} + addUserKnob {41 plate_rate l "" -STARTLINE T TextFields.plate_rate} + addUserKnob {20 endGroup_3 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {32 Chad l "slate v1.3" t cgspread技术支持 T "start http://nuke.cgspread.com" +STARTLINE} + addUserKnob {26 Version l "" -STARTLINE T " - by weijer"} + addUserKnob {20 slate l "Slate Frame"} + addUserKnob {20 st_infor_chart l "Color Rendition Chart" n 1} + addUserKnob {26 t_chart l "Chart Toggle" T ""} + addUserKnob {6 colorchart l "" t "Color Rendition Chart" -STARTLINE} + colorchart true + addUserKnob {41 colorspace_in l "Chart LUT" T ColorRenditionChart_ColorSpace.colorspace_in} + addUserKnob {41 barintensity l "ColorBars Intensity" T ColorBarsTester.barintensity} + addUserKnob {41 colorspace_in_1 l "ColorBars LUT" T BarsLinearized.colorspace_in} + addUserKnob {41 colorspace_in_2 l "Ramp LUT" T RampLinearized.colorspace_in} + addUserKnob {20 endGroup_6 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 st_infor_s l "Slate Information" n 1} + addUserKnob {41 s_font_size l "Font Size" T control_font.s_font_size} + addUserKnob {12 TextPositionOffset l "Text Offset"} + TextPositionOffset {-400 50} + addUserKnob {26 st_shot l Name T ""} + addUserKnob {41 st_shot_asset l "" -STARTLINE T control_font.shot_asset} + addUserKnob {41 shot_on_st l "" -STARTLINE T TextFields.shot_on} + addUserKnob {41 plate_shot_st l "" -STARTLINE T TextFields.plate_shot} + addUserKnob {41 choice_content_st l Content T TextFields.choice_content} + addUserKnob {26 st_content l " " T ""} + addUserKnob {41 plate_content_st l "" -STARTLINE T TextFields.plate_content} + addUserKnob {41 plate_status l Status T TextFields.plate_status} + addUserKnob {41 CustomStatus l " Custom Status" T TextFields.CustomStatus} + addUserKnob {41 StatusColor l "Status Color" T TextFields.StatusColor} + addUserKnob {41 StatusColor_panelDropped l "panel dropped state" T TextFields.StatusColor_panelDropped} + addUserKnob {1 s_project l Project} + addUserKnob {26 st_vers l Version T ""} + addUserKnob {41 vers_on_st l "" -STARTLINE T TextFields.vers_on} + addUserKnob {41 plate_vers_st l "" -STARTLINE T TextFields.plate_vers} + addUserKnob {26 st_date l Date T ""} + addUserKnob {41 pub_on_st l "" -STARTLINE T TextFields.pub_on} + addUserKnob {41 plate_pub_st l "" -STARTLINE T TextFields.plate_pub} + addUserKnob {26 st_artist l Artist T ""} + addUserKnob {41 aritist_on_st l "" -STARTLINE T TextFields.aritist_on} + addUserKnob {41 plate_aritist_1 l "" -STARTLINE T TextFields.plate_aritist} + addUserKnob {41 choice_dmpt_1 l Department T TextFields.choice_dmpt} + addUserKnob {26 st_dmpt_s l " " T ""} + addUserKnob {41 plate_dmpt_1 l "" -STARTLINE T TextFields.plate_dmpt} + addUserKnob {1 s_script l Script} + addUserKnob {41 handlesIN l "Handle In" T Handles.handlesIN} + addUserKnob {41 handlesOUT l "Handle Out" -STARTLINE T Handles.handlesOUT} + addUserKnob {41 DisplayHandles l "Display Handles" -STARTLINE T Handles.DisplayHandles} + addUserKnob {41 chinese_choice l "Note Font" T FontPath.chinese_choice} + addUserKnob {41 plate_description1 l "Notes Line 1" T TextFields.plate_description1} + addUserKnob {41 plate_description2 l "Line 2" T TextFields.plate_description2} + addUserKnob {41 plate_description3 l "Line 3" T TextFields.plate_description3} + addUserKnob {41 plate_description4 l "Line 4" T TextFields.plate_description4} + addUserKnob {41 translate_2 l "Logo Translate" T LogoPositionOffset.translate} + addUserKnob {6 blackwhite l "Black And White" -STARTLINE} + blackwhite true + addUserKnob {18 BGColor l "BackGround Color"} + BGColor 0.025 + addUserKnob {6 BGColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {26 t_mos l MOS T ""} + addUserKnob {6 MOS l "" -STARTLINE} + MOS true + addUserKnob {20 endGroup_7 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 st_thumbnails l "Thumbnails Settings" n 1} + addUserKnob {7 thumbnailssize l Scale R 0.1 4} + thumbnailssize 1 + addUserKnob {12 ThumbnailOffset l "Position Offset"} + addUserKnob {20 endGroup_8 l endGroup n -1} + addUserKnob {20 settings l Settings} + addUserKnob {41 SystemOS l "OS Font Path" T FontPath.SystemOS} + addUserKnob {41 regfont l "Custom Regular Font" T FontPath.regfont} + addUserKnob {41 boldfont l "Custom Bold Font" T FontPath.boldfont} +} + BackdropNode { + inputs 0 + name BG + tile_color 0x8e8e3800 + label BG + note_font_size 42 + xpos -8761 + ypos 5037 + bdwidth 310 + bdheight 301 + } + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x8e388e00 + label santi_logo + note_font_size 42 + xpos -983 + ypos -838 + bdwidth 3104 + bdheight 1273 + } + BackdropNode { + inputs 0 + name BackdropNode11 + tile_color 0xaaaaaaff + label "reformat(from img)" + note_font_size 42 + xpos -3472 + ypos -1467 + bdwidth 829 + bdheight 329 + } + BackdropNode { + inputs 0 + name BackdropNode12 + tile_color 0xaaaaaaff + label "reformat(from root)" + note_font_size 42 + xpos 2173 + ypos -1475 + bdwidth 822 + bdheight 319 + } + BackdropNode { + inputs 0 + name BackdropNode13 + tile_color 0xaaaaaaff + label "ratio(from root)" + note_font_size 42 + xpos 2407 + ypos -1078 + bdwidth 581 + bdheight 468 + } + BackdropNode { + inputs 0 + name BackdropNode14 + tile_color 0xaaaaaaff + label "ratio(from img)" + note_font_size 42 + xpos -3426 + ypos -1078 + bdwidth 581 + bdheight 468 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0xaaaaaa00 + label VHQ_logo + note_font_size 42 + xpos -889 + ypos 827 + bdwidth 1538 + bdheight 1015 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x18400ff + label "Text\nControls" + note_font_size 42 + xpos -3314 + ypos 3209 + bdwidth 417 + bdheight 1296 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x7c5d00ff + label "Show\nLogo" + note_font_size 42 + xpos -8080 + ypos 2284 + bdwidth 247 + bdheight 593 + } + BackdropNode { + inputs 0 + name CheckerBoard + tile_color 0x222222ff + label CheckerBoard + note_font_size 42 + xpos -9945 + ypos 2051 + bdwidth 676 + bdheight 779 + } + BackdropNode { + inputs 0 + name Left_text + tile_color 0x8e388e00 + note_font_size 42 + xpos 724 + ypos 2568 + bdwidth 590 + bdheight 678 + } + BackdropNode { + inputs 0 + name Left_text1 + tile_color 0x8e388e00 + note_font_size 42 + xpos -1889 + ypos 2632 + bdwidth 399 + bdheight 480 + } + BackdropNode { + inputs 0 + name Logo + tile_color 0x7f2f00ff + label "Company\nLogo" + note_font_size 42 + xpos -7838 + ypos 782 + bdwidth 427 + bdheight 676 + } + BackdropNode { + inputs 0 + name Testers + tile_color 0x7f005fff + label Testers + note_font_size 42 + xpos -8978 + ypos 1103 + bdwidth 580 + bdheight 1440 + } + BackdropNode { + inputs 0 + name TextSlate + tile_color 0x4f7fff + label "Text Slate" + note_font_size 42 + xpos -7287 + ypos 2062 + bdwidth 3827 + bdheight 3213 + } + BackdropNode { + inputs 0 + name Thumbnails + tile_color 0x7171c600 + label "6 Thumbnails" + note_font_size 42 + xpos -6291 + ypos 1177 + bdwidth 1116 + bdheight 542 + } + BackdropNode { + inputs 0 + name center_text1 + tile_color 0x8e388e00 + note_font_size 42 + xpos 571 + ypos 3277 + bdwidth 1626 + bdheight 1070 + } + BackdropNode { + inputs 0 + name center_text2 + tile_color 0x8e388e00 + note_font_size 42 + xpos 806 + ypos 4402 + bdwidth 305 + bdheight 404 + } + BackdropNode { + inputs 0 + name center_text3 + tile_color 0x8e388e00 + note_font_size 42 + xpos -2318 + ypos 3181 + bdwidth 1735 + bdheight 1065 + } + BackdropNode { + inputs 0 + name center_text4 + tile_color 0x8e388e00 + note_font_size 42 + xpos -2030 + ypos 4282 + bdwidth 647 + bdheight 432 + } + Read { + inputs 0 + file E:/SlateBoard/setups/PSD/VHQ_LOGO.psd + format "1613 684 0 0 1613 684 1 " + origset true + on_error black + version 6 + premultiplied true + name CompanyLogo + tile_color 0xff0000ff + xpos -7317 + ypos 1008 + disable {{CompanyLogo.format 1 x1000 1}} + } + Dot { + inputs 0 + name Dot95 + xpos -6791 + ypos 4636 + } + Constant { + inputs 0 + channels {-rgba.red -rgba.green -rgba.blue none} + color {1 0 0 0} + format "256 256 0 0 256 256 1 square_256" + name Dot_Format + xpos -6436 + ypos 4406 + } +set N62caa800 [stack 0] + Radial { + area {0 0 {input.format.w} {input.format.h}} + softness 0 + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Circle6 + xpos -6904 + ypos 4566 + } +push $N62caa800 + Radial { + area {0 0 {input.format.w} {input.format.h}} + softness 0 + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Circle5 + xpos -6786 + ypos 4556 + } +push $N62caa800 + Radial { + area {0 0 {input.format.w} {input.format.h}} + softness 0 + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Circle3 + xpos -6660 + ypos 4556 + } +push $N62caa800 + Radial { + area {0 0 {input.format.w} {input.format.h}} + softness 0 + color {{parent.TextFields.StatusColor.main} {parent.TextFields.StatusColor.main} {parent.TextFields.StatusColor.main} 1} + name Circle2 + xpos -6315 + ypos 4561 + } +push $N62caa800 + Radial { + area {0 0 {input.format.w} {input.format.h}} + softness 0 + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Circle4 + xpos -6436 + ypos 4561 + } +push $N62caa800 + Radial { + area {0 0 {input.format.w} {input.format.h}} + softness 0 + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Circle1 + xpos -6555 + ypos 4561 + } + Switch { + inputs 7 + which {{TextFields.plate_status}} + name StatusSwitcher + xpos -6436 + ypos 4670 + } + set C62d19a80 [stack 0] + Reformat { + type scale + scale {1 {"\[exists parent.input]==1?parent.input.pixel_aspect:root.pixel_aspect"}} + resize distort + black_outside true + name Reformat_PixelAspect + xpos -6436 + ypos 4732 + } + set C62cecc00 [stack 0] + Reformat { + type "to box" + box_width {{"\[value Text_Status.size]" i}} + box_height {{"\[value Text_Status.size]" i}} + box_fixed true + scale 0.08 + resize fit + center false + name DotSize + xpos -6436 + ypos 4832 + } + Transform { + translate {{"\[value Text_ShotName.translate.x]" i} {"\[value Text_Status.translate.y]-\[value DotPosition.center.y]" i}} + center {{input.format.w/2 i} {input.format.h/2.25 i}} + name DotPosition + xpos -6436 + ypos 4863 + } + Input { + inputs 0 + name MetaData + xpos -498 + ypos 2293 + number 1 + } + Dot { + name Dot12 + xpos -464 + ypos 2454 + } +set N62d33400 [stack 0] + PostageStamp { + name PostageStamp2 + xpos -5614 + ypos 2353 + hide_input true + postage_stamp true + } + Input { + inputs 0 + name Input + xpos -444 + ypos -2437 + addUserKnob {20 main l Main} + addUserKnob {14 format l Format R 0 100} + format {{Input.format.w} {Input.format.h}} + addUserKnob {16 pixel_aspect l "Pixel aspect"} + pixel_aspect {{Input.format.pixel_aspect}} + addUserKnob {14 framerange l Framerange R 0 100} + framerange {{input.first} {input.last}} + addUserKnob {16 s_frame l "Start Frame"} + s_frame 1001 + } + Reformat { + type scale + name proxy_scale + tile_color 0xff + xpos -444 + ypos -2206 + disable {{1-parent.mode x1000 1 1}} + } + Remove { + channels alpha + name Remove1 + xpos -444 + ypos -2115 + } + Dot { + name Dot98 + xpos -410 + ypos -1948 + } +set N62d5dc00 [stack 0] + PostageStamp { + name PostageStamp3 + xpos -5835 + ypos 2122 + hide_input true + postage_stamp true + } + Shuffle { + red black + green black + blue black + alpha black + name Shuffle1 + xpos -5835 + ypos 2234 + } + CopyMetaData { + inputs 2 + mergeMode Meta+Image + metadatafilterMode "keys only" + name CopyimgMetaData4 + tile_color 0xff + xpos -5835 + ypos 2377 + } + Reformat { + type "to box" + box_width {{"(\[exists parent.input]==1?parent.input.format.w:root.format.w)*proxy_scale.scale"}} + box_height {{"(\[exists parent.input]==1?parent.input.format.h:root.format.h)*proxy_scale.scale"}} + box_fixed true + box_pixel_aspect {{"\[exists parent.input]==1?parent.input.format.pixel_aspect:root.format.pixel_aspect"}} + resize distort + center false + filter Impulse + name CurrentFormat1 + xpos -5835 + ypos 2432 + } +set N62d5cc00 [stack 0] + Dot { + name Dot96 + xpos -6162 + ypos 2435 + } + Text { + message Project: + font "\[value ArialBold.font]" + size {{"\[value Text_Version.size]"}} + xjustify right + Transform 1 + translate {{"root.proxy==0?Text_Version.translate.x-(\[value DotSize.format.h]/(\[exists parent.input]==1?parent.input.pixel_aspect:root.pixel_aspect)):Text_Version.translate.x-(\[value DotSize.format.h]/(\[exists parent.input]==1?parent.input.pixel_aspect:root.pixel_aspect))/root.proxy_scale"} {"\[value Text_project.translate.y]"}} + color {0.5 0.5 0.5 1} + name Title_Version1 + tile_color 0x7fff00ff + xpos -6196 + ypos 3237 + } + Text { + message Version: + font "\[value ArialBold.font]" + size {{"\[value Text_Version.size]"}} + xjustify right + Transform 1 + translate {{"root.proxy==0?Text_Version.translate.x-(\[value DotSize.format.h]/(\[exists parent.input]==1?parent.input.pixel_aspect:root.pixel_aspect)):Text_Version.translate.x-(\[value DotSize.format.h]/(\[exists parent.input]==1?parent.input.pixel_aspect:root.pixel_aspect))/root.proxy_scale"} {"\[value Text_Version.translate.y]"}} + color {0.5 0.5 0.5 1} + name Title_Version + tile_color 0x7fff00ff + xpos -6196 + ypos 3290 + } + Text { + message Date: + font "\[value Arial.font]" + size {{"\[value Text_Date.size]"}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]"} {"\[value Text_Date.translate.y]"}} + color {0.5 0.5 0.5 1} + name Title_Date + tile_color 0x7fff00ff + xpos -6196 + ypos 3362 + } + Text { + message Artist: + font "\[value Arial.font]" + size {{"\[value Text_Artist.size]"}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]"} {"\[value Text_Artist.translate.y]"}} + color {0.5 0.5 0.5 1} + name Title_Artist + tile_color 0x7fff00ff + xpos -6196 + ypos 3526 + } + Text { + message Department: + font "\[value Arial.font]" + size {{"\[value Text_Artist.size]"}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]"} {"\[value Text_department.translate.y]"}} + color {0.5 0.5 0.5 1} + name title_department + tile_color 0x7fff00ff + xpos -6196 + ypos 3695 + } + Text { + message Script: + font "\[value Arial.font]" + size {{"\[value Text_Script.size]" i}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]" i} {"\[value Text_Script.translate.y]" i}} + color {0.5 0.5 0.5 1} + name Title_Script + tile_color 0x7fff00ff + xpos -6196 + ypos 4083 + } +set N62db9800 [stack 0] + Text { + message "CGI Version:" + font "\[value Arial.font]" + size {{"\[value Text_CGIversion.size]" i}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]" i} {"\[value Text_CGIversion.translate.y]" i}} + color {0.5 0.5 0.5 1} + name Title_CGIversion + tile_color 0x7fff00ff + xpos -6196 + ypos 4119 + } +push $N62db9800 + Dot { + name Dot97 + xpos -6322 + ypos 4086 + } + Switch { + inputs 2 + which {{CGIver.CGIverdisplay==0?(CGIver.ver==0?0:1):CGIver.CGIverdisplay==1?1:0 i}} + name CGIversion_Switch + tile_color 0xff0000ff + xpos -6356 + ypos 4119 + } + set C62d19600 [stack 0] +set N62d19600 [stack 0] + Text { + message "Focal Length:" + font "\[value Arial.font]" + size {{"\[value Text_FocalLength.size]" i}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]" i} {"\[value Text_FocalLength.translate.y]" i}} + color {0.5 0.5 0.5 1} + name Title_FocalLength + tile_color 0x7fff00ff + xpos -6196 + ypos 4155 + } +push $N62d19600 + Switch { + inputs 2 + which {{FocalLength.focaldisplay==0?(FocalLength.focalmm==0?0:1):FocalLength.focaldisplay==1?1:0 i}} + name FocalLength_Switch + tile_color 0xff0000ff + xpos -6356 + ypos 4155 + } + set C62d19180 [stack 0] + Text { + message "Total Cut Length:" + font "\[value Arial.font]" + size {{"\[value Text_CutLength.size]" i}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]" i} {"\[value Text_CutLength.translate.y]" i}} + color {0.5 0.5 0.5 1} + name Title_CutLength + tile_color 0x7fff00ff + xpos -6196 + ypos 4191 + } +set N62df7c00 [stack 0] + Text { + message "Handles Head | Tail:" + font "\[value Arial.font]" + size {{"\[value Text_Handles.size]" i}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]" i} {"\[value Text_Handles.translate.y]" i}} + color {0.5 0.5 0.5 1} + name Title_Handles + tile_color 0x7fff00ff + xpos -6196 + ypos 4227 + } +push $N62df7c00 + Dot { + name Dot99 + xpos -6322 + ypos 4194 + } + Switch { + inputs 2 + which {{"Handles.DisplayHandles==0?\[exists parent.input]==1?((\[value Handles.handlesIN]||\[value Handles.handlesOUT])==0?0:1):0:Handles.DisplayHandles==1?1:0"}} + name Handles_Switch + tile_color 0xff0000ff + xpos -6356 + ypos 4227 + } + set C62d18d00 [stack 0] + Text { + message Notes: + font "\[value Arial.font]" + size {{"\[value Text_Description_L1.size]" i}} + xjustify right + Transform 1 + translate {{"\[value Title_Version.translate.x]" i} {"\[value Text_Description_L1.translate.y]" i}} + color {0.5 0.5 0.5 1} + name Title_Description + tile_color 0x7fff00ff + xpos -6196 + ypos 4263 + } + Dot { + name Dot100 + xpos -6162 + ypos 4830 + } +push $N62d5cc00 + Text { + message "\[value parent.TextFields.plate_shot]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{root.proxy==0?(CurrentFormat.format.w/2)+(Text_Position.positionoffset.x):((CurrentFormat.format.w/2)+(Text_Position.positionoffset.x*root.proxy_scale))/root.proxy_scale} {root.proxy==0?((CurrentFormat.format.h*0.85)+Text_Position.positionoffset.y):((CurrentFormat.format.h*0.85)+(Text_Position.positionoffset.y*root.proxy_scale))/root.proxy_scale}} + name Text_ShotName_input + tile_color 0xff5f00ff + xpos -5786 + ypos 2467 + } +push $N62d5cc00 + Text { + message "\[expr \[value S_mode.which]==1?\"\[lindex \[split \[file tail \[file rootname \[metadata input/filename]]] \".\"] 0]\":\"\[lindex \[split \[file tail \[file rootname \[value root.name]]] \".\"] 0]\"]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((18+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{root.proxy==0?(CurrentFormat.format.w/2)+(Text_Position.positionoffset.x*width/2048):((CurrentFormat.format.w/2)+(Text_Position.positionoffset.x*root.proxy_scale))/root.proxy_scale} {root.proxy==0?((CurrentFormat.format.h*0.85)+Text_Position.positionoffset.y*width/2048):((CurrentFormat.format.h*0.85)+(Text_Position.positionoffset.y*root.proxy_scale))/root.proxy_scale}} + name Text_ShotName + tile_color 0xff5f00ff + xpos -5894 + ypos 2468 + } + Switch { + inputs 2 + which {{parent.TextFields.shot_on}} + name Switch24 + xpos -5835 + ypos 2518 + addUserKnob {20 User} + addUserKnob {12 translate l size} + translate {0 {input.translate.y}} + } +set N62d18880 [stack 0] + Text { + inject true + message "\[value TextFields.plate_content]" + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName10 + tile_color 0xff5f00ff + xpos -4841 + ypos 2572 + } + Dot { + name Dot111 + xpos -4807 + ypos 2747 + } +push $N62d18880 + Text { + inject true + message mattpainting + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName9 + tile_color 0xff5f00ff + xpos -4964 + ypos 2570 + } +push $N62d18880 + Text { + inject true + message matchmove + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName8 + tile_color 0xff5f00ff + xpos -5084 + ypos 2571 + } +push $N62d18880 + Text { + inject true + message animation + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName7 + tile_color 0xff5f00ff + xpos -5215 + ypos 2573 + } +push $N62d18880 + Text { + inject true + message previz + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName6 + tile_color 0xff5f00ff + xpos -5353 + ypos 2571 + } +push $N62d18880 + Text { + inject true + message model + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName5 + tile_color 0xff5f00ff + xpos -5484 + ypos 2572 + } +push $N62d18880 + Text { + inject true + message texture + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName4 + tile_color 0xff5f00ff + xpos -5613 + ypos 2573 + } +push $N62d18880 + Text { + inject true + message lighting + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName3 + tile_color 0xff5f00ff + xpos -5733 + ypos 2574 + } +push $N62d18880 + Text { + inject true + message comp + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName2 + tile_color 0xff5f00ff + xpos -5835 + ypos 2576 + } +push $N62d18880 + Text { + inject true + message paint + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_ShowName1 + tile_color 0xff5f00ff + xpos -5964 + ypos 2577 + } +push $N62d18880 + Text { + inject true + message roto + font "\[value Arial.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((16+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + color {1 1 1 1} + name Text_ShowName + tile_color 0xff5f00ff + xpos -6097 + ypos 2579 + } + Switch { + inputs 11 + which {{parent.TextFields.choice_content}} + name Switch21 + xpos -5835 + ypos 2744 + addUserKnob {20 User} + addUserKnob {12 translate l size} + translate {0 {input.translate.y}} + } + Text { + message "\[value TextFields.plate_task]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((10+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((10+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((10+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((10+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + kerning 0.2 + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + color 0.5 + name Text_Task + tile_color 0xff5f00ff + xpos -5835 + ypos 2932 + } +set N62ebf000 [stack 0] + Dot { + name Dot101 + xpos -5561 + ypos 2935 + } + Dot { + name Dot102 + xpos -5561 + ypos 3210 + } +push $N62ebf000 + Text { + message "\[expr \[value StatusSwitcher.which]==5?\"\[knob TextFields.CustomStatus]\":\"\[knob TextFields.plate_status]\"]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + yjustify center + Transform 1 + translate {{"\[exists parent.input]==0?root.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):(((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))/root.proxy_scale)+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?(CurrentFormat.format.w/2)+(DotSize.width*1.5)+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*root.pixel_aspect)+(Text_Position.positionoffset.x*width/2048)):parent.input.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))/root.proxy_scale))+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?((CurrentFormat.format.w/2)+(DotSize.width*1.5))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*parent.input.pixel_aspect)+(Text_Position.positionoffset.x*width/2048))"} {input.translate.y-((size)*1.2)}} + color {{parent.TextFields.StatusColor.main} {parent.TextFields.StatusColor.main} {parent.TextFields.StatusColor.main} 1} + name Text_Status1 + tile_color 0xff5f00ff + xpos -5607 + ypos 3031 + } +push $N62ebf000 + Text { + message "\[knob TextFields.plate_status]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + yjustify center + Transform 1 + translate {{"\[exists parent.input]==0?root.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):(((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))/root.proxy_scale)+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?(CurrentFormat.format.w/2)+(DotSize.width*1.5)+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*root.pixel_aspect)+(Text_Position.positionoffset.x*width/2048)):parent.input.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))/root.proxy_scale))+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?((CurrentFormat.format.w/2)+(DotSize.width*1.5))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*parent.input.pixel_aspect)+(Text_Position.positionoffset.x*width/2048))"} {input.translate.y-((size)*1.2)}} + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Text_Status5 + tile_color 0xff5f00ff + xpos -5714 + ypos 3032 + } +push $N62ebf000 + Text { + message "\[knob TextFields.plate_status]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + yjustify center + Transform 1 + translate {{"\[exists parent.input]==0?root.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):(((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))/root.proxy_scale)+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?(CurrentFormat.format.w/2)+(DotSize.width*1.5)+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*root.pixel_aspect)+(Text_Position.positionoffset.x*width/2048)):parent.input.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))/root.proxy_scale))+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?((CurrentFormat.format.w/2)+(DotSize.width*1.5))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*parent.input.pixel_aspect)+(Text_Position.positionoffset.x*width/2048))"} {input.translate.y-((size)*1.2)}} + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Text_Status4 + tile_color 0xff5f00ff + xpos -5815 + ypos 3035 + } +push $N62ebf000 + Text { + message "\[knob TextFields.plate_status]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + yjustify center + Transform 1 + translate {{"\[exists parent.input]==0?root.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):(((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))/root.proxy_scale)+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?(CurrentFormat.format.w/2)+(DotSize.width*1.5)+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*root.pixel_aspect)+(Text_Position.positionoffset.x*width/2048)):parent.input.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))/root.proxy_scale))+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?((CurrentFormat.format.w/2)+(DotSize.width*1.5))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*parent.input.pixel_aspect)+(Text_Position.positionoffset.x*width/2048))"} {input.translate.y-((size)*1.2)}} + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Text_Status2 + tile_color 0xff5f00ff + xpos -5906 + ypos 3036 + } +push $N62ebf000 + Text { + message "\[knob TextFields.plate_status]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + yjustify center + Transform 1 + translate {{"\[exists parent.input]==0?root.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):(((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))/root.proxy_scale)+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?(CurrentFormat.format.w/2)+(DotSize.width*1.5)+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*root.pixel_aspect)+(Text_Position.positionoffset.x*width/2048)):parent.input.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))/root.proxy_scale))+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?((CurrentFormat.format.w/2)+(DotSize.width*1.5))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*parent.input.pixel_aspect)+(Text_Position.positionoffset.x*width/2048))"} {input.translate.y-((size)*1.2)}} + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Text_Status3 + tile_color 0xff5f00ff + xpos -6023 + ypos 3036 + } +push $N62ebf000 + Text { + message "\[knob TextFields.plate_status]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((4+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + yjustify center + Transform 1 + translate {{"\[exists parent.input]==0?root.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):(((CurrentFormat.format.w/2)+((DotSize.width*1.5)/root.pixel_aspect))/root.proxy_scale)+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?(CurrentFormat.format.w/2)+(DotSize.width*1.5)+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*root.pixel_aspect)+(Text_Position.positionoffset.x*width/2048)):parent.input.pixel_aspect!=1?(root.proxy==0?((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+((DotSize.width*1.5)/parent.input.pixel_aspect))/root.proxy_scale))+(Text_Position.positionoffset.x*width/2048)):(root.proxy==0?((CurrentFormat.format.w/2)+(DotSize.width*1.5))+(Text_Position.positionoffset.x*width/2048):((((CurrentFormat.format.w/2)+(DotSize.width*1.5))/root.proxy_scale)*parent.input.pixel_aspect)+(Text_Position.positionoffset.x*width/2048))"} {input.translate.y-((size)*1.2)}} + color {{parent.TextFields.StatusColor} {parent.TextFields.StatusColor} {parent.TextFields.StatusColor} 1} + name Text_Status + tile_color 0xff5f00ff + xpos -6150 + ypos 3037 + } +clone $C62d19a80 { + inputs 7 + xpos -5835 + ypos 3207 + selected false + } + Text { + message "\[expr \[value project_choice.which]==0?\"\[value parent.s_project]\":\"\[value control_font.proj_logo_c]\"]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {Text_Status.translate.y-(((size)*1.2)*2)}} + name Text_project + tile_color 0xff5f00ff + xpos -5835 + ypos 3312 + } +set N62f23000 [stack 0] + Text { + message "\[value TextFields.plate_vers]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {Text_project.translate.y-((size)*1.2)}} + name Text_Version_input + tile_color 0xff5f00ff + xpos -5722 + ypos 3378 + } +push $N62f23000 + Text { + message "\[expr \[value S_mode.which]==1?\"\[regexp -inline \"v\\\[0-9]+\" \[file tail \[file rootname \[metadata input/filename]]]]\":\"\[regexp -inline \"v\\\[0-9]+\" \[file tail \[file rootname \[value root.name]]]]\"]" + font "\[value ArialBold.font]" + size {{"(\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((12+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale)"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {Text_project.translate.y-((size)*1.2)}} + name Text_Version + tile_color 0xff5f00ff + xpos -5835 + ypos 3377 + } + Switch { + inputs 2 + which {{parent.TextFields.vers_on}} + name Switch27 + xpos -5835 + ypos 3435 + addUserKnob {20 User} + addUserKnob {12 translate l Translate} + translate {0 {input.translate.y}} + } +set N62d17b00 [stack 0] + Text { + message "\[value TextFields.plate_pub]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Date_input + tile_color 0xff5f00ff + xpos -5890 + ypos 3478 + } +push $N62d17b00 + Text { + message "\[expr \[value S_mode.which]==1?\"\[metadata input/mtime]\":\"\[value DateTimeFormat.formatdate] \[value DateTimeFormat.formattime]\"]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Date + tile_color 0xff5f00ff + xpos -5791 + ypos 3477 + } + Switch { + inputs 2 + which {{parent.TextFields.pub_on}} + name Switch30 + xpos -5835 + ypos 3542 + addUserKnob {20 User} + addUserKnob {12 translate l Translate} + translate {0 {input.translate.y}} + } +set N62d17680 [stack 0] + Text { + message "\[value TextFields.plate_aritist]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Artist1 + tile_color 0xff5f00ff + xpos -5721 + ypos 3629 + } +push $N62d17680 + Text { + message "\[expr \[value S_mode.which]==1?\"\[lindex \[split \[file tail \[file rootname \[metadata input/filename]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[metadata input/filename]]]]-1]]\":\"\[lindex \[split \[file tail \[file rootname \[value root.name]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[value root.name]]]]-1]]\"]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Artist + tile_color 0xff5f00ff + xpos -5835 + ypos 3626 + } + Switch { + inputs 2 + which {{parent.TextFields.aritist_on}} + name Switch23 + xpos -5835 + ypos 3697 + addUserKnob {20 User} + addUserKnob {12 translate l size} + translate {0 {input.translate.y}} + } +set N62d17200 [stack 0] + Text { + message "\[value TextFields.plate_dmpt]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department10 + tile_color 0xff5f00ff + xpos -4667 + ypos 3800 + } + Dot { + name Dot112 + xpos -4633 + ypos 3943 + } +push $N62d17200 + Text { + message "\[string map \{\"cmp\" \"Compositing\" \"comp\" \"Compositing\" \"previews\" \"Previz\" \"roto\" \"Roto\"\} \[value Text_department_auto.message] ]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department_auto_map + tile_color 0xff5f00ff + xpos -4862 + ypos 3859 + } +push $N62d17200 + Text { + message MotionGraphics + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department9 + tile_color 0xff5f00ff + xpos -4924 + ypos 3800 + } +push $N62d17200 + Text { + message Effects + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department8 + tile_color 0xff5f00ff + xpos -5046 + ypos 3799 + } +push $N62d17200 + Text { + message Mattepainting + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department7 + tile_color 0xff5f00ff + xpos -5170 + ypos 3799 + } +push $N62d17200 + Text { + message Animation + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department6 + tile_color 0xff5f00ff + xpos -5320 + ypos 3806 + } +push $N62d17200 + Text { + message Texturelighting + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department5 + tile_color 0xff5f00ff + xpos -5468 + ypos 3809 + } +push $N62d17200 + Text { + message Modeling + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department4 + tile_color 0xff5f00ff + xpos -5586 + ypos 3812 + } +push $N62d17200 + Text { + message Previz + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department3 + tile_color 0xff5f00ff + xpos -5712 + ypos 3810 + } +push $N62d17200 + Text { + message Matchmove + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department2 + tile_color 0xff5f00ff + xpos -5841 + ypos 3813 + } +push $N62d17200 + Text { + message Compositing + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department1 + tile_color 0xff5f00ff + xpos -5948 + ypos 3815 + } +push $N62d17200 + Text { + message RotoPaint + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department + tile_color 0xff5f00ff + xpos -6053 + ypos 3816 + } + Switch { + inputs 12 + which {{parent.TextFields.choice_dmpt}} + name Switch25 + xpos -5841 + ypos 3967 + addUserKnob {20 User} + addUserKnob {12 translate l size} + translate {0 {input.translate.y}} + } + Text { + message "\[expr \[value S_mode.which]==1?\"\[value parent.s_script]\":\"\[file tail \[knob root.name]]\"]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Script + tile_color 0xff5f00ff + xpos -5835 + ypos 4050 + } +set N63041400 [stack 0] + Text { + inject true + message "\[knob CGIver.ver]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]" i}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]" i} {input.translate.y-((size)*1.2) i}} + name Text_CGIversion + tile_color 0x7f2f00ff + xpos -5835 + ypos 4083 + } +push $N63041400 + Dot { + name Dot106 + xpos -5595 + ypos 4050 + } +clone $C62d19600 { + inputs 2 + xpos -5629 + ypos 4083 + selected false + } +set N62d16900 [stack 0] + Text { + message "\[knob FocalLength.focalmm] mm" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]" i}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]" i} {Text_CGIversion.translate.y-((size*CGIversion_Switch.which)*1.2) i}} + name Text_FocalLength + tile_color 0xff5f00ff + xpos -5835 + ypos 4119 + } +push $N62d16900 +clone $C62d19180 { + inputs 2 + xpos -5629 + ypos 4119 + selected false + } + Text { + message "\[value Handles.cutlength] frames" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {Text_FocalLength.translate.y-((size*FocalLength_Switch.which)*1.2)}} + name Text_CutLength + tile_color 0x7f2f00ff + xpos -5835 + ypos 4155 + } +set N63077800 [stack 0] + Text { + message "\[expr \[exists parent.input]==1?\[value Handles.handlesIN]:0] frames | \[expr \[exists parent.input]==1?\[value Handles.handlesOUT]:0] frames" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Handles + tile_color 0x7f2f00ff + xpos -5835 + ypos 4191 + } +push $N63077800 + Dot { + name Dot107 + xpos -5595 + ypos 4158 + } +clone $C62d18d00 { + inputs 2 + xpos -5629 + ypos 4191 + selected false + } + Text { + message "\[knob TextFields.plate_description1]" + font "\[expr \[value FontPath.c_choice]==0?\"\[value Arial.font]\":\"C:/Windows/Fonts/simhei.ttf\"]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {Text_Handles.translate.y-((size*Handles_Switch.which)*1.2)}} + name Text_Description_L1 + tile_color 0xff5f00ff + xpos -5835 + ypos 4254 + } + Text { + message "\[knob TextFields.plate_description2]" + font "\[expr \[value FontPath.c_choice]==0?\"\[value Arial.font]\":\"C:/Windows/Fonts/simhei.ttf\"]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Description_L2 + tile_color 0xff5f00ff + xpos -5835 + ypos 4301 + } + Text { + message "\[knob TextFields.plate_description3]" + font "\[expr \[value FontPath.c_choice]==0?\"\[value Arial.font]\":\"C:/Windows/Fonts/simhei.ttf\"]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Description_L3 + tile_color 0xff5f00ff + xpos -5835 + ypos 4350 + } + Text { + message "\[knob TextFields.plate_description4]" + font "\[expr \[value FontPath.c_choice]==0?\"\[value Arial.font]\":\"C:/Windows/Fonts/simhei.ttf\"]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_Description_L4 + tile_color 0xff5f00ff + xpos -5835 + ypos 4402 + } + Text { + opacity 0.25 + message "\[expr \[value InfoPlate.proxyon]==false?\"Resolution\":\"Proxy\\ \"]\[expr \[value InfoPlate.proxyon]==false?\"\":\[format %.2f \[value InfoPlate.proxyscal]]]\[expr \[value InfoPlate.proxyon]==false?\"\":\"\\:1\\ (\"]\[expr \[value InfoPlate.proxyon]==false?\"\":\[format %.0f \[value InfoPlate.proxyres.w]]]\[expr \[value InfoPlate.proxyon]==false?\"\":\"x\"]\[expr \[value InfoPlate.proxyon]==false?\"\":\[format %.0f \[value InfoPlate.proxyres.h]]]\[expr \[value InfoPlate.proxyon]==false?\"\":\")\"]\\n\[value InfoPlate.res.w]x\[value InfoPlate.res.h] • \[expr \[value InfoPlate.plate_aspect]==1?\"Square\\ Pixel\":\"Anamorphic\\ \"]\[expr \[value InfoPlate.plate_aspect]==1?\"\":\[value InfoPlate.plate_aspect]==2?2:\[format %.2f \[value InfoPlate.plate_aspect]]]\[expr \[value InfoPlate.plate_aspect]==1?\"\":\":1\"] • \[value root.fps]fps" + font "\[value Arial.font]" + size {{"((\[exists parent.input]==0?root.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((1+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((1+Text_Proprieties.size)/2.00))*root.pixel_aspect:parent.input.pixel_aspect!=1?(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((1+Text_Proprieties.size)/2.00))*2:(CurrentFormat.format.h/(CurrentFormat.format.h/2)*((1+Text_Proprieties.size)/2.00))*parent.input.pixel_aspect)*(root.proxy==0?CurrentFormat.format.w/1829:CurrentFormat.format.w/1829/root.proxy_scale))/1.2"}} + yjustify bottom + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {"root.proxy==0?BandTesterSize.format.h*2:BandTesterSize.format.h*(2*\[value InfoPlate.proxyscal])"}} + name InputInfo + tile_color 0xff5f00ff + xpos -5835 + ypos 4474 + } + Text { + output {rgba.red -rgba.green -rgba.blue rgba.alpha} + message MOS + font "\[value ArialBold.font]" + size {{"\[value Text_Version.size]*1.3"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y+((size)*1.1)}} + name MOS + tile_color 0xff5f00ff + xpos -5835 + ypos 4713 + disable {{!parent.MOS}} + } + Merge2 { + inputs 2 + name TitlesOverDefinitions + xpos -5835 + ypos 4827 + } + Merge2 { + inputs 2 + name Merge9 + xpos -5835 + ypos 4863 + } + Read { + inputs 0 + file Company_Logo + format "900 600 0 0 900 600 1 " + origset true + on_error black + version 3 + premultiplied true + name Company_Logo + tile_color 0xff0000ff + xpos -679 + ypos 1152 + disable {{Company_Logo.format 1 x154437 1}} + } + Transform { + center {{"S_mode.which==1?(ReAspect.format.w/ReAspect.format.h>1.78?ReAspect.format.w-(ReAspect.format.w/9):ReAspect.format.pixel_aspect>1.1?ReAspect.format.w:ReAspect.format.w/ReAspect.format.h<1.776?ReAspect.format.w:ReAspect.format.w-(ReAspect.format.w/10)\n):(root.format.w/root.format.h>1.78?root.format.w-(root.format.w/9):root.format.pixel_aspect>1.1?root.format.w:root.format.w/root.format.h<1.776?root.format.w:root.format.w-(root.format.w/10)\n)\n"} {S_mode.which==1?(ReAspect.format.w/ReAspect.format.h>1.778?(ReAspect.format.w/1.778)-((ReAspect.format.w/1.778)-(ReAspect.format.w/2.35))/8-150:ReAspect.format.pixel_aspect>1.1?ReAspect.format.h-(ReAspect.format.h-(ReAspect.format.w/2.35))/16+200:ReAspect.format.w/ReAspect.format.h<1.776?ReAspect.format.h-(ReAspect.format.h-(ReAspect.format.w/2.35))/4+100:ReAspect.format.h-(ReAspect.format.h-(ReAspect.format.w/2.35))/8):(root.format.w/root.format.h>1.778?(root.format.w/1.778)-((root.format.w/1.778)-(root.format.w/2.35))/8-150:root.format.pixel_aspect>1.1?root.format.h-(root.format.h-(root.format.w/2.35))/16+200:root.format.w/root.format.h<1.776?root.format.h-(root.format.h-(root.format.w/2.35))/4+100:root.format.h-(root.format.h-(root.format.w/2.35))/8)}} + name Company_Logo_t + xpos -679 + ypos 1336 + } + Dot { + name Dot23 + xpos -645 + ypos 1663 + } + Text2 { + inputs 0 + font_size_toolbar 160 + font_width_toolbar 100 + font_height_toolbar 100 + message "Company logo location" + old_message {{67 111 109 112 97 110 121 32 32 32 108 111 103 111 32 32 32 108 111 99 97 116 105 111 110} + } + box {5.5 420 2038.5 700} + xjustify center + yjustify center + transforms {{0 2} + } + font_size_values {{0 160 1 160 2 160 3 160 4 160 5 160 6 160 7 160 8 160 9 160 10 160 11 160 12 160 13 160 14 160 15 160 16 160 17 160 18 160 19 160 20 160 21 160 22 160 23 160 24 160} + } + cursor_position 12 + font {{ Adobe Heiti Std : R : AdobeHeitiStd-Regular.otf : 0 }} + font_size 160 + scale {1 1} + cursor_initialised true + autofit_bbox false + initial_cursor_position {{433.2002563 723.9000244} + } + group_animations {{0} imported: 0 selected: items: "root transform/"} + animation_layers {{1 11 1024 778 0 0 1 1 0 0 0 0} + } + color {0 0.1441284567 0.4232675731 1} + name ants_en + xpos -331 + ypos 1247 + } + Text2 { + inputs 0 + font_size_toolbar 260 + font_width_toolbar 100 + font_height_toolbar 100 + message 公司logo位置 + old_message {{20844 21496 108 111 103 111 20301 32622} + } + box {-0.5 839.5 2032.5 1132.5} + xjustify center + yjustify center + transforms {{0 2} + } + font_size_values {{0 260 1 260 2 260 3 260 4 260 5 260 6 260 7 260} + } + cursor_position 5 + font {{ Adobe Heiti Std : R : AdobeHeitiStd-Regular.otf : 0 }} + font_size 260 + scale {1 1} + cursor_initialised true + autofit_bbox false + initial_cursor_position {{433.2002563 723.9000244} + } + group_animations {{0} imported: 0 selected: items: "root transform/"} + animation_layers {{1 11 1024 778 0 0 1 1 0 0 0 0} + } + color {0 0.1441284567 0.4232675731 1} + name ants_chinese + xpos -341 + ypos 1189 + } + Constant { + inputs 0 + channels rgb + format "2048 1556 0 0 2048 1556 1 2" + name Constant31 + xpos -503 + ypos 1002 + } + Roto { + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 2097664} + {t x44800000 x44428000} + {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} + {curvegroup Ellipse2 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{xc280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x448a9800 xc4398222 1 0 1}} + {{x445b6000 0 1 xc0200000 1} + {x445ac000 xc0200000 1 0 1}}} + {{{x4280f560 -}} + {{0 -}}} + {{{0 -}} + {{xc19cd940 -}}} + {{{x44987111 0 1 xc4398222 1} + {x44993000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x4280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x448a9800 xc4398222 1 0 1}} + {{x446d2000 0 1 xc0200000 1} + {x446c8000 xc0200000 1 0 1}}} + {{{xc280f560 -}} + {{0 -}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x44768222 0 1 xc4398222 1} + {x44780000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{xc19cd940 -}}}}} idem} + {tx 1 x43b46000 x4463a000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40e00000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Bezier3 512 bezier + {{cc + {f 8192} + {px 0 + {x3f000000 0} + {x44fca000 x449a4000} + {xbf000000 0} + {0 0} + {x44fcc000 x448c8000} + {0 0} + {x413def9a x3f8e4981} + {x44ca23c3 x448ca000} + {xc13def9a xbf8e4990} + {xbf0f0800 x41c69680} + {x44c651e1 x448795a6} + {x3f0fd000 xc1c69640} + {xc1220367 x3f8e2800} + {x44ca6fff x448312d3} + {x41220368 xbf8e2000} + {xc22a95e0 x4001fe00} + {x44f0a556 x4482c30d} + {x424c0000 xc01b6e00} + {xc150df80 x41961e00} + {x44fc6e41 x4477d0f0} + {x4150df80 xc1961e00} + {xbe2aa000 x423a0000} + {x44ff4555 x44636000} + {x3e268000 xc23a0000} + {x41a64940 x41f36dc0} + {x44fc16db x444ba492} + {xc141f000 xc18df480} + {x422e0000 x40e00000} + {x44f1d000 x443de000} + {xc22e0000 xc0e00200} + {0 0} + {x44bbf000 x443dc000} + {0 0} + {0 0} + {x44bbe000 x44588000} + {0 0} + {xc12c2d49 xbf6adbb0} + {x44ef0925 x4458e492} + {x412c2d49 x3f6adbdc} + {xb9000000 xc1a40000} + {x44f22000 x4461c000} + {0 x41a40000} + {x4118d468 xbf8c982e} + {x44ef2000 x446ac000} + {xc118d468 x3f8c9822} + {x420086c0 xc1064880} + {x44c72fff x446ba000} + {xc285fff0 x418c0000} + {x412fd400 xc1ad95e0} + {x44bae923 x44801b6e} + {xc18648c0 x42049240} + {xc1149180 xc2049240} + {x44ba5923 x448e2492} + {x41149100 x42049240} + {xc214f499 xc0f3de00} + {x44c70fff x4499c000} + {x4214f499 x40f3e000}}} idem} + {tx 0 x44ddd000 x44773943} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn 0 ltm 0 tt x40800000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Bezier2 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{0 -}} + {{0 -}}} + {{{x41333340 -} + {x443dcccd -}} + {{x443cf334 -}}} + {{{0 -}} + {{0 -}}} + {{{xc1d33340 -}} + {{xc28bfff8 -}}} + {{{x41e00030 -} + {x44420002 -}} + {{x447abfff -}}} + {{{x41e85bdc -}} + {{x429a06a8 -}}} + {{{xc3523334 -}} + {{xbeccd000 -}}} + {{{x43b0999a -} + {x4489a666 -}} + {{x4499b333 -}}} + {{{x43523320 -}} + {{x3f07b800 -}}} + {{{xc1d59960 0 1 xc1119a40 1} + {xc20f3340 xc1119a40 1 0 1}} + {{x42b53330 0 1 xc04ccc00 1} + {x42aeccd0 xc04ccc00 1 0 1}}} + {{{x442bb334 -} + {x44b3599a -}} + {{x44772666 -}}} + {{{x41d59980 0 1 xc1080400 1} + {x41919780 xc1080400 1 0 1}} + {{xc2b53330 0 1 x4238ae20 1} + {xc231b840 x4238ae20 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{x442fa666 -} + {x44b55333 -}} + {{x443d4000 -}}} + {{{0 -}} + {{0 -}}} + {{{0 -}} + {{0 -}}} + {{{x4413bfff -} + {x44a76000 -}} + {{x443d1999 -}}} + {{{0 -}} + {{0 -}}} + {{{x41733340 0 1 xc08ccd00 1} + {x412cccc0 xc08ccd00 1 0 1}} + {{xc25e0000 0 1 x41940000 1} + {xc2140000 x41940000 1 0 1}}} + {{{x44124ccd -} + {x44a6a666 -}} + {{x446b8000 -}}} + {{{xc1733340 0 1 x40a1eb80 1} + {xc1223d00 x40a1eb80 1 0 1}} + {{x425e0000 0 1 xc1a61600 1} + {x420af500 xc1a61600 1 0 1}}} + {{{x431f0000 -}} + {{xc0000000 -}}} + {{{x43b00000 0 1 x41200000 1} + {x448ac000 x41200000 1 0 1}} + {{x448c0000 -}}} + {{{xc31f009e -}} + {{x3fe60c00 -}}} + {{{x416cb6b0 -}} + {{x422dd650 -}}} + {{{x42fc0000 -} + {x445a8000 -}} + {{x446d8ccd -}}} + {{{xc1800000 -}} + {{xc23c0000 -}}} + {{{0 -}} + {{0 -}}} + {{{x42ea6664 -} + {x44584ccc -}} + {{x443ca666 -}}} + {{{0 -}} + {{0 -}}}}} idem} + {tx 1 x43acb333 x44674000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40800000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Ellipse1 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{xc280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x43b46000 xc4398222 1 0 1}} + {{x445b6000 0 1 xc0200000 1} + {x445ac000 xc0200000 1 0 1}}} + {{{x4280f560 -}} + {{0 -}}} + {{{0 -}} + {{xc19cd940 -}}} + {{{x44987111 0 1 xc4398222 1} + {x43eec000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x4280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x43b46000 xc4398222 1 0 1}} + {{x446d2000 0 1 xc0200000 1} + {x446c8000 xc0200000 1 0 1}}} + {{{xc280f560 -}} + {{0 -}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x44768222 0 1 xc4398222 1} + {x43740000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{xc19cd940 -}}}}} idem} + {tx 1 x43b46000 x4463a000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40e00000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Bezier1 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{0 -}} + {{0 -}}} + {{{x443cf335 0 1 xc43a2668 1} + {x41333340 xc43a2668 1 0 1}} + {{x443d6003 0 1 xbfd99e00 1} + {x443cf334 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{xc1d33340 -}} + {{xc28bfff8 -}}} + {{{x4441266a 0 1 xc43a2668 1} + {x41e00030 xc43a2668 1 0 1}} + {{x447b2ccf 0 1 xbfd9a000 1} + {x447abfff xbfd9a000 1 0 1}}} + {{{x41e85bdc -}} + {{x429a06a8 -}}} + {{{xc3523334 -}} + {{xbecce000 0 1 x39000000 1} + {xbeccd000 x39000000 1 0 1}}} + {{{x4489399a 0 1 xc43a2667 1} + {x43b0999a xc43a2667 1 0 1}} + {{x4499e99c 0 1 xbfd9a400 1} + {x4499b333 xbfd9a400 1 0 1}}} + {{{x43523320 -}} + {{x3f07b000 0 1 x39000000 1} + {x3f07b800 x39000000 1 0 1}}} + {{{xc1d59960 0 1 xc1119a40 1} + {xc20f3340 xc1119a40 1 0 1}} + {{x42b53330 0 1 xc04ccc00 1} + {x42aeccd0 xc04ccc00 1 0 1}}} + {{{x44b2ecce 0 1 xc43a2668 1} + {x442bb334 xc43a2668 1 0 1}} + {{x44779336 0 1 xbfd9a000 1} + {x44772666 xbfd9a000 1 0 1}}} + {{{x41d59980 0 1 xc1080400 1} + {x41919780 xc1080400 1 0 1}} + {{xc2b53330 0 1 x4238ae20 1} + {xc231b840 x4238ae20 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{x44b4e667 0 1 xc43a2668 1} + {x442fa666 xc43a2668 1 0 1}} + {{x443daccf 0 1 xbfd99e00 1} + {x443d4000 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{0 -}} + {{0 -}}} + {{{x44a6f334 0 1 xc43a2669 1} + {x4413bfff xc43a2669 1 0 1}} + {{x443d8668 0 1 xbfd99e00 1} + {x443d1999 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{x41733340 0 1 xc08ccd00 1} + {x412cccc0 xc08ccd00 1 0 1}} + {{xc25e0000 0 1 x41940000 1} + {xc2140000 x41940000 1 0 1}}} + {{{x44a6399a 0 1 xc43a2667 1} + {x44124ccd xc43a2667 1 0 1}} + {{x446becd0 0 1 xbfd9a000 1} + {x446b8000 xbfd9a000 1 0 1}}} + {{{xc1733340 0 1 x40a1eb80 1} + {xc1223d80 x40a1eb80 1 0 1}} + {{x425e0000 0 1 xc1a61600 1} + {x420af500 xc1a61600 1 0 1}}} + {{{x431f0000 -}} + {{xc0000000 -}}} + {{{x44891334 0 1 xc437a668 1} + {x43b50000 xc437a668 1 0 1}} + {{x448c3668 0 1 xbfd9a000 1} + {x448c0000 xbfd9a000 1 0 1}}} + {{{xc31f009e -}} + {{x3fe61000 0 1 xb9000000 1} + {x3fe60c00 xb9000000 1 0 1}}} + {{{x416cb6b0 -}} + {{x422dd650 -}}} + {{{x4459a668 0 1 xc43a2668 1} + {x42fc0000 xc43a2668 1 0 1}} + {{x446df99d 0 1 xbfd9a000 1} + {x446d8ccd xbfd9a000 1 0 1}}} + {{{xc1800000 -}} + {{xc23c0000 -}}} + {{{0 -}} + {{0 -}}} + {{{x44577334 0 1 xc43a2668 1} + {x42ea6664 xc43a2668 1 0 1}} + {{x443d1335 0 1 xbfd99e00 1} + {x443ca666 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}}}} idem} + {tx 1 x43acb333 x44674000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40800000 b x3ed8b687 g x3e139669 r 0}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {1024 778} + color {0 0.1441284567 0.4232675731 1} + colorOverlay {0 0 0 0} + lifetime_type "all frames" + motionblur_shutter_offset_type centred + source_black_outside true + name Roto21 + xpos -500 + ypos 1114 + disable true + } + Merge2 { + inputs 2 + name Merge17 + xpos -500 + ypos 1189 + } + Merge2 { + inputs 2 + name Merge18 + xpos -500 + ypos 1247 + } + Transform { + translate {-83 0} + scale 0.9 + center {1024 778} + name Transform9 + xpos -500 + ypos 1302 + } + Reformat { + format "2048 1556 0 0 2048 1556 1 2" + name Reformat1 + xpos -500 + ypos 1361 + } + Premult { + name Premult1 + xpos -500 + ypos 1462 + } + Switch { + inputs 2 + which {{parent.cp_logo}} + name Switch2 + xpos -500 + ypos 2012 + } +set N6310f600 [stack 0] + PostageStamp { + name PostageStamp1 + xpos -7670 + ypos 821 + hide_input true + postage_stamp true + } + Dot { + name Dot120 + xpos -7636 + ypos 975 + } +set N631a0c00 [stack 0] + Saturation { + saturation 0 + mode Maximum + name Logo_BWforAlpha + xpos -7544 + ypos 972 + } + Shuffle { + green red + blue red + alpha red + name LogoAlpha + xpos -7544 + ypos 1007 + } +push $N631a0c00 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name PutLogoAlpha + xpos -7544 + ypos 1031 + disable {{"\[exists CompanyLogo.rgba.red]"}} + } +push $N631a0c00 + Switch { + inputs 2 + which {{parent.logoautoalpha i}} + name LumaAlpha + tile_color 0xff0000ff + xpos -7670 + ypos 1037 + } +set N6310f180 [stack 0] + Dot { + name Dot121 + xpos -7750 + ypos 1040 + } + Saturation { + saturation 0 + mode Average + name Logo_BW + xpos -7784 + ypos 1091 + } +set N631df800 [stack 0] +push $N6310f180 + Switch { + inputs 2 + which {{parent.blackwhite i}} + name Logo_BW_Set + tile_color 0xff0000ff + xpos -7670 + ypos 1091 + } + Reformat { + type "to box" + box_width {{"(\[exists parent.input]==1?parent.input.format.w:root.format.w)/4" i}} + box_height {{width i}} + resize fit + name Reformat_Logo + xpos -7670 + ypos 1199 + } +clone $C62cecc00 { + xpos -7670 + ypos 1245 + selected false + } + BlackOutside { + name BlackOutside1 + xpos -7670 + ypos 1289 + } + Position { + translate {{"\[exists parent.input]==1?((root.proxy==1?BandTesterSize.format.h/root.proxy_scale:BandTesterSize.format.h)*0.5)/parent.input.pixel_aspect:((root.proxy==1?BandTesterSize.format.h/root.proxy_scale:BandTesterSize.format.h)*0.5)/root.pixel_aspect" i} {(root.proxy==1?BandTesterSize.format.h/root.proxy_scale:BandTesterSize.format.h)*2.5 i}} + name BarsPosition1 + xpos -7670 + ypos 1325 + } + NoOp { + name SetLogoCenter + xpos -7670 + ypos 1362 + } + Transform { + center {{(SetLogoCenter.format.w/2)+BarsPosition1.translate.x i} {(SetLogoCenter.format.h/2)+BarsPosition1.translate.y i}} + name LogoPositionOffset + tile_color 0xff0000ff + xpos -7670 + ypos 1391 + } + Read { + inputs 0 + format "900 600 0 0 900 600 1 " + origset true + on_error black + version 3 + premultiplied true + name ShowLogo + tile_color 0xff0000ff + xpos -7990 + ypos 2398 + disable {{ShowLogo.format x1001 1}} + } + Shuffle { + name Shuffle8 + xpos -7990 + ypos 2508 + } + Reformat { + type "to box" + box_width {{"(\[exists parent.input]==1?parent.input.format.w:root.format.w)/4"}} + box_height {{width}} + resize fit + name Reformat_LogoShow + xpos -7990 + ypos 2554 + } +clone $C62cecc00 { + xpos -7990 + ypos 2590 + selected false + } + BlackOutside { + name BlackOutside10 + xpos -7990 + ypos 2655 + } + Position { + translate {{parent.Text_ShotName.translate.x} {"-(\[exists parent.input]==1?((root.proxy==1?BandTesterSize.format.h/root.proxy_scale:BandTesterSize.format.h)*0.5)/parent.input.pixel_aspect:((root.proxy==1?BandTesterSize.format.h/root.proxy_scale:BandTesterSize.format.h)*0.5)/root.pixel_aspect)"}} + name TopShowLogoPosition + xpos -7990 + ypos 2691 + } + NoOp { + name SetLogoCenter1 + xpos -7990 + ypos 2727 + } + Transform { + center {{(SetLogoCenter1.format.w/2)+TopShowLogoPosition.translate.x} {(SetLogoCenter1.format.h/2)+TopShowLogoPosition.translate.y}} + name LogoShowPositionOffset + tile_color 0xff0000ff + xpos -7990 + ypos 2763 + } + Mirror { + Vertical true + name Mirror1 + xpos -7990 + ypos 2840 + } + set C63238c00 [stack 0] + Constant { + inputs 0 + channels rgb + color {0.03033 0.03114 0.03275 0} + format "256 256 0 0 256 256 1 square_256" + name Constant24 + xpos -9469 + ypos 2348 + } + Constant { + inputs 0 + channels rgb + color {0.08532 0.08888 0.09258 0} + format "256 256 0 0 256 256 1 square_256" + name Constant23 + xpos -9549 + ypos 2348 + } + Constant { + inputs 0 + channels rgb + color {0.19011 0.19185 0.1931 0} + format "256 256 0 0 256 256 1 square_256" + name Constant22 + xpos -9629 + ypos 2348 + } + Constant { + inputs 0 + channels rgb + color {0.35496 0.36541 0.36753 0} + format "256 256 0 0 256 256 1 square_256" + name Constant21 + xpos -9709 + ypos 2348 + } + Constant { + inputs 0 + channels rgb + color {0.57988 0.59193 0.59331 0} + format "256 256 0 0 256 256 1 square_256" + name Constant20 + xpos -9789 + ypos 2348 + } + Constant { + inputs 0 + channels rgb + color {0.9127 0.91481 0.89367 0} + format "256 256 0 0 256 256 1 square_256" + name Constant19 + xpos -9869 + ypos 2348 + } + Constant { + inputs 0 + channels rgb + color {0 0.24696 0.40041 0} + format "256 256 0 0 256 256 1 square_256" + name Constant18 + xpos -9469 + ypos 2276 + } + Constant { + inputs 0 + channels rgb + color {0.53352 0.08859 0.30752 0} + format "256 256 0 0 256 256 1 square_256" + name Constant17 + xpos -9549 + ypos 2276 + } + Constant { + inputs 0 + channels rgb + color {0.85744 0.56748 0.00686 0} + format "256 256 0 0 256 256 1 square_256" + name Constant16 + xpos -9629 + ypos 2276 + } + Constant { + inputs 0 + channels rgb + color {0.45586 0.03032 0.04086 0} + format "256 256 0 0 256 256 1 square_256" + name Constant15 + xpos -9709 + ypos 2276 + } + Constant { + inputs 0 + channels rgb + color {0.05601 0.30017 0.06873 0} + format "256 256 0 0 256 256 1 square_256" + name Constant14 + xpos -9789 + ypos 2276 + } + Constant { + inputs 0 + channels rgb + color {0.01712 0.05022 0.29221 0} + format "256 256 0 0 256 256 1 square_256" + name Constant13 + xpos -9869 + ypos 2276 + } + Constant { + inputs 0 + channels rgb + color {0.79467 0.35938 0.02053 0} + format "256 256 0 0 256 256 1 square_256" + name Constant12 + xpos -9469 + ypos 2204 + } + Constant { + inputs 0 + channels rgb + color {0.34551 0.50865 0.04945 0} + format "256 256 0 0 256 256 1 square_256" + name Constant11 + xpos -9549 + ypos 2204 + } + Constant { + inputs 0 + channels rgb + color {0.11101 0.0423 0.14292 0} + format "256 256 0 0 256 256 1 square_256" + name Constant10 + xpos -9629 + ypos 2204 + } + Constant { + inputs 0 + channels rgb + color {0.56678 0.08423 0.11971 0} + format "256 256 0 0 256 256 1 square_256" + name Constant9 + xpos -9709 + ypos 2204 + } + Constant { + inputs 0 + channels rgb + color {0.0576 0.10517 0.40294 0} + format "256 256 0 0 256 256 1 square_256" + name Constant4 + xpos -9789 + ypos 2204 + } + Constant { + inputs 0 + channels rgb + color {0.74743 0.20061 0.02809 1} + format "256 256 0 0 256 256 1 square_256" + name Constant5 + xpos -9869 + ypos 2204 + } + Constant { + inputs 0 + channels rgb + color {0.10812 0.51433 0.41265 0} + format "256 256 0 0 256 256 1 square_256" + name Constant6 + xpos -9469 + ypos 2132 + } + Constant { + inputs 0 + channels rgb + color {0.22163 0.21582 0.4346 0} + format "256 256 0 0 256 256 1 square_256" + name Constant26 + xpos -9549 + ypos 2132 + } + Constant { + inputs 0 + channels rgb + color {0.10162 0.14891 0.05189 0} + format "256 256 0 0 256 256 1 square_256" + name Constant27 + xpos -9629 + ypos 2132 + } + Constant { + inputs 0 + channels rgb + color {0.10368 0.19588 0.33141 0} + format "256 256 0 0 256 256 1 square_256" + name Constant28 + xpos -9709 + ypos 2132 + } + Constant { + inputs 0 + channels rgb + color {0.56838 0.29265 0.21836 0} + format "256 256 0 0 256 256 1 square_256" + name Constant29 + xpos -9789 + ypos 2132 + } + Constant { + inputs 0 + channels rgb + color {0.17305 0.0821 0.05674 0} + format "256 256 0 0 256 256 1 square_256" + name Constant30 + xpos -9869 + ypos 2132 + } + ContactSheet { + inputs 24 + width {{(256*columns)+(gap*(columns+2))}} + height {{(256*rows)+(gap*(rows+2))}} + rows 6 + columns 6 + gap 50 + center true + roworder TopBottom + startframe 1 + endframe 1 + name ColorSamples + xpos -9688 + ypos 2545 + hide_input true + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } + AdjBBox { + numpixels {{-ColorSamples.gap/2}} + name AdjBBox1 + xpos -9412 + ypos 2545 + } + Colorspace { + colorspace_in sRGB + illuminant_in D50 + colorspace_out sRGB + illuminant_out D50 + name ColorRenditionChart_ColorSpace + tile_color 0xff0000ff + xpos -9412 + ypos 2569 + } + Text { + message "Color Space: \[value ColorRenditionChart_ColorSpace.colorspace_out]\nIlluminant: \[value ColorRenditionChart_ColorSpace.illuminant_out]\nPrimary: \[value ColorRenditionChart_ColorSpace.primary_out]" + font "\[value Arial.font]" + size {{root.proxy==0?130:260}} + leading 0.2 + xjustify center + yjustify bottom + Transform 1 + box {0 {root.proxy==0?130:260} {ColorSamples.format.r} {ColorSamples.format.t}} + center {914 778} + color 0.2 + name Text1 + xpos -9412 + ypos 2593 + } + Mirror { + Vertical true + name MirrorVertical + xpos -9412 + ypos 2625 + } + set C63305400 [stack 0] + Reformat { + type "to box" + box_width {{root.proxy==0?ColorSamples.format.w:ColorSamples.format.w*root.proxy_scale i}} + name Reformat_ProxyScale + xpos -9412 + ypos 2649 + } +clone $C62cecc00 { + xpos -9412 + ypos 2673 + selected false + } + Reformat { + type "to box" + box_width {{root.proxy==0?CurrentFormat.width/7:CurrentFormat.width/7/root.proxy_scale}} + scale 0.1428571429 + black_outside true + name Reformat_Scale + xpos -9412 + ypos 2697 + } + Position { + translate {{(root.proxy==0?Reformat_Scale.width/4:Reformat_Scale.width/4/root.proxy_scale)} {"translate.x*(\[exists parent.input]==1?parent.input.pixel_aspect:root.pixel_aspect)"}} + name ColorRenditionChart_Position + xpos -9412 + ypos 2721 + } + BlackOutside { + name BlackOutside4 + xpos -9412 + ypos 2745 + } + Transform { + translate {{parent.ColorChartPositionOffset.x} {-parent.ColorChartPositionOffset.y}} + center {{(input.format.w/2)+ColorRenditionChart_Position.translate.x} {(input.format.h/2)+ColorRenditionChart_Position.translate.y}} + name ColorChartShowPositionOffset + tile_color 0xff0000ff + xpos -9412 + ypos 2781 + } + ColorBars { + inputs 0 + PAL true + name ColorBarsTester + xpos -8606 + ypos 1187 + } + Reformat { + type "to box" + box_width {{"(\[exists parent.input]==1?parent.input.format.w:root.format.w)*proxy_scale.scale"}} + box_height {{"(\[exists parent.input]==1?parent.input.format.h:root.format.h)*proxy_scale.scale"}} + box_fixed true + box_pixel_aspect {{"\[exists parent.input]==1?parent.input.format.pixel_aspect:root.format.pixel_aspect"}} + resize distort + center false + filter Impulse + name CurrentFormat + xpos -8606 + ypos 1300 + } + set C63328800 [stack 0] +set N63328800 [stack 0] + Shuffle { + alpha white + name NewAlphaOnBars + xpos -8606 + ypos 2277 + } + set C63328000 [stack 0] + Colorspace { + colorspace_out sRGB + name BarsLinearized + tile_color 0xff0000ff + xpos -8606 + ypos 2349 + } + Reformat { + type scale + scale {1 0.05} + resize none + name BandTesterSize + xpos -8606 + ypos 2385 + } + set C63363800 [stack 0] + Position { + translate {0 {root.proxy==1?BandTesterSize.format.h/(1*root.proxy_scale):BandTesterSize.format.h i}} + name BarsPosition + xpos -8606 + ypos 2421 + } + BlackOutside { + name BlackOutsideBand1 + xpos -8606 + ypos 2457 + } + Dot { + name Dot122 + xpos -8572 + ypos 2496 + } +push 0 + Constant { + inputs 0 + color 0.022 + name Format + xpos -8766 + ypos 1172 + } +clone $C63328800 { + xpos -8766 + ypos 1300 + selected false + } +set N63362000 [stack 0] + Dot { + name Dot123 + xpos -8892 + ypos 1303 + } + Ramp { + output rgb + p0 {0 0} + p1 {{CurrentFormat.box_width i} 0} + name BW_Ramp + xpos -8926 + ypos 1353 + postage_stamp true + } +clone $C63328000 { + xpos -8926 + ypos 2277 + selected false + } + Posterize { + Colors 17 + name BW_Chips + xpos -8926 + ypos 2308 + } + Colorspace { + name RampLinearized + tile_color 0xff0000ff + xpos -8926 + ypos 2349 + } +clone $C63363800 { + xpos -8926 + ypos 2385 + selected false + } + BlackOutside { + name BlackOutsideBand + xpos -8926 + ypos 2457 + } + Dot { + name Dot124 + xpos -8892 + ypos 2496 + } +push $N62d5dc00 + Dot { + name Dot108 + xpos -2713 + ypos -1948 + } +set N633bf400 [stack 0] + Dot { + name Dot148 + xpos -6167 + ypos -1948 + } + FrameRange { + first_frame {{"\[exists parent.input]==1?\[value parent.input.first_frame]:0"}} + last_frame {{"\[exists parent.input]==1?\[value parent.input.last_frame]:0"}} + time "" + name FrameRange + xpos -6201 + ypos 999 + addUserKnob {20 User} + addUserKnob {3 nff l "new first frame"} + nff {{"\[value parent.input.first_frame]+\[value Handles.handlesIN]"}} + addUserKnob {3 nlf l "new last frame" -STARTLINE} + nlf {{"\[value parent.input.last_frame]-\[value Handles.handlesOUT]"}} + } + Reformat { + type scale + scale {{parent.thumbnailssize<=4?parent.thumbnailssize:4}} + resize fit + name Thumbnails_Size + xpos -6201 + ypos 1226 + } + Shuffle { + alpha white + name NewAlpha_Thumbnail + xpos -6201 + ypos 1261 + } + Mirror { + Horizontal true + Vertical true + name MirrorVerticalHorizontal + xpos -6201 + ypos 1290 + } + set C633be000 [stack 0] + Crop { + box {{input.format.x} {input.format.y} {root.proxy==0?input.format.r:input.format.r/root.proxy_scale} {root.proxy==0?input.format.t:input.format.t/root.proxy_scale}} + reformat true + name FitFormat + xpos -6201 + ypos 1318 + } + Reformat { + type scale + scale 0.15 + black_outside true + pbb true + name Thumbnail + xpos -6201 + ypos 1342 + } +set N633e9800 [stack 0] + Dot { + name Dot126 + xpos -6021 + ypos 1345 + } +set N633e9000 [stack 0] + Dot { + name Dot127 + xpos -5851 + ypos 1345 + } +set N633e8c00 [stack 0] + Dot { + name Dot128 + xpos -5684 + ypos 1345 + } +set N633e8800 [stack 0] + Dot { + name Dot129 + xpos -5514 + ypos 1345 + } +set N633e8400 [stack 0] + Dot { + name Dot130 + xpos -5343 + ypos 1345 + } + FrameHold { + first_frame {{FrameRange.nlf}} + name LastFrame_Thumbnail + xpos -5377 + ypos 1367 + } + Transform { + translate {0 {root.proxy==0?input.format.h*5:input.format.h*5/root.proxy_scale i}} + center {183 155.5} + name PositionSequenceThumbnails4 + xpos -5377 + ypos 1462 + } + Dot { + name Dot131 + xpos -5343 + ypos 1645 + } + Dot { + name Dot132 + xpos -6250 + ypos 1645 + } +push $N633e8400 + FrameHold { + first_frame {{FrameRange.nff+(FrameRange.nlf-FrameRange.nff)*0.8}} + name MiddleFrame_Thumbnail_4 + xpos -5548 + ypos 1367 + } + Transform { + translate {0 {root.proxy==0?input.format.h*4:input.format.h*4/root.proxy_scale i}} + center {183 155.5} + name PositionSequenceThumbnails3 + xpos -5548 + ypos 1462 + } + Dot { + name Dot133 + xpos -5514 + ypos 1627 + } + Dot { + name Dot134 + xpos -6251 + ypos 1627 + } +push $N633e8800 + FrameHold { + first_frame {{FrameRange.nff+(FrameRange.nlf-FrameRange.nff)*0.6 i}} + name MiddleFrame_Thumbnail_3 + xpos -5718 + ypos 1376 + } + Transform { + translate {0 {root.proxy==0?input.format.h*3:input.format.h*3/root.proxy_scale i}} + center {183 155.5} + name PositionSequenceThumbnails2 + xpos -5718 + ypos 1462 + } + Dot { + name Dot135 + xpos -5684 + ypos 1609 + } + Dot { + name Dot136 + xpos -6251 + ypos 1609 + } +push $N633e8c00 + FrameHold { + first_frame {{FrameRange.nff+(FrameRange.nlf-FrameRange.nff)*0.4 i}} + name MiddleFrame_Thumbnail_2 + xpos -5885 + ypos 1367 + } + Transform { + translate {0 {root.proxy==0?input.format.h*2:input.format.h*2/root.proxy_scale i}} + center {183 155.5} + name PositionSequenceThumbnails1 + xpos -5885 + ypos 1462 + } + Dot { + name Dot137 + xpos -5851 + ypos 1591 + } + Dot { + name Dot138 + xpos -6251 + ypos 1591 + } +push $N633e9000 + FrameHold { + first_frame {{FrameRange.nff+(FrameRange.nlf-FrameRange.nff)*0.2 i}} + name MiddleFrame_Thumbnail_1 + xpos -6055 + ypos 1367 + } + Transform { + translate {0 {root.proxy==0?input.format.h:input.format.h/root.proxy_scale i}} + center {183 155.5} + name PositionSequenceThumbnails + xpos -6055 + ypos 1462 + } + Dot { + name Dot139 + xpos -6021 + ypos 1573 + } + Dot { + name Dot140 + xpos -6249 + ypos 1573 + } +push 0 +push $N633e9800 + FrameHold { + first_frame {{FrameRange.nff i}} + name FirstFrame_Thumbnail + xpos -6205 + ypos 1367 + } + Dot { + name Dot141 + xpos -6171 + ypos 1555 + } + Dot { + name Dot142 + xpos -6251 + ypos 1555 + } +push $N631df800 + Shuffle { + alpha black + name AlphaKill + xpos -7784 + ypos 1127 + } + Reformat { + type "to box" + box_width {{"ThumbnailsOver.disable==1?\[exists parent.input]==1?parent.input.format.w:root.format.w:\[exists parent.input]==1?parent.input.format.w-(root.proxy==0?Thumbnail.format.w:Thumbnail.format.w/root.proxy_scale):root.format.w" i}} + box_height {{"\[exists parent.input]==1?parent.input.format.h:root.format.h" i}} + box_fixed true + box_pixel_aspect {{"\[exists parent.input]==1?parent.input.format.pixel_aspect:root.format.pixel_aspect" i}} + resize fit + filter Impulse + name FullSizeFormat + xpos -7784 + ypos 1163 + } + Transform { + scale 0.9 + center {{CenterReference.center.x} {CenterReference.center.y}} + name ResizeWaterMark + xpos -7784 + ypos 1188 + } + Multiply { + name WatermarkIntensity + tile_color 0xff0000ff + xpos -7784 + ypos 1229 + } + Blur { + size {{FullSizeFormat.height/40}} + name BlurWatermark + tile_color 0xff0000ff + xpos -7784 + ypos 1283 + disable {{!parent.LogoBlur}} + } + Dot { + name Dot143 + xpos -7750 + ypos 1362 + } +push $N63362000 + Merge2 { + inputs 2 + operation screen + mix 0.05 + name WatermarkOver + xpos -8766 + ypos 1406 + } +clone $C633be000 { + xpos -8766 + ypos 1448 + selected false + } + Merge2 { + inputs 7+1 + mix {{"\[exists parent.input]" i}} + name ThumbnailsOver + tile_color 0xff0000ff + xpos -8766 + ypos 1642 + disable {{!parent.Thumbnails.main i}} + } + Transform { + translate {{-parent.ThumbnailOffset.x} {-parent.ThumbnailOffset.y}} + name Thumbnails_offset + xpos -8766 + ypos 1777 + } +clone $C633be000 { + xpos -8766 + ypos 2162 + selected false + } + Merge2 { + inputs 3+1 + bbox B + name TestersMerge + xpos -8766 + ypos 2493 + } + Dot { + name Dot144 + xpos -8732 + ypos 2730 + } +set N634aa400 [stack 0] +clone $C63305400 { + xpos -8926 + ypos 2727 + selected false + } + Dot { + name Dot145 + xpos -9116 + ypos 2730 + } + Merge2 { + inputs 2 + name Merge22 + xpos -9150 + ypos 2781 + } +clone $C63305400 { + xpos -8926 + ypos 2781 + selected false + } +push $N634aa400 + Switch { + inputs 2 + which {{parent.colorchart}} + name ColorRenditionChart_Switch + tile_color 0xff0000ff + xpos -8766 + ypos 2781 + } + Dot { + name Dot146 + xpos -8732 + ypos 2982 + } +clone $C63238c00 { + xpos -8143 + ypos 2979 + selected false + } + Merge2 { + inputs 2 + name Merge23 + xpos -7990 + ypos 2979 + } +clone $C63238c00 { + xpos -7830 + ypos 2979 + selected false + } + Merge2 { + inputs 2 + mix 0.1 + name LogoMERGE + xpos -7670 + ypos 2979 + disable {{parent.CompanyLogo.disable.main}} + } + Constant { + inputs 0 + channels rgb + color {{parent.BGColor.main.r} {parent.BGColor.main.g} {parent.BGColor.main.b} {curve}} + name SlateBGsolid + tile_color 0xff0000ff + xpos -8646 + ypos 5111 + } +clone $C63328800 { + xpos -8646 + ypos 5251 + selected false + } + Merge2 { + inputs 2 + bbox A + metainput A + name ColorBGOver + xpos -7670 + ypos 5251 + } + Dot { + name Dot147 + xpos -7636 + ypos 5650 + } + Merge2 { + inputs 2 + name Merge24 + xpos -5835 + ypos 5623 + } + Crop { + box {0 0 {parent.CurrentFormat.box_width.main} {parent.CurrentFormat.box_height.main}} + crop false + name Crop1 + xpos -5835 + ypos 5897 + } +push $N62d33400 +push $N6310f600 + Dot { + name Dot7 + xpos -1601 + ypos 2015 + } + Transform { + translate {{(ReAspect.format.w/ReAspect.format.h)<1.77?(ReAspect.format.w/ReAspect.format.h)>1.78?1:ReAspect.format.pixel_aspect>1.1?-11:-80:-11} {(ReAspect.format.w/ReAspect.format.h)<1.77?(ReAspect.format.w/ReAspect.format.h)>1.78?1:ReAspect.format.pixel_aspect>1.1?-115:0:-115}} + scale {{ReAspect.format.pixel_aspect>1.1?0.9:(ReAspect.format.w/ReAspect.format.h)<1.77?0.98:1.08}} + center {1024 576} + name santi_logo_size1 + tile_color 0xff0000ff + xpos -1635 + ypos 2109 + } + Transform { + scale {1 {(ReAspect.format.w/ReAspect.format.h)>1.78?1:ReAspect.format.pixel_aspect>1.1?ReAspect.format.pixel_aspect:1}} + center {1024 778} + name Ratio_sant_logo1 + tile_color 0xff0000ff + xpos -1635 + ypos 2167 + } +set N63549800 [stack 0] + ContactSheet { + width {{ReAspect.format.w}} + height {{ReAspect.format.h}} + rows 9 + columns 9 + center true + roworder TopBottom + colorder RightLeft + startframe 1 + endframe 1 + name logo_top_left6 + tile_color 0xff00ff + xpos -1691 + ypos 2232 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } +push $N63549800 + ContactSheet { + width {{ReAspect.format.w}} + height {{(ReAspect.format.w/ReAspect.format.h)>1.78?(((ReAspect.format.w/1.778)-ReAspect.format.h)+ReAspect.format.h):ReAspect.format.pixel_aspect>1.1?((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))-1)+1)*ReAspect.format.h):ReAspect.format.h}} + rows 7 + columns 7 + center true + roworder TopBottom + colorder RightLeft + startframe 1 + endframe 1 + name logo_top_left1 + tile_color 0xff00ff + xpos -1562 + ypos 2235 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } + Switch { + inputs 2 + which {{parent.re_black}} + name Switch9 + xpos -1625 + ypos 2278 + } + Read { + inputs 0 + file Project_Logo + format "900 600 0 0 900 600 1 " + origset true + on_error black + version 3 + premultiplied true + name Project_Logo + tile_color 0xff0000ff + xpos -658 + ypos -375 + disable {{Project_Logo.format 1}} + } + Transform { + center {{S_mode.which==1?(ReAspect.format.w/8<310?310:ReAspect.format.w/8>500?500:ReAspect.format.w/8):(root.format.w/8<310?310:root.format.w/8>500?500:root.format.w/8)} {S_mode.which==1?(ReAspect.format.w/ReAspect.format.h>1.778?(ReAspect.format.w/1.778)-((ReAspect.format.w/1.778)-(ReAspect.format.w/2.35))/8:ReAspect.format.pixel_aspect>1.1?ReAspect.format.h-(ReAspect.format.h-(ReAspect.format.w/2.35))/16:ReAspect.format.w/ReAspect.format.h<1.776?ReAspect.format.h-(ReAspect.format.h-(ReAspect.format.w/2.35))/4:ReAspect.format.h-(ReAspect.format.h-(ReAspect.format.w/2.35))/8):(root.format.w/root.format.h>1.778?(root.format.w/1.778)-((root.format.w/1.778)-(root.format.w/2.35))/8:root.format.pixel_aspect>1.1?root.format.h-(root.format.h-(root.format.w/2.35))/16:root.format.w/root.format.h<1.776?root.format.h-(root.format.h-(root.format.w/2.35))/4:root.format.h-(root.format.h-(root.format.w/2.35))/8)}} + name Project_Logo_t + xpos -658 + ypos -204 + } + Dot { + name Dot22 + xpos -624 + ypos -13 + } + Constant { + inputs 0 + channels rgb + format "2048 1152 0 0 2048 1152 1 KQS_Arri" + name Constant3 + xpos -237 + ypos -687 + } + Dot { + name Dot117 + xpos -203 + ypos -532 + } + Text { + message "Project Logo" + font C:/Windows/Fonts/arial.ttf + size 180 + yjustify center + box {410 285 1691 861} + translate {128 139} + center {1024 576} + color {1 0 0 1} + color_panelDropped true + name Text2 + xpos -237 + ypos -417 + } + Roto { + inputs 0 + output alpha + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 0} + {t x44800000 x44100000} + {a} + {curvegroup RectangleCusped1 512 bezier + {{cc + {f 8192} + {px x447a4000 + {0 0} + {x43e90000 x4480a000} + {0 0} + {0 0} + {x44c8e000 x4480a000} + {0 0} + {0 0} + {x44c8e000 x43c28000} + {0 0} + {0 0} + {x43e90000 x43c28000} + {0 0}}} idem} + {tx x447a4000 x44819000 x44314000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn x447a4000 ltm x447a4000 tt x41100000}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {1024 576} + colorOverlay {0 0 0 0} + lifetime_type "all frames" + lifetime_start 1001 + lifetime_end 1001 + motionblur_shutter_offset_type centred + source_black_outside true + name Roto9 + xpos -111 + ypos -403 + } +set N6727c800 [stack 0] +push $N6727c800 + Dilate { + size -34 + name Dilate1 + xpos 22 + ypos -333 + } + ChannelMerge { + inputs 2 + operation out + name ChannelMerge1 + xpos -111 + ypos -343 + } + ChannelMerge { + inputs 2 + name ChannelMerge2 + xpos -237 + ypos -343 + } + Switch { + which {{control_font.proj_logo_c}} + name Switch7 + xpos -237 + ypos -76 + } + Constant { + inputs 0 + channels rgb + color {0 0.1441284567 0.4232675731 1} + name Constant25 + xpos -516 + ypos -377 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy1 + xpos -516 + ypos -168 + } + Premult { + name Premult2 + xpos -516 + ypos -78 + } + Switch { + inputs 2 + which {{parent.pro_logo_on}} + name Switch1 + xpos -516 + ypos -16 + } + Dot { + name Dot4 + xpos -482 + ypos 367 + } +set N672d2c00 [stack 0] + Dot { + name Dot5 + xpos -771 + ypos 367 + } + Transform { + translate {-211 {(ReAspect.format.w/ReAspect.format.h)<1.77?ReAspect.format.pixel_aspect>1.1?-45:100:-45}} + scale 0.98 + center {1024 576} + name santi_logo_size4 + tile_color 0xff0000ff + xpos -805 + ypos 464 + } + Transform { + scale {1 {(ReAspect.format.w/ReAspect.format.h)>1.78?1:ReAspect.format.pixel_aspect>1.1?ReAspect.format.pixel_aspect:1}} + center {1024 778} + name Ratio_sant_logo4 + tile_color 0xff0000ff + xpos -805 + ypos 512 + } +set N672d2000 [stack 0] + ContactSheet { + width {{ReAspect.format.w}} + height {{ReAspect.format.h}} + rows 9 + columns 9 + center true + roworder TopBottom + startframe 1 + endframe 1 + name logo_top_left5 + tile_color 0xff00ff + xpos -945 + ypos 581 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } +push $N672d2000 + ContactSheet { + width {{ReAspect.format.w}} + height {{(ReAspect.format.w/ReAspect.format.h)>1.78?(((ReAspect.format.w/1.778)-ReAspect.format.h)+ReAspect.format.h):ReAspect.format.pixel_aspect>1.1?((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))-1)+1)*ReAspect.format.h):ReAspect.format.h}} + rows 7 + columns 7 + center true + roworder TopBottom + startframe 1 + endframe 1 + name logo_top_left4 + tile_color 0xff00ff + xpos -779 + ypos 580 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } + Switch { + inputs 2 + which {{parent.re_black}} + name Switch16 + xpos -863 + ypos 650 + } +push $N633bf400 + Retime { + input.first {{parent.Input.framerange.w}} + input.first_lock true + input.last {{parent.Input.framerange.h}} + input.last_lock true + output.first {{parent.startframe.slate_frame}} + output.first_lock true + output.last 1042 + output.last_lock true + speed 0.0009587727709 + filter none + shutter 0 + time "" + name sart_time + tile_color 0xff + xpos -2747 + ypos -1877 + disable {{startframe.slate_frame>0?0:1 x1001 1}} + } + Reformat { + type "to box" + format {{{format}}} + box_width {{input.format.w}} + box_height {{input.format.h}} + box_pixel_aspect {{input.format.pixel_aspect}} + resize none + name ReAspect + xpos -2747 + ypos -1768 + disable {{root.format.pixel_aspect>1.1?0:1}} + } + Reformat { + type scale + format "3656 2054 0 0 3656 2054 1 c" + scale {1 {(input.format.pixel_aspect>1.1?(((input.format.w)/1.778)/(input.format.h-((input.format.h*input.format.pixel_aspect)-input.format.w))):input.format.w/input.format.h<1.77?1:(((input.format.w)/1.778)/(input.format.h)))}} + name Reformat30 + xpos -2747 + ypos -1391 + disable {{parent.re_black}} + } +set N67314800 [stack 0] + Shuffle { + alpha white + name Shuffle4 + xpos -3045 + ypos -1391 + } + Dot { + name Dot109 + xpos -3188 + ypos -1388 + } +set N6734bc00 [stack 0] + Dot { + name Dot110 + xpos -3364 + ypos -1388 + } + Crop { + box {0 0 {input.format.w} {input.format.h}} + name ReAspect_top_crop + xpos -3398 + ypos -1321 + } + Crop { + box {0 {((ReAspect_top_crop.box.t-(ReAspect_top_crop.box.r/2.35))/2)} {ReAspect_top_crop.box.r} {ReAspect_top_crop.box.t-((ReAspect_top_crop.box.t-(ReAspect_top_crop.box.r/2.35))/2)}} + name Crop13 + xpos -3398 + ypos -1237 + } + Invert { + name Invert10 + xpos -3398 + ypos -1031 + } + Multiply { + value {{parent.ratio_control.t_value}} + name o_mult_img + xpos -3398 + ypos -953 + } + set C6734a800 [stack 0] + Multiply { + value 0 + name Multiply1 + xpos -3398 + ypos -853 + disable {{parent.ratio_on?0:(ReAspect.format.w/ReAspect.format.h)>1.78?1:0}} + } +push $N6734bc00 + Crop { + box {0 {int((ReAspect.format.w/ReAspect.format.h)>1.78?(((ReAspect.format.w/1.778)-ReAspect.format.h)/2):ReAspect.format.pixel_aspect>1.1?((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))-1)/2)*ReAspect.format.h):(ReAspect.format.w/ReAspect.format.h)<1.77?(((ReAspect.format.h-(ReAspect.format.w/ratio_control.ratio_ture)))/2):(((ReAspect.format.h-(ReAspect.format.w/2.35)))/2))} {input.format.w} {"int((ReAspect.format.w/ReAspect.format.h)>1.78?((((ReAspect.format.w/1.778)-ReAspect.format.h)/2)+ReAspect.format.h):ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))-1)/2)+1)*ReAspect.format.h):(ReAspect.format.w/ReAspect.format.h)>1.77?(ReAspect.format.h-((ReAspect.format.h-(ReAspect.format.w/2.35)))/2):(ReAspect.format.h-((ReAspect.format.h-(ReAspect.format.w/ratio_control.ratio_ture)))/2))\n"}} + name Crop14 + xpos -3222 + ypos -1318 + disable {{parent.re_black}} + } + Invert { + name Invert11 + xpos -3222 + ypos -1037 + } + Multiply { + value {{(ReAspect.format.w/ReAspect.format.h)>1.78?1:ReAspect.format.pixel_aspect>1.1?1:o_mult_img.value}} + name Multiply9 + xpos -3222 + ypos -955 + } + Multiply { + value 0 + name Multiply2 + xpos -3222 + ypos -905 + disable {{parent.ratio_on?(ReAspect.format.w/ReAspect.format.h)>1.78?1:ReAspect.format.pixel_aspect>1.1?1:0:1}} + } + Merge2 { + inputs 2 + name Merge15 + xpos -3222 + ypos -847 + disable {{ReAspect.format.w/ReAspect.format.h>1.78?ReAspect.format.w/ReAspect.format.h<2.34?0:1:1}} + } + Constant { + inputs 0 + channels rgb + format {{{input.format}}} + name Constant8 + xpos -3028 + ypos -804 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy7 + xpos -3222 + ypos -786 + } + Premult { + name Premult10 + xpos -3222 + ypos -678 + } +push $N67314800 + Merge2 { + inputs 2 + name Merge16 + xpos -2747 + ypos -678 + } + Merge2 { + inputs 2 + name Merge1 + xpos -2747 + ypos 650 + } + Merge2 { + inputs 2 + name Merge2 + xpos -2743 + ypos 2278 + } + Dot { + name Dot9 + xpos -2709 + ypos 2413 + } +set N673bb400 [stack 0] + Dot { + name Dot10 + xpos -1598 + ypos 2413 + } + CopyMetaData { + inputs 2 + mergeMode Meta+Image + metadatafilterMode "keys only" + name CopyimgMetaData1 + tile_color 0xff + xpos -1632 + ypos 2451 + } + Shuffle { + red black + green black + blue black + alpha black + name Shuffle2 + xpos -1632 + ypos 2503 + } + Dot { + name Dot24 + xpos -1598 + ypos 2555 + } +set N673ba400 [stack 0] + Dot { + name Dot25 + xpos -1816 + ypos 2555 + } + Text { + message "\[value control_font.shot_asset]: \[value parent.TextFields.plate_shot]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_left_Shot_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1850 + ypos 2660 + } + Dot { + name Dot26 + xpos -1816 + ypos 2727 + } +push $N673ba400 + Text { + message "\[value control_font.shot_asset]: \[lindex \[split \[file tail \[file rootname \[metadata input/filename]]] \".\"] 0]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_left_Shot + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1632 + ypos 2657 + } + Dot { + name Dot27 + xpos -1598 + ypos 2727 + } + Switch { + inputs 2 + which {{parent.TextFields.shot_on}} + name Switch3 + xpos -1745 + ypos 2724 + } + Dot { + name Dot28 + xpos -1711 + ypos 2793 + } +set N673ec400 [stack 0] + Text { + message "Artist: \[value TextFields.plate_aritist]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_left_Artist_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1848 + ypos 2790 + } + Dot { + name Dot29 + xpos -1814 + ypos 2884 + } +push $N673ec400 + Text { + message "Artist: \[lindex \[split \[file tail \[file rootname \[metadata input/filename]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[metadata input/filename]]]]-1]]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_left_Artist + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1640 + ypos 2790 + } + Dot { + name Dot30 + xpos -1606 + ypos 2884 + } + Switch { + inputs 2 + which {{parent.TextFields.aritist_on}} + name Switch4 + xpos -1750 + ypos 2881 + } + Dot { + name Dot31 + xpos -1716 + ypos 2995 + } +set N6741a800 [stack 0] + Text { + message "TC / Frame: \[value TextFields.plate_tc] / \[value this.frame]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*0.4)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*0.4)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_left_timecode_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1853 + ypos 2992 + } + Dot { + name Dot32 + xpos -1819 + ypos 3086 + } +push $N6741a800 + Text { + message "TC / Frame: \[metadata input/timecode] / \[value this.frame]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*0.4)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*0.4)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_left_timecode + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1644 + ypos 2992 + } + Dot { + name Dot33 + xpos -1610 + ypos 3086 + } + Switch { + inputs 2 + which {{parent.TextFields.tc_on}} + name Switch5 + xpos -1754 + ypos 3083 + } + Dot { + name Dot36 + xpos -1720 + ypos 3225 + } +set N6744cc00 [stack 0] + Dot { + name Dot39 + xpos -1593 + ypos 3225 + } +set N6744c800 [stack 0] + Dot { + name Dot40 + xpos -1483 + ypos 3225 + } +set N6744c400 [stack 0] + Dot { + name Dot41 + xpos -1321 + ypos 3225 + } +set N6744c000 [stack 0] + Dot { + name Dot42 + xpos -1196 + ypos 3225 + } +set N6c477c00 [stack 0] + Dot { + name Dot43 + xpos -1068 + ypos 3225 + } +set N6c477800 [stack 0] + Dot { + name Dot44 + xpos -947 + ypos 3225 + } + Text { + message "Content: \[value TextFields.plate_content]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content10 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -981 + ypos 3294 + } + Dot { + name Dot45 + xpos -947 + ypos 3480 + } +push $N6c477800 + Text { + message "Content: mattpainting" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content9 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1102 + ypos 3290 + } +push $N6c477c00 + Text { + message "Content: matchmove" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content8 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1230 + ypos 3290 + } +push $N6744c000 + Text { + message "Content: animation" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content7 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1355 + ypos 3289 + } +push $N6744c400 + Text { + message "Content: previz" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content6 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1518 + ypos 3292 + } +push $N6744c800 + Text { + message "Content: model" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content5 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1627 + ypos 3292 + } +push $N6744cc00 + Text { + message "Content: texture" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content4 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1754 + ypos 3294 + } +push $N6744cc00 + Dot { + name Dot38 + xpos -1865 + ypos 3225 + } +set N6c4cd400 [stack 0] + Text { + message "Content: lighting" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content3 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1899 + ypos 3289 + } +push $N6c4cd400 + Dot { + name Dot37 + xpos -1975 + ypos 3225 + } +set N6c4cc800 [stack 0] + Text { + message "Content: comp" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content2 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -2009 + ypos 3291 + } +push $N6c4cc800 + Dot { + name Dot34 + xpos -2099 + ypos 3225 + } +set N6c4fbc00 [stack 0] + Text { + message "Content: paint" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content1 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -2133 + ypos 3290 + } +push $N6c4fbc00 + Dot { + name Dot35 + xpos -2209 + ypos 3225 + } + Text { + message "Content: roto" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Content0 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -2243 + ypos 3289 + } + Switch { + inputs 11 + which {{parent.TextFields.choice_content}} + name Switch6 + xpos -1754 + ypos 3477 + } + Dot { + name Dot46 + xpos -1720 + ypos 3661 + } +set N6c4fa400 [stack 0] + Dot { + name Dot51 + xpos -1578 + ypos 3661 + } +set N6c4fa000 [stack 0] + Dot { + name Dot52 + xpos -1416 + ypos 3661 + } +set N6c52fc00 [stack 0] + Dot { + name Dot53 + xpos -1262 + ypos 3661 + } +set N6c52f800 [stack 0] + Dot { + name Dot54 + xpos -1112 + ypos 3661 + } +set N6c52f400 [stack 0] + Dot { + name Dot55 + xpos -981 + ypos 3661 + } +set N6c52f000 [stack 0] + Dot { + name Dot113 + xpos -864 + ypos 3661 + } +set N6c52ec00 [stack 0] + Dot { + name Dot56 + xpos -704 + ypos 3661 + } + Text { + message "Department: \[value TextFields.plate_dmpt]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department10 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -738 + ypos 3741 + } + Dot { + name Dot57 + xpos -704 + ypos 3958 + } +push $N6c52ec00 + Text { + message "\[string map \{\"cmp\" \"Compositing\" \"comp\" \"Compositing\" \"previews\" \"Previz\" \"roto\" \"Roto\"\} \[value img_department_auto.message] ]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {1024 778} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + name img_department_auto_map + tile_color 0xff00ff + xpos -898 + ypos 3769 + } +push $N6c52f000 + Text { + message "Department: MotionGraphics" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department9 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1015 + ypos 3738 + } +push $N6c52f400 + Text { + message "Department: Effects" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department8 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1146 + ypos 3738 + } +push $N6c52f800 + Text { + message "Department: Mattepainting" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department7 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1296 + ypos 3736 + } +push $N6c52fc00 + Text { + message "Department: Animation" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department6 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1450 + ypos 3741 + } +push $N6c4fa000 + Text { + message "Department: Texturelighting" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department5 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1612 + ypos 3742 + } +push $N6c4fa400 + Text { + message "Department: Modeling" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department4 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1754 + ypos 3743 + } +push $N6c4fa400 + Dot { + name Dot50 + xpos -1853 + ypos 3661 + } +set N6c578000 [stack 0] + Text { + message "Department: Previz" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department3 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1887 + ypos 3745 + } +push $N6c578000 + Dot { + name Dot49 + xpos -1963 + ypos 3661 + } +set N6c5af400 [stack 0] + Text { + message "Department: Matchmove" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department2 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1997 + ypos 3744 + } +push $N6c5af400 + Dot { + name Dot48 + xpos -2081 + ypos 3661 + } +set N6c5ae800 [stack 0] + Text { + message "Department: Compositing" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department1 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -2115 + ypos 3745 + } +push $N6c5ae800 + Dot { + name Dot47 + xpos -2202 + ypos 3661 + } + Text { + message "Department: RotoPaint" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_department0 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -2236 + ypos 3746 + } + Switch { + inputs 12 + which {{parent.TextFields.choice_dmpt}} + name Switch8 + xpos -1754 + ypos 3955 + } + Text { + message "Resolution: \[value ReAspect.format.w] x \[value ReAspect.format.h]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*0.4)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*0.4)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_center_Resolution + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1754 + ypos 4151 + } + Dot { + name Dot115 + xpos -1720 + ypos 4265 + } +set N6c5d6800 [stack 0] + Text { + message "Publish: \[value parent.TextFields.plate_pub]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_right} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_right_Publish_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1847 + ypos 4334 + } +push $N6c5d6800 + Text { + message "Publish: \[metadata input/mtime]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_right} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_right_Publish + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1668 + ypos 4337 + } + Switch { + inputs 2 + which {{parent.TextFields.pub_on}} + name Switch28 + xpos -1754 + ypos 4380 + } + Dot { + name Dot58 + xpos -1720 + ypos 4432 + } +set N6c60b400 [stack 0] + Text { + message "Version: \[value TextFields.plate_vers]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_right} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_right_Version_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1857 + ypos 4429 + } +push $N6c60b400 + Text { + message "Version: \[regexp -inline \"v\\\[0-9]+\" \[file tail \[file rootname \[metadata input/filename]]]]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_right} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_right_Version + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1646 + ypos 4429 + } + Switch { + inputs 2 + which {{parent.TextFields.vers_on}} + name Switch10 + xpos -1754 + ypos 4513 + } + Dot { + name Dot59 + xpos -1720 + ypos 4607 + } +set N6c60a000 [stack 0] + Text { + message "Frame Rate: \[value TextFields.plate_rate]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_right} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*0.4)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*0.4)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_right_Rate_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1865 + ypos 4604 + } +push $N6c60a000 + Text { + message "Frame Rate: \[metadata input/frame_rate]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_right} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*0.4)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*0.4)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_right_Rate + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -1641 + ypos 4604 + } + Switch { + inputs 2 + which {{parent.TextFields.rate_on}} + name Switch11 + xpos -1751 + ypos 4686 + } + Transform { + translate {0 {-((ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778)-ReAspect.format.h)/4}} + center {1024 0} + name Transform3 + xpos -1751 + ypos 4782 + disable {{!parent.re_black}} + } + Shuffle { + name Shuffle3 + xpos -1751 + ypos 4924 + } +push $N673bb400 + DropShadow { + inputs 2 + name DropShadow1 + note_font Verdana + xpos -2743 + ypos 4924 + color {0 0 0} + dropshadow_distance 3 + } + Dot { + name Dot2 + xpos -2709 + ypos 5196 + } + Crop { + box {0 0 {ReAspect.format.w} {input.format.h}} + reformat true + crop false + name Crop2 + xpos -1011 + ypos 5193 + } +push $N62d33400 +push $N6310f600 + Dot { + name Dot8 + xpos 959 + ypos 2015 + } + Transform { + translate {{(root.format.w/root.format.h)<1.77?(root.format.w/root.format.h)>1.78?1:root.format.pixel_aspect>1.1?-11:-80:-11} {(root.format.w/root.format.h)<1.77?(root.format.w/root.format.h)>1.78?1:root.format.pixel_aspect>1.1?-115:0:-115}} + scale {{root.format.pixel_aspect>1.1?0.9:(root.format.w/root.format.h)<1.77?0.98:1.08}} + center {1024 576} + name santi_logo_size2 + tile_color 0xff0000ff + xpos 925 + ypos 2114 + } + Transform { + scale {1 {(root.format.w/root.format.h)>1.78?1:root.format.pixel_aspect>1.1?root.format.pixel_aspect:1}} + center {1024 778} + name Ratio_sant_logo2 + tile_color 0xff0000ff + xpos 925 + ypos 2172 + } +set N6c72e800 [stack 0] + ContactSheet { + width {{root.format.w}} + height {{root.format.h}} + rows 9 + columns 9 + center true + roworder TopBottom + colorder RightLeft + startframe 1 + endframe 1 + name logo_top_left8 + tile_color 0xff00ff + xpos 1040 + ypos 2229 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } +push $N6c72e800 + ContactSheet { + width {{root.format.w}} + height {{(root.format.w/root.format.h)>1.78?(((root.format.w/1.778)-root.format.h)+root.format.h):root.format.pixel_aspect>1.1?((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))-1)+1)*root.format.h):root.format.h}} + rows 7 + columns 7 + center true + roworder TopBottom + colorder RightLeft + startframe 1 + endframe 1 + name logo_top_left2 + tile_color 0xff00ff + xpos 822 + ypos 2224 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } + Switch { + inputs 2 + which {{parent.re_black}} + name Switch18 + xpos 926 + ypos 2288 + } +push $N672d2c00 + Dot { + name Dot6 + xpos -210 + ypos 367 + } + Transform { + translate {-211 {(root.format.w/root.format.h)<1.77?root.format.pixel_aspect>1.1?-45:100:-45}} + scale 0.98 + center {1024 576} + name santi_logo_size3 + tile_color 0xff0000ff + xpos -244 + ypos 469 + } + Transform { + scale {1 {(root.format.w/root.format.h)>1.78?1:root.format.pixel_aspect>1.1?root.format.pixel_aspect:1}} + center {1024 778} + name Ratio_sant_logo3 + tile_color 0xff0000ff + xpos -244 + ypos 517 + } +set N6c76d400 [stack 0] + ContactSheet { + width {{root.format.w}} + height {{root.format.h}} + rows 9 + columns 9 + center true + roworder TopBottom + startframe 1 + endframe 1 + name logo_top_left7 + tile_color 0xff00ff + xpos -299 + ypos 578 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } +push $N6c76d400 + ContactSheet { + width {{root.format.w}} + height {{(root.format.w/root.format.h)>1.78?(((root.format.w/1.778)-root.format.h)+root.format.h):root.format.pixel_aspect>1.1?((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))-1)+1)*root.format.h):root.format.h}} + rows 7 + columns 7 + center true + roworder TopBottom + startframe 1 + endframe 1 + name logo_top_left3 + tile_color 0xff00ff + xpos -182 + ypos 575 + addUserKnob {20 User l Show_Detail} + addUserKnob {22 show l "Show Detail" -STARTLINE T "import nuke,math\nnode = nuke.thisNode()\ndeps = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in range(len(deps)):\n text = nuke.nodes.Text()\n text.setInput(0,deps\[i])\n node.setInput(i,text)\ndeps2 = nuke.dependencies(node, nuke.INPUTS | nuke.HIDDEN_INPUTS)\nfor i in deps2:\n i.knob(\"box\").setValue(\[260,-360,1850,190])\n i.knob(\"font\").setValue(\"C:/Windows/Fonts/arial.ttf\")\n i.knob(\"size\").setValue(120)\n i.knob(\"message\").setValue(\"\[value input.first] - \[value input.last] \[lindex \[split \[lindex \[split \[value input.file] '/'] 9] '.'] 0]\")\nif len(deps) == 1:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(1)\nelif len(deps) == 2:\n node.knob(\"rows\").setValue(1)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 4 and len(deps) > 2:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(2)\nelif len(deps) <= 6 and len(deps) > 4:\n node.knob(\"rows\").setValue(2)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 9 and len(deps) > 6:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(3)\nelif len(deps) <= 12 and len(deps) > 9:\n node.knob(\"rows\").setValue(3)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 16 and len(deps) > 12:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(4)\nelif len(deps) <= 20 and len(deps) > 16:\n node.knob(\"rows\").setValue(4)\n node.knob(\"columns\").setValue(5)\nelse:\n n = int(math.sqrt(len(deps) + 1/4) - 0.5)\n node.knob(\"rows\").setValue(n)\n node.knob(\"columns\").setValue(n)"} + } + Switch { + inputs 2 + which {{parent.re_black}} + name Switch22 + xpos -236 + ypos 633 + } +push $N62d5dc00 + Dot { + name Dot103 + xpos 2290 + ypos -1948 + } + Reformat { + format {{{root.format}}} + resize none + name Reformat27 + xpos 2256 + ypos -1747 + disable {{root.format.pixel_aspect>1.1?0:1}} + } + Reformat { + type scale + format "3656 2054 0 0 3656 2054 1 c" + scale {1 {(root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w))):root.format.w/root.format.h<1.77?1:(((root.format.w)/1.778)/(root.format.h)))}} + name Reformat28 + xpos 2256 + ypos -1391 + disable {{parent.re_black}} + } +set N6c7a7c00 [stack 0] + Shuffle { + alpha white + name Shuffle5 + xpos 2410 + ypos -1391 + } + Dot { + name Dot104 + xpos 2555 + ypos -1388 + } +set N6c7a7000 [stack 0] + Dot { + name Dot105 + xpos 2831 + ypos -1388 + } +set N6c7a6c00 [stack 0] + Crop { + box {0 0 {root.format.w} {root.format.h}} + name root_top_crop1 + xpos 2742 + ypos -1335 + } + Crop { + box {0 {((root_top_crop1.box.t-(root_top_crop1.box.r/2.35))/2)} {root_top_crop1.box.r} {root_top_crop1.box.t-((root_top_crop1.box.t-(root_top_crop1.box.r/2.35))/2)}} + name Crop6 + xpos 2742 + ypos -1281 + } +push $N6c7a6c00 + Crop { + box {0 0 {root.format.w} {root.format.w/1.778}} + name root_top_crop + xpos 2849 + ypos -1335 + } + Crop { + box {0 {((root_top_crop.box.t-(root_top_crop.box.r/2.35))/2)} {root_top_crop.box.r} {root_top_crop.box.t-((root_top_crop.box.t-(root_top_crop.box.r/2.35))/2)}} + name Crop11 + xpos 2845 + ypos -1279 + } + Switch { + inputs 2 + which {{parent.re_black}} + name Switch26 + xpos 2801 + ypos -1224 + addUserKnob {20 root_cinput l "root input"} + addUserKnob {12 top_box} + top_box {{input.box.r} {input.box.t}} + } + Invert { + name Invert8 + xpos 2797 + ypos -972 + } +clone $C6734a800 { + xpos 2797 + ypos -910 + selected false + } + Multiply { + value 0 + name Multiply4 + xpos 2797 + ypos -839 + disable {{parent.ratio_on?0:(root.format.w/root.format.h)>1.78?1:0}} + } +push $N6c7a7000 + Crop { + box {0 {int((root.format.w/root.format.h)>1.78?(((root.format.w/1.778)-root.format.h)/2):root.format.pixel_aspect>1.1?((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))-1)/2)*root.format.h):(root.format.w/root.format.h)<1.77?(((root.format.h-(root.format.w/ratio_control.ratio_ture)))/2):(((root.format.h-(root.format.w/2.35)))/2))} {root.format.w} {"int((root.format.w/root.format.h)>1.78?((((root.format.w/1.778)-root.format.h)/2)+root.format.h):root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))-1)/2)+1)*root.format.h):(root.format.w/root.format.h)>1.77?(root.format.h-((root.format.h-(root.format.w/2.35)))/2):(root.format.h-((root.format.h-(root.format.w/ratio_control.ratio_ture)))/2))\n"}} + name Crop12 + xpos 2521 + ypos -1316 + disable {{parent.re_black}} + } + Invert { + name Invert9 + xpos 2521 + ypos -1011 + } + Multiply { + value {{(root.format.w/root.format.h)>1.78?1:root.format.pixel_aspect>1.1?1:o_mult_img.value}} + name Multiply7 + xpos 2521 + ypos -938 + } + Multiply { + value 0 + name Multiply3 + xpos 2521 + ypos -886 + disable {{parent.ratio_on?(root.format.w/root.format.h)>1.78?1:root.format.pixel_aspect>1.1?1:0:1}} + } + Merge2 { + inputs 2 + name Merge11 + xpos 2521 + ypos -833 + disable {{root.format.w/root.format.h>1.78?root.format.w/root.format.h<2.34?0:1:1}} + } + Constant { + inputs 0 + channels rgb + name Constant7 + xpos 2715 + ypos -774 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy6 + xpos 2521 + ypos -756 + } + Premult { + name Premult9 + xpos 2521 + ypos -659 + } +push $N6c7a7c00 + Merge2 { + inputs 2 + name Merge12 + xpos 2256 + ypos -659 + } + Merge2 { + inputs 2 + name Merge13 + xpos 2256 + ypos 633 + } + Merge2 { + inputs 2 + name Merge14 + xpos 2256 + ypos 2288 + } + Dot { + name Dot1 + xpos 2290 + ypos 2408 + } +set N6c812000 [stack 0] + Dot { + name Dot11 + xpos 959 + ypos 2408 + } + CopyMetaData { + inputs 2 + mergeMode Meta+Image + metadatafilterMode "keys only" + name CopyimgMetaData2 + tile_color 0xff + xpos 925 + ypos 2451 + } + Shuffle { + red black + green black + blue black + alpha black + name Shuffle20 + xpos 925 + ypos 2515 + } + Dot { + name Dot61 + xpos 959 + ypos 2602 + } +set N6c84f000 [stack 0] + Dot { + name Dot62 + xpos 832 + ypos 2602 + } + Text { + message "\[value control_font.shot_asset]: \[value parent.TextFields.plate_shot]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_left_Shot_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 798 + ypos 2708 + } + Dot { + name Dot60 + xpos 832 + ypos 2793 + } +push $N6c84f000 + Text { + message "\[value control_font.shot_asset]: \[lindex \[split \[file tail \[file rootname \[value root.name]]] \".\"] 0]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_left_Shot + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 925 + ypos 2705 + } + Switch { + inputs 2 + which {{parent.TextFields.shot_on}} + name Switch12 + xpos 925 + ypos 2790 + } + Dot { + name Dot64 + xpos 959 + ypos 2861 + } +set N6c873400 [stack 0] + Dot { + name Dot65 + xpos 830 + ypos 2861 + } + Text { + message "Artist: \[value TextFields.plate_aritist]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_left_artist_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 796 + ypos 2926 + } + Dot { + name Dot63 + xpos 830 + ypos 3011 + } +push $N6c873400 + Text { + message "Artist: \[lindex \[split \[file tail \[file rootname \[value root.name]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[value root.name]]]]-1]]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_left_artist + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 925 + ypos 2924 + } + Switch { + inputs 2 + which {{parent.TextFields.aritist_on}} + name Switch13 + xpos 925 + ypos 3008 + } + Dot { + name Dot66 + xpos 959 + ypos 3059 + } +set N6c8a1800 [stack 0] + Dot { + name Dot68 + xpos 829 + ypos 3059 + } + Text { + message "TC / Frame: \[value TextFields.plate_tc] / \[value this.frame]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*0.4)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*0.4)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_left_timecode_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 795 + ypos 3125 + } + Dot { + name Dot67 + xpos 829 + ypos 3210 + } +push $N6c8a1800 + Text { + message "TC / Frame: \[metadata input/timecode] / \[value this.frame]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{parent.control_font.p_left} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*0.4)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*0.4)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_left_timecode + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 925 + ypos 3123 + } + Switch { + inputs 2 + which {{parent.TextFields.tc_on}} + name Switch14 + xpos 925 + ypos 3207 + } + Dot { + name Dot69 + xpos 959 + ypos 3335 + } +set N6c8dbc00 [stack 0] + Dot { + name Dot73 + xpos 1105 + ypos 3335 + } +set N6c8db800 [stack 0] + Dot { + name Dot74 + xpos 1253 + ypos 3335 + } +set N6c8db400 [stack 0] + Dot { + name Dot75 + xpos 1421 + ypos 3335 + } +set N6c8db000 [stack 0] + Dot { + name Dot76 + xpos 1572 + ypos 3335 + } +set N6c8dac00 [stack 0] + Dot { + name Dot77 + xpos 1709 + ypos 3335 + } +set N6c8da800 [stack 0] + Dot { + name Dot78 + xpos 1852 + ypos 3335 + } +set N6c8da400 [stack 0] + Dot { + name Dot79 + xpos 2031 + ypos 3335 + } + Text { + message "Content: \[value TextFields.plate_content]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content10 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1997 + ypos 3435 + } + Dot { + name Dot80 + xpos 2031 + ypos 3648 + } +push $N6c8da400 + Text { + message "Content: mattpainting" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content9 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1818 + ypos 3434 + } +push $N6c8da800 + Text { + message "Content: matchmove" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content8 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1675 + ypos 3433 + } +push $N6c8dac00 + Text { + message "Content: animation" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content7 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1538 + ypos 3431 + } +push $N6c8db000 + Text { + message "Content: previz" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content6 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1387 + ypos 3431 + } +push $N6c8db400 + Text { + message "Content: model" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content5 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1219 + ypos 3428 + } +push $N6c8db800 + Text { + message "Content: texture" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content4 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1071 + ypos 3426 + } +push $N6c8dbc00 + Text { + message "Content: lighting" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content3 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 925 + ypos 3426 + } +push $N6c8dbc00 + Dot { + name Dot72 + xpos 849 + ypos 3335 + } +set N6c955800 [stack 0] + Text { + message "Content: comp" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content2 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 815 + ypos 3427 + } +push $N6c955800 + Dot { + name Dot71 + xpos 742 + ypos 3335 + } +set N6c954c00 [stack 0] + Text { + message "Content: paint" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content1 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 708 + ypos 3428 + } +push $N6c954c00 + Dot { + name Dot70 + xpos 632 + ypos 3335 + } + Text { + message "Content: roto" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_Content0 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 598 + ypos 3427 + } + Switch { + inputs 11 + which {{parent.TextFields.choice_content}} + name Switch15 + xpos 925 + ypos 3645 + } + Dot { + name Dot81 + xpos 959 + ypos 3817 + } +set N6c985400 [stack 0] + Dot { + name Dot85 + xpos 1085 + ypos 3817 + } +set N6c985000 [stack 0] + Dot { + name Dot86 + xpos 1211 + ypos 3817 + } +set N6c984c00 [stack 0] + Dot { + name Dot87 + xpos 1330 + ypos 3817 + } +set N6c984800 [stack 0] + Dot { + name Dot88 + xpos 1472 + ypos 3817 + } +set N6c984400 [stack 0] + Dot { + name Dot89 + xpos 1610 + ypos 3817 + } +set N6c984000 [stack 0] + Dot { + name Dot90 + xpos 1780 + ypos 3817 + } +set N6c9a7c00 [stack 0] + Dot { + name Dot114 + xpos 1910 + ypos 3817 + } +set N6c9a7800 [stack 0] + Dot { + name Dot91 + xpos 2090 + ypos 3817 + } + Text { + message "Department: \[value TextFields.plate_dmpt]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department10 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 2056 + ypos 3886 + } + Dot { + name Dot92 + xpos 2090 + ypos 4145 + } +push $N6c9a7800 + Text { + message "\[string map \{\"cmp\" \"Compositing\" \"comp\" \"Compositing\" \"previews\" \"Previz\" \"roto\" \"Roto\"\} \[value root_department_auto.message] ]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {1024 778} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + name root_department_auto_map + tile_color 0xff00ff + xpos 1876 + ypos 3918 + } +push $N6c9a7c00 + Text { + message "Department: MotionGraphics" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department9 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1746 + ypos 3880 + } +push $N6c984000 + Text { + message "Department: Effects" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department8 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1576 + ypos 3882 + } +push $N6c984400 + Text { + message "Department: Mattepainting" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department7 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1438 + ypos 3881 + } +push $N6c984800 + Text { + message "Department: Animation" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department6 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1296 + ypos 3886 + } +push $N6c984c00 + Text { + message "Department: Texturelighting" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department5 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1177 + ypos 3883 + } +push $N6c985000 + Text { + message "Department: Modeling" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department4 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1051 + ypos 3879 + } +push $N6c985400 + Text { + message "Department: Previz" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department3 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 925 + ypos 3881 + } +push $N6c985400 + Dot { + name Dot84 + xpos 839 + ypos 3817 + } +set N6ca02400 [stack 0] + Text { + message "Department: Matchmove" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department2 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 805 + ypos 3886 + } +push $N6ca02400 + Dot { + name Dot83 + xpos 719 + ypos 3817 + } +set N6ca2b800 [stack 0] + Text { + message "Department: Compositing" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department1 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 685 + ypos 3879 + } +push $N6ca2b800 + Dot { + name Dot82 + xpos 592 + ypos 3817 + } + Text { + message "Department: RotoPaint" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_center_department0 + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 558 + ypos 3878 + } + Switch { + inputs 12 + which {{parent.TextFields.choice_dmpt}} + name Switch17 + xpos 925 + ypos 4142 + } + Text { + message "Resolution: \[value root.format.w] x \[value root.format.h]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*0.4)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*0.4)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name center_Resolution + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 921 + ypos 4266 + } + Dot { + name Dot116 + xpos 953 + ypos 4366 + } +set N6ca61800 [stack 0] + Text { + message "Publish: \[value parent.TextFields.plate_pub]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/1.25} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name right_Publish_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 844 + ypos 4454 + } +push $N6ca61800 + Text { + message "Publish: \[date %Y-%m-%d] \[clock format \[clock seconds] -format \{%H:%M:%S\}]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/1.25} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name right_Publish + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 983 + ypos 4450 + } + Switch { + inputs 2 + which {{parent.TextFields.pub_on}} + name Switch29 + xpos 921 + ypos 4499 + } + Dot { + name Dot93 + xpos 955 + ypos 4536 + } +set N6ca60400 [stack 0] + Text { + message "Version: \[value TextFields.plate_vers]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/1.25} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_right_Version_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 856 + ypos 4569 + } +push $N6ca60400 + Text { + message "Version: \[regexp -inline \"v\\\[0-9]+\" \[file tail \[file rootname \[value root.name]]]]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/1.25} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_right_Version + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 990 + ypos 4570 + } + Switch { + inputs 2 + which {{parent.TextFields.vers_on}} + name Switch19 + xpos 921 + ypos 4643 + } + Dot { + name Dot94 + xpos 955 + ypos 4685 + } +set N6ca97000 [stack 0] + Text { + message "Frame Rate: \[value TextFields.plate_rate]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/1.25} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*0.4)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*0.4)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_right_Rate_input + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 849 + ypos 4720 + } +push $N6ca97000 + Text { + message "Frame Rate: \[value root.fps]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/1.25} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*0.4)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*0.4)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_right_Rate + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 998 + ypos 4719 + } + Switch { + inputs 2 + which {{parent.TextFields.rate_on}} + name Switch20 + xpos 923 + ypos 4764 + } + Transform { + translate {0 {-((root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778)-root.format.h)/4}} + center {1024 0} + name Transform4 + xpos 923 + ypos 4847 + disable {{!parent.re_black}} + } + Shuffle { + name Shuffle18 + xpos 921 + ypos 4923 + } +push $N6c812000 + DropShadow { + inputs 2 + name DropShadow2 + note_font Verdana + xpos 2256 + ypos 4923 + color {0 0 0} + dropshadow_distance 3 + } + Dot { + name Dot3 + xpos 2290 + ypos 5196 + } + Crop { + box {0 0 {root.format.w} {input.format.h}} + reformat true + crop false + name Crop3 + xpos 613 + ypos 5193 + } + Switch { + inputs 2 + which {{parent.mode}} + name Mode + tile_color 0xedffff + xpos -375 + ypos 5193 + } + Switch { + inputs 2 + which {{"frame<=\[value SlateFrame.slate_frame]"}} + name SlateFrameSet + xpos -375 + ypos 5876 + } + Output { + name Output + xpos -375 + ypos 6508 + } +push $N6c9a7800 + Text { + message "Department: \[lindex \[split \[file tail \[file rootname \[value root.name]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[value root.name]]]]-2]]" + font "\[value Arial.font]" + size {{root.format.pixel_aspect>1.1?((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h/(root.format.w/1.778))*control_font.font_size:(root.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{root.format.w/parent.control_font.p_center} {root.format.pixel_aspect>1.1?(((((((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h)-root.format.h)/2)*1.2)/3:(((root.format.w/1.778-(root.format.w/2.35))/2)*1.2)/3} {root.format.w} {root.format.pixel_aspect>1.1?(((root.format.w)/1.78)/(root.format.h-((root.format.h*root.format.pixel_aspect)-root.format.w)))*root.format.h:root.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name root_department_auto + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos 1947 + ypos 3868 + } +push $N6c52ec00 + Text { + message "Department: \[lindex \[split \[file tail \[file rootname \[metadata input/filename]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[metadata input/filename]]]]-2]]" + font "\[value Arial.font]" + size {{ReAspect.format.pixel_aspect>1.1?((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h/(ReAspect.format.w/1.778))*control_font.font_size:(ReAspect.format.w/2048)*control_font.font_size}} + yjustify bottom + Transform 1 + box {{ReAspect.format.w/parent.control_font.p_center} {ReAspect.format.pixel_aspect>1.1?(((((((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h)-ReAspect.format.h)/2)*1.2)/3:(((ReAspect.format.w/1.778-(ReAspect.format.w/2.35))/2)*1.2)/3} {ReAspect.format.w} {ReAspect.format.pixel_aspect>1.1?(((ReAspect.format.w)/1.78)/(ReAspect.format.h-((ReAspect.format.h*ReAspect.format.pixel_aspect)-ReAspect.format.w)))*ReAspect.format.h:ReAspect.format.w/1.778}} + center {2560 1350} + color {{parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color} {parent.control_font.font_color}} + color_panelDropped true + name img_department_auto + tile_color 0x74ff00ff + gl_color 0x767675ff + xpos -820 + ypos 3711 + } +push $N62d17200 + Text { + message "\[expr \[value S_mode.which]==1?\"\[lindex \[split \[file tail \[file rootname \[metadata input/filename]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[metadata input/filename]]]]-2]]\":\"\[lindex \[split \[file tail \[file rootname \[value root.name]]] \"_\"] \[expr \[regexp -all \"_\" \[file tail \[file rootname \[value root.name]]]]-2]]\"]" + font "\[value Arial.font]" + size {{"\[value Text_Version.size]"}} + Transform 1 + translate {{"\[value Text_ShotName.translate.x]"} {input.translate.y-((size)*1.2)}} + name Text_department_auto + tile_color 0xff5f00ff + xpos -4800 + ypos 3801 + } + NoOp { + inputs 0 + name CGIver + tile_color 0xff0000ff + xpos -3188 + ypos 3690 + hide_input true + addUserKnob {20 User} + addUserKnob {1 ver l Version} + addUserKnob {4 CGIverdisplay l "CGI Version Display" M {Automatic Show Hide}} + } + Switch { + inputs 0 + which {{control_font.proj_logo_c}} + name project_choice + tile_color 0xff0000ff + xpos -5687 + ypos 3257 + } + NoOp { + inputs 0 + name InfoPlate + tile_color 0xff0000ff + xpos -3185 + ypos 3830 + hide_input true + addUserKnob {20 User} + addUserKnob {14 res R 0 100} + res {{"\[exists parent.input]==1?parent.input.format.w:root.format.w"} {"\[exists parent.input]==1?parent.input.format.h:root.format.h"}} + addUserKnob {7 plate_aspect R 0 3} + plate_aspect {{"\[exists parent.input]==1?parent.input.pixel_aspect:root.pixel_aspect"}} + addUserKnob {26 ""} + addUserKnob {7 platefps R 0 30} + platefps {{root.fps}} + addUserKnob {26 ""} + addUserKnob {3 minutes} + minutes {{Handles.cutlength/(root.fps*60)/100*60}} + addUserKnob {3 seconds} + seconds {{(Handles.cutlength/(root.fps*60)/100*60*100)}} + addUserKnob {3 andframes} + andframes {{Handles.cutlength/root.fps}} + addUserKnob {26 ""} + addUserKnob {6 proxyon +STARTLINE} + proxyon {{root.proxy}} + addUserKnob {14 proxyres R 0 100} + proxyres {{res.w*root.proxy_scale} {res.h*root.proxy_scale}} + addUserKnob {7 proxyscal} + proxyscal {{1/root.proxy_scale}} + } + NoOp { + inputs 0 + name Handles + tile_color 0xff0000ff + xpos -3186 + ypos 3788 + hide_input true + addUserKnob {20 User} + addUserKnob {3 handlesIN l "Handle IN" t "Frames before start"} + addUserKnob {3 handlesOUT l "Handle OUT" t "frames after finish" -STARTLINE} + addUserKnob {4 DisplayHandles l "Display Handles" t "Handles display mode" M {Automatic Show Hide}} + addUserKnob {3 first l "First Frame"} + first {{"\[exists parent.input]==1?parent.input.first_frame:root.first_frame"}} + addUserKnob {3 last l "Last Frame" -STARTLINE} + last {{"\[exists parent.input]==1?parent.input.last_frame:root.last_frame"}} + addUserKnob {3 cutlength l "Cut Length"} + cutlength {{"\[exists parent.input]==1?FrameRange.last_frame-(FrameRange.first_frame-1):0"}} + } + NoOp { + inputs 0 + name FocalLength + tile_color 0xff0000ff + xpos -3187 + ypos 3740 + hide_input true + addUserKnob {20 User} + addUserKnob {1 focalmm l "Focal Length (in mm)"} + addUserKnob {4 focaldisplay l "Focal Length Display" M {Automatic Show Hide ""}} + } + NoOp { + inputs 0 + name OS_Switch + tile_color 0xffffff + xpos -8765 + ypos 1135 + hide_input true + addUserKnob {20 os_switch l OS_Switch} + addUserKnob {4 operative_system l OS t "Select your OS" M {Linux Mac Windows}} + operative_system Windows + addUserKnob {22 substitute_path l INVISIBLE t "This changes the server path in all 'Read' nodes on this script" -STARTLINE +INVISIBLE} + addUserKnob {1 tcl_expression l INVISIBLE t "TCL expresion for Linux/Mac options" +INVISIBLE} + tcl_expression "\[value \[value operative_system]_path]" + addUserKnob {26 instructions l "" t "Instructions to apply this OS_Switch" +STARTLINE T "Instructions:\nLINUX: Substitute \"/mnt/server/\" with \"\[value OS_Switch1.tcl_expression]\".\nMAC: Substitute \"/Volumes/\" with \"\[value OS_Switch1.tcl_expression]\".\nWINDOWS: Substitute \"//Server/\" with \"\[value OS_Switch1.tcl_expression]\".\n*Note that the number of the node can be different depending on how many OS_Switch nodes had been created."} + addUserKnob {1 CopyThis l "copy this!"} + CopyThis "\[value OS_Switch.tcl_expression]" + addUserKnob {20 OS_paths l "OS Paths"} + addUserKnob {2 Linux_path l "Linux Server Path" t "Path to find the server from Linux"} + Linux_path /mnt/server/ + addUserKnob {2 Mac_path l "Mac Server Path" t "Path to find the server from Mac"} + Mac_path /Volumes/ + addUserKnob {2 Windows_path l "Windows Server Path" t "Path to find the server from Mac"} + Windows_path //Server/ + } +push $N63328800 + Transform { + center {914 778} + name CenterReference + xpos -8489 + ypos 1300 + } + NoOp { + inputs 0 + name SlateFrame + tile_color 0xff0000ff + xpos -3187 + ypos 3877 + hide_input true + addUserKnob {20 User} + addUserKnob {3 slate_frame l "slate frame"} + slate_frame {{parent.mode?startframe.slate_frame>0?startframe.slate_frame-1:(Input.framerange.w-1):(first_frame-1)}} + addUserKnob {3 autoslate} + autoslate {{parent.FrameRange.knob.first_frame.main-1}} + } + NoOp { + inputs 0 + name DateTimeFormat + tile_color 0xff0000ff + xpos -3189 + ypos 4108 + hide_input true + addUserKnob {20 User} + addUserKnob {4 dateformat l "Date Format" t "Date format" M {"Day DD/MM/YYYY" "Day MM/DD/YYYY" "Day DD.MM.YYYY" "Day MM.DD.YYYY" "Day DD/MM/YY" "Day MM/DD/YY" "Day DD.MM.YY" "Day MM.DD.YY" DD/MM/YYYY MM/DD/YYYY DD.MM.YYYY MM.DD.YY DD/MM/YY MM/DD/YY DD.MM.YY MM.DD.YY "" "" ""}} + addUserKnob {4 timeformat l "Time Format" t "Time format" M {HH:MM:SS H:MM:SS HH:MM H:MM "HH:MM:SS AM/PM" "H:MM:SS AM/PM" "HH:MM AM/PM" "H:MM AM/PM" "Time not displayed" "" ""}} + addUserKnob {4 dateformatoverlay l "Date Format" t "Date format" M {"Day DD/MM/YYYY" "Day MM/DD/YYYY" "Day DD.MM.YYYY" "Day MM.DD.YYYY" "Day DD/MM/YY" "Day MM/DD/YY" "Day DD.MM.YY" "Day MM.DD.YY" DD/MM/YYYY MM/DD/YYYY DD.MM.YYYY MM.DD.YY DD/MM/YY MM/DD/YY DD.MM.YY MM.DD.YY}} + addUserKnob {3 valuedate} + valuedate {{dateformat}} + addUserKnob {3 valuetime} + valuetime {{timeformat}} + addUserKnob {3 valuedateoverlays} + valuedateoverlays {{dateformatoverlay}} + addUserKnob {26 ""} + addUserKnob {1 formatdate l "Format Date"} + formatdate "\[expr \[value DateTimeFormat.valuedate]==0?\"\[clock format \[clock seconds] -format \{%Y-%m-%d\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==1?\"\[clock format \[clock seconds] -format \{%a %m/%d/%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==2?\"\[clock format \[clock seconds] -format \{%a %d.%m.%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==3?\"\[clock format \[clock seconds] -format \{%a %m.%d.%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==4?\"\[clock format \[clock seconds] -format \{%a %m/%d/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==5?\"\[clock format \[clock seconds] -format \{%a %m/%d/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==6?\"\[clock format \[clock seconds] -format \{%a %d.%m.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==7?\"\[clock format \[clock seconds] -format \{%a %m.%d.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==8?\"\[clock format \[clock seconds] -format \{%d/%m/%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==9?\"\[clock format \[clock seconds] -format \{%m/%d/%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==10?\"\[clock format \[clock seconds] -format \{%d.%m.%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==11?\"\[clock format \[clock seconds] -format \{%m.%d.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==12?\"\[clock format \[clock seconds] -format \{%d/%m/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==13?\"\[clock format \[clock seconds] -format \{%m/%d/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==14?\"\[clock format \[clock seconds] -format \{%d.%m.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedate]==15?\"\[clock format \[clock seconds] -format \{%m.%d.%y\}]\":\"\"]" + addUserKnob {1 formattime l "Format Time"} + formattime "\[expr \[value DateTimeFormat.valuetime]==0?\"\[clock format \[clock seconds] -format \{%H:%M:%S\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==1?\"\[clock format \[clock seconds] -format \{%k:%M:%S\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==2?\"\[clock format \[clock seconds] -format \{%H:%M\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==3?\"\[clock format \[clock seconds] -format \{%k:%M\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==4?\"\[clock format \[clock seconds] -format \{%I:%M:%S %p\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==5?\"\[clock format \[clock seconds] -format \{%l:%M:%S %p\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==6?\"\[clock format \[clock seconds] -format \{%I:%M %p\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==7?\"\[clock format \[clock seconds] -format \{%l:%M %p\}]\":\"\"]\[expr \[value DateTimeFormat.valuetime]==8?\"\":\"\"]" + addUserKnob {1 fdo l "Format Date Overlays"} + fdo "\[expr \[value DateTimeFormat.valuedateoverlays]==0?\"\[clock format \[clock seconds] -format \{%a %d/%m/%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==1?\"\[clock format \[clock seconds] -format \{%a %m/%d/%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==2?\"\[clock format \[clock seconds] -format \{%a %d.%m.%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==3?\"\[clock format \[clock seconds] -format \{%a %m.%d.%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==4?\"\[clock format \[clock seconds] -format \{%a %m/%d/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==5?\"\[clock format \[clock seconds] -format \{%a %m/%d/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==6?\"\[clock format \[clock seconds] -format \{%a %d.%m.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==7?\"\[clock format \[clock seconds] -format \{%a %m.%d.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==8?\"\[clock format \[clock seconds] -format \{%d/%m/%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==9?\"\[clock format \[clock seconds] -format \{%m/%d/%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==10?\"\[clock format \[clock seconds] -format \{%d.%m.%Y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==11?\"\[clock format \[clock seconds] -format \{%m.%d.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==12?\"\[clock format \[clock seconds] -format \{%d/%m/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==13?\"\[clock format \[clock seconds] -format \{%m/%d/%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==14?\"\[clock format \[clock seconds] -format \{%d.%m.%y\}]\":\"\"]\[expr \[value DateTimeFormat.valuedateoverlays]==15?\"\[clock format \[clock seconds] -format \{%m.%d.%y\}]\":\"\"]" + } + StickyNote { + inputs 0 + name startframe + tile_color 0xff0000ff + label startframe + xpos -3189 + ypos 3938 + addUserKnob {20 User} + addUserKnob {7 slate_frame l "Start Frame" R 0 2000} + } + NoOp { + inputs 0 + name FontPath + tile_color 0xff0000ff + xpos -3189 + ypos 3982 + hide_input true + addUserKnob {20 FontPaths l "Font Paths"} + addUserKnob {1 linreg l "Linux Regular"} + linreg "\"/usr/share/fonts/default/Type1/n019003l.pfb\"" + addUserKnob {1 linbold l "Linux Bold"} + linbold "\"/usr/share/fonts/default/Type1/n019004l.pfb\"" + addUserKnob {26 ""} + addUserKnob {1 winreg l "Windows Regular"} + winreg "\"C:/Windows/Fonts/arial.ttf\"" + addUserKnob {1 winbold l "Windows Bold"} + winbold "\"C:/Windows/Fonts/arialbd.ttf\"" + addUserKnob {26 ""} + addUserKnob {1 macreg l "Mac Regular"} + macreg "\"/Library/Fonts/Arial.ttf\"" + addUserKnob {1 macbold l "Mac Bold"} + macbold "\"/Library/Fonts/Arial Bold.ttf\"" + addUserKnob {26 ""} + addUserKnob {4 SystemOS l "OS Font Path" t "Choose the font path" M {Linux Windows Mac Chinese "" "" "" "" ""}} + SystemOS Windows + addUserKnob {3 OSChoice l INVISIBLE +INVISIBLE} + OSChoice {{SystemOS i}} + addUserKnob {4 chinese_choice l "chinese choice" M {Default Chinese "" "" "" ""}} + addUserKnob {3 c_choice l INVISIBLE +INVISIBLE} + c_choice {{chinese_choice}} + addUserKnob {2 regfont l "Custom Regular Font" t "Custom regular font path"} + addUserKnob {2 boldfont l "Custom Bold Font" t "Custom bold font path"} + } + NoOp { + inputs 0 + name TextFields + tile_color 0xff0000ff + xpos -3188 + ypos 3635 + hide_input true + addUserKnob {20 User} + addUserKnob {6 shot_on l "shot on" +STARTLINE} + addUserKnob {1 plate_shot l Shot} + addUserKnob {1 plate_task l "plate task"} + addUserKnob {6 aritist_on l "aritist on" +STARTLINE} + addUserKnob {1 plate_aritist l Aritist} + addUserKnob {6 tc_on l "timecode on" +STARTLINE} + addUserKnob {1 plate_tc l TimeCode} + addUserKnob {4 choice_content l "Choice Content" M {roto paint comp lighting texture model previz animation matchmove mattpainting customs "" ""}} + choice_content customs + addUserKnob {1 plate_content l content} + addUserKnob {4 choice_dmpt l "Choice Department" M {RotoPaint Compositing Matchmove Previz Modeling Texturelighting Animation Mattepainting Effects MotionGraphics Automatic Customs "" ""}} + choice_dmpt Automatic + addUserKnob {1 plate_dmpt l Department} + addUserKnob {6 pub_on l "publish on" +STARTLINE} + addUserKnob {1 plate_pub l publish} + addUserKnob {6 vers_on l "version on" +STARTLINE} + addUserKnob {1 plate_vers l version} + addUserKnob {6 rate_on l "rate on" +STARTLINE} + addUserKnob {1 plate_rate l rate} + addUserKnob {4 plate_status l Status M {WIP Final "Dailies Feedback" "Director's Review" "Director's Feedback" Custom... Blank "" "" "" "" "" ""}} + plate_status Final + addUserKnob {1 CustomStatus l " Custom Status" -STARTLINE} + addUserKnob {18 StatusColor l "Status Color"} + StatusColor {0 0 0} + addUserKnob {6 StatusColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {1 plate_artist l Artist} + addUserKnob {1 plate_description1 l "Description Line 1"} + addUserKnob {1 plate_description2 l "Description Line 2"} + addUserKnob {1 plate_description3 l "Description Line 3"} + addUserKnob {1 plate_description4 l "Description Line 4"} + addUserKnob {1 CompanyName l Company} + addUserKnob {18 InProgressColor l "\"IN PROGRESS\" Color"} + InProgressColor {0 0 0} + addUserKnob {6 InProgressColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {18 CompleteColor l "\"COMPLETE\" Color"} + CompleteColor {0 0 0} + addUserKnob {6 CompleteColor_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + } + NoOp { + inputs 0 + name Text_Position + tile_color 0xff0000ff + xpos -3188 + ypos 3581 + hide_input true + addUserKnob {20 User} + addUserKnob {12 positionoffset l "Text Position Offset"} + positionoffset {{parent.TextPositionOffset.main} {parent.TextPositionOffset.main}} + } + StickyNote { + inputs 0 + name ratio_control + tile_color 0xff0000ff + label ratio_control + xpos -3184 + ypos 3251 + addUserKnob {20 User} + addUserKnob {4 ratio_choice l "ratio choice" M {1.66 1.78 1.85 2.35 "" ""}} + ratio_choice 2.35 + addUserKnob {16 ratio_ture l "ratio ture"} + ratio_ture {{"\[value ratio_choice]"}} + addUserKnob {7 t_value l Transparency} + t_value 0.5 + } + Text { + inputs 0 + message "" + size {{parent.control_font.font_size}} + yjustify center + Transform 1 + center {914 778} + name Text_Proprieties + tile_color 0xff0000ff + xpos -3188 + ypos 3423 + hide_input true + } + Text { + inputs 0 + message "" + font "\[expr \[value FontPath.OSChoice]==0?\[value FontPath.linreg]:\"\"]\[expr \[value FontPath.OSChoice]==1?\[value FontPath.winreg]:\"\"]\[expr \[value FontPath.OSChoice]==2?\[value FontPath.macreg]:\"\"]\[expr \[value FontPath.OSChoice]==3?\\\"\[knob FontPath.regfont]\\\":\"\"]" + yjustify center + box {512 389 1536 1167} + translate {106 -96} + center {1024 778} + name Arial + tile_color 0xff0000ff + xpos -3187 + ypos 3470 + hide_input true + } + Text { + inputs 0 + inject true + message "" + font "\[expr \[value FontPath.OSChoice]==0?\[value FontPath.linbold]:\"\"]\[expr \[value FontPath.OSChoice]==1?\[value FontPath.winbold]:\"\"]\[expr \[value FontPath.OSChoice]==2?\[value FontPath.macbold]:\"\"]\[expr \[value FontPath.OSChoice]==3?\\\"\[knob FontPath.boldfont]\\\":\"\"]" + yjustify center + box {512 389 1536 1167} + translate {106 -96} + center {1024 778} + name ArialBold + tile_color 0xff0000ff + xpos -3184 + ypos 3522 + hide_input true + } + Switch { + inputs 0 + which {{parent.mode}} + name S_mode + tile_color 0xff0000ff + xpos -3187 + ypos 3320 + } + Constant { + inputs 0 + channels rgb + color {1 0 0 0} + color_panelDropped true + format "2048 1152 0 0 2048 1152 1 KQS_Arri" + name Constant1 + xpos -559 + ypos -478 + } + Text2 { + inputs 0 + font_size_toolbar 120 + font_width_toolbar 100 + font_height_toolbar 100 + message "ANTS ANIMATION STUDIOS" + old_message {{65 78 84 83 32 32 32 32 32 32 32 32 32 65 78 73 77 65 84 73 79 78 32 32 32 32 32 32 32 32 32 83 84 85 68 73 79 83} + } + box {1.5 320 2034.5 480} + xjustify center + yjustify center + transforms {{0 2} + } + font_size_values {{0 120 1 120 2 120 3 120 4 120 5 120 6 120 7 120 8 120 9 120 10 120 11 120 12 120 13 120 14 120 15 120 16 120 17 120 18 120 19 120 20 120 21 120 22 120 23 120 24 120 25 120 26 120 27 120 28 120 29 120 30 120 31 120 32 120 33 120 34 120 35 120 36 120 37 120} + } + cursor_position 23 + font {{ Adobe Heiti Std : R : AdobeHeitiStd-Regular.otf : 0 }} + font_size 120 + scale {1 1} + cursor_initialised true + autofit_bbox false + initial_cursor_position {{433.2002563 723.9000244} + } + group_animations {{0} imported: 0 selected: items: "root transform/"} + animation_layers {{1 11 1024 778 0 0 1 1 0 0 0 0} + } + color {0 0.1441284567 0.4232675731 1} + name ants_en1 + xpos 229 + ypos 1236 + } + Text2 { + inputs 0 + font_size_toolbar 220 + font_width_toolbar 100 + font_height_toolbar 100 + message "昂 驰 动 画" + old_message {{26114 32 32 32 32 32 32 32 32 39536 32 32 32 32 32 32 32 21160 32 32 32 32 32 32 32 30011} + } + box {-0.5 435.5 2032.5 728.5} + xjustify center + yjustify center + transforms {{0 2} + } + font_size_values {{0 220 1 220 2 220 3 220 4 220 5 220 6 220 7 220 8 220 9 220 10 220 11 220 12 220 13 220 14 220 15 220 16 220 17 220 18 220 19 220 20 220 21 220 22 220 23 220 24 220 25 220} + } + cursor_position 14 + font {{ Adobe Heiti Std : R : AdobeHeitiStd-Regular.otf : 0 }} + font_size 220 + scale {1 1} + cursor_initialised true + autofit_bbox false + initial_cursor_position {{433.2002563 723.9000244} + } + group_animations {{0} imported: 0 selected: items: "root transform/"} + animation_layers {{1 11 1024 778 0 0 1 1 0 0 0 0} + } + color {0 0.1441284567 0.4232675731 1} + name ants_chinese1 + xpos 219 + ypos 1178 + } + Constant { + inputs 0 + channels rgb + format "2048 1556 0 0 2048 1556 1 2" + name Constant2 + xpos 57 + ypos 991 + } + Roto { + curves {{{v x3f99999a} + {f 0} + {n + {layer Root + {f 2097664} + {t x44800000 x44428000} + {a pt1x 0 pt1y 0 pt2x 0 pt2y 0 pt3x 0 pt3y 0 pt4x 0 pt4y 0 ptex00 0 ptex01 0 ptex02 0 ptex03 0 ptex10 0 ptex11 0 ptex12 0 ptex13 0 ptex20 0 ptex21 0 ptex22 0 ptex23 0 ptex30 0 ptex31 0 ptex32 0 ptex33 0 ptof1x 0 ptof1y 0 ptof2x 0 ptof2y 0 ptof3x 0 ptof3y 0 ptof4x 0 ptof4y 0 pterr 0 ptrefset 0 ptmot x40800000 ptref 0} + {curvegroup Ellipse2 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{xc280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x448a9800 xc4398222 1 0 1}} + {{x445b6000 0 1 xc0200000 1} + {x445ac000 xc0200000 1 0 1}}} + {{{x4280f560 -}} + {{0 -}}} + {{{0 -}} + {{xc19cd940 -}}} + {{{x44987111 0 1 xc4398222 1} + {x44993000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x4280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x448a9800 xc4398222 1 0 1}} + {{x446d2000 0 1 xc0200000 1} + {x446c8000 xc0200000 1 0 1}}} + {{{xc280f560 -}} + {{0 -}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x44768222 0 1 xc4398222 1} + {x44780000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{xc19cd940 -}}}}} idem} + {tx 1 x43b46000 x4463a000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40e00000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Bezier3 512 bezier + {{cc + {f 8192} + {px 0 + {x3f000000 0} + {x44fca000 x449a4000} + {xbf000000 0} + {0 0} + {x44fcc000 x448c8000} + {0 0} + {x413def9a x3f8e4981} + {x44ca23c3 x448ca000} + {xc13def9a xbf8e4990} + {xbf0f0800 x41c69680} + {x44c651e1 x448795a6} + {x3f0fd000 xc1c69640} + {xc1220367 x3f8e2800} + {x44ca6fff x448312d3} + {x41220368 xbf8e2000} + {xc22a95e0 x4001fe00} + {x44f0a556 x4482c30d} + {x424c0000 xc01b6e00} + {xc150df80 x41961e00} + {x44fc6e41 x4477d0f0} + {x4150df80 xc1961e00} + {xbe2aa000 x423a0000} + {x44ff4555 x44636000} + {x3e268000 xc23a0000} + {x41a64940 x41f36dc0} + {x44fc16db x444ba492} + {xc141f000 xc18df480} + {x422e0000 x40e00000} + {x44f1d000 x443de000} + {xc22e0000 xc0e00200} + {0 0} + {x44bbf000 x443dc000} + {0 0} + {0 0} + {x44bbe000 x44588000} + {0 0} + {xc12c2d49 xbf6adbb0} + {x44ef0925 x4458e492} + {x412c2d49 x3f6adbdc} + {xb9000000 xc1a40000} + {x44f22000 x4461c000} + {0 x41a40000} + {x4118d468 xbf8c982e} + {x44ef2000 x446ac000} + {xc118d468 x3f8c9822} + {x420086c0 xc1064880} + {x44c72fff x446ba000} + {xc285fff0 x418c0000} + {x412fd400 xc1ad95e0} + {x44bae923 x44801b6e} + {xc18648c0 x42049240} + {xc1149180 xc2049240} + {x44ba5923 x448e2492} + {x41149100 x42049240} + {xc214f499 xc0f3de00} + {x44c70fff x4499c000} + {x4214f499 x40f3e000}}} idem} + {tx 0 x44ddd000 x44773943} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 ltn 0 ltm 0 tt x40800000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Bezier2 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{0 -}} + {{0 -}}} + {{{x41333340 -} + {x443dcccd -}} + {{x443cf334 -}}} + {{{0 -}} + {{0 -}}} + {{{xc1d33340 -}} + {{xc28bfff8 -}}} + {{{x41e00030 -} + {x44420002 -}} + {{x447abfff -}}} + {{{x41e85bdc -}} + {{x429a06a8 -}}} + {{{xc3523334 -}} + {{xbeccd000 -}}} + {{{x43b0999a -} + {x4489a666 -}} + {{x4499b333 -}}} + {{{x43523320 -}} + {{x3f07b800 -}}} + {{{xc1d59960 0 1 xc1119a40 1} + {xc20f3340 xc1119a40 1 0 1}} + {{x42b53330 0 1 xc04ccc00 1} + {x42aeccd0 xc04ccc00 1 0 1}}} + {{{x442bb334 -} + {x44b3599a -}} + {{x44772666 -}}} + {{{x41d59980 0 1 xc1080400 1} + {x41919780 xc1080400 1 0 1}} + {{xc2b53330 0 1 x4238ae20 1} + {xc231b840 x4238ae20 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{x442fa666 -} + {x44b55333 -}} + {{x443d4000 -}}} + {{{0 -}} + {{0 -}}} + {{{0 -}} + {{0 -}}} + {{{x4413bfff -} + {x44a76000 -}} + {{x443d1999 -}}} + {{{0 -}} + {{0 -}}} + {{{x41733340 0 1 xc08ccd00 1} + {x412cccc0 xc08ccd00 1 0 1}} + {{xc25e0000 0 1 x41940000 1} + {xc2140000 x41940000 1 0 1}}} + {{{x44124ccd -} + {x44a6a666 -}} + {{x446b8000 -}}} + {{{xc1733340 0 1 x40a1eb80 1} + {xc1223d00 x40a1eb80 1 0 1}} + {{x425e0000 0 1 xc1a61600 1} + {x420af500 xc1a61600 1 0 1}}} + {{{x431f0000 -}} + {{xc0000000 -}}} + {{{x43b00000 0 1 x41200000 1} + {x448ac000 x41200000 1 0 1}} + {{x448c0000 -}}} + {{{xc31f009e -}} + {{x3fe60c00 -}}} + {{{x416cb6b0 -}} + {{x422dd650 -}}} + {{{x42fc0000 -} + {x445a8000 -}} + {{x446d8ccd -}}} + {{{xc1800000 -}} + {{xc23c0000 -}}} + {{{0 -}} + {{0 -}}} + {{{x42ea6664 -} + {x44584ccc -}} + {{x443ca666 -}}} + {{{0 -}} + {{0 -}}}}} idem} + {tx 1 x43acb333 x44674000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40800000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Ellipse1 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{xc280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x43b46000 xc4398222 1 0 1}} + {{x445b6000 0 1 xc0200000 1} + {x445ac000 xc0200000 1 0 1}}} + {{{x4280f560 -}} + {{0 -}}} + {{{0 -}} + {{xc19cd940 -}}} + {{{x44987111 0 1 xc4398222 1} + {x43eec000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x4280f560 -}} + {{0 -}}} + {{{x4489d911 0 1 xc4398222 1} + {x43b46000 xc4398222 1 0 1}} + {{x446d2000 0 1 xc0200000 1} + {x446c8000 xc0200000 1 0 1}}} + {{{xc280f560 -}} + {{0 -}}} + {{{0 -}} + {{x419cd940 -}}} + {{{x44768222 0 1 xc4398222 1} + {x43740000 xc4398222 1 0 1}} + {{x44644000 0 1 xc0200000 1} + {x4463a000 xc0200000 1 0 1}}} + {{{0 -}} + {{xc19cd940 -}}}}} idem} + {tx 1 x43b46000 x4463a000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40e00000 b x3ed8b687 g x3e139669 r 0}} + {curvegroup Bezier1 512 bezier + {{cc + {f 8192} + {px + {0 1} + {{{0 -}} + {{0 -}}} + {{{x443cf335 0 1 xc43a2668 1} + {x41333340 xc43a2668 1 0 1}} + {{x443d6003 0 1 xbfd99e00 1} + {x443cf334 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{xc1d33340 -}} + {{xc28bfff8 -}}} + {{{x4441266a 0 1 xc43a2668 1} + {x41e00030 xc43a2668 1 0 1}} + {{x447b2ccf 0 1 xbfd9a000 1} + {x447abfff xbfd9a000 1 0 1}}} + {{{x41e85bdc -}} + {{x429a06a8 -}}} + {{{xc3523334 -}} + {{xbecce000 0 1 x39000000 1} + {xbeccd000 x39000000 1 0 1}}} + {{{x4489399a 0 1 xc43a2667 1} + {x43b0999a xc43a2667 1 0 1}} + {{x4499e99c 0 1 xbfd9a400 1} + {x4499b333 xbfd9a400 1 0 1}}} + {{{x43523320 -}} + {{x3f07b000 0 1 x39000000 1} + {x3f07b800 x39000000 1 0 1}}} + {{{xc1d59960 0 1 xc1119a40 1} + {xc20f3340 xc1119a40 1 0 1}} + {{x42b53330 0 1 xc04ccc00 1} + {x42aeccd0 xc04ccc00 1 0 1}}} + {{{x44b2ecce 0 1 xc43a2668 1} + {x442bb334 xc43a2668 1 0 1}} + {{x44779336 0 1 xbfd9a000 1} + {x44772666 xbfd9a000 1 0 1}}} + {{{x41d59980 0 1 xc1080400 1} + {x41919780 xc1080400 1 0 1}} + {{xc2b53330 0 1 x4238ae20 1} + {xc231b840 x4238ae20 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{x44b4e667 0 1 xc43a2668 1} + {x442fa666 xc43a2668 1 0 1}} + {{x443daccf 0 1 xbfd99e00 1} + {x443d4000 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{0 -}} + {{0 -}}} + {{{x44a6f334 0 1 xc43a2669 1} + {x4413bfff xc43a2669 1 0 1}} + {{x443d8668 0 1 xbfd99e00 1} + {x443d1999 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}} + {{{x41733340 0 1 xc08ccd00 1} + {x412cccc0 xc08ccd00 1 0 1}} + {{xc25e0000 0 1 x41940000 1} + {xc2140000 x41940000 1 0 1}}} + {{{x44a6399a 0 1 xc43a2667 1} + {x44124ccd xc43a2667 1 0 1}} + {{x446becd0 0 1 xbfd9a000 1} + {x446b8000 xbfd9a000 1 0 1}}} + {{{xc1733340 0 1 x40a1eb80 1} + {xc1223d80 x40a1eb80 1 0 1}} + {{x425e0000 0 1 xc1a61600 1} + {x420af500 xc1a61600 1 0 1}}} + {{{x431f0000 -}} + {{xc0000000 -}}} + {{{x44891334 0 1 xc437a668 1} + {x43b50000 xc437a668 1 0 1}} + {{x448c3668 0 1 xbfd9a000 1} + {x448c0000 xbfd9a000 1 0 1}}} + {{{xc31f009e -}} + {{x3fe61000 0 1 xb9000000 1} + {x3fe60c00 xb9000000 1 0 1}}} + {{{x416cb6b0 -}} + {{x422dd650 -}}} + {{{x4459a668 0 1 xc43a2668 1} + {x42fc0000 xc43a2668 1 0 1}} + {{x446df99d 0 1 xbfd9a000 1} + {x446d8ccd xbfd9a000 1 0 1}}} + {{{xc1800000 -}} + {{xc23c0000 -}}} + {{{0 -}} + {{0 -}}} + {{{x44577334 0 1 xc43a2668 1} + {x42ea6664 xc43a2668 1 0 1}} + {{x443d1335 0 1 xbfd99e00 1} + {x443ca666 xbfd99e00 1 0 1}}} + {{{0 -}} + {{0 -}}}}} idem} + {tx 1 x43acb333 x44674000} + {a osw x41200000 osf 0 str 1 spx x44800000 spy x44428000 sb 1 tt x40800000 b x3ed8b687 g x3e139669 r 0}}}}}} + toolbox {selectAll { + { selectAll str 1 ssx 1 ssy 1 sf 1 } + { createBezier str 1 ssx 1 ssy 1 sf 1 sb 1 tt 4 } + { createBezierCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createBSpline str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createEllipse str 1 ssx 1 ssy 1 sf 1 sb 1 tt 7 } + { createRectangle str 1 ssx 1 ssy 1 sf 1 sb 1 } + { createRectangleCusped str 1 ssx 1 ssy 1 sf 1 sb 1 } + { brush str 1 ssx 1 ssy 1 sf 1 sb 1 } + { eraser src 2 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { clone src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { reveal src 3 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { dodge src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { burn src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { blur src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { sharpen src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } + { smear src 1 str 1 ssx 1 ssy 1 sf 1 sb 1 } +} } + toolbar_brush_hardness 0.200000003 + toolbar_source_transform_scale {1 1} + toolbar_source_transform_center {1024 778} + color {0 0.1441284567 0.4232675731 1} + colorOverlay {0 0 0 0} + lifetime_type "all frames" + motionblur_shutter_offset_type centred + source_black_outside true + name Roto1 + xpos 60 + ypos 1103 + } + Merge2 { + inputs 2 + name Merge3 + xpos 60 + ypos 1178 + } + Merge2 { + inputs 2 + name Merge4 + xpos 60 + ypos 1236 + } +push $N6310f600 + Viewer { + frame_range 1-100 + input_process false + name Viewer1 + xpos -260 + ypos 189 + } + StickyNote { + inputs 0 + name control_font + tile_color 0xff0000ff + label control_text + selected true + xpos -3188 + ypos 3365 + addUserKnob {20 User} + addUserKnob {7 font_size l "Font Size" R 22 35} + font_size {{"\[expr \[frame]<=\[value SlateFrame.slate_frame]?\"\[value s_font_size]\":\"\[value c_font_size]\"]"}} + addUserKnob {7 c_font_size l "content font size" R 22 35} + c_font_size 25 + addUserKnob {7 s_font_size l "slate font size" R 22 35} + s_font_size 25 + addUserKnob {26 ""} + addUserKnob {7 p_left l "left position" R 0 100} + p_left {{(ReAspect.format.w/25)*left_p}} + addUserKnob {7 left_p l "left position num" R 1 2} + left_p 1 + addUserKnob {7 p_center l "center position" R 2.2 2.8} + p_center 2.4 + addUserKnob {7 p_right l "right position" R 1 1.5} + p_right 1.25 + addUserKnob {26 ""} + addUserKnob {4 proj_logo_c l "project logo choice" M {Default 定制找我 qq250557277 "" "" "" "" "" "" "" "" "" "" "" ""}} + addUserKnob {4 shot_asset l "shot asset" M {Shot Asset ""}} + addUserKnob {26 ""} + addUserKnob {19 font_color l "Font color"} + font_color {1 1 1 1} + addUserKnob {6 font_color_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + } +end_group diff --git a/gizmos/Image/a_Text.gizmo b/gizmos/Image/a_Text.gizmo new file mode 100644 index 0000000..fe7f932 --- /dev/null +++ b/gizmos/Image/a_Text.gizmo @@ -0,0 +1,592 @@ +#! C:/tools/Nuke9.0v3/nuke-9.0.3.dll -nx +version 9.0 v3 +Gizmo { +addUserKnob {20 User t "current_time\nModify_time\ndate\nframe"} +addUserKnob {4 bottoml l bottom_left M {current_time Modify_time date frame project_path project_name version_num project_range project_framenum fps read_name read_framerange timecode material_bit}} +bottoml frame +addUserKnob {4 bottomr l bottom_right M {current_time Modify_time date frame project_path project_name version_num project_range project_framenum fps read_name read_framerange timecode material_bit}} +bottomr project_name +addUserKnob {41 size l font_size T font_size_control.size} +} +BackdropNode { +inputs 0 +name BackdropNode1 +tile_color 0x71c67100 +label clock +note_font_size 42 +xpos -814 +ypos -594 +bdwidth 509 +bdheight 246 +} +BackdropNode { +inputs 0 +name BackdropNode2 +tile_color 0x7171c600 +label project +note_font_size 42 +xpos -218 +ypos -583 +bdwidth 880 +bdheight 243 +} +BackdropNode { +inputs 0 +name BackdropNode3 +tile_color 0x7171c600 +label "Read material" +note_font_size 42 +xpos 3298 +ypos -544 +bdwidth 724 +bdheight 243 +} +BackdropNode { +inputs 0 +name BackdropNode4 +tile_color 0x71c67100 +label clock +note_font_size 42 +xpos 1743 +ypos -554 +bdwidth 509 +bdheight 246 +} +BackdropNode { +inputs 0 +name BackdropNode5 +tile_color 0x7171c600 +label project +note_font_size 42 +xpos 2337 +ypos -551 +bdwidth 880 +bdheight 243 +} +BackdropNode { +inputs 0 +name BackdropNode6 +tile_color 0x7171c600 +label "Read material" +note_font_size 42 +xpos 757 +ypos -583 +bdwidth 724 +bdheight 243 +} +Input { +inputs 0 +name src +xpos 1354 +ypos -1306 +addUserKnob {20 User} +addUserKnob {14 framerange l framerange_input R 0 100} +framerange {{input.first} {input.last}} +} +Shuffle { +alpha black +name Shuffle5 +xpos 1354 +ypos -1250 +} +set N33bb1c00 [stack 0] +Text { +message "\[metadata input/bitsperchannel]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name material_bit1 +tile_color 0xff00ff +xpos 3834 +ypos -419 +} +push $N33bb1c00 +Text { +message "\[metadata input/timecode]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name timecode1 +tile_color 0xff00ff +xpos 3693 +ypos -414 +} +push $N33bb1c00 +Text { +message "\[value src.framerange.w]-\[value src.framerange.h] \[expr \[value src.framerange.h]-\[value src.framerange.w]+1]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name read_framerange1 +tile_color 0xff00ff +xpos 3542 +ypos -415 +} +push $N33bb1c00 +Text { +message "\[basename \[metadata input/filename]]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name read_name1 +tile_color 0xff00ff +xpos 3387 +ypos -415 +} +push $N33bb1c00 +Text { +message "\[value root.fps]fps" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 -12 {parent.font_size_control.position.x x1 2028} {parent.font_size_control.position.y x1 858}} +center {1024 778} +name fps1 +tile_color 0xff00ff +xpos 3081 +ypos -429 +} +push $N33bb1c00 +Text { +message "\[expr \[value root.last_frame]-\[value root.first_frame]+1]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_framenum1 +tile_color 0xff00ff +xpos 2949 +ypos -428 +} +push $N33bb1c00 +Text { +message "\[value root.first_frame]-\[value root.last_frame] " +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_range1 +tile_color 0xff00ff +xpos 2822 +ypos -428 +} +push $N33bb1c00 +Text { +message "\[regexp -inline \"v\\\[0-9]+\" \[value root.name]]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name version_num1 +tile_color 0xff00ff +xpos 2696 +ypos -429 +} +push $N33bb1c00 +Text { +message "\[join \[lrange \[split \[basename \[value root.name]] .] 0 0]]_\$env(username)\[date %Y%m%d%H%M]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_name1 +tile_color 0xff00ff +xpos 2558 +ypos -429 +} +set N94872000 [stack 0] +push $N33bb1c00 +Text { +message "\[value root.name]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_path1 +tile_color 0xff00ff +xpos 2414 +ypos -431 +} +push $N33bb1c00 +Text { +message "\[frame]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name frame1 +tile_color 0xff00ff +xpos 2140 +ypos -426 +} +push $N33bb1c00 +Text { +message "\[date %Y/%m/%d]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name date1 +tile_color 0xff00ff +xpos 2018 +ypos -427 +} +push $N33bb1c00 +Text { +message "\[clock format \[file mtime \[value root.name]] -format \{%x %H:%M:%S\}]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name Modify_time1 +tile_color 0xff00ff +xpos 1898 +ypos -431 +} +push $N33bb1c00 +Text { +message "\[date %H:%M:%S]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +xjustify right +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name current_time1 +tile_color 0xff00ff +xpos 1769 +ypos -429 +} +Switch { +inputs 14 +which {{parent.bottomr}} +name bottom_right +tile_color 0xffff00ff +xpos 2255 +ypos 217 +} +Shuffle { +red alpha +green alpha +blue alpha +name Shuffle2 +xpos 2255 +ypos 277 +} +Dot { +name Dot4 +xpos 2289 +ypos 905 +} +push 0 +push $N33bb1c00 +Text { +message "\[metadata input/bitsperchannel]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name material_bit +tile_color 0xff00ff +xpos 1274 +ypos -452 +} +push $N33bb1c00 +Text { +message "\[metadata input/timecode]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name timecode +tile_color 0xff00ff +xpos 1132 +ypos -447 +} +push $N33bb1c00 +Text { +message "\[value src.framerange.w]-\[value src.framerange.h] \[expr \[value src.framerange.h]-\[value src.framerange.w]+1]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name read_framerange +tile_color 0xff00ff +xpos 996 +ypos -448 +} +set N91ae9400 [stack 0] +push $N33bb1c00 +Text { +message "\[basename \[metadata input/filename]]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name read_name +tile_color 0xff00ff +xpos 827 +ypos -447 +} +push $N33bb1c00 +Text { +message "\[value root.fps]fps" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name fps +tile_color 0xff00ff +xpos 517 +ypos -482 +} +push $N33bb1c00 +Text { +message "\[expr \[value root.last_frame]-\[value root.first_frame]+1]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_framenum +tile_color 0xff00ff +xpos 385 +ypos -481 +} +push $N33bb1c00 +Text { +message "\[value root.first_frame]-\[value root.last_frame] " +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_range +tile_color 0xff00ff +xpos 257 +ypos -481 +} +push $N33bb1c00 +Text { +message "\[regexp -inline \"v\\\[0-9]+\" \[value root.name]]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name version_num +tile_color 0xff00ff +xpos 132 +ypos -482 +} +push $N33bb1c00 +Text { +message "DodoBk_sc011sh001_cp_dirname_20141111A\n" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_name +tile_color 0xff00ff +xpos -7 +ypos -481 +} +push $N33bb1c00 +Text { +message "\[value root.name]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name project_path +tile_color 0xff00ff +xpos -150 +ypos -484 +} +push $N33bb1c00 +Text { +message "\[frame]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name frame +tile_color 0xff00ff +xpos -424 +ypos -479 +} +push $N33bb1c00 +Text { +message "\[date %Y/%m/%d]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name date +tile_color 0xff00ff +xpos -546 +ypos -480 +} +push $N33bb1c00 +Text { +message "\[clock format \[file mtime \[value root.name]] -format \{%x %H:%M:%S\}]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name Modify_time +tile_color 0xff00ff +xpos -666 +ypos -481 +} +push $N33bb1c00 +Text { +message "\[date %H:%M:%S]" +font C:/Windows/Fonts/arial.ttf +size {{parent.font_size_control.size}} +yjustify bottom +Transform 1 +box {20 0 {parent.font_size_control.position.x} {parent.font_size_control.position.y}} +center {1024 778} +name no +tile_color 0xff00ff +xpos -795 +ypos -482 +} +Switch { +inputs 14 +which {{parent.bottoml}} +name bottom_left +tile_color 0xffff00ff +xpos -988 +ypos 230 +} +Shuffle { +red alpha +green alpha +blue alpha +name Shuffle3 +xpos -988 +ypos 367 +} +Dot { +name Dot1 +xpos -954 +ypos 904 +} +push 0 +Merge2 { +inputs 3+1 +name Merge1 +xpos 558 +ypos 901 +} +Dot { +name Dot5 +xpos 592 +ypos 1439 +} +push $N33bb1c00 +Merge2 { +inputs 2 +name Merge2 +xpos 1398 +ypos 1436 +} +Output { +name Output1 +xpos 1398 +ypos 1780 +} +push $N94872000 +push $N91ae9400 +Viewer { +inputs 2 +frame_range 1-2 +fps 25 +input_process false +name Viewer1 +xpos 1659 +ypos 1660 +} +StickyNote { +inputs 0 +name font_size_control +label font_size_control +note_font PMingLiU +selected true +xpos 1262 +ypos 248 +addUserKnob {20 User} +addUserKnob {12 position l text_position} +position {{root.format.w-20} {root.format.h}} +addUserKnob {7 size l font_size R 12 200} +size 15 +} +end_group diff --git a/gizmos/Keyer/AdditiveKeyer.gizmo b/gizmos/Keyer/AdditiveKeyer.gizmo new file mode 100644 index 0000000..b9a7027 --- /dev/null +++ b/gizmos/Keyer/AdditiveKeyer.gizmo @@ -0,0 +1,349 @@ +#! /lot/s27/SWDEVL/SOFTWARE/linuxrh9_intel/nuke4.5/12/nuke4.5.12 -nx +version 4.5012 +Gizmo { + inputs 4 + addUserKnob { 20 "" User } + addUserKnob { 26 "" Additive } + addUserKnob { 4 cspace "colour space" M { log lin } t "colour space for the internal math.\nIf set to log all inputs are converted to log before the math is applied. The result is converted back to linear space." } + addUserKnob { 7 saturation saturation R 0 3 } + addUserKnob { 7 fade fade R 0 5 } + addUserKnob { 7 brightness brightness R -1 1 } + addUserKnob { 18 tint tint R 0 1 } + addUserKnob { 6 clampblk "clamp blacks" t "check this to avoid negative values in the key result" } + addUserKnob { 6 usematte "use edge matte" t "this will premultiply the result by the alpha channel of the edge input" } + addUserKnob { 26 "" Negative } + addUserKnob { 7 saturation_neg saturation R 0 1 } + addUserKnob { 7 brightness_neg brightness R 0 5 } + addUserKnob { 18 tint_neg tint R 0 1 } + addUserKnob { 26 "" "Mix Negative into Additve" } + addUserKnob { 7 Dissolve2_which Mix R 0 1 t "This alows you to mix some darks back\n into the highlights incase they are too strong.\n" } + name AdditiveKeyer2 + label "with added negative functionality" + help "Addive keyer usage:\n\nfg = bluescreen plate\nbg = background plate\nref = constant colour node with the colour of your blues in your bluescreen plate\n\nnote: this works for any colour extraction , green, red etc .I'm just using blue as an example\n\nThis keyer is for help extracting very fine hairs and light details in your key that you would\n not be able to achieve using a straight bluescreen keyer. It does not create a matte.\n The result of this keyer is what you now need to use as your bg, placing your exaction over it.\n You can also use the result through an edge matte. If your blue screen is very uneven this may\n be the best use of this tool. Keep in mind if you can use the whole plate though this tool it will\nretain the grain from the bs making a much nicer intergration of grain to comp.\n\n\n\n\n\n" + cspace lin + saturation 0.34 + fade 1 + tint {1 1 1} + clampblk true + saturation_neg 0.1 + brightness_neg 1 + tint_neg {0.07 0.08 0.08} +} + Input { + inputs 0 + name edge + xpos -682 + ypos 1016 + number 3 + } + AddChannels { + channels {-rgba.red -rgba.green -rgba.blue rgba.alpha} + name AddChannels1 + xpos -682 + ypos 1054 + } + Input { + inputs 0 + name fg + xpos -529 + ypos 110 + } +set N8961b00 [stack 0] + Log2Lin { + operation lin2log + name Log2Lin2 + xpos -331 + ypos 110 + disable {{parent.cspace}} + } + Input { + inputs 0 + name ref + xpos -132 + ypos -49 + number 2 + } +set N8a01ed8 [stack 0] + Log2Lin { + operation lin2log + name Log2Lin1 + xpos -132 + ypos 24 + disable {{parent.cspace}} + } + Merge2 { + inputs 2 + operation minus + name Merge1 + xpos -132 + ypos 110 + } + Clamp { + maximum_enable false + name Clamp1 + xpos -14 + ypos 103 + disable {{1-parent.clampblk}} + } +set N8a047f8 [stack 0] + Input { + inputs 0 + name bg + xpos 372 + ypos -25 + number 1 + } +set N89f98f0 [stack 0] + Log2Lin { + operation lin2log + name Log2Lin3 + xpos 372 + ypos 13 + disable {{parent.cspace}} + } +set N89fa118 [stack 0] + Remove { + operation keep + channels rgb + name Remove2 + xpos 252 + ypos 13 + } + Shuffle { + in rgb + red black + green black + blue black + alpha black + name Shuffle1 + xpos 150 + ypos 13 + } + Merge2 { + inputs 2 + operation difference + name Merge2 + xpos 150 + ypos 242 + } + Saturation { + saturation 0 + name Saturation2 + xpos 150 + ypos 283 + } +set N89fdf00 [stack 0] + Dot { + xpos -216 + ypos 287 + } + Dot { + name Dot4 + xpos -216 + ypos 510 + } +push $N8961b00 + Dot { + xpos -495 + ypos 288 + } +push $N8a01ed8 + Dot { + xpos -380 + ypos -45 + } + Merge2 { + inputs 2 + operation min + name Merge5 + xpos -414 + ypos 284 + } +push $N8961b00 + Dot { + xpos -495 + ypos 391 + } + Merge2 { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.red} + operation divide + name Merge4 + xpos -414 + ypos 387 + } + Copy { + inputs 2 + from0 rgba.red + to0 uv.u + name Copy3 + xpos -414 + ypos 499 + } + Multiply { + value {{parent.balance}} + mask uv.u + name Multiply1 + xpos -414 + ypos 551 + } + Shuffle { + black red + out2 uv + name Shuffle2 + xpos -414 + ypos 603 + } +set N45effb68 [stack 0] + Saturation { + channels rgba + saturation {{parent.saturation_neg i x390 1.9}} + name Saturation3 + xpos -268 + ypos 603 + } + Multiply { + channels rgba + value {{parent.brightness_neg}} + name Multiply3 + xpos -268 + ypos 649 + } + Grade { + multiply {{parent.tint_neg.r i} {parent.tint_neg.g i} {parent.tint_neg.b i} {curve}} + black_clamp false + name Grade2 + xpos -268 + ypos 693 + } +push $N45effb68 + Clamp { + channels uv + name Clamp2 + xpos -414 + ypos 641 + } + Dissolve { + inputs 2 + which 1 + mask uv.u + invert_mask true + name Dissolve1 + xpos -414 + ypos 686 + } +push $N89f98f0 + Dot { + xpos 406 + ypos 844 + } + Merge { + inputs 2 + operation mult + name Merge6 + xpos -414 + ypos 840 + } +push $N89fdf00 + Dot { + name Dot1 + xpos 184 + ypos 432 + } +push $N8a047f8 + Saturation { + saturation {{parent.saturation i}} + name Saturation1 + xpos -14 + ypos 287 + } + Multiply { + channels rgba + value {{parent.fade x390 2}} + name Multiply2 + xpos -14 + ypos 325 + } + Grade { + multiply {{parent.tint.r i} {parent.tint.g i} {parent.tint.b i} {curve}} + black_clamp false + name Grade1 + xpos -14 + ypos 372 + } + Copy { + inputs 2 + from0 rgba.red + to0 uv.u + name Copy1 + xpos -14 + ypos 421 + } + Add { + channels rgb + value {{parent.brightness}} + mask uv.u + name Add1 + xpos -14 + ypos 473 + } +push $N89fa118 + Dot { + name Dot2 + xpos 406 + ypos 529 + } + Merge2 { + inputs 2 + operation plus + name Merge3 + xpos -14 + ypos 525 + } + Log2Lin { + name Log2Lin4 + xpos -14 + ypos 582 + disable {{parent.cspace}} + } + Dot { + xpos 20 + ypos 955 + } + Dissolve { + inputs 2 + which {{parent.Dissolve2_which}} + mask -uv.u + invert_mask true + name Dissolve2 + xpos -414 + ypos 944 + } +set N8a7e1f8 [stack 0] + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy2 + xpos -545 + ypos 1054 + } + Premult { + name Premult1 + xpos -545 + ypos 1106 + } +push $N8a7e1f8 + Switch { + inputs 2 + which {{parent.usematte}} + name Switch1 + xpos -414 + ypos 1106 + } + Output { + name Output1 + xpos -414 + ypos 1216 + } +end_group diff --git a/gizmos/Keyer/DespillMadness.gizmo b/gizmos/Keyer/DespillMadness.gizmo new file mode 100644 index 0000000..be3cfb9 --- /dev/null +++ b/gizmos/Keyer/DespillMadness.gizmo @@ -0,0 +1,228 @@ +#! C:/Program Files/Nuke6.1v1/Nuke6.1.exe -nx +version 6.1 v1 +Gizmo { + addUserKnob {20 DespillMadness l "Despill Settings"} + addUserKnob {26 text l "" +STARTLINE T "DespillMadness by Andreas Frickinger"} + addUserKnob {26 ""} + addUserKnob {41 screenType l "screen type" T GizmoControl.screenType} + addUserKnob {41 algorithm l "despill algorithm" T GizmoControl.algorithm} + addUserKnob {41 LimitPercentage l "fine tune" T RedLimitsGreen.LimitPercentage} + addUserKnob {26 ""} + addUserKnob {26 text_2 l "" +STARTLINE T "spill area correction"} + addUserKnob {41 saturation T CC_SpillMap.saturation} + addUserKnob {41 gamma T CC_SpillMap.gamma} + addUserKnob {41 offset T CC_SpillMap.offset} + addUserKnob {26 ""} + addUserKnob {41 spillMatteOut l "output spill matte in alpha" T GizmoControl.spillMatteOut} +} + NoOp { + inputs 0 + name GizmoControl + xpos 875 + ypos 414 + addUserKnob {20 User} + addUserKnob {26 version l v1.0} + addUserKnob {4 screenType l "screen type" M {green blue}} + addUserKnob {4 algorithm l "despill algorithm" M {average "red limit" "green/blue limit" ""}} + addUserKnob {6 spillMatteOut l "output spill matte in alpha" +STARTLINE} + } + Input { + inputs 0 + name Input1 + xpos 262 + ypos -336 + } + Dot { + name Dot6 + selected true + xpos 296 + ypos -186 + } +set N7b15fe0 [stack 0] + Dot { + name Dot2 + xpos 296 + ypos -71 + } +set N7b15d70 [stack 0] + Dot { + name Dot3 + xpos 426 + ypos -71 + } +set N7b153b0 [stack 0] + Expression { + expr2 b>g*LimitPercentage?g*LimitPercentage:b + expr3 b-g*LimitPercentage + name GreenLimitsBlue1 + xpos 528 + ypos 44 + addUserKnob {20 User} + addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} + LimitPercentage {{RedLimitsGreen.LimitPercentage i}} + } +push $N7b153b0 + Expression { + expr2 b>r*LimitPercentage?r*LimitPercentage:b + expr3 b-r*LimitPercentage + name RedLimitsBlue + xpos 392 + ypos 44 + addUserKnob {20 User} + addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} + LimitPercentage {{RedLimitsGreen.LimitPercentage i}} + } +push $N7b153b0 + Expression { + expr2 b>(g+r)/2*LimitPercentage?(g+r)/2*LimitPercentage:b + expr3 b-(r+g)*LimitPercentage/2 + name RedAndGreenLimitBlue + xpos 662 + ypos 44 + addUserKnob {20 User} + addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} + LimitPercentage {{RedLimitsGreen.LimitPercentage i}} + } + Switch { + inputs 3 + which {{GizmoControl.algorithm i}} + name SwitchBlue + xpos 528 + ypos 190 + } + Dot { + name Dot5 + xpos 562 + ypos 370 + } +push $N7b15d70 + Dot { + name Dot1 + xpos 164 + ypos -71 + } +set N7b8dfd0 [stack 0] + Expression { + expr1 g>b*LimitPercentage?b*LimitPercentage:g + expr3 g-b*LimitPercentage + name BlueLimitsGreen + xpos -15 + ypos 44 + addUserKnob {20 User} + addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} + LimitPercentage {{RedLimitsGreen.LimitPercentage i}} + } +push $N7b8dfd0 + Expression { + expr1 g>r*LimitPercentage?r*LimitPercentage:g + expr3 g-r*LimitPercentage + name RedLimitsGreen + xpos -160 + ypos 44 + addUserKnob {20 User} + addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} + LimitPercentage 0.94 + } +push $N7b8dfd0 + Expression { + expr1 g>(b+r)/2*LimitPercentage?(b+r)/2*LimitPercentage:g + expr3 g-(r+b)*LimitPercentage/2 + name RedAveBlueLimitsGreen + xpos 130 + ypos 44 + addUserKnob {20 User} + addUserKnob {7 LimitPercentage l "fine tune" R 0.5 1.5} + LimitPercentage {{RedLimitsGreen.LimitPercentage i}} + } + Switch { + inputs 3 + which {{GizmoControl.algorithm i}} + name SwitchGreen + xpos -15 + ypos 199 + } + Dot { + name Dot4 + xpos 19 + ypos 370 + } + Switch { + inputs 2 + which {{GizmoControl.screenType i}} + name SwitchMain + xpos 257 + ypos 366 + } + Clamp { + channels alpha + name Clamp1 + xpos 257 + ypos 408 + } + ColorCorrect { + maskChannelInput rgba.alpha + name CC_SpillMap + note_font Verdana + xpos 257 + ypos 468 + } +set N7b8ee70 [stack 0] + Dot { + name Dot9 + xpos 440 + ypos 478 + } + Dot { + name Dot10 + xpos 440 + ypos 649 + } +push $N7b15fe0 + Dot { + name Dot7 + xpos -345 + ypos -186 + } + Dot { + name Dot8 + xpos -345 + ypos 551 + } + Expression { + channel0 {-rgba.red -rgba.green -rgba.blue} + expr0 0 + channel1 {-rgba.red -rgba.green -rgba.blue} + expr1 0 + channel2 {-rgba.red -rgba.green -rgba.blue} + expr2 0 + channel3 {rgba.alpha none none rgba.alpha} + expr3 a==0?0:a + name AlphaError + label "To avid Gizmo being in state of\nerror without something plugged in input." + xpos -27 + ypos 534 + } +push $N7b8ee70 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + from3 rgba.alpha + to3 rgba.alpha + name CopyAlpha + xpos 257 + ypos 534 + } + Switch { + inputs 2 + which {{GizmoControl.spillMatteOut i}} + name SwitchSpillMap + xpos 257 + ypos 645 + } + Output { + name Output1 + xpos 257 + ypos 745 + } +end_group diff --git a/gizmos/Keyer/EdgeEx.gizmo b/gizmos/Keyer/EdgeEx.gizmo new file mode 100644 index 0000000..3b32439 --- /dev/null +++ b/gizmos/Keyer/EdgeEx.gizmo @@ -0,0 +1,127 @@ +#! /usr/local/Nuke6.1v1/Nuke6.1 -nx +version 6.1 v1 +Gizmo { + inputs 2 + lock_connections {{curve x1250 0}} + addUserKnob {20 EdgeEx} + addUserKnob {7 extend R 1 10} + addUserKnob {7 intensity R 1 10} + intensity 1 + addUserKnob {26 ""} + addUserKnob {41 which T control.which} + addUserKnob {26 ""} + addUserKnob {41 size T bothside.size} + addUserKnob {41 value T intencity.value} +} + Input { + inputs 0 + name Input1 + xpos 451 + ypos 171 + } +set Ncee5c960 [stack 0] +push $Ncee5c960 + Merge2 { + inputs 2 + operation xor + name Merge23 + xpos 287 + ypos 259 + } + Blur { + size {{parent.extend i}} + name wide + xpos 287 + ypos 287 + } + Multiply { + value {{parent.intensity i}} + name lightness + xpos 287 + ypos 329 + } + Clamp { + name Clamp1 + xpos 287 + ypos 371 + } +set Ncd444a50 [stack 0] +push $Ncee5c960 + Merge2 { + inputs 2 + operation out + name Out + xpos 371 + ypos 466 + } + Input { + inputs 0 + name mask + xpos 643 + ypos 289 + number 1 + } +set Nfad268e0 [stack 0] + Merge2 { + inputs 2 + operation in + name In1 + xpos 389 + ypos 544 + } +push $Ncd444a50 +push $Ncee5c960 + Merge2 { + inputs 2 + operation in + name In + selected true + xpos 474 + ypos 439 + } +push $Nfad268e0 + Merge2 { + inputs 2 + operation in + name In2 + xpos 474 + ypos 533 + } + Switch { + inputs 2 + which 1 + name control + xpos 442 + ypos 632 + } + Blur { + size 10 + name bothside + xpos 442 + ypos 660 + } + Multiply { + name intencity + xpos 442 + ypos 702 + } + Clamp { + name Clamp2 + xpos 448 + ypos 760 + } +set Nbe334250 [stack 0] + Viewer { + viewerProcess rec709 + input_process false + name Viewer1 + xpos 592 + ypos 472 + } +push $Nbe334250 + Output { + name Output1 + xpos 448 + ypos 825 + } +end_group diff --git a/gizmos/Keyer/EdgeExtend2.gizmo b/gizmos/Keyer/EdgeExtend2.gizmo new file mode 100644 index 0000000..29af481 --- /dev/null +++ b/gizmos/Keyer/EdgeExtend2.gizmo @@ -0,0 +1,51 @@ +#! /s/apps/lin/nuke/Nuke6.2v4/Nuke6.2 -nx +version 6.2 v4 +Gizmo { + addUserKnob {20 User l EdgeExtend2} + addUserKnob {41 threshold T LevelSet1.threshold} + addUserKnob {7 Size R 0 50} + Size 20 + addUserKnob {41 gradient_extrapolate l "gradient extrapolate" T LevelSet1.gradient_extrapolate} + addUserKnob {41 size l PreBlur T EdgeBlur1.size} +} + Input { + inputs 0 + name Input1 + xpos -223 + ypos -359 + } + EdgeBlur { + channels rgba + size 0 + edge_mult 4 + name EdgeBlur1 + xpos -223 + ypos -319 + } + Unpremult { + name Unpremult2 + xpos -223 + ypos -279 + } + AdjBBox { + numpixels {{parent.LevelSet1.matte_limit i}} + name AdjBBox1 + xpos -223 + ypos -215 + } + LevelSet { + output none + gradient none + create_matte true + matte_limit {{parent.Size}} + extrapolated rgba + name LevelSet1 + xpos -223 + ypos -189 + } + Output { + name Output1 + xpos -223 + ypos -89 + } +end_group diff --git a/gizmos/Keyer/EdgeKey.gizmo b/gizmos/Keyer/EdgeKey.gizmo new file mode 100644 index 0000000..1c60483 --- /dev/null +++ b/gizmos/Keyer/EdgeKey.gizmo @@ -0,0 +1,305 @@ +#! C:/Program Files/Nuke8.0v4/nuke-8.0.v4.dll -nx +version 8.0 v4 +Gizmo { + inputs 2 + help "EdgeMaker will eat into and extend the the edges of an image with an alpha" + note_font Verdana + mapsize {0.15 0.15} + addUserKnob {20 Controls} + addUserKnob {6 premulted l "image is premultiplied" +STARTLINE} + premulted true + addUserKnob {4 method t "Try directional if you want to keep lines that your image might have. Also, directional blur can be useful when extending something that has motion blur" M {"Regular Blur" "Directional Blur" ""}} + addUserKnob {26 ""} + addUserKnob {14 smooth R 0 100} + addUserKnob {14 inkeydist l "inside key distance" t "This will eat into your RGB before extending the edges. This is useful when your key has an edge color you want to eliminate " R 0 100} + addUserKnob {14 outkeydist l "outside key distance" t "extends the edges" R 0 100} + addUserKnob {26 ""} + addUserKnob {26 DirectionalBlur l "" +STARTLINE T "directional blur controls only\n"} + addUserKnob {7 rotation R -180 180} + addUserKnob {7 soften l "rotation soften" t "doing a directional blur can cause hard lines in one direction. This will soften them" R 0 10} + addUserKnob {26 ""} + addUserKnob {4 maskwith l "mask with" M {none original mask "mask (inverted)" "" ""}} + addUserKnob {6 Invert -STARTLINE} + addUserKnob {7 mix} + mix 1 +} + Input { + inputs 0 + name Mask + xpos -32 + ypos -109 + } + Dot { + name Dot9 + xpos 3 + ypos 45 + } +set N250b4010 [stack 0] + Invert { + channels rgba + name Invert1 + xpos 66 + ypos 198 + } +set N250b4380 [stack 0] + Dot { + name Dot2 + xpos 100 + ypos 644 + } +push $N250b4010 +push $N250b4380 + Switch { + inputs 2 + which {{Invert i}} + name Switch1 + xpos -31 + ypos 284 + } + FilterErode { + channels rgba + size {{-inkeydist i} {-inkeydist i}} + name FilterErode1 + xpos -31 + ypos 320 + } +set N250b4a60 [stack 0] + Dot { + name Dot4 + xpos 3 + ypos 678 + } +push $N250b4a60 + Invert { + channels alpha + name Invert2 + xpos -135 + ypos 314 + } + Input { + inputs 0 + name RGB + xpos -540 + ypos -109 + number 1 + } + Dot { + name Dot3 + xpos -505 + ypos 43 + } +set N250b5820 [stack 0] + Dot { + name Dot7 + xpos -409 + ypos 43 + } +set N250b5b90 [stack 0] + Dot { + name Dot6 + xpos -326 + ypos 43 + } + Unpremult { + name Unpremult2 + xpos -360 + ypos 136 + disable {{!parent.premulted i}} + } + Shuffle { + alpha white + name Shuffle1 + xpos -361 + ypos 267 + } + Blur { + channels rgba + size {{smooth} {smooth}} + filter box + maskChannelMask -rgba.alpha + name Blur1 + xpos -361 + ypos 370 + } +set N253652a0 [stack 0] + Merge2 { + inputs 2 + operation mask + name Merge1 + xpos -135 + ypos 370 + } +set N25057880 [stack 0] + Group { + name Group2 + xpos -262 + ypos 424 + addUserKnob {20 User} + addUserKnob {7 rotation R -180 180} + rotation {{parent.rotation i}} + addUserKnob {41 size T Blur1.size} + } + Input { + inputs 0 + name Input1 + xpos -643 + ypos -558 + } +set N25057bf0 [stack 0] + Transform { + rotate {{parent.rotation i}} + center {1024 576} + name Transform1 + xpos -643 + ypos -509 + } + Blur { + size {{-(outkeydist+inkeydist)*5/6 i} {parent.parent.soften i}} + name Blur1 + xpos -643 + ypos -448 + } + Transform { + rotate {{-parent.Transform1.rotate i x36 -53.64279827}} + center {1024 576} + name Transform2 + selected true + xpos -643 + ypos -402 + } +set N2544f970 [stack 0] + Crop { + box {0 0 2048 1152} + name Crop1 + xpos -643 + ypos -343 + disable true + } + Output { + name Output1 + xpos -643 + ypos -298 + } +push $N2544f970 +push 0 +push $N25057bf0 + Viewer { + inputs 3 + input_process false + name Viewer1 + xpos -343 + ypos -558 + } + end_group +push $N25057880 + Blur { + channels rgba + size {{-(outkeydist+inkeydist)*5/6 i} {-(outkeydist+inkeydist)*5/6 i}} + maskChannelMask -rgba.alpha + name Blur2 + selected true + xpos -135 + ypos 428 + } + Switch { + inputs 2 + which {{parent.method i}} + name Switch3 + xpos -135 + ypos 470 + } + Unpremult { + name Unpremult1 + xpos -135 + ypos 502 + } + Expression { + expr3 a>0.0001?1:0 + maskChannelMask -rgba.alpha + name Expression1 + xpos -135 + ypos 556 + } + Premult { + name Premult1 + xpos -135 + ypos 598 + } +push $N253652a0 + Dot { + name Dot5 + xpos -327 + ypos 678 + } + Keymix { + inputs 3 + name Keymix1 + xpos -134 + ypos 669 + } +set N254514f0 [stack 0] + Dot { + name Dot8 + xpos -100 + ypos 745 + } +set N254ce130 [stack 0] + Merge2 { + inputs 2 + operation mask + name Merge4 + xpos 66 + ypos 862 + } +push $N250b4010 + Dot { + name Dot1 + xpos 180 + ypos 45 + } +push $N254ce130 + Merge2 { + inputs 2 + operation mask + name Merge3 + xpos 146 + ypos 742 + } +push $N250b5b90 +push $N254ce130 + Merge2 { + inputs 2 + operation mask + name Merge2 + xpos -443 + ypos 742 + } +push $N254ce130 + Switch { + inputs 4 + which {{parent.maskwith i}} + name Switch2 + xpos -134 + ypos 891 + } +push $N250b5820 + Dissolve { + inputs 2 + which {{parent.mix i}} + name Dissolve1 + xpos -554 + ypos 885 + } + Output { + name Output1 + xpos -554 + ypos 1042 + } +push $N254514f0 + Viewer { + viewerProcess None + name Viewer1 + xpos -76 + ypos 1218 + } +end_group diff --git a/gizmos/Keyer/KillOutline.gizmo b/gizmos/Keyer/KillOutline.gizmo new file mode 100644 index 0000000..0d08af7 --- /dev/null +++ b/gizmos/Keyer/KillOutline.gizmo @@ -0,0 +1,706 @@ +#! C:/Program Files/Nuke6.0v6/Nuke6.0.exe -nx +version 6.0 v6 +Gizmo { + inputs 2 + help "KillOutline reduces unwanted outlines from keyed footage.\n\nerode controls: erode the alpha in for the amount of the visible outline.\n\nexpand controls: expand outer pixels of eroded image out again until it reaches the edge of the original alpha.\n\ntransition treatment: if needed, blur the transition between original image and extension." + addUserKnob {20 Settings} + addUserKnob {26 title l "" +STARTLINE T "KillOutline by Andreas Frickinger"} + addUserKnob {26 expectation l "" +STARTLINE T "expects premultiplied input."} + addUserKnob {26 ""} + addUserKnob {20 erodeControls l "erode controls" n 1} + addUserKnob {41 erodeSize l "erode size" t "alpha gets eroded in by this amount." T GizmoControl.erodeSize} + addUserKnob {20 endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 extendControls l "expand controls" n 1} + addUserKnob {41 slices T EdgeExtend2.slices} + addUserKnob {41 slice_width l "slice width" T EdgeExtend2.slice_width} + addUserKnob {41 expandSize l "expand size" t "outer pixels of eroded image gets dilated out by this amount. " T EdgeExtend2.blurResult} + addUserKnob {26 ""} + addUserKnob {20 transitionTreatment l "transition treatment" n 1} + addUserKnob {41 transitionTreatmentSwitch l on/off T GizmoControl.transitionTreatmentSwitch} + addUserKnob {41 edgeSize l "edge size" t "size of transition edge." T GizmoControl.edgeSize} + addUserKnob {41 edgeBlur l "edge blur" t "blur size of transition edge." T GizmoControl.edgeBlur} + addUserKnob {41 size l "image blur" t "blur size of image, masked out by transition edge." T TransitionBlur.size} + addUserKnob {20 endGroup_2 l endGroup n -1} +} + Input { + inputs 0 + name mask + xpos 1465 + ypos 803 + number 1 + } + Invert { + name Invert1 + xpos 1465 + ypos 829 + } + Input { + inputs 0 + name img + xpos 833 + ypos -395 + } + Dot { + name Dot5 + xpos 867 + ypos -311 + } +set N6fcbc48 [stack 0] + Dot { + name Dot6 + xpos 585 + ypos -311 + } + Dot { + name Dot7 + xpos 585 + ypos 839 + } + Dot { + name Dot8 + xpos 1057 + ypos 839 + } +push $N6fcbc48 + Unpremult { + name UnpremultInput + xpos 833 + ypos -241 + } + Dot { + name Dot3 + xpos 867 + ypos -144 + } +set N6fcc3f0 [stack 0] + Dot { + name Dot4 + xpos 867 + ypos 434 + } + Dot { + name Dot1 + xpos 1054 + ypos 434 + } +set N6fcc700 [stack 0] + Dot { + name Dot2 + xpos 1054 + ypos 672 + } + Expression { + expr3 a==0?0:a + name Expression1 + xpos 1118 + ypos 668 + } +push $N6fcc3f0 + Shuffle { + red black + green black + blue black + name AlphaOnly + xpos 1250 + ypos -148 + } + Erode { + size {{GizmoControl.erodeSize i}} + name ErodeShrink + xpos 1250 + ypos 37 + } +set N6fccea8 [stack 0] + Dot { + name Dot10 + xpos 1657 + ypos 47 + } + EdgeDetectWrapper { + channels alpha + erodesize {{GizmoControl.edgeSize*-1 i}} + name EdgeDetectWrapper1 + xpos 1623 + ypos 252 + } + Blur { + size {{GizmoControl.edgeBlur i}} + name EdgeBlur + xpos 1623 + ypos 290 + } + Dot { + name Dot9 + xpos 1657 + ypos 605 + } +push $N6fccea8 +push $N6fcc700 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy1 + xpos 1250 + ypos 424 + } + Premult { + name Premult2 + xpos 1250 + ypos 462 + } +set N72b86a8 [stack 0] +push $N72b86a8 + Group { + inputs 2 + name EdgeExtend2 + help "EdgeExtend repeatedly blurs and unpremuliplies the image to extend edges outward while trying to preserve the original source colour" + selected true + xpos 1250 + ypos 533 + addUserKnob {20 "" l User} + addUserKnob {4 premult l "input is" M {premultiplied unpremultiplied}} + addUserKnob {3 slices t "How many times the edges are blurred and unpremuliplied.\nThis is the fine control for slightly better quality. The current maximum is 10."} + slices 4 + addUserKnob {3 slice_width l "slice width" t "Blur amount that is applied before unpremultiplying the result per slice.\nThis is the brute force control and should be kept at 1 if possible.\nOnly increase this if the maximum amount of slices (10) doesn't cover the area you need."} + slice_width 1 + addUserKnob {7 blurResult l "blur slices" R 0 10} + blurResult 5 + } + Input { + inputs 0 + name img + xpos -590 + ypos -509 + } +set N72b8830 [stack 0] + Dot { + name Dot1 + xpos -556 + ypos 978 + } + Input { + inputs 0 + name matte + xpos -358 + ypos -653 + number 1 + } +push $N72b8830 + Unpremult { + name Unpremult11 + xpos -468 + ypos -509 + disable {{parent.premult}} + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels alpha + name Copy2 + xpos -358 + ypos -516 + } + Premult { + name Premult1 + xpos -358 + ypos -450 + } + Shuffle { + black alpha + out2 depth + name Shuffle1 + label alpha>depth + xpos -223 + ypos -413 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult1 + xpos -223 + ypos -373 + } +set N72b9470 [stack 0] + Dot { + name Dot2 + xpos -189 + ypos -214 + } +set N72efd40 [stack 0] +push $N72b9470 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width}} + name Blur1 + xpos -25 + ypos -373 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle3 + label depth>alpha + xpos -25 + ypos -333 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult3 + xpos -25 + ypos -293 + } + Blur { + channels rgba + size {{parent.blurResult}} + name Blur10 + xpos -25 + ypos -241 + } + set C72f04e8 [stack 0] + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge1 + xpos -25 + ypos -218 + } +set N72f07f8 [stack 0] + Dot { + name Dot3 + xpos 9 + ypos -73 + } +set N72f0c90 [stack 0] +push $N72f07f8 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur2 + xpos 159 + ypos -218 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle5 + label alpha>depth + xpos 159 + ypos -180 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult2 + xpos 159 + ypos -140 + } + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.blurResult}} + name Blur3 + xpos 159 + ypos -101 + } + set C72f1438 [stack 0] + Merge2 { + inputs 2 + name Merge2 + xpos 159 + ypos -73 + } +set N72f1748 [stack 0] + Dot { + name Dot4 + xpos 193 + ypos 103 + } +set N72f1be0 [stack 0] +push $N72f1748 + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle2 + label depth>alpha + xpos 342 + ypos -24 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult4 + xpos 342 + ypos 16 + } +set N72f1ef0 [stack 0] +clone $C72f04e8 { + xpos 342 + ypos 68 + selected false + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge3 + xpos 342 + ypos 103 + } + Dot { + name Dot5 + xpos 373 + ypos 226 + } +set N72f2820 [stack 0] +push $N72f1ef0 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur4 + xpos 503 + ypos 23 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle4 + label alpha>depth + xpos 503 + ypos 65 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult5 + xpos 503 + ypos 105 + } +set N72f2e40 [stack 0] +clone $C72f1438 { + xpos 503 + ypos 174 + selected false + } + Merge2 { + inputs 2 + name Merge4 + xpos 503 + ypos 226 + } + Dot { + name Dot6 + xpos 537 + ypos 321 + } +set N72f3770 [stack 0] +push $N72f2e40 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width}} + name Blur5 + xpos 689 + ypos 105 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle6 + label depth>alpha + xpos 689 + ypos 145 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult6 + xpos 689 + ypos 185 + } +set N735eec8 [stack 0] +clone $C72f04e8 { + xpos 684 + ypos 272 + selected false + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge5 + xpos 689 + ypos 321 + } + Dot { + name Dot7 + xpos 723 + ypos 448 + } +set N735f7f8 [stack 0] +push $N735eec8 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur6 + xpos 856 + ypos 200 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle7 + label alpha>depth + xpos 856 + ypos 280 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult7 + xpos 856 + ypos 320 + } +set N735fe18 [stack 0] +clone $C72f1438 { + xpos 852 + ypos 405 + selected false + } + Merge2 { + inputs 2 + name Merge6 + xpos 856 + ypos 448 + } + Dot { + name Dot8 + xpos 890 + ypos 514 + } +set N7360748 [stack 0] +push $N735fe18 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width}} + name Blur7 + xpos 1042 + ypos 320 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle8 + label depth>alpha + xpos 1042 + ypos 393 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult8 + xpos 1042 + ypos 433 + } +set N7360d68 [stack 0] +clone $C72f04e8 { + xpos 1046 + ypos 484 + selected false + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge7 + xpos 1042 + ypos 514 + } + Dot { + name Dot9 + xpos 1076 + ypos 579 + } +set N7361698 [stack 0] +push $N7360d68 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur8 + xpos 1205 + ypos 440 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle9 + label alpha>depth + xpos 1205 + ypos 466 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult9 + xpos 1205 + ypos 506 + } +set N7361cb8 [stack 0] +clone $C72f1438 { + xpos 1206 + ypos 551 + selected false + } + Merge2 { + inputs 2 + name Merge8 + xpos 1205 + ypos 579 + } + Dot { + name Dot10 + xpos 1239 + ypos 664 + } +set N73625e8 [stack 0] +push $N7361cb8 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width}} + name Blur9 + xpos 1421 + ypos 506 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle11 + label depth>alpha + xpos 1421 + ypos 546 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult10 + xpos 1421 + ypos 586 + } +clone $C72f04e8 { + xpos 1421 + ypos 638 + selected true + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge9 + xpos 1421 + ypos 664 + } +push $N73625e8 +push $N7361698 +push $N7360748 +push $N735f7f8 +push $N72f3770 +push $N72f2820 +push $N72f1be0 +push $N72f0c90 +push $N72efd40 +push $N72b8830 + Switch { + inputs 11 + which {{parent.slices}} + name Switch1 + xpos 689 + ypos 827 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle10 + label depth>alpha + xpos 689 + ypos 865 + } + Remove { + channels depth + name Remove1 + xpos 689 + ypos 905 + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels depth + name Copy1 + xpos 689 + ypos 960 + } + Output { + name Output1 + xpos 689 + ypos 1290 + } + Blur { + inputs 0 + channels {rgba.red rgba.green rgba.blue depth.Z} + size 8.5 + name Blur11 + xpos 299 + ypos -61 + } + end_group + Blur { + inputs 1+1 + size 3 + name TransitionBlur + xpos 1250 + ypos 595 + disable {{(GizmoControl.transitionTreatmentSwitch-1)*-1 i}} + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy2 + xpos 1250 + ypos 662 + } + Premult { + name Premult3 + xpos 1250 + ypos 777 + } + Keymix { + inputs 3 + name Keymix1 + xpos 1250 + ypos 829 + } + Output { + name Output1 + xpos 1250 + ypos 915 + } + NoOp { + inputs 0 + name GizmoControl + xpos 1428 + ypos 254 + addUserKnob {20 User} + addUserKnob {6 transitionTreatmentSwitch l on/off +STARTLINE} + transitionTreatmentSwitch true + addUserKnob {7 edgeBlur l "edge blur" R 0 100} + edgeBlur 3 + addUserKnob {7 edgeSize l "edge size" R -1 10} + edgeSize 1 + addUserKnob {7 erodeSize l "erode size" R 0 10} + erodeSize 5 + } +end_group diff --git a/gizmos/Keyer/LumaDespill.gizmo b/gizmos/Keyer/LumaDespill.gizmo new file mode 100644 index 0000000..aaeac44 --- /dev/null +++ b/gizmos/Keyer/LumaDespill.gizmo @@ -0,0 +1,202 @@ +#! /usr/local/Nuke6.0v3/Nuke6.0 -nx +version 6.0 v3 +Gizmo { + inputs 2 + help "The LumaDespill performs a spill suppress and can use the background as the replaced color." + addUserKnob {20 LumaDespill} + addUserKnob {4 ScreenColor l "Screen Color" M {Green Red Blue ""}} + addUserKnob {26 ""} + addUserKnob {7 RedShift l "Red Shift" R -200 200} + addUserKnob {7 GreenShift l "Green Shift" R -200 200} + addUserKnob {7 BlueShift l "Blue Shift" R -200 200} + addUserKnob {26 ""} + addUserKnob {7 BGwhitepoint l "BG Whitepoint"} + BGwhitepoint 0.5 + addUserKnob {7 BGblackpoint l "BG Blackpoint"} + BGblackpoint 0.18 + addUserKnob {7 BGgamma l "BG Gamma" R 0 3} + BGgamma 1 + addUserKnob {7 BGsaturation l "BG Saturation" R 0 2} + BGsaturation 0.8 + addUserKnob {26 ""} + addUserKnob {7 ballance} + ballance 0.5 + addUserKnob {7 AddBackground l "Add Background" R 0 2} + AddBackground 1 + addUserKnob {4 InputColorSpace l "Input Color Space" M {Log Lin "" "" "" ""}} +} + Input { + inputs 0 + name BG + xpos 490 + ypos -53 + number 1 + } +set N5b44180 [stack 0] + Log2Lin { + operation lin2log + ignore_black {{curve i x1 0}} + mix {{InputColorSpace i}} + name Log2Lin1 + xpos 490 + ypos 66 + } + set C5b46c30 [stack 0] + Grade { + gamma {{BGgamma i}} + black_clamp false + name Grade_Gamma + xpos 490 + ypos 95 + } + Grade { + blackpoint {{BGblackpoint i}} + whitepoint {{BGwhitepoint i}} + black_clamp false + name Grade_Expand + xpos 490 + ypos 129 + } + Saturation { + saturation {{BGsaturation i}} + name Saturation1 + xpos 490 + ypos 153 + } + Input { + inputs 0 + name FG + xpos 224 + ypos -44 + } +clone $C5b46c30 { + xpos 224 + ypos 72 + selected false + } + Expression { + expr0 "ScreenColor==1? g : r" + channel1 {-rgba.red rgba.green -rgba.blue -rgba.alpha} + expr1 "ScreenColor==1 ? r : ScreenColor==0?g:b" + expr2 "ScreenColor==2? g : b" + expr3 .5 + name Swaparoonie + xpos 224 + ypos 110 + } +set N5b6d310 [stack 0] + Expression { + temp_name0 AvgCalc + temp_expr0 "(ScreenColor==2 ? ((r * ((1- parent.ballance) * 2)) + (b * parent.ballance *2) )/2 : ((r * parent.ballance * 2) + (b *(1- parent.ballance) *2) )/2)" + channel0 none + channel1 {rgba.red rgba.green rgba.blue rgba.alpha} + expr1 clamp(g-AvgCalc,0,1) + channel2 none + name SpillMatteGreen + xpos 349 + ypos 166 + } +set N5b740b0 [stack 0] + Merge2 { + inputs 2 + operation multiply + name BG_Times_SpillMatte + xpos 490 + ypos 182 + } + Multiply { + value {{AddBackground}} + name ControlBGAdd + xpos 490 + ypos 212 + } +push $N5b6d310 + Expression { + temp_name0 rShift + temp_expr0 "ScreenColor==1?GreenShift * 0.01:RedShift * 0.01" + temp_name1 gShift + temp_expr1 "ScreenColor==0?(GreenShift * -0.01) + 1:ScreenColor==1?(RedShift * -0.01)+1:(BlueShift * -0.01)+1" + temp_name2 bShift + temp_expr2 "ScreenColor==2?GreenShift * 0.01:BlueShift * 0.01" + temp_name3 spMatte + temp_expr3 "clamp(g-(ScreenColor==2 ? ((r * ((1- parent.ballance) * 2)) + (b * parent.ballance *2) )/2 : ((r * parent.ballance * 2) + (b *(1- parent.ballance) *2) )/2),0,1)" + channel0 {rgba.red -rgba.green -rgba.blue rgba.alpha} + expr0 "r + (spMatte * rShift)" + channel1 {-rgba.red rgba.green -rgba.blue -rgba.alpha} + expr1 "g - (spMatte * gShift)" + channel2 {-rgba.red -rgba.green rgba.blue -rgba.alpha} + expr2 "b + (spMatte * bShift)" + channel3 {none none none -rgba.alpha} + name DespilledGreen + selected true + xpos 140 + ypos 180 + } +set N5b89550 [stack 0] + Expression { + expr0 "ScreenColor==1? g : r" + channel1 {-rgba.red rgba.green -rgba.blue -rgba.alpha} + expr1 "ScreenColor==1 ? r : ScreenColor==0?g:b" + expr2 "ScreenColor==2? g : b" + expr3 .5 + name Swaparoonie_Back + xpos 140 + ypos 254 + } +push $N5b740b0 + ShuffleCopy { + inputs 2 + red red + green green + blue blue + alpha alpha2 + name Shuffle_Spillmatte_to_Alpha + xpos 349 + ypos 254 + } + Merge2 { + inputs 2 + operation plus + name Respill_BG + xpos 490 + ypos 254 + } + Log2Lin { + ignore_black {{curve i}} + mix {{InputColorSpace i}} + name Log2Lin2 + xpos 492 + ypos 285 + } +push $N5b44180 + Dot { + name Dot3 + xpos 689 + ypos -49 + } + Dot { + name Dot2 + xpos 689 + ypos 344 + } + ShuffleCopy { + inputs 2 + red red + green green + blue blue + name ChannelsPassThrough + xpos 492 + ypos 342 + } + Output { + name Output1 + xpos 492 + ypos 422 + } +push $N5b89550 + Viewer { + name Viewer1 + xpos 732 + ypos 454 + } +end_group diff --git a/gizmos/Keyer/RemoveSkyEdge.gizmo b/gizmos/Keyer/RemoveSkyEdge.gizmo new file mode 100644 index 0000000..f1a4768 --- /dev/null +++ b/gizmos/Keyer/RemoveSkyEdge.gizmo @@ -0,0 +1,64 @@ +#! C:/Program Files/Nuke8.0v5/nuke-8.0.v5.dll -nx +version 8.0 v5 +Gizmo { +inputs 2 +addUserKnob {20 RemoveSkyEdge} +addUserKnob {41 channels T Dilate3.channels} +addUserKnob {41 intensity l Intensity T Dilate3.size} +addUserKnob {41 Blur l EdgeBlur T EdgeBlur8.size} +addUserKnob {26 "" l mask} +addUserKnob {41 maskChannelMask l "" -STARTLINE T Dilate3.maskChannelMask} +addUserKnob {26 Tips l Tips: T "Before using this tool,you should make a distinction between foreground and background.\n用这个工具的时候请把前后景分开处理"} +} +Input { +inputs 0 +name mask +xpos -427 +ypos -183 +number 1 +} +Input { +inputs 0 +name Input1 +xpos -537 +ypos -259 +} +Invert { +channels rgb +name Invert1 +xpos -537 +ypos -207 +} +Dilate { +inputs 1+1 +channels rgb +size {2} +maskChannelMask -rgba.alpha +name Dilate3 +xpos -537 +ypos -183 +} +Invert { +channels rgb +name Invert3 +xpos -537 +ypos -159 +} +Premult { +name Premult5 +xpos -537 +ypos -135 +} +EdgeBlur { +channels rgba +size {2} +name EdgeBlur8 +xpos -537 +ypos -111 +} +Output { +name Output1 +xpos -537 +ypos -42 +} +end_group diff --git a/gizmos/Keyer/Spill_Tool.gizmo b/gizmos/Keyer/Spill_Tool.gizmo new file mode 100644 index 0000000..14a031a --- /dev/null +++ b/gizmos/Keyer/Spill_Tool.gizmo @@ -0,0 +1,234 @@ +#! C:/Program Files/Nuke8.0v5/nuke-8.0.v5.dll -nx +version 8.0 v5 +Gizmo { +addUserKnob {20 User} +addUserKnob {41 screen_type l "screen type" T IBK4.screen_type} +addUserKnob {41 color l BGcolor t "Pick background color at here,for example, if background is a greenscreen,pick its color" T Constant13.color} +addUserKnob {41 blue_green_weight l "Spill G&B" T IBK4.blue_green_weight} +addUserKnob {41 value_1 l "Drop G edge" T Multiply1.value} +addUserKnob {41 value l "Drop B edge" T Multiply2.value} +addUserKnob {41 spillforeground l Spillforeground t "will you remove the spill color in foreground" T IBK4.autolevels} +addUserKnob {26 tips l "" +STARTLINE T "This node is used to reduce the light edge after keyer.\nAnd also you can reduce the spill in source.\n\nWrite by Sol"} +} +Constant { +inputs 0 +channels rgb +color {0 0 0 0} +name Constant13 +xpos -170 +ypos 173 +} +Input { +inputs 0 +name Input1 +xpos -280 +ypos 124 +} +Dot { +name Dot26 +xpos -246 +ypos 164 +} +set N95685560 [stack 0] +push $N95685560 +IBK { +inputs 3 +screen_type green +red_weight 0.5 +blue_green_weight 0.5 +luma 1 +yellow true +cyan true +magenta true +rgbal true +ubl {{ublu}} +ubc {{ubcr}} +name IBK4 +note_font_color 0xff00 +selected true +xpos -280 +ypos 197 +} +set N956851f0 [stack 0] +Dot { +name Dot20 +xpos -452 +ypos 200 +} +set N95684e80 [stack 0] +Dot { +name Dot4 +xpos -827 +ypos 200 +} +Dot { +name Dot1 +xpos -827 +ypos 251 +} +set N956847a0 [stack 0] +Dot { +name Dot2 +xpos -717 +ypos 251 +} +Shuffle { +red blue +green blue +alpha blue +name Shuffle1 +xpos -751 +ypos 319 +} +push $N956847a0 +Shuffle { +green red +blue red +alpha red +name Shuffle2 +xpos -861 +ypos 289 +} +MatchGrade { +inputs 2 +serializeKnob "182 181 32 395304 0.103108 0.100348 0.100815 195924 0.103108 0.100348 0.100815 432.474 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977241 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 432.603 0.103108 0.100348 0.100815 460.78 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977241 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977242 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911256 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947322 0.093707 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939605 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 0 0.11121 0.105589 0.0990744 0 0.124489 0.105234 0.0981091 0 0.14285 0.10424 0.0969901 0 0.156873 0.104849 0.0977054 0 0.172591 0.105764 0.0995333 0 0.200586 0.110308 0.0972666 0 0.22703 0.113814 0.092632 0 0.242711 0.11288 0.0906824 0 0.256924 0.111623 0.0894573 0 0.2906 0.105517 0.096397 0 0.314418 0.104635 0.0987714 0 0.329628 0.105126 0.0970934 0 0.344979 0.105535 0.0951455 0 0.356248 0.106105 0.0930922 0 0.370591 0.106312 0.0910463 0 0.383753 0.105931 0.0901219 0 0.405869 0.105398 0.0920197 0 0.423186 0.106096 0.0931316 0 0.446707 0.104519 0.0939249 0 0.464308 0.106078 0.0941193 0 0.475953 0.111412 0.0938088 0 0.502583 0.112999 0.0944078 0 0.539177 0.107704 0.0947286 0 0.55734 0.108891 0.0935049 0 0.600319 0.101628 0.0942467 0 0.700562 0.0979163 0.099486 0 0.795915 0.113711 0.0832809 0 0.865822 0.10228 0.0868203 0 0.878062 0.102212 0.0709787 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.108522 0.119627 0.09915 0 0.12619 0.12054 0.0976438 0 0.144819 0.125006 0.0976981 0 0.159277 0.127251 0.0974273 0 0.175061 0.129844 0.0986945 0 0.2014 0.1303 0.0977466 0 0.225375 0.127091 0.0938513 0 0.242283 0.125972 0.0913866 0 0.255695 0.125054 0.0899477 0 0.288169 0.122361 0.0948259 0 0.31427 0.120053 0.0990754 0 0.330137 0.120595 0.0975185 0 0.3461 0.121594 0.0956857 0 0.356774 0.12227 0.0936165 0 0.370853 0.122568 0.0914054 0 0.383359 0.122659 0.0898949 0 0.405651 0.122365 0.0916249 0 0.42453 0.123494 0.0934267 0 0.445279 0.123785 0.0943483 0 0.467331 0.122799 0.0952489 0 0.47912 0.126927 0.095391 0 0.500791 0.127006 0.0955408 0 0.54063 0.120295 0.0960233 0 0.555484 0.121926 0.0944484 0 0.595948 0.116539 0.0950904 0 0.698604 0.120355 0.0967409 0 0.771118 0.138753 0.0681622 0 0.866145 0.119529 0.0855344 0 0.87886 0.119323 0.069961 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.109384 0.14584 0.0997291 0 0.129898 0.147533 0.0974849 0 0.147524 0.150328 0.0987069 0 0.161533 0.15078 0.0983779 0 0.174942 0.149377 0.0981566 0 0.197074 0.146152 0.0954093 0 0.222031 0.141394 0.0940509 0 0.242096 0.13932 0.0930018 0 0.256364 0.141815 0.0905952 0 0.286539 0.14246 0.0931772 0 0.312766 0.14082 0.0970466 0 0.330832 0.140172 0.097683 0 0.347406 0.141205 0.0962758 0 0.357778 0.141204 0.0946331 0 0.371087 0.140816 0.0927793 0 0.38322 0.140286 0.0915804 0 0.405596 0.140146 0.0930417 0 0.425389 0.140088 0.0953206 0 0.443396 0.14119 0.0964638 0 0.470408 0.140337 0.0972868 0 0.481922 0.143322 0.0961127 0 0.498732 0.145466 0.0953288 0 0.534408 0.141652 0.094951 0 0.556462 0.142995 0.0935406 0 0.589307 0.141289 0.0923353 0 0.693996 0.145138 0.0931526 0 0.787543 0.150077 0.0804686 0 0.866559 0.13865 0.0839057 0 0.879386 0.13852 0.0683447 0 0.101124 0.159374 0.100413 0 0.101124 0.159374 0.100413 0 0.101124 0.159374 0.100413 0 0.110516 0.159998 0.0996395 0 0.130353 0.159614 0.0980483 0 0.147933 0.160389 0.0984206 0 0.16011 0.158453 0.0984651 0 0.173646 0.15643 0.0977643 0 0.195298 0.153542 0.0940367 0 0.219444 0.149387 0.0928463 0 0.242583 0.148658 0.0939094 0 0.257383 0.151074 0.091349 0 0.286628 0.152297 0.0934202 0 0.312046 0.151044 0.0967017 0 0.330106 0.149172 0.0975816 0 0.347449 0.148307 0.0975036 0 0.357824 0.148258 0.0958569 0 0.370914 0.148033 0.0940207 0 0.383349 0.147799 0.093012 0 0.40582 0.147552 0.0944785 0 0.426341 0.15063 0.0957756 0 0.44385 0.154024 0.0961058 0 0.469742 0.151073 0.0964181 0 0.483773 0.153121 0.0954071 0 0.497949 0.155885 0.0943929 0 0.531763 0.15222 0.0941154 0 0.558325 0.151851 0.0930796 0 0.586587 0.15177 0.0916384 0 0.692531 0.153756 0.0922604 0 0.798791 0.152932 0.088407 0 0.866829 0.146521 0.0833929 0 0.879722 0.146818 0.067641 0 0.101547 0.168954 0.100356 0 0.101547 0.168954 0.100356 0 0.101547 0.168954 0.100356 0 0.110412 0.169012 0.0994781 0 0.129775 0.168431 0.0982964 0 0.147145 0.166548 0.0978096 0 0.158293 0.164956 0.0983507 0 0.17246 0.162686 0.0974517 0 0.194218 0.160522 0.0933091 0 0.218666 0.159067 0.0920748 0 0.243013 0.157323 0.0947829 0 0.258185 0.158712 0.0926205 0 0.286394 0.15988 0.094535 0 0.31086 0.158517 0.0969165 0 0.329184 0.156549 0.0978277 0 0.347416 0.155175 0.0987214 0 0.357938 0.155248 0.0971318 0 0.371081 0.155726 0.0953402 0 0.383807 0.157264 0.0938877 0 0.407131 0.161046 0.0945016 0 0.427426 0.163941 0.0950141 0 0.444319 0.164722 0.0951993 0 0.468016 0.162425 0.0954692 0 0.485319 0.16278 0.0947982 0 0.497196 0.165858 0.0935495 0 0.528997 0.16319 0.093555 0 0.560064 0.160698 0.0933809 0 0.584898 0.161621 0.0917055 0 0.690483 0.162986 0.0910747 0 0.806032 0.158829 0.0946412 0 0.867399 0.15789 0.0826973 0 0.880306 0.158391 0.0669405 0 0.0999268 0.193931 0.0997985 0 0.0999268 0.193931 0.0997985 0 0.0999268 0.193931 0.0997985 0 0.107731 0.192894 0.0989016 0 0.123718 0.190544 0.0975409 0 0.143503 0.18741 0.0971813 0 0.154497 0.186846 0.0971723 0 0.169313 0.187338 0.0981989 0 0.195047 0.187207 0.0955507 0 0.216788 0.190624 0.0927186 0 0.240325 0.191026 0.0947176 0 0.261315 0.190276 0.0965284 0 0.287771 0.194053 0.0967648 0 0.311976 0.19745 0.0967718 0 0.32929 0.199141 0.0952631 0 0.348926 0.199543 0.0953678 0 0.361911 0.199737 0.0952486 0 0.375716 0.200043 0.0946022 0 0.386976 0.199828 0.0935491 0 0.407636 0.198563 0.0943459 0 0.426852 0.197379 0.0949694 0 0.444417 0.196759 0.0943884 0 0.460216 0.197216 0.0940764 0 0.489893 0.194072 0.09549 0 0.50336 0.198464 0.0947386 0 0.52415 0.200461 0.0940183 0 0.56522 0.195239 0.0948437 0 0.584066 0.198423 0.0923762 0 0.682783 0.200531 0.0881452 0 0.786092 0.202917 0.0822236 0 0.858738 0.199861 0.0760371 0 0.873742 0.200539 0.0605227 0 0.0978311 0.226811 0.0984107 0 0.0978311 0.226811 0.0984107 0 0.0978311 0.226811 0.0984106 0 0.106263 0.227665 0.0977056 0 0.123053 0.229247 0.0960451 0 0.143382 0.230064 0.0960211 0 0.157914 0.229316 0.0964769 0 0.171759 0.229533 0.0966532 0 0.196911 0.229753 0.0935438 0 0.219352 0.230321 0.0917876 0 0.240528 0.230801 0.0936335 0 0.260136 0.231601 0.0938141 0 0.291984 0.232759 0.0992031 0 0.315542 0.234585 0.100093 0 0.33099 0.235639 0.0973581 0 0.348294 0.234525 0.0958603 0 0.360227 0.233718 0.0944278 0 0.373333 0.233004 0.0926155 0 0.384316 0.232184 0.0919791 0 0.405502 0.230508 0.095047 0 0.425762 0.229909 0.0962794 0 0.445044 0.229778 0.0961648 0 0.462122 0.230535 0.0950346 0 0.485541 0.230142 0.0947836 0 0.509356 0.230505 0.0954892 0 0.522119 0.23486 0.0938041 0 0.55592 0.231878 0.0939663 0 0.586375 0.231001 0.0926092 0 0.680347 0.235421 0.0897046 0 0.788598 0.235992 0.0839658 0 0.864849 0.227276 0.0859105 0 0.880028 0.227541 0.0705594 0 0.0983843 0.245853 0.0981802 0 0.0983843 0.245853 0.0981802 0 0.0983844 0.245853 0.0981802 0 0.106873 0.245675 0.0974156 0 0.123063 0.245286 0.0957055 0 0.142394 0.244823 0.0955603 0 0.157419 0.244472 0.0964185 0 0.173263 0.244741 0.0962678 0 0.197783 0.246084 0.0937298 0 0.220186 0.247495 0.091731 0 0.241591 0.249393 0.0946483 0 0.260771 0.250481 0.0948468 0 0.292637 0.251106 0.0989259 0 0.316274 0.249855 0.10165 0 0.330976 0.249991 0.0989641 0 0.347178 0.249914 0.0961075 0 0.359429 0.249083 0.0946399 0 0.372839 0.248452 0.0927345 0 0.383785 0.248717 0.0909992 0 0.40404 0.247913 0.0936093 0 0.425347 0.246312 0.096445 0 0.445079 0.245834 0.0964486 0 0.463322 0.24629 0.0956902 0 0.483253 0.247204 0.0947812 0 0.511868 0.246143 0.0955118 0 0.524837 0.250374 0.0941449 0 0.551456 0.250185 0.0936216 0 0.589646 0.246798 0.0928535 0 0.681417 0.25295 0.0904038 0 0.79009 0.250719 0.0853231 0 0.857394 0.246073 0.0807448 0 0.875377 0.244522 0.0681536 0 0.0975686 0.259134 0.098987 0 0.0975686 0.259134 0.098987 0 0.0975686 0.259135 0.098987 0 0.106849 0.259173 0.0976115 0 0.122906 0.259908 0.0963818 0 0.142058 0.259983 0.0950464 0 0.157023 0.259842 0.09597 0 0.174115 0.26048 0.0965012 0 0.198266 0.262951 0.094292 0 0.221229 0.264225 0.0921194 0 0.241702 0.266075 0.0949282 0 0.261383 0.267121 0.0957801 0 0.292188 0.266282 0.0981153 0 0.315026 0.263991 0.100935 0 0.330924 0.262793 0.100037 0 0.346929 0.262666 0.0970826 0 0.358754 0.262892 0.0947947 0 0.37289 0.262809 0.0929359 0 0.384247 0.262864 0.0914184 0 0.402987 0.262845 0.0924723 0 0.423907 0.260884 0.0956169 0 0.445195 0.259928 0.0968575 0 0.464049 0.260211 0.0962867 0 0.482236 0.261775 0.0952855 0 0.51413 0.260085 0.0955684 0 0.527559 0.264153 0.0943543 0 0.550548 0.265193 0.0936636 0 0.592577 0.26091 0.0931372 0 0.681563 0.267954 0.0906592 0 0.791266 0.262266 0.0866549 0 0.85024 0.262997 0.0754995 0 0.868284 0.261753 0.0628626 0 0.0978816 0.281951 0.099945 0 0.0978816 0.281951 0.099945 0 0.0978816 0.281951 0.099945 0 0.107359 0.282321 0.0986623 0 0.12421 0.283361 0.096631 0 0.142748 0.284323 0.0957457 0 0.15702 0.28411 0.0956589 0 0.175036 0.284188 0.0967092 0 0.200295 0.287042 0.0938241 0 0.222666 0.288742 0.0920297 0 0.243592 0.290275 0.0946039 0 0.260764 0.288976 0.0956829 0 0.2912 0.286272 0.0977782 0 0.312584 0.285495 0.0990479 0 0.32954 0.284196 0.0993881 0 0.347645 0.283184 0.098956 0 0.359422 0.283415 0.0967089 0 0.37319 0.283647 0.0940111 0 0.38414 0.283989 0.0918864 0 0.403316 0.284853 0.0923846 0 0.422037 0.28512 0.0937546 0 0.444273 0.283741 0.0963851 0 0.464689 0.283512 0.0969246 0 0.484207 0.284905 0.0962245 0 0.514861 0.284288 0.0961522 0 0.532277 0.287835 0.0945616 0 0.549498 0.29097 0.0937948 0 0.591306 0.286622 0.0934057 0 0.681533 0.290985 0.0905928 0 0.791921 0.286144 0.0872768 0 0.83835 0.294817 0.0665825 0 0.856158 0.293657 0.0538057 0 0.09917 0.310003 0.0998942 0 0.09917 0.310003 0.0998942 0 0.09917 0.310003 0.0998942 0 0.108161 0.310302 0.0994736 0 0.125173 0.31007 0.0967961 0 0.143091 0.310921 0.0965776 0 0.156933 0.311176 0.0964938 0 0.175556 0.311089 0.096624 0 0.202623 0.31258 0.0925488 0 0.223867 0.312596 0.0912657 0 0.243347 0.311902 0.0937151 0 0.258426 0.311289 0.0946542 0 0.288832 0.308401 0.0976267 0 0.312989 0.308191 0.0988229 0 0.327523 0.308249 0.0975064 0 0.345948 0.306675 0.0978958 0 0.359452 0.305726 0.0978104 0 0.374315 0.305869 0.0961067 0 0.385871 0.3066 0.0939148 0 0.405028 0.308788 0.0933033 0 0.422187 0.310411 0.0936256 0 0.442481 0.310257 0.0945798 0 0.464672 0.308721 0.0966324 0 0.48622 0.308832 0.0972423 0 0.51274 0.309052 0.0971115 0 0.536167 0.310061 0.0954884 0 0.548815 0.314333 0.0935482 0 0.585561 0.311165 0.0931834 0 0.687191 0.310297 0.0908344 0 0.789869 0.309145 0.0864658 0 0.837554 0.31971 0.0650416 0 0.849361 0.320845 0.048446 0 0.0992828 0.327025 0.0994444 0 0.0992828 0.327025 0.0994444 0 0.0992828 0.327025 0.0994444 0 0.108507 0.327334 0.0990725 0 0.125548 0.328418 0.0974756 0 0.14419 0.32949 0.0965989 0 0.157512 0.330189 0.0971576 0 0.175381 0.33044 0.0972148 0 0.202702 0.328651 0.0925119 0 0.222773 0.328036 0.0907459 0 0.242531 0.327062 0.0926239 0 0.258259 0.326978 0.0941295 0 0.286783 0.325599 0.0970441 0 0.313856 0.324418 0.0992129 0 0.327357 0.325379 0.0973512 0 0.344735 0.325561 0.0966358 0 0.358398 0.324973 0.0966233 0 0.374449 0.324221 0.0965387 0 0.387511 0.323992 0.0958725 0 0.40677 0.326099 0.0951516 0 0.423212 0.327934 0.0946115 0 0.441913 0.328642 0.0943627 0 0.463335 0.327699 0.0955244 0 0.486999 0.325958 0.0976674 0 0.510517 0.326565 0.0973503 0 0.538956 0.325649 0.0962901 0 0.551844 0.330239 0.0934824 0 0.580818 0.329674 0.0926999 0 0.691455 0.325021 0.0913111 0 0.789001 0.328262 0.086503 0 0.841352 0.338392 0.0665105 0 0.853201 0.33965 0.0498227 0 0.100039 0.347542 0.0994331 0 0.100039 0.347542 0.0994331 0 0.100039 0.347542 0.0994331 0 0.10986 0.348024 0.0986762 0 0.12663 0.34937 0.0974709 0 0.145528 0.350456 0.0966165 0 0.157761 0.350053 0.0972995 0 0.173169 0.348799 0.0972111 0 0.201444 0.345649 0.0922081 0 0.221924 0.344571 0.0894739 0 0.242021 0.344558 0.0914085 0 0.258894 0.345019 0.093492 0 0.285371 0.345172 0.0966601 0 0.315166 0.344101 0.0997652 0 0.328808 0.345542 0.0982119 0 0.344697 0.346519 0.0967246 0 0.357341 0.346775 0.0955157 0 0.373152 0.346121 0.0953217 0 0.386653 0.345349 0.0952888 0 0.408619 0.344912 0.0973569 0 0.424654 0.346697 0.0959301 0 0.441966 0.347661 0.0948472 0 0.461714 0.347565 0.0943093 0 0.485612 0.345986 0.096009 0 0.509724 0.345558 0.0976542 0 0.542074 0.343218 0.0972489 0 0.555421 0.347646 0.0946456 0 0.578857 0.349491 0.0926186 0 0.696439 0.344959 0.0917934 0 0.784751 0.35189 0.0849246 0 0.844896 0.356778 0.0676683 0 0.856778 0.358025 0.05086 0 0.100807 0.363798 0.0994421 0 0.100807 0.363798 0.0994421 0 0.100807 0.363798 0.0994421 0 0.110634 0.364113 0.098688 0 0.127441 0.364791 0.0973122 0 0.144614 0.363533 0.0963144 0 0.15681 0.362706 0.0969442 0 0.17169 0.361609 0.0974073 0 0.200246 0.35828 0.0927622 0 0.222086 0.358155 0.0887433 0 0.242505 0.358926 0.0909222 0 0.259748 0.359611 0.0929877 0 0.285109 0.360884 0.0965583 0 0.315116 0.360132 0.099876 0 0.330153 0.361055 0.0986986 0 0.34505 0.361915 0.096963 0 0.35736 0.361771 0.0957593 0 0.371935 0.361493 0.0941442 0 0.385145 0.360498 0.0939877 0 0.409038 0.358533 0.0979757 0 0.425948 0.359693 0.0974041 0 0.442087 0.361263 0.0953655 0 0.461449 0.361131 0.09474 0 0.484565 0.360566 0.0949706 0 0.510196 0.359517 0.0975569 0 0.541511 0.357262 0.0977106 0 0.558122 0.360708 0.0955217 0 0.577729 0.364171 0.0923891 0 0.699652 0.36068 0.0920017 0 0.7787 0.367542 0.0819094 0 0.84758 0.370162 0.0682418 0 0.859294 0.370944 0.0514469 0 0.101487 0.380214 0.0993782 0 0.101487 0.380214 0.0993782 0 0.101487 0.380214 0.0993782 0 0.110429 0.379606 0.098841 0 0.126504 0.378434 0.0968829 0 0.143453 0.377487 0.0961089 0 0.155988 0.376647 0.096288 0 0.170549 0.376193 0.0974897 0 0.199381 0.37512 0.0933687 0 0.222503 0.37455 0.0885128 0 0.243816 0.3751 0.0905413 0 0.260747 0.376505 0.0923286 0 0.285069 0.377883 0.0959055 0 0.31419 0.376701 0.099665 0 0.330922 0.376423 0.0987061 0 0.345257 0.376843 0.0972433 0 0.357122 0.376774 0.0961231 0 0.371604 0.376487 0.0943891 0 0.383716 0.376247 0.0930486 0 0.40781 0.374276 0.0967646 0 0.427313 0.37372 0.0991554 0 0.443152 0.375734 0.0970994 0 0.461444 0.376696 0.095308 0 0.484162 0.376625 0.0948716 0 0.510305 0.375937 0.0964572 0 0.539572 0.374014 0.0978749 0 0.560959 0.376023 0.0962295 0 0.577547 0.381475 0.0929164 0 0.703073 0.377748 0.0919591 0 0.773635 0.384766 0.0783777 0 0.850301 0.384998 0.0699031 0 0.861863 0.38543 0.0531644 0 0.100861 0.391879 0.0988659 0 0.100861 0.391879 0.0988659 0 0.100861 0.391879 0.0988659 0 0.10949 0.391529 0.0987578 0 0.125976 0.390591 0.0966166 0 0.142861 0.389991 0.0959767 0 0.15538 0.389491 0.0960822 0 0.170828 0.389755 0.0970938 0 0.198683 0.389329 0.0937838 0 0.222355 0.388397 0.0888197 0 0.244473 0.388505 0.0898921 0 0.261229 0.38936 0.0917071 0 0.2846 0.390269 0.0950802 0 0.313282 0.388972 0.0991101 0 0.331376 0.3883 0.0987839 0 0.345417 0.388883 0.097303 0 0.356956 0.388769 0.0962266 0 0.371382 0.388617 0.0947697 0 0.383564 0.388553 0.0933377 0 0.406704 0.387737 0.0957707 0 0.427557 0.386545 0.099151 0 0.444401 0.387697 0.098432 0 0.461836 0.389164 0.0960327 0 0.484096 0.389388 0.0951947 0 0.510344 0.389519 0.0955549 0 0.537583 0.388797 0.097433 0 0.563417 0.389403 0.0966535 0 0.577937 0.395788 0.0932337 0 0.70503 0.389815 0.0914305 0 0.770004 0.398069 0.0759865 0 0.852163 0.395368 0.0715303 0 0.864627 0.398682 0.0546634 0 0.100364 0.406908 0.0981864 0 0.100364 0.406908 0.0981864 0 0.100364 0.406908 0.0981865 0 0.10908 0.40666 0.0981001 0 0.125268 0.40601 0.0965313 0 0.142876 0.406051 0.0956782 0 0.155347 0.40617 0.0960103 0 0.171216 0.406001 0.0965343 0 0.197581 0.405273 0.0941918 0 0.22171 0.403858 0.0898212 0 0.244883 0.403054 0.0891725 0 0.261566 0.404001 0.090998 0 0.285019 0.404765 0.0942865 0 0.312273 0.404245 0.0984029 0 0.331434 0.403835 0.0986628 0 0.346265 0.404639 0.0973884 0 0.356866 0.405107 0.096064 0 0.371337 0.404899 0.0950866 0 0.383502 0.404756 0.0936613 0 0.40561 0.40445 0.0949708 0 0.426992 0.403213 0.0981437 0 0.445838 0.402795 0.0999024 0 0.462986 0.405074 0.0975603 0 0.484467 0.407224 0.095574 0 0.510672 0.408461 0.0951063 0 0.534328 0.409141 0.0957464 0 0.566586 0.406573 0.0971149 0 0.581461 0.412053 0.0937701 0 0.69961 0.407704 0.0899935 0 0.76667 0.412972 0.0754194 0 0.854989 0.410224 0.0746054 0 0.864765 0.406808 0.0585353 0 0.099602 0.422485 0.097844 0 0.099602 0.422485 0.097844 0 0.099602 0.422485 0.097844 0 0.108762 0.422174 0.0974696 0 0.12502 0.422055 0.0964917 0 0.142861 0.421598 0.0953641 0 0.154867 0.421367 0.09581 0 0.170743 0.420818 0.0961943 0 0.19682 0.420966 0.0946052 0 0.221378 0.419831 0.0905205 0 0.244149 0.419461 0.0899474 0 0.263096 0.419972 0.0904377 0 0.285744 0.421473 0.0932791 0 0.312106 0.421628 0.0976184 0 0.331314 0.421224 0.0981217 0 0.347288 0.42175 0.0973557 0 0.357256 0.422495 0.0959818 0 0.370921 0.422704 0.0946604 0 0.383342 0.422705 0.0936764 0 0.405574 0.422982 0.0950719 0 0.426428 0.42347 0.0965969 0 0.446475 0.423402 0.0987993 0 0.464888 0.424235 0.0991693 0 0.485809 0.426765 0.0967535 0 0.511487 0.428102 0.095193 0 0.53475 0.428744 0.0937871 0 0.568428 0.424797 0.095817 0 0.585268 0.429484 0.0935846 0 0.693524 0.427299 0.0891381 0 0.761148 0.422645 0.0777703 0 0.854734 0.417928 0.0791784 0 0.868474 0.425094 0.0622523 0 0.0988047 0.439648 0.0976267 0 0.0988047 0.439648 0.0976267 0 0.0988047 0.439648 0.0976268 0 0.108364 0.439327 0.0970202 0 0.124746 0.439243 0.0960184 0 0.142528 0.438965 0.0949511 0 0.154626 0.438969 0.0952291 0 0.170519 0.439026 0.0959163 0 0.197131 0.440034 0.0942914 0 0.220462 0.439926 0.0909315 0 0.24372 0.4396 0.0914816 0 0.264547 0.439426 0.0902014 0 0.286626 0.44098 0.0922593 0 0.311954 0.441621 0.0965998 0 0.331016 0.441832 0.0971866 0 0.349124 0.442067 0.0968278 0 0.358817 0.443341 0.0958488 0 0.371385 0.444529 0.0943466 0 0.383499 0.445086 0.0932405 0 0.406195 0.445554 0.0951415 0 0.427232 0.446443 0.0964121 0 0.447128 0.446581 0.0971668 0 0.465313 0.445968 0.0980235 0 0.486812 0.445704 0.0975897 0 0.511705 0.446876 0.0947688 0 0.535809 0.447183 0.0931979 0 0.563576 0.445579 0.0933651 0 0.588804 0.446556 0.0942092 0 0.68652 0.438811 0.0905202 0 0.75542 0.430859 0.080679 0 0.863018 0.448186 0.0813098 0 0.874939 0.44994 0.0638508 0 0.098184 0.456704 0.0975075 0 0.098184 0.456704 0.0975075 0 0.098184 0.456704 0.0975075 0 0.107886 0.456404 0.096647 0 0.124901 0.456458 0.0952331 0 0.142642 0.457208 0.0947145 0 0.155107 0.457583 0.0946602 0 0.170928 0.458218 0.0955713 0 0.198166 0.459399 0.0934637 0 0.219766 0.459986 0.0909524 0 0.243605 0.459504 0.0921291 0 0.264757 0.459372 0.0905268 0 0.28695 0.46155 0.0920784 0 0.311752 0.463028 0.09539 0 0.3314 0.463732 0.0962228 0 0.350002 0.464409 0.0960746 0 0.361187 0.465465 0.0951016 0 0.372865 0.466668 0.0938876 0 0.383797 0.46717 0.0922963 0 0.405967 0.466507 0.0940296 0 0.426868 0.465524 0.0957869 0 0.446739 0.464703 0.0962279 0 0.464863 0.464132 0.0962839 0 0.486503 0.462607 0.0976145 0 0.512366 0.463015 0.0964205 0 0.536975 0.464631 0.0939761 0 0.559429 0.463203 0.0930521 0 0.589942 0.458674 0.0952647 0 0.68181 0.445927 0.0930077 0 0.757524 0.462742 0.0801172 0 0.866432 0.463365 0.0809838 0 0.876329 0.459325 0.0632858 0 0.0978017 0.47791 0.0981103 0 0.0978017 0.47791 0.0981103 0 0.0978018 0.47791 0.0981103 0 0.107844 0.478033 0.0970572 0 0.125823 0.478375 0.0945126 0 0.143368 0.479465 0.0941758 0 0.155622 0.479903 0.0941266 0 0.17175 0.480469 0.0947573 0 0.199386 0.482087 0.0924164 0 0.219955 0.483894 0.0903772 0 0.244409 0.483988 0.0922409 0 0.264493 0.485012 0.0920021 0 0.288864 0.486503 0.0910489 0 0.312886 0.486956 0.0947666 0 0.331887 0.486326 0.0948389 0 0.349465 0.485779 0.0946184 0 0.361957 0.485278 0.0940296 0 0.374047 0.485727 0.0929552 0 0.3839 0.486175 0.092049 0 0.404619 0.485374 0.0934199 0 0.425472 0.484364 0.0954196 0 0.44639 0.48351 0.0965166 0 0.464398 0.481333 0.0966446 0 0.484347 0.478983 0.0978432 0 0.512383 0.474785 0.100864 0 0.53569 0.471188 0.0992821 0 0.555664 0.468761 0.097959 0 0.589036 0.465862 0.0976872 0 0.682533 0.473026 0.092213 0 0.760366 0.500898 0.0745014 0 0.86417 0.464421 0.0822389 0 0.873962 0.460313 0.065328 0 0.0983344 0.505465 0.0986354 0 0.0983344 0.505465 0.0986354 0 0.0983344 0.505465 0.0986354 0 0.108442 0.505861 0.097703 0 0.126769 0.506554 0.0945226 0 0.145121 0.507568 0.0928932 0 0.156662 0.508507 0.0934193 0 0.172992 0.50916 0.0936741 0 0.200531 0.510338 0.0917988 0 0.220916 0.510609 0.0895502 0 0.243697 0.509857 0.091374 0 0.26472 0.509273 0.0929038 0 0.290779 0.508121 0.0905013 0 0.312923 0.508538 0.0946033 0 0.330334 0.506689 0.095381 0 0.347652 0.503645 0.0946674 0 0.360051 0.501408 0.0945088 0 0.373475 0.49936 0.0941673 0 0.382699 0.498366 0.0936663 0 0.40182 0.496128 0.0957046 0 0.421814 0.493208 0.098374 0 0.443024 0.489876 0.100659 0 0.462222 0.488262 0.101575 0 0.481626 0.49018 0.100855 0 0.509333 0.489612 0.102618 0 0.536354 0.488537 0.103017 0 0.557131 0.49106 0.0990226 0 0.593048 0.491593 0.0967716 0 0.689693 0.521868 0.0870091 0 0.756796 0.502571 0.0776194 0 0.859641 0.469951 0.0841646 0 0.870449 0.464072 0.0681886 0 0.0989936 0.535348 0.0993393 0 0.0989936 0.535348 0.0993393 0 0.0989936 0.535348 0.0993393 0 0.108916 0.535078 0.0985587 0 0.127021 0.534569 0.0953789 0 0.145687 0.534085 0.0926116 0 0.157515 0.533984 0.0923239 0 0.172824 0.533955 0.0931178 0 0.199973 0.53125 0.0917422 0 0.220206 0.527656 0.0898592 0 0.240775 0.524816 0.0928717 0 0.262711 0.52131 0.0954691 0 0.286679 0.517674 0.0952696 0 0.310491 0.515019 0.0984594 0 0.327168 0.514804 0.099926 0 0.344517 0.514815 0.0986051 0 0.356941 0.514461 0.0970572 0 0.372327 0.513994 0.0958271 0 0.382407 0.514745 0.094925 0 0.400796 0.516248 0.0958934 0 0.421272 0.516723 0.0981924 0 0.442215 0.516753 0.100125 0 0.463259 0.517615 0.100853 0 0.484087 0.521851 0.0998911 0 0.510247 0.531746 0.0977804 0 0.542295 0.540093 0.098393 0 0.569929 0.551888 0.095513 0 0.595319 0.552599 0.0898797 0 0.688822 0.527301 0.0910708 0 0.755659 0.503116 0.0799421 0 0.855466 0.477907 0.0860882 0 0.866199 0.471885 0.0700581 0 0.0978308 0.553019 0.100158 0 0.0978308 0.553019 0.100158 0 0.0978308 0.553019 0.100158 0 0.106859 0.551802 0.101146 0 0.124489 0.548932 0.0989897 0 0.142677 0.545658 0.0969399 0 0.154648 0.54366 0.0964051 0 0.169592 0.541434 0.0970225 0 0.197341 0.539652 0.0947396 0 0.218223 0.540526 0.0919465 0 0.239056 0.541596 0.0941205 0 0.26175 0.541646 0.096572 0 0.28546 0.54266 0.096938 0 0.311519 0.542023 0.0967231 0 0.328529 0.544332 0.0992058 0 0.344753 0.54833 0.0975654 0 0.357244 0.550529 0.0955258 0 0.372822 0.55305 0.0931428 0 0.38666 0.554927 0.0913067 0 0.405476 0.56102 0.0913813 0 0.426737 0.571536 0.0918624 0 0.449753 0.580886 0.0926857 0 0.471759 0.584618 0.0939265 0 0.493727 0.580541 0.0956853 0 0.515185 0.575505 0.0958804 0 0.540228 0.569286 0.0958607 0 0.56639 0.56264 0.0976603 0 0.59104 0.5568 0.0964208 0 0.686974 0.528336 0.0980057 0 0.75495 0.50357 0.0836295 0 0.851097 0.485944 0.0878515 0 0.862713 0.481497 0.0724066 0 0.0959879 0.565816 0.101873 0 0.0959879 0.565816 0.101873 0 0.0959879 0.565816 0.101873 0 0.105285 0.566013 0.102591 0 0.122701 0.566874 0.101286 0 0.141584 0.567441 0.0989336 0 0.153895 0.567662 0.09802 0 0.169813 0.567848 0.0971438 0 0.198928 0.57199 0.0930935 0 0.22054 0.577979 0.0893021 0 0.24249 0.582231 0.0899092 0 0.262946 0.585072 0.0920868 0 0.289585 0.587978 0.0928246 0 0.314807 0.590203 0.0922064 0 0.335546 0.598645 0.0914097 0 0.350434 0.599361 0.0930855 0 0.361113 0.599094 0.0923427 0 0.376275 0.59789 0.0914235 0 0.389672 0.596796 0.0905843 0 0.411022 0.596379 0.0913582 0 0.428544 0.597233 0.0925421 0 0.448283 0.594433 0.0946139 0 0.467683 0.589562 0.0966223 0 0.489 0.584212 0.0989215 0 0.511078 0.578944 0.0999495 0 0.535392 0.572956 0.10027 0 0.560569 0.566655 0.100649 0 0.586673 0.560083 0.102185 0 0.686414 0.551287 0.0930022 0 0.759086 0.51685 0.0831614 0 0.864595 0.545981 0.0873337 0 0.885336 0.567807 0.0711879 0 0.0968953 0.653983 0.100232 0 0.0968953 0.653983 0.100232 0 0.0968953 0.653983 0.100232 0 0.106277 0.652754 0.101292 0 0.123182 0.650185 0.0999888 0 0.141213 0.647404 0.099108 0 0.152521 0.647149 0.0995638 0 0.167875 0.650955 0.0993624 0 0.199122 0.660827 0.0963704 0 0.221265 0.664257 0.0907485 0 0.241694 0.662532 0.0900001 0 0.261044 0.659445 0.0909737 0 0.285681 0.655272 0.0921318 0 0.306844 0.649866 0.094978 0 0.32344 0.644641 0.0950127 0 0.340773 0.639274 0.0932132 0 0.350492 0.636287 0.0912712 0 0.359613 0.633711 0.0915617 0 0.37061 0.638038 0.0907695 0 0.395233 0.647778 0.0935979 0 0.420231 0.656226 0.0961857 0 0.440813 0.665993 0.0966851 0 0.461921 0.672536 0.0966707 0 0.486946 0.6744 0.0970965 0 0.515561 0.673098 0.0991242 0 0.54026 0.671866 0.10105 0 0.561864 0.668754 0.100788 0 0.587473 0.663024 0.0989934 0 0.663209 0.646414 0.0869708 0 0.767333 0.619719 0.0843026 0 0.864801 0.655307 0.0845379 0 0.877934 0.654088 0.0695821 0 0.0893983 0.734839 0.102774 0 0.0893983 0.734839 0.102774 0 0.0893983 0.734839 0.102774 0 0.0985004 0.731333 0.103799 0 0.113274 0.725303 0.103472 0 0.131024 0.718217 0.1 0 0.141171 0.714188 0.0999367 0 0.159034 0.7257 0.100228 0 0.193086 0.746604 0.0981914 0 0.217178 0.753855 0.0935425 0 0.239081 0.758784 0.0939948 0 0.257714 0.753965 0.094533 0 0.28327 0.747324 0.0954813 0 0.302634 0.742478 0.0949735 0 0.322715 0.738412 0.0938901 0 0.342712 0.734468 0.0946184 0 0.352525 0.732481 0.0930808 0 0.366633 0.728984 0.0907804 0 0.376634 0.726565 0.0895965 0 0.393401 0.722181 0.0892071 0 0.406097 0.718744 0.0912443 0 0.423053 0.714188 0.0916056 0 0.441135 0.709351 0.090979 0 0.456848 0.704828 0.089852 0 0.47673 0.698772 0.0889928 0 0.500144 0.692049 0.0878713 0 0.53032 0.686098 0.0902255 0 0.558941 0.679479 0.0930578 0 0.696629 0.779709 0.0977327 0 0.776496 0.766073 0.0873343 0 0.845423 0.75533 0.0802465 0 0.873288 0.752802 0.0717809 0 0.0937415 0.79956 0.0912765 0 0.0937415 0.79956 0.0912765 0 0.0937415 0.79956 0.0912765 0 0.101115 0.799508 0.0940176 0 0.114161 0.799161 0.0948073 0 0.131555 0.796592 0.0921479 0 0.142902 0.794769 0.0912458 0 0.156413 0.792602 0.0898927 0 0.184485 0.797255 0.0866871 0 0.208269 0.802935 0.0843912 0 0.23058 0.810504 0.0873567 0 0.261097 0.846072 0.0928027 0 0.283955 0.83568 0.0935136 0 0.298616 0.824087 0.093739 0 0.310019 0.816056 0.0917981 0 0.325697 0.810473 0.0918371 0 0.336888 0.806305 0.0912853 0 0.350843 0.799362 0.0895887 0 0.358393 0.792944 0.0878978 0 0.370703 0.77948 0.0854489 0 0.409382 0.839205 0.0911969 0 0.433739 0.849842 0.0910042 0 0.453499 0.849091 0.0944458 0 0.479745 0.846804 0.0961278 0 0.504222 0.844544 0.095687 0 0.529733 0.842055 0.0951518 0 0.556969 0.839645 0.0954225 0 0.585488 0.840026 0.0954858 0 0.674711 0.82465 0.0896134 0 0.7858 0.849046 0.0883536 0 0.864696 0.832058 0.0859646 0 0.878947 0.845957 0.0771621 0 0.0979572 0.888594 0.0914175 0 0.0979572 0.888594 0.0914175 0 0.0979572 0.888594 0.0914175 0 0.115913 0.906694 0.0920357 0 0.136834 0.921634 0.0931639 0 0.152562 0.924822 0.096453 0 0.164585 0.926377 0.0973758 0 0.179623 0.926718 0.0967624 0 0.202158 0.920347 0.0925577 0 0.219846 0.915557 0.0882495 0 0.237573 0.910126 0.0883253 0 0.252563 0.905223 0.0888164 0 0.274841 0.897868 0.0896981 0 0.294858 0.89115 0.0907986 0 0.310351 0.889272 0.0900752 0 0.328239 0.88789 0.0903192 0 0.344221 0.885766 0.0910423 0 0.362067 0.885272 0.0913747 0 0.375366 0.88527 0.0903281 0 0.397259 0.891667 0.0928421 0 0.417617 0.89696 0.0948361 0 0.438901 0.901652 0.0940166 0 0.459784 0.90609 0.0936637 0 0.482263 0.907372 0.0947804 0 0.510011 0.907095 0.0956625 0 0.532505 0.909032 0.0948282 0 0.555201 0.904952 0.094243 0 0.58058 0.897792 0.0932512 0 0.683986 0.892815 0.0909569 0 0.777518 0.904451 0.090325 0 0.867021 0.877925 0.0894798 0 0.888138 0.880173 0.080336 0 0.103108 0.100348 0.100815 432.583 0.103108 0.100348 0.100815 461.53 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977241 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 461.923 0.103108 0.100348 0.100815 4009.85 0.103108 0.100348 0.100815 1461.51 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977241 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 1462.42 0.103108 0.100348 0.100815 2298.53 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977242 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911256 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947322 0.093707 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939605 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 0 0.11121 0.105589 0.0990744 0 0.124489 0.105234 0.0981091 0 0.14285 0.10424 0.0969901 0 0.156873 0.104849 0.0977054 0 0.172591 0.105764 0.0995333 0 0.200586 0.110308 0.0972666 0 0.22703 0.113814 0.092632 0 0.242711 0.11288 0.0906824 0 0.256924 0.111623 0.0894573 0 0.2906 0.105517 0.096397 0 0.314418 0.104635 0.0987714 0 0.329628 0.105126 0.0970934 0 0.344979 0.105535 0.0951455 0 0.356248 0.106105 0.0930922 0 0.370591 0.106312 0.0910463 0 0.383753 0.105931 0.0901219 0 0.405869 0.105398 0.0920197 0 0.423186 0.106096 0.0931316 0 0.446707 0.104519 0.0939249 0 0.464308 0.106078 0.0941193 0 0.475953 0.111412 0.0938088 0 0.502583 0.112999 0.0944078 0 0.539177 0.107704 0.0947286 0 0.55734 0.108891 0.0935049 0 0.600319 0.101628 0.0942467 0 0.700562 0.0979163 0.099486 0 0.795915 0.113711 0.0832809 0 0.865822 0.10228 0.0868203 0 0.878062 0.102212 0.0709787 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.108522 0.119627 0.09915 0 0.12619 0.12054 0.0976438 0 0.144819 0.125006 0.0976981 0 0.159277 0.127251 0.0974273 0 0.175061 0.129844 0.0986945 0 0.2014 0.1303 0.0977466 0 0.225375 0.127091 0.0938513 0 0.242283 0.125972 0.0913866 0 0.255695 0.125054 0.0899477 0 0.288169 0.122361 0.0948259 0 0.31427 0.120053 0.0990754 0 0.330137 0.120595 0.0975185 0 0.3461 0.121594 0.0956857 0 0.356774 0.12227 0.0936165 0 0.370853 0.122568 0.0914054 0 0.383359 0.122659 0.0898949 0 0.405651 0.122365 0.0916249 0 0.42453 0.123494 0.0934267 0 0.445279 0.123785 0.0943483 0 0.467331 0.122799 0.0952489 0 0.47912 0.126927 0.095391 0 0.500791 0.127006 0.0955408 0 0.54063 0.120295 0.0960233 0 0.555484 0.121926 0.0944484 0 0.595948 0.116539 0.0950904 0 0.698604 0.120355 0.0967409 0 0.771118 0.138753 0.0681622 0 0.866145 0.119529 0.0855344 0 0.87886 0.119323 0.069961 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.109384 0.14584 0.0997291 0 0.129898 0.147533 0.0974849 0 0.147524 0.150328 0.0987069 0 0.161533 0.15078 0.0983779 0 0.174942 0.149377 0.0981566 0 0.197074 0.146152 0.0954093 0 0.222031 0.141394 0.0940509 0 0.242096 0.13932 0.0930018 0 0.256364 0.141815 0.0905952 0 0.286539 0.14246 0.0931772 0 0.312766 0.14082 0.0970466 0 0.330832 0.140172 0.097683 0 0.347406 0.141205 0.0962758 0 0.357778 0.141204 0.0946331 0 0.371087 0.140816 0.0927793 0 0.38322 0.140286 0.0915804 0 0.405596 0.140146 0.0930417 0 0.425389 0.140088 0.0953206 0 0.443396 0.14119 0.0964638 0 0.470408 0.140337 0.0972868 0 0.481922 0.143322 0.0961127 0 0.498732 0.145466 0.0953288 0 0.534408 0.141652 0.094951 0 0.556462 0.142995 0.0935406 0 0.589307 0.141289 0.0923353 0 0.693996 0.145138 0.0931526 0 0.787543 0.150077 0.0804686 0 0.866559 0.13865 0.0839057 0 0.879386 0.13852 0.0683447 0 0.101124 0.159374 0.100413 0 0.101124 0.159374 0.100413 0 0.101124 0.159374 0.100413 0 0.110516 0.159998 0.0996395 0 0.130353 0.159614 0.0980483 0 0.147933 0.160389 0.0984206 0 0.16011 0.158453 0.0984651 0 0.173646 0.15643 0.0977643 0 0.195298 0.153542 0.0940367 0 0.219444 0.149387 0.0928463 0 0.242583 0.148658 0.0939094 0 0.257383 0.151074 0.091349 0 0.286628 0.152297 0.0934202 0 0.312046 0.151044 0.0967017 0 0.330106 0.149172 0.0975816 0 0.347449 0.148307 0.0975036 0 0.357824 0.148258 0.0958569 0 0.370914 0.148033 0.0940207 0 0.383349 0.147799 0.093012 0 0.40582 0.147552 0.0944785 0 0.426341 0.15063 0.0957756 0 0.44385 0.154024 0.0961058 0 0.469742 0.151073 0.0964181 0 0.483773 0.153121 0.0954071 0 0.497949 0.155885 0.0943929 0 0.531763 0.15222 0.0941154 0 0.558325 0.151851 0.0930796 0 0.586587 0.15177 0.0916384 0 0.692531 0.153756 0.0922604 0 0.798791 0.152932 0.088407 0 0.866829 0.146521 0.0833929 0 0.879722 0.146818 0.067641 0 0.101547 0.168954 0.100356 0 0.101547 0.168954 0.100356 0 0.101547 0.168954 0.100356 0 0.110412 0.169012 0.0994781 0 0.129775 0.168431 0.0982964 0 0.147145 0.166548 0.0978096 0 0.158293 0.164956 0.0983507 0 0.17246 0.162686 0.0974517 0 0.194218 0.160522 0.0933091 0 0.218666 0.159067 0.0920748 0 0.243013 0.157323 0.0947829 0 0.258185 0.158712 0.0926205 0 0.286394 0.15988 0.094535 0 0.31086 0.158517 0.0969165 0 0.329184 0.156549 0.0978277 0 0.347416 0.155175 0.0987214 0 0.357938 0.155248 0.0971318 0 0.371081 0.155726 0.0953402 0 0.383807 0.157264 0.0938877 0 0.407131 0.161046 0.0945016 0 0.427426 0.163941 0.0950141 0 0.444319 0.164722 0.0951993 0 0.468016 0.162425 0.0954692 0 0.485319 0.16278 0.0947982 0 0.497196 0.165858 0.0935495 0 0.528997 0.16319 0.093555 0 0.560064 0.160698 0.0933809 0 0.584898 0.161621 0.0917055 0 0.690483 0.162986 0.0910747 0 0.806032 0.158829 0.0946412 0 0.867399 0.15789 0.0826973 0 0.880306 0.158391 0.0669405 0 0.0999268 0.193931 0.0997985 0 0.0999268 0.193931 0.0997985 0 0.0999268 0.193931 0.0997985 0 0.107731 0.192894 0.0989016 0 0.123718 0.190544 0.0975409 0 0.143503 0.18741 0.0971813 0 0.154497 0.186846 0.0971723 0 0.169313 0.187338 0.0981989 0 0.195047 0.187207 0.0955507 0 0.216788 0.190624 0.0927186 0 0.240325 0.191026 0.0947176 0 0.261315 0.190276 0.0965284 0 0.287771 0.194053 0.0967648 0 0.311976 0.19745 0.0967718 0 0.32929 0.199141 0.0952631 0 0.348926 0.199543 0.0953678 0 0.361911 0.199737 0.0952486 0 0.375716 0.200043 0.0946022 0 0.386976 0.199828 0.0935491 0 0.407636 0.198563 0.0943459 0 0.426852 0.197379 0.0949694 0 0.444417 0.196759 0.0943884 0 0.460216 0.197216 0.0940764 0 0.489893 0.194072 0.09549 0 0.50336 0.198464 0.0947386 0 0.52415 0.200461 0.0940183 0 0.56522 0.195239 0.0948437 0 0.584066 0.198423 0.0923762 0 0.682783 0.200531 0.0881452 0 0.786092 0.202917 0.0822236 0 0.858738 0.199861 0.0760371 0 0.873742 0.200539 0.0605227 0 0.0978311 0.226811 0.0984107 0 0.0978311 0.226811 0.0984107 0 0.0978311 0.226811 0.0984106 0 0.106263 0.227665 0.0977056 0 0.123053 0.229247 0.0960451 0 0.143382 0.230064 0.0960211 0 0.157914 0.229316 0.0964769 0 0.171759 0.229533 0.0966532 0 0.196911 0.229753 0.0935438 0 0.219352 0.230321 0.0917876 0 0.240528 0.230801 0.0936335 0 0.260136 0.231601 0.0938141 0 0.291984 0.232759 0.0992031 0 0.315542 0.234585 0.100093 0 0.33099 0.235639 0.0973581 0 0.348294 0.234525 0.0958603 0 0.360227 0.233718 0.0944278 0 0.373333 0.233004 0.0926155 0 0.384316 0.232184 0.0919791 0 0.405502 0.230508 0.095047 0 0.425762 0.229909 0.0962794 0 0.445044 0.229778 0.0961648 0 0.462122 0.230535 0.0950346 0 0.485541 0.230142 0.0947836 0 0.509356 0.230505 0.0954892 0 0.522119 0.23486 0.0938041 0 0.55592 0.231878 0.0939663 0 0.586375 0.231001 0.0926092 0 0.680347 0.235421 0.0897046 0 0.788598 0.235992 0.0839658 0 0.864849 0.227276 0.0859105 0 0.880028 0.227541 0.0705594 0 0.0983843 0.245853 0.0981802 0 0.0983843 0.245853 0.0981802 0 0.0983844 0.245853 0.0981802 0 0.106873 0.245675 0.0974156 0 0.123063 0.245286 0.0957055 0 0.142394 0.244823 0.0955603 0 0.157419 0.244472 0.0964185 0 0.173263 0.244741 0.0962678 0 0.197783 0.246084 0.0937298 0 0.220186 0.247495 0.091731 0 0.241591 0.249393 0.0946483 0 0.260771 0.250481 0.0948468 0 0.292637 0.251106 0.0989259 0 0.316274 0.249855 0.10165 0 0.330976 0.249991 0.0989641 0 0.347178 0.249914 0.0961075 0 0.359429 0.249083 0.0946399 0 0.372839 0.248452 0.0927345 0 0.383785 0.248717 0.0909992 0 0.40404 0.247913 0.0936093 0 0.425347 0.246312 0.096445 0 0.445079 0.245834 0.0964486 0 0.463322 0.24629 0.0956902 0 0.483253 0.247204 0.0947812 0 0.511868 0.246143 0.0955118 0 0.524837 0.250374 0.0941449 0 0.551456 0.250185 0.0936216 0 0.589646 0.246798 0.0928535 0 0.681417 0.25295 0.0904038 0 0.79009 0.250719 0.0853231 0 0.857394 0.246073 0.0807448 0 0.875377 0.244522 0.0681536 0 0.0975686 0.259134 0.098987 0 0.0975686 0.259134 0.098987 0 0.0975686 0.259135 0.098987 0 0.106849 0.259173 0.0976115 0 0.122906 0.259908 0.0963818 0 0.142058 0.259983 0.0950464 0 0.157023 0.259842 0.09597 0 0.174115 0.26048 0.0965012 0 0.198266 0.262951 0.094292 0 0.221229 0.264225 0.0921194 0 0.241702 0.266075 0.0949282 0 0.261383 0.267121 0.0957801 0 0.292188 0.266282 0.0981153 0 0.315026 0.263991 0.100935 0 0.330924 0.262793 0.100037 0 0.346929 0.262666 0.0970826 0 0.358754 0.262892 0.0947947 0 0.37289 0.262809 0.0929359 0 0.384247 0.262864 0.0914184 0 0.402987 0.262845 0.0924723 0 0.423907 0.260884 0.0956169 0 0.445195 0.259928 0.0968575 0 0.464049 0.260211 0.0962867 0 0.482236 0.261775 0.0952855 0 0.51413 0.260085 0.0955684 0 0.527559 0.264153 0.0943543 0 0.550548 0.265193 0.0936636 0 0.592577 0.26091 0.0931372 0 0.681563 0.267954 0.0906592 0 0.791266 0.262266 0.0866549 0 0.85024 0.262997 0.0754995 0 0.868284 0.261753 0.0628626 0 0.0978816 0.281951 0.099945 0 0.0978816 0.281951 0.099945 0 0.0978816 0.281951 0.099945 0 0.107359 0.282321 0.0986623 0 0.12421 0.283361 0.096631 0 0.142748 0.284323 0.0957457 0 0.15702 0.28411 0.0956589 0 0.175036 0.284188 0.0967092 0 0.200295 0.287042 0.0938241 0 0.222666 0.288742 0.0920297 0 0.243592 0.290275 0.0946039 0 0.260764 0.288976 0.0956829 0 0.2912 0.286272 0.0977782 0 0.312584 0.285495 0.0990479 0 0.32954 0.284196 0.0993881 0 0.347645 0.283184 0.098956 0 0.359422 0.283415 0.0967089 0 0.37319 0.283647 0.0940111 0 0.38414 0.283989 0.0918864 0 0.403316 0.284853 0.0923846 0 0.422037 0.28512 0.0937546 0 0.444273 0.283741 0.0963851 0 0.464689 0.283512 0.0969246 0 0.484207 0.284905 0.0962245 0 0.514861 0.284288 0.0961522 0 0.532277 0.287835 0.0945616 0 0.549498 0.29097 0.0937948 0 0.591306 0.286622 0.0934057 0 0.681533 0.290985 0.0905928 0 0.791921 0.286144 0.0872768 0 0.83835 0.294817 0.0665825 0 0.856158 0.293657 0.0538057 0 0.09917 0.310003 0.0998942 0 0.09917 0.310003 0.0998942 0 0.09917 0.310003 0.0998942 0 0.108161 0.310302 0.0994736 0 0.125173 0.31007 0.0967961 0 0.143091 0.310921 0.0965776 0 0.156933 0.311176 0.0964938 0 0.175556 0.311089 0.096624 0 0.202623 0.31258 0.0925488 0 0.223867 0.312596 0.0912657 0 0.243347 0.311902 0.0937151 0 0.258426 0.311289 0.0946542 0 0.288832 0.308401 0.0976267 0 0.312989 0.308191 0.0988229 0 0.327523 0.308249 0.0975064 0 0.345948 0.306675 0.0978958 0 0.359452 0.305726 0.0978104 0 0.374315 0.305869 0.0961067 0 0.385871 0.3066 0.0939148 0 0.405028 0.308788 0.0933033 0 0.422187 0.310411 0.0936256 0 0.442481 0.310257 0.0945798 0 0.464672 0.308721 0.0966324 0 0.48622 0.308832 0.0972423 0 0.51274 0.309052 0.0971115 0 0.536167 0.310061 0.0954884 0 0.548815 0.314333 0.0935482 0 0.585561 0.311165 0.0931834 0 0.687191 0.310297 0.0908344 0 0.789869 0.309145 0.0864658 0 0.837554 0.31971 0.0650416 0 0.849361 0.320845 0.048446 0 0.0992828 0.327025 0.0994444 0 0.0992828 0.327025 0.0994444 0 0.0992828 0.327025 0.0994444 0 0.108507 0.327334 0.0990725 0 0.125548 0.328418 0.0974756 0 0.14419 0.32949 0.0965989 0 0.157512 0.330189 0.0971576 0 0.175381 0.33044 0.0972148 0 0.202702 0.328651 0.0925119 0 0.222773 0.328036 0.0907459 0 0.242531 0.327062 0.0926239 0 0.258259 0.326978 0.0941295 0 0.286783 0.325599 0.0970441 0 0.313856 0.324418 0.0992129 0 0.327357 0.325379 0.0973512 0 0.344735 0.325561 0.0966358 0 0.358398 0.324973 0.0966233 0 0.374449 0.324221 0.0965387 0 0.387511 0.323992 0.0958725 0 0.40677 0.326099 0.0951516 0 0.423212 0.327934 0.0946115 0 0.441913 0.328642 0.0943627 0 0.463335 0.327699 0.0955244 0 0.486999 0.325958 0.0976674 0 0.510517 0.326565 0.0973503 0 0.538956 0.325649 0.0962901 0 0.551844 0.330239 0.0934824 0 0.580818 0.329674 0.0926999 0 0.691455 0.325021 0.0913111 0 0.789001 0.328262 0.086503 0 0.841352 0.338392 0.0665105 0 0.853201 0.33965 0.0498227 0 0.100039 0.347542 0.0994331 0 0.100039 0.347542 0.0994331 0 0.100039 0.347542 0.0994331 0 0.10986 0.348024 0.0986762 0 0.12663 0.34937 0.0974709 0 0.145528 0.350456 0.0966165 0 0.157761 0.350053 0.0972995 0 0.173169 0.348799 0.0972111 0 0.201444 0.345649 0.0922081 0 0.221924 0.344571 0.0894739 0 0.242021 0.344558 0.0914085 0 0.258894 0.345019 0.093492 0 0.285371 0.345172 0.0966601 0 0.315166 0.344101 0.0997652 0 0.328808 0.345542 0.0982119 0 0.344697 0.346519 0.0967246 0 0.357341 0.346775 0.0955157 0 0.373152 0.346121 0.0953217 0 0.386653 0.345349 0.0952888 0 0.408619 0.344912 0.0973569 0 0.424654 0.346697 0.0959301 0 0.441966 0.347661 0.0948472 0 0.461714 0.347565 0.0943093 0 0.485612 0.345986 0.096009 0 0.509724 0.345558 0.0976542 0 0.542074 0.343218 0.0972489 0 0.555421 0.347646 0.0946456 0 0.578857 0.349491 0.0926186 0 0.696439 0.344959 0.0917934 0 0.784751 0.35189 0.0849246 0 0.844896 0.356778 0.0676683 0 0.856778 0.358025 0.05086 0 0.100807 0.363798 0.0994421 0 0.100807 0.363798 0.0994421 0 0.100807 0.363798 0.0994421 0 0.110634 0.364113 0.098688 0 0.127441 0.364791 0.0973122 0 0.144614 0.363533 0.0963144 0 0.15681 0.362706 0.0969442 0 0.17169 0.361609 0.0974073 0 0.200246 0.35828 0.0927622 0 0.222086 0.358155 0.0887433 0 0.242505 0.358926 0.0909222 0 0.259748 0.359611 0.0929877 0 0.285109 0.360884 0.0965583 0 0.315116 0.360132 0.099876 0 0.330153 0.361055 0.0986986 0 0.34505 0.361915 0.096963 0 0.35736 0.361771 0.0957593 0 0.371935 0.361493 0.0941442 0 0.385145 0.360498 0.0939877 0 0.409038 0.358533 0.0979757 0 0.425948 0.359693 0.0974041 0 0.442087 0.361263 0.0953655 0 0.461449 0.361131 0.09474 0 0.484565 0.360566 0.0949706 0 0.510196 0.359517 0.0975569 0 0.541511 0.357262 0.0977106 0 0.558122 0.360708 0.0955217 0 0.577729 0.364171 0.0923891 0 0.699652 0.36068 0.0920017 0 0.7787 0.367542 0.0819094 0 0.84758 0.370162 0.0682418 0 0.859294 0.370944 0.0514469 0 0.101487 0.380214 0.0993782 0 0.101487 0.380214 0.0993782 0 0.101487 0.380214 0.0993782 0 0.110429 0.379606 0.098841 0 0.126504 0.378434 0.0968829 0 0.143453 0.377487 0.0961089 0 0.155988 0.376647 0.096288 0 0.170549 0.376193 0.0974897 0 0.199381 0.37512 0.0933687 0 0.222503 0.37455 0.0885128 0 0.243816 0.3751 0.0905413 0 0.260747 0.376505 0.0923286 0 0.285069 0.377883 0.0959055 0 0.31419 0.376701 0.099665 0 0.330922 0.376423 0.0987061 0 0.345257 0.376843 0.0972433 0 0.357122 0.376774 0.0961231 0 0.371604 0.376487 0.0943891 0 0.383716 0.376247 0.0930486 0 0.40781 0.374276 0.0967646 0 0.427313 0.37372 0.0991554 0 0.443152 0.375734 0.0970994 0 0.461444 0.376696 0.095308 0 0.484162 0.376625 0.0948716 0 0.510305 0.375937 0.0964572 0 0.539572 0.374014 0.0978749 0 0.560959 0.376023 0.0962295 0 0.577547 0.381475 0.0929164 0 0.703073 0.377748 0.0919591 0 0.773635 0.384766 0.0783777 0 0.850301 0.384998 0.0699031 0 0.861863 0.38543 0.0531644 0 0.100861 0.391879 0.0988659 0 0.100861 0.391879 0.0988659 0 0.100861 0.391879 0.0988659 0 0.10949 0.391529 0.0987578 0 0.125976 0.390591 0.0966166 0 0.142861 0.389991 0.0959767 0 0.15538 0.389491 0.0960822 0 0.170828 0.389755 0.0970938 0 0.198683 0.389329 0.0937838 0 0.222355 0.388397 0.0888197 0 0.244473 0.388505 0.0898921 0 0.261229 0.38936 0.0917071 0 0.2846 0.390269 0.0950802 0 0.313282 0.388972 0.0991101 0 0.331376 0.3883 0.0987839 0 0.345417 0.388883 0.097303 0 0.356956 0.388769 0.0962266 0 0.371382 0.388617 0.0947697 0 0.383564 0.388553 0.0933377 0 0.406704 0.387737 0.0957707 0 0.427557 0.386545 0.099151 0 0.444401 0.387697 0.098432 0 0.461836 0.389164 0.0960327 0 0.484096 0.389388 0.0951947 0 0.510344 0.389519 0.0955549 0 0.537583 0.388797 0.097433 0 0.563417 0.389403 0.0966535 0 0.577937 0.395788 0.0932337 0 0.70503 0.389815 0.0914305 0 0.770004 0.398069 0.0759865 0 0.852163 0.395368 0.0715303 0 0.864627 0.398682 0.0546634 0 0.100364 0.406908 0.0981864 0 0.100364 0.406908 0.0981864 0 0.100364 0.406908 0.0981865 0 0.10908 0.40666 0.0981001 0 0.125268 0.40601 0.0965313 0 0.142876 0.406051 0.0956782 0 0.155347 0.40617 0.0960103 0 0.171216 0.406001 0.0965343 0 0.197581 0.405273 0.0941918 0 0.22171 0.403858 0.0898212 0 0.244883 0.403054 0.0891725 0 0.261566 0.404001 0.090998 0 0.285019 0.404765 0.0942865 0 0.312273 0.404245 0.0984029 0 0.331434 0.403835 0.0986628 0 0.346265 0.404639 0.0973884 0 0.356866 0.405107 0.096064 0 0.371337 0.404899 0.0950866 0 0.383502 0.404756 0.0936613 0 0.40561 0.40445 0.0949708 0 0.426992 0.403213 0.0981437 0 0.445838 0.402795 0.0999024 0 0.462986 0.405074 0.0975603 0 0.484467 0.407224 0.095574 0 0.510672 0.408461 0.0951063 0 0.534328 0.409141 0.0957464 0 0.566586 0.406573 0.0971149 0 0.581461 0.412053 0.0937701 0 0.69961 0.407704 0.0899935 0 0.76667 0.412972 0.0754194 0 0.854989 0.410224 0.0746054 0 0.864765 0.406808 0.0585353 0 0.099602 0.422485 0.097844 0 0.099602 0.422485 0.097844 0 0.099602 0.422485 0.097844 0 0.108762 0.422174 0.0974696 0 0.12502 0.422055 0.0964917 0 0.142861 0.421598 0.0953641 0 0.154867 0.421367 0.09581 0 0.170743 0.420818 0.0961943 0 0.19682 0.420966 0.0946052 0 0.221378 0.419831 0.0905205 0 0.244149 0.419461 0.0899474 0 0.263096 0.419972 0.0904377 0 0.285744 0.421473 0.0932791 0 0.312106 0.421628 0.0976184 0 0.331314 0.421224 0.0981217 0 0.347288 0.42175 0.0973557 0 0.357256 0.422495 0.0959818 0 0.370921 0.422704 0.0946604 0 0.383342 0.422705 0.0936764 0 0.405574 0.422982 0.0950719 0 0.426428 0.42347 0.0965969 0 0.446475 0.423402 0.0987993 0 0.464888 0.424235 0.0991693 0 0.485809 0.426765 0.0967535 0 0.511487 0.428102 0.095193 0 0.53475 0.428744 0.0937871 0 0.568428 0.424797 0.095817 0 0.585268 0.429484 0.0935846 0 0.693524 0.427299 0.0891381 0 0.761148 0.422645 0.0777703 0 0.854734 0.417928 0.0791784 0 0.868474 0.425094 0.0622523 0 0.0988047 0.439648 0.0976267 0 0.0988047 0.439648 0.0976267 0 0.0988047 0.439648 0.0976268 0 0.108364 0.439327 0.0970202 0 0.124746 0.439243 0.0960184 0 0.142528 0.438965 0.0949511 0 0.154626 0.438969 0.0952291 0 0.170519 0.439026 0.0959163 0 0.197131 0.440034 0.0942914 0 0.220462 0.439926 0.0909315 0 0.24372 0.4396 0.0914816 0 0.264547 0.439426 0.0902014 0 0.286626 0.44098 0.0922593 0 0.311954 0.441621 0.0965998 0 0.331016 0.441832 0.0971866 0 0.349124 0.442067 0.0968278 0 0.358817 0.443341 0.0958488 0 0.371385 0.444529 0.0943466 0 0.383499 0.445086 0.0932405 0 0.406195 0.445554 0.0951415 0 0.427232 0.446443 0.0964121 0 0.447128 0.446581 0.0971668 0 0.465313 0.445968 0.0980235 0 0.486812 0.445704 0.0975897 0 0.511705 0.446876 0.0947688 0 0.535809 0.447183 0.0931979 0 0.563576 0.445579 0.0933651 0 0.588804 0.446556 0.0942092 0 0.68652 0.438811 0.0905202 0 0.75542 0.430859 0.080679 0 0.863018 0.448186 0.0813098 0 0.874939 0.44994 0.0638508 0 0.098184 0.456704 0.0975075 0 0.098184 0.456704 0.0975075 0 0.098184 0.456704 0.0975075 0 0.107886 0.456404 0.096647 0 0.124901 0.456458 0.0952331 0 0.142642 0.457208 0.0947145 0 0.155107 0.457583 0.0946602 0 0.170928 0.458218 0.0955713 0 0.198166 0.459399 0.0934637 0 0.219766 0.459986 0.0909524 0 0.243605 0.459504 0.0921291 0 0.264757 0.459372 0.0905268 0 0.28695 0.46155 0.0920784 0 0.311752 0.463028 0.09539 0 0.3314 0.463732 0.0962228 0 0.350002 0.464409 0.0960746 0 0.361187 0.465465 0.0951016 0 0.372865 0.466668 0.0938876 0 0.383797 0.46717 0.0922963 0 0.405967 0.466507 0.0940296 0 0.426868 0.465524 0.0957869 0 0.446739 0.464703 0.0962279 0 0.464863 0.464132 0.0962839 0 0.486503 0.462607 0.0976145 0 0.512366 0.463015 0.0964205 0 0.536975 0.464631 0.0939761 0 0.559429 0.463203 0.0930521 0 0.589942 0.458674 0.0952647 0 0.68181 0.445927 0.0930077 0 0.757524 0.462742 0.0801172 0 0.866432 0.463365 0.0809838 0 0.876329 0.459325 0.0632858 0 0.0978017 0.47791 0.0981103 0 0.0978017 0.47791 0.0981103 0 0.0978018 0.47791 0.0981103 0 0.107844 0.478033 0.0970572 0 0.125823 0.478375 0.0945126 0 0.143368 0.479465 0.0941758 0 0.155622 0.479903 0.0941266 0 0.17175 0.480469 0.0947573 0 0.199386 0.482087 0.0924164 0 0.219955 0.483894 0.0903772 0 0.244409 0.483988 0.0922409 0 0.264493 0.485012 0.0920021 0 0.288864 0.486503 0.0910489 0 0.312886 0.486956 0.0947666 0 0.331887 0.486326 0.0948389 0 0.349465 0.485779 0.0946184 0 0.361957 0.485278 0.0940296 0 0.374047 0.485727 0.0929552 0 0.3839 0.486175 0.092049 0 0.404619 0.485374 0.0934199 0 0.425472 0.484364 0.0954196 0 0.44639 0.48351 0.0965166 0 0.464398 0.481333 0.0966446 0 0.484347 0.478983 0.0978432 0 0.512383 0.474785 0.100864 0 0.53569 0.471188 0.0992821 0 0.555664 0.468761 0.097959 0 0.589036 0.465862 0.0976872 0 0.682533 0.473026 0.092213 0 0.760366 0.500898 0.0745014 0 0.86417 0.464421 0.0822389 0 0.873962 0.460313 0.065328 0 0.0983344 0.505465 0.0986354 0 0.0983344 0.505465 0.0986354 0 0.0983344 0.505465 0.0986354 0 0.108442 0.505861 0.097703 0 0.126769 0.506554 0.0945226 0 0.145121 0.507568 0.0928932 0 0.156662 0.508507 0.0934193 0 0.172992 0.50916 0.0936741 0 0.200531 0.510338 0.0917988 0 0.220916 0.510609 0.0895502 0 0.243697 0.509857 0.091374 0 0.26472 0.509273 0.0929038 0 0.290779 0.508121 0.0905013 0 0.312923 0.508538 0.0946033 0 0.330334 0.506689 0.095381 0 0.347652 0.503645 0.0946674 0 0.360051 0.501408 0.0945088 0 0.373475 0.49936 0.0941673 0 0.382699 0.498366 0.0936663 0 0.40182 0.496128 0.0957046 0 0.421814 0.493208 0.098374 0 0.443024 0.489876 0.100659 0 0.462222 0.488262 0.101575 0 0.481626 0.49018 0.100855 0 0.509333 0.489612 0.102618 0 0.536354 0.488537 0.103017 0 0.557131 0.49106 0.0990226 0 0.593048 0.491593 0.0967716 0 0.689693 0.521868 0.0870091 0 0.756796 0.502571 0.0776194 0 0.859641 0.469951 0.0841646 0 0.870449 0.464072 0.0681886 0 0.0989936 0.535348 0.0993393 0 0.0989936 0.535348 0.0993393 0 0.0989936 0.535348 0.0993393 0 0.108916 0.535078 0.0985587 0 0.127021 0.534569 0.0953789 0 0.145687 0.534085 0.0926116 0 0.157515 0.533984 0.0923239 0 0.172824 0.533955 0.0931178 0 0.199973 0.53125 0.0917422 0 0.220206 0.527656 0.0898592 0 0.240775 0.524816 0.0928717 0 0.262711 0.52131 0.0954691 0 0.286679 0.517674 0.0952696 0 0.310491 0.515019 0.0984594 0 0.327168 0.514804 0.099926 0 0.344517 0.514815 0.0986051 0 0.356941 0.514461 0.0970572 0 0.372327 0.513994 0.0958271 0 0.382407 0.514745 0.094925 0 0.400796 0.516248 0.0958934 0 0.421272 0.516723 0.0981924 0 0.442215 0.516753 0.100125 0 0.463259 0.517615 0.100853 0 0.484087 0.521851 0.0998911 0 0.510247 0.531746 0.0977804 0 0.542295 0.540093 0.098393 0 0.569929 0.551888 0.095513 0 0.595319 0.552599 0.0898797 0 0.688822 0.527301 0.0910708 0 0.755659 0.503116 0.0799421 0 0.855466 0.477907 0.0860882 0 0.866199 0.471885 0.0700581 0 0.0978308 0.553019 0.100158 0 0.0978308 0.553019 0.100158 0 0.0978308 0.553019 0.100158 0 0.106859 0.551802 0.101146 0 0.124489 0.548932 0.0989897 0 0.142677 0.545658 0.0969399 0 0.154648 0.54366 0.0964051 0 0.169592 0.541434 0.0970225 0 0.197341 0.539652 0.0947396 0 0.218223 0.540526 0.0919465 0 0.239056 0.541596 0.0941205 0 0.26175 0.541646 0.096572 0 0.28546 0.54266 0.096938 0 0.311519 0.542023 0.0967231 0 0.328529 0.544332 0.0992058 0 0.344753 0.54833 0.0975654 0 0.357244 0.550529 0.0955258 0 0.372822 0.55305 0.0931428 0 0.38666 0.554927 0.0913067 0 0.405476 0.56102 0.0913813 0 0.426737 0.571536 0.0918624 0 0.449753 0.580886 0.0926857 0 0.471759 0.584618 0.0939265 0 0.493727 0.580541 0.0956853 0 0.515185 0.575505 0.0958804 0 0.540228 0.569286 0.0958607 0 0.56639 0.56264 0.0976603 0 0.59104 0.5568 0.0964208 0 0.686974 0.528336 0.0980057 0 0.75495 0.50357 0.0836295 0 0.851097 0.485944 0.0878515 0 0.862713 0.481497 0.0724066 0 0.0959879 0.565816 0.101873 0 0.0959879 0.565816 0.101873 0 0.0959879 0.565816 0.101873 0 0.105285 0.566013 0.102591 0 0.122701 0.566874 0.101286 0 0.141584 0.567441 0.0989336 0 0.153895 0.567662 0.09802 0 0.169813 0.567848 0.0971438 0 0.198928 0.57199 0.0930935 0 0.22054 0.577979 0.0893021 0 0.24249 0.582231 0.0899092 0 0.262946 0.585072 0.0920868 0 0.289585 0.587978 0.0928246 0 0.314807 0.590203 0.0922064 0 0.335546 0.598645 0.0914097 0 0.350434 0.599361 0.0930855 0 0.361113 0.599094 0.0923427 0 0.376275 0.59789 0.0914235 0 0.389672 0.596796 0.0905843 0 0.411022 0.596379 0.0913582 0 0.428544 0.597233 0.0925421 0 0.448283 0.594433 0.0946139 0 0.467683 0.589562 0.0966223 0 0.489 0.584212 0.0989215 0 0.511078 0.578944 0.0999495 0 0.535392 0.572956 0.10027 0 0.560569 0.566655 0.100649 0 0.586673 0.560083 0.102185 0 0.686414 0.551287 0.0930022 0 0.759086 0.51685 0.0831614 0 0.864595 0.545981 0.0873337 0 0.885336 0.567807 0.0711879 0 0.0968953 0.653983 0.100232 0 0.0968953 0.653983 0.100232 0 0.0968953 0.653983 0.100232 0 0.106277 0.652754 0.101292 0 0.123182 0.650185 0.0999888 0 0.141213 0.647404 0.099108 0 0.152521 0.647149 0.0995638 0 0.167875 0.650955 0.0993624 0 0.199122 0.660827 0.0963704 0 0.221265 0.664257 0.0907485 0 0.241694 0.662532 0.0900001 0 0.261044 0.659445 0.0909737 0 0.285681 0.655272 0.0921318 0 0.306844 0.649866 0.094978 0 0.32344 0.644641 0.0950127 0 0.340773 0.639274 0.0932132 0 0.350492 0.636287 0.0912712 0 0.359613 0.633711 0.0915617 0 0.37061 0.638038 0.0907695 0 0.395233 0.647778 0.0935979 0 0.420231 0.656226 0.0961857 0 0.440813 0.665993 0.0966851 0 0.461921 0.672536 0.0966707 0 0.486946 0.6744 0.0970965 0 0.515561 0.673098 0.0991242 0 0.54026 0.671866 0.10105 0 0.561864 0.668754 0.100788 0 0.587473 0.663024 0.0989934 0 0.663209 0.646414 0.0869708 0 0.767333 0.619719 0.0843026 0 0.864801 0.655307 0.0845379 0 0.877934 0.654088 0.0695821 0 0.0893983 0.734839 0.102774 0 0.0893983 0.734839 0.102774 0 0.0893983 0.734839 0.102774 0 0.0985004 0.731333 0.103799 0 0.113274 0.725303 0.103472 0 0.131024 0.718217 0.1 0 0.141171 0.714188 0.0999367 0 0.159034 0.7257 0.100228 0 0.193086 0.746604 0.0981914 0 0.217178 0.753855 0.0935425 0 0.239081 0.758784 0.0939948 0 0.257714 0.753965 0.094533 0 0.28327 0.747324 0.0954813 0 0.302634 0.742478 0.0949735 0 0.322715 0.738412 0.0938901 0 0.342712 0.734468 0.0946184 0 0.352525 0.732481 0.0930808 0 0.366633 0.728984 0.0907804 0 0.376634 0.726565 0.0895965 0 0.393401 0.722181 0.0892071 0 0.406097 0.718744 0.0912443 0 0.423053 0.714188 0.0916056 0 0.441135 0.709351 0.090979 0 0.456848 0.704828 0.089852 0 0.47673 0.698772 0.0889928 0 0.500144 0.692049 0.0878713 0 0.53032 0.686098 0.0902255 0 0.558941 0.679479 0.0930578 0 0.696629 0.779709 0.0977327 0 0.776496 0.766073 0.0873343 0 0.845423 0.75533 0.0802465 0 0.873288 0.752802 0.0717809 0 0.0937415 0.79956 0.0912765 0 0.0937415 0.79956 0.0912765 0 0.0937415 0.79956 0.0912765 0 0.101115 0.799508 0.0940176 0 0.114161 0.799161 0.0948073 0 0.131555 0.796592 0.0921479 0 0.142902 0.794769 0.0912458 0 0.156413 0.792602 0.0898927 0 0.184485 0.797255 0.0866871 0 0.208269 0.802935 0.0843912 0 0.23058 0.810504 0.0873567 0 0.261097 0.846072 0.0928027 0 0.283955 0.83568 0.0935136 0 0.298616 0.824087 0.093739 0 0.310019 0.816056 0.0917981 0 0.325697 0.810473 0.0918371 0 0.336888 0.806305 0.0912853 0 0.350843 0.799362 0.0895887 0 0.358393 0.792944 0.0878978 0 0.370703 0.77948 0.0854489 0 0.409382 0.839205 0.0911969 0 0.433739 0.849842 0.0910042 0 0.453499 0.849091 0.0944458 0 0.479745 0.846804 0.0961278 0 0.504222 0.844544 0.095687 0 0.529733 0.842055 0.0951518 0 0.556969 0.839645 0.0954225 0 0.585488 0.840026 0.0954858 0 0.674711 0.82465 0.0896134 0 0.7858 0.849046 0.0883536 0 0.864696 0.832058 0.0859646 0 0.878947 0.845957 0.0771621 0 0.0979572 0.888594 0.0914175 0 0.0979572 0.888594 0.0914175 0 0.0979572 0.888594 0.0914175 0 0.115913 0.906694 0.0920357 0 0.136834 0.921634 0.0931639 0 0.152562 0.924822 0.096453 0 0.164585 0.926377 0.0973758 0 0.179623 0.926718 0.0967624 0 0.202158 0.920347 0.0925577 0 0.219846 0.915557 0.0882495 0 0.237573 0.910126 0.0883253 0 0.252563 0.905223 0.0888164 0 0.274841 0.897868 0.0896981 0 0.294858 0.89115 0.0907986 0 0.310351 0.889272 0.0900752 0 0.328239 0.88789 0.0903192 0 0.344221 0.885766 0.0910423 0 0.362067 0.885272 0.0913747 0 0.375366 0.88527 0.0903281 0 0.397259 0.891667 0.0928421 0 0.417617 0.89696 0.0948361 0 0.438901 0.901652 0.0940166 0 0.459784 0.90609 0.0936637 0 0.482263 0.907372 0.0947804 0 0.510011 0.907095 0.0956625 0 0.532505 0.909032 0.0948282 0 0.555201 0.904952 0.094243 0 0.58058 0.897792 0.0932512 0 0.683986 0.892815 0.0909569 0 0.777518 0.904451 0.090325 0 0.867021 0.877925 0.0894798 0 0.888138 0.880173 0.080336 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977242 0.096852 0 0.156834 0.0962995 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.090432 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932198 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 1463.05 0.103108 0.100348 0.100815 2299.78 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977242 0.096852 0 0.156834 0.0962995 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.090432 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932198 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 2300.25 0.103108 0.100348 0.100815 34508.3 0.112024 0.0992947 0.0989183 12149.7 0.124309 0.099395 0.0983103 0 0.143447 0.0977242 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.090432 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911256 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932198 0 0.601666 0.0947322 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939605 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 12175.9 0.11121 0.105589 0.0990744 16991.7 0.124489 0.105234 0.0981091 0 0.14285 0.10424 0.0969901 0 0.156873 0.104849 0.0977054 0 0.172591 0.105764 0.0995333 0 0.200586 0.110308 0.0972666 0 0.22703 0.113814 0.092632 0 0.242711 0.11288 0.0906824 0 0.256924 0.111623 0.0894573 0 0.2906 0.105517 0.096397 0 0.314418 0.104635 0.0987714 0 0.329628 0.105126 0.0970934 0 0.344979 0.105535 0.0951455 0 0.356248 0.106105 0.0930922 0 0.370591 0.106312 0.0910463 0 0.383753 0.105931 0.0901219 0 0.405869 0.105398 0.0920197 0 0.423186 0.106096 0.0931316 0 0.446707 0.104519 0.0939249 0 0.464308 0.106078 0.0941193 0 0.475953 0.111412 0.0938088 0 0.502583 0.112999 0.0944078 0 0.539177 0.107704 0.0947287 0 0.55734 0.108891 0.093505 0 0.600319 0.101628 0.0942467 0 0.700562 0.0979163 0.099486 0 0.795915 0.113711 0.083281 0 0.865822 0.10228 0.0868203 0 0.878062 0.102212 0.0709788 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.108522 0.119627 0.09915 0 0.12619 0.12054 0.0976438 0 0.144819 0.125006 0.0976981 0 0.159277 0.127251 0.0974273 0 0.175061 0.129844 0.0986945 0 0.2014 0.1303 0.0977466 0 0.225375 0.127091 0.0938513 0 0.242283 0.125972 0.0913866 0 0.255695 0.125054 0.0899477 0 0.288169 0.122361 0.0948259 0 0.31427 0.120053 0.0990754 0 0.330137 0.120595 0.0975185 0 0.3461 0.121594 0.0956857 0 0.356774 0.12227 0.0936165 0 0.370853 0.122568 0.0914054 0 0.383359 0.122659 0.0898949 0 0.405651 0.122365 0.0916249 0 0.42453 0.123494 0.0934267 0 0.445279 0.123785 0.0943483 0 0.467331 0.122799 0.0952489 0 0.47912 0.126927 0.095391 0 0.500791 0.127006 0.0955409 0 0.54063 0.120295 0.0960234 0 0.555484 0.121926 0.0944484 0 0.595948 0.116539 0.0950904 0 0.698604 0.120355 0.0967409 0 0.771118 0.138753 0.0681621 0 0.866145 0.119529 0.0855344 0 0.87886 0.119323 0.069961 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.109384 0.14584 0.0997291 0 0.129898 0.147533 0.0974849 0 0.147524 0.150328 0.0987069 0 0.161533 0.15078 0.0983779 0 0.174942 0.149378 0.0981566 0 0.197074 0.146152 0.0954093 0 0.222031 0.141394 0.0940509 0 0.242096 0.13932 0.0930018 0 0.256364 0.141815 0.0905952 0 0.286539 0.14246 0.0931772 0 0.312766 0.14082 0.0970466 0 0.330832 0.140172 0.097683 0 0.347406 0.141205 0.0962758 0 0.357778 0.141204 0.0946331 0 0.371087 0.140816 0.0927793 0 0.38322 0.140286 0.0915804 0 0.405596 0.140146 0.0930417 0 0.425389 0.140088 0.0953206 0 0.443396 0.14119 0.0964638 0 0.470408 0.140337 0.0972868 0 0.481922 0.143322 0.0961127 0 0.498732 0.145466 0.0953288 0 0.534408 0.141652 0.094951 0 0.556462 0.142995 0.0935406 0 0.589307 0.141289 0.0923355 0 0.693996 0.145138 0.0931526 0 0.787543 0.150077 0.0804686 0 0.86656 0.13865 0.0839058 0 0.879386 0.13852 0.0683447 0 0.101124 0.159374 0.100413 0 0.101124 0.159374 0.100413 0 0.101124 0.159374 0.100413 0 0.110516 0.159998 0.0996395 0 0.130353 0.159614 0.0980483 0 0.147933 0.160389 0.0984206 0 0.16011 0.158453 0.0984651 0 0.173646 0.15643 0.0977643 0 0.195298 0.153542 0.0940367 0 0.219444 0.149387 0.0928463 0 0.242583 0.148658 0.0939094 0 0.257383 0.151074 0.091349 0 0.286628 0.152297 0.0934202 0 0.312046 0.151044 0.0967017 0 0.330106 0.149172 0.0975816 0 0.347449 0.148307 0.0975036 0 0.357824 0.148258 0.0958569 0 0.370914 0.148033 0.0940207 0 0.383349 0.147799 0.093012 0 0.40582 0.147552 0.0944785 0 0.426341 0.15063 0.0957756 0 0.44385 0.154024 0.0961058 0 0.469742 0.151073 0.0964181 0 0.483773 0.153121 0.0954071 0 0.497949 0.155885 0.0943929 0 0.531763 0.15222 0.0941155 0 0.558325 0.151851 0.0930796 0 0.586587 0.15177 0.0916384 0 0.692531 0.153756 0.0922604 0 0.798791 0.152933 0.0884067 0 0.866829 0.146521 0.0833929 0 0.879722 0.146818 0.067641 0 0.101547 0.168954 0.100356 0 0.101547 0.168954 0.100356 0 0.101547 0.168954 0.100356 0 0.110412 0.169012 0.0994782 0 0.129775 0.168431 0.0982965 0 0.147145 0.166548 0.0978096 0 0.158293 0.164956 0.0983507 0 0.17246 0.162686 0.0974517 0 0.194218 0.160522 0.0933091 0 0.218666 0.159067 0.0920748 0 0.243013 0.157323 0.0947829 0 0.258185 0.158712 0.0926205 0 0.286394 0.15988 0.094535 0 0.31086 0.158517 0.0969165 0 0.329184 0.156549 0.0978277 0 0.347416 0.155175 0.0987214 0 0.357938 0.155248 0.0971318 0 0.371081 0.155726 0.0953402 0 0.383807 0.157264 0.0938877 0 0.407131 0.161046 0.0945016 0 0.427426 0.163941 0.0950141 0 0.444319 0.164722 0.0951993 0 0.468016 0.162425 0.0954692 0 0.485319 0.16278 0.0947982 0 0.497196 0.165858 0.0935495 0 0.528997 0.16319 0.0935551 0 0.560064 0.160698 0.0933809 0 0.584898 0.161621 0.0917055 0 0.690483 0.162986 0.0910746 0 0.806032 0.158829 0.0946411 0 0.867399 0.15789 0.0826973 0 0.880306 0.158391 0.0669405 0 0.0999267 0.193931 0.0997985 0 0.0999267 0.193931 0.0997985 0 0.0999268 0.193931 0.0997985 0 0.107731 0.192894 0.0989016 0 0.123718 0.190544 0.0975409 0 0.143503 0.18741 0.0971813 0 0.154497 0.186846 0.0971723 0 0.169313 0.187338 0.0981989 0 0.195047 0.187207 0.0955507 0 0.216788 0.190624 0.0927186 0 0.240325 0.191026 0.0947176 0 0.261315 0.190276 0.0965284 0 0.287771 0.194053 0.0967648 0 0.311976 0.19745 0.0967718 0 0.32929 0.199141 0.0952631 0 0.348926 0.199543 0.0953678 0 0.361911 0.199737 0.0952486 0 0.375716 0.200043 0.0946022 0 0.386976 0.199828 0.0935491 0 0.407636 0.198563 0.0943459 0 0.426852 0.197379 0.0949694 0 0.444417 0.196759 0.0943884 0 0.460216 0.197216 0.0940764 0 0.489893 0.194072 0.09549 0 0.50336 0.198464 0.0947386 0 0.52415 0.200461 0.0940183 0 0.56522 0.195239 0.0948437 0 0.584066 0.198423 0.0923762 0 0.682782 0.200531 0.0881451 0 0.786092 0.202917 0.0822236 0 0.858738 0.199861 0.0760372 0 0.873742 0.200539 0.0605227 0 0.0978311 0.226811 0.0984106 0 0.0978311 0.226811 0.0984106 0 0.0978311 0.226811 0.0984106 0 0.106263 0.227665 0.0977056 0 0.123053 0.229247 0.0960451 0 0.143382 0.230064 0.0960211 0 0.157914 0.229316 0.0964769 0 0.171759 0.229533 0.0966532 0 0.196911 0.229753 0.0935438 0 0.219352 0.230321 0.0917876 0 0.240528 0.230801 0.0936335 0 0.260136 0.231601 0.0938141 0 0.291984 0.232759 0.0992031 0 0.315542 0.234585 0.100093 0 0.33099 0.235639 0.0973581 0 0.348294 0.234525 0.0958603 0 0.360227 0.233718 0.0944278 0 0.373333 0.233004 0.0926155 0 0.384316 0.232184 0.0919791 0 0.405502 0.230508 0.095047 0 0.425762 0.229909 0.0962794 0 0.445044 0.229778 0.0961648 0 0.462122 0.230535 0.0950346 0 0.485541 0.230142 0.0947836 0 0.509356 0.230505 0.0954893 0 0.522119 0.23486 0.0938041 0 0.55592 0.231878 0.0939663 0 0.586375 0.231001 0.0926092 0 0.680347 0.235421 0.0897046 0 0.788598 0.235992 0.0839658 0 0.864849 0.227276 0.0859105 0 0.880028 0.227541 0.0705594 0 0.0983844 0.245853 0.0981802 0 0.0983844 0.245853 0.0981802 0 0.0983844 0.245853 0.0981802 0 0.106873 0.245675 0.0974156 0 0.123064 0.245286 0.0957055 0 0.142394 0.244823 0.0955603 0 0.157419 0.244472 0.0964185 0 0.173263 0.244741 0.0962678 0 0.197783 0.246084 0.0937298 0 0.220186 0.247495 0.091731 0 0.241591 0.249393 0.0946483 0 0.260771 0.250481 0.0948468 0 0.292637 0.251106 0.0989259 0 0.316274 0.249855 0.10165 0 0.330976 0.249991 0.0989641 0 0.347178 0.249914 0.0961075 0 0.359429 0.249083 0.0946399 0 0.372839 0.248452 0.0927345 0 0.383785 0.248717 0.0909992 0 0.40404 0.247913 0.0936093 0 0.425347 0.246312 0.096445 0 0.445079 0.245834 0.0964487 0 0.463322 0.24629 0.0956902 0 0.483253 0.247204 0.0947812 0 0.511868 0.246143 0.0955118 0 0.524837 0.250374 0.0941449 0 0.551456 0.250185 0.0936216 0 0.589646 0.246798 0.0928535 0 0.681417 0.25295 0.0904038 0 0.79009 0.250719 0.0853231 0 0.857394 0.246073 0.0807448 0 0.875378 0.244522 0.0681537 0 0.0975686 0.259134 0.098987 0 0.0975686 0.259134 0.098987 0 0.0975686 0.259134 0.098987 0 0.106849 0.259173 0.0976115 0 0.122906 0.259907 0.0963818 0 0.142057 0.259983 0.0950464 0 0.157023 0.259842 0.09597 0 0.174115 0.26048 0.0965012 0 0.198266 0.262951 0.094292 0 0.221229 0.264225 0.0921194 0 0.241702 0.266075 0.0949282 0 0.261383 0.267121 0.0957801 0 0.292188 0.266282 0.0981153 0 0.315026 0.263991 0.100935 0 0.330924 0.262793 0.100037 0 0.346929 0.262666 0.0970826 0 0.358754 0.262892 0.0947947 0 0.37289 0.262809 0.0929359 0 0.384247 0.262864 0.0914184 0 0.402987 0.262845 0.0924723 0 0.423907 0.260884 0.0956169 0 0.445195 0.259928 0.0968575 0 0.464049 0.260211 0.0962868 0 0.482236 0.261775 0.0952855 0 0.51413 0.260085 0.0955684 0 0.52756 0.264153 0.0943544 0 0.550548 0.265193 0.0936637 0 0.592577 0.26091 0.0931372 0 0.681563 0.267954 0.0906592 0 0.791266 0.262266 0.0866549 0 0.85024 0.262997 0.0754995 0 0.868284 0.261753 0.0628626 0 0.0978816 0.281951 0.099945 0 0.0978816 0.281951 0.099945 0 0.0978816 0.281951 0.099945 0 0.107359 0.282321 0.0986623 0 0.12421 0.283361 0.096631 0 0.142748 0.284323 0.0957457 0 0.15702 0.28411 0.0956589 0 0.175036 0.284188 0.0967092 0 0.200295 0.287042 0.0938241 0 0.222666 0.288742 0.0920297 0 0.243592 0.290275 0.094604 0 0.260764 0.288976 0.0956829 0 0.2912 0.286272 0.0977782 0 0.312584 0.285495 0.0990479 0 0.32954 0.284196 0.0993881 0 0.347645 0.283184 0.098956 0 0.359422 0.283415 0.0967089 0 0.37319 0.283647 0.0940111 0 0.38414 0.283989 0.0918864 0 0.403316 0.284853 0.0923846 0 0.422037 0.28512 0.0937546 0 0.444273 0.283741 0.0963851 0 0.464689 0.283512 0.0969246 0 0.484207 0.284905 0.0962245 0 0.514861 0.284288 0.0961522 0 0.532277 0.287835 0.0945616 0 0.549498 0.29097 0.0937949 0 0.591306 0.286623 0.0934058 0 0.681533 0.290985 0.0905929 0 0.791921 0.286144 0.0872768 0 0.83835 0.294817 0.0665825 0 0.856157 0.293657 0.0538057 0 0.09917 0.310003 0.0998942 0 0.09917 0.310003 0.0998942 0 0.09917 0.310003 0.0998942 0 0.108161 0.310302 0.0994736 0 0.125173 0.31007 0.0967961 0 0.143091 0.310921 0.0965776 0 0.156933 0.311176 0.0964938 0 0.175556 0.311089 0.096624 0 0.202623 0.31258 0.0925489 0 0.223867 0.312596 0.0912658 0 0.243347 0.311902 0.0937151 0 0.258426 0.311289 0.0946542 0 0.288832 0.308401 0.0976267 0 0.312989 0.308191 0.0988229 0 0.327523 0.308249 0.0975064 0 0.345948 0.306675 0.0978958 0 0.359452 0.305726 0.0978104 0 0.374315 0.305869 0.0961067 0 0.385871 0.3066 0.0939148 0 0.405028 0.308788 0.0933033 0 0.422187 0.310411 0.0936256 0 0.44248 0.310257 0.0945798 0 0.464672 0.308721 0.0966324 0 0.48622 0.308832 0.0972423 0 0.51274 0.309052 0.0971115 0 0.536167 0.310061 0.0954884 0 0.548815 0.314333 0.0935482 0 0.585561 0.311165 0.0931834 0 0.687191 0.310297 0.0908344 0 0.789869 0.309145 0.0864658 0 0.837554 0.31971 0.0650417 0 0.849361 0.320845 0.048446 0 0.0992828 0.327025 0.0994444 0 0.0992828 0.327025 0.0994444 0 0.0992828 0.327025 0.0994444 0 0.108507 0.327334 0.0990725 0 0.125548 0.328418 0.0974756 0 0.14419 0.32949 0.0965989 0 0.157512 0.330189 0.0971576 0 0.175381 0.33044 0.0972148 0 0.202702 0.328651 0.0925119 0 0.222773 0.328036 0.0907459 0 0.242531 0.327062 0.0926239 0 0.258259 0.326978 0.0941295 0 0.286783 0.325599 0.0970441 0 0.313856 0.324418 0.0992129 0 0.327357 0.325379 0.0973512 0 0.344735 0.325561 0.0966358 0 0.358398 0.324973 0.0966233 0 0.374449 0.324221 0.0965387 0 0.387511 0.323992 0.0958725 0 0.40677 0.326099 0.0951516 0 0.423212 0.327934 0.0946115 0 0.441913 0.328642 0.0943627 0 0.463335 0.327699 0.0955244 0 0.486999 0.325958 0.0976674 0 0.510517 0.326565 0.0973503 0 0.538956 0.325649 0.0962901 0 0.551844 0.330239 0.0934824 0 0.580818 0.329674 0.0926999 0 0.691455 0.325021 0.0913111 0 0.789001 0.328262 0.086503 0 0.841352 0.338392 0.0665105 0 0.853201 0.33965 0.0498227 0 0.100039 0.347542 0.0994331 0 0.100039 0.347542 0.0994331 0 0.100039 0.347542 0.0994331 0 0.10986 0.348024 0.0986762 0 0.12663 0.34937 0.0974709 0 0.145528 0.350456 0.0966165 0 0.157761 0.350053 0.0972995 0 0.173169 0.348799 0.0972111 0 0.201444 0.345648 0.0922081 0 0.221924 0.344571 0.0894739 0 0.242021 0.344558 0.0914085 0 0.258894 0.345019 0.093492 0 0.285371 0.345172 0.0966601 0 0.315166 0.344101 0.0997652 0 0.328808 0.345542 0.0982119 0 0.344697 0.346519 0.0967246 0 0.357341 0.346775 0.0955157 0 0.373152 0.346121 0.0953217 0 0.386653 0.345349 0.0952888 0 0.408619 0.344912 0.0973569 0 0.424654 0.346697 0.0959301 0 0.441966 0.347661 0.0948472 0 0.461714 0.347565 0.0943093 0 0.485612 0.345986 0.096009 0 0.509724 0.345558 0.0976542 0 0.542074 0.343218 0.097249 0 0.555421 0.347646 0.0946456 0 0.578857 0.349491 0.0926186 0 0.696439 0.344959 0.0917935 0 0.784751 0.35189 0.0849246 0 0.844896 0.356778 0.0676683 0 0.856778 0.358025 0.05086 0 0.100807 0.363798 0.0994421 0 0.100807 0.363798 0.0994421 0 0.100807 0.363798 0.0994421 0 0.110634 0.364113 0.098688 0 0.127441 0.364791 0.0973122 0 0.144614 0.363533 0.0963144 0 0.15681 0.362706 0.0969442 0 0.17169 0.361609 0.0974073 0 0.200246 0.35828 0.0927622 0 0.222086 0.358155 0.0887433 0 0.242505 0.358926 0.0909222 0 0.259748 0.359611 0.0929877 0 0.285109 0.360884 0.0965583 0 0.315116 0.360132 0.099876 0 0.330153 0.361055 0.0986986 0 0.34505 0.361915 0.096963 0 0.35736 0.361771 0.0957593 0 0.371935 0.361493 0.0941442 0 0.385145 0.360498 0.0939877 0 0.409038 0.358533 0.0979757 0 0.425948 0.359693 0.0974041 0 0.442087 0.361263 0.0953655 0 0.461449 0.361131 0.09474 0 0.484565 0.360566 0.0949706 0 0.510196 0.359517 0.0975569 0 0.541511 0.357262 0.0977106 0 0.558122 0.360708 0.0955217 0 0.577729 0.364171 0.0923891 0 0.699652 0.36068 0.0920017 0 0.7787 0.367542 0.0819094 0 0.84758 0.370162 0.0682418 0 0.859294 0.370944 0.0514469 0 0.101487 0.380214 0.0993782 0 0.101487 0.380214 0.0993782 0 0.101487 0.380214 0.0993782 0 0.110429 0.379606 0.098841 0 0.126504 0.378434 0.0968829 0 0.143453 0.377487 0.0961089 0 0.155988 0.376647 0.096288 0 0.170549 0.376193 0.0974898 0 0.199381 0.37512 0.0933687 0 0.222503 0.37455 0.0885128 0 0.243816 0.3751 0.0905413 0 0.260747 0.376505 0.0923286 0 0.285069 0.377883 0.0959055 0 0.31419 0.376701 0.099665 0 0.330922 0.376423 0.0987061 0 0.345257 0.376843 0.0972433 0 0.357122 0.376774 0.0961231 0 0.371604 0.376487 0.0943891 0 0.383716 0.376247 0.0930486 0 0.40781 0.374276 0.0967646 0 0.427313 0.37372 0.0991554 0 0.443152 0.375734 0.0970994 0 0.461444 0.376696 0.095308 0 0.484162 0.376625 0.0948716 0 0.510305 0.375937 0.0964572 0 0.539572 0.374014 0.0978749 0 0.560959 0.376023 0.0962295 0 0.577547 0.381475 0.0929164 0 0.703073 0.377748 0.0919591 0 0.773635 0.384766 0.0783777 0 0.850301 0.384998 0.0699031 0 0.861863 0.38543 0.0531643 0 0.100861 0.391879 0.0988659 0 0.100861 0.391879 0.0988659 0 0.100861 0.391879 0.0988659 0 0.10949 0.391529 0.0987577 0 0.125976 0.390591 0.0966166 0 0.142861 0.389991 0.0959767 0 0.15538 0.389491 0.0960822 0 0.170828 0.389755 0.0970938 0 0.198683 0.389329 0.0937838 0 0.222355 0.388397 0.0888197 0 0.244473 0.388505 0.0898921 0 0.261229 0.38936 0.0917071 0 0.2846 0.390269 0.0950802 0 0.313282 0.388972 0.0991101 0 0.331376 0.3883 0.0987839 0 0.345417 0.388883 0.097303 0 0.356956 0.388769 0.0962266 0 0.371382 0.388617 0.0947697 0 0.383564 0.388553 0.0933377 0 0.406704 0.387737 0.0957707 0 0.427557 0.386545 0.099151 0 0.444401 0.387697 0.098432 0 0.461836 0.389164 0.0960327 0 0.484096 0.389388 0.0951947 0 0.510344 0.389519 0.0955549 0 0.537583 0.388797 0.097433 0 0.563417 0.389403 0.0966535 0 0.577937 0.395788 0.0932337 0 0.70503 0.389815 0.0914305 0 0.770004 0.398069 0.0759865 0 0.852164 0.395368 0.0715304 0 0.864627 0.398682 0.0546634 0 0.100364 0.406908 0.0981864 0 0.100364 0.406908 0.0981864 0 0.100364 0.406908 0.0981865 0 0.10908 0.40666 0.0981001 0 0.125268 0.40601 0.0965313 0 0.142876 0.406051 0.0956782 0 0.155347 0.40617 0.0960103 0 0.171216 0.406001 0.0965344 0 0.197581 0.405273 0.0941917 0 0.22171 0.403858 0.0898212 0 0.244883 0.403054 0.0891726 0 0.261566 0.404001 0.090998 0 0.285019 0.404765 0.0942865 0 0.312273 0.404245 0.0984029 0 0.331434 0.403835 0.0986628 0 0.346265 0.404639 0.0973884 0 0.356866 0.405107 0.096064 0 0.371337 0.404899 0.0950866 0 0.383502 0.404756 0.0936613 0 0.40561 0.40445 0.0949708 0 0.426992 0.403213 0.0981437 0 0.445838 0.402795 0.0999024 0 0.462986 0.405074 0.0975603 0 0.484467 0.407224 0.095574 0 0.510672 0.408461 0.0951063 0 0.534328 0.409141 0.0957464 0 0.566586 0.406573 0.097115 0 0.581461 0.412053 0.0937701 0 0.69961 0.407704 0.0899935 0 0.76667 0.412972 0.0754194 0 0.854989 0.410224 0.0746054 0 0.864765 0.406808 0.0585354 0 0.099602 0.422485 0.097844 0 0.099602 0.422485 0.097844 0 0.099602 0.422485 0.097844 0 0.108762 0.422174 0.0974696 0 0.12502 0.422055 0.0964917 0 0.142861 0.421598 0.0953641 0 0.154867 0.421367 0.09581 0 0.170743 0.420818 0.0961943 0 0.19682 0.420966 0.0946052 0 0.221378 0.419831 0.0905205 0 0.244149 0.419461 0.0899474 0 0.263096 0.419972 0.0904377 0 0.285744 0.421473 0.0932791 0 0.312106 0.421628 0.0976184 0 0.331314 0.421224 0.0981217 0 0.347288 0.42175 0.0973557 0 0.357256 0.422495 0.0959818 0 0.370921 0.422704 0.0946604 0 0.383342 0.422705 0.0936764 0 0.405574 0.422982 0.0950719 0 0.426428 0.42347 0.0965969 0 0.446475 0.423402 0.0987993 0 0.464888 0.424235 0.0991693 0 0.485809 0.426765 0.0967535 0 0.511487 0.428102 0.095193 0 0.53475 0.428744 0.0937871 0 0.568428 0.424797 0.095817 0 0.585268 0.429484 0.0935848 0 0.693524 0.427299 0.0891381 0 0.761148 0.422645 0.0777704 0 0.854734 0.417928 0.0791784 0 0.868474 0.425094 0.0622523 0 0.0988047 0.439648 0.0976268 0 0.0988047 0.439648 0.0976268 0 0.0988047 0.439648 0.0976268 0 0.108364 0.439327 0.0970202 0 0.124746 0.439242 0.0960184 0 0.142528 0.438965 0.0949511 0 0.154626 0.438969 0.0952291 0 0.170519 0.439026 0.0959163 0 0.197131 0.440034 0.0942914 0 0.220462 0.439926 0.0909315 0 0.24372 0.4396 0.0914816 0 0.264547 0.439426 0.0902014 0 0.286626 0.44098 0.0922593 0 0.311954 0.441621 0.0965998 0 0.331016 0.441832 0.0971866 0 0.349124 0.442067 0.0968278 0 0.358817 0.443341 0.0958488 0 0.371385 0.444529 0.0943466 0 0.383499 0.445086 0.0932405 0 0.406195 0.445554 0.0951415 0 0.427232 0.446443 0.0964121 0 0.447128 0.446581 0.0971668 0 0.465313 0.445968 0.0980235 0 0.486812 0.445704 0.0975897 0 0.511705 0.446876 0.0947688 0 0.535809 0.447183 0.0931979 0 0.563576 0.445579 0.0933652 0 0.588804 0.446556 0.0942093 0 0.68652 0.438811 0.0905202 0 0.75542 0.430859 0.080679 0 0.863018 0.448186 0.0813098 0 0.874939 0.44994 0.0638506 0 0.098184 0.456704 0.0975075 0 0.098184 0.456704 0.0975075 0 0.098184 0.456704 0.0975075 0 0.107886 0.456404 0.0966471 0 0.124901 0.456458 0.095233 0 0.142642 0.457208 0.0947146 0 0.155107 0.457583 0.0946602 0 0.170928 0.458218 0.0955713 0 0.198166 0.459399 0.0934637 0 0.219766 0.459986 0.0909524 0 0.243605 0.459504 0.0921291 0 0.264757 0.459372 0.0905268 0 0.28695 0.46155 0.0920784 0 0.311752 0.463028 0.09539 0 0.3314 0.463732 0.0962228 0 0.350002 0.464409 0.0960746 0 0.361187 0.465465 0.0951016 0 0.372865 0.466668 0.0938876 0 0.383797 0.46717 0.0922963 0 0.405967 0.466507 0.0940296 0 0.426868 0.465524 0.0957869 0 0.446739 0.464703 0.0962279 0 0.464863 0.464132 0.0962839 0 0.486503 0.462607 0.0976146 0 0.512366 0.463015 0.0964205 0 0.536975 0.464631 0.0939761 0 0.559429 0.463203 0.0930521 0 0.589942 0.458674 0.0952647 0 0.68181 0.445927 0.0930078 0 0.757524 0.462742 0.0801173 0 0.866432 0.463365 0.0809838 0 0.876329 0.459325 0.0632858 0 0.0978017 0.47791 0.0981104 0 0.0978017 0.47791 0.0981104 0 0.0978017 0.47791 0.0981104 0 0.107844 0.478033 0.0970572 0 0.125823 0.478375 0.0945126 0 0.143368 0.479465 0.0941758 0 0.155622 0.479903 0.0941266 0 0.17175 0.480469 0.0947573 0 0.199386 0.482087 0.0924164 0 0.219955 0.483894 0.0903772 0 0.244409 0.483988 0.0922409 0 0.264493 0.485012 0.0920021 0 0.288864 0.486503 0.0910489 0 0.312886 0.486956 0.0947666 0 0.331887 0.486326 0.0948389 0 0.349465 0.485779 0.0946184 0 0.361957 0.485278 0.0940296 0 0.374047 0.485727 0.0929552 0 0.3839 0.486175 0.092049 0 0.404619 0.485374 0.0934199 0 0.425472 0.484364 0.0954196 0 0.44639 0.48351 0.0965166 0 0.464398 0.481333 0.0966446 0 0.484347 0.478983 0.0978432 0 0.512383 0.474785 0.100864 0 0.53569 0.471188 0.0992821 0 0.555664 0.468761 0.097959 0 0.589036 0.465862 0.0976873 0 0.682533 0.473026 0.092213 0 0.760366 0.500898 0.0745014 0 0.86417 0.464421 0.0822389 0 0.873962 0.460313 0.065328 0 0.0983344 0.505465 0.0986355 0 0.0983344 0.505465 0.0986355 0 0.0983344 0.505465 0.0986355 0 0.108442 0.505861 0.097703 0 0.126769 0.506554 0.0945226 0 0.145121 0.507568 0.0928932 0 0.156662 0.508507 0.0934193 0 0.172992 0.50916 0.0936741 0 0.20053 0.510338 0.0917988 0 0.220916 0.510609 0.0895502 0 0.243697 0.509857 0.091374 0 0.26472 0.509273 0.0929038 0 0.290779 0.508121 0.0905013 0 0.312923 0.508538 0.0946033 0 0.330334 0.506689 0.095381 0 0.347652 0.503645 0.0946674 0 0.360051 0.501408 0.0945088 0 0.373475 0.49936 0.0941673 0 0.382699 0.498366 0.0936663 0 0.40182 0.496128 0.0957046 0 0.421814 0.493208 0.098374 0 0.443024 0.489876 0.100659 0 0.462222 0.488262 0.101575 0 0.481626 0.49018 0.100855 0 0.509333 0.489612 0.102618 0 0.536354 0.488537 0.103017 0 0.557131 0.49106 0.0990226 0 0.593048 0.491593 0.0967716 0 0.689693 0.521868 0.0870092 0 0.756796 0.50257 0.0776196 0 0.859641 0.469951 0.0841646 0 0.870449 0.464072 0.0681886 0 0.0989937 0.535348 0.0993393 0 0.0989937 0.535348 0.0993393 0 0.0989937 0.535348 0.0993393 0 0.108916 0.535078 0.0985587 0 0.127021 0.534569 0.0953789 0 0.145687 0.534085 0.0926116 0 0.157515 0.533984 0.0923239 0 0.172824 0.533955 0.0931178 0 0.199973 0.53125 0.0917422 0 0.220206 0.527656 0.0898592 0 0.240775 0.524816 0.0928717 0 0.262711 0.52131 0.0954691 0 0.286679 0.517674 0.0952696 0 0.310491 0.515019 0.0984594 0 0.327168 0.514804 0.099926 0 0.344517 0.514815 0.0986051 0 0.356941 0.514461 0.0970572 0 0.372327 0.513994 0.0958271 0 0.382407 0.514745 0.094925 0 0.400796 0.516248 0.0958934 0 0.421272 0.516723 0.0981924 0 0.442215 0.516753 0.100125 0 0.463259 0.517615 0.100853 0 0.484087 0.521851 0.0998911 0 0.510247 0.531746 0.0977804 0 0.542295 0.540093 0.098393 0 0.569929 0.551888 0.0955131 0 0.595319 0.552599 0.0898797 0 0.688822 0.527301 0.0910708 0 0.755659 0.503116 0.0799421 0 0.855466 0.477907 0.0860882 0 0.866199 0.471885 0.0700581 0 0.0978308 0.553019 0.100158 0 0.0978308 0.553019 0.100158 0 0.0978308 0.553019 0.100158 0 0.106859 0.551802 0.101146 0 0.124489 0.548932 0.0989897 0 0.142677 0.545658 0.0969399 0 0.154648 0.54366 0.0964051 0 0.169592 0.541434 0.0970225 0 0.197341 0.539652 0.0947396 0 0.218223 0.540526 0.0919465 0 0.239056 0.541596 0.0941205 0 0.26175 0.541646 0.096572 0 0.28546 0.54266 0.096938 0 0.311519 0.542023 0.0967231 0 0.328529 0.544332 0.0992058 0 0.344753 0.54833 0.0975654 0 0.357244 0.550529 0.0955258 0 0.372822 0.55305 0.0931428 0 0.38666 0.554927 0.0913067 0 0.405476 0.56102 0.0913813 0 0.426737 0.571536 0.0918624 0 0.449753 0.580886 0.0926857 0 0.471759 0.584618 0.0939266 0 0.493727 0.580541 0.0956853 0 0.515185 0.575505 0.0958804 0 0.540228 0.569286 0.0958607 0 0.56639 0.56264 0.0976604 0 0.59104 0.5568 0.0964209 0 0.686974 0.528336 0.0980057 0 0.75495 0.50357 0.0836295 0 0.851097 0.485944 0.0878516 0 0.862713 0.481497 0.0724066 0 0.0959879 0.565816 0.101873 0 0.0959879 0.565816 0.101873 0 0.095988 0.565816 0.101873 0 0.105285 0.566012 0.102592 0 0.122701 0.566874 0.101286 0 0.141584 0.567441 0.0989336 0 0.153895 0.567662 0.09802 0 0.169813 0.567848 0.0971437 0 0.198928 0.57199 0.0930935 0 0.22054 0.577979 0.0893021 0 0.24249 0.582231 0.0899092 0 0.262946 0.585072 0.0920868 0 0.289585 0.587978 0.0928246 0 0.314807 0.590203 0.0922064 0 0.335546 0.598645 0.0914097 0 0.350434 0.599361 0.0930855 0 0.361113 0.599094 0.0923427 0 0.376275 0.59789 0.0914235 0 0.389672 0.596796 0.0905843 0 0.411022 0.596379 0.0913582 0 0.428544 0.597233 0.0925421 0 0.448283 0.594433 0.0946139 0 0.467683 0.589562 0.0966223 0 0.489 0.584212 0.0989215 0 0.511078 0.578944 0.0999495 0 0.535392 0.572956 0.10027 0 0.560569 0.566655 0.100649 0 0.586673 0.560083 0.102185 0 0.686414 0.551288 0.0930023 0 0.759086 0.51685 0.0831614 0 0.864595 0.545981 0.0873337 0 0.885336 0.567807 0.0711879 0 0.0968953 0.653983 0.100232 0 0.0968953 0.653983 0.100232 0 0.0968953 0.653983 0.100232 0 0.106277 0.652754 0.101292 0 0.123182 0.650185 0.0999888 0 0.141213 0.647404 0.099108 0 0.152521 0.647149 0.0995638 0 0.167875 0.650955 0.0993624 0 0.199122 0.660827 0.0963704 0 0.221265 0.664257 0.0907485 0 0.241694 0.662532 0.0900001 0 0.261044 0.659445 0.0909736 0 0.285681 0.655272 0.0921318 0 0.306844 0.649866 0.094978 0 0.32344 0.644641 0.0950127 0 0.340773 0.639274 0.0932132 0 0.350492 0.636287 0.0912712 0 0.359613 0.633711 0.0915617 0 0.37061 0.638038 0.0907695 0 0.395233 0.647778 0.0935979 0 0.420231 0.656226 0.0961857 0 0.440813 0.665993 0.0966851 0 0.461921 0.672536 0.0966707 0 0.486946 0.6744 0.0970965 0 0.515561 0.673098 0.0991242 0 0.54026 0.671866 0.10105 0 0.561864 0.668754 0.100788 0 0.587474 0.663024 0.0989935 0 0.663209 0.646414 0.0869709 0 0.767333 0.619719 0.0843026 0 0.864801 0.655307 0.084538 0 0.877934 0.654088 0.0695821 0 0.0893983 0.734839 0.102774 0 0.0893983 0.734839 0.102774 0 0.0893983 0.734839 0.102774 0 0.0985004 0.731333 0.103799 0 0.113274 0.725303 0.103472 0 0.131024 0.718217 0.1 0 0.141171 0.714188 0.0999367 0 0.159034 0.7257 0.100228 0 0.193086 0.746604 0.0981914 0 0.217178 0.753855 0.0935425 0 0.239081 0.758784 0.0939948 0 0.257714 0.753965 0.094533 0 0.28327 0.747324 0.0954813 0 0.302634 0.742478 0.0949735 0 0.322715 0.738412 0.0938901 0 0.342712 0.734468 0.0946184 0 0.352525 0.732481 0.0930808 0 0.366633 0.728984 0.0907804 0 0.376634 0.726565 0.0895965 0 0.393401 0.722181 0.0892071 0 0.406097 0.718744 0.0912443 0 0.423053 0.714188 0.0916056 0 0.441135 0.709351 0.090979 0 0.456848 0.704828 0.089852 0 0.47673 0.698772 0.0889928 0 0.500144 0.692049 0.0878713 0 0.53032 0.686098 0.0902255 0 0.558941 0.679479 0.0930579 0 0.696629 0.779709 0.0977327 0 0.776496 0.766073 0.0873343 0 0.845423 0.75533 0.0802465 0 0.873288 0.752802 0.0717809 0 0.0937414 0.79956 0.0912765 0 0.0937414 0.79956 0.0912765 0 0.0937415 0.79956 0.0912765 0 0.101115 0.799508 0.0940177 0 0.114161 0.799161 0.0948073 0 0.131555 0.796592 0.092148 0 0.142902 0.794769 0.0912458 0 0.156413 0.792602 0.0898927 0 0.184485 0.797255 0.086687 0 0.208269 0.802935 0.0843912 0 0.23058 0.810504 0.0873568 0 0.261097 0.846072 0.0928027 0 0.283955 0.83568 0.0935136 0 0.298616 0.824087 0.093739 0 0.310019 0.816056 0.0917981 0 0.325697 0.810473 0.0918371 0 0.336888 0.806305 0.0912853 0 0.350843 0.799362 0.0895887 0 0.358393 0.792944 0.0878978 0 0.370703 0.77948 0.0854489 0 0.409382 0.839205 0.0911969 0 0.433739 0.849842 0.0910042 0 0.453499 0.849091 0.0944458 0 0.479745 0.846804 0.0961278 0 0.504222 0.844544 0.095687 0 0.529733 0.842055 0.0951518 0 0.556969 0.839645 0.0954225 0 0.585488 0.840026 0.0954858 0 0.67471 0.82465 0.0896135 0 0.7858 0.849046 0.0883536 0 0.864696 0.832058 0.0859646 0 0.878947 0.845957 0.0771621 0 0.0979572 0.888594 0.0914175 0 0.0979572 0.888594 0.0914175 0 0.0979572 0.888594 0.0914175 0 0.115913 0.906694 0.0920357 0 0.136834 0.921634 0.0931639 0 0.152562 0.924823 0.096453 0 0.164585 0.926377 0.0973758 0 0.179623 0.926718 0.0967624 0 0.202158 0.920347 0.0925577 0 0.219846 0.915557 0.0882495 0 0.237573 0.910126 0.0883253 0 0.252563 0.905223 0.0888165 0 0.274841 0.897868 0.0896981 0 0.294858 0.89115 0.0907986 0 0.310351 0.889272 0.0900752 0 0.328239 0.88789 0.0903192 0 0.344221 0.885766 0.0910423 0 0.362067 0.885272 0.0913747 0 0.375366 0.88527 0.0903281 0 0.397259 0.891667 0.0928421 0 0.417617 0.89696 0.0948361 0 0.438901 0.901652 0.0940166 0 0.459784 0.90609 0.0936637 0 0.482263 0.907372 0.0947804 0 0.510011 0.907095 0.0956625 0 0.532505 0.909032 0.0948282 0 0.555201 0.904952 0.094243 0 0.58058 0.897793 0.0932512 0 0.683986 0.892815 0.0909569 0 0.777518 0.904451 0.090325 0 0.867021 0.877925 0.0894798 0 0.888138 0.880173 0.080336 0 0.101372 0.100563 0.110381 0 0.101372 0.100563 0.110381 0 0.101372 0.100563 0.110381 0 0.109894 0.0996424 0.10891 0 0.12406 0.0991842 0.105052 0 0.144658 0.0969279 0.105293 0 0.157961 0.0957 0.107032 0 0.172639 0.0957031 0.108575 0 0.196594 0.100075 0.103261 0 0.226073 0.104985 0.101013 0 0.242022 0.105964 0.0997499 0 0.261042 0.103562 0.101811 0 0.294015 0.0977582 0.107935 0 0.313654 0.0967543 0.107703 0 0.32845 0.0976806 0.10566 0 0.343558 0.0988268 0.10355 0 0.355143 0.0987376 0.101759 0 0.370209 0.0980703 0.100578 0 0.385014 0.0975342 0.100732 0 0.406487 0.0972959 0.102281 0 0.423074 0.0982301 0.103271 0 0.448391 0.0957916 0.104044 0 0.462519 0.098025 0.103807 0 0.473713 0.102949 0.103283 0 0.504817 0.1029 0.104133 0 0.537193 0.100583 0.10403 0 0.557986 0.101403 0.102919 0 0.601017 0.095536 0.10282 0 0.700199 0.0924282 0.108609 0 0.822144 0.0913675 0.111702 0 0.861336 0.0936912 0.0937352 0 0.873623 0.0957421 0.0765639 0 0.101372 0.100563 0.110381 0 0.101372 0.100563 0.110381 0 0.101372 0.100563 0.110381 0 0.109894 0.0996424 0.10891 0 0.12406 0.0991842 0.105052 0 0.144658 0.0969279 0.105293 0 0.157961 0.0957 0.107032 0 0.172639 0.0957031 0.108575 0 0.196594 0.100075 0.103261 0 0.226073 0.104985 0.101013 0 0.242022 0.105964 0.0997499 0 0.261042 0.103562 0.101811 0 0.294015 0.0977582 0.107935 0 0.313654 0.0967543 0.107703 0 0.32845 0.0976806 0.10566 0 0.343558 0.0988268 0.10355 0 0.355143 0.0987376 0.101759 0 0.370209 0.0980703 0.100578 0 0.385014 0.0975342 0.100732 0 0.406487 0.0972959 0.102281 0 0.423074 0.0982301 0.103271 0 0.448391 0.0957916 0.104044 0 0.462519 0.098025 0.103807 0 0.473713 0.102949 0.103283 0 0.504817 0.1029 0.104133 0 0.537193 0.100583 0.10403 0 0.557986 0.101403 0.102919 0 0.601017 0.095536 0.10282 0 0.700199 0.0924282 0.108609 0 0.822144 0.0913675 0.111702 0 0.861336 0.0936912 0.0937352 0 0.873623 0.0957421 0.0765639 0 0.101372 0.100563 0.110381 0 0.101372 0.100563 0.110381 0 0.101372 0.100563 0.110381 12197.8 0.109894 0.0996424 0.10891 17027.4 0.12406 0.0991842 0.105052 0 0.144658 0.0969279 0.105293 0 0.157961 0.0957 0.107032 0 0.172639 0.0957031 0.108575 0 0.196594 0.100075 0.103261 0 0.226073 0.104985 0.101013 0 0.242022 0.105964 0.0997499 0 0.261042 0.103562 0.101811 0 0.294015 0.0977582 0.107935 0 0.313654 0.0967543 0.107703 0 0.32845 0.0976806 0.10566 0 0.343558 0.0988268 0.10355 0 0.355143 0.0987376 0.101759 0 0.370209 0.0980703 0.100578 0 0.385014 0.0975342 0.100732 0 0.406487 0.0972959 0.102281 0 0.423074 0.0982301 0.103271 0 0.448391 0.0957916 0.104044 0 0.462519 0.098025 0.103807 0 0.473713 0.102949 0.103283 0 0.504817 0.1029 0.104133 0 0.537193 0.100583 0.10403 0 0.557986 0.101403 0.102919 0 0.601017 0.095536 0.10282 0 0.700199 0.0924282 0.108609 0 0.822144 0.0913675 0.111702 0 0.861336 0.0936912 0.0937352 0 0.873623 0.0957421 0.0765639 0 0.100369 0.106859 0.110173 0 0.100369 0.106859 0.110173 0 0.100369 0.106859 0.110173 17040.1 0.109144 0.105844 0.109286 151623 0.12424 0.105023 0.104851 33807.3 0.142893 0.104301 0.104555 0 0.15795 0.104135 0.106413 0 0.1736 0.10526 0.108183 0 0.198485 0.110956 0.104082 0 0.226343 0.114506 0.101372 0 0.242034 0.113152 0.0999934 0 0.25893 0.110908 0.100717 0 0.293207 0.104863 0.107877 0 0.313929 0.104984 0.108099 0 0.328836 0.105346 0.106174 0 0.343813 0.105762 0.103941 0 0.355166 0.106284 0.101957 0 0.369879 0.106204 0.100337 0 0.384668 0.105629 0.100489 0 0.406485 0.105214 0.10222 0 0.423518 0.106049 0.103222 0 0.447231 0.104304 0.103803 0 0.464077 0.106447 0.104011 0 0.475665 0.111881 0.103659 0 0.503358 0.113065 0.104236 0 0.53873 0.108588 0.104139 0 0.557293 0.10952 0.102986 0 0.60004 0.102456 0.103459 0 0.699331 0.098318 0.108868 0 0.81806 0.105341 0.107354 0 0.862856 0.102705 0.0948304 0 0.874615 0.103006 0.0780188 0 0.0981015 0.120079 0.109131 0 0.0981015 0.120079 0.109131 0 0.0981015 0.120079 0.109131 0 0.106857 0.119414 0.108936 33914.5 0.125334 0.120897 0.105547 35997.1 0.145009 0.125416 0.104736 0 0.159751 0.127445 0.105446 0 0.176189 0.12935 0.107437 0 0.2006 0.129913 0.105491 0 0.224968 0.1277 0.102414 0 0.241527 0.126337 0.100548 0 0.255528 0.125108 0.0994748 0 0.291105 0.121349 0.106561 0 0.313729 0.120065 0.108333 0 0.329365 0.120723 0.106662 0 0.344958 0.121739 0.104547 0 0.355522 0.122456 0.102393 0 0.36981 0.122686 0.100305 0 0.383948 0.122582 0.099888 0 0.406441 0.122409 0.101989 0 0.42499 0.123935 0.103564 0 0.445825 0.12456 0.104002 0 0.467269 0.12378 0.104977 0 0.479059 0.128051 0.10517 0 0.500911 0.127737 0.105075 0 0.54064 0.120896 0.105457 0 0.555213 0.122418 0.103752 0 0.595701 0.116564 0.104474 0 0.699257 0.118997 0.107518 0 0.79586 0.131457 0.0926997 0 0.863737 0.119133 0.0946563 0 0.875947 0.118997 0.0784654 0 0.0990906 0.1445 0.108412 0 0.0990906 0.1445 0.108412 0 0.0990906 0.1445 0.108412 0 0.108668 0.145608 0.108305 0 0.128952 0.147909 0.107055 0 0.148488 0.150356 0.10507 0 0.16126 0.15102 0.105782 0 0.174985 0.149048 0.105948 0 0.196647 0.145515 0.103603 0 0.22252 0.141045 0.103087 0 0.241086 0.140086 0.101488 0 0.256075 0.142136 0.100095 0 0.288821 0.141799 0.104355 0 0.313079 0.140009 0.107267 0 0.330424 0.140398 0.107092 0 0.34643 0.141699 0.105228 0 0.356848 0.142168 0.103427 0 0.370222 0.141787 0.101562 0 0.383808 0.141379 0.101205 0 0.406584 0.140989 0.103252 0 0.426115 0.141022 0.105521 0 0.443973 0.142055 0.106117 0 0.469817 0.139829 0.107083 0 0.481259 0.142588 0.106132 0 0.498735 0.144526 0.105312 0 0.534695 0.140762 0.104744 0 0.55558 0.142576 0.103159 0 0.589506 0.140451 0.102232 0 0.697677 0.144108 0.10536 0 0.780609 0.153385 0.084281 0 0.864122 0.138178 0.0930416 0 0.876435 0.138101 0.0768655 0 0.100685 0.159315 0.108315 0 0.100685 0.159315 0.108315 0 0.100685 0.159315 0.108316 0 0.109744 0.160026 0.108099 0 0.129532 0.159682 0.10711 0 0.148837 0.159646 0.10495 0 0.159891 0.158219 0.105265 0 0.173661 0.156109 0.10554 0 0.194859 0.152911 0.102333 0 0.221148 0.148602 0.103041 0 0.241632 0.149497 0.10208 0 0.256792 0.151716 0.100374 0 0.288175 0.153064 0.103573 0 0.312569 0.151378 0.106697 0 0.330719 0.149564 0.107818 0 0.346579 0.149302 0.106342 0 0.356895 0.149247 0.104655 0 0.370146 0.149052 0.102896 0 0.383899 0.148934 0.102638 0 0.406446 0.148632 0.104233 0 0.426944 0.150351 0.106284 0 0.443492 0.153213 0.106047 0 0.469918 0.150142 0.106337 0 0.483209 0.152394 0.105433 0 0.498082 0.15505 0.104455 0 0.532073 0.151492 0.103894 0 0.557482 0.151584 0.102712 0 0.586818 0.15183 0.101337 0 0.696088 0.15279 0.104356 0 0.791869 0.15627 0.0922186 0 0.864302 0.145936 0.0924497 0 0.876733 0.14627 0.0761848 0 0.101037 0.168799 0.108182 0 0.101037 0.168799 0.108182 0 0.101037 0.168799 0.108182 0 0.109616 0.168832 0.107832 0 0.129319 0.168279 0.106763 0 0.147197 0.166117 0.104735 0 0.158828 0.164396 0.104895 0 0.172475 0.162365 0.105227 0 0.193391 0.160033 0.101239 0 0.22037 0.158281 0.102269 0 0.242097 0.158147 0.102655 0 0.257586 0.160358 0.101115 0 0.28793 0.160717 0.104317 0 0.311389 0.15884 0.106762 0 0.329754 0.156903 0.107931 0 0.346544 0.156174 0.107564 0 0.357049 0.156291 0.10595 0 0.370244 0.156482 0.104295 0 0.384233 0.157518 0.103772 0 0.407464 0.16106 0.104292 0 0.428139 0.163401 0.105508 0 0.444028 0.163811 0.105269 0 0.468149 0.161506 0.105366 0 0.484781 0.162241 0.104726 0 0.497088 0.16527 0.103591 0 0.529376 0.163317 0.103158 0 0.559426 0.161122 0.102822 0 0.584886 0.161821 0.101382 0 0.694013 0.161805 0.103173 0 0.803957 0.16093 0.101102 0 0.864843 0.15734 0.0916511 0 0.87728 0.15795 0.075315 0 0.0995896 0.194109 0.107739 0 0.0995896 0.194109 0.107739 0 0.0995896 0.194109 0.107739 0 0.106561 0.193155 0.107258 0 0.123105 0.190686 0.105073 0 0.143441 0.187875 0.104788 0 0.154722 0.187546 0.104116 0 0.17004 0.187777 0.104787 0 0.193968 0.187854 0.10243 0 0.217849 0.190281 0.101793 0 0.241324 0.189723 0.10425 0 0.261421 0.1901 0.105115 0 0.288199 0.194385 0.105039 0 0.311311 0.197113 0.105453 0 0.328803 0.199379 0.104508 0 0.349174 0.199052 0.105655 0 0.36156 0.199425 0.105153 0 0.375177 0.200211 0.10416 0 0.387232 0.200125 0.103266 0 0.408044 0.198817 0.104118 0 0.427004 0.197774 0.104552 0 0.444112 0.197027 0.103895 0 0.460716 0.197217 0.104017 0 0.489622 0.194408 0.105262 0 0.502978 0.198827 0.104458 0 0.524125 0.200485 0.103667 0 0.565317 0.195206 0.104334 0 0.58358 0.198558 0.10176 0 0.682727 0.200696 0.097308 0 0.798329 0.198602 0.099858 0 0.855685 0.201491 0.0823687 0 0.87086 0.201336 0.0674867 0 0.0972364 0.226465 0.107602 0 0.0972364 0.226465 0.107602 0 0.0972364 0.226465 0.107602 0 0.105303 0.227206 0.106877 0 0.121985 0.228834 0.104737 0 0.143923 0.229259 0.103453 0 0.157967 0.229317 0.104112 0 0.171895 0.229413 0.103059 0 0.195902 0.229575 0.100759 0 0.22047 0.230269 0.100748 0 0.240571 0.231054 0.101875 0 0.261581 0.231334 0.103294 0 0.293626 0.233044 0.107413 0 0.314532 0.235497 0.106919 0 0.330233 0.236003 0.105486 0 0.347598 0.234786 0.104793 0 0.359433 0.23399 0.103487 0 0.372974 0.232739 0.102531 0 0.385152 0.231767 0.102895 0 0.40619 0.230641 0.105156 0 0.426234 0.230041 0.10612 0 0.444627 0.230001 0.105447 0 0.461639 0.23078 0.104311 0 0.486344 0.229817 0.104867 0 0.509029 0.230603 0.105341 0 0.522007 0.234826 0.103427 0 0.556125 0.23169 0.103577 0 0.585591 0.231131 0.10201 0 0.680323 0.235703 0.0988964 0 0.788112 0.237633 0.0926668 0 0.861752 0.228778 0.0922167 0 0.87642 0.228732 0.0768012 0 0.0976241 0.246257 0.107661 0 0.0976241 0.246257 0.107661 0 0.0976241 0.246257 0.107661 0 0.105679 0.245908 0.106777 0 0.122052 0.245597 0.104707 0 0.142879 0.2447 0.103162 0 0.157948 0.244245 0.103737 0 0.172404 0.244961 0.103489 0 0.196202 0.246 0.0999925 0 0.221483 0.247528 0.100612 0 0.241784 0.249924 0.102563 0 0.261246 0.251008 0.103112 0 0.294455 0.251047 0.107726 0 0.315146 0.250522 0.108239 0 0.329771 0.250548 0.106155 0 0.346444 0.24988 0.104802 0 0.358552 0.249078 0.103721 0 0.371928 0.24855 0.101769 0 0.384439 0.248306 0.101679 0 0.405398 0.24713 0.104745 0 0.425807 0.246375 0.106306 0 0.444786 0.24596 0.105891 0 0.462876 0.246601 0.104977 0 0.483444 0.247336 0.104328 0 0.511588 0.246233 0.105477 0 0.524284 0.250505 0.103716 0 0.551551 0.25005 0.103161 0 0.588873 0.246892 0.102328 0 0.680849 0.253411 0.0996569 0 0.788895 0.25245 0.0935386 0 0.859692 0.244199 0.0923901 0 0.875862 0.243111 0.0784704 0 0.0970244 0.259537 0.10842 0 0.0970244 0.259537 0.10842 0 0.0970245 0.259538 0.10842 0 0.105227 0.25961 0.107454 0 0.122342 0.259914 0.104832 0 0.142162 0.260122 0.103555 0 0.157489 0.259865 0.103659 0 0.173683 0.260682 0.103966 0 0.197555 0.26262 0.0994642 0 0.22276 0.264312 0.100774 0 0.24251 0.266069 0.103272 0 0.261765 0.267553 0.103734 0 0.293646 0.265549 0.106936 0 0.315164 0.263208 0.108983 0 0.329723 0.263257 0.106803 0 0.345594 0.26314 0.104759 0 0.357832 0.263049 0.103664 0 0.37208 0.262882 0.102033 0 0.384286 0.263137 0.101044 0 0.403962 0.262275 0.10345 0 0.425294 0.26038 0.106528 0 0.444979 0.260162 0.106311 0 0.463756 0.260496 0.105672 0 0.481951 0.262134 0.104666 0 0.513836 0.260149 0.105529 0 0.527028 0.264223 0.10405 0 0.550245 0.265312 0.103141 0 0.591826 0.261092 0.102627 0 0.681714 0.268201 0.100324 0 0.789752 0.264126 0.0946409 0 0.852567 0.261036 0.0872002 0 0.868772 0.260251 0.0732143 0 0.0980833 0.282042 0.108397 0 0.0980833 0.282042 0.108397 0 0.0980833 0.282042 0.108397 0 0.106026 0.282695 0.108176 0 0.123505 0.283572 0.105327 0 0.142531 0.284662 0.104555 0 0.157031 0.284391 0.10456 0 0.175077 0.284313 0.104618 0 0.199818 0.286438 0.0988013 0 0.224192 0.288416 0.0998808 0 0.244083 0.289799 0.102906 0 0.261146 0.28863 0.103737 0 0.292234 0.286121 0.105697 0 0.312505 0.284788 0.107061 0 0.329803 0.283505 0.107482 0 0.346414 0.28372 0.105943 0 0.358032 0.283972 0.10437 0 0.371795 0.284211 0.102396 0 0.384581 0.284108 0.101762 0 0.403351 0.285199 0.102027 0 0.4236 0.28438 0.104993 0 0.444985 0.283186 0.106917 0 0.464424 0.283676 0.106374 0 0.483948 0.285264 0.105668 0 0.514829 0.284577 0.105553 0 0.531801 0.287995 0.10433 0 0.54941 0.291064 0.103382 0 0.591057 0.286736 0.102805 0 0.681363 0.291072 0.10044 0 0.793146 0.287085 0.096976 0 0.840273 0.293131 0.0778621 0 0.856357 0.292415 0.0638297 0 0.09937 0.309904 0.108381 0 0.09937 0.309904 0.108381 0 0.0993701 0.309904 0.108381 0 0.107386 0.310104 0.108015 0 0.12391 0.310226 0.105966 0 0.143645 0.31093 0.104575 0 0.156902 0.311493 0.105272 0 0.175349 0.311432 0.105512 0 0.200443 0.312676 0.0990907 0 0.224646 0.312103 0.0981376 0 0.24403 0.311345 0.101135 0 0.259336 0.310751 0.102912 0 0.290271 0.308321 0.105756 0 0.31209 0.308365 0.106015 0 0.327741 0.307607 0.105696 0 0.346216 0.306015 0.106234 0 0.358902 0.305669 0.105689 0 0.372944 0.306479 0.10389 0 0.385734 0.307372 0.102932 0 0.405112 0.309342 0.102949 0 0.422399 0.310934 0.103272 0 0.443411 0.309771 0.105295 0 0.4653 0.308376 0.10719 0 0.486004 0.309255 0.106739 0 0.512734 0.309446 0.106495 0 0.535565 0.310359 0.104683 0 0.548277 0.314303 0.103262 0 0.585256 0.311092 0.102578 0 0.686513 0.310763 0.100622 0 0.793312 0.309337 0.0973641 0 0.833803 0.320017 0.0728215 0 0.846747 0.320567 0.0567534 0 0.0991774 0.327007 0.108379 0 0.0991774 0.327007 0.108379 0 0.0991774 0.327007 0.108379 0 0.107676 0.327261 0.107818 0 0.124683 0.328403 0.105981 0 0.144765 0.329461 0.104514 0 0.157852 0.330328 0.105353 0 0.175345 0.330739 0.106014 0 0.200529 0.328833 0.0999367 0 0.224553 0.327181 0.0967179 0 0.243778 0.326387 0.100068 0 0.259131 0.326569 0.101778 0 0.288844 0.325155 0.105638 0 0.312952 0.324579 0.106405 0 0.326585 0.32573 0.104581 0 0.345037 0.325108 0.105034 0 0.358523 0.324527 0.105132 0 0.37432 0.32402 0.105143 0 0.387438 0.324917 0.104293 0 0.406321 0.327144 0.103871 0 0.423281 0.328478 0.104245 0 0.442081 0.328728 0.104216 0 0.464165 0.327008 0.106222 0 0.487041 0.325931 0.10744 0 0.510681 0.326588 0.106907 0 0.538331 0.325897 0.105481 0 0.551308 0.330212 0.103197 0 0.580822 0.32953 0.102283 0 0.690777 0.325492 0.101076 0 0.792904 0.328302 0.0974623 0 0.837567 0.338606 0.074251 0 0.849287 0.33979 0.0573171 0 0.100101 0.3476 0.108493 0 0.100101 0.3476 0.108493 0 0.100101 0.3476 0.108493 0 0.108652 0.348098 0.10802 0 0.126066 0.34923 0.105721 0 0.145773 0.350447 0.104491 0 0.158353 0.349676 0.104773 0 0.173071 0.348811 0.106005 0 0.199449 0.345965 0.100452 0 0.223791 0.343857 0.0954152 0 0.24353 0.344087 0.0989146 0 0.259842 0.344702 0.100831 0 0.287441 0.344812 0.104702 0 0.314576 0.344301 0.107193 0 0.32797 0.345906 0.105402 0 0.344183 0.346719 0.104138 0 0.357424 0.346256 0.104095 0 0.373301 0.345553 0.104222 0 0.388426 0.344623 0.105377 0 0.408147 0.345675 0.105412 0 0.424347 0.347284 0.104705 0 0.441739 0.347807 0.104271 0 0.4621 0.347215 0.104463 0 0.486399 0.345389 0.106732 0 0.509518 0.345783 0.107159 0 0.541508 0.343573 0.106499 0 0.554801 0.348015 0.103782 0 0.578546 0.3495 0.102191 0 0.696169 0.345359 0.10165 0 0.791333 0.350657 0.0973289 0 0.841117 0.356994 0.0753998 0 0.852796 0.357979 0.0583766 0 0.101308 0.363684 0.108126 0 0.101308 0.363684 0.108126 0 0.101308 0.363684 0.108126 0 0.109439 0.364203 0.10814 0 0.126812 0.364576 0.105523 0 0.144619 0.363379 0.104188 0 0.157416 0.362353 0.104144 0 0.171996 0.361473 0.105226 0 0.19831 0.358686 0.100779 0 0.222782 0.358111 0.0959005 0 0.244169 0.35844 0.0977868 0 0.260696 0.359294 0.100327 0 0.287274 0.360462 0.104112 0 0.315159 0.360001 0.107179 0 0.329358 0.361249 0.105992 0 0.344445 0.361952 0.104311 0 0.356613 0.361811 0.10334 0 0.371974 0.360899 0.103061 0 0.386855 0.359664 0.104059 0 0.409318 0.358785 0.106379 0 0.425476 0.360511 0.105442 0 0.4417 0.361543 0.104421 0 0.461247 0.361376 0.104145 0 0.485376 0.360081 0.105689 0 0.51041 0.359454 0.107736 0 0.541261 0.357482 0.10706 0 0.557476 0.360993 0.104684 0 0.577426 0.364056 0.10197 0 0.699373 0.360933 0.101974 0 0.788341 0.364943 0.0962405 0 0.843787 0.370346 0.0760096 0 0.855366 0.371042 0.0589576 0 0.102087 0.379845 0.107843 0 0.102087 0.379845 0.107843 0 0.102087 0.379845 0.107843 0 0.10957 0.379421 0.107842 0 0.125589 0.378401 0.105533 0 0.143419 0.377371 0.103888 0 0.156156 0.376549 0.103915 0 0.171345 0.375841 0.104543 0 0.197361 0.3755 0.101367 0 0.221813 0.375221 0.0974301 0 0.245237 0.37461 0.0965425 0 0.261854 0.376165 0.0997137 0 0.287231 0.377353 0.103448 0 0.314985 0.376191 0.106613 0 0.330292 0.376415 0.10598 0 0.344258 0.377077 0.104339 0 0.356405 0.376871 0.103383 0 0.370843 0.376611 0.102285 0 0.385075 0.375746 0.102782 0 0.409479 0.373576 0.106494 0 0.426918 0.374603 0.106679 0 0.442238 0.376564 0.105016 0 0.461228 0.376894 0.104621 0 0.484204 0.376699 0.104556 0 0.510766 0.37544 0.107188 0 0.5393 0.374138 0.107246 0 0.560362 0.376316 0.105495 0 0.576833 0.381736 0.102048 0 0.70273 0.377751 0.101906 0 0.781393 0.382655 0.0923436 0 0.846713 0.385752 0.0773392 0 0.858113 0.38602 0.0604058 0 0.101394 0.391542 0.107475 0 0.101394 0.391542 0.107475 0 0.101394 0.391542 0.107475 0 0.10905 0.391171 0.107404 0 0.124802 0.390529 0.105582 0 0.142814 0.38971 0.103572 0 0.15559 0.38944 0.103815 0 0.171668 0.38942 0.104136 0 0.196745 0.389682 0.101695 0 0.222172 0.38901 0.0986284 0 0.246112 0.388076 0.096498 0 0.262305 0.389032 0.0991552 0 0.286931 0.389765 0.102875 0 0.314118 0.38855 0.105983 0 0.330907 0.388156 0.105622 0 0.344564 0.388925 0.104638 0 0.35624 0.388875 0.103487 0 0.370653 0.388794 0.102407 0 0.384066 0.388652 0.102148 0 0.408554 0.386904 0.1056 0 0.428168 0.38643 0.107679 0 0.44351 0.388441 0.105968 0 0.461333 0.389623 0.104732 0 0.483999 0.389599 0.104695 0 0.510997 0.389031 0.106313 0 0.537965 0.388355 0.107444 0 0.562806 0.389561 0.106005 0 0.577206 0.396016 0.102377 0 0.704951 0.38956 0.101452 0 0.777848 0.396518 0.0898933 0 0.848443 0.396179 0.0788838 0 0.860636 0.398611 0.0619156 0 0.100562 0.406683 0.107265 0 0.100562 0.406683 0.107265 0 0.100562 0.406683 0.107265 0 0.10862 0.406277 0.106772 0 0.124118 0.405911 0.105502 0 0.142902 0.405883 0.103346 0 0.155683 0.406065 0.103676 0 0.171563 0.40584 0.104063 0 0.195848 0.405457 0.10161 0 0.221997 0.404226 0.0992254 0 0.244746 0.403565 0.0978814 0 0.262928 0.403672 0.0985878 0 0.286998 0.404347 0.102069 0 0.31306 0.403773 0.105283 0 0.331184 0.403503 0.105172 0 0.345552 0.404476 0.10436 0 0.356145 0.405019 0.10347 0 0.370647 0.404935 0.102498 0 0.383965 0.404833 0.102184 0 0.406956 0.404032 0.104327 0 0.428189 0.402615 0.107345 0 0.445145 0.403476 0.107157 0 0.462195 0.40584 0.105464 0 0.484382 0.407418 0.104959 0 0.510758 0.408369 0.105008 0 0.535133 0.408252 0.106371 0 0.56598 0.406745 0.106466 0 0.580674 0.411988 0.102986 0 0.701473 0.406861 0.100218 0 0.772842 0.41201 0.0875965 0 0.851958 0.412941 0.0816816 0 0.861671 0.4092 0.065485 0 0.0997873 0.422376 0.107036 0 0.0997873 0.422376 0.107036 0 0.0997873 0.422376 0.107036 0 0.107971 0.422038 0.106576 0 0.12436 0.421846 0.104981 0 0.142671 0.421479 0.103265 0 0.155383 0.421139 0.103298 0 0.170933 0.420726 0.103969 0 0.195537 0.420876 0.101173 0 0.221772 0.420027 0.0998022 0 0.243358 0.420155 0.0993238 0 0.263753 0.419869 0.0978645 0 0.287511 0.421217 0.101812 0 0.312766 0.421184 0.104488 0 0.331153 0.420886 0.104668 0 0.346734 0.421365 0.103816 0 0.356537 0.422187 0.102945 0 0.370469 0.422414 0.102274 0 0.383947 0.422583 0.102152 0 0.406362 0.422995 0.103695 0 0.42805 0.422609 0.1063 0 0.446847 0.422765 0.107539 0 0.464037 0.424982 0.106526 0 0.48502 0.427387 0.105064 0 0.511201 0.427923 0.104714 0 0.534783 0.427767 0.104372 0 0.569041 0.423751 0.106326 0 0.584493 0.429349 0.102899 0 0.69578 0.426788 0.0995025 0 0.766077 0.423729 0.0877288 0 0.851264 0.419505 0.0864171 0 0.864126 0.424452 0.0695018 0 0.0988947 0.439789 0.107594 0 0.0988947 0.439789 0.107594 0 0.0988948 0.439789 0.107594 0 0.107306 0.439356 0.106621 0 0.124296 0.438842 0.104328 0 0.142117 0.438815 0.103173 0 0.155154 0.438695 0.10277 0 0.170894 0.438848 0.103639 0 0.196286 0.439656 0.100403 0 0.22121 0.43997 0.0996605 0 0.243045 0.440185 0.100678 0 0.264347 0.439623 0.0983882 0 0.288103 0.440897 0.10174 0 0.312375 0.441332 0.104061 0 0.330953 0.441378 0.103832 0 0.348517 0.441743 0.103229 0 0.358207 0.442954 0.102235 0 0.37073 0.444212 0.101374 0 0.384176 0.444596 0.101773 0 0.406903 0.445403 0.103522 0 0.427974 0.446202 0.104972 0 0.447469 0.445634 0.106181 0 0.465555 0.445021 0.106934 0 0.486003 0.44608 0.105431 0 0.511355 0.446769 0.104167 0 0.535228 0.447359 0.102446 0 0.564757 0.44488 0.103919 0 0.588162 0.446887 0.103468 0 0.6889 0.439809 0.100477 0 0.760152 0.430657 0.0910423 0 0.859288 0.449135 0.0887238 0 0.870595 0.449517 0.0714589 0 0.0981299 0.456928 0.108133 0 0.0981299 0.456928 0.108133 0 0.0981299 0.456928 0.108133 0 0.106549 0.456657 0.107182 0 0.124205 0.456263 0.103919 0 0.142448 0.457079 0.102851 0 0.155299 0.457389 0.102631 0 0.171492 0.457852 0.103117 0 0.197206 0.458932 0.0996969 0 0.220612 0.459678 0.0990439 0 0.244143 0.459623 0.101075 0 0.263563 0.460176 0.0998758 0 0.289274 0.461011 0.100873 0 0.312181 0.462748 0.104185 0 0.331066 0.463228 0.103297 0 0.349494 0.463812 0.102542 0 0.360513 0.46487 0.101506 0 0.372191 0.466074 0.100292 0 0.384554 0.466412 0.100236 0 0.406969 0.46586 0.102669 0 0.427602 0.465379 0.104054 0 0.446745 0.464651 0.10446 0 0.465139 0.463588 0.10529 0 0.486685 0.46241 0.106064 0 0.51167 0.463883 0.104662 0 0.536502 0.464997 0.103259 0 0.560311 0.464778 0.102655 0 0.590241 0.460505 0.105081 0 0.683197 0.445394 0.103552 0 0.761512 0.463297 0.0911306 0 0.862855 0.464925 0.0887293 0 0.872712 0.460888 0.0708284 0 0.0979021 0.478179 0.108759 0 0.0979021 0.478179 0.108759 0 0.0979021 0.478179 0.108759 0 0.106498 0.478291 0.10783 0 0.124375 0.478513 0.104755 0 0.143539 0.479028 0.101961 0 0.155776 0.479743 0.102225 0 0.172194 0.480199 0.102467 0 0.197834 0.481724 0.0992994 0 0.220554 0.483505 0.0981465 0 0.245151 0.483654 0.100546 0 0.263611 0.485362 0.100797 0 0.29097 0.485732 0.0992889 0 0.313152 0.48668 0.103523 0 0.331085 0.486448 0.102982 0 0.349083 0.485498 0.101434 0 0.361456 0.484967 0.100363 0 0.373445 0.48545 0.099283 0 0.384296 0.485863 0.0988336 0 0.405862 0.48483 0.101262 0 0.426653 0.484111 0.103834 0 0.446485 0.483612 0.104434 0 0.464513 0.483115 0.104436 0 0.485519 0.480599 0.106285 0 0.511918 0.476551 0.107813 0 0.534977 0.473001 0.106906 0 0.555457 0.470524 0.106634 0 0.58877 0.46542 0.108209 0 0.682546 0.472483 0.102134 0 0.765137 0.499451 0.0869576 0 0.860761 0.465945 0.0894205 0 0.870445 0.461862 0.0723544 0 0.0984898 0.505664 0.10941 0 0.0984898 0.505664 0.10941 0 0.0984898 0.505664 0.10941 0 0.107143 0.506021 0.108448 0 0.125116 0.506752 0.105525 0 0.144712 0.507361 0.101891 0 0.157234 0.507974 0.101066 0 0.173109 0.508824 0.101763 0 0.199116 0.510151 0.0984191 0 0.221989 0.510171 0.0967096 0 0.244806 0.509538 0.099512 0 0.264782 0.509235 0.100845 0 0.29049 0.508471 0.0992079 0 0.313764 0.508223 0.102647 0 0.330082 0.508628 0.103307 0 0.347046 0.505661 0.102384 0 0.359655 0.503104 0.101285 0 0.373262 0.500851 0.100151 0 0.38329 0.499888 0.100089 0 0.403357 0.49737 0.102603 0 0.423489 0.494492 0.105668 0 0.44384 0.491441 0.108311 0 0.462054 0.488909 0.108992 0 0.481643 0.489981 0.108758 0 0.510373 0.488676 0.111181 0 0.535403 0.489141 0.10986 0 0.556416 0.491389 0.107402 0 0.592009 0.489355 0.106665 0 0.688659 0.521271 0.0966454 0 0.758677 0.502359 0.0889536 0 0.857613 0.472162 0.0919494 0 0.868012 0.466297 0.075657 0 0.0999793 0.535009 0.108189 0 0.0999793 0.535009 0.108189 0 0.0999793 0.535009 0.108189 0 0.107988 0.535068 0.108205 0 0.125364 0.534844 0.106301 0 0.144672 0.534368 0.102734 0 0.157394 0.534019 0.101128 0 0.173074 0.53381 0.101437 0 0.199098 0.532516 0.0976761 0 0.22121 0.528801 0.0969166 0 0.242483 0.525817 0.100259 0 0.263377 0.522615 0.103102 0 0.286333 0.519753 0.103118 0 0.312283 0.516231 0.105422 0 0.326885 0.515082 0.108323 0 0.343566 0.514826 0.106751 0 0.355714 0.514508 0.105067 0 0.37134 0.513884 0.1032 0 0.382518 0.514347 0.101777 0 0.402082 0.515678 0.103238 0 0.422592 0.516141 0.105541 0 0.443114 0.516117 0.107375 0 0.463394 0.515861 0.109056 0 0.483509 0.520122 0.1079 0 0.509894 0.526458 0.10732 0 0.541602 0.53454 0.108119 0 0.568596 0.551186 0.104188 0 0.594972 0.552805 0.0991786 0 0.688075 0.527833 0.0999748 0 0.754732 0.503759 0.0881419 0 0.853428 0.48008 0.0938773 0 0.86376 0.47409 0.0775347 0 0.0994014 0.554173 0.108128 0 0.0994014 0.554173 0.108128 0 0.0994014 0.554173 0.108128 0 0.107154 0.553041 0.108532 0 0.123434 0.55062 0.108754 0 0.142001 0.547591 0.106735 0 0.154234 0.545446 0.105677 0 0.170091 0.542913 0.105684 0 0.195899 0.539257 0.10181 0 0.218715 0.540217 0.0997648 0 0.240636 0.540954 0.101478 0 0.262804 0.541269 0.104945 0 0.28525 0.542603 0.104706 0 0.311475 0.541804 0.105253 0 0.329107 0.542304 0.106392 0 0.343567 0.546016 0.106297 0 0.355809 0.548656 0.104031 0 0.37161 0.551144 0.101718 0 0.386122 0.553146 0.100136 0 0.405056 0.557783 0.0993117 0 0.427198 0.567473 0.0997302 0 0.449539 0.576661 0.100247 0 0.472882 0.585405 0.1009 0 0.49379 0.580624 0.103093 0 0.514851 0.575706 0.103515 0 0.540635 0.569203 0.104607 0 0.566614 0.562605 0.106268 0 0.589434 0.557317 0.104449 0 0.686088 0.528267 0.10689 0 0.754022 0.504213 0.091825 0 0.848793 0.487028 0.0955234 0 0.859981 0.483131 0.0797143 0 0.0967795 0.565265 0.111031 0 0.0967795 0.565265 0.111031 0 0.0967795 0.565265 0.111031 0 0.105252 0.565462 0.110525 0 0.121803 0.566394 0.110553 0 0.140977 0.567329 0.108314 0 0.153279 0.567892 0.107742 0 0.169484 0.568073 0.10705 0 0.196512 0.569925 0.102068 0 0.220938 0.575399 0.0972442 0 0.243005 0.579612 0.0982199 0 0.264805 0.582323 0.100147 0 0.289617 0.585774 0.101406 0 0.313633 0.588408 0.100576 0 0.335956 0.595816 0.099105 0 0.350987 0.60101 0.0999222 0 0.360838 0.601152 0.0999511 0 0.375782 0.600177 0.0991302 0 0.390151 0.599164 0.0987615 0 0.411581 0.598961 0.0996003 0 0.429465 0.598353 0.10012 0 0.448834 0.594345 0.101168 0 0.468294 0.589446 0.103208 0 0.489652 0.584088 0.105598 0 0.511014 0.579075 0.107148 0 0.534959 0.573175 0.107374 0 0.560743 0.566664 0.108506 0 0.585936 0.560036 0.109325 0 0.686465 0.546719 0.104197 0 0.756139 0.513313 0.0926825 0 0.861225 0.54388 0.0957733 0 0.881755 0.566105 0.0792924 0 0.0980241 0.655395 0.109887 0 0.0980241 0.655395 0.109887 0 0.0980242 0.655395 0.109887 0 0.106293 0.654079 0.109456 0 0.122242 0.651662 0.10957 0 0.141265 0.648654 0.107321 0 0.152768 0.646935 0.107251 0 0.167803 0.648634 0.107589 0 0.19743 0.659116 0.104057 0 0.221412 0.662739 0.10017 0 0.241817 0.661736 0.10006 0 0.261794 0.658464 0.100545 0 0.286401 0.654362 0.100757 0 0.307498 0.649322 0.102822 0 0.32331 0.64437 0.102569 0 0.339964 0.63921 0.100825 0 0.349638 0.63621 0.0993886 0 0.360269 0.632907 0.0980264 0 0.370393 0.634951 0.0984367 0 0.396997 0.650883 0.101364 0 0.421823 0.659469 0.103837 0 0.441288 0.669517 0.104728 0 0.462196 0.673681 0.104848 0 0.487265 0.675234 0.1054 0 0.51624 0.674377 0.106791 0 0.540649 0.672949 0.107291 0 0.562074 0.669575 0.106961 0 0.587341 0.663895 0.106028 0 0.662204 0.645575 0.0950933 0 0.763428 0.619574 0.0926397 0 0.862248 0.651446 0.0930014 0 0.876877 0.659673 0.0776258 0 0.0913202 0.73526 0.111624 0 0.0913202 0.73526 0.111624 0 0.0913202 0.73526 0.111624 0 0.0982265 0.732573 0.112144 0 0.113353 0.726495 0.112028 0 0.130094 0.719671 0.110935 0 0.141446 0.71519 0.10888 0 0.158241 0.723714 0.10896 0 0.191388 0.744659 0.105819 0 0.217269 0.752266 0.102297 0 0.239428 0.757484 0.102303 0 0.259009 0.752452 0.102592 0 0.283464 0.746062 0.103838 0 0.302464 0.74135 0.10303 0 0.322502 0.737476 0.103797 0 0.342385 0.73363 0.103273 0 0.350494 0.732652 0.101251 0 0.364385 0.729225 0.098953 0 0.376328 0.726248 0.0977119 0 0.393191 0.721846 0.0970792 0 0.407858 0.717961 0.0973849 0 0.422826 0.71395 0.098125 0 0.440783 0.708656 0.0980367 0 0.456375 0.703922 0.0972035 0 0.476592 0.69771 0.0970395 0 0.500098 0.691364 0.096367 0 0.529968 0.685839 0.0981838 0 0.558765 0.678627 0.100838 0 0.695879 0.779223 0.105973 0 0.775077 0.765597 0.0956711 0 0.844458 0.754601 0.0901343 0 0.869406 0.752665 0.0797872 0 0.09667 0.796922 0.0999974 0 0.09667 0.796922 0.0999974 0 0.09667 0.796922 0.0999974 0 0.103598 0.796921 0.0999564 0 0.115502 0.797448 0.102236 0 0.131049 0.795223 0.101935 0 0.142692 0.793454 0.100278 0 0.156058 0.79137 0.098986 0 0.183754 0.798839 0.0945481 0 0.209842 0.806076 0.0934684 0 0.232001 0.813803 0.0966139 0 0.261319 0.844598 0.101647 0 0.283103 0.832591 0.102091 0 0.297497 0.820561 0.100857 0 0.309001 0.813267 0.0994502 0 0.325308 0.807333 0.0991376 0 0.335989 0.803757 0.0987894 0 0.349501 0.798083 0.0979882 0 0.357401 0.790728 0.095697 0 0.365567 0.764368 0.0932301 0 0.410505 0.844862 0.100684 0 0.433694 0.849641 0.0999763 0 0.455388 0.848366 0.101029 0 0.480254 0.846041 0.103503 0 0.504097 0.843993 0.102787 0 0.529901 0.841347 0.102485 0 0.556943 0.839474 0.102814 0 0.585164 0.83996 0.102712 0 0.674203 0.823863 0.0970344 0 0.784491 0.849479 0.0977725 0 0.863272 0.832569 0.0937506 0 0.877178 0.845156 0.0846355 0 0.0997318 0.898125 0.105197 0 0.0997318 0.898125 0.105197 0 0.0997318 0.898125 0.105197 0 0.114273 0.910951 0.104012 0 0.138514 0.920361 0.0994915 0 0.154286 0.923533 0.103046 0 0.165273 0.925499 0.104736 0 0.179162 0.92568 0.104752 0 0.200346 0.919936 0.100399 0 0.220167 0.914508 0.0967807 0 0.237394 0.909272 0.0970539 0 0.252631 0.903988 0.097301 0 0.274973 0.89629 0.0985906 0 0.294136 0.889937 0.0992659 0 0.310276 0.889026 0.0978701 0 0.328765 0.887247 0.0985471 0 0.344245 0.885207 0.098765 0 0.361809 0.88482 0.0984202 0 0.375327 0.884815 0.0979747 0 0.398999 0.891974 0.100623 0 0.418337 0.897727 0.102808 0 0.4393 0.902612 0.10386 0 0.459597 0.907565 0.104503 0 0.483129 0.907089 0.102583 0 0.509705 0.907054 0.103839 0 0.532161 0.908701 0.101898 0 0.554823 0.903958 0.101409 0 0.580141 0.896839 0.100556 0 0.683336 0.893226 0.0993861 0 0.776449 0.905064 0.0995656 0 0.869822 0.877295 0.0998341 0 0.886199 0.878028 0.0887814 0 0.100347 0.100224 0.125896 0 0.100347 0.100224 0.125896 0 0.100347 0.100224 0.125896 0 0.107052 0.0999294 0.125117 0 0.121477 0.0990006 0.12382 0 0.147978 0.0946521 0.123908 0 0.158863 0.0952786 0.124795 0 0.170706 0.0967775 0.122382 0 0.19241 0.101304 0.115883 0 0.225988 0.106094 0.116237 0 0.242108 0.104477 0.116829 0 0.266299 0.101049 0.12115 0 0.294849 0.0973513 0.123779 0 0.312078 0.0975451 0.122456 0 0.327112 0.0985599 0.121083 0 0.341911 0.0991167 0.119692 0 0.354151 0.0984154 0.119055 0 0.369972 0.0975645 0.118781 0 0.386585 0.0971096 0.119932 0 0.407461 0.0971605 0.12126 0 0.422963 0.0979763 0.121839 0 0.449509 0.0950895 0.123052 0 0.461962 0.0982492 0.122843 0 0.473387 0.103759 0.122673 0 0.505511 0.103077 0.123515 0 0.535839 0.100919 0.123538 0 0.557592 0.100995 0.122593 0 0.599396 0.095807 0.121904 0 0.698012 0.0930553 0.128186 0 0.818403 0.0875939 0.133134 0 0.854102 0.0942908 0.108307 0 0.866366 0.0966424 0.0909867 0 0.100347 0.100224 0.125896 0 0.100347 0.100224 0.125896 0 0.100347 0.100224 0.125896 0 0.107052 0.0999294 0.125117 0 0.121477 0.0990006 0.12382 0 0.147978 0.0946521 0.123908 0 0.158863 0.0952786 0.124795 0 0.170706 0.0967775 0.122382 0 0.19241 0.101304 0.115883 0 0.225988 0.106094 0.116237 0 0.242108 0.104477 0.116829 0 0.266299 0.101049 0.12115 0 0.294849 0.0973513 0.123779 0 0.312078 0.0975451 0.122456 0 0.327112 0.0985599 0.121083 0 0.341911 0.0991167 0.119692 0 0.354151 0.0984154 0.119055 0 0.369972 0.0975645 0.118781 0 0.386585 0.0971096 0.119932 0 0.407461 0.0971605 0.12126 0 0.422963 0.0979763 0.121839 0 0.449509 0.0950895 0.123052 0 0.461962 0.0982492 0.122843 0 0.473387 0.103759 0.122673 0 0.505511 0.103077 0.123515 0 0.535839 0.100919 0.123538 0 0.557592 0.100995 0.122593 0 0.599396 0.095807 0.121904 0 0.698012 0.0930553 0.128186 0 0.818403 0.0875939 0.133134 0 0.854102 0.0942908 0.108307 0 0.866366 0.0966424 0.0909867 0 0.100347 0.100224 0.125896 0 0.100347 0.100224 0.125896 0 0.100347 0.100224 0.125896 0 0.107052 0.0999294 0.125117 0 0.121477 0.0990007 0.12382 0 0.147978 0.0946521 0.123908 0 0.158863 0.0952786 0.124795 0 0.170706 0.0967775 0.122382 0 0.19241 0.101304 0.115883 0 0.225988 0.106094 0.116237 0 0.242108 0.104477 0.116829 0 0.266299 0.101049 0.12115 0 0.294849 0.0973513 0.123779 0 0.312078 0.0975451 0.122456 0 0.327112 0.0985599 0.121083 0 0.341911 0.0991167 0.119692 0 0.354151 0.0984154 0.119055 0 0.369972 0.0975645 0.118781 0 0.386585 0.0971096 0.119932 0 0.407461 0.0971605 0.12126 0 0.422963 0.0979763 0.121839 0 0.449509 0.0950895 0.123052 0 0.461962 0.0982492 0.122843 0 0.473387 0.103759 0.122673 0 0.505511 0.103077 0.123515 0 0.535839 0.100919 0.123538 0 0.557592 0.100995 0.122593 0 0.599396 0.095807 0.121904 0 0.698012 0.0930553 0.128186 0 0.818403 0.0875939 0.133134 0 0.854102 0.0942908 0.108307 0 0.866366 0.0966424 0.0909867 0 0.0995266 0.106413 0.125595 0 0.0995266 0.106413 0.125595 0 0.0995266 0.106413 0.125595 0 0.106966 0.105855 0.125161 34052 0.120652 0.105395 0.123372 35700.7 0.147867 0.101907 0.122844 0 0.160106 0.102517 0.125134 0 0.172544 0.106067 0.123225 0 0.194287 0.112199 0.116738 0 0.225597 0.114357 0.116341 0 0.241568 0.112702 0.116174 0 0.264395 0.108437 0.120342 0 0.294563 0.105293 0.123855 0 0.312529 0.105648 0.122829 0 0.327403 0.105766 0.121347 0 0.341705 0.106046 0.119482 0 0.353812 0.106069 0.118778 0 0.36961 0.105665 0.118442 0 0.38643 0.105079 0.119744 0 0.407714 0.10499 0.121093 0 0.423359 0.105793 0.121627 0 0.448617 0.104144 0.122799 0 0.463699 0.107202 0.123074 0 0.47511 0.112774 0.122905 0 0.503662 0.112778 0.123415 0 0.537354 0.108875 0.123623 0 0.557178 0.110322 0.122434 0 0.599804 0.10387 0.122293 0 0.697119 0.0989671 0.128405 0 0.819624 0.0999294 0.131855 0 0.855861 0.104065 0.109269 0 0.867586 0.104657 0.0922858 0 0.0978426 0.11917 0.124987 0 0.0978426 0.11917 0.124987 0 0.0978426 0.11917 0.124987 0 0.105853 0.118457 0.124951 36185.6 0.121949 0.122023 0.123273 212511 0.146736 0.124686 0.121566 40513 0.162655 0.125765 0.123342 0 0.176824 0.128322 0.124981 0 0.196277 0.131135 0.118204 0 0.223821 0.128474 0.116605 0 0.24051 0.126417 0.115709 0 0.260524 0.123574 0.118445 0 0.293942 0.120243 0.123876 0 0.312694 0.120058 0.123085 0 0.328069 0.120967 0.121655 0 0.342754 0.12197 0.119662 0 0.353495 0.122638 0.118239 0 0.369046 0.122418 0.117728 0 0.386026 0.122383 0.119222 0 0.408009 0.122627 0.120946 0 0.425073 0.124506 0.121745 0 0.447126 0.12463 0.122665 0 0.467277 0.125707 0.123545 0 0.478684 0.129748 0.12364 0 0.50061 0.129073 0.123508 0 0.539571 0.122056 0.124405 0 0.555052 0.123243 0.123004 0 0.595728 0.117514 0.123446 0 0.696334 0.11707 0.127517 0 0.821183 0.121662 0.129885 0 0.857783 0.11863 0.112068 0 0.869369 0.118757 0.0951666 0 0.0993115 0.144294 0.125125 0 0.0993115 0.144294 0.125125 0 0.0993116 0.144294 0.125125 0 0.108153 0.145409 0.125732 0 0.126485 0.148364 0.124174 40726 0.146841 0.151149 0.121391 40561.9 0.163866 0.149114 0.121184 0 0.175971 0.1472 0.122562 0 0.195035 0.144543 0.118917 0 0.221406 0.141619 0.117083 0 0.240256 0.140783 0.115943 0 0.257901 0.142356 0.116404 0 0.293303 0.139662 0.122943 0 0.312888 0.139445 0.122883 0 0.329321 0.140842 0.121924 0 0.344502 0.142256 0.120189 0 0.354903 0.143239 0.118722 0 0.36924 0.143637 0.117772 0 0.385741 0.143137 0.119327 0 0.408793 0.142523 0.121776 0 0.426557 0.142747 0.12297 0 0.445268 0.14359 0.123705 0 0.469469 0.140783 0.124843 0 0.480468 0.142521 0.124551 0 0.497885 0.142798 0.123981 0 0.535389 0.138881 0.124278 0 0.553851 0.141638 0.122747 0 0.590535 0.138696 0.122588 0 0.697425 0.143406 0.126225 0 0.809732 0.144278 0.121517 0 0.858435 0.137394 0.11071 0 0.870444 0.137389 0.0941514 0 0.100944 0.159406 0.125262 0 0.100944 0.159406 0.125262 0 0.100944 0.159406 0.125262 0 0.109282 0.160073 0.125987 0 0.12791 0.159543 0.124643 0 0.145898 0.159727 0.121685 0 0.160351 0.157109 0.12012 0 0.174422 0.154555 0.120599 0 0.193677 0.151758 0.117993 0 0.221004 0.149628 0.117622 0 0.240368 0.150749 0.116035 0 0.258362 0.152098 0.116332 0 0.292888 0.151463 0.12214 0 0.313316 0.150934 0.123022 0 0.329947 0.151299 0.122251 0 0.344999 0.151046 0.120848 0 0.355195 0.15109 0.119554 0 0.36928 0.15106 0.118792 0 0.385403 0.150972 0.120006 0 0.408676 0.150204 0.122484 0 0.427202 0.150705 0.12375 0 0.443716 0.151317 0.123893 0 0.470389 0.148135 0.124784 0 0.482016 0.150905 0.124248 0 0.497357 0.153368 0.12321 0 0.532798 0.149959 0.123388 0 0.555727 0.150998 0.122271 0 0.588204 0.150531 0.121838 0 0.697782 0.151456 0.126279 0 0.805189 0.153397 0.118204 0 0.858614 0.145112 0.110139 0 0.870639 0.145138 0.0935812 0 0.101189 0.168643 0.125225 0 0.101189 0.168643 0.125225 0 0.101189 0.168643 0.125225 0 0.109039 0.16863 0.125963 0 0.128009 0.167767 0.125288 0 0.14438 0.16597 0.1217 0 0.157649 0.163844 0.119698 0 0.173052 0.161102 0.118885 0 0.192346 0.158502 0.117071 0 0.221517 0.158272 0.118177 0 0.240562 0.159969 0.116351 0 0.259234 0.162552 0.116568 0 0.292232 0.161396 0.121768 0 0.312644 0.159272 0.12317 0 0.329865 0.15817 0.123153 0 0.344967 0.157902 0.121756 0 0.355543 0.158166 0.120644 0 0.369433 0.158432 0.119863 0 0.385336 0.15845 0.120944 0 0.409087 0.16005 0.122597 0 0.428289 0.161596 0.123424 0 0.443395 0.162183 0.123087 0 0.46881 0.159493 0.123758 0 0.483845 0.160968 0.123573 0 0.496846 0.164049 0.122531 0 0.530119 0.162128 0.122626 0 0.558073 0.161958 0.122007 0 0.585643 0.162136 0.121439 0 0.697874 0.159931 0.126237 0 0.792457 0.167062 0.110269 0 0.859009 0.156189 0.10925 0 0.871155 0.156874 0.0925659 0 0.098385 0.195046 0.125415 0 0.098385 0.195046 0.125415 0 0.0983851 0.195046 0.125415 0 0.105661 0.194019 0.125232 0 0.121435 0.191935 0.124361 0 0.141882 0.189184 0.122356 0 0.153511 0.189315 0.120209 0 0.17002 0.188605 0.118138 0 0.192116 0.189016 0.116128 0 0.221305 0.188891 0.119879 0 0.242086 0.188272 0.120887 0 0.261397 0.191533 0.119661 0 0.290894 0.193412 0.121594 0 0.310515 0.195906 0.120817 0 0.330026 0.196642 0.121705 0 0.348902 0.197808 0.12176 0 0.36053 0.199238 0.120546 0 0.373939 0.201051 0.119365 0 0.388223 0.200442 0.120017 0 0.408803 0.199337 0.120785 0 0.426826 0.198159 0.121199 0 0.444137 0.197029 0.121573 0 0.462117 0.197091 0.122057 0 0.489197 0.19505 0.123276 0 0.502118 0.19927 0.122723 0 0.524185 0.200527 0.122341 0 0.565025 0.195298 0.123223 0 0.583906 0.198504 0.121695 0 0.692183 0.197252 0.122089 0 0.806262 0.195098 0.125123 0 0.858383 0.197737 0.104814 0 0.873012 0.197451 0.0897041 0 0.0960288 0.225848 0.125713 0 0.0960288 0.225848 0.125713 0 0.0960288 0.225848 0.125713 0 0.103307 0.226841 0.126458 0 0.120441 0.228024 0.124529 0 0.142411 0.228448 0.124724 0 0.156231 0.228712 0.122339 0 0.169241 0.229476 0.118659 0 0.195715 0.228185 0.112567 0 0.222332 0.230363 0.116682 0 0.241706 0.230796 0.118485 0 0.266259 0.2309 0.121484 0 0.294794 0.235205 0.122502 0 0.313065 0.236839 0.121102 0 0.329281 0.236312 0.120216 0 0.346679 0.234703 0.119735 0 0.359138 0.233214 0.119673 0 0.373061 0.231869 0.11948 0 0.386618 0.231235 0.120502 0 0.407345 0.230898 0.121579 0 0.426048 0.230481 0.121901 0 0.444021 0.230391 0.121506 0 0.461556 0.230568 0.121693 0 0.488171 0.22904 0.123075 0 0.50819 0.230731 0.122995 0 0.5223 0.234589 0.121893 0 0.556615 0.231212 0.122313 0 0.584182 0.231488 0.121301 0 0.679977 0.236488 0.11738 0 0.793282 0.236074 0.116054 0 0.854718 0.231415 0.104948 0 0.869016 0.231157 0.0894814 0 0.0970073 0.246467 0.124636 0 0.0970073 0.246467 0.124636 0 0.0970073 0.246467 0.124636 0 0.104117 0.246379 0.125295 0 0.120222 0.246014 0.124121 0 0.141853 0.2452 0.124225 0 0.15691 0.244919 0.12321 0 0.169591 0.245681 0.11976 0 0.195737 0.244636 0.111453 0 0.224314 0.247748 0.116557 0 0.242428 0.250776 0.117752 0 0.265574 0.250504 0.121235 0 0.296456 0.252008 0.12448 0 0.312789 0.251937 0.121808 0 0.328122 0.250954 0.120389 0 0.344879 0.249703 0.119277 0 0.357117 0.248795 0.11846 0 0.371601 0.247584 0.118377 0 0.386537 0.24686 0.120221 0 0.40707 0.246646 0.121641 0 0.425858 0.246364 0.122107 0 0.444306 0.246356 0.121723 0 0.462319 0.247068 0.12131 0 0.485277 0.246622 0.12236 0 0.510845 0.246355 0.123078 0 0.523361 0.250716 0.121712 0 0.552048 0.249589 0.121696 0 0.587487 0.247212 0.121446 0 0.679607 0.254422 0.118377 0 0.786865 0.255153 0.110989 0 0.857778 0.243666 0.110177 0 0.872041 0.243321 0.0946889 0 0.096752 0.259508 0.124671 0 0.096752 0.259508 0.124671 0 0.096752 0.259508 0.124671 0 0.104064 0.259748 0.125278 0 0.120197 0.260292 0.124273 0 0.141733 0.260602 0.124256 0 0.156822 0.260995 0.124129 0 0.170833 0.261986 0.121136 0 0.194821 0.262415 0.111315 0 0.226267 0.263939 0.116533 0 0.243386 0.266634 0.118011 0 0.264897 0.267275 0.120415 0 0.296666 0.264026 0.125677 0 0.312665 0.264213 0.122762 0 0.327251 0.264225 0.120343 0 0.343882 0.263303 0.119026 0 0.35637 0.263045 0.118161 0 0.37089 0.262866 0.117286 0 0.386142 0.262009 0.119153 0 0.40681 0.260861 0.121599 0 0.42552 0.260597 0.122125 0 0.444696 0.260526 0.122032 0 0.463341 0.261038 0.121658 0 0.482757 0.262062 0.121825 0 0.513148 0.260092 0.123161 0 0.526098 0.264436 0.121827 0 0.54985 0.265377 0.121367 0 0.590515 0.261528 0.121689 0 0.680515 0.269007 0.119063 0 0.788292 0.26739 0.111946 0 0.854906 0.257704 0.109241 0 0.869735 0.257287 0.0942385 0 0.0976639 0.282279 0.124978 0 0.0976639 0.282279 0.124978 0 0.097664 0.282279 0.124978 0 0.105067 0.282781 0.125599 0 0.121482 0.284003 0.124485 0 0.142636 0.284779 0.124171 0 0.157224 0.284708 0.124179 0 0.172798 0.285439 0.123219 0 0.194673 0.287105 0.113641 0 0.228662 0.287 0.114627 0 0.245084 0.288455 0.117707 0 0.262357 0.287905 0.118632 0 0.295021 0.28481 0.123375 0 0.312784 0.283469 0.124125 0 0.32779 0.284351 0.12155 0 0.343692 0.284781 0.119323 0 0.355741 0.284682 0.118066 0 0.3708 0.284236 0.117263 0 0.385097 0.284526 0.117698 0 0.405602 0.284042 0.120245 0 0.425494 0.28309 0.122296 0 0.444882 0.283329 0.122308 0 0.464178 0.283892 0.122125 0 0.483595 0.285869 0.121796 0 0.515485 0.284207 0.122869 0 0.530938 0.288079 0.122138 0 0.549014 0.291285 0.121196 0 0.59167 0.286611 0.121684 0 0.681186 0.291219 0.11989 0 0.790349 0.290894 0.113437 0 0.842441 0.289964 0.0996749 0 0.857218 0.289571 0.0846993 0 0.0990133 0.309816 0.124975 0 0.0990133 0.309816 0.124975 0 0.0990134 0.309816 0.124975 0 0.106005 0.30994 0.125838 0 0.122455 0.310021 0.124274 0 0.143027 0.310927 0.124127 0 0.158036 0.311166 0.123417 0 0.174219 0.311777 0.123677 0 0.195594 0.313595 0.115521 0 0.228496 0.310357 0.112785 0 0.24573 0.309842 0.116001 0 0.260924 0.309509 0.117591 0 0.293128 0.307988 0.121128 0 0.311526 0.307484 0.122014 0 0.328128 0.306346 0.122708 0 0.344443 0.30631 0.120763 0 0.356215 0.306841 0.119128 0 0.370635 0.307659 0.117375 0 0.38637 0.308285 0.118158 0 0.405708 0.309983 0.118737 0 0.424551 0.309679 0.120861 0 0.445362 0.308664 0.122577 0 0.465219 0.308899 0.122578 0 0.485836 0.309926 0.122556 0 0.512215 0.310073 0.12242 0 0.534837 0.310333 0.122198 0 0.547736 0.314156 0.121085 0 0.585455 0.310774 0.120926 0 0.684739 0.311722 0.120363 0 0.793399 0.312724 0.115536 0 0.832484 0.31815 0.0923703 0 0.847183 0.317926 0.0772513 0 0.0995039 0.326825 0.124298 0 0.0995039 0.326825 0.124298 0 0.0995039 0.326825 0.124298 0 0.106609 0.327293 0.125333 0 0.123188 0.328316 0.124358 0 0.143961 0.329482 0.123989 0 0.158675 0.330031 0.123382 0 0.174972 0.330428 0.123025 0 0.195759 0.329639 0.116525 0 0.226661 0.32638 0.113416 0 0.245902 0.324907 0.114501 0 0.260578 0.32564 0.116834 0 0.292465 0.324369 0.120791 0 0.311515 0.324501 0.120497 0 0.327064 0.324599 0.121186 0 0.345226 0.324119 0.121562 0 0.357631 0.324596 0.120396 0 0.372022 0.325538 0.118714 0 0.387517 0.32667 0.118788 0 0.406946 0.327914 0.119263 0 0.423496 0.32875 0.11979 0 0.444094 0.327534 0.121685 0 0.465556 0.326085 0.12297 0 0.486935 0.326075 0.122989 0 0.510176 0.326795 0.122516 0 0.537329 0.326136 0.121994 0 0.550363 0.330068 0.120951 0 0.581058 0.329341 0.120402 0 0.689194 0.326599 0.12086 0 0.796044 0.330106 0.117426 0 0.829724 0.339003 0.0897534 0 0.841269 0.339939 0.072636 0 0.100897 0.347208 0.123834 0 0.100897 0.347208 0.123834 0 0.100897 0.347208 0.123834 0 0.108163 0.347833 0.12475 0 0.124241 0.349248 0.12446 0 0.145022 0.34996 0.123634 0 0.158069 0.349143 0.123018 0 0.173426 0.34783 0.121957 0 0.195668 0.346387 0.117247 0 0.222572 0.344979 0.114015 0 0.24644 0.34304 0.113588 0 0.261608 0.344237 0.116902 0 0.292191 0.343852 0.120607 0 0.313422 0.344481 0.120537 0 0.32692 0.346148 0.119577 0 0.344339 0.345862 0.120322 0 0.357642 0.345356 0.120513 0 0.373439 0.344925 0.120347 0 0.388713 0.345621 0.120324 0 0.407734 0.346824 0.119835 0 0.423918 0.347583 0.119627 0 0.442288 0.347332 0.12008 0 0.464181 0.345562 0.121983 0 0.48722 0.344775 0.123019 0 0.508908 0.346068 0.122583 0 0.540517 0.344212 0.122335 0 0.553859 0.348329 0.120877 0 0.578396 0.349418 0.120256 0 0.695193 0.346327 0.121623 0 0.799041 0.349692 0.119547 0 0.833258 0.357321 0.0908268 0 0.844743 0.358032 0.0736356 0 0.101846 0.363454 0.123784 0 0.101846 0.363454 0.123784 0 0.101846 0.363454 0.123784 0 0.1093 0.363843 0.124419 0 0.12466 0.364275 0.124242 0 0.144031 0.362888 0.123037 0 0.157049 0.362073 0.122395 0 0.172066 0.360852 0.121567 0 0.194654 0.359367 0.117064 0 0.221562 0.359779 0.115127 0 0.246133 0.358242 0.114771 0 0.262689 0.358914 0.11644 0 0.291799 0.359659 0.120491 0 0.31453 0.35963 0.120705 0 0.328068 0.361187 0.119428 0 0.343596 0.361496 0.118873 0 0.356504 0.360768 0.119348 0 0.372559 0.359588 0.119752 0 0.389307 0.358941 0.12119 0 0.408544 0.360284 0.120506 0 0.424624 0.361344 0.119878 0 0.441577 0.361801 0.11944 0 0.462711 0.360591 0.120811 0 0.487373 0.358848 0.123117 0 0.509876 0.359857 0.122899 0 0.540768 0.357909 0.12273 0 0.556339 0.361477 0.120928 0 0.577323 0.363646 0.120027 0 0.698783 0.361611 0.122079 0 0.797626 0.363322 0.118999 0 0.835834 0.370433 0.0915212 0 0.847365 0.371241 0.0742397 0 0.101917 0.37959 0.124039 0 0.101917 0.37959 0.124039 0 0.101917 0.37959 0.124039 0 0.108966 0.379001 0.124267 0 0.123959 0.378204 0.123605 0 0.142666 0.377149 0.122958 0 0.156076 0.376311 0.121935 0 0.171036 0.375792 0.121461 0 0.194332 0.375655 0.116725 0 0.220697 0.376634 0.116327 0 0.24588 0.375206 0.116036 0 0.264285 0.375813 0.116095 0 0.291076 0.376648 0.120734 0 0.314583 0.37546 0.120411 0 0.329274 0.37604 0.119275 0 0.343275 0.376876 0.117966 0 0.355298 0.376783 0.117622 0 0.370918 0.375825 0.118429 0 0.388872 0.374215 0.12115 0 0.409777 0.37452 0.121763 0 0.425438 0.376215 0.120453 0 0.441664 0.377221 0.119764 0 0.461156 0.377199 0.119698 0 0.486278 0.375165 0.122093 0 0.510886 0.374964 0.123217 0 0.539029 0.374215 0.122841 0 0.559274 0.376837 0.121464 0 0.576643 0.38166 0.11974 0 0.701994 0.377756 0.122077 0 0.79479 0.37925 0.118025 0 0.839049 0.386631 0.0925164 0 0.850411 0.387039 0.0753762 0 0.100864 0.391752 0.124515 0 0.100864 0.391752 0.124515 0 0.100864 0.391752 0.124515 0 0.108021 0.391184 0.124782 0 0.123517 0.390053 0.123198 0 0.141723 0.389371 0.12295 0 0.155774 0.389138 0.121707 0 0.171031 0.389369 0.121326 0 0.194328 0.389391 0.116194 0 0.221354 0.389995 0.116703 0 0.245149 0.389157 0.116808 0 0.264872 0.388515 0.115921 0 0.290267 0.389632 0.120831 0 0.313868 0.388121 0.120735 0 0.330137 0.387693 0.119226 0 0.343395 0.388701 0.117683 0 0.355245 0.388811 0.117194 0 0.36989 0.388759 0.117158 0 0.387532 0.387487 0.120236 0 0.41086 0.386306 0.122893 0 0.426617 0.387951 0.121558 0 0.442169 0.389556 0.120056 0 0.461245 0.389847 0.119834 0 0.485284 0.388851 0.121112 0 0.511896 0.387848 0.12343 0 0.537664 0.388483 0.122832 0 0.561705 0.389798 0.121913 0 0.576089 0.396329 0.119375 0 0.704152 0.389262 0.121799 0 0.792552 0.393211 0.117201 0 0.840955 0.397541 0.0937965 0 0.852508 0.398459 0.0766732 0 0.0999578 0.40693 0.124717 0 0.0999578 0.40693 0.124717 0 0.0999578 0.40693 0.124717 0 0.107092 0.40648 0.125321 0 0.122979 0.405413 0.123109 0 0.14168 0.405817 0.122777 0 0.15564 0.405755 0.12176 0 0.171146 0.405443 0.12097 0 0.194024 0.404956 0.115409 0 0.222202 0.40488 0.117048 0 0.243386 0.404909 0.116844 0 0.264384 0.403801 0.117119 0 0.289586 0.404592 0.120895 0 0.312986 0.403685 0.121348 0 0.330563 0.40292 0.119367 0 0.344334 0.403844 0.117555 0 0.355488 0.404413 0.116844 0 0.369777 0.404719 0.116474 0 0.386237 0.40428 0.118542 0 0.410728 0.402357 0.122882 0 0.427978 0.40292 0.122798 0 0.443485 0.405163 0.120956 0 0.461545 0.406531 0.120159 0 0.4845 0.40756 0.120202 0 0.51211 0.406577 0.122321 0 0.536046 0.407196 0.122687 0 0.564948 0.406845 0.122305 0 0.579432 0.412078 0.119552 0 0.705205 0.405361 0.120962 0 0.788713 0.408857 0.115844 0 0.845661 0.418158 0.0959017 0 0.85539 0.414124 0.0796389 0 0.0991296 0.422722 0.124843 0 0.0991296 0.422722 0.124843 0 0.0991296 0.422722 0.124843 0 0.106443 0.4225 0.125753 0 0.122586 0.421857 0.123845 0 0.141657 0.421197 0.122102 0 0.155009 0.420922 0.12164 0 0.170842 0.420346 0.120519 0 0.1936 0.420434 0.115241 0 0.223025 0.420055 0.117483 0 0.242992 0.420982 0.117433 0 0.2641 0.420357 0.118011 0 0.290988 0.421058 0.120504 0 0.312368 0.42133 0.121745 0 0.329938 0.42075 0.119856 0 0.345438 0.420702 0.117162 0 0.35573 0.421306 0.11631 0 0.370006 0.42161 0.115929 0 0.385852 0.422192 0.117442 0 0.409511 0.421631 0.121015 0 0.429419 0.421208 0.123773 0 0.445807 0.423523 0.122301 0 0.462572 0.426423 0.120506 0 0.485024 0.427442 0.120294 0 0.511356 0.426623 0.120759 0 0.535259 0.425589 0.121932 0 0.567918 0.423355 0.122034 0 0.58323 0.429152 0.119417 0 0.699826 0.425912 0.120127 0 0.783893 0.42415 0.114654 0 0.844936 0.424724 0.100667 0 0.855522 0.423097 0.0843727 0 0.0984654 0.440357 0.125178 0 0.0984654 0.440357 0.125178 0 0.0984654 0.440357 0.125178 0 0.105647 0.440057 0.126364 0 0.121739 0.439337 0.124654 0 0.141114 0.438396 0.122199 0 0.154785 0.438379 0.121261 0 0.170715 0.438515 0.120459 0 0.193567 0.439341 0.11499 0 0.223915 0.439397 0.117036 0 0.242727 0.440779 0.117828 0 0.263949 0.440123 0.117899 0 0.292772 0.439998 0.119893 0 0.312132 0.441612 0.122248 0 0.329469 0.441556 0.120456 0 0.346583 0.441412 0.117707 0 0.357038 0.442124 0.115711 0 0.370685 0.442928 0.115115 0 0.386646 0.443642 0.116754 0 0.408917 0.444615 0.118997 0 0.429983 0.443994 0.122045 0 0.448134 0.443646 0.123408 0 0.464056 0.445495 0.121267 0 0.484751 0.446571 0.119689 0 0.510721 0.446256 0.119183 0 0.535618 0.446029 0.119705 0 0.566774 0.443653 0.121269 0 0.5872 0.447475 0.119746 0 0.693354 0.441915 0.120068 0 0.778639 0.430847 0.11698 0 0.851553 0.450807 0.10362 0 0.862497 0.450417 0.086398 0 0.0979499 0.45731 0.125189 0 0.0979499 0.45731 0.125189 0 0.0979499 0.45731 0.125189 0 0.105072 0.457262 0.126653 0 0.121299 0.457107 0.125307 0 0.140825 0.457192 0.123127 0 0.155094 0.457251 0.121534 0 0.170961 0.457496 0.120403 0 0.194161 0.45846 0.114644 0 0.223901 0.458589 0.115912 0 0.244176 0.459973 0.118064 0 0.262578 0.460826 0.117438 0 0.293248 0.46057 0.120138 0 0.312851 0.462259 0.12175 0 0.329339 0.463187 0.120916 0 0.346876 0.463561 0.118164 0 0.358683 0.464017 0.11603 0 0.371124 0.464679 0.113767 0 0.387295 0.464468 0.115486 0 0.409199 0.464523 0.117543 0 0.428662 0.464147 0.119138 0 0.447746 0.463017 0.121002 0 0.465525 0.46275 0.121785 0 0.485283 0.463835 0.120101 0 0.510902 0.464719 0.119278 0 0.535973 0.46536 0.118574 0 0.56307 0.464143 0.120203 0 0.590205 0.463687 0.120499 0 0.686797 0.447343 0.122456 0 0.774657 0.462559 0.114165 0 0.855521 0.468093 0.104318 0 0.865349 0.464068 0.0861753 0 0.0983456 0.477984 0.124427 0 0.0983456 0.477984 0.124427 0 0.0983456 0.477984 0.124427 0 0.105501 0.478336 0.126075 0 0.121526 0.479065 0.126017 0 0.140947 0.479433 0.124014 0 0.155511 0.479703 0.12193 0 0.171434 0.480153 0.120731 0 0.19507 0.480868 0.113974 0 0.224014 0.482077 0.114859 0 0.24646 0.483072 0.11794 0 0.263098 0.485239 0.117693 0 0.2935 0.484861 0.119662 0 0.314711 0.485348 0.119827 0 0.329324 0.486407 0.120589 0 0.346418 0.485893 0.11809 0 0.359229 0.485182 0.115987 0 0.371793 0.485284 0.113498 0 0.386531 0.484859 0.114138 0 0.408741 0.48363 0.116314 0 0.428025 0.483586 0.117975 0 0.447082 0.483316 0.119186 0 0.465687 0.482927 0.120853 0 0.486775 0.483524 0.121783 0 0.510533 0.480199 0.121216 0 0.534806 0.476415 0.121089 0 0.556713 0.473585 0.121528 0 0.589418 0.467655 0.124413 0 0.685345 0.470902 0.121979 0 0.772058 0.496489 0.109884 0 0.853555 0.469106 0.104367 0 0.863284 0.465015 0.0866545 0 0.0996745 0.504614 0.123399 0 0.0996745 0.504614 0.123399 0 0.0996745 0.504614 0.123399 0 0.106944 0.505212 0.1249 0 0.122904 0.506521 0.125152 0 0.141701 0.507748 0.124659 0 0.155861 0.508082 0.122684 0 0.172529 0.508471 0.120613 0 0.196416 0.509315 0.112976 0 0.223973 0.509524 0.113531 0 0.248127 0.508457 0.116257 0 0.263901 0.509509 0.117416 0 0.292981 0.50814 0.118634 0 0.31536 0.507496 0.119405 0 0.329691 0.508701 0.119132 0 0.345194 0.50921 0.11871 0 0.357841 0.507369 0.117191 0 0.371862 0.504864 0.115304 0 0.384529 0.503521 0.115691 0 0.4065 0.500124 0.117848 0 0.426219 0.497005 0.119835 0 0.445489 0.494084 0.121784 0 0.462799 0.49207 0.122876 0 0.483699 0.48981 0.125839 0 0.509704 0.488915 0.126582 0 0.533506 0.490374 0.123728 0 0.555603 0.491487 0.122293 0 0.591641 0.488128 0.123641 0 0.687662 0.519491 0.116743 0 0.76449 0.501187 0.11051 0 0.852991 0.476707 0.107433 0 0.862086 0.47117 0.090265 0 0.100928 0.534304 0.122262 0 0.100928 0.534304 0.122262 0 0.100928 0.534304 0.122262 0 0.10849 0.5342 0.123154 0 0.12394 0.534371 0.123774 0 0.142369 0.534464 0.123468 0 0.155682 0.534408 0.122601 0 0.172118 0.533986 0.121005 0 0.195747 0.533562 0.113653 0 0.223235 0.53126 0.113015 0 0.24636 0.527951 0.116255 0 0.264263 0.526121 0.118856 0 0.289577 0.523217 0.120742 0 0.313001 0.519884 0.123389 0 0.327863 0.517889 0.122012 0 0.341881 0.516027 0.122884 0 0.353569 0.514535 0.122231 0 0.36871 0.514163 0.120176 0 0.382218 0.514826 0.120005 0 0.403781 0.515355 0.121093 0 0.424122 0.515189 0.122078 0 0.444954 0.514821 0.122495 0 0.463638 0.515366 0.123023 0 0.483035 0.516315 0.123448 0 0.509992 0.517312 0.12588 0 0.538755 0.530045 0.123289 0 0.565549 0.547125 0.118862 0 0.595165 0.550391 0.116473 0 0.686782 0.527568 0.11719 0 0.753267 0.504997 0.106513 0 0.848768 0.48409 0.109349 0 0.858792 0.478585 0.0927482 0 0.100359 0.55654 0.122053 0 0.100359 0.55654 0.122053 0 0.100359 0.55654 0.122053 0 0.107747 0.555533 0.123172 0 0.123409 0.553237 0.123793 0 0.141002 0.550641 0.124585 0 0.153581 0.548788 0.124441 0 0.169433 0.546479 0.124195 0 0.192557 0.541768 0.118575 0 0.220078 0.539697 0.117627 0 0.243178 0.540036 0.119549 0 0.264317 0.540385 0.121181 0 0.286235 0.542345 0.122225 0 0.31176 0.541251 0.124055 0 0.328613 0.5416 0.123534 0 0.342697 0.542501 0.121225 0 0.353448 0.544205 0.121295 0 0.369108 0.547198 0.119356 0 0.385413 0.549771 0.11926 0 0.404952 0.554224 0.11869 0 0.426131 0.560186 0.118425 0 0.448749 0.568229 0.117605 0 0.472753 0.5763 0.117043 0 0.494054 0.580464 0.116091 0 0.515302 0.575742 0.117363 0 0.541732 0.569021 0.120277 0 0.564196 0.563528 0.119444 0 0.587828 0.558012 0.118097 0 0.685113 0.527952 0.122833 0 0.751858 0.505619 0.108473 0 0.843438 0.489406 0.110816 0 0.854225 0.485601 0.094479 0 0.098029 0.564476 0.124744 0 0.098029 0.564476 0.124744 0 0.098029 0.564476 0.124744 0 0.105172 0.564897 0.12632 0 0.121166 0.565455 0.126896 0 0.139784 0.566363 0.126259 0 0.152285 0.566995 0.125996 0 0.168915 0.567625 0.124924 0 0.193139 0.568675 0.119181 0 0.220465 0.571182 0.117838 0 0.243809 0.574681 0.117947 0 0.266147 0.577328 0.118603 0 0.288864 0.581754 0.11895 0 0.313342 0.584078 0.118655 0 0.332996 0.588352 0.118249 0 0.350411 0.598007 0.114776 0 0.361501 0.604315 0.11321 0 0.375312 0.604203 0.113868 0 0.392389 0.60371 0.115367 0 0.4122 0.602101 0.116398 0 0.429756 0.599393 0.117298 0 0.448551 0.594646 0.117822 0 0.468872 0.589444 0.118706 0 0.490248 0.584098 0.119316 0 0.510872 0.579283 0.119838 0 0.535618 0.573113 0.121743 0 0.561398 0.566615 0.124301 0 0.583738 0.56021 0.122698 0 0.685345 0.540717 0.121494 0 0.750391 0.506325 0.111512 0 0.853331 0.537985 0.112504 0 0.874418 0.562466 0.0958357 0 0.0997267 0.657479 0.123011 0 0.0997267 0.657479 0.123011 0 0.0997267 0.657479 0.123011 0 0.10663 0.65662 0.124705 0 0.12203 0.654395 0.126029 0 0.139974 0.651631 0.125813 0 0.151727 0.649808 0.125536 0 0.168198 0.649268 0.124417 0 0.193993 0.654531 0.119048 0 0.222185 0.659177 0.117616 0 0.243483 0.659631 0.11874 0 0.262807 0.656559 0.120838 0 0.286668 0.652738 0.121547 0 0.307321 0.648632 0.120806 0 0.322823 0.643811 0.119968 0 0.339103 0.638738 0.118138 0 0.348501 0.635832 0.116554 0 0.359478 0.632426 0.115022 0 0.372708 0.630702 0.114547 0 0.398921 0.648801 0.118239 0 0.424056 0.66569 0.119988 0 0.442162 0.673799 0.120364 0 0.463243 0.675463 0.121122 0 0.488208 0.676711 0.122719 0 0.51608 0.676342 0.124129 0 0.539888 0.674161 0.123049 0 0.561526 0.668852 0.119967 0 0.586585 0.662463 0.117972 0 0.660584 0.643884 0.110602 0 0.755547 0.619305 0.109286 0 0.856277 0.641183 0.11015 0 0.873515 0.661583 0.0950882 0 0.0962092 0.734949 0.120492 0 0.0962092 0.734949 0.120492 0 0.0962092 0.734949 0.120492 0 0.1017 0.733052 0.12314 0 0.113192 0.728976 0.128207 0 0.129965 0.722152 0.128897 0 0.140593 0.717885 0.128718 0 0.155899 0.718702 0.127902 0 0.18755 0.74088 0.121526 0 0.217417 0.74914 0.120161 0 0.240199 0.754662 0.12034 0 0.260532 0.749456 0.120551 0 0.284682 0.7434 0.11993 0 0.303059 0.738833 0.11928 0 0.324371 0.735159 0.119742 0 0.339571 0.732618 0.119 0 0.34818 0.731522 0.116925 0 0.360614 0.729491 0.115287 0 0.376177 0.725274 0.11726 0 0.392518 0.720871 0.116307 0 0.40698 0.716568 0.11472 0 0.42434 0.711474 0.113096 0 0.440094 0.706619 0.114095 0 0.45528 0.702003 0.113266 0 0.476391 0.695504 0.113415 0 0.500698 0.689762 0.113181 0 0.528689 0.685484 0.114109 0 0.558092 0.67803 0.117951 0 0.69484 0.778122 0.119668 0 0.771625 0.764259 0.111586 0 0.842221 0.753022 0.109378 0 0.86167 0.752339 0.0960775 0 0.0954187 0.795156 0.116022 0 0.0954187 0.795156 0.116022 0 0.0954187 0.795156 0.116022 0 0.103506 0.793529 0.116079 0 0.120141 0.792396 0.114613 0 0.133057 0.791901 0.118225 0 0.141686 0.790684 0.119671 0 0.155192 0.788696 0.117854 0 0.180581 0.795218 0.110608 0 0.212507 0.81305 0.112421 0 0.235389 0.820058 0.114788 0 0.26115 0.839207 0.119207 0 0.281267 0.825953 0.119065 0 0.294544 0.815274 0.116736 0 0.308376 0.808432 0.115253 0 0.322689 0.800784 0.114694 0 0.332551 0.789111 0.113192 0 0.342138 0.774619 0.111697 0 0.348293 0.756056 0.110777 0 0.368651 0.771858 0.112488 0 0.411848 0.845579 0.120946 0 0.43353 0.849165 0.121394 0 0.454629 0.848 0.120975 0 0.481078 0.844516 0.120094 0 0.503245 0.842862 0.119493 0 0.530176 0.8398 0.118816 0 0.556898 0.839176 0.119039 0 0.584649 0.840025 0.118523 0 0.67289 0.822717 0.11193 0 0.78071 0.850289 0.113902 0 0.859439 0.833655 0.108911 0 0.87421 0.843301 0.0998995 0 0.102808 0.905695 0.120013 0 0.102808 0.905695 0.120013 0 0.102808 0.905695 0.120013 0 0.113387 0.920065 0.123792 0 0.133052 0.920373 0.121721 0 0.157893 0.920998 0.115964 0 0.169343 0.922745 0.116661 0 0.179574 0.922613 0.11966 0 0.197129 0.918411 0.115285 0 0.220237 0.911745 0.114227 0 0.236765 0.906391 0.11447 0 0.252321 0.900833 0.114948 0 0.275302 0.893097 0.116554 0 0.291755 0.887632 0.115862 0 0.309216 0.888411 0.114605 0 0.329329 0.885989 0.114522 0 0.344313 0.884058 0.11512 0 0.360565 0.884052 0.114481 0 0.378737 0.88623 0.115121 0 0.399855 0.89388 0.117173 0 0.420576 0.898422 0.117346 0 0.441137 0.903241 0.120668 0 0.460502 0.908523 0.122563 0 0.481531 0.907828 0.122775 0 0.509589 0.906849 0.121127 0 0.531103 0.908722 0.120176 0 0.553881 0.902081 0.117546 0 0.579448 0.894794 0.116314 0 0.682108 0.894 0.11611 0 0.774098 0.905467 0.112268 0 0.872345 0.876904 0.117144 0 0.881834 0.873219 0.105839 0 0.101656 0.0997812 0.139465 0 0.101656 0.0997812 0.139465 0 0.101656 0.0997812 0.139465 0 0.107865 0.0992679 0.140236 0 0.123828 0.0971652 0.143248 0 0.145931 0.0951137 0.143995 0 0.157458 0.0959869 0.14247 0 0.166582 0.0971127 0.138427 0 0.19191 0.102348 0.133955 0 0.2261 0.10447 0.135796 0 0.246085 0.102036 0.138438 0 0.269307 0.100345 0.140939 0 0.293471 0.0976688 0.141206 0 0.31023 0.0985197 0.139147 0 0.325744 0.098926 0.138119 0 0.340807 0.0986782 0.136813 0 0.353195 0.0979803 0.13599 0 0.37191 0.0970551 0.136952 0 0.388185 0.0967488 0.137997 0 0.408388 0.0967682 0.139315 0 0.424348 0.0971235 0.139427 0 0.450448 0.0947194 0.1405 0 0.461739 0.0989973 0.14031 0 0.474257 0.104004 0.140103 0 0.506762 0.102912 0.14073 0 0.53532 0.100702 0.14113 0 0.557052 0.100547 0.140483 0 0.597062 0.0954412 0.140854 0 0.693403 0.0957529 0.144387 0 0.815087 0.085859 0.154537 0 0.845873 0.0947784 0.124446 0 0.858157 0.0972398 0.10711 0 0.101656 0.0997812 0.139465 0 0.101656 0.0997812 0.139465 0 0.101656 0.0997812 0.139465 0 0.107865 0.0992679 0.140236 0 0.123828 0.0971652 0.143248 0 0.145931 0.0951137 0.143995 0 0.157458 0.0959869 0.14247 0 0.166582 0.0971127 0.138427 0 0.19191 0.102348 0.133955 0 0.2261 0.10447 0.135796 0 0.246085 0.102036 0.138438 0 0.269307 0.100345 0.140939 0 0.293471 0.0976688 0.141206 0 0.31023 0.0985197 0.139147 0 0.325744 0.098926 0.138119 0 0.340807 0.0986782 0.136813 0 0.353195 0.0979803 0.13599 0 0.37191 0.0970551 0.136952 0 0.388185 0.0967488 0.137997 0 0.408388 0.0967682 0.139315 0 0.424348 0.0971235 0.139427 0 0.450448 0.0947194 0.1405 0 0.461739 0.0989973 0.14031 0 0.474257 0.104004 0.140103 0 0.506762 0.102912 0.14073 0 0.53532 0.100702 0.14113 0 0.557052 0.100547 0.140483 0 0.597062 0.0954412 0.140854 0 0.693403 0.0957529 0.144387 0 0.815087 0.085859 0.154537 0 0.845873 0.0947784 0.124446 0 0.858157 0.0972398 0.10711 0 0.101656 0.0997812 0.139465 0 0.101656 0.0997812 0.139465 0 0.101656 0.0997812 0.139465 0 0.107865 0.0992679 0.140236 0 0.123828 0.0971652 0.143248 0 0.145931 0.0951137 0.143995 0 0.157458 0.0959869 0.14247 0 0.166582 0.0971128 0.138427 0 0.19191 0.102348 0.133955 0 0.2261 0.10447 0.135796 0 0.246085 0.102036 0.138438 0 0.269307 0.100345 0.140939 0 0.293471 0.0976688 0.141206 0 0.31023 0.0985197 0.139147 0 0.325744 0.098926 0.138119 0 0.340807 0.0986782 0.136813 0 0.353195 0.0979803 0.13599 0 0.37191 0.0970551 0.136952 0 0.388185 0.0967488 0.137997 0 0.408388 0.0967682 0.139315 0 0.424348 0.0971235 0.139427 0 0.450448 0.0947194 0.1405 0 0.461739 0.0989973 0.14031 0 0.474257 0.104004 0.140103 0 0.506762 0.102912 0.14073 0 0.53532 0.100702 0.14113 0 0.557052 0.100547 0.140483 0 0.597062 0.0954413 0.140854 0 0.693403 0.0957529 0.144387 0 0.815087 0.085859 0.154537 0 0.845873 0.0947784 0.124446 0 0.858157 0.0972398 0.10711 0 0.100867 0.106331 0.139005 0 0.100867 0.106331 0.139005 0 0.100867 0.106331 0.139005 0 0.107264 0.105698 0.139991 0 0.121184 0.104264 0.142464 0 0.146699 0.101887 0.144483 0 0.158447 0.103444 0.143216 0 0.168802 0.106308 0.138412 0 0.193262 0.113688 0.13443 0 0.225511 0.113283 0.13529 0 0.245076 0.1105 0.138008 0 0.268051 0.10739 0.140722 0 0.293671 0.105928 0.141597 0 0.310538 0.106131 0.139516 0 0.325652 0.105983 0.138013 0 0.34059 0.10561 0.13663 0 0.352822 0.105448 0.13579 0 0.371709 0.105041 0.136806 0 0.388183 0.104669 0.137863 0 0.408776 0.104587 0.139141 0 0.42348 0.105365 0.139157 0 0.450302 0.104043 0.14044 0 0.463531 0.107869 0.140578 0 0.474431 0.113557 0.140217 0 0.504343 0.112077 0.140512 0 0.536676 0.10847 0.141121 0 0.556686 0.109829 0.140287 0 0.599099 0.104221 0.140706 0 0.693895 0.100319 0.146364 0 0.815752 0.0953999 0.154236 0 0.847682 0.104691 0.125406 0 0.859747 0.106481 0.108154 0 0.100073 0.118847 0.139217 0 0.100073 0.118847 0.139217 0 0.100073 0.118847 0.139217 0 0.106518 0.119428 0.139519 0 0.121597 0.122769 0.142568 40988.5 0.148408 0.123088 0.145796 40837 0.162239 0.125466 0.144947 0 0.173512 0.128104 0.139722 0 0.193592 0.13253 0.134814 0 0.222804 0.12859 0.134557 0 0.241639 0.124734 0.136026 0 0.266393 0.121723 0.140621 0 0.293054 0.120302 0.141814 0 0.310741 0.120432 0.140012 0 0.325998 0.121335 0.138129 0 0.340864 0.121927 0.13614 0 0.352343 0.122052 0.135202 0 0.371346 0.121728 0.136514 0 0.388161 0.122261 0.13771 0 0.409551 0.123019 0.139092 0 0.42543 0.124807 0.139454 0 0.448962 0.124375 0.140502 0 0.467168 0.12646 0.14106 0 0.478204 0.131368 0.140561 0 0.500447 0.12985 0.140086 0 0.539126 0.122973 0.141207 0 0.555111 0.124028 0.140297 0 0.595488 0.118611 0.141024 0 0.693681 0.114304 0.147493 0 0.817864 0.120057 0.151995 0 0.84992 0.120279 0.127922 0 0.861477 0.120382 0.111006 0 0.102316 0.144959 0.140419 0 0.102316 0.144959 0.140419 0 0.102316 0.144959 0.140419 0 0.110445 0.146312 0.140894 0 0.125247 0.15048 0.143247 40886.3 0.14699 0.150445 0.145173 198168 0.163475 0.147188 0.145882 29633.1 0.174427 0.145277 0.141421 0 0.19292 0.144956 0.135202 0 0.219917 0.142012 0.134707 0 0.239825 0.141231 0.134414 0 0.264416 0.139964 0.139361 0 0.293 0.139037 0.141795 0 0.311547 0.139883 0.140467 0 0.327416 0.141471 0.138748 0 0.342255 0.142982 0.136418 0 0.353085 0.143805 0.134974 0 0.371447 0.143899 0.13635 0 0.388615 0.144406 0.138005 0 0.410571 0.144275 0.139811 0 0.427067 0.14456 0.140397 0 0.447034 0.144407 0.141267 0 0.469331 0.141743 0.142148 0 0.479925 0.143622 0.141443 0 0.497688 0.143509 0.140559 0 0.536325 0.137321 0.141536 0 0.553411 0.139981 0.140446 0 0.590514 0.137368 0.140751 0 0.694749 0.142765 0.14566 0 0.818023 0.13914 0.150605 0 0.851792 0.136597 0.129973 0 0.863471 0.136703 0.113178 0 0.103555 0.159978 0.141168 0 0.103555 0.159978 0.141168 0 0.103555 0.159978 0.141168 0 0.111962 0.159999 0.141701 0 0.126543 0.160869 0.143721 0 0.143435 0.159504 0.144164 29754.5 0.160216 0.155342 0.144895 25848 0.172132 0.152968 0.140409 0 0.192979 0.151104 0.135073 0 0.21957 0.151044 0.13502 0 0.24015 0.151332 0.134352 0 0.263441 0.150997 0.138328 0 0.293433 0.150548 0.142028 0 0.312263 0.151448 0.140844 0 0.328176 0.152076 0.139252 0 0.343017 0.153059 0.136934 0 0.353545 0.153063 0.135574 0 0.371407 0.153006 0.136893 0 0.388325 0.15249 0.138783 0 0.410557 0.151834 0.14073 0 0.427584 0.152116 0.141197 0 0.444773 0.151312 0.141437 0 0.469795 0.147507 0.142583 0 0.480696 0.149276 0.141946 0 0.496803 0.151618 0.140437 0 0.533774 0.148067 0.140792 0 0.55475 0.149764 0.139908 0 0.588773 0.149248 0.140284 0 0.695069 0.151134 0.145423 0 0.818141 0.146403 0.150298 0 0.851976 0.144319 0.129404 0 0.86394 0.144339 0.112786 0 0.10347 0.168769 0.141137 0 0.10347 0.168769 0.141137 0 0.10347 0.168769 0.141137 0 0.111704 0.168545 0.142039 0 0.126658 0.167889 0.143925 0 0.140539 0.166545 0.143507 0 0.156605 0.162648 0.143979 0 0.170063 0.159741 0.139915 0 0.193084 0.156549 0.134874 0 0.219925 0.159962 0.135007 0 0.240388 0.161366 0.134736 0 0.262987 0.162719 0.137669 0 0.293617 0.161186 0.142192 0 0.312281 0.16086 0.14126 0 0.328382 0.160186 0.140054 0 0.34305 0.15997 0.138063 0 0.353913 0.160294 0.136818 0 0.371131 0.16062 0.137708 0 0.38788 0.159728 0.139513 0 0.410634 0.159284 0.141512 0 0.427723 0.159737 0.1415 0 0.442834 0.160293 0.141038 0 0.470221 0.156844 0.142096 0 0.482797 0.159319 0.14138 0 0.496454 0.162785 0.13976 0 0.531137 0.160368 0.140051 0 0.557024 0.160804 0.139571 0 0.58704 0.162133 0.139869 0 0.695237 0.159693 0.145299 0 0.814112 0.157759 0.147184 0 0.852268 0.154887 0.128629 0 0.864339 0.155509 0.1119 0 0.100549 0.19533 0.139303 0 0.100549 0.19533 0.139303 0 0.100549 0.19533 0.139303 0 0.107566 0.194615 0.139984 0 0.123583 0.192621 0.143248 0 0.139545 0.191885 0.14417 0 0.149762 0.192879 0.143024 0 0.163462 0.191499 0.139358 0 0.195415 0.188761 0.13262 0 0.223034 0.189879 0.138194 0 0.240861 0.190484 0.137484 0 0.262598 0.191675 0.139077 0 0.290161 0.191861 0.141149 0 0.311118 0.192653 0.141714 0 0.330142 0.193844 0.141653 0 0.34665 0.196762 0.139145 0 0.358416 0.199163 0.137405 0 0.374656 0.201569 0.137425 0 0.389057 0.200995 0.137854 0 0.409864 0.199424 0.138916 0 0.427274 0.197926 0.139264 0 0.444344 0.197266 0.139403 0 0.463667 0.197019 0.13983 0 0.488959 0.195527 0.140938 0 0.501193 0.199651 0.13974 0 0.524278 0.200479 0.139279 0 0.56402 0.195429 0.140055 0 0.584647 0.198224 0.139573 0 0.694311 0.194924 0.143631 0 0.800948 0.200504 0.138035 0 0.854226 0.195866 0.125431 0 0.866254 0.196431 0.108689 0 0.0978351 0.224757 0.139808 0 0.0978351 0.224757 0.139808 0 0.0978351 0.224757 0.139808 0 0.105934 0.225743 0.139709 0 0.121847 0.227042 0.14302 0 0.142066 0.22702 0.145274 0 0.153215 0.228001 0.144589 0 0.161792 0.22927 0.141746 0 0.19471 0.228346 0.132542 0 0.224537 0.229305 0.134112 0 0.244775 0.229584 0.137662 0 0.268066 0.233133 0.138338 0 0.29365 0.236675 0.139991 0 0.311935 0.237943 0.139485 0 0.329041 0.235964 0.139338 0 0.346769 0.233637 0.139123 0 0.358593 0.232364 0.138491 0 0.374034 0.231878 0.138381 0 0.387487 0.231602 0.138918 0 0.407971 0.231395 0.139493 0 0.425559 0.231049 0.139045 0 0.444357 0.230268 0.139454 0 0.462067 0.23035 0.139961 0 0.489768 0.228472 0.14107 0 0.507398 0.230684 0.140318 0 0.522554 0.234193 0.139081 0 0.556788 0.230729 0.13918 0 0.583791 0.231345 0.138782 0 0.68352 0.235182 0.138114 0 0.804316 0.229759 0.143649 0 0.846499 0.234055 0.119088 0 0.860734 0.23384 0.103582 0 0.0986606 0.245557 0.138777 0 0.0986606 0.245557 0.138777 0 0.0986607 0.245557 0.138777 0 0.106267 0.245797 0.138748 0 0.121926 0.245803 0.14162 0 0.14231 0.244971 0.144665 0 0.154884 0.2453 0.143659 0 0.163367 0.246405 0.141175 0 0.194423 0.245401 0.133492 0 0.226748 0.248092 0.132871 0 0.245851 0.249679 0.137116 0 0.270468 0.25029 0.139882 0 0.294493 0.253281 0.140283 0 0.311102 0.252434 0.139516 0 0.32663 0.251211 0.138425 0 0.344202 0.249053 0.137934 0 0.356794 0.247454 0.13748 0 0.373989 0.246321 0.138867 0 0.387744 0.246608 0.139303 0 0.407852 0.2467 0.139977 0 0.425329 0.246643 0.139477 0 0.443944 0.246658 0.139097 0 0.462824 0.246718 0.139728 0 0.487234 0.245859 0.140702 0 0.510032 0.246425 0.140387 0 0.522363 0.25075 0.138887 0 0.552551 0.248993 0.138686 0 0.586924 0.247191 0.138776 0 0.678949 0.25507 0.136129 0 0.795438 0.249819 0.137034 0 0.849554 0.246398 0.124294 0 0.863772 0.246021 0.108802 0 0.0985862 0.259587 0.138455 0 0.0985862 0.259587 0.138455 0 0.0985862 0.259587 0.138455 0 0.106137 0.259847 0.138675 0 0.121877 0.26003 0.141281 0 0.142253 0.260768 0.144694 0 0.155781 0.261428 0.14409 0 0.165315 0.262589 0.141094 0 0.193107 0.263789 0.134122 0 0.228483 0.264548 0.134629 0 0.245883 0.266576 0.136694 0 0.271182 0.265011 0.140476 0 0.294896 0.264607 0.140911 0 0.310367 0.264886 0.139154 0 0.325525 0.264231 0.138402 0 0.342066 0.26345 0.136722 0 0.355423 0.262432 0.136469 0 0.373448 0.261235 0.138167 0 0.38811 0.260896 0.139488 0 0.407665 0.260915 0.140111 0 0.425294 0.260954 0.139826 0 0.44417 0.261109 0.139322 0 0.463445 0.261225 0.13953 0 0.484909 0.261235 0.140376 0 0.512321 0.260146 0.140565 0 0.525132 0.264548 0.138998 0 0.549724 0.265169 0.138391 0 0.589842 0.261729 0.138954 0 0.679525 0.269619 0.136498 0 0.788074 0.266406 0.131715 0 0.85218 0.257008 0.128809 0 0.866382 0.256862 0.113245 0 0.10007 0.282192 0.1381 0 0.10007 0.282192 0.1381 0 0.10007 0.282192 0.1381 0 0.107352 0.282917 0.138735 0 0.122664 0.284125 0.141338 0 0.143027 0.284852 0.144548 0 0.157045 0.284867 0.145039 0 0.168123 0.285577 0.141393 0 0.191121 0.28828 0.134647 0 0.230195 0.287257 0.137405 0 0.245741 0.287881 0.135458 0 0.266554 0.286138 0.139185 0 0.295933 0.282995 0.141429 0 0.310695 0.284245 0.139347 0 0.325182 0.285397 0.137591 0 0.341594 0.28523 0.136853 0 0.353962 0.284876 0.135683 0 0.372166 0.28398 0.136621 0 0.387691 0.283256 0.138612 0 0.407679 0.283204 0.140525 0 0.425419 0.2833 0.140339 0 0.4446 0.283634 0.139995 0 0.463938 0.284487 0.139597 0 0.483751 0.285971 0.13983 0 0.516435 0.283494 0.140929 0 0.530057 0.288255 0.139439 0 0.54885 0.291036 0.13817 0 0.593028 0.286112 0.138975 0 0.680447 0.291674 0.137204 0 0.787156 0.292824 0.129839 0 0.843567 0.286642 0.123074 0 0.858154 0.286377 0.107931 0 0.101499 0.30919 0.137861 0 0.101499 0.30919 0.137861 0 0.101499 0.30919 0.137861 0 0.108714 0.309296 0.13836 0 0.123193 0.310025 0.141287 0 0.143735 0.310488 0.144135 0 0.157867 0.310843 0.144745 0 0.169685 0.311445 0.14202 0 0.192447 0.31444 0.135086 0 0.22923 0.310445 0.138074 0 0.246418 0.30941 0.136279 0 0.263848 0.309033 0.137459 0 0.295468 0.306468 0.14055 0 0.312193 0.305761 0.140147 0 0.326407 0.30668 0.138346 0 0.341676 0.307415 0.136526 0 0.353591 0.307842 0.135664 0 0.372041 0.308191 0.136536 0 0.387174 0.308927 0.137188 0 0.408112 0.308785 0.13992 0 0.426103 0.308658 0.140888 0 0.445185 0.309063 0.14058 0 0.465129 0.309592 0.140367 0 0.485521 0.310814 0.140009 0 0.512814 0.309626 0.140261 0 0.534222 0.310284 0.139864 0 0.547424 0.314034 0.138004 0 0.586773 0.310008 0.138231 0 0.681874 0.312946 0.137637 0 0.79201 0.316433 0.131564 0 0.833043 0.31534 0.115194 0 0.847635 0.314961 0.100061 0 0.101658 0.326767 0.137883 0 0.101658 0.326767 0.137883 0 0.101658 0.326767 0.137883 0 0.109308 0.327035 0.138087 0 0.124266 0.328228 0.140864 0 0.144281 0.329208 0.14399 0 0.158746 0.329711 0.144289 0 0.170439 0.330035 0.14206 0 0.192878 0.32972 0.134694 0 0.227781 0.326283 0.137327 0 0.24625 0.325073 0.137634 0 0.263776 0.325292 0.137102 0 0.293074 0.324219 0.13998 0 0.311722 0.322886 0.139246 0 0.327715 0.322969 0.139041 0 0.343281 0.324703 0.137271 0 0.354949 0.325884 0.136053 0 0.372672 0.327065 0.136751 0 0.388086 0.327792 0.137601 0 0.407914 0.328161 0.138916 0 0.425533 0.327601 0.140478 0 0.445223 0.326866 0.141165 0 0.465503 0.326387 0.140958 0 0.486594 0.326555 0.140655 0 0.509575 0.326942 0.139662 0 0.536653 0.325858 0.139854 0 0.549249 0.330002 0.138122 0 0.582121 0.328798 0.137577 0 0.686482 0.328124 0.137934 0 0.794253 0.334009 0.133153 0 0.825323 0.337829 0.109517 0 0.83974 0.337518 0.0942259 0 0.102314 0.347644 0.138869 0 0.102314 0.347644 0.138869 0 0.102314 0.347644 0.138869 0 0.110172 0.348037 0.138745 0 0.125697 0.34897 0.140496 0 0.144412 0.34935 0.14366 0 0.157875 0.348204 0.143682 0 0.168828 0.34751 0.141084 0 0.193454 0.346097 0.134178 0 0.225062 0.344618 0.136333 0 0.246405 0.343874 0.138198 0 0.263757 0.344388 0.137687 0 0.291943 0.345047 0.140618 0 0.311868 0.344869 0.138799 0 0.327298 0.344774 0.138156 0 0.345274 0.344196 0.138318 0 0.356844 0.34522 0.137126 0 0.373649 0.346371 0.137169 0 0.3888 0.346678 0.137912 0 0.40781 0.347333 0.13854 0 0.424298 0.34708 0.139114 0 0.444255 0.34565 0.140772 0 0.465173 0.344847 0.141285 0 0.487211 0.344887 0.14108 0 0.507877 0.346561 0.139739 0 0.539668 0.344578 0.139672 0 0.552974 0.348401 0.138408 0 0.578373 0.349392 0.137305 0 0.692485 0.347784 0.138531 0 0.796338 0.352674 0.134945 0 0.824369 0.357559 0.107817 0 0.83584 0.358257 0.0906056 0 0.102987 0.364098 0.139566 0 0.102987 0.364098 0.139566 0 0.102987 0.364098 0.139566 0 0.110825 0.364383 0.139381 0 0.12548 0.363608 0.140683 0 0.143515 0.362269 0.143007 0 0.156451 0.36131 0.143142 0 0.167859 0.360494 0.140362 0 0.193638 0.359182 0.13406 0 0.223137 0.360115 0.135817 0 0.246474 0.359055 0.138012 0 0.263985 0.359634 0.138631 0 0.292505 0.360468 0.140986 0 0.312219 0.360729 0.139386 0 0.327201 0.360548 0.137883 0 0.34444 0.359511 0.136935 0 0.357472 0.358746 0.137388 0 0.374464 0.359367 0.137659 0 0.389347 0.360131 0.137973 0 0.408381 0.361039 0.138574 0 0.423828 0.361785 0.138136 0 0.442953 0.360784 0.139564 0 0.465021 0.359228 0.141501 0 0.48742 0.359281 0.14135 0 0.508991 0.360426 0.140301 0 0.540057 0.35846 0.139689 0 0.555507 0.361542 0.138554 0 0.577471 0.363413 0.13739 0 0.697018 0.362762 0.138885 0 0.798052 0.365006 0.136258 0 0.826817 0.370344 0.108548 0 0.838454 0.371468 0.0912327 0 0.102616 0.380123 0.140188 0 0.102616 0.380123 0.140188 0 0.102616 0.380123 0.140188 0 0.110039 0.379528 0.139661 0 0.124394 0.378319 0.140878 0 0.142471 0.37698 0.142997 0 0.155056 0.376174 0.142847 0 0.166879 0.375574 0.140166 0 0.193781 0.375264 0.134491 0 0.221386 0.377074 0.135522 0 0.246822 0.375664 0.138096 0 0.264654 0.376411 0.139114 0 0.293293 0.376144 0.140987 0 0.311826 0.376401 0.140302 0 0.326993 0.376457 0.13763 0 0.342901 0.375889 0.136098 0 0.356165 0.374865 0.135538 0 0.375425 0.373732 0.138154 0 0.390371 0.374471 0.138547 0 0.409144 0.376063 0.138478 0 0.424583 0.377013 0.138435 0 0.441633 0.377561 0.138517 0 0.463479 0.375884 0.140517 0 0.48755 0.374588 0.141861 0 0.510043 0.375246 0.140936 0 0.538309 0.374722 0.140023 0 0.558266 0.377106 0.138585 0 0.577024 0.381169 0.137426 0 0.700443 0.378016 0.138983 0 0.800547 0.379326 0.137947 0 0.830163 0.386904 0.109537 0 0.841694 0.387797 0.0922687 0 0.101683 0.392316 0.140683 0 0.101683 0.392316 0.140683 0 0.101683 0.392316 0.140683 0 0.109106 0.391722 0.140156 0 0.123581 0.390526 0.141159 0 0.141658 0.38937 0.143234 0 0.154804 0.389309 0.143033 0 0.166674 0.389068 0.140218 0 0.193315 0.389 0.134349 0 0.22154 0.390359 0.135399 0 0.247095 0.388732 0.137887 0 0.265081 0.389011 0.139037 0 0.293444 0.388808 0.140235 0 0.311396 0.388964 0.14095 0 0.32728 0.388659 0.138226 0 0.341861 0.388914 0.135595 0 0.354975 0.388066 0.134958 0 0.374724 0.386563 0.137185 0 0.391201 0.386284 0.139145 0 0.41018 0.387918 0.138959 0 0.425356 0.389036 0.138491 0 0.441643 0.390031 0.138588 0 0.462314 0.389223 0.13968 0 0.487553 0.387412 0.141983 0 0.511078 0.388348 0.141329 0 0.537038 0.388811 0.140233 0 0.560539 0.39026 0.138756 0 0.576509 0.395513 0.137228 0 0.70293 0.389272 0.138903 0 0.802556 0.391654 0.139554 0 0.832393 0.398703 0.110461 0 0.843619 0.398744 0.0933543 0 0.100812 0.407225 0.140928 0 0.100812 0.407225 0.140928 0 0.100812 0.407225 0.140928 0 0.10815 0.406846 0.140717 0 0.123061 0.406248 0.141503 0 0.141311 0.406068 0.14396 0 0.154775 0.405562 0.143234 0 0.166124 0.405336 0.140632 0 0.192575 0.404536 0.133805 0 0.222894 0.405204 0.13505 0 0.245462 0.404566 0.137368 0 0.265211 0.40406 0.138983 0 0.291932 0.404296 0.140355 0 0.311461 0.404163 0.14077 0 0.327679 0.403987 0.139377 0 0.3423 0.404374 0.136521 0 0.353917 0.404464 0.134785 0 0.37317 0.4033 0.136226 0 0.391164 0.401755 0.13882 0 0.411713 0.402456 0.139798 0 0.426389 0.404449 0.138624 0 0.44267 0.406103 0.13851 0 0.461411 0.407136 0.138793 0 0.486543 0.405946 0.140982 0 0.512491 0.405455 0.14181 0 0.535518 0.40713 0.140365 0 0.563645 0.406789 0.139262 0 0.57834 0.41197 0.13685 0 0.706356 0.404592 0.138696 0 0.799968 0.407576 0.13925 0 0.836901 0.418749 0.112229 0 0.848387 0.419585 0.0953752 0 0.100401 0.42263 0.140382 0 0.100401 0.42263 0.140382 0 0.100401 0.42263 0.140382 0 0.107852 0.422573 0.140435 0 0.122787 0.422353 0.141788 0 0.140564 0.421742 0.144383 0 0.154214 0.421022 0.143436 0 0.165761 0.420621 0.140777 0 0.192373 0.420126 0.133303 0 0.224166 0.42017 0.134847 0 0.243799 0.421082 0.136883 0 0.265356 0.420148 0.138954 0 0.29117 0.421265 0.140672 0 0.311989 0.420935 0.139886 0 0.3273 0.421285 0.140005 0 0.342858 0.421319 0.137271 0 0.353854 0.42165 0.13545 0 0.371654 0.421823 0.135396 0 0.389607 0.420588 0.137846 0 0.413412 0.419304 0.140719 0 0.428538 0.42181 0.139542 0 0.444224 0.424863 0.1383 0 0.462388 0.426769 0.138709 0 0.485414 0.426822 0.139533 0 0.51238 0.424561 0.141142 0 0.534385 0.424826 0.140109 0 0.566651 0.422957 0.139398 0 0.581985 0.429038 0.136332 0 0.704389 0.42464 0.138155 0 0.798031 0.429151 0.138825 0 0.837927 0.430134 0.116386 0 0.847769 0.426484 0.100303 0 0.100239 0.439987 0.139565 0 0.100239 0.439987 0.139565 0 0.100239 0.439987 0.139566 0 0.107596 0.439909 0.139833 0 0.12241 0.439614 0.141464 0 0.139689 0.439318 0.145005 0 0.153495 0.439011 0.144263 0 0.165779 0.438743 0.141113 0 0.192463 0.438783 0.132831 0 0.225597 0.439141 0.135122 0 0.243198 0.440763 0.135795 0 0.26589 0.439655 0.138514 0 0.292131 0.440529 0.140974 0 0.312398 0.440806 0.139392 0 0.327524 0.441604 0.139366 0 0.343888 0.441863 0.13801 0 0.354901 0.442422 0.136308 0 0.371965 0.443215 0.136097 0 0.388368 0.44367 0.136759 0 0.413054 0.442281 0.140002 0 0.43118 0.441931 0.140316 0 0.446645 0.443899 0.138809 0 0.462875 0.445808 0.137775 0 0.484499 0.446023 0.138198 0 0.510937 0.444505 0.138888 0 0.535887 0.444031 0.139701 0 0.566425 0.443555 0.138847 0 0.586247 0.448216 0.136766 0 0.697949 0.443375 0.137517 0 0.794605 0.435745 0.141314 0 0.841752 0.449436 0.120065 0 0.853934 0.452145 0.102846 0 0.100123 0.456473 0.138785 0 0.100123 0.456473 0.138785 0 0.100123 0.456473 0.138785 0 0.107603 0.456569 0.139078 0 0.122533 0.457084 0.140974 0 0.140053 0.457617 0.144456 0 0.153437 0.457938 0.14484 0 0.165929 0.457878 0.141651 0 0.192215 0.458034 0.133327 0 0.226441 0.457935 0.135249 0 0.244519 0.459909 0.135412 0 0.264777 0.460159 0.137774 0 0.293614 0.460591 0.140966 0 0.312132 0.461805 0.139826 0 0.328469 0.462379 0.138277 0 0.344153 0.463345 0.137745 0 0.355825 0.463623 0.136384 0 0.372265 0.463927 0.136384 0 0.388347 0.463964 0.1368 0 0.411262 0.463116 0.138202 0 0.430837 0.461273 0.139197 0 0.448393 0.461088 0.138812 0 0.464291 0.46316 0.137357 0 0.484801 0.464801 0.137143 0 0.510132 0.46541 0.137364 0 0.536639 0.464374 0.138681 0 0.56439 0.463343 0.139076 0 0.58953 0.46491 0.137717 0 0.691662 0.44976 0.13989 0 0.79689 0.458652 0.142242 0 0.845697 0.467179 0.121551 0 0.857152 0.467607 0.103238 0 0.100518 0.477081 0.138128 0 0.100518 0.477081 0.138128 0 0.100518 0.477081 0.138128 0 0.108484 0.477426 0.138185 0 0.123207 0.478369 0.140401 0 0.14073 0.479215 0.143676 0 0.154139 0.479927 0.144151 0 0.166128 0.480516 0.142276 0 0.192236 0.481148 0.134082 0 0.226839 0.480987 0.134903 0 0.246871 0.482581 0.135442 0 0.263959 0.48446 0.136158 0 0.295001 0.483525 0.140297 0 0.312664 0.484795 0.139664 0 0.329409 0.484721 0.136944 0 0.344104 0.48539 0.136144 0 0.356611 0.485269 0.135181 0 0.372306 0.485403 0.135653 0 0.38789 0.484677 0.136693 0 0.409825 0.484228 0.13748 0 0.429022 0.483227 0.137911 0 0.448508 0.481923 0.138556 0 0.466481 0.482489 0.138282 0 0.485874 0.484902 0.137456 0 0.510281 0.483994 0.137941 0 0.535089 0.480294 0.13897 0 0.559834 0.47644 0.140696 0 0.58937 0.471266 0.141614 0 0.68821 0.469306 0.140706 0 0.794625 0.487737 0.138121 0 0.845362 0.472645 0.121452 0 0.855108 0.468552 0.103615 0 0.101357 0.503957 0.13791 0 0.101357 0.503957 0.13791 0 0.101357 0.503957 0.13791 0 0.109683 0.504271 0.137607 0 0.124681 0.505413 0.139474 0 0.141865 0.506548 0.142656 0 0.155116 0.507226 0.143197 0 0.167141 0.508059 0.141348 0 0.193262 0.508962 0.133815 0 0.226372 0.508668 0.134131 0 0.249118 0.508269 0.135297 0 0.264039 0.509292 0.134372 0 0.294906 0.507381 0.138683 0 0.314298 0.507874 0.139185 0 0.328302 0.50873 0.137208 0 0.344653 0.508583 0.134838 0 0.355964 0.508922 0.134945 0 0.372575 0.508891 0.135073 0 0.386893 0.507587 0.136942 0 0.408469 0.504334 0.139389 0 0.426595 0.501232 0.139827 0 0.446055 0.498101 0.140384 0 0.46522 0.49561 0.141548 0 0.485535 0.492928 0.142332 0 0.507942 0.489903 0.142253 0 0.532564 0.490593 0.14189 0 0.555286 0.490987 0.141641 0 0.591296 0.487054 0.143976 0 0.691052 0.515321 0.136684 0 0.770007 0.500076 0.129636 0 0.845776 0.482264 0.123307 0 0.854885 0.476802 0.106139 0 0.102573 0.533617 0.136899 0 0.102573 0.533617 0.136899 0 0.102573 0.533617 0.136899 0 0.110587 0.533777 0.136829 0 0.125583 0.533668 0.138383 0 0.142609 0.533676 0.140926 0 0.155472 0.533585 0.141639 0 0.167375 0.533604 0.139839 0 0.193173 0.533688 0.133566 0 0.225107 0.533309 0.134609 0 0.249472 0.531885 0.136556 0 0.264837 0.530389 0.136173 0 0.293816 0.526141 0.139383 0 0.314168 0.52365 0.141701 0 0.326223 0.522297 0.140541 0 0.341766 0.519272 0.13831 0 0.353457 0.517258 0.137618 0 0.369676 0.5151 0.139402 0 0.383501 0.514696 0.140808 0 0.405523 0.514982 0.143059 0 0.424446 0.515104 0.144103 0 0.444366 0.515504 0.143689 0 0.463198 0.515558 0.142836 0 0.484885 0.514539 0.143909 0 0.509536 0.514562 0.143047 0 0.535649 0.525737 0.139918 0 0.562512 0.539788 0.137829 0 0.598187 0.54555 0.13784 0 0.68627 0.527075 0.133922 0 0.751971 0.506337 0.127678 0 0.842631 0.486787 0.12593 0 0.85309 0.48306 0.109558 0 0.102582 0.557813 0.136057 0 0.102582 0.557813 0.136057 0 0.102582 0.557813 0.136057 0 0.110579 0.557804 0.136045 0 0.125044 0.55586 0.138467 0 0.141972 0.553981 0.14116 0 0.154416 0.55249 0.142471 0 0.166023 0.550394 0.141001 0 0.19099 0.546023 0.136203 0 0.221414 0.542364 0.139781 0 0.245805 0.539797 0.141825 0 0.262887 0.541032 0.141323 0 0.289765 0.540861 0.14134 0 0.312858 0.54024 0.14348 0 0.326483 0.541345 0.142203 0 0.340016 0.542417 0.139772 0 0.353339 0.54242 0.137733 0 0.370589 0.543048 0.138585 0 0.385283 0.545397 0.13962 0 0.406171 0.549454 0.140513 0 0.424932 0.551867 0.140757 0 0.447265 0.559412 0.140997 0 0.470326 0.56942 0.1394 0 0.493411 0.57787 0.136926 0 0.517069 0.573858 0.136698 0 0.540638 0.569465 0.135009 0 0.562032 0.564327 0.134232 0 0.587129 0.558415 0.13521 0 0.68443 0.527506 0.139677 0 0.748767 0.50737 0.125416 0 0.836386 0.492353 0.127301 0 0.848038 0.488265 0.111044 0 0.0988855 0.565574 0.141733 0 0.0988855 0.565574 0.141733 0 0.0988855 0.565574 0.141733 0 0.107197 0.564352 0.14125 0 0.122951 0.565064 0.141913 0 0.139505 0.565758 0.1453 0 0.152453 0.566085 0.145703 0 0.164481 0.566695 0.143277 0 0.190687 0.567925 0.136821 0 0.222047 0.568907 0.138562 0 0.244819 0.569637 0.141795 0 0.265294 0.572591 0.141344 0 0.287819 0.577555 0.139229 0 0.314888 0.578743 0.139883 0 0.331236 0.582215 0.138418 0 0.345615 0.589617 0.135265 0 0.357846 0.59685 0.1328 0 0.379237 0.604933 0.131127 0 0.394568 0.605482 0.132863 0 0.413571 0.603526 0.134652 0 0.430003 0.599463 0.135804 0 0.44885 0.594703 0.137425 0 0.469071 0.589543 0.139329 0 0.488685 0.5848 0.139111 0 0.510374 0.579561 0.138707 0 0.537152 0.572707 0.139809 0 0.559651 0.567219 0.138747 0 0.582185 0.560058 0.139057 0 0.683476 0.534554 0.140119 0 0.747374 0.50792 0.127862 0 0.841084 0.522422 0.129251 0 0.865099 0.555826 0.114159 0 0.101089 0.660028 0.139715 0 0.101089 0.660028 0.139715 0 0.101089 0.660028 0.139715 0 0.109035 0.658832 0.13944 0 0.1243 0.656716 0.140927 0 0.140359 0.654505 0.144352 0 0.152202 0.654294 0.145421 0 0.164397 0.653725 0.143387 0 0.19096 0.652284 0.137105 0 0.222914 0.655315 0.136754 0 0.246353 0.657005 0.137317 0 0.264952 0.654029 0.138621 0 0.288454 0.650264 0.140368 0 0.306839 0.65058 0.139953 0 0.322312 0.645236 0.139671 0 0.338236 0.63869 0.138416 0 0.346852 0.635462 0.137487 0 0.359664 0.631453 0.136711 0 0.371963 0.627587 0.136462 0 0.40042 0.642589 0.13618 0 0.422694 0.659893 0.137283 0 0.443063 0.674293 0.138569 0 0.464823 0.677273 0.139322 0 0.489853 0.677876 0.14126 0 0.515917 0.677734 0.142115 0 0.538594 0.67198 0.141546 0 0.558683 0.666995 0.13882 0 0.585693 0.660236 0.135537 0 0.6591 0.642028 0.126836 0 0.747355 0.61961 0.123828 0 0.846675 0.627432 0.12449 0 0.865947 0.649945 0.113546 0 0.101349 0.734749 0.132253 0 0.101349 0.734749 0.132253 0 0.101349 0.734749 0.132253 0 0.107826 0.732323 0.133378 0 0.11861 0.728947 0.140233 0 0.131581 0.724644 0.14668 0 0.141037 0.72099 0.149275 0 0.150942 0.716402 0.148485 0 0.182572 0.734748 0.14155 0 0.217832 0.745623 0.139655 0 0.241692 0.751329 0.140486 0 0.261768 0.746228 0.140629 0 0.283767 0.740929 0.138619 0 0.30459 0.735821 0.13728 0 0.324527 0.733144 0.137618 0 0.33736 0.731373 0.134331 0 0.345972 0.730261 0.132368 0 0.364699 0.726386 0.133257 0 0.378258 0.722696 0.135029 0 0.391939 0.718298 0.137236 0 0.404262 0.714612 0.1369 0 0.42124 0.709665 0.134733 0 0.440591 0.704073 0.131061 0 0.455184 0.699449 0.131935 0 0.475962 0.693088 0.131921 0 0.501691 0.687826 0.132171 0 0.527821 0.684913 0.131314 0 0.558847 0.67709 0.136372 0 0.693827 0.775513 0.139 0 0.767857 0.762559 0.127354 0 0.83918 0.751383 0.123933 0 0.854312 0.751861 0.112855 0 0.0908794 0.796063 0.139468 0 0.0908794 0.796063 0.139468 0 0.0908793 0.796064 0.139468 0 0.100136 0.794177 0.137413 0 0.119839 0.789898 0.133676 0 0.138918 0.787842 0.131999 0 0.146237 0.786524 0.136395 0 0.153419 0.785837 0.137372 0 0.176882 0.791394 0.131726 0 0.215381 0.817579 0.133199 0 0.240079 0.829231 0.136749 0 0.261222 0.832968 0.138728 0 0.277663 0.816295 0.137376 0 0.288099 0.797988 0.133833 0 0.302432 0.786866 0.132787 0 0.316682 0.775655 0.131062 0 0.326843 0.767802 0.13054 0 0.337781 0.755508 0.129352 0 0.345056 0.74463 0.127864 0 0.374868 0.78012 0.131794 0 0.415246 0.844951 0.137766 0 0.434379 0.848417 0.139703 0 0.454768 0.846874 0.140729 0 0.479423 0.843501 0.140386 0 0.503211 0.841299 0.138999 0 0.52957 0.838341 0.139059 0 0.556608 0.83917 0.137898 0 0.584653 0.840042 0.136675 0 0.672028 0.824141 0.132639 0 0.773359 0.851151 0.127781 0 0.844587 0.837706 0.120945 0 0.87088 0.840616 0.115649 0 0.103636 0.913902 0.143627 0 0.103636 0.913902 0.143627 0 0.103636 0.913902 0.143627 0 0.116455 0.918222 0.139677 0 0.132836 0.920122 0.141187 0 0.154134 0.921002 0.140089 0 0.168038 0.921399 0.138428 0 0.181136 0.919244 0.132174 0 0.194632 0.916119 0.132896 0 0.219654 0.908604 0.13395 0 0.236174 0.902957 0.13408 0 0.252832 0.897202 0.134516 0 0.274975 0.889907 0.13517 0 0.290586 0.886954 0.133598 0 0.307968 0.887621 0.13254 0 0.328848 0.884889 0.13274 0 0.344361 0.882955 0.132878 0 0.362739 0.882957 0.132564 0 0.38123 0.889166 0.134853 0 0.400699 0.896213 0.135213 0 0.423041 0.899348 0.136777 0 0.443799 0.903805 0.138604 0 0.460681 0.908161 0.140004 0 0.481767 0.907135 0.140378 0 0.507786 0.906611 0.139295 0 0.530779 0.906942 0.138963 0 0.551776 0.901073 0.138281 0 0.578716 0.892786 0.135768 0 0.681574 0.894412 0.134456 0 0.767936 0.906786 0.127794 0 0.866456 0.878608 0.131835 0 0.878886 0.874673 0.120957 0 0.101312 0.0991943 0.152097 0 0.101312 0.0991943 0.152097 0 0.101312 0.0991943 0.152097 0 0.108261 0.0987917 0.151724 0 0.125278 0.0975281 0.152457 0 0.145708 0.0959845 0.154134 0 0.15417 0.0965147 0.153181 0 0.163854 0.0970374 0.149566 0 0.192439 0.103027 0.147217 0 0.226845 0.102954 0.149887 0 0.247776 0.101742 0.151703 0 0.271073 0.100057 0.15412 0 0.292212 0.0983513 0.152585 0 0.309739 0.0987218 0.151252 0 0.324973 0.0988105 0.150123 0 0.339994 0.0984792 0.148744 0 0.353608 0.0977945 0.148497 0 0.372987 0.0968007 0.149787 0 0.389306 0.0964236 0.151018 0 0.408376 0.0965405 0.151807 0 0.425044 0.0966999 0.151899 0 0.45015 0.0948617 0.152845 0 0.461264 0.0996479 0.152541 0 0.474543 0.104276 0.152181 0 0.507763 0.102815 0.152637 0 0.53488 0.100659 0.152587 0 0.556759 0.100128 0.151635 0 0.595277 0.0953536 0.15175 0 0.689147 0.0988012 0.151394 0 0.812402 0.0879426 0.163258 0 0.840602 0.0952296 0.134673 0 0.852888 0.0977378 0.117316 0 0.101312 0.0991943 0.152097 0 0.101312 0.0991943 0.152097 0 0.101312 0.0991943 0.152097 0 0.108261 0.0987917 0.151724 0 0.125278 0.0975281 0.152457 0 0.145708 0.0959845 0.154134 0 0.15417 0.0965147 0.153181 0 0.163854 0.0970374 0.149566 0 0.192439 0.103027 0.147217 0 0.226845 0.102954 0.149887 0 0.247776 0.101742 0.151703 0 0.271073 0.100057 0.15412 0 0.292212 0.0983513 0.152585 0 0.309739 0.0987218 0.151252 0 0.324973 0.0988105 0.150123 0 0.339994 0.0984792 0.148744 0 0.353608 0.0977945 0.148497 0 0.372987 0.0968007 0.149787 0 0.389306 0.0964236 0.151018 0 0.408376 0.0965405 0.151807 0 0.425044 0.0966999 0.151899 0 0.45015 0.0948617 0.152845 0 0.461264 0.0996479 0.152541 0 0.474543 0.104276 0.152181 0 0.507763 0.102815 0.152637 0 0.53488 0.100659 0.152587 0 0.556759 0.100128 0.151635 0 0.595277 0.0953536 0.15175 0 0.689147 0.0988012 0.151394 0 0.812402 0.0879426 0.163258 0 0.840602 0.0952296 0.134673 0 0.852888 0.0977378 0.117316 0 0.101312 0.0991943 0.152096 0 0.101312 0.0991943 0.152096 0 0.101312 0.0991943 0.152096 0 0.108261 0.0987917 0.151724 0 0.125278 0.0975281 0.152457 0 0.145708 0.0959845 0.154134 0 0.15417 0.0965147 0.153181 0 0.163854 0.0970374 0.149566 0 0.192439 0.103027 0.147217 0 0.226845 0.102954 0.149887 0 0.247776 0.101742 0.151703 0 0.271073 0.100057 0.15412 0 0.292212 0.0983513 0.152585 0 0.309739 0.0987218 0.151252 0 0.324973 0.0988105 0.150123 0 0.339994 0.0984792 0.148744 0 0.353608 0.0977945 0.148497 0 0.372987 0.0968007 0.149787 0 0.389306 0.0964236 0.151018 0 0.408376 0.0965405 0.151807 0 0.425044 0.0966999 0.151899 0 0.45015 0.0948617 0.152845 0 0.461264 0.0996479 0.152541 0 0.474543 0.104276 0.152181 0 0.507763 0.102815 0.152637 0 0.53488 0.100659 0.152587 0 0.556759 0.100128 0.151635 0 0.595277 0.0953536 0.15175 0 0.689147 0.0988012 0.151394 0 0.812402 0.0879426 0.163258 0 0.840602 0.0952296 0.134673 0 0.852888 0.0977378 0.117316 0 0.100068 0.105922 0.152063 0 0.100068 0.105922 0.152063 0 0.100068 0.105922 0.152063 0 0.107805 0.105196 0.15128 0 0.124435 0.103648 0.152895 0 0.146276 0.102924 0.15524 0 0.154865 0.104468 0.154006 0 0.165255 0.106638 0.149963 0 0.193925 0.114224 0.147316 0 0.226401 0.111716 0.149197 0 0.247053 0.110033 0.151534 0 0.269938 0.107082 0.15404 0 0.292461 0.106559 0.153063 0 0.30965 0.106264 0.151199 0 0.324754 0.10578 0.149928 0 0.339839 0.105389 0.14863 0 0.353286 0.105158 0.148377 0 0.372788 0.104805 0.149635 0 0.389212 0.104406 0.150794 0 0.40877 0.104358 0.151639 0 0.423925 0.105337 0.151652 0 0.451416 0.104122 0.153029 0 0.463155 0.108437 0.152879 0 0.47468 0.11379 0.152361 0 0.505008 0.111631 0.152378 0 0.536212 0.108262 0.152681 0 0.556349 0.109499 0.151378 0 0.597274 0.103986 0.151583 0 0.689852 0.103291 0.153504 0 0.813169 0.0948059 0.164421 0 0.842433 0.105093 0.135757 0 0.854598 0.107252 0.118417 0 0.0979135 0.119628 0.151978 0 0.0979135 0.119628 0.151978 0 0.0979135 0.119628 0.151978 0 0.107085 0.119747 0.150904 0 0.124428 0.122889 0.152717 0 0.148617 0.12459 0.157537 0 0.158797 0.1267 0.156775 0 0.168932 0.129154 0.152004 0 0.194615 0.131808 0.14643 0 0.22332 0.127468 0.147509 0 0.24471 0.123057 0.151137 0 0.268568 0.121546 0.153969 0 0.29217 0.120484 0.153635 0 0.309612 0.120729 0.151433 0 0.324585 0.121377 0.149535 0 0.340041 0.121578 0.148134 0 0.352954 0.121613 0.147969 0 0.372536 0.121854 0.149421 0 0.389337 0.122364 0.15061 0 0.40999 0.123184 0.151707 0 0.425598 0.125062 0.152035 0 0.450067 0.124396 0.153139 0 0.466832 0.127021 0.153482 0 0.477318 0.131192 0.152642 0 0.500425 0.130153 0.151709 0 0.53893 0.123495 0.15269 0 0.554972 0.12463 0.151279 0 0.596139 0.118848 0.152042 0 0.691395 0.113643 0.157911 0 0.815861 0.117257 0.164087 0 0.844876 0.121336 0.138092 0 0.856415 0.121425 0.121167 0 0.101291 0.145642 0.152964 0 0.101291 0.145642 0.152964 0 0.101291 0.145642 0.152964 0 0.110022 0.147369 0.151668 0 0.127388 0.150846 0.152458 0 0.149457 0.149687 0.158851 29896.7 0.161027 0.147278 0.159164 25943.6 0.169757 0.146342 0.154337 0 0.193129 0.144702 0.144774 0 0.21987 0.142103 0.145836 0 0.242666 0.140063 0.14899 0 0.267928 0.138961 0.153952 0 0.292185 0.139053 0.153761 0 0.310432 0.140448 0.152088 0 0.325862 0.141952 0.149948 0 0.341052 0.143328 0.147888 0 0.353545 0.143758 0.147763 0 0.373015 0.143991 0.149626 0 0.389951 0.144714 0.150961 0 0.411037 0.145447 0.152063 0 0.427377 0.145508 0.152716 0 0.448104 0.14475 0.15367 0 0.469047 0.142469 0.154276 0 0.479314 0.144394 0.153381 0 0.497525 0.144052 0.15225 0 0.537069 0.137651 0.153289 0 0.553255 0.138893 0.152273 0 0.590385 0.136573 0.151901 0 0.692955 0.140757 0.157086 0 0.816393 0.138018 0.16232 0 0.846811 0.136816 0.141247 0 0.858428 0.137036 0.124266 0 0.103001 0.160036 0.153119 0 0.103001 0.160036 0.153119 0 0.103001 0.160036 0.153119 0 0.111539 0.160537 0.15221 0 0.128029 0.161277 0.151955 0 0.145719 0.158148 0.157308 25981.6 0.157973 0.155132 0.158784 114920 0.169083 0.153017 0.155353 17337.6 0.193085 0.150919 0.144769 0 0.219698 0.151004 0.145747 0 0.242252 0.150496 0.147647 0 0.267704 0.149895 0.153467 0 0.292691 0.150913 0.154005 0 0.311203 0.152034 0.152627 0 0.326625 0.152686 0.150511 0 0.341575 0.153616 0.148184 0 0.353871 0.154279 0.147756 0 0.37317 0.154067 0.149975 0 0.389963 0.15362 0.151692 0 0.410948 0.152713 0.152916 0 0.427818 0.153022 0.153432 0 0.445706 0.151603 0.1538 0 0.469566 0.148238 0.154772 0 0.480071 0.150024 0.153897 0 0.496396 0.150573 0.152648 0 0.534034 0.14695 0.15275 0 0.554103 0.148999 0.15169 0 0.588705 0.148635 0.151454 0 0.693592 0.150597 0.156552 0 0.816394 0.145308 0.16185 0 0.847615 0.143846 0.141699 0 0.859241 0.143983 0.12485 0 0.103314 0.168598 0.153143 0 0.103314 0.168598 0.153143 0 0.103314 0.168598 0.153143 0 0.111902 0.168741 0.15256 0 0.127584 0.167744 0.151931 0 0.142704 0.165218 0.155697 0 0.154489 0.162392 0.157791 17366.2 0.167546 0.159448 0.155187 17012.5 0.192859 0.156914 0.145347 0 0.219969 0.159983 0.145621 0 0.241806 0.16145 0.146584 0 0.267292 0.161467 0.152476 0 0.293005 0.161485 0.154273 0 0.311444 0.161771 0.153088 0 0.32702 0.161602 0.151235 0 0.341745 0.161451 0.149102 0 0.353949 0.161803 0.14863 0 0.37278 0.161222 0.150729 0 0.389575 0.160447 0.15247 0 0.411006 0.160171 0.153685 0 0.427429 0.159313 0.153839 0 0.443328 0.158733 0.153864 0 0.470464 0.155404 0.154928 0 0.48165 0.158375 0.153767 0 0.496132 0.162028 0.151979 0 0.531429 0.15935 0.152029 0 0.556378 0.16004 0.151357 0 0.586972 0.161771 0.150999 0 0.69372 0.159321 0.1563 0 0.816618 0.155233 0.161244 0 0.848006 0.15431 0.140994 0 0.859966 0.154633 0.124304 0 0.0999065 0.194586 0.151747 0 0.0999065 0.194586 0.151747 0 0.0999065 0.194586 0.151747 0 0.10793 0.193716 0.150882 0 0.124928 0.192206 0.151591 0 0.140271 0.192524 0.153073 0 0.14797 0.193917 0.153444 0 0.160256 0.193177 0.152661 0 0.195643 0.190352 0.149677 0 0.22329 0.191077 0.147008 0 0.241406 0.19163 0.147782 0 0.26461 0.190778 0.150845 0 0.290862 0.189909 0.154035 0 0.311347 0.190825 0.15516 0 0.328488 0.193374 0.15333 0 0.345005 0.196287 0.150859 0 0.358005 0.199088 0.149608 0 0.374878 0.201573 0.149771 0 0.389858 0.201151 0.150448 0 0.410237 0.199296 0.15147 0 0.42744 0.197914 0.151696 0 0.444366 0.19758 0.151756 0 0.464765 0.196944 0.152443 0 0.488558 0.195877 0.153333 0 0.500351 0.199911 0.151751 0 0.524076 0.20054 0.151096 0 0.563603 0.19544 0.151821 0 0.584892 0.198069 0.15128 0 0.6941 0.193723 0.155417 0 0.800351 0.201731 0.147797 0 0.849854 0.195285 0.137591 0 0.861842 0.195824 0.120814 0 0.0967346 0.223776 0.152514 0 0.0967346 0.223776 0.152514 0 0.0967346 0.223776 0.152514 0 0.105493 0.224898 0.151574 0 0.12464 0.225947 0.152106 0 0.142913 0.226419 0.155065 0 0.150913 0.227176 0.154917 0 0.15939 0.228427 0.151804 0 0.194478 0.227963 0.148879 0 0.225521 0.228769 0.147794 0 0.244824 0.231414 0.148188 0 0.269591 0.234352 0.148826 0 0.293428 0.236946 0.15029 0 0.31233 0.237226 0.150964 0 0.329442 0.235125 0.151997 0 0.346292 0.233227 0.151828 0 0.358107 0.232743 0.150661 0 0.374444 0.23219 0.151035 0 0.387895 0.232041 0.151321 0 0.407594 0.231804 0.151263 0 0.425899 0.230892 0.151574 0 0.444766 0.230096 0.152093 0 0.462166 0.230538 0.152364 0 0.490524 0.228299 0.153531 0 0.506613 0.230745 0.152518 0 0.522282 0.234081 0.151167 0 0.556613 0.230517 0.150936 0 0.583425 0.231241 0.150682 0 0.683928 0.234059 0.150198 0 0.801627 0.232094 0.15155 0 0.842646 0.234804 0.129582 0 0.85724 0.234423 0.114427 0 0.0980119 0.244529 0.150686 0 0.0980119 0.244529 0.150686 0 0.098012 0.244529 0.150686 0 0.105978 0.244966 0.150112 0 0.124568 0.245185 0.150488 0 0.143416 0.245007 0.154152 0 0.15246 0.245377 0.154244 0 0.161246 0.246093 0.151217 0 0.194879 0.246277 0.149037 0 0.226527 0.248869 0.148729 0 0.248279 0.249726 0.150012 0 0.270959 0.252011 0.151143 0 0.293955 0.253248 0.150425 0 0.310681 0.252196 0.149843 0 0.326761 0.250407 0.150111 0 0.344118 0.248251 0.150759 0 0.357381 0.246672 0.150983 0 0.374371 0.246717 0.151443 0 0.388239 0.246961 0.151982 0 0.407449 0.24694 0.151907 0 0.424903 0.246865 0.151283 0 0.44436 0.246374 0.151798 0 0.463066 0.246573 0.152442 0 0.48801 0.245596 0.1532 0 0.509323 0.246466 0.1526 0 0.521493 0.250812 0.151014 0 0.552361 0.248806 0.15052 0 0.586602 0.247158 0.150783 0 0.678734 0.254442 0.147676 0 0.802034 0.245925 0.153502 0 0.844277 0.24815 0.13335 0 0.858463 0.247755 0.117853 0 0.0983251 0.25933 0.149809 0 0.0983251 0.25933 0.149809 0 0.0983251 0.25933 0.149809 0 0.106187 0.259705 0.149348 0 0.124339 0.260005 0.150251 0 0.144158 0.260868 0.154141 0 0.15347 0.261649 0.154468 0 0.162786 0.262576 0.151755 0 0.194518 0.264207 0.149352 0 0.227383 0.266155 0.149716 0 0.249094 0.26594 0.149938 0 0.27142 0.265851 0.153198 0 0.293541 0.265177 0.150601 0 0.30985 0.264451 0.149479 0 0.324807 0.263783 0.148679 0 0.342291 0.262407 0.149111 0 0.356156 0.261472 0.149968 0 0.374466 0.260744 0.151734 0 0.388566 0.261077 0.152227 0 0.407388 0.261155 0.152268 0 0.424913 0.261339 0.151715 0 0.444114 0.261252 0.1515 0 0.463719 0.261117 0.152265 0 0.485782 0.260935 0.152937 0 0.511661 0.26026 0.152707 0 0.524293 0.264724 0.151135 0 0.549221 0.265205 0.150323 0 0.589565 0.261819 0.151055 0 0.677254 0.269892 0.146488 0 0.794679 0.262852 0.148093 0 0.846927 0.258846 0.137877 0 0.861105 0.258632 0.122332 0 0.0992745 0.282198 0.150203 0 0.0992745 0.282198 0.150203 0 0.0992745 0.282198 0.150203 0 0.107698 0.282693 0.149121 0 0.125181 0.284113 0.150327 0 0.145178 0.284729 0.154271 0 0.155121 0.285091 0.154768 0 0.164896 0.286008 0.152569 0 0.193448 0.287477 0.149102 0 0.229405 0.288127 0.150845 0 0.245525 0.287708 0.149931 0 0.270478 0.284552 0.153067 0 0.29406 0.283816 0.152561 0 0.309365 0.28473 0.148947 0 0.324536 0.285042 0.147848 0 0.340971 0.284926 0.147171 0 0.354521 0.2844 0.147581 0 0.373826 0.282982 0.150546 0 0.389184 0.28265 0.152591 0 0.407528 0.283434 0.15281 0 0.425097 0.283599 0.152494 0 0.444276 0.284 0.151923 0 0.464079 0.284646 0.151889 0 0.483937 0.285842 0.152527 0 0.515842 0.283627 0.153125 0 0.52918 0.288445 0.151467 0 0.548478 0.290933 0.150293 0 0.594247 0.285462 0.151396 0 0.678752 0.292044 0.147429 0 0.783039 0.293092 0.139397 0 0.843934 0.284501 0.137177 0 0.858754 0.284327 0.122835 0 0.0996985 0.309457 0.151885 0 0.0996985 0.309457 0.151885 0 0.0996985 0.309457 0.151885 0 0.108213 0.309292 0.150119 0 0.125972 0.30965 0.149683 0 0.145677 0.310364 0.154142 0 0.156574 0.310571 0.154966 0 0.166721 0.311345 0.152693 0 0.192461 0.314014 0.147045 0 0.229612 0.309925 0.150935 0 0.245236 0.310054 0.150374 0 0.267188 0.308291 0.15078 0 0.29507 0.306047 0.154403 0 0.310405 0.306816 0.151366 0 0.324706 0.307252 0.147999 0 0.340724 0.307469 0.146484 0 0.353974 0.307589 0.146495 0 0.373141 0.308142 0.148261 0 0.389055 0.308003 0.150748 0 0.408832 0.308295 0.153366 0 0.425917 0.309001 0.153165 0 0.44498 0.309453 0.152826 0 0.464919 0.310085 0.152408 0 0.485497 0.311125 0.15231 0 0.513359 0.309235 0.15276 0 0.533448 0.310433 0.151844 0 0.547081 0.313986 0.150029 0 0.587541 0.309636 0.150471 0 0.680488 0.313485 0.148455 0 0.787947 0.316925 0.141121 0 0.833389 0.313505 0.129203 0 0.848285 0.312837 0.115047 0 0.0995915 0.327419 0.15306 0 0.0995915 0.327419 0.15306 0 0.0995915 0.327419 0.15306 0 0.108367 0.327605 0.151 0 0.126781 0.328191 0.149916 0 0.146398 0.329113 0.153866 0 0.157267 0.329592 0.154772 0 0.168037 0.32968 0.152737 0 0.192757 0.329397 0.146684 0 0.228958 0.3256 0.150314 0 0.245847 0.325401 0.150678 0 0.26499 0.325666 0.151028 0 0.293367 0.3236 0.152973 0 0.311419 0.322527 0.153213 0 0.325615 0.324116 0.149905 0 0.341793 0.325293 0.146721 0 0.354671 0.326279 0.146213 0 0.37396 0.327103 0.147965 0 0.389199 0.327714 0.14929 0 0.409132 0.327363 0.152081 0 0.426261 0.327357 0.153638 0 0.445016 0.327138 0.153379 0 0.465253 0.326743 0.153108 0 0.486192 0.326952 0.152561 0 0.510115 0.326506 0.152172 0 0.535999 0.325773 0.152097 0 0.548336 0.330089 0.150096 0 0.582898 0.328398 0.149944 0 0.684724 0.329088 0.148907 0 0.791513 0.3349 0.142663 0 0.82529 0.336046 0.123188 0 0.839979 0.335604 0.108806 0 0.100173 0.348336 0.154594 0 0.100173 0.348336 0.154594 0 0.100173 0.348336 0.154594 0 0.10904 0.348688 0.15246 0 0.127569 0.349439 0.150737 0 0.146423 0.348845 0.153717 0 0.156342 0.348075 0.154628 0 0.166468 0.347215 0.152252 0 0.192673 0.345964 0.146669 0 0.227505 0.343936 0.14948 0 0.246725 0.34382 0.150899 0 0.264021 0.345187 0.151717 0 0.292911 0.345017 0.15157 0 0.311662 0.3447 0.15275 0 0.326948 0.344575 0.151935 0 0.343286 0.345359 0.149069 0 0.356082 0.346094 0.147205 0 0.374595 0.34652 0.147943 0 0.389699 0.346621 0.148861 0 0.408468 0.346628 0.150193 0 0.425456 0.345984 0.152258 0 0.444706 0.345242 0.153731 0 0.465065 0.345002 0.15358 0 0.486887 0.345163 0.153161 0 0.507162 0.346919 0.151436 0 0.539131 0.344504 0.152043 0 0.552131 0.348654 0.150422 0 0.578295 0.349416 0.14949 0 0.690682 0.348728 0.149669 0 0.795282 0.35407 0.14406 0 0.818899 0.357587 0.11813 0 0.830118 0.358375 0.101525 0 0.100833 0.36473 0.1555 0 0.100833 0.36473 0.1555 0 0.100833 0.36473 0.1555 0 0.109555 0.36502 0.153636 0 0.126767 0.363713 0.151305 0 0.145264 0.361972 0.153221 0 0.155229 0.361192 0.15429 0 0.16516 0.360468 0.152092 0 0.192871 0.359454 0.146752 0 0.226158 0.359444 0.148414 0 0.247365 0.358935 0.150907 0 0.265113 0.360135 0.152218 0 0.29347 0.360472 0.151477 0 0.311315 0.360853 0.152342 0 0.326563 0.360231 0.151537 0 0.34401 0.35907 0.150756 0 0.356534 0.359375 0.148773 0 0.374742 0.359953 0.147997 0 0.389972 0.36021 0.148651 0 0.408315 0.360922 0.149113 0 0.425025 0.360648 0.150636 0 0.444398 0.359673 0.152937 0 0.464943 0.35949 0.153767 0 0.487297 0.35966 0.153636 0 0.508274 0.360924 0.152057 0 0.540398 0.358275 0.151997 0 0.554693 0.361669 0.150752 0 0.577385 0.363604 0.149555 0 0.69527 0.363707 0.150084 0 0.796846 0.366629 0.144848 0 0.821349 0.370392 0.118818 0 0.832655 0.371387 0.102154 0 0.100715 0.380395 0.155091 0 0.100715 0.380395 0.155091 0 0.100715 0.380396 0.155091 0 0.108598 0.379973 0.153845 0 0.125338 0.378725 0.151916 0 0.144011 0.37713 0.153382 0 0.1541 0.376303 0.154165 0 0.164099 0.375903 0.152416 0 0.193239 0.375462 0.146917 0 0.224804 0.376204 0.147388 0 0.247954 0.375664 0.150847 0 0.266059 0.376366 0.152373 0 0.292931 0.3763 0.152385 0 0.31107 0.37649 0.151038 0 0.325899 0.376279 0.150828 0 0.342501 0.375389 0.149951 0 0.356793 0.374226 0.150079 0 0.375264 0.374684 0.149573 0 0.390361 0.375367 0.148793 0 0.40912 0.376123 0.148976 0 0.424728 0.377013 0.149105 0 0.443313 0.376433 0.151323 0 0.46492 0.375088 0.153884 0 0.487417 0.374969 0.15411 0 0.509334 0.375736 0.152838 0 0.537708 0.375061 0.151723 0 0.557579 0.377095 0.150889 0 0.576913 0.381163 0.149639 0 0.698928 0.378351 0.150198 0 0.798851 0.381241 0.146311 0 0.824688 0.386971 0.119861 0 0.835985 0.387965 0.103171 0 0.100049 0.39232 0.154882 0 0.100049 0.39232 0.154882 0 0.100049 0.39232 0.154882 0 0.107931 0.391894 0.153638 0 0.124198 0.390955 0.152558 0 0.143287 0.389878 0.153855 0 0.153632 0.389644 0.154665 0 0.164043 0.389461 0.152651 0 0.193678 0.388732 0.147064 0 0.223727 0.38976 0.146496 0 0.24817 0.388468 0.15049 0 0.266575 0.388963 0.152204 0 0.292543 0.389003 0.153003 0 0.311463 0.388669 0.150546 0 0.325734 0.389072 0.150219 0 0.341361 0.388719 0.149324 0 0.355534 0.387714 0.149416 0 0.375788 0.38685 0.151003 0 0.391054 0.387435 0.150397 0 0.409778 0.388328 0.148995 0 0.425388 0.389097 0.149047 0 0.442432 0.389411 0.150101 0 0.463902 0.388029 0.152784 0 0.4876 0.387639 0.154461 0 0.510469 0.388755 0.153446 0 0.536394 0.389184 0.152004 0 0.559867 0.390352 0.150922 0 0.576632 0.395308 0.149686 0 0.701409 0.389631 0.150144 0 0.801078 0.393422 0.147715 0 0.827084 0.399241 0.120705 0 0.838079 0.39938 0.104164 0 0.0995558 0.406763 0.154346 0 0.0995558 0.406763 0.154346 0 0.0995558 0.406763 0.154346 0 0.10726 0.406549 0.153386 0 0.123941 0.406471 0.152434 0 0.143019 0.406264 0.15458 0 0.153087 0.405856 0.155587 0 0.163825 0.405356 0.152751 0 0.193317 0.404085 0.14692 0 0.22331 0.405296 0.146258 0 0.247723 0.403949 0.149438 0 0.266942 0.403998 0.151861 0 0.291534 0.404522 0.153243 0 0.311656 0.403806 0.150547 0 0.326152 0.404333 0.150016 0 0.340929 0.404941 0.148976 0 0.354115 0.404309 0.14884 0 0.375334 0.402573 0.151669 0 0.391668 0.402323 0.152246 0 0.4105 0.403449 0.150199 0 0.426204 0.404664 0.148956 0 0.44287 0.406084 0.149255 0 0.463126 0.405929 0.151263 0 0.488123 0.404847 0.154303 0 0.511829 0.405661 0.153946 0 0.534832 0.407323 0.152305 0 0.562741 0.406785 0.15093 0 0.577507 0.411783 0.149275 0 0.704817 0.404962 0.150058 0 0.803322 0.408076 0.149812 0 0.831343 0.41847 0.1221 0 0.843462 0.421897 0.105629 0 0.0994139 0.422077 0.153572 0 0.0994139 0.422077 0.153572 0 0.0994139 0.422077 0.153572 0 0.107268 0.422116 0.15271 0 0.123882 0.422032 0.151928 0 0.142631 0.421695 0.154312 0 0.152418 0.421506 0.156177 0 0.163064 0.420969 0.153337 0 0.192301 0.420232 0.147725 0 0.22422 0.420565 0.146565 0 0.246652 0.420217 0.148404 0 0.267383 0.419948 0.151834 0 0.290837 0.421256 0.153094 0 0.310898 0.420865 0.151338 0 0.326874 0.420796 0.14952 0 0.341688 0.421509 0.14902 0 0.353157 0.422227 0.14838 0 0.373727 0.421229 0.150797 0 0.391811 0.419942 0.153281 0 0.411772 0.420865 0.152288 0 0.427418 0.422775 0.149869 0 0.444383 0.424634 0.14906 0 0.462759 0.426439 0.149561 0 0.487114 0.425077 0.152354 0 0.512314 0.423879 0.153859 0 0.533525 0.424723 0.152127 0 0.565713 0.422849 0.151236 0 0.581048 0.428686 0.14867 0 0.706649 0.424085 0.150227 0 0.80553 0.429156 0.151761 0 0.833926 0.433359 0.125162 0 0.843261 0.429937 0.110374 0 0.0992476 0.439619 0.152971 0 0.0992476 0.439619 0.152971 0 0.0992476 0.439619 0.152971 0 0.107267 0.439496 0.151877 0 0.123589 0.439311 0.151441 0 0.142323 0.439076 0.153803 0 0.152345 0.439215 0.155788 0 0.162743 0.43935 0.154534 0 0.191634 0.439302 0.148802 0 0.225611 0.439377 0.147002 0 0.245256 0.440054 0.147333 0 0.267885 0.439178 0.15096 0 0.29194 0.440641 0.152905 0 0.310566 0.441122 0.151992 0 0.32755 0.440682 0.148808 0 0.343021 0.441573 0.148955 0 0.354393 0.442585 0.148433 0 0.372597 0.443645 0.149699 0 0.390526 0.442777 0.15224 0 0.413583 0.441709 0.154403 0 0.429479 0.44299 0.151864 0 0.44555 0.444357 0.14909 0 0.462998 0.445147 0.14863 0 0.485271 0.444835 0.149603 0 0.511787 0.442826 0.151877 0 0.535007 0.443838 0.151784 0 0.565978 0.443477 0.151011 0 0.5854 0.448826 0.148478 0 0.7007 0.442708 0.149958 0 0.801629 0.440004 0.153956 0 0.83647 0.448197 0.128598 0 0.848564 0.453243 0.11341 0 0.0986472 0.456288 0.153394 0 0.0986472 0.456288 0.153394 0 0.0986472 0.456288 0.153394 0 0.107073 0.456172 0.151616 0 0.12388 0.456771 0.150964 0 0.142632 0.457349 0.153479 0 0.152744 0.457642 0.155432 0 0.163173 0.457968 0.154253 0 0.191706 0.458366 0.148987 0 0.226681 0.458213 0.147801 0 0.244123 0.46012 0.146954 0 0.267909 0.459063 0.149673 0 0.29349 0.460458 0.152751 0 0.310746 0.461883 0.151911 0 0.326979 0.462122 0.149291 0 0.344052 0.462364 0.147788 0 0.355743 0.462732 0.14825 0 0.373043 0.463541 0.149216 0 0.389067 0.46365 0.150358 0 0.41224 0.461736 0.153046 0 0.430726 0.460473 0.153199 0 0.4467 0.461897 0.150265 0 0.463663 0.463241 0.14786 0 0.485253 0.464668 0.147994 0 0.511415 0.464299 0.149472 0 0.536915 0.463729 0.151711 0 0.564012 0.463628 0.151169 0 0.588759 0.465527 0.149576 0 0.694303 0.451549 0.152015 0 0.802745 0.459109 0.155767 0 0.84032 0.466134 0.130439 0 0.851858 0.469778 0.114185 0 0.0988428 0.477154 0.153591 0 0.0988428 0.477154 0.153591 0 0.0988428 0.477154 0.153591 0 0.107335 0.477324 0.152015 0 0.124768 0.477841 0.150277 0 0.143219 0.478944 0.152981 0 0.153483 0.479526 0.154851 0 0.16388 0.480041 0.153709 0 0.19214 0.481224 0.14898 0 0.227329 0.481355 0.148838 0 0.24599 0.482896 0.148135 0 0.266394 0.483178 0.148315 0 0.295053 0.482798 0.152111 0 0.311549 0.484243 0.151242 0 0.326838 0.484573 0.14911 0 0.344498 0.484114 0.145624 0 0.356724 0.4843 0.146109 0 0.373452 0.484788 0.148134 0 0.388847 0.484777 0.149171 0 0.410116 0.484304 0.150796 0 0.429622 0.482834 0.152317 0 0.448253 0.482121 0.152248 0 0.46534 0.48389 0.14985 0 0.485889 0.485273 0.148092 0 0.510564 0.48589 0.148032 0 0.53649 0.482275 0.1506 0 0.560743 0.478633 0.152942 0 0.589176 0.473776 0.153261 0 0.689509 0.468562 0.153629 0 0.804222 0.483819 0.154405 0 0.840778 0.474604 0.130851 0 0.84985 0.470822 0.114561 0 0.100093 0.503829 0.15314 0 0.100093 0.503829 0.15314 0 0.100093 0.503829 0.15314 0 0.108431 0.504301 0.151996 0 0.12596 0.50497 0.150072 0 0.144207 0.506057 0.152385 0 0.154527 0.506628 0.153953 0 0.164893 0.507256 0.152816 0 0.193014 0.508274 0.147754 0 0.226806 0.508398 0.149121 0 0.248228 0.508565 0.148191 0 0.263501 0.509673 0.147292 0 0.296185 0.506736 0.150486 0 0.313412 0.507934 0.15056 0 0.326537 0.508947 0.148713 0 0.343077 0.508758 0.146016 0 0.356928 0.508235 0.144549 0 0.373863 0.508603 0.1476 0 0.388747 0.508429 0.149199 0 0.409062 0.506659 0.150695 0 0.427123 0.503809 0.15211 0 0.446908 0.500969 0.153877 0 0.465892 0.498434 0.154796 0 0.484569 0.495755 0.15347 0 0.508119 0.491764 0.152138 0 0.532258 0.490327 0.152365 0 0.555906 0.489828 0.154384 0 0.590557 0.487299 0.156197 0 0.692982 0.512894 0.150717 0 0.78319 0.496038 0.145552 0 0.841328 0.484233 0.132043 0 0.850265 0.480414 0.116322 0 0.101081 0.533001 0.152387 0 0.101081 0.533001 0.152387 0 0.101081 0.533001 0.152387 0 0.109683 0.533049 0.150757 0 0.126606 0.533556 0.149281 0 0.144748 0.533334 0.15111 0 0.155037 0.533307 0.152562 0 0.165085 0.533276 0.151517 0 0.193199 0.533217 0.146293 0 0.226303 0.533416 0.148297 0 0.248913 0.533522 0.149506 0 0.264455 0.533749 0.148877 0 0.295972 0.528253 0.151412 0 0.313736 0.526285 0.152916 0 0.32538 0.524757 0.151147 0 0.340095 0.522139 0.149571 0 0.353293 0.519668 0.148051 0 0.371822 0.517013 0.149821 0 0.385177 0.515886 0.15297 0 0.406345 0.514307 0.155218 0 0.424819 0.514911 0.155755 0 0.443888 0.515838 0.155787 0 0.463509 0.515065 0.157111 0 0.484936 0.514511 0.157677 0 0.50787 0.515698 0.154171 0 0.533989 0.520411 0.151093 0 0.560958 0.534063 0.14946 0 0.600496 0.540807 0.152425 0 0.686382 0.526543 0.146361 0 0.753417 0.505587 0.138629 0 0.838489 0.488661 0.134609 0 0.848492 0.485023 0.119786 0 0.10057 0.557875 0.152458 0 0.10057 0.557875 0.152458 0 0.10057 0.557875 0.152458 0 0.109469 0.557715 0.150684 0 0.126751 0.558197 0.14894 0 0.144228 0.55593 0.15155 0 0.15462 0.55454 0.153179 0 0.164211 0.553156 0.152951 0 0.191419 0.548538 0.149064 0 0.224141 0.544254 0.151137 0 0.245801 0.541781 0.154952 0 0.261968 0.541481 0.154899 0 0.290475 0.5406 0.155746 0 0.312763 0.540007 0.15589 0 0.324945 0.541211 0.153976 0 0.338459 0.542253 0.151115 0 0.351548 0.542671 0.149922 0 0.372537 0.542383 0.149316 0 0.38683 0.542977 0.15157 0 0.40648 0.545847 0.153389 0 0.425367 0.548127 0.153732 0 0.446562 0.55431 0.153466 0 0.468709 0.564961 0.152182 0 0.492702 0.572724 0.152791 0 0.516386 0.572199 0.1508 0 0.538535 0.570192 0.145429 0 0.561739 0.564469 0.144158 0 0.588664 0.557635 0.146447 0 0.684215 0.527098 0.151631 0 0.748085 0.507363 0.135977 0 0.832187 0.494233 0.135566 0 0.844069 0.489973 0.121671 0 0.0976308 0.568628 0.157594 0 0.0976308 0.568628 0.157594 0 0.0976308 0.568628 0.157594 0 0.105877 0.567458 0.15707 0 0.12345 0.564831 0.154733 0 0.141819 0.565646 0.155404 0 0.152409 0.565941 0.156881 0 0.162201 0.566232 0.156585 0 0.190178 0.567484 0.151649 0 0.223593 0.568194 0.151232 0 0.246546 0.56833 0.154122 0 0.264183 0.569456 0.154591 0 0.287255 0.574773 0.153978 0 0.315444 0.575666 0.15388 0 0.329269 0.579638 0.151795 0 0.34259 0.584381 0.148021 0 0.355694 0.591496 0.145391 0 0.377883 0.600262 0.144764 0 0.396837 0.603598 0.143181 0 0.413812 0.603559 0.145638 0 0.430494 0.599417 0.147062 0 0.44951 0.5946 0.148863 0 0.46884 0.589745 0.150125 0 0.488091 0.585126 0.150463 0 0.510451 0.579643 0.152151 0 0.535276 0.573389 0.151589 0 0.557816 0.567405 0.148842 0 0.581795 0.559781 0.149194 0 0.681836 0.530881 0.153008 0 0.744963 0.508334 0.136838 0 0.833357 0.511984 0.138032 0 0.858482 0.55013 0.125661 0 0.101652 0.661366 0.152854 0 0.101652 0.661366 0.152854 0 0.101652 0.661366 0.152854 0 0.108133 0.660896 0.154513 0 0.124966 0.658442 0.153413 0 0.142607 0.656743 0.15426 0 0.153216 0.656642 0.155704 0 0.1629 0.656356 0.155832 0 0.190969 0.65448 0.15233 0 0.223087 0.652749 0.151875 0 0.247394 0.654948 0.151809 0 0.265843 0.652503 0.152312 0 0.28835 0.649052 0.152206 0 0.306652 0.650149 0.151413 0 0.323077 0.646387 0.15118 0 0.338573 0.640063 0.150168 0 0.347369 0.636534 0.149802 0 0.359658 0.631879 0.15105 0 0.371986 0.626992 0.150932 0 0.397832 0.640559 0.150444 0 0.42226 0.655689 0.14859 0 0.443429 0.671093 0.150063 0 0.466162 0.678494 0.150555 0 0.491028 0.678559 0.152563 0 0.515532 0.676356 0.152819 0 0.537598 0.670772 0.152034 0 0.557366 0.665832 0.14964 0 0.585502 0.658401 0.148986 0 0.658344 0.640528 0.139046 0 0.749334 0.617812 0.135828 0 0.839318 0.618963 0.132906 0 0.860457 0.640793 0.122951 0 0.0975035 0.738442 0.151562 0 0.0975035 0.738442 0.151562 0 0.0975035 0.738442 0.151562 0 0.106802 0.734569 0.148592 0 0.12219 0.728614 0.148603 0 0.13432 0.724728 0.155642 0 0.141896 0.722142 0.15885 0 0.151605 0.721672 0.158711 0 0.181893 0.732414 0.158347 0 0.216781 0.743313 0.156293 0 0.242774 0.748859 0.155539 0 0.261549 0.744121 0.15565 0 0.282438 0.739211 0.152885 0 0.304558 0.733758 0.151687 0 0.323328 0.732137 0.149488 0 0.334971 0.730662 0.146673 0 0.34441 0.729392 0.143759 0 0.367246 0.724302 0.146478 0 0.379182 0.720697 0.147418 0 0.392064 0.716698 0.148185 0 0.404034 0.713053 0.148629 0 0.419624 0.708461 0.14773 0 0.438198 0.70296 0.145726 0 0.455794 0.697652 0.143929 0 0.475769 0.691537 0.143552 0 0.502102 0.68667 0.143577 0 0.527457 0.684179 0.142175 0 0.560049 0.677307 0.14717 0 0.692715 0.773123 0.154256 0 0.764956 0.759797 0.139895 0 0.836641 0.75059 0.132206 0 0.849908 0.751708 0.121458 0 0.0915308 0.795785 0.150257 0 0.0915308 0.795785 0.150257 0 0.0915308 0.795785 0.150257 0 0.0987751 0.794277 0.15077 0 0.116761 0.79055 0.14948 0 0.138407 0.785839 0.145713 0 0.149511 0.784348 0.143787 0 0.155334 0.783636 0.145955 0 0.177682 0.791229 0.148998 0 0.215672 0.818061 0.150512 0 0.243872 0.836335 0.152565 0 0.258893 0.823267 0.153481 0 0.274383 0.805963 0.150801 0 0.286993 0.793761 0.148654 0 0.301085 0.782856 0.14696 0 0.315384 0.77144 0.14487 0 0.325231 0.76263 0.142698 0 0.335625 0.749063 0.141801 0 0.3426 0.738448 0.140519 0 0.377691 0.780808 0.145272 0 0.416705 0.844825 0.149755 0 0.435431 0.847837 0.150208 0 0.455463 0.846023 0.152169 0 0.479165 0.842606 0.151758 0 0.503633 0.840174 0.150214 0 0.529247 0.838786 0.152072 0 0.555636 0.839898 0.150924 0 0.584384 0.84042 0.148845 0 0.67212 0.824778 0.144661 0 0.768144 0.852431 0.136962 0 0.835621 0.840125 0.12897 0 0.868522 0.838332 0.124153 0 0.102357 0.917583 0.159188 0 0.102357 0.917583 0.159188 0 0.102357 0.917583 0.159188 0 0.110559 0.918593 0.159145 0 0.135078 0.918689 0.152136 0 0.152782 0.921202 0.154004 0 0.166161 0.921143 0.152004 0 0.176429 0.918585 0.147345 0 0.197154 0.913107 0.144807 0 0.218732 0.906395 0.149306 0 0.235716 0.900638 0.148787 0 0.252833 0.894846 0.149483 0 0.273607 0.88815 0.149293 0 0.290307 0.887029 0.14647 0 0.307615 0.886812 0.145538 0 0.32846 0.884091 0.145862 0 0.34327 0.882388 0.145666 0 0.364217 0.883424 0.146655 0 0.382127 0.890677 0.147605 0 0.400126 0.897912 0.148728 0 0.424988 0.899903 0.150393 0 0.444397 0.904895 0.152094 0 0.461043 0.90778 0.15197 0 0.481196 0.907159 0.153034 0 0.506862 0.906243 0.150879 0 0.530782 0.90514 0.149134 0 0.550937 0.8999 0.150071 0 0.57745 0.892118 0.148802 0 0.681445 0.894586 0.145877 0 0.76318 0.907212 0.140571 0 0.857069 0.8816 0.13885 0 0.876672 0.875262 0.129546 0 0.0985409 0.0991547 0.170755 0 0.0985409 0.0991547 0.170755 0 0.0985409 0.0991547 0.170755 0 0.106116 0.0991512 0.169187 0 0.124675 0.0982165 0.166534 0 0.145699 0.0968177 0.165614 0 0.152508 0.0971665 0.164326 0 0.160976 0.0975736 0.162578 0 0.196033 0.101217 0.162512 0 0.226967 0.102023 0.164579 0 0.250097 0.101188 0.166736 0 0.271247 0.0999652 0.168729 0 0.291058 0.098815 0.166765 0 0.308876 0.0988827 0.165656 0 0.32395 0.0985672 0.164363 0 0.338867 0.0983581 0.162903 0 0.354865 0.0975431 0.163964 0 0.374517 0.0963047 0.165464 0 0.39057 0.0959734 0.166648 0 0.408265 0.0963531 0.166747 0 0.42591 0.0961758 0.16701 0 0.449583 0.0951253 0.167864 0 0.460669 0.100455 0.167644 0 0.474493 0.104631 0.167078 0 0.508379 0.10257 0.167521 0 0.534259 0.100647 0.167407 0 0.557025 0.0989689 0.167387 0 0.592834 0.0952883 0.166718 0 0.684807 0.101567 0.161526 0 0.808783 0.090631 0.174249 0 0.834208 0.0959105 0.146905 0 0.846446 0.0984075 0.12966 0 0.0985409 0.0991547 0.170755 0 0.0985409 0.0991547 0.170755 0 0.0985409 0.0991547 0.170755 0 0.106116 0.0991512 0.169187 0 0.124675 0.0982165 0.166534 0 0.145699 0.0968177 0.165614 0 0.152508 0.0971665 0.164326 0 0.160976 0.0975736 0.162578 0 0.196033 0.101217 0.162512 0 0.226967 0.102023 0.164579 0 0.250097 0.101188 0.166736 0 0.271247 0.0999652 0.168729 0 0.291058 0.098815 0.166765 0 0.308876 0.0988827 0.165656 0 0.32395 0.0985672 0.164363 0 0.338867 0.0983581 0.162903 0 0.354865 0.0975431 0.163964 0 0.374517 0.0963047 0.165464 0 0.39057 0.0959734 0.166648 0 0.408265 0.0963531 0.166747 0 0.42591 0.0961758 0.16701 0 0.449583 0.0951253 0.167864 0 0.460669 0.100455 0.167644 0 0.474493 0.104631 0.167078 0 0.508379 0.10257 0.167521 0 0.534259 0.100647 0.167407 0 0.557025 0.0989689 0.167387 0 0.592834 0.0952883 0.166718 0 0.684807 0.101567 0.161526 0 0.808783 0.090631 0.174249 0 0.834208 0.0959105 0.146905 0 0.846446 0.0984075 0.12966 0 0.0985409 0.0991547 0.170755 0 0.0985409 0.0991547 0.170755 0 0.0985409 0.0991547 0.170755 0 0.106116 0.0991511 0.169187 0 0.124675 0.0982165 0.166534 0 0.145699 0.0968177 0.165614 0 0.152508 0.0971665 0.164326 0 0.160976 0.0975736 0.162578 0 0.196033 0.101217 0.162512 0 0.226967 0.102023 0.164579 0 0.250097 0.101188 0.166736 0 0.271247 0.0999652 0.168729 0 0.291058 0.098815 0.166765 0 0.308876 0.0988827 0.165656 0 0.32395 0.0985672 0.164363 0 0.338867 0.0983581 0.162903 0 0.354865 0.0975431 0.163964 0 0.374517 0.0963047 0.165464 0 0.39057 0.0959735 0.166648 0 0.408265 0.0963531 0.166747 0 0.42591 0.0961758 0.16701 0 0.449583 0.0951253 0.167864 0 0.460669 0.100455 0.167644 0 0.474493 0.104632 0.167078 0 0.508379 0.10257 0.167521 0 0.534259 0.100647 0.167407 0 0.557025 0.0989689 0.167387 0 0.592834 0.0952885 0.166718 0 0.684807 0.101567 0.161526 0 0.808783 0.090631 0.174249 0 0.834208 0.0959105 0.146905 0 0.846446 0.0984076 0.12966 0 0.0982582 0.105349 0.170852 0 0.0982582 0.105349 0.170852 0 0.0982582 0.105349 0.170852 0 0.105957 0.105073 0.169871 0 0.124339 0.104491 0.167064 0 0.146133 0.104216 0.166189 0 0.153306 0.10555 0.164988 0 0.162234 0.10757 0.163417 0 0.197422 0.112679 0.161608 0 0.227053 0.109973 0.164357 0 0.249483 0.109287 0.166357 0 0.270526 0.107051 0.168709 0 0.290909 0.106892 0.16681 0 0.308683 0.106086 0.165583 0 0.323806 0.105479 0.164298 0 0.338757 0.105238 0.162823 0 0.354542 0.104885 0.163824 0 0.374255 0.104406 0.16521 0 0.390489 0.103986 0.166404 0 0.408698 0.104132 0.166616 0 0.425063 0.105432 0.16684 0 0.451564 0.104668 0.168159 0 0.46261 0.109225 0.167965 0 0.474622 0.114079 0.167262 0 0.50573 0.111156 0.167362 0 0.535568 0.108108 0.167526 0 0.556436 0.108374 0.166877 0 0.594774 0.103768 0.166427 0 0.684454 0.107089 0.162299 0 0.809449 0.0965688 0.175817 0 0.836126 0.105736 0.147854 0 0.848184 0.107932 0.13084 0 0.0966023 0.119428 0.169809 0 0.0966023 0.119428 0.169809 0 0.0966023 0.119428 0.169809 0 0.10599 0.119796 0.169866 0 0.126247 0.123007 0.168948 0 0.14878 0.126454 0.168194 0 0.156864 0.128231 0.166939 0 0.165553 0.130608 0.165162 0 0.19484 0.131284 0.161264 0 0.22551 0.124954 0.163399 0 0.247155 0.1224 0.165406 0 0.270204 0.121259 0.168356 0 0.2905 0.120955 0.167149 0 0.30821 0.120854 0.165358 0 0.32346 0.12101 0.16389 0 0.339096 0.121146 0.162559 0 0.354362 0.121261 0.163507 0 0.374004 0.122034 0.164896 0 0.390833 0.122371 0.166202 0 0.410507 0.123374 0.166869 0 0.425781 0.125425 0.167121 0 0.451522 0.124406 0.168458 0 0.466368 0.127705 0.168543 0 0.476075 0.130859 0.167347 0 0.500253 0.129523 0.166619 0 0.538468 0.123743 0.167408 0 0.555077 0.12538 0.165927 0 0.595986 0.119423 0.166389 0 0.686336 0.118437 0.167346 0 0.812549 0.116848 0.177183 0 0.838938 0.122526 0.149676 0 0.850237 0.122697 0.133567 0 0.0988592 0.146267 0.169527 0 0.0988592 0.146267 0.169527 0 0.0988592 0.146267 0.169527 0 0.108901 0.147496 0.169364 0 0.129345 0.149688 0.169487 0 0.151421 0.149004 0.169359 0 0.158954 0.147967 0.168863 0 0.166064 0.147374 0.166913 0 0.191171 0.144847 0.162718 0 0.22167 0.140615 0.160615 0 0.247194 0.13833 0.164831 0 0.270116 0.138437 0.167726 0 0.291327 0.139388 0.167255 0 0.308806 0.141137 0.165666 0 0.324074 0.142426 0.163675 0 0.340165 0.143262 0.162437 0 0.354972 0.14372 0.163674 0 0.374564 0.14438 0.165135 0 0.391435 0.14508 0.166373 0 0.411605 0.145992 0.167074 0 0.427749 0.14651 0.167499 0 0.449209 0.145124 0.168475 0 0.468548 0.143406 0.16882 0 0.478453 0.145278 0.167725 0 0.49757 0.144695 0.166833 0 0.538129 0.138006 0.168232 0 0.553326 0.139573 0.166919 0 0.591201 0.134806 0.167502 0 0.690271 0.139686 0.171392 0 0.814253 0.136669 0.177557 0 0.841044 0.137926 0.152173 0 0.852225 0.138267 0.136688 0 0.100412 0.160472 0.17005 0 0.100412 0.160472 0.17005 0 0.100412 0.160472 0.17005 0 0.109818 0.160959 0.168837 0 0.128864 0.16056 0.168553 0 0.14994 0.155991 0.169341 0 0.157663 0.154884 0.168726 17418 0.165521 0.153998 0.167667 17063.5 0.190096 0.151803 0.163241 0 0.220915 0.150065 0.159579 0 0.247072 0.148461 0.163862 0 0.270648 0.149396 0.167497 0 0.292125 0.151008 0.167267 0 0.309592 0.152794 0.166175 0 0.324709 0.153456 0.164005 0 0.340435 0.153856 0.16246 0 0.355447 0.154595 0.163747 0 0.375049 0.155485 0.165394 0 0.391486 0.154524 0.166754 0 0.411488 0.153728 0.167553 0 0.428031 0.153866 0.168103 0 0.446893 0.151975 0.168637 0 0.469075 0.149213 0.169285 0 0.479216 0.150948 0.168201 0 0.496535 0.151394 0.16723 0 0.535051 0.145344 0.168268 0 0.553378 0.148277 0.166914 0 0.58896 0.147615 0.166626 0 0.691499 0.149498 0.171677 0 0.814256 0.144002 0.177046 0 0.841946 0.144279 0.153188 0 0.853072 0.144715 0.137968 0 0.100956 0.169028 0.170633 0 0.100956 0.169028 0.170633 0 0.100956 0.169028 0.170633 0 0.109973 0.169269 0.169294 0 0.126888 0.167196 0.167311 0 0.146743 0.163095 0.167893 0 0.156197 0.160983 0.16836 17089.7 0.165068 0.159662 0.168327 102043 0.189826 0.15878 0.163805 21480.7 0.220672 0.160016 0.158838 0 0.247104 0.159584 0.162923 0 0.271282 0.160166 0.167411 0 0.292604 0.161513 0.167177 0 0.310059 0.162385 0.166358 0 0.325244 0.163051 0.164539 0 0.340491 0.163159 0.162761 0 0.355612 0.162965 0.164293 0 0.374642 0.161969 0.166216 0 0.391193 0.161507 0.167499 0 0.411473 0.161229 0.168193 0 0.427523 0.159991 0.168428 0 0.44457 0.158712 0.168821 0 0.469578 0.15497 0.169774 0 0.480163 0.157242 0.168575 0 0.495965 0.161079 0.167082 0 0.531898 0.15809 0.167202 0 0.555671 0.15923 0.166693 0 0.586765 0.161051 0.165865 0 0.69177 0.158831 0.171301 0 0.814422 0.153686 0.176396 0 0.843125 0.153437 0.153999 0 0.854234 0.154063 0.139058 0 0.0983204 0.19369 0.169852 0 0.0983204 0.19369 0.169852 0 0.0983204 0.19369 0.169852 0 0.106775 0.192997 0.16981 0 0.123924 0.192047 0.166038 0 0.140588 0.192944 0.163869 0 0.148917 0.193222 0.163433 0 0.160926 0.192724 0.164793 21524.2 0.194581 0.192968 0.16831 26977.5 0.22166 0.193824 0.162491 0 0.244177 0.192654 0.162187 0 0.268467 0.19025 0.166699 0 0.292096 0.187713 0.168228 0 0.310822 0.189599 0.16769 0 0.326864 0.192491 0.166213 0 0.342981 0.195815 0.164517 0 0.358534 0.199355 0.164671 0 0.375371 0.20054 0.165343 0 0.390967 0.199621 0.166413 0 0.410411 0.198604 0.16648 0 0.427525 0.197994 0.166392 0 0.444553 0.197897 0.166691 0 0.466226 0.19677 0.167682 0 0.487696 0.196344 0.167897 0 0.499387 0.200314 0.166349 0 0.523846 0.200623 0.165802 0 0.563191 0.195539 0.166891 0 0.584814 0.198049 0.166259 0 0.691984 0.193204 0.170134 0 0.810492 0.1957 0.170212 0 0.844772 0.194371 0.151082 0 0.856492 0.195054 0.135695 0 0.0958997 0.223977 0.169862 0 0.0958997 0.223977 0.169862 0 0.0958997 0.223977 0.169862 0 0.104802 0.223905 0.169792 0 0.12388 0.224868 0.169447 0 0.143319 0.225738 0.166182 0 0.149679 0.226817 0.164345 0 0.158076 0.227492 0.163747 0 0.195173 0.225612 0.168764 0 0.222776 0.229696 0.166232 0 0.246129 0.23367 0.161892 0 0.271434 0.235803 0.165023 0 0.293343 0.237163 0.164652 0 0.313503 0.235758 0.164877 0 0.329896 0.233973 0.165263 0 0.344967 0.233376 0.163954 0 0.358673 0.233023 0.164615 0 0.374759 0.232484 0.165667 0 0.388445 0.232568 0.166021 0 0.407834 0.231781 0.166242 0 0.426356 0.230691 0.16667 0 0.445121 0.230067 0.166981 0 0.462345 0.230739 0.167213 0 0.49099 0.228135 0.168322 0 0.505611 0.230941 0.167168 0 0.521942 0.233951 0.165821 0 0.556902 0.230154 0.165818 0 0.583013 0.231113 0.165883 0 0.684573 0.232678 0.166636 0 0.796955 0.236028 0.160623 0 0.843927 0.231619 0.147435 0 0.8585 0.231452 0.133319 0 0.0959074 0.243631 0.16998 0 0.0959074 0.243631 0.16998 0 0.0959075 0.243631 0.16998 0 0.105069 0.243641 0.168362 0 0.124847 0.243887 0.167891 0 0.144259 0.244469 0.165166 0 0.151607 0.245329 0.163783 0 0.158721 0.246353 0.162819 0 0.196445 0.246252 0.166663 0 0.226207 0.249358 0.168644 0 0.247756 0.252506 0.165311 0 0.273408 0.253179 0.165676 0 0.292534 0.25371 0.165017 0 0.310627 0.251353 0.163945 0 0.327719 0.24882 0.163799 0 0.344131 0.247021 0.163778 0 0.358258 0.246614 0.164384 0 0.375233 0.246927 0.165634 0 0.388677 0.247497 0.166492 0 0.406938 0.247437 0.166079 0 0.425232 0.246433 0.166471 0 0.444956 0.246039 0.167095 0 0.463177 0.246591 0.16732 0 0.488346 0.245304 0.167929 0 0.508399 0.246513 0.167281 0 0.520949 0.250718 0.165634 0 0.552535 0.248519 0.165309 0 0.58616 0.247236 0.165984 0 0.679354 0.25306 0.164136 0 0.799169 0.248703 0.164514 0 0.837154 0.250512 0.142652 0 0.851984 0.249871 0.1289 0 0.0954493 0.260083 0.170198 0 0.0954493 0.260083 0.170198 0 0.0954493 0.260083 0.170198 0 0.104635 0.259907 0.168752 0 0.125096 0.260065 0.166769 0 0.145013 0.261258 0.165604 0 0.152769 0.261718 0.164047 0 0.160658 0.262777 0.163348 0 0.197119 0.264187 0.166426 0 0.227523 0.266282 0.168678 0 0.249035 0.267489 0.167994 0 0.273133 0.266342 0.165921 0 0.291934 0.265797 0.165692 0 0.308434 0.264669 0.163319 0 0.325116 0.262393 0.162388 0 0.342816 0.260709 0.162639 0 0.35861 0.260011 0.164283 0 0.375576 0.260523 0.165393 0 0.389315 0.261109 0.166365 0 0.406938 0.261649 0.166455 0 0.424672 0.261631 0.166212 0 0.444691 0.260996 0.166855 0 0.463948 0.261045 0.167394 0 0.486037 0.260718 0.167567 0 0.510741 0.260359 0.167329 0 0.523285 0.264969 0.165784 0 0.549003 0.265216 0.165056 0 0.58913 0.261927 0.166256 0 0.677558 0.268696 0.162535 0 0.801258 0.259705 0.167962 0 0.839289 0.261468 0.145817 0 0.854665 0.260791 0.133422 0 0.0960796 0.283516 0.172133 0 0.0960796 0.283516 0.172133 0 0.0960796 0.283516 0.172133 0 0.105013 0.283858 0.170686 0 0.125854 0.284222 0.167978 0 0.146209 0.285121 0.16655 0 0.154083 0.285464 0.164855 0 0.163167 0.286142 0.163815 0 0.196726 0.286542 0.166624 0 0.228561 0.287847 0.168033 0 0.247478 0.286424 0.168893 0 0.271167 0.284814 0.168122 0 0.292 0.284778 0.165974 0 0.307459 0.285307 0.163934 0 0.323134 0.285112 0.161639 0 0.340927 0.283962 0.160354 0 0.357573 0.282509 0.162508 0 0.37605 0.28185 0.164791 0 0.390413 0.28251 0.165958 0 0.407633 0.283481 0.166353 0 0.424611 0.284051 0.16656 0 0.44422 0.284391 0.166479 0 0.464716 0.284447 0.167272 0 0.483689 0.285787 0.167338 0 0.51496 0.283836 0.167613 0 0.528157 0.288583 0.166097 0 0.548153 0.29084 0.165046 0 0.59382 0.285259 0.166551 0 0.675397 0.292647 0.160666 0 0.79133 0.28847 0.161126 0 0.84307 0.28229 0.151046 0 0.859395 0.281691 0.140822 0 0.0964934 0.310191 0.174164 0 0.0964934 0.310191 0.174164 0 0.0964934 0.310191 0.174164 0 0.105168 0.310044 0.172642 0 0.125441 0.31012 0.17008 0 0.147628 0.310321 0.1679 0 0.155263 0.310887 0.166168 0 0.164504 0.311412 0.164303 0 0.19445 0.312608 0.165662 0 0.228794 0.309847 0.167341 0 0.245142 0.309682 0.166799 0 0.2688 0.307784 0.169567 0 0.29459 0.30631 0.166565 0 0.307881 0.308216 0.165269 0 0.322375 0.308205 0.162447 0 0.339354 0.307748 0.160338 0 0.355735 0.307332 0.160987 0 0.376208 0.306482 0.16317 0 0.391938 0.306527 0.165586 0 0.409176 0.308162 0.166066 0 0.426005 0.309081 0.166497 0 0.444759 0.309989 0.166845 0 0.464862 0.310527 0.166992 0 0.485315 0.311024 0.167337 0 0.51369 0.308973 0.167508 0 0.532467 0.310623 0.166198 0 0.546766 0.313861 0.164705 0 0.58814 0.309307 0.165434 0 0.677217 0.314008 0.161825 0 0.782549 0.317739 0.153946 0 0.832496 0.311638 0.142965 0 0.848927 0.310534 0.132949 0 0.0970377 0.327958 0.173836 0 0.0970377 0.327958 0.173836 0 0.0970377 0.327958 0.173836 0 0.105641 0.3284 0.173282 0 0.125482 0.329059 0.171376 0 0.148407 0.329339 0.168404 0 0.156789 0.3298 0.16701 0 0.165174 0.329992 0.165505 0 0.192475 0.328928 0.164317 0 0.229304 0.324845 0.166799 0 0.24538 0.325761 0.166393 0 0.266799 0.325172 0.168568 0 0.294866 0.322014 0.16774 0 0.30945 0.323882 0.166272 0 0.322764 0.325789 0.163721 0 0.339542 0.326473 0.161203 0 0.355802 0.326785 0.161582 0 0.375553 0.326824 0.162617 0 0.391875 0.32624 0.164333 0 0.410484 0.326431 0.165868 0 0.426685 0.327208 0.166316 0 0.445197 0.327215 0.166778 0 0.464994 0.327188 0.167258 0 0.485744 0.327077 0.167162 0 0.510716 0.326065 0.167213 0 0.534998 0.325888 0.166434 0 0.547232 0.330217 0.164625 0 0.583629 0.327959 0.164935 0 0.682057 0.329756 0.162502 0 0.786135 0.335771 0.155487 0 0.824114 0.334129 0.136757 0 0.840348 0.333192 0.126531 0 0.0982726 0.348474 0.173541 0 0.0982726 0.348474 0.173541 0 0.0982726 0.348474 0.173541 0 0.106925 0.349101 0.173011 0 0.126084 0.350288 0.172221 0 0.14756 0.348852 0.169319 0 0.15606 0.348022 0.166835 0 0.164674 0.347365 0.166042 0 0.19163 0.345811 0.163291 0 0.230114 0.342588 0.166092 0 0.246624 0.344038 0.166919 0 0.265168 0.345608 0.167783 0 0.292222 0.344405 0.167186 0 0.31258 0.343488 0.166974 0 0.324646 0.345937 0.165579 0 0.340517 0.347109 0.162895 0 0.355945 0.347467 0.162622 0 0.375046 0.347047 0.163041 0 0.390929 0.346392 0.163741 0 0.410342 0.345135 0.164733 0 0.426734 0.344909 0.165956 0 0.445179 0.344904 0.166492 0 0.465225 0.34498 0.167042 0 0.486093 0.345533 0.167186 0 0.507245 0.346631 0.166519 0 0.53824 0.34453 0.166731 0 0.55108 0.348923 0.16485 0 0.578431 0.349297 0.164384 0 0.68814 0.349661 0.163531 0 0.789804 0.354632 0.156789 0 0.813996 0.356961 0.129389 0 0.830032 0.356045 0.118974 0 0.0995145 0.36448 0.173066 0 0.0995145 0.36448 0.173066 0 0.0995145 0.36448 0.173066 0 0.107791 0.364877 0.172777 0 0.125356 0.363761 0.171618 0 0.145913 0.362195 0.169745 0 0.154898 0.361352 0.16687 0 0.163761 0.360667 0.165772 0 0.192081 0.359772 0.163868 0 0.228563 0.358457 0.16549 0 0.247841 0.358854 0.166917 0 0.266196 0.360927 0.168339 0 0.291079 0.36126 0.1673 0 0.313295 0.359101 0.165313 0 0.326338 0.359598 0.166634 0 0.341196 0.360452 0.164395 0 0.355803 0.360907 0.163599 0 0.374892 0.360755 0.163843 0 0.390211 0.360718 0.163712 0 0.409365 0.359881 0.163982 0 0.426797 0.358955 0.165036 0 0.445417 0.358985 0.166119 0 0.465459 0.359301 0.166799 0 0.486724 0.360017 0.167125 0 0.50758 0.36138 0.166347 0 0.540479 0.358135 0.1669 0 0.553679 0.36197 0.165201 0 0.577395 0.363749 0.164341 0 0.692769 0.364679 0.16415 0 0.792178 0.367258 0.157613 0 0.815438 0.370139 0.129448 0 0.825642 0.371297 0.115395 0 0.0994244 0.379843 0.172308 0 0.0994244 0.379843 0.172308 0 0.0994244 0.379843 0.172308 0 0.107134 0.379563 0.172048 0 0.124383 0.378745 0.171025 0 0.14459 0.377569 0.169609 0 0.15361 0.376847 0.167412 0 0.163135 0.376217 0.165731 0 0.19208 0.376336 0.165413 0 0.226733 0.375649 0.164993 0 0.249151 0.375247 0.166476 0 0.267471 0.376488 0.168905 0 0.290597 0.376974 0.167485 0 0.311162 0.375576 0.164788 0 0.3266 0.374884 0.164804 0 0.342032 0.374774 0.16533 0 0.356387 0.375516 0.164996 0 0.374692 0.376226 0.164522 0 0.390213 0.376403 0.164529 0 0.408431 0.376795 0.163232 0 0.426233 0.375876 0.16426 0 0.445731 0.374815 0.165803 0 0.465596 0.374935 0.166565 0 0.487263 0.375065 0.167124 0 0.508477 0.376395 0.1668 0 0.538042 0.374847 0.166682 0 0.556714 0.377172 0.165738 0 0.576782 0.381152 0.164345 0 0.696806 0.378746 0.164443 0 0.795232 0.382822 0.158678 0 0.818767 0.386691 0.130466 0 0.829049 0.388155 0.116392 0 0.0989546 0.391906 0.171824 0 0.0989546 0.391906 0.171824 0 0.0989546 0.391906 0.171824 0 0.106679 0.391558 0.171541 0 0.123532 0.390728 0.170721 0 0.144002 0.390265 0.169273 0 0.15314 0.390217 0.167745 0 0.162924 0.389935 0.166334 0 0.191839 0.389845 0.166704 0 0.225342 0.389188 0.165115 0 0.249977 0.387678 0.165887 0 0.26828 0.388809 0.169042 0 0.290708 0.389501 0.16795 0 0.309214 0.389125 0.164426 0 0.326683 0.387635 0.163118 0 0.341374 0.38793 0.164562 0 0.357215 0.387693 0.165792 0 0.375172 0.388679 0.165855 0 0.390256 0.38914 0.165346 0 0.408776 0.389298 0.164098 0 0.425665 0.389093 0.163815 0 0.444622 0.388016 0.165047 0 0.465599 0.387059 0.16644 0 0.48768 0.387493 0.167101 0 0.509749 0.389176 0.166927 0 0.535846 0.389475 0.166309 0 0.559043 0.390451 0.165861 0 0.576584 0.395443 0.164384 0 0.699438 0.3901 0.164497 0 0.797784 0.395587 0.159513 0 0.821212 0.399114 0.13129 0 0.831352 0.40014 0.117271 0 0.0980178 0.40655 0.1721 0 0.0980178 0.40655 0.1721 0 0.0980177 0.40655 0.1721 0 0.106151 0.40606 0.171133 0 0.123192 0.406256 0.17051 0 0.143876 0.405924 0.169008 0 0.152822 0.405789 0.167293 0 0.162491 0.405609 0.166612 0 0.191497 0.405089 0.167766 0 0.223779 0.405281 0.165435 0 0.25036 0.403062 0.165669 0 0.26929 0.403753 0.168279 0 0.290837 0.404771 0.168606 0 0.30857 0.404883 0.165615 0 0.326198 0.403907 0.161865 0 0.341227 0.403992 0.16312 0 0.357048 0.403213 0.165785 0 0.376057 0.403345 0.166996 0 0.390655 0.40414 0.16682 0 0.409114 0.404751 0.165159 0 0.42552 0.405513 0.164082 0 0.44379 0.405521 0.164482 0 0.465436 0.40427 0.165983 0 0.488371 0.404479 0.16691 0 0.511404 0.405695 0.166954 0 0.533982 0.407597 0.166399 0 0.561742 0.40652 0.165773 0 0.576473 0.411637 0.164146 0 0.70283 0.405469 0.164496 0 0.801051 0.411069 0.161168 0 0.825089 0.417279 0.132634 0 0.83624 0.421163 0.118662 0 0.0974456 0.421927 0.172218 0 0.0974456 0.421927 0.172218 0 0.0974456 0.421927 0.172218 0 0.105803 0.421727 0.171282 0 0.123118 0.421508 0.169669 0 0.143588 0.421217 0.168462 0 0.152417 0.421118 0.166625 0 0.162099 0.42104 0.16599 0 0.191749 0.420873 0.168514 0 0.223778 0.421363 0.166083 0 0.248307 0.419991 0.166419 0 0.270157 0.41968 0.167557 0 0.290916 0.421149 0.168999 0 0.308484 0.42129 0.16644 0 0.324819 0.421 0.162551 0 0.34153 0.42102 0.161137 0 0.355784 0.421155 0.164419 0 0.376943 0.419928 0.168091 0 0.392174 0.421022 0.168139 0 0.409686 0.42285 0.16642 0 0.426191 0.423824 0.165068 0 0.443912 0.425159 0.164161 0 0.464501 0.424765 0.165215 0 0.488752 0.422974 0.166451 0 0.512197 0.42318 0.166358 0 0.532765 0.424584 0.165572 0 0.564573 0.422945 0.165401 0 0.579929 0.428165 0.16383 0 0.707044 0.424099 0.164472 0 0.80553 0.432492 0.163644 0 0.829367 0.437134 0.135017 0 0.838075 0.433993 0.121825 0 0.0971546 0.439766 0.172064 0 0.0971546 0.439766 0.172064 0 0.0971546 0.439766 0.172064 0 0.105255 0.439565 0.171481 0 0.122733 0.439004 0.169293 0 0.143393 0.438939 0.168047 0 0.152405 0.439058 0.166242 0 0.16211 0.43925 0.165562 0 0.192259 0.439397 0.168572 0 0.223956 0.440529 0.167525 0 0.246231 0.44008 0.166946 0 0.270893 0.438835 0.167916 0 0.291934 0.440656 0.168835 0 0.308833 0.441288 0.166975 0 0.324227 0.441333 0.163873 0 0.34329 0.44077 0.160579 0 0.355888 0.442377 0.162451 0 0.375835 0.441901 0.166408 0 0.393762 0.441106 0.169565 0 0.411667 0.442981 0.167799 0 0.427323 0.444357 0.165962 0 0.444706 0.444657 0.16468 0 0.462598 0.444879 0.163673 0 0.486668 0.442545 0.164804 0 0.512465 0.441268 0.165303 0 0.534575 0.443325 0.164714 0 0.565533 0.443467 0.16513 0 0.584353 0.448924 0.163445 0 0.703506 0.44212 0.165335 0 0.806674 0.446523 0.167576 0 0.830058 0.446692 0.138928 0 0.842126 0.453084 0.124838 0 0.0969621 0.456354 0.171964 0 0.0969621 0.456354 0.171964 0 0.0969621 0.456354 0.171964 0 0.104977 0.456422 0.171678 0 0.122723 0.456648 0.169603 0 0.143667 0.457092 0.16806 0 0.152779 0.457309 0.16592 0 0.162613 0.457681 0.165258 0 0.192262 0.458143 0.168006 0 0.224845 0.459644 0.169353 0 0.244656 0.460427 0.167191 0 0.271576 0.458726 0.169067 0 0.293577 0.460345 0.168628 0 0.309286 0.461712 0.16702 0 0.324286 0.462188 0.164158 0 0.343099 0.461694 0.160998 0 0.357835 0.46188 0.16139 0 0.374675 0.462498 0.16432 0 0.392308 0.461232 0.167324 0 0.412931 0.460231 0.168671 0 0.428691 0.46141 0.166669 0 0.444869 0.462847 0.164726 0 0.462884 0.463577 0.163607 0 0.485154 0.464045 0.163124 0 0.512961 0.46268 0.163994 0 0.536716 0.463656 0.164127 0 0.564219 0.463618 0.164599 0 0.587717 0.466322 0.163758 0 0.697632 0.453707 0.166864 0 0.808309 0.460278 0.171508 0 0.834448 0.466539 0.140811 0 0.844835 0.468847 0.126199 0 0.0973748 0.47712 0.17202 0 0.0973748 0.47712 0.17202 0 0.0973748 0.47712 0.17202 0 0.105612 0.477348 0.171528 0 0.123008 0.477881 0.169997 0 0.14442 0.478679 0.167843 0 0.153362 0.479203 0.165861 0 0.163404 0.47966 0.164831 0 0.192696 0.480748 0.167439 0 0.225991 0.482194 0.169222 0 0.245083 0.483661 0.16768 0 0.269705 0.482238 0.169341 0 0.295419 0.482025 0.168412 0 0.309965 0.483668 0.166854 0 0.324429 0.483981 0.163506 0 0.341636 0.483801 0.160562 0 0.359052 0.482843 0.160137 0 0.374973 0.48388 0.16215 0 0.390559 0.484109 0.164282 0 0.412178 0.482822 0.16669 0 0.430297 0.482244 0.167472 0 0.446536 0.483794 0.165768 0 0.464023 0.485541 0.164551 0 0.484859 0.486223 0.163473 0 0.511346 0.485204 0.163248 0 0.538371 0.483407 0.164044 0 0.56165 0.480885 0.164926 0 0.58884 0.476724 0.166364 0 0.692074 0.467211 0.169086 0 0.810522 0.481018 0.172783 0 0.83554 0.47683 0.141498 0 0.843852 0.473399 0.126946 0 0.0982413 0.503969 0.172185 0 0.0982413 0.503969 0.172185 0 0.0982413 0.503969 0.172185 0 0.106687 0.504296 0.171691 0 0.124125 0.505022 0.169976 0 0.14533 0.505537 0.167588 0 0.154457 0.506079 0.165276 0 0.164244 0.506804 0.164669 0 0.193144 0.507124 0.166167 0 0.227532 0.507343 0.167511 0 0.246318 0.508668 0.166832 0 0.26666 0.508909 0.167813 0 0.296258 0.507088 0.168315 0 0.312081 0.508363 0.166838 0 0.324564 0.509232 0.163634 0 0.340747 0.509104 0.16028 0 0.357452 0.508263 0.159955 0 0.376855 0.507634 0.160873 0 0.390402 0.508324 0.163622 0 0.409918 0.507942 0.164646 0 0.429361 0.506486 0.166738 0 0.448467 0.50394 0.16852 0 0.464931 0.501846 0.167983 0 0.483221 0.499497 0.167582 0 0.507301 0.495202 0.166795 0 0.533383 0.490334 0.167201 0 0.557477 0.488147 0.168384 0 0.589773 0.487276 0.169131 0 0.694907 0.510165 0.167328 0 0.797979 0.490897 0.165983 0 0.835937 0.485659 0.141977 0 0.844563 0.483521 0.127991 0 0.0991122 0.532464 0.171429 0 0.0991122 0.532464 0.171429 0 0.0991122 0.532464 0.171429 0 0.107179 0.532552 0.171142 0 0.12503 0.532766 0.168725 0 0.145529 0.533148 0.166638 0 0.154888 0.533013 0.163886 0 0.164537 0.533005 0.163329 0 0.19303 0.532835 0.164987 0 0.228328 0.532807 0.166532 0 0.248096 0.533969 0.166552 0 0.265535 0.535248 0.166542 0 0.296639 0.531884 0.170433 0 0.313408 0.529554 0.168706 0 0.3239 0.528282 0.167225 0 0.338449 0.525563 0.163843 0 0.353712 0.523046 0.163374 0 0.37425 0.519661 0.16461 0 0.388989 0.517929 0.16673 0 0.407052 0.515699 0.169941 0 0.42508 0.514775 0.170701 0 0.445062 0.514601 0.172 0 0.464982 0.513744 0.173786 0 0.483182 0.515809 0.171342 0 0.506076 0.51686 0.168931 0 0.531618 0.516836 0.166578 0 0.559468 0.523608 0.165871 0 0.600629 0.532533 0.166808 0 0.686436 0.525915 0.161653 0 0.75729 0.506756 0.152926 0 0.833383 0.490985 0.144697 0 0.842819 0.487493 0.130968 0 0.0992867 0.557709 0.170355 0 0.0992867 0.557709 0.170355 0 0.0992867 0.557709 0.170355 0 0.107362 0.558031 0.170326 0 0.125005 0.558511 0.168868 0 0.145621 0.558799 0.166644 0 0.154515 0.557334 0.164549 0 0.164375 0.555416 0.163817 0 0.191975 0.552037 0.167395 0 0.225741 0.547397 0.170166 0 0.246483 0.544911 0.170019 0 0.262269 0.5435 0.170944 0 0.292112 0.539813 0.174465 0 0.311045 0.540328 0.174561 0 0.323137 0.541333 0.171208 0 0.33607 0.54277 0.168411 0 0.351381 0.543145 0.167257 0 0.372916 0.542589 0.166763 0 0.388998 0.542252 0.166995 0 0.407787 0.542375 0.169026 0 0.425521 0.544299 0.169769 0 0.445089 0.548466 0.168685 0 0.467438 0.555855 0.168887 0 0.491416 0.563014 0.169775 0 0.514174 0.5715 0.164733 0 0.536329 0.569825 0.160329 0 0.560578 0.564956 0.158235 0 0.591339 0.556221 0.160503 0 0.684297 0.526461 0.166933 0 0.746707 0.508297 0.150406 0 0.827062 0.496533 0.145651 0 0.838755 0.492275 0.132973 0 0.0974733 0.571858 0.172961 0 0.0974733 0.571858 0.172961 0 0.0974733 0.571858 0.172961 0 0.105314 0.570835 0.173328 0 0.121892 0.568465 0.173141 0 0.142095 0.565422 0.171826 0 0.151322 0.56572 0.169859 0 0.162124 0.566108 0.167632 0 0.190261 0.567243 0.17075 0 0.224118 0.567729 0.172296 0 0.246619 0.567904 0.171303 0 0.263922 0.568838 0.1704 0 0.289349 0.569614 0.171871 0 0.313797 0.572306 0.172685 0 0.326975 0.57649 0.169715 0 0.339753 0.580787 0.16607 0 0.354302 0.586442 0.16493 0 0.376109 0.594856 0.16308 0 0.39589 0.599177 0.161556 0 0.415885 0.601938 0.158209 0 0.431398 0.599258 0.160649 0 0.450091 0.594551 0.162301 0 0.468491 0.590014 0.163071 0 0.488734 0.585045 0.164541 0 0.51092 0.579601 0.166118 0 0.532452 0.574397 0.164481 0 0.555867 0.567455 0.163309 0 0.581325 0.559367 0.163407 0 0.680318 0.527718 0.168163 0 0.741589 0.508955 0.148436 0 0.825888 0.506872 0.14878 0 0.850666 0.542791 0.136805 0 0.105456 0.661777 0.164042 0 0.105456 0.661777 0.164042 0 0.105456 0.661777 0.164042 0 0.111201 0.661671 0.166718 0 0.124201 0.660778 0.170083 0 0.143408 0.660032 0.169395 0 0.152656 0.659502 0.1676 0 0.163255 0.658763 0.166422 0 0.191117 0.655854 0.170422 0 0.22327 0.652407 0.17212 0 0.247399 0.651586 0.172345 0 0.266472 0.650712 0.171156 0 0.288228 0.648813 0.168726 0 0.307101 0.649872 0.169106 0 0.324064 0.648073 0.167522 0 0.339009 0.641937 0.16615 0 0.349264 0.637944 0.166353 0 0.361508 0.633314 0.167621 0 0.372981 0.62906 0.169406 0 0.39525 0.638078 0.169562 0 0.419795 0.653642 0.16911 0 0.443832 0.667718 0.166564 0 0.466541 0.67581 0.167087 0 0.49148 0.679554 0.166827 0 0.515065 0.674607 0.166355 0 0.536123 0.669397 0.164626 0 0.556867 0.664098 0.162916 0 0.585578 0.656348 0.163436 0 0.657799 0.638787 0.152554 0 0.766688 0.611036 0.155552 0 0.830559 0.609108 0.144598 0 0.85364 0.62938 0.13367 0 0.0927457 0.742783 0.170916 0 0.0927457 0.742783 0.170916 0 0.0927457 0.742783 0.170916 0 0.102047 0.738902 0.169381 0 0.121262 0.730836 0.165538 0 0.138145 0.724387 0.165327 0 0.143669 0.723339 0.166789 0 0.153025 0.727052 0.168144 0 0.183544 0.735312 0.17352 0 0.216631 0.740236 0.17462 0 0.242452 0.746136 0.174811 0 0.261846 0.741661 0.172092 0 0.282372 0.736708 0.170289 0 0.304002 0.73169 0.169163 0 0.320269 0.731045 0.165703 0 0.332806 0.729564 0.161712 0 0.346491 0.726899 0.162781 0 0.368366 0.721747 0.164808 0 0.378996 0.71845 0.165134 0 0.391431 0.714733 0.164434 0 0.404038 0.710996 0.163672 0 0.41879 0.706548 0.163849 0 0.437031 0.700993 0.163758 0 0.454128 0.695837 0.162453 0 0.475098 0.689536 0.160445 0 0.501295 0.685554 0.158935 0 0.527144 0.683022 0.155998 0 0.566937 0.697376 0.164004 0 0.690812 0.771582 0.16868 0 0.761522 0.754558 0.154638 0 0.833294 0.749611 0.143465 0 0.844526 0.751521 0.131992 0 0.0865761 0.7971 0.166405 0 0.0865761 0.7971 0.166405 0 0.0865761 0.7971 0.166405 0 0.0965129 0.794944 0.164826 0 0.115479 0.790887 0.163183 0 0.134558 0.786676 0.161704 0 0.145962 0.783955 0.157041 0 0.157203 0.781481 0.154815 0 0.181229 0.786905 0.161929 0 0.216089 0.816761 0.168652 0 0.242487 0.829397 0.170895 0 0.257656 0.81468 0.16948 0 0.271863 0.800193 0.16719 0 0.286229 0.787915 0.165703 0 0.299705 0.778114 0.165051 0 0.313984 0.766805 0.163153 0 0.322794 0.756103 0.161129 0 0.332945 0.742083 0.158955 0 0.341907 0.733907 0.159082 0 0.38057 0.782311 0.164874 0 0.417625 0.84486 0.16685 0 0.435549 0.846961 0.167417 0 0.455919 0.844857 0.168228 0 0.478816 0.841241 0.168617 0 0.502748 0.838912 0.167169 0 0.531432 0.838225 0.165838 0 0.554453 0.84055 0.167476 0 0.583854 0.841531 0.166836 0 0.671918 0.825889 0.15839 0 0.760323 0.854775 0.150481 0 0.824827 0.84298 0.138942 0 0.864216 0.836057 0.134699 0 0.100928 0.916992 0.17318 0 0.100928 0.916992 0.17318 0 0.100928 0.916992 0.17318 0 0.112049 0.917032 0.170774 0 0.129276 0.919132 0.171832 0 0.154958 0.919592 0.164574 0 0.162702 0.920538 0.163661 0 0.17166 0.918079 0.161523 0 0.200403 0.909328 0.158465 0 0.219194 0.903102 0.164846 0 0.234836 0.897756 0.166587 0 0.252708 0.892026 0.166673 0 0.271744 0.885952 0.165195 0 0.289252 0.88682 0.163485 0 0.307508 0.885681 0.162053 0 0.328253 0.882956 0.162809 0 0.344428 0.88154 0.163803 0 0.366026 0.88815 0.165076 0 0.382009 0.893268 0.165488 0 0.402646 0.898621 0.166262 0 0.426374 0.901264 0.169409 0 0.445079 0.906451 0.169457 0 0.460483 0.907863 0.169685 0 0.481156 0.906791 0.168479 0 0.506143 0.905969 0.168541 0 0.528779 0.904007 0.166333 0 0.551936 0.897272 0.163123 0 0.576404 0.890799 0.164574 0 0.681364 0.894733 0.159525 0 0.758102 0.907284 0.154213 0 0.845169 0.885389 0.148019 0 0.873948 0.875993 0.13995 0 0.0955903 0.100036 0.203883 0 0.0955903 0.100036 0.203883 0 0.0955903 0.100036 0.203883 0 0.104402 0.0994941 0.203544 0 0.122627 0.0978406 0.202382 0 0.138071 0.0971487 0.200408 0 0.146807 0.0971608 0.1985 0 0.160385 0.098184 0.198581 0 0.197939 0.104203 0.199362 0 0.230163 0.101739 0.203458 0 0.252321 0.100308 0.20684 0 0.267331 0.0988974 0.204267 0 0.289155 0.0988788 0.199607 0 0.306769 0.0985545 0.197576 0 0.32138 0.0982947 0.196574 0 0.341414 0.0978083 0.198836 0 0.357682 0.0967863 0.200144 0 0.376712 0.0954966 0.200983 0 0.39078 0.0953883 0.200913 0 0.408023 0.0958724 0.200662 0 0.428177 0.0951159 0.200937 0 0.448538 0.0967976 0.201308 0 0.458975 0.102082 0.200435 0 0.474096 0.105659 0.19909 0 0.510972 0.101138 0.200542 0 0.532675 0.0996785 0.200575 0 0.559705 0.0962412 0.200951 0 0.591989 0.093176 0.201449 0 0.671006 0.102309 0.189597 0 0.798102 0.0959249 0.197562 0 0.821708 0.0966175 0.168153 0 0.834757 0.100549 0.155132 0 0.0955903 0.100036 0.203883 0 0.0955903 0.100036 0.203883 0 0.0955903 0.100036 0.203883 0 0.104402 0.0994941 0.203544 0 0.122627 0.0978406 0.202382 0 0.138071 0.0971487 0.200408 0 0.146807 0.0971608 0.1985 0 0.160385 0.098184 0.198581 0 0.197939 0.104203 0.199362 0 0.230163 0.101739 0.203458 0 0.252321 0.100308 0.20684 0 0.267331 0.0988974 0.204267 0 0.289155 0.0988788 0.199607 0 0.306769 0.0985545 0.197576 0 0.32138 0.0982947 0.196574 0 0.341414 0.0978083 0.198836 0 0.357682 0.0967863 0.200144 0 0.376712 0.0954966 0.200983 0 0.39078 0.0953883 0.200913 0 0.408023 0.0958724 0.200662 0 0.428177 0.0951159 0.200937 0 0.448538 0.0967976 0.201308 0 0.458975 0.102082 0.200435 0 0.474096 0.105659 0.19909 0 0.510972 0.101138 0.200542 0 0.532675 0.0996785 0.200575 0 0.559705 0.0962412 0.200951 0 0.591989 0.093176 0.201449 0 0.671006 0.102309 0.189597 0 0.798102 0.0959249 0.197562 0 0.821708 0.0966175 0.168153 0 0.834757 0.100549 0.155132 0 0.0955903 0.100036 0.203883 0 0.0955903 0.100036 0.203883 0 0.0955903 0.100036 0.203883 0 0.104402 0.0994941 0.203544 0 0.122627 0.0978406 0.202382 0 0.138071 0.0971487 0.200408 0 0.146807 0.0971608 0.1985 0 0.160385 0.0981841 0.198581 0 0.197939 0.104203 0.199362 0 0.230163 0.101739 0.203458 0 0.252321 0.100308 0.20684 0 0.267331 0.0988975 0.204267 0 0.289155 0.0988788 0.199607 0 0.306769 0.0985545 0.197576 0 0.32138 0.0982947 0.196574 0 0.341414 0.0978083 0.198836 0 0.357682 0.0967863 0.200144 0 0.376712 0.0954966 0.200983 0 0.39078 0.0953883 0.200913 0 0.408023 0.0958724 0.200662 0 0.428177 0.0951159 0.200937 0 0.448538 0.0967976 0.201308 0 0.458975 0.102082 0.200435 0 0.474096 0.105659 0.19909 0 0.510972 0.101138 0.200542 0 0.532675 0.0996785 0.200575 0 0.559705 0.0962412 0.200951 0 0.591989 0.093176 0.201449 0 0.671006 0.102309 0.189597 0 0.798102 0.0959249 0.197562 0 0.821708 0.0966177 0.168153 0 0.834757 0.100549 0.155132 0 0.0948299 0.106488 0.203505 0 0.0948299 0.106488 0.203505 0 0.0948299 0.106488 0.203505 0 0.103722 0.105903 0.203385 0 0.122507 0.105414 0.202381 0 0.13776 0.105842 0.200254 0 0.147158 0.106192 0.198241 0 0.161876 0.108596 0.198077 0 0.197586 0.113194 0.199407 0 0.229516 0.109857 0.2039 0 0.251565 0.108551 0.206169 0 0.26694 0.107214 0.20458 0 0.288918 0.10595 0.199402 0 0.306621 0.10538 0.197267 0 0.321342 0.105122 0.196235 0 0.340986 0.104717 0.198413 0 0.357207 0.104157 0.200082 0 0.376458 0.103612 0.200897 0 0.390724 0.103438 0.200837 0 0.408565 0.104277 0.200696 0 0.427884 0.105682 0.201157 0 0.45052 0.106369 0.20171 0 0.460916 0.110844 0.200901 0 0.474301 0.115011 0.199484 0 0.506853 0.110366 0.199506 0 0.533882 0.107025 0.200318 0 0.557399 0.105211 0.200701 0 0.592863 0.101701 0.200318 0 0.673026 0.110684 0.190072 0 0.79882 0.101745 0.19923 0 0.823601 0.106457 0.169197 0 0.836507 0.110719 0.15542 0 0.0955255 0.121063 0.204174 0 0.0955255 0.121063 0.204174 0 0.0955255 0.121063 0.204174 0 0.105354 0.1221 0.203789 0 0.123459 0.125876 0.202794 0 0.139828 0.127576 0.200599 0 0.150381 0.128835 0.198734 0 0.164994 0.132082 0.196863 0 0.196293 0.129219 0.199188 0 0.227414 0.123639 0.20433 0 0.250457 0.121851 0.205384 0 0.265832 0.121747 0.20526 0 0.287786 0.12053 0.199946 0 0.306372 0.119576 0.196605 0 0.32136 0.120013 0.195523 0 0.341198 0.120818 0.197505 0 0.357359 0.121697 0.199369 0 0.376491 0.122333 0.201071 0 0.39157 0.123051 0.201228 0 0.410788 0.124469 0.201412 0 0.426716 0.126303 0.201637 0 0.453974 0.12471 0.20258 0 0.464496 0.128169 0.2016 0 0.473354 0.130171 0.199561 0 0.500182 0.128096 0.198265 0 0.536642 0.122425 0.199316 0 0.556315 0.12377 0.199275 0 0.594833 0.119394 0.198206 0 0.675613 0.123909 0.191967 0 0.801663 0.118367 0.2017 0 0.826833 0.124555 0.171136 0 0.839105 0.126523 0.15749 0 0.0987002 0.146028 0.206826 0 0.0987002 0.146028 0.206826 0 0.0987002 0.146028 0.206826 0 0.109995 0.147582 0.205517 0 0.127019 0.150492 0.203579 0 0.141188 0.150515 0.200419 0 0.15016 0.149184 0.198434 0 0.163834 0.14735 0.196396 0 0.192922 0.143502 0.197982 0 0.225164 0.139644 0.204181 0 0.249323 0.138394 0.2061 0 0.266179 0.138863 0.205148 0 0.287519 0.140493 0.200634 0 0.30646 0.140789 0.196343 0 0.322563 0.141473 0.195043 0 0.342981 0.143229 0.197186 0 0.358177 0.144099 0.198859 0 0.377312 0.145081 0.200776 0 0.392648 0.14567 0.20181 0 0.412132 0.145887 0.202052 0 0.428057 0.147091 0.202088 0 0.450884 0.14503 0.202331 0 0.466917 0.144958 0.201385 0 0.476533 0.147223 0.199437 0 0.497187 0.146361 0.198137 0 0.538689 0.139341 0.199449 0 0.554578 0.141138 0.199139 0 0.591083 0.136175 0.198168 0 0.681625 0.147571 0.192715 0 0.804572 0.138625 0.203203 0 0.828988 0.140142 0.174136 0 0.841298 0.141676 0.160337 0 0.0993434 0.159785 0.207285 0 0.0993434 0.159785 0.207285 0 0.0993434 0.159785 0.207285 0 0.111346 0.159658 0.206464 0 0.127246 0.159204 0.203976 0 0.139275 0.157844 0.20042 0 0.148199 0.156632 0.198076 0 0.162711 0.154436 0.196217 0 0.19144 0.151934 0.197275 0 0.224131 0.148882 0.204073 0 0.249812 0.149582 0.20657 0 0.267284 0.150796 0.205229 0 0.287881 0.152701 0.201234 0 0.306656 0.152999 0.19682 0 0.323097 0.152959 0.194722 0 0.343632 0.153862 0.197066 0 0.358777 0.155395 0.198756 0 0.377467 0.15547 0.200461 0 0.392619 0.155294 0.201398 0 0.41247 0.156072 0.202178 0 0.42816 0.155577 0.202214 0 0.448754 0.153124 0.202452 0 0.467566 0.151313 0.201948 0 0.477293 0.152984 0.200086 0 0.496364 0.153308 0.198893 0 0.536011 0.146992 0.199978 0 0.553468 0.148065 0.199516 0 0.589079 0.143926 0.198885 0 0.682776 0.157073 0.192953 0 0.805139 0.144865 0.204197 0 0.829839 0.146451 0.175285 0 0.842217 0.148039 0.16142 0 0.0990137 0.169263 0.207468 0 0.0990137 0.169263 0.207468 0 0.0990137 0.169263 0.207468 0 0.10992 0.16741 0.206651 0 0.126523 0.164992 0.204405 0 0.13772 0.163874 0.200567 0 0.147026 0.162512 0.198274 0 0.161284 0.160572 0.196108 21561.3 0.191673 0.159903 0.196675 27032.9 0.223982 0.159624 0.204179 0 0.250325 0.160374 0.207062 0 0.268169 0.161298 0.205265 0 0.288443 0.16343 0.202258 0 0.306592 0.163359 0.197329 0 0.323134 0.162951 0.194948 0 0.344312 0.163517 0.196965 0 0.358962 0.164313 0.198521 0 0.377413 0.163878 0.20035 0 0.39261 0.16362 0.201525 0 0.411904 0.162799 0.202745 0 0.427646 0.161698 0.202812 0 0.446499 0.159851 0.202925 0 0.468055 0.1571 0.202659 0 0.478288 0.159327 0.200915 0 0.495499 0.160844 0.199707 0 0.533174 0.155317 0.200388 0 0.553899 0.15821 0.199206 0 0.587701 0.157223 0.198549 0 0.684059 0.164079 0.195136 0 0.805905 0.152666 0.205417 0 0.83102 0.154897 0.176761 0 0.843462 0.156698 0.162762 0 0.0938192 0.194324 0.207246 0 0.0938192 0.194324 0.207246 0 0.0938192 0.194324 0.207246 0 0.102419 0.193447 0.205523 0 0.121934 0.190396 0.20322 0 0.136303 0.190304 0.201297 0 0.14552 0.190534 0.199352 0 0.161714 0.191767 0.197253 27055.7 0.19735 0.197282 0.196416 246045 0.220563 0.197144 0.202235 50484.1 0.251087 0.192783 0.208013 0 0.26749 0.191681 0.206797 0 0.289001 0.190669 0.204624 0 0.306107 0.190488 0.201768 0 0.322309 0.191468 0.198433 0 0.345112 0.194331 0.198877 0 0.360644 0.195523 0.199542 0 0.377485 0.196039 0.199967 0 0.391224 0.196347 0.200295 0 0.410526 0.19558 0.200992 0 0.427675 0.195352 0.201818 0 0.444564 0.196863 0.202413 0 0.467532 0.196271 0.202251 0 0.485594 0.197273 0.200847 0 0.497273 0.201153 0.19869 0 0.523536 0.200696 0.197676 0 0.562378 0.196109 0.199289 0 0.583381 0.198492 0.197064 0 0.685944 0.191899 0.201397 0 0.807858 0.190647 0.204237 0 0.834311 0.191599 0.17793 0 0.848256 0.191713 0.165889 0 0.0943576 0.227197 0.20862 0 0.0943576 0.227197 0.20862 0 0.0943576 0.227197 0.20862 0 0.102878 0.227296 0.207515 0 0.119514 0.226885 0.204611 0 0.13421 0.225323 0.200362 0 0.143585 0.224408 0.199288 0 0.15828 0.223903 0.1985 0 0.199789 0.224028 0.198432 50626.9 0.220011 0.231765 0.200879 46796.9 0.247155 0.234888 0.204771 0 0.270574 0.23597 0.205869 0 0.294468 0.236563 0.203113 0 0.310421 0.236878 0.202334 0 0.324971 0.236136 0.200174 0 0.345236 0.234661 0.19929 0 0.359712 0.233636 0.199023 0 0.376321 0.232472 0.199349 0 0.389893 0.231789 0.198976 0 0.409247 0.231001 0.199126 0 0.427405 0.230329 0.200064 0 0.446029 0.229978 0.201271 0 0.462398 0.231051 0.202075 0 0.49083 0.228349 0.202241 0 0.503385 0.231967 0.200132 0 0.521235 0.233953 0.198288 0 0.560284 0.228604 0.199574 0 0.582312 0.230756 0.197798 0 0.683805 0.230034 0.200223 0 0.801659 0.230857 0.196864 0 0.835929 0.228511 0.175161 0 0.849901 0.228993 0.163135 0 0.0936926 0.241509 0.208252 0 0.0936926 0.241509 0.208252 0 0.0936926 0.241509 0.208252 0 0.10335 0.241706 0.207662 0 0.120111 0.243133 0.204831 0 0.133381 0.243868 0.200001 0 0.143129 0.243781 0.197522 0 0.157536 0.244809 0.196518 0 0.203253 0.246027 0.198725 0 0.223997 0.254155 0.200687 0 0.246901 0.256139 0.204206 0 0.270817 0.254599 0.205223 0 0.292525 0.25195 0.203158 0 0.310157 0.250107 0.201831 0 0.323886 0.249448 0.200686 0 0.343726 0.248086 0.200485 0 0.359103 0.247898 0.200304 0 0.375918 0.24777 0.199986 0 0.388817 0.2475 0.199534 0 0.408489 0.246407 0.199028 0 0.427061 0.245835 0.199658 0 0.44615 0.245897 0.200801 0 0.463228 0.246483 0.201711 0 0.488603 0.244856 0.202489 0 0.506118 0.246873 0.200714 0 0.520113 0.250446 0.198424 0 0.555073 0.247222 0.1987 0 0.584613 0.24748 0.198238 0 0.681106 0.249716 0.199173 0 0.791393 0.251835 0.188937 0 0.834457 0.247031 0.17258 0 0.850605 0.246331 0.162069 0 0.0938526 0.259192 0.206159 0 0.0938526 0.259192 0.206159 0 0.0938527 0.259192 0.206159 0 0.103951 0.259806 0.206022 0 0.122015 0.26195 0.204245 0 0.134736 0.263379 0.200738 0 0.143544 0.263699 0.197518 0 0.158687 0.264101 0.196169 0 0.205529 0.263934 0.199628 0 0.226467 0.268842 0.201443 0 0.247065 0.27018 0.20427 0 0.267922 0.267894 0.204452 0 0.290179 0.265052 0.202459 0 0.309139 0.262456 0.200616 0 0.323079 0.26185 0.200965 0 0.343378 0.261715 0.201354 0 0.35902 0.261472 0.201636 0 0.375845 0.261484 0.200953 0 0.388494 0.261504 0.200094 0 0.407834 0.261059 0.199622 0 0.42682 0.260334 0.199362 0 0.446194 0.260267 0.200347 0 0.464052 0.260852 0.201149 0 0.486645 0.260036 0.201786 0 0.508449 0.260778 0.20107 0 0.520925 0.26577 0.198669 0 0.550756 0.264697 0.198167 0 0.587754 0.262221 0.198727 0 0.678937 0.265276 0.197305 0 0.788207 0.26677 0.187266 0 0.826286 0.264808 0.166419 0 0.851004 0.261118 0.161299 0 0.0950689 0.283596 0.205109 0 0.0950689 0.283596 0.205109 0 0.095069 0.283596 0.205109 0 0.104947 0.284128 0.205141 0 0.123837 0.285271 0.204436 0 0.136713 0.286693 0.2012 0 0.144918 0.2873 0.199221 0 0.160097 0.287329 0.19699 0 0.205945 0.285917 0.199431 0 0.228537 0.286539 0.203552 0 0.245895 0.287524 0.203703 0 0.265058 0.28638 0.204364 0 0.288234 0.284923 0.201038 0 0.306285 0.284001 0.198592 0 0.322984 0.283097 0.199463 0 0.343379 0.282813 0.201564 0 0.358982 0.28265 0.202261 0 0.376205 0.283166 0.202687 0 0.389112 0.283681 0.20147 0 0.407031 0.284094 0.200176 0 0.425728 0.283528 0.200014 0 0.44647 0.28321 0.199923 0 0.465639 0.283855 0.200423 0 0.483937 0.285373 0.200676 0 0.512744 0.284282 0.201289 0 0.525732 0.289162 0.199495 0 0.547885 0.290701 0.19824 0 0.592519 0.284838 0.199322 0 0.675935 0.290137 0.19429 0 0.792299 0.286204 0.193368 0 0.827091 0.28746 0.169499 0 0.844948 0.288829 0.157616 0 0.095565 0.309538 0.205002 0 0.095565 0.309538 0.205002 0 0.095565 0.309538 0.205002 0 0.105612 0.309485 0.204479 0 0.125114 0.309804 0.204245 0 0.138433 0.310808 0.201134 0 0.146294 0.311571 0.199185 0 0.159752 0.312524 0.197091 0 0.202369 0.311044 0.198982 0 0.2295 0.307953 0.204538 0 0.246216 0.308678 0.205355 0 0.263963 0.309404 0.203811 0 0.288382 0.308612 0.201031 0 0.3045 0.308644 0.197838 0 0.321542 0.307531 0.195511 0 0.3429 0.306824 0.200862 0 0.359271 0.306728 0.202254 0 0.377346 0.307516 0.203087 0 0.390615 0.308427 0.203165 0 0.40772 0.309826 0.201885 0 0.425312 0.310266 0.200729 0 0.446017 0.309751 0.200727 0 0.466461 0.309485 0.200276 0 0.484936 0.310176 0.199845 0 0.513724 0.308188 0.200355 0 0.530131 0.31096 0.199742 0 0.546477 0.313842 0.198225 0 0.589566 0.30842 0.198841 0 0.675089 0.313185 0.192396 0 0.788878 0.311045 0.191894 0 0.831275 0.307284 0.175285 0 0.849025 0.308236 0.16325 0 0.0957962 0.327474 0.205372 0 0.0957962 0.327474 0.205372 0 0.0957962 0.327474 0.205372 0 0.106025 0.327604 0.204289 0 0.125848 0.328354 0.203782 0 0.140128 0.329436 0.200936 0 0.147978 0.330425 0.198941 0 0.160277 0.330468 0.196779 0 0.199411 0.32778 0.199134 0 0.229175 0.324656 0.203708 0 0.247634 0.324442 0.207352 0 0.26478 0.324936 0.204765 0 0.287436 0.325509 0.201026 0 0.3049 0.325681 0.198164 0 0.32081 0.326289 0.195774 0 0.342974 0.326327 0.19921 0 0.359513 0.326073 0.20194 0 0.378384 0.326254 0.203248 0 0.391611 0.326983 0.203353 0 0.408816 0.328009 0.203235 0 0.425344 0.328323 0.201894 0 0.445023 0.327793 0.201024 0 0.465848 0.326613 0.200697 0 0.485807 0.326217 0.199283 0 0.511187 0.325293 0.19949 0 0.532832 0.326213 0.199328 0 0.545479 0.330832 0.198509 0 0.584339 0.327312 0.198334 0 0.679839 0.32979 0.192528 0 0.7807 0.334148 0.185671 0 0.823238 0.329419 0.16944 0 0.846211 0.326358 0.162444 0 0.0968484 0.348215 0.205652 0 0.0968484 0.348215 0.205652 0 0.0968484 0.348215 0.205652 0 0.106691 0.34869 0.204582 0 0.126589 0.348769 0.203238 0 0.140476 0.348084 0.200565 0 0.148158 0.347904 0.198656 0 0.159765 0.347697 0.196372 0 0.197924 0.345003 0.198111 0 0.229304 0.343935 0.203306 0 0.247827 0.344064 0.207004 0 0.265756 0.343731 0.206414 0 0.288154 0.345357 0.202346 0 0.306436 0.34634 0.198706 0 0.321262 0.347572 0.196708 0 0.343339 0.347707 0.197131 0 0.358716 0.34728 0.200532 0 0.378063 0.345855 0.202757 0 0.392045 0.345498 0.203297 0 0.40958 0.345806 0.203351 0 0.425202 0.346337 0.203231 0 0.444018 0.346139 0.202049 0 0.464911 0.34521 0.201207 0 0.486343 0.344634 0.200178 0 0.5087 0.345108 0.198725 0 0.536134 0.344685 0.198892 0 0.548884 0.349443 0.198473 0 0.578235 0.348927 0.197585 0 0.685731 0.349831 0.193814 0 0.777279 0.354991 0.182535 0 0.81249 0.352631 0.161493 0 0.835168 0.349432 0.154301 0 0.0977861 0.364112 0.205632 0 0.0977861 0.364112 0.205632 0 0.0977861 0.364112 0.205632 0 0.106559 0.363675 0.204688 0 0.12552 0.362066 0.202548 0 0.13944 0.361388 0.200048 0 0.147783 0.360917 0.198402 0 0.159625 0.360744 0.196189 0 0.197944 0.359942 0.196934 0 0.229491 0.359119 0.204073 0 0.248441 0.359949 0.206603 0 0.264882 0.360944 0.206252 0 0.288891 0.360625 0.203571 0 0.307497 0.360564 0.199632 0 0.32174 0.361548 0.197103 0 0.343343 0.361114 0.197037 0 0.358239 0.361366 0.198868 0 0.376734 0.360289 0.201631 0 0.391924 0.359115 0.203001 0 0.410013 0.359086 0.203395 0 0.425613 0.359993 0.203375 0 0.444025 0.36055 0.203246 0 0.464259 0.360482 0.201663 0 0.486112 0.35996 0.200518 0 0.507384 0.360507 0.198546 0 0.538615 0.358421 0.198614 0 0.55163 0.36286 0.198193 0 0.576323 0.364284 0.197815 0 0.68997 0.364221 0.194698 0 0.779646 0.367604 0.18334 0 0.804892 0.3688 0.15595 0 0.827037 0.366187 0.148181 0 0.0970506 0.379147 0.205398 0 0.0970506 0.379147 0.205398 0 0.0970507 0.379147 0.205398 0 0.105612 0.378714 0.204323 0 0.124148 0.377519 0.202218 0 0.138445 0.376709 0.199364 0 0.14674 0.376307 0.198004 0 0.159988 0.376325 0.196114 0 0.197936 0.376753 0.195797 0 0.229079 0.375963 0.20391 0 0.24913 0.376389 0.206531 0 0.264752 0.37721 0.206082 0 0.288381 0.376078 0.203558 0 0.307527 0.375049 0.200868 0 0.322846 0.375457 0.198101 0 0.342638 0.376219 0.197374 0 0.359069 0.376082 0.198174 0 0.375644 0.376766 0.20043 0 0.390724 0.375903 0.201655 0 0.410599 0.375045 0.203395 0 0.426471 0.375901 0.203432 0 0.444444 0.376532 0.203537 0 0.464131 0.376656 0.202951 0 0.48564 0.376231 0.200984 0 0.507961 0.376456 0.199308 0 0.539537 0.373933 0.198462 0 0.554705 0.377925 0.198121 0 0.575824 0.381089 0.197867 0 0.692807 0.378187 0.194715 0 0.782693 0.383183 0.184355 0 0.805272 0.386281 0.155204 0 0.819045 0.386965 0.142151 0 0.0962716 0.391743 0.205579 0 0.0962716 0.391743 0.205579 0 0.0962716 0.391743 0.205579 0 0.104873 0.39123 0.204103 0 0.123004 0.390119 0.202142 0 0.138027 0.389734 0.198944 0 0.146668 0.389791 0.197758 0 0.160479 0.389678 0.196374 0 0.197449 0.389577 0.195084 0 0.228552 0.388678 0.203471 0 0.249784 0.388441 0.206389 0 0.265131 0.38978 0.205962 0 0.287353 0.389225 0.202643 0 0.306734 0.387619 0.201591 0 0.323861 0.387303 0.19885 0 0.342578 0.389108 0.197938 0 0.35969 0.389007 0.197899 0 0.375839 0.390086 0.199611 0 0.389772 0.389821 0.200599 0 0.410161 0.388591 0.202559 0 0.42709 0.388433 0.203542 0 0.444571 0.389019 0.203681 0 0.464134 0.389389 0.203777 0 0.48571 0.389472 0.202013 0 0.508413 0.389535 0.199947 0 0.537852 0.387703 0.198481 0 0.557331 0.390638 0.198051 0 0.575787 0.395182 0.197431 0 0.694606 0.389645 0.194481 0 0.78521 0.395857 0.185263 0 0.807742 0.398797 0.155946 0 0.819164 0.400299 0.141407 0 0.0951672 0.406473 0.206125 0 0.0951672 0.406473 0.206125 0 0.0951672 0.406473 0.206125 0 0.104085 0.406203 0.204339 0 0.122635 0.405788 0.202488 0 0.137635 0.405193 0.198655 0 0.146468 0.40495 0.197348 0 0.159906 0.404591 0.196147 0 0.196368 0.405023 0.194169 0 0.22781 0.40425 0.202363 0 0.250544 0.403416 0.206213 0 0.266626 0.404685 0.206033 0 0.286508 0.405999 0.202502 0 0.304766 0.405037 0.200763 0 0.324661 0.40292 0.200023 0 0.343298 0.404126 0.199082 0 0.359254 0.404671 0.19845 0 0.37688 0.405001 0.199194 0 0.389247 0.405836 0.200065 0 0.40936 0.405169 0.201518 0 0.427462 0.404493 0.203399 0 0.444882 0.405191 0.203997 0 0.464384 0.405749 0.204125 0 0.486056 0.406215 0.203503 0 0.509191 0.406817 0.200516 0 0.535185 0.40591 0.198801 0 0.56014 0.405752 0.197716 0 0.575199 0.410838 0.196557 0 0.697182 0.405515 0.194326 0 0.788369 0.411991 0.186345 0 0.810904 0.415002 0.157089 0 0.823355 0.419458 0.1426 0 0.094619 0.421509 0.206496 0 0.094619 0.421509 0.206496 0 0.094619 0.421509 0.206496 0 0.10351 0.421266 0.204808 0 0.122318 0.420803 0.20234 0 0.136886 0.420532 0.198302 0 0.146165 0.420206 0.196701 0 0.15954 0.42017 0.195645 0 0.196638 0.420916 0.193975 0 0.227049 0.421026 0.200926 0 0.250569 0.419761 0.205804 0 0.26822 0.42035 0.205918 0 0.286145 0.422757 0.203384 0 0.303307 0.422451 0.199746 0 0.32207 0.420766 0.19947 0 0.344558 0.419817 0.200738 0 0.359853 0.42089 0.199973 0 0.37823 0.421824 0.198824 0 0.390375 0.423071 0.199915 0 0.40862 0.424066 0.200309 0 0.427114 0.423529 0.20222 0 0.445933 0.423449 0.204118 0 0.464808 0.423792 0.204152 0 0.486111 0.423317 0.203835 0 0.509323 0.423394 0.201346 0 0.531612 0.423972 0.198437 0 0.563058 0.421896 0.197634 0 0.57751 0.427499 0.195691 0 0.70101 0.424559 0.194285 0 0.793093 0.433815 0.188041 0 0.817847 0.442615 0.158636 0 0.829018 0.44348 0.144763 0 0.0943912 0.439544 0.206312 0 0.0943912 0.439544 0.206312 0 0.0943912 0.439544 0.206312 0 0.102899 0.439402 0.205165 0 0.122036 0.438835 0.202082 0 0.136471 0.43901 0.198176 0 0.14586 0.438921 0.196466 0 0.159654 0.438905 0.195129 0 0.197046 0.439743 0.194376 0 0.227438 0.439583 0.200032 0 0.249405 0.438793 0.204659 0 0.269105 0.439096 0.20572 0 0.288332 0.441628 0.203654 0 0.303617 0.442706 0.199921 0 0.319546 0.442786 0.198716 0 0.344531 0.440677 0.201095 0 0.360817 0.440475 0.201936 0 0.379362 0.441449 0.200381 0 0.39214 0.442927 0.199325 0 0.409215 0.44388 0.200168 0 0.426402 0.44405 0.200338 0 0.445341 0.442886 0.202249 0 0.464693 0.441873 0.203616 0 0.485685 0.441445 0.203223 0 0.509437 0.441491 0.201938 0 0.532313 0.443694 0.19871 0 0.566624 0.442065 0.197985 0 0.582086 0.447813 0.194988 0 0.69937 0.443547 0.19531 0 0.798652 0.457647 0.190815 0 0.818457 0.452493 0.162485 0 0.828897 0.451324 0.148734 0 0.0942544 0.456675 0.206392 0 0.0942544 0.456675 0.206392 0 0.0942544 0.456675 0.206392 0 0.102855 0.4568 0.205435 0 0.121902 0.456752 0.202789 0 0.136754 0.456776 0.198055 0 0.145725 0.456918 0.196612 0 0.159831 0.457002 0.194788 0 0.197726 0.458023 0.194694 0 0.227929 0.458945 0.199679 0 0.248688 0.458853 0.20372 0 0.269856 0.458491 0.205236 0 0.290746 0.460283 0.203416 0 0.304176 0.462397 0.200804 0 0.319148 0.462949 0.198457 0 0.343848 0.46116 0.200341 0 0.360218 0.460156 0.201945 0 0.379813 0.459404 0.201968 0 0.393818 0.459843 0.199467 0 0.409736 0.461375 0.199455 0 0.426625 0.461506 0.199631 0 0.444566 0.461647 0.200107 0 0.463441 0.461347 0.201813 0 0.485999 0.461528 0.202707 0 0.510744 0.462856 0.201882 0 0.534321 0.464889 0.199739 0 0.564107 0.464409 0.197848 0 0.586019 0.466663 0.195422 0 0.697474 0.462727 0.196924 0 0.797779 0.464558 0.196033 0 0.821456 0.46889 0.165211 0 0.832369 0.469208 0.150487 0 0.0946926 0.477055 0.206542 0 0.0946926 0.477055 0.206542 0 0.0946926 0.477055 0.206542 0 0.103295 0.477325 0.205606 0 0.122039 0.47802 0.203413 0 0.137463 0.478333 0.197984 0 0.146345 0.478687 0.196416 0 0.159933 0.479073 0.194756 0 0.198971 0.480086 0.195083 0 0.228424 0.48139 0.199172 0 0.247321 0.48163 0.202726 0 0.270056 0.480111 0.204056 0 0.292948 0.480756 0.20246 0 0.30529 0.482493 0.200175 0 0.319601 0.483271 0.198038 0 0.341359 0.483331 0.199418 0 0.359209 0.482212 0.200509 0 0.378771 0.480879 0.202108 0 0.394359 0.480285 0.201281 0 0.412011 0.482171 0.198825 0 0.427206 0.484403 0.198932 0 0.445541 0.485627 0.199132 0 0.463933 0.4862 0.199865 0 0.485921 0.485413 0.201538 0 0.511433 0.484982 0.202093 0 0.535996 0.485411 0.200812 0 0.561237 0.485282 0.199275 0 0.588343 0.483077 0.197208 0 0.694012 0.470613 0.202106 0 0.800764 0.48236 0.199229 0 0.823255 0.481983 0.166634 0 0.832408 0.478318 0.151248 0 0.0958921 0.503519 0.206609 0 0.0958921 0.503519 0.206609 0 0.0958922 0.503519 0.206609 0 0.104515 0.503952 0.205645 0 0.122906 0.504628 0.2035 0 0.138028 0.504997 0.198273 0 0.147319 0.505204 0.195921 0 0.160469 0.505582 0.194602 0 0.199695 0.504995 0.194628 0 0.227735 0.506148 0.197824 0 0.247043 0.506003 0.20102 0 0.268827 0.505217 0.202142 0 0.294778 0.505992 0.201072 0 0.308363 0.508191 0.19861 0 0.320483 0.510004 0.196868 0 0.341088 0.510108 0.198373 0 0.358747 0.50956 0.200189 0 0.376967 0.508984 0.200948 0 0.392621 0.507458 0.201582 0 0.414156 0.505836 0.200378 0 0.429517 0.507736 0.199552 0 0.446726 0.509592 0.199424 0 0.464597 0.508753 0.200022 0 0.483632 0.506035 0.201019 0 0.509342 0.501555 0.203279 0 0.534288 0.49717 0.204258 0 0.556863 0.493893 0.204996 0 0.586978 0.488478 0.203254 0 0.695684 0.505661 0.202539 0 0.799545 0.488223 0.198879 0 0.82026 0.483021 0.167714 0 0.829882 0.479486 0.152054 0 0.098531 0.529874 0.203207 0 0.098531 0.529874 0.203207 0 0.098531 0.529874 0.203207 0 0.105347 0.530678 0.204549 0 0.123238 0.531061 0.202503 0 0.137979 0.531534 0.197541 0 0.14732 0.531638 0.194831 0 0.160943 0.531873 0.192951 0 0.199882 0.532353 0.1928 0 0.229025 0.533595 0.197529 0 0.247857 0.533848 0.199875 0 0.266778 0.533911 0.200986 0 0.296647 0.532795 0.200886 0 0.311094 0.533534 0.198126 0 0.321902 0.534873 0.196416 0 0.340306 0.532826 0.197669 0 0.357145 0.530381 0.200508 0 0.375501 0.527899 0.202969 0 0.38866 0.525981 0.203132 0 0.410524 0.5223 0.204112 0 0.430129 0.519083 0.204 0 0.445736 0.517151 0.204824 0 0.462458 0.515994 0.20405 0 0.481002 0.516993 0.203628 0 0.504999 0.516597 0.203853 0 0.532379 0.514209 0.205531 0 0.557891 0.518348 0.205843 0 0.594602 0.522879 0.204981 0 0.68948 0.523578 0.194615 0 0.767356 0.508138 0.18611 0 0.821825 0.496091 0.16856 0 0.831804 0.492737 0.153046 0 0.101636 0.555602 0.198283 0 0.101636 0.555602 0.198283 0 0.101636 0.555602 0.198283 0 0.108266 0.556798 0.20017 0 0.123819 0.558431 0.201707 0 0.138565 0.558782 0.196939 0 0.14751 0.558942 0.194881 0 0.161441 0.558975 0.192639 0 0.199385 0.557274 0.193012 0 0.229135 0.554048 0.199339 0 0.245713 0.552685 0.201701 0 0.264662 0.549536 0.202868 0 0.29475 0.544189 0.203364 0 0.308651 0.542015 0.201878 0 0.319897 0.540495 0.199861 0 0.337264 0.542417 0.200674 0 0.354629 0.542504 0.202235 0 0.374944 0.542623 0.205294 0 0.387628 0.54331 0.205775 0 0.407045 0.543189 0.205818 0 0.426771 0.541453 0.205248 0 0.446963 0.539901 0.20624 0 0.464162 0.541561 0.205472 0 0.486004 0.556608 0.201869 0 0.510411 0.566211 0.19929 0 0.535477 0.564836 0.197779 0 0.562956 0.559803 0.19949 0 0.58965 0.555306 0.196633 0 0.68456 0.526114 0.198266 0 0.743801 0.514158 0.177689 0 0.816391 0.50134 0.169843 0 0.829177 0.496945 0.156521 0 0.104483 0.575259 0.195392 0 0.104483 0.575259 0.195392 0 0.104483 0.575259 0.195392 0 0.110124 0.575319 0.198661 0 0.123184 0.574776 0.203535 0 0.136444 0.572492 0.200748 0 0.145056 0.570998 0.199182 0 0.158168 0.568948 0.197973 0 0.195797 0.56639 0.197716 0 0.2281 0.566981 0.202559 0 0.243695 0.568077 0.205269 0 0.262758 0.567589 0.204934 0 0.292065 0.566767 0.204201 0 0.310135 0.567288 0.202079 0 0.323044 0.568191 0.199845 0 0.338826 0.573358 0.199167 0 0.354354 0.57611 0.199341 0 0.376196 0.580503 0.200938 0 0.392472 0.586666 0.202019 0 0.411919 0.592694 0.201149 0 0.431201 0.595413 0.199832 0 0.451386 0.591917 0.197793 0 0.469739 0.588672 0.1996 0 0.487729 0.585433 0.197706 0 0.506319 0.581077 0.196052 0 0.528921 0.574726 0.195881 0 0.555616 0.566134 0.198545 0 0.582642 0.557438 0.201259 0 0.681611 0.530026 0.198503 0 0.738632 0.513937 0.175352 0 0.815161 0.515495 0.17297 0 0.834935 0.525152 0.162933 0 0.101078 0.668469 0.20118 0 0.101078 0.668469 0.20118 0 0.101078 0.668469 0.201181 0 0.111873 0.66614 0.196746 0 0.132101 0.663412 0.191135 0 0.14286 0.662694 0.191524 0 0.149141 0.662377 0.192798 0 0.159636 0.661583 0.194415 0 0.196478 0.657871 0.19479 0 0.229769 0.65431 0.200815 0 0.248686 0.6528 0.205271 0 0.262312 0.651501 0.204135 0 0.287644 0.64783 0.203555 0 0.306058 0.647996 0.200444 0 0.323409 0.647112 0.198016 0 0.341552 0.645167 0.198813 0 0.352406 0.640999 0.199407 0 0.364334 0.636347 0.199279 0 0.375789 0.63185 0.199136 0 0.395526 0.625339 0.199655 0 0.417795 0.642941 0.201979 0 0.44177 0.660607 0.203897 0 0.465761 0.669491 0.203572 0 0.490427 0.676021 0.200965 0 0.51124 0.67098 0.200004 0 0.533373 0.665322 0.198863 0 0.556091 0.659543 0.196706 0 0.580019 0.653622 0.193177 0 0.654692 0.634894 0.18653 0 0.77011 0.606678 0.18536 0 0.815249 0.603896 0.171539 0 0.838907 0.609651 0.160339 0 0.0897962 0.748763 0.21093 0 0.0897962 0.748763 0.21093 0 0.0897962 0.748763 0.21093 0 0.0977853 0.745483 0.210241 0 0.116443 0.737486 0.204085 0 0.130482 0.738651 0.20038 0 0.142834 0.737833 0.194632 0 0.158773 0.73816 0.19028 0 0.191521 0.740906 0.198291 0 0.223701 0.74258 0.204589 0 0.2431 0.740957 0.209519 0 0.257301 0.737515 0.208591 0 0.28076 0.73196 0.205815 0 0.300087 0.728324 0.199243 0 0.315227 0.728053 0.194662 0 0.334368 0.72566 0.194524 0 0.35222 0.721903 0.195994 0 0.368489 0.717393 0.196085 0 0.377983 0.714552 0.195641 0 0.38909 0.711271 0.194348 0 0.402648 0.707227 0.193518 0 0.419888 0.70192 0.193955 0 0.437008 0.696603 0.194396 0 0.452526 0.691778 0.194721 0 0.473371 0.685503 0.194088 0 0.501318 0.682635 0.191586 0 0.527588 0.682142 0.193948 0 0.579032 0.748115 0.204331 0 0.687431 0.768188 0.202595 0 0.755433 0.749995 0.18618 0 0.823795 0.746993 0.167334 0 0.833215 0.751202 0.157969 0 0.0832175 0.802812 0.204862 0 0.0832175 0.802812 0.204862 0 0.0832177 0.802812 0.204862 0 0.0914994 0.802463 0.205719 0 0.111761 0.795634 0.201075 0 0.124547 0.791616 0.197645 0 0.134926 0.78538 0.190964 0 0.146336 0.783759 0.191064 0 0.190666 0.782079 0.186714 0 0.226803 0.813728 0.198394 0 0.241728 0.811192 0.206571 0 0.250755 0.800794 0.207175 0 0.265815 0.786358 0.203238 0 0.282443 0.774852 0.199454 0 0.296523 0.76453 0.196099 0 0.309597 0.754583 0.193162 0 0.320182 0.751557 0.191824 0 0.334718 0.74711 0.191271 0 0.349991 0.745836 0.193875 0 0.384514 0.783622 0.198029 0 0.41852 0.841628 0.198953 0 0.435394 0.845409 0.197783 0 0.455824 0.842494 0.197604 0 0.47967 0.838369 0.198182 0 0.502367 0.83625 0.198281 0 0.529095 0.839282 0.198359 0 0.555473 0.839723 0.196915 0 0.584388 0.841223 0.198372 0 0.671757 0.828263 0.195288 0 0.74781 0.855232 0.178301 0 0.812402 0.845383 0.163496 0 0.858231 0.836294 0.160165 0 0.103461 0.913114 0.206968 0 0.103461 0.913114 0.206968 0 0.103461 0.913114 0.206968 0 0.11016 0.914576 0.209131 0 0.124246 0.917684 0.212356 0 0.143533 0.918238 0.203204 0 0.152183 0.918057 0.199562 0 0.161878 0.91551 0.197939 0 0.195824 0.905647 0.193537 0 0.226134 0.895342 0.187905 0 0.242044 0.889666 0.192887 0 0.251635 0.88634 0.198133 0 0.265811 0.881548 0.198014 0 0.285793 0.885591 0.192955 0 0.307291 0.88369 0.19155 0 0.331239 0.880572 0.194204 0 0.347419 0.883119 0.19467 0 0.368021 0.892458 0.195647 0 0.383597 0.896092 0.197047 0 0.406598 0.900332 0.198854 0 0.428093 0.903751 0.199776 0 0.445471 0.906857 0.199659 0 0.459495 0.907602 0.199508 0 0.480251 0.906237 0.197681 0 0.506007 0.904445 0.197998 0 0.526447 0.900866 0.197584 0 0.548768 0.894395 0.19687 0 0.576201 0.886528 0.194309 0 0.679569 0.896165 0.197397 0 0.749034 0.908402 0.180855 0 0.824276 0.891923 0.171263 0 0.864997 0.878576 0.163864 0 0.095201 0.099672 0.237469 0 0.095201 0.099672 0.237469 0 0.095201 0.099672 0.237469 0 0.103318 0.0986484 0.237724 0 0.116122 0.0970216 0.232762 0 0.133738 0.095627 0.22769 0 0.146753 0.0961045 0.22591 0 0.161668 0.0989981 0.225572 0 0.197474 0.104432 0.226794 0 0.235092 0.101149 0.228797 0 0.252423 0.0994055 0.227774 0 0.266562 0.0979095 0.226822 0 0.284506 0.0997053 0.229102 0 0.302865 0.0985658 0.226572 0 0.322825 0.0977083 0.225704 0 0.344507 0.0966167 0.225648 0 0.360597 0.0954118 0.225784 0 0.377887 0.0943122 0.226796 0 0.39165 0.0943635 0.227512 0 0.40814 0.0953213 0.228277 0 0.430148 0.0952683 0.229547 0 0.447267 0.0982691 0.229677 0 0.457159 0.103643 0.228545 0 0.475294 0.105676 0.229061 0 0.515215 0.0984573 0.232103 0 0.532233 0.0985426 0.232303 0 0.559805 0.0944795 0.231074 0 0.594504 0.0917473 0.234225 0 0.655598 0.101039 0.216801 0 0.78901 0.0995241 0.21834 0 0.8114 0.0980986 0.1896 0 0.827005 0.0984175 0.17973 0 0.095201 0.099672 0.237469 0 0.095201 0.099672 0.237469 0 0.095201 0.099672 0.237469 0 0.103318 0.0986484 0.237724 0 0.116122 0.0970216 0.232762 0 0.133738 0.095627 0.22769 0 0.146753 0.0961045 0.22591 0 0.161668 0.0989981 0.225572 0 0.197474 0.104432 0.226794 0 0.235092 0.101149 0.228797 0 0.252423 0.0994055 0.227774 0 0.266562 0.0979095 0.226822 0 0.284506 0.0997053 0.229102 0 0.302865 0.0985658 0.226572 0 0.322825 0.0977083 0.225704 0 0.344507 0.0966167 0.225648 0 0.360597 0.0954118 0.225784 0 0.377887 0.0943122 0.226796 0 0.39165 0.0943635 0.227512 0 0.40814 0.0953213 0.228277 0 0.430148 0.0952683 0.229547 0 0.447267 0.0982691 0.229677 0 0.457159 0.103643 0.228545 0 0.475294 0.105676 0.229061 0 0.515215 0.0984573 0.232103 0 0.532233 0.0985426 0.232303 0 0.559805 0.0944795 0.231074 0 0.594504 0.0917473 0.234225 0 0.655598 0.101039 0.216801 0 0.78901 0.0995241 0.21834 0 0.8114 0.0980986 0.1896 0 0.827005 0.0984175 0.17973 0 0.0952009 0.0996721 0.237469 0 0.0952009 0.0996721 0.237469 0 0.0952009 0.0996721 0.237469 0 0.103318 0.0986484 0.237724 0 0.116122 0.0970216 0.232762 0 0.133738 0.095627 0.22769 0 0.146753 0.0961045 0.22591 0 0.161668 0.0989981 0.225572 0 0.197474 0.104432 0.226794 0 0.235092 0.101149 0.228797 0 0.252423 0.0994055 0.227774 0 0.266562 0.0979095 0.226822 0 0.284506 0.0997054 0.229102 0 0.302865 0.0985658 0.226572 0 0.322825 0.0977083 0.225704 0 0.344507 0.0966167 0.225648 0 0.360597 0.0954118 0.225784 0 0.377887 0.0943122 0.226796 0 0.39165 0.0943635 0.227512 0 0.40814 0.0953213 0.228277 0 0.430148 0.0952684 0.229547 0 0.447267 0.098269 0.229677 0 0.457159 0.103644 0.228545 0 0.475294 0.105676 0.229061 0 0.515215 0.0984573 0.232103 0 0.532233 0.0985426 0.232303 0 0.559805 0.0944795 0.231074 0 0.594504 0.0917473 0.234225 0 0.655598 0.101039 0.216801 0 0.78901 0.0995241 0.21834 0 0.8114 0.0980986 0.1896 0 0.827005 0.0984175 0.17973 0 0.0937137 0.106701 0.237448 0 0.0937137 0.106701 0.237448 0 0.0937136 0.106701 0.237448 0 0.10229 0.10605 0.23748 0 0.115179 0.106086 0.232547 0 0.132778 0.105279 0.227917 0 0.147572 0.105167 0.226387 0 0.163483 0.109141 0.226048 0 0.197014 0.11244 0.226565 0 0.234334 0.109383 0.228444 0 0.251869 0.107462 0.227889 0 0.266876 0.10675 0.226857 0 0.284298 0.106451 0.228657 0 0.302405 0.105463 0.226708 0 0.322574 0.104583 0.225815 0 0.343847 0.103574 0.225706 0 0.360032 0.102696 0.225611 0 0.377941 0.102272 0.226298 0 0.391728 0.102411 0.227026 0 0.409246 0.104684 0.228088 0 0.430093 0.10593 0.229338 0 0.449312 0.107882 0.230036 0 0.459125 0.112384 0.228939 0 0.474186 0.114737 0.2286 0 0.511773 0.107496 0.231473 0 0.531976 0.106104 0.231813 0 0.557446 0.103015 0.230861 0 0.596826 0.0982019 0.236186 0 0.657916 0.109543 0.216992 0 0.789508 0.106024 0.219174 0 0.81239 0.106174 0.190079 0 0.828715 0.109064 0.179636 0 0.0935429 0.124223 0.238532 0 0.0935429 0.124223 0.238532 0 0.0935429 0.124223 0.238532 0 0.103318 0.124718 0.239001 0 0.115984 0.126782 0.233322 0 0.132702 0.127893 0.227678 0 0.14973 0.128448 0.227177 0 0.166785 0.129458 0.226711 0 0.196143 0.127436 0.225949 0 0.232134 0.122958 0.22735 0 0.251007 0.1219 0.227761 0 0.265786 0.12102 0.227438 0 0.284121 0.12038 0.227599 0 0.301484 0.119885 0.226792 0 0.322235 0.119652 0.225867 0 0.34351 0.120854 0.225878 0 0.359934 0.121276 0.225831 0 0.37826 0.121527 0.225887 0 0.393181 0.122834 0.226602 0 0.411825 0.124799 0.22789 0 0.429454 0.126231 0.228967 0 0.453008 0.125849 0.230287 0 0.462265 0.127995 0.229433 0 0.471208 0.130023 0.227713 0 0.503298 0.12523 0.229304 0 0.534599 0.121233 0.230725 0 0.555092 0.12204 0.230286 0 0.599101 0.115325 0.234886 0 0.662279 0.126266 0.217948 0 0.791433 0.120297 0.222344 0 0.815703 0.12548 0.191136 0 0.831751 0.129238 0.179204 0 0.0959576 0.149328 0.238717 0 0.0959576 0.149328 0.238717 0 0.0959576 0.149328 0.238717 0 0.106044 0.149767 0.239285 0 0.118992 0.151233 0.235728 0 0.132673 0.151353 0.227812 0 0.146618 0.148879 0.225875 0 0.164759 0.145281 0.225504 0 0.193281 0.14135 0.225646 0 0.231992 0.139101 0.227666 0 0.249951 0.138804 0.227432 0 0.264819 0.139426 0.228038 0 0.284892 0.139851 0.226601 0 0.301932 0.141488 0.226541 0 0.323142 0.14263 0.22635 0 0.344573 0.143885 0.226491 0 0.36064 0.144476 0.226539 0 0.378995 0.144976 0.226721 0 0.394241 0.144841 0.22678 0 0.413789 0.145076 0.227396 0 0.428457 0.145972 0.228155 0 0.451988 0.143306 0.229187 0 0.464751 0.144331 0.228937 0 0.474218 0.147187 0.227547 0 0.496644 0.147178 0.226775 0 0.538632 0.141164 0.2298 0 0.555385 0.142555 0.230118 0 0.600245 0.134697 0.23315 0 0.666927 0.144561 0.219245 0 0.794928 0.140645 0.224855 0 0.818343 0.142465 0.193869 0 0.833666 0.146534 0.180169 0 0.0975336 0.161652 0.239127 0 0.0975336 0.161652 0.239127 0 0.0975336 0.161652 0.239127 0 0.106798 0.162125 0.239082 0 0.118794 0.160569 0.235464 0 0.130982 0.158962 0.228387 0 0.143979 0.156859 0.225493 0 0.162938 0.153172 0.225006 0 0.1927 0.150435 0.225779 0 0.232064 0.149157 0.227926 0 0.250781 0.150945 0.227816 0 0.265343 0.151877 0.228308 0 0.285018 0.152186 0.227221 0 0.302688 0.153336 0.226184 0 0.323672 0.154094 0.226379 0 0.345182 0.155231 0.226932 0 0.360723 0.155336 0.226819 0 0.378791 0.155029 0.226909 0 0.394098 0.154675 0.226949 0 0.414121 0.154916 0.227003 0 0.428748 0.154955 0.2276 0 0.450267 0.152909 0.228484 0 0.466106 0.152784 0.228491 0 0.47567 0.155092 0.227685 0 0.495832 0.155992 0.226979 0 0.538679 0.148213 0.230107 0 0.554533 0.149542 0.230424 0 0.594714 0.143582 0.231647 0 0.670061 0.155159 0.219209 0 0.795914 0.147597 0.226242 0 0.819207 0.148587 0.195133 0 0.83455 0.152794 0.181471 0 0.0975252 0.169232 0.239636 0 0.0975252 0.169232 0.239636 0 0.0975252 0.169232 0.239636 0 0.105663 0.168225 0.239217 0 0.117621 0.166721 0.23508 0 0.129773 0.165152 0.229135 0 0.142066 0.163275 0.22565 0 0.161334 0.159769 0.224689 0 0.192239 0.158699 0.226182 0 0.232528 0.159871 0.227999 0 0.251713 0.161452 0.228305 0 0.265755 0.162715 0.228499 0 0.285045 0.163196 0.227788 0 0.303261 0.16343 0.225774 0 0.323886 0.163627 0.226374 0 0.345365 0.164281 0.227153 0 0.360527 0.164527 0.226967 0 0.378591 0.164408 0.227093 0 0.394191 0.164898 0.227089 0 0.413406 0.163302 0.227007 0 0.428739 0.162369 0.227349 0 0.448318 0.160328 0.22823 0 0.466816 0.158975 0.228667 0 0.476988 0.162231 0.228396 0 0.494806 0.163379 0.227492 0 0.53525 0.156144 0.230174 0 0.553524 0.156994 0.230634 0 0.589455 0.153398 0.230184 0 0.673453 0.166693 0.219194 0 0.796621 0.155244 0.227745 0 0.82037 0.156711 0.196659 0 0.835755 0.161153 0.183159 0 0.0931993 0.192334 0.239174 0 0.0931993 0.192334 0.239174 0 0.0931994 0.192334 0.239174 0 0.102122 0.190924 0.240082 0 0.114673 0.190166 0.235904 0 0.12892 0.191572 0.231274 0 0.140768 0.193713 0.228446 0 0.160565 0.194936 0.22663 0 0.195497 0.197573 0.226761 50789.9 0.232758 0.195128 0.227363 35839.4 0.253664 0.193915 0.229253 0 0.266194 0.193484 0.230046 0 0.283872 0.193139 0.229625 0 0.303214 0.192179 0.225118 0 0.324368 0.192388 0.227169 0 0.346529 0.193042 0.22869 0 0.360403 0.193405 0.228316 0 0.376462 0.193822 0.228442 0 0.390866 0.19361 0.228257 0 0.411012 0.192762 0.228127 0 0.428799 0.192797 0.228006 0 0.44485 0.194308 0.227397 0 0.468398 0.193372 0.227925 0 0.483505 0.195805 0.227605 0 0.495242 0.2015 0.226694 0 0.525166 0.200442 0.227376 0 0.560328 0.197031 0.22865 0 0.582206 0.198216 0.227622 0 0.675197 0.198865 0.223372 0 0.800046 0.188337 0.232622 0 0.82506 0.189657 0.201504 0 0.840765 0.194124 0.188785 0 0.0925927 0.22936 0.237346 0 0.0925927 0.22936 0.237346 0 0.0925927 0.22936 0.237346 0 0.100831 0.229144 0.237368 0 0.113599 0.22807 0.234985 0 0.129853 0.225973 0.232431 0 0.144007 0.224456 0.232679 0 0.160209 0.224246 0.230754 0 0.19535 0.225163 0.229973 46998.6 0.228512 0.229587 0.229223 208613 0.255868 0.229937 0.230363 31709.5 0.270459 0.233736 0.231746 0 0.288797 0.237705 0.231447 0 0.305774 0.237694 0.226895 0 0.326344 0.236024 0.223224 0 0.346716 0.23446 0.226274 0 0.361241 0.233179 0.226341 0 0.376115 0.232976 0.22657 0 0.389481 0.232563 0.226861 0 0.409341 0.231593 0.227458 0 0.428119 0.230438 0.227694 0 0.446487 0.230057 0.227629 0 0.463638 0.230343 0.226783 0 0.489593 0.228439 0.226717 0 0.50176 0.232413 0.226206 0 0.521014 0.234167 0.22642 0 0.561437 0.228481 0.229055 0 0.58071 0.230869 0.227296 0 0.673674 0.229315 0.2304 0 0.8017 0.226051 0.229254 0 0.826701 0.226538 0.198973 0 0.845555 0.225608 0.192414 0 0.0919631 0.240706 0.239723 0 0.0919631 0.240706 0.239723 0 0.0919631 0.240706 0.239723 0 0.0997975 0.240802 0.238744 0 0.111714 0.241679 0.234188 0 0.127333 0.241171 0.230741 0 0.142907 0.23997 0.230917 0 0.161159 0.240724 0.231455 0 0.19893 0.249894 0.230498 0 0.229165 0.256624 0.227557 31785.9 0.255414 0.25456 0.22936 30145 0.272266 0.253045 0.232259 0 0.28782 0.252191 0.231675 0 0.304612 0.250874 0.227928 0 0.324658 0.2493 0.224179 0 0.345712 0.248284 0.225396 0 0.360632 0.247953 0.226211 0 0.376148 0.24775 0.226511 0 0.388891 0.247751 0.22671 0 0.408296 0.247086 0.227313 0 0.427533 0.246491 0.228009 0 0.446869 0.246075 0.228157 0 0.462932 0.246569 0.227333 0 0.489768 0.243942 0.226814 0 0.504599 0.246602 0.226007 0 0.520097 0.249984 0.22581 0 0.557426 0.246333 0.228788 0 0.582152 0.248317 0.227234 0 0.674442 0.248557 0.230079 0 0.800066 0.243999 0.226408 0 0.82749 0.244608 0.197569 0 0.846419 0.243595 0.190964 0 0.0930756 0.257716 0.239381 0 0.0930756 0.257716 0.239381 0 0.0930756 0.257716 0.239381 0 0.101086 0.25855 0.238333 0 0.113406 0.260589 0.23346 0 0.126681 0.263211 0.228217 0 0.142688 0.263285 0.227676 0 0.163422 0.26299 0.230138 0 0.202133 0.267996 0.231067 0 0.228803 0.271845 0.228422 0 0.251943 0.269344 0.228415 0 0.27038 0.265799 0.231306 0 0.286748 0.264252 0.232797 0 0.303469 0.262888 0.228656 0 0.323671 0.262106 0.225427 0 0.345815 0.261753 0.224638 0 0.360222 0.261851 0.226054 0 0.376095 0.261572 0.226429 0 0.388763 0.261652 0.226626 0 0.408087 0.26149 0.227254 0 0.426831 0.260866 0.228058 0 0.446389 0.260396 0.22847 0 0.463579 0.260662 0.227853 0 0.487315 0.259125 0.226992 0 0.507143 0.260516 0.225631 0 0.519822 0.265863 0.225269 0 0.553599 0.263728 0.227591 0 0.585364 0.263096 0.227688 0 0.67573 0.26315 0.229692 0 0.791572 0.262726 0.219634 0 0.82726 0.259972 0.19623 0 0.846977 0.258936 0.189868 0 0.0958452 0.283868 0.239032 0 0.0958452 0.283868 0.239032 0 0.0958452 0.283868 0.239032 0 0.103938 0.284651 0.238715 0 0.116017 0.285784 0.2345 0 0.128553 0.287106 0.229175 0 0.142139 0.287733 0.227206 0 0.163794 0.28675 0.228631 0 0.205241 0.286684 0.232751 0 0.229195 0.288981 0.229664 0 0.247887 0.288218 0.227932 0 0.265822 0.285772 0.229568 0 0.285803 0.283207 0.232505 0 0.302911 0.282486 0.229969 0 0.323222 0.282427 0.226817 0 0.346204 0.282043 0.224631 0 0.360846 0.282551 0.225351 0 0.3762 0.283251 0.226097 0 0.389252 0.283509 0.226412 0 0.407873 0.283656 0.226911 0 0.426395 0.283811 0.227599 0 0.446209 0.283912 0.228317 0 0.464754 0.284279 0.228282 0 0.484273 0.284935 0.227332 0 0.511326 0.28414 0.226215 0 0.524332 0.289153 0.22488 0 0.548746 0.289712 0.225823 0 0.59006 0.284992 0.228004 0 0.677201 0.287117 0.228739 0 0.781904 0.291392 0.213062 0 0.8136 0.291879 0.185755 0 0.848329 0.286413 0.188285 0 0.0961036 0.309645 0.238435 0 0.0961036 0.309645 0.238435 0 0.0961037 0.309645 0.238435 0 0.105601 0.309651 0.238868 0 0.117377 0.310368 0.235979 0 0.130699 0.310941 0.230373 0 0.142108 0.311864 0.228057 0 0.163174 0.311731 0.228223 0 0.20471 0.307943 0.233015 0 0.23039 0.30939 0.230593 0 0.246095 0.310887 0.228032 0 0.263312 0.310531 0.229633 0 0.284383 0.308612 0.230198 0 0.301269 0.307565 0.229707 0 0.322902 0.306097 0.228212 0 0.345618 0.306413 0.226162 0 0.362582 0.30639 0.224665 0 0.377354 0.308094 0.22634 0 0.390317 0.309182 0.226057 0 0.407998 0.309974 0.226625 0 0.426479 0.309927 0.22739 0 0.446474 0.309909 0.227974 0 0.465426 0.309863 0.228179 0 0.483662 0.310247 0.227683 0 0.513972 0.307372 0.226835 0 0.528709 0.310668 0.224825 0 0.547136 0.312961 0.224245 0 0.590343 0.307647 0.226956 0 0.676689 0.310728 0.226644 0 0.786695 0.311214 0.22034 0 0.817693 0.312128 0.191188 0 0.843847 0.314615 0.183356 0 0.0961203 0.327456 0.238564 0 0.0961203 0.327456 0.238564 0 0.0961203 0.327456 0.238564 0 0.105867 0.327556 0.238536 0 0.118539 0.328313 0.236278 0 0.131977 0.329446 0.230914 0 0.143585 0.330291 0.228299 0 0.161681 0.328995 0.227928 0 0.201748 0.325385 0.231311 0 0.232302 0.324579 0.231698 0 0.247201 0.32676 0.228467 0 0.263052 0.327377 0.229903 0 0.282337 0.326803 0.230371 0 0.300728 0.326162 0.228658 0 0.322299 0.325347 0.229121 0 0.345884 0.325146 0.2275 0 0.363015 0.325258 0.225504 0 0.379231 0.326199 0.22598 0 0.391464 0.327389 0.226642 0 0.408568 0.328142 0.226294 0 0.426097 0.327832 0.22695 0 0.445948 0.327079 0.22755 0 0.465241 0.326627 0.227713 0 0.484305 0.326862 0.227614 0 0.510899 0.325151 0.226789 0 0.531641 0.32643 0.225409 0 0.546481 0.330082 0.223575 0 0.586257 0.326171 0.225989 0 0.681478 0.327762 0.226386 0 0.78822 0.3281 0.223755 0 0.820805 0.326805 0.195647 0 0.84375 0.329541 0.185164 0 0.0967733 0.348491 0.238478 0 0.0967733 0.348491 0.238478 0 0.0967733 0.348491 0.238478 0 0.106623 0.34876 0.238467 0 0.119803 0.348509 0.236161 0 0.13217 0.348214 0.231331 0 0.143415 0.347709 0.227976 0 0.159191 0.346954 0.227082 0 0.199062 0.344664 0.230164 0 0.234227 0.342385 0.231939 0 0.249647 0.344534 0.230238 0 0.263882 0.346356 0.230215 0 0.281892 0.347759 0.231379 0 0.301534 0.347512 0.22858 0 0.321034 0.34787 0.22884 0 0.345673 0.346005 0.229119 0 0.362478 0.345269 0.226693 0 0.380535 0.34472 0.225129 0 0.392444 0.345489 0.226571 0 0.409288 0.346231 0.22646 0 0.425376 0.346552 0.226353 0 0.444947 0.345732 0.227114 0 0.465022 0.345052 0.227356 0 0.485206 0.345188 0.22739 0 0.50764 0.345553 0.226937 0 0.534739 0.344971 0.226207 0 0.54739 0.349454 0.224132 0 0.580474 0.347195 0.22427 0 0.687406 0.348707 0.226304 0 0.778049 0.350938 0.216435 0 0.811695 0.348517 0.189338 0 0.846082 0.343993 0.189447 0 0.0967877 0.36361 0.238055 0 0.0967877 0.36361 0.238055 0 0.0967877 0.36361 0.238055 0 0.105725 0.363019 0.238209 0 0.118757 0.36215 0.235586 0 0.131933 0.361594 0.23167 0 0.142914 0.361209 0.228337 0 0.157928 0.360703 0.22635 0 0.199724 0.359273 0.230651 0 0.234599 0.357625 0.230364 0 0.251888 0.35902 0.231582 0 0.265308 0.361441 0.231048 0 0.281968 0.363038 0.231201 0 0.301045 0.362627 0.229167 0 0.320384 0.362843 0.228466 0 0.344205 0.361014 0.228983 0 0.361598 0.359446 0.228388 0 0.380186 0.358364 0.225536 0 0.393306 0.358531 0.226064 0 0.409916 0.359495 0.22694 0 0.425357 0.360538 0.226477 0 0.444436 0.360458 0.226836 0 0.46468 0.359876 0.227095 0 0.485594 0.359863 0.227204 0 0.505728 0.361183 0.226597 0 0.53706 0.359047 0.226632 0 0.550084 0.363368 0.224703 0 0.576844 0.3636 0.223164 0 0.691388 0.362579 0.22644 0 0.770304 0.367417 0.210708 0 0.803855 0.364677 0.183637 0 0.844089 0.356596 0.189142 0 0.0956698 0.379065 0.237488 0 0.0956698 0.379065 0.237488 0 0.0956699 0.379065 0.237488 0 0.104536 0.378487 0.237761 0 0.117355 0.377642 0.235329 0 0.131582 0.376734 0.231638 0 0.142671 0.37661 0.229078 0 0.15846 0.376978 0.226426 0 0.200554 0.375839 0.231145 0 0.234669 0.375038 0.229449 0 0.252941 0.375384 0.229894 0 0.266262 0.376312 0.232006 0 0.283089 0.377458 0.23198 0 0.300182 0.377726 0.229326 0 0.320865 0.37742 0.229207 0 0.342702 0.377071 0.228871 0 0.359948 0.37576 0.228422 0 0.379256 0.374144 0.227344 0 0.394391 0.37372 0.225446 0 0.410781 0.375119 0.227427 0 0.426354 0.376227 0.226962 0 0.444252 0.37694 0.226488 0 0.464125 0.376516 0.226706 0 0.485696 0.376209 0.22695 0 0.506868 0.377319 0.22661 0 0.53946 0.374819 0.227253 0 0.553053 0.378747 0.22551 0 0.575619 0.380839 0.223338 0 0.693631 0.37658 0.226295 0 0.770303 0.38389 0.2099 0 0.795561 0.385333 0.17733 0 0.835639 0.377861 0.182641 0 0.0949276 0.391586 0.237156 0 0.0949276 0.391586 0.237156 0 0.0949276 0.391586 0.237156 0 0.103619 0.391078 0.237317 0 0.116226 0.390346 0.235102 0 0.131265 0.389974 0.231459 0 0.143099 0.390208 0.229684 0 0.158932 0.390543 0.226862 0 0.200552 0.388435 0.231124 0 0.232987 0.388288 0.229214 0 0.253267 0.387998 0.228851 0 0.266834 0.388654 0.231679 0 0.283829 0.388826 0.232631 0 0.300391 0.389635 0.230115 0 0.321611 0.389923 0.22926 0 0.342145 0.39087 0.229291 0 0.358848 0.390028 0.228376 0 0.377678 0.388514 0.22783 0 0.39429 0.387022 0.226321 0 0.411689 0.387902 0.227047 0 0.427164 0.388951 0.227355 0 0.444587 0.389881 0.226918 0 0.463755 0.390064 0.226521 0 0.485664 0.389639 0.226784 0 0.507565 0.390009 0.226674 0 0.537561 0.388606 0.22712 0 0.555517 0.391362 0.226106 0 0.575114 0.394461 0.223619 0 0.695381 0.387647 0.226151 0 0.772903 0.396819 0.21077 0 0.796216 0.398423 0.177058 0 0.828604 0.393687 0.177362 0 0.0941407 0.406553 0.236817 0 0.0941407 0.406553 0.236817 0 0.0941407 0.406553 0.236817 0 0.102996 0.406328 0.236961 0 0.11568 0.405984 0.2349 0 0.130793 0.405307 0.231542 0 0.143127 0.404883 0.229896 0 0.158919 0.404938 0.227643 0 0.200273 0.403683 0.230895 0 0.231783 0.403593 0.229766 0 0.253659 0.403466 0.227871 0 0.267697 0.404305 0.231022 0 0.284443 0.40408 0.233134 0 0.301083 0.404857 0.231034 0 0.322855 0.405359 0.229222 0 0.341959 0.406973 0.23043 0 0.357794 0.406887 0.228678 0 0.3761 0.405855 0.227885 0 0.392558 0.404276 0.227407 0 0.412834 0.403562 0.226996 0 0.42811 0.404808 0.228045 0 0.445054 0.405858 0.22768 0 0.463751 0.406324 0.226944 0 0.485507 0.406178 0.226638 0 0.508514 0.406482 0.226601 0 0.535311 0.405448 0.226723 0 0.558097 0.406327 0.22642 0 0.574172 0.410222 0.223728 0 0.698112 0.403945 0.225868 0 0.775911 0.412821 0.21188 0 0.799487 0.414937 0.178062 0 0.820307 0.416603 0.170623 0 0.0937738 0.421205 0.236469 0 0.0937738 0.421205 0.236469 0 0.0937738 0.421205 0.236469 0 0.102622 0.420999 0.236613 0 0.115091 0.420774 0.234464 0 0.129934 0.420368 0.231551 0 0.142642 0.419903 0.229676 0 0.159231 0.420287 0.228398 0 0.199076 0.420459 0.230289 0 0.230931 0.420376 0.230232 0 0.254688 0.419598 0.22858 0 0.268737 0.420995 0.230115 0 0.283187 0.421748 0.231873 0 0.301863 0.420555 0.231736 0 0.323325 0.421245 0.230596 0 0.343245 0.423324 0.230174 0 0.358008 0.424107 0.230609 0 0.374817 0.424252 0.228194 0 0.390398 0.423221 0.228047 0 0.413547 0.421006 0.226954 0 0.429208 0.422137 0.228802 0 0.44589 0.423507 0.228236 0 0.464079 0.423465 0.227284 0 0.484941 0.423194 0.226098 0 0.508444 0.422425 0.225763 0 0.53289 0.422695 0.226015 0 0.560895 0.422164 0.226121 0 0.575157 0.42783 0.223825 0 0.701034 0.422407 0.224765 0 0.779734 0.43346 0.213396 0 0.80572 0.440584 0.17946 0 0.820984 0.449762 0.167528 0 0.0943388 0.438808 0.235122 0 0.0943388 0.438808 0.235122 0 0.0943388 0.438808 0.235122 0 0.102301 0.438973 0.23604 0 0.114789 0.439086 0.233936 0 0.12941 0.439321 0.231284 0 0.142451 0.439231 0.229852 0 0.160272 0.439306 0.228911 0 0.198101 0.440029 0.229659 0 0.230616 0.439461 0.230559 0 0.255032 0.438324 0.229482 0 0.270575 0.43953 0.230618 0 0.283912 0.441788 0.231351 0 0.300678 0.441332 0.229981 0 0.324023 0.440116 0.232216 0 0.345524 0.44199 0.23069 0 0.358876 0.443922 0.23095 0 0.375 0.444399 0.23018 0 0.389035 0.444192 0.228171 0 0.411422 0.442008 0.227205 0 0.43002 0.440465 0.228347 0 0.446276 0.44096 0.228548 0 0.464033 0.441094 0.227173 0 0.484691 0.44089 0.225954 0 0.508099 0.441326 0.2246 0 0.532292 0.442951 0.225242 0 0.564716 0.44201 0.225964 0 0.579334 0.44799 0.22421 0 0.693255 0.444939 0.221148 0 0.78622 0.461409 0.21534 0 0.809601 0.45954 0.182171 0 0.821797 0.460092 0.171006 0 0.0960748 0.455968 0.233029 0 0.0960748 0.455968 0.233029 0 0.0960748 0.455968 0.233029 0 0.103353 0.456634 0.234807 0 0.115067 0.457131 0.233783 0 0.129408 0.457287 0.231044 0 0.142152 0.45727 0.230188 0 0.160711 0.457141 0.229191 0 0.19729 0.458851 0.22928 0 0.23152 0.458805 0.23095 0 0.25375 0.458322 0.229568 0 0.272039 0.458404 0.231438 0 0.286176 0.460665 0.23129 0 0.299226 0.462074 0.228923 0 0.322505 0.459786 0.23047 0 0.347359 0.458851 0.231625 0 0.360331 0.460602 0.23087 0 0.375472 0.461856 0.229951 0 0.388817 0.462129 0.229321 0 0.408627 0.46154 0.226832 0 0.42943 0.458934 0.225754 0 0.446602 0.45859 0.229273 0 0.464019 0.459409 0.227154 0 0.485377 0.4608 0.226022 0 0.509322 0.462501 0.22427 0 0.53398 0.464348 0.22444 0 0.564928 0.463283 0.225311 0 0.583675 0.468022 0.223892 0 0.691426 0.464051 0.221495 0 0.787524 0.473222 0.219074 0 0.810744 0.470725 0.185386 0 0.822638 0.47062 0.173173 0 0.098451 0.475214 0.230649 0 0.098451 0.475214 0.230649 0 0.098451 0.475214 0.230649 0 0.105389 0.476241 0.23292 0 0.11559 0.477939 0.233647 0 0.129972 0.47865 0.230906 0 0.14239 0.479014 0.230099 0 0.160907 0.479224 0.229328 0 0.197547 0.481009 0.229733 0 0.231967 0.480723 0.230924 0 0.251849 0.480332 0.2292 0 0.272997 0.478749 0.231532 0 0.28849 0.479943 0.231059 0 0.299869 0.481851 0.228871 0 0.32036 0.481447 0.227721 0 0.34788 0.47875 0.23085 0 0.362692 0.479237 0.230936 0 0.376908 0.481708 0.230428 0 0.389379 0.48336 0.22897 0 0.408125 0.484335 0.228108 0 0.427586 0.483951 0.225392 0 0.447519 0.483536 0.226679 0 0.465314 0.48391 0.228124 0 0.486368 0.484794 0.225686 0 0.51044 0.485334 0.224309 0 0.535488 0.486223 0.223967 0 0.561894 0.48536 0.224723 0 0.586756 0.48568 0.224261 0 0.689928 0.478275 0.223862 0 0.788688 0.484401 0.222302 0 0.811519 0.482113 0.187451 0 0.821753 0.477381 0.174295 0 0.102336 0.500142 0.227541 0 0.102336 0.500142 0.227541 0 0.102336 0.500142 0.227541 0 0.108717 0.50143 0.230311 0 0.11812 0.503362 0.231783 0 0.130808 0.504736 0.2306 0 0.143025 0.505009 0.229602 0 0.160811 0.504718 0.229053 0 0.198242 0.504626 0.229771 0 0.231214 0.504269 0.2296 0 0.25134 0.504309 0.22832 0 0.271587 0.50375 0.230284 0 0.290691 0.504836 0.23064 0 0.303135 0.506888 0.2285 0 0.319866 0.508979 0.226586 0 0.345062 0.508165 0.2276 0 0.363835 0.506801 0.229336 0 0.379862 0.507165 0.23049 0 0.391608 0.508361 0.23012 0 0.409135 0.510209 0.228251 0 0.427052 0.510782 0.227867 0 0.447522 0.510416 0.224633 0 0.465277 0.510586 0.227558 0 0.486261 0.509136 0.227774 0 0.509922 0.506329 0.225528 0 0.53505 0.502001 0.226077 0 0.556962 0.498858 0.22635 0 0.586525 0.493508 0.227385 0 0.690548 0.503848 0.226589 0 0.788384 0.490791 0.223406 0 0.809133 0.485668 0.188713 0 0.819923 0.482873 0.174718 0 0.104014 0.526091 0.225571 0 0.104014 0.526091 0.225571 0 0.104014 0.526091 0.225571 0 0.112066 0.526194 0.226305 0 0.120399 0.528018 0.228647 0 0.131179 0.529869 0.229078 0 0.14325 0.530251 0.22816 0 0.160614 0.530563 0.227507 0 0.200108 0.532127 0.228875 0 0.231 0.534035 0.227603 0 0.252123 0.533599 0.227391 0 0.270351 0.5337 0.229503 0 0.292945 0.532911 0.230691 0 0.306078 0.533699 0.228221 0 0.320339 0.535325 0.227391 0 0.34314 0.535002 0.226541 0 0.361503 0.534169 0.22747 0 0.379871 0.532395 0.229053 0 0.393765 0.530766 0.231694 0 0.410336 0.528816 0.232246 0 0.426036 0.526481 0.231573 0 0.444791 0.523114 0.231482 0 0.462271 0.520006 0.230223 0 0.480914 0.517469 0.232506 0 0.506416 0.514097 0.232215 0 0.53292 0.513295 0.230258 0 0.556793 0.517394 0.229192 0 0.59237 0.521933 0.227798 0 0.68662 0.523237 0.223384 0 0.766661 0.498836 0.219693 0 0.810655 0.49799 0.188522 0 0.819415 0.490365 0.175145 0 0.10313 0.554769 0.225763 0 0.10313 0.554769 0.225763 0 0.10313 0.554769 0.225763 0 0.112262 0.554554 0.225208 0 0.12426 0.555195 0.224358 0 0.134186 0.557703 0.225877 0 0.144289 0.558986 0.22714 0 0.161501 0.559374 0.226746 0 0.201665 0.559436 0.229137 0 0.230131 0.560852 0.227616 0 0.25091 0.557036 0.227834 0 0.269147 0.554417 0.230839 0 0.291289 0.550685 0.233503 0 0.304983 0.548636 0.231778 0 0.319217 0.547388 0.231195 0 0.340177 0.54498 0.232164 0 0.357932 0.541908 0.23291 0 0.37618 0.541921 0.233031 0 0.390088 0.541686 0.234041 0 0.409133 0.540936 0.236744 0 0.425843 0.541417 0.236161 0 0.443627 0.542305 0.23425 0 0.462226 0.542435 0.231863 0 0.481476 0.54753 0.231575 0 0.507544 0.554875 0.229802 0 0.537956 0.556868 0.22792 0 0.562395 0.556215 0.224408 0 0.589492 0.553693 0.221361 0 0.681874 0.529665 0.224391 0 0.746598 0.516182 0.206829 0 0.808583 0.505926 0.189985 0 0.820249 0.501942 0.177128 0 0.101297 0.582549 0.228357 0 0.101297 0.582549 0.228357 0 0.101297 0.582549 0.228357 0 0.110667 0.580756 0.227199 0 0.124875 0.577713 0.224172 0 0.136091 0.576457 0.224344 0 0.145115 0.576059 0.226681 0 0.159932 0.574956 0.229069 0 0.198469 0.570153 0.232859 0 0.226666 0.567497 0.232687 0 0.246627 0.567161 0.230658 0 0.267294 0.566602 0.232716 0 0.288341 0.566839 0.235858 0 0.305221 0.567282 0.234689 0 0.320482 0.568674 0.233004 0 0.338803 0.569843 0.23271 0 0.356535 0.568797 0.232846 0 0.376466 0.56995 0.231992 0 0.391153 0.574928 0.231225 0 0.412385 0.582758 0.231341 0 0.430682 0.584086 0.232269 0 0.450351 0.58736 0.229825 0 0.467178 0.586577 0.225591 0 0.48537 0.585224 0.221728 0 0.503287 0.582273 0.220867 0 0.529669 0.573463 0.221791 0 0.556778 0.564798 0.222929 0 0.581214 0.557051 0.222709 0 0.680596 0.533805 0.225501 0 0.73719 0.517378 0.200426 0 0.803761 0.522022 0.192171 0 0.829284 0.540888 0.185547 0 0.100898 0.670441 0.227149 0 0.100898 0.670441 0.227149 0 0.100898 0.670441 0.227149 0 0.110083 0.669073 0.226032 0 0.119494 0.668342 0.226794 0 0.136738 0.665399 0.220917 0 0.151188 0.663126 0.217123 0 0.168117 0.661294 0.217602 0 0.198584 0.659862 0.226712 0 0.233728 0.661447 0.230196 0 0.249534 0.6602 0.227646 0 0.264653 0.657702 0.227823 0 0.289613 0.652284 0.233122 0 0.303153 0.649859 0.233839 0 0.322017 0.646973 0.234108 0 0.342312 0.647464 0.233039 0 0.353209 0.645015 0.232066 0 0.365596 0.640025 0.231049 0 0.378406 0.634993 0.231383 0 0.398805 0.626895 0.231581 0 0.416784 0.631758 0.232747 0 0.44162 0.65284 0.233258 0 0.462913 0.664904 0.232317 0 0.48849 0.672244 0.230427 0 0.513353 0.666386 0.227362 0 0.531423 0.662029 0.224801 0 0.551287 0.656962 0.222971 0 0.576789 0.650542 0.219584 0 0.656466 0.631183 0.21203 0 0.76991 0.604271 0.21438 0 0.80437 0.601161 0.196807 0 0.830648 0.599067 0.185724 0 0.0870926 0.751533 0.238198 0 0.0870926 0.751533 0.238198 0 0.0870926 0.751533 0.238198 0 0.0958536 0.748393 0.237101 0 0.109566 0.74461 0.232262 0 0.122985 0.745937 0.230074 0 0.138 0.745481 0.226278 0 0.156079 0.747175 0.227271 0 0.200481 0.744819 0.222191 0 0.228756 0.742061 0.229024 0 0.243108 0.738277 0.229783 0 0.259273 0.734176 0.229132 0 0.278618 0.728961 0.230433 0 0.29415 0.725345 0.229286 0 0.314575 0.723654 0.228973 0 0.335949 0.721748 0.227609 0 0.352807 0.717911 0.228 0 0.366025 0.714063 0.226611 0 0.374952 0.71141 0.22584 0 0.3865 0.707977 0.22469 0 0.401833 0.703268 0.225336 0 0.419823 0.697706 0.225774 0 0.435844 0.69286 0.224862 0 0.452406 0.687857 0.22367 0 0.47211 0.68324 0.222539 0 0.500436 0.680223 0.221094 0 0.533234 0.692895 0.220748 0 0.588832 0.778084 0.232653 0 0.685584 0.764094 0.231828 0 0.745741 0.748093 0.212827 0 0.81393 0.742714 0.190272 0 0.828288 0.750605 0.179581 0 0.0931493 0.801134 0.219805 0 0.0931493 0.801134 0.219805 0 0.0931493 0.801134 0.219805 0 0.100262 0.807926 0.223305 0 0.109629 0.815678 0.227267 0 0.11959 0.81466 0.227686 0 0.132859 0.80843 0.222837 0 0.150773 0.807522 0.224623 0 0.191176 0.802417 0.225511 0 0.231369 0.804303 0.225085 0 0.244289 0.791466 0.221265 0 0.252567 0.790599 0.224029 0 0.268114 0.78852 0.227038 0 0.282598 0.785407 0.229529 0 0.296942 0.781356 0.22742 0 0.311413 0.776445 0.225004 0 0.325339 0.771998 0.224387 0 0.341105 0.767147 0.223221 0 0.35764 0.767557 0.226959 0 0.386367 0.788992 0.231307 0 0.417303 0.839218 0.2308 0 0.43574 0.843576 0.227865 0 0.455741 0.839905 0.228623 0 0.479208 0.835832 0.229213 0 0.502469 0.83528 0.228565 0 0.528125 0.839728 0.2275 0 0.55468 0.840703 0.228021 0 0.584198 0.841024 0.226149 0 0.673684 0.829728 0.222491 0 0.737669 0.852641 0.203287 0 0.804923 0.846933 0.190121 0 0.852817 0.839015 0.189265 0 0.111899 0.909465 0.222709 0 0.111899 0.909465 0.222709 0 0.111899 0.909465 0.222709 0 0.117852 0.910833 0.224959 0 0.128314 0.912814 0.225609 0 0.137533 0.915742 0.226844 0 0.144305 0.915631 0.228698 0 0.158376 0.91154 0.229129 0 0.192823 0.901052 0.224855 0 0.220417 0.891837 0.224733 0 0.241104 0.885708 0.21899 0 0.256196 0.880607 0.215457 0 0.267108 0.878336 0.219265 0 0.285189 0.88354 0.222416 0 0.309413 0.880938 0.225691 0 0.330232 0.879235 0.225346 0 0.349338 0.890633 0.225082 0 0.370516 0.894369 0.226192 0 0.386458 0.897946 0.227581 0 0.408895 0.902493 0.228835 0 0.428415 0.905769 0.229961 0 0.443491 0.907238 0.229463 0 0.458126 0.907435 0.228341 0 0.480318 0.905631 0.228652 0 0.505075 0.903736 0.228994 0 0.525366 0.897894 0.227471 0 0.546831 0.891762 0.225452 0 0.574957 0.887743 0.22456 0 0.679194 0.896547 0.220583 0 0.743344 0.907861 0.205534 0 0.814116 0.894896 0.194461 0 0.856717 0.880904 0.190162 0 0.095917 0.098202 0.256065 0 0.095917 0.098202 0.256065 0 0.095917 0.098202 0.256065 0 0.100715 0.097849 0.255901 0 0.112423 0.0967498 0.254318 0 0.13183 0.0964789 0.251669 0 0.144452 0.0984972 0.251813 0 0.159765 0.100988 0.251417 0 0.200221 0.103185 0.248087 0 0.232988 0.100825 0.252798 0 0.249642 0.0996071 0.248791 0 0.265261 0.0987553 0.244853 0 0.286476 0.098717 0.243672 0 0.303182 0.0985267 0.247668 0 0.322063 0.0980361 0.249839 0 0.343565 0.0969742 0.249882 0 0.359323 0.095687 0.248142 0 0.377596 0.0941394 0.246501 0 0.392184 0.0937932 0.245255 0 0.408549 0.0946364 0.244188 0 0.432195 0.0948626 0.245283 0 0.446536 0.0986327 0.24508 0 0.456463 0.103621 0.245637 0 0.477379 0.104736 0.247754 0 0.517193 0.0966803 0.24996 0 0.532108 0.0973926 0.249484 0 0.566434 0.090809 0.251054 0 0.592733 0.095108 0.244428 0 0.648723 0.103626 0.230382 0 0.782591 0.101353 0.235523 0 0.805073 0.0993838 0.203354 0 0.822725 0.100499 0.195363 0 0.095917 0.098202 0.256065 0 0.095917 0.098202 0.256065 0 0.095917 0.098202 0.256065 0 0.100715 0.097849 0.255901 0 0.112423 0.0967498 0.254318 0 0.13183 0.0964789 0.251669 0 0.144452 0.0984972 0.251813 0 0.159765 0.100988 0.251417 0 0.200221 0.103185 0.248087 0 0.232988 0.100825 0.252798 0 0.249642 0.0996071 0.248791 0 0.265261 0.0987553 0.244853 0 0.286476 0.098717 0.243672 0 0.303182 0.0985267 0.247668 0 0.322063 0.0980361 0.249839 0 0.343565 0.0969742 0.249882 0 0.359323 0.095687 0.248142 0 0.377596 0.0941394 0.246501 0 0.392184 0.0937932 0.245255 0 0.408549 0.0946364 0.244188 0 0.432195 0.0948626 0.245283 0 0.446536 0.0986327 0.24508 0 0.456463 0.103621 0.245637 0 0.477379 0.104736 0.247754 0 0.517193 0.0966803 0.24996 0 0.532108 0.0973926 0.249484 0 0.566434 0.090809 0.251054 0 0.592733 0.095108 0.244428 0 0.648723 0.103626 0.230382 0 0.782591 0.101353 0.235523 0 0.805073 0.0993838 0.203354 0 0.822725 0.100499 0.195363 0 0.095917 0.098202 0.256065 0 0.095917 0.098202 0.256065 0 0.095917 0.098202 0.256065 0 0.100715 0.097849 0.255901 0 0.112423 0.0967498 0.254318 0 0.13183 0.0964789 0.251669 0 0.144452 0.0984972 0.251813 0 0.159765 0.100988 0.251417 0 0.200221 0.103185 0.248087 0 0.232988 0.100825 0.252798 0 0.249642 0.0996071 0.248791 0 0.265261 0.0987553 0.244853 0 0.286476 0.098717 0.243672 0 0.303182 0.0985267 0.247668 0 0.322063 0.0980361 0.249839 0 0.343565 0.0969742 0.249882 0 0.359323 0.095687 0.248142 0 0.377596 0.0941394 0.246501 0 0.392184 0.0937932 0.245255 0 0.408549 0.0946364 0.244188 0 0.432195 0.0948626 0.245283 0 0.446536 0.0986327 0.24508 0 0.456463 0.103621 0.245637 0 0.477379 0.104736 0.247754 0 0.517193 0.0966803 0.24996 0 0.532108 0.0973925 0.249484 0 0.566434 0.090809 0.251054 0 0.592733 0.095108 0.244428 0 0.648723 0.103626 0.230382 0 0.782591 0.101353 0.235523 0 0.805073 0.0993838 0.203354 0 0.822725 0.100499 0.195363 0 0.0949745 0.105553 0.255233 0 0.0949745 0.105553 0.255233 0 0.0949745 0.105553 0.255233 0 0.100106 0.105598 0.255207 0 0.111762 0.106309 0.253701 0 0.131984 0.105976 0.252553 0 0.145564 0.107528 0.252465 0 0.161305 0.111608 0.252347 0 0.198417 0.111813 0.247691 0 0.232779 0.108595 0.252298 0 0.249125 0.107086 0.248749 0 0.265339 0.10733 0.244921 0 0.28614 0.105576 0.243321 0 0.303261 0.105173 0.247124 0 0.321935 0.104752 0.249831 0 0.342916 0.103805 0.249997 0 0.3586 0.10291 0.248377 0 0.3774 0.10218 0.246705 0 0.392184 0.1025 0.245518 0 0.409743 0.10485 0.244844 0 0.432263 0.10543 0.245248 0 0.448663 0.108247 0.245224 0 0.458395 0.112595 0.245311 0 0.475891 0.11329 0.246778 0 0.513623 0.105807 0.249243 0 0.531505 0.104972 0.249158 0 0.561481 0.0998844 0.249291 0 0.595055 0.101563 0.24639 0 0.650311 0.111112 0.231567 0 0.78309 0.107854 0.236361 0 0.805595 0.105859 0.204086 0 0.82356 0.107946 0.195944 0 0.0943486 0.124281 0.254212 0 0.0943486 0.124281 0.254212 0 0.0943486 0.124281 0.254212 0 0.100768 0.124315 0.254589 0 0.113056 0.126185 0.25263 0 0.132823 0.127498 0.252684 0 0.149262 0.129615 0.253664 0 0.162866 0.130217 0.253292 0 0.195283 0.127222 0.247848 0 0.232038 0.122131 0.250858 0 0.248851 0.121887 0.248968 0 0.264484 0.121381 0.245171 0 0.284532 0.120087 0.243679 0 0.30337 0.11901 0.245825 0 0.321997 0.119873 0.249701 0 0.34296 0.121564 0.249898 0 0.358662 0.12216 0.248895 0 0.377742 0.122606 0.24761 0 0.393387 0.123685 0.246612 0 0.412034 0.125426 0.246217 0 0.431521 0.125929 0.245955 0 0.452309 0.1258 0.245533 0 0.46115 0.127606 0.244455 0 0.472015 0.128626 0.244451 0 0.505835 0.12286 0.247406 0 0.533644 0.120257 0.248332 0 0.554238 0.120594 0.246599 0 0.599895 0.115062 0.25041 0 0.653821 0.127351 0.234056 0 0.784228 0.121563 0.23763 0 0.808577 0.125728 0.203933 0 0.826629 0.12816 0.195762 0 0.0964113 0.148903 0.254229 0 0.0964113 0.148903 0.254229 0 0.0964113 0.148903 0.254229 0 0.102961 0.149334 0.254474 0 0.115728 0.150928 0.251036 0 0.131076 0.150047 0.250723 0 0.148228 0.146726 0.252301 0 0.162419 0.144876 0.253222 0 0.192966 0.141884 0.248639 0 0.231489 0.138629 0.249916 0 0.248145 0.138845 0.248853 0 0.264276 0.139721 0.245539 0 0.284076 0.140645 0.244225 0 0.304709 0.140832 0.244705 0 0.323537 0.142717 0.249584 0 0.344222 0.144634 0.250134 0 0.35979 0.14543 0.249249 0 0.378301 0.145618 0.248759 0 0.393991 0.145296 0.247879 0 0.413547 0.145478 0.247539 0 0.428159 0.145501 0.246558 0 0.452471 0.141981 0.245426 0 0.463739 0.143536 0.243828 0 0.472982 0.146581 0.242373 0 0.498481 0.14525 0.24435 0 0.537767 0.140734 0.247265 0 0.554321 0.143081 0.245869 0 0.604082 0.134233 0.252279 0 0.657459 0.142881 0.235621 0 0.787759 0.14211 0.240012 0 0.811504 0.144014 0.206236 0 0.82893 0.147173 0.196161 0 0.0972804 0.161781 0.254065 0 0.0972804 0.161781 0.254065 0 0.0972804 0.161781 0.254065 0 0.103675 0.161889 0.254096 0 0.115752 0.160281 0.250633 0 0.128666 0.158711 0.249369 0 0.144997 0.15512 0.251111 0 0.161713 0.152018 0.252626 0 0.192434 0.151027 0.249031 0 0.23141 0.149672 0.250635 0 0.249301 0.151204 0.248509 0 0.264865 0.152154 0.24572 0 0.284383 0.152923 0.244511 0 0.304707 0.153134 0.245243 0 0.324435 0.154177 0.249105 0 0.344892 0.155342 0.250378 0 0.359897 0.155551 0.249336 0 0.378173 0.155459 0.248753 0 0.393908 0.155191 0.248339 0 0.413621 0.154792 0.247873 0 0.428099 0.154665 0.246699 0 0.450404 0.151886 0.245402 0 0.465136 0.151985 0.243507 0 0.474889 0.155663 0.242168 0 0.497623 0.156515 0.243419 0 0.539266 0.149243 0.247315 0 0.553929 0.150846 0.24643 0 0.603606 0.141385 0.252121 0 0.660175 0.15248 0.235791 0 0.789011 0.149955 0.241225 0 0.812352 0.150103 0.207505 0 0.829711 0.154241 0.196496 0 0.0962348 0.169217 0.253569 0 0.0962348 0.169217 0.253569 0 0.0962348 0.169217 0.253569 0 0.101962 0.168254 0.253586 0 0.11479 0.166352 0.250387 0 0.127535 0.164971 0.248812 0 0.142008 0.162177 0.250014 0 0.160488 0.158459 0.251598 0 0.192209 0.160266 0.249594 0 0.231272 0.160737 0.251428 0 0.250296 0.161873 0.248584 0 0.265293 0.162964 0.245917 0 0.284674 0.163709 0.244724 0 0.304493 0.163444 0.245722 0 0.325007 0.163257 0.248652 0 0.345207 0.164273 0.250419 0 0.359881 0.16459 0.249381 0 0.378094 0.164696 0.248792 0 0.393856 0.164998 0.248306 0 0.413007 0.163709 0.247955 0 0.428157 0.163347 0.246885 0 0.448455 0.161414 0.245547 0 0.466363 0.160053 0.243881 0 0.476455 0.163498 0.242717 0 0.496003 0.164083 0.24323 0 0.538176 0.156336 0.247632 0 0.55344 0.158132 0.247237 0 0.597814 0.150601 0.250774 0 0.66334 0.1645 0.236051 0 0.790025 0.157269 0.242721 0 0.813509 0.158052 0.209107 0 0.830783 0.163624 0.196896 0 0.0931314 0.192225 0.253434 0 0.0931314 0.192225 0.253434 0 0.0931314 0.192225 0.253434 0 0.0985358 0.191623 0.252911 0 0.110437 0.190898 0.250124 0 0.127283 0.192495 0.24847 0 0.13985 0.194445 0.248685 0 0.160226 0.195437 0.249642 0 0.194975 0.197256 0.251032 0 0.230024 0.195866 0.252838 0 0.252006 0.194606 0.250344 0 0.265667 0.19495 0.246641 0 0.284072 0.194159 0.244881 0 0.303338 0.193674 0.247222 0 0.326248 0.193518 0.249494 0 0.346815 0.194365 0.251039 0 0.359624 0.194177 0.250576 0 0.37619 0.193168 0.249986 0 0.390679 0.192107 0.249392 0 0.410559 0.191685 0.24969 0 0.428187 0.192309 0.249877 0 0.443321 0.193875 0.248086 0 0.468039 0.192194 0.246749 0 0.482236 0.194458 0.243888 0 0.494024 0.200148 0.241379 0 0.527478 0.199504 0.24295 0 0.559362 0.196822 0.245231 0 0.581218 0.19801 0.243375 0 0.668209 0.20129 0.237744 0 0.794274 0.189493 0.247063 0 0.818331 0.1906 0.214489 0 0.835795 0.196901 0.201988 0 0.0928984 0.229967 0.25269 0 0.0928984 0.229967 0.25269 0 0.0928984 0.229967 0.25269 0 0.0984744 0.229676 0.25263 0 0.112657 0.227984 0.251195 0 0.129797 0.226637 0.25062 0 0.142395 0.22636 0.250316 0 0.158507 0.225915 0.250215 0 0.195014 0.223989 0.249372 0 0.228861 0.22715 0.254107 31885.1 0.252499 0.230297 0.253666 30234.4 0.270389 0.233503 0.249925 0 0.28782 0.238026 0.247746 0 0.304491 0.237739 0.247073 0 0.32511 0.235692 0.249115 0 0.348389 0.233496 0.247191 0 0.36086 0.23312 0.247599 0 0.375618 0.233187 0.247564 0 0.389898 0.232526 0.247028 0 0.410002 0.231515 0.24771 0 0.428359 0.2307 0.248285 0 0.445539 0.23083 0.248084 0 0.462696 0.231173 0.247075 0 0.488183 0.22917 0.245538 0 0.500741 0.232692 0.242486 0 0.522576 0.233417 0.241595 0 0.561876 0.228158 0.243489 0 0.580666 0.230336 0.243348 0 0.667954 0.233827 0.241204 0 0.796669 0.224457 0.246892 0 0.820776 0.225205 0.214525 0 0.840652 0.227415 0.206432 0 0.0919015 0.24179 0.252717 0 0.0919015 0.24179 0.252717 0 0.0919015 0.24179 0.252717 0 0.0970505 0.241438 0.252467 0 0.109907 0.240002 0.251188 0 0.128952 0.237878 0.251526 0 0.143223 0.238444 0.251906 0 0.15875 0.241691 0.250871 0 0.19896 0.249707 0.247605 0 0.230542 0.25517 0.252008 30263.2 0.254302 0.254693 0.252518 157964 0.271693 0.253697 0.250317 16310.8 0.287586 0.252914 0.247993 0 0.303298 0.251943 0.248401 0 0.322844 0.250048 0.249195 0 0.346869 0.247749 0.248078 0 0.361226 0.24739 0.246805 0 0.375591 0.247927 0.247687 0 0.389107 0.24777 0.246971 0 0.409059 0.247052 0.247656 0 0.428247 0.246563 0.248483 0 0.44645 0.246533 0.248468 0 0.461666 0.247439 0.247696 0 0.488484 0.2447 0.24664 0 0.503336 0.24709 0.243743 0 0.521107 0.24915 0.241584 0 0.558403 0.245462 0.243078 0 0.581164 0.247972 0.242599 0 0.66903 0.248349 0.244162 0 0.797096 0.241869 0.24545 0 0.821524 0.243281 0.212775 0 0.84295 0.24234 0.208486 0 0.0923025 0.257206 0.252614 0 0.0923025 0.257206 0.252614 0 0.0923025 0.257206 0.252614 0 0.0973958 0.257962 0.251897 0 0.108974 0.259382 0.249069 0 0.128064 0.259527 0.248958 0 0.145626 0.259304 0.251675 0 0.162321 0.263569 0.251324 0 0.201952 0.269033 0.247685 0 0.229114 0.271313 0.25065 0 0.252446 0.26806 0.251581 28934.4 0.270334 0.26585 0.25067 30277.7 0.287376 0.264637 0.248394 0 0.302153 0.264026 0.249897 0 0.321437 0.263597 0.250304 0 0.34543 0.261898 0.248719 0 0.361334 0.260971 0.24634 0 0.375952 0.2615 0.247466 0 0.388771 0.261954 0.247047 0 0.408634 0.26165 0.247695 0 0.427754 0.260847 0.248547 0 0.446261 0.260391 0.248699 0 0.462385 0.261059 0.248005 0 0.485821 0.259662 0.247235 0 0.505726 0.261179 0.244706 0 0.520049 0.265641 0.242044 0 0.55556 0.26244 0.242597 0 0.584329 0.26317 0.241774 0 0.670111 0.262063 0.244501 0 0.797193 0.257747 0.244089 0 0.82225 0.258811 0.211696 0 0.844427 0.257031 0.208481 0 0.0950047 0.284527 0.253191 0 0.0950047 0.284527 0.253191 0 0.0950047 0.284527 0.253191 0 0.100296 0.285087 0.252403 0 0.112044 0.286417 0.248851 0 0.127423 0.28744 0.247109 0 0.14494 0.286687 0.249447 0 0.165485 0.285871 0.25283 0 0.203837 0.288619 0.248727 0 0.227345 0.288908 0.248453 0 0.248487 0.287025 0.249551 0 0.267038 0.284532 0.249003 0 0.287227 0.283073 0.248821 0 0.302232 0.283698 0.250822 0 0.320785 0.283951 0.252053 0 0.343311 0.283348 0.250394 0 0.360314 0.282297 0.247032 0 0.3773 0.282292 0.246202 0 0.389411 0.283213 0.247138 0 0.40838 0.283673 0.247513 0 0.427074 0.283707 0.248226 0 0.446273 0.283691 0.248483 0 0.464127 0.284408 0.248175 0 0.483201 0.285333 0.247114 0 0.509787 0.284923 0.246134 0 0.523045 0.289709 0.243437 0 0.549346 0.288879 0.242105 0 0.589043 0.28462 0.241665 0 0.67221 0.285916 0.243832 0 0.783152 0.289487 0.233275 0 0.8134 0.288752 0.20413 0 0.845518 0.284425 0.206537 0 0.0966736 0.309614 0.25396 0 0.0966736 0.309614 0.25396 0 0.0966736 0.309614 0.25396 0 0.10196 0.309944 0.253415 0 0.114313 0.310501 0.249638 0 0.127989 0.31187 0.24752 0 0.143045 0.312026 0.248166 0 0.165728 0.310669 0.251498 0 0.203936 0.308156 0.250369 0 0.228155 0.309504 0.247739 0 0.244996 0.310572 0.247632 0 0.263631 0.3098 0.246038 0 0.286418 0.307404 0.24742 0 0.303023 0.306878 0.250968 0 0.320844 0.30797 0.253418 0 0.343 0.308382 0.252626 0 0.359207 0.308271 0.24953 0 0.378032 0.307861 0.245499 0 0.391344 0.308654 0.245802 0 0.408766 0.309738 0.247384 0 0.427035 0.309961 0.247956 0 0.44648 0.3098 0.248144 0 0.465293 0.309461 0.248099 0 0.482495 0.310162 0.24699 0 0.513179 0.307471 0.246532 0 0.527178 0.311228 0.244623 0 0.547003 0.312698 0.242385 0 0.591313 0.306639 0.241455 0 0.676805 0.308766 0.243507 0 0.779118 0.315122 0.231013 0 0.808884 0.31522 0.201698 0 0.847278 0.311037 0.20525 0 0.0969466 0.327126 0.253785 0 0.0969466 0.327126 0.253785 0 0.0969466 0.327126 0.253785 0 0.102935 0.327346 0.253799 0 0.115336 0.328189 0.25024 0 0.129719 0.329699 0.248042 0 0.14286 0.329913 0.248146 0 0.162543 0.32808 0.249425 0 0.203634 0.323445 0.251383 0 0.229426 0.325599 0.248228 0 0.245445 0.327188 0.246975 0 0.262701 0.327269 0.245246 0 0.284037 0.326113 0.245478 0 0.303672 0.325025 0.250149 0 0.322002 0.325999 0.253445 0 0.343351 0.327144 0.253853 0 0.359284 0.327353 0.251437 0 0.377813 0.327208 0.247758 0 0.392635 0.32679 0.244536 0 0.408957 0.327651 0.246997 0 0.426841 0.327298 0.247677 0 0.445848 0.326769 0.247718 0 0.464969 0.326327 0.247646 0 0.483353 0.326617 0.246816 0 0.510548 0.325106 0.246133 0 0.530274 0.327311 0.245366 0 0.545446 0.330739 0.242826 0 0.586671 0.325697 0.242047 0 0.68185 0.325956 0.243563 0 0.781946 0.330827 0.234557 0 0.81245 0.329551 0.207435 0 0.846195 0.328942 0.203326 0 0.0976922 0.348117 0.253399 0 0.0976922 0.348117 0.253399 0 0.0976922 0.348117 0.253399 0 0.103693 0.348508 0.253404 0 0.116303 0.348381 0.250433 0 0.130043 0.347855 0.247763 0 0.141582 0.347555 0.247518 0 0.160179 0.346028 0.248724 0 0.201155 0.343315 0.250303 0 0.231443 0.343406 0.249792 0 0.247172 0.345621 0.247014 0 0.262695 0.346898 0.24522 0 0.283091 0.347585 0.244149 0 0.303649 0.346885 0.248366 0 0.323449 0.346122 0.252773 0 0.343427 0.346959 0.254281 0 0.358816 0.346743 0.252734 0 0.377237 0.346213 0.250236 0 0.392314 0.345759 0.246104 0 0.409685 0.346167 0.245731 0 0.426266 0.346078 0.247106 0 0.445143 0.345455 0.247362 0 0.464779 0.345084 0.247346 0 0.484401 0.345271 0.24681 0 0.507836 0.345323 0.24599 0 0.533465 0.34555 0.245806 0 0.545784 0.350108 0.243885 0 0.58065 0.346993 0.242316 0 0.688132 0.347319 0.243616 0 0.780486 0.347697 0.234975 0 0.812177 0.345481 0.210081 0 0.840425 0.348497 0.200108 0 0.0974356 0.362797 0.252893 0 0.0974356 0.362797 0.252893 0 0.0974356 0.362797 0.252893 0 0.102989 0.36258 0.252797 0 0.115767 0.362046 0.250293 0 0.129716 0.361526 0.247819 0 0.14147 0.361123 0.247377 0 0.15855 0.360146 0.248429 0 0.200044 0.359106 0.249537 0 0.233099 0.357278 0.250966 0 0.249353 0.360267 0.248027 0 0.263254 0.362439 0.245236 0 0.283058 0.362678 0.243686 0 0.30261 0.362355 0.246652 0 0.322827 0.361162 0.251407 0 0.34384 0.360801 0.253853 0 0.358452 0.360805 0.253164 0 0.37678 0.360151 0.251161 0 0.391861 0.35966 0.248344 0 0.410312 0.35987 0.24552 0 0.425783 0.360555 0.246906 0 0.444735 0.360101 0.24722 0 0.464699 0.35961 0.247316 0 0.484966 0.35976 0.246752 0 0.505754 0.360864 0.24574 0 0.535932 0.359551 0.246036 0 0.548597 0.364185 0.244376 0 0.576221 0.364057 0.242323 0 0.692018 0.361066 0.242991 0 0.77282 0.363871 0.229437 0 0.804352 0.361781 0.204325 0 0.842159 0.35944 0.203194 0 0.0964657 0.37838 0.252233 0 0.0964657 0.37838 0.252233 0 0.0964657 0.37838 0.252233 0 0.101978 0.378069 0.252154 0 0.114631 0.377393 0.249766 0 0.129362 0.376729 0.248023 0 0.141644 0.376794 0.247318 0 0.157671 0.376959 0.247972 0 0.20039 0.37609 0.249015 0 0.233981 0.374076 0.250695 0 0.25156 0.375219 0.249218 0 0.264685 0.377286 0.245795 0 0.282953 0.378104 0.243496 0 0.302058 0.377384 0.246016 0 0.322402 0.376631 0.2501 0 0.343992 0.37589 0.252921 0 0.358426 0.375927 0.253066 0 0.376234 0.375932 0.252179 0 0.391658 0.375518 0.250466 0 0.411425 0.375375 0.246333 0 0.425899 0.376856 0.247016 0 0.444427 0.376558 0.246781 0 0.464439 0.376056 0.24712 0 0.485153 0.376281 0.246656 0 0.506102 0.377688 0.245716 0 0.538631 0.375263 0.246341 0 0.551696 0.379574 0.244817 0 0.575028 0.381597 0.24298 0 0.693992 0.375373 0.241561 0 0.764414 0.383403 0.223298 0 0.795867 0.382276 0.197881 0 0.844718 0.373347 0.20751 0 0.0960547 0.390716 0.251331 0 0.0960547 0.390716 0.251331 0 0.0960547 0.390716 0.251331 0 0.101122 0.390652 0.251616 0 0.113781 0.390077 0.249333 0 0.129667 0.389986 0.248349 0 0.141962 0.390479 0.247595 0 0.15708 0.390674 0.247274 0 0.201112 0.388628 0.248945 0 0.233199 0.387488 0.249981 0 0.252708 0.387254 0.249646 0 0.266286 0.388629 0.246419 0 0.283234 0.38993 0.244038 0 0.301659 0.389847 0.245569 0 0.322153 0.389847 0.249156 0 0.343691 0.389367 0.251613 0 0.358402 0.389072 0.252495 0 0.376275 0.389046 0.252111 0 0.391417 0.38893 0.251225 0 0.411331 0.388704 0.248285 0 0.427042 0.389879 0.247289 0 0.444083 0.390573 0.247137 0 0.464144 0.389996 0.246899 0 0.485355 0.389748 0.246752 0 0.506828 0.390385 0.245863 0 0.538397 0.388477 0.246449 0 0.554223 0.391969 0.245223 0 0.574077 0.394612 0.243217 0 0.69573 0.386458 0.240824 0 0.766264 0.396619 0.223657 0 0.789505 0.398065 0.193116 0 0.840046 0.387181 0.204667 0 0.0963303 0.405438 0.249942 0 0.0963303 0.405438 0.249942 0 0.0963303 0.405438 0.249942 0 0.100793 0.405882 0.250819 0 0.1134 0.405685 0.248882 0 0.129498 0.405172 0.248002 0 0.142069 0.405118 0.247931 0 0.157173 0.405199 0.247121 0 0.201953 0.403256 0.249032 0 0.230876 0.403646 0.249116 0 0.252606 0.402853 0.248927 0 0.267694 0.403241 0.247088 0 0.284119 0.40493 0.244839 0 0.301265 0.405867 0.245585 0 0.323092 0.405501 0.248843 0 0.343067 0.406231 0.25027 0 0.358145 0.405976 0.250729 0 0.376459 0.405423 0.251946 0 0.391368 0.40551 0.251697 0 0.411266 0.4055 0.250493 0 0.428485 0.40572 0.247988 0 0.443822 0.40717 0.248398 0 0.463588 0.406686 0.247096 0 0.48528 0.405908 0.246788 0 0.507803 0.406085 0.246058 0 0.535925 0.404783 0.246116 0 0.556929 0.406257 0.245284 0 0.572897 0.410378 0.242684 0 0.698511 0.402544 0.240222 0 0.769003 0.412622 0.225029 0 0.791421 0.414933 0.193262 0 0.830853 0.408827 0.197472 0 0.0970209 0.419534 0.248746 0 0.0970209 0.419534 0.248746 0 0.0970209 0.419534 0.248746 0 0.10135 0.420037 0.249554 0 0.112844 0.420435 0.248406 0 0.129011 0.419959 0.247544 0 0.1423 0.419871 0.248251 0 0.157589 0.420456 0.247332 0 0.201776 0.419549 0.248849 0 0.229725 0.420539 0.248988 0 0.252677 0.419808 0.248095 0 0.26849 0.420244 0.246349 0 0.285398 0.420671 0.245423 0 0.301745 0.421924 0.246635 0 0.323195 0.422426 0.248815 0 0.343521 0.423486 0.249959 0 0.358027 0.423755 0.24918 0 0.375302 0.423495 0.250756 0 0.391374 0.422615 0.251702 0 0.411319 0.422813 0.251876 0 0.429212 0.422975 0.249993 0 0.444611 0.423967 0.249154 0 0.462749 0.423831 0.247672 0 0.484536 0.422498 0.246037 0 0.508386 0.421635 0.245665 0 0.533662 0.422001 0.245543 0 0.55966 0.421868 0.245108 0 0.573605 0.427964 0.242517 0 0.701399 0.420426 0.239389 0 0.772141 0.431616 0.226591 0 0.797272 0.439524 0.194502 0 0.826476 0.445822 0.190502 0 0.0984056 0.436401 0.246838 0 0.0984056 0.436401 0.246838 0 0.0984056 0.436401 0.246838 0 0.102314 0.437254 0.247947 0 0.112716 0.438661 0.247457 0 0.128981 0.438901 0.246983 0 0.142933 0.439041 0.248117 0 0.158336 0.439831 0.247807 0 0.200505 0.439502 0.248253 0 0.229355 0.439681 0.249072 0 0.253208 0.439061 0.248302 0 0.269585 0.440133 0.245957 0 0.285364 0.440949 0.244325 0 0.3029 0.440652 0.248107 0 0.323393 0.441615 0.249639 0 0.344772 0.442815 0.2504 0 0.358537 0.443671 0.248705 0 0.374728 0.443688 0.248817 0 0.389883 0.442833 0.249958 0 0.411634 0.441153 0.251596 0 0.428644 0.441067 0.251245 0 0.445687 0.440895 0.249162 0 0.4623 0.441544 0.248836 0 0.483093 0.441016 0.24585 0 0.50822 0.44071 0.244738 0 0.532137 0.442811 0.244999 0 0.563484 0.442018 0.244976 0 0.577797 0.447564 0.242535 0 0.692948 0.443892 0.236489 0 0.778871 0.46063 0.228369 0 0.803173 0.464461 0.196777 0 0.823258 0.464505 0.189999 0 0.100823 0.453567 0.244237 0 0.100823 0.453567 0.244237 0 0.100823 0.453567 0.244237 0 0.105012 0.454545 0.245051 0 0.114641 0.456273 0.245421 0 0.129114 0.457047 0.246623 0 0.143024 0.457142 0.247845 0 0.159052 0.457616 0.248344 0 0.199539 0.4586 0.247859 0 0.230381 0.458542 0.249043 0 0.252796 0.458305 0.248991 0 0.271073 0.458975 0.246418 0 0.286198 0.460651 0.243699 0 0.302387 0.460312 0.246931 0 0.323684 0.459192 0.25063 0 0.345721 0.459727 0.250278 0 0.358818 0.460647 0.248752 0 0.375133 0.461164 0.247438 0 0.388297 0.461472 0.247807 0 0.409837 0.459663 0.249634 0 0.428572 0.458432 0.250933 0 0.446303 0.458861 0.249446 0 0.462744 0.460411 0.249524 0 0.483413 0.461442 0.247178 0 0.508649 0.462242 0.244247 0 0.53404 0.463556 0.24455 0 0.565103 0.462564 0.244454 0 0.582171 0.467792 0.242195 0 0.687092 0.464398 0.235919 0 0.782326 0.478375 0.231184 0 0.802707 0.471922 0.201311 0 0.815795 0.471289 0.189211 0 0.101362 0.473361 0.243845 0 0.101362 0.473361 0.243845 0 0.101362 0.473361 0.243845 0 0.108166 0.473501 0.241931 0 0.116974 0.476153 0.243345 0 0.129978 0.478083 0.245877 0 0.143427 0.478648 0.247598 0 0.1605 0.479112 0.248766 0 0.199411 0.480799 0.247245 0 0.231073 0.479798 0.248483 0 0.251216 0.479373 0.2488 0 0.272519 0.478395 0.246768 0 0.287668 0.479988 0.243634 0 0.300817 0.481099 0.244431 0 0.322858 0.479204 0.25013 0 0.347698 0.478559 0.250709 0 0.360422 0.480336 0.248836 0 0.375791 0.481706 0.247154 0 0.389135 0.482711 0.2465 0 0.40841 0.483361 0.247363 0 0.42839 0.482261 0.249285 0 0.447504 0.482484 0.249841 0 0.464748 0.484159 0.249112 0 0.484218 0.485763 0.248383 0 0.50906 0.486461 0.24495 0 0.535728 0.486418 0.243828 0 0.562609 0.485145 0.244043 0 0.585485 0.486129 0.242432 0 0.685714 0.484688 0.239754 0 0.782219 0.485201 0.234298 0 0.803139 0.483467 0.203215 0 0.814972 0.478054 0.190144 0 0.10057 0.500127 0.245609 0 0.10057 0.500127 0.245609 0 0.10057 0.500127 0.245609 0 0.108485 0.499825 0.242457 0 0.120779 0.500799 0.240156 0 0.132477 0.503137 0.243566 0 0.143914 0.504046 0.246958 0 0.160724 0.503806 0.248106 0 0.198739 0.504239 0.246071 0 0.230047 0.503242 0.247257 0 0.250303 0.503092 0.24718 0 0.272655 0.502604 0.246235 0 0.289955 0.504524 0.243773 0 0.302827 0.506988 0.243421 0 0.321645 0.50738 0.247215 0 0.347862 0.505201 0.2511 0 0.363361 0.505839 0.249368 0 0.377568 0.508294 0.247691 0 0.390817 0.509457 0.24587 0 0.408962 0.510749 0.246275 0 0.427296 0.511029 0.246996 0 0.447224 0.510171 0.248513 0 0.466857 0.509665 0.248882 0 0.484495 0.510526 0.249868 0 0.508385 0.509591 0.247296 0 0.534907 0.505785 0.245953 0 0.558026 0.502097 0.245534 0 0.586068 0.497043 0.245763 0 0.685739 0.504684 0.244659 0 0.782523 0.492153 0.235169 0 0.800893 0.487634 0.204471 0 0.813633 0.484218 0.190356 0 0.098773 0.526985 0.24673 0 0.098773 0.526985 0.24673 0 0.098773 0.526985 0.24673 0 0.106749 0.52624 0.243698 0 0.122906 0.52529 0.237221 0 0.134913 0.526888 0.239851 0 0.145578 0.528192 0.243544 0 0.160545 0.529158 0.246555 0 0.200279 0.531828 0.245923 0 0.229558 0.53321 0.245627 0 0.252159 0.533089 0.245848 0 0.27147 0.533443 0.244939 0 0.29234 0.532957 0.24378 0 0.305802 0.534123 0.243753 0 0.320778 0.535676 0.245739 0 0.344241 0.53445 0.248852 0 0.363628 0.532634 0.249187 0 0.380605 0.532927 0.249492 0 0.392988 0.534573 0.247883 0 0.409787 0.532364 0.247175 0 0.426226 0.529836 0.248543 0 0.444213 0.526643 0.248992 0 0.463316 0.523588 0.25042 0 0.483372 0.520453 0.251805 0 0.504792 0.516966 0.25345 0 0.531832 0.514093 0.252796 0 0.555126 0.517492 0.249275 0 0.590644 0.520738 0.247872 0 0.684238 0.523212 0.241513 0 0.767259 0.497126 0.234356 0 0.799762 0.492526 0.204631 0 0.809929 0.485525 0.190572 0 0.0973784 0.556221 0.247807 0 0.0973784 0.556221 0.247807 0 0.0973784 0.556221 0.247807 0 0.104217 0.555914 0.245787 0 0.122014 0.55508 0.237542 0 0.138927 0.554941 0.235554 0 0.149061 0.556791 0.240122 0 0.162617 0.558559 0.244292 0 0.201938 0.559977 0.246157 0 0.229288 0.561333 0.244634 0 0.251613 0.560208 0.24568 0 0.270495 0.557903 0.244923 0 0.291861 0.553795 0.244696 0 0.305585 0.552047 0.245538 0 0.320425 0.551564 0.248376 0 0.341401 0.548748 0.25047 0 0.357712 0.546068 0.251633 0 0.377953 0.542728 0.25241 0 0.391348 0.540833 0.253294 0 0.409169 0.541181 0.251922 0 0.424698 0.542497 0.251377 0 0.442434 0.542648 0.251129 0 0.460613 0.542678 0.250411 0 0.482072 0.544523 0.250275 0 0.506512 0.547715 0.252947 0 0.535568 0.552132 0.252192 0 0.560372 0.554368 0.247312 0 0.588841 0.551233 0.241332 0 0.680337 0.531268 0.239671 0 0.749043 0.519374 0.222763 0 0.80436 0.513372 0.205879 0 0.816499 0.512605 0.191518 0 0.0994271 0.583821 0.246445 0 0.0994271 0.583821 0.246445 0 0.0994271 0.583821 0.246445 0 0.103687 0.584417 0.247006 0 0.119937 0.582681 0.23998 0 0.138053 0.578964 0.236659 0 0.151678 0.57727 0.237906 0 0.163706 0.577406 0.24337 0 0.200463 0.574091 0.249343 0 0.225896 0.570896 0.248152 0 0.246631 0.567253 0.249547 0 0.267019 0.565937 0.249052 0 0.289231 0.566427 0.246821 0 0.30518 0.567368 0.247901 0 0.32043 0.568699 0.250332 0 0.340275 0.568964 0.251754 0 0.355699 0.568494 0.251622 0 0.37577 0.567392 0.251178 0 0.390537 0.566506 0.251592 0 0.411366 0.57146 0.251971 0 0.430048 0.578918 0.249897 0 0.447137 0.584786 0.247265 0 0.465291 0.584941 0.244833 0 0.48353 0.583145 0.242078 0 0.505466 0.582846 0.241164 0 0.530533 0.574594 0.244765 0 0.554461 0.564997 0.244952 0 0.57828 0.557207 0.242454 0 0.680395 0.540502 0.241841 0 0.73942 0.518264 0.217317 0 0.793185 0.528034 0.207152 0 0.825549 0.554052 0.201624 0 0.0982895 0.670677 0.246 0 0.0982895 0.670677 0.246 0 0.0982895 0.670677 0.246 0 0.102751 0.672195 0.245938 0 0.118553 0.669492 0.238247 0 0.133221 0.667755 0.237422 0 0.147002 0.666291 0.239216 0 0.167782 0.663181 0.235226 0 0.205301 0.66181 0.240303 0 0.23358 0.667288 0.246088 0 0.247515 0.664914 0.244889 0 0.266351 0.661255 0.243719 0 0.291229 0.655402 0.244742 0 0.304647 0.652803 0.246205 0 0.32458 0.649127 0.249905 0 0.341511 0.646965 0.251619 0 0.352243 0.647457 0.25082 0 0.366781 0.641848 0.249337 0 0.380977 0.636214 0.248901 0 0.40106 0.628381 0.250161 0 0.415399 0.623923 0.249946 0 0.439243 0.648011 0.250489 0 0.463167 0.66028 0.249738 0 0.488582 0.668994 0.250798 0 0.510236 0.664513 0.246134 0 0.529597 0.660001 0.241803 0 0.550351 0.654341 0.242216 0 0.576543 0.646985 0.243748 0 0.658901 0.629126 0.229592 0 0.771 0.602981 0.230097 0 0.799871 0.598712 0.213067 0 0.826685 0.596417 0.204951 0 0.0919226 0.749951 0.249183 0 0.0919226 0.749951 0.249183 0 0.0919226 0.749951 0.249183 0 0.0951534 0.748879 0.250379 0 0.103624 0.747779 0.250603 0 0.123044 0.747037 0.24414 0 0.136746 0.74893 0.246967 0 0.156354 0.749732 0.24591 0 0.197833 0.748074 0.243869 0 0.233531 0.739642 0.237762 0 0.24418 0.736311 0.242381 0 0.257928 0.732397 0.244917 0 0.278595 0.727464 0.241685 0 0.296069 0.723202 0.242707 0 0.317072 0.720992 0.245655 0 0.336203 0.719552 0.247015 0 0.351499 0.715715 0.24578 0 0.36404 0.712201 0.243554 0 0.373063 0.709597 0.24221 0 0.386319 0.705704 0.240904 0 0.402348 0.700805 0.241159 0 0.41993 0.695378 0.241594 0 0.435141 0.690821 0.24153 0 0.450846 0.686683 0.239937 0 0.472694 0.681468 0.23957 0 0.500007 0.678846 0.239624 0 0.53566 0.701714 0.243274 0 0.590877 0.774632 0.250832 0 0.685363 0.763729 0.253722 0 0.737372 0.749572 0.224396 0 0.800058 0.741816 0.209065 0 0.828642 0.746798 0.203804 0 0.0949892 0.795423 0.234181 0 0.0949892 0.795423 0.234181 0 0.0949892 0.795423 0.234181 0 0.101705 0.804494 0.235516 0 0.112116 0.811258 0.23586 0 0.123125 0.820737 0.239817 0 0.135198 0.825311 0.245937 0 0.153998 0.823454 0.247541 0 0.195335 0.818092 0.248131 0 0.227232 0.813798 0.249153 0 0.243111 0.804482 0.241239 0 0.25946 0.796228 0.23419 0 0.27347 0.796118 0.23869 0 0.286832 0.794773 0.240349 0 0.299482 0.792622 0.241869 0 0.3145 0.789216 0.24318 0 0.327875 0.783957 0.241857 0 0.343973 0.781197 0.243127 0 0.361596 0.780787 0.244976 0 0.387693 0.791982 0.247811 0 0.41697 0.837764 0.246877 0 0.436004 0.842369 0.24353 0 0.45639 0.838407 0.243819 0 0.479054 0.834468 0.244416 0 0.502228 0.836066 0.243922 0 0.527899 0.839737 0.244006 0 0.555473 0.840328 0.245179 0 0.582953 0.841613 0.245287 0 0.673984 0.83256 0.24024 0 0.730324 0.851632 0.218477 0 0.801017 0.847761 0.206809 0 0.853249 0.839626 0.208951 0 0.1105 0.908594 0.240963 0 0.1105 0.908594 0.240963 0 0.1105 0.908594 0.240963 0 0.121329 0.907623 0.23412 0 0.129934 0.910151 0.235022 0 0.141427 0.912882 0.236219 0 0.150679 0.910765 0.240386 0 0.160261 0.907649 0.246008 0 0.192198 0.897618 0.244001 0 0.220308 0.888742 0.241126 0 0.234717 0.882984 0.241096 0 0.248659 0.876606 0.236915 0 0.271411 0.876281 0.227549 0 0.292806 0.881791 0.232556 0 0.312658 0.879579 0.239977 0 0.331099 0.88337 0.243338 0 0.349173 0.891609 0.244693 0 0.371462 0.895161 0.24479 0 0.387009 0.898987 0.244856 0 0.410193 0.903745 0.245268 0 0.428747 0.906373 0.24503 0 0.442283 0.907131 0.244516 0 0.458025 0.906937 0.243981 0 0.480157 0.905061 0.244001 0 0.504431 0.902328 0.244063 0 0.524467 0.896349 0.243173 0 0.545889 0.890008 0.242298 0 0.575228 0.888432 0.242737 0 0.681791 0.896041 0.243426 0 0.73985 0.906981 0.219488 0 0.810799 0.895774 0.207664 0 0.853965 0.88155 0.207643 0 0.0949658 0.096987 0.268874 0 0.0949658 0.096987 0.268874 0 0.0949658 0.096987 0.268874 0 0.099737 0.0968911 0.267585 0 0.109871 0.0966231 0.265952 0 0.132658 0.097606 0.26709 0 0.145514 0.0997288 0.267055 0 0.159566 0.102456 0.268775 0 0.202273 0.102304 0.271346 0 0.232263 0.100104 0.267874 0 0.247087 0.0990332 0.26645 0 0.261742 0.0987201 0.264839 0 0.285162 0.0987501 0.261146 0 0.307948 0.0976118 0.262104 0 0.324604 0.0977418 0.266743 0 0.343275 0.0966714 0.269461 0 0.358141 0.0955824 0.270048 0 0.376114 0.094326 0.269594 0 0.390422 0.094232 0.268819 0 0.407314 0.0962074 0.267327 0 0.432118 0.0956184 0.266902 0 0.445741 0.0986212 0.266314 0 0.456255 0.103095 0.265713 0 0.480385 0.102678 0.26848 0 0.516768 0.0956555 0.270715 0 0.530386 0.0967537 0.270913 0 0.553437 0.0978975 0.262787 0 0.592864 0.0944995 0.26303 0 0.643004 0.105947 0.241839 0 0.775916 0.101265 0.249477 0 0.799856 0.101177 0.219284 0 0.8218 0.104103 0.210697 0 0.0949658 0.096987 0.268874 0 0.0949658 0.096987 0.268874 0 0.0949658 0.096987 0.268874 0 0.099737 0.0968911 0.267585 0 0.109871 0.0966231 0.265952 0 0.132658 0.097606 0.26709 0 0.145514 0.0997288 0.267055 0 0.159566 0.102456 0.268775 0 0.202273 0.102304 0.271346 0 0.232263 0.100104 0.267874 0 0.247087 0.0990332 0.26645 0 0.261742 0.0987201 0.264839 0 0.285162 0.0987501 0.261146 0 0.307948 0.0976118 0.262104 0 0.324604 0.0977418 0.266743 0 0.343275 0.0966714 0.269461 0 0.358141 0.0955824 0.270048 0 0.376114 0.094326 0.269594 0 0.390422 0.094232 0.268819 0 0.407314 0.0962074 0.267327 0 0.432118 0.0956184 0.266902 0 0.445741 0.0986212 0.266314 0 0.456255 0.103095 0.265713 0 0.480385 0.102678 0.26848 0 0.516768 0.0956555 0.270715 0 0.530386 0.0967537 0.270913 0 0.553437 0.0978975 0.262787 0 0.592864 0.0944995 0.26303 0 0.643004 0.105947 0.241839 0 0.775916 0.101265 0.249477 0 0.799856 0.101177 0.219284 0 0.8218 0.104103 0.210697 0 0.0949658 0.096987 0.268874 0 0.0949658 0.096987 0.268874 0 0.0949658 0.0969871 0.268874 0 0.099737 0.0968911 0.267585 0 0.109871 0.0966231 0.265952 0 0.132658 0.0976061 0.26709 0 0.145514 0.0997288 0.267055 0 0.159566 0.102456 0.268775 0 0.202273 0.102304 0.271346 0 0.232263 0.100104 0.267874 0 0.247087 0.0990332 0.26645 0 0.261742 0.0987202 0.264839 0 0.285162 0.0987501 0.261146 0 0.307948 0.0976118 0.262104 0 0.324604 0.0977418 0.266743 0 0.343275 0.0966714 0.269461 0 0.358141 0.0955824 0.270048 0 0.376114 0.094326 0.269594 0 0.390422 0.094232 0.268819 0 0.407314 0.0962074 0.267327 0 0.432118 0.0956184 0.266902 0 0.445741 0.0986212 0.266314 0 0.456255 0.103095 0.265713 0 0.480385 0.102678 0.26848 0 0.516768 0.0956555 0.270715 0 0.530386 0.0967537 0.270913 0 0.553437 0.0978975 0.262787 0 0.592864 0.0944995 0.26303 0 0.643004 0.105947 0.241839 0 0.775916 0.101265 0.249477 0 0.799856 0.101178 0.219284 0 0.8218 0.104103 0.210697 0 0.0943885 0.104384 0.26826 0 0.0943885 0.104384 0.26826 0 0.0943885 0.104384 0.26826 0 0.0997912 0.104548 0.267491 0 0.110259 0.105792 0.266061 0 0.133871 0.106716 0.26735 0 0.146577 0.108756 0.267332 0 0.161512 0.113063 0.268846 0 0.200531 0.111005 0.271064 0 0.231771 0.10789 0.26809 0 0.246874 0.106827 0.266233 0 0.261797 0.107208 0.264554 0 0.284662 0.105864 0.261012 0 0.307813 0.104327 0.261832 0 0.324676 0.104318 0.266266 0 0.342742 0.103423 0.269222 0 0.357514 0.102509 0.269807 0 0.376133 0.102524 0.269383 0 0.390867 0.103379 0.268821 0 0.408616 0.10646 0.267842 0 0.431591 0.106655 0.267213 0 0.44766 0.108797 0.266587 0 0.458028 0.112441 0.26591 0 0.478602 0.111161 0.267314 0 0.516762 0.103468 0.270094 0 0.529833 0.104019 0.270242 0 0.554872 0.103712 0.265485 0 0.59441 0.102919 0.262002 0 0.644506 0.113689 0.243089 0 0.776854 0.109124 0.249959 0 0.800352 0.107612 0.220204 0 0.823246 0.109259 0.213248 0 0.0944755 0.12316 0.267459 0 0.0944755 0.12316 0.267459 0 0.0944755 0.12316 0.267459 0 0.100665 0.123291 0.266755 0 0.111705 0.1246 0.266234 0 0.136072 0.127552 0.267766 0 0.150126 0.129858 0.267818 0 0.162863 0.129353 0.268672 0 0.195869 0.126426 0.270377 0 0.231368 0.122238 0.268512 0 0.246945 0.121839 0.266212 0 0.260648 0.121465 0.264378 0 0.283392 0.120095 0.260674 0 0.306839 0.118425 0.261758 0 0.325538 0.119677 0.265149 0 0.342923 0.121476 0.26887 0 0.357826 0.12208 0.269563 0 0.377046 0.123028 0.269268 0 0.39267 0.124512 0.268967 0 0.411148 0.1268 0.268689 0 0.430598 0.127156 0.267992 0 0.450518 0.126363 0.267078 0 0.459917 0.127022 0.265621 0 0.474376 0.126457 0.264709 0 0.509569 0.119761 0.267872 0 0.530447 0.119814 0.268771 0 0.558805 0.117376 0.271042 0 0.59816 0.118881 0.26385 0 0.647883 0.129677 0.245697 0 0.777638 0.12135 0.251194 0 0.802436 0.124473 0.220585 0 0.825098 0.127712 0.213566 0 0.094863 0.148674 0.26651 0 0.094863 0.148674 0.26651 0 0.094863 0.148674 0.26651 0 0.102062 0.148687 0.265513 0 0.113614 0.149525 0.265517 0 0.135108 0.146734 0.26744 0 0.149729 0.145127 0.267119 0 0.162572 0.143992 0.26809 0 0.192309 0.142347 0.268896 0 0.231118 0.138649 0.268986 0 0.246481 0.139099 0.266661 0 0.260438 0.140068 0.264632 0 0.283133 0.140814 0.260437 0 0.307452 0.141336 0.262054 0 0.327977 0.142139 0.264155 0 0.344562 0.144782 0.26827 0 0.359088 0.145604 0.269543 0 0.377817 0.14543 0.269187 0 0.393598 0.145301 0.268939 0 0.412788 0.145886 0.268682 0 0.427202 0.145468 0.267996 0 0.450674 0.142216 0.267449 0 0.46179 0.143619 0.264957 0 0.472074 0.145361 0.263331 0 0.502593 0.14244 0.265029 0 0.53546 0.140207 0.267145 0 0.552656 0.142415 0.26666 0 0.603162 0.136482 0.270376 0 0.650529 0.144372 0.250062 0 0.780908 0.142584 0.251726 0 0.805582 0.146352 0.220259 0 0.826144 0.147953 0.213449 0 0.0955537 0.16165 0.266583 0 0.0955537 0.16165 0.266583 0 0.0955537 0.16165 0.266584 0 0.10232 0.161487 0.265158 0 0.1128 0.159843 0.264397 0 0.131864 0.156053 0.26644 0 0.148535 0.152681 0.266843 0 0.161628 0.151302 0.267686 0 0.192002 0.151852 0.268708 0 0.23155 0.150243 0.269284 0 0.247099 0.151698 0.267274 0 0.261278 0.152512 0.264872 0 0.283481 0.153176 0.26056 0 0.30763 0.15365 0.262072 0 0.328431 0.154076 0.264491 0 0.345585 0.154981 0.26775 0 0.35912 0.155418 0.269339 0 0.377677 0.155272 0.26901 0 0.393714 0.155046 0.268767 0 0.412803 0.154409 0.268408 0 0.426727 0.154631 0.267616 0 0.448766 0.152076 0.267346 0 0.463088 0.152375 0.265346 0 0.473832 0.155596 0.26318 0 0.500304 0.154892 0.263823 0 0.537861 0.150156 0.266689 0 0.552776 0.152251 0.266228 0 0.604812 0.142582 0.273911 0 0.650693 0.149995 0.25139 0 0.782389 0.150943 0.252559 0 0.806339 0.152777 0.221435 0 0.826186 0.154845 0.213742 0 0.094106 0.169148 0.26638 0 0.094106 0.169148 0.26638 0 0.094106 0.169148 0.26638 0 0.100452 0.16808 0.264898 0 0.111339 0.166299 0.26367 0 0.129019 0.163058 0.265553 0 0.146232 0.159372 0.266364 0 0.16134 0.157846 0.267555 0 0.192244 0.161069 0.268617 0 0.231626 0.161385 0.269249 0 0.247772 0.162529 0.267756 0 0.261941 0.163214 0.26514 0 0.28359 0.164111 0.261087 0 0.307439 0.163317 0.261967 0 0.328309 0.16304 0.264636 0 0.346323 0.163655 0.267217 0 0.359132 0.164407 0.269169 0 0.377556 0.164414 0.268809 0 0.393336 0.164115 0.268456 0 0.412463 0.163156 0.268083 0 0.426991 0.163505 0.267356 0 0.447165 0.16216 0.267344 0 0.464764 0.162215 0.266004 0 0.475557 0.165539 0.263391 0 0.498819 0.164134 0.263886 0 0.539148 0.156885 0.266853 0 0.552287 0.159519 0.266457 0 0.605148 0.14918 0.275937 0 0.653421 0.161449 0.251792 0 0.783547 0.158667 0.253869 0 0.807381 0.160673 0.223339 0 0.826726 0.163901 0.214057 0 0.0898879 0.193127 0.265903 0 0.0898879 0.193127 0.265903 0 0.089888 0.193127 0.265903 0 0.0955256 0.192658 0.264412 0 0.107126 0.191516 0.262455 0 0.127807 0.193187 0.264039 0 0.141674 0.194534 0.264556 0 0.16392 0.193445 0.26765 0 0.195447 0.196626 0.26778 0 0.230352 0.195633 0.268123 0 0.249385 0.195161 0.267561 0 0.2619 0.1958 0.265832 0 0.282917 0.195605 0.261678 0 0.307056 0.195132 0.262647 0 0.328748 0.195616 0.265739 0 0.347633 0.195067 0.267249 0 0.360158 0.194653 0.267972 0 0.375659 0.194304 0.268843 0 0.390628 0.193288 0.268387 0 0.410871 0.191949 0.268668 0 0.427457 0.191228 0.268452 0 0.442068 0.19306 0.267985 0 0.466899 0.191347 0.26816 0 0.480091 0.194207 0.266433 0 0.493652 0.199318 0.263424 0 0.531225 0.195879 0.264648 0 0.557008 0.196048 0.264118 0 0.584031 0.196274 0.264328 0 0.661138 0.20032 0.253501 0 0.787893 0.190512 0.258496 0 0.811984 0.192816 0.230161 0 0.831324 0.200705 0.21574 0 0.0912871 0.229114 0.268509 0 0.0912871 0.229114 0.268509 0 0.0912871 0.229114 0.268509 0 0.098491 0.22913 0.266529 0 0.109797 0.229327 0.264167 0 0.129842 0.228105 0.264876 0 0.143282 0.227662 0.264498 0 0.159782 0.226921 0.266613 0 0.195796 0.224161 0.269082 0 0.229621 0.225806 0.269066 0 0.251465 0.229018 0.268572 0 0.26634 0.23293 0.26705 0 0.285921 0.237589 0.262677 0 0.307199 0.23641 0.26337 0 0.327108 0.23443 0.266496 0 0.345979 0.232926 0.267563 0 0.359819 0.232332 0.266833 0 0.376181 0.232564 0.265345 0 0.389799 0.232283 0.266285 0 0.410378 0.231361 0.266486 0 0.428513 0.230682 0.266473 0 0.444938 0.231118 0.266408 0 0.462547 0.231375 0.266226 0 0.486744 0.230024 0.266272 0 0.499444 0.233753 0.265339 0 0.522434 0.233996 0.2639 0 0.563405 0.227123 0.264128 0 0.579598 0.229928 0.261608 0 0.663533 0.238548 0.252134 0 0.791124 0.222958 0.260629 0 0.816132 0.223652 0.23504 0 0.835892 0.230679 0.221583 0 0.0888953 0.242673 0.268956 0 0.0888953 0.242673 0.268956 0 0.0888953 0.242673 0.268956 0 0.0962675 0.241891 0.26682 0 0.109753 0.24016 0.265524 0 0.12927 0.238676 0.26798 0 0.143354 0.239307 0.265959 0 0.158947 0.24162 0.267313 0 0.197969 0.247313 0.267718 0 0.2328 0.252551 0.267874 0 0.253224 0.254266 0.267419 28996.1 0.268902 0.253608 0.266106 30344.3 0.285659 0.253538 0.262192 0 0.305864 0.252302 0.26234 0 0.325234 0.250045 0.266242 0 0.345174 0.248702 0.267994 0 0.358777 0.24818 0.267856 0 0.376549 0.247155 0.264504 0 0.389569 0.247293 0.265471 0 0.409651 0.246903 0.26625 0 0.42853 0.246556 0.26633 0 0.445978 0.246773 0.266472 0 0.460936 0.247716 0.266106 0 0.488223 0.244891 0.266386 0 0.501999 0.248048 0.265633 0 0.520802 0.249978 0.264819 0 0.55774 0.245652 0.26396 0 0.579984 0.247352 0.261235 0 0.664415 0.253196 0.255911 0 0.791545 0.240386 0.259174 0 0.816887 0.241646 0.23339 0 0.838085 0.245639 0.224243 0 0.0881902 0.256307 0.268928 0 0.0881902 0.256307 0.268928 0 0.0881902 0.256307 0.268928 0 0.0948709 0.256618 0.266262 0 0.108334 0.25649 0.264077 0 0.130351 0.257308 0.268701 0 0.14634 0.260003 0.266585 0 0.162166 0.264942 0.266721 0 0.200584 0.269795 0.266146 0 0.233065 0.269279 0.267317 0 0.251556 0.26744 0.267106 30362.2 0.267682 0.265588 0.265866 189129 0.285415 0.265068 0.262374 39436.3 0.305042 0.264546 0.261949 0 0.324091 0.263975 0.266354 0 0.34424 0.262734 0.268684 0 0.358164 0.262174 0.268638 0 0.375672 0.261366 0.265769 0 0.389819 0.261378 0.26464 0 0.409206 0.261466 0.266039 0 0.428326 0.260725 0.266172 0 0.446122 0.260522 0.266442 0 0.461603 0.261156 0.266169 0 0.485919 0.259497 0.266164 0 0.504495 0.261908 0.265725 0 0.519832 0.266226 0.265415 0 0.553894 0.263368 0.264332 0 0.582088 0.263177 0.261766 0 0.664752 0.264265 0.25949 0 0.792185 0.256138 0.258028 0 0.817577 0.257452 0.231973 0 0.83993 0.258614 0.226459 0 0.091533 0.285128 0.267349 0 0.091533 0.285128 0.267349 0 0.091533 0.285128 0.267349 0 0.0974918 0.285775 0.265151 0 0.108682 0.286772 0.262404 0 0.131241 0.286168 0.266788 0 0.14958 0.285682 0.268421 0 0.165702 0.287338 0.268391 0 0.201637 0.289078 0.266696 0 0.228706 0.28759 0.265348 0 0.249199 0.285035 0.266186 0 0.264965 0.283457 0.265582 39518.9 0.285984 0.282936 0.262234 41730 0.305684 0.28387 0.261923 0 0.323409 0.28448 0.265582 0 0.342763 0.28382 0.269176 0 0.357564 0.283125 0.269735 0 0.374965 0.282876 0.267841 0 0.39002 0.282595 0.264888 0 0.408856 0.283331 0.26561 0 0.427746 0.283194 0.265682 0 0.446489 0.283294 0.266183 0 0.463392 0.284372 0.265992 0 0.4832 0.285104 0.265647 0 0.508762 0.285325 0.265778 0 0.521865 0.290027 0.265134 0 0.548317 0.289179 0.26512 0 0.586864 0.285236 0.262254 0 0.666501 0.284773 0.262193 0 0.782907 0.286527 0.250003 0 0.818748 0.284075 0.230077 0 0.843116 0.282292 0.229075 0 0.0936267 0.309876 0.268472 0 0.0936267 0.309876 0.268472 0 0.0936267 0.309876 0.268472 0 0.0996355 0.310306 0.266217 0 0.110518 0.311225 0.26347 0 0.129989 0.311856 0.26496 0 0.148004 0.310782 0.267226 0 0.168269 0.309363 0.271223 0 0.200584 0.309546 0.267737 0 0.227069 0.30941 0.263638 0 0.24629 0.309015 0.26375 0 0.26226 0.307835 0.264203 0 0.287227 0.305666 0.261632 0 0.306166 0.306731 0.261842 0 0.324491 0.307931 0.264996 0 0.342573 0.3092 0.268021 0 0.357129 0.309138 0.269595 0 0.374931 0.309216 0.269125 0 0.390147 0.309198 0.266713 0 0.409771 0.309375 0.264983 0 0.427393 0.309787 0.265309 0 0.446908 0.309161 0.26557 0 0.465001 0.309046 0.265659 0 0.481595 0.309986 0.26497 0 0.51256 0.307394 0.265542 0 0.525939 0.311418 0.26476 0 0.546354 0.312725 0.264793 0 0.589649 0.307495 0.263864 0 0.673794 0.307365 0.261153 0 0.770265 0.317994 0.240095 0 0.809398 0.314917 0.221743 0 0.845011 0.309361 0.227141 0 0.0947905 0.327074 0.269108 0 0.0947905 0.327074 0.269108 0 0.0947905 0.327074 0.269108 0 0.100955 0.327415 0.266914 0 0.11203 0.328265 0.264283 0 0.129904 0.330237 0.265214 0 0.145528 0.328868 0.265155 0 0.166138 0.325915 0.269837 0 0.199978 0.324984 0.268787 0 0.227914 0.326066 0.263814 0 0.245009 0.327229 0.262668 0 0.260681 0.326294 0.262349 0 0.285281 0.324129 0.26071 0 0.307468 0.324567 0.261881 0 0.325489 0.325929 0.2651 0 0.343964 0.327341 0.267608 0 0.357174 0.328279 0.269062 0 0.374947 0.327999 0.26926 0 0.389969 0.327662 0.267709 0 0.409873 0.327039 0.264847 0 0.426871 0.327116 0.265265 0 0.446074 0.32626 0.265024 0 0.464938 0.32576 0.265137 0 0.482501 0.326335 0.264569 0 0.511239 0.324598 0.264965 0 0.529133 0.327699 0.264578 0 0.545184 0.330875 0.264135 0 0.585211 0.326504 0.26462 0 0.67917 0.324281 0.260786 0 0.772498 0.334031 0.243104 0 0.806502 0.33285 0.221099 0 0.845371 0.326953 0.225573 0 0.0969591 0.347267 0.267402 0 0.0969591 0.347267 0.267402 0 0.0969591 0.347267 0.267402 0 0.102679 0.347973 0.267049 0 0.113294 0.348053 0.264446 0 0.12875 0.347831 0.265364 0 0.143505 0.34685 0.264303 0 0.163068 0.344983 0.267523 0 0.200592 0.343097 0.270318 0 0.228932 0.344917 0.264535 0 0.246261 0.346017 0.263085 0 0.259838 0.346874 0.26132 0 0.282588 0.346538 0.259302 0 0.309146 0.344844 0.261864 0 0.326444 0.34584 0.265073 0 0.345097 0.346172 0.266899 0 0.357807 0.346676 0.268511 0 0.374602 0.346943 0.268344 0 0.389507 0.346749 0.267534 0 0.409206 0.346199 0.26594 0 0.427047 0.345765 0.264534 0 0.444957 0.345622 0.265163 0 0.464743 0.344878 0.264597 0 0.483658 0.345182 0.264241 0 0.5087 0.345001 0.264447 0 0.532418 0.345924 0.26468 0 0.544669 0.350194 0.263659 0 0.580092 0.347386 0.264467 0 0.685868 0.345398 0.260444 0 0.77583 0.347971 0.249287 0 0.809692 0.346491 0.227245 0 0.845659 0.346016 0.223908 0 0.0976821 0.361478 0.265373 0 0.0976821 0.361478 0.265373 0 0.0976821 0.361478 0.265373 0 0.102452 0.361842 0.265699 0 0.113252 0.361796 0.26423 0 0.128784 0.361436 0.265575 0 0.142107 0.360849 0.26422 0 0.161314 0.359772 0.266472 0 0.200631 0.357593 0.271137 0 0.230552 0.358906 0.266035 0 0.247627 0.361293 0.263523 0 0.26004 0.362395 0.261494 0 0.281027 0.362704 0.257824 0 0.308953 0.359987 0.260784 0 0.326794 0.359904 0.264938 0 0.345287 0.360151 0.266513 0 0.358402 0.360384 0.267956 0 0.374728 0.360717 0.268249 0 0.389352 0.360985 0.266997 0 0.408611 0.360908 0.266773 0 0.427283 0.360116 0.264191 0 0.44432 0.360446 0.265543 0 0.464405 0.359698 0.264923 0 0.484461 0.359472 0.264056 0 0.506788 0.360277 0.26407 0 0.534893 0.359884 0.264684 0 0.547412 0.364416 0.263689 0 0.576246 0.364111 0.264096 0 0.689855 0.359533 0.260129 0 0.772817 0.361063 0.248573 0 0.8108 0.357107 0.229789 0 0.841668 0.362949 0.219944 0 0.0980433 0.376556 0.26332 0 0.0980433 0.376556 0.26332 0 0.0980433 0.376556 0.26332 0 0.102749 0.376849 0.263613 0 0.112879 0.377023 0.263946 0 0.128648 0.376721 0.265614 0 0.141339 0.377097 0.264328 0 0.160602 0.376394 0.266397 0 0.200075 0.374827 0.270359 0 0.232635 0.374351 0.267619 0 0.249392 0.376408 0.264521 0 0.26089 0.37811 0.261713 0 0.281241 0.378207 0.257467 0 0.307135 0.376375 0.259412 0 0.326625 0.375306 0.264383 0 0.345264 0.375363 0.266487 0 0.358921 0.375352 0.267567 0 0.375096 0.375955 0.268194 0 0.389959 0.376232 0.267136 0 0.4087 0.376809 0.266527 0 0.426445 0.376655 0.264769 0 0.444569 0.376513 0.265214 0 0.463873 0.376449 0.265307 0 0.484605 0.37631 0.26413 0 0.505935 0.377593 0.263743 0 0.537676 0.375659 0.264732 0 0.550424 0.380033 0.263756 0 0.575111 0.381799 0.263776 0 0.693068 0.37353 0.26037 0 0.764456 0.380743 0.242491 0 0.802351 0.377355 0.223557 0 0.841218 0.378458 0.221555 0 0.0987747 0.38839 0.261058 0 0.0987747 0.38839 0.261058 0 0.0987747 0.38839 0.261058 0 0.102959 0.388918 0.261936 0 0.11238 0.389604 0.263219 0 0.129096 0.390191 0.265707 0 0.141787 0.390436 0.264341 0 0.159989 0.389656 0.266299 0 0.20006 0.388533 0.269596 0 0.234156 0.386532 0.268668 0 0.250944 0.388201 0.265717 0 0.262044 0.389797 0.262619 0 0.281286 0.390427 0.257321 0 0.305367 0.389918 0.258592 0 0.326568 0.388485 0.263576 0 0.345507 0.388037 0.266751 0 0.358941 0.388223 0.267694 0 0.375736 0.388623 0.267775 0 0.390277 0.389114 0.26716 0 0.40904 0.390074 0.266389 0 0.426264 0.390746 0.265406 0 0.444912 0.390455 0.264816 0 0.463565 0.390612 0.265709 0 0.484657 0.390167 0.264608 0 0.506668 0.390538 0.263637 0 0.539153 0.388254 0.264805 0 0.552816 0.392111 0.263797 0 0.574174 0.394206 0.263312 0 0.695626 0.38499 0.260826 0 0.758453 0.396572 0.238123 0 0.795814 0.393667 0.218589 0 0.842819 0.388157 0.225021 0 0.100018 0.402895 0.258308 0 0.100018 0.402895 0.258308 0 0.100018 0.402895 0.258308 0 0.104133 0.403666 0.259466 0 0.113013 0.404715 0.261784 0 0.129444 0.405143 0.26571 0 0.142065 0.405306 0.264216 0 0.15876 0.405014 0.265815 0 0.200215 0.40386 0.26926 0 0.232637 0.402489 0.267697 0 0.252456 0.402391 0.267249 0 0.263736 0.404092 0.26414 0 0.281288 0.40592 0.257782 0 0.304774 0.40601 0.258397 0 0.326555 0.405187 0.262581 0 0.34527 0.404652 0.265874 0 0.359061 0.404507 0.26787 0 0.376475 0.404985 0.267335 0 0.390882 0.405664 0.267224 0 0.409875 0.406459 0.266726 0 0.426435 0.407383 0.265594 0 0.445038 0.407135 0.264547 0 0.463014 0.407283 0.26616 0 0.484368 0.406458 0.265227 0 0.507294 0.405935 0.26382 0 0.536667 0.403906 0.264255 0 0.555669 0.406174 0.263667 0 0.572962 0.40984 0.262562 0 0.699091 0.40176 0.261509 0 0.761047 0.412885 0.239571 0 0.786864 0.414195 0.212004 0 0.845086 0.402621 0.229234 0 0.101056 0.417046 0.256175 0 0.101056 0.417046 0.256175 0 0.101056 0.417046 0.256175 0 0.10529 0.417618 0.257355 0 0.113507 0.418896 0.260382 0 0.129791 0.419596 0.26584 0 0.142508 0.420163 0.264307 0 0.157984 0.420763 0.265096 0 0.200913 0.41968 0.269491 0 0.230749 0.419767 0.266594 0 0.252743 0.418982 0.26677 0 0.265665 0.419495 0.26557 0 0.282039 0.421883 0.258976 0 0.304549 0.423034 0.258073 0 0.326853 0.422664 0.262379 0 0.34488 0.423015 0.264811 0 0.358696 0.422495 0.267445 0 0.37688 0.422012 0.267572 0 0.391584 0.42242 0.267045 0 0.410739 0.423099 0.267076 0 0.427379 0.423788 0.266007 0 0.443926 0.424132 0.264719 0 0.462657 0.42344 0.265326 0 0.483458 0.422377 0.265348 0 0.507726 0.421533 0.264058 0 0.534378 0.421293 0.263411 0 0.558474 0.421587 0.263385 0 0.572408 0.427871 0.261818 0 0.699205 0.420494 0.261728 0 0.764167 0.431543 0.241008 0 0.789055 0.439104 0.211092 0 0.841398 0.438491 0.223147 0 0.0992291 0.435279 0.257248 0 0.0992291 0.435279 0.257248 0 0.0992291 0.435279 0.257248 0 0.105976 0.434743 0.255591 0 0.11473 0.43625 0.258318 0 0.131085 0.438207 0.264511 0 0.143653 0.439192 0.264516 0 0.158781 0.440197 0.265048 0 0.201197 0.438919 0.269594 0 0.228944 0.440105 0.266172 0 0.253163 0.439112 0.265712 0 0.266535 0.439658 0.265061 0 0.283921 0.440612 0.261044 0 0.305585 0.441939 0.25873 0 0.326222 0.442331 0.262692 0 0.345247 0.443112 0.264148 0 0.358033 0.442814 0.266248 0 0.37598 0.441532 0.267033 0 0.392065 0.44066 0.26662 0 0.411007 0.440773 0.266912 0 0.42776 0.440884 0.265808 0 0.444069 0.441296 0.264831 0 0.462528 0.441084 0.263721 0 0.482031 0.440822 0.265037 0 0.507937 0.440837 0.264367 0 0.531911 0.44275 0.263307 0 0.562379 0.441862 0.263139 0 0.576368 0.447313 0.261546 0 0.691065 0.443992 0.259715 0 0.770974 0.459416 0.241884 0 0.797004 0.469533 0.212471 0 0.836053 0.462443 0.21934 0 0.0980954 0.454141 0.258537 0 0.0980954 0.454141 0.258537 0 0.0980954 0.454141 0.258537 0 0.105215 0.453753 0.256351 0 0.116757 0.453794 0.256085 0 0.132872 0.455889 0.262222 0 0.144684 0.457144 0.26486 0 0.159715 0.458234 0.265359 0 0.200331 0.458185 0.269647 0 0.229769 0.458763 0.266998 0 0.252468 0.45852 0.26537 0 0.267395 0.459002 0.264631 0 0.285031 0.45963 0.260879 0 0.306475 0.4596 0.260134 0 0.325987 0.459946 0.262412 0 0.346045 0.459806 0.264361 0 0.357332 0.460448 0.265014 0 0.374421 0.459925 0.265335 0 0.390828 0.458577 0.265248 0 0.410932 0.457734 0.266369 0 0.428051 0.458115 0.265355 0 0.444752 0.459063 0.264689 0 0.462921 0.460284 0.263472 0 0.482342 0.461811 0.264159 0 0.508289 0.462051 0.264574 0 0.53309 0.463477 0.263716 0 0.565259 0.461767 0.26282 0 0.580614 0.467409 0.261109 0 0.683283 0.465156 0.25774 0 0.77681 0.482689 0.243542 0 0.796429 0.475801 0.216056 0 0.826956 0.466999 0.217854 0 0.0961683 0.475233 0.261153 0 0.0961683 0.475233 0.261153 0 0.0961683 0.475233 0.261153 0 0.104504 0.474524 0.257435 0 0.117875 0.473931 0.254963 0 0.135402 0.47609 0.259467 0 0.147181 0.477713 0.262933 0 0.161016 0.479492 0.265814 0 0.199364 0.480552 0.269409 0 0.230584 0.479316 0.267188 0 0.251822 0.4787 0.265641 0 0.268536 0.478279 0.264235 0 0.285388 0.479358 0.259287 0 0.305932 0.478952 0.26022 0 0.32676 0.478815 0.262814 0 0.346894 0.479754 0.264239 0 0.358472 0.480768 0.265327 0 0.374095 0.481659 0.263812 0 0.389172 0.481422 0.263402 0 0.410767 0.48013 0.264839 0 0.428986 0.480539 0.265425 0 0.446564 0.482096 0.264451 0 0.463894 0.483851 0.263639 0 0.484207 0.485338 0.262576 0 0.508364 0.486796 0.264163 0 0.534961 0.487237 0.264069 0 0.562248 0.485586 0.262928 0 0.584261 0.48645 0.260973 0 0.681437 0.490972 0.258474 0 0.775189 0.485812 0.247176 0 0.795675 0.484301 0.218215 0 0.811486 0.477447 0.210458 0 0.0940863 0.502247 0.264798 0 0.0940863 0.502247 0.264798 0 0.0940863 0.502247 0.264798 0 0.102679 0.501551 0.260589 0 0.117049 0.500471 0.256841 0 0.139172 0.500474 0.255141 0 0.149514 0.50184 0.260045 0 0.16302 0.50277 0.264832 0 0.198367 0.50337 0.268247 0 0.230373 0.502096 0.265855 0 0.250248 0.502304 0.265124 0 0.26932 0.501934 0.263894 0 0.287315 0.504214 0.258687 0 0.305604 0.506149 0.258054 0 0.327078 0.504876 0.263119 0 0.348391 0.505383 0.264798 0 0.360645 0.506887 0.265898 0 0.37544 0.508534 0.263571 0 0.389633 0.509618 0.262191 0 0.410118 0.51014 0.262304 0 0.429428 0.509436 0.26378 0 0.448059 0.509235 0.264561 0 0.465594 0.510104 0.263707 0 0.485345 0.510012 0.262282 0 0.507822 0.510363 0.263558 0 0.534895 0.50941 0.264834 0 0.557643 0.505922 0.264246 0 0.585651 0.500853 0.26307 0 0.681341 0.504829 0.263114 0 0.775501 0.492811 0.248249 0 0.793232 0.489435 0.219789 0 0.805856 0.484129 0.208796 0 0.0958335 0.526936 0.262171 0 0.0958335 0.526936 0.262171 0 0.0958335 0.526936 0.262171 0 0.100958 0.527369 0.261924 0 0.115193 0.526292 0.257856 0 0.139174 0.524697 0.253453 0 0.152204 0.525215 0.255216 0 0.165457 0.526738 0.261524 0 0.198472 0.53139 0.266604 0 0.229482 0.531995 0.264451 0 0.251843 0.532364 0.26388 0 0.269445 0.532764 0.263512 0 0.290373 0.532929 0.258736 0 0.307296 0.534808 0.257227 0 0.324904 0.534994 0.260872 0 0.348638 0.532579 0.265146 0 0.363571 0.532654 0.267155 0 0.377651 0.534813 0.265542 0 0.391124 0.536081 0.262748 0 0.409681 0.535993 0.262436 0 0.427556 0.532715 0.262419 0 0.446081 0.529771 0.264839 0 0.464709 0.52671 0.266057 0 0.482842 0.523522 0.265242 0 0.506531 0.519201 0.2658 0 0.531403 0.515216 0.268318 0 0.553687 0.516938 0.268184 0 0.588803 0.520264 0.266541 0 0.680358 0.523038 0.260735 0 0.762139 0.49812 0.248703 0 0.790259 0.490473 0.221095 0 0.802678 0.487101 0.208394 0 0.096764 0.554554 0.260484 0 0.096764 0.554554 0.260484 0 0.096764 0.554554 0.260484 0 0.103228 0.554939 0.258837 0 0.113684 0.556579 0.259039 0 0.138666 0.55564 0.254259 0 0.154574 0.555081 0.252209 0 0.169232 0.556242 0.257103 0 0.20041 0.560526 0.266293 0 0.228085 0.561274 0.263756 0 0.252823 0.559765 0.26333 0 0.268637 0.560181 0.263405 0 0.290627 0.557773 0.259122 0 0.308291 0.555763 0.258907 0 0.323512 0.554611 0.261726 0 0.344196 0.551822 0.265882 0 0.361442 0.549136 0.269564 0 0.377881 0.546591 0.271292 0 0.389372 0.544885 0.269638 0 0.406844 0.542459 0.267371 0 0.424555 0.542376 0.266124 0 0.442367 0.542386 0.265613 0 0.461119 0.541296 0.267096 0 0.481476 0.541521 0.267393 0 0.508071 0.545723 0.265509 0 0.535167 0.548805 0.267161 0 0.558614 0.552668 0.264741 0 0.587869 0.548606 0.262858 0 0.679647 0.537919 0.257734 0 0.748899 0.51798 0.237369 0 0.798783 0.521924 0.221665 0 0.812543 0.526775 0.208839 0 0.0944443 0.585059 0.264334 0 0.0944443 0.585059 0.264334 0 0.0944443 0.585059 0.264334 0 0.102919 0.584283 0.25985 0 0.115307 0.584292 0.257944 0 0.136078 0.584426 0.25838 0 0.152914 0.581313 0.25471 0 0.171442 0.578317 0.25473 0 0.200745 0.578145 0.268008 0 0.225253 0.574716 0.266609 0 0.248642 0.570449 0.267392 0 0.265567 0.568025 0.267529 0 0.286082 0.566151 0.264435 0 0.306879 0.56728 0.262784 0 0.323536 0.568541 0.264555 0 0.34123 0.568882 0.267458 0 0.356241 0.56789 0.269621 0 0.377237 0.565359 0.271629 0 0.390075 0.565214 0.27237 0 0.408772 0.567791 0.268849 0 0.42708 0.576362 0.265235 0 0.44628 0.580327 0.261913 0 0.464504 0.582841 0.260646 0 0.483274 0.579962 0.260089 0 0.50707 0.577311 0.259841 0 0.533042 0.575479 0.259609 0 0.554011 0.567265 0.260039 0 0.576078 0.558529 0.260586 0 0.680118 0.547482 0.260149 0 0.739692 0.523711 0.232192 0 0.794719 0.537722 0.225147 0 0.820064 0.562026 0.217775 0 0.0911694 0.667181 0.268184 0 0.0911694 0.667181 0.268184 0 0.0911694 0.667181 0.268184 0 0.100437 0.666996 0.260583 0 0.113084 0.669851 0.256612 0 0.134001 0.669216 0.256233 0 0.150011 0.667087 0.254103 0 0.164222 0.666123 0.257629 0 0.213801 0.666873 0.255138 0 0.233509 0.670841 0.260929 0 0.24769 0.669083 0.261661 0 0.266245 0.665284 0.263228 0 0.289695 0.659861 0.262213 0 0.307018 0.656799 0.26159 0 0.328391 0.652154 0.263921 0 0.342827 0.650356 0.266545 0 0.353018 0.649321 0.268972 0 0.367694 0.643899 0.270113 0 0.382064 0.638138 0.270364 0 0.402491 0.630192 0.268535 0 0.414764 0.62523 0.267263 0 0.437493 0.638614 0.267234 0 0.463083 0.653575 0.268367 0 0.487769 0.666041 0.26513 0 0.507273 0.663291 0.260147 0 0.527324 0.658101 0.258554 0 0.552193 0.651451 0.25782 0 0.577342 0.644109 0.261104 0 0.662389 0.626027 0.253127 0 0.76971 0.602001 0.247033 0 0.794714 0.598165 0.227856 0 0.823486 0.593901 0.220377 0 0.0947508 0.74888 0.257827 0 0.0947508 0.74888 0.257827 0 0.0947508 0.74888 0.257827 0 0.0982565 0.747726 0.258386 0 0.10476 0.747493 0.261141 0 0.120839 0.751247 0.2674 0 0.138272 0.75116 0.266107 0 0.156866 0.752256 0.264885 0 0.197844 0.745408 0.263604 0 0.227698 0.738402 0.258624 0 0.249213 0.733518 0.253155 0 0.260254 0.730307 0.255789 0 0.27606 0.726187 0.259183 0 0.298719 0.721619 0.25982 0 0.319652 0.718894 0.260777 0 0.338664 0.717313 0.26217 0 0.350431 0.713603 0.263293 0 0.361348 0.710195 0.263219 0 0.370956 0.707255 0.262332 0 0.384978 0.703093 0.260909 0 0.401389 0.69902 0.258936 0 0.419411 0.694146 0.2572 0 0.434666 0.690074 0.256022 0 0.449381 0.686256 0.25417 0 0.472548 0.680579 0.254683 0 0.5018 0.677024 0.254762 0 0.538886 0.707122 0.262353 0 0.587187 0.774934 0.265781 0 0.685467 0.764131 0.266975 0 0.727671 0.75243 0.238353 0 0.795918 0.738752 0.223117 0 0.828636 0.743199 0.223586 0 0.0952539 0.787712 0.243602 0 0.0952539 0.787712 0.243602 0 0.0952539 0.787712 0.243602 0 0.102735 0.791943 0.242405 0 0.112329 0.808643 0.247778 0 0.130489 0.817744 0.252795 0 0.142995 0.826146 0.259164 0 0.158318 0.836009 0.266945 0 0.199759 0.833546 0.271725 0 0.228537 0.826098 0.267613 0 0.240833 0.821542 0.264996 0 0.257222 0.812574 0.257892 0 0.279924 0.802603 0.249973 0 0.291755 0.804129 0.254146 0 0.303623 0.803132 0.25591 0 0.31951 0.798674 0.257288 0 0.3306 0.791991 0.259756 0 0.347561 0.795754 0.26317 0 0.36541 0.795273 0.265988 0 0.38741 0.796256 0.269749 0 0.416501 0.835113 0.266004 0 0.436139 0.839702 0.261926 0 0.456529 0.836911 0.260959 0 0.478874 0.833016 0.260745 0 0.501932 0.837131 0.26019 0 0.528713 0.839299 0.260173 0 0.55605 0.839779 0.261171 0 0.581654 0.841493 0.260764 0 0.675898 0.833813 0.256376 0 0.723732 0.851392 0.236137 0 0.797107 0.848754 0.219186 0 0.853885 0.840019 0.224066 0 0.092862 0.912276 0.27617 0 0.092862 0.912276 0.27617 0 0.092862 0.912276 0.27617 0 0.103906 0.910478 0.267406 0 0.126678 0.90866 0.250586 0 0.147719 0.908736 0.248461 0 0.155356 0.906286 0.253215 0 0.166387 0.902759 0.256754 0 0.186216 0.894149 0.270267 0 0.213695 0.882024 0.266447 0 0.229803 0.875335 0.262562 0 0.242594 0.869581 0.258382 0 0.26444 0.873398 0.252019 0 0.302322 0.878751 0.246099 0 0.317409 0.878119 0.250733 0 0.336056 0.887123 0.257879 0 0.352108 0.892361 0.262033 0 0.371622 0.896184 0.265381 0 0.386088 0.900695 0.265731 0 0.410105 0.904505 0.264417 0 0.427158 0.906683 0.263699 0 0.44172 0.906826 0.261401 0 0.457894 0.906512 0.261477 0 0.479833 0.904615 0.261158 0 0.503726 0.900943 0.260473 0 0.523312 0.895125 0.259171 0 0.545664 0.888489 0.25773 0 0.576048 0.888493 0.25778 0 0.683585 0.895729 0.259989 0 0.736153 0.905314 0.23493 0 0.80832 0.896344 0.222596 0 0.853187 0.881552 0.222582 0 0.0904212 0.0968602 0.289271 0 0.0904212 0.0968602 0.289271 0 0.0904212 0.0968602 0.289271 0 0.0941813 0.0969086 0.28972 0 0.10982 0.0974004 0.287988 0 0.134562 0.0991661 0.286875 0 0.14789 0.100642 0.289267 0 0.16092 0.102787 0.29198 0 0.203682 0.100996 0.295685 0 0.227275 0.100199 0.294715 0 0.242975 0.0991209 0.291444 0 0.259427 0.09848 0.287211 0 0.284262 0.0987775 0.286338 0 0.308431 0.0975712 0.285177 0 0.328446 0.0966735 0.283518 0 0.347144 0.0956545 0.285562 0 0.360697 0.0948114 0.28796 0 0.376592 0.0940096 0.289455 0 0.389043 0.0941909 0.291154 0 0.406909 0.0961136 0.291133 0 0.433092 0.0945487 0.291264 0 0.445549 0.0982611 0.291201 0 0.456111 0.102939 0.290727 0 0.482459 0.100562 0.292025 0 0.513676 0.0948574 0.29176 0 0.524126 0.101066 0.283371 0 0.550976 0.0992755 0.283372 0 0.590998 0.0925227 0.290792 0 0.635408 0.110915 0.260227 0 0.767233 0.100908 0.266993 0 0.793686 0.104213 0.241879 0 0.839404 0.106144 0.242913 0 0.0904212 0.0968602 0.289271 0 0.0904212 0.0968602 0.289271 0 0.0904212 0.0968602 0.289271 0 0.0941813 0.0969086 0.28972 0 0.10982 0.0974004 0.287988 0 0.134562 0.0991661 0.286875 0 0.14789 0.100642 0.289267 0 0.16092 0.102787 0.29198 0 0.203682 0.100996 0.295685 0 0.227275 0.100199 0.294715 0 0.242975 0.0991209 0.291444 0 0.259427 0.09848 0.287211 0 0.284262 0.0987775 0.286338 0 0.308431 0.0975712 0.285177 0 0.328446 0.0966735 0.283518 0 0.347144 0.0956545 0.285562 0 0.360697 0.0948114 0.28796 0 0.376592 0.0940096 0.289455 0 0.389043 0.0941909 0.291154 0 0.406909 0.0961136 0.291133 0 0.433092 0.0945487 0.291264 0 0.445549 0.0982611 0.291201 0 0.456111 0.102939 0.290727 0 0.482459 0.100562 0.292025 0 0.513676 0.0948574 0.29176 0 0.524126 0.101066 0.283371 0 0.550976 0.0992755 0.283372 0 0.590998 0.0925227 0.290792 0 0.635408 0.110915 0.260227 0 0.767233 0.100908 0.266993 0 0.793686 0.104213 0.241879 0 0.839404 0.106144 0.242913 0 0.0904212 0.0968602 0.289271 0 0.0904212 0.0968602 0.289271 0 0.0904212 0.0968602 0.289271 0 0.0941813 0.0969086 0.28972 0 0.10982 0.0974004 0.287988 0 0.134562 0.0991661 0.286875 0 0.14789 0.100642 0.289267 0 0.16092 0.102787 0.29198 0 0.203682 0.100996 0.295685 0 0.227275 0.100199 0.294715 0 0.242975 0.0991209 0.291444 0 0.259427 0.09848 0.287211 0 0.284262 0.0987775 0.286338 0 0.308431 0.0975713 0.285177 0 0.328446 0.0966735 0.283518 0 0.347144 0.0956545 0.285562 0 0.360697 0.0948114 0.28796 0 0.376592 0.0940096 0.289455 0 0.389043 0.0941909 0.291154 0 0.406909 0.0961136 0.291133 0 0.433092 0.0945487 0.291264 0 0.445549 0.0982611 0.291201 0 0.456111 0.102939 0.290727 0 0.482459 0.100562 0.292025 0 0.513676 0.0948574 0.29176 0 0.524126 0.101066 0.283371 0 0.550976 0.0992755 0.283372 0 0.590998 0.0925227 0.290792 0 0.635408 0.110915 0.260227 0 0.767233 0.100908 0.266993 0 0.793686 0.104213 0.241879 0 0.839403 0.106144 0.242912 0 0.0904857 0.104649 0.289288 0 0.0904857 0.104649 0.289288 0 0.0904857 0.104649 0.289288 0 0.0945244 0.105231 0.289921 0 0.110356 0.107018 0.28864 0 0.135593 0.108501 0.287475 0 0.148778 0.110323 0.289496 0 0.162162 0.113526 0.292202 0 0.202772 0.109398 0.295124 0 0.22696 0.107414 0.294268 0 0.242611 0.107063 0.291474 0 0.25962 0.106933 0.287168 0 0.28366 0.106007 0.286702 0 0.307813 0.104511 0.285683 0 0.327912 0.103425 0.283679 0 0.346922 0.102261 0.285015 0 0.360111 0.101741 0.287731 0 0.376931 0.102513 0.289466 0 0.389834 0.103699 0.291318 0 0.407411 0.106709 0.290872 0 0.432143 0.10576 0.290761 0 0.447396 0.108561 0.290886 0 0.457914 0.112371 0.290552 0 0.480002 0.109497 0.291405 0 0.515015 0.102063 0.291561 0 0.525322 0.106089 0.284747 0 0.545369 0.109278 0.280407 0 0.592225 0.100881 0.289399 0 0.637477 0.118898 0.262014 0 0.768544 0.109892 0.267474 0 0.794109 0.110165 0.242604 0 0.838824 0.111757 0.243496 0 0.0917863 0.122629 0.289904 0 0.0917863 0.122629 0.289904 0 0.0917863 0.122629 0.289904 0 0.0963539 0.123075 0.290867 0 0.111879 0.125605 0.289817 0 0.138801 0.128992 0.288546 0 0.150517 0.129201 0.290014 0 0.161976 0.128453 0.291625 0 0.199752 0.12355 0.293313 0 0.227259 0.12244 0.293771 0 0.242601 0.122309 0.290549 0 0.258269 0.121567 0.287826 0 0.282454 0.120194 0.287205 0 0.306596 0.119122 0.286751 0 0.327579 0.119709 0.284332 0 0.347768 0.120311 0.28421 0 0.361029 0.121434 0.287085 0 0.37868 0.123008 0.289657 0 0.391963 0.124779 0.291636 0 0.409812 0.127433 0.290731 0 0.430109 0.126717 0.28997 0 0.449672 0.125165 0.290098 0 0.459428 0.12596 0.289232 0 0.476115 0.124628 0.290175 0 0.512681 0.116795 0.291143 0 0.528073 0.118648 0.288901 0 0.546767 0.124758 0.281087 0 0.595669 0.119019 0.28725 0 0.64166 0.13532 0.265674 0 0.769474 0.122816 0.26893 0 0.795194 0.123259 0.243855 0 0.840035 0.130616 0.243404 0 0.0922227 0.147002 0.289343 0 0.0922227 0.147002 0.289343 0 0.0922227 0.147002 0.289343 0 0.0974589 0.147275 0.290712 0 0.114662 0.147813 0.290633 0 0.137048 0.145691 0.288167 0 0.1496 0.144633 0.28953 0 0.161587 0.143492 0.291198 0 0.196773 0.140374 0.292192 0 0.227566 0.1388 0.293624 0 0.24253 0.139748 0.289842 0 0.257675 0.14047 0.287786 0 0.282806 0.141419 0.28741 0 0.307335 0.14234 0.28806 0 0.32859 0.143132 0.285688 0 0.348741 0.144472 0.284526 0 0.363163 0.144606 0.286103 0 0.37953 0.144924 0.289507 0 0.393093 0.145024 0.291677 0 0.411287 0.145501 0.290765 0 0.425693 0.144872 0.288851 0 0.450423 0.14081 0.288653 0 0.461307 0.142016 0.287741 0 0.471529 0.144003 0.287824 0 0.505908 0.140222 0.290044 0 0.531834 0.139441 0.289035 0 0.552616 0.142577 0.285633 0 0.592145 0.143818 0.284667 0 0.644963 0.150256 0.269921 0 0.771744 0.141676 0.269439 0 0.798721 0.146406 0.243608 0 0.847685 0.148269 0.247955 0 0.0921172 0.160681 0.288847 0 0.0921172 0.160681 0.288847 0 0.0921172 0.160681 0.288847 0 0.0969969 0.160055 0.28995 0 0.113648 0.157342 0.290151 0 0.135309 0.154283 0.287901 0 0.14866 0.152207 0.289116 0 0.160877 0.150751 0.291074 0 0.195794 0.151083 0.291891 0 0.228413 0.149859 0.293557 0 0.24348 0.151799 0.28979 0 0.258254 0.15309 0.287501 0 0.283299 0.154019 0.287484 0 0.307589 0.154852 0.288807 0 0.3291 0.154926 0.286469 0 0.348398 0.154872 0.285023 0 0.363645 0.154341 0.285441 0 0.379816 0.154657 0.288921 0 0.393335 0.154709 0.29155 0 0.411147 0.153434 0.290601 0 0.424851 0.15384 0.288563 0 0.44769 0.151227 0.287584 0 0.462368 0.151407 0.287003 0 0.473415 0.154921 0.287212 0 0.502698 0.153283 0.2895 0 0.534261 0.150145 0.288956 0 0.555048 0.150671 0.288453 0 0.59251 0.150329 0.285992 0 0.646079 0.155916 0.271431 0 0.77323 0.15142 0.269245 0 0.799664 0.154183 0.243795 0 0.850297 0.153795 0.250034 0 0.0903764 0.168823 0.287769 0 0.0903764 0.168823 0.287769 0 0.0903764 0.168823 0.287769 0 0.0951356 0.16762 0.288782 0 0.11213 0.164134 0.289257 0 0.133494 0.160657 0.287813 0 0.147636 0.158365 0.28881 0 0.161246 0.15908 0.29138 0 0.195145 0.160851 0.291781 0 0.229556 0.160581 0.293469 0 0.244433 0.162376 0.289904 0 0.258808 0.163721 0.287336 0 0.283588 0.164448 0.28731 0 0.307172 0.164112 0.289404 0 0.32896 0.163929 0.287129 0 0.348271 0.163957 0.285702 0 0.363446 0.163374 0.285565 0 0.380078 0.163468 0.288293 0 0.392746 0.16278 0.291161 0 0.411159 0.162018 0.290347 0 0.425273 0.162873 0.288459 0 0.446177 0.161547 0.287369 0 0.46392 0.16188 0.286552 0 0.4754 0.165499 0.286828 0 0.500564 0.164721 0.289017 0 0.536244 0.159524 0.288967 0 0.553779 0.160123 0.288433 0 0.595226 0.155362 0.28864 0 0.647733 0.163343 0.272845 0 0.774653 0.16077 0.270307 0 0.800644 0.162996 0.244185 0 0.853406 0.160953 0.252538 0 0.0860194 0.19395 0.285593 0 0.0860194 0.19395 0.285593 0 0.0860194 0.19395 0.285593 0 0.0905542 0.193214 0.286518 0 0.106982 0.192171 0.286838 0 0.131647 0.192575 0.287431 0 0.14784 0.192454 0.28942 0 0.16434 0.193823 0.292504 0 0.195623 0.196852 0.291786 0 0.228836 0.194862 0.292414 0 0.246229 0.194349 0.289497 0 0.259742 0.195058 0.28628 0 0.283496 0.195866 0.286161 0 0.308692 0.197885 0.28814 0 0.330042 0.198875 0.289191 0 0.348785 0.197519 0.287698 0 0.360846 0.196794 0.288527 0 0.37849 0.194966 0.287868 0 0.391674 0.194157 0.290197 0 0.410356 0.19348 0.290826 0 0.426611 0.192864 0.2895 0 0.441812 0.192752 0.288558 0 0.466423 0.189378 0.287557 0 0.479203 0.192816 0.286544 0 0.495665 0.196071 0.287538 0 0.533153 0.192457 0.289818 0 0.552477 0.19443 0.287453 0 0.596866 0.188375 0.293138 0 0.649807 0.200595 0.27803 0 0.778983 0.192227 0.277289 0 0.805386 0.196687 0.247732 0 0.838927 0.202777 0.244112 0 0.0876426 0.229744 0.286269 0 0.0876426 0.229744 0.286269 0 0.0876426 0.229744 0.286269 0 0.0922547 0.230182 0.287152 0 0.107639 0.23092 0.287785 0 0.131957 0.229675 0.285679 0 0.145333 0.229055 0.287503 0 0.163646 0.226898 0.291929 0 0.197276 0.226508 0.293575 0 0.227695 0.227783 0.29435 0 0.247662 0.227838 0.29085 0 0.262643 0.231709 0.287994 0 0.285763 0.23413 0.286251 0 0.308585 0.233268 0.287796 0 0.328836 0.232334 0.287505 0 0.347261 0.23173 0.287797 0 0.35993 0.231856 0.289462 0 0.375222 0.231921 0.289875 0 0.389757 0.231198 0.290246 0 0.410267 0.230975 0.289614 0 0.427405 0.230764 0.288242 0 0.444047 0.231192 0.286777 0 0.462702 0.231156 0.285284 0 0.486024 0.230266 0.2854 0 0.499153 0.234127 0.285034 0 0.523761 0.233345 0.286613 0 0.559963 0.227935 0.2869 0 0.578486 0.229849 0.285338 0 0.655307 0.236379 0.278517 0 0.782401 0.223088 0.282141 0 0.810179 0.226609 0.251963 0 0.839764 0.23622 0.243986 0 0.0889102 0.243321 0.287279 0 0.0889102 0.243321 0.287279 0 0.0889102 0.243321 0.287279 0 0.0933294 0.242981 0.288248 0 0.106836 0.24228 0.290876 0 0.131023 0.241187 0.287136 0 0.144841 0.240984 0.288527 0 0.161513 0.240392 0.29218 0 0.199816 0.24526 0.294952 0 0.229953 0.251289 0.29466 0 0.249705 0.253167 0.290314 0 0.264917 0.252762 0.286878 0 0.285232 0.252612 0.284469 0 0.307691 0.250997 0.286096 0 0.328537 0.249486 0.285643 0 0.347165 0.249112 0.286846 0 0.359861 0.248855 0.28888 0 0.374885 0.248672 0.29043 0 0.388369 0.248064 0.291305 0 0.410143 0.246757 0.289369 0 0.42722 0.246922 0.289187 0 0.445039 0.246842 0.28709 0 0.460532 0.247608 0.285189 0 0.488229 0.244698 0.285549 0 0.501797 0.248219 0.285305 0 0.521851 0.24991 0.28577 0 0.558484 0.244964 0.287026 0 0.577385 0.247732 0.285244 0 0.657425 0.254956 0.277259 0 0.783421 0.23891 0.282498 0 0.81254 0.24152 0.253819 0 0.840473 0.252913 0.244317 0 0.0880676 0.2544 0.287088 0 0.0880676 0.2544 0.287088 0 0.0880677 0.2544 0.287088 0 0.0933959 0.253728 0.288834 0 0.107158 0.255052 0.293258 0 0.131524 0.258824 0.287845 0 0.147077 0.260837 0.288353 0 0.162857 0.265665 0.291541 0 0.203288 0.26805 0.294206 0 0.230312 0.269537 0.294174 0 0.248016 0.267732 0.29009 0 0.264312 0.265984 0.28673 39602.8 0.284018 0.265322 0.284338 41806.5 0.306497 0.263769 0.285542 0 0.327962 0.262952 0.285398 0 0.347126 0.262695 0.28641 0 0.35956 0.262644 0.288553 0 0.374834 0.262627 0.290439 0 0.387593 0.262814 0.292264 0 0.409271 0.261518 0.290366 0 0.427394 0.261026 0.289401 0 0.445079 0.260781 0.287987 0 0.460847 0.261146 0.285275 0 0.486635 0.259127 0.285406 0 0.504426 0.261739 0.285599 0 0.520629 0.265842 0.285235 0 0.554757 0.2624 0.286535 0 0.578167 0.263918 0.285205 0 0.659094 0.269521 0.275972 0 0.784064 0.254548 0.281075 0 0.814264 0.254824 0.255258 0 0.843363 0.265513 0.246411 0 0.0889665 0.282638 0.285704 0 0.0889665 0.282638 0.285704 0 0.0889665 0.282638 0.285704 0 0.093055 0.284055 0.287012 0 0.109839 0.284528 0.291789 0 0.135101 0.286865 0.28922 0 0.150056 0.288017 0.288862 0 0.165819 0.289328 0.292203 0 0.202206 0.288319 0.292149 0 0.228121 0.286511 0.29452 0 0.245505 0.284999 0.29068 0 0.262211 0.283381 0.287067 41841.3 0.284268 0.283656 0.285325 227998 0.305686 0.283925 0.285072 36309.4 0.327101 0.283192 0.285016 0 0.34717 0.282834 0.285576 0 0.359724 0.283122 0.288232 0 0.375231 0.283269 0.290102 0 0.387628 0.2837 0.292028 0 0.407378 0.283783 0.292701 0 0.42754 0.282887 0.289186 0 0.444899 0.283528 0.289144 0 0.462288 0.284193 0.286075 0 0.483944 0.284223 0.284957 0 0.508507 0.285128 0.28553 0 0.521448 0.28962 0.284803 0 0.547744 0.288851 0.284831 0 0.5831 0.285528 0.284524 0 0.664082 0.286614 0.279062 0 0.785358 0.281856 0.278798 0 0.815403 0.281708 0.253601 0 0.848839 0.288458 0.250305 0 0.0915589 0.309352 0.285125 0 0.0915589 0.309352 0.285125 0 0.0915589 0.309352 0.285125 0 0.0951126 0.310368 0.286293 0 0.109127 0.311483 0.289471 0 0.136877 0.310098 0.291163 0 0.152114 0.310745 0.29202 0 0.167408 0.311023 0.293352 0 0.199071 0.309961 0.290183 0 0.226564 0.308166 0.293079 0 0.244061 0.307345 0.291235 0 0.260388 0.306758 0.287572 0 0.285876 0.305896 0.285707 36390.4 0.30544 0.307425 0.285621 32813.7 0.326624 0.307981 0.284469 0 0.347301 0.307856 0.28484 0 0.360923 0.308049 0.287348 0 0.3762 0.309058 0.289599 0 0.388732 0.309667 0.291422 0 0.407025 0.310233 0.292342 0 0.426776 0.309671 0.290066 0 0.445785 0.30914 0.289284 0 0.463541 0.309098 0.287041 0 0.480835 0.309674 0.284858 0 0.512009 0.307116 0.28508 0 0.525588 0.310936 0.284445 0 0.546559 0.312004 0.284335 0 0.588183 0.307587 0.28391 0 0.669369 0.305291 0.283054 0 0.772553 0.313011 0.268802 0 0.816996 0.308679 0.252191 0 0.85324 0.310558 0.253312 0 0.0940215 0.32553 0.285104 0 0.0940215 0.32553 0.285104 0 0.0940215 0.32553 0.285104 0 0.0973172 0.326834 0.286512 0 0.108953 0.329537 0.288769 0 0.135052 0.32807 0.289556 0 0.151421 0.325888 0.2928 0 0.168084 0.325328 0.294733 0 0.197463 0.325955 0.290717 0 0.226256 0.325934 0.291402 0 0.2423 0.325961 0.289918 0 0.259637 0.324516 0.287646 0 0.286692 0.323467 0.285763 0 0.306275 0.32555 0.286596 0 0.327111 0.326496 0.284461 0 0.347229 0.32708 0.284672 0 0.361351 0.326877 0.28663 0 0.377039 0.326964 0.288861 0 0.389395 0.327167 0.290991 0 0.406631 0.327551 0.29178 0 0.4256 0.326897 0.289867 0 0.445832 0.325877 0.288751 0 0.463176 0.325995 0.287609 0 0.481418 0.326267 0.285407 0 0.513089 0.323644 0.284838 0 0.528783 0.327314 0.28426 0 0.545705 0.330218 0.283759 0 0.585243 0.326302 0.284207 0 0.674728 0.322636 0.283452 0 0.76267 0.337105 0.260876 0 0.815917 0.328271 0.250018 0 0.855586 0.324483 0.25548 0 0.0971232 0.344138 0.284405 0 0.0971232 0.344138 0.284405 0 0.0971232 0.344138 0.284405 0 0.101223 0.345642 0.284843 0 0.111942 0.347243 0.286413 0 0.131998 0.346884 0.286989 0 0.148553 0.344724 0.290538 0 0.168207 0.34235 0.29576 0 0.197175 0.345552 0.291455 0 0.226465 0.345448 0.290627 0 0.242745 0.346134 0.288654 0 0.257918 0.345919 0.286275 0 0.286389 0.344185 0.286318 0 0.308086 0.345208 0.287061 0 0.327744 0.345953 0.284981 0 0.346994 0.346276 0.284334 0 0.360637 0.346053 0.286064 0 0.377542 0.345575 0.287731 0 0.389653 0.345738 0.290333 0 0.406917 0.346013 0.291246 0 0.424649 0.345992 0.289396 0 0.445189 0.345184 0.28801 0 0.463214 0.345514 0.287976 0 0.482387 0.345748 0.28619 0 0.510036 0.344699 0.285318 0 0.532089 0.345768 0.284191 0 0.544245 0.349887 0.283045 0 0.580646 0.34692 0.283877 0 0.680633 0.344185 0.283891 0 0.766001 0.351146 0.267201 0 0.803511 0.351516 0.240879 0 0.854133 0.342289 0.254535 0 0.0981437 0.358165 0.283099 0 0.0981437 0.358165 0.283099 0 0.0981437 0.358165 0.283099 0 0.103457 0.358563 0.281206 0 0.113685 0.360372 0.284493 0 0.131054 0.361191 0.286453 0 0.146208 0.359896 0.288628 0 0.166684 0.358104 0.294563 0 0.197701 0.359758 0.292579 0 0.227259 0.360208 0.290897 0 0.243835 0.361496 0.288451 0 0.256794 0.362244 0.285163 0 0.284644 0.359919 0.285447 0 0.309198 0.3592 0.28699 0 0.327823 0.360077 0.285367 0 0.347273 0.360221 0.284357 0 0.360251 0.360419 0.285807 0 0.377495 0.360065 0.286896 0 0.390014 0.360201 0.289579 0 0.407306 0.360504 0.291017 0 0.424368 0.360763 0.289132 0 0.444292 0.360187 0.287992 0 0.463823 0.359886 0.287366 0 0.483081 0.360183 0.286923 0 0.507716 0.360295 0.285796 0 0.534248 0.359839 0.284612 0 0.546818 0.364064 0.283047 0 0.577381 0.363259 0.283584 0 0.684062 0.358817 0.28415 0 0.768309 0.360901 0.271034 0 0.803421 0.363464 0.242032 0 0.852695 0.357725 0.253494 0 0.0960999 0.374537 0.284357 0 0.0960999 0.374537 0.284357 0 0.0960999 0.374537 0.284357 0 0.104724 0.373587 0.279152 0 0.115746 0.374847 0.281412 0 0.130779 0.37679 0.285651 0 0.145428 0.376676 0.287999 0 0.165148 0.375548 0.293258 0 0.199292 0.374805 0.293915 0 0.227983 0.37607 0.29134 0 0.245365 0.376993 0.288539 0 0.2575 0.378354 0.2848 0 0.282164 0.37723 0.283867 0 0.31021 0.374331 0.287 0 0.327905 0.375619 0.285912 0 0.347646 0.375626 0.284545 0 0.360574 0.375903 0.286104 0 0.37696 0.376117 0.286726 0 0.390372 0.375899 0.28891 0 0.407586 0.376261 0.291171 0 0.424241 0.376568 0.28901 0 0.443521 0.376435 0.288115 0 0.464384 0.376083 0.286196 0 0.483103 0.377173 0.287607 0 0.505356 0.378209 0.286354 0 0.536662 0.37594 0.285403 0 0.549872 0.379781 0.283075 0 0.575888 0.381277 0.283304 0 0.687286 0.372933 0.284313 0 0.765592 0.376778 0.269374 0 0.805476 0.376638 0.245175 0 0.849364 0.376031 0.251161 0 0.0947539 0.387523 0.284065 0 0.0947539 0.387523 0.284065 0 0.0947539 0.387523 0.284065 0 0.102532 0.386574 0.280498 0 0.117818 0.386979 0.27867 0 0.132069 0.389432 0.284444 0 0.144986 0.389659 0.287728 0 0.16381 0.388937 0.292047 0 0.200743 0.387085 0.295111 0 0.229306 0.388461 0.292637 0 0.246347 0.389558 0.288655 0 0.258445 0.390661 0.285162 0 0.280557 0.390878 0.282781 0 0.309611 0.387669 0.286683 0 0.328554 0.388086 0.286105 0 0.34775 0.388332 0.284887 0 0.360937 0.388512 0.286309 0 0.377128 0.388902 0.28717 0 0.390454 0.389022 0.288541 0 0.407961 0.389731 0.29076 0 0.424782 0.390359 0.289124 0 0.443536 0.390551 0.288058 0 0.464287 0.390066 0.285809 0 0.483431 0.390831 0.287189 0 0.505996 0.391586 0.286987 0 0.538593 0.388792 0.286105 0 0.552178 0.391848 0.283448 0 0.57508 0.393417 0.282851 0 0.69 0.384392 0.284076 0 0.757166 0.393094 0.263534 0 0.807186 0.387462 0.247892 0 0.848793 0.38921 0.250192 0 0.0932183 0.403447 0.28406 0 0.0932183 0.403447 0.28406 0 0.0932183 0.403447 0.28406 0 0.100203 0.402552 0.282324 0 0.120034 0.401545 0.276163 0 0.133602 0.403976 0.282619 0 0.144976 0.404651 0.286596 0 0.163468 0.404372 0.291662 0 0.200861 0.402986 0.294573 0 0.230056 0.403076 0.294346 0 0.247562 0.404093 0.289917 0 0.259646 0.405525 0.28571 0 0.279867 0.406657 0.282771 0 0.307298 0.404709 0.285737 0 0.329578 0.403566 0.286089 0 0.347896 0.404485 0.285283 0 0.361477 0.404836 0.286487 0 0.377673 0.405604 0.287658 0 0.390825 0.406117 0.288937 0 0.408622 0.406799 0.290128 0 0.425173 0.407319 0.289209 0 0.443453 0.40736 0.288024 0 0.46351 0.406778 0.286122 0 0.484048 0.406308 0.286128 0 0.506368 0.406427 0.287571 0 0.536314 0.404032 0.286517 0 0.55474 0.405873 0.284228 0 0.573835 0.408777 0.282084 0 0.693024 0.400939 0.284096 0 0.750877 0.413028 0.258683 0 0.799983 0.40637 0.243205 0 0.851672 0.41353 0.249088 0 0.0918088 0.419193 0.284236 0 0.0918088 0.419193 0.284236 0 0.0918089 0.419193 0.284236 0 0.0977402 0.418184 0.284402 0 0.120034 0.416287 0.276684 0 0.135508 0.418092 0.280464 0 0.145612 0.419621 0.284327 0 0.163349 0.419906 0.291514 0 0.200847 0.41956 0.294018 0 0.230749 0.418296 0.295634 0 0.248921 0.419237 0.291779 0 0.261532 0.42091 0.28673 0 0.279828 0.423564 0.283031 0 0.304866 0.423679 0.284426 0 0.330034 0.421896 0.285006 0 0.348376 0.422163 0.285842 0 0.361834 0.422354 0.28692 0 0.378308 0.422662 0.28809 0 0.391257 0.423151 0.28965 0 0.409423 0.423756 0.289925 0 0.425328 0.423813 0.28917 0 0.442543 0.423381 0.288035 0 0.462158 0.422291 0.28615 0 0.4844 0.421105 0.284735 0 0.507075 0.42166 0.286852 0 0.533692 0.421383 0.286797 0 0.557264 0.421976 0.284856 0 0.572636 0.426995 0.281624 0 0.690372 0.421388 0.283168 0 0.75402 0.431065 0.25974 0 0.790826 0.433986 0.23516 0 0.851594 0.446509 0.246021 0 0.0905144 0.437603 0.284257 0 0.0905144 0.437603 0.284257 0 0.0905143 0.437603 0.284257 0 0.0961314 0.436882 0.284677 0 0.118433 0.43517 0.278088 0 0.138464 0.435938 0.278035 0 0.147476 0.43816 0.282941 0 0.163555 0.439154 0.290402 0 0.20038 0.439469 0.293298 0 0.22878 0.439462 0.294274 0 0.250648 0.438517 0.293493 0 0.264005 0.439781 0.288435 0 0.281351 0.443075 0.284013 0 0.30442 0.443584 0.284986 0 0.32942 0.44237 0.284356 0 0.348137 0.442053 0.284932 0 0.361961 0.441025 0.287488 0 0.378414 0.440599 0.288294 0 0.391409 0.440611 0.289934 0 0.409554 0.440492 0.290434 0 0.425588 0.440869 0.288184 0 0.44217 0.440995 0.287474 0 0.46111 0.440212 0.285532 0 0.483699 0.439187 0.283832 0 0.508015 0.44075 0.286137 0 0.531452 0.442918 0.286654 0 0.560658 0.442156 0.285689 0 0.575586 0.447028 0.282261 0 0.684102 0.444678 0.280235 0 0.760457 0.4575 0.260796 0 0.789303 0.469803 0.230229 0 0.855027 0.459093 0.250941 0 0.0911284 0.455544 0.283688 0 0.0911284 0.455544 0.283688 0 0.0911284 0.455544 0.283688 0 0.0954236 0.456167 0.284986 0 0.11658 0.454526 0.280556 0 0.140521 0.453578 0.277109 0 0.149977 0.455525 0.281238 0 0.164138 0.457613 0.288479 0 0.200919 0.458558 0.293775 0 0.227849 0.459356 0.293786 0 0.250394 0.458109 0.292727 0 0.265252 0.457876 0.289811 0 0.283528 0.460065 0.285867 0 0.303958 0.461106 0.2853 0 0.327821 0.459888 0.284134 0 0.347855 0.459373 0.283438 0 0.360486 0.459045 0.285939 0 0.378075 0.457656 0.288384 0 0.391295 0.457381 0.289634 0 0.409278 0.457175 0.290763 0 0.426493 0.457973 0.287801 0 0.442448 0.459449 0.287243 0 0.460789 0.460333 0.285261 0 0.483346 0.460162 0.283695 0 0.509726 0.460996 0.284823 0 0.531975 0.463145 0.285897 0 0.563703 0.461724 0.286299 0 0.579466 0.466976 0.282869 0 0.677855 0.465908 0.277928 0 0.767505 0.485296 0.2624 0 0.789939 0.480896 0.233899 0 0.851799 0.461238 0.255 0 0.0921825 0.47555 0.283228 0 0.0921825 0.47555 0.283228 0 0.0921825 0.47555 0.283228 0 0.096465 0.476303 0.284509 0 0.11357 0.476571 0.285069 0 0.140877 0.474896 0.278986 0 0.152995 0.47533 0.279683 0 0.165188 0.478387 0.286468 0 0.201358 0.479662 0.294147 0 0.228211 0.479237 0.294152 0 0.248024 0.478793 0.291291 0 0.26483 0.477676 0.288603 0 0.28563 0.477274 0.287061 0 0.304183 0.479592 0.286301 0 0.326576 0.479753 0.283933 0 0.348442 0.479811 0.282971 0 0.359962 0.480781 0.284066 0 0.376611 0.480082 0.2869 0 0.391541 0.478885 0.289599 0 0.409744 0.479269 0.290766 0 0.427696 0.480041 0.288325 0 0.444697 0.481917 0.287207 0 0.461448 0.484073 0.285066 0 0.482882 0.484695 0.28344 0 0.511593 0.484186 0.283025 0 0.534255 0.486791 0.284952 0 0.561373 0.486217 0.285163 0 0.582996 0.487173 0.283585 0 0.677454 0.496636 0.276194 0 0.765252 0.487747 0.26661 0 0.78772 0.484355 0.236316 0 0.837922 0.466361 0.250436 0 0.0918778 0.50218 0.284286 0 0.0918778 0.50218 0.284286 0 0.0918778 0.50218 0.284286 0 0.0976423 0.501474 0.28438 0 0.112238 0.502672 0.287186 0 0.139659 0.500642 0.281009 0 0.15364 0.499737 0.280727 0 0.169309 0.500213 0.282191 0 0.200371 0.501879 0.292806 0 0.22877 0.50109 0.293921 0 0.246895 0.502017 0.291485 0 0.264399 0.502372 0.287269 0 0.286405 0.502929 0.284667 0 0.30588 0.504164 0.28792 0 0.326977 0.505718 0.284947 0 0.349096 0.506168 0.283223 0 0.36172 0.507 0.283715 0 0.37596 0.508525 0.284353 0 0.390332 0.50822 0.287469 0 0.41113 0.507274 0.29051 0 0.429091 0.508366 0.288454 0 0.447202 0.509618 0.286718 0 0.46347 0.511039 0.285614 0 0.482715 0.511294 0.283337 0 0.510595 0.509334 0.282622 0 0.535539 0.508732 0.284481 0 0.557619 0.508686 0.28442 0 0.585961 0.507993 0.284902 0 0.676497 0.505225 0.28022 0 0.763615 0.494969 0.269381 0 0.785385 0.489311 0.236991 0 0.818787 0.475628 0.24131 0 0.0910473 0.527507 0.284302 0 0.0910473 0.527507 0.284302 0 0.0910473 0.527507 0.284302 0 0.0961813 0.527132 0.284907 0 0.114 0.525898 0.283419 0 0.136256 0.525812 0.283624 0 0.152606 0.524373 0.281718 0 0.171478 0.5242 0.28015 0 0.201733 0.529309 0.289371 0 0.228805 0.530523 0.292781 0 0.249059 0.531155 0.291713 0 0.26521 0.532111 0.287259 0 0.287585 0.533307 0.282971 0 0.308075 0.533866 0.285764 0 0.328561 0.533681 0.28648 0 0.349574 0.534182 0.283938 0 0.363944 0.534726 0.284458 0 0.378204 0.536133 0.284324 0 0.390114 0.537223 0.285831 0 0.409584 0.536332 0.288989 0 0.428974 0.534537 0.288315 0 0.447494 0.533637 0.287671 0 0.463942 0.530996 0.286801 0 0.481265 0.528107 0.286066 0 0.506394 0.523353 0.28587 0 0.533669 0.518304 0.286237 0 0.55379 0.518314 0.287991 0 0.586888 0.519295 0.288364 0 0.675718 0.52124 0.279022 0 0.753818 0.499731 0.272779 0 0.783134 0.492075 0.236731 0 0.797084 0.487731 0.229575 0 0.0918204 0.554461 0.283323 0 0.0918204 0.554461 0.283323 0 0.0918204 0.554461 0.283323 0 0.0961304 0.555376 0.284588 0 0.11304 0.555429 0.28461 0 0.136743 0.556512 0.283016 0 0.151402 0.556723 0.283244 0 0.172091 0.555934 0.282287 0 0.204311 0.559046 0.28538 0 0.228613 0.560598 0.291668 0 0.250145 0.559899 0.290781 0 0.265557 0.560131 0.287983 0 0.288862 0.559603 0.283843 0 0.308723 0.560786 0.284296 0 0.326698 0.559546 0.286058 0 0.350007 0.555582 0.287587 0 0.364665 0.552449 0.288188 0 0.377763 0.550436 0.288558 0 0.388818 0.549045 0.289347 0 0.405314 0.5467 0.292032 0 0.423346 0.543316 0.291652 0 0.44339 0.540148 0.29207 0 0.461977 0.539259 0.290826 0 0.479365 0.540711 0.289924 0 0.506225 0.545692 0.288591 0 0.535562 0.546871 0.285747 0 0.557734 0.548147 0.286044 0 0.588486 0.544834 0.28449 0 0.674136 0.534446 0.276027 0 0.742516 0.505673 0.263817 0 0.784949 0.502741 0.235909 0 0.814961 0.553459 0.22907 0 0.0920724 0.585564 0.283592 0 0.0920724 0.585564 0.283592 0 0.0920724 0.585564 0.283592 0 0.0976323 0.584882 0.283899 0 0.110281 0.586146 0.288953 0 0.138975 0.584502 0.280716 0 0.151107 0.585595 0.283902 0 0.169951 0.584873 0.286762 0 0.206387 0.580305 0.282232 0 0.227228 0.578865 0.291924 0 0.246888 0.575925 0.293548 0 0.263569 0.573347 0.291545 0 0.285596 0.569647 0.288427 0 0.306111 0.56735 0.290676 0 0.323576 0.568637 0.289666 0 0.344808 0.567468 0.290043 0 0.362719 0.565411 0.291278 0 0.378232 0.565286 0.293065 0 0.388729 0.566672 0.292575 0 0.405471 0.568893 0.292768 0 0.423062 0.571805 0.291272 0 0.44316 0.572543 0.288282 0 0.463735 0.57382 0.286897 0 0.484003 0.575242 0.285372 0 0.506175 0.575208 0.283798 0 0.534103 0.577552 0.281618 0 0.555055 0.569313 0.278782 0 0.5773 0.560609 0.279141 0 0.678665 0.557071 0.27845 0 0.734463 0.533807 0.253749 0 0.797167 0.551853 0.241498 0 0.818048 0.570421 0.234121 0 0.09381 0.660831 0.282593 0 0.09381 0.660831 0.282593 0 0.0938101 0.660831 0.282593 0 0.0966733 0.662041 0.283716 0 0.107203 0.663329 0.288124 0 0.135281 0.664848 0.28098 0 0.14839 0.66906 0.28177 0 0.168541 0.674877 0.283318 0 0.212147 0.679834 0.285283 0 0.236798 0.67375 0.277696 0 0.253492 0.671662 0.282387 0 0.268175 0.669864 0.28735 0 0.289319 0.665519 0.287097 0 0.307875 0.662646 0.288613 0 0.329028 0.658265 0.288036 0 0.345706 0.655461 0.287926 0 0.35662 0.651403 0.287605 0 0.371328 0.645542 0.290805 0 0.384721 0.640211 0.293827 0 0.402073 0.63371 0.296623 0 0.415918 0.628118 0.295905 0 0.433956 0.624265 0.294376 0 0.45931 0.649855 0.291209 0 0.48412 0.664644 0.285649 0 0.506196 0.660302 0.28203 0 0.526671 0.654484 0.283773 0 0.551184 0.647619 0.284846 0 0.57654 0.641208 0.280971 0 0.662128 0.624076 0.274208 0 0.75468 0.605196 0.262263 0 0.78976 0.597919 0.250522 0 0.814593 0.593757 0.242407 0 0.0974923 0.74724 0.272637 0 0.0974923 0.74724 0.272637 0 0.0974923 0.74724 0.272637 0 0.0993784 0.746592 0.27455 0 0.110782 0.746699 0.277688 0 0.13063 0.750749 0.283559 0 0.141765 0.753495 0.287878 0 0.155254 0.752497 0.291841 0 0.194949 0.742364 0.291595 0 0.222387 0.736141 0.285436 0 0.237526 0.732652 0.28472 0 0.258273 0.728905 0.276188 0 0.282622 0.724014 0.275918 0 0.300814 0.72043 0.284233 0 0.318908 0.717072 0.287486 0 0.337508 0.713681 0.28516 0 0.350662 0.710445 0.282957 0 0.36205 0.707693 0.283019 0 0.370729 0.705623 0.283799 0 0.383628 0.702161 0.284533 0 0.398576 0.698128 0.283469 0 0.416925 0.693258 0.281311 0 0.43182 0.689515 0.277674 0 0.447265 0.685662 0.273353 0 0.473087 0.679283 0.27721 0 0.506045 0.680296 0.281419 0 0.541321 0.718515 0.284128 0 0.584052 0.773914 0.287609 0 0.683552 0.764153 0.285816 0 0.713055 0.756747 0.25936 0 0.818157 0.729079 0.261193 0 0.832788 0.739029 0.253021 0 0.0755464 0.810653 0.292096 0 0.0755464 0.810653 0.292096 0 0.0755467 0.810653 0.292095 0 0.0894448 0.807249 0.278979 0 0.115125 0.809551 0.268167 0 0.140411 0.816008 0.269716 0 0.152441 0.826098 0.276704 0 0.168956 0.837979 0.283952 0 0.202332 0.854066 0.302275 0 0.227697 0.844887 0.295278 0 0.239606 0.840731 0.293924 0 0.257662 0.83184 0.286739 0 0.277441 0.825571 0.28228 0 0.296384 0.813032 0.274078 0 0.309926 0.803761 0.276433 0 0.322378 0.797472 0.280721 0 0.333603 0.793028 0.28061 0 0.355522 0.811743 0.284496 0 0.372353 0.812389 0.289307 0 0.394365 0.820142 0.297366 0 0.414105 0.830757 0.294989 0 0.435316 0.835865 0.289762 0 0.455975 0.833586 0.287013 0 0.477145 0.831461 0.283623 0 0.502444 0.838575 0.283369 0 0.529408 0.839032 0.284134 0 0.555449 0.840148 0.283341 0 0.5816 0.838949 0.283124 0 0.680076 0.833654 0.278624 0 0.71908 0.849089 0.253754 0 0.805708 0.848012 0.249382 0 0.859285 0.842333 0.255646 0 0.0720045 0.91334 0.307006 0 0.0720045 0.91334 0.307006 0 0.0720045 0.91334 0.307006 0 0.0787509 0.912717 0.309022 0 0.109572 0.913533 0.29018 0 0.142234 0.906376 0.27983 0 0.160236 0.89995 0.272701 0 0.170335 0.893716 0.277699 0 0.191004 0.880855 0.290784 0 0.205865 0.874568 0.298509 0 0.223222 0.868898 0.292308 0 0.234111 0.865047 0.290636 0 0.266309 0.870203 0.280031 0 0.295809 0.878881 0.278804 0 0.319947 0.879319 0.272834 0 0.346617 0.886032 0.274198 0 0.359882 0.891752 0.280388 0 0.375203 0.898133 0.28596 0 0.388449 0.902804 0.288098 0 0.409093 0.905561 0.290646 0 0.424311 0.906602 0.290548 0 0.440074 0.906497 0.287756 0 0.456744 0.906034 0.28638 0 0.479673 0.903984 0.284702 0 0.50186 0.899583 0.283707 0 0.522039 0.893507 0.28151 0 0.544853 0.886753 0.280723 0 0.576201 0.888996 0.280469 0 0.683326 0.896698 0.278436 0 0.730665 0.902261 0.254385 0 0.816691 0.893063 0.25491 0 0.859854 0.878656 0.257271 0 0.0928512 0.0964825 0.297514 0 0.0928512 0.0964825 0.297514 0 0.0928513 0.0964825 0.297514 0 0.0979208 0.0970305 0.29943 0 0.112684 0.099003 0.304669 0 0.134511 0.0997879 0.313149 0 0.148167 0.101379 0.312978 0 0.163936 0.103469 0.311612 0 0.203791 0.0998488 0.31641 0 0.225799 0.0990941 0.313089 0 0.239903 0.0979786 0.311572 0 0.255531 0.0982985 0.310285 0 0.284981 0.0987652 0.31015 0 0.30753 0.0982439 0.310596 0 0.325176 0.0974138 0.309416 0 0.34735 0.0954252 0.30574 0 0.363993 0.0938337 0.303138 0 0.378646 0.0935611 0.305797 0 0.391527 0.0937698 0.308137 0 0.410289 0.0948485 0.310396 0 0.433388 0.0933724 0.31483 0 0.444862 0.0973143 0.314521 0 0.457229 0.101226 0.31409 0 0.485954 0.097841 0.314825 0 0.510109 0.0992462 0.306067 0 0.519313 0.103306 0.298809 0 0.563638 0.0925981 0.307339 0 0.588568 0.0910779 0.310314 0 0.641588 0.11209 0.280864 0 0.758944 0.101192 0.285233 0 0.788728 0.10786 0.254626 0 0.874363 0.100627 0.278229 0 0.0928512 0.0964825 0.297514 0 0.0928512 0.0964825 0.297514 0 0.0928513 0.0964825 0.297514 0 0.0979208 0.0970305 0.29943 0 0.112684 0.099003 0.304669 0 0.134511 0.0997879 0.313149 0 0.148167 0.101379 0.312978 0 0.163936 0.103469 0.311612 0 0.203791 0.0998488 0.31641 0 0.225799 0.0990941 0.313089 0 0.239903 0.0979786 0.311572 0 0.255531 0.0982985 0.310285 0 0.284981 0.0987652 0.31015 0 0.30753 0.0982439 0.310596 0 0.325176 0.0974138 0.309416 0 0.34735 0.0954252 0.30574 0 0.363993 0.0938337 0.303138 0 0.378646 0.0935611 0.305797 0 0.391527 0.0937698 0.308137 0 0.410289 0.0948485 0.310396 0 0.433388 0.0933724 0.31483 0 0.444862 0.0973143 0.314521 0 0.457229 0.101226 0.31409 0 0.485954 0.097841 0.314825 0 0.510109 0.0992462 0.306067 0 0.519313 0.103306 0.298809 0 0.563638 0.0925981 0.307339 0 0.588568 0.0910779 0.310314 0 0.641588 0.11209 0.280864 0 0.758944 0.101192 0.285233 0 0.788728 0.10786 0.254626 0 0.874363 0.100627 0.278229 0 0.0928512 0.0964825 0.297514 0 0.0928512 0.0964825 0.297514 0 0.0928513 0.0964825 0.297514 0 0.0979208 0.0970305 0.29943 0 0.112684 0.0990031 0.304669 0 0.134511 0.099788 0.313149 0 0.148167 0.101379 0.312978 0 0.163936 0.103469 0.311612 0 0.203791 0.0998488 0.31641 0 0.225799 0.0990941 0.313089 0 0.239903 0.0979786 0.311572 0 0.255531 0.0982985 0.310285 0 0.284981 0.0987652 0.31015 0 0.30753 0.0982439 0.310596 0 0.325176 0.0974138 0.309416 0 0.34735 0.0954252 0.30574 0 0.363993 0.0938337 0.303138 0 0.378646 0.0935611 0.305797 0 0.391527 0.0937698 0.308137 0 0.410289 0.0948485 0.310396 0 0.433388 0.0933724 0.31483 0 0.444862 0.0973143 0.314521 0 0.457229 0.101226 0.31409 0 0.485954 0.097841 0.314825 0 0.510109 0.0992462 0.306067 0 0.519313 0.103306 0.298809 0 0.563638 0.0925981 0.307339 0 0.588568 0.0910779 0.310314 0 0.641588 0.11209 0.280864 0 0.758944 0.101192 0.285233 0 0.788728 0.10786 0.254626 0 0.874363 0.100627 0.278229 0 0.0929379 0.105335 0.297608 0 0.0929379 0.105335 0.297608 0 0.0929379 0.105335 0.297608 0 0.0989162 0.106282 0.299965 0 0.113386 0.108824 0.305146 0 0.135239 0.109505 0.313348 0 0.149347 0.11122 0.313011 0 0.163982 0.112668 0.311597 0 0.202275 0.108281 0.31625 0 0.225269 0.10627 0.312564 0 0.239965 0.106162 0.311312 0 0.255852 0.106629 0.309829 0 0.284752 0.105747 0.309751 0 0.307047 0.105124 0.311058 0 0.324666 0.10421 0.3099 0 0.34627 0.102373 0.306621 0 0.363578 0.101118 0.303418 0 0.379054 0.102692 0.305388 0 0.392508 0.103898 0.307883 0 0.409608 0.105747 0.310007 0 0.434083 0.103858 0.314383 0 0.446851 0.107451 0.314045 0 0.457424 0.110929 0.313392 0 0.482183 0.10694 0.313899 0 0.511406 0.104304 0.307959 0 0.520199 0.110045 0.298178 0 0.557631 0.102413 0.30509 0 0.591749 0.0988844 0.309209 0 0.635012 0.12281 0.277476 0 0.760222 0.110068 0.285706 0 0.789415 0.112973 0.256279 0 0.871289 0.107111 0.276937 0 0.0941306 0.123495 0.298333 0 0.0941306 0.123495 0.298333 0 0.0941306 0.123495 0.298333 0 0.101017 0.124035 0.301144 0 0.115041 0.127662 0.306048 0 0.137095 0.129411 0.313712 0 0.15023 0.128201 0.312179 0 0.163737 0.127072 0.31115 0 0.199128 0.122561 0.315173 0 0.226013 0.122107 0.311801 0 0.23977 0.121829 0.311039 0 0.255448 0.121051 0.309079 0 0.283797 0.119866 0.309345 0 0.306851 0.120028 0.310728 0 0.32464 0.121156 0.311075 0 0.345834 0.12164 0.308323 0 0.363448 0.12161 0.305409 0 0.381424 0.123186 0.305538 0 0.394385 0.125377 0.307459 0 0.410551 0.126959 0.309281 0 0.431034 0.125097 0.312746 0 0.4489 0.123586 0.312607 0 0.458834 0.124408 0.311698 0 0.477581 0.122453 0.311801 0 0.513682 0.114997 0.31162 0 0.523553 0.123603 0.30206 0 0.547584 0.124558 0.299813 0 0.59558 0.117164 0.306935 0 0.637362 0.139614 0.279226 0 0.761684 0.124442 0.287068 0 0.790538 0.123932 0.25947 0 0.8671 0.127221 0.273232 0 0.0960349 0.145842 0.299123 0 0.0960349 0.145842 0.299123 0 0.0960349 0.145842 0.299123 0 0.102969 0.146649 0.302008 0 0.116953 0.147381 0.306734 0 0.13484 0.145397 0.312945 0 0.14932 0.144084 0.31123 0 0.163162 0.142677 0.310066 0 0.19731 0.139824 0.314665 0 0.226483 0.138893 0.311634 0 0.239344 0.139782 0.310889 0 0.255027 0.139642 0.308857 0 0.284051 0.141149 0.309201 0 0.308623 0.14249 0.309812 0 0.326168 0.144254 0.311328 0 0.346393 0.145909 0.309992 0 0.363281 0.145387 0.307553 0 0.383055 0.144303 0.305881 0 0.395665 0.145045 0.307714 0 0.41085 0.145168 0.308252 0 0.425394 0.143376 0.310645 0 0.449971 0.138953 0.310677 0 0.460657 0.140152 0.30995 0 0.473988 0.141577 0.309614 0 0.509034 0.137656 0.310861 0 0.528397 0.141046 0.307064 0 0.544143 0.149485 0.297816 0 0.599083 0.139589 0.304973 0 0.641359 0.15454 0.282562 0 0.76309 0.140453 0.288324 0 0.793506 0.145148 0.259661 0 0.868191 0.14806 0.273927 0 0.0961955 0.159385 0.298723 0 0.0961955 0.159385 0.298723 0 0.0961955 0.159385 0.298723 0 0.10307 0.157952 0.301896 0 0.116593 0.156494 0.306487 0 0.133143 0.154188 0.312221 0 0.148245 0.151799 0.311721 0 0.162815 0.150927 0.309629 0 0.196739 0.150985 0.314603 0 0.227071 0.150037 0.312007 0 0.240064 0.151714 0.310757 0 0.255366 0.152526 0.30904 0 0.284626 0.153682 0.308961 0 0.309505 0.154389 0.309283 0 0.327058 0.155512 0.311102 0 0.34602 0.156168 0.310639 0 0.362854 0.15564 0.308345 0 0.382591 0.154547 0.30664 0 0.39579 0.153988 0.307555 0 0.410541 0.153167 0.308511 0 0.422881 0.152903 0.309677 0 0.448541 0.148758 0.309586 0 0.461808 0.149738 0.309095 0 0.47335 0.153617 0.308816 0 0.507033 0.150374 0.310652 0 0.530919 0.150103 0.309357 0 0.546632 0.157655 0.301125 0 0.594307 0.151115 0.304083 0 0.642808 0.160222 0.284111 0 0.764588 0.150283 0.288124 0 0.794895 0.15441 0.259646 0 0.867454 0.155085 0.27416 0 0.0946215 0.167519 0.297594 0 0.0946215 0.167519 0.297594 0 0.0946215 0.167519 0.297594 0 0.1014 0.165828 0.300757 0 0.115971 0.162849 0.306238 0 0.131888 0.160673 0.311739 0 0.147678 0.159008 0.312365 0 0.16321 0.160172 0.309702 0 0.196253 0.160593 0.314562 0 0.228033 0.160829 0.31235 0 0.240992 0.162422 0.310694 0 0.255584 0.163469 0.309273 0 0.284903 0.163572 0.308673 0 0.309827 0.163503 0.309124 0 0.327544 0.164189 0.310622 0 0.346309 0.16492 0.310526 0 0.36245 0.164742 0.309061 0 0.381595 0.163078 0.30718 0 0.395516 0.161819 0.307235 0 0.410769 0.16207 0.308757 0 0.422937 0.162714 0.309434 0 0.445941 0.159863 0.308627 0 0.463437 0.16046 0.308579 0 0.475345 0.164271 0.308317 0 0.503656 0.162633 0.309687 0 0.533071 0.15965 0.309051 0 0.549013 0.164604 0.304353 0 0.589808 0.159183 0.303898 0 0.644479 0.166253 0.285473 0 0.766277 0.161373 0.287926 0 0.795914 0.163169 0.260273 0 0.866537 0.164386 0.274437 0 0.0895901 0.19386 0.294226 0 0.0895901 0.19386 0.294226 0 0.0895901 0.19386 0.294226 0 0.0958664 0.192802 0.297037 0 0.113447 0.191131 0.304699 0 0.132299 0.192489 0.311972 0 0.147469 0.19357 0.314211 0 0.166155 0.194224 0.311448 0 0.195225 0.196807 0.31366 0 0.227388 0.194541 0.312604 0 0.242843 0.193979 0.310914 0 0.256029 0.194971 0.308468 0 0.285057 0.195572 0.308106 0 0.310948 0.198118 0.308719 0 0.330445 0.199393 0.308825 0 0.347724 0.199246 0.309769 0 0.361308 0.198842 0.308776 0 0.378937 0.197596 0.308538 0 0.393309 0.195956 0.309228 0 0.411688 0.194827 0.308826 0 0.424602 0.195037 0.311943 0 0.439414 0.194413 0.309433 0 0.466345 0.189877 0.307995 0 0.479148 0.191292 0.307934 0 0.497795 0.192786 0.308611 0 0.533342 0.189439 0.308921 0 0.550271 0.191911 0.308331 0 0.589489 0.192763 0.308963 0 0.654329 0.20209 0.288549 0 0.771256 0.193997 0.292599 0 0.800271 0.199209 0.261883 0 0.878248 0.194314 0.286599 0 0.0902483 0.22969 0.293314 0 0.0902483 0.22969 0.293314 0 0.0902483 0.22969 0.293314 0 0.0965157 0.230387 0.296637 0 0.112426 0.230856 0.303 0 0.132937 0.229464 0.311365 0 0.146246 0.228942 0.314529 0 0.166557 0.228069 0.311971 0 0.197218 0.228503 0.314647 0 0.226318 0.23008 0.313709 0 0.243634 0.23002 0.313074 0 0.25918 0.230412 0.310859 0 0.285388 0.231923 0.310279 0 0.309603 0.231071 0.30926 0 0.328093 0.229904 0.309261 0 0.347346 0.22931 0.30828 0 0.360657 0.230128 0.308266 0 0.377001 0.230641 0.307746 0 0.390887 0.230493 0.309362 0 0.410097 0.230144 0.310044 0 0.426328 0.230387 0.310476 0 0.441228 0.232182 0.310324 0 0.460634 0.23182 0.30677 0 0.485729 0.230499 0.305008 0 0.4992 0.233846 0.304799 0 0.524561 0.232437 0.306149 0 0.557111 0.228248 0.305424 0 0.586958 0.226483 0.310384 0 0.652632 0.234981 0.293243 0 0.774961 0.224129 0.296556 0 0.804595 0.229664 0.266679 0 0.872686 0.230287 0.282856 0 0.0922072 0.243791 0.293772 0 0.0922072 0.243791 0.293772 0 0.0922072 0.243791 0.293772 0 0.0975334 0.244096 0.296518 0 0.112678 0.244115 0.30336 0 0.131342 0.243341 0.310599 0 0.144832 0.242614 0.315599 0 0.165073 0.241252 0.313996 0 0.199577 0.244696 0.316427 0 0.228093 0.25095 0.314612 0 0.244571 0.252614 0.312772 0 0.26057 0.251303 0.309797 0 0.285152 0.250394 0.308482 0 0.308645 0.249037 0.307881 0 0.327544 0.248695 0.307648 0 0.347776 0.248332 0.306645 0 0.361714 0.248257 0.306403 0 0.377019 0.248564 0.306694 0 0.390501 0.248222 0.308562 0 0.409569 0.247751 0.310016 0 0.42639 0.247316 0.311099 0 0.442429 0.247837 0.310761 0 0.458135 0.248472 0.307714 0 0.487771 0.244976 0.306257 0 0.501564 0.248419 0.304233 0 0.522896 0.249 0.305372 0 0.55875 0.244188 0.305285 0 0.581005 0.245791 0.306752 0 0.651478 0.252497 0.293279 0 0.776498 0.238641 0.298112 0 0.806792 0.244332 0.269611 0 0.864803 0.24984 0.27784 0 0.0939237 0.25367 0.294518 0 0.0939237 0.25367 0.294518 0 0.0939237 0.25367 0.294518 0 0.0991684 0.254339 0.297333 0 0.113091 0.255796 0.303968 0 0.13177 0.25856 0.310919 0 0.145759 0.261206 0.315066 0 0.165874 0.263275 0.313022 0 0.202758 0.267389 0.316491 0 0.228515 0.269522 0.313917 0 0.243456 0.268647 0.312235 0 0.258905 0.267033 0.308938 0 0.284205 0.264941 0.307321 0 0.307756 0.263709 0.307778 0 0.327 0.263018 0.30733 0 0.347265 0.262261 0.306878 0 0.361862 0.261934 0.305959 0 0.377242 0.262529 0.306658 0 0.390303 0.262664 0.308455 0 0.40907 0.262198 0.310041 0 0.426054 0.261483 0.3115 0 0.443134 0.26139 0.310828 0 0.458323 0.262391 0.308726 0 0.486832 0.259522 0.307043 0 0.50414 0.262155 0.304525 0 0.521759 0.26466 0.304812 0 0.555759 0.260954 0.305354 0 0.576826 0.263261 0.303922 0 0.655177 0.266585 0.292873 0 0.777489 0.253057 0.298189 0 0.808794 0.257749 0.27188 0 0.856307 0.267192 0.272293 0 0.0955515 0.276957 0.293419 0 0.0955515 0.276957 0.293419 0 0.0955515 0.276957 0.293419 0 0.102365 0.277891 0.297559 0 0.116367 0.283579 0.304469 0 0.134293 0.288791 0.311109 0 0.149853 0.289227 0.313602 0 0.166848 0.290439 0.311193 0 0.203081 0.287292 0.316604 0 0.226931 0.286704 0.313897 0 0.241546 0.285586 0.312914 0 0.25677 0.284342 0.309909 0 0.283885 0.284044 0.307355 36514.6 0.306852 0.283676 0.308138 32940.9 0.326376 0.282999 0.307434 0 0.346567 0.28287 0.307122 0 0.361901 0.282601 0.305991 0 0.378059 0.283026 0.306371 0 0.390123 0.283659 0.308246 0 0.408473 0.283588 0.309983 0 0.425246 0.28332 0.311937 0 0.443851 0.28316 0.310197 0 0.459671 0.284907 0.309716 0 0.482934 0.284733 0.307583 0 0.508102 0.285147 0.305955 0 0.520802 0.289332 0.303364 0 0.549894 0.286904 0.304181 0 0.580141 0.28533 0.302816 0 0.662495 0.289569 0.292301 0 0.778767 0.280404 0.296393 0 0.811991 0.280448 0.275624 0 0.852331 0.295463 0.269351 0 0.0962249 0.307526 0.291633 0 0.0962249 0.307526 0.291633 0 0.0962249 0.307526 0.291633 0 0.102672 0.307625 0.294796 0 0.120233 0.308487 0.305391 0 0.13681 0.311608 0.312678 0 0.150293 0.312516 0.314974 0 0.167356 0.311904 0.312139 0 0.200446 0.308609 0.314365 0 0.227468 0.307368 0.314081 0 0.240519 0.307846 0.313331 0 0.255779 0.307424 0.310886 0 0.284504 0.306779 0.308302 32956.5 0.306542 0.307664 0.307465 159236 0.325939 0.307763 0.307961 25469.4 0.346752 0.307755 0.307189 0 0.362298 0.307963 0.306325 0 0.379308 0.30838 0.305825 0 0.391239 0.309309 0.308041 0 0.408557 0.309803 0.309551 0 0.42512 0.309375 0.311445 0 0.443758 0.308829 0.310521 0 0.4623 0.308754 0.307893 0 0.479065 0.310278 0.308128 0 0.511408 0.307304 0.30683 0 0.524894 0.310866 0.304275 0 0.545973 0.311799 0.302358 0 0.585263 0.307537 0.30193 0 0.668006 0.309017 0.296295 0 0.773577 0.309211 0.290649 0 0.813745 0.306353 0.27467 0 0.856177 0.315764 0.273391 0 0.0967479 0.325414 0.292346 0 0.0967479 0.325414 0.292346 0 0.0967479 0.325414 0.292346 0 0.10235 0.325737 0.294053 0 0.120042 0.326192 0.303623 0 0.138389 0.326487 0.31333 0 0.149752 0.326831 0.316374 0 0.167571 0.326618 0.312753 0 0.196628 0.325866 0.312039 0 0.228034 0.324603 0.31379 0 0.240352 0.325042 0.313403 0 0.255385 0.32491 0.311235 0 0.285576 0.324548 0.309292 0 0.306785 0.326343 0.307228 25502.7 0.32581 0.326777 0.307838 23789.7 0.346976 0.326714 0.307302 0 0.362514 0.326485 0.306234 0 0.379514 0.326415 0.305785 0 0.391951 0.326623 0.307404 0 0.407973 0.327017 0.309268 0 0.424427 0.326439 0.311127 0 0.443034 0.325731 0.310526 0 0.462732 0.325142 0.306844 0 0.479958 0.326563 0.307661 0 0.513038 0.323938 0.30739 0 0.528065 0.327474 0.305246 0 0.545475 0.329966 0.302496 0 0.58496 0.325682 0.30166 0 0.671385 0.322796 0.300114 0 0.763949 0.332988 0.282556 0 0.814629 0.32586 0.272958 0 0.858905 0.329471 0.276676 0 0.0980984 0.345018 0.293627 0 0.0980984 0.345018 0.293627 0 0.0980984 0.345018 0.293627 0 0.1036 0.34521 0.295234 0 0.118692 0.344024 0.300765 0 0.138057 0.343009 0.312009 0 0.149596 0.343269 0.317683 0 0.167951 0.343896 0.31376 0 0.195557 0.346125 0.311973 0 0.227507 0.344939 0.312276 0 0.241208 0.34485 0.312582 0 0.255417 0.344992 0.31155 0 0.285627 0.344863 0.310208 0 0.307849 0.345855 0.308225 0 0.325888 0.346371 0.307026 0 0.346132 0.345889 0.307201 0 0.362232 0.345329 0.305819 0 0.379503 0.345122 0.305679 0 0.392424 0.345097 0.306845 0 0.408067 0.345649 0.308602 0 0.423771 0.345585 0.310806 0 0.442415 0.34504 0.310463 0 0.46238 0.344686 0.307034 0 0.481861 0.345728 0.306419 0 0.509467 0.345353 0.307167 0 0.531354 0.346348 0.306171 0 0.54405 0.350066 0.303212 0 0.580877 0.346816 0.301716 0 0.675969 0.342448 0.301389 0 0.754981 0.354499 0.276072 0 0.814799 0.34468 0.271381 0 0.861941 0.346031 0.279805 0 0.097932 0.35969 0.294274 0 0.097932 0.35969 0.294274 0 0.097932 0.35969 0.294274 0 0.10353 0.359151 0.295621 0 0.117888 0.358119 0.299474 0 0.136372 0.357941 0.309816 0 0.150517 0.357416 0.315881 0 0.168664 0.35812 0.314925 0 0.195055 0.361128 0.312332 0 0.227058 0.360569 0.310937 0 0.241648 0.360504 0.311702 0 0.254735 0.360618 0.310529 0 0.285315 0.359436 0.310572 0 0.30868 0.359771 0.308904 0 0.326364 0.360321 0.307056 0 0.345433 0.360494 0.307077 0 0.361692 0.35993 0.305467 0 0.379613 0.359605 0.305527 0 0.392518 0.359786 0.306781 0 0.408792 0.360367 0.30798 0 0.423408 0.360746 0.31061 0 0.441772 0.360222 0.310614 0 0.462199 0.35957 0.307307 0 0.48335 0.359734 0.305485 0 0.507799 0.360837 0.306758 0 0.533472 0.360626 0.306991 0 0.54594 0.364428 0.304112 0 0.577434 0.363101 0.301822 0 0.679627 0.357361 0.301025 0 0.756274 0.364597 0.278067 0 0.809564 0.361341 0.266901 0 0.8644 0.359203 0.281748 0 0.0971467 0.376272 0.294595 0 0.0971467 0.376272 0.294595 0 0.0971467 0.376272 0.294595 0 0.103103 0.375446 0.296195 0 0.116961 0.373955 0.299597 0 0.13643 0.374296 0.305444 0 0.151318 0.374124 0.312409 0 0.169222 0.373754 0.316072 0 0.195943 0.376534 0.312834 0 0.228073 0.376192 0.310951 0 0.242033 0.377129 0.310566 0 0.254727 0.377342 0.308963 0 0.28471 0.375352 0.31095 0 0.309534 0.375169 0.309462 0 0.326607 0.376114 0.307583 0 0.345547 0.376545 0.307009 0 0.361063 0.376371 0.305506 0 0.379295 0.375818 0.305175 0 0.392632 0.375713 0.3069 0 0.409594 0.375923 0.307595 0 0.423307 0.376687 0.310177 0 0.44122 0.376629 0.310796 0 0.461884 0.376185 0.307766 0 0.484622 0.375998 0.304947 0 0.505893 0.378108 0.306325 0 0.535918 0.376527 0.307504 0 0.548886 0.380358 0.304999 0 0.575085 0.381301 0.302538 0 0.683073 0.371775 0.300605 0 0.757747 0.377682 0.280725 0 0.800493 0.382267 0.260062 0 0.866118 0.374028 0.283269 0 0.0960986 0.389192 0.294309 0 0.0960986 0.389192 0.294309 0 0.0960987 0.389192 0.294309 0 0.102296 0.388426 0.296378 0 0.117245 0.387261 0.300292 0 0.138281 0.386667 0.302271 0 0.151345 0.387133 0.309036 0 0.16885 0.386707 0.314057 0 0.197639 0.388757 0.313723 0 0.228911 0.389032 0.31095 0 0.242792 0.39007 0.310723 0 0.254978 0.390866 0.308005 0 0.283353 0.389187 0.310374 0 0.310231 0.387883 0.31002 0 0.326732 0.388752 0.308242 0 0.34594 0.389084 0.307335 0 0.360792 0.389394 0.305904 0 0.379042 0.388936 0.304934 0 0.392667 0.388921 0.306783 0 0.410096 0.389356 0.30778 0 0.424205 0.390394 0.309922 0 0.441078 0.390808 0.310961 0 0.461637 0.390361 0.30802 0 0.484438 0.389775 0.305245 0 0.50586 0.391632 0.306054 0 0.537937 0.388999 0.307239 0 0.55112 0.392296 0.305605 0 0.574338 0.393585 0.303079 0 0.685691 0.382951 0.300486 0 0.754188 0.390995 0.279855 0 0.802504 0.392777 0.263792 0 0.865754 0.388425 0.282628 0 0.0956445 0.403925 0.293283 0 0.0956445 0.403925 0.293283 0 0.0956445 0.403925 0.293283 0 0.101663 0.403933 0.296268 0 0.11694 0.402823 0.300897 0 0.13958 0.401231 0.299398 0 0.15317 0.401959 0.304412 0 0.16977 0.402744 0.310701 0 0.19966 0.403377 0.314842 0 0.228397 0.404684 0.31156 0 0.243771 0.405101 0.311059 0 0.255874 0.405992 0.308515 0 0.281592 0.405696 0.309022 0 0.310071 0.403314 0.310714 0 0.327432 0.404159 0.30892 0 0.34661 0.404959 0.30775 0 0.361322 0.405778 0.306556 0 0.378934 0.406382 0.305057 0 0.39293 0.406342 0.306564 0 0.410414 0.406554 0.307999 0 0.425275 0.407063 0.309608 0 0.441011 0.407933 0.311109 0 0.460997 0.407325 0.308257 0 0.48368 0.405675 0.305808 0 0.507105 0.405665 0.304933 0 0.536616 0.403755 0.306403 0 0.553741 0.4062 0.306072 0 0.573209 0.4088 0.303622 0 0.684564 0.401157 0.300225 0 0.742996 0.412871 0.272999 0 0.804824 0.405442 0.268413 0 0.867703 0.413334 0.281736 0 0.0956391 0.418645 0.292481 0 0.0956391 0.418645 0.292481 0 0.0956391 0.418645 0.292481 0 0.101562 0.418773 0.295394 0 0.116505 0.418459 0.301332 0 0.137406 0.417008 0.301229 0 0.15558 0.416631 0.301113 0 0.170807 0.418425 0.308522 0 0.201029 0.418571 0.315471 0 0.228619 0.419849 0.313054 0 0.244881 0.420543 0.311465 0 0.257017 0.421755 0.309232 0 0.280219 0.423854 0.307353 0 0.308832 0.421811 0.31018 0 0.328767 0.421646 0.309631 0 0.347024 0.422686 0.308539 0 0.362178 0.42313 0.306953 0 0.379265 0.423703 0.306122 0 0.392975 0.423926 0.30644 0 0.41036 0.42363 0.308046 0 0.425527 0.42306 0.309698 0 0.440708 0.423009 0.310584 0 0.45977 0.422315 0.308134 0 0.482644 0.420885 0.306097 0 0.508549 0.420456 0.303671 0 0.534178 0.420606 0.3054 0 0.556524 0.42226 0.30565 0 0.572043 0.42751 0.304014 0 0.682622 0.421094 0.299635 0 0.745702 0.430879 0.274619 0 0.805027 0.424374 0.269182 0 0.87283 0.447784 0.280202 0 0.0946945 0.43681 0.292074 0 0.0946945 0.43681 0.292074 0 0.0946945 0.43681 0.292074 0 0.101608 0.436224 0.294535 0 0.116548 0.437525 0.301959 0 0.135574 0.43671 0.303538 0 0.156041 0.435476 0.300258 0 0.17335 0.436484 0.306086 0 0.199995 0.438611 0.314155 0 0.22971 0.439034 0.314913 0 0.247109 0.439757 0.313033 0 0.25892 0.44167 0.31003 0 0.280882 0.44414 0.307477 0 0.30658 0.443472 0.309009 0 0.329467 0.441621 0.309631 0 0.34704 0.44151 0.309459 0 0.362479 0.441049 0.307326 0 0.379252 0.440883 0.306929 0 0.392818 0.440778 0.307022 0 0.409884 0.440688 0.307375 0 0.425049 0.44027 0.309283 0 0.44092 0.44002 0.309783 0 0.458872 0.439871 0.307946 0 0.481842 0.439704 0.306047 0 0.510057 0.439622 0.303297 0 0.532504 0.441791 0.304793 0 0.560019 0.441798 0.30524 0 0.574665 0.447314 0.304213 0 0.676511 0.44453 0.296537 0 0.751485 0.455892 0.276065 0 0.80031 0.462987 0.26066 0 0.863695 0.456766 0.276119 0 0.0936545 0.456046 0.292157 0 0.0936545 0.456046 0.292157 0 0.0936545 0.456046 0.292157 0 0.100873 0.455428 0.294528 0 0.117943 0.455412 0.3019 0 0.134258 0.456043 0.306384 0 0.15399 0.455259 0.301162 0 0.175713 0.454423 0.303188 0 0.199543 0.45895 0.31293 0 0.228634 0.458946 0.314641 0 0.247963 0.4579 0.314672 0 0.261022 0.45906 0.311676 0 0.281892 0.461087 0.308415 0 0.30485 0.461008 0.307918 0 0.327329 0.459008 0.308327 0 0.34689 0.457988 0.309335 0 0.362143 0.457708 0.307725 0 0.379384 0.457505 0.306677 0 0.392571 0.45746 0.307314 0 0.410137 0.45763 0.307498 0 0.42486 0.458432 0.308722 0 0.441307 0.458748 0.309421 0 0.459352 0.459776 0.307682 0 0.481786 0.460229 0.306276 0 0.510256 0.460516 0.303887 0 0.532109 0.462295 0.303577 0 0.563321 0.460668 0.304757 0 0.57861 0.466631 0.303656 0 0.67098 0.466992 0.293396 0 0.758938 0.484624 0.277433 0 0.792626 0.479969 0.256023 0 0.849805 0.461846 0.271076 0 0.0934786 0.477475 0.292213 0 0.0934786 0.477475 0.292213 0 0.0934786 0.477475 0.292213 0 0.0999752 0.477514 0.294752 0 0.118908 0.476265 0.301493 0 0.134636 0.478132 0.307675 0 0.15149 0.477587 0.303817 0 0.175708 0.475889 0.302604 0 0.201179 0.478735 0.311936 0 0.228405 0.478785 0.313361 0 0.245889 0.477735 0.313825 0 0.262406 0.476205 0.312963 0 0.283313 0.47875 0.309708 0 0.304494 0.479912 0.307637 0 0.325422 0.479884 0.307138 0 0.346812 0.479071 0.307741 0 0.361387 0.478956 0.307118 0 0.379881 0.478548 0.306471 0 0.393155 0.479045 0.307388 0 0.410607 0.479539 0.308146 0 0.426276 0.480618 0.308883 0 0.44233 0.482018 0.309192 0 0.460225 0.483157 0.306614 0 0.481827 0.483985 0.306205 0 0.510383 0.484175 0.304272 0 0.534781 0.485434 0.302044 0 0.561976 0.484896 0.303168 0 0.582584 0.487267 0.302781 0 0.672486 0.495897 0.292488 0 0.757838 0.490082 0.280226 0 0.780606 0.484748 0.253474 0 0.848626 0.46251 0.276825 0 0.0948423 0.502132 0.29198 0 0.0948423 0.502132 0.29198 0 0.0948423 0.502132 0.29198 0 0.100524 0.502713 0.294621 0 0.118142 0.502171 0.30183 0 0.135962 0.501638 0.307991 0 0.148869 0.501736 0.308564 0 0.172579 0.499825 0.303151 0 0.20261 0.499231 0.31007 0 0.229008 0.50067 0.312439 0 0.244129 0.502067 0.312066 0 0.260332 0.501513 0.311099 0 0.2867 0.50204 0.310932 0 0.305119 0.505734 0.308205 0 0.325075 0.50615 0.306924 0 0.34652 0.506201 0.306428 0 0.361438 0.506308 0.305036 0 0.379449 0.506119 0.305405 0 0.39449 0.506093 0.307096 0 0.411684 0.507515 0.308578 0 0.428185 0.508331 0.309141 0 0.444372 0.509944 0.309314 0 0.461887 0.511555 0.305674 0 0.481616 0.511685 0.305392 0 0.51016 0.509737 0.304426 0 0.535793 0.508458 0.302061 0 0.55791 0.508216 0.302775 0 0.586633 0.510604 0.302362 0 0.670836 0.508278 0.296888 0 0.755447 0.496104 0.283321 0 0.777699 0.48948 0.255017 0 0.845837 0.463745 0.282216 0 0.0942214 0.526679 0.291589 0 0.0942214 0.526679 0.291589 0 0.0942214 0.526679 0.291589 0 0.100815 0.526064 0.293623 0 0.116583 0.526424 0.301351 0 0.136889 0.524467 0.307069 0 0.148649 0.525802 0.309435 0 0.169196 0.526313 0.304553 0 0.206229 0.525321 0.305189 0 0.231141 0.529025 0.311139 0 0.246961 0.530711 0.311851 0 0.259716 0.53221 0.309775 0 0.288278 0.531159 0.309451 0 0.30848 0.533089 0.309895 0 0.326339 0.535065 0.306839 0 0.346775 0.535843 0.306747 0 0.363397 0.535859 0.304533 0 0.378821 0.536954 0.303392 0 0.39372 0.536277 0.305434 0 0.412959 0.535066 0.308516 0 0.428392 0.534769 0.309882 0 0.445187 0.534255 0.310062 0 0.462393 0.534354 0.3071 0 0.480388 0.531997 0.305471 0 0.5071 0.527069 0.306354 0 0.533607 0.52356 0.305983 0 0.555278 0.523072 0.304832 0 0.587013 0.520296 0.306773 0 0.667901 0.521758 0.298059 0 0.748329 0.500855 0.286716 0 0.775019 0.493844 0.256419 0 0.825982 0.475066 0.271607 0 0.0884437 0.555409 0.298985 0 0.0884437 0.555409 0.298985 0 0.0884437 0.555409 0.298985 0 0.0996654 0.554932 0.293681 0 0.11753 0.554938 0.300475 0 0.136232 0.555959 0.307248 0 0.153354 0.555584 0.306135 0 0.169045 0.55797 0.307213 0 0.20759 0.556826 0.302249 0 0.233533 0.558783 0.307812 0 0.249344 0.55964 0.311663 0 0.261257 0.560555 0.309991 0 0.28762 0.560337 0.307743 0 0.310529 0.560016 0.309571 0 0.327875 0.560802 0.309338 0 0.346934 0.559871 0.308667 0 0.362351 0.55697 0.307246 0 0.378314 0.554353 0.306176 0 0.390519 0.552337 0.306311 0 0.408845 0.549082 0.309487 0 0.42565 0.546567 0.313074 0 0.442565 0.543788 0.315006 0 0.459484 0.540686 0.313242 0 0.47806 0.539905 0.310495 0 0.505152 0.545736 0.30932 0 0.53334 0.545308 0.307824 0 0.557552 0.545989 0.303908 0 0.589164 0.542149 0.304518 0 0.666682 0.526832 0.296105 0 0.739223 0.504236 0.279686 0 0.771866 0.495007 0.256259 0 0.818057 0.563113 0.252231 0 0.0947649 0.585893 0.291016 0 0.0947649 0.585893 0.291016 0 0.0947649 0.585893 0.291016 0 0.0998039 0.586757 0.293741 0 0.11778 0.586047 0.300591 0 0.135975 0.586494 0.307364 0 0.151267 0.585795 0.308917 0 0.172369 0.585715 0.305791 0 0.205223 0.584554 0.30434 0 0.234852 0.579873 0.305241 0 0.249429 0.578804 0.310382 0 0.261024 0.577717 0.312119 0 0.28445 0.574597 0.311529 0 0.307729 0.571238 0.311884 0 0.32424 0.569118 0.313247 0 0.345434 0.565824 0.315155 0 0.360394 0.566168 0.313446 0 0.377123 0.56701 0.310367 0 0.389334 0.567739 0.308775 0 0.406284 0.568863 0.31013 0 0.423768 0.569412 0.311614 0 0.441793 0.568124 0.314639 0 0.461408 0.567692 0.312094 0 0.48124 0.56999 0.308509 0 0.506224 0.573438 0.304958 0 0.53242 0.576319 0.3033 0 0.556109 0.571637 0.300317 0 0.577498 0.563069 0.297518 0 0.677061 0.566287 0.296605 0 0.725707 0.543213 0.269554 0 0.790197 0.563501 0.262197 0 0.818471 0.576577 0.259112 0 0.0991616 0.654557 0.288395 0 0.0991616 0.654557 0.288395 0 0.0991616 0.654557 0.288395 0 0.104035 0.655807 0.290844 0 0.117423 0.656305 0.298477 0 0.131773 0.658695 0.305696 0 0.145119 0.661535 0.30889 0 0.17097 0.6736 0.304783 0 0.209864 0.684964 0.305001 0 0.234232 0.680235 0.302269 0 0.256945 0.674205 0.301156 0 0.272597 0.671136 0.301132 0 0.290669 0.670038 0.308197 0 0.309319 0.667422 0.309942 0 0.329371 0.663035 0.309907 0 0.345152 0.658556 0.310626 0 0.355404 0.654559 0.310801 0 0.372598 0.647936 0.310279 0 0.388682 0.641705 0.311304 0 0.405108 0.63525 0.313628 0 0.417256 0.630228 0.315656 0 0.430156 0.625186 0.315362 0 0.454958 0.646632 0.312709 0 0.480526 0.660085 0.308567 0 0.50584 0.656884 0.305283 0 0.528211 0.650386 0.307495 0 0.548229 0.643884 0.306918 0 0.570422 0.633948 0.302777 0 0.660312 0.622787 0.291801 0 0.738868 0.608775 0.274423 0 0.786219 0.59788 0.267067 0 0.811367 0.605544 0.259057 0 0.096125 0.749232 0.28457 0 0.096125 0.749232 0.28457 0 0.096125 0.749232 0.28457 0 0.101159 0.747129 0.286229 0 0.118681 0.741139 0.291945 0 0.135836 0.750508 0.299583 0 0.149244 0.752641 0.300948 0 0.161604 0.748946 0.30539 0 0.194573 0.740363 0.306892 0 0.216865 0.735241 0.30668 0 0.237384 0.73196 0.299779 0 0.250947 0.72984 0.301478 0 0.28327 0.723305 0.298038 0 0.308295 0.718384 0.297777 0 0.320387 0.71656 0.302472 0 0.335243 0.713497 0.304038 0 0.348709 0.71025 0.303014 0 0.361628 0.707107 0.300999 0 0.371699 0.704554 0.299381 0 0.385082 0.700905 0.299396 0 0.398989 0.696905 0.300637 0 0.414199 0.692713 0.301043 0 0.427638 0.689232 0.298732 0 0.444575 0.685054 0.294451 0 0.475361 0.677475 0.298684 0 0.507657 0.691743 0.302486 0 0.542074 0.72785 0.304913 0 0.583085 0.771847 0.306974 0 0.681682 0.764036 0.303184 0 0.707435 0.758389 0.270925 0 0.816328 0.729577 0.278188 0 0.833173 0.735047 0.274645 0 0.0679443 0.81335 0.309552 0 0.0679443 0.81335 0.309552 0 0.0679443 0.81335 0.309552 0 0.0745168 0.819454 0.312867 0 0.105744 0.834166 0.310054 0 0.137608 0.82483 0.300252 0 0.162626 0.823491 0.287803 0 0.177719 0.838825 0.297929 0 0.211073 0.86101 0.312565 0 0.225159 0.86148 0.319241 0 0.242619 0.849279 0.309504 0 0.254305 0.843931 0.310955 0 0.276418 0.829135 0.304739 0 0.292598 0.817538 0.304669 0 0.311454 0.801982 0.297556 0 0.326557 0.791219 0.295901 0 0.338082 0.79872 0.301109 0 0.358531 0.825311 0.307201 0 0.377341 0.823833 0.30827 0 0.398303 0.822137 0.311389 0 0.415687 0.829315 0.312427 0 0.43479 0.832755 0.311935 0 0.454151 0.830552 0.310717 0 0.47497 0.828837 0.306229 0 0.502172 0.838557 0.305334 0 0.529164 0.839501 0.304525 0 0.555031 0.840032 0.304837 0 0.58102 0.83652 0.304875 0 0.689027 0.830691 0.300172 0 0.715223 0.847302 0.267527 0 0.814784 0.846781 0.268708 0 0.860728 0.848955 0.277597 0 0.0643205 0.914663 0.328076 0 0.0643205 0.914663 0.328076 0 0.0643205 0.914663 0.328076 0 0.0705318 0.91332 0.326668 0 0.0945213 0.909254 0.320834 0 0.128785 0.901908 0.310308 0 0.145397 0.894671 0.310701 0 0.168748 0.88625 0.300796 0 0.196312 0.875732 0.303997 0 0.211145 0.869448 0.310662 0 0.218256 0.866356 0.31418 0 0.228895 0.862234 0.313864 0 0.264947 0.868753 0.308276 0 0.295831 0.877896 0.297795 0 0.317093 0.884373 0.300975 0 0.345766 0.888167 0.298745 0 0.365114 0.890586 0.296344 0 0.381101 0.897 0.298851 0 0.392509 0.902826 0.302606 0 0.411289 0.90589 0.306525 0 0.425337 0.906108 0.307188 0 0.438406 0.90626 0.308858 0 0.455197 0.905476 0.30819 0 0.478381 0.903608 0.30681 0 0.500075 0.89843 0.304332 0 0.521067 0.892194 0.30278 0 0.544495 0.885079 0.30163 0 0.575328 0.890307 0.301211 0 0.681759 0.898027 0.299621 0 0.725962 0.899713 0.269488 0 0.813549 0.893884 0.269168 0 0.864487 0.876761 0.275903 0 0.094392 0.0970007 0.30914 0 0.094392 0.0970007 0.30914 0 0.094392 0.0970007 0.30914 0 0.101623 0.0981616 0.309859 0 0.121307 0.0989855 0.31515 0 0.141736 0.100291 0.324592 0 0.151697 0.102023 0.328316 0 0.165744 0.103264 0.333915 0 0.204705 0.0993072 0.331972 0 0.223438 0.0983648 0.331543 0 0.23864 0.0972917 0.328645 0 0.257237 0.0976529 0.329175 0 0.285267 0.098057 0.331606 0 0.307175 0.097655 0.330781 0 0.323913 0.0976588 0.330939 0 0.344381 0.0964921 0.330014 0 0.360324 0.0948107 0.32967 0 0.380502 0.0928732 0.326637 0 0.39321 0.0933236 0.32655 0 0.414865 0.0934998 0.328519 0 0.434844 0.0931559 0.331447 0 0.444867 0.0967211 0.334114 0 0.458012 0.0996184 0.336518 0 0.476196 0.10334 0.328986 0 0.503906 0.102321 0.319934 0 0.524329 0.0994811 0.322666 0 0.567878 0.0892469 0.330413 0 0.581075 0.0937067 0.327357 0 0.693327 0.0967006 0.325759 0 0.752398 0.101058 0.298228 0 0.783489 0.111714 0.267875 0 0.87807 0.103059 0.300464 0 0.094392 0.0970007 0.30914 0 0.094392 0.0970007 0.30914 0 0.094392 0.0970007 0.30914 0 0.101623 0.0981616 0.309859 0 0.121307 0.0989855 0.31515 0 0.141736 0.100291 0.324592 0 0.151697 0.102023 0.328316 0 0.165744 0.103264 0.333915 0 0.204705 0.0993072 0.331972 0 0.223438 0.0983648 0.331543 0 0.23864 0.0972917 0.328645 0 0.257237 0.0976529 0.329175 0 0.285267 0.098057 0.331606 0 0.307175 0.097655 0.330781 0 0.323913 0.0976588 0.330939 0 0.344381 0.0964921 0.330014 0 0.360324 0.0948107 0.32967 0 0.380502 0.0928732 0.326637 0 0.39321 0.0933236 0.32655 0 0.414865 0.0934998 0.328519 0 0.434844 0.0931559 0.331447 0 0.444867 0.0967211 0.334114 0 0.458012 0.0996184 0.336518 0 0.476196 0.10334 0.328986 0 0.503906 0.102321 0.319934 0 0.524329 0.0994811 0.322666 0 0.567878 0.0892469 0.330413 0 0.581075 0.0937067 0.327357 0 0.693327 0.0967006 0.325759 0 0.752398 0.101058 0.298228 0 0.783489 0.111714 0.267875 0 0.87807 0.103059 0.300464 0 0.094392 0.0970007 0.30914 0 0.094392 0.0970007 0.30914 0 0.094392 0.0970007 0.30914 0 0.101623 0.0981616 0.309859 0 0.121307 0.0989855 0.31515 0 0.141736 0.100291 0.324592 0 0.151697 0.102023 0.328316 0 0.165744 0.103264 0.333915 0 0.204705 0.0993072 0.331972 0 0.223438 0.0983648 0.331543 0 0.23864 0.0972917 0.328645 0 0.257237 0.0976529 0.329175 0 0.285267 0.098057 0.331606 0 0.307175 0.097655 0.330781 0 0.323913 0.0976588 0.330939 0 0.344381 0.0964921 0.330014 0 0.360324 0.0948107 0.32967 0 0.380502 0.0928732 0.326637 0 0.39321 0.0933236 0.32655 0 0.414865 0.0934998 0.328519 0 0.434844 0.093156 0.331447 0 0.444867 0.0967212 0.334114 0 0.458012 0.0996184 0.336518 0 0.476196 0.10334 0.328986 0 0.503906 0.102321 0.319934 0 0.524329 0.0994811 0.322666 0 0.567878 0.0892469 0.330413 0 0.581075 0.0937067 0.327357 0 0.693327 0.0967006 0.325759 0 0.752398 0.101058 0.298228 0 0.783489 0.111714 0.267875 0 0.87807 0.103059 0.300464 0 0.0950907 0.106668 0.310174 0 0.0950907 0.106668 0.310174 0 0.0950907 0.106668 0.310174 0 0.102648 0.108002 0.310783 0 0.121185 0.109338 0.314987 0 0.142574 0.110037 0.324893 0 0.152754 0.112044 0.328758 0 0.164553 0.111932 0.333162 0 0.203937 0.107337 0.33179 0 0.222678 0.105466 0.331176 0 0.239001 0.105804 0.328288 0 0.257297 0.106153 0.329117 0 0.285122 0.105116 0.331231 0 0.307043 0.104287 0.330508 0 0.323763 0.104202 0.330676 0 0.344142 0.103873 0.330066 0 0.359453 0.103387 0.329919 0 0.37999 0.102557 0.327289 0 0.394416 0.103592 0.326214 0 0.413497 0.104816 0.328117 0 0.436605 0.103299 0.331419 0 0.447011 0.106754 0.33362 0 0.457041 0.109224 0.335743 0 0.477359 0.108657 0.331242 0 0.501315 0.109856 0.319743 0 0.520957 0.107918 0.320256 0 0.563676 0.098426 0.328878 0 0.583063 0.101043 0.328513 0 0.687407 0.10706 0.322411 0 0.753642 0.109802 0.298634 0 0.784024 0.117119 0.269871 0 0.878981 0.107717 0.303092 0 0.0968314 0.124365 0.311486 0 0.0968314 0.124365 0.311486 0 0.0968314 0.124365 0.311486 0 0.104542 0.125635 0.312338 0 0.121588 0.129083 0.3151 0 0.1435 0.128 0.32489 0 0.152626 0.126908 0.328427 0 0.163179 0.125968 0.332036 0 0.200586 0.121668 0.330928 0 0.223404 0.121994 0.331074 0 0.239165 0.121491 0.327702 0 0.256445 0.120828 0.329147 0 0.284328 0.119762 0.330961 0 0.306797 0.119636 0.330313 0 0.324812 0.120933 0.330089 0 0.344691 0.122352 0.330143 0 0.360112 0.123635 0.330431 0 0.380084 0.124791 0.328784 0 0.396857 0.12491 0.325842 0 0.411713 0.126731 0.327583 0 0.436149 0.123351 0.330955 0 0.448909 0.122323 0.332408 0 0.457217 0.122991 0.333845 0 0.478346 0.120125 0.334402 0 0.50329 0.120784 0.324044 0 0.521818 0.12486 0.316977 0 0.554882 0.120138 0.32503 0 0.589414 0.118689 0.327809 0 0.660018 0.134028 0.30637 0 0.755607 0.125591 0.299448 0 0.785055 0.127681 0.274572 0 0.880873 0.121724 0.305032 0 0.0994739 0.14637 0.311101 0 0.0994739 0.14637 0.311101 0 0.0994739 0.14637 0.311101 0 0.108819 0.147333 0.311328 0 0.121845 0.147185 0.315132 0 0.141837 0.144159 0.323557 0 0.15148 0.142921 0.327383 0 0.162422 0.141663 0.331283 0 0.199036 0.139872 0.330715 0 0.223515 0.139402 0.331091 0 0.238682 0.139722 0.327917 0 0.256474 0.139747 0.328908 0 0.284446 0.14097 0.331023 0 0.307831 0.142115 0.33042 0 0.327122 0.143773 0.329221 0 0.346229 0.145707 0.330016 0 0.361358 0.145844 0.330513 0 0.380221 0.145864 0.329418 0 0.395652 0.145705 0.326897 0 0.41202 0.14438 0.326329 0 0.42842 0.141972 0.328957 0 0.449644 0.137969 0.331342 0 0.459108 0.138645 0.332351 0 0.47468 0.139301 0.331936 0 0.507223 0.13751 0.329013 0 0.526225 0.145265 0.31821 0 0.548864 0.147126 0.319686 0 0.596442 0.140028 0.326695 0 0.638134 0.158033 0.293411 0 0.756527 0.139298 0.301067 0 0.787708 0.144747 0.278636 0 0.880372 0.147093 0.302005 0 0.0998791 0.157907 0.310613 0 0.0998791 0.157907 0.310613 0 0.0998791 0.157907 0.310613 0 0.108067 0.157047 0.311368 0 0.12163 0.156226 0.314906 0 0.139553 0.153451 0.322373 0 0.150529 0.151163 0.326669 0 0.162517 0.151275 0.3312 0 0.198544 0.151256 0.330997 0 0.223914 0.150552 0.331251 0 0.23887 0.151709 0.328052 0 0.257208 0.152506 0.328694 0 0.284739 0.153783 0.331149 0 0.308501 0.154067 0.330286 0 0.32793 0.154864 0.32894 0 0.34644 0.155824 0.329572 0 0.361591 0.15578 0.330475 0 0.380244 0.155773 0.329492 0 0.394554 0.154644 0.327481 0 0.411642 0.152617 0.325503 0 0.424917 0.151858 0.328202 0 0.450427 0.147181 0.33082 0 0.460734 0.148704 0.332177 0 0.473848 0.151681 0.330969 0 0.507388 0.148389 0.330237 0 0.529181 0.15382 0.321174 0 0.545804 0.159154 0.317272 0 0.599438 0.149272 0.32612 0 0.639619 0.163698 0.294947 0 0.757879 0.148752 0.301034 0 0.789085 0.154096 0.278593 0 0.879056 0.155499 0.30098 0 0.098764 0.165413 0.310591 0 0.098764 0.165413 0.310591 0 0.098764 0.165413 0.310591 0 0.106934 0.164262 0.311548 0 0.121217 0.162679 0.31467 0 0.137931 0.16059 0.321684 0 0.150591 0.159808 0.326555 0 0.16291 0.160527 0.331301 0 0.198435 0.160661 0.331153 0 0.224724 0.161255 0.331498 0 0.239527 0.162534 0.328216 0 0.257765 0.163297 0.328534 0 0.284601 0.163391 0.331136 0 0.308907 0.163354 0.330156 0 0.328163 0.163665 0.329106 0 0.346715 0.164571 0.329073 0 0.361554 0.164647 0.330315 0 0.379286 0.163395 0.329444 0 0.393721 0.162653 0.327616 0 0.411839 0.161877 0.324877 0 0.423651 0.162357 0.327688 0 0.44754 0.158606 0.329974 0 0.462305 0.15948 0.332152 0 0.473906 0.163124 0.330096 0 0.505563 0.160484 0.330045 0 0.531905 0.161572 0.324048 0 0.542543 0.169146 0.315158 0 0.598252 0.15753 0.32559 0 0.643089 0.168916 0.29779 0 0.759541 0.15985 0.300932 0 0.790491 0.164256 0.278813 0 0.87796 0.165326 0.300254 0 0.0928696 0.192343 0.307963 0 0.0928696 0.192343 0.307963 0 0.0928696 0.192343 0.307963 0 0.101365 0.191153 0.311093 0 0.121516 0.19042 0.31462 0 0.13792 0.193542 0.321763 0 0.151485 0.193871 0.326878 0 0.164895 0.19471 0.331482 0 0.198333 0.19576 0.33006 0 0.224179 0.19461 0.331303 0 0.240642 0.194128 0.328052 0 0.257337 0.194901 0.327996 0 0.285262 0.195838 0.330817 0 0.31004 0.198181 0.329926 0 0.329582 0.198992 0.329119 0 0.348549 0.199005 0.32755 0 0.361175 0.199324 0.328508 0 0.378317 0.198664 0.3287 0 0.393082 0.197715 0.327374 0 0.411834 0.196747 0.326454 0 0.425992 0.195894 0.32665 0 0.439198 0.195711 0.328824 0 0.465697 0.190858 0.332615 0 0.478613 0.192301 0.330984 0 0.498867 0.191938 0.329088 0 0.534239 0.1864 0.327476 0 0.551161 0.190839 0.326583 0 0.577402 0.199829 0.317706 0 0.653109 0.204848 0.303298 0 0.764707 0.195354 0.303866 0 0.794779 0.199875 0.280983 0 0.879478 0.199654 0.302097 0 0.0981037 0.228928 0.299607 0 0.0981037 0.228928 0.299607 0 0.0981037 0.228928 0.299607 0 0.105275 0.229451 0.303872 0 0.120425 0.229447 0.312859 0 0.140506 0.228071 0.322444 0 0.150587 0.229063 0.32615 0 0.166356 0.228743 0.33184 0 0.198482 0.230459 0.329877 0 0.224603 0.231503 0.331687 0 0.242129 0.231572 0.329995 0 0.260313 0.232584 0.32987 0 0.28561 0.231165 0.331598 0 0.307515 0.22946 0.331491 0 0.327487 0.22805 0.329576 0 0.346761 0.228067 0.328611 0 0.360226 0.228366 0.328579 0 0.376342 0.22884 0.328706 0 0.391027 0.228871 0.327399 0 0.410595 0.228834 0.326197 0 0.426575 0.229743 0.326981 0 0.44167 0.231413 0.326191 0 0.457959 0.232906 0.329333 0 0.4851 0.231004 0.329384 0 0.498344 0.233859 0.327023 0 0.526811 0.230995 0.325099 0 0.556595 0.227649 0.324711 0 0.591469 0.225846 0.330134 0 0.657069 0.237738 0.308575 0 0.768428 0.224995 0.308227 0 0.798922 0.232885 0.28205 0 0.884988 0.228885 0.307071 0 0.0987355 0.243757 0.298977 0 0.0987355 0.243757 0.298977 0 0.0987355 0.243757 0.298977 0 0.106004 0.243893 0.303444 0 0.119461 0.244829 0.311331 0 0.140484 0.243639 0.322213 0 0.151217 0.243574 0.326668 0 0.16605 0.243378 0.332232 0 0.200426 0.245773 0.331909 0 0.225697 0.249951 0.332058 0 0.242285 0.25103 0.330096 0 0.260523 0.249717 0.329324 0 0.284621 0.248667 0.330663 0 0.306852 0.247343 0.329701 0 0.326778 0.247184 0.32844 0 0.347227 0.247288 0.327145 0 0.360869 0.247814 0.327349 0 0.376807 0.248307 0.326777 0 0.390973 0.248254 0.326533 0 0.410695 0.247795 0.325568 0 0.426769 0.247679 0.326865 0 0.442941 0.247782 0.326306 0 0.456925 0.248773 0.328358 0 0.48673 0.245931 0.329601 0 0.500806 0.248694 0.327557 0 0.52335 0.248461 0.325025 0 0.558302 0.243727 0.323116 0 0.591586 0.241976 0.331154 0 0.652948 0.254217 0.310927 0 0.770085 0.23937 0.309573 0 0.801174 0.247752 0.285018 0 0.886585 0.24404 0.308695 0 0.100578 0.253829 0.299509 0 0.100578 0.253829 0.299509 0 0.100578 0.253829 0.299509 0 0.10682 0.254609 0.303344 0 0.120323 0.255629 0.311506 0 0.139592 0.256333 0.321809 0 0.152249 0.258579 0.327101 0 0.166977 0.261571 0.332655 0 0.203965 0.2669 0.331445 0 0.22572 0.268569 0.331112 0 0.241064 0.268021 0.328773 0 0.259941 0.266207 0.328076 0 0.283695 0.264899 0.329655 0 0.30679 0.263805 0.328511 0 0.326112 0.263241 0.328064 0 0.347296 0.262246 0.326744 0 0.360812 0.262141 0.327399 0 0.3772 0.262432 0.326799 0 0.391085 0.26263 0.326283 0 0.410355 0.262251 0.325763 0 0.426706 0.261674 0.326981 0 0.443302 0.261463 0.326819 0 0.457539 0.262329 0.327757 0 0.486256 0.260401 0.329572 0 0.503267 0.262893 0.328127 0 0.521706 0.26451 0.325035 0 0.556175 0.260001 0.323041 0 0.586366 0.259234 0.327803 0 0.652611 0.267285 0.312235 0 0.771787 0.252209 0.310647 0 0.803288 0.260818 0.287244 0 0.885157 0.259533 0.307421 0 0.103886 0.275621 0.299737 0 0.103886 0.275621 0.299737 0 0.103886 0.275621 0.299737 0 0.1104 0.277985 0.303614 0 0.123606 0.282686 0.311304 0 0.141802 0.287847 0.320877 0 0.154568 0.289361 0.326721 0 0.167243 0.28996 0.331665 0 0.204622 0.287144 0.330669 0 0.224381 0.287034 0.330858 0 0.239675 0.285806 0.328707 0 0.257227 0.2849 0.327679 0 0.283293 0.284145 0.329824 0 0.305953 0.283552 0.328842 0 0.32534 0.283182 0.327858 0 0.346839 0.282808 0.326805 0 0.361173 0.282754 0.327341 0 0.377551 0.283222 0.32729 0 0.391258 0.283589 0.325961 0 0.409898 0.283756 0.326168 0 0.426281 0.283343 0.327527 0 0.443025 0.283275 0.327333 0 0.458813 0.284086 0.328075 0 0.483558 0.284227 0.328566 0 0.506804 0.285459 0.328561 0 0.519578 0.28913 0.324822 0 0.550659 0.285691 0.323738 0 0.580462 0.284245 0.322426 0 0.658505 0.287107 0.310167 0 0.773723 0.278331 0.308914 0 0.806895 0.283397 0.290446 0 0.878652 0.289431 0.302546 0 0.104058 0.307069 0.298974 0 0.104058 0.307069 0.298974 0 0.104058 0.307069 0.298974 0 0.113521 0.306211 0.304225 0 0.12833 0.307711 0.312046 0 0.144116 0.311377 0.3209 0 0.155354 0.31201 0.326423 0 0.166321 0.311708 0.330546 0 0.203375 0.30729 0.33092 0 0.225106 0.307654 0.331203 0 0.238825 0.307998 0.329309 0 0.256441 0.307881 0.328025 0 0.283344 0.307509 0.329626 0 0.305415 0.30758 0.329292 25546.7 0.325774 0.307606 0.327733 23833.8 0.346259 0.308051 0.3272 0 0.361713 0.307919 0.32726 0 0.378406 0.308339 0.327404 0 0.392026 0.308919 0.326045 0 0.410232 0.309347 0.325638 0 0.426109 0.309177 0.327494 0 0.443292 0.308752 0.327388 0 0.459841 0.308528 0.328425 0 0.481244 0.308726 0.325843 0 0.510473 0.307246 0.328047 0 0.523686 0.31138 0.325106 0 0.545492 0.31144 0.323378 0 0.582753 0.307499 0.320472 0 0.665967 0.311538 0.308964 0 0.773721 0.305603 0.305672 0 0.810485 0.305467 0.293556 0 0.870456 0.314483 0.296715 0 0.102434 0.326042 0.298062 0 0.102434 0.326042 0.298062 0 0.102434 0.326042 0.298061 0 0.111824 0.325233 0.303287 0 0.130636 0.324131 0.313263 0 0.145052 0.325585 0.320388 0 0.155528 0.326366 0.325757 0 0.166201 0.326991 0.330177 0 0.200929 0.324091 0.329658 0 0.226336 0.324036 0.331453 0 0.238256 0.325253 0.329902 0 0.256734 0.324949 0.328434 0 0.28413 0.325572 0.329736 0 0.305303 0.326385 0.329143 23854 0.325911 0.326343 0.327893 119741 0.346455 0.326678 0.327116 18769.5 0.361504 0.32636 0.327209 0 0.3787 0.32613 0.326925 0 0.392261 0.326252 0.325881 0 0.410218 0.326274 0.324922 0 0.425615 0.326247 0.327336 0 0.442837 0.32567 0.327374 0 0.459435 0.325337 0.328505 0 0.480637 0.325579 0.324921 0 0.513154 0.323356 0.32773 0 0.527093 0.327889 0.325476 0 0.543795 0.330559 0.323148 0 0.584045 0.325273 0.320436 0 0.669361 0.327082 0.311409 0 0.764129 0.329391 0.297657 0 0.811649 0.323825 0.293236 0 0.863884 0.332926 0.292129 0 0.102949 0.345878 0.298809 0 0.102949 0.345878 0.298809 0 0.102949 0.345879 0.298809 0 0.109379 0.345349 0.301989 0 0.127885 0.341687 0.312045 0 0.146822 0.340309 0.320312 0 0.156174 0.342472 0.325127 0 0.167286 0.344581 0.330166 0 0.197255 0.345681 0.327576 0 0.227294 0.343443 0.331163 0 0.239655 0.344505 0.330256 0 0.256884 0.345158 0.328593 0 0.28437 0.345442 0.330386 0 0.305568 0.346259 0.328788 0 0.32541 0.345854 0.327546 18792.2 0.346472 0.345348 0.32652 17546.1 0.360882 0.345314 0.327146 0 0.378676 0.344867 0.326458 0 0.392534 0.344835 0.325392 0 0.409931 0.345096 0.324514 0 0.425625 0.345147 0.326611 0 0.442329 0.345103 0.327337 0 0.459283 0.344959 0.328582 0 0.481324 0.345269 0.325563 0 0.511034 0.344141 0.326062 0 0.530778 0.346466 0.325313 0 0.542483 0.351202 0.323693 0 0.579553 0.347272 0.3215 0 0.674179 0.343958 0.316492 0 0.748481 0.354965 0.287474 0 0.811762 0.343189 0.291457 0 0.864112 0.351048 0.293448 0 0.10265 0.360091 0.299227 0 0.10265 0.360091 0.299227 0 0.10265 0.360091 0.299227 0 0.108559 0.359967 0.30207 0 0.125202 0.357451 0.310566 0 0.147745 0.353713 0.320671 0 0.158123 0.355763 0.325195 0 0.168382 0.358901 0.329945 0 0.195581 0.361407 0.326859 0 0.227075 0.359123 0.330376 0 0.240812 0.359258 0.329793 0 0.256621 0.359884 0.32865 0 0.284494 0.359759 0.330501 0 0.306124 0.360276 0.328886 0 0.324916 0.36043 0.327168 0 0.34628 0.359732 0.325932 0 0.360867 0.359736 0.326698 0 0.37862 0.35955 0.326521 0 0.392711 0.359672 0.32502 0 0.410152 0.360054 0.324385 0 0.42575 0.360137 0.326068 0 0.442096 0.360321 0.327355 0 0.459347 0.36005 0.328673 0 0.48175 0.360073 0.326364 0 0.509701 0.359694 0.324659 0 0.533129 0.360628 0.325237 0 0.544884 0.365082 0.323881 0 0.576274 0.363909 0.322403 0 0.678081 0.356943 0.319461 0 0.743345 0.369067 0.285701 0 0.812215 0.357824 0.290162 0 0.865882 0.364067 0.295331 0 0.102349 0.376283 0.299748 0 0.102349 0.376283 0.299748 0 0.102349 0.376283 0.299748 0 0.108282 0.376056 0.302632 0 0.122098 0.375078 0.309255 0 0.146493 0.371315 0.320099 0 0.160239 0.370487 0.32527 0 0.170175 0.373538 0.330252 0 0.195968 0.37688 0.327066 0 0.226579 0.375939 0.329277 0 0.241449 0.375784 0.328121 0 0.256359 0.37601 0.328628 0 0.284337 0.375427 0.330485 0 0.30695 0.375804 0.329265 0 0.324736 0.376747 0.327055 0 0.345813 0.376468 0.325699 0 0.360863 0.376111 0.326102 0 0.37819 0.375932 0.326675 0 0.392949 0.375752 0.324931 0 0.410399 0.37613 0.324318 0 0.425626 0.37634 0.325742 0 0.442272 0.376631 0.32713 0 0.45931 0.376796 0.328881 0 0.482365 0.376793 0.327017 0 0.508106 0.376593 0.323461 0 0.535692 0.376178 0.325073 0 0.548158 0.380459 0.324032 0 0.573239 0.382016 0.322782 0 0.679677 0.370577 0.317214 0 0.744813 0.382533 0.290234 0 0.813153 0.375217 0.289015 0 0.868575 0.378593 0.297361 0 0.102456 0.388369 0.299269 0 0.102456 0.388369 0.299269 0 0.102456 0.388369 0.299269 0 0.108433 0.388636 0.302874 0 0.121154 0.388981 0.309272 0 0.144516 0.385331 0.319019 0 0.159961 0.383115 0.324767 0 0.172063 0.384674 0.329537 0 0.19698 0.389628 0.327216 0 0.226752 0.389191 0.328896 0 0.241627 0.38958 0.326974 0 0.256556 0.389668 0.327368 0 0.284217 0.388882 0.330554 0 0.307785 0.388626 0.329749 0 0.324946 0.389544 0.327483 0 0.345338 0.389631 0.325637 0 0.360758 0.389167 0.325683 0 0.378014 0.389088 0.326617 0 0.393026 0.389085 0.325201 0 0.411008 0.38964 0.324369 0 0.42566 0.390417 0.325767 0 0.442571 0.390517 0.326736 0 0.459233 0.390736 0.329047 0 0.482249 0.390476 0.327389 0 0.505921 0.39102 0.323785 0 0.537657 0.388332 0.32479 0 0.550521 0.392088 0.323697 0 0.572851 0.394232 0.322687 0 0.678332 0.382832 0.316258 0 0.745759 0.393114 0.293635 0 0.806587 0.391722 0.283455 0 0.871045 0.39098 0.298697 0 0.102949 0.403011 0.298753 0 0.102949 0.403011 0.298753 0 0.102949 0.403011 0.298753 0 0.109053 0.403214 0.302428 0 0.120805 0.404082 0.309333 0 0.141476 0.402203 0.31754 0 0.158159 0.39986 0.323902 0 0.175342 0.399078 0.326883 0 0.198677 0.404811 0.327974 0 0.226287 0.405219 0.328729 0 0.241815 0.405479 0.326745 0 0.256927 0.405668 0.326116 0 0.284061 0.404242 0.33112 0 0.307924 0.403898 0.330135 0 0.325814 0.404897 0.328128 0 0.345575 0.405835 0.326185 0 0.360515 0.406216 0.325685 0 0.378189 0.406301 0.326211 0 0.393196 0.4063 0.325466 0 0.411696 0.406585 0.324389 0 0.426203 0.407373 0.325881 0 0.442877 0.407485 0.326186 0 0.459068 0.407126 0.328768 0 0.481731 0.405888 0.327678 0 0.505954 0.405451 0.324454 0 0.538542 0.402667 0.324126 0 0.553263 0.405825 0.323434 0 0.572383 0.408908 0.322429 0 0.676921 0.401168 0.315858 0 0.740271 0.411069 0.291494 0 0.800111 0.4101 0.278643 0 0.87644 0.413236 0.300281 0 0.102928 0.41788 0.297897 0 0.102928 0.41788 0.297897 0 0.102928 0.41788 0.297897 0 0.109748 0.417919 0.301983 0 0.121787 0.418543 0.309121 0 0.140307 0.418662 0.31745 0 0.156483 0.417044 0.323102 0 0.176968 0.41512 0.322749 0 0.201585 0.419039 0.328249 0 0.225537 0.421063 0.328561 0 0.242508 0.420937 0.327378 0 0.257575 0.422134 0.325145 0 0.282783 0.42207 0.330391 0 0.308071 0.421331 0.330446 0 0.32702 0.422272 0.328675 0 0.346225 0.423384 0.326792 0 0.360888 0.423889 0.326174 0 0.378358 0.424165 0.325712 0 0.392937 0.424022 0.325218 0 0.411916 0.423146 0.324353 0 0.426389 0.422923 0.325743 0 0.441922 0.422594 0.325891 0 0.45851 0.421906 0.327987 0 0.48104 0.420889 0.327707 0 0.506266 0.420721 0.325219 0 0.536687 0.419265 0.32262 0 0.556185 0.421909 0.323137 0 0.572188 0.427162 0.322092 0 0.674982 0.420937 0.315815 0 0.738116 0.430823 0.288825 0 0.803189 0.428924 0.280675 0 0.882328 0.442841 0.299629 0 0.101382 0.436681 0.2977 0 0.101382 0.436681 0.2977 0 0.101382 0.436681 0.2977 0 0.109752 0.436378 0.302123 0 0.123091 0.436813 0.308905 0 0.139476 0.438252 0.317437 0 0.155032 0.436981 0.323224 0 0.174659 0.435556 0.323746 0 0.205244 0.436265 0.327961 0 0.226492 0.440514 0.329428 0 0.243948 0.441162 0.327691 0 0.25909 0.44249 0.325771 0 0.281213 0.444175 0.328794 0 0.307631 0.442077 0.3305 0 0.328216 0.441559 0.329184 0 0.346443 0.441745 0.327361 0 0.360938 0.441479 0.326765 0 0.377819 0.441178 0.325993 0 0.392198 0.440919 0.324399 0 0.411065 0.440058 0.323944 0 0.426449 0.439599 0.32533 0 0.441363 0.43973 0.325636 0 0.458035 0.439231 0.326996 0 0.480489 0.439996 0.327645 0 0.507672 0.440349 0.325694 0 0.535158 0.44044 0.321129 0 0.559521 0.441267 0.323225 0 0.574174 0.446822 0.321677 0 0.669058 0.444667 0.313942 0 0.743359 0.453378 0.289553 0 0.809501 0.457739 0.284315 0 0.87728 0.450945 0.297378 0 0.0980604 0.456089 0.301612 0 0.0980604 0.456089 0.301612 0 0.0980604 0.456089 0.301612 0 0.108908 0.455702 0.302216 0 0.123484 0.45565 0.309338 0 0.139716 0.456801 0.316624 0 0.153933 0.456929 0.323365 0 0.173585 0.455435 0.325777 0 0.206897 0.455857 0.325039 0 0.228084 0.458918 0.330766 0 0.244573 0.459445 0.329151 0 0.260107 0.460471 0.326465 0 0.281482 0.461296 0.327902 0 0.305205 0.459554 0.329563 0 0.328139 0.457242 0.329079 0 0.346481 0.457725 0.327545 0 0.360822 0.457752 0.326955 0 0.377557 0.457577 0.326384 0 0.392113 0.457499 0.324088 0 0.410409 0.458077 0.32345 0 0.426429 0.458024 0.324734 0 0.442138 0.458607 0.325473 0 0.458345 0.45935 0.327047 0 0.4809 0.460096 0.327183 0 0.508249 0.460765 0.326052 0 0.532212 0.461905 0.321601 0 0.562821 0.460364 0.323067 0 0.578073 0.46573 0.321294 0 0.66635 0.466276 0.312457 0 0.751292 0.483648 0.290604 0 0.800982 0.477153 0.279234 0 0.867927 0.456404 0.295037 0 0.0984459 0.477363 0.301052 0 0.0984459 0.477363 0.301052 0 0.0984459 0.477363 0.301052 0 0.107019 0.477684 0.304874 0 0.124097 0.477877 0.310377 0 0.141005 0.477814 0.316361 0 0.153716 0.478621 0.322858 0 0.171726 0.477579 0.329092 0 0.207982 0.476199 0.32113 0 0.229024 0.477239 0.330031 0 0.244472 0.476902 0.330456 0 0.261501 0.477328 0.327471 0 0.282569 0.479177 0.327904 0 0.302604 0.479941 0.327662 0 0.326005 0.478398 0.327213 0 0.347294 0.477544 0.32765 0 0.36098 0.478317 0.327035 0 0.377915 0.478758 0.326826 0 0.392571 0.479041 0.32471 0 0.411107 0.479917 0.323191 0 0.42683 0.480966 0.324447 0 0.443462 0.481608 0.324791 0 0.458848 0.482789 0.326859 0 0.481771 0.483144 0.326463 0 0.508686 0.483989 0.325952 0 0.533166 0.485339 0.322327 0 0.563665 0.483518 0.321217 0 0.582035 0.48666 0.3209 0 0.667146 0.495974 0.31149 0 0.750484 0.492305 0.293168 0 0.785742 0.482928 0.274869 0 0.855085 0.461241 0.292572 0 0.101712 0.501934 0.296916 0 0.101712 0.501934 0.296916 0 0.101712 0.501934 0.296916 0 0.109604 0.502212 0.301637 0 0.124614 0.502038 0.310412 0 0.140849 0.501768 0.317105 0 0.153149 0.501075 0.321332 0 0.169558 0.500717 0.329044 0 0.207972 0.497297 0.319649 0 0.22975 0.498956 0.327071 0 0.242614 0.500658 0.329262 0 0.263355 0.499587 0.328585 0 0.28493 0.503655 0.328689 0 0.303115 0.506067 0.327349 0 0.323963 0.50607 0.325879 0 0.347535 0.504426 0.325616 0 0.361454 0.504261 0.32644 0 0.378668 0.504982 0.326904 0 0.393639 0.506076 0.325054 0 0.412861 0.507176 0.323255 0 0.428443 0.50868 0.324613 0 0.44476 0.510089 0.323952 0 0.460388 0.510862 0.325782 0 0.4822 0.511181 0.325612 0 0.508749 0.510333 0.325704 0 0.53393 0.509221 0.322667 0 0.55981 0.507212 0.319366 0 0.586077 0.510156 0.32096 0 0.665706 0.511123 0.314346 0 0.747689 0.49715 0.296941 0 0.770763 0.489746 0.270497 0 0.842327 0.465005 0.291932 0 0.0978112 0.526466 0.301069 0 0.0978112 0.526466 0.301069 0 0.0978112 0.526466 0.301069 0 0.108091 0.525921 0.301456 0 0.124528 0.524948 0.309164 0 0.140529 0.525623 0.317567 0 0.152577 0.525878 0.321522 0 0.169211 0.526101 0.327366 0 0.206908 0.524878 0.320698 0 0.23458 0.526282 0.323412 0 0.245832 0.529782 0.325297 0 0.261268 0.530397 0.326215 0 0.287987 0.530358 0.330091 0 0.306008 0.53396 0.327334 0 0.324199 0.535452 0.325534 0 0.346573 0.536121 0.323649 0 0.362627 0.53599 0.324015 0 0.379199 0.535882 0.325667 0 0.394858 0.535385 0.325118 0 0.41374 0.535391 0.323556 0 0.429515 0.534912 0.324597 0 0.44528 0.53492 0.32477 0 0.460603 0.534951 0.325273 0 0.48032 0.534604 0.325522 0 0.507591 0.530899 0.325782 0 0.533251 0.52911 0.324944 0 0.555453 0.528199 0.322854 0 0.587715 0.523768 0.324482 0 0.663581 0.521827 0.314348 0 0.7424 0.502197 0.29959 0 0.768432 0.494954 0.271742 0 0.845793 0.469099 0.299944 0 0.0918244 0.555476 0.308917 0 0.0918244 0.555476 0.308917 0 0.0918244 0.555476 0.308917 0 0.102086 0.555411 0.309555 0 0.124026 0.555015 0.309171 0 0.142876 0.555106 0.317447 0 0.153633 0.556965 0.322627 0 0.169584 0.556922 0.326345 0 0.204854 0.557466 0.321881 0 0.239787 0.555542 0.318786 0 0.250919 0.558346 0.322288 0 0.26141 0.560913 0.324345 0 0.289505 0.558869 0.329417 0 0.309221 0.560173 0.329502 0 0.325357 0.562383 0.326177 0 0.346122 0.562388 0.32473 0 0.362191 0.560128 0.324007 0 0.377397 0.558013 0.325091 0 0.391773 0.555718 0.325287 0 0.411849 0.552095 0.32574 0 0.428025 0.548953 0.326582 0 0.44373 0.546228 0.328137 0 0.458431 0.544073 0.329592 0 0.476303 0.541192 0.329952 0 0.505428 0.543454 0.328786 0 0.531773 0.543793 0.327275 0 0.554695 0.544982 0.324356 0 0.590697 0.540453 0.32227 0 0.663709 0.529731 0.312073 0 0.736129 0.504653 0.292404 0 0.765008 0.49652 0.272248 0 0.875492 0.553827 0.301944 0 0.100099 0.585789 0.297983 0 0.100099 0.585789 0.297983 0 0.100099 0.585789 0.297983 0 0.107103 0.586269 0.303194 0 0.121479 0.587505 0.312964 0 0.143084 0.586343 0.317372 0 0.156035 0.586243 0.322743 0 0.169758 0.587567 0.327792 0 0.201777 0.586816 0.324122 0 0.23604 0.582664 0.320715 0 0.254516 0.579624 0.319812 0 0.263775 0.579999 0.323804 0 0.286139 0.578013 0.329632 0 0.308307 0.574717 0.332754 0 0.324697 0.572495 0.331883 0 0.343751 0.568867 0.330545 0 0.358476 0.567388 0.329072 0 0.375147 0.567327 0.328686 0 0.387369 0.567944 0.327672 0 0.407467 0.566706 0.326804 0 0.426299 0.566684 0.327544 0 0.443708 0.566113 0.328537 0 0.459504 0.566568 0.329312 0 0.479027 0.567446 0.328039 0 0.505305 0.571624 0.32515 0 0.53202 0.573483 0.323828 0 0.555651 0.574599 0.321791 0 0.580516 0.564263 0.316339 0 0.67134 0.558921 0.311173 0 0.714173 0.531385 0.281531 0 0.785283 0.569616 0.275498 0 0.874288 0.558338 0.305326 0 0.105457 0.652799 0.292789 0 0.105457 0.652799 0.292789 0 0.105457 0.652799 0.292789 0 0.112709 0.65305 0.297184 0 0.126468 0.651936 0.305516 0 0.140748 0.652127 0.314208 0 0.15137 0.654296 0.320037 0 0.168704 0.662984 0.327127 0 0.206453 0.691362 0.3234 0 0.232987 0.684714 0.321748 0 0.253539 0.680449 0.321894 0 0.273367 0.674721 0.317273 0 0.295127 0.671623 0.320719 0 0.310937 0.670789 0.326576 0 0.329534 0.666949 0.328362 0 0.344644 0.660955 0.328051 0 0.355866 0.656503 0.327936 0 0.374014 0.649626 0.330446 0 0.388741 0.643977 0.331378 0 0.404581 0.637643 0.32816 0 0.417459 0.632409 0.32717 0 0.431425 0.626592 0.327773 0 0.453018 0.643172 0.329099 0 0.479058 0.65359 0.32911 0 0.504883 0.652152 0.3291 0 0.525012 0.644407 0.326485 0 0.545609 0.636348 0.324211 0 0.565707 0.627066 0.322258 0 0.657892 0.621683 0.309598 0 0.726313 0.611171 0.287068 0 0.78375 0.598441 0.279483 0 0.812449 0.625062 0.27329 0 0.101546 0.747563 0.288575 0 0.101546 0.747563 0.288575 0 0.101546 0.747563 0.288575 0 0.109088 0.744812 0.292507 0 0.125366 0.74027 0.300176 0 0.143899 0.744742 0.308273 0 0.154322 0.749325 0.31454 0 0.167499 0.745403 0.319717 0 0.191424 0.738596 0.325727 0 0.217101 0.734504 0.318828 0 0.230599 0.732465 0.320522 0 0.254289 0.728203 0.316273 0 0.278245 0.724133 0.321286 0 0.306194 0.718641 0.316479 0 0.324857 0.715402 0.312593 0 0.338107 0.712881 0.316931 0 0.348748 0.711168 0.319009 0 0.360699 0.708041 0.318538 0 0.370164 0.70554 0.317756 0 0.38476 0.700299 0.314618 0 0.399809 0.696101 0.312838 0 0.41375 0.692149 0.312837 0 0.427195 0.688379 0.312698 0 0.444824 0.683491 0.314934 0 0.474897 0.685458 0.317159 0 0.50918 0.700526 0.319439 0 0.54265 0.73236 0.322708 0 0.583481 0.768005 0.326916 0 0.680284 0.763527 0.319379 0 0.70125 0.759709 0.282812 0 0.81377 0.730416 0.294011 0 0.829184 0.732562 0.294433 0 0.0740871 0.815348 0.31315 0 0.0740871 0.815348 0.31315 0 0.0740871 0.815348 0.31315 0 0.0838243 0.823202 0.318314 0 0.105854 0.84076 0.329591 0 0.1364 0.8451 0.327464 0 0.158545 0.846002 0.321681 0 0.182124 0.84204 0.318218 0 0.216161 0.862799 0.323816 0 0.229108 0.858274 0.328826 0 0.238804 0.854905 0.332907 0 0.253896 0.843871 0.328439 0 0.273371 0.831513 0.328204 0 0.293049 0.814678 0.323037 0 0.305167 0.807231 0.324369 0 0.325052 0.79147 0.3152 0 0.344565 0.80201 0.313093 0 0.364331 0.824693 0.32031 0 0.380449 0.825394 0.324764 0 0.398919 0.82444 0.328641 0 0.416045 0.825586 0.328917 0 0.436295 0.829294 0.326746 0 0.45501 0.828024 0.326257 0 0.473324 0.826177 0.326604 0 0.500676 0.835881 0.323549 0 0.528676 0.839425 0.322389 0 0.556086 0.838424 0.32268 0 0.578089 0.837261 0.320201 0 0.685648 0.83167 0.320329 0 0.711982 0.845859 0.282002 0 0.815082 0.847151 0.284639 0 0.86013 0.852737 0.294658 0 0.0692212 0.913793 0.333897 0 0.0692212 0.913793 0.333897 0 0.0692212 0.913793 0.333897 0 0.0772135 0.912288 0.335816 0 0.0972802 0.907642 0.332378 0 0.117498 0.898684 0.336711 0 0.13517 0.892377 0.33443 0 0.161378 0.885597 0.325947 0 0.203656 0.870353 0.313717 0 0.214757 0.865355 0.32124 0 0.222941 0.862962 0.323395 0 0.230601 0.860911 0.327055 0 0.265731 0.868501 0.328848 0 0.292365 0.882248 0.322151 0 0.319515 0.885935 0.32031 0 0.34239 0.890913 0.3209 0 0.361662 0.893808 0.318761 0 0.382012 0.897713 0.314614 0 0.398771 0.900286 0.313586 0 0.414783 0.904428 0.31901 0 0.426374 0.905554 0.322109 0 0.439179 0.905831 0.322991 0 0.45554 0.905128 0.323803 0 0.47688 0.903233 0.325329 0 0.498145 0.897279 0.322047 0 0.520258 0.890701 0.320334 0 0.543363 0.884567 0.318385 0 0.576227 0.890196 0.318363 0 0.68153 0.898584 0.318394 0 0.721606 0.897489 0.284616 0 0.809708 0.894924 0.284116 0 0.863567 0.876769 0.294272 0 0.0941053 0.0982876 0.325892 0 0.0941053 0.0982876 0.325892 0 0.0941053 0.0982876 0.325892 0 0.109466 0.0988248 0.316909 0 0.132849 0.0984247 0.323637 0 0.149036 0.100793 0.332955 0 0.15845 0.10266 0.337895 0 0.172207 0.102422 0.34427 0 0.20042 0.0988547 0.353649 0 0.222518 0.0976894 0.345984 0 0.238773 0.0966387 0.345371 0 0.258251 0.0971627 0.348574 0 0.287263 0.0975677 0.34869 0 0.306106 0.097424 0.349944 0 0.323853 0.0968491 0.349099 0 0.34481 0.0952461 0.349731 0 0.361039 0.0940496 0.350067 0 0.379197 0.0931151 0.3502 0 0.391817 0.0933616 0.350612 0 0.418654 0.091833 0.351246 0 0.435401 0.0930818 0.352476 0 0.445755 0.0969354 0.35158 0 0.454002 0.104874 0.347239 0 0.470025 0.106995 0.343586 0 0.509032 0.0978538 0.345944 0 0.532503 0.0937303 0.351147 0 0.566243 0.0881636 0.348405 0 0.574697 0.0969435 0.342286 0 0.702634 0.0961283 0.345958 0 0.745544 0.1022 0.310211 0 0.780356 0.115548 0.286221 0 0.872824 0.107737 0.311396 0 0.0941053 0.0982876 0.325892 0 0.0941053 0.0982876 0.325892 0 0.0941053 0.0982876 0.325892 0 0.109466 0.0988248 0.316909 0 0.132849 0.0984247 0.323637 0 0.149036 0.100793 0.332955 0 0.15845 0.10266 0.337895 0 0.172207 0.102422 0.34427 0 0.20042 0.0988547 0.353649 0 0.222518 0.0976894 0.345984 0 0.238773 0.0966387 0.345371 0 0.258251 0.0971627 0.348574 0 0.287263 0.0975677 0.34869 0 0.306106 0.097424 0.349944 0 0.323853 0.0968491 0.349099 0 0.34481 0.0952461 0.349731 0 0.361039 0.0940496 0.350067 0 0.379197 0.0931151 0.3502 0 0.391817 0.0933616 0.350612 0 0.418654 0.091833 0.351246 0 0.435401 0.0930818 0.352476 0 0.445755 0.0969354 0.35158 0 0.454002 0.104874 0.347239 0 0.470025 0.106995 0.343586 0 0.509032 0.0978538 0.345944 0 0.532503 0.0937303 0.351147 0 0.566243 0.0881636 0.348405 0 0.574697 0.0969435 0.342286 0 0.702634 0.0961283 0.345958 0 0.745544 0.1022 0.310211 0 0.780356 0.115548 0.286221 0 0.872824 0.107737 0.311396 0 0.0941053 0.0982876 0.325892 0 0.0941053 0.0982876 0.325892 0 0.0941053 0.0982876 0.325892 0 0.109466 0.0988248 0.316909 0 0.132849 0.0984247 0.323637 0 0.149036 0.100793 0.332955 0 0.15845 0.10266 0.337895 0 0.172207 0.102422 0.34427 0 0.20042 0.0988547 0.353649 0 0.222518 0.0976895 0.345984 0 0.238773 0.0966388 0.345371 0 0.258251 0.0971627 0.348574 0 0.287263 0.0975677 0.34869 0 0.306106 0.097424 0.349944 0 0.323853 0.0968491 0.349099 0 0.34481 0.0952461 0.349731 0 0.361039 0.0940496 0.350067 0 0.379197 0.0931151 0.3502 0 0.391817 0.0933616 0.350612 0 0.418654 0.091833 0.351246 0 0.435401 0.0930818 0.352476 0 0.445755 0.0969354 0.35158 0 0.454002 0.104874 0.347239 0 0.470025 0.106995 0.343586 0 0.509032 0.0978538 0.345944 0 0.532503 0.0937303 0.351147 0 0.566243 0.0881636 0.348405 0 0.574697 0.0969435 0.342286 0 0.702634 0.0961283 0.345958 0 0.745544 0.1022 0.310211 0 0.780356 0.115548 0.286221 0 0.872824 0.107737 0.311396 0 0.0949538 0.108385 0.326848 0 0.0949538 0.108385 0.326848 0 0.0949538 0.108385 0.326847 0 0.109364 0.109326 0.317645 0 0.132996 0.108808 0.323611 0 0.149883 0.110652 0.333197 0 0.158912 0.111516 0.337944 0 0.171158 0.110856 0.343703 0 0.199614 0.10669 0.353248 0 0.221858 0.105035 0.34569 0 0.238897 0.105364 0.345264 0 0.258575 0.105678 0.348166 0 0.287009 0.104694 0.348629 0 0.306015 0.103982 0.349837 0 0.323348 0.103791 0.349174 0 0.344411 0.103256 0.349047 0 0.360442 0.102461 0.349685 0 0.379181 0.102681 0.349775 0 0.392615 0.103772 0.350438 0 0.417498 0.103067 0.350304 0 0.437189 0.103326 0.352411 0 0.447703 0.107085 0.351717 0 0.455325 0.1108 0.349446 0 0.469316 0.113549 0.34361 0 0.504929 0.106247 0.343389 0 0.528695 0.102633 0.348363 0 0.566701 0.0951959 0.349643 0 0.57686 0.104264 0.343092 0 0.701781 0.104695 0.345311 0 0.74681 0.1096 0.311843 0 0.781054 0.121762 0.287172 0 0.873709 0.112574 0.313164 0 0.0965879 0.125933 0.328897 0 0.0965879 0.125933 0.328897 0 0.0965879 0.125933 0.328897 0 0.111282 0.127298 0.318769 0 0.132973 0.128697 0.323325 0 0.150001 0.126573 0.332911 0 0.158678 0.125585 0.337376 0 0.169026 0.124849 0.342235 0 0.197843 0.121286 0.352102 0 0.222861 0.121959 0.345523 0 0.238709 0.121359 0.345045 0 0.258007 0.120232 0.347823 0 0.286223 0.119895 0.348673 0 0.306196 0.119683 0.349865 0 0.323807 0.120812 0.349658 0 0.34473 0.122027 0.348094 0 0.360704 0.123231 0.34895 0 0.380171 0.124166 0.349099 0 0.394461 0.124902 0.349721 0 0.414066 0.124953 0.34902 0 0.439477 0.121417 0.350942 0 0.449304 0.121612 0.351082 0 0.457189 0.122283 0.352362 0 0.471483 0.124257 0.348113 0 0.495203 0.12443 0.340103 0 0.52472 0.120936 0.343517 0 0.561788 0.115019 0.348704 0 0.581928 0.12146 0.344998 0 0.699737 0.122118 0.344276 0 0.749062 0.126462 0.312688 0 0.782019 0.132849 0.289556 0 0.87673 0.124891 0.317008 0 0.0997156 0.147327 0.329539 0 0.0997156 0.147327 0.329539 0 0.0997156 0.147327 0.329539 0 0.114497 0.147173 0.317761 0 0.128647 0.146294 0.322603 0 0.148917 0.142551 0.331962 0 0.157829 0.141376 0.336585 0 0.167989 0.140821 0.341117 0 0.197313 0.139944 0.351564 0 0.223136 0.139661 0.345773 0 0.238412 0.14011 0.345075 0 0.257442 0.139798 0.348406 0 0.286386 0.140981 0.348637 0 0.307116 0.14194 0.350004 0 0.325852 0.143656 0.349824 0 0.346709 0.145004 0.348207 0 0.361562 0.145573 0.3479 0 0.380342 0.145248 0.347755 0 0.394448 0.144952 0.348399 0 0.411114 0.143346 0.347408 0 0.433383 0.13933 0.347254 0 0.450136 0.1374 0.350122 0 0.458908 0.138017 0.351534 0 0.474793 0.138698 0.353719 0 0.495423 0.145023 0.343041 0 0.527485 0.144234 0.34013 0 0.556575 0.142552 0.345512 0 0.588568 0.141694 0.345584 0 0.690952 0.1436 0.341062 0 0.750043 0.140591 0.31463 0 0.785 0.152047 0.291193 0 0.881439 0.143687 0.320498 0 0.0983862 0.157164 0.330478 0 0.0983862 0.157164 0.330478 0 0.0983863 0.157164 0.330478 0 0.114249 0.156329 0.317589 0 0.12651 0.155873 0.323035 0 0.147624 0.151751 0.33111 0 0.157306 0.150665 0.336193 0 0.168442 0.151295 0.341125 0 0.197091 0.151417 0.351463 0 0.223512 0.150772 0.345992 0 0.238552 0.151868 0.345146 0 0.257814 0.152763 0.348611 0 0.286915 0.153622 0.348412 0 0.307628 0.153923 0.35006 0 0.326707 0.154793 0.349532 0 0.346793 0.155353 0.348286 0 0.361946 0.15559 0.347699 0 0.379566 0.155421 0.347162 0 0.393046 0.153647 0.347569 0 0.410265 0.151821 0.346823 0 0.429883 0.148939 0.345587 0 0.451151 0.146661 0.34961 0 0.460695 0.14897 0.351362 0 0.474758 0.150457 0.354175 0 0.497105 0.154557 0.346185 0 0.528833 0.155729 0.338524 0 0.554067 0.154487 0.343293 0 0.591476 0.150817 0.345096 0 0.676928 0.154301 0.334493 0 0.750612 0.14731 0.315323 0 0.786459 0.160013 0.292288 0 0.882465 0.153312 0.32034 0 0.0967994 0.164571 0.331693 0 0.0967994 0.164571 0.331693 0 0.0967994 0.164571 0.331693 0 0.11369 0.163045 0.317476 0 0.125765 0.162463 0.323432 0 0.146367 0.16004 0.330366 0 0.157522 0.15989 0.336223 0 0.168876 0.160322 0.341264 0 0.196984 0.160919 0.351467 0 0.22417 0.161289 0.346114 0 0.239266 0.162626 0.345312 0 0.257999 0.163181 0.348763 0 0.287013 0.163019 0.348058 0 0.307863 0.163386 0.350153 0 0.327087 0.163576 0.349407 0 0.346758 0.164202 0.34843 0 0.362261 0.164234 0.347575 0 0.378374 0.163033 0.347039 0 0.391974 0.161934 0.346866 0 0.410219 0.16107 0.346274 0 0.426711 0.160212 0.344685 0 0.452531 0.156615 0.348892 0 0.462583 0.159655 0.351125 0 0.47379 0.162222 0.353682 0 0.498608 0.163581 0.349175 0 0.52764 0.166018 0.337562 0 0.550826 0.165309 0.340741 0 0.594269 0.159324 0.34443 0 0.664222 0.164752 0.328446 0 0.752264 0.158414 0.315225 0 0.788026 0.168731 0.293694 0 0.882927 0.162762 0.320388 0 0.0939162 0.18994 0.329994 0 0.0939162 0.18994 0.329994 0 0.0939162 0.18994 0.329994 0 0.110899 0.18999 0.319225 0 0.127157 0.19142 0.324265 0 0.146106 0.193888 0.329878 0 0.157961 0.193982 0.335802 0 0.16988 0.194189 0.341169 0 0.197464 0.195232 0.351383 0 0.223477 0.194438 0.345321 0 0.240148 0.194088 0.344905 0 0.257964 0.19477 0.348598 0 0.287703 0.196014 0.347959 0 0.309322 0.198231 0.349877 0 0.328059 0.198339 0.34942 0 0.347367 0.19835 0.347799 0 0.361291 0.198397 0.347166 0 0.378441 0.198143 0.346047 0 0.391406 0.198618 0.346393 0 0.410215 0.198042 0.34461 0 0.425876 0.196894 0.343258 0 0.445655 0.194185 0.344012 0 0.467334 0.191475 0.349111 0 0.477645 0.19368 0.352353 0 0.497334 0.193151 0.353651 0 0.535033 0.18718 0.349969 0 0.548885 0.194659 0.338945 0 0.589884 0.192271 0.343623 0 0.667092 0.202784 0.331348 0 0.75766 0.196879 0.316425 0 0.792803 0.200798 0.298637 0 0.87969 0.20063 0.317458 0 0.10221 0.227748 0.314328 0 0.10221 0.227748 0.314328 0 0.10221 0.227748 0.314328 0 0.11425 0.229048 0.309779 0 0.131762 0.22738 0.320737 0 0.147192 0.22844 0.329841 0 0.157415 0.229127 0.335165 0 0.170675 0.229208 0.340833 0 0.197994 0.231978 0.350723 0 0.224167 0.232946 0.34642 0 0.242252 0.233196 0.345546 0 0.260341 0.233957 0.349848 0 0.287407 0.231938 0.348897 0 0.307246 0.230258 0.350055 0 0.325793 0.228064 0.350148 0 0.345753 0.226495 0.34875 0 0.3596 0.226864 0.347913 0 0.376578 0.227104 0.346724 0 0.390116 0.227112 0.346274 0 0.408707 0.227481 0.345959 0 0.425763 0.228701 0.343236 0 0.441015 0.230683 0.34176 0 0.46631 0.228895 0.343815 0 0.484488 0.23022 0.34922 0 0.496088 0.233942 0.350498 0 0.524156 0.231442 0.348118 0 0.559499 0.226126 0.349166 0 0.583202 0.231524 0.341067 0 0.677357 0.233574 0.339141 0 0.761925 0.225638 0.320267 0 0.796768 0.233309 0.299922 0 0.881773 0.233104 0.319149 0 0.107213 0.242754 0.307947 0 0.107213 0.242754 0.307947 0 0.107213 0.242754 0.307947 0 0.114384 0.24414 0.308894 0 0.131187 0.243711 0.319354 0 0.148679 0.244221 0.330279 0 0.157168 0.245146 0.335153 0 0.171108 0.245284 0.341274 0 0.19945 0.247782 0.35172 0 0.224415 0.248571 0.34805 0 0.242002 0.248679 0.345886 0 0.259956 0.24813 0.349803 0 0.286067 0.246871 0.348449 0 0.305913 0.245665 0.349554 0 0.325516 0.245525 0.348957 0 0.345824 0.245819 0.347707 0 0.360366 0.246179 0.346517 0 0.376412 0.247158 0.345535 0 0.390684 0.247687 0.344935 0 0.409607 0.248 0.344606 0 0.426565 0.247976 0.342927 0 0.442385 0.24838 0.34192 0 0.461459 0.247776 0.342322 0 0.487096 0.24512 0.347737 0 0.498737 0.248791 0.349817 0 0.52146 0.248879 0.348454 0 0.561159 0.242326 0.348483 0 0.5899 0.24453 0.347949 0 0.679182 0.247493 0.341065 0 0.763729 0.23976 0.321548 0 0.798995 0.250455 0.300329 0 0.884528 0.24736 0.322516 0 0.10654 0.253971 0.310061 0 0.10654 0.253971 0.310061 0 0.10654 0.253971 0.310061 0 0.115408 0.254791 0.309052 0 0.13019 0.255429 0.318239 0 0.150102 0.256404 0.330571 0 0.15885 0.258772 0.336 0 0.172068 0.260516 0.341978 0 0.201785 0.266577 0.352483 0 0.224652 0.267232 0.346653 0 0.240532 0.266139 0.344673 0 0.260031 0.264218 0.348556 0 0.285442 0.263835 0.347152 0 0.305736 0.263664 0.348411 0 0.325485 0.263044 0.347823 0 0.345994 0.262551 0.347158 0 0.360705 0.2623 0.346219 0 0.37679 0.262685 0.345316 0 0.390525 0.262559 0.34517 0 0.409681 0.262305 0.344365 0 0.426465 0.262097 0.343295 0 0.44308 0.262028 0.342501 0 0.458384 0.262895 0.342412 0 0.48946 0.258929 0.346576 0 0.501372 0.262682 0.349106 0 0.520854 0.264281 0.347968 0 0.558813 0.258974 0.346893 0 0.594241 0.256519 0.353035 0 0.6564 0.268638 0.328073 0 0.765425 0.252627 0.322613 0 0.800893 0.265276 0.300772 0 0.886992 0.260163 0.325531 0 0.103612 0.277386 0.316696 0 0.103612 0.277386 0.316696 0 0.103612 0.277386 0.316696 0 0.118462 0.279391 0.308842 0 0.133079 0.283289 0.31758 0 0.152888 0.2855 0.329629 0 0.162465 0.286509 0.335864 0 0.172937 0.289288 0.341378 0 0.202186 0.287487 0.352094 0 0.223404 0.287241 0.345407 0 0.238771 0.286037 0.343823 0 0.258299 0.284437 0.347676 0 0.284886 0.284265 0.347053 0 0.30488 0.283738 0.348382 0 0.32435 0.283082 0.348084 0 0.346258 0.282799 0.346955 0 0.360631 0.283153 0.34679 0 0.377436 0.283434 0.345445 0 0.390101 0.283855 0.345471 0 0.409482 0.283578 0.344469 0 0.426401 0.283561 0.343481 0 0.44321 0.283576 0.342984 0 0.459375 0.28444 0.343539 0 0.486898 0.282669 0.345461 0 0.505586 0.28431 0.347642 0 0.518847 0.287894 0.346133 0 0.549343 0.285291 0.344728 0 0.587517 0.281338 0.34976 0 0.652927 0.291472 0.329658 0 0.767622 0.276779 0.324994 0 0.804477 0.288613 0.303432 0 0.888223 0.286191 0.326866 0 0.101879 0.308058 0.324567 0 0.101879 0.308058 0.324567 0 0.101879 0.308058 0.324566 0 0.121828 0.306885 0.310181 0 0.136528 0.30863 0.317409 0 0.154082 0.310169 0.328103 0 0.163101 0.309785 0.334133 0 0.172434 0.309692 0.339841 0 0.201571 0.307341 0.351659 0 0.224159 0.307849 0.346304 0 0.238281 0.308453 0.344108 0 0.256545 0.308241 0.347348 0 0.285446 0.307529 0.347242 0 0.30474 0.30801 0.348742 0 0.323996 0.307934 0.348585 0 0.346205 0.307619 0.346871 0 0.36128 0.307831 0.346891 0 0.378113 0.308214 0.345861 0 0.390801 0.308814 0.345327 0 0.409268 0.308814 0.344784 0 0.426772 0.308517 0.342758 0 0.44344 0.308569 0.342864 0 0.460715 0.30858 0.343569 0 0.481776 0.308228 0.345054 0 0.510053 0.306501 0.344979 0 0.522084 0.310545 0.344506 0 0.545362 0.310708 0.343886 0 0.586604 0.306186 0.346714 0 0.659044 0.312882 0.327473 0 0.768919 0.304045 0.323771 0 0.808512 0.309979 0.30613 0 0.883142 0.309253 0.323449 0 0.0970855 0.326667 0.331696 0 0.0970855 0.326667 0.331696 0 0.0970855 0.326667 0.331696 0 0.122888 0.324144 0.311585 0 0.137793 0.324538 0.318306 0 0.154492 0.324115 0.327235 0 0.162945 0.324528 0.332568 0 0.172125 0.324905 0.338462 0 0.201803 0.323207 0.351607 0 0.225234 0.324425 0.347202 0 0.238271 0.32537 0.344524 0 0.255997 0.325831 0.347591 0 0.286207 0.325437 0.347024 0 0.304899 0.326235 0.34893 0 0.324065 0.326512 0.348829 18813.9 0.345846 0.326158 0.346769 17570.6 0.361591 0.32572 0.346249 0 0.378144 0.325853 0.345815 0 0.391213 0.325864 0.344962 0 0.408869 0.326005 0.34449 0 0.42643 0.32558 0.342365 0 0.443382 0.325382 0.342481 0 0.460876 0.325185 0.343454 0 0.479181 0.326019 0.344592 0 0.51322 0.322547 0.344407 0 0.525455 0.32745 0.343602 0 0.544402 0.329319 0.342753 0 0.58815 0.323424 0.344737 0 0.664565 0.32896 0.325619 0 0.762795 0.326779 0.319014 0 0.81095 0.32476 0.307772 0 0.87727 0.327546 0.31869 0 0.0951565 0.346087 0.330478 0 0.0951565 0.346087 0.330478 0 0.0951565 0.346087 0.330478 0 0.119487 0.343288 0.310297 0 0.13785 0.340392 0.31899 0 0.15331 0.341155 0.326791 0 0.163581 0.340627 0.331957 0 0.172754 0.342906 0.337068 0 0.19994 0.343461 0.350296 0 0.226509 0.343218 0.34762 0 0.239779 0.344634 0.345086 0 0.256974 0.345719 0.348103 0 0.286536 0.345376 0.346475 0 0.305014 0.345785 0.348544 0 0.323836 0.345496 0.348708 17573.8 0.345291 0.34514 0.346644 93058.4 0.361056 0.344708 0.345691 14816.2 0.378199 0.344544 0.345234 0 0.39131 0.344459 0.344825 0 0.408634 0.344846 0.344016 0 0.425995 0.344759 0.342344 0 0.443402 0.344641 0.341864 0 0.460805 0.344865 0.343409 0 0.480248 0.345555 0.344656 0 0.511946 0.343024 0.344942 0 0.52939 0.346337 0.343481 0 0.542824 0.350459 0.341298 0 0.579526 0.346986 0.340737 0 0.670043 0.348191 0.327132 0 0.746806 0.352728 0.308622 0 0.813379 0.340534 0.309474 0 0.87084 0.350169 0.313496 0 0.0939563 0.360598 0.328963 0 0.0939563 0.360598 0.328963 0 0.0939563 0.360598 0.328963 0 0.115358 0.359327 0.311079 0 0.136896 0.355155 0.31876 0 0.153781 0.355513 0.327512 0 0.163801 0.356196 0.332448 0 0.174448 0.35686 0.336828 0 0.197218 0.359897 0.348382 0 0.227431 0.357844 0.347728 0 0.240842 0.358993 0.345465 0 0.25749 0.359826 0.348282 0 0.285898 0.360022 0.346676 0 0.305404 0.360055 0.347947 0 0.323583 0.359905 0.348513 0 0.345025 0.359607 0.346582 14818.4 0.360587 0.359416 0.345603 13315.5 0.378477 0.359226 0.344687 0 0.391275 0.359489 0.344701 0 0.409158 0.359633 0.343703 0 0.42586 0.359855 0.34233 0 0.443529 0.359734 0.341449 0 0.460925 0.360103 0.343304 0 0.481152 0.360625 0.344784 0 0.50871 0.359794 0.345171 0 0.532252 0.360375 0.343234 0 0.543595 0.36528 0.340653 0 0.576164 0.363431 0.340609 0 0.672912 0.360513 0.331178 0 0.735275 0.371022 0.301232 0 0.814322 0.354083 0.309793 0 0.867453 0.36595 0.310732 0 0.0947731 0.375869 0.328621 0 0.0947731 0.375869 0.328621 0 0.0947731 0.375869 0.328621 0 0.109805 0.376429 0.31542 0 0.133651 0.373331 0.317252 0 0.154719 0.371666 0.328667 0 0.164208 0.372584 0.3332 0 0.175395 0.372335 0.336741 0 0.195156 0.37645 0.345989 0 0.22744 0.374449 0.346322 0 0.242005 0.374606 0.345784 0 0.257436 0.375771 0.34817 0 0.285509 0.375905 0.347272 0 0.305918 0.376159 0.347357 0 0.323235 0.376538 0.348189 0 0.344861 0.376116 0.346587 0 0.360235 0.375968 0.345681 0 0.378647 0.375633 0.344199 0 0.391567 0.375839 0.344209 0 0.409372 0.375963 0.343689 0 0.425878 0.376397 0.342131 0 0.443396 0.376536 0.341574 0 0.461529 0.376782 0.343036 0 0.482222 0.377202 0.34513 0 0.505248 0.377299 0.345246 0 0.535286 0.375463 0.34294 0 0.546748 0.380468 0.341004 0 0.573398 0.380993 0.340356 0 0.675735 0.374444 0.336881 0 0.733071 0.386798 0.301099 0 0.814762 0.371864 0.308919 0 0.869182 0.381277 0.312058 0 0.0942661 0.388788 0.329595 0 0.0942661 0.388788 0.329595 0 0.0942661 0.388788 0.329595 0 0.111668 0.388852 0.313896 0 0.131166 0.387855 0.316109 0 0.15455 0.384227 0.32928 0 0.164518 0.384467 0.333939 0 0.175467 0.385001 0.337281 0 0.196082 0.389051 0.345588 0 0.227505 0.388163 0.345107 0 0.242457 0.388211 0.344802 0 0.257678 0.389033 0.348304 0 0.285376 0.389327 0.347741 0 0.306769 0.389203 0.347676 0 0.323012 0.389997 0.347851 0 0.344501 0.389501 0.346465 0 0.360063 0.389135 0.345809 0 0.378387 0.389028 0.344367 0 0.392006 0.389264 0.343973 0 0.409705 0.389843 0.34392 0 0.425979 0.390339 0.342052 0 0.443463 0.390378 0.34178 0 0.461762 0.390412 0.342821 0 0.482164 0.390683 0.345244 0 0.502969 0.391514 0.34518 0 0.537268 0.38733 0.342731 0 0.549185 0.391922 0.341128 0 0.572754 0.393803 0.339602 0 0.678343 0.385461 0.338802 0 0.735072 0.396881 0.304097 0 0.815171 0.385988 0.308192 0 0.870628 0.393867 0.313074 0 0.0939603 0.40415 0.330495 0 0.0939603 0.40415 0.330495 0 0.0939603 0.40415 0.330495 0 0.113785 0.40284 0.311813 0 0.129419 0.403702 0.31517 0 0.15239 0.401033 0.32845 0 0.165231 0.399889 0.335216 0 0.176494 0.400367 0.338445 0 0.199244 0.404159 0.343449 0 0.226376 0.405374 0.343862 0 0.242301 0.404802 0.343539 0 0.258607 0.40451 0.348648 0 0.285265 0.40477 0.348177 0 0.306932 0.404542 0.34839 0 0.32379 0.405749 0.347979 0 0.344309 0.406197 0.346557 0 0.35995 0.406087 0.345985 0 0.378287 0.406073 0.344739 0 0.392752 0.406039 0.343808 0 0.410038 0.406813 0.344057 0 0.426588 0.407184 0.342006 0 0.443497 0.407324 0.341806 0 0.461483 0.406334 0.342493 0 0.481877 0.405674 0.344914 0 0.503179 0.405718 0.345214 0 0.53879 0.401857 0.343208 0 0.552097 0.405747 0.341379 0 0.572167 0.408962 0.339247 0 0.68192 0.399788 0.339017 0 0.737716 0.409799 0.308086 0 0.815499 0.403555 0.307415 0 0.874238 0.418028 0.315095 0 0.093979 0.419293 0.330651 0 0.093979 0.419293 0.330651 0 0.0939791 0.419293 0.330651 0 0.111959 0.418071 0.315191 0 0.129547 0.41864 0.314396 0 0.150553 0.418456 0.32729 0 0.164414 0.417325 0.335155 0 0.177281 0.416409 0.339688 0 0.202954 0.418657 0.340554 0 0.226027 0.421027 0.343773 0 0.242063 0.421144 0.342515 0 0.25865 0.4212 0.34775 0 0.285753 0.421463 0.348667 0 0.306846 0.421953 0.349194 0 0.325229 0.422758 0.348487 0 0.344366 0.424184 0.346614 0 0.359875 0.424174 0.345935 0 0.3781 0.424027 0.344843 0 0.392557 0.423338 0.343888 0 0.410433 0.423031 0.343621 0 0.426375 0.422673 0.341885 0 0.44266 0.422176 0.341151 0 0.460395 0.421371 0.342304 0 0.481809 0.420509 0.344226 0 0.503872 0.42095 0.345359 0 0.535174 0.419357 0.343222 0 0.555607 0.421704 0.340872 0 0.571886 0.426917 0.339416 0 0.669085 0.421322 0.33778 0 0.731947 0.430164 0.304073 0 0.813434 0.432193 0.303408 0 0.877549 0.43976 0.3172 0 0.0948571 0.437212 0.330458 0 0.0948571 0.437212 0.330458 0 0.0948571 0.437212 0.330458 0 0.106657 0.437633 0.32428 0 0.130606 0.437007 0.31407 0 0.150387 0.437348 0.326131 0 0.16377 0.437119 0.334266 0 0.176782 0.436078 0.340211 0 0.208211 0.435428 0.338447 0 0.227446 0.440577 0.3422 0 0.243534 0.441392 0.342955 0 0.259004 0.442684 0.346551 0 0.285987 0.442372 0.349141 0 0.307002 0.44251 0.349599 0 0.326349 0.441743 0.34932 0 0.344714 0.442139 0.347071 0 0.359266 0.441993 0.345854 0 0.377055 0.441215 0.344507 0 0.391306 0.440413 0.343622 0 0.410257 0.43946 0.343012 0 0.426045 0.439363 0.341866 0 0.441987 0.439172 0.340494 0 0.459515 0.439178 0.342039 0 0.482457 0.439437 0.343665 0 0.505403 0.440723 0.345712 0 0.53202 0.441215 0.343021 0 0.55952 0.440558 0.340214 0 0.572825 0.446807 0.33951 0 0.66327 0.444675 0.335991 0 0.734762 0.450316 0.303857 0 0.807586 0.469471 0.295918 0 0.876264 0.448899 0.31889 0 0.0947553 0.455688 0.330365 0 0.0947553 0.455688 0.330365 0 0.0947553 0.455688 0.330365 0 0.104851 0.456292 0.328621 0 0.131044 0.455907 0.314557 0 0.151036 0.455735 0.325557 0 0.16409 0.456229 0.333351 0 0.175949 0.457 0.339869 0 0.209553 0.454203 0.341947 0 0.229598 0.458856 0.341491 0 0.243302 0.460718 0.343052 0 0.259521 0.460695 0.346325 0 0.283788 0.460357 0.347874 0 0.306308 0.458313 0.349697 0 0.326094 0.457402 0.349773 0 0.345035 0.457662 0.347381 0 0.359163 0.457906 0.34638 0 0.376197 0.457799 0.344244 0 0.390294 0.45772 0.343161 0 0.40996 0.457276 0.342715 0 0.426517 0.457639 0.341392 0 0.442735 0.45855 0.340612 0 0.460004 0.459226 0.34176 0 0.482497 0.459432 0.343599 0 0.506433 0.460529 0.345544 0 0.529041 0.462484 0.342581 0 0.562693 0.459707 0.340371 0 0.576773 0.465634 0.339617 0 0.661829 0.465302 0.333434 0 0.742425 0.482511 0.305058 0 0.806572 0.47544 0.299707 0 0.871445 0.453654 0.31763 0 0.0937694 0.478637 0.331001 0 0.0937694 0.478637 0.331001 0 0.0937694 0.478636 0.331001 0 0.107599 0.477384 0.326343 0 0.131538 0.478409 0.315548 0 0.150095 0.478366 0.325592 0 0.164475 0.477674 0.33307 0 0.17659 0.478493 0.339088 0 0.207414 0.475235 0.344285 0 0.232531 0.475427 0.340039 0 0.244484 0.477161 0.342404 0 0.260139 0.478097 0.34641 0 0.283547 0.479315 0.346028 0 0.304705 0.478151 0.348349 0 0.3255 0.477214 0.349859 0 0.34604 0.477671 0.347654 0 0.359865 0.478435 0.346638 0 0.376732 0.479055 0.344949 0 0.390372 0.47943 0.343242 0 0.409556 0.479776 0.342448 0 0.427567 0.480101 0.340698 0 0.44385 0.481273 0.340766 0 0.460744 0.482471 0.341296 0 0.482586 0.482859 0.343335 0 0.507589 0.483001 0.344797 0 0.530776 0.485113 0.342792 0 0.563197 0.482885 0.34069 0 0.581065 0.486184 0.339141 0 0.662513 0.493816 0.330748 0 0.742861 0.494591 0.306718 0 0.803873 0.476694 0.304545 0 0.861918 0.459513 0.314906 0 0.0937877 0.503451 0.331084 0 0.0937877 0.503451 0.331084 0 0.0937877 0.503451 0.331084 0 0.103967 0.502329 0.33219 0 0.13263 0.501814 0.316025 0 0.147844 0.502353 0.325177 0 0.162254 0.500758 0.332751 0 0.176952 0.499056 0.338665 0 0.20117 0.498675 0.346575 0 0.235619 0.49557 0.336777 0 0.246722 0.497852 0.341858 0 0.262072 0.500978 0.34684 0 0.286021 0.504262 0.346033 0 0.302862 0.505946 0.346548 0 0.323851 0.504317 0.34819 0 0.347301 0.502833 0.348165 0 0.36097 0.503695 0.346514 0 0.37785 0.505071 0.345502 0 0.391738 0.506132 0.34386 0 0.410329 0.507464 0.342435 0 0.428514 0.508198 0.340028 0 0.445229 0.509127 0.340065 0 0.461811 0.510102 0.340898 0 0.48314 0.510582 0.342541 0 0.508275 0.509855 0.343769 0 0.532049 0.50957 0.342642 0 0.55748 0.508015 0.340055 0 0.586024 0.509358 0.338078 0 0.662415 0.513002 0.329904 0 0.739535 0.498251 0.311304 0 0.785515 0.483376 0.298496 0 0.847941 0.464216 0.312692 0 0.094268 0.525423 0.329708 0 0.094268 0.525423 0.329708 0 0.094268 0.525423 0.329708 0 0.101719 0.52688 0.33262 0 0.133605 0.524302 0.315407 0 0.148749 0.52563 0.324701 0 0.160261 0.526461 0.331516 0 0.1754 0.525877 0.338663 0 0.200019 0.527118 0.347029 0 0.235928 0.525338 0.337133 0 0.248316 0.526159 0.338103 0 0.265622 0.52699 0.345999 0 0.288351 0.531658 0.346168 0 0.304902 0.534143 0.346252 0 0.32262 0.53528 0.346307 0 0.346441 0.534395 0.345971 0 0.363024 0.533973 0.346363 0 0.379686 0.535162 0.345098 0 0.393237 0.535916 0.343956 0 0.411579 0.536059 0.342832 0 0.428735 0.535591 0.340309 0 0.445476 0.535208 0.339088 0 0.461619 0.534995 0.340579 0 0.482263 0.534051 0.342026 0 0.506943 0.534066 0.344019 0 0.533191 0.534344 0.34261 0 0.553669 0.531925 0.340838 0 0.588468 0.525503 0.33994 0 0.662737 0.520675 0.331805 0 0.735128 0.503245 0.313524 0 0.762533 0.494058 0.287756 0 0.84165 0.469981 0.313093 0 0.095928 0.551111 0.328247 0 0.095928 0.551111 0.328247 0 0.095928 0.551111 0.328247 0 0.102983 0.554098 0.331398 0 0.133279 0.554774 0.31549 0 0.150971 0.555183 0.324861 0 0.161517 0.556302 0.330656 0 0.175017 0.557275 0.337984 0 0.202123 0.556869 0.346471 0 0.23515 0.556928 0.33888 0 0.251457 0.557045 0.334685 0 0.267158 0.557726 0.339914 0 0.291599 0.559114 0.347555 0 0.30787 0.561719 0.346647 0 0.322892 0.563511 0.346882 0 0.344604 0.563046 0.344394 0 0.361706 0.561574 0.344657 0 0.3793 0.560265 0.344643 0 0.393053 0.558742 0.344585 0 0.410306 0.555892 0.344808 0 0.427241 0.552804 0.34299 0 0.444448 0.549397 0.341696 0 0.459577 0.546603 0.342897 0 0.478906 0.545852 0.345229 0 0.503874 0.543236 0.348254 0 0.530724 0.541828 0.345024 0 0.552529 0.543494 0.342758 0 0.589685 0.539676 0.341373 0 0.663109 0.532279 0.331372 0 0.732287 0.505175 0.308403 0 0.760006 0.497439 0.288468 0 0.879314 0.554984 0.318333 0 0.0990476 0.582158 0.325928 0 0.0990476 0.582158 0.325928 0 0.0990476 0.582158 0.325928 0 0.110249 0.584464 0.322224 0 0.128673 0.587527 0.322281 0 0.1517 0.587023 0.326019 0 0.162821 0.587364 0.331402 0 0.175686 0.587458 0.336815 0 0.201525 0.585764 0.345686 0 0.231466 0.584965 0.342585 0 0.251355 0.582772 0.337939 0 0.268566 0.581541 0.334625 0 0.293947 0.579268 0.346609 0 0.309441 0.57782 0.350715 0 0.322382 0.576312 0.350883 0 0.341126 0.573044 0.350104 0 0.357132 0.570033 0.348517 0 0.374442 0.567143 0.348428 0 0.388188 0.566348 0.347746 0 0.407164 0.564751 0.349505 0 0.424602 0.564787 0.346917 0 0.443263 0.564933 0.343831 0 0.460238 0.565475 0.34328 0 0.479151 0.566665 0.343515 0 0.504883 0.570097 0.345914 0 0.53138 0.569787 0.343328 0 0.554798 0.575009 0.341035 0 0.581446 0.566658 0.33807 0 0.658123 0.534598 0.328355 0 0.69963 0.517774 0.297444 0 0.782964 0.576752 0.289148 0 0.88362 0.553133 0.326051 0 0.104338 0.641608 0.319659 0 0.104338 0.641608 0.319659 0 0.104338 0.641608 0.319659 0 0.121968 0.645356 0.306326 0 0.13473 0.64981 0.311293 0 0.150535 0.648751 0.321559 0 0.162219 0.649072 0.328786 0 0.174739 0.652114 0.335995 0 0.201367 0.68359 0.343832 0 0.23333 0.689814 0.340271 0 0.253474 0.684334 0.339561 0 0.269271 0.682134 0.343472 0 0.297723 0.675199 0.33737 0 0.317927 0.67125 0.339606 0 0.33047 0.668443 0.346057 0 0.344889 0.663391 0.350121 0 0.357481 0.658695 0.350899 0 0.373554 0.652347 0.350385 0 0.386617 0.646891 0.347887 0 0.401099 0.641083 0.346958 0 0.415229 0.635468 0.345942 0 0.431807 0.62901 0.344522 0 0.454416 0.638332 0.344821 0 0.480959 0.647233 0.347764 0 0.500998 0.643643 0.349363 0 0.520297 0.636501 0.346331 0 0.541103 0.629073 0.342293 0 0.562679 0.61852 0.339922 0 0.655248 0.620636 0.32768 0 0.718908 0.611989 0.299325 0 0.786659 0.626011 0.301168 0 0.827511 0.659401 0.297784 0 0.0731792 0.75687 0.339987 0 0.0731792 0.75687 0.339987 0 0.0731792 0.75687 0.339987 0 0.0878181 0.751262 0.340232 0 0.134701 0.740429 0.305585 0 0.153367 0.743678 0.314978 0 0.164789 0.745435 0.322282 0 0.17643 0.741529 0.329788 0 0.194992 0.736013 0.338453 0 0.209785 0.734983 0.3425 0 0.231401 0.731597 0.335379 0 0.253016 0.72737 0.338888 0 0.281943 0.722703 0.336316 0 0.301943 0.723967 0.339309 0 0.322681 0.729912 0.338243 0 0.34558 0.718966 0.331585 0 0.354654 0.718194 0.333726 0 0.364378 0.718275 0.337262 0 0.372409 0.716655 0.337321 0 0.38513 0.711058 0.335377 0 0.398305 0.70479 0.332698 0 0.415262 0.696209 0.329109 0 0.429413 0.689328 0.328051 0 0.448242 0.69018 0.330122 0 0.475587 0.699461 0.336578 0 0.51003 0.708704 0.340646 0 0.543946 0.734143 0.342764 0 0.583395 0.76457 0.345221 0 0.678516 0.761822 0.33652 0 0.694217 0.760838 0.296529 0 0.812854 0.731014 0.310319 0 0.821895 0.732264 0.309934 0 0.045519 0.854452 0.387019 0 0.045519 0.854452 0.387019 0 0.045519 0.854452 0.387019 0 0.0704848 0.855259 0.367336 0 0.115858 0.842957 0.335681 0 0.139908 0.850517 0.345042 0 0.16125 0.854877 0.3399 0 0.184791 0.859929 0.339851 0 0.220157 0.857956 0.336705 0 0.233382 0.853649 0.341851 0 0.242493 0.850945 0.344844 0 0.253414 0.84747 0.350833 0 0.27488 0.829198 0.348822 0 0.289597 0.81848 0.347863 0 0.305687 0.804985 0.342063 0 0.320016 0.797385 0.342399 0 0.34226 0.815039 0.340997 0 0.368314 0.822579 0.337548 0 0.386505 0.826071 0.336719 0 0.401456 0.826136 0.344922 0 0.414541 0.82561 0.349494 0 0.434642 0.824403 0.347167 0 0.456479 0.825287 0.343194 0 0.474632 0.824441 0.342903 0 0.49804 0.828303 0.344989 0 0.527263 0.830064 0.345125 0 0.553496 0.838 0.341278 0 0.576189 0.837045 0.335109 0 0.68253 0.832869 0.337052 0 0.708577 0.844385 0.297568 0 0.822726 0.846102 0.307803 0 0.857178 0.851439 0.314107 0 -0.0406307 0.922471 0.523089 0 -0.0406307 0.922471 0.523089 0 -0.0406307 0.922471 0.523089 0 0.0522134 0.916094 0.389962 0 0.0982756 0.905272 0.351593 0 0.125328 0.894616 0.343669 0 0.136173 0.889269 0.349068 0 0.148964 0.882995 0.35461 0 0.192344 0.872257 0.342237 0 0.218292 0.864146 0.331278 0 0.224716 0.862465 0.335375 0 0.240863 0.858423 0.341581 0 0.265282 0.868212 0.349548 0 0.293447 0.884405 0.345056 0 0.318531 0.889851 0.34567 0 0.340698 0.893113 0.344724 0 0.360341 0.895616 0.340654 0 0.376184 0.90146 0.341468 0 0.39583 0.90147 0.335562 0 0.41913 0.901519 0.331285 0 0.429482 0.90306 0.335598 0 0.440392 0.904853 0.338787 0 0.457248 0.904423 0.339895 0 0.477288 0.902057 0.341231 0 0.496541 0.895771 0.342118 0 0.518392 0.889643 0.339913 0 0.542361 0.885262 0.33738 0 0.576626 0.889519 0.337734 0 0.680653 0.897848 0.33505 0 0.717705 0.895645 0.300466 0 0.809329 0.895892 0.303185 0 0.861775 0.877043 0.314034 0 0.0928661 0.0978107 0.343544 0 0.0928661 0.0978107 0.343544 0 0.0928662 0.0978107 0.343544 0 0.102918 0.0992804 0.344638 0 0.13741 0.0990063 0.332295 0 0.154806 0.101458 0.337291 0 0.165231 0.103121 0.343761 0 0.176922 0.101888 0.350307 0 0.202918 0.0982398 0.360524 0 0.218421 0.0972486 0.362731 0 0.240058 0.096445 0.358815 0 0.261152 0.0966902 0.360043 0 0.286104 0.0975398 0.363619 0 0.307038 0.0972334 0.361376 0 0.324436 0.0960706 0.364051 0 0.34564 0.094008 0.364743 0 0.361732 0.093127 0.365389 0 0.379074 0.0922917 0.365204 0 0.392401 0.0924579 0.36521 0 0.420406 0.0902198 0.366934 0 0.43485 0.0921608 0.36732 0 0.443343 0.100583 0.362005 0 0.451922 0.108579 0.354252 0 0.471393 0.105676 0.355889 0 0.51065 0.0953003 0.363967 0 0.533955 0.0910585 0.367316 0 0.561671 0.0901471 0.358359 0 0.570945 0.0990712 0.351192 0 0.704415 0.0975401 0.360373 0 0.740183 0.103716 0.319667 0 0.802918 0.108175 0.311991 0 0.870695 0.108538 0.322209 0 0.0928661 0.0978107 0.343544 0 0.0928661 0.0978107 0.343544 0 0.0928662 0.0978107 0.343544 0 0.102918 0.0992804 0.344638 0 0.13741 0.0990063 0.332295 0 0.154806 0.101458 0.337291 0 0.165231 0.103121 0.343761 0 0.176922 0.101888 0.350307 0 0.202918 0.0982398 0.360524 0 0.218421 0.0972486 0.362731 0 0.240058 0.096445 0.358815 0 0.261152 0.0966902 0.360043 0 0.286104 0.0975398 0.363619 0 0.307038 0.0972334 0.361376 0 0.324436 0.0960706 0.364051 0 0.34564 0.094008 0.364743 0 0.361732 0.093127 0.365389 0 0.379074 0.0922917 0.365204 0 0.392401 0.0924579 0.36521 0 0.420406 0.0902198 0.366934 0 0.43485 0.0921608 0.36732 0 0.443343 0.100583 0.362005 0 0.451922 0.108579 0.354252 0 0.471393 0.105676 0.355889 0 0.51065 0.0953003 0.363967 0 0.533955 0.0910585 0.367316 0 0.561671 0.0901471 0.358359 0 0.570945 0.0990712 0.351192 0 0.704415 0.0975401 0.360373 0 0.740183 0.103716 0.319667 0 0.802918 0.108175 0.311991 0 0.870695 0.108538 0.322209 0 0.0928661 0.0978107 0.343544 0 0.0928661 0.0978107 0.343544 0 0.0928662 0.0978108 0.343544 0 0.102918 0.0992804 0.344638 0 0.13741 0.0990063 0.332295 0 0.154806 0.101458 0.337291 0 0.165231 0.103121 0.343761 0 0.176922 0.101888 0.350307 0 0.202918 0.0982398 0.360524 0 0.218421 0.0972486 0.362731 0 0.240058 0.096445 0.358815 0 0.261152 0.0966902 0.360043 0 0.286104 0.0975399 0.363619 0 0.307038 0.0972335 0.361376 0 0.324436 0.0960706 0.364051 0 0.34564 0.094008 0.364743 0 0.361732 0.093127 0.365389 0 0.379074 0.0922917 0.365204 0 0.392401 0.0924579 0.36521 0 0.420406 0.0902198 0.366934 0 0.43485 0.0921608 0.36732 0 0.443343 0.100583 0.362005 0 0.451922 0.108579 0.354252 0 0.471393 0.105676 0.355889 0 0.51065 0.0953003 0.363967 0 0.533955 0.0910585 0.367316 0 0.561671 0.0901471 0.358359 0 0.570945 0.0990712 0.351192 0 0.704415 0.0975401 0.360373 0 0.740183 0.103716 0.319667 0 0.802918 0.108175 0.311991 0 0.870695 0.108538 0.322209 0 0.0948241 0.108519 0.342739 0 0.0948241 0.108519 0.342739 0 0.0948241 0.108519 0.342739 0 0.103334 0.109738 0.344748 0 0.13787 0.109167 0.333271 0 0.155793 0.111382 0.337576 0 0.164758 0.110917 0.343296 0 0.175936 0.109982 0.349665 0 0.202131 0.105924 0.359967 0 0.217944 0.104966 0.36255 0 0.240185 0.10525 0.35872 0 0.261171 0.10541 0.359936 0 0.286146 0.104629 0.363499 0 0.306816 0.103834 0.361447 0 0.323831 0.103615 0.363565 0 0.344958 0.102437 0.364568 0 0.361366 0.10151 0.364757 0 0.379026 0.101812 0.364984 0 0.393019 0.102962 0.364609 0 0.418755 0.101616 0.366327 0 0.437033 0.102152 0.366159 0 0.446048 0.10875 0.364214 0 0.453461 0.113711 0.356344 0 0.469938 0.113045 0.355397 0 0.510605 0.10233 0.362439 0 0.532458 0.0991464 0.366012 0 0.562493 0.0965782 0.35984 0 0.573045 0.106295 0.352083 0 0.704592 0.105892 0.361029 0 0.741366 0.110935 0.321343 0 0.796396 0.118885 0.307777 0 0.870641 0.114304 0.322644 0 0.0974279 0.125982 0.342098 0 0.0974279 0.125982 0.342098 0 0.097428 0.125982 0.342098 0 0.104503 0.127916 0.345172 0 0.1384 0.127646 0.334434 0 0.155349 0.125722 0.337005 0 0.163647 0.124819 0.342188 0 0.173772 0.123964 0.348188 0 0.200298 0.120975 0.358906 0 0.219072 0.122015 0.362253 0 0.239981 0.121206 0.358618 0 0.260494 0.120526 0.359812 0 0.286018 0.119894 0.363406 0 0.306929 0.119996 0.362056 0 0.323858 0.120991 0.363116 0 0.344488 0.121701 0.36418 0 0.362024 0.122247 0.363623 0 0.379788 0.123487 0.364548 0 0.39438 0.123984 0.363775 0 0.414756 0.123715 0.364348 0 0.439671 0.119649 0.364819 0 0.448997 0.120416 0.365025 0 0.456241 0.124209 0.361154 0 0.467409 0.127688 0.355131 0 0.497146 0.122203 0.356625 0 0.527403 0.117562 0.362161 0 0.564474 0.112047 0.362872 0 0.578312 0.12386 0.353864 0 0.703988 0.122442 0.361809 0 0.743708 0.126431 0.323628 0 0.782891 0.134995 0.301024 0 0.872264 0.128166 0.324685 0 0.100351 0.146148 0.342594 0 0.100351 0.146148 0.342594 0 0.100351 0.146148 0.342594 0 0.105958 0.146827 0.345042 0 0.1324 0.144623 0.33555 0 0.154357 0.141584 0.336124 0 0.162902 0.140535 0.341403 0 0.172927 0.140607 0.347179 0 0.19968 0.14029 0.358517 0 0.219595 0.139969 0.362401 0 0.239687 0.140357 0.35899 0 0.260195 0.140028 0.359986 0 0.286149 0.140806 0.363504 0 0.307867 0.142131 0.362624 0 0.325855 0.143648 0.363559 0 0.345293 0.145166 0.363536 0 0.362025 0.14484 0.362707 0 0.380253 0.144367 0.362875 0 0.394295 0.143898 0.362672 0 0.410882 0.142055 0.362099 0 0.433595 0.137753 0.36276 0 0.450767 0.135808 0.36176 0 0.459363 0.136987 0.363672 0 0.471435 0.143249 0.360337 0 0.49007 0.148304 0.354957 0 0.529415 0.141656 0.35869 0 0.557956 0.139737 0.361786 0 0.584121 0.143436 0.355936 0 0.701891 0.142382 0.361535 0 0.745028 0.141688 0.325343 0 0.783926 0.154449 0.301459 0 0.876939 0.147177 0.328899 0 0.100348 0.155065 0.341886 0 0.100348 0.155065 0.341886 0 0.100348 0.155065 0.341886 0 0.10608 0.155664 0.344623 0 0.128791 0.154831 0.336139 0 0.153533 0.150627 0.335486 0 0.162932 0.150927 0.341259 0 0.173364 0.151538 0.347249 0 0.19946 0.151836 0.358402 0 0.220111 0.150959 0.362544 0 0.239745 0.152107 0.359207 0 0.260599 0.152966 0.360125 0 0.286272 0.153326 0.363666 0 0.308701 0.15394 0.362345 0 0.326597 0.154859 0.363766 0 0.345636 0.155525 0.363587 0 0.361432 0.155564 0.362274 0 0.37969 0.154178 0.361954 0 0.392815 0.152753 0.361979 0 0.409757 0.150767 0.361205 0 0.429092 0.147573 0.361596 0 0.45188 0.144881 0.360365 0 0.46157 0.148156 0.362758 0 0.474166 0.152632 0.362848 0 0.489753 0.160185 0.355724 0 0.530947 0.153599 0.357465 0 0.556734 0.151648 0.360537 0 0.586524 0.151608 0.356848 0 0.698759 0.149982 0.361388 0 0.745334 0.147415 0.32622 0 0.78543 0.163392 0.30197 0 0.87883 0.155039 0.330741 0 0.100293 0.161928 0.341321 0 0.100293 0.161928 0.341321 0 0.100293 0.161928 0.341321 0 0.106219 0.162784 0.344352 0 0.125315 0.162257 0.338078 0 0.153737 0.15958 0.335385 0 0.163302 0.160048 0.341367 0 0.173794 0.160581 0.347364 0 0.19949 0.161152 0.358361 0 0.220898 0.161199 0.362559 0 0.240234 0.162942 0.359377 0 0.260688 0.163015 0.360134 0 0.28619 0.162995 0.363726 0 0.309197 0.163305 0.362137 0 0.326876 0.163703 0.363992 0 0.345812 0.164317 0.363735 0 0.360942 0.164118 0.362307 0 0.378434 0.16213 0.36108 0 0.391815 0.160974 0.361302 0 0.409282 0.160159 0.36055 0 0.426105 0.158731 0.360617 0 0.453297 0.155242 0.359966 0 0.463769 0.158596 0.361722 0 0.476754 0.161124 0.364835 0 0.491643 0.168768 0.358415 0 0.531886 0.163546 0.356484 0 0.555267 0.162008 0.359554 0 0.589274 0.160026 0.356375 0 0.695251 0.157225 0.361274 0 0.746871 0.157342 0.326151 0 0.786889 0.172861 0.30275 0 0.880379 0.162545 0.333048 0 0.0992095 0.187135 0.340249 0 0.0992095 0.187135 0.340249 0 0.0992095 0.187135 0.340249 0 0.106977 0.187696 0.343054 0 0.124909 0.192497 0.342008 0 0.153035 0.19374 0.334409 0 0.164902 0.193388 0.341298 0 0.17535 0.193671 0.347367 0 0.200343 0.194878 0.358193 0 0.219205 0.194525 0.3625 0 0.241604 0.193966 0.358735 0 0.261016 0.195044 0.360099 0 0.286494 0.196364 0.364139 0 0.310733 0.197999 0.362036 0 0.327975 0.197904 0.363694 0 0.346063 0.197987 0.363826 0 0.360442 0.197958 0.362235 0 0.376841 0.197893 0.360451 0 0.391459 0.198011 0.358674 0 0.409465 0.197895 0.358859 0 0.424613 0.197306 0.358237 0 0.446518 0.194422 0.357527 0 0.468999 0.19146 0.358952 0 0.478373 0.194041 0.362654 0 0.497294 0.193498 0.365786 0 0.522177 0.193663 0.358974 0 0.549195 0.193743 0.355388 0 0.59462 0.188283 0.357632 0 0.674819 0.201854 0.348506 0 0.753002 0.196831 0.325626 0 0.794476 0.204376 0.31025 0 0.878873 0.200453 0.330222 0 0.0984214 0.225814 0.340295 0 0.0984214 0.225814 0.340295 0 0.0984214 0.225813 0.340294 0 0.108182 0.224741 0.343336 0 0.132856 0.226606 0.335403 0 0.152279 0.228863 0.334259 0 0.163968 0.229054 0.340164 0 0.175535 0.229156 0.34631 0 0.202025 0.231915 0.35869 0 0.22015 0.23437 0.363399 0 0.244169 0.234513 0.359497 0 0.263303 0.234404 0.360803 0 0.285988 0.232755 0.365142 0 0.308066 0.230795 0.362548 0 0.326463 0.228536 0.363588 0 0.344677 0.227409 0.364866 0 0.358505 0.226583 0.363898 0 0.375031 0.226039 0.362029 0 0.389081 0.226135 0.36054 0 0.408353 0.226468 0.358522 0 0.423321 0.228018 0.358085 0 0.440582 0.229165 0.355592 0 0.468436 0.226761 0.35783 0 0.485339 0.228473 0.358836 0 0.495963 0.23243 0.362551 0 0.523903 0.230342 0.3623 0 0.558028 0.228983 0.360742 0 0.582945 0.232934 0.354603 0 0.689752 0.230765 0.35816 0 0.757162 0.226192 0.328883 0 0.799231 0.234255 0.314435 0 0.87963 0.234123 0.330938 0 0.0966916 0.245185 0.339687 0 0.0966916 0.245185 0.339687 0 0.0966916 0.245185 0.339687 0 0.10623 0.243584 0.342367 0 0.136699 0.242818 0.331124 0 0.15365 0.244847 0.333901 0 0.164081 0.245439 0.3403 0 0.176295 0.246107 0.346785 0 0.203684 0.248664 0.359519 0 0.221204 0.249357 0.364241 0 0.242048 0.247815 0.361088 0 0.262527 0.246772 0.361011 0 0.28441 0.245625 0.365244 0 0.306516 0.244822 0.362519 0 0.325534 0.244522 0.36335 0 0.344841 0.244634 0.363799 0 0.358841 0.245204 0.363045 0 0.375375 0.245895 0.360697 0 0.389523 0.246814 0.35943 0 0.409453 0.247666 0.357324 0 0.424859 0.248272 0.356881 0 0.441511 0.248838 0.354399 0 0.463882 0.247028 0.35593 0 0.488054 0.244831 0.357375 0 0.498564 0.248414 0.36136 0 0.52014 0.24814 0.362103 0 0.562616 0.24139 0.365231 0 0.58313 0.249375 0.356443 0 0.69142 0.244626 0.359451 0 0.758534 0.240476 0.331677 0 0.800306 0.251096 0.314442 0 0.880586 0.249914 0.33231 0 0.0933104 0.25974 0.343355 0 0.0933104 0.25974 0.343355 0 0.0933104 0.25974 0.343355 0 0.104494 0.257773 0.342192 0 0.138536 0.254122 0.326741 0 0.155604 0.257551 0.334518 0 0.165465 0.259428 0.340798 0 0.177308 0.260212 0.347575 0 0.205185 0.265616 0.359861 0 0.220783 0.266079 0.363571 0 0.240834 0.264809 0.359998 0 0.26248 0.262993 0.359782 0 0.283844 0.262815 0.364143 0 0.30642 0.262715 0.361487 0 0.32538 0.262826 0.36229 0 0.345516 0.262434 0.362434 0 0.359791 0.262583 0.362061 0 0.375709 0.262863 0.360486 0 0.389788 0.26277 0.35923 0 0.409124 0.262431 0.357738 0 0.425375 0.262275 0.356968 0 0.442195 0.262609 0.355057 0 0.459791 0.263043 0.3547 0 0.489855 0.258982 0.357783 0 0.501359 0.262177 0.36029 0 0.519751 0.263496 0.361704 0 0.564678 0.255912 0.364382 0 0.588192 0.260667 0.361989 0 0.692145 0.257478 0.359997 0 0.759776 0.253769 0.334 0 0.800926 0.265378 0.314211 0 0.88311 0.262941 0.335361 0 0.0951138 0.278082 0.343065 0 0.0951138 0.278082 0.343065 0 0.0951138 0.278082 0.343065 0 0.10436 0.279855 0.342956 0 0.141298 0.281089 0.323942 0 0.159002 0.285237 0.334179 0 0.167988 0.286727 0.340175 0 0.179469 0.287974 0.346822 0 0.205397 0.287528 0.359132 0 0.219685 0.287423 0.362463 0 0.239151 0.28569 0.358649 0 0.261384 0.284344 0.359205 0 0.283576 0.284323 0.363338 0 0.305704 0.283705 0.361299 0 0.324619 0.283213 0.362366 0 0.3454 0.283026 0.363052 0 0.360346 0.283224 0.361979 0 0.376 0.283823 0.361216 0 0.389774 0.283937 0.359666 0 0.408544 0.283894 0.358445 0 0.425504 0.283479 0.357278 0 0.442497 0.283809 0.355754 0 0.459989 0.284883 0.354928 0 0.488379 0.282353 0.357792 0 0.505764 0.283338 0.358652 0 0.518545 0.28636 0.360662 0 0.549607 0.283688 0.35748 0 0.593604 0.27867 0.366798 0 0.656525 0.292327 0.340481 0 0.762254 0.276848 0.338012 0 0.803282 0.290712 0.313921 0 0.887912 0.285779 0.339821 0 0.09952 0.310114 0.340162 0 0.09952 0.310114 0.340162 0 0.09952 0.310114 0.340162 0 0.107156 0.311024 0.343339 0 0.141477 0.309576 0.324465 0 0.160116 0.309353 0.332326 0 0.168858 0.308702 0.338705 0 0.177832 0.308434 0.344808 0 0.20503 0.307216 0.358834 0 0.220436 0.308276 0.362715 0 0.237849 0.308752 0.358887 0 0.259547 0.308106 0.359141 0 0.284269 0.307748 0.363376 0 0.305454 0.308292 0.361598 0 0.324427 0.308171 0.362683 0 0.345048 0.307838 0.363655 0 0.36073 0.307703 0.362408 0 0.376903 0.308153 0.361274 0 0.38978 0.308743 0.360207 0 0.408662 0.308575 0.358389 0 0.424948 0.308361 0.357604 0 0.443329 0.308072 0.355074 0 0.46127 0.3085 0.355229 0 0.483369 0.307925 0.356564 0 0.509075 0.306293 0.358014 0 0.52058 0.30985 0.358608 0 0.544367 0.309772 0.356518 0 0.589797 0.304411 0.36208 0 0.654754 0.31689 0.342142 0 0.763902 0.303667 0.337314 0 0.807082 0.313816 0.315408 0 0.886616 0.306875 0.338043 0 0.0981516 0.327681 0.345704 0 0.0981516 0.327681 0.345704 0 0.0981518 0.327681 0.345704 0 0.109267 0.327416 0.344072 0 0.138906 0.326114 0.328112 0 0.160007 0.323886 0.330945 0 0.168702 0.32359 0.337005 0 0.177001 0.323255 0.342857 0 0.205661 0.323011 0.358645 0 0.221865 0.324836 0.363311 0 0.237453 0.326059 0.360185 0 0.258676 0.32582 0.359044 0 0.284968 0.325372 0.363796 0 0.305813 0.326227 0.361667 0 0.324353 0.326419 0.362705 0 0.344695 0.325914 0.363515 0 0.360725 0.325429 0.362449 0 0.37738 0.325408 0.360675 0 0.389987 0.325813 0.360084 0 0.408594 0.32569 0.357961 0 0.424462 0.325541 0.357421 0 0.443391 0.324905 0.354698 0 0.461775 0.325086 0.355149 0 0.480123 0.326011 0.356258 0 0.511494 0.323086 0.358292 0 0.524395 0.326616 0.356896 0 0.544156 0.328128 0.356181 0 0.591068 0.321803 0.359283 0 0.659541 0.333594 0.34128 0 0.762624 0.324499 0.335049 0 0.809061 0.327759 0.317939 0 0.882296 0.324509 0.334279 0 0.0957945 0.345521 0.351334 0 0.0957945 0.345521 0.351334 0 0.0957945 0.345521 0.351334 0 0.109332 0.343912 0.344878 0 0.131315 0.342901 0.340137 0 0.159774 0.340733 0.330921 0 0.168952 0.34094 0.336066 0 0.177447 0.341417 0.341307 0 0.206476 0.341314 0.358145 0 0.223217 0.343303 0.363758 0 0.238759 0.345255 0.361059 0 0.258806 0.345977 0.359143 0 0.285281 0.345113 0.363623 0 0.306009 0.345382 0.361257 0 0.32407 0.345382 0.362432 0 0.344085 0.344999 0.363111 14824.3 0.36001 0.344516 0.362175 13321.4 0.377389 0.344108 0.360385 0 0.3906 0.344268 0.359475 0 0.408007 0.344776 0.357966 0 0.424343 0.344647 0.357075 0 0.442824 0.344468 0.354784 0 0.462234 0.344512 0.354646 0 0.480883 0.345614 0.356293 0 0.511259 0.343186 0.358655 0 0.528738 0.345831 0.355082 0 0.542834 0.349533 0.355291 0 0.588731 0.34345 0.35585 0 0.66524 0.351249 0.339982 0 0.746412 0.350482 0.323532 0 0.810888 0.343716 0.321427 0 0.876173 0.347218 0.329252 0 0.0943925 0.359934 0.348907 0 0.0943925 0.359934 0.348907 0 0.0943925 0.359934 0.348907 0 0.107792 0.358296 0.345813 0 0.126439 0.357394 0.348995 0 0.159639 0.356144 0.331149 0 0.169217 0.356434 0.336524 0 0.177809 0.356876 0.340808 0 0.205692 0.356486 0.356847 0 0.224084 0.357876 0.363945 0 0.240083 0.359208 0.361158 0 0.258992 0.360255 0.359723 0 0.284363 0.359997 0.362925 0 0.306245 0.359665 0.360986 0 0.324094 0.359656 0.362083 0 0.34377 0.359623 0.362938 13322.1 0.359537 0.359341 0.361991 59622.2 0.37733 0.358997 0.360305 7748.69 0.391072 0.35901 0.359077 0 0.408236 0.359669 0.358032 0 0.424455 0.359633 0.356835 0 0.442531 0.359746 0.354821 0 0.462678 0.359579 0.354253 0 0.481794 0.360994 0.356404 0 0.508956 0.359826 0.358553 0 0.531109 0.360527 0.355853 0 0.542503 0.364984 0.354765 0 0.579347 0.362196 0.352309 0 0.668538 0.363541 0.340427 0 0.735182 0.368806 0.315735 0 0.813017 0.356858 0.324149 0 0.871362 0.363727 0.325997 0 0.0932817 0.376834 0.345651 0 0.0932817 0.376834 0.345651 0 0.0932817 0.376834 0.345651 0 0.104054 0.375979 0.345906 0 0.127706 0.372812 0.34951 0 0.160505 0.372323 0.332224 0 0.169332 0.372948 0.336969 0 0.178301 0.372846 0.341417 0 0.204165 0.372751 0.35438 0 0.22496 0.373487 0.364092 0 0.241508 0.374749 0.361074 0 0.259141 0.375973 0.360373 0 0.283708 0.376303 0.362445 0 0.306469 0.375986 0.360821 0 0.324262 0.37609 0.361733 0 0.343622 0.376132 0.362919 0 0.359128 0.375959 0.361872 7749.94 0.377117 0.375596 0.360203 7033.61 0.391151 0.375559 0.358824 0 0.408812 0.376109 0.357871 0 0.424413 0.376545 0.35712 0 0.442612 0.376764 0.354797 0 0.463032 0.376699 0.354424 0 0.483004 0.377431 0.356611 0 0.505904 0.377263 0.358366 0 0.533496 0.375891 0.357099 0 0.545612 0.380287 0.353838 0 0.575169 0.379797 0.35219 0 0.671654 0.377276 0.34541 0 0.727269 0.388774 0.309532 0 0.815404 0.371498 0.327201 0 0.867835 0.382789 0.324191 0 0.0928597 0.389848 0.344612 0 0.0928597 0.389848 0.344612 0 0.0928597 0.389848 0.344612 0 0.103371 0.389508 0.343428 0 0.127818 0.385993 0.345948 0 0.1608 0.384307 0.333168 0 0.169391 0.385175 0.337559 0 0.178368 0.385761 0.341751 0 0.203079 0.38632 0.352362 0 0.225396 0.386903 0.362517 0 0.242701 0.387688 0.361016 0 0.259382 0.389306 0.36068 0 0.283839 0.389658 0.362597 0 0.306695 0.389555 0.360711 0 0.324209 0.389662 0.361246 0 0.343513 0.389529 0.362907 0 0.35895 0.389472 0.36196 0 0.376877 0.389393 0.360225 0 0.391246 0.389373 0.358991 0 0.409539 0.389864 0.357711 0 0.424308 0.390572 0.357493 0 0.442812 0.39053 0.35492 0 0.462889 0.390352 0.354589 0 0.483682 0.390504 0.356391 0 0.503369 0.391193 0.357985 0 0.535233 0.38748 0.357878 0 0.548259 0.391661 0.353257 0 0.57286 0.393183 0.351937 0 0.674368 0.389132 0.349495 0 0.729414 0.39883 0.31289 0 0.815772 0.384186 0.32797 0 0.869082 0.395596 0.326521 0 0.0902757 0.405087 0.349189 0 0.0902757 0.405087 0.349189 0 0.0902757 0.405087 0.349189 0 0.103079 0.404366 0.341252 0 0.125986 0.401909 0.343579 0 0.160919 0.400041 0.333959 0 0.170068 0.400833 0.338799 0 0.178682 0.401804 0.342522 0 0.202781 0.402659 0.351213 0 0.226846 0.40349 0.358543 0 0.243469 0.403787 0.360426 0 0.260577 0.404768 0.360854 0 0.283714 0.405295 0.363098 0 0.307197 0.405134 0.361037 0 0.324204 0.406039 0.361313 0 0.343697 0.406186 0.362835 0 0.35897 0.40628 0.362369 0 0.376823 0.40627 0.360568 0 0.391451 0.406294 0.359292 0 0.410333 0.406525 0.357435 0 0.424766 0.407335 0.357779 0 0.442878 0.406968 0.354994 0 0.462234 0.406132 0.354505 0 0.483609 0.405102 0.355727 0 0.503115 0.4056 0.357649 0 0.536595 0.402264 0.358217 0 0.5515 0.405438 0.352728 0 0.571978 0.408993 0.351628 0 0.678274 0.403431 0.352003 0 0.732189 0.411724 0.317058 0 0.816222 0.402265 0.326512 0 0.873134 0.419601 0.329188 0 0.0895858 0.420453 0.350949 0 0.0895858 0.420453 0.350949 0 0.0895859 0.420453 0.350949 0 0.102442 0.419415 0.34334 0 0.121688 0.419156 0.345481 0 0.159547 0.417551 0.333276 0 0.171044 0.416889 0.340168 0 0.179634 0.41796 0.343979 0 0.203164 0.418606 0.35187 0 0.226674 0.419813 0.355025 0 0.243464 0.420213 0.358967 0 0.261863 0.420536 0.361222 0 0.284174 0.422105 0.363804 0 0.307225 0.422287 0.361629 0 0.324969 0.423419 0.361657 0 0.34394 0.423965 0.362547 0 0.359016 0.424103 0.362469 0 0.376729 0.423799 0.360716 0 0.391224 0.423225 0.359379 0 0.410211 0.422696 0.357141 0 0.424947 0.422436 0.357004 0 0.441961 0.421919 0.354964 0 0.461469 0.421132 0.354041 0 0.483234 0.42018 0.355376 0 0.503789 0.421016 0.35745 0 0.533625 0.419766 0.358347 0 0.554524 0.421596 0.353967 0 0.571372 0.426982 0.351563 0 0.682712 0.418614 0.351287 0 0.732722 0.427775 0.31908 0 0.81884 0.42775 0.324714 0 0.87238 0.440423 0.329611 0 0.0906576 0.43891 0.350962 0 0.0906576 0.43891 0.350962 0 0.0906576 0.43891 0.350962 0 0.100245 0.439206 0.348788 0 0.120487 0.439292 0.34593 0 0.158959 0.436893 0.331706 0 0.170713 0.43634 0.339372 0 0.180692 0.436299 0.345647 0 0.204124 0.437632 0.352986 0 0.229606 0.438867 0.351502 0 0.245357 0.440995 0.355249 0 0.262779 0.44158 0.360047 0 0.284894 0.442729 0.364319 0 0.30714 0.442485 0.362295 0 0.326148 0.442104 0.362226 0 0.343413 0.442406 0.362205 0 0.358432 0.441805 0.361763 0 0.375788 0.441031 0.360446 0 0.390211 0.440199 0.359254 0 0.409546 0.439396 0.357096 0 0.425027 0.439024 0.356214 0 0.440885 0.439039 0.354844 0 0.461035 0.438942 0.353717 0 0.483536 0.439517 0.355612 0 0.505843 0.440699 0.357174 0 0.530547 0.441314 0.358336 0 0.557645 0.440889 0.35508 0 0.571906 0.446851 0.351573 0 0.674374 0.441171 0.351602 0 0.728595 0.449323 0.314928 0 0.824838 0.462164 0.322547 0 0.871431 0.449606 0.330738 0 0.0926355 0.456035 0.349842 0 0.0926355 0.456035 0.349842 0 0.0926355 0.456035 0.349842 0 0.0995585 0.45767 0.351123 0 0.120979 0.457471 0.345614 0 0.15928 0.45566 0.330873 0 0.170747 0.455998 0.338145 0 0.181198 0.4559 0.344786 0 0.205937 0.456867 0.355077 0 0.232447 0.457472 0.348234 0 0.24727 0.459348 0.353641 0 0.262564 0.460185 0.358498 0 0.284678 0.45927 0.364239 0 0.305861 0.458564 0.363099 0 0.326784 0.457361 0.362521 0 0.343373 0.45808 0.36287 0 0.357873 0.457919 0.361269 0 0.374784 0.457683 0.360076 0 0.389257 0.457482 0.358961 0 0.409442 0.457169 0.357168 0 0.425347 0.457447 0.35617 0 0.441937 0.458582 0.354519 0 0.46136 0.459069 0.353745 0 0.483675 0.459359 0.355734 0 0.5074 0.460068 0.356761 0 0.527638 0.462374 0.358068 0 0.560876 0.459915 0.35588 0 0.576169 0.46536 0.351027 0 0.664447 0.462791 0.347932 0 0.735615 0.481384 0.316243 0 0.810952 0.473166 0.314423 0 0.86846 0.4531 0.332124 0 0.0968354 0.476623 0.345624 0 0.0968354 0.476623 0.345624 0 0.0968354 0.476623 0.345624 0 0.10381 0.478577 0.34739 0 0.122388 0.478771 0.345674 0 0.158862 0.477889 0.330975 0 0.171409 0.477715 0.338003 0 0.181343 0.477772 0.343525 0 0.206743 0.476442 0.356847 0 0.231842 0.475432 0.349936 0 0.248468 0.476084 0.351013 0 0.263524 0.477581 0.356282 0 0.283966 0.478024 0.362651 0 0.305248 0.477428 0.363889 0 0.326089 0.477307 0.362518 0 0.344503 0.478082 0.363482 0 0.358343 0.478851 0.362057 0 0.374977 0.479414 0.359686 0 0.388828 0.479372 0.358669 0 0.409287 0.479453 0.357009 0 0.426126 0.479854 0.356342 0 0.443535 0.480902 0.354115 0 0.461643 0.482432 0.353726 0 0.484032 0.482528 0.355287 0 0.508043 0.482817 0.356743 0 0.529136 0.484726 0.35755 0 0.561375 0.482802 0.35595 0 0.580633 0.485586 0.350068 0 0.659357 0.491746 0.342857 0 0.736635 0.496454 0.317948 0 0.799573 0.47817 0.312252 0 0.862204 0.458315 0.329681 0 0.101222 0.499819 0.3403 0 0.101222 0.499819 0.3403 0 0.101222 0.499819 0.3403 0 0.108394 0.500904 0.343085 0 0.121959 0.502775 0.347013 0 0.156493 0.501358 0.330506 0 0.169973 0.50005 0.338175 0 0.180374 0.499498 0.343499 0 0.205065 0.49815 0.355376 0 0.231019 0.496201 0.354546 0 0.251781 0.49679 0.348446 0 0.266338 0.500431 0.354751 0 0.28489 0.504244 0.361278 0 0.304353 0.50449 0.362098 0 0.325426 0.50306 0.363009 0 0.346158 0.502884 0.363584 0 0.359204 0.504136 0.362902 0 0.376439 0.505269 0.360041 0 0.389954 0.50641 0.358715 0 0.409521 0.5074 0.356513 0 0.427154 0.507662 0.355884 0 0.445036 0.508267 0.353859 0 0.462548 0.509676 0.353258 0 0.484268 0.510153 0.35447 0 0.508493 0.509525 0.356238 0 0.531188 0.509437 0.35619 0 0.556088 0.508258 0.354823 0 0.584834 0.509351 0.351091 0 0.662056 0.513767 0.341589 0 0.732343 0.499438 0.324238 0 0.796513 0.479559 0.318026 0 0.849774 0.464188 0.326079 0 0.102504 0.521738 0.33738 0 0.102504 0.521738 0.33738 0 0.102504 0.521738 0.33738 0 0.109462 0.522493 0.340899 0 0.122046 0.525706 0.347294 0 0.155169 0.526077 0.328861 0 0.16884 0.525872 0.337385 0 0.179874 0.526044 0.34416 0 0.204803 0.52585 0.353563 0 0.230235 0.525847 0.357942 0 0.252137 0.524451 0.350903 0 0.270621 0.525999 0.353394 0 0.287668 0.531233 0.360402 0 0.304813 0.533955 0.359739 0 0.323947 0.534037 0.36093 0 0.347056 0.532661 0.36356 0 0.361989 0.533591 0.362689 0 0.377942 0.535106 0.360568 0 0.391895 0.535857 0.358653 0 0.410441 0.536622 0.356486 0 0.4268 0.53619 0.35496 0 0.444895 0.535275 0.353261 0 0.463166 0.534607 0.352565 0 0.48309 0.534128 0.354626 0 0.507663 0.53384 0.355671 0 0.532671 0.535213 0.355798 0 0.552816 0.533688 0.354426 0 0.587525 0.527363 0.353132 0 0.661946 0.519944 0.343868 0 0.728587 0.504361 0.326214 0 0.781093 0.485196 0.31484 0 0.845282 0.468219 0.328707 0 0.103223 0.547668 0.336261 0 0.103223 0.547668 0.336261 0 0.103223 0.547668 0.336261 0 0.11052 0.548966 0.33975 0 0.124928 0.553312 0.346855 0 0.157645 0.555404 0.328801 0 0.169194 0.556158 0.33589 0 0.180381 0.55635 0.342761 0 0.204881 0.557134 0.354245 0 0.227417 0.558564 0.360213 0 0.25074 0.556904 0.35096 0 0.274069 0.554125 0.352523 0 0.29255 0.559024 0.357616 0 0.307812 0.562238 0.359517 0 0.323841 0.563709 0.359496 0 0.344214 0.562709 0.361809 0 0.362793 0.560463 0.362018 0 0.378366 0.560098 0.361177 0 0.391572 0.559851 0.359577 0 0.410022 0.558285 0.357693 0 0.425532 0.555538 0.357204 0 0.442987 0.5523 0.355384 0 0.461323 0.549681 0.354445 0 0.480884 0.547732 0.357049 0 0.505081 0.544353 0.358666 0 0.528677 0.541223 0.360711 0 0.55131 0.542005 0.357007 0 0.588598 0.539225 0.355299 0 0.662775 0.53121 0.344597 0 0.729081 0.505614 0.321874 0 0.759328 0.497133 0.303155 0 0.873384 0.555515 0.326177 0 0.105839 0.577944 0.334671 0 0.105839 0.577944 0.334671 0 0.105839 0.577944 0.334671 0 0.112176 0.58039 0.338639 0 0.127188 0.584084 0.345388 0 0.158397 0.587246 0.329904 0 0.169164 0.587758 0.335722 0 0.180373 0.587329 0.34161 0 0.204337 0.586645 0.35412 0 0.229873 0.58476 0.358062 0 0.248787 0.584973 0.354047 0 0.268946 0.583623 0.351598 0 0.297765 0.57999 0.356235 0 0.310105 0.579609 0.360886 0 0.322858 0.578468 0.362492 0 0.340423 0.575858 0.364109 0 0.356186 0.572936 0.364747 0 0.374953 0.569579 0.364419 0 0.388075 0.567528 0.364851 0 0.406864 0.564568 0.362833 0 0.422603 0.563882 0.36157 0 0.440768 0.564105 0.358843 0 0.459944 0.56473 0.355496 0 0.480289 0.565366 0.355651 0 0.505975 0.570924 0.358064 0 0.530042 0.568912 0.359249 0 0.554119 0.572867 0.355325 0 0.582818 0.568005 0.353119 0 0.655769 0.537093 0.341407 0 0.691954 0.518162 0.310471 0 0.781977 0.581727 0.300907 0 0.87892 0.553143 0.335258 0 0.0903782 0.649248 0.353803 0 0.0903782 0.649248 0.353803 0 0.0903782 0.649248 0.353803 0 0.110098 0.644497 0.340856 0 0.137395 0.641964 0.329745 0 0.158077 0.647155 0.326654 0 0.169629 0.648039 0.333873 0 0.17885 0.650308 0.339612 0 0.201746 0.676144 0.352176 0 0.232072 0.6876 0.357967 0 0.253551 0.688511 0.354313 0 0.272391 0.683864 0.354289 0 0.294052 0.678899 0.355511 0 0.320109 0.672112 0.351164 0 0.33489 0.667156 0.355185 0 0.34716 0.663002 0.363703 0 0.356561 0.65986 0.366222 0 0.370672 0.655065 0.364172 0 0.383137 0.65007 0.362015 0 0.400653 0.642911 0.360023 0 0.414021 0.637627 0.359871 0 0.431109 0.63099 0.36045 0 0.454437 0.634022 0.361389 0 0.48174 0.644206 0.360338 0 0.50001 0.638529 0.360922 0 0.516905 0.630897 0.361172 0 0.538482 0.62562 0.356961 0 0.562347 0.620547 0.35202 0 0.651543 0.620475 0.339149 0 0.713245 0.612545 0.309817 0 0.786823 0.64497 0.314957 0 0.84936 0.6677 0.326454 0 0.0640403 0.762245 0.365582 0 0.0640403 0.762245 0.365582 0 0.0640403 0.762245 0.365582 0 0.0745336 0.756339 0.360898 0 0.105666 0.745437 0.355158 0 0.159633 0.743566 0.321516 0 0.171592 0.743036 0.326971 0 0.181907 0.739521 0.333779 0 0.198414 0.734572 0.343634 0 0.212864 0.733717 0.35038 0 0.228029 0.730998 0.358535 0 0.254751 0.726464 0.351879 0 0.277825 0.723654 0.354999 0 0.307079 0.734358 0.350741 0 0.322474 0.740124 0.354184 0 0.344645 0.730238 0.350232 0 0.357899 0.72409 0.34653 0 0.367886 0.721347 0.347418 0 0.374177 0.721029 0.349814 0 0.385569 0.717104 0.349655 0 0.399267 0.71036 0.347553 0 0.415591 0.702759 0.346363 0 0.430082 0.695683 0.341878 0 0.450767 0.699343 0.341532 0 0.47959 0.70748 0.348376 0 0.511152 0.713815 0.357418 0 0.544474 0.735321 0.360093 0 0.581206 0.763175 0.359644 0 0.676313 0.760844 0.349973 0 0.68916 0.760818 0.308379 0 0.810385 0.732139 0.323584 0 0.818061 0.73373 0.319428 0 -0.00883758 0.864613 0.486314 0 -0.00883758 0.864613 0.486314 0 -0.00883757 0.864613 0.486314 0 0.0290866 0.86564 0.443333 0 0.0969354 0.883256 0.389545 0 0.142359 0.851236 0.350965 0 0.171758 0.857413 0.342588 0 0.190744 0.862682 0.344341 0 0.216525 0.859657 0.354385 0 0.233371 0.851917 0.355811 0 0.244933 0.84781 0.356949 0 0.257162 0.843529 0.363728 0 0.271917 0.835413 0.370977 0 0.290524 0.816538 0.360742 0 0.30215 0.808035 0.361518 0 0.323934 0.801796 0.354695 0 0.34191 0.823276 0.359504 0 0.363712 0.822725 0.357005 0 0.386265 0.827139 0.351387 0 0.405654 0.826646 0.353346 0 0.417738 0.825427 0.359069 0 0.433017 0.823207 0.362374 0 0.455875 0.823231 0.359018 0 0.475421 0.823363 0.355323 0 0.499707 0.823436 0.358278 0 0.524977 0.824833 0.360686 0 0.550387 0.835628 0.355046 0 0.573046 0.831765 0.350024 0 0.680834 0.833566 0.349045 0 0.705828 0.843399 0.309497 0 0.827854 0.846231 0.325248 0 0.852286 0.852409 0.326368 0 -0.127688 0.925925 0.673197 0 -0.127688 0.925925 0.673197 0 -0.127688 0.925925 0.673197 0 -0.101749 0.923462 0.647581 0 0.0363952 0.911038 0.458309 0 0.112443 0.896171 0.382449 0 0.142483 0.885986 0.352968 0 0.152537 0.881857 0.35793 0 0.187478 0.873798 0.350002 0 0.211496 0.866312 0.350525 0 0.229401 0.861026 0.344831 0 0.24391 0.857698 0.355362 0 0.270444 0.865841 0.360569 0 0.293131 0.885925 0.364974 0 0.317721 0.892742 0.363333 0 0.339579 0.895776 0.36262 0 0.355808 0.89925 0.362041 0 0.375959 0.901425 0.35515 0 0.389802 0.903968 0.357071 0 0.41558 0.902061 0.349769 0 0.432265 0.901102 0.344163 0 0.442408 0.902989 0.348956 0 0.457583 0.903749 0.352555 0 0.477981 0.900661 0.352859 0 0.496774 0.894838 0.35368 0 0.516731 0.889063 0.354521 0 0.542977 0.88461 0.353031 0 0.575181 0.890498 0.351675 0 0.679287 0.897549 0.348692 0 0.715326 0.893911 0.31002 0 0.81459 0.895742 0.32176 0 0.859766 0.878442 0.327303 0 0.0964335 0.0972002 0.359113 0 0.0964335 0.0972002 0.359113 0 0.0964335 0.0972002 0.359113 0 0.10554 0.0982892 0.364633 0 0.130531 0.0995785 0.36555 0 0.147512 0.102393 0.368174 0 0.171858 0.102215 0.34901 0 0.183708 0.100768 0.355111 0 0.20633 0.0976836 0.367185 0 0.221305 0.0963428 0.372385 0 0.239355 0.0962525 0.378981 0 0.261677 0.0965399 0.378467 0 0.28801 0.0971325 0.376995 0 0.306145 0.0966754 0.381542 0 0.326307 0.0950389 0.38032 0 0.347216 0.0932777 0.382535 0 0.362193 0.0921999 0.384207 0 0.379366 0.0911556 0.385634 0 0.392611 0.0914398 0.386413 0 0.419121 0.0901045 0.385044 0 0.431818 0.0960178 0.377713 0 0.441192 0.104132 0.371075 0 0.450247 0.107638 0.373547 0 0.473651 0.103949 0.372436 0 0.513787 0.0928179 0.383498 0 0.531423 0.0919814 0.383466 0 0.555929 0.0926877 0.370373 0 0.566524 0.101416 0.361801 0 0.695774 0.100144 0.371555 0 0.733846 0.105529 0.330871 0 0.819679 0.108033 0.334193 0 0.867681 0.109732 0.336859 0 0.0964335 0.0972002 0.359113 0 0.0964335 0.0972002 0.359113 0 0.0964335 0.0972002 0.359113 0 0.10554 0.0982892 0.364633 0 0.130531 0.0995785 0.36555 0 0.147512 0.102393 0.368174 0 0.171858 0.102215 0.34901 0 0.183708 0.100768 0.355111 0 0.20633 0.0976836 0.367185 0 0.221305 0.0963428 0.372385 0 0.239355 0.0962525 0.378981 0 0.261677 0.0965399 0.378467 0 0.28801 0.0971325 0.376995 0 0.306145 0.0966754 0.381542 0 0.326307 0.0950389 0.38032 0 0.347216 0.0932777 0.382535 0 0.362193 0.0921999 0.384207 0 0.379366 0.0911556 0.385634 0 0.392611 0.0914398 0.386413 0 0.419121 0.0901045 0.385044 0 0.431818 0.0960178 0.377713 0 0.441192 0.104132 0.371075 0 0.450247 0.107638 0.373547 0 0.473651 0.103949 0.372436 0 0.513787 0.0928179 0.383498 0 0.531423 0.0919814 0.383466 0 0.555929 0.0926877 0.370373 0 0.566524 0.101416 0.361801 0 0.695774 0.100144 0.371555 0 0.733846 0.105529 0.330871 0 0.819679 0.108033 0.334193 0 0.867681 0.109732 0.336859 0 0.0964335 0.0972002 0.359113 0 0.0964335 0.0972002 0.359113 0 0.0964335 0.0972002 0.359113 0 0.10554 0.0982893 0.364633 0 0.130531 0.0995785 0.36555 0 0.147512 0.102393 0.368174 0 0.171858 0.102215 0.34901 0 0.183708 0.100768 0.355111 0 0.20633 0.0976836 0.367185 0 0.221305 0.0963428 0.372385 0 0.239355 0.0962525 0.378981 0 0.261677 0.0965399 0.378467 0 0.28801 0.0971325 0.376995 0 0.306145 0.0966754 0.381542 0 0.326307 0.0950389 0.38032 0 0.347216 0.0932778 0.382535 0 0.362193 0.0921999 0.384207 0 0.379366 0.0911556 0.385634 0 0.392611 0.0914398 0.386413 0 0.419121 0.0901045 0.385044 0 0.431818 0.0960178 0.377713 0 0.441192 0.104132 0.371075 0 0.450247 0.107638 0.373547 0 0.473651 0.103949 0.372436 0 0.513787 0.0928179 0.383498 0 0.531423 0.0919814 0.383466 0 0.555929 0.0926877 0.370373 0 0.566524 0.101416 0.361801 0 0.695774 0.100144 0.371555 0 0.733846 0.105529 0.330871 0 0.819679 0.108033 0.334193 0 0.867681 0.109732 0.336859 0 0.0986201 0.107766 0.357788 0 0.0986201 0.107766 0.357788 0 0.0986201 0.107765 0.357788 0 0.106761 0.108532 0.363501 0 0.131375 0.109837 0.365745 0 0.147903 0.111411 0.36836 0 0.170269 0.110391 0.349105 0 0.182729 0.108864 0.354454 0 0.205469 0.105268 0.366651 0 0.221088 0.104538 0.372069 0 0.239465 0.105159 0.37887 0 0.261794 0.105265 0.378451 0 0.287898 0.10442 0.377027 0 0.305721 0.103755 0.380978 0 0.32558 0.103059 0.380204 0 0.346573 0.101782 0.382076 0 0.36167 0.100664 0.383902 0 0.379648 0.100575 0.3847 0 0.393076 0.101767 0.385827 0 0.419483 0.100159 0.385914 0 0.434437 0.104374 0.380313 0 0.44376 0.111302 0.372903 0 0.451194 0.114412 0.372117 0 0.470639 0.111732 0.371704 0 0.513878 0.0997622 0.381971 0 0.531619 0.0985883 0.384666 0 0.556472 0.0992249 0.372436 0 0.568657 0.108616 0.362672 0 0.698716 0.107722 0.373834 0 0.73494 0.112519 0.332609 0 0.823679 0.114254 0.337291 0 0.867632 0.115519 0.337297 0 0.102553 0.125059 0.354373 0 0.102553 0.125059 0.354373 0 0.102553 0.125059 0.354373 0 0.109786 0.125834 0.360579 0 0.131686 0.126607 0.364741 0 0.147262 0.125071 0.367787 0 0.169308 0.124039 0.347266 0 0.180457 0.12279 0.353359 0 0.20397 0.120697 0.365634 0 0.222003 0.121499 0.372062 0 0.239375 0.121203 0.378608 0 0.261031 0.120896 0.378727 0 0.287826 0.120165 0.377343 0 0.305819 0.120395 0.380513 0 0.324603 0.120883 0.380065 0 0.346185 0.121255 0.38124 0 0.361771 0.121716 0.383459 0 0.380309 0.122318 0.383291 0 0.394542 0.122677 0.383811 0 0.416387 0.121766 0.384622 0 0.437973 0.118624 0.383759 0 0.446371 0.121665 0.377651 0 0.453707 0.126698 0.370572 0 0.468046 0.126738 0.369802 0 0.508273 0.117292 0.3774 0 0.530119 0.114448 0.384485 0 0.558272 0.11518 0.376828 0 0.573891 0.126579 0.364992 0 0.70125 0.122962 0.375643 0 0.737611 0.126815 0.335347 0 0.829328 0.124411 0.343281 0 0.867794 0.128543 0.337972 0 0.106845 0.144061 0.349431 0 0.106845 0.144061 0.349431 0 0.106845 0.144061 0.349431 0 0.112925 0.1434 0.355258 0 0.130058 0.14239 0.362041 0 0.146265 0.140851 0.366975 0 0.168119 0.13996 0.345765 0 0.178587 0.140491 0.352894 0 0.203553 0.140318 0.365115 0 0.2225 0.140155 0.37221 0 0.239526 0.140633 0.378531 0 0.260301 0.140347 0.379379 0 0.287832 0.141048 0.377839 0 0.307143 0.142168 0.380757 0 0.326004 0.143963 0.379751 0 0.346761 0.144378 0.380411 0 0.361657 0.144048 0.382252 0 0.379988 0.143341 0.382212 0 0.394684 0.142113 0.381435 0 0.410359 0.140669 0.381879 0 0.434928 0.13575 0.381784 0 0.448959 0.134581 0.381856 0 0.45763 0.13876 0.374128 0 0.466531 0.148312 0.367861 0 0.493105 0.146151 0.369975 0 0.531575 0.139074 0.382212 0 0.561537 0.137392 0.382377 0 0.579298 0.145881 0.367773 0 0.700993 0.142033 0.375675 0 0.739653 0.142489 0.33683 0 0.819463 0.144919 0.337612 0 0.871548 0.151486 0.33885 0 0.106795 0.153512 0.348046 0 0.106795 0.153512 0.348046 0 0.106795 0.153512 0.348046 0 0.113588 0.152642 0.351901 0 0.128769 0.151999 0.36077 0 0.145995 0.15095 0.366698 0 0.168276 0.151133 0.346472 0 0.179336 0.151803 0.353064 0 0.203319 0.151866 0.364905 0 0.222875 0.15127 0.372367 0 0.239762 0.152321 0.378502 0 0.260615 0.15327 0.379608 0 0.287915 0.153123 0.377841 0 0.307839 0.153839 0.380912 0 0.327045 0.155101 0.379564 0 0.34636 0.1554 0.380022 0 0.361222 0.154806 0.381654 0 0.378835 0.153074 0.381519 0 0.393047 0.151182 0.380198 0 0.409293 0.149507 0.380805 0 0.43092 0.145874 0.380652 0 0.449728 0.143827 0.381169 0 0.460549 0.148063 0.376574 0 0.469322 0.157571 0.370338 0 0.490567 0.159524 0.369146 0 0.533242 0.15155 0.380659 0 0.560016 0.149288 0.383932 0 0.581161 0.154034 0.369374 0 0.699633 0.150607 0.37535 0 0.740081 0.148263 0.337511 0 0.812664 0.157637 0.332515 0 0.8734 0.159225 0.340739 0 0.105642 0.161056 0.348947 0 0.105642 0.161056 0.348947 0 0.105642 0.161056 0.348947 0 0.112205 0.160879 0.351985 0 0.127913 0.15992 0.359761 0 0.146358 0.160003 0.366895 0 0.167712 0.16025 0.348054 0 0.179729 0.160877 0.353129 0 0.203221 0.161204 0.364869 0 0.223348 0.161338 0.372549 0 0.24013 0.162784 0.378498 0 0.260513 0.162872 0.379636 0 0.288059 0.162982 0.377825 0 0.308193 0.163263 0.381025 0 0.327592 0.163848 0.379513 0 0.345916 0.164683 0.379766 0 0.360237 0.163338 0.381071 0 0.377329 0.161402 0.381041 0 0.391823 0.159752 0.379696 0 0.408983 0.158649 0.379815 0 0.427579 0.156986 0.379519 0 0.451336 0.154494 0.38064 0 0.462832 0.157007 0.379114 0 0.472062 0.165966 0.372421 0 0.48956 0.170861 0.368405 0 0.534003 0.161281 0.378824 0 0.556574 0.15997 0.382658 0 0.582929 0.161931 0.370956 0 0.696691 0.157679 0.375292 0 0.740959 0.155964 0.337932 0 0.804922 0.172354 0.32687 0 0.87501 0.166469 0.343278 0 0.100807 0.188628 0.353499 0 0.100807 0.188628 0.353499 0 0.100807 0.188628 0.353499 0 0.109042 0.188971 0.35631 0 0.128465 0.189482 0.357955 0 0.146018 0.193086 0.366129 0 0.168752 0.193208 0.348267 0 0.182341 0.193462 0.352367 0 0.203643 0.194787 0.364676 0 0.222384 0.194131 0.37147 0 0.241157 0.194063 0.37848 0 0.261463 0.195395 0.379147 0 0.288563 0.196582 0.378131 0 0.309131 0.197668 0.38125 0 0.328716 0.197303 0.37942 0 0.346294 0.197678 0.379774 0 0.358411 0.197958 0.380412 0 0.374902 0.197607 0.378714 0 0.390233 0.197167 0.377945 0 0.409436 0.196536 0.376387 0 0.424614 0.196176 0.376515 0 0.447964 0.193258 0.378048 0 0.46838 0.192093 0.377522 0 0.479929 0.19406 0.375512 0 0.494549 0.196356 0.373505 0 0.515449 0.197616 0.369025 0 0.551402 0.191568 0.378817 0 0.589381 0.188467 0.37377 0 0.674272 0.200887 0.362494 0 0.7472 0.196624 0.337928 0 0.799523 0.208336 0.325331 0 0.879649 0.198711 0.348517 0 0.0984072 0.226262 0.359173 0 0.0984072 0.226262 0.359173 0 0.0984072 0.226262 0.359173 0 0.105963 0.226576 0.363016 0 0.130204 0.22541 0.35918 0 0.146045 0.227797 0.364113 0 0.167686 0.229017 0.348093 0 0.182784 0.22893 0.351461 0 0.205695 0.231924 0.365085 0 0.223329 0.235677 0.371483 0 0.244634 0.235737 0.379541 0 0.263104 0.235187 0.379827 0 0.288009 0.233427 0.378178 0 0.307091 0.23166 0.380734 0 0.326771 0.229441 0.380118 0 0.34596 0.22802 0.37988 0 0.357819 0.227522 0.381187 0 0.372785 0.226581 0.380909 0 0.387209 0.225334 0.378668 0 0.406053 0.225698 0.376399 0 0.423493 0.225949 0.374496 0 0.440125 0.227046 0.376112 0 0.469905 0.224195 0.37678 0 0.485175 0.226672 0.374849 0 0.498653 0.229546 0.375643 0 0.520573 0.231732 0.373873 0 0.555227 0.232298 0.370661 0 0.585838 0.231807 0.37577 0 0.683109 0.232286 0.367954 0 0.750355 0.227901 0.342503 0 0.810463 0.235578 0.332462 0 0.877393 0.235085 0.345518 0 0.0981304 0.244713 0.358527 0 0.0981304 0.244713 0.358527 0 0.0981305 0.244713 0.358527 0 0.106238 0.244576 0.363878 0 0.130664 0.243747 0.360032 0 0.148363 0.244589 0.361611 0 0.167136 0.246 0.350099 0 0.184181 0.246654 0.351938 0 0.208039 0.249337 0.366127 0 0.224171 0.250747 0.372302 0 0.243071 0.248344 0.379047 0 0.261528 0.246992 0.381307 0 0.286213 0.244416 0.378735 0 0.305547 0.243687 0.380887 0 0.325523 0.243412 0.380625 0 0.345486 0.243475 0.379817 0 0.358235 0.243758 0.380432 0 0.372794 0.244968 0.380345 0 0.387699 0.245715 0.377908 0 0.406961 0.246883 0.375425 0 0.42401 0.248108 0.372577 0 0.441442 0.248377 0.373478 0 0.466109 0.246075 0.374851 0 0.487878 0.245104 0.374317 0 0.499068 0.248004 0.374007 0 0.521684 0.247048 0.376871 0 0.559821 0.24474 0.375582 0 0.582891 0.250119 0.373488 0 0.688163 0.245007 0.371327 0 0.751655 0.242038 0.345622 0 0.818069 0.249437 0.337457 0 0.878282 0.250951 0.346119 0 0.0977802 0.259369 0.357214 0 0.0977802 0.259369 0.357214 0 0.0977802 0.259369 0.357214 0 0.106216 0.259039 0.362863 0 0.129 0.258005 0.36293 0 0.152368 0.257223 0.358841 0 0.169181 0.25954 0.34999 0 0.185939 0.260355 0.352993 0 0.20962 0.264336 0.36667 0 0.223644 0.26469 0.371909 0 0.241377 0.263198 0.378029 0 0.26118 0.261629 0.380268 0 0.286141 0.261408 0.377465 0 0.305329 0.261652 0.379913 0 0.325423 0.261701 0.379405 0 0.34589 0.26198 0.378744 0 0.359277 0.262657 0.379429 0 0.373972 0.263165 0.379197 0 0.388028 0.263188 0.377716 0 0.407254 0.262929 0.375347 0 0.424147 0.262887 0.373211 0 0.44153 0.262857 0.372461 0 0.461795 0.262268 0.374237 0 0.489668 0.259237 0.374431 0 0.501426 0.261978 0.373753 0 0.519723 0.262876 0.376699 0 0.563824 0.256491 0.380165 0 0.579869 0.265416 0.371309 0 0.689032 0.25766 0.37221 0 0.753019 0.255158 0.348152 0 0.812424 0.265668 0.333601 0 0.879326 0.265511 0.346661 0 0.0980546 0.277405 0.355661 0 0.0980546 0.277405 0.355661 0 0.0980546 0.277405 0.355661 0 0.106282 0.277707 0.360925 0 0.127547 0.279843 0.367306 0 0.154006 0.28229 0.360956 0 0.173787 0.286118 0.344982 0 0.18761 0.286642 0.352046 0 0.209698 0.286638 0.365513 0 0.223029 0.287026 0.370775 0 0.239421 0.285723 0.376605 0 0.261756 0.284224 0.378395 0 0.285761 0.284198 0.376763 0 0.30516 0.283665 0.37918 0 0.324861 0.283389 0.379326 0 0.346187 0.283428 0.378932 0 0.359514 0.283591 0.379942 0 0.375015 0.283863 0.379306 0 0.38792 0.284434 0.378359 0 0.406945 0.284135 0.37601 0 0.424145 0.283911 0.374085 0 0.441854 0.284001 0.372623 0 0.459982 0.285009 0.373048 0 0.490156 0.28146 0.374267 0 0.504999 0.283109 0.374056 0 0.519704 0.284923 0.37483 0 0.556926 0.279249 0.379573 0 0.587777 0.281931 0.377632 0 0.689246 0.280414 0.3745 0 0.75595 0.277827 0.350959 0 0.811164 0.292281 0.333608 0 0.883863 0.288415 0.350501 0 0.0993806 0.311699 0.357574 0 0.0993806 0.311699 0.357574 0 0.0993806 0.311699 0.357574 0 0.106967 0.312098 0.361124 0 0.131547 0.311663 0.361257 0 0.152147 0.30877 0.365893 0 0.174421 0.307206 0.343514 0 0.186043 0.307261 0.350041 0 0.210267 0.3065 0.364653 0 0.223798 0.308299 0.370752 0 0.238883 0.308811 0.376291 0 0.25964 0.308025 0.37909 0 0.285873 0.308198 0.377197 0 0.305403 0.308317 0.379098 0 0.324683 0.308393 0.380006 0 0.346015 0.308148 0.379414 0 0.359739 0.308057 0.380412 0 0.375422 0.308044 0.379963 0 0.388588 0.308325 0.378263 0 0.406437 0.308473 0.376575 0 0.423946 0.308073 0.374002 0 0.441981 0.307897 0.373049 0 0.461263 0.308151 0.371822 0 0.484604 0.307519 0.372093 0 0.508527 0.306186 0.373521 0 0.520374 0.309018 0.372763 0 0.54326 0.308745 0.374465 0 0.593148 0.302118 0.38237 0 0.651634 0.318244 0.356556 0 0.758402 0.302505 0.352072 0 0.811387 0.316033 0.334369 0 0.886843 0.305698 0.354679 0 0.0991916 0.329853 0.359109 0 0.0991916 0.329853 0.359109 0 0.0991916 0.329853 0.359109 0 0.106776 0.330223 0.363 0 0.130229 0.327783 0.360208 0 0.149564 0.325499 0.365525 0 0.17395 0.322227 0.342306 0 0.185514 0.321841 0.348565 0 0.21157 0.322189 0.364443 0 0.225098 0.32514 0.371244 0 0.238656 0.326499 0.376029 0 0.258072 0.326022 0.379961 0 0.286734 0.325471 0.377435 0 0.30536 0.326269 0.379273 0 0.324606 0.326008 0.379839 0 0.345634 0.325571 0.379372 0 0.359768 0.325244 0.380279 0 0.375439 0.325234 0.379833 0 0.389052 0.325304 0.377896 0 0.406257 0.325664 0.376337 0 0.42346 0.325299 0.3738 0 0.441904 0.32483 0.372764 0 0.462003 0.324749 0.371536 0 0.481141 0.325978 0.371472 0 0.511135 0.323219 0.373231 0 0.523364 0.32626 0.372754 0 0.542152 0.327343 0.373638 0 0.594615 0.319466 0.38055 0 0.652978 0.336471 0.356877 0 0.758372 0.323048 0.350694 0 0.81075 0.331845 0.334561 0 0.885174 0.32271 0.354032 0 0.100517 0.345544 0.359382 0 0.100517 0.345544 0.359382 0 0.100517 0.345544 0.359382 0 0.106771 0.345946 0.363165 0 0.126213 0.345217 0.364618 0 0.147018 0.344471 0.365173 0 0.173274 0.341065 0.342281 0 0.184538 0.340774 0.346351 0 0.213218 0.339817 0.363997 0 0.226761 0.342911 0.371449 0 0.239573 0.345931 0.376251 0 0.257222 0.346016 0.380141 0 0.287682 0.344532 0.377156 0 0.305151 0.345317 0.379103 0 0.324414 0.344984 0.37913 0 0.345077 0.344659 0.378967 0 0.359319 0.344247 0.379965 0 0.375365 0.344037 0.379646 0 0.389238 0.344113 0.377835 0 0.406382 0.344601 0.3758 0 0.422918 0.344663 0.373965 0 0.441662 0.344313 0.372418 0 0.461986 0.344308 0.371728 0 0.482164 0.345302 0.370913 0 0.512086 0.343248 0.372938 0 0.526869 0.345915 0.373021 0 0.542848 0.348084 0.37222 0 0.596267 0.340226 0.377834 0 0.659206 0.353379 0.355003 0 0.746494 0.34759 0.341683 0 0.812689 0.349487 0.337385 0 0.881713 0.344733 0.352431 0 0.101288 0.358146 0.359463 0 0.101288 0.358146 0.359463 0 0.101288 0.358146 0.359463 0 0.10756 0.358662 0.363244 0 0.123333 0.359794 0.36805 0 0.147993 0.359088 0.365189 0 0.172741 0.357319 0.342304 0 0.183892 0.356409 0.345235 0 0.214509 0.353874 0.363518 0 0.228048 0.356866 0.371316 0 0.240952 0.359549 0.376749 0 0.257066 0.360753 0.379753 0 0.287074 0.359272 0.376872 0 0.305449 0.359526 0.378924 0 0.324119 0.359519 0.379072 0 0.344886 0.359389 0.378534 0 0.35896 0.359144 0.379761 7753.77 0.375422 0.358898 0.379622 7036.47 0.389388 0.35896 0.377893 0 0.407063 0.359281 0.375464 0 0.422719 0.359739 0.374082 0 0.441517 0.359498 0.372166 0 0.462082 0.359641 0.371757 0 0.483407 0.360627 0.37049 0 0.510445 0.359882 0.373182 0 0.529342 0.361111 0.372986 0 0.542766 0.363817 0.371365 0 0.589328 0.358465 0.374559 0 0.662709 0.365307 0.353906 0 0.736789 0.365596 0.334319 0 0.815552 0.362242 0.340122 0 0.877078 0.360959 0.34991 0 0.0997728 0.374942 0.358341 0 0.0997728 0.374942 0.358341 0 0.0997728 0.374942 0.358341 0 0.108469 0.373547 0.363247 0 0.12446 0.375621 0.368833 0 0.149032 0.374662 0.365146 0 0.171685 0.373994 0.344223 0 0.183152 0.372902 0.344834 0 0.214211 0.369536 0.362167 0 0.229298 0.371982 0.370992 0 0.242459 0.374913 0.377278 0 0.257248 0.376523 0.380058 0 0.285639 0.376088 0.376614 0 0.306128 0.375671 0.378743 0 0.323913 0.376051 0.379296 0 0.344789 0.375915 0.378034 0 0.358567 0.375796 0.379507 7036.43 0.375322 0.375421 0.379511 35413.1 0.389482 0.375454 0.377859 5064.44 0.40756 0.376026 0.375555 0 0.423179 0.376833 0.373773 0 0.441344 0.37702 0.372443 0 0.462604 0.376986 0.371776 0 0.484319 0.377316 0.370449 0 0.507713 0.377115 0.373216 0 0.531765 0.376737 0.373316 0 0.543974 0.379626 0.371736 0 0.577838 0.378145 0.370007 0 0.664114 0.379062 0.355714 0 0.728275 0.386044 0.327403 0 0.818667 0.376355 0.343112 0 0.872737 0.380998 0.347213 0 0.0971553 0.389426 0.357784 0 0.0971553 0.389426 0.357784 0 0.0971553 0.389426 0.357784 0 0.106482 0.38789 0.363151 0 0.125791 0.386939 0.368994 0 0.149107 0.38655 0.365147 0 0.167069 0.387032 0.351625 0 0.183481 0.385912 0.345233 0 0.211254 0.384344 0.36059 0 0.230562 0.384253 0.370475 0 0.243723 0.387608 0.377243 0 0.2576 0.389807 0.380532 0 0.284521 0.390164 0.37644 0 0.306521 0.389161 0.378424 0 0.323731 0.389604 0.379467 0 0.344887 0.389469 0.377771 0 0.358569 0.389694 0.379164 0 0.375145 0.389614 0.379503 5065.68 0.389735 0.389622 0.378001 4992.08 0.408046 0.389996 0.375867 0 0.42359 0.390659 0.37376 0 0.441236 0.390968 0.372808 0 0.462628 0.390477 0.371857 0 0.484755 0.390391 0.370661 0 0.505508 0.390369 0.372701 0 0.533548 0.38789 0.373749 0 0.546071 0.391529 0.371756 0 0.573564 0.3923 0.369179 0 0.669744 0.389896 0.356816 0 0.722916 0.401032 0.323326 0 0.820868 0.388145 0.345039 0 0.869269 0.396445 0.344637 0 0.0940142 0.405985 0.357128 0 0.0940142 0.405985 0.357128 0 0.0940142 0.405985 0.357128 0 0.103209 0.404483 0.362411 0 0.12685 0.400698 0.369861 0 0.149645 0.402023 0.366632 0 0.16505 0.402782 0.356955 0 0.183526 0.402277 0.345768 0 0.207827 0.40277 0.358746 0 0.231603 0.399974 0.369334 0 0.24528 0.402809 0.376985 0 0.258706 0.405391 0.381046 0 0.284183 0.406102 0.376766 0 0.306865 0.40544 0.378412 0 0.323932 0.406196 0.379395 0 0.344947 0.406292 0.378143 0 0.358819 0.406444 0.379147 0 0.374976 0.406608 0.379667 0 0.389927 0.40646 0.378242 0 0.408508 0.406605 0.376254 0 0.424328 0.407116 0.373887 0 0.441015 0.406904 0.372953 0 0.46185 0.405717 0.371762 0 0.484181 0.404837 0.370598 0 0.504429 0.405121 0.371631 0 0.535819 0.402392 0.374089 0 0.548775 0.406066 0.371971 0 0.572756 0.408516 0.36829 0 0.673591 0.404365 0.360831 0 0.725698 0.413957 0.327469 0 0.824348 0.403574 0.347729 0 0.871874 0.421451 0.344716 0 0.0943947 0.420716 0.357323 0 0.0943947 0.420716 0.357323 0 0.0943947 0.420716 0.357323 0 0.100425 0.421206 0.361378 0 0.123551 0.418116 0.370884 0 0.150572 0.418218 0.368129 0 0.16803 0.417854 0.356037 0 0.184027 0.418736 0.346839 0 0.207017 0.419446 0.358475 0 0.231449 0.416201 0.367929 0 0.246633 0.417922 0.3767 0 0.260397 0.421209 0.381572 0 0.28485 0.422829 0.377557 0 0.306279 0.422991 0.378521 0 0.324775 0.423434 0.379235 0 0.34508 0.423888 0.378469 0 0.359099 0.423947 0.379142 0 0.37488 0.423579 0.379563 0 0.389486 0.423029 0.37815 0 0.408191 0.422392 0.376022 0 0.424047 0.421952 0.373756 0 0.440638 0.421705 0.372319 0 0.460644 0.42098 0.371728 0 0.483962 0.420114 0.370294 0 0.505394 0.420687 0.370913 0 0.533936 0.419878 0.374201 0 0.551977 0.422508 0.372955 0 0.572874 0.426003 0.367521 0 0.677876 0.420055 0.363302 0 0.728548 0.428421 0.331999 0 0.829008 0.425602 0.349453 0 0.870135 0.439788 0.344248 0 0.0967677 0.438701 0.356463 0 0.0967677 0.438701 0.356463 0 0.0967677 0.438701 0.356463 0 0.102376 0.439642 0.360229 0 0.120026 0.439848 0.370048 0 0.15165 0.436851 0.368404 0 0.170405 0.435117 0.356594 0 0.185055 0.437164 0.34861 0 0.207186 0.439171 0.359329 0 0.228445 0.43846 0.366616 0 0.24919 0.437918 0.372214 0 0.264307 0.440354 0.379206 0 0.285749 0.443138 0.378265 0 0.306114 0.442861 0.378904 0 0.32523 0.442354 0.378987 0 0.344442 0.442158 0.378023 0 0.358283 0.441482 0.378983 0 0.374328 0.44073 0.379064 0 0.388397 0.440135 0.377982 0 0.407451 0.439333 0.375681 0 0.423663 0.438846 0.37359 0 0.440357 0.438801 0.371772 0 0.459878 0.439399 0.372078 0 0.484614 0.439502 0.370322 0 0.506637 0.4407 0.371059 0 0.531686 0.440911 0.373707 0 0.555367 0.441337 0.373795 0 0.57177 0.446748 0.367467 0 0.679686 0.438868 0.365449 0 0.720523 0.449554 0.329262 0 0.833482 0.458657 0.346471 0 0.866243 0.450092 0.343537 0 0.0988669 0.455697 0.355566 0 0.0988669 0.455697 0.355566 0 0.0988669 0.455697 0.355566 0 0.104689 0.456486 0.359536 0 0.119901 0.458551 0.368666 0 0.151506 0.456202 0.367528 0 0.164616 0.456054 0.364896 0 0.18745 0.455323 0.349259 0 0.208038 0.459154 0.360615 0 0.227644 0.458969 0.366842 0 0.252146 0.456956 0.366307 0 0.266915 0.45771 0.375486 0 0.2856 0.459254 0.37841 0 0.305462 0.458852 0.378911 0 0.325457 0.457841 0.379912 0 0.3438 0.458323 0.377443 0 0.357262 0.457757 0.378757 0 0.373639 0.45731 0.378784 0 0.387902 0.457225 0.377773 0 0.407363 0.457186 0.375744 0 0.423903 0.457582 0.373622 0 0.441202 0.458395 0.37191 0 0.460622 0.459072 0.371912 0 0.48489 0.45928 0.370429 0 0.507792 0.460139 0.371216 0 0.529623 0.461525 0.372579 0 0.558771 0.460118 0.374214 0 0.57439 0.465532 0.368586 0 0.66844 0.460626 0.363888 0 0.726395 0.48006 0.331475 0 0.822021 0.466304 0.341028 0 0.863361 0.45382 0.344793 0 0.102426 0.476398 0.352936 0 0.102426 0.476398 0.352936 0 0.102426 0.476398 0.352936 0 0.107871 0.477238 0.357749 0 0.121747 0.47935 0.367179 0 0.149812 0.479813 0.366879 0 0.161152 0.479692 0.368723 0 0.187519 0.476982 0.347944 0 0.210314 0.477049 0.361618 0 0.226593 0.477782 0.367447 0 0.250823 0.475005 0.366551 0 0.268828 0.47521 0.369683 0 0.286269 0.47657 0.37821 0 0.305361 0.477763 0.379 0 0.324832 0.477772 0.380825 0 0.345091 0.478502 0.377829 0 0.357332 0.479414 0.378299 0 0.373213 0.479339 0.378695 0 0.387907 0.478956 0.377293 0 0.407451 0.479225 0.375877 0 0.424662 0.479775 0.37379 0 0.442205 0.480891 0.371942 0 0.461529 0.481939 0.371375 0 0.484863 0.482342 0.370645 0 0.50854 0.48278 0.37104 0 0.530066 0.484071 0.371658 0 0.559588 0.482516 0.374333 0 0.578088 0.485673 0.369438 0 0.661744 0.488966 0.359386 0 0.728191 0.497795 0.333041 0 0.815532 0.472116 0.338325 0 0.859947 0.457309 0.346274 0 0.107662 0.499066 0.347782 0 0.107662 0.499066 0.347782 0 0.107662 0.499066 0.347782 0 0.112909 0.499548 0.352393 0 0.125169 0.500727 0.361778 0 0.146627 0.502015 0.367974 0 0.161232 0.500148 0.367964 0 0.185678 0.499324 0.347046 0 0.21209 0.496464 0.36182 0 0.227652 0.499375 0.369329 0 0.247049 0.499078 0.369909 0 0.271998 0.498595 0.364949 0 0.289236 0.501934 0.374118 0 0.306198 0.502846 0.37923 0 0.324331 0.503124 0.381015 0 0.346489 0.503208 0.378817 0 0.358726 0.504524 0.378665 0 0.373688 0.505967 0.378666 0 0.388206 0.506505 0.376992 0 0.408044 0.506781 0.375357 0 0.425844 0.507049 0.373816 0 0.443582 0.507935 0.371824 0 0.462125 0.509015 0.370993 0 0.484935 0.50964 0.370085 0 0.509299 0.508944 0.370286 0 0.530923 0.509106 0.370884 0 0.55556 0.508036 0.372689 0 0.582458 0.509391 0.369723 0 0.661309 0.51465 0.354526 0 0.725507 0.501318 0.337697 0 0.792613 0.480842 0.328444 0 0.850398 0.463803 0.342828 0 0.110067 0.520961 0.34355 0 0.110067 0.520961 0.34355 0 0.110067 0.520961 0.34355 0 0.11647 0.521022 0.348076 0 0.129641 0.521825 0.355725 0 0.147932 0.52507 0.365212 0 0.160926 0.525134 0.367712 0 0.185688 0.526057 0.347973 0 0.210021 0.525883 0.360928 0 0.231332 0.525061 0.370386 0 0.244989 0.527884 0.374121 0 0.273043 0.526309 0.366272 0 0.292094 0.52938 0.369887 0 0.305927 0.532114 0.376727 0 0.324525 0.532185 0.380788 0 0.348058 0.532545 0.379147 0 0.361248 0.533675 0.379367 0 0.375683 0.535118 0.378852 0 0.38919 0.536162 0.37717 0 0.40851 0.536739 0.373943 0 0.425693 0.536197 0.372841 0 0.443944 0.535258 0.371233 0 0.462396 0.534831 0.370752 0 0.484331 0.534031 0.369112 0 0.508273 0.533559 0.370151 0 0.532214 0.534348 0.370328 0 0.55279 0.534995 0.370062 0 0.586205 0.529558 0.370015 0 0.660853 0.518689 0.358412 0 0.722473 0.505213 0.338805 0 0.788354 0.482618 0.334033 0 0.846389 0.467243 0.346005 0 0.11135 0.547118 0.341785 0 0.11135 0.547118 0.341785 0 0.11135 0.547118 0.341785 0 0.118462 0.54766 0.346464 0 0.132306 0.549394 0.355031 0 0.148778 0.553712 0.363603 0 0.159497 0.556856 0.367878 0 0.186878 0.555923 0.347151 0 0.209086 0.557641 0.360467 0 0.231476 0.556323 0.369278 0 0.247462 0.556838 0.376432 0 0.271461 0.556832 0.369364 0 0.296373 0.557846 0.367171 0 0.309121 0.561595 0.373794 0 0.323993 0.563168 0.378236 0 0.3474 0.561481 0.378461 0 0.362729 0.560399 0.379767 0 0.376379 0.560574 0.379474 0 0.389534 0.560409 0.377794 0 0.407717 0.560116 0.375062 0 0.424329 0.558572 0.372873 0 0.442107 0.554734 0.372009 0 0.460856 0.552255 0.372238 0 0.482294 0.549447 0.370942 0 0.505539 0.545975 0.372295 0 0.529782 0.542565 0.373134 0 0.549651 0.540324 0.375327 0 0.587229 0.541174 0.373599 0 0.661899 0.531134 0.358799 0 0.7235 0.50807 0.334886 0 0.783185 0.487767 0.339728 0 0.872576 0.553861 0.340182 0 0.113821 0.577586 0.340153 0 0.113821 0.577586 0.340153 0 0.113821 0.577586 0.340153 0 0.120873 0.578196 0.344889 0 0.135564 0.580003 0.354797 0 0.151288 0.584809 0.36239 0 0.160337 0.588197 0.366507 0 0.186853 0.586762 0.345767 0 0.210443 0.585824 0.359793 0 0.230099 0.586163 0.369113 0 0.247788 0.584562 0.374537 0 0.26735 0.584432 0.376746 0 0.298128 0.582268 0.369094 0 0.312646 0.580782 0.371714 0 0.323449 0.580838 0.37729 0 0.342549 0.57823 0.378941 0 0.359032 0.575035 0.381429 0 0.374387 0.5718 0.383352 0 0.386286 0.569324 0.382473 0 0.404058 0.565635 0.380376 0 0.420715 0.56279 0.378191 0 0.43892 0.563262 0.375304 0 0.457826 0.563384 0.374355 0 0.480636 0.563619 0.372023 0 0.506837 0.571232 0.372362 0 0.530886 0.569958 0.373242 0 0.552217 0.570919 0.37515 0 0.584702 0.569639 0.372109 0 0.651331 0.540639 0.355764 0 0.688918 0.521108 0.324435 0 0.782785 0.580186 0.323198 0 0.871113 0.553777 0.345938 0 0.099809 0.647683 0.357608 0 0.099809 0.647683 0.357608 0 0.0998089 0.647683 0.357608 0 0.108371 0.64597 0.360032 0 0.125677 0.642494 0.366458 0 0.155432 0.637381 0.36017 0 0.167227 0.640785 0.355761 0 0.183355 0.649299 0.343153 0 0.207913 0.669939 0.357748 0 0.23403 0.68618 0.370136 0 0.252254 0.686165 0.375817 0 0.270568 0.685221 0.372538 0 0.293651 0.680065 0.370246 0 0.316621 0.672783 0.372792 0 0.337756 0.666029 0.371111 0 0.350244 0.661882 0.373161 0 0.357539 0.659452 0.376509 0 0.367845 0.656019 0.379776 0 0.381009 0.651644 0.379705 0 0.398344 0.646029 0.378188 0 0.41408 0.639866 0.377717 0 0.433076 0.635779 0.378236 0 0.454931 0.637216 0.379262 0 0.4793 0.639111 0.378377 0 0.499023 0.634918 0.374189 0 0.517315 0.631621 0.37317 0 0.536999 0.628373 0.373693 0 0.560993 0.623318 0.367743 0 0.647484 0.619893 0.350486 0 0.707208 0.61582 0.322683 0 0.785719 0.659944 0.329002 0 0.876108 0.671076 0.356172 0 0.071512 0.759613 0.370244 0 0.071512 0.759613 0.370244 0 0.071512 0.759613 0.370244 0 0.0788884 0.755976 0.373703 0 0.0959372 0.749431 0.380399 0 0.128763 0.741435 0.367948 0 0.1547 0.742144 0.364113 0 0.187942 0.73723 0.338454 0 0.202383 0.733139 0.348095 0 0.220037 0.731639 0.357494 0 0.237202 0.728386 0.367457 0 0.250252 0.726666 0.374647 0 0.283034 0.733865 0.368565 0 0.306532 0.751823 0.373438 0 0.325889 0.746741 0.369511 0 0.343091 0.741189 0.371498 0 0.357049 0.732781 0.366499 0 0.369228 0.726752 0.362745 0 0.378119 0.72312 0.360482 0 0.388776 0.721562 0.365141 0 0.400547 0.717723 0.366667 0 0.415853 0.709789 0.362701 0 0.428361 0.703894 0.359122 0 0.452439 0.710531 0.359245 0 0.48424 0.718418 0.362926 0 0.516854 0.72375 0.373537 0 0.544074 0.738956 0.378982 0 0.579479 0.761138 0.376164 0 0.673012 0.759787 0.364778 0 0.684913 0.760261 0.322713 0 0.804843 0.73449 0.336849 0 0.815067 0.737499 0.330737 0 0.00331092 0.87014 0.487246 0 0.00331092 0.87014 0.487246 0 0.00331092 0.87014 0.487246 0 0.0285145 0.874192 0.465385 0 0.0714755 0.885423 0.438758 0 0.12024 0.880223 0.408977 0 0.140036 0.875651 0.403984 0 0.184747 0.864508 0.362524 0 0.219283 0.858324 0.358715 0 0.236856 0.850336 0.364839 0 0.249721 0.844206 0.371597 0 0.261067 0.837887 0.377703 0 0.273276 0.830462 0.385031 0 0.28458 0.823281 0.387528 0 0.303955 0.806114 0.374923 0 0.322248 0.815344 0.379347 0 0.343645 0.823115 0.37494 0 0.362316 0.822111 0.376534 0 0.380942 0.827332 0.376254 0 0.405451 0.827626 0.36988 0 0.422796 0.824967 0.368336 0 0.436125 0.823213 0.373129 0 0.455032 0.820304 0.376875 0 0.474932 0.819672 0.375497 0 0.501869 0.81844 0.374877 0 0.523936 0.823494 0.373305 0 0.547392 0.830739 0.372732 0 0.569297 0.822965 0.368709 0 0.677059 0.834087 0.362475 0 0.702879 0.84153 0.32131 0 0.831972 0.84695 0.342669 0 0.846457 0.853449 0.338931 0 -0.120519 0.92386 0.680548 0 -0.120519 0.92386 0.680548 0 -0.120519 0.92386 0.680548 0 -0.101816 0.921343 0.665517 0 -0.0742209 0.916071 0.649293 0 0.0285485 0.905765 0.518016 0 0.106686 0.89661 0.415918 0 0.143578 0.885951 0.383425 0 0.184412 0.873735 0.361401 0 0.2092 0.868341 0.355137 0 0.227917 0.862205 0.361773 0 0.249498 0.856233 0.368898 0 0.275346 0.862524 0.37349 0 0.300604 0.883528 0.373692 0 0.31769 0.894395 0.379331 0 0.337765 0.898681 0.382043 0 0.35597 0.901411 0.378521 0 0.371035 0.904248 0.379767 0 0.390222 0.90383 0.375124 0 0.409914 0.903721 0.374313 0 0.427212 0.902189 0.368132 0 0.445805 0.900635 0.361091 0 0.460909 0.901343 0.364894 0 0.477996 0.898889 0.368805 0 0.49701 0.89379 0.367004 0 0.518275 0.887092 0.368516 0 0.542837 0.884466 0.372331 0 0.572789 0.892558 0.367218 0 0.676537 0.897801 0.36269 0 0.708948 0.894696 0.324682 0 0.820783 0.895316 0.341266 0 0.854912 0.881821 0.339417 0 0.104465 0.097793 0.364552 0 0.104465 0.097793 0.364552 0 0.104465 0.097793 0.364552 0 0.114901 0.0980802 0.370096 0 0.131104 0.0995454 0.381052 0 0.148521 0.102526 0.383633 0 0.160579 0.103343 0.380962 0 0.178807 0.100394 0.3769 0 0.20972 0.0971261 0.370617 0 0.226449 0.0952443 0.379259 0 0.2442 0.0958752 0.387217 0 0.261453 0.0964746 0.393362 0 0.287935 0.0965339 0.392642 0 0.30905 0.0957217 0.3928 0 0.326458 0.0943486 0.396768 0 0.348538 0.0925543 0.397751 0 0.363946 0.0914565 0.39814 0 0.380935 0.090192 0.401166 0 0.392749 0.0910391 0.401868 0 0.410498 0.0955433 0.395304 0 0.428376 0.0995407 0.388404 0 0.440352 0.103831 0.386475 0 0.451294 0.10517 0.386973 0 0.481867 0.0985653 0.391793 0 0.513613 0.0919414 0.396674 0 0.529815 0.0935129 0.393838 0 0.549198 0.0958244 0.38355 0 0.562039 0.102665 0.372947 0 0.688969 0.101955 0.379947 0 0.728796 0.10679 0.339876 0 0.826819 0.110488 0.348906 0 0.867173 0.107857 0.352159 0 0.104465 0.097793 0.364552 0 0.104465 0.097793 0.364552 0 0.104465 0.097793 0.364552 0 0.114901 0.0980802 0.370096 0 0.131104 0.0995454 0.381052 0 0.148521 0.102526 0.383633 0 0.160579 0.103343 0.380962 0 0.178807 0.100394 0.3769 0 0.20972 0.0971261 0.370617 0 0.226449 0.0952443 0.379259 0 0.2442 0.0958752 0.387217 0 0.261453 0.0964746 0.393362 0 0.287935 0.0965339 0.392642 0 0.30905 0.0957217 0.3928 0 0.326458 0.0943486 0.396768 0 0.348538 0.0925543 0.397751 0 0.363946 0.0914565 0.39814 0 0.380935 0.090192 0.401166 0 0.392749 0.0910391 0.401868 0 0.410498 0.0955433 0.395304 0 0.428376 0.0995407 0.388404 0 0.440352 0.103831 0.386475 0 0.451294 0.10517 0.386973 0 0.481867 0.0985653 0.391793 0 0.513613 0.0919414 0.396674 0 0.529815 0.0935129 0.393838 0 0.549198 0.0958244 0.38355 0 0.562039 0.102665 0.372947 0 0.688969 0.101955 0.379947 0 0.728796 0.10679 0.339876 0 0.826819 0.110488 0.348906 0 0.867173 0.107857 0.352159 0 0.104465 0.097793 0.364552 0 0.104465 0.097793 0.364552 0 0.104465 0.097793 0.364552 0 0.114901 0.0980802 0.370096 0 0.131104 0.0995454 0.381052 0 0.148521 0.102526 0.383633 0 0.160579 0.103343 0.380962 0 0.178807 0.100394 0.3769 0 0.20972 0.0971261 0.370617 0 0.226449 0.0952443 0.379259 0 0.2442 0.0958752 0.387217 0 0.261453 0.0964747 0.393362 0 0.287935 0.0965339 0.392642 0 0.30905 0.0957217 0.3928 0 0.326458 0.0943486 0.396768 0 0.348538 0.0925543 0.397751 0 0.363946 0.0914565 0.39814 0 0.380935 0.090192 0.401166 0 0.392749 0.0910391 0.401868 0 0.410498 0.0955433 0.395304 0 0.428376 0.0995407 0.388404 0 0.440352 0.103831 0.386475 0 0.451294 0.10517 0.386973 0 0.481867 0.0985653 0.391793 0 0.513613 0.0919415 0.396674 0 0.529815 0.093513 0.393838 0 0.549198 0.0958244 0.38355 0 0.562039 0.102665 0.372947 0 0.688969 0.101955 0.379947 0 0.728796 0.10679 0.339876 0 0.826819 0.110488 0.348906 0 0.867173 0.107857 0.352159 0 0.105515 0.108188 0.363713 0 0.105515 0.108188 0.363713 0 0.105515 0.108188 0.363713 0 0.11611 0.108412 0.368959 0 0.132648 0.109587 0.380155 0 0.148936 0.111239 0.38378 0 0.159868 0.1103 0.380538 0 0.176448 0.108371 0.377838 0 0.209252 0.104518 0.370217 0 0.226518 0.104252 0.379138 0 0.244403 0.104776 0.387117 0 0.261604 0.105281 0.393317 0 0.287372 0.104312 0.392175 0 0.308819 0.103159 0.3923 0 0.325911 0.102762 0.396347 0 0.347777 0.101095 0.397446 0 0.363212 0.100113 0.397378 0 0.381022 0.099516 0.400652 0 0.39409 0.100348 0.402172 0 0.413119 0.103886 0.398059 0 0.431038 0.107939 0.391116 0 0.441438 0.1123 0.385764 0 0.450553 0.112705 0.385636 0 0.473743 0.108447 0.388104 0 0.514638 0.0980923 0.396031 0 0.530002 0.100122 0.395051 0 0.549892 0.102226 0.385561 0 0.564775 0.110844 0.37299 0 0.692075 0.109394 0.381846 0 0.73001 0.113506 0.341235 0 0.823974 0.119371 0.347025 0 0.865114 0.116479 0.350147 0 0.108999 0.12546 0.360573 0 0.108999 0.12546 0.360573 0 0.108999 0.12546 0.360573 0 0.1186 0.125424 0.366287 0 0.134525 0.124446 0.377219 0 0.147635 0.123927 0.382791 0 0.159201 0.123474 0.379929 0 0.172154 0.122472 0.379916 0 0.208436 0.120376 0.36938 0 0.227073 0.121435 0.379094 0 0.244478 0.121241 0.386818 0 0.261497 0.121181 0.393265 0 0.286953 0.12065 0.392565 0 0.308424 0.120162 0.391974 0 0.325239 0.120336 0.395418 0 0.346996 0.120847 0.397099 0 0.363805 0.121109 0.39654 0 0.381232 0.121378 0.399425 0 0.395043 0.121216 0.400864 0 0.417266 0.120191 0.401756 0 0.43481 0.120288 0.396031 0 0.443146 0.124334 0.387437 0 0.452419 0.12608 0.383566 0 0.467782 0.124721 0.384643 0 0.516764 0.112716 0.393655 0 0.531033 0.113773 0.396261 0 0.55224 0.118527 0.389761 0 0.56982 0.12933 0.375997 0 0.698055 0.123517 0.385952 0 0.732687 0.127745 0.343917 0 0.830383 0.128612 0.354431 0 0.864829 0.128535 0.350868 0 0.112248 0.143119 0.355315 0 0.112248 0.143119 0.355315 0 0.112248 0.143119 0.355315 0 0.119413 0.142285 0.361104 0 0.134678 0.139897 0.372255 0 0.148454 0.139183 0.378979 0 0.158373 0.138972 0.379063 0 0.170241 0.14105 0.380402 0 0.208062 0.140082 0.368842 0 0.227777 0.14042 0.379274 0 0.244556 0.140674 0.38676 0 0.261373 0.140488 0.393123 0 0.286954 0.14137 0.393382 0 0.308937 0.142446 0.391851 0 0.326434 0.143302 0.394694 0 0.346874 0.143874 0.396361 0 0.363408 0.143269 0.395336 0 0.38043 0.14257 0.397472 0 0.394234 0.140848 0.398907 0 0.410678 0.13888 0.398652 0 0.435089 0.134187 0.399255 0 0.446387 0.13642 0.392958 0 0.454952 0.142178 0.38435 0 0.467432 0.145947 0.381554 0 0.503529 0.140809 0.385881 0 0.531176 0.137794 0.394972 0 0.556372 0.14047 0.393861 0 0.574364 0.148409 0.379824 0 0.698989 0.142129 0.386678 0 0.735169 0.143148 0.346562 0 0.839329 0.140707 0.363322 0 0.867598 0.152268 0.350065 0 0.112048 0.152715 0.353084 0 0.112048 0.152715 0.353084 0 0.112048 0.152715 0.353084 0 0.119458 0.151778 0.35763 0 0.13474 0.149284 0.369092 0 0.149601 0.149918 0.376875 0 0.158924 0.151366 0.379099 0 0.170582 0.152536 0.380537 0 0.207795 0.151722 0.368615 0 0.228216 0.151455 0.379333 0 0.244687 0.152472 0.386789 0 0.261828 0.153272 0.393138 0 0.287017 0.153038 0.393585 0 0.309628 0.154045 0.392002 0 0.326798 0.15503 0.394315 0 0.346762 0.154889 0.395635 0 0.362631 0.154276 0.394801 0 0.379233 0.151945 0.396468 0 0.392427 0.150051 0.397814 0 0.409739 0.147958 0.396967 0 0.431257 0.144494 0.398021 0 0.448485 0.1441 0.396043 0 0.457641 0.151755 0.387706 0 0.467761 0.15846 0.380116 0 0.496222 0.156023 0.38187 0 0.533774 0.150008 0.393521 0 0.558132 0.149926 0.395576 0 0.576119 0.156471 0.381624 0 0.698865 0.151023 0.386667 0 0.735386 0.149191 0.347809 0 0.842594 0.148585 0.365338 0 0.868865 0.162552 0.349822 0 0.110619 0.1609 0.353385 0 0.110619 0.1609 0.353385 0 0.110619 0.1609 0.353385 0 0.118989 0.159981 0.356613 0 0.134889 0.157265 0.366866 0 0.150807 0.158636 0.37577 0 0.15928 0.160284 0.378964 0 0.171141 0.161498 0.380819 0 0.207491 0.161126 0.368455 0 0.228784 0.161442 0.379442 0 0.244857 0.162543 0.3868 0 0.261781 0.162519 0.392926 0 0.287251 0.163013 0.393607 0 0.310012 0.163416 0.392166 0 0.327018 0.164016 0.394308 0 0.346588 0.164117 0.395029 0 0.361195 0.16274 0.394367 0 0.378017 0.160471 0.395674 0 0.39106 0.158924 0.39691 0 0.408914 0.157169 0.396088 0 0.428627 0.155027 0.396785 0 0.450532 0.153877 0.397037 0 0.460122 0.16035 0.390589 0 0.470221 0.168758 0.379608 0 0.491511 0.169002 0.379679 0 0.535584 0.159555 0.392111 0 0.559353 0.158009 0.39714 0 0.577883 0.164336 0.383192 0 0.69706 0.158248 0.386952 0 0.735553 0.15557 0.349183 0 0.839434 0.162175 0.361904 0 0.870277 0.170068 0.35228 0 0.107079 0.188862 0.357875 0 0.107079 0.188862 0.357875 0 0.107079 0.188862 0.357875 0 0.116031 0.189213 0.359859 0 0.132181 0.189999 0.367353 0 0.153032 0.189124 0.374056 0 0.161406 0.191174 0.37842 0 0.173368 0.193403 0.381435 0 0.207649 0.194586 0.368028 0 0.228186 0.1936 0.378574 0 0.245987 0.194258 0.386732 0 0.262561 0.195687 0.392875 0 0.287907 0.196822 0.393875 0 0.310957 0.197247 0.392622 0 0.327909 0.197104 0.39471 0 0.345764 0.197444 0.393641 0 0.35885 0.197673 0.392209 0 0.374958 0.196782 0.393756 0 0.389536 0.196054 0.394238 0 0.408609 0.195571 0.393421 0 0.425227 0.194692 0.392463 0 0.449451 0.191869 0.394275 0 0.466917 0.191456 0.394538 0 0.476651 0.195679 0.390318 0 0.491367 0.199376 0.379189 0 0.526572 0.193937 0.384333 0 0.552588 0.191339 0.393047 0 0.584187 0.190028 0.38722 0 0.688711 0.19411 0.383553 0 0.741392 0.197265 0.35075 0 0.822721 0.204288 0.349562 0 0.876705 0.198499 0.361981 0 0.104709 0.226425 0.363468 0 0.104709 0.226425 0.363468 0 0.104709 0.226425 0.363468 0 0.113224 0.226464 0.3668 0 0.13111 0.226566 0.371476 0 0.15045 0.226384 0.372312 0 0.162959 0.225291 0.376361 0 0.175225 0.228567 0.380039 0 0.209099 0.232601 0.368053 0 0.228742 0.235946 0.378378 0 0.249846 0.236545 0.387936 0 0.263943 0.235919 0.393038 0 0.287465 0.23396 0.393134 0 0.308737 0.232154 0.392245 0 0.326834 0.230216 0.394383 0 0.345356 0.228899 0.395021 0 0.358296 0.228191 0.392918 0 0.372803 0.227364 0.393516 0 0.385267 0.226524 0.394029 0 0.405064 0.224487 0.392538 0 0.422685 0.224013 0.391698 0 0.4415 0.224733 0.391558 0 0.47024 0.222107 0.393671 0 0.482698 0.224974 0.392815 0 0.498883 0.227349 0.38771 0 0.515411 0.2363 0.380677 0 0.557987 0.230455 0.387062 0 0.589474 0.229877 0.389875 0 0.67706 0.233756 0.376347 0 0.744702 0.22936 0.35395 0 0.822078 0.23682 0.348962 0 0.877434 0.234251 0.358529 0 0.105449 0.244197 0.363915 0 0.105449 0.244197 0.363915 0 0.105449 0.244197 0.363915 0 0.112635 0.245032 0.368147 0 0.129856 0.245356 0.375167 0 0.149903 0.245489 0.372408 0 0.162387 0.244662 0.375438 0 0.17999 0.247006 0.375487 0 0.211479 0.249934 0.369104 0 0.229034 0.251133 0.378602 0 0.248102 0.248934 0.387373 0 0.263403 0.247524 0.392993 0 0.284727 0.245128 0.394832 0 0.307031 0.243173 0.392963 0 0.3258 0.242411 0.394771 0 0.344568 0.24259 0.395598 0 0.358191 0.243037 0.393274 0 0.373047 0.243993 0.393057 0 0.385712 0.245088 0.393526 0 0.405032 0.246048 0.390643 0 0.42264 0.246369 0.389182 0 0.442504 0.246806 0.389001 0 0.467434 0.245234 0.391071 0 0.486545 0.245178 0.390833 0 0.498372 0.248119 0.387424 0 0.519665 0.249257 0.38453 0 0.55026 0.250154 0.383034 0 0.586387 0.24814 0.389156 0 0.682808 0.246436 0.38184 0 0.746286 0.243079 0.356262 0 0.826939 0.251814 0.353942 0 0.876966 0.251416 0.357362 0 0.105369 0.258901 0.362835 0 0.105369 0.258901 0.362835 0 0.105369 0.258901 0.362835 0 0.113859 0.258829 0.368147 0 0.129235 0.260232 0.377328 0 0.149272 0.261013 0.37717 0 0.16219 0.259637 0.37631 0 0.182969 0.25982 0.373262 0 0.212891 0.263867 0.369648 0 0.22827 0.263528 0.378241 0 0.246229 0.261731 0.386442 0 0.262825 0.260216 0.392536 0 0.284084 0.260673 0.394572 0 0.307 0.260555 0.391722 0 0.325526 0.260705 0.393747 0 0.345143 0.261131 0.39437 0 0.359395 0.262096 0.392392 0 0.373986 0.263317 0.392187 0 0.38677 0.263416 0.392663 0 0.405217 0.263618 0.390565 0 0.422597 0.263285 0.388194 0 0.442358 0.262457 0.388364 0 0.464607 0.261069 0.389983 0 0.488527 0.259317 0.390659 0 0.500743 0.262279 0.387839 0 0.522023 0.26173 0.386936 0 0.554278 0.261815 0.387572 0 0.583443 0.263463 0.387017 0 0.684278 0.258898 0.384661 0 0.747946 0.255907 0.358112 0 0.832635 0.263671 0.359437 0 0.878004 0.265962 0.357909 0 0.104915 0.277005 0.361536 0 0.104915 0.277005 0.361536 0 0.104915 0.277005 0.361536 0 0.114536 0.277228 0.367327 0 0.131654 0.279185 0.377709 0 0.148872 0.28307 0.382176 0 0.162473 0.284312 0.376909 0 0.192658 0.283175 0.36199 0 0.213423 0.285903 0.368712 0 0.227502 0.285774 0.377074 0 0.244233 0.285175 0.384617 0 0.263144 0.284184 0.391858 0 0.284395 0.284259 0.393175 0 0.306803 0.283588 0.390844 0 0.325483 0.283609 0.393098 0 0.34566 0.283772 0.394379 0 0.359938 0.283873 0.392693 0 0.374685 0.284296 0.392905 0 0.387074 0.284494 0.393088 0 0.404805 0.284635 0.39164 0 0.422482 0.284289 0.388821 0 0.44137 0.284343 0.387552 0 0.461237 0.284209 0.388203 0 0.490097 0.280843 0.390152 0 0.504858 0.282906 0.387724 0 0.520719 0.283985 0.385977 0 0.560461 0.277696 0.394225 0 0.583668 0.284913 0.386163 0 0.681364 0.282822 0.385682 0 0.751 0.278426 0.360605 0 0.835649 0.288321 0.362962 0 0.879975 0.290626 0.360648 0 0.105387 0.312043 0.361924 0 0.105387 0.312043 0.361924 0 0.105387 0.312043 0.361924 0 0.114487 0.31222 0.365456 0 0.135671 0.311073 0.373683 0 0.151371 0.31029 0.379371 0 0.161707 0.309576 0.377184 0 0.191521 0.305105 0.359213 0 0.213911 0.306336 0.367503 0 0.228332 0.308265 0.376925 0 0.243874 0.308784 0.384157 0 0.261708 0.308195 0.391199 0 0.284765 0.308347 0.39317 0 0.306634 0.308582 0.391582 0 0.32576 0.308426 0.393121 0 0.345395 0.308482 0.39505 0 0.360109 0.30828 0.393211 0 0.375314 0.308185 0.393485 0 0.386988 0.308312 0.393681 0 0.404969 0.308159 0.391502 0 0.421878 0.308044 0.389607 0 0.441379 0.307799 0.387348 0 0.460854 0.307996 0.386714 0 0.485715 0.306095 0.387885 0 0.508505 0.305729 0.386822 0 0.519178 0.309207 0.385861 0 0.549926 0.305496 0.388363 0 0.589992 0.304306 0.393319 0 0.650793 0.318631 0.369989 0 0.753713 0.301667 0.363028 0 0.824595 0.314932 0.356234 0 0.88282 0.308019 0.366238 0 0.105442 0.330226 0.363595 0 0.105442 0.330226 0.363595 0 0.105442 0.330226 0.363595 0 0.113671 0.329772 0.367258 0 0.131216 0.327684 0.375656 0 0.151521 0.324509 0.378226 0 0.161176 0.324729 0.377427 0 0.182951 0.321549 0.367201 0 0.215389 0.322338 0.367372 0 0.229885 0.325 0.376652 0 0.243823 0.326364 0.38395 0 0.261207 0.326123 0.39092 0 0.285212 0.325783 0.393787 0 0.306591 0.326171 0.391777 0 0.32554 0.325619 0.393164 0 0.345001 0.325317 0.394895 0 0.359984 0.325069 0.39313 0 0.375432 0.325036 0.393261 0 0.387366 0.325237 0.393644 0 0.404952 0.325278 0.391065 0 0.421445 0.325276 0.389328 0 0.441467 0.324632 0.387314 0 0.461468 0.32481 0.386651 0 0.482216 0.324997 0.385978 0 0.510973 0.322925 0.386671 0 0.52255 0.32623 0.386282 0 0.543162 0.326175 0.38457 0 0.594092 0.318893 0.397142 0 0.649319 0.337652 0.369293 0 0.753831 0.322164 0.361918 0 0.818017 0.332439 0.352202 0 0.884665 0.322492 0.369447 0 0.105953 0.345682 0.363329 0 0.105953 0.345682 0.363329 0 0.105953 0.345682 0.363329 0 0.112829 0.346088 0.367221 0 0.128297 0.345932 0.375972 0 0.147435 0.343323 0.380584 0 0.160906 0.342419 0.37658 0 0.176784 0.341227 0.375723 0 0.217177 0.339746 0.366955 0 0.231885 0.342598 0.376683 0 0.244036 0.345746 0.383653 0 0.260585 0.345515 0.390432 0 0.285695 0.344589 0.394117 0 0.306478 0.344981 0.391157 0 0.324975 0.344778 0.392765 0 0.344777 0.344256 0.394297 0 0.359608 0.344059 0.392843 0 0.375412 0.343977 0.392951 0 0.387802 0.344103 0.393542 0 0.404599 0.344542 0.39115 0 0.4215 0.344498 0.388823 0 0.440949 0.344303 0.387526 0 0.46165 0.3442 0.386325 0 0.481497 0.345073 0.385632 0 0.512708 0.342733 0.386308 0 0.526222 0.345892 0.385884 0 0.54217 0.347804 0.385022 0 0.597883 0.339086 0.395397 0 0.654561 0.354533 0.366109 0 0.746821 0.344864 0.356069 0 0.818126 0.352237 0.352017 0 0.883405 0.343844 0.368612 0 0.106732 0.358351 0.363426 0 0.106732 0.358351 0.363426 0 0.106732 0.358351 0.363426 0 0.11357 0.358977 0.367191 0 0.128203 0.35966 0.375773 0 0.14516 0.359745 0.382789 0 0.160693 0.357757 0.375702 0 0.173631 0.357345 0.378557 0 0.218491 0.353816 0.366479 0 0.233478 0.356128 0.376483 0 0.245199 0.359434 0.383259 0 0.26029 0.360326 0.38995 0 0.28548 0.359107 0.394105 0 0.306566 0.359324 0.390865 0 0.324703 0.359485 0.392479 0 0.344526 0.359076 0.394067 0 0.359495 0.358909 0.392518 0 0.375507 0.358831 0.39286 0 0.388032 0.358914 0.393483 0 0.404889 0.359362 0.391277 0 0.42171 0.359359 0.388458 0 0.440505 0.359573 0.387626 0 0.461906 0.359575 0.386072 0 0.482439 0.360664 0.385839 0 0.510868 0.359916 0.385145 0 0.528931 0.361198 0.385761 0 0.541479 0.364132 0.385569 0 0.600554 0.354356 0.393822 0 0.658501 0.366105 0.36418 0 0.737839 0.362924 0.348808 0 0.818139 0.36636 0.35211 0 0.881561 0.359037 0.367236 0 0.107017 0.373678 0.363979 0 0.107017 0.373678 0.363979 0 0.107017 0.373678 0.363979 0 0.115084 0.374014 0.367519 0 0.129129 0.375965 0.375394 0 0.144231 0.376482 0.383595 0 0.15933 0.375098 0.375094 0 0.171033 0.374602 0.377734 0 0.219621 0.36888 0.366171 0 0.235089 0.370962 0.376057 0 0.247151 0.374344 0.383366 0 0.260063 0.376592 0.389504 0 0.284443 0.375788 0.393837 0 0.307072 0.375654 0.391108 0 0.32475 0.375958 0.392156 0 0.344014 0.375737 0.394085 0 0.359342 0.375415 0.392117 0 0.375603 0.37526 0.392744 5066.13 0.388159 0.375445 0.393416 4993.08 0.405587 0.376192 0.391381 0 0.42181 0.376811 0.388636 0 0.440738 0.377241 0.387426 0 0.462281 0.377176 0.386261 0 0.483413 0.377422 0.386068 0 0.509631 0.376735 0.384804 0 0.531329 0.376989 0.385637 0 0.542763 0.379771 0.385902 0 0.590277 0.373215 0.388579 0 0.66064 0.379765 0.364053 0 0.729373 0.383408 0.342011 0 0.820972 0.380794 0.354394 0 0.877813 0.378597 0.364193 0 0.104983 0.388047 0.36388 0 0.104983 0.388047 0.36388 0 0.104983 0.388047 0.36388 0 0.114903 0.38671 0.368681 0 0.130024 0.387334 0.375348 0 0.145091 0.388091 0.383056 0 0.158779 0.388129 0.375242 0 0.170134 0.388077 0.376714 0 0.218016 0.383174 0.365357 0 0.236305 0.383323 0.375608 0 0.248812 0.386741 0.383412 0 0.260451 0.389934 0.389274 0 0.283511 0.389745 0.393512 0 0.307477 0.389075 0.391294 0 0.324865 0.389426 0.391959 0 0.343666 0.389679 0.394137 0 0.359283 0.389573 0.391873 0 0.375714 0.389647 0.392531 4993.13 0.388551 0.38986 0.393519 28159.6 0.406271 0.390301 0.391646 3956.35 0.421893 0.390952 0.388972 0 0.440894 0.391069 0.38736 0 0.46216 0.390705 0.386602 0 0.483953 0.390354 0.385982 0 0.507744 0.38949 0.384199 0 0.53294 0.388194 0.385354 0 0.545125 0.391418 0.385748 0 0.58229 0.388692 0.384308 0 0.661192 0.391976 0.366742 0 0.722528 0.399341 0.336584 0 0.823852 0.392347 0.356428 0 0.874407 0.393776 0.361474 0 0.10166 0.40465 0.363164 0 0.10166 0.40465 0.363164 0 0.10166 0.40465 0.363164 0 0.11194 0.402937 0.368305 0 0.130196 0.401874 0.376598 0 0.146473 0.403132 0.382133 0 0.157505 0.404503 0.378519 0 0.170763 0.40382 0.376386 0 0.21534 0.401537 0.363885 0 0.237114 0.399377 0.375854 0 0.250899 0.401533 0.383256 0 0.261715 0.405199 0.389068 0 0.282414 0.406511 0.393133 0 0.307944 0.405614 0.391328 0 0.325126 0.40628 0.392067 0 0.343682 0.406688 0.394375 0 0.359081 0.406627 0.392181 0 0.375772 0.406544 0.39238 0 0.388893 0.406645 0.393728 3956.36 0.40682 0.406824 0.392027 3718.19 0.422279 0.40718 0.389431 0 0.440733 0.406441 0.387146 0 0.461099 0.405598 0.38667 0 0.483134 0.404516 0.385381 0 0.505609 0.404664 0.383726 0 0.535568 0.40256 0.385637 0 0.547875 0.406175 0.385359 0 0.573112 0.408315 0.382759 0 0.668099 0.405458 0.368665 0 0.717842 0.416838 0.335267 0 0.828227 0.407713 0.359139 0 0.872509 0.421376 0.357448 0 0.0997476 0.420687 0.361383 0 0.0997476 0.420687 0.361383 0 0.0997476 0.420687 0.361383 0 0.108812 0.41995 0.367291 0 0.130613 0.417563 0.378085 0 0.146392 0.419342 0.384221 0 0.159445 0.420342 0.377802 0 0.171548 0.419955 0.376659 0 0.211952 0.419472 0.362182 0 0.237272 0.415742 0.376027 0 0.252797 0.416478 0.382806 0 0.263857 0.420652 0.389283 0 0.282475 0.423502 0.39351 0 0.307681 0.423037 0.391145 0 0.325674 0.423457 0.392386 0 0.344075 0.423976 0.394529 0 0.358908 0.423892 0.392522 0 0.37557 0.423155 0.392048 0 0.388688 0.42265 0.393262 0 0.406492 0.422109 0.3919 0 0.422203 0.421802 0.389314 0 0.439805 0.421385 0.387022 0 0.460383 0.420752 0.386041 0 0.482728 0.420043 0.385207 0 0.506231 0.420797 0.383667 0 0.535141 0.419784 0.385398 0 0.551059 0.423155 0.385596 0 0.571447 0.426368 0.383801 0 0.673306 0.421197 0.372702 0 0.717267 0.432639 0.33896 0 0.834881 0.431581 0.361382 0 0.868022 0.439452 0.354916 0 0.101778 0.439087 0.360279 0 0.101778 0.439087 0.360279 0 0.101778 0.439087 0.360279 0 0.108946 0.43969 0.364868 0 0.128754 0.438539 0.37738 0 0.146874 0.438411 0.386398 0 0.162013 0.437898 0.377581 0 0.171852 0.439314 0.3782 0 0.211967 0.439454 0.362907 0 0.235018 0.437788 0.374899 0 0.25429 0.436189 0.383341 0 0.266651 0.439407 0.389211 0 0.283523 0.443366 0.393978 0 0.306809 0.442891 0.390774 0 0.32589 0.44218 0.392181 0 0.343721 0.44171 0.394182 0 0.358252 0.44138 0.39224 0 0.374537 0.440601 0.391862 0 0.387771 0.439843 0.392476 0 0.405756 0.439173 0.391535 0 0.422055 0.438694 0.389153 0 0.439132 0.439096 0.387112 0 0.460344 0.439386 0.38566 0 0.483069 0.43985 0.385802 0 0.507539 0.440588 0.38375 0 0.533867 0.440171 0.385039 0 0.554433 0.441829 0.386372 0 0.570178 0.447308 0.384485 0 0.676946 0.439319 0.375032 0 0.714858 0.449712 0.341657 0 0.839402 0.453768 0.362434 0 0.862409 0.450006 0.352916 0 0.104092 0.455892 0.359581 0 0.104092 0.455892 0.359581 0 0.104092 0.455892 0.359581 0 0.110286 0.45708 0.363573 0 0.128429 0.457541 0.374821 0 0.147991 0.45663 0.387522 0 0.161984 0.456416 0.381224 0 0.173347 0.458305 0.380063 0 0.212361 0.459673 0.363796 0 0.231884 0.460043 0.373662 0 0.253757 0.456149 0.383056 0 0.269436 0.455802 0.387868 0 0.285469 0.458756 0.391831 0 0.306052 0.458962 0.390824 0 0.32591 0.458155 0.391702 0 0.342631 0.458064 0.394044 0 0.357665 0.457552 0.391956 0 0.37374 0.457507 0.391975 0 0.387157 0.457287 0.392448 0 0.405747 0.457102 0.391365 0 0.42239 0.457544 0.389268 0 0.440066 0.45852 0.387537 0 0.46083 0.458995 0.385722 0 0.483336 0.459505 0.38604 0 0.508768 0.459957 0.383605 0 0.5314 0.460852 0.384619 0 0.55789 0.460367 0.386878 0 0.572763 0.466042 0.384758 0 0.672181 0.458492 0.378118 0 0.718965 0.478521 0.343199 0 0.832739 0.461515 0.360739 0 0.859535 0.454242 0.353944 0 0.107097 0.476572 0.358141 0 0.107097 0.476572 0.358141 0 0.107097 0.476572 0.358141 0 0.113081 0.47758 0.362571 0 0.129475 0.478924 0.37294 0 0.149002 0.478669 0.385533 0 0.159708 0.479041 0.384985 0 0.175858 0.477499 0.381007 0 0.21447 0.477298 0.364409 0 0.230619 0.478682 0.373937 0 0.251203 0.475562 0.382025 0 0.270522 0.47321 0.386457 0 0.287413 0.475662 0.389467 0 0.305743 0.477965 0.391088 0 0.326126 0.477956 0.391866 0 0.342927 0.4791 0.39399 0 0.357507 0.479137 0.391757 0 0.373729 0.479103 0.391702 0 0.386969 0.479027 0.392631 0 0.406146 0.479169 0.391117 0 0.423021 0.479801 0.389321 0 0.441245 0.480759 0.387707 0 0.461304 0.481855 0.385974 0 0.484005 0.482133 0.385603 0 0.508974 0.482616 0.383334 0 0.530373 0.483972 0.384201 0 0.560845 0.481658 0.386351 0 0.576536 0.485774 0.385109 0 0.664774 0.486186 0.374351 0 0.72285 0.498337 0.343011 0 0.820231 0.468377 0.356983 0 0.856164 0.457858 0.35531 0 0.112013 0.498993 0.353122 0 0.112013 0.498993 0.353122 0 0.112013 0.498993 0.353122 0 0.117824 0.499545 0.357502 0 0.132685 0.499813 0.368376 0 0.150456 0.49949 0.380882 0 0.159037 0.500494 0.382591 0 0.174492 0.498837 0.379747 0 0.217023 0.49625 0.365165 0 0.231982 0.50001 0.373759 0 0.247749 0.501147 0.381142 0 0.268773 0.499028 0.38695 0 0.292597 0.499525 0.384632 0 0.307946 0.502154 0.389634 0 0.326072 0.502926 0.391855 0 0.344726 0.50356 0.394266 0 0.357715 0.505105 0.391883 0 0.374321 0.505796 0.391002 0 0.387516 0.506262 0.392291 0 0.406744 0.5065 0.391151 0 0.42439 0.506871 0.389115 0 0.442426 0.507599 0.387543 0 0.461569 0.508705 0.385714 0 0.484466 0.508857 0.384941 0 0.509232 0.508713 0.383185 0 0.531333 0.508656 0.38324 0 0.557549 0.50697 0.384823 0 0.580934 0.509403 0.384867 0 0.663542 0.513997 0.369057 0 0.721305 0.502649 0.345971 0 0.809217 0.475095 0.354272 0 0.851326 0.462444 0.355834 0 0.114877 0.52052 0.349926 0 0.114877 0.52052 0.349926 0 0.114877 0.52052 0.349926 0 0.121312 0.52104 0.352939 0 0.135602 0.521738 0.361728 0 0.154174 0.521991 0.375236 0 0.162501 0.524241 0.377866 0 0.17261 0.526704 0.379429 0 0.215678 0.525394 0.364936 0 0.235578 0.525708 0.374875 0 0.247829 0.529379 0.38095 0 0.267824 0.528093 0.38805 0 0.296017 0.526987 0.379791 0 0.310453 0.529225 0.38688 0 0.326401 0.531736 0.39145 0 0.347133 0.532342 0.394352 0 0.360511 0.53384 0.392283 0 0.375449 0.5353 0.390952 0 0.388207 0.536003 0.391058 0 0.406648 0.536217 0.390471 0 0.42484 0.535612 0.388027 0 0.442891 0.535461 0.386968 0 0.462132 0.534998 0.385198 0 0.483307 0.534138 0.38457 0 0.508556 0.533113 0.382688 0 0.532453 0.533458 0.381984 0 0.553694 0.533931 0.382774 0 0.585512 0.531235 0.383158 0 0.660471 0.517481 0.3718 0 0.718428 0.505586 0.347042 0 0.788137 0.482658 0.346752 0 0.847786 0.466328 0.359283 0 0.118236 0.546377 0.346504 0 0.118236 0.546377 0.346504 0 0.118236 0.546377 0.346504 0 0.124818 0.547781 0.350778 0 0.138565 0.549832 0.359253 0 0.157423 0.550267 0.371027 0 0.165571 0.552078 0.375292 0 0.174517 0.555697 0.379695 0 0.214257 0.557546 0.363952 0 0.236237 0.555763 0.375713 0 0.25129 0.556752 0.381573 0 0.26539 0.559761 0.38782 0 0.296465 0.558281 0.380447 0 0.313603 0.559833 0.381703 0 0.328457 0.561216 0.389074 0 0.347094 0.561348 0.393961 0 0.362482 0.560655 0.392226 0 0.376148 0.561054 0.391531 0 0.388273 0.560969 0.391554 0 0.405591 0.560689 0.39 0 0.42265 0.558581 0.387842 0 0.441817 0.556305 0.38647 0 0.460996 0.553629 0.385683 0 0.481129 0.551187 0.385428 0 0.506769 0.547356 0.383291 0 0.529848 0.543925 0.384724 0 0.550758 0.541379 0.386047 0 0.586662 0.542318 0.387371 0 0.658792 0.532068 0.370986 0 0.719907 0.51076 0.343644 0 0.785364 0.486514 0.353948 0 0.871363 0.552416 0.353526 0 0.120751 0.576618 0.345026 0 0.120751 0.576618 0.345026 0 0.120751 0.576618 0.345026 0 0.127839 0.578171 0.349677 0 0.141734 0.580724 0.358993 0 0.158123 0.582497 0.369607 0 0.166773 0.583726 0.373833 0 0.176246 0.586325 0.378596 0 0.215584 0.585678 0.36324 0 0.234914 0.585991 0.374533 0 0.252585 0.584208 0.38274 0 0.267625 0.585291 0.38804 0 0.295736 0.584495 0.383872 0 0.315428 0.582158 0.381093 0 0.327789 0.581521 0.386311 0 0.344513 0.578655 0.39337 0 0.359927 0.575355 0.394591 0 0.374527 0.572387 0.393945 0 0.385359 0.570248 0.394696 0 0.402066 0.566912 0.393963 0 0.418489 0.564508 0.392195 0 0.437608 0.56203 0.390426 0 0.457718 0.562021 0.38892 0 0.478795 0.562444 0.387998 0 0.506896 0.570877 0.38515 0 0.531 0.570978 0.386087 0 0.553593 0.571166 0.386856 0 0.585612 0.571135 0.3876 0 0.647387 0.543782 0.368306 0 0.686342 0.523593 0.336154 0 0.806391 0.570125 0.350398 0 0.86656 0.55364 0.355948 0 0.0991426 0.647906 0.369362 0 0.0991426 0.647906 0.369362 0 0.0991426 0.647906 0.369362 0 0.114348 0.644725 0.364882 0 0.134732 0.64065 0.368391 0 0.155977 0.637763 0.370763 0 0.166032 0.63557 0.3709 0 0.174206 0.63789 0.374139 0 0.214304 0.669843 0.361943 0 0.239931 0.685234 0.376938 0 0.256049 0.684342 0.383463 0 0.26961 0.683404 0.387842 0 0.29458 0.680307 0.382715 0 0.317091 0.672845 0.386671 0 0.334428 0.666648 0.387383 0 0.350295 0.661764 0.38255 0 0.360069 0.658533 0.383809 0 0.370311 0.655121 0.387736 0 0.38084 0.651601 0.39118 0 0.397791 0.645948 0.393299 0 0.413226 0.640889 0.394152 0 0.433606 0.639086 0.392918 0 0.455169 0.640033 0.392231 0 0.478199 0.640367 0.391684 0 0.497646 0.637312 0.387583 0 0.518279 0.633526 0.383868 0 0.538204 0.629556 0.383054 0 0.559261 0.625691 0.382149 0 0.641941 0.61953 0.363812 0 0.703328 0.618129 0.332789 0 0.784977 0.671526 0.341111 0 0.881171 0.67871 0.368714 0 0.0333439 0.762296 0.447715 0 0.0333439 0.762296 0.447715 0 0.0333439 0.762296 0.447715 0 0.0863588 0.75502 0.379496 0 0.103048 0.746966 0.383774 0 0.125177 0.741593 0.382762 0 0.139915 0.742716 0.382554 0 0.167242 0.737564 0.373486 0 0.20684 0.732481 0.351087 0 0.227786 0.729243 0.363785 0 0.243659 0.726681 0.373115 0 0.256856 0.727827 0.381278 0 0.280668 0.753362 0.392722 0 0.309829 0.758851 0.386191 0 0.325201 0.756194 0.38666 0 0.346342 0.744236 0.382901 0 0.35545 0.741917 0.383696 0 0.368844 0.733481 0.377688 0 0.3786 0.728454 0.375633 0 0.39358 0.722135 0.374559 0 0.402481 0.720735 0.376644 0 0.414491 0.716753 0.376381 0 0.428233 0.710125 0.372731 0 0.453429 0.719697 0.375232 0 0.487953 0.72921 0.380399 0 0.522002 0.732649 0.386131 0 0.545574 0.742391 0.390128 0 0.576529 0.759898 0.391589 0 0.670231 0.75903 0.376095 0 0.682366 0.759606 0.333143 0 0.800785 0.737976 0.347635 0 0.813928 0.743165 0.340147 0 -0.0797714 0.895828 0.643519 0 -0.0797714 0.895828 0.643519 0 -0.0797714 0.895828 0.643519 0 0.00526378 0.888077 0.52329 0 0.0833484 0.884538 0.436415 0 0.113267 0.880461 0.428329 0 0.121672 0.878625 0.433552 0 0.152778 0.87374 0.417973 0 0.223408 0.856527 0.36117 0 0.240142 0.849926 0.369577 0 0.256295 0.837671 0.376995 0 0.266644 0.832215 0.384282 0 0.277893 0.824752 0.390023 0 0.287594 0.819358 0.39574 0 0.296834 0.812291 0.3998 0 0.326686 0.821105 0.391082 0 0.339763 0.823434 0.393864 0 0.363882 0.821181 0.389009 0 0.38254 0.82678 0.388125 0 0.401218 0.829466 0.388754 0 0.420052 0.826419 0.382285 0 0.441182 0.822618 0.380363 0 0.457669 0.819912 0.386453 0 0.475886 0.816191 0.390208 0 0.499248 0.817579 0.387745 0 0.523209 0.82084 0.383655 0 0.546831 0.826859 0.383783 0 0.566026 0.813192 0.38643 0 0.672388 0.834537 0.373924 0 0.699932 0.840356 0.332593 0 0.832729 0.848498 0.355166 0 0.841645 0.854289 0.349295 0 -0.19843 0.927355 0.818318 0 -0.19843 0.927355 0.818318 0 -0.19843 0.927355 0.818318 0 -0.135004 0.921346 0.733606 0 -0.0681132 0.914365 0.652245 0 -0.0253224 0.90821 0.616742 0 -0.00801852 0.905418 0.605345 0 0.113837 0.895078 0.428399 0 0.190273 0.872489 0.360732 0 0.211838 0.867732 0.357292 0 0.229007 0.862834 0.365804 0 0.252862 0.856374 0.376407 0 0.279825 0.859496 0.383331 0 0.306221 0.881102 0.380818 0 0.323293 0.892681 0.385499 0 0.338421 0.899178 0.391753 0 0.352915 0.901955 0.393759 0 0.372156 0.904396 0.39146 0 0.385706 0.906818 0.393917 0 0.409449 0.903181 0.388444 0 0.422791 0.903639 0.388005 0 0.441097 0.901917 0.380464 0 0.464861 0.898866 0.374604 0 0.479894 0.896696 0.379046 0 0.49625 0.892735 0.380148 0 0.519552 0.885179 0.380582 0 0.5435 0.885815 0.38136 0 0.570463 0.893823 0.38207 0 0.673554 0.898174 0.374553 0 0.703256 0.895788 0.335 0 0.823532 0.895842 0.356224 0 0.850978 0.884668 0.349901 0 0.116621 0.0946943 0.377193 0 0.116621 0.0946943 0.377193 0 0.116621 0.0946943 0.377193 0 0.125495 0.0962489 0.380657 0 0.139196 0.100323 0.387346 0 0.151832 0.103262 0.395243 0 0.159832 0.102999 0.400139 0 0.173931 0.101085 0.402813 0 0.205962 0.0964475 0.389437 0 0.235045 0.0948435 0.386443 0 0.252176 0.0954534 0.395875 0 0.267737 0.0955505 0.403372 0 0.289317 0.095247 0.412375 0 0.307649 0.0947131 0.416868 0 0.329824 0.0930456 0.414597 0 0.350977 0.0914731 0.416935 0 0.365908 0.0898268 0.420647 0 0.379196 0.0921758 0.418044 0 0.388465 0.095833 0.412642 0 0.403076 0.100787 0.408607 0 0.426267 0.0994436 0.41194 0 0.436366 0.10354 0.411351 0 0.450332 0.102586 0.410007 0 0.495728 0.0905441 0.416773 0 0.510385 0.0928944 0.412879 0 0.527347 0.0955116 0.406309 0 0.544193 0.0994225 0.395351 0 0.553529 0.103941 0.392637 0 0.680192 0.104162 0.391789 0 0.724143 0.108853 0.353301 0 0.837302 0.108071 0.375096 0 0.870545 0.102745 0.377369 0 0.116621 0.0946943 0.377193 0 0.116621 0.0946943 0.377193 0 0.116621 0.0946943 0.377193 0 0.125495 0.0962489 0.380657 0 0.139196 0.100323 0.387346 0 0.151832 0.103262 0.395243 0 0.159832 0.102999 0.400139 0 0.173931 0.101085 0.402813 0 0.205962 0.0964475 0.389437 0 0.235045 0.0948435 0.386443 0 0.252176 0.0954534 0.395875 0 0.267737 0.0955505 0.403372 0 0.289317 0.095247 0.412375 0 0.307649 0.0947131 0.416868 0 0.329824 0.0930456 0.414597 0 0.350977 0.0914731 0.416935 0 0.365908 0.0898268 0.420647 0 0.379196 0.0921758 0.418044 0 0.388465 0.095833 0.412642 0 0.403076 0.100787 0.408607 0 0.426267 0.0994436 0.41194 0 0.436366 0.10354 0.411351 0 0.450332 0.102586 0.410007 0 0.495728 0.0905441 0.416773 0 0.510385 0.0928944 0.412879 0 0.527347 0.0955116 0.406309 0 0.544193 0.0994225 0.395351 0 0.553529 0.103941 0.392637 0 0.680192 0.104162 0.391789 0 0.724143 0.108853 0.353301 0 0.837302 0.108071 0.375096 0 0.870545 0.102745 0.377369 0 0.116621 0.0946944 0.377193 0 0.116621 0.0946944 0.377193 0 0.116621 0.0946944 0.377193 0 0.125495 0.0962489 0.380657 0 0.139196 0.100323 0.387346 0 0.151832 0.103262 0.395243 0 0.159832 0.102999 0.400139 0 0.173931 0.101085 0.402813 0 0.205962 0.0964475 0.389437 0 0.235045 0.0948435 0.386443 0 0.252176 0.0954534 0.395875 0 0.267737 0.0955505 0.403372 0 0.289317 0.095247 0.412375 0 0.307649 0.0947131 0.416868 0 0.329824 0.0930456 0.414597 0 0.350977 0.0914731 0.416935 0 0.365908 0.0898268 0.420647 0 0.379196 0.0921758 0.418044 0 0.388465 0.0958331 0.412642 0 0.403076 0.100787 0.408607 0 0.426267 0.0994436 0.41194 0 0.436366 0.10354 0.411351 0 0.450332 0.102586 0.410007 0 0.495728 0.0905441 0.416773 0 0.510385 0.0928945 0.412879 0 0.527347 0.0955116 0.406309 0 0.544193 0.0994225 0.395351 0 0.553529 0.103941 0.392637 0 0.680192 0.104162 0.391789 0 0.724143 0.108853 0.353301 0 0.837302 0.108071 0.375096 0 0.870545 0.102745 0.377369 0 0.115929 0.106096 0.377525 0 0.115929 0.106096 0.377525 0 0.115929 0.106096 0.377525 0 0.12671 0.106406 0.380128 0 0.140414 0.110453 0.387111 0 0.151708 0.110434 0.394697 0 0.158561 0.109808 0.399469 0 0.172094 0.10784 0.402535 0 0.205402 0.10386 0.389333 0 0.235202 0.104084 0.386326 0 0.252378 0.104476 0.395771 0 0.267365 0.104839 0.402826 0 0.288861 0.103457 0.411913 0 0.307321 0.102854 0.4165 0 0.329171 0.101642 0.414303 0 0.350112 0.100129 0.416168 0 0.365014 0.0988021 0.419996 0 0.381558 0.0992794 0.420548 0 0.391201 0.104162 0.415386 0 0.404385 0.110226 0.409836 0 0.428331 0.109103 0.410805 0 0.437904 0.110928 0.410396 0 0.448821 0.110814 0.40922 0 0.490586 0.0996383 0.414088 0 0.511526 0.0984531 0.413713 0 0.528007 0.101731 0.407216 0 0.545189 0.105583 0.396775 0 0.556281 0.112316 0.39282 0 0.682813 0.111769 0.393546 0 0.725014 0.116063 0.354419 0 0.838089 0.116297 0.374832 0 0.868086 0.112781 0.374751 0 0.114508 0.124604 0.378424 0 0.114508 0.124604 0.378424 0 0.114508 0.124604 0.378424 0 0.127629 0.123218 0.378971 0 0.140452 0.123284 0.384968 0 0.15157 0.122561 0.393165 0 0.158516 0.12236 0.397986 0 0.169239 0.121893 0.401701 0 0.205551 0.120106 0.389108 0 0.235437 0.121221 0.386097 0 0.252566 0.12132 0.395653 0 0.267307 0.121296 0.40253 0 0.288122 0.120593 0.411234 0 0.30694 0.119915 0.415953 0 0.327931 0.119317 0.413706 0 0.349574 0.119939 0.415005 0 0.364361 0.120138 0.418894 0 0.38373 0.119391 0.420426 0 0.396554 0.119958 0.419952 0 0.409378 0.124657 0.414914 0 0.424479 0.125618 0.409096 0 0.439822 0.124592 0.408662 0 0.447919 0.125266 0.407417 0 0.473417 0.119958 0.406751 0 0.514408 0.111017 0.41555 0 0.529218 0.115439 0.408705 0 0.548513 0.122101 0.399826 0 0.562687 0.132365 0.393308 0 0.688802 0.125697 0.397506 0 0.727045 0.131635 0.357317 0 0.838309 0.129916 0.374865 0 0.86273 0.128981 0.37074 0 0.111869 0.142802 0.378959 0 0.111869 0.142802 0.378959 0 0.111869 0.142802 0.378959 0 0.123528 0.140391 0.378182 0 0.141965 0.138368 0.379954 0 0.152382 0.137588 0.389736 0 0.159626 0.137841 0.395347 0 0.170029 0.140525 0.399592 0 0.20301 0.140409 0.391976 0 0.235833 0.140615 0.386018 0 0.252461 0.140723 0.395469 0 0.267334 0.140494 0.40247 0 0.287769 0.141731 0.410669 0 0.307695 0.142005 0.415192 0 0.328284 0.142669 0.412918 0 0.34949 0.142427 0.413799 0 0.36345 0.142144 0.417096 0 0.382132 0.140786 0.418439 0 0.396078 0.138748 0.417969 0 0.412162 0.136787 0.419753 0 0.42764 0.137629 0.41423 0 0.441859 0.140508 0.40728 0 0.45111 0.142606 0.405689 0 0.466137 0.143958 0.402898 0 0.515831 0.132819 0.412197 0 0.532053 0.136949 0.410721 0 0.553257 0.143544 0.403409 0 0.568177 0.151553 0.394558 0 0.695934 0.142322 0.401987 0 0.729178 0.147221 0.361777 0 0.834985 0.147716 0.37287 0 0.862469 0.15043 0.36897 0 0.109904 0.153107 0.379288 0 0.109904 0.153107 0.379288 0 0.109904 0.153107 0.379288 0 0.121068 0.150957 0.37776 0 0.143156 0.147676 0.376727 0 0.154504 0.149273 0.386996 0 0.162299 0.15016 0.393507 0 0.17214 0.151875 0.398308 0 0.201101 0.152269 0.394309 0 0.236252 0.151662 0.386021 0 0.252679 0.152724 0.395369 0 0.267666 0.152878 0.402515 0 0.288041 0.153102 0.410585 0 0.308053 0.154014 0.414536 0 0.328724 0.154426 0.412421 0 0.349003 0.153788 0.413215 0 0.362751 0.152836 0.416221 0 0.379834 0.150365 0.417167 0 0.394858 0.147902 0.4166 0 0.40999 0.146376 0.418882 0 0.429113 0.144982 0.417259 0 0.444407 0.149012 0.409967 0 0.453775 0.154673 0.404931 0 0.465679 0.157056 0.402689 0 0.510579 0.147543 0.409089 0 0.533588 0.148137 0.411977 0 0.554839 0.152575 0.405151 0 0.570216 0.15939 0.395654 0 0.696071 0.151239 0.402115 0 0.729622 0.152534 0.364068 0 0.839275 0.155777 0.375135 0 0.863985 0.161162 0.368418 0 0.108386 0.1623 0.379762 0 0.108386 0.1623 0.379762 0 0.108386 0.1623 0.379762 0 0.119944 0.160196 0.377908 0 0.144179 0.156633 0.374686 0 0.156132 0.157933 0.384963 0 0.164254 0.15871 0.391714 0 0.173632 0.160494 0.39738 0 0.199215 0.161698 0.396644 0 0.236909 0.161787 0.386099 0 0.252789 0.162142 0.395179 0 0.267525 0.162101 0.402311 0 0.288442 0.162921 0.410584 0 0.308102 0.163723 0.414103 0 0.328751 0.163588 0.412068 0 0.348295 0.163117 0.412707 0 0.361423 0.161326 0.415308 0 0.378288 0.159307 0.416461 0 0.393136 0.15727 0.415677 0 0.409486 0.155281 0.417979 0 0.430843 0.152374 0.419728 0 0.44692 0.157613 0.412382 0 0.455844 0.165463 0.40442 0 0.46565 0.16868 0.402328 0 0.503886 0.161869 0.40498 0 0.535324 0.15774 0.411324 0 0.556118 0.160527 0.406796 0 0.572149 0.166843 0.396691 0 0.695532 0.159675 0.40231 0 0.730055 0.158146 0.366541 0 0.842977 0.164924 0.377249 0 0.865271 0.171926 0.368026 0 0.105708 0.191558 0.378636 0 0.105708 0.191558 0.378636 0 0.105708 0.191558 0.378636 0 0.117083 0.191398 0.379917 0 0.141946 0.189261 0.374976 0 0.160729 0.188328 0.380182 0 0.170367 0.188556 0.386011 0 0.17997 0.190137 0.391985 0 0.198561 0.194568 0.396767 0 0.238114 0.193026 0.385956 0 0.253651 0.194706 0.394785 0 0.268567 0.19579 0.402128 0 0.289461 0.196959 0.41069 0 0.309207 0.196834 0.414369 0 0.328686 0.196895 0.411296 0 0.345829 0.196902 0.410912 0 0.358439 0.196126 0.41313 0 0.37579 0.195198 0.413248 0 0.390151 0.194742 0.412872 0 0.409401 0.193561 0.414446 0 0.425162 0.193029 0.416445 0 0.452973 0.188854 0.416775 0 0.463272 0.192724 0.41332 0 0.472614 0.199773 0.403508 0 0.487512 0.201313 0.398786 0 0.539035 0.190022 0.406456 0 0.560142 0.190012 0.412094 0 0.57859 0.19274 0.400845 0 0.688225 0.192381 0.40248 0 0.736075 0.198053 0.367523 0 0.84598 0.198146 0.381524 0 0.871121 0.201873 0.372504 0 0.107332 0.226604 0.379102 0 0.107332 0.226604 0.379102 0 0.107332 0.226604 0.379102 0 0.117948 0.22679 0.379018 0 0.13773 0.227096 0.378231 0 0.155301 0.226127 0.382051 0 0.16995 0.224857 0.386778 0 0.182502 0.225232 0.392216 0 0.199793 0.233093 0.396987 0 0.239256 0.235849 0.385851 0 0.256803 0.236122 0.395583 0 0.269504 0.235921 0.401805 0 0.288549 0.234903 0.409578 0 0.307614 0.232752 0.413212 0 0.32824 0.23111 0.41104 0 0.345871 0.230069 0.410686 0 0.356603 0.22961 0.412083 0 0.372414 0.228258 0.412117 0 0.38699 0.226668 0.410805 0 0.404882 0.225229 0.412708 0 0.423254 0.223319 0.414526 0 0.442743 0.222286 0.415308 0 0.46865 0.219353 0.415055 0 0.478302 0.22337 0.413806 0 0.488923 0.233521 0.404065 0 0.515015 0.23715 0.392866 0 0.558503 0.22945 0.405717 0 0.583751 0.22929 0.40556 0 0.659065 0.239645 0.387522 0 0.739897 0.230092 0.368652 0 0.839784 0.235113 0.377481 0 0.876407 0.232322 0.37695 0 0.106375 0.24544 0.381966 0 0.106375 0.24544 0.381966 0 0.106375 0.24544 0.381966 0 0.119011 0.244655 0.379378 0 0.136902 0.245883 0.381666 0 0.151831 0.246464 0.384398 0 0.166769 0.245656 0.388391 0 0.183805 0.2461 0.392994 0 0.202066 0.251294 0.397818 0 0.238322 0.250474 0.385351 0 0.256432 0.248758 0.395379 0 0.268667 0.248278 0.401584 0 0.287132 0.245928 0.409102 0 0.305244 0.244135 0.414931 0 0.327176 0.242275 0.411754 0 0.345237 0.241337 0.411724 0 0.356397 0.242078 0.412639 0 0.371365 0.243223 0.412402 0 0.38593 0.243769 0.410093 0 0.404453 0.24375 0.411108 0 0.4225 0.243564 0.412759 0 0.442653 0.243761 0.412999 0 0.469104 0.241758 0.41297 0 0.483424 0.244183 0.411912 0 0.493175 0.250128 0.408371 0 0.51316 0.254879 0.394165 0 0.561163 0.245813 0.403544 0 0.585835 0.247421 0.407945 0 0.664809 0.252328 0.393013 0 0.741568 0.245352 0.368942 0 0.840717 0.251654 0.37898 0 0.876747 0.250533 0.376525 0 0.105839 0.262122 0.383968 0 0.105839 0.262122 0.383968 0 0.105839 0.262122 0.383968 0 0.118083 0.260944 0.38112 0 0.13769 0.261353 0.38319 0 0.150946 0.262527 0.387787 0 0.16344 0.262271 0.391358 0 0.183427 0.260812 0.394785 0 0.20402 0.262631 0.397145 0 0.236761 0.262167 0.384566 0 0.25483 0.259584 0.394663 0 0.267935 0.258728 0.401339 0 0.286599 0.259092 0.40874 0 0.304382 0.259325 0.414842 0 0.326976 0.259017 0.41072 0 0.345918 0.259946 0.410693 0 0.357723 0.261035 0.412165 0 0.372365 0.262625 0.411489 0 0.386557 0.263531 0.409091 0 0.404695 0.263719 0.409248 0 0.421852 0.262968 0.411224 0 0.443109 0.261774 0.411184 0 0.465858 0.260036 0.411921 0 0.486558 0.259392 0.410978 0 0.49609 0.262842 0.410664 0 0.515585 0.267064 0.399313 0 0.553351 0.263778 0.399246 0 0.587471 0.261323 0.409381 0 0.669524 0.263422 0.396821 0 0.743336 0.258418 0.370638 0 0.840695 0.266448 0.379199 0 0.875062 0.267497 0.375177 0 0.10726 0.277408 0.384556 0 0.10726 0.277408 0.384556 0 0.10726 0.277408 0.384556 0 0.116922 0.278369 0.385201 0 0.139758 0.280174 0.383363 0 0.152175 0.283787 0.390185 0 0.160978 0.285615 0.394374 0 0.178343 0.283612 0.397916 0 0.210246 0.283103 0.38835 0 0.235583 0.284501 0.383086 0 0.25305 0.283532 0.39285 0 0.268675 0.283051 0.400698 0 0.286416 0.284247 0.407913 0 0.304772 0.283765 0.413053 0 0.327055 0.283774 0.409902 0 0.346912 0.28397 0.41014 0 0.358889 0.284304 0.412167 0 0.37348 0.284852 0.411997 0 0.386722 0.285029 0.409859 0 0.404023 0.284905 0.409217 0 0.420526 0.284595 0.410003 0 0.442444 0.283391 0.410434 0 0.461186 0.283285 0.410798 0 0.490437 0.279633 0.410198 0 0.500355 0.282992 0.410089 0 0.519078 0.283908 0.405744 0 0.553906 0.282664 0.400881 0 0.583316 0.284569 0.406268 0 0.672193 0.28502 0.398696 0 0.746424 0.280412 0.373406 0 0.845874 0.289523 0.383208 0 0.876111 0.292352 0.377184 0 0.109874 0.3114 0.3803 0 0.109874 0.3114 0.3803 0 0.109874 0.3114 0.3803 0 0.120762 0.311798 0.382582 0 0.142285 0.310291 0.382 0 0.155731 0.309616 0.386286 0 0.163019 0.309641 0.390872 0 0.173638 0.309491 0.39689 0 0.218288 0.304452 0.375849 0 0.235499 0.308339 0.38243 0 0.251953 0.308571 0.391824 0 0.268093 0.307862 0.399981 0 0.286826 0.308679 0.407983 0 0.304994 0.308766 0.413313 0 0.326618 0.308784 0.41055 0 0.34725 0.308357 0.410092 0 0.359339 0.308486 0.41225 0 0.374002 0.30834 0.41252 0 0.386607 0.30845 0.410317 0 0.403672 0.308145 0.40974 0 0.420094 0.307765 0.409488 0 0.440062 0.30757 0.408969 0 0.461247 0.306576 0.409027 0 0.48684 0.30445 0.408684 0 0.505333 0.30514 0.408415 0 0.517634 0.308763 0.405288 0 0.563057 0.301077 0.410501 0 0.58677 0.307973 0.404922 0 0.675744 0.30898 0.400625 0 0.748873 0.303797 0.375895 0 0.849287 0.308138 0.387144 0 0.877146 0.311253 0.379097 0 0.106719 0.331128 0.382044 0 0.106719 0.331128 0.382044 0 0.106719 0.331128 0.382044 0 0.1198 0.328727 0.381184 0 0.139297 0.326381 0.383293 0 0.154935 0.324331 0.385988 0 0.163655 0.323832 0.38924 0 0.173972 0.324056 0.395681 0 0.220585 0.320766 0.373645 0 0.236754 0.325338 0.382032 0 0.252094 0.326042 0.391441 0 0.267555 0.325994 0.399524 0 0.287557 0.326076 0.408117 0 0.304641 0.326041 0.413814 0 0.326276 0.325291 0.410606 0 0.346485 0.324826 0.410013 0 0.359309 0.324599 0.411847 0 0.374274 0.324773 0.412473 0 0.386979 0.325069 0.410217 0 0.403468 0.325148 0.409575 0 0.419707 0.324899 0.409483 0 0.439839 0.324763 0.408014 0 0.461149 0.324358 0.407938 0 0.483189 0.323656 0.407556 0 0.509127 0.322147 0.407177 0 0.520096 0.326407 0.40461 0 0.55092 0.32315 0.40637 0 0.591803 0.32203 0.409246 0 0.648025 0.337566 0.384743 0 0.750369 0.321193 0.37808 0 0.845079 0.324793 0.384445 0 0.880009 0.325507 0.382156 0 0.103359 0.348051 0.384753 0 0.103359 0.348051 0.384753 0 0.103359 0.348051 0.384753 0 0.115645 0.346841 0.382591 0 0.137031 0.344974 0.3835 0 0.151804 0.342782 0.389149 0 0.161264 0.342509 0.39178 0 0.17445 0.342551 0.396441 0 0.218124 0.339421 0.379972 0 0.238445 0.343471 0.381736 0 0.252916 0.344391 0.390831 0 0.267061 0.344638 0.398878 0 0.288008 0.344188 0.407953 0 0.304239 0.344693 0.413399 0 0.326139 0.344178 0.40995 0 0.345815 0.34397 0.40975 0 0.359151 0.343586 0.41132 0 0.374608 0.343742 0.4119 0 0.38752 0.344052 0.410059 0 0.403322 0.344531 0.409361 0 0.419369 0.344434 0.409502 0 0.440162 0.344055 0.407639 0 0.460808 0.344137 0.407531 0 0.481063 0.344521 0.406185 0 0.51274 0.341509 0.406157 0 0.524374 0.345832 0.404317 0 0.541701 0.347643 0.401919 0 0.597622 0.338689 0.414335 0 0.648133 0.35617 0.383007 0 0.749772 0.340512 0.378245 0 0.83986 0.347738 0.380376 0 0.882814 0.343061 0.385472 0 0.103917 0.360966 0.383651 0 0.103917 0.360966 0.383651 0 0.103917 0.360966 0.383651 0 0.112987 0.360944 0.385092 0 0.136862 0.359737 0.382498 0 0.150387 0.359089 0.389286 0 0.159338 0.357941 0.393751 0 0.172866 0.357503 0.399004 0 0.216404 0.354253 0.38423 0 0.240035 0.356766 0.381404 0 0.253282 0.358489 0.390083 0 0.267321 0.358894 0.398137 0 0.288343 0.358525 0.407767 0 0.304046 0.35934 0.413023 0 0.325804 0.359056 0.40982 0 0.345652 0.358901 0.4095 0 0.358806 0.358672 0.411144 0 0.37487 0.358532 0.41151 0 0.387981 0.35878 0.410028 0 0.403589 0.359341 0.409284 0 0.419249 0.359397 0.40944 0 0.439983 0.359132 0.407633 0 0.460881 0.359683 0.407333 0 0.481764 0.360665 0.405415 0 0.511192 0.358588 0.405602 0 0.527856 0.360991 0.403804 0 0.541283 0.364162 0.401745 0 0.600365 0.354434 0.414207 0 0.652771 0.367305 0.379967 0 0.748673 0.356077 0.376447 0 0.835065 0.364077 0.377006 0 0.882686 0.358125 0.385011 0 0.10622 0.375707 0.381705 0 0.10622 0.375707 0.381705 0 0.10622 0.375707 0.381705 0 0.11357 0.37705 0.384549 0 0.13776 0.375544 0.382295 0 0.149842 0.375823 0.388407 0 0.157445 0.375199 0.393234 0 0.170714 0.373573 0.40053 0 0.210645 0.371069 0.391806 0 0.242167 0.371551 0.38124 0 0.253957 0.374055 0.389172 0 0.267569 0.374706 0.397282 0 0.287763 0.375198 0.407215 0 0.304544 0.375741 0.412879 0 0.325337 0.375698 0.409883 0 0.345604 0.375331 0.409161 0 0.358424 0.375274 0.41096 0 0.375051 0.374896 0.411244 0 0.388421 0.37534 0.409723 0 0.404369 0.376319 0.40928 0 0.419469 0.376995 0.409469 0 0.439897 0.377167 0.407786 0 0.461389 0.377366 0.406968 0 0.482664 0.377612 0.405638 0 0.508052 0.376892 0.405055 0 0.531009 0.376413 0.403186 0 0.54101 0.380191 0.40173 0 0.601389 0.368978 0.413549 0 0.656286 0.380939 0.378217 0 0.738962 0.377776 0.369138 0 0.82615 0.383237 0.371369 0 0.88282 0.376058 0.384484 0 0.108459 0.38712 0.380368 0 0.108459 0.38712 0.380368 0 0.108459 0.38712 0.380368 0 0.115649 0.388164 0.383155 0 0.137514 0.387632 0.382335 0 0.149854 0.388135 0.387481 0 0.157265 0.388104 0.39203 0 0.169369 0.387162 0.399342 0 0.205643 0.385242 0.397469 0 0.243843 0.383743 0.38108 0 0.255503 0.386657 0.388927 0 0.267928 0.38793 0.396553 0 0.287421 0.388796 0.406712 0 0.305072 0.389038 0.412847 0 0.32499 0.389396 0.409897 0 0.345601 0.389324 0.408829 0 0.358474 0.389557 0.410775 0 0.375082 0.389587 0.411384 0 0.389 0.389893 0.409558 3956.8 0.405149 0.390667 0.409381 3718.63 0.419668 0.39137 0.409587 0 0.439717 0.391388 0.408023 0 0.461448 0.390772 0.406707 0 0.482992 0.390133 0.405895 0 0.505683 0.389531 0.404584 0 0.533058 0.387404 0.402509 0 0.543336 0.391692 0.40173 0 0.593124 0.38451 0.411272 0 0.656182 0.393474 0.380059 0 0.732002 0.393721 0.364288 0 0.827068 0.396674 0.371509 0 0.881159 0.390262 0.383025 0 0.111329 0.400155 0.378371 0 0.111329 0.400155 0.378371 0 0.111329 0.400155 0.378371 0 0.118398 0.401167 0.381835 0 0.136406 0.403307 0.383276 0 0.151275 0.403377 0.387114 0 0.158101 0.404354 0.390388 0 0.16872 0.404133 0.39682 0 0.204556 0.402548 0.397249 0 0.244788 0.399707 0.381411 0 0.257632 0.401476 0.388861 0 0.268729 0.403526 0.395711 0 0.287449 0.405099 0.405813 0 0.305976 0.405724 0.412827 0 0.325264 0.406664 0.409875 0 0.345492 0.406684 0.408928 0 0.358649 0.406696 0.410591 0 0.374854 0.406707 0.41172 0 0.389477 0.406616 0.409621 3718.7 0.405961 0.407129 0.409588 20814.8 0.419889 0.407142 0.409779 3341.37 0.438981 0.406265 0.408102 0 0.460525 0.404981 0.406508 0 0.482172 0.404106 0.405742 0 0.504117 0.404412 0.404268 0 0.535471 0.402211 0.401819 0 0.546475 0.406671 0.4018 0 0.581261 0.405768 0.40665 0 0.653075 0.409745 0.382982 0 0.717541 0.416774 0.35567 0 0.829716 0.413118 0.373482 0 0.878898 0.416424 0.378985 0 0.111899 0.414646 0.37524 0 0.111899 0.414646 0.37524 0 0.111899 0.414646 0.37524 0 0.12135 0.414626 0.38101 0 0.136551 0.419299 0.3852 0 0.151657 0.419938 0.388004 0 0.159607 0.420355 0.390048 0 0.169247 0.421099 0.393965 0 0.203642 0.419383 0.395832 0 0.245283 0.41579 0.381863 0 0.259177 0.41736 0.389644 0 0.270383 0.419255 0.395493 0 0.287656 0.422077 0.404949 0 0.306729 0.422654 0.41284 0 0.325866 0.423677 0.409993 0 0.345362 0.424005 0.409146 0 0.358613 0.423355 0.410324 0 0.374318 0.422802 0.411582 0 0.389059 0.422109 0.409643 0 0.405906 0.421655 0.409145 3341.43 0.419766 0.421621 0.409589 3174.68 0.438083 0.421125 0.407832 0 0.459423 0.420204 0.406246 0 0.481867 0.419776 0.404834 0 0.505246 0.420839 0.404069 0 0.535345 0.420086 0.401891 0 0.55018 0.423564 0.402004 0 0.571985 0.42663 0.402999 0 0.662587 0.424014 0.386456 0 0.704694 0.439824 0.348868 0 0.837581 0.44015 0.377555 0 0.868518 0.435759 0.37195 0 0.111934 0.434926 0.371879 0 0.111934 0.434926 0.371879 0 0.111934 0.434926 0.371879 0 0.122001 0.434399 0.377925 0 0.139397 0.437093 0.385543 0 0.151929 0.439195 0.389673 0 0.159086 0.440043 0.392387 0 0.168173 0.440716 0.396313 0 0.203711 0.439518 0.394209 0 0.245737 0.43625 0.382276 0 0.260927 0.437203 0.390796 0 0.271752 0.43903 0.39619 0 0.288683 0.441435 0.403997 0 0.306071 0.442001 0.411627 0 0.326523 0.441538 0.409575 0 0.34475 0.441483 0.408866 0 0.357747 0.441032 0.409852 0 0.373482 0.440241 0.410772 0 0.387695 0.439555 0.409222 0 0.405635 0.438679 0.408455 0 0.419953 0.438849 0.409311 0 0.437509 0.439452 0.407713 0 0.459089 0.439747 0.406344 0 0.482408 0.439956 0.404399 0 0.506447 0.440616 0.404428 0 0.533485 0.440378 0.402343 0 0.554085 0.442274 0.401623 0 0.57104 0.447367 0.403031 0 0.670926 0.440714 0.389067 0 0.70702 0.454412 0.35292 0 0.837626 0.453398 0.379543 0 0.859414 0.449201 0.366706 0 0.111856 0.453228 0.369769 0 0.111856 0.453228 0.369769 0 0.111856 0.453228 0.369769 0 0.121581 0.453108 0.37528 0 0.140648 0.455194 0.384235 0 0.153331 0.457449 0.391263 0 0.159787 0.459083 0.394519 0 0.167924 0.460474 0.398386 0 0.202714 0.460111 0.395134 0 0.243327 0.457824 0.38125 0 0.261719 0.455672 0.39153 0 0.27293 0.456229 0.397073 0 0.289903 0.45675 0.403216 0 0.306511 0.458215 0.40859 0 0.326682 0.457701 0.408833 0 0.3443 0.457638 0.408514 0 0.357045 0.457716 0.409636 0 0.372933 0.457484 0.41042 0 0.387113 0.457369 0.408889 0 0.405561 0.456991 0.408502 0 0.420895 0.45744 0.409372 0 0.438307 0.458741 0.408087 0 0.459258 0.459221 0.406574 0 0.482833 0.459311 0.404544 0 0.507517 0.459988 0.404521 0 0.531954 0.460724 0.402309 0 0.557643 0.460558 0.401857 0 0.570691 0.46695 0.402952 0 0.671029 0.458344 0.393321 0 0.712214 0.476758 0.356623 0 0.833751 0.460006 0.380635 0 0.854045 0.455029 0.366188 0 0.11331 0.474246 0.368625 0 0.11331 0.474246 0.368625 0 0.11331 0.474246 0.368625 0 0.12214 0.474656 0.373698 0 0.141317 0.476999 0.381881 0 0.155761 0.477981 0.390541 0 0.162638 0.47853 0.395064 0 0.169634 0.480176 0.399876 0 0.20092 0.479659 0.395039 0 0.2388 0.478342 0.37937 0 0.260392 0.474591 0.391243 0 0.273654 0.473903 0.397993 0 0.290485 0.474076 0.403101 0 0.308291 0.476588 0.406368 0 0.326943 0.477902 0.408077 0 0.3447 0.47858 0.408229 0 0.357177 0.478792 0.409511 0 0.372599 0.47885 0.410679 0 0.387236 0.478903 0.408589 0 0.405671 0.479213 0.408507 0 0.421759 0.479595 0.409178 0 0.439614 0.480775 0.408264 0 0.459702 0.481773 0.406778 0 0.482851 0.481984 0.404735 0 0.508069 0.482257 0.403715 0 0.530994 0.48348 0.401786 0 0.561369 0.481363 0.402407 0 0.574836 0.486493 0.402422 0 0.66635 0.483263 0.393791 0 0.717087 0.498808 0.356476 0 0.828188 0.464379 0.382299 0 0.850505 0.458772 0.368744 0 0.116627 0.496393 0.366957 0 0.116627 0.496393 0.366957 0 0.116627 0.496393 0.366957 0 0.124001 0.496813 0.371944 0 0.142229 0.498117 0.378736 0 0.156367 0.498868 0.386809 0 0.163684 0.49855 0.392979 0 0.173057 0.498436 0.399951 0 0.202298 0.499208 0.395244 0 0.23932 0.500646 0.378841 0 0.257268 0.500601 0.38941 0 0.274146 0.499081 0.398829 0 0.290854 0.499473 0.403998 0 0.312473 0.499985 0.402153 0 0.3289 0.50195 0.405881 0 0.345787 0.50376 0.407729 0 0.357492 0.504831 0.40899 0 0.372979 0.505452 0.410696 0 0.387842 0.505767 0.408645 0 0.406389 0.506374 0.40813 0 0.422578 0.506694 0.409094 0 0.441308 0.507115 0.407748 0 0.459946 0.508054 0.406721 0 0.482778 0.508414 0.404616 0 0.508214 0.507975 0.402321 0 0.531621 0.507924 0.401285 0 0.558318 0.50633 0.40176 0 0.58047 0.509838 0.40195 0 0.664674 0.5121 0.389211 0 0.715712 0.50455 0.358935 0 0.817013 0.47087 0.379131 0 0.846072 0.462905 0.371494 0 0.11836 0.517774 0.365415 0 0.11836 0.517774 0.365415 0 0.11836 0.517774 0.365415 0 0.12591 0.5178 0.3686 0 0.143913 0.52036 0.375442 0 0.160303 0.522104 0.380711 0 0.166983 0.523159 0.385892 0 0.175793 0.523201 0.394494 0 0.204772 0.525038 0.39706 0 0.242036 0.527164 0.379048 0 0.25692 0.528484 0.387799 0 0.273594 0.52777 0.397291 0 0.292404 0.527081 0.405425 0 0.315019 0.526853 0.399866 0 0.332129 0.529306 0.403469 0 0.349185 0.531891 0.407292 0 0.359433 0.533867 0.408838 0 0.373819 0.534931 0.409657 0 0.387945 0.535169 0.408163 0 0.406979 0.535075 0.40721 0 0.422809 0.535166 0.408319 0 0.44188 0.534918 0.406676 0 0.460711 0.535091 0.405884 0 0.482044 0.534273 0.404137 0 0.507131 0.532509 0.402014 0 0.532232 0.532052 0.399977 0 0.555534 0.532226 0.39973 0 0.585644 0.53179 0.400131 0 0.66337 0.519825 0.391963 0 0.712752 0.507656 0.361837 0 0.801551 0.478462 0.375149 0 0.84415 0.466703 0.379654 0 0.116412 0.54735 0.369103 0 0.116412 0.54735 0.369103 0 0.116412 0.54735 0.369103 0 0.124544 0.547117 0.371251 0 0.146878 0.548423 0.370592 0 0.164598 0.550033 0.375775 0 0.172491 0.550925 0.380528 0 0.180632 0.552294 0.386578 0 0.203903 0.55658 0.397916 0 0.24421 0.555732 0.380883 0 0.25697 0.558378 0.387315 0 0.273032 0.557713 0.395381 0 0.29243 0.558886 0.40528 0 0.313752 0.558333 0.402155 0 0.336017 0.558145 0.399459 0 0.351439 0.560128 0.405618 0 0.361726 0.560984 0.408858 0 0.374377 0.56165 0.409259 0 0.38733 0.561591 0.407272 0 0.405363 0.559799 0.406587 0 0.42129 0.557407 0.40734 0 0.440265 0.555613 0.406247 0 0.460393 0.55544 0.404325 0 0.480445 0.553351 0.403239 0 0.505394 0.549676 0.401879 0 0.530749 0.545887 0.400198 0 0.552186 0.543932 0.401593 0 0.586915 0.544673 0.405335 0 0.651753 0.533781 0.38646 0 0.714855 0.515077 0.358623 0 0.79654 0.493804 0.37454 0 0.867052 0.550605 0.372986 0 0.11203 0.583468 0.377296 0 0.11203 0.583468 0.377296 0 0.11203 0.583468 0.377296 0 0.122327 0.582375 0.376953 0 0.150911 0.579055 0.365523 0 0.165496 0.582148 0.374494 0 0.174004 0.582365 0.379708 0 0.183398 0.582848 0.385639 0 0.203716 0.587206 0.39593 0 0.243685 0.584974 0.380439 0 0.258828 0.585663 0.389224 0 0.271214 0.587002 0.394869 0 0.293328 0.585371 0.404038 0 0.311987 0.584718 0.403757 0 0.333795 0.581256 0.399259 0 0.351725 0.577505 0.403552 0 0.362146 0.575402 0.407919 0 0.372621 0.573568 0.41132 0 0.384236 0.57146 0.409866 0 0.401394 0.569 0.408485 0 0.417434 0.566671 0.409243 0 0.436722 0.563773 0.409375 0 0.45688 0.560958 0.408388 0 0.477366 0.560998 0.406426 0 0.504921 0.570409 0.405276 0 0.531755 0.57232 0.402882 0 0.554735 0.572812 0.404034 0 0.590215 0.571465 0.40625 0 0.643881 0.547006 0.38324 0 0.696703 0.522033 0.357522 0 0.814969 0.565586 0.367334 0 0.86397 0.553084 0.371265 0 0.0941142 0.647498 0.384578 0 0.0941142 0.647498 0.384578 0 0.0941143 0.647498 0.384578 0 0.102873 0.645754 0.387926 0 0.131515 0.64172 0.389198 0 0.161636 0.636708 0.375244 0 0.170915 0.635163 0.376982 0 0.181708 0.633154 0.382522 0 0.204886 0.640188 0.393187 0 0.248571 0.683993 0.382891 0 0.261792 0.683243 0.390148 0 0.275507 0.68098 0.396656 0 0.294861 0.677262 0.405958 0 0.315564 0.672695 0.406074 0 0.332009 0.667708 0.402522 0 0.346125 0.662978 0.40066 0 0.358892 0.658517 0.399275 0 0.376785 0.652848 0.398124 0 0.387346 0.649296 0.403336 0 0.399867 0.645111 0.40837 0 0.413273 0.641907 0.41077 0 0.43238 0.643262 0.411732 0 0.45478 0.644139 0.410057 0 0.476756 0.643556 0.408194 0 0.49679 0.640079 0.404697 0 0.517312 0.636715 0.401511 0 0.538424 0.632257 0.397367 0 0.560672 0.627647 0.396659 0 0.63448 0.619035 0.380631 0 0.712965 0.618384 0.355334 0 0.788421 0.691647 0.358734 0 0.883383 0.678152 0.386419 0 -0.0156596 0.762718 0.535374 0 -0.0156596 0.762718 0.535374 0 -0.0156598 0.762718 0.535374 0 0.00383286 0.759433 0.522045 0 0.0704217 0.751224 0.455691 0 0.131193 0.742645 0.392589 0 0.146317 0.740606 0.389308 0 0.159729 0.736687 0.392918 0 0.190798 0.730065 0.38505 0 0.237562 0.726912 0.370301 0 0.251462 0.725203 0.37912 0 0.267354 0.73533 0.38894 0 0.289934 0.761584 0.402075 0 0.310262 0.775476 0.413204 0 0.32605 0.765692 0.409872 0 0.34369 0.759112 0.407745 0 0.357509 0.748249 0.401836 0 0.368351 0.743933 0.401641 0 0.377026 0.740335 0.399798 0 0.39269 0.728996 0.389635 0 0.406636 0.721827 0.385366 0 0.417194 0.718818 0.389366 0 0.428527 0.716561 0.391488 0 0.45679 0.730781 0.395804 0 0.493261 0.741944 0.40192 0 0.523695 0.746286 0.406227 0 0.547028 0.746536 0.404602 0 0.576803 0.758607 0.405623 0 0.666481 0.757941 0.391528 0 0.68523 0.756974 0.349321 0 0.796225 0.747673 0.363682 0 0.811952 0.751262 0.354249 0 -0.168847 0.899387 0.809112 0 -0.168847 0.899387 0.809112 0 -0.168847 0.899387 0.809112 0 -0.147107 0.897829 0.791071 0 -0.069589 0.893453 0.707087 0 0.119832 0.878963 0.43241 0 0.128477 0.876982 0.437783 0 0.147537 0.874126 0.432772 0 0.181142 0.865221 0.432694 0 0.24805 0.844689 0.375205 0 0.263169 0.831592 0.382582 0 0.272517 0.823879 0.38879 0 0.28382 0.816988 0.396801 0 0.293932 0.810211 0.402239 0 0.302206 0.806095 0.407364 0 0.322422 0.82316 0.417355 0 0.339686 0.822359 0.415398 0 0.360508 0.821131 0.415188 0 0.378676 0.826435 0.414921 0 0.400906 0.83072 0.404675 0 0.412489 0.829404 0.406408 0 0.439149 0.824108 0.401235 0 0.463451 0.818088 0.398753 0 0.476944 0.816578 0.405518 0 0.496809 0.816271 0.404643 0 0.520979 0.817006 0.401938 0 0.545468 0.815349 0.399896 0 0.565243 0.803002 0.402087 0 0.666324 0.831739 0.390927 0 0.696146 0.839133 0.349219 0 0.827955 0.852352 0.370388 0 0.834808 0.855513 0.364283 0 -0.246816 0.932464 0.890481 0 -0.246816 0.932464 0.890481 0 -0.246816 0.932464 0.890481 0 -0.225503 0.929283 0.872006 0 -0.162529 0.920385 0.809859 0 -0.0292496 0.906894 0.638375 0 -0.0012573 0.903563 0.608309 0 0.027648 0.899909 0.579306 0 0.149167 0.886566 0.421945 0 0.21475 0.866692 0.365704 0 0.23867 0.860638 0.371372 0 0.258078 0.85556 0.381562 0 0.284998 0.856331 0.393856 0 0.313045 0.877882 0.392602 0 0.329008 0.887681 0.396015 0 0.345419 0.896211 0.400163 0 0.357625 0.900127 0.404449 0 0.370862 0.904174 0.409525 0 0.38792 0.904452 0.409406 0 0.406178 0.904082 0.410363 0 0.421348 0.903759 0.409072 0 0.434805 0.904027 0.408774 0 0.457146 0.901647 0.401288 0 0.482731 0.893449 0.391943 0 0.498435 0.889231 0.397267 0 0.51747 0.884244 0.397959 0 0.542657 0.8878 0.394399 0 0.571777 0.894954 0.394899 0 0.670025 0.898508 0.389492 0 0.696165 0.897434 0.349722 0 0.826456 0.896949 0.376449 0 0.845238 0.888807 0.365115 0 0.123991 0.0950264 0.387444 0 0.123991 0.0950264 0.387444 0 0.123991 0.0950264 0.387444 0 0.132201 0.0955485 0.389645 0 0.144414 0.0981811 0.396648 0 0.157101 0.102748 0.400974 0 0.167245 0.101635 0.404975 0 0.176947 0.100118 0.409949 0 0.200927 0.0959302 0.41301 0 0.232162 0.095003 0.409726 0 0.259984 0.0950635 0.401043 0 0.275575 0.0943098 0.410151 0 0.295718 0.0938515 0.421081 0 0.312344 0.093446 0.428605 0 0.330088 0.0918308 0.435306 0 0.353063 0.0897803 0.435656 0 0.363592 0.0928439 0.430825 0 0.37471 0.0966728 0.427368 0 0.384204 0.0991333 0.426578 0 0.4075 0.0982247 0.42732 0 0.425226 0.0989152 0.428314 0 0.43287 0.102279 0.431917 0 0.454365 0.0982125 0.435452 0 0.48804 0.0932827 0.433017 0 0.508092 0.0939848 0.425961 0 0.521955 0.0977828 0.420527 0 0.54251 0.0995703 0.407157 0 0.548481 0.104855 0.404831 0 0.674574 0.105455 0.404389 0 0.719031 0.111126 0.367624 0 0.835218 0.105558 0.389441 0 0.870632 0.0998722 0.394229 0 0.123991 0.0950264 0.387444 0 0.123991 0.0950264 0.387444 0 0.123991 0.0950264 0.387444 0 0.132201 0.0955485 0.389645 0 0.144414 0.0981811 0.396648 0 0.157101 0.102748 0.400974 0 0.167245 0.101635 0.404975 0 0.176947 0.100118 0.409949 0 0.200927 0.0959302 0.41301 0 0.232162 0.095003 0.409726 0 0.259984 0.0950635 0.401043 0 0.275575 0.0943098 0.410151 0 0.295718 0.0938515 0.421081 0 0.312344 0.093446 0.428605 0 0.330088 0.0918308 0.435306 0 0.353063 0.0897803 0.435656 0 0.363592 0.0928439 0.430825 0 0.37471 0.0966728 0.427368 0 0.384204 0.0991333 0.426578 0 0.4075 0.0982247 0.42732 0 0.425226 0.0989152 0.428314 0 0.43287 0.102279 0.431917 0 0.454365 0.0982125 0.435452 0 0.48804 0.0932827 0.433017 0 0.508092 0.0939848 0.425961 0 0.521955 0.0977828 0.420527 0 0.54251 0.0995703 0.407157 0 0.548481 0.104855 0.404831 0 0.674574 0.105455 0.404389 0 0.719031 0.111126 0.367624 0 0.835218 0.105558 0.389441 0 0.870632 0.0998722 0.394229 0 0.123991 0.0950264 0.387444 0 0.123991 0.0950264 0.387444 0 0.123991 0.0950264 0.387444 0 0.132201 0.0955485 0.389645 0 0.144414 0.0981811 0.396648 0 0.157101 0.102748 0.400974 0 0.167245 0.101636 0.404975 0 0.176947 0.100118 0.409949 0 0.200927 0.0959302 0.41301 0 0.232162 0.095003 0.409726 0 0.259984 0.0950635 0.401043 0 0.275575 0.0943098 0.410151 0 0.295718 0.0938516 0.421081 0 0.312344 0.093446 0.428605 0 0.330088 0.0918308 0.435306 0 0.353063 0.0897803 0.435656 0 0.363592 0.0928439 0.430825 0 0.37471 0.0966728 0.427368 0 0.384204 0.0991333 0.426578 0 0.4075 0.0982247 0.42732 0 0.425226 0.0989152 0.428314 0 0.43287 0.102279 0.431917 0 0.454365 0.0982125 0.435452 0 0.48804 0.0932827 0.433017 0 0.508092 0.0939848 0.425961 0 0.521955 0.0977829 0.420527 0 0.54251 0.0995704 0.407157 0 0.548481 0.104855 0.404831 0 0.674574 0.105455 0.404389 0 0.719031 0.111126 0.367624 0 0.835218 0.105558 0.389441 0 0.870632 0.0998722 0.394229 0 0.123334 0.106514 0.387825 0 0.123334 0.106514 0.387825 0 0.123334 0.106514 0.387825 0 0.13275 0.106487 0.390287 0 0.1464 0.108138 0.396234 0 0.156852 0.109332 0.400194 0 0.165457 0.108447 0.404078 0 0.175559 0.106842 0.409214 0 0.200061 0.103259 0.412688 0 0.232377 0.10422 0.409726 0 0.259941 0.104381 0.400743 0 0.275212 0.103709 0.409577 0 0.295399 0.102632 0.42059 0 0.312056 0.102081 0.428253 0 0.329252 0.100693 0.434682 0 0.35217 0.0983585 0.435386 0 0.365993 0.0995911 0.433077 0 0.377345 0.104234 0.429623 0 0.385595 0.108991 0.426872 0 0.40569 0.109812 0.426321 0 0.427091 0.108379 0.42774 0 0.434272 0.109472 0.430645 0 0.450696 0.107067 0.433249 0 0.486567 0.10026 0.43396 0 0.509535 0.0995156 0.426557 0 0.522976 0.103894 0.42206 0 0.542386 0.106669 0.407906 0 0.551272 0.112955 0.404763 0 0.675797 0.113509 0.405408 0 0.71987 0.118398 0.368721 0 0.835779 0.114483 0.388627 0 0.869605 0.108444 0.393029 0 0.121513 0.124508 0.38856 0 0.121513 0.124508 0.38856 0 0.121513 0.124508 0.38856 0 0.131821 0.122467 0.390625 0 0.144357 0.120486 0.395986 0 0.156717 0.121485 0.398792 0 0.164083 0.121781 0.402202 0 0.174074 0.120691 0.407914 0 0.199186 0.119906 0.41225 0 0.232776 0.121465 0.409769 0 0.260138 0.12122 0.400651 0 0.274123 0.121053 0.408613 0 0.294844 0.119702 0.419836 0 0.311618 0.119184 0.427655 0 0.327831 0.118614 0.433557 0 0.35055 0.118653 0.434073 0 0.368697 0.118247 0.434395 0 0.38307 0.120217 0.434045 0 0.390395 0.124153 0.431872 0 0.402553 0.128826 0.423987 0 0.427551 0.123536 0.426205 0 0.436788 0.123413 0.428101 0 0.44384 0.124054 0.429208 0 0.481425 0.11463 0.434329 0 0.512674 0.11196 0.42762 0 0.524408 0.117883 0.424331 0 0.54389 0.125476 0.410178 0 0.558101 0.132578 0.404442 0 0.679709 0.127883 0.408174 0 0.721915 0.134271 0.370995 0 0.836507 0.130523 0.387708 0 0.864458 0.126768 0.387863 0 0.115698 0.142301 0.39037 0 0.115698 0.142301 0.39037 0 0.115698 0.142301 0.39037 0 0.127151 0.139922 0.389895 0 0.142749 0.136676 0.395821 0 0.157152 0.136134 0.39686 0 0.165069 0.138519 0.400726 0 0.175501 0.140363 0.406064 0 0.198822 0.14109 0.412313 0 0.231785 0.140881 0.411452 0 0.260156 0.140427 0.400563 0 0.273835 0.140646 0.408321 0 0.294495 0.14076 0.41909 0 0.311941 0.141081 0.427164 0 0.327815 0.141748 0.432898 0 0.349644 0.141445 0.432301 0 0.367381 0.140409 0.432334 0 0.384753 0.13859 0.434668 0 0.39462 0.137904 0.43639 0 0.405794 0.140705 0.428768 0 0.419805 0.14279 0.423428 0 0.439058 0.139687 0.425987 0 0.446983 0.14171 0.426682 0 0.46841 0.139945 0.427699 0 0.516938 0.130695 0.430586 0 0.527948 0.139059 0.426334 0 0.548544 0.147092 0.414039 0 0.564376 0.152927 0.404346 0 0.686894 0.144569 0.413555 0 0.724249 0.151138 0.373354 0 0.836393 0.145319 0.389011 0 0.858682 0.146858 0.38248 0 0.113482 0.152706 0.39157 0 0.113482 0.152706 0.39157 0 0.113482 0.152706 0.39157 0 0.124009 0.151033 0.389945 0 0.141343 0.147468 0.39573 0 0.159731 0.148535 0.395437 0 0.16764 0.150673 0.399069 0 0.176748 0.151766 0.404689 0 0.198152 0.152878 0.412605 0 0.230785 0.152238 0.413102 0 0.26043 0.152787 0.40047 0 0.274124 0.152741 0.408306 0 0.294022 0.152803 0.41853 0 0.31218 0.153008 0.426876 0 0.327787 0.153736 0.432491 0 0.349162 0.152875 0.431616 0 0.365394 0.151119 0.431082 0 0.382737 0.148058 0.433058 0 0.394693 0.146284 0.436334 0 0.407505 0.147973 0.431774 0 0.421777 0.150349 0.425987 0 0.440966 0.150779 0.425234 0 0.449926 0.153555 0.425333 0 0.464332 0.154722 0.424641 0 0.515903 0.143205 0.431258 0 0.530697 0.149877 0.426892 0 0.550135 0.155657 0.415838 0 0.56702 0.16166 0.404277 0 0.690126 0.15278 0.416323 0 0.724854 0.156281 0.375245 0 0.837308 0.156725 0.388655 0 0.859676 0.158573 0.38118 0 0.112723 0.161832 0.391722 0 0.112723 0.161832 0.391722 0 0.112723 0.161832 0.391722 0 0.121977 0.160813 0.390936 0 0.140211 0.158552 0.396105 0 0.161632 0.157016 0.393818 0 0.169623 0.159185 0.397347 0 0.17774 0.160617 0.403637 0 0.198349 0.161871 0.411925 0 0.230697 0.162068 0.414137 0 0.260437 0.161879 0.40021 0 0.27428 0.161965 0.408181 0 0.29395 0.162907 0.418274 0 0.312227 0.162758 0.426592 0 0.327648 0.162985 0.432146 0 0.348169 0.161951 0.431113 0 0.363542 0.160039 0.430263 0 0.3812 0.157229 0.431881 0 0.393726 0.155354 0.435271 0 0.408997 0.154627 0.43453 0 0.4241 0.158321 0.428309 0 0.441365 0.162203 0.424669 0 0.452532 0.16424 0.424181 0 0.462971 0.167038 0.423442 0 0.511527 0.156822 0.430451 0 0.533041 0.15808 0.427373 0 0.55145 0.163524 0.417695 0 0.568929 0.169222 0.405388 0 0.692239 0.16126 0.418591 0 0.725483 0.161743 0.377271 0 0.835261 0.17004 0.386746 0 0.861578 0.170881 0.380682 0 0.114111 0.19049 0.388825 0 0.114111 0.19049 0.388825 0 0.114111 0.19049 0.388825 0 0.122511 0.191047 0.391268 0 0.135051 0.191654 0.398254 0 0.160904 0.188669 0.396286 0 0.176677 0.188642 0.390715 0 0.184652 0.190025 0.39697 0 0.201503 0.192423 0.407269 0 0.231945 0.193591 0.414321 0 0.261419 0.194933 0.399854 0 0.275588 0.195839 0.408024 0 0.295266 0.197094 0.418513 0 0.312016 0.196416 0.42584 0 0.32685 0.196166 0.430769 0 0.344954 0.195753 0.429183 0 0.360044 0.194765 0.428025 0 0.376979 0.193724 0.428746 0 0.390666 0.192685 0.431486 0 0.410501 0.191667 0.432386 0 0.427971 0.191131 0.432922 0 0.44837 0.190749 0.43188 0 0.459567 0.196222 0.423819 0 0.468828 0.200835 0.420397 0 0.488593 0.200622 0.419538 0 0.539791 0.189347 0.426383 0 0.556604 0.192901 0.423717 0 0.575092 0.195412 0.410443 0 0.686713 0.19154 0.421441 0 0.731945 0.198662 0.381405 0 0.844642 0.198451 0.398889 0 0.864897 0.205087 0.382439 0 0.110147 0.227639 0.391265 0 0.110147 0.227639 0.391265 0 0.110147 0.227639 0.391265 0 0.124144 0.227001 0.388622 0 0.138066 0.227156 0.394942 0 0.156753 0.226734 0.397133 0 0.176497 0.224818 0.392782 0 0.188119 0.225789 0.396377 0 0.204909 0.229017 0.405236 0 0.233831 0.235747 0.415017 0 0.263379 0.235668 0.400086 0 0.275845 0.235177 0.407411 0 0.294171 0.234076 0.417162 0 0.310971 0.232999 0.424772 0 0.326565 0.232005 0.429775 0 0.344556 0.231189 0.427052 0 0.357655 0.23037 0.426164 0 0.373819 0.228676 0.426706 0 0.386232 0.227315 0.428862 0 0.406978 0.225001 0.428879 0 0.425664 0.22358 0.430891 0 0.445626 0.221833 0.433749 0 0.465535 0.220249 0.433553 0 0.47513 0.226186 0.425113 0 0.485447 0.236493 0.416647 0 0.521754 0.230932 0.420958 0 0.560096 0.226009 0.423696 0 0.579091 0.22874 0.416869 0 0.679694 0.232072 0.416689 0 0.735799 0.23004 0.382848 0 0.842378 0.233328 0.396288 0 0.870316 0.232913 0.391888 0 0.109759 0.246621 0.393451 0 0.109759 0.246621 0.393451 0 0.109759 0.246621 0.393451 0 0.122187 0.246211 0.391382 0 0.138446 0.245834 0.394971 0 0.15372 0.247541 0.397214 0 0.176576 0.245408 0.39465 0 0.189873 0.246752 0.397468 0 0.206664 0.249992 0.40557 0 0.231552 0.251135 0.416077 0 0.263037 0.248641 0.399857 0 0.274709 0.248125 0.406927 0 0.292894 0.24647 0.416824 0 0.310158 0.2449 0.424582 0 0.326104 0.243294 0.430194 0 0.34377 0.24224 0.428498 0 0.356438 0.241906 0.426777 0 0.372274 0.241635 0.426566 0 0.384825 0.241666 0.428553 0 0.405329 0.241187 0.428149 0 0.4257 0.240743 0.42934 0 0.442266 0.241327 0.432151 0 0.468839 0.238454 0.432038 0 0.479858 0.242997 0.428661 0 0.490087 0.253958 0.418964 0 0.511329 0.255343 0.415452 0 0.562517 0.245251 0.420969 0 0.581128 0.247221 0.419653 0 0.649789 0.256729 0.400905 0 0.737439 0.244945 0.383124 0 0.840335 0.252245 0.393719 0 0.872536 0.250015 0.393017 0 0.111283 0.262313 0.393477 0 0.111283 0.262313 0.393477 0 0.111283 0.262313 0.393477 0 0.120314 0.263224 0.394327 0 0.138328 0.263314 0.396533 0 0.154666 0.263531 0.397039 0 0.173431 0.261697 0.397623 0 0.189291 0.26121 0.400722 0 0.207345 0.262214 0.406433 0 0.230021 0.261679 0.415358 0 0.262308 0.258405 0.399574 0 0.273923 0.258204 0.406653 0 0.29216 0.257988 0.416777 0 0.309541 0.257684 0.424277 0 0.325547 0.257797 0.429906 0 0.344653 0.258752 0.427845 0 0.357976 0.260192 0.425999 0 0.372359 0.261825 0.425291 0 0.384775 0.262107 0.427145 0 0.404756 0.26227 0.425978 0 0.425549 0.261605 0.426736 0 0.443391 0.261288 0.430591 0 0.467066 0.258761 0.430755 0 0.483438 0.259389 0.428994 0 0.493316 0.265421 0.422522 0 0.507289 0.271995 0.413356 0 0.564091 0.259346 0.420314 0 0.582448 0.26151 0.421754 0 0.654736 0.267652 0.404341 0 0.739472 0.259926 0.383319 0 0.841202 0.266884 0.394621 0 0.874036 0.26608 0.392715 0 0.113034 0.278253 0.394228 0 0.113034 0.278253 0.394228 0 0.113034 0.278253 0.394228 0 0.12225 0.279289 0.395402 0 0.136579 0.280865 0.401931 0 0.156864 0.28287 0.397083 0 0.168868 0.284664 0.400276 0 0.186676 0.281769 0.403097 0 0.207558 0.280204 0.406866 0 0.22984 0.28191 0.412397 0 0.261706 0.282403 0.398278 0 0.274719 0.282474 0.405988 0 0.292043 0.283112 0.415745 0 0.309408 0.283844 0.423378 0 0.325936 0.284064 0.429136 0 0.346075 0.284214 0.427391 0 0.36003 0.28448 0.425571 0 0.373669 0.28537 0.42553 0 0.384696 0.28559 0.426746 0 0.403324 0.285041 0.425403 0 0.423668 0.283622 0.425583 0 0.443572 0.282493 0.429236 0 0.461469 0.281968 0.429977 0 0.487136 0.279458 0.428324 0 0.497898 0.28257 0.425606 0 0.510996 0.288598 0.418648 0 0.545949 0.286887 0.414795 0 0.587442 0.282258 0.421901 0 0.662438 0.287324 0.409271 0 0.7419 0.283321 0.385837 0 0.842683 0.291942 0.395851 0 0.872377 0.292869 0.39044 0 0.11418 0.310717 0.396103 0 0.11418 0.310717 0.396103 0 0.11418 0.310717 0.396103 0 0.12709 0.310805 0.393547 0 0.139908 0.311845 0.398508 0 0.15631 0.310211 0.397277 0 0.168836 0.309283 0.396289 0 0.181226 0.308478 0.401133 0 0.206863 0.306123 0.408737 0 0.235478 0.306525 0.403066 0 0.260432 0.30795 0.39711 0 0.275633 0.307395 0.405817 0 0.29254 0.308832 0.415629 0 0.309696 0.309089 0.423451 0 0.326104 0.308889 0.429125 0 0.345741 0.308685 0.428613 0 0.3603 0.308335 0.426341 0 0.374621 0.308291 0.425804 0 0.384747 0.308634 0.427064 0 0.402281 0.308403 0.425464 0 0.4209 0.307704 0.424185 0 0.441977 0.305867 0.427112 0 0.460193 0.30548 0.428654 0 0.487521 0.302651 0.427466 0 0.502641 0.304638 0.424539 0 0.515431 0.307804 0.423963 0 0.545745 0.309922 0.417617 0 0.587412 0.308114 0.41867 0 0.666928 0.311324 0.412622 0 0.743902 0.306869 0.390547 0 0.845321 0.310526 0.399044 0 0.872838 0.312454 0.391419 0 0.111602 0.330404 0.396393 0 0.111602 0.330404 0.396393 0 0.111602 0.330404 0.396393 0 0.123589 0.328208 0.396177 0 0.139906 0.326332 0.397435 0 0.15402 0.325952 0.3987 0 0.169599 0.323568 0.394816 0 0.180789 0.323995 0.399764 0 0.206186 0.323799 0.411369 0 0.2401 0.323031 0.396916 0 0.260085 0.325876 0.396565 0 0.275355 0.325499 0.405415 0 0.293353 0.326086 0.415797 0 0.309774 0.325982 0.423318 0 0.325661 0.325283 0.429 0 0.344987 0.324536 0.428682 0 0.359971 0.324303 0.4267 0 0.375078 0.324352 0.425714 0 0.385295 0.324842 0.427001 0 0.402082 0.325023 0.425595 0 0.420205 0.324829 0.423888 0 0.440458 0.323967 0.425726 0 0.460874 0.323118 0.427088 0 0.483551 0.322183 0.426248 0 0.50599 0.322027 0.42396 0 0.516541 0.325928 0.422748 0 0.552876 0.323042 0.423635 0 0.59011 0.325759 0.417853 0 0.6691 0.329559 0.414423 0 0.744999 0.323937 0.393565 0 0.847687 0.32332 0.40215 0 0.874356 0.328137 0.393221 0 0.110339 0.347036 0.393264 0 0.110339 0.347036 0.393264 0 0.110339 0.347036 0.393264 0 0.119362 0.346593 0.397578 0 0.137578 0.343854 0.400955 0 0.153735 0.343628 0.398702 0 0.167903 0.342492 0.397822 0 0.180904 0.34254 0.399994 0 0.207698 0.34205 0.409377 0 0.240668 0.341589 0.396922 0 0.260723 0.343959 0.395861 0 0.275089 0.343622 0.404484 0 0.293786 0.34369 0.415592 0 0.309563 0.344078 0.422885 0 0.325254 0.344038 0.428676 0 0.344654 0.343509 0.428124 0 0.359887 0.343369 0.426397 0 0.375322 0.343512 0.425693 0 0.386071 0.343871 0.426767 0 0.402002 0.344456 0.425621 0 0.419953 0.3444 0.42395 0 0.439405 0.344084 0.42494 0 0.460975 0.343149 0.425284 0 0.479978 0.343641 0.425189 0 0.509935 0.341299 0.423365 0 0.521143 0.345398 0.421243 0 0.548518 0.344631 0.423302 0 0.595261 0.342759 0.424072 0 0.643468 0.35739 0.398976 0 0.745619 0.340937 0.396689 0 0.844949 0.344919 0.40051 0 0.877802 0.34554 0.397022 0 0.111006 0.359754 0.391873 0 0.111006 0.359754 0.391873 0 0.111006 0.359754 0.391873 0 0.118397 0.360492 0.395337 0 0.135589 0.359569 0.402544 0 0.154277 0.357803 0.3983 0 0.166734 0.357604 0.398945 0 0.179276 0.357368 0.402795 0 0.208067 0.355686 0.408446 0 0.239654 0.355942 0.399747 0 0.261099 0.358081 0.395127 0 0.275208 0.35793 0.403652 0 0.294344 0.357891 0.415159 0 0.309509 0.358809 0.422531 0 0.325217 0.358999 0.428394 0 0.344165 0.358714 0.42831 0 0.359731 0.358415 0.426101 0 0.375488 0.35839 0.4258 0 0.386668 0.358547 0.426711 0 0.402203 0.359275 0.425555 0 0.419908 0.35926 0.423989 0 0.439052 0.359356 0.424819 0 0.460347 0.359392 0.424591 0 0.480886 0.359918 0.424579 0 0.511342 0.357309 0.423067 0 0.524586 0.360713 0.420864 0 0.542139 0.363063 0.419825 0 0.599061 0.355478 0.42827 0 0.646325 0.369078 0.396912 0 0.7467 0.354086 0.396899 0 0.840867 0.361417 0.398419 0 0.879541 0.35823 0.399596 0 0.113029 0.375024 0.389776 0 0.113029 0.375024 0.389776 0 0.113029 0.375024 0.389776 0 0.1208 0.376112 0.392852 0 0.134803 0.376509 0.401957 0 0.153666 0.374149 0.39767 0 0.164994 0.373749 0.398769 0 0.177774 0.373171 0.40487 0 0.204839 0.372318 0.411748 0 0.238533 0.372347 0.403134 0 0.261616 0.373756 0.39416 0 0.275342 0.373894 0.402754 0 0.295253 0.373857 0.414533 0 0.309809 0.375328 0.42232 0 0.325232 0.375446 0.42815 0 0.343619 0.375288 0.428659 0 0.359536 0.374891 0.425788 0 0.375612 0.374902 0.425765 0 0.387042 0.37532 0.426885 0 0.4032 0.376286 0.425455 0 0.420099 0.377019 0.424054 0 0.439289 0.377211 0.424997 0 0.460504 0.377262 0.424703 0 0.481682 0.377524 0.423468 0 0.508563 0.375828 0.4223 0 0.527774 0.376273 0.420458 0 0.539987 0.379752 0.418205 0 0.602034 0.368556 0.429651 0 0.650897 0.382514 0.394145 0 0.747888 0.372059 0.395257 0 0.836337 0.379579 0.396253 0 0.880207 0.375613 0.399786 0 0.115 0.38659 0.387448 0 0.115 0.38659 0.387448 0 0.115 0.38659 0.387448 0 0.122401 0.387548 0.39071 0 0.136121 0.388514 0.398843 0 0.152067 0.387685 0.398177 0 0.163803 0.387112 0.397138 0 0.17782 0.386087 0.404929 0 0.202074 0.386283 0.414552 0 0.236192 0.385953 0.408947 0 0.262315 0.386838 0.393456 0 0.2758 0.386975 0.401956 0 0.295419 0.387053 0.413829 0 0.310274 0.388638 0.422191 0 0.32522 0.389179 0.427906 0 0.343379 0.389491 0.428981 0 0.359388 0.389423 0.425946 0 0.376004 0.389546 0.425667 0 0.387541 0.389983 0.427113 0 0.40416 0.39072 0.42542 0 0.420315 0.391604 0.424158 0 0.43926 0.391603 0.425068 0 0.460275 0.39087 0.424847 0 0.482079 0.389792 0.423015 0 0.505417 0.388659 0.421693 0 0.529887 0.387488 0.420035 0 0.541124 0.391399 0.4173 0 0.603059 0.38096 0.429057 0 0.653851 0.394273 0.392987 0 0.744939 0.386852 0.391782 0 0.832921 0.395072 0.394279 0 0.880234 0.389295 0.399375 0 0.118178 0.399508 0.385606 0 0.118178 0.399508 0.385606 0 0.118178 0.399508 0.385606 0 0.124896 0.401103 0.388116 0 0.138485 0.402885 0.396343 0 0.15056 0.405221 0.39899 0 0.163277 0.403778 0.395656 0 0.176986 0.403059 0.402731 0 0.2002 0.403465 0.417203 0 0.233987 0.402457 0.414905 0 0.26343 0.40227 0.392821 0 0.276359 0.402704 0.400939 0 0.295863 0.403159 0.412931 0 0.311514 0.405111 0.421822 0 0.325483 0.406721 0.427749 0 0.343563 0.406917 0.42899 0 0.359278 0.406864 0.426299 0 0.376197 0.40671 0.425603 0 0.388023 0.406972 0.427339 0 0.404785 0.406997 0.425868 3341.68 0.420278 0.406985 0.424232 3174.98 0.438415 0.406099 0.425023 0 0.45894 0.404774 0.424646 0 0.481596 0.403455 0.422779 0 0.502353 0.404426 0.420928 0 0.532927 0.401879 0.419308 0 0.544743 0.406425 0.416377 0 0.596006 0.400824 0.427641 0 0.65049 0.410429 0.397211 0 0.732376 0.408925 0.382695 0 0.828309 0.414467 0.39159 0 0.880513 0.412597 0.398631 0 0.12099 0.412989 0.384525 0 0.12099 0.412989 0.384525 0 0.12099 0.412989 0.384524 0 0.128491 0.414901 0.386589 0 0.141087 0.418133 0.394113 0 0.15176 0.42124 0.39926 0 0.162914 0.420971 0.395658 0 0.176606 0.420219 0.399126 0 0.201945 0.418927 0.415777 0 0.235243 0.418634 0.415807 0 0.264897 0.418265 0.393338 0 0.277174 0.419225 0.400118 0 0.296539 0.419814 0.411989 0 0.312906 0.421553 0.421603 0 0.325806 0.423935 0.427731 0 0.343502 0.423758 0.429039 0 0.358854 0.42316 0.42653 0 0.375725 0.422261 0.425491 0 0.387904 0.421791 0.427054 0 0.40434 0.421415 0.42613 3175.13 0.420316 0.421239 0.423934 16175.4 0.437541 0.420801 0.424836 2168.79 0.457739 0.4199 0.424349 0 0.481149 0.419266 0.422558 0 0.503864 0.421172 0.420937 0 0.535079 0.419652 0.418959 0 0.548622 0.423672 0.416293 0 0.583248 0.423161 0.422609 0 0.648703 0.427979 0.39917 0 0.713977 0.434734 0.371055 0 0.832471 0.444083 0.392169 0 0.870674 0.43091 0.392601 0 0.122945 0.43218 0.38289 0 0.122945 0.43218 0.38289 0 0.122945 0.43218 0.38289 0 0.131957 0.432765 0.386541 0 0.144202 0.436012 0.39309 0 0.154266 0.439477 0.398292 0 0.162834 0.440898 0.397647 0 0.174324 0.440895 0.400116 0 0.203804 0.438793 0.413229 0 0.23693 0.437653 0.415893 0 0.266806 0.437994 0.394608 0 0.277533 0.439713 0.400697 0 0.297085 0.439103 0.410703 0 0.314221 0.439259 0.420789 0 0.3266 0.44094 0.427241 0 0.342829 0.441183 0.428614 0 0.358118 0.440667 0.425956 0 0.374528 0.439778 0.425185 0 0.387033 0.438938 0.426344 0 0.403892 0.438589 0.426138 0 0.420616 0.438925 0.423696 2168.71 0.437337 0.439699 0.424624 1976.61 0.457607 0.44005 0.424664 0 0.481308 0.440046 0.422623 0 0.505738 0.440645 0.420987 0 0.532061 0.440522 0.418665 0 0.552461 0.442275 0.416458 0 0.575362 0.446273 0.418339 0 0.658255 0.444203 0.404242 0 0.701525 0.458903 0.363128 0 0.831715 0.453954 0.392988 0 0.858157 0.446955 0.384841 0 0.122604 0.451053 0.380182 0 0.122604 0.451053 0.380182 0 0.122604 0.451053 0.380182 0 0.132733 0.451235 0.385273 0 0.147478 0.452731 0.392757 0 0.157063 0.45679 0.397785 0 0.163699 0.460099 0.399222 0 0.173945 0.46078 0.402334 0 0.20181 0.45984 0.414386 0 0.236605 0.456404 0.415602 0 0.268021 0.455765 0.395463 0 0.277997 0.456695 0.401222 0 0.29524 0.456585 0.410017 0 0.314172 0.455301 0.419043 0 0.327455 0.456567 0.426464 0 0.342273 0.457803 0.42852 0 0.357481 0.457791 0.425634 0 0.373764 0.457629 0.425176 0 0.38645 0.457284 0.426248 0 0.404268 0.45704 0.426168 0 0.421417 0.457778 0.424356 0 0.438115 0.458896 0.424764 0 0.457639 0.459331 0.425216 0 0.481163 0.459441 0.422627 0 0.507112 0.459556 0.420849 0 0.530079 0.46103 0.419162 0 0.556274 0.46104 0.416345 0 0.573018 0.466254 0.416519 0 0.666067 0.459443 0.40646 0 0.707321 0.483701 0.367214 0 0.829089 0.460572 0.393619 0 0.847966 0.456092 0.380812 0 0.12391 0.472106 0.376676 0 0.12391 0.472106 0.376676 0 0.12391 0.472106 0.376676 0 0.132564 0.473214 0.382422 0 0.149661 0.473407 0.392253 0 0.160785 0.475995 0.397445 0 0.16693 0.478776 0.399378 0 0.174522 0.480779 0.403303 0 0.196762 0.480863 0.41537 0 0.232258 0.476836 0.414281 0 0.268234 0.473809 0.396472 0 0.278793 0.474354 0.402172 0 0.294846 0.475421 0.410449 0 0.31375 0.474563 0.417694 0 0.329032 0.475824 0.425224 0 0.343157 0.478186 0.427933 0 0.357566 0.478615 0.425782 0 0.373612 0.478768 0.425113 0 0.386176 0.479022 0.426272 0 0.404897 0.478976 0.426035 0 0.422268 0.479785 0.424939 0 0.439536 0.480852 0.424906 0 0.458104 0.48181 0.425456 0 0.480981 0.481898 0.422802 0 0.507374 0.481753 0.420818 0 0.529254 0.483302 0.419357 0 0.560606 0.481381 0.416603 0 0.574152 0.486848 0.415851 0 0.665798 0.48101 0.411238 0 0.711247 0.499894 0.370093 0 0.824026 0.464797 0.394224 0 0.843685 0.460086 0.382976 0 0.124606 0.495369 0.375749 0 0.124606 0.495369 0.375749 0 0.124606 0.495369 0.375749 0 0.134311 0.495145 0.379269 0 0.149599 0.49575 0.389554 0 0.162484 0.495624 0.396245 0 0.16991 0.497115 0.399144 0 0.178074 0.498952 0.40347 0 0.196401 0.50204 0.415204 0 0.229847 0.5014 0.412967 0 0.26743 0.49896 0.396102 0 0.280583 0.499049 0.403812 0 0.294954 0.500786 0.411423 0 0.312633 0.500354 0.418073 0 0.33335 0.499576 0.419202 0 0.346873 0.502505 0.423907 0 0.358141 0.504392 0.425835 0 0.37439 0.50516 0.425242 0 0.386824 0.505764 0.4263 0 0.405033 0.506233 0.42626 0 0.423539 0.506355 0.424656 0 0.440816 0.507013 0.425229 0 0.45865 0.507738 0.425067 0 0.480828 0.507939 0.422839 0 0.506951 0.507375 0.420304 0 0.530776 0.507113 0.418254 0 0.558553 0.50564 0.416458 0 0.579009 0.510428 0.415546 0 0.666025 0.510024 0.40653 0 0.711193 0.509928 0.372988 0 0.817919 0.46924 0.395142 0 0.839731 0.464311 0.385736 0 0.118325 0.520546 0.380393 0 0.118325 0.520546 0.380393 0 0.118325 0.520546 0.380393 0 0.132884 0.517706 0.378908 0 0.15111 0.517662 0.386421 0 0.162308 0.519897 0.393841 0 0.171899 0.521443 0.394414 0 0.182666 0.522636 0.40143 0 0.200631 0.526841 0.414577 0 0.231584 0.528479 0.412864 0 0.265637 0.527783 0.393516 0 0.281335 0.526709 0.402941 0 0.296912 0.528044 0.413061 0 0.31255 0.528595 0.418957 0 0.333796 0.528162 0.419492 0 0.351822 0.530377 0.418938 0 0.361468 0.532561 0.422658 0 0.37523 0.534071 0.424763 0 0.38745 0.534337 0.425948 0 0.404946 0.534733 0.426101 0 0.423805 0.534573 0.423807 0 0.441506 0.534404 0.424527 0 0.45933 0.534435 0.424478 0 0.480279 0.534301 0.422132 0 0.505236 0.531827 0.419203 0 0.531532 0.530681 0.416421 0 0.554873 0.531201 0.41469 0 0.584596 0.531761 0.413846 0 0.664737 0.524345 0.407605 0 0.708043 0.512636 0.375821 0 0.806978 0.480729 0.392223 0 0.840512 0.469013 0.392936 0 0.111199 0.552865 0.393844 0 0.111199 0.552865 0.393844 0 0.111199 0.552865 0.393844 0 0.12745 0.549794 0.383825 0 0.152431 0.545618 0.385497 0 0.166634 0.54728 0.389221 0 0.17533 0.550579 0.389165 0 0.187038 0.551787 0.392647 0 0.208047 0.553141 0.412021 0 0.231853 0.558576 0.414408 0 0.263906 0.558432 0.392898 0 0.281178 0.557152 0.400583 0 0.299613 0.557063 0.412675 0 0.312618 0.559422 0.419706 0 0.331725 0.558692 0.422278 0 0.357266 0.557867 0.414865 0 0.365373 0.559942 0.41881 0 0.37599 0.561504 0.422453 0 0.386933 0.561213 0.424933 0 0.403911 0.558833 0.425395 0 0.421484 0.556488 0.423547 0 0.439958 0.554453 0.423118 0 0.458243 0.554366 0.423345 0 0.479342 0.554407 0.420039 0 0.504188 0.551815 0.417868 0 0.530756 0.55042 0.416548 0 0.554474 0.552214 0.416414 0 0.587377 0.549195 0.418914 0 0.644611 0.53574 0.401855 0 0.709245 0.519401 0.375934 0 0.802785 0.484439 0.395782 0 0.862985 0.548772 0.390968 0 0.109795 0.586545 0.395898 0 0.109795 0.586545 0.395898 0 0.109795 0.586545 0.395898 0 0.120643 0.585608 0.395939 0 0.148192 0.582003 0.389543 0 0.170418 0.578214 0.385826 0 0.180111 0.580989 0.385271 0 0.189373 0.582848 0.38955 0 0.212977 0.582855 0.404782 0 0.233263 0.587864 0.41648 0 0.264353 0.587107 0.394365 0 0.279271 0.586643 0.400361 0 0.29991 0.584975 0.411337 0 0.314055 0.583416 0.419599 0 0.327972 0.581331 0.424505 0 0.353909 0.577271 0.415802 0 0.367148 0.574832 0.415811 0 0.375816 0.573651 0.420752 0 0.384442 0.572977 0.423841 0 0.40017 0.570887 0.42647 0 0.418324 0.568299 0.425291 0 0.437188 0.565454 0.425659 0 0.455414 0.563081 0.426809 0 0.476202 0.562663 0.424944 0 0.503379 0.569791 0.423473 0 0.531024 0.573819 0.421083 0 0.555895 0.573822 0.419443 0 0.591261 0.571817 0.421621 0 0.635305 0.552509 0.400948 0 0.70673 0.520458 0.373385 0 0.822224 0.560966 0.386832 0 0.860436 0.553232 0.384922 0 0.0601054 0.652614 0.459555 0 0.0601054 0.652614 0.459555 0 0.0601054 0.652614 0.459555 0 0.108715 0.645944 0.395395 0 0.129029 0.640876 0.40005 0 0.145812 0.638917 0.402865 0 0.166317 0.636013 0.397637 0 0.188085 0.631759 0.386942 0 0.21234 0.629322 0.401252 0 0.238336 0.659932 0.4148 0 0.257672 0.682203 0.414047 0 0.284281 0.678019 0.403412 0 0.301819 0.675127 0.41325 0 0.315975 0.673553 0.420328 0 0.328148 0.668498 0.423684 0 0.34229 0.663827 0.420399 0 0.355159 0.659898 0.41923 0 0.376014 0.652782 0.416835 0 0.391613 0.647576 0.415891 0 0.402477 0.644009 0.420011 0 0.415833 0.644334 0.4244 0 0.433687 0.646228 0.426471 0 0.453706 0.647734 0.428409 0 0.475818 0.646478 0.426781 0 0.495294 0.642451 0.422079 0 0.515737 0.637831 0.416455 0 0.536406 0.632918 0.412443 0 0.561383 0.626753 0.409081 0 0.627821 0.617147 0.396247 0 0.725972 0.622003 0.377731 0 0.816457 0.693225 0.39053 0 0.878695 0.675951 0.402213 0 -0.14874 0.764168 0.771367 0 -0.14874 0.764168 0.771367 0 -0.14874 0.764168 0.771367 0 -0.0816468 0.759706 0.67818 0 0.0407932 0.75072 0.513938 0 0.0767003 0.745353 0.485177 0 0.124305 0.739812 0.437851 0 0.163721 0.735094 0.396938 0 0.182488 0.729973 0.400057 0 0.228002 0.722688 0.40473 0 0.258736 0.722383 0.386211 0 0.276282 0.74349 0.394512 0 0.300086 0.767469 0.408793 0 0.318357 0.776665 0.419846 0 0.32819 0.776253 0.425705 0 0.345616 0.765914 0.430972 0 0.35624 0.7626 0.431424 0 0.369168 0.75316 0.421771 0 0.376091 0.746095 0.415712 0 0.385484 0.739702 0.413548 0 0.403424 0.725249 0.403999 0 0.420354 0.711908 0.398157 0 0.432985 0.716646 0.406259 0 0.461011 0.740599 0.416915 0 0.494974 0.75285 0.421154 0 0.525374 0.756943 0.423615 0 0.546583 0.757407 0.423806 0 0.577436 0.75622 0.420541 0 0.662725 0.756914 0.406257 0 0.690666 0.753328 0.370175 0 0.790504 0.748786 0.376931 0 0.823288 0.753944 0.37585 0 -0.218954 0.905105 0.882799 0 -0.218954 0.905105 0.882799 0 -0.218954 0.905105 0.882799 0 -0.177912 0.899728 0.843262 0 -0.0979973 0.894472 0.764505 0 -0.0543122 0.889855 0.72675 0 0.0140353 0.884028 0.640174 0 0.151799 0.872777 0.439558 0 0.180675 0.865214 0.435581 0 0.207168 0.854594 0.443022 0 0.263896 0.829514 0.389583 0 0.277453 0.819035 0.3924 0 0.289412 0.810663 0.401135 0 0.299014 0.804033 0.407945 0 0.311097 0.8023 0.414618 0 0.330766 0.820317 0.424968 0 0.340926 0.82116 0.430079 0 0.36006 0.819763 0.433657 0 0.380161 0.825348 0.427668 0 0.395936 0.830701 0.42709 0 0.415808 0.833681 0.424828 0 0.435404 0.830615 0.429074 0 0.458144 0.824057 0.423337 0 0.480434 0.818091 0.415376 0 0.496924 0.81636 0.422315 0 0.520153 0.813205 0.422467 0 0.54304 0.807456 0.422567 0 0.564691 0.800372 0.416873 0 0.6599 0.826002 0.406344 0 0.69573 0.839285 0.366949 0 0.821462 0.854101 0.383836 0 0.829504 0.856 0.377802 0 -0.344726 0.937219 1.06349 0 -0.344726 0.937219 1.06349 0 -0.344726 0.937219 1.06349 0 -0.338995 0.935215 1.07754 0 -0.188742 0.923364 0.849907 0 -0.138952 0.916186 0.803529 0 -0.0915658 0.909684 0.755633 0 0.00777918 0.899856 0.624211 0 0.0785565 0.890778 0.546627 0 0.177591 0.876194 0.433466 0 0.216453 0.867315 0.42088 0 0.267353 0.854488 0.386719 0 0.291161 0.857137 0.397842 0 0.318082 0.87502 0.400499 0 0.335703 0.880866 0.402829 0 0.352445 0.888983 0.406926 0 0.364563 0.896487 0.410204 0 0.376631 0.900635 0.415215 0 0.3883 0.901947 0.4198 0 0.406475 0.9019 0.424755 0 0.419664 0.902878 0.425699 0 0.435264 0.903545 0.423207 0 0.452457 0.902472 0.425157 0 0.476967 0.894102 0.421836 0 0.50268 0.88545 0.409924 0 0.515804 0.883962 0.41253 0 0.541048 0.888931 0.412524 0 0.572751 0.894826 0.410536 0 0.665691 0.899149 0.404204 0 0.700332 0.896206 0.366486 0 0.823862 0.898144 0.390508 0 0.840181 0.892479 0.378967 0 0.1221 0.0976284 0.409571 0 0.1221 0.0976284 0.409571 0 0.1221 0.0976284 0.409571 0 0.131537 0.0976054 0.408977 0 0.14972 0.0986246 0.404434 0 0.164309 0.0997184 0.410717 0 0.172203 0.0990802 0.416061 0 0.181037 0.0988917 0.417302 0 0.203797 0.0948898 0.426273 0 0.229835 0.0940223 0.436823 0 0.252371 0.0935661 0.435876 0 0.284131 0.0931342 0.416785 0 0.303837 0.0928365 0.428015 0 0.321245 0.0919624 0.438727 0 0.33642 0.0915341 0.445954 0 0.346248 0.0953884 0.447305 0 0.355566 0.0979395 0.445014 0 0.374772 0.0973654 0.443231 0 0.386503 0.0975212 0.444936 0 0.411435 0.0955181 0.448186 0 0.421721 0.0981322 0.451665 0 0.432496 0.100298 0.452281 0 0.452791 0.0992119 0.451755 0 0.47942 0.0963851 0.45076 0 0.504668 0.0956145 0.441461 0 0.516261 0.0991106 0.434029 0 0.537223 0.100823 0.422078 0 0.548835 0.103532 0.419472 0 0.66404 0.106999 0.420005 0 0.714181 0.110598 0.385401 0 0.840752 0.100671 0.414768 0 0.869083 0.0985173 0.409307 0 0.1221 0.0976284 0.409571 0 0.1221 0.0976284 0.409571 0 0.1221 0.0976284 0.409571 0 0.131537 0.0976054 0.408977 0 0.14972 0.0986246 0.404434 0 0.164309 0.0997184 0.410717 0 0.172203 0.0990802 0.416061 0 0.181037 0.0988917 0.417302 0 0.203797 0.0948898 0.426273 0 0.229835 0.0940223 0.436823 0 0.252371 0.0935661 0.435876 0 0.284131 0.0931342 0.416785 0 0.303837 0.0928365 0.428015 0 0.321245 0.0919624 0.438727 0 0.33642 0.0915341 0.445954 0 0.346248 0.0953884 0.447305 0 0.355566 0.0979395 0.445014 0 0.374772 0.0973654 0.443231 0 0.386503 0.0975212 0.444936 0 0.411435 0.0955181 0.448186 0 0.421721 0.0981322 0.451665 0 0.432496 0.100298 0.452281 0 0.452791 0.0992119 0.451755 0 0.47942 0.0963851 0.45076 0 0.504668 0.0956145 0.441461 0 0.516261 0.0991106 0.434029 0 0.537223 0.100823 0.422078 0 0.548835 0.103532 0.419472 0 0.66404 0.106999 0.420005 0 0.714181 0.110598 0.385401 0 0.840752 0.100671 0.414768 0 0.869083 0.0985173 0.409307 0 0.1221 0.0976284 0.409571 0 0.1221 0.0976284 0.409571 0 0.1221 0.0976284 0.409571 0 0.131537 0.0976054 0.408977 0 0.14972 0.0986246 0.404434 0 0.164309 0.0997184 0.410717 0 0.172203 0.0990802 0.416061 0 0.181037 0.0988917 0.417302 0 0.203797 0.0948898 0.426273 0 0.229835 0.0940223 0.436823 0 0.252371 0.0935661 0.435876 0 0.284131 0.0931342 0.416785 0 0.303837 0.0928365 0.428015 0 0.321245 0.0919624 0.438727 0 0.33642 0.0915341 0.445954 0 0.346248 0.0953884 0.447305 0 0.355566 0.0979395 0.445014 0 0.374772 0.0973654 0.443231 0 0.386503 0.0975212 0.444936 0 0.411435 0.0955181 0.448186 0 0.421721 0.0981322 0.451665 0 0.432496 0.100298 0.452281 0 0.452791 0.0992119 0.451755 0 0.47942 0.0963851 0.45076 0 0.504668 0.0956146 0.441461 0 0.516261 0.0991106 0.434029 0 0.537223 0.100823 0.422078 0 0.548835 0.103532 0.419472 0 0.66404 0.106999 0.420005 0 0.714181 0.110598 0.385401 0 0.840752 0.100671 0.414768 0 0.869083 0.0985173 0.409307 0 0.121239 0.109427 0.41043 0 0.121239 0.109427 0.41043 0 0.121239 0.109427 0.41043 0 0.132046 0.108791 0.410454 0 0.149909 0.108233 0.405027 0 0.163526 0.106505 0.409235 0 0.17161 0.105369 0.414526 0 0.179852 0.105311 0.416136 0 0.20349 0.102485 0.425901 0 0.229694 0.10377 0.436071 0 0.251989 0.103193 0.435407 0 0.283834 0.102628 0.41633 0 0.303714 0.101859 0.427583 0 0.320462 0.101034 0.438032 0 0.337162 0.0993641 0.446555 0 0.34876 0.101939 0.449351 0 0.357563 0.105002 0.448529 0 0.374457 0.107588 0.442032 0 0.387188 0.108218 0.443898 0 0.410374 0.106731 0.447578 0 0.423739 0.107263 0.450269 0 0.433164 0.10731 0.451537 0 0.452353 0.106017 0.451877 0 0.478527 0.103048 0.451903 0 0.505877 0.101476 0.44289 0 0.517526 0.105718 0.434359 0 0.539032 0.107256 0.421993 0 0.550795 0.111842 0.419145 0 0.665038 0.115186 0.421522 0 0.715033 0.118662 0.385229 0 0.836939 0.111259 0.411572 0 0.868215 0.107015 0.408691 0 0.120373 0.124952 0.409713 0 0.120373 0.124952 0.409713 0 0.120373 0.124952 0.409713 0 0.129774 0.12293 0.411708 0 0.147672 0.120209 0.405266 0 0.16209 0.118969 0.407402 0 0.171139 0.117927 0.411843 0 0.178856 0.118736 0.414316 0 0.204504 0.119466 0.42574 0 0.230269 0.122444 0.435773 0 0.251271 0.121823 0.434802 0 0.28258 0.120102 0.415569 0 0.303214 0.118938 0.426736 0 0.319464 0.11844 0.43683 0 0.335533 0.117524 0.445219 0 0.354894 0.117204 0.453805 0 0.36296 0.120927 0.45418 0 0.377415 0.124859 0.444675 0 0.387969 0.12757 0.441301 0 0.40584 0.125898 0.445275 0 0.426241 0.121953 0.446981 0 0.434252 0.122195 0.447532 0 0.451148 0.119112 0.452164 0 0.475139 0.116972 0.453265 0 0.508732 0.113912 0.445485 0 0.520803 0.120342 0.435648 0 0.54051 0.126354 0.424315 0 0.555565 0.131797 0.41859 0 0.666656 0.130431 0.424457 0 0.717085 0.136124 0.384864 0 0.832718 0.131375 0.407358 0 0.8661 0.124479 0.407941 0 0.11781 0.140794 0.407435 0 0.11781 0.140794 0.407435 0 0.11781 0.140794 0.407435 0 0.126268 0.139691 0.410383 0 0.144339 0.136515 0.40701 0 0.161022 0.135328 0.407385 0 0.169528 0.136405 0.410994 0 0.1805 0.138937 0.412971 0 0.204507 0.140822 0.425417 0 0.230128 0.14168 0.436653 0 0.250665 0.14148 0.434521 0 0.281075 0.140679 0.414963 0 0.302881 0.140035 0.425952 0 0.319912 0.14019 0.436201 0 0.334924 0.140473 0.444015 0 0.353204 0.139663 0.452177 0 0.367788 0.138712 0.457609 0 0.381456 0.139851 0.451996 0 0.39098 0.141405 0.445183 0 0.401308 0.143861 0.442046 0 0.423426 0.139535 0.444925 0 0.436981 0.138731 0.444394 0 0.445441 0.140083 0.446298 0 0.47343 0.135513 0.45428 0 0.509548 0.134136 0.448791 0 0.525559 0.141347 0.439525 0 0.541817 0.15048 0.427888 0 0.558763 0.15335 0.417953 0 0.671602 0.147721 0.429279 0 0.71967 0.153898 0.38695 0 0.831949 0.146517 0.407579 0 0.859961 0.142005 0.404245 0 0.116904 0.151085 0.40637 0 0.116904 0.151085 0.40637 0 0.116904 0.151085 0.40637 0 0.124989 0.150374 0.408888 0 0.142796 0.148485 0.408695 0 0.162105 0.149162 0.408185 0 0.170386 0.149773 0.411904 0 0.181406 0.15026 0.412239 0 0.205174 0.152182 0.424099 0 0.230393 0.152809 0.437145 0 0.250846 0.152986 0.434606 0 0.280711 0.152529 0.415313 0 0.303016 0.152259 0.425646 0 0.320114 0.15231 0.435832 0 0.334668 0.152665 0.443415 0 0.351882 0.151591 0.451083 0 0.365688 0.148941 0.456173 0 0.382519 0.146636 0.456003 0 0.392663 0.14869 0.448429 0 0.402405 0.152647 0.442983 0 0.419789 0.151081 0.443997 0 0.438989 0.149746 0.44329 0 0.447148 0.152162 0.444555 0 0.471824 0.148633 0.452633 0 0.509294 0.146008 0.450296 0 0.528185 0.151913 0.441456 0 0.543469 0.159083 0.429339 0 0.561191 0.162171 0.418315 0 0.675102 0.15588 0.431599 0 0.720088 0.159504 0.388369 0 0.832594 0.155225 0.407843 0 0.857677 0.153458 0.401654 0 0.116329 0.160605 0.406662 0 0.116329 0.160605 0.406662 0 0.116329 0.160605 0.406662 0 0.124475 0.159908 0.408006 0 0.141014 0.159629 0.410425 0 0.162353 0.158372 0.408934 0 0.17072 0.15894 0.412583 0 0.182076 0.158936 0.411689 0 0.205681 0.161027 0.422843 0 0.230588 0.161645 0.437276 0 0.250915 0.161975 0.434628 0 0.280579 0.16205 0.416165 0 0.303062 0.16238 0.42534 0 0.320098 0.162051 0.435491 0 0.334509 0.162102 0.442999 0 0.350354 0.160711 0.450035 0 0.363733 0.158249 0.454908 0 0.381443 0.155455 0.455857 0 0.39412 0.155385 0.45132 0 0.404463 0.159221 0.445227 0 0.416676 0.163312 0.44275 0 0.441183 0.160652 0.442422 0 0.449595 0.163198 0.443483 0 0.468469 0.161736 0.449404 0 0.509126 0.156481 0.451646 0 0.530087 0.160107 0.443152 0 0.545223 0.166796 0.430617 0 0.563455 0.170449 0.418677 0 0.678787 0.163788 0.433359 0 0.720539 0.165391 0.389829 0 0.834231 0.167576 0.407419 0 0.855219 0.168432 0.398125 0 0.116217 0.191844 0.407862 0 0.116217 0.191844 0.407862 0 0.116217 0.191844 0.407862 0 0.123779 0.191038 0.4097 0 0.139429 0.190434 0.409265 0 0.161652 0.189755 0.41154 0 0.171078 0.189878 0.41509 0 0.182812 0.189886 0.412005 0 0.208663 0.191504 0.416637 0 0.23511 0.192818 0.433242 0 0.25222 0.195532 0.434844 0 0.280525 0.196076 0.419112 0 0.303046 0.19641 0.424594 0 0.319087 0.195682 0.434114 0 0.332917 0.194862 0.441203 0 0.347095 0.194203 0.447296 0 0.358843 0.19326 0.451332 0 0.376967 0.192005 0.451628 0 0.39341 0.190662 0.450694 0 0.412721 0.189749 0.451992 0 0.422955 0.193519 0.450804 0 0.44117 0.196153 0.442435 0 0.456338 0.197276 0.439865 0 0.464838 0.199644 0.44131 0 0.495877 0.195189 0.447887 0 0.537073 0.188973 0.448454 0 0.551671 0.19613 0.435714 0 0.569209 0.199243 0.422494 0 0.681058 0.189644 0.437129 0 0.727005 0.200311 0.395262 0 0.837961 0.202771 0.409561 0 0.85886 0.206487 0.398399 0 0.116117 0.227435 0.406277 0 0.116117 0.227435 0.406277 0 0.116117 0.227435 0.406277 0 0.12411 0.228101 0.410204 0 0.13854 0.227677 0.409938 0 0.16133 0.226567 0.410179 0 0.172086 0.226631 0.415979 0 0.184974 0.227334 0.41505 0 0.214073 0.228665 0.411599 0 0.241622 0.232344 0.42878 0 0.254364 0.234621 0.435039 0 0.278322 0.234465 0.421569 0 0.302048 0.233214 0.423292 0 0.318181 0.232447 0.432574 0 0.331491 0.232429 0.439257 0 0.345918 0.231714 0.445439 0 0.356518 0.23095 0.448769 0 0.372863 0.22934 0.448487 0 0.388724 0.227586 0.447045 0 0.409958 0.225127 0.449123 0 0.426333 0.223874 0.453301 0 0.447923 0.221838 0.453676 0 0.46207 0.223742 0.445931 0 0.470486 0.229791 0.439322 0 0.481662 0.232967 0.437373 0 0.529773 0.223841 0.446172 0 0.554918 0.224141 0.445062 0 0.573695 0.230994 0.428033 0 0.677063 0.231057 0.433616 0 0.730925 0.230605 0.399027 0 0.844307 0.230435 0.416817 0 0.864136 0.236734 0.403632 0 0.115135 0.247258 0.406011 0 0.115135 0.247258 0.406011 0 0.115135 0.247258 0.406011 0 0.124132 0.2466 0.409537 0 0.137863 0.247001 0.411956 0 0.161835 0.245735 0.409103 0 0.17436 0.246067 0.415555 0 0.186291 0.248475 0.417112 0 0.214848 0.250788 0.412002 0 0.241506 0.248924 0.427413 0 0.254729 0.249854 0.434311 0 0.275378 0.248307 0.42421 0 0.300972 0.246133 0.422944 0 0.317557 0.245133 0.432539 0 0.331412 0.244326 0.439465 0 0.344925 0.243611 0.445163 0 0.355554 0.242725 0.448487 0 0.37074 0.241641 0.449352 0 0.386083 0.240457 0.447151 0 0.407955 0.238356 0.448725 0 0.42565 0.23798 0.452893 0 0.444966 0.237626 0.453236 0 0.465845 0.237907 0.450796 0 0.475249 0.247587 0.442191 0 0.486592 0.25499 0.434663 0 0.518007 0.251657 0.439881 0 0.559741 0.24539 0.445194 0 0.576628 0.248564 0.43014 0 0.653217 0.253518 0.422563 0 0.732223 0.245336 0.400461 0 0.842037 0.249646 0.413821 0 0.866653 0.250628 0.407608 0 0.114963 0.26419 0.406606 0 0.114963 0.26419 0.406606 0 0.114963 0.26419 0.406606 0 0.12407 0.263724 0.409422 0 0.138851 0.264917 0.412447 0 0.160107 0.264141 0.410354 0 0.174863 0.262862 0.415368 0 0.187786 0.263624 0.418288 0 0.212844 0.262754 0.413083 0 0.239967 0.259765 0.42687 0 0.254419 0.259022 0.433778 0 0.271727 0.258613 0.428578 0 0.300224 0.257298 0.422873 0 0.316789 0.256715 0.432432 0 0.331267 0.256415 0.439534 0 0.345035 0.257993 0.445089 0 0.355498 0.259201 0.448025 0 0.370953 0.25974 0.44753 0 0.385735 0.260034 0.445468 0 0.4071 0.259595 0.446641 0 0.4261 0.25884 0.451149 0 0.444359 0.259065 0.450367 0 0.467161 0.257328 0.450977 0 0.479011 0.261878 0.446265 0 0.489674 0.269415 0.434507 0 0.512239 0.268661 0.435937 0 0.562849 0.258881 0.44346 0 0.577811 0.260778 0.433337 0 0.632065 0.273516 0.41096 0 0.733965 0.260441 0.401496 0 0.840208 0.266861 0.411466 0 0.868839 0.265172 0.408996 0 0.116744 0.281932 0.407363 0 0.116744 0.281932 0.407363 0 0.116744 0.281932 0.407363 0 0.124569 0.282015 0.410991 0 0.139866 0.281378 0.412812 0 0.157831 0.283075 0.414587 0 0.171219 0.282152 0.417541 0 0.188808 0.279768 0.418044 0 0.211369 0.279894 0.416001 0 0.236702 0.277554 0.426939 0 0.25497 0.277706 0.432436 0 0.273006 0.281617 0.426642 0 0.300108 0.282415 0.421717 0 0.316842 0.283151 0.431482 0 0.331825 0.284059 0.438989 0 0.346662 0.284796 0.445055 0 0.357038 0.285449 0.448127 0 0.371947 0.285946 0.445348 0 0.385688 0.285578 0.44389 0 0.404932 0.284561 0.444758 0 0.424429 0.282871 0.44931 0 0.444706 0.28177 0.449116 0 0.464338 0.280235 0.449819 0 0.482796 0.279366 0.450433 0 0.493733 0.285315 0.440991 0 0.505237 0.292279 0.430387 0 0.558178 0.281536 0.440161 0 0.580813 0.281939 0.436282 0 0.640046 0.292824 0.416195 0 0.736291 0.286202 0.403161 0 0.840646 0.292395 0.411373 0 0.870465 0.291682 0.407499 0 0.120285 0.309654 0.40832 0 0.120285 0.309654 0.40832 0 0.120285 0.309654 0.40832 0 0.126789 0.312119 0.411851 0 0.140445 0.31107 0.412444 0 0.157666 0.31076 0.411905 0 0.166487 0.310632 0.416665 0 0.184708 0.307604 0.41576 0 0.210857 0.30654 0.419061 0 0.233169 0.307348 0.429629 0 0.25565 0.304261 0.430475 0 0.276319 0.307464 0.423468 0 0.300737 0.308717 0.421541 0 0.317306 0.309021 0.431314 0 0.331929 0.309155 0.438948 0 0.347379 0.308665 0.4454 0 0.357891 0.308561 0.4485 0 0.372104 0.30866 0.446986 0 0.384935 0.308795 0.443443 0 0.402843 0.308341 0.4436 0 0.42155 0.306634 0.447658 0 0.444097 0.304787 0.447949 0 0.460863 0.304456 0.447616 0 0.48459 0.301927 0.449605 0 0.498435 0.304132 0.446148 0 0.509342 0.312145 0.435742 0 0.53903 0.313413 0.433317 0 0.585783 0.306757 0.438187 0 0.650635 0.314863 0.422466 0 0.738245 0.31076 0.406104 0 0.841151 0.313021 0.412557 0 0.869067 0.313085 0.406064 0 0.121555 0.327057 0.407654 0 0.121555 0.327057 0.407654 0 0.121555 0.327057 0.407654 0 0.127404 0.327736 0.411008 0 0.137959 0.327779 0.413849 0 0.157645 0.325487 0.410568 0 0.166689 0.325617 0.41499 0 0.17966 0.325911 0.416103 0 0.211274 0.324056 0.420399 0 0.23026 0.326029 0.433521 0 0.254353 0.323151 0.430479 0 0.280189 0.324329 0.419235 0 0.300933 0.325939 0.421405 0 0.317194 0.325617 0.431036 0 0.331525 0.325094 0.438568 0 0.346804 0.324544 0.445121 0 0.358004 0.324234 0.448378 0 0.372275 0.324414 0.447772 0 0.385236 0.324757 0.444038 0 0.402362 0.324988 0.443011 0 0.419418 0.324338 0.446339 0 0.442527 0.322695 0.446597 0 0.461166 0.322166 0.446648 0 0.483038 0.320724 0.448783 0 0.502072 0.321515 0.445026 0 0.513195 0.326355 0.441002 0 0.539453 0.330083 0.434067 0 0.589637 0.325204 0.437287 0 0.654582 0.332474 0.424955 0 0.739981 0.326492 0.408013 0 0.843088 0.326831 0.416784 0 0.869939 0.329519 0.407019 0 0.121179 0.342646 0.406019 0 0.121179 0.342646 0.406019 0 0.121179 0.342646 0.406019 0 0.128245 0.343045 0.410445 0 0.137139 0.344979 0.414776 0 0.156409 0.343553 0.411439 0 0.168562 0.343209 0.414083 0 0.179713 0.344458 0.41691 0 0.213565 0.341979 0.418267 0 0.230884 0.344243 0.434926 0 0.253021 0.342212 0.430502 0 0.283429 0.341392 0.413571 0 0.301132 0.343545 0.421116 0 0.316988 0.343569 0.430557 0 0.331212 0.343442 0.43807 0 0.346362 0.343319 0.444661 0 0.358183 0.343179 0.448296 0 0.372932 0.343533 0.447294 0 0.385887 0.343944 0.444415 0 0.40271 0.344414 0.442915 0 0.418223 0.344672 0.445465 0 0.441051 0.343288 0.44519 0 0.461708 0.342195 0.445688 0 0.479926 0.342114 0.447181 0 0.505852 0.341241 0.444348 0 0.517419 0.345172 0.441583 0 0.548082 0.345726 0.441128 0 0.593073 0.346187 0.436054 0 0.657893 0.350271 0.427083 0 0.741659 0.342673 0.409909 0 0.846302 0.344837 0.422143 0 0.871944 0.348256 0.409087 0 0.121082 0.355979 0.403678 0 0.121082 0.355979 0.403678 0 0.121082 0.355979 0.403678 0 0.128577 0.356614 0.408441 0 0.138883 0.358651 0.414013 0 0.15388 0.358936 0.413929 0 0.166984 0.358002 0.41615 0 0.180653 0.35766 0.416693 0 0.215351 0.355477 0.416386 0 0.233035 0.357211 0.432907 0 0.252058 0.357153 0.430636 0 0.284279 0.355345 0.411594 0 0.301742 0.35773 0.420659 0 0.317011 0.35844 0.430214 0 0.331181 0.358609 0.43774 0 0.346246 0.35856 0.444331 0 0.358007 0.358382 0.448117 0 0.373365 0.358346 0.447041 0 0.386442 0.358686 0.444401 0 0.402817 0.359219 0.443046 0 0.41841 0.359463 0.445402 0 0.439665 0.359499 0.444244 0 0.461361 0.358565 0.444945 0 0.47965 0.359036 0.446552 0 0.508251 0.356857 0.444229 0 0.520935 0.360542 0.440718 0 0.553267 0.358204 0.445762 0 0.596765 0.358997 0.438871 0 0.639237 0.369908 0.414099 0 0.74331 0.355077 0.411147 0 0.845669 0.359454 0.423261 0 0.87392 0.361469 0.412947 0 0.120898 0.372687 0.40149 0 0.120898 0.372687 0.40149 0 0.120898 0.372687 0.40149 0 0.129489 0.372803 0.40581 0 0.139795 0.374064 0.412008 0 0.151547 0.375031 0.41665 0 0.163557 0.374004 0.418712 0 0.181622 0.372337 0.416111 0 0.213605 0.371908 0.418784 0 0.235844 0.372694 0.430248 0 0.251053 0.374478 0.43078 0 0.284788 0.371008 0.410535 0 0.302771 0.373785 0.420049 0 0.317408 0.374729 0.429684 0 0.331182 0.375097 0.437466 0 0.346116 0.375063 0.444001 0 0.357733 0.374955 0.447825 0 0.37356 0.374967 0.447295 0 0.387154 0.375461 0.4443 0 0.403573 0.37653 0.443356 0 0.419046 0.37713 0.44551 0 0.439315 0.377538 0.444475 0 0.460659 0.377165 0.443963 0 0.480313 0.376743 0.446068 0 0.507149 0.375048 0.443853 0 0.524346 0.376149 0.439727 0 0.54655 0.376621 0.441763 0 0.599967 0.370622 0.443275 0 0.644273 0.383202 0.411325 0 0.745384 0.370135 0.41282 0 0.841612 0.377734 0.420671 0 0.875829 0.376796 0.417287 0 0.12155 0.384489 0.400783 0 0.12155 0.384489 0.400783 0 0.12155 0.384489 0.400783 0 0.129632 0.385028 0.403822 0 0.140256 0.386259 0.409777 0 0.151717 0.387572 0.415979 0 0.161013 0.387669 0.421311 0 0.180852 0.385656 0.417286 0 0.21124 0.385953 0.421157 0 0.236492 0.386263 0.430337 0 0.251172 0.388412 0.431223 0 0.28394 0.385067 0.410404 0 0.30356 0.386756 0.419557 0 0.317811 0.387834 0.429016 0 0.331401 0.388845 0.437236 0 0.346227 0.389332 0.443849 0 0.357855 0.3896 0.447682 0 0.373872 0.389665 0.447704 0 0.387874 0.390029 0.44427 0 0.404303 0.391092 0.44363 0 0.419438 0.391721 0.44552 0 0.43912 0.392057 0.444607 0 0.460208 0.390738 0.443734 0 0.480362 0.389302 0.445578 0 0.504927 0.387462 0.442968 0 0.52641 0.387497 0.439513 0 0.540997 0.390698 0.438625 0 0.601006 0.380568 0.446503 0 0.647164 0.395098 0.409917 0 0.746349 0.383439 0.412548 0 0.839214 0.392382 0.418542 0 0.876276 0.389793 0.418836 0 0.122415 0.398585 0.399787 0 0.122415 0.398585 0.399787 0 0.122415 0.398585 0.399787 0 0.130414 0.399292 0.402985 0 0.141942 0.401631 0.405908 0 0.153591 0.403738 0.412153 0 0.162207 0.403854 0.418836 0 0.178498 0.403286 0.419798 0 0.208836 0.403285 0.423397 0 0.235737 0.403022 0.432257 0 0.252199 0.404069 0.43097 0 0.282851 0.402222 0.410506 0 0.3049 0.402738 0.419027 0 0.319024 0.404572 0.428568 0 0.332295 0.405779 0.436718 0 0.346526 0.406931 0.443733 0 0.358086 0.407186 0.447593 0 0.373622 0.407212 0.448266 0 0.388403 0.407158 0.444631 0 0.404986 0.407053 0.443732 0 0.418938 0.406884 0.445527 0 0.438352 0.405909 0.444624 0 0.459133 0.404556 0.44368 0 0.479528 0.403396 0.444846 0 0.501826 0.403076 0.44192 0 0.52906 0.40182 0.439294 0 0.541366 0.406996 0.43696 0 0.59883 0.398593 0.446137 0 0.64478 0.411178 0.41233 0 0.747084 0.400554 0.411415 0 0.835335 0.410925 0.415162 0 0.876937 0.410265 0.418898 0 0.12521 0.412459 0.397579 0 0.12521 0.412459 0.397579 0 0.12521 0.412459 0.397579 0 0.132058 0.414482 0.402031 0 0.145088 0.416754 0.403229 0 0.155631 0.420102 0.408453 0 0.163471 0.420405 0.41472 0 0.176116 0.420645 0.42101 0 0.208935 0.41921 0.422457 0 0.235336 0.420068 0.435006 0 0.253684 0.420612 0.430898 0 0.278605 0.42063 0.416328 0 0.305782 0.419296 0.418216 0 0.320439 0.421012 0.428054 0 0.333112 0.4226 0.436185 0 0.34667 0.423272 0.443511 0 0.357914 0.422901 0.447347 0 0.3729 0.422283 0.448344 0 0.387996 0.421566 0.444853 0 0.404932 0.421084 0.44348 0 0.418594 0.421108 0.445456 2169.04 0.437642 0.420337 0.444276 1976.99 0.457903 0.419487 0.443462 0 0.479329 0.419554 0.444795 0 0.502013 0.421011 0.441402 0 0.532396 0.4197 0.439271 0 0.545213 0.424222 0.436152 0 0.595504 0.418424 0.444808 0 0.643141 0.428219 0.416256 0 0.730077 0.426511 0.400766 0 0.833596 0.441669 0.410251 0 0.872616 0.426569 0.416165 0 0.130805 0.429807 0.394546 0 0.130805 0.429807 0.394546 0 0.130805 0.429807 0.394546 0 0.136749 0.432338 0.398863 0 0.147768 0.435552 0.401704 0 0.15898 0.438706 0.405025 0 0.165451 0.440147 0.409941 0 0.176801 0.440997 0.41628 0 0.211161 0.438781 0.420999 0 0.236674 0.439841 0.435695 0 0.255362 0.44035 0.431612 0 0.271445 0.442133 0.426175 0 0.306394 0.437979 0.417013 0 0.32181 0.438134 0.427204 0 0.33345 0.43918 0.434975 0 0.3468 0.439947 0.442462 0 0.357276 0.440161 0.446772 0 0.371834 0.439471 0.448107 0 0.386853 0.438756 0.444778 0 0.40478 0.438548 0.443145 0 0.418888 0.439264 0.44524 1977.12 0.437434 0.439986 0.444409 10946.3 0.457866 0.44039 0.443177 1742.53 0.47982 0.440359 0.445121 0 0.503463 0.441274 0.441731 0 0.531275 0.440114 0.439266 0 0.549075 0.44261 0.435451 0 0.58628 0.442251 0.441551 0 0.643713 0.44721 0.4166 0 0.709196 0.45354 0.3881 0 0.826286 0.45403 0.40534 0 0.860469 0.442055 0.408072 0 0.129932 0.448566 0.399942 0 0.129932 0.448566 0.399942 0 0.129932 0.448566 0.399942 0 0.141787 0.448662 0.396144 0 0.150282 0.453208 0.401273 0 0.16172 0.456273 0.403895 0 0.1683 0.457904 0.40842 0 0.177412 0.460074 0.413748 0 0.210841 0.458618 0.421931 0 0.237521 0.457227 0.434929 0 0.256019 0.457536 0.432726 0 0.268677 0.458819 0.432138 0 0.304276 0.455638 0.416206 0 0.322603 0.453927 0.42644 0 0.334371 0.454692 0.433934 0 0.346965 0.456421 0.441419 0 0.357035 0.457601 0.44608 0 0.371409 0.45768 0.448048 0 0.386505 0.457471 0.444896 0 0.405125 0.457426 0.443626 0 0.420047 0.458264 0.445424 0 0.437537 0.459424 0.445137 1742.79 0.458232 0.45948 0.443285 1644.97 0.479837 0.459476 0.445369 0 0.504984 0.459876 0.442565 0 0.528823 0.461061 0.438289 0 0.552695 0.461311 0.435438 0 0.579502 0.463834 0.437982 0 0.653628 0.461937 0.420784 0 0.701466 0.486318 0.379785 0 0.823936 0.461315 0.405894 0 0.847288 0.454741 0.399459 0 0.125056 0.473525 0.404424 0 0.125056 0.473525 0.404424 0 0.125056 0.473525 0.404424 0 0.140815 0.470338 0.40075 0 0.154497 0.472307 0.400204 0 0.164667 0.475908 0.403607 0 0.171329 0.477054 0.406921 0 0.180226 0.478412 0.412237 0 0.207988 0.479231 0.422449 0 0.234953 0.47629 0.43589 0 0.256799 0.475538 0.43366 0 0.27287 0.475667 0.428544 0 0.302793 0.475685 0.415863 0 0.32142 0.47457 0.42627 0 0.335671 0.474267 0.433575 0 0.348178 0.476099 0.44033 0 0.357821 0.477659 0.445226 0 0.371141 0.478728 0.448087 0 0.386418 0.478927 0.445105 0 0.405736 0.479283 0.444389 0 0.421164 0.480044 0.445798 0 0.438748 0.481317 0.445506 0 0.458791 0.481826 0.443522 0 0.479457 0.481964 0.445057 0 0.505598 0.481591 0.443015 0 0.527312 0.483269 0.438702 0 0.55674 0.481905 0.435274 0 0.573028 0.487042 0.434126 0 0.660795 0.478852 0.423213 0 0.705157 0.502407 0.381435 0 0.81928 0.465295 0.407454 0 0.837391 0.461157 0.395857 0 0.119397 0.501672 0.404767 0 0.119397 0.501672 0.404767 0 0.119397 0.501672 0.404767 0 0.132894 0.497592 0.407934 0 0.157533 0.492293 0.39726 0 0.167306 0.494958 0.403928 0 0.174141 0.496137 0.407045 0 0.182773 0.497452 0.410763 0 0.206138 0.502198 0.421989 0 0.231929 0.501188 0.438236 0 0.258471 0.498567 0.433978 0 0.275817 0.499031 0.42905 0 0.302578 0.500935 0.416554 0 0.31946 0.500801 0.425533 0 0.336044 0.499457 0.434047 0 0.350067 0.500027 0.439035 0 0.359583 0.502394 0.444281 0 0.373158 0.504592 0.446054 0 0.386949 0.50554 0.444949 0 0.406268 0.506102 0.444335 0 0.42222 0.506418 0.446326 0 0.440285 0.506971 0.445414 0 0.458803 0.507689 0.443788 0 0.479156 0.507708 0.444261 0 0.50523 0.506879 0.442577 0 0.528588 0.506725 0.43915 0 0.556885 0.505379 0.435297 0 0.577102 0.50925 0.4328 0 0.664395 0.507692 0.424522 0 0.705812 0.515018 0.387733 0 0.813046 0.469959 0.408743 0 0.834284 0.465521 0.397888 0 0.115611 0.526642 0.401949 0 0.115611 0.526642 0.401949 0 0.115611 0.526642 0.401949 0 0.126558 0.524869 0.408688 0 0.153115 0.51881 0.400835 0 0.169677 0.51737 0.40121 0 0.178311 0.518502 0.407913 0 0.186739 0.520992 0.412429 0 0.208467 0.528101 0.420883 0 0.231386 0.530231 0.437301 0 0.255911 0.527482 0.434991 0 0.27334 0.52684 0.437364 0 0.303001 0.528742 0.417564 0 0.318935 0.529675 0.426135 0 0.334603 0.529731 0.433749 0 0.351356 0.529026 0.439419 0 0.364988 0.529538 0.437961 0 0.37708 0.53188 0.441536 0 0.388359 0.533319 0.443024 0 0.406244 0.534064 0.443544 0 0.422697 0.534192 0.445983 0 0.441012 0.533991 0.44528 0 0.459112 0.534194 0.44332 0 0.478473 0.53378 0.443558 0 0.503274 0.53068 0.441157 0 0.529297 0.52939 0.437884 0 0.554319 0.529737 0.433032 0 0.583531 0.53417 0.430346 0 0.662556 0.529768 0.425636 0 0.703076 0.518864 0.391431 0 0.811409 0.482726 0.411942 0 0.835563 0.472836 0.405805 0 0.112789 0.553512 0.39969 0 0.112789 0.553512 0.39969 0 0.112789 0.553512 0.39969 0 0.122717 0.55392 0.405809 0 0.146222 0.551391 0.412223 0 0.171234 0.546048 0.39801 0 0.180267 0.546784 0.403807 0 0.191014 0.54794 0.411961 0 0.213612 0.554924 0.418288 0 0.232932 0.558542 0.434992 0 0.248288 0.560539 0.44126 0 0.273962 0.556643 0.437055 0 0.30646 0.557246 0.4179 0 0.319708 0.55955 0.426569 0 0.333678 0.560473 0.434182 0 0.351465 0.559133 0.439441 0 0.366457 0.558416 0.435728 0 0.380913 0.559043 0.435334 0 0.390364 0.559104 0.439124 0 0.405173 0.557668 0.441881 0 0.420468 0.555439 0.444289 0 0.438679 0.553309 0.444547 0 0.458293 0.553151 0.441581 0 0.476696 0.553378 0.441837 0 0.50339 0.557221 0.438652 0 0.531248 0.559741 0.437867 0 0.555012 0.56108 0.435742 0 0.587127 0.5555 0.436327 0 0.634029 0.539361 0.420023 0 0.702523 0.521141 0.392726 0 0.808124 0.485289 0.416315 0 0.855858 0.541032 0.410908 0 0.103962 0.586992 0.412948 0 0.103962 0.586992 0.412948 0 0.103962 0.586992 0.412948 0 0.120001 0.585621 0.403522 0 0.141286 0.585367 0.413871 0 0.168665 0.581881 0.405222 0 0.179502 0.579999 0.403451 0 0.194954 0.578253 0.404689 0 0.220359 0.582321 0.413999 0 0.237531 0.587225 0.429304 0 0.252093 0.58982 0.436632 0 0.270583 0.588377 0.434595 0 0.307717 0.583933 0.417149 0 0.320441 0.582274 0.425776 0 0.332901 0.580689 0.433333 0 0.347486 0.578323 0.439399 0 0.362802 0.575445 0.437921 0 0.380439 0.573894 0.43053 0 0.390244 0.573069 0.434294 0 0.404051 0.571859 0.439752 0 0.418546 0.56997 0.443741 0 0.437163 0.568426 0.445434 0 0.457342 0.56974 0.444673 0 0.476738 0.57212 0.446034 0 0.502034 0.572909 0.445021 0 0.530157 0.575801 0.443521 0 0.554471 0.575996 0.440755 0 0.590397 0.574775 0.439554 0 0.625045 0.555832 0.418596 0 0.70318 0.524617 0.390521 0 0.8269 0.558902 0.405935 0 0.856396 0.553363 0.400968 0 -0.0184651 0.657213 0.599193 0 -0.0184651 0.657213 0.599193 0 -0.0184651 0.657213 0.599193 0 0.0026553 0.655142 0.583655 0 0.0924663 0.647958 0.470964 0 0.146041 0.638527 0.413731 0 0.161524 0.635694 0.410188 0 0.174291 0.633733 0.413034 0 0.220943 0.62814 0.407486 0 0.243986 0.646423 0.422369 0 0.263525 0.657047 0.433344 0 0.278328 0.673302 0.439974 0 0.309249 0.674058 0.418157 0 0.323692 0.671464 0.427143 0 0.332796 0.668534 0.433118 0 0.34418 0.664182 0.438173 0 0.355889 0.659196 0.441197 0 0.36779 0.654723 0.445941 0 0.387148 0.649097 0.437731 0 0.404507 0.64402 0.43438 0 0.420517 0.645787 0.436837 0 0.435865 0.648856 0.442234 0 0.456081 0.649673 0.444542 0 0.474118 0.644973 0.444453 0 0.492256 0.640643 0.441234 0 0.512148 0.63612 0.436015 0 0.533775 0.631207 0.430098 0 0.559783 0.624881 0.42605 0 0.621828 0.61438 0.412378 0 0.732863 0.625591 0.392154 0 0.839536 0.668468 0.42327 0 0.870975 0.675935 0.41587 0 -0.200396 0.765242 0.859432 0 -0.200396 0.765242 0.859432 0 -0.200396 0.765242 0.859432 0 -0.179777 0.761925 0.844244 0 -0.109201 0.753718 0.770497 0 0.0308988 0.745108 0.571351 0 0.100013 0.739601 0.483419 0 0.130196 0.7358 0.455569 0 0.193362 0.726214 0.406786 0 0.230047 0.720541 0.411025 0 0.246815 0.718439 0.416647 0 0.281666 0.726534 0.401627 0 0.310825 0.772985 0.415496 0 0.324894 0.776444 0.424528 0 0.337226 0.775286 0.432457 0 0.350606 0.765483 0.440451 0 0.357272 0.761528 0.44277 0 0.364245 0.756939 0.443578 0 0.369004 0.754422 0.444681 0 0.386767 0.739558 0.430512 0 0.397841 0.732085 0.431644 0 0.417118 0.712928 0.425607 0 0.440674 0.717485 0.422411 0 0.46753 0.748402 0.4335 0 0.496271 0.765223 0.443974 0 0.523799 0.764469 0.44408 0 0.546062 0.759526 0.441722 0 0.575579 0.753114 0.442698 0 0.656963 0.754761 0.422845 0 0.696735 0.749546 0.390374 0 0.7836 0.747932 0.391652 0 0.841913 0.747599 0.404937 0 -0.361959 0.914379 1.1534 0 -0.361959 0.914379 1.1534 0 -0.361959 0.914379 1.1534 0 -0.332445 0.911919 1.12081 0 -0.18251 0.901196 0.893489 0 -0.0783275 0.891481 0.766682 0 -0.0334316 0.886815 0.72237 0 -0.000252187 0.883213 0.693966 0 0.186142 0.862659 0.439004 0 0.208659 0.852957 0.452368 0 0.226909 0.845775 0.461774 0 0.261083 0.830644 0.429559 0 0.294905 0.804846 0.405354 0 0.305298 0.802856 0.412526 0 0.322102 0.806741 0.422375 0 0.339689 0.817229 0.431403 0 0.350948 0.817334 0.436826 0 0.364567 0.817576 0.442747 0 0.377014 0.823893 0.443852 0 0.398202 0.826969 0.440908 0 0.416366 0.834775 0.44428 0 0.436093 0.833814 0.444632 0 0.453117 0.831092 0.446492 0 0.475876 0.825113 0.440786 0 0.501967 0.81824 0.435605 0 0.52156 0.816097 0.444487 0 0.54151 0.811017 0.441563 0 0.562449 0.805284 0.436506 0 0.651053 0.820463 0.425295 0 0.700598 0.840453 0.387769 0 0.815452 0.855646 0.396867 0 0.823667 0.856448 0.391898 0 -0.438579 0.947276 1.25228 0 -0.438579 0.947276 1.25228 0 -0.438579 0.947276 1.25228 0 -0.412815 0.943882 1.22168 0 -0.335883 0.934079 1.11361 0 -0.218194 0.920754 0.939498 0 -0.121111 0.912627 0.796829 0 -0.0874296 0.906959 0.766216 0 0.074211 0.888048 0.573461 0 0.142501 0.877068 0.508548 0 0.184356 0.87549 0.473757 0 0.227496 0.86917 0.454729 0 0.298519 0.858759 0.402942 0 0.325054 0.874767 0.404918 0 0.34449 0.877151 0.408492 0 0.359045 0.881773 0.414124 0 0.370012 0.889662 0.417809 0 0.386746 0.895325 0.421951 0 0.397652 0.896069 0.426376 0 0.408192 0.898085 0.431152 0 0.420331 0.900184 0.434888 0 0.434917 0.90159 0.437875 0 0.45421 0.89872 0.440921 0 0.474885 0.892712 0.442045 0 0.493158 0.888987 0.438313 0 0.518885 0.882659 0.427047 0 0.540171 0.889867 0.433052 0 0.572469 0.894302 0.434143 0 0.661036 0.899778 0.420696 0 0.712059 0.893094 0.390177 0 0.818328 0.90083 0.406865 0 0.835212 0.89616 0.39335 0 0.129484 0.0987565 0.418229 0 0.129484 0.0987565 0.418229 0 0.129484 0.0987565 0.418229 0 0.134208 0.0998161 0.421031 0 0.147505 0.101075 0.427401 0 0.167387 0.0985675 0.425301 0 0.17791 0.0969883 0.422719 0 0.186008 0.09648 0.426989 0 0.209812 0.0938274 0.436285 0 0.237144 0.0929313 0.447836 0 0.254182 0.0919656 0.458234 0 0.274283 0.0911753 0.459994 0 0.298588 0.0912378 0.461415 0 0.330939 0.0905354 0.445655 0 0.337912 0.0953627 0.448555 0 0.348554 0.0982948 0.453486 0 0.362433 0.0964823 0.46048 0 0.376267 0.0958156 0.466722 0 0.387703 0.0954896 0.470948 0 0.411748 0.0940207 0.472072 0 0.425101 0.0970376 0.47241 0 0.43391 0.10061 0.469571 0 0.450514 0.100172 0.470736 0 0.474057 0.099263 0.465577 0 0.496996 0.0973445 0.462247 0 0.509122 0.10073 0.452083 0 0.546027 0.0965314 0.450674 0 0.555553 0.101944 0.441197 0 0.652677 0.108236 0.438358 0 0.709246 0.111438 0.401547 0 0.843047 0.0990478 0.437235 0 0.86574 0.0984357 0.428823 0 0.129484 0.0987565 0.418229 0 0.129484 0.0987565 0.418229 0 0.129484 0.0987565 0.418229 0 0.134208 0.0998161 0.421031 0 0.147505 0.101075 0.427401 0 0.167387 0.0985675 0.425301 0 0.17791 0.0969883 0.422719 0 0.186008 0.09648 0.426989 0 0.209812 0.0938274 0.436285 0 0.237144 0.0929313 0.447836 0 0.254182 0.0919656 0.458234 0 0.274283 0.0911753 0.459994 0 0.298588 0.0912378 0.461415 0 0.330939 0.0905354 0.445655 0 0.337912 0.0953627 0.448555 0 0.348554 0.0982948 0.453486 0 0.362433 0.0964823 0.46048 0 0.376267 0.0958156 0.466722 0 0.387703 0.0954896 0.470948 0 0.411748 0.0940207 0.472072 0 0.425101 0.0970376 0.47241 0 0.43391 0.10061 0.469571 0 0.450514 0.100172 0.470736 0 0.474057 0.099263 0.465577 0 0.496996 0.0973445 0.462247 0 0.509122 0.10073 0.452083 0 0.546027 0.0965314 0.450674 0 0.555553 0.101944 0.441197 0 0.652677 0.108236 0.438358 0 0.709246 0.111438 0.401547 0 0.843047 0.0990478 0.437235 0 0.86574 0.0984357 0.428823 0 0.129484 0.0987565 0.418229 0 0.129484 0.0987565 0.418229 0 0.129484 0.0987565 0.418229 0 0.134208 0.0998161 0.421031 0 0.147505 0.101075 0.427401 0 0.167387 0.0985675 0.425301 0 0.17791 0.0969883 0.422719 0 0.186008 0.09648 0.426989 0 0.209812 0.0938274 0.436285 0 0.237144 0.0929313 0.447836 0 0.254182 0.0919656 0.458234 0 0.274283 0.0911753 0.459994 0 0.298588 0.0912378 0.461415 0 0.330939 0.0905354 0.445655 0 0.337912 0.0953627 0.448555 0 0.348554 0.0982948 0.453486 0 0.362433 0.0964824 0.46048 0 0.376267 0.0958156 0.466722 0 0.387703 0.0954896 0.470948 0 0.411747 0.0940208 0.472072 0 0.425101 0.0970376 0.47241 0 0.43391 0.10061 0.469571 0 0.450514 0.100172 0.470736 0 0.474057 0.099263 0.465577 0 0.496996 0.0973445 0.462247 0 0.509122 0.10073 0.452083 0 0.546027 0.0965314 0.450674 0 0.555553 0.101944 0.441197 0 0.652677 0.108236 0.438358 0 0.709246 0.111438 0.401547 0 0.843047 0.0990478 0.437235 0 0.86574 0.0984357 0.428823 0 0.130621 0.109475 0.418411 0 0.130621 0.109475 0.418411 0 0.130621 0.109475 0.418411 0 0.135326 0.110337 0.421344 0 0.147087 0.109421 0.427549 0 0.164928 0.105837 0.426085 0 0.176967 0.103433 0.421434 0 0.185172 0.102652 0.425394 0 0.21008 0.102655 0.436249 0 0.236826 0.102839 0.447187 0 0.253717 0.101843 0.457462 0 0.273985 0.10119 0.459473 0 0.298357 0.101299 0.461055 0 0.330138 0.0997278 0.444938 0 0.340567 0.102071 0.450567 0 0.3481 0.107235 0.453111 0 0.361453 0.106227 0.459587 0 0.376222 0.105516 0.466256 0 0.387282 0.106236 0.470234 0 0.413714 0.104025 0.469955 0 0.426661 0.104072 0.473396 0 0.435146 0.106839 0.470202 0 0.450322 0.106828 0.471325 0 0.473631 0.105627 0.466449 0 0.49893 0.103853 0.462387 0 0.509799 0.107539 0.453355 0 0.545801 0.103915 0.449054 0 0.558585 0.109154 0.443579 0 0.653044 0.116763 0.438394 0 0.710334 0.117739 0.403275 0 0.842036 0.107709 0.436454 0 0.865562 0.106733 0.428981 0 0.129666 0.122562 0.417326 0 0.129666 0.122562 0.417326 0 0.129666 0.122562 0.417326 0 0.13483 0.121636 0.420421 0 0.145264 0.121167 0.426765 0 0.16062 0.119218 0.426907 0 0.173931 0.117216 0.421754 0 0.184623 0.116007 0.422694 0 0.211611 0.11922 0.43588 0 0.236753 0.122221 0.446316 0 0.253281 0.121247 0.456463 0 0.272832 0.119952 0.459174 0 0.297553 0.118667 0.460365 0 0.328656 0.117343 0.443506 0 0.345487 0.116256 0.454044 0 0.354261 0.122391 0.457366 0 0.360916 0.126038 0.458756 0 0.375142 0.125768 0.46475 0 0.386876 0.125526 0.468942 0 0.410008 0.12234 0.467634 0 0.425898 0.120108 0.469395 0 0.437557 0.119257 0.471514 0 0.448744 0.120149 0.471673 0 0.473006 0.11853 0.46837 0 0.501032 0.117878 0.465142 0 0.511886 0.123254 0.455824 0 0.546676 0.123352 0.445963 0 0.5648 0.126614 0.44664 0 0.655559 0.131515 0.439604 0 0.712329 0.134951 0.402802 0 0.838181 0.126332 0.433306 0 0.863443 0.12417 0.42826 0 0.126682 0.138871 0.415524 0 0.126682 0.138871 0.415524 0 0.126682 0.138871 0.415524 0 0.133135 0.137376 0.418746 0 0.144466 0.136335 0.425429 0 0.159124 0.136967 0.427966 0 0.172021 0.137337 0.423373 0 0.185623 0.137335 0.421973 0 0.213919 0.139596 0.435442 0 0.23651 0.141697 0.445909 0 0.25214 0.14121 0.45534 0 0.271245 0.140089 0.458373 0 0.297135 0.139349 0.459673 0 0.328413 0.139861 0.442395 0 0.344113 0.139148 0.452264 0 0.361116 0.13877 0.461949 0 0.367555 0.14242 0.463338 0 0.37443 0.144523 0.464025 0 0.384087 0.143636 0.466474 0 0.40358 0.141268 0.465841 0 0.426467 0.136994 0.465429 0 0.437891 0.136467 0.468795 0 0.448273 0.137511 0.472337 0 0.4736 0.136659 0.471182 0 0.501542 0.138055 0.468205 0 0.517767 0.145798 0.457078 0 0.539512 0.150486 0.443007 0 0.565923 0.149182 0.443977 0 0.65837 0.148907 0.440861 0 0.714887 0.155607 0.40221 0 0.82912 0.147326 0.426458 0 0.861222 0.140411 0.428144 0 0.124366 0.150787 0.414594 0 0.124366 0.150787 0.414594 0 0.124366 0.150787 0.414594 0 0.130904 0.149319 0.417984 0 0.145172 0.148669 0.425215 0 0.159927 0.15151 0.429478 0 0.171716 0.151036 0.425384 0 0.185165 0.149992 0.4226 0 0.214546 0.150766 0.434933 0 0.236599 0.15287 0.445891 0 0.25143 0.152717 0.454556 0 0.270532 0.151658 0.457623 0 0.297168 0.151672 0.459329 0 0.328619 0.152067 0.442006 0 0.343606 0.151502 0.451434 0 0.361482 0.149172 0.462017 0 0.369994 0.149372 0.465343 0 0.376898 0.151965 0.466169 0 0.383025 0.154139 0.465718 0 0.402647 0.152012 0.464122 0 0.424005 0.148544 0.46425 0 0.43762 0.147898 0.467019 0 0.449609 0.148211 0.472229 0 0.473713 0.148404 0.472147 0 0.502602 0.14949 0.469542 0 0.520322 0.155994 0.458952 0 0.538821 0.160736 0.445299 0 0.56593 0.158799 0.442707 0 0.661584 0.157114 0.442518 0 0.715365 0.162307 0.402802 0 0.828857 0.154098 0.42632 0 0.858821 0.14808 0.426487 0 0.123946 0.160698 0.414144 0 0.123946 0.160698 0.414144 0 0.123946 0.160698 0.414144 0 0.130099 0.160691 0.417852 0 0.145654 0.159113 0.425498 0 0.160046 0.160736 0.430292 0 0.17138 0.16043 0.427344 0 0.184707 0.159528 0.423062 0 0.214913 0.159381 0.434208 0 0.236701 0.161759 0.445737 0 0.251258 0.161927 0.454119 0 0.270357 0.161635 0.457134 0 0.297154 0.161677 0.459107 0 0.328561 0.16157 0.441643 0 0.342916 0.161365 0.450717 0 0.359611 0.158287 0.460658 0 0.372137 0.155913 0.467034 0 0.379034 0.158604 0.467936 0 0.385077 0.160793 0.467555 0 0.401886 0.161437 0.462688 0 0.422622 0.159817 0.463478 0 0.437802 0.159597 0.465497 0 0.450464 0.159745 0.470773 0 0.473725 0.158761 0.472999 0 0.503142 0.159203 0.470503 0 0.522201 0.16402 0.460662 0 0.538049 0.16997 0.447483 0 0.565895 0.167783 0.441422 0 0.66546 0.164952 0.444626 0 0.715812 0.168201 0.404286 0 0.829691 0.165268 0.425496 0 0.856364 0.161726 0.423039 0 0.124917 0.191244 0.414155 0 0.124917 0.191244 0.414155 0 0.124917 0.191244 0.414155 0 0.129883 0.191402 0.417217 0 0.14168 0.191021 0.424505 0 0.162615 0.189179 0.429103 0 0.171118 0.190524 0.431188 0 0.183849 0.190785 0.42503 0 0.216916 0.188909 0.430443 0 0.241356 0.193304 0.442042 0 0.255035 0.195154 0.451886 0 0.271108 0.196943 0.456327 0 0.296132 0.196313 0.458259 0 0.327263 0.194681 0.44001 0 0.340294 0.193802 0.448425 0 0.354647 0.192534 0.456832 0 0.366556 0.190985 0.462678 0 0.381874 0.1894 0.469881 0 0.394088 0.188578 0.474404 0 0.407466 0.19352 0.468593 0 0.419442 0.198042 0.46047 0 0.439038 0.196171 0.46259 0 0.452722 0.196405 0.463993 0 0.466927 0.196728 0.466208 0 0.502331 0.190797 0.473729 0 0.529 0.192511 0.466353 0 0.542589 0.2005 0.454496 0 0.56354 0.202281 0.435603 0 0.673605 0.18966 0.45225 0 0.721283 0.20491 0.409326 0 0.833964 0.204917 0.424119 0 0.853261 0.206197 0.415078 0 0.125582 0.227314 0.413871 0 0.125582 0.227314 0.413871 0 0.125582 0.227314 0.413871 0 0.13138 0.227211 0.417355 0 0.141606 0.22823 0.423577 0 0.161222 0.227339 0.430641 0 0.175832 0.226319 0.427764 0 0.186008 0.228617 0.428276 0 0.21553 0.230264 0.432725 0 0.249723 0.231669 0.434788 0 0.260589 0.232174 0.445411 0 0.273756 0.23254 0.452165 0 0.294273 0.232886 0.45674 0 0.326188 0.231931 0.438028 0 0.339197 0.231348 0.446317 0 0.352885 0.230672 0.454512 0 0.363122 0.230026 0.459657 0 0.376707 0.228603 0.465591 0 0.389845 0.22738 0.47059 0 0.410937 0.225308 0.474097 0 0.427862 0.225075 0.471568 0 0.44002 0.227248 0.465828 0 0.455627 0.22817 0.460827 0 0.468862 0.228915 0.460597 0 0.489702 0.227379 0.467773 0 0.535249 0.218903 0.471124 0 0.546647 0.227514 0.462785 0 0.564956 0.234507 0.44511 0 0.669352 0.231221 0.450279 0 0.724684 0.232517 0.417988 0 0.83976 0.2332 0.430552 0 0.85725 0.240499 0.41532 0 0.124959 0.2473 0.413101 0 0.124959 0.2473 0.413101 0 0.124959 0.2473 0.413101 0 0.130959 0.246793 0.416814 0 0.14252 0.246465 0.423453 0 0.15939 0.248085 0.431367 0 0.175729 0.246811 0.430873 0 0.189215 0.248341 0.42704 0 0.215336 0.25184 0.433875 0 0.250523 0.247904 0.433498 0 0.262782 0.248322 0.441825 0 0.274686 0.24862 0.449364 0 0.293731 0.247759 0.456534 0 0.32576 0.244728 0.438063 0 0.338151 0.24451 0.445613 0 0.352079 0.24374 0.453908 0 0.361821 0.24341 0.458923 0 0.37482 0.242171 0.464696 0 0.387694 0.240527 0.469502 0 0.408517 0.238338 0.474489 0 0.428081 0.237139 0.473179 0 0.443342 0.237529 0.470466 0 0.458246 0.244008 0.463952 0 0.471897 0.249481 0.458166 0 0.485749 0.250982 0.462008 0 0.529127 0.24287 0.469742 0 0.550977 0.246578 0.465488 0 0.566445 0.252707 0.449771 0 0.650597 0.251773 0.442933 0 0.726248 0.246789 0.419558 0 0.843034 0.247189 0.435099 0 0.860479 0.254674 0.419417 0 0.124375 0.264778 0.412404 0 0.124375 0.264778 0.412404 0 0.124375 0.264778 0.412404 0 0.130555 0.264768 0.416218 0 0.143251 0.26479 0.424053 0 0.160167 0.266106 0.430686 0 0.17446 0.265206 0.433176 0 0.191424 0.264051 0.426916 0 0.212858 0.265014 0.434982 0 0.249052 0.258707 0.432888 0 0.262639 0.257641 0.441006 0 0.274678 0.258272 0.448722 0 0.292965 0.25836 0.456579 0 0.325179 0.256047 0.438101 0 0.338012 0.256215 0.445753 0 0.351745 0.25665 0.453509 0 0.36159 0.256951 0.458547 0 0.373818 0.25727 0.463986 0 0.386187 0.257145 0.468254 0 0.407952 0.256485 0.472593 0 0.428781 0.255982 0.471487 0 0.445033 0.256364 0.471774 0 0.461785 0.259744 0.467945 0 0.475643 0.266373 0.458192 0 0.487476 0.2688 0.458735 0 0.520244 0.263617 0.466389 0 0.554329 0.260765 0.46668 0 0.567621 0.264987 0.453082 0 0.630828 0.271305 0.431519 0 0.728324 0.261152 0.419978 0 0.841985 0.264379 0.434058 0 0.862742 0.266963 0.422918 0 0.126087 0.282425 0.41312 0 0.126087 0.282425 0.41312 0 0.126087 0.282425 0.41312 0 0.131201 0.283304 0.416259 0 0.143365 0.2838 0.423757 0 0.161331 0.282349 0.430866 0 0.172813 0.281501 0.433946 0 0.189566 0.279294 0.430839 0 0.21154 0.27959 0.436145 0 0.24565 0.276487 0.433715 0 0.262514 0.275502 0.441042 0 0.27521 0.27574 0.447677 0 0.292654 0.2804 0.455808 0 0.325433 0.282938 0.437246 0 0.339292 0.283704 0.445492 0 0.352725 0.285213 0.452877 0 0.362483 0.285574 0.457626 0 0.37397 0.285708 0.462875 0 0.384939 0.285268 0.466542 0 0.406668 0.283442 0.469214 0 0.42801 0.281973 0.469287 0 0.445265 0.280971 0.470226 0 0.463307 0.27926 0.472434 0 0.479877 0.281934 0.463918 0 0.489159 0.288999 0.455892 0 0.51067 0.288102 0.460194 0 0.560862 0.279397 0.464556 0 0.570469 0.283202 0.457636 0 0.618294 0.297162 0.424155 0 0.731409 0.286205 0.420473 0 0.838516 0.292656 0.431021 0 0.866271 0.289955 0.425126 0 0.128694 0.309805 0.414202 0 0.128694 0.309805 0.414202 0 0.128694 0.309805 0.414202 0 0.133355 0.310218 0.41707 0 0.143082 0.310665 0.423065 0 0.158484 0.30926 0.429716 0 0.170244 0.308195 0.430024 0 0.18605 0.30727 0.431773 0 0.213869 0.306741 0.433824 0 0.242203 0.306699 0.435655 0 0.26142 0.305497 0.440655 0 0.276124 0.305363 0.447861 0 0.294402 0.308264 0.455085 0 0.325855 0.308782 0.437037 0 0.33969 0.308905 0.445414 0 0.353504 0.308631 0.453242 0 0.362731 0.308689 0.457669 0 0.373535 0.308796 0.462031 0 0.383395 0.308644 0.465396 0 0.403237 0.307254 0.467401 0 0.425815 0.305185 0.467498 0 0.444826 0.303932 0.468908 0 0.459524 0.303663 0.47187 0 0.484432 0.301051 0.467871 0 0.494617 0.307279 0.462811 0 0.506721 0.314568 0.45408 0 0.55508 0.306265 0.462131 0 0.575312 0.306678 0.459536 0 0.629032 0.319177 0.431216 0 0.734226 0.312029 0.420926 0 0.837793 0.314505 0.431836 0 0.86617 0.312937 0.423579 0 0.129298 0.326376 0.413453 0 0.129298 0.326376 0.413453 0 0.129298 0.326376 0.413453 0 0.133539 0.326659 0.416273 0 0.142929 0.327092 0.422381 0 0.155612 0.32786 0.428898 0 0.168398 0.325748 0.429564 0 0.184595 0.325132 0.429563 0 0.214846 0.324134 0.434555 0 0.239001 0.325725 0.439278 0 0.257936 0.324776 0.444361 0 0.276663 0.323497 0.448564 0 0.295221 0.324463 0.454539 0 0.325588 0.325074 0.436659 0 0.339151 0.324598 0.444887 0 0.35346 0.324269 0.453004 0 0.36293 0.324377 0.457726 0 0.373992 0.324559 0.462202 0 0.38309 0.324914 0.464808 0 0.4011 0.324244 0.466605 0 0.423745 0.322632 0.465834 0 0.443871 0.321448 0.467981 0 0.459562 0.321268 0.470805 0 0.483061 0.319593 0.467586 0 0.499738 0.321016 0.46775 0 0.510632 0.329775 0.456999 0 0.544113 0.328708 0.458296 0 0.58081 0.325084 0.459347 0 0.636719 0.33558 0.436439 0 0.735261 0.328932 0.421302 0 0.838096 0.330353 0.433535 0 0.865534 0.330835 0.424169 0 0.130214 0.341458 0.412786 0 0.130214 0.341458 0.412786 0 0.130214 0.341458 0.412786 0 0.13437 0.342021 0.415568 0 0.143753 0.342998 0.421755 0 0.156208 0.345272 0.428673 0 0.167062 0.345135 0.43156 0 0.183925 0.344001 0.427664 0 0.214771 0.343056 0.436575 0 0.236854 0.344548 0.44133 0 0.254176 0.343598 0.447607 0 0.273824 0.341878 0.450397 0 0.297255 0.340619 0.451523 0 0.325289 0.343136 0.436111 0 0.338849 0.342905 0.44433 0 0.353355 0.342826 0.4526 0 0.36335 0.342957 0.457619 0 0.374589 0.343472 0.462336 0 0.383988 0.34396 0.464944 0 0.400134 0.344745 0.46572 0 0.421796 0.34344 0.464133 0 0.44301 0.342 0.466691 0 0.460186 0.341409 0.469519 0 0.480727 0.341125 0.467223 0 0.502001 0.340844 0.466109 0 0.51599 0.345809 0.463819 0 0.537116 0.352431 0.454388 0 0.588028 0.345706 0.458199 0 0.643845 0.351914 0.440738 0 0.737364 0.344947 0.42396 0 0.840978 0.348499 0.43576 0 0.866262 0.350719 0.426459 0 0.130729 0.354571 0.412186 0 0.130729 0.354571 0.412186 0 0.130729 0.354571 0.412186 0 0.135523 0.355055 0.41524 0 0.144845 0.356728 0.421367 0 0.157223 0.358985 0.428472 0 0.165766 0.359795 0.432859 0 0.182576 0.357861 0.429673 0 0.214574 0.356632 0.437616 0 0.238882 0.35754 0.439373 0 0.252967 0.35796 0.448014 0 0.270407 0.356947 0.452906 0 0.301383 0.354335 0.445259 0 0.325305 0.35817 0.435839 0 0.338844 0.358203 0.443966 0 0.353288 0.358088 0.452236 0 0.363479 0.358072 0.457411 0 0.374989 0.358378 0.462329 0 0.384597 0.358704 0.465152 0 0.400355 0.359529 0.465695 0 0.420205 0.359507 0.463137 0 0.442223 0.35818 0.465585 0 0.460444 0.357825 0.468702 0 0.479538 0.358282 0.466896 0 0.504978 0.356364 0.465523 0 0.519629 0.358971 0.467486 0 0.543323 0.364255 0.460022 0 0.593211 0.359825 0.456954 0 0.648985 0.363677 0.443723 0 0.739072 0.357492 0.425969 0 0.843633 0.360963 0.438061 0 0.867432 0.365415 0.42876 0 0.13075 0.371162 0.411198 0 0.13075 0.371162 0.411198 0 0.13075 0.371162 0.411198 0 0.135949 0.370942 0.414554 0 0.145735 0.371168 0.420744 0 0.157717 0.372866 0.427803 0 0.166889 0.373777 0.431624 0 0.180489 0.373788 0.433319 0 0.215059 0.372392 0.436663 0 0.241563 0.373147 0.436829 0 0.254237 0.374181 0.445419 0 0.268729 0.374279 0.453372 0 0.298927 0.371513 0.450075 0 0.325633 0.374431 0.435479 0 0.338759 0.374749 0.443563 0 0.353127 0.374634 0.451815 0 0.363531 0.374708 0.457173 0 0.375477 0.375139 0.46229 0 0.38524 0.375738 0.465394 0 0.401426 0.376799 0.465795 0 0.420067 0.377548 0.463245 0 0.44111 0.376919 0.464319 0 0.460257 0.376143 0.467984 0 0.480252 0.376119 0.466182 0 0.504937 0.374152 0.465227 0 0.521516 0.375096 0.465047 0 0.550049 0.375408 0.465833 0 0.590259 0.376475 0.455911 0 0.64694 0.379526 0.435578 0 0.741095 0.372566 0.427784 0 0.846905 0.375149 0.440838 0 0.86965 0.380386 0.432278 0 0.130746 0.383655 0.409573 0 0.130746 0.383655 0.409573 0 0.130746 0.383655 0.409573 0 0.135849 0.383439 0.413081 0 0.146244 0.382954 0.420303 0 0.158872 0.38474 0.426499 0 0.167962 0.385974 0.430513 0 0.179596 0.387269 0.435087 0 0.215053 0.386121 0.435987 0 0.242906 0.386429 0.436147 0 0.255389 0.38747 0.443527 0 0.269675 0.38756 0.45161 0 0.296964 0.385299 0.453703 0 0.32617 0.387561 0.435015 0 0.33921 0.38845 0.443102 0 0.353288 0.38909 0.451618 0 0.363748 0.389307 0.457054 0 0.376091 0.389711 0.462356 0 0.385828 0.390399 0.465538 0 0.402368 0.391234 0.466005 0 0.420497 0.392095 0.463411 0 0.440165 0.391658 0.463684 0 0.459732 0.389819 0.466897 0 0.480303 0.38866 0.465419 0 0.503039 0.38675 0.465034 0 0.52251 0.387317 0.46287 0 0.551651 0.38605 0.467947 0 0.590924 0.386943 0.459764 0 0.640362 0.395065 0.426093 0 0.742643 0.384417 0.429209 0 0.845316 0.389446 0.439263 0 0.871352 0.391744 0.434272 0 0.131811 0.398058 0.407463 0 0.131811 0.398058 0.407463 0 0.131811 0.398058 0.407463 0 0.136061 0.398912 0.411026 0 0.146672 0.39892 0.418416 0 0.160857 0.399907 0.425003 0 0.169659 0.401603 0.429168 0 0.181117 0.403235 0.433962 0 0.214232 0.40301 0.436666 0 0.242624 0.403022 0.438097 0 0.256147 0.403562 0.44306 0 0.270864 0.403766 0.449646 0 0.296894 0.402728 0.454169 0 0.327012 0.404476 0.434542 0 0.340152 0.405453 0.442568 0 0.353989 0.406343 0.451152 0 0.363962 0.406985 0.456872 0 0.37649 0.407295 0.46229 0 0.386426 0.407249 0.465595 0 0.402631 0.407081 0.466453 0 0.42022 0.406655 0.463306 0 0.438806 0.405761 0.463346 0 0.458077 0.404265 0.465421 0 0.480151 0.402561 0.464769 0 0.501122 0.402108 0.464949 0 0.524984 0.401659 0.461372 0 0.545172 0.404947 0.464431 0 0.592138 0.401367 0.464349 0 0.640129 0.410717 0.425531 0 0.744409 0.398835 0.431233 0 0.841811 0.40773 0.436701 0 0.873045 0.406938 0.435683 0 0.134236 0.412555 0.405543 0 0.134236 0.412555 0.405543 0 0.134236 0.412555 0.405543 0 0.138564 0.413647 0.409055 0 0.147481 0.415396 0.416666 0 0.161193 0.416287 0.42277 0 0.171384 0.417084 0.427586 0 0.183153 0.418597 0.431855 0 0.21187 0.420626 0.438667 0 0.241876 0.420616 0.440687 0 0.255915 0.421249 0.44555 0 0.269232 0.421871 0.451911 0 0.295363 0.421522 0.4542 0 0.328118 0.42094 0.43387 0 0.341002 0.421893 0.442034 0 0.354535 0.421949 0.450472 0 0.364165 0.422009 0.456191 0 0.376121 0.421897 0.461888 0 0.386304 0.421499 0.465362 0 0.402142 0.421127 0.466885 0 0.419785 0.420716 0.463071 0 0.437709 0.420135 0.463091 0 0.457029 0.419082 0.465059 0 0.479772 0.419517 0.464087 0 0.500337 0.420593 0.464227 0 0.528775 0.419615 0.461071 0 0.545182 0.423751 0.462038 0 0.592219 0.417576 0.467404 0 0.636846 0.428039 0.430047 0 0.74331 0.418978 0.430239 0 0.839415 0.434791 0.432941 0 0.871129 0.422373 0.433746 0 0.138315 0.430772 0.401582 0 0.138315 0.430772 0.401582 0 0.138315 0.430772 0.401582 0 0.142432 0.431834 0.405634 0 0.150269 0.434077 0.41364 0 0.161475 0.43654 0.420288 0 0.172696 0.437203 0.422161 0 0.185299 0.438294 0.428124 0 0.210506 0.441888 0.443693 0 0.243285 0.440595 0.44173 0 0.255271 0.442226 0.449053 0 0.267129 0.442329 0.455922 0 0.293609 0.440987 0.454046 0 0.329226 0.437602 0.432927 0 0.341431 0.438314 0.440758 0 0.354723 0.438443 0.449383 0 0.364226 0.438414 0.455078 0 0.375438 0.438703 0.461009 0 0.385719 0.438465 0.464842 0 0.401942 0.438883 0.466845 0 0.419918 0.439326 0.463264 0 0.438069 0.440179 0.462968 1743.02 0.456906 0.44049 0.465398 1644.97 0.480501 0.440613 0.463804 0 0.501624 0.441416 0.463733 0 0.528576 0.440221 0.461345 0 0.547116 0.443206 0.459863 0 0.588086 0.439822 0.466526 0 0.634089 0.447684 0.430386 0 0.726275 0.444576 0.420077 0 0.826828 0.449708 0.425022 0 0.863557 0.436959 0.428731 0 0.136303 0.450786 0.408775 0 0.136303 0.450786 0.408775 0 0.136303 0.450786 0.408775 0 0.14246 0.450744 0.408642 0 0.154676 0.451437 0.409802 0 0.163357 0.455291 0.417796 0 0.173215 0.456683 0.419014 0 0.186395 0.457582 0.423209 0 0.213154 0.459102 0.441828 0 0.245583 0.456985 0.440868 0 0.256497 0.458398 0.447857 0 0.26675 0.458993 0.457142 0 0.293326 0.457194 0.453194 0 0.329435 0.453978 0.432986 0 0.341814 0.454132 0.439443 0 0.355201 0.454805 0.4481 0 0.364705 0.455479 0.454056 0 0.375962 0.456662 0.460161 0 0.385884 0.45745 0.46458 0 0.402612 0.458002 0.466982 0 0.420835 0.458851 0.463864 0 0.43865 0.459658 0.463083 1644.84 0.456385 0.459988 0.465916 9020.48 0.480912 0.459451 0.463935 1413.75 0.502615 0.460482 0.4635 0 0.526991 0.460555 0.462026 0 0.549442 0.461826 0.458193 0 0.584244 0.460885 0.463901 0 0.638562 0.464205 0.433711 0 0.710262 0.478615 0.407836 0 0.818506 0.461269 0.42016 0 0.851005 0.450069 0.420482 0 0.135753 0.473884 0.414189 0 0.135753 0.473884 0.414189 0 0.135753 0.473883 0.414189 0 0.141197 0.473854 0.415918 0 0.153254 0.473903 0.416232 0 0.168394 0.474289 0.413736 0 0.175184 0.476313 0.417856 0 0.186544 0.477307 0.419479 0 0.215561 0.476561 0.439332 0 0.244655 0.475377 0.441705 0 0.258841 0.475826 0.446659 0 0.268978 0.477668 0.454798 0 0.293391 0.476895 0.452438 0 0.329693 0.474259 0.433639 0 0.342416 0.474486 0.439105 0 0.356277 0.474554 0.446992 0 0.365706 0.47519 0.452959 0 0.376884 0.476853 0.459397 0 0.386711 0.478274 0.464045 0 0.403774 0.479448 0.467045 0 0.421888 0.48049 0.464306 0 0.439492 0.481583 0.46358 0 0.456566 0.482151 0.465905 1413.75 0.480585 0.481694 0.464065 1379.08 0.50377 0.481957 0.463994 0 0.524502 0.483239 0.461774 0 0.552987 0.481853 0.457494 0 0.579687 0.483783 0.461215 0 0.646626 0.480604 0.441423 0 0.698618 0.504335 0.39595 0 0.813437 0.466228 0.420974 0 0.834687 0.460516 0.411685 0 0.132326 0.499687 0.412784 0 0.132326 0.499687 0.412784 0 0.132326 0.499687 0.412784 0 0.140027 0.498276 0.417565 0 0.151394 0.49708 0.422776 0 0.170787 0.494201 0.413382 0 0.178916 0.495466 0.414712 0 0.187813 0.497236 0.419009 0 0.215914 0.498777 0.435446 0 0.24131 0.500857 0.444808 0 0.258714 0.499989 0.451782 0 0.270828 0.501239 0.45619 0 0.291641 0.503024 0.452702 0 0.327344 0.500709 0.433426 0 0.343089 0.499489 0.439513 0 0.35637 0.500318 0.44693 0 0.366881 0.500472 0.452204 0 0.378837 0.501787 0.458128 0 0.388264 0.503633 0.463178 0 0.404859 0.505649 0.466663 0 0.423169 0.506294 0.464074 0 0.440483 0.507072 0.463994 0 0.457014 0.507502 0.465712 0 0.479422 0.507428 0.463908 0 0.50446 0.506474 0.463717 0 0.525662 0.506768 0.461596 0 0.553171 0.505283 0.457083 0 0.575682 0.507627 0.457344 0 0.654782 0.506724 0.443241 0 0.700087 0.520017 0.399724 0 0.807851 0.470758 0.422708 0 0.828104 0.467014 0.411092 0 0.123591 0.525908 0.412071 0 0.123591 0.525908 0.412071 0 0.123591 0.525908 0.412071 0 0.135065 0.524807 0.413991 0 0.149527 0.522423 0.422963 0 0.165325 0.520572 0.4266 0 0.183797 0.517534 0.41452 0 0.191797 0.521284 0.418571 0 0.216759 0.525621 0.432312 0 0.240516 0.529599 0.44497 0 0.256366 0.529343 0.454178 0 0.270714 0.529113 0.460804 0 0.293697 0.530208 0.454458 0 0.325452 0.530776 0.433562 0 0.343394 0.529208 0.439834 0 0.357249 0.529251 0.447387 0 0.366983 0.529455 0.452455 0 0.380299 0.529045 0.456867 0 0.390922 0.530189 0.459852 0 0.407037 0.532246 0.463132 0 0.424213 0.5332 0.463197 0 0.441478 0.533589 0.463395 0 0.456962 0.533892 0.465567 0 0.477781 0.532504 0.4627 0 0.502521 0.529014 0.462112 0 0.526291 0.528011 0.460316 0 0.550803 0.528904 0.455658 0 0.580804 0.53648 0.452042 0 0.659254 0.534599 0.443721 0 0.69834 0.524631 0.405534 0 0.80855 0.486087 0.427071 0 0.830907 0.476683 0.419934 0 0.120266 0.553053 0.406142 0 0.120266 0.553053 0.406142 0 0.120266 0.553053 0.406142 0 0.129232 0.552602 0.409856 0 0.145802 0.551942 0.420095 0 0.162841 0.550883 0.428285 0 0.179207 0.548738 0.426312 0 0.198286 0.546688 0.418104 0 0.218601 0.553803 0.431847 0 0.241263 0.5586 0.441568 0 0.25589 0.558431 0.452409 0 0.27119 0.557982 0.461176 0 0.297103 0.558248 0.455554 0 0.32741 0.559071 0.43352 0 0.34143 0.560532 0.439621 0 0.357461 0.559405 0.448031 0 0.36684 0.559009 0.452831 0 0.379594 0.557966 0.456666 0 0.394444 0.55609 0.453407 0 0.408679 0.555322 0.457155 0 0.422586 0.553833 0.460691 0 0.439571 0.551797 0.461464 0 0.455828 0.552068 0.463365 0 0.476338 0.552168 0.460246 0 0.502577 0.558085 0.460399 0 0.531488 0.566593 0.459807 0 0.553744 0.567201 0.457788 0 0.585659 0.5614 0.455756 0 0.624076 0.546039 0.435428 0 0.697665 0.52655 0.407817 0 0.811175 0.48695 0.435751 0 0.848516 0.536558 0.425703 0 0.105436 0.587979 0.429131 0 0.105436 0.587979 0.429131 0 0.105436 0.587979 0.429131 0 0.117178 0.587303 0.423841 0 0.14226 0.585272 0.417267 0 0.158906 0.583405 0.424999 0 0.172244 0.583025 0.427515 0 0.195733 0.580093 0.422175 0 0.222122 0.581409 0.43047 0 0.245174 0.5876 0.437232 0 0.257119 0.589291 0.448784 0 0.272796 0.587335 0.457782 0 0.297828 0.584538 0.456674 0 0.325979 0.581774 0.433511 0 0.34011 0.579513 0.438401 0 0.353355 0.57762 0.446355 0 0.363616 0.57581 0.452097 0 0.375494 0.574356 0.455695 0 0.389203 0.573201 0.45515 0 0.410171 0.571816 0.451229 0 0.423775 0.573893 0.45704 0 0.440958 0.576751 0.461656 0 0.45844 0.578878 0.465347 0 0.478363 0.581033 0.464437 0 0.503254 0.581999 0.465067 0 0.529474 0.577996 0.466253 0 0.55265 0.57838 0.463683 0 0.587804 0.578027 0.460418 0 0.619657 0.557469 0.434161 0 0.698104 0.52921 0.407946 0 0.830489 0.556981 0.424255 0 0.852319 0.553528 0.417049 0 -0.0212763 0.655862 0.624653 0 -0.0212763 0.655862 0.624653 0 -0.0212763 0.655862 0.624653 0 -0.00333136 0.654117 0.610504 0 0.0291702 0.651579 0.582254 0 0.0742221 0.647719 0.543395 0 0.143263 0.641009 0.451455 0 0.170969 0.633593 0.428181 0 0.213967 0.627416 0.429415 0 0.254147 0.642024 0.429297 0 0.271444 0.653512 0.439171 0 0.284681 0.668436 0.446333 0 0.300279 0.670202 0.454243 0 0.319282 0.67152 0.452257 0 0.339964 0.666479 0.439089 0 0.351421 0.662975 0.447624 0 0.360455 0.659625 0.451996 0 0.372492 0.65464 0.455867 0 0.38282 0.650503 0.459909 0 0.398726 0.650542 0.461723 0 0.422705 0.649558 0.452868 0 0.442881 0.650121 0.455342 0 0.458154 0.646857 0.461369 0 0.472397 0.643134 0.46136 0 0.490642 0.63885 0.45758 0 0.509047 0.634335 0.45511 0 0.530859 0.629185 0.450614 0 0.557591 0.622743 0.445949 0 0.616373 0.612451 0.428064 0 0.726339 0.631023 0.407958 0 0.83527 0.658443 0.438803 0 0.862539 0.677998 0.427304 0 -0.191212 0.762911 0.858561 0 -0.191212 0.762911 0.858561 0 -0.191212 0.762911 0.858561 0 -0.173185 0.760058 0.844959 0 -0.140474 0.754934 0.819905 0 -0.10317 0.749072 0.791456 0 -0.0475087 0.74303 0.731851 0 0.0496039 0.736785 0.597303 0 0.167567 0.728519 0.459816 0 0.237121 0.719379 0.416886 0 0.253043 0.717075 0.422226 0 0.269534 0.717173 0.424782 0 0.318704 0.761471 0.423285 0 0.333919 0.770991 0.431451 0 0.345818 0.766723 0.437913 0 0.354803 0.760151 0.443385 0 0.359331 0.75804 0.446216 0 0.365802 0.754553 0.449784 0 0.371839 0.749257 0.45215 0 0.381409 0.739943 0.455888 0 0.396307 0.722746 0.457051 0 0.4114 0.704783 0.45334 0 0.438743 0.731947 0.452325 0 0.474529 0.756231 0.449052 0 0.500617 0.768363 0.458717 0 0.520817 0.764937 0.465135 0 0.543277 0.760028 0.463478 0 0.57723 0.753258 0.462301 0 0.650733 0.752521 0.439218 0 0.725106 0.73825 0.419031 0 0.776638 0.747015 0.406826 0 0.857154 0.739013 0.431495 0 -0.405931 0.914549 1.2584 0 -0.405931 0.914549 1.2584 0 -0.405931 0.914549 1.2584 0 -0.389727 0.9119 1.24954 0 -0.33116 0.906085 1.17941 0 -0.270294 0.900534 1.10619 0 -0.126478 0.893716 0.866616 0 -0.0301938 0.885892 0.735915 0 0.0591385 0.870836 0.656508 0 0.216481 0.849943 0.457974 0 0.232698 0.843175 0.465759 0 0.243875 0.839753 0.470293 0 0.271554 0.831582 0.459058 0 0.313606 0.80407 0.418805 0 0.333367 0.815647 0.428605 0 0.348481 0.815641 0.436504 0 0.361068 0.814618 0.442649 0 0.372934 0.814447 0.448439 0 0.383274 0.819346 0.452853 0 0.397869 0.822925 0.4534 0 0.418278 0.831122 0.451699 0 0.435853 0.837322 0.454472 0 0.455025 0.833702 0.459455 0 0.472728 0.831066 0.462031 0 0.50108 0.82449 0.460912 0 0.525174 0.818623 0.459764 0 0.539021 0.81672 0.462703 0 0.560543 0.810363 0.455536 0 0.643569 0.814514 0.442043 0 0.702515 0.843074 0.408112 0 0.810852 0.857125 0.411026 0 0.818215 0.857668 0.405453 0 -0.45609 0.950725 1.29369 0 -0.45609 0.950725 1.29369 0 -0.45609 0.950725 1.29369 0 -0.434754 0.9456 1.27723 0 -0.40633 0.938116 1.2558 0 -0.360371 0.928559 1.205 0 -0.337657 0.92473 1.1913 0 -0.224568 0.912506 1.00791 0 -0.0245044 0.894119 0.724118 0 0.0971053 0.879059 0.599358 0 0.191841 0.876791 0.49062 0 0.219535 0.880093 0.493921 0 0.257872 0.874183 0.476322 0 0.305109 0.886934 0.455723 0 0.353348 0.877156 0.412666 0 0.366995 0.880234 0.419125 0 0.379975 0.884258 0.424643 0 0.394021 0.889069 0.432452 0 0.402279 0.891452 0.435348 0 0.413676 0.894917 0.439162 0 0.423041 0.897266 0.44445 0 0.438175 0.896684 0.448778 0 0.457505 0.893311 0.450333 0 0.473236 0.891154 0.453114 0 0.490126 0.888359 0.454545 0 0.5141 0.885055 0.453366 0 0.545089 0.886882 0.451492 0 0.57046 0.896248 0.457776 0 0.655619 0.899909 0.435886 0 0.716536 0.89512 0.41095 0 0.811161 0.904075 0.422204 0 0.830867 0.899393 0.406036 0 0.122375 0.100704 0.448975 0 0.122375 0.100704 0.448975 0 0.122375 0.100704 0.448975 0 0.143722 0.0996083 0.427526 0 0.155404 0.101851 0.434693 0 0.167482 0.0993614 0.440767 0 0.174578 0.0977347 0.444232 0 0.187765 0.0945242 0.444407 0 0.216995 0.0914453 0.452685 0 0.243919 0.0909215 0.464196 0 0.264769 0.0906558 0.465923 0 0.280861 0.0896543 0.475263 0 0.296331 0.0924617 0.483313 0 0.311861 0.098614 0.474436 0 0.331526 0.0985969 0.470043 0 0.360736 0.0956799 0.462128 0 0.372659 0.094672 0.469793 0 0.385412 0.0939605 0.47796 0 0.398386 0.0926552 0.484582 0 0.416853 0.0933203 0.492761 0 0.424949 0.0980921 0.494535 0 0.431771 0.101367 0.492908 0 0.448926 0.102118 0.48648 0 0.472031 0.0990612 0.486781 0 0.488634 0.0991911 0.480829 0 0.501644 0.102916 0.473789 0 0.553597 0.0937324 0.478702 0 0.563847 0.101057 0.467423 0 0.649255 0.106733 0.451896 0 0.710571 0.116668 0.41897 0 0.841548 0.0978973 0.457184 0 0.85882 0.0995009 0.44762 0 0.122375 0.100704 0.448975 0 0.122375 0.100704 0.448975 0 0.122375 0.100704 0.448975 0 0.143722 0.0996083 0.427526 0 0.155404 0.101851 0.434693 0 0.167482 0.0993614 0.440767 0 0.174578 0.0977347 0.444232 0 0.187765 0.0945242 0.444407 0 0.216995 0.0914453 0.452685 0 0.243919 0.0909215 0.464196 0 0.264769 0.0906558 0.465923 0 0.280861 0.0896543 0.475263 0 0.296331 0.0924617 0.483313 0 0.311861 0.098614 0.474436 0 0.331526 0.0985969 0.470043 0 0.360736 0.0956799 0.462128 0 0.372659 0.094672 0.469793 0 0.385412 0.0939605 0.47796 0 0.398386 0.0926552 0.484582 0 0.416853 0.0933203 0.492761 0 0.424949 0.0980921 0.494535 0 0.431771 0.101367 0.492908 0 0.448926 0.102118 0.48648 0 0.472031 0.0990612 0.486781 0 0.488634 0.0991911 0.480829 0 0.501644 0.102916 0.473789 0 0.553597 0.0937324 0.478702 0 0.563847 0.101057 0.467423 0 0.649255 0.106733 0.451896 0 0.710571 0.116668 0.41897 0 0.841548 0.0978973 0.457184 0 0.85882 0.0995009 0.44762 0 0.122375 0.100704 0.448975 0 0.122375 0.100704 0.448975 0 0.122375 0.100704 0.448975 0 0.143722 0.0996084 0.427526 0 0.155404 0.101851 0.434693 0 0.167482 0.0993614 0.440767 0 0.174578 0.0977347 0.444232 0 0.187765 0.0945242 0.444407 0 0.216995 0.0914453 0.452685 0 0.243919 0.0909215 0.464196 0 0.264769 0.0906558 0.465923 0 0.280861 0.0896543 0.475263 0 0.296331 0.0924617 0.483313 0 0.311861 0.098614 0.474436 0 0.331526 0.098597 0.470043 0 0.360736 0.0956799 0.462128 0 0.372659 0.094672 0.469793 0 0.385412 0.0939605 0.47796 0 0.398386 0.0926552 0.484582 0 0.416853 0.0933203 0.492761 0 0.424949 0.0980921 0.494535 0 0.431771 0.101367 0.492908 0 0.448926 0.102118 0.48648 0 0.472031 0.0990612 0.486781 0 0.488634 0.0991911 0.480829 0 0.501644 0.102916 0.473789 0 0.553597 0.0937323 0.478702 0 0.563847 0.101057 0.467423 0 0.649255 0.106733 0.451896 0 0.710571 0.116668 0.41897 0 0.841548 0.0978973 0.457184 0 0.85882 0.0995009 0.44762 0 0.122696 0.111392 0.448967 0 0.122696 0.111392 0.448967 0 0.122696 0.111392 0.448967 0 0.144525 0.10952 0.427831 0 0.154361 0.108737 0.433917 0 0.165624 0.106567 0.440178 0 0.172856 0.104813 0.443732 0 0.185503 0.101499 0.444365 0 0.217658 0.101018 0.450764 0 0.24345 0.101048 0.463465 0 0.264402 0.10063 0.465226 0 0.280638 0.100355 0.474612 0 0.299187 0.101037 0.485334 0 0.314493 0.105531 0.476327 0 0.330432 0.107664 0.46989 0 0.35964 0.105727 0.461126 0 0.371942 0.104471 0.469018 0 0.385687 0.103588 0.477627 0 0.397187 0.103499 0.483801 0 0.418713 0.101624 0.4937 0 0.426121 0.104402 0.495112 0 0.432977 0.107446 0.494262 0 0.448747 0.108698 0.48713 0 0.46886 0.10728 0.485806 0 0.490842 0.105616 0.48047 0 0.501987 0.109765 0.474748 0 0.555364 0.0999181 0.481078 0 0.565512 0.109514 0.467958 0 0.648295 0.116112 0.451257 0 0.707995 0.125938 0.416672 0 0.840811 0.106519 0.456438 0 0.859822 0.107354 0.448091 0 0.121242 0.123858 0.447829 0 0.121242 0.123858 0.447829 0 0.121242 0.123858 0.447829 0 0.139322 0.121282 0.431687 0 0.153051 0.120014 0.432891 0 0.163684 0.119675 0.43946 0 0.170211 0.118521 0.442893 0 0.182684 0.116523 0.444553 0 0.219712 0.118334 0.447761 0 0.243995 0.120803 0.461865 0 0.263916 0.120034 0.46429 0 0.279966 0.118843 0.473475 0 0.299953 0.1172 0.485653 0 0.319235 0.118667 0.479746 0 0.332542 0.122314 0.47991 0 0.357862 0.126098 0.459368 0 0.370809 0.124726 0.467449 0 0.385036 0.12341 0.476054 0 0.395561 0.122869 0.482305 0 0.418066 0.116948 0.492865 0 0.428168 0.117332 0.496162 0 0.435427 0.119696 0.495916 0 0.447679 0.121371 0.488899 0 0.467328 0.122101 0.486045 0 0.495377 0.11988 0.480246 0 0.503925 0.125668 0.476628 0 0.554603 0.118743 0.48118 0 0.570624 0.126299 0.470943 0 0.647916 0.131787 0.450723 0 0.709704 0.140099 0.4207 0 0.839097 0.123998 0.454864 0 0.861689 0.123142 0.449013 0 0.118886 0.139403 0.446076 0 0.118886 0.139403 0.446076 0 0.118886 0.139403 0.446076 0 0.127554 0.138623 0.442938 0 0.152225 0.135206 0.431578 0 0.164368 0.137623 0.438945 0 0.170624 0.13934 0.442829 0 0.181941 0.139781 0.446236 0 0.222702 0.138238 0.446408 0 0.244026 0.139966 0.459842 0 0.262505 0.14012 0.463129 0 0.278624 0.13864 0.47221 0 0.299102 0.137507 0.484243 0 0.32175 0.137568 0.482034 0 0.338775 0.138881 0.485204 0 0.364672 0.142475 0.463904 0 0.369004 0.145548 0.465624 0 0.381913 0.143043 0.473401 0 0.393847 0.140784 0.480357 0 0.408707 0.138093 0.487337 0 0.428698 0.133126 0.495903 0 0.438512 0.134821 0.497464 0 0.448712 0.138724 0.492129 0 0.469601 0.139777 0.488507 0 0.496904 0.141598 0.483937 0 0.508372 0.148606 0.478755 0 0.534478 0.150224 0.4709 0 0.573958 0.144268 0.472656 0 0.650567 0.149165 0.45234 0 0.712496 0.156284 0.426489 0 0.836955 0.143751 0.453137 0 0.859938 0.141034 0.448449 0 0.11206 0.151736 0.455067 0 0.11206 0.151736 0.455067 0 0.11206 0.151736 0.455067 0 0.126877 0.150247 0.442239 0 0.153484 0.149811 0.432002 0 0.165944 0.151457 0.439146 0 0.172066 0.152398 0.443003 0 0.181297 0.152941 0.446946 0 0.224052 0.149012 0.445501 0 0.243999 0.150918 0.458481 0 0.261694 0.151603 0.462442 0 0.278135 0.150767 0.471392 0 0.298965 0.150161 0.483414 0 0.321864 0.150088 0.481119 0 0.340046 0.150051 0.486077 0 0.367492 0.14983 0.466021 0 0.371647 0.152943 0.467665 0 0.379997 0.154179 0.471872 0 0.392343 0.151626 0.479058 0 0.405772 0.149726 0.485722 0 0.4279 0.144263 0.494584 0 0.440596 0.144036 0.498213 0 0.450814 0.148633 0.493643 0 0.47132 0.150882 0.48985 0 0.497327 0.153196 0.485845 0 0.511759 0.159188 0.478542 0 0.529453 0.162612 0.469307 0 0.574954 0.153159 0.473525 0 0.651341 0.158274 0.453177 0 0.71303 0.163782 0.428409 0 0.833393 0.151794 0.450895 0 0.859041 0.147592 0.44851 0 0.106711 0.162114 0.463455 0 0.106711 0.162114 0.463455 0 0.106711 0.162114 0.463455 0 0.127741 0.161494 0.441973 0 0.1538 0.159877 0.432457 0 0.16664 0.160227 0.439123 0 0.17282 0.161166 0.443013 0 0.180955 0.16257 0.447089 0 0.224134 0.157576 0.44582 0 0.244489 0.159492 0.457261 0 0.261254 0.161259 0.461987 0 0.277994 0.160876 0.470839 0 0.29928 0.160198 0.482531 0 0.321857 0.160358 0.480549 0 0.338655 0.159582 0.48514 0 0.369753 0.156267 0.467752 0 0.373912 0.159471 0.469387 0 0.379126 0.163116 0.471117 0 0.390573 0.161168 0.477742 0 0.405405 0.15922 0.485168 0 0.423236 0.156273 0.491589 0 0.441828 0.154571 0.49671 0 0.453181 0.158234 0.494414 0 0.472464 0.16054 0.491045 0 0.497435 0.162814 0.487503 0 0.514491 0.167603 0.47834 0 0.529714 0.171587 0.470988 0 0.575611 0.162045 0.473509 0 0.652951 0.166915 0.454601 0 0.712665 0.171318 0.428649 0 0.829022 0.16065 0.448243 0 0.85807 0.154892 0.448596 0 0.111204 0.191505 0.457822 0 0.111204 0.191505 0.457822 0 0.111204 0.191505 0.457822 0 0.123243 0.191322 0.447764 0 0.152942 0.190215 0.431471 0 0.166819 0.189874 0.439937 0 0.174352 0.190049 0.443736 0 0.182393 0.190724 0.446491 0 0.222642 0.189504 0.446829 0 0.248151 0.190999 0.455467 0 0.263166 0.195368 0.460689 0 0.278313 0.196821 0.468967 0 0.298777 0.194747 0.479903 0 0.319827 0.192705 0.478394 0 0.334441 0.192266 0.481971 0 0.364623 0.190461 0.463888 0 0.377212 0.18873 0.471698 0 0.388182 0.189579 0.477497 0 0.393275 0.19399 0.478932 0 0.404642 0.19719 0.482855 0 0.417726 0.19659 0.487767 0 0.443217 0.192812 0.487001 0 0.458775 0.192002 0.490337 0 0.473183 0.192685 0.494005 0 0.497019 0.193427 0.492477 0 0.522389 0.196119 0.481647 0 0.53325 0.204612 0.474711 0 0.558169 0.203549 0.463708 0 0.665828 0.191502 0.465636 0 0.717234 0.209723 0.429114 0 0.829026 0.204779 0.44327 0 0.849448 0.204162 0.436308 0 0.119801 0.225584 0.44498 0 0.119801 0.225584 0.44498 0 0.119801 0.225584 0.44498 0 0.124174 0.22868 0.447619 0 0.151904 0.227568 0.430111 0 0.168032 0.227117 0.439924 0 0.176478 0.228098 0.444857 0 0.185355 0.229251 0.448213 0 0.219278 0.232329 0.451554 0 0.249275 0.23081 0.457647 0 0.267972 0.230857 0.454693 0 0.280779 0.231397 0.462373 0 0.29848 0.230767 0.473946 0 0.317892 0.230804 0.476157 0 0.333025 0.23037 0.480245 0 0.361387 0.229573 0.460715 0 0.372184 0.22843 0.46748 0 0.386715 0.226465 0.476057 0 0.400185 0.224722 0.483408 0 0.411997 0.227296 0.487524 0 0.419978 0.230441 0.488348 0 0.433431 0.231499 0.484578 0 0.45918 0.227639 0.483868 0 0.47337 0.227465 0.488139 0 0.497244 0.224871 0.49686 0 0.52836 0.22362 0.48803 0 0.537884 0.230938 0.481167 0 0.55349 0.239075 0.466652 0 0.663556 0.231651 0.465808 0 0.721448 0.23857 0.431646 0 0.830918 0.238768 0.444631 0 0.851243 0.239953 0.433811 0 0.120417 0.243768 0.44501 0 0.120417 0.243768 0.44501 0 0.120417 0.243768 0.44501 0 0.124588 0.246513 0.447531 0 0.151902 0.247072 0.429734 0 0.168708 0.246553 0.439554 0 0.1784 0.246992 0.445025 0 0.186606 0.249402 0.449112 0 0.218678 0.252157 0.452312 0 0.247686 0.248837 0.458679 0 0.270209 0.24715 0.450277 0 0.282697 0.247233 0.458509 0 0.299729 0.247571 0.470831 0 0.316628 0.247559 0.475104 0 0.331984 0.245616 0.479526 0 0.360431 0.243414 0.459903 0 0.3706 0.24292 0.466342 0 0.384293 0.241664 0.474438 0 0.398057 0.240006 0.482112 0 0.41575 0.238204 0.490307 0 0.424277 0.240339 0.491898 0 0.433571 0.24458 0.487079 0 0.455139 0.245137 0.481712 0 0.473882 0.244243 0.48594 0 0.492675 0.243576 0.494121 0 0.531019 0.23985 0.49139 0 0.542091 0.249471 0.483736 0 0.556766 0.257206 0.469336 0 0.657283 0.247959 0.465028 0 0.723711 0.251912 0.4339 0 0.834834 0.253031 0.449959 0 0.853692 0.258388 0.434121 0 0.120813 0.259816 0.444944 0 0.120813 0.259816 0.444944 0 0.120813 0.259816 0.444944 0 0.128545 0.262359 0.442238 0 0.152564 0.265448 0.429788 0 0.168687 0.265663 0.439438 0 0.180049 0.2654 0.445018 0 0.188577 0.266966 0.449351 0 0.218615 0.26542 0.450789 0 0.244241 0.262735 0.459653 0 0.268906 0.25797 0.450893 0 0.283921 0.25766 0.456197 0 0.300719 0.257699 0.469298 0 0.315807 0.25798 0.474311 0 0.33099 0.256611 0.479213 0 0.360084 0.255943 0.459528 0 0.369616 0.255766 0.465648 0 0.382849 0.254729 0.473452 0 0.395818 0.253635 0.480717 0 0.414414 0.252306 0.489441 0 0.428567 0.252828 0.494869 0 0.437657 0.260596 0.490833 0 0.453386 0.267143 0.480056 0 0.474802 0.265037 0.483177 0 0.490526 0.265455 0.488641 0 0.533349 0.257827 0.493865 0 0.545684 0.263719 0.48557 0 0.558456 0.269068 0.472394 0 0.637644 0.267446 0.453491 0 0.72594 0.264242 0.436403 0 0.83774 0.265944 0.454053 0 0.855546 0.272256 0.437327 0 0.121674 0.280187 0.445084 0 0.121674 0.280187 0.445084 0 0.121674 0.280187 0.445084 0 0.13496 0.281264 0.434296 0 0.153632 0.284035 0.430089 0 0.167779 0.283812 0.438825 0 0.17774 0.282403 0.444984 0 0.188712 0.280174 0.449102 0 0.217128 0.277818 0.450132 0 0.241419 0.276921 0.459891 0 0.266403 0.275199 0.454619 0 0.284515 0.274761 0.454583 0 0.302952 0.275368 0.466191 0 0.317022 0.278887 0.473952 0 0.331321 0.282668 0.478606 0 0.360904 0.284903 0.458585 0 0.370502 0.284909 0.464655 0 0.38201 0.284613 0.47154 0 0.394223 0.283508 0.478422 0 0.413178 0.281997 0.487534 0 0.429023 0.28038 0.493727 0 0.442727 0.280214 0.495776 0 0.457352 0.283764 0.485952 0 0.47321 0.286575 0.480042 0 0.492242 0.285983 0.483598 0 0.521561 0.282734 0.489899 0 0.54998 0.280939 0.488365 0 0.561576 0.286956 0.475969 0 0.622615 0.293536 0.441346 0 0.729699 0.286847 0.439606 0 0.839173 0.289727 0.454271 0 0.858421 0.291773 0.443956 0 0.12945 0.303439 0.435946 0 0.12945 0.303439 0.435946 0 0.12945 0.303439 0.435946 0 0.140353 0.305725 0.426281 0 0.152165 0.308684 0.428708 0 0.166249 0.307983 0.437414 0 0.174175 0.307859 0.442309 0 0.186336 0.305633 0.4484 0 0.216935 0.306769 0.451391 0 0.242661 0.30726 0.456968 0 0.265056 0.306045 0.457123 0 0.284788 0.305809 0.4545 0 0.304165 0.306022 0.465566 0 0.319306 0.307048 0.473418 0 0.332023 0.309244 0.478654 0 0.36108 0.308434 0.458472 0 0.369967 0.308523 0.463869 0 0.380919 0.308054 0.470481 0 0.391436 0.307365 0.476308 0 0.409952 0.305361 0.485139 0 0.426685 0.303826 0.491948 0 0.443951 0.302652 0.493901 0 0.46065 0.302563 0.4908 0 0.477482 0.305352 0.48538 0 0.493551 0.309976 0.478804 0 0.510244 0.311044 0.483215 0 0.557669 0.303315 0.486913 0 0.565624 0.307149 0.479433 0 0.632311 0.315911 0.447191 0 0.732288 0.312208 0.440964 0 0.835498 0.314183 0.449611 0 0.860848 0.31226 0.446479 0 0.137571 0.321399 0.422774 0 0.137571 0.321399 0.422774 0 0.137571 0.321399 0.422774 0 0.142233 0.324247 0.422279 0 0.150813 0.326414 0.427533 0 0.165402 0.325994 0.436545 0 0.17397 0.326404 0.441825 0 0.184521 0.326949 0.448128 0 0.216692 0.325825 0.453597 0 0.242439 0.325594 0.456895 0 0.262491 0.325379 0.459119 0 0.284272 0.323736 0.456532 0 0.303629 0.323217 0.465516 0 0.319979 0.322138 0.472712 0 0.33241 0.324138 0.478185 0 0.36138 0.324057 0.458412 0 0.370192 0.324341 0.46379 0 0.380437 0.324569 0.469827 0 0.390287 0.324172 0.475361 0 0.407778 0.322594 0.483466 0 0.425314 0.32096 0.490882 0 0.443517 0.319903 0.492303 0 0.460255 0.320041 0.490425 0 0.481701 0.3188 0.489308 0 0.497125 0.325197 0.482204 0 0.511648 0.329467 0.479672 0 0.555227 0.323022 0.489162 0 0.569769 0.324406 0.481167 0 0.640511 0.332248 0.452917 0 0.733633 0.329081 0.441521 0 0.835187 0.331103 0.448913 0 0.862045 0.330812 0.445496 0 0.123181 0.340861 0.444845 0 0.123181 0.340861 0.444845 0 0.123181 0.340861 0.444845 0 0.142643 0.339358 0.422241 0 0.151467 0.34273 0.427268 0 0.165369 0.343839 0.435806 0 0.174404 0.344235 0.441494 0 0.18482 0.345279 0.447623 0 0.218219 0.343541 0.452711 0 0.240346 0.344272 0.457758 0 0.261062 0.343069 0.458975 0 0.28235 0.341237 0.459426 0 0.302352 0.340723 0.465462 0 0.319323 0.339538 0.472262 0 0.332849 0.341299 0.477494 0 0.36174 0.342486 0.458236 0 0.370799 0.342861 0.463767 0 0.381043 0.343457 0.469665 0 0.390118 0.343895 0.474682 0 0.405885 0.34313 0.481979 0 0.423309 0.341641 0.489174 0 0.442633 0.340479 0.491138 0 0.46194 0.340047 0.489302 0 0.479916 0.339923 0.488815 0 0.502411 0.341156 0.488366 0 0.514462 0.349941 0.477771 0 0.545975 0.348134 0.486645 0 0.576863 0.345706 0.480567 0 0.647989 0.348548 0.456607 0 0.735234 0.347504 0.441875 0 0.836457 0.350506 0.44973 0 0.861874 0.351962 0.444068 0 0.12289 0.356606 0.444362 0 0.12289 0.356606 0.444362 0 0.12289 0.356606 0.444362 0 0.143406 0.352174 0.422465 0 0.152657 0.356373 0.426989 0 0.166462 0.357311 0.435475 0 0.174915 0.357549 0.440744 0 0.185214 0.358031 0.446972 0 0.219402 0.356253 0.452041 0 0.239294 0.358028 0.459644 0 0.261015 0.356637 0.458043 0 0.279851 0.356033 0.461452 0 0.300849 0.35571 0.466849 0 0.318719 0.354829 0.471965 0 0.333652 0.355889 0.476867 0 0.361778 0.357677 0.458013 0 0.371262 0.357806 0.46368 0 0.381562 0.358269 0.469613 0 0.390576 0.358825 0.474513 0 0.404609 0.359089 0.480929 0 0.421886 0.357925 0.487934 0 0.442153 0.356918 0.4904 0 0.462761 0.356433 0.488322 0 0.478545 0.357296 0.488373 0 0.505781 0.354475 0.490974 0 0.51884 0.362261 0.482355 0 0.540263 0.365914 0.483227 0 0.581844 0.360077 0.479715 0 0.653156 0.360482 0.458771 0 0.737075 0.362444 0.442251 0 0.837562 0.364472 0.450928 0 0.863005 0.366931 0.444601 0 0.101027 0.374839 0.47879 0 0.101027 0.374839 0.47879 0 0.101027 0.374839 0.47879 0 0.14395 0.367767 0.4225 0 0.153268 0.370618 0.426454 0 0.167221 0.370785 0.434849 0 0.176073 0.371202 0.440296 0 0.185885 0.372591 0.446282 0 0.219406 0.372222 0.453297 0 0.24103 0.374105 0.458527 0 0.261408 0.372991 0.457016 0 0.278748 0.373389 0.461436 0 0.299946 0.373029 0.468354 0 0.318072 0.372089 0.471708 0 0.338339 0.37149 0.469784 0 0.361761 0.37429 0.457887 0 0.371624 0.374553 0.463515 0 0.382262 0.375115 0.469638 0 0.391596 0.375856 0.474691 0 0.404523 0.377259 0.480486 0 0.420641 0.3767 0.48689 0 0.441616 0.375571 0.489429 0 0.462529 0.374721 0.487516 0 0.479241 0.375225 0.488098 0 0.506216 0.371924 0.488636 0 0.523181 0.374203 0.48719 0 0.536712 0.382251 0.481113 0 0.584448 0.375389 0.480961 0 0.657862 0.374359 0.461001 0 0.739024 0.377578 0.44409 0 0.840813 0.379084 0.45422 0 0.864306 0.383183 0.445389 0 0.0876894 0.387781 0.497903 0 0.0876894 0.387781 0.497903 0 0.0876894 0.387781 0.497903 0 0.140495 0.381631 0.42828 0 0.153564 0.382582 0.42601 0 0.16805 0.38283 0.434479 0 0.177045 0.383192 0.439898 0 0.187136 0.38469 0.446107 0 0.217661 0.386905 0.455378 0 0.242671 0.387307 0.457668 0 0.260245 0.387423 0.457541 0 0.279373 0.386796 0.459498 0 0.299749 0.386607 0.469007 0 0.317373 0.386379 0.471608 0 0.341881 0.384735 0.464573 0 0.361884 0.388856 0.457844 0 0.371953 0.38916 0.46341 0 0.382894 0.389674 0.469643 0 0.392403 0.390311 0.474814 0 0.405425 0.39166 0.480687 0 0.419683 0.392189 0.486075 0 0.440495 0.390101 0.488271 0 0.461649 0.388346 0.486742 0 0.479861 0.387323 0.487606 0 0.501727 0.385854 0.486927 0 0.526102 0.384836 0.48887 0 0.542437 0.391008 0.485817 0 0.583106 0.38982 0.481019 0 0.651176 0.389594 0.452843 0 0.740641 0.389259 0.445909 0 0.843637 0.390577 0.457461 0 0.865594 0.394829 0.44688 0 0.0801424 0.403641 0.50234 0 0.0801424 0.403641 0.50234 0 0.0801424 0.403641 0.50234 0 0.128222 0.399947 0.446817 0 0.154338 0.397949 0.42567 0 0.168734 0.398747 0.434102 0 0.178242 0.399136 0.439461 0 0.189188 0.400329 0.445523 0 0.214504 0.405214 0.457132 0 0.244212 0.403051 0.457226 0 0.258704 0.405083 0.45835 0 0.280109 0.403529 0.457476 0 0.301867 0.403326 0.467298 0 0.317064 0.404495 0.471892 0 0.338779 0.402843 0.469132 0 0.36265 0.405985 0.457426 0 0.372461 0.406683 0.463185 0 0.38356 0.406685 0.469515 0 0.392935 0.406699 0.474609 0 0.405945 0.406893 0.480593 0 0.418581 0.406862 0.485363 0 0.438412 0.405071 0.486787 0 0.460313 0.402972 0.485969 0 0.479794 0.401628 0.486645 0 0.499322 0.401489 0.486835 0 0.526661 0.400101 0.486872 0 0.549801 0.403599 0.491091 0 0.579088 0.409698 0.480175 0 0.633881 0.411394 0.442365 0 0.742469 0.403482 0.448691 0 0.845886 0.405353 0.460257 0 0.867125 0.408438 0.449431 0 0.0768566 0.4201 0.499304 0 0.0768566 0.4201 0.499304 0 0.0768575 0.4201 0.499303 0 0.126807 0.418372 0.445589 0 0.154847 0.414069 0.423628 0 0.169719 0.414618 0.433672 0 0.179229 0.414994 0.438957 0 0.19102 0.41548 0.444849 0 0.21467 0.422033 0.456508 0 0.243692 0.42103 0.459335 0 0.25947 0.422472 0.459335 0 0.279161 0.421536 0.458637 0 0.302736 0.420866 0.465563 0 0.317787 0.422166 0.472179 0 0.336025 0.420351 0.472817 0 0.363046 0.421048 0.456705 0 0.372741 0.4211 0.462298 0 0.383535 0.420957 0.468819 0 0.392793 0.420847 0.474123 0 0.405955 0.420642 0.48025 0 0.418262 0.420784 0.485006 0 0.436441 0.419757 0.486476 0 0.459033 0.418591 0.484907 0 0.479814 0.418518 0.486068 0 0.498107 0.420128 0.487065 0 0.528197 0.418639 0.485106 0 0.550471 0.420802 0.492174 0 0.580199 0.424613 0.48488 0 0.629117 0.429364 0.446112 0 0.7436 0.419915 0.451207 0 0.843081 0.428588 0.457271 0 0.866705 0.418899 0.451448 0 0.0508358 0.443972 0.534531 0 0.0508358 0.443972 0.534531 0 0.0508358 0.443972 0.534531 0 0.120402 0.440407 0.450655 0 0.15683 0.433371 0.420058 0 0.170794 0.434247 0.430986 0 0.180467 0.434603 0.438264 0 0.192261 0.435426 0.444374 0 0.216535 0.441691 0.455758 0 0.242214 0.443006 0.463533 0 0.261327 0.441713 0.459218 0 0.276048 0.441828 0.461823 0 0.300369 0.439938 0.466357 0 0.318388 0.438807 0.471742 0 0.332778 0.438175 0.475399 0 0.363366 0.437191 0.455567 0 0.372656 0.437436 0.461063 0 0.383607 0.437115 0.467781 0 0.393153 0.437331 0.473322 0 0.406011 0.438381 0.479814 0 0.418924 0.439346 0.484895 0 0.436215 0.440457 0.486742 0 0.458571 0.440492 0.483937 0 0.479926 0.44046 0.485612 0 0.500648 0.440934 0.486455 0 0.527521 0.439948 0.482893 0 0.551132 0.441299 0.489864 0 0.582155 0.440884 0.489717 0 0.630409 0.447247 0.447746 0 0.743557 0.437023 0.453851 0 0.831712 0.443495 0.450292 0 0.864119 0.432777 0.449628 0 -0.00927186 0.472775 0.635208 0 -0.00927186 0.472775 0.635208 0 -0.00927186 0.472775 0.635208 0 0.1189 0.459283 0.447063 0 0.158651 0.452217 0.418736 0 0.171742 0.453334 0.427207 0 0.181411 0.453651 0.434684 0 0.193656 0.454126 0.443779 0 0.219104 0.458276 0.454346 0 0.24112 0.459965 0.463881 0 0.262145 0.457809 0.458884 0 0.274247 0.458947 0.462911 0 0.296026 0.457609 0.469053 0 0.318462 0.454968 0.47132 0 0.331392 0.456109 0.475607 0 0.363998 0.453725 0.45447 0 0.373313 0.454882 0.460016 0 0.384442 0.455383 0.467121 0 0.394041 0.455878 0.472709 0 0.406977 0.457627 0.479662 0 0.420116 0.458918 0.484989 0 0.436623 0.460114 0.486509 0 0.458443 0.460139 0.484085 1413.75 0.479887 0.460115 0.4853 1379.08 0.501816 0.459991 0.485755 0 0.525846 0.460149 0.483099 0 0.552482 0.459987 0.487982 0 0.582882 0.458629 0.490428 0 0.631955 0.464556 0.444071 0 0.744046 0.462006 0.45367 0 0.81914 0.456483 0.442291 0 0.853977 0.444404 0.443664 0 -0.0938621 0.501673 0.782269 0 -0.0938621 0.501673 0.782269 0 -0.093862 0.501673 0.782268 0 0.0944517 0.482562 0.482325 0 0.156539 0.475633 0.425158 0 0.172074 0.474135 0.426095 0 0.183048 0.473377 0.428744 0 0.194679 0.473039 0.438944 0 0.222116 0.475414 0.451267 0 0.24298 0.47758 0.461759 0 0.260824 0.478355 0.460983 0 0.275712 0.478242 0.462332 0 0.293286 0.47935 0.472459 0 0.315523 0.477875 0.472244 0 0.331943 0.477006 0.475758 0 0.364149 0.474278 0.453977 0 0.374476 0.474654 0.458999 0 0.385849 0.475522 0.466282 0 0.395632 0.476544 0.472223 0 0.408714 0.478355 0.479431 0 0.421332 0.480146 0.485148 0 0.437545 0.481605 0.486278 0 0.45824 0.481919 0.484077 1379.08 0.480346 0.48179 0.485328 8496.09 0.502412 0.4821 0.485225 1555.79 0.523848 0.48259 0.483312 0 0.553432 0.480617 0.485666 0 0.580603 0.480809 0.488112 0 0.639015 0.481207 0.45208 0 0.72906 0.494292 0.439626 0 0.808146 0.466648 0.436756 0 0.839004 0.45664 0.435221 0 -0.108193 0.524043 0.797228 0 -0.108193 0.524043 0.797228 0 -0.108193 0.524043 0.797228 0 0.0128731 0.51365 0.61897 0 0.155799 0.498468 0.427295 0 0.167871 0.497927 0.432169 0 0.177893 0.496898 0.434072 0 0.193373 0.49517 0.43441 0 0.225228 0.496765 0.448885 0 0.246191 0.50026 0.459636 0 0.261269 0.50301 0.464524 0 0.277934 0.502021 0.461774 0 0.294016 0.503491 0.471474 0 0.310923 0.504085 0.47731 0 0.333503 0.500948 0.475554 0 0.363821 0.50062 0.45428 0 0.375396 0.500345 0.458413 0 0.387748 0.500383 0.465316 0 0.397907 0.501264 0.471509 0 0.410904 0.503299 0.478857 0 0.422908 0.505165 0.484777 0 0.439103 0.506429 0.485551 0 0.45784 0.507132 0.483281 0 0.479906 0.506594 0.484671 1555.83 0.502404 0.506719 0.485277 1559.39 0.524779 0.506539 0.48265 0 0.553991 0.503892 0.482668 0 0.576794 0.504013 0.484748 0 0.646724 0.505756 0.457745 0 0.707916 0.515785 0.426756 0 0.801606 0.474083 0.437557 0 0.822664 0.471121 0.426841 0 -0.132487 0.552375 0.828158 0 -0.132487 0.552375 0.828158 0 -0.132487 0.552375 0.828158 0 -0.0581747 0.545489 0.74448 0 0.154989 0.521969 0.426342 0 0.166718 0.523095 0.433006 0 0.175592 0.523466 0.436564 0 0.187834 0.52347 0.440437 0 0.226827 0.523804 0.445769 0 0.249439 0.525541 0.457202 0 0.264026 0.528104 0.462966 0 0.278086 0.529886 0.465789 0 0.294543 0.531201 0.472545 0 0.312175 0.531707 0.476708 0 0.332706 0.530914 0.476285 0 0.363648 0.530185 0.455445 0 0.37529 0.529281 0.458386 0 0.387281 0.529026 0.465289 0 0.398295 0.528605 0.470837 0 0.4128 0.52891 0.477672 0 0.424561 0.530999 0.484011 0 0.440445 0.532611 0.484528 0 0.45799 0.532967 0.482304 0 0.477748 0.530685 0.48317 0 0.501486 0.527339 0.483978 0 0.524683 0.526459 0.480571 0 0.548296 0.527266 0.479719 0 0.582769 0.534605 0.480783 0 0.656737 0.53858 0.458451 0 0.695847 0.529377 0.418843 0 0.804093 0.490235 0.443464 0 0.826705 0.480528 0.435753 0 -0.167912 0.588365 0.86886 0 -0.167912 0.588365 0.86886 0 -0.167912 0.588365 0.86886 0 -0.0815566 0.577185 0.766483 0 0.151351 0.550821 0.425662 0 0.166059 0.549399 0.432253 0 0.174875 0.550749 0.436465 0 0.185738 0.552503 0.441646 0 0.228004 0.552479 0.441599 0 0.251391 0.552869 0.454423 0 0.266734 0.554663 0.460887 0 0.280203 0.557855 0.466376 0 0.295837 0.560028 0.474157 0 0.310499 0.561393 0.477513 0 0.330676 0.561825 0.476188 0 0.364014 0.559469 0.456224 0 0.374496 0.558768 0.458555 0 0.385861 0.557034 0.464843 0 0.396384 0.555128 0.470026 0 0.411769 0.552285 0.476216 0 0.426765 0.550633 0.478061 0 0.440422 0.54998 0.479981 0 0.45669 0.550529 0.47975 0 0.475221 0.550779 0.480088 0 0.502773 0.558003 0.48102 0 0.530639 0.567776 0.480908 0 0.552599 0.572699 0.481353 0 0.588788 0.567151 0.482855 0 0.62298 0.550429 0.450152 0 0.697946 0.530881 0.425325 0 0.806689 0.491448 0.45467 0 0.844649 0.530283 0.445797 0 -0.21376 0.625413 0.942398 0 -0.21376 0.625413 0.942398 0 -0.21376 0.625413 0.942398 0 -0.121102 0.615424 0.816998 0 0.128203 0.591513 0.458783 0 0.1635 0.582885 0.430421 0 0.172342 0.580976 0.43517 0 0.18471 0.579894 0.44012 0 0.230928 0.580382 0.43844 0 0.252206 0.583445 0.450587 0 0.26864 0.584139 0.458063 0 0.283962 0.584961 0.46318 0 0.298759 0.583599 0.470719 0 0.309353 0.582908 0.477058 0 0.328235 0.580734 0.473977 0 0.361771 0.575635 0.454169 0 0.370965 0.57463 0.457578 0 0.381618 0.574055 0.463438 0 0.392329 0.573166 0.468499 0 0.408966 0.574131 0.474949 0 0.430492 0.578123 0.473559 0 0.447205 0.584372 0.476844 0 0.462408 0.588445 0.481209 0 0.48045 0.590476 0.483009 0 0.504364 0.588797 0.484726 0 0.530092 0.583048 0.48503 0 0.551531 0.58048 0.486961 0 0.588838 0.579715 0.486354 0 0.616206 0.559023 0.449457 0 0.700462 0.531381 0.432394 0 0.825681 0.550953 0.44936 0 0.84567 0.554477 0.43227 0 -0.433812 0.721675 1.31235 0 -0.433812 0.721675 1.31235 0 -0.433812 0.721675 1.31235 0 -0.252481 0.691846 1.01038 0 -0.0580164 0.657089 0.738757 0 0.0530115 0.647012 0.59614 0 0.0746872 0.64613 0.580201 0 0.0983337 0.646693 0.563053 0 0.21352 0.62572 0.444644 0 0.252117 0.634595 0.447215 0 0.277083 0.645884 0.4464 0 0.292646 0.667863 0.451378 0 0.311117 0.665001 0.461673 0 0.324826 0.661542 0.469878 0 0.333878 0.663172 0.474356 0 0.35237 0.661052 0.465879 0 0.368014 0.657153 0.457061 0 0.378748 0.653287 0.462701 0 0.389668 0.653249 0.467781 0 0.403891 0.65559 0.474539 0 0.417052 0.654858 0.481077 0 0.440905 0.649227 0.476861 0 0.46361 0.643993 0.471947 0 0.473789 0.64083 0.475629 0 0.48791 0.636975 0.476758 0 0.507061 0.632516 0.472441 0 0.528757 0.62691 0.471335 0 0.554888 0.620554 0.467346 0 0.612588 0.612588 0.441448 0 0.721159 0.638634 0.429548 0 0.823486 0.669354 0.452696 0 0.854424 0.67619 0.443584 0 -0.584533 0.781092 1.48552 0 -0.584533 0.781092 1.48552 0 -0.584533 0.781092 1.48552 0 -0.474964 0.772659 1.32671 0 -0.303074 0.757084 1.10562 0 -0.102783 0.748006 0.798112 0 -0.076129 0.744346 0.775375 0 -0.0463986 0.740685 0.747312 0 0.108629 0.728149 0.584668 0 0.218364 0.722442 0.461592 0 0.238854 0.743622 0.471955 0 0.279291 0.72986 0.437534 0 0.324718 0.753368 0.429427 0 0.337347 0.735298 0.43636 0 0.34807 0.73659 0.441473 0 0.356537 0.744364 0.445548 0 0.362703 0.750528 0.448552 0 0.367048 0.740488 0.451605 0 0.371963 0.729568 0.454817 0 0.383057 0.709515 0.461194 0 0.394288 0.697951 0.467028 0 0.405331 0.690393 0.471005 0 0.440503 0.742848 0.47485 0 0.472443 0.772663 0.478321 0 0.504349 0.767152 0.475101 0 0.522703 0.764448 0.480654 0 0.540697 0.760619 0.484845 0 0.57869 0.755272 0.485388 0 0.642713 0.750914 0.455312 0 0.733157 0.733251 0.447837 0 0.777545 0.74464 0.430918 0 0.854941 0.735842 0.452691 0 -0.724205 0.939345 1.7407 0 -0.724205 0.939345 1.7407 0 -0.724205 0.939345 1.7407 0 -0.616667 0.930463 1.58649 0 -0.384231 0.911689 1.25032 0 -0.309705 0.900504 1.19218 0 -0.285888 0.89736 1.17429 0 -0.247381 0.893035 1.13339 0 0.0224631 0.872798 0.714059 0 0.125393 0.858135 0.61367 0 0.170304 0.851259 0.575521 0 0.248199 0.838999 0.476481 0 0.267651 0.832966 0.478932 0 0.282697 0.828861 0.483111 0 0.31948 0.818534 0.463583 0 0.361075 0.810873 0.444335 0 0.370429 0.81302 0.447874 0 0.38204 0.814058 0.453654 0 0.391327 0.818077 0.458566 0 0.40173 0.821013 0.463233 0 0.416966 0.82721 0.464861 0 0.438126 0.834398 0.464116 0 0.45968 0.834902 0.466266 0 0.478285 0.832312 0.473276 0 0.499671 0.829194 0.478035 0 0.524261 0.823441 0.476191 0 0.541837 0.819332 0.475774 0 0.558332 0.818966 0.479654 0 0.637365 0.805554 0.456421 0 0.741368 0.832904 0.448207 0 0.803094 0.859199 0.430885 0 0.82602 0.8541 0.429306 0 -0.806907 0.99259 1.84267 0 -0.806907 0.99259 1.84267 0 -0.806907 0.99259 1.84267 0 -0.731395 0.98046 1.74833 0 -0.48052 0.946962 1.35135 0 -0.369064 0.927297 1.22882 0 -0.348907 0.922164 1.21362 0 -0.326566 0.916183 1.19678 0 -0.20402 0.898669 1.05908 0 0.0429989 0.883906 0.678607 0 0.101859 0.89193 0.625641 0 0.212528 0.893896 0.526594 0 0.266782 0.890881 0.496227 0 0.286298 0.893563 0.500222 0 0.31209 0.891606 0.49223 0 0.351632 0.886746 0.468638 0 0.391018 0.882967 0.432712 0 0.399847 0.886692 0.438996 0 0.40662 0.887752 0.445158 0 0.417182 0.887345 0.453196 0 0.429748 0.887407 0.458136 0 0.442011 0.892702 0.461653 0 0.452661 0.891993 0.464027 0 0.474542 0.884882 0.460246 0 0.490811 0.880418 0.464155 0 0.515607 0.880853 0.469841 0 0.54465 0.886286 0.470835 0 0.573703 0.894522 0.4711 0 0.649059 0.899249 0.453508 0 0.739424 0.900134 0.445604 0 0.802768 0.907529 0.440326 0 0.825304 0.904013 0.426927 0 0.0254773 0.0982577 0.629632 0 0.0254773 0.0982577 0.629632 0 0.0254773 0.0982577 0.629632 0 0.0534542 0.100759 0.600743 0 0.100515 0.104039 0.546609 0 0.164137 0.0990441 0.464098 0 0.181919 0.096515 0.450794 0 0.196574 0.0927742 0.458245 0 0.226509 0.0870016 0.472618 0 0.251456 0.0877566 0.482385 0 0.271057 0.087569 0.48708 0 0.283493 0.0903088 0.489441 0 0.300076 0.0979847 0.485264 0 0.317555 0.0975956 0.491076 0 0.336195 0.0944547 0.50122 0 0.357607 0.0918445 0.503615 0 0.368873 0.091528 0.507406 0 0.394101 0.0923788 0.490638 0 0.413002 0.0914723 0.493879 0 0.423464 0.095709 0.499857 0 0.430294 0.0992177 0.503386 0 0.436636 0.10161 0.505758 0 0.448055 0.100874 0.510271 0 0.469303 0.09803 0.508094 0 0.480943 0.10129 0.499082 0 0.493856 0.106542 0.492696 0 0.555424 0.0952265 0.503978 0 0.572311 0.0981457 0.499492 0 0.643142 0.105539 0.472496 0 0.732899 0.105429 0.468931 0 0.836496 0.0974505 0.477398 0 0.853788 0.100447 0.467331 0 0.0254773 0.0982577 0.629632 0 0.0254773 0.0982577 0.629632 0 0.0254773 0.0982577 0.629632 0 0.0534542 0.100759 0.600743 0 0.100515 0.104039 0.546609 0 0.164137 0.0990441 0.464098 0 0.181919 0.096515 0.450794 0 0.196574 0.0927742 0.458245 0 0.226509 0.0870016 0.472618 0 0.251456 0.0877566 0.482385 0 0.271057 0.087569 0.48708 0 0.283493 0.0903088 0.489441 0 0.300076 0.0979847 0.485264 0 0.317555 0.0975956 0.491076 0 0.336195 0.0944547 0.50122 0 0.357607 0.0918445 0.503615 0 0.368873 0.091528 0.507406 0 0.394101 0.0923788 0.490638 0 0.413002 0.0914723 0.493879 0 0.423464 0.095709 0.499857 0 0.430294 0.0992177 0.503386 0 0.436636 0.10161 0.505758 0 0.448055 0.100874 0.510271 0 0.469303 0.09803 0.508094 0 0.480943 0.10129 0.499082 0 0.493856 0.106542 0.492696 0 0.555424 0.0952265 0.503978 0 0.572311 0.0981457 0.499492 0 0.643142 0.105539 0.472496 0 0.732899 0.105429 0.468931 0 0.836496 0.0974505 0.477398 0 0.853788 0.100447 0.467331 0 0.0254773 0.0982577 0.629632 0 0.0254773 0.0982577 0.629632 0 0.0254773 0.0982577 0.629632 0 0.0534542 0.100759 0.600743 0 0.100515 0.104039 0.546609 0 0.164137 0.0990441 0.464097 0 0.181919 0.096515 0.450794 0 0.196574 0.0927742 0.458245 0 0.226509 0.0870015 0.472618 0 0.251456 0.0877566 0.482385 0 0.271057 0.087569 0.48708 0 0.283493 0.0903088 0.489441 0 0.300076 0.0979847 0.485264 0 0.317555 0.0975956 0.491076 0 0.336195 0.0944547 0.50122 0 0.357607 0.0918445 0.503615 0 0.368873 0.091528 0.507406 0 0.394101 0.0923788 0.490638 0 0.413002 0.0914723 0.493879 0 0.423464 0.0957091 0.499857 0 0.430294 0.0992177 0.503386 0 0.436636 0.10161 0.505758 0 0.448055 0.100874 0.510271 0 0.469303 0.09803 0.508094 0 0.480943 0.10129 0.499082 0 0.493856 0.106542 0.492696 0 0.555424 0.0952265 0.503978 0 0.572311 0.0981457 0.499492 0 0.643142 0.105539 0.472496 0 0.732899 0.105429 0.468931 0 0.836496 0.0974505 0.477398 0 0.853788 0.100447 0.467331 0 0.0338002 0.109751 0.619216 0 0.0338002 0.109751 0.619216 0 0.0338002 0.109751 0.619216 0 0.0581966 0.110349 0.595336 0 0.0919426 0.111508 0.557467 0 0.158584 0.106444 0.469554 0 0.180098 0.103785 0.449896 0 0.193574 0.100477 0.456977 0 0.22537 0.0970656 0.472232 0 0.25194 0.0978344 0.480383 0 0.270711 0.0981535 0.485921 0 0.286334 0.0989751 0.491674 0 0.3025 0.105409 0.487296 0 0.31583 0.107607 0.48979 0 0.334477 0.104357 0.499785 0 0.356592 0.102109 0.502657 0 0.368946 0.101284 0.507166 0 0.392703 0.102227 0.492305 0 0.413312 0.100902 0.494033 0 0.425051 0.10305 0.500645 0 0.431514 0.105349 0.504065 0 0.437311 0.108345 0.505871 0 0.447104 0.108526 0.509549 0 0.469155 0.10517 0.510277 0 0.48271 0.107709 0.499194 0 0.495362 0.112788 0.494026 0 0.55076 0.104487 0.502391 0 0.573602 0.106921 0.500413 0 0.642235 0.115216 0.471819 0 0.730027 0.115317 0.465701 0 0.837382 0.105572 0.478302 0 0.854729 0.108333 0.467694 0 0.0418467 0.121784 0.604869 0 0.0418467 0.121784 0.604869 0 0.0418467 0.121784 0.604869 0 0.0557716 0.122072 0.593365 0 0.0892748 0.122338 0.557791 0 0.156352 0.119027 0.469591 0 0.178438 0.117661 0.448604 0 0.191834 0.117322 0.456575 0 0.224118 0.116403 0.471863 0 0.254187 0.117528 0.476968 0 0.271529 0.117787 0.482906 0 0.287154 0.116746 0.491586 0 0.306866 0.118566 0.490953 0 0.315749 0.124608 0.490075 0 0.332014 0.123751 0.497317 0 0.354311 0.121698 0.500653 0 0.367436 0.120953 0.505705 0 0.392826 0.121684 0.490136 0 0.408776 0.118696 0.491272 0 0.427065 0.116014 0.501609 0 0.434017 0.117906 0.505462 0 0.439991 0.120367 0.507434 0 0.445577 0.123539 0.50821 0 0.46455 0.122178 0.511664 0 0.486858 0.122057 0.499699 0 0.498232 0.127461 0.496589 0 0.546734 0.123619 0.502229 0 0.576557 0.126006 0.501728 0 0.639897 0.131702 0.47012 0 0.723035 0.136718 0.458454 0 0.836164 0.123047 0.478368 0 0.856327 0.123878 0.468412 0 0.0302383 0.136028 0.614765 0 0.0302383 0.136028 0.614765 0 0.0302383 0.136028 0.614765 0 0.0544712 0.135819 0.588569 0 0.0947428 0.136917 0.546361 0 0.157348 0.138559 0.469829 0 0.179529 0.139312 0.44886 0 0.192046 0.14116 0.45655 0 0.223192 0.139258 0.472491 0 0.255388 0.136545 0.472923 0 0.271695 0.137262 0.48009 0 0.286914 0.135816 0.488876 0 0.309764 0.13638 0.492763 0 0.32137 0.140696 0.49533 0 0.330158 0.146421 0.494229 0 0.352035 0.144448 0.498552 0 0.36474 0.142462 0.503411 0 0.39321 0.139569 0.486116 0 0.402955 0.138671 0.487855 0 0.428078 0.131181 0.50216 0 0.436301 0.132743 0.506662 0 0.443693 0.135974 0.509603 0 0.449505 0.140282 0.510451 0 0.462767 0.143188 0.511001 0 0.490888 0.142365 0.501786 0 0.502144 0.150042 0.498661 0 0.542589 0.14575 0.501716 0 0.579165 0.144877 0.503026 0 0.634228 0.151697 0.469494 0 0.717247 0.159912 0.452578 0 0.833875 0.143705 0.477886 0 0.858365 0.142446 0.469441 0 0.0119191 0.149365 0.642943 0 0.0119191 0.149365 0.642943 0 0.0119191 0.149365 0.642943 0 0.0600458 0.146254 0.577811 0 0.100632 0.150766 0.5383 0 0.158892 0.152851 0.470506 0 0.180053 0.152348 0.448932 0 0.192346 0.152922 0.456509 0 0.222488 0.1518 0.472456 0 0.255873 0.14733 0.470626 0 0.271517 0.147985 0.478574 0 0.287004 0.14796 0.487354 0 0.309762 0.149043 0.492118 0 0.3249 0.150257 0.49821 0 0.333692 0.156202 0.497252 0 0.34936 0.156431 0.496743 0 0.362478 0.15374 0.501832 0 0.391473 0.150704 0.484569 0 0.402417 0.149442 0.48705 0 0.420898 0.144516 0.497833 0 0.438094 0.142279 0.507594 0 0.445649 0.145309 0.510676 0 0.451931 0.150075 0.51185 0 0.463687 0.155124 0.511348 0 0.492442 0.154717 0.503635 0 0.503996 0.161138 0.49959 0 0.535351 0.158813 0.497788 0 0.580293 0.152808 0.504422 0 0.63461 0.160957 0.47067 0 0.714443 0.170266 0.449956 0 0.832893 0.15198 0.478169 0 0.858581 0.148685 0.47061 0 -0.00653693 0.160624 0.674637 0 -0.00653693 0.160624 0.674637 0 -0.00653693 0.160624 0.674637 0 0.0661035 0.155991 0.569141 0 0.105523 0.161498 0.531825 0 0.159545 0.161571 0.470742 0 0.180308 0.161635 0.448911 0 0.1925 0.161851 0.456323 0 0.221909 0.159876 0.472445 0 0.254533 0.156848 0.470791 0 0.272188 0.157583 0.477328 0 0.287409 0.157795 0.48634 0 0.309597 0.159218 0.491602 0 0.326782 0.15928 0.499327 0 0.335533 0.162867 0.499726 0 0.347085 0.166023 0.495263 0 0.36061 0.163156 0.50056 0 0.389495 0.160083 0.483844 0 0.402047 0.158464 0.486418 0 0.416161 0.156102 0.494935 0 0.439619 0.150358 0.508404 0 0.447422 0.15444 0.511568 0 0.45422 0.159316 0.513101 0 0.465091 0.164231 0.512342 0 0.493438 0.165049 0.505497 0 0.505276 0.170191 0.500457 0 0.525953 0.171152 0.492591 0 0.576549 0.161668 0.503952 0 0.634916 0.170022 0.471809 0 0.711765 0.178253 0.448522 0 0.831803 0.159356 0.479012 0 0.858838 0.155732 0.47211 0 -0.0559479 0.19767 0.756454 0 -0.0559479 0.19767 0.756454 0 -0.0559479 0.19767 0.756454 0 0.0489535 0.189279 0.597696 0 0.114753 0.188057 0.516575 0 0.159849 0.190143 0.470379 0 0.181406 0.190592 0.44903 0 0.191753 0.190834 0.455382 0 0.222322 0.191372 0.471864 0 0.252472 0.192637 0.471887 0 0.274956 0.191738 0.473607 0 0.289761 0.192319 0.482667 0 0.307943 0.192631 0.48978 0 0.324275 0.190665 0.495632 0 0.337759 0.188847 0.504137 0 0.35324 0.189963 0.502964 0 0.362439 0.192871 0.501823 0 0.386733 0.195495 0.483609 0 0.400055 0.196295 0.483363 0 0.414671 0.194714 0.492543 0 0.427201 0.193226 0.4996 0 0.452362 0.187377 0.51335 0 0.461165 0.189781 0.516513 0 0.468653 0.194548 0.51662 0 0.491976 0.196985 0.508378 0 0.51469 0.199943 0.499447 0 0.52614 0.204858 0.493405 0 0.552288 0.202009 0.49433 0 0.644477 0.196875 0.480461 0 0.717041 0.20635 0.457344 0 0.822045 0.204594 0.468251 0 0.855299 0.198254 0.469715 0 -0.0689073 0.23285 0.764711 0 -0.0689073 0.23285 0.764711 0 -0.0689073 0.23285 0.764711 0 -0.00296649 0.23053 0.679707 0 0.122979 0.224172 0.503612 0 0.16073 0.228122 0.470191 0 0.184194 0.227859 0.450033 0 0.194392 0.230621 0.456274 0 0.222941 0.231798 0.471457 0 0.250442 0.2314 0.47634 0 0.271863 0.229492 0.473197 0 0.28712 0.228065 0.479416 0 0.307437 0.22869 0.484875 0 0.324095 0.228969 0.490778 0 0.33721 0.228059 0.498783 0 0.353534 0.226778 0.502748 0 0.367594 0.225367 0.505116 0 0.392389 0.223949 0.497187 0 0.407182 0.226682 0.487877 0 0.413485 0.232118 0.490291 0 0.425374 0.231907 0.497067 0 0.438715 0.231012 0.503485 0 0.463312 0.225758 0.515564 0 0.47611 0.226243 0.520306 0 0.495946 0.227983 0.51221 0 0.520493 0.228976 0.505469 0 0.530619 0.234974 0.497127 0 0.541989 0.237561 0.4901 0 0.653279 0.231148 0.486693 0 0.717576 0.241319 0.45618 0 0.824811 0.238874 0.466386 0 0.845932 0.238524 0.460987 0 -0.097544 0.257162 0.811159 0 -0.097544 0.257162 0.811159 0 -0.0975437 0.257162 0.811159 0 -0.0171641 0.251938 0.698511 0 0.135769 0.241434 0.486496 0 0.16193 0.246651 0.470574 0 0.185484 0.247492 0.450451 0 0.196361 0.249816 0.456918 0 0.221618 0.251028 0.470951 0 0.250429 0.248557 0.475701 0 0.27016 0.247389 0.473535 0 0.285514 0.246245 0.478925 0 0.30882 0.245702 0.481013 0 0.325065 0.245514 0.487145 0 0.337746 0.244731 0.495605 0 0.35233 0.244399 0.500612 0 0.365397 0.243624 0.503325 0 0.390066 0.240457 0.497394 0 0.410842 0.238706 0.490535 0 0.418153 0.242085 0.49384 0 0.425196 0.244938 0.496787 0 0.43594 0.245247 0.50218 0 0.462389 0.239472 0.514286 0 0.476903 0.23941 0.518792 0 0.496442 0.23995 0.514985 0 0.522564 0.243438 0.509384 0 0.53523 0.252665 0.49873 0 0.546714 0.258042 0.490649 0 0.649664 0.24822 0.48565 0 0.719425 0.258101 0.456125 0 0.826714 0.256527 0.465999 0 0.846047 0.258468 0.458716 0 -0.135586 0.279155 0.865499 0 -0.135586 0.279155 0.865499 0 -0.135586 0.279155 0.865499 0 -0.0171244 0.267398 0.691519 0 0.147411 0.256409 0.471129 0 0.163244 0.263988 0.471051 0 0.18678 0.267006 0.450875 0 0.197908 0.266662 0.45694 0 0.220414 0.267324 0.470407 0 0.250405 0.262149 0.474 0 0.268502 0.261069 0.474264 0 0.284159 0.259602 0.479367 0 0.3094 0.256877 0.478367 0 0.324826 0.25672 0.485378 0 0.337975 0.256377 0.493506 0 0.351701 0.256444 0.500262 0 0.363412 0.255847 0.502203 0 0.385177 0.253282 0.500151 0 0.409481 0.251071 0.489674 0 0.422541 0.252327 0.497079 0 0.428502 0.259572 0.498789 0 0.436628 0.263316 0.501756 0 0.454663 0.2609 0.509178 0 0.478775 0.258025 0.514129 0 0.497322 0.257894 0.515456 0 0.525713 0.259743 0.511737 0 0.539388 0.267192 0.499986 0 0.549348 0.272818 0.491679 0 0.645163 0.262412 0.482449 0 0.721312 0.271765 0.458017 0 0.828749 0.27089 0.467498 0 0.848304 0.274286 0.458647 0 -0.1662 0.307715 0.900759 0 -0.1662 0.307715 0.900759 0 -0.1662 0.307715 0.900759 0 -0.0469596 0.292148 0.740304 0 0.123616 0.282865 0.51146 0 0.166646 0.2822 0.467495 0 0.18174 0.283446 0.456424 0 0.197153 0.280724 0.457013 0 0.219083 0.279955 0.469525 0 0.248572 0.275767 0.47409 0 0.266639 0.275209 0.475926 0 0.281671 0.274752 0.480652 0 0.310687 0.274248 0.476972 0 0.326977 0.277085 0.481149 0 0.340316 0.277431 0.489442 0 0.353562 0.278401 0.49727 0 0.363143 0.280565 0.501237 0 0.383623 0.281456 0.497375 0 0.407975 0.280816 0.487374 0 0.424725 0.278733 0.497398 0 0.434526 0.280557 0.502407 0 0.439758 0.285621 0.503051 0 0.449092 0.287518 0.505375 0 0.480341 0.282212 0.507746 0 0.497639 0.282112 0.51138 0 0.529086 0.278997 0.515262 0 0.543573 0.284369 0.502928 0 0.552447 0.29106 0.495005 0 0.634903 0.286197 0.471447 0 0.724574 0.295636 0.461139 0 0.833942 0.290017 0.474035 0 0.851462 0.297919 0.458063 0 -0.182142 0.33566 0.92118 0 -0.182142 0.33566 0.92118 0 -0.182142 0.33566 0.92118 0 -0.111941 0.326605 0.844369 0 0.088121 0.305106 0.558938 0 0.165759 0.30119 0.465796 0 0.184143 0.304078 0.449545 0 0.196326 0.30463 0.456041 0 0.220392 0.30501 0.469395 0 0.244552 0.306762 0.475522 0 0.269774 0.306106 0.473425 0 0.282626 0.30795 0.479975 0 0.310291 0.306352 0.478077 0 0.329366 0.305951 0.480453 0 0.34141 0.306263 0.487783 0 0.354099 0.306259 0.495558 0 0.363016 0.307241 0.499801 0 0.380865 0.307102 0.495388 0 0.404539 0.305332 0.484851 0 0.422132 0.30318 0.495115 0 0.436131 0.301711 0.503186 0 0.445714 0.303281 0.507442 0 0.451718 0.308398 0.507071 0 0.471673 0.309513 0.501785 0 0.498926 0.30634 0.507046 0 0.52361 0.304931 0.513982 0 0.548741 0.304381 0.505834 0 0.556231 0.310631 0.498482 0 0.634426 0.311772 0.466234 0 0.727385 0.317148 0.465931 0 0.835264 0.310653 0.475515 0 0.854775 0.315244 0.46271 0 -0.208417 0.352214 0.958978 0 -0.208417 0.352214 0.958978 0 -0.208417 0.352214 0.958978 0 -0.137109 0.347798 0.871086 0 0.0704052 0.326611 0.575736 0 0.169193 0.320922 0.45985 0 0.184664 0.324221 0.448467 0 0.196244 0.326207 0.455575 0 0.221306 0.326537 0.470196 0 0.243645 0.32746 0.476317 0 0.269894 0.324448 0.472993 0 0.283937 0.324541 0.479386 0 0.307736 0.323301 0.480307 0 0.329032 0.321538 0.480169 0 0.341905 0.321015 0.487061 0 0.354134 0.321408 0.494321 0 0.362931 0.322823 0.498646 0 0.379921 0.323652 0.49477 0 0.402369 0.322659 0.483258 0 0.420299 0.320606 0.493767 0 0.434759 0.319199 0.501895 0 0.448252 0.318442 0.508833 0 0.455868 0.321839 0.51039 0 0.470465 0.326531 0.502647 0 0.499422 0.324482 0.504172 0 0.518628 0.324824 0.511065 0 0.552456 0.32088 0.50737 0 0.560527 0.326625 0.500238 0 0.642112 0.328268 0.472506 0 0.72908 0.331026 0.469504 0 0.83272 0.330185 0.472563 0 0.857301 0.329586 0.467246 0 -0.259087 0.380654 1.04164 0 -0.259087 0.380654 1.04164 0 -0.259087 0.380654 1.04164 0 -0.147545 0.371102 0.878418 0 0.0680257 0.346861 0.569963 0 0.176665 0.338505 0.449718 0 0.185762 0.34155 0.44881 0 0.196639 0.344159 0.455473 0 0.221716 0.345413 0.470926 0 0.243847 0.344262 0.475657 0 0.266634 0.342769 0.474124 0 0.284768 0.34089 0.47868 0 0.304349 0.341162 0.483075 0 0.3281 0.339226 0.47974 0 0.341329 0.338819 0.486852 0 0.354796 0.338594 0.493552 0 0.363139 0.340792 0.497395 0 0.380233 0.342747 0.493314 0 0.400589 0.34291 0.481739 0 0.417892 0.341133 0.491954 0 0.433281 0.339507 0.500582 0 0.448251 0.33821 0.508212 0 0.459403 0.338762 0.5127 0 0.474245 0.342747 0.507657 0 0.499874 0.346296 0.501656 0 0.517671 0.347015 0.507826 0 0.555316 0.343129 0.510012 0 0.565526 0.3455 0.502611 0 0.650315 0.344246 0.478866 0 0.730766 0.34896 0.471396 0 0.831215 0.351719 0.470946 0 0.859999 0.349991 0.467866 0 -0.338714 0.402038 1.18488 0 -0.338714 0.402038 1.18488 0 -0.338714 0.402038 1.18488 0 -0.15777 0.385998 0.887661 0 0.0516943 0.363432 0.592781 0 0.180156 0.351919 0.445151 0 0.18605 0.354893 0.448731 0 0.196625 0.356836 0.45522 0 0.222233 0.358233 0.470998 0 0.243976 0.3573 0.475088 0 0.26334 0.357246 0.476302 0 0.283714 0.355216 0.479502 0 0.303085 0.356457 0.48366 0 0.327496 0.354582 0.47943 0 0.341049 0.354156 0.486684 0 0.354521 0.353945 0.493559 0 0.364309 0.355072 0.496827 0 0.380795 0.358036 0.491662 0 0.400086 0.358458 0.480938 0 0.416534 0.357426 0.49068 0 0.432357 0.356026 0.499666 0 0.447413 0.355156 0.507276 0 0.460745 0.355212 0.512749 0 0.476669 0.355744 0.512278 0 0.503702 0.358914 0.504933 0 0.518184 0.363348 0.50533 0 0.551598 0.36067 0.510108 0 0.569785 0.359372 0.503203 0 0.654644 0.35626 0.481869 0 0.732244 0.363774 0.472352 0 0.831981 0.366195 0.472127 0 0.861032 0.367619 0.467019 0 -0.414223 0.423368 1.32304 0 -0.414223 0.423368 1.32304 0 -0.414223 0.423368 1.32304 0 -0.187431 0.403777 0.933739 0 0.0150512 0.382147 0.652574 0 0.168679 0.368725 0.458591 0 0.186213 0.369339 0.448553 0 0.196882 0.371601 0.454406 0 0.223266 0.373227 0.470763 0 0.243641 0.374403 0.476442 0 0.263108 0.374316 0.476154 0 0.281482 0.37349 0.48013 0 0.304038 0.372919 0.483081 0 0.32655 0.372129 0.479263 0 0.340464 0.371392 0.486467 0 0.354189 0.370971 0.49354 0 0.365979 0.370864 0.496112 0 0.384142 0.374561 0.487845 0 0.400484 0.37633 0.480625 0 0.415521 0.375978 0.489481 0 0.431214 0.374818 0.498402 0 0.446924 0.373722 0.506503 0 0.461874 0.373028 0.512683 0 0.475238 0.374072 0.513021 0 0.507994 0.371446 0.508654 0 0.519137 0.378598 0.502913 0 0.547479 0.377896 0.507891 0 0.573753 0.374698 0.503337 0 0.659185 0.370387 0.485008 0 0.734527 0.379971 0.473206 0 0.833317 0.382796 0.473722 0 0.861054 0.385636 0.466482 0 -0.422974 0.437101 1.3304 0 -0.422974 0.437101 1.3304 0 -0.422974 0.437101 1.3304 0 -0.232618 0.420481 1.01025 0 -0.0503293 0.401582 0.765348 0 0.160626 0.383246 0.467138 0 0.186658 0.381803 0.448588 0 0.197698 0.384459 0.453883 0 0.224432 0.38646 0.470567 0 0.243478 0.388884 0.478385 0 0.263514 0.387986 0.47554 0 0.279825 0.388114 0.4808 0 0.304928 0.386059 0.482687 0 0.324699 0.386847 0.481349 0 0.339888 0.386385 0.486488 0 0.353879 0.386006 0.49375 0 0.367045 0.385021 0.495569 0 0.387391 0.388356 0.484419 0 0.401374 0.390635 0.480833 0 0.414721 0.391318 0.488496 0 0.430179 0.389785 0.497304 0 0.44587 0.387878 0.505525 0 0.461301 0.38634 0.511955 0 0.475999 0.386304 0.512192 0 0.510588 0.381205 0.51155 0 0.522729 0.388141 0.506551 0 0.544443 0.392132 0.506212 0 0.575437 0.388522 0.504916 0 0.663107 0.382388 0.487681 0 0.736479 0.393615 0.473663 0 0.835306 0.394942 0.476187 0 0.861652 0.397817 0.467607 0 -0.432557 0.453561 1.33724 0 -0.432557 0.453561 1.33724 0 -0.432557 0.453561 1.33724 0 -0.313531 0.443104 1.15791 0 -0.0826367 0.423699 0.812219 0 0.158611 0.400854 0.465555 0 0.188525 0.397072 0.44871 0 0.198812 0.400738 0.453436 0 0.22563 0.402201 0.470115 0 0.243481 0.406476 0.480415 0 0.263916 0.404867 0.474997 0 0.279927 0.405408 0.48036 0 0.305743 0.403235 0.482872 0 0.323826 0.404814 0.482527 0 0.338937 0.404853 0.48728 0 0.353421 0.404538 0.494119 0 0.366325 0.403084 0.496529 0 0.391544 0.404292 0.479656 0 0.40203 0.406295 0.480878 0 0.414248 0.406393 0.487664 0 0.428241 0.405008 0.495636 0 0.444256 0.402989 0.504121 0 0.460033 0.401346 0.51083 0 0.477268 0.400947 0.510847 0 0.502933 0.399152 0.507647 0 0.528096 0.400415 0.51194 0 0.543209 0.410074 0.503822 0 0.576608 0.406488 0.506438 0 0.637715 0.407141 0.472028 0 0.738593 0.409685 0.474367 0 0.838488 0.408704 0.480321 0 0.861041 0.410397 0.468556 0 -0.440678 0.47208 1.34267 0 -0.440678 0.47208 1.34267 0 -0.440678 0.47208 1.34267 0 -0.383719 0.46657 1.28793 0 -0.087607 0.440176 0.816728 0 0.156107 0.417158 0.463695 0 0.190375 0.411669 0.4485 0 0.200095 0.415938 0.453559 0 0.226366 0.418385 0.469474 0 0.245204 0.422808 0.480041 0 0.261877 0.423364 0.478784 0 0.28049 0.422812 0.479969 0 0.305553 0.421527 0.484136 0 0.325359 0.421586 0.48076 0 0.338491 0.421569 0.487487 0 0.352386 0.421229 0.49418 0 0.365478 0.419014 0.496461 0 0.393128 0.417977 0.477601 0 0.40191 0.42011 0.480541 0 0.414358 0.420132 0.487328 0 0.426228 0.419887 0.49399 0 0.442206 0.418049 0.502527 0 0.458951 0.417365 0.509847 0 0.479294 0.4173 0.509931 0 0.499231 0.418844 0.506575 0 0.53278 0.415582 0.515065 0 0.549074 0.424263 0.50895 0 0.573187 0.42729 0.505082 0 0.619708 0.43039 0.467503 0 0.739693 0.426507 0.475749 0 0.841609 0.424938 0.483905 0 0.860066 0.421949 0.469967 0 -0.45734 0.497134 1.36109 0 -0.45734 0.497134 1.36109 0 -0.45734 0.497134 1.36109 0 -0.399543 0.490352 1.30833 0 -0.0952336 0.462173 0.824867 0 0.151524 0.436945 0.462688 0 0.189058 0.433975 0.449064 0 0.201996 0.435769 0.453888 0 0.227413 0.438884 0.468185 0 0.247639 0.442106 0.47876 0 0.260822 0.443719 0.483084 0 0.278951 0.442451 0.481177 0 0.302292 0.44119 0.485279 0 0.327042 0.438222 0.478562 0 0.339215 0.438322 0.485571 0 0.352007 0.438112 0.493599 0 0.363705 0.436662 0.496536 0 0.393844 0.433493 0.476637 0 0.402473 0.436779 0.479823 0 0.415058 0.437963 0.487098 0 0.42636 0.439273 0.493569 0 0.441315 0.439602 0.501339 0 0.458553 0.439063 0.508987 0 0.479903 0.439027 0.508765 0 0.499389 0.440601 0.506379 0 0.533763 0.436579 0.512069 0 0.555626 0.440508 0.515527 0 0.572915 0.448211 0.504845 0 0.620625 0.447902 0.468145 0 0.740535 0.44424 0.478819 0 0.83425 0.437921 0.480047 0 0.85903 0.431068 0.472308 0 -0.511955 0.522356 1.44689 0 -0.511955 0.522356 1.44689 0 -0.511955 0.522356 1.44689 0 -0.410176 0.509994 1.31437 0 -0.110304 0.48453 0.841684 0 0.124915 0.460012 0.501351 0 0.186806 0.454954 0.44727 0 0.20477 0.453784 0.452632 0 0.227559 0.456462 0.467239 0 0.249339 0.457463 0.476566 0 0.261739 0.459408 0.482448 0 0.27547 0.460025 0.484932 0 0.301383 0.457694 0.484559 0 0.325452 0.455527 0.481014 0 0.339278 0.455313 0.485059 0 0.352218 0.455613 0.493108 0 0.362555 0.456115 0.496871 0 0.393194 0.453086 0.476752 0 0.403777 0.455442 0.479493 0 0.416812 0.457134 0.486851 0 0.428083 0.458655 0.493728 0 0.441498 0.459886 0.501027 0 0.45794 0.45973 0.508057 0 0.479794 0.459139 0.508065 0 0.501463 0.459655 0.505976 0 0.528563 0.458074 0.508318 0 0.55849 0.457859 0.515984 0 0.575241 0.462742 0.508941 0 0.626008 0.463938 0.46597 0 0.74258 0.46438 0.480796 0 0.822608 0.450312 0.472985 0 0.857078 0.437816 0.473829 0 -0.579243 0.551148 1.55856 0 -0.579243 0.551148 1.55856 0 -0.579243 0.551148 1.55856 0 -0.428074 0.533834 1.32777 0 -0.171749 0.511016 0.938743 0 0.0377262 0.489881 0.650416 0 0.18082 0.475193 0.44672 0 0.207108 0.470853 0.450318 0 0.228655 0.473701 0.46564 0 0.251879 0.474946 0.472975 0 0.264991 0.477838 0.478512 0 0.276516 0.479993 0.484384 0 0.30132 0.479023 0.484112 0 0.322082 0.47812 0.486064 0 0.337306 0.477723 0.489082 0 0.351235 0.477713 0.494608 0 0.362791 0.477672 0.496834 0 0.392583 0.475599 0.477682 0 0.405891 0.475858 0.479169 0 0.418538 0.477994 0.486665 0 0.430053 0.479374 0.493683 0 0.442186 0.480984 0.500836 0 0.457414 0.481517 0.507536 0 0.479504 0.481276 0.50732 1555.84 0.503747 0.480723 0.505518 1559.32 0.522325 0.48139 0.506445 0 0.559811 0.478069 0.513257 0 0.577823 0.479162 0.513561 0 0.616743 0.487064 0.464734 0 0.742772 0.481811 0.481016 0 0.808632 0.464052 0.464448 0 0.849166 0.449427 0.469117 0 -0.594421 0.577507 1.57007 0 -0.594421 0.577507 1.57007 0 -0.594421 0.577507 1.57007 0 -0.475932 0.568258 1.38975 0 -0.249244 0.54402 1.06995 0 -0.0140285 0.520971 0.731223 0 0.170403 0.498484 0.446518 0 0.20385 0.494578 0.450173 0 0.232609 0.494593 0.463261 0 0.2554 0.497649 0.469439 0 0.269104 0.500584 0.473876 0 0.280919 0.502436 0.480078 0 0.299275 0.50431 0.485355 0 0.319603 0.503742 0.488005 0 0.334804 0.504017 0.495018 0 0.348061 0.504719 0.500893 0 0.364211 0.502978 0.496933 0 0.384866 0.503026 0.49014 0 0.407797 0.500751 0.47888 0 0.420882 0.502576 0.486131 0 0.432204 0.503612 0.493271 0 0.443729 0.505055 0.500307 0 0.457367 0.506229 0.507267 0 0.478957 0.505934 0.506994 1559.32 0.503111 0.505474 0.504291 9455.09 0.521439 0.505917 0.505962 1596.71 0.560227 0.501183 0.509684 0 0.576795 0.5006 0.512153 0 0.635353 0.504381 0.472017 0 0.741459 0.498013 0.482384 0 0.794727 0.477624 0.459021 0 0.837534 0.469562 0.462901 0 -0.626264 0.606714 1.62074 0 -0.626264 0.606714 1.62074 0 -0.626264 0.606714 1.62074 0 -0.554242 0.603795 1.52749 0 -0.329548 0.57748 1.2149 0 -0.0292399 0.548023 0.749567 0 0.157067 0.528592 0.462141 0 0.198856 0.523406 0.449687 0 0.236807 0.519138 0.45963 0 0.258338 0.522614 0.466749 0 0.273204 0.525202 0.471021 0 0.284384 0.52771 0.477232 0 0.299093 0.531445 0.484993 0 0.320815 0.531568 0.486702 0 0.336864 0.53154 0.491895 0 0.350642 0.531732 0.498411 0 0.363717 0.53226 0.497839 0 0.378506 0.531634 0.500445 0 0.407097 0.528625 0.479154 0 0.422904 0.527958 0.485077 0 0.434405 0.528846 0.492163 0 0.44577 0.530033 0.499325 0 0.457498 0.530856 0.505761 0 0.476818 0.528691 0.506476 0 0.500829 0.525924 0.502861 1596.85 0.522037 0.52376 0.503633 1595.12 0.555988 0.522072 0.503163 0 0.581821 0.529376 0.507851 0 0.648162 0.541671 0.477567 0 0.726953 0.516105 0.473359 0 0.79613 0.496205 0.463313 0 0.834 0.481459 0.466089 0 -0.693795 0.639025 1.74204 0 -0.693795 0.639025 1.74204 0 -0.693795 0.639025 1.74204 0 -0.541546 0.626552 1.49485 0 -0.365585 0.608814 1.2701 0 -0.052574 0.580543 0.779583 0 0.0405039 0.573042 0.668069 0 0.196126 0.552017 0.447649 0 0.232978 0.54885 0.460922 0 0.262122 0.548558 0.463726 0 0.277179 0.551305 0.469577 0 0.288662 0.554313 0.474893 0 0.302726 0.558332 0.482635 0 0.319923 0.560379 0.485699 0 0.337783 0.559415 0.488345 0 0.354507 0.55852 0.493406 0 0.363241 0.558737 0.496994 0 0.379944 0.556212 0.496773 0 0.40443 0.553743 0.478682 0 0.420457 0.550567 0.484064 0 0.432728 0.548486 0.490456 0 0.445214 0.546578 0.496564 0 0.456186 0.547689 0.502427 0 0.475078 0.550153 0.503185 0 0.503178 0.558453 0.501804 0 0.529463 0.568206 0.502115 0 0.555711 0.574199 0.502119 0 0.590198 0.571494 0.507911 0 0.62156 0.5569 0.476953 0 0.714844 0.529479 0.465569 0 0.799394 0.497152 0.4746 0 0.845251 0.532115 0.47008 0 -0.717864 0.665798 1.77462 0 -0.717864 0.665798 1.77462 0 -0.717864 0.665798 1.77462 0 -0.612115 0.658035 1.62123 0 -0.394564 0.644226 1.29547 0 -0.0985437 0.616404 0.851147 0 0.0269964 0.602332 0.686645 0 0.193272 0.582442 0.44707 0 0.227781 0.580172 0.454202 0 0.264249 0.577448 0.461328 0 0.279778 0.579876 0.467695 0 0.292196 0.581006 0.473183 0 0.305305 0.58113 0.479943 0 0.316064 0.581845 0.483447 0 0.332074 0.579115 0.486753 0 0.348504 0.576083 0.491142 0 0.361284 0.573767 0.494424 0 0.373576 0.573559 0.498283 0 0.400431 0.575242 0.478214 0 0.419123 0.57784 0.483789 0 0.433956 0.582159 0.491211 0 0.449382 0.58765 0.498454 0 0.468629 0.59435 0.497449 0 0.484617 0.599096 0.502216 0 0.506256 0.594572 0.504911 0 0.529296 0.589245 0.507846 0 0.552025 0.585942 0.506209 0 0.588861 0.576649 0.511321 0 0.607867 0.563173 0.4754 0 0.714436 0.530128 0.469784 0 0.816602 0.550038 0.471458 0 0.839023 0.554295 0.453726 0 -0.825792 0.764498 1.92327 0 -0.825792 0.764498 1.92327 0 -0.825792 0.764498 1.92327 0 -0.728859 0.755806 1.78856 0 -0.500403 0.735188 1.45728 0 -0.325594 0.711314 1.22904 0 -0.100002 0.676834 0.858158 0 0.0718103 0.649884 0.635127 0 0.165788 0.650932 0.563072 0 0.241247 0.645047 0.472388 0 0.274672 0.641979 0.459516 0 0.302862 0.65111 0.4606 0 0.322793 0.655788 0.470115 0 0.333049 0.658941 0.474925 0 0.341705 0.65885 0.479822 0 0.35272 0.657753 0.48568 0 0.360283 0.6572 0.489431 0 0.37193 0.65292 0.494172 0 0.394686 0.648211 0.477836 0 0.414544 0.655444 0.481323 0 0.426837 0.65137 0.488253 0 0.440084 0.647012 0.495483 0 0.453347 0.64283 0.500881 0 0.475533 0.638184 0.49203 0 0.490372 0.634471 0.490589 0 0.504102 0.63038 0.494014 0 0.527392 0.624015 0.493528 0 0.554103 0.616515 0.494006 0 0.608493 0.612 0.462746 0 0.739184 0.635499 0.471607 0 0.815768 0.656839 0.474345 0 0.840916 0.642184 0.467938 0 -1.05604 0.838314 2.2533 0 -1.05604 0.838314 2.2533 0 -1.05604 0.838314 2.2533 0 -0.952104 0.810459 2.09411 0 -0.733153 0.783516 1.76935 0 -0.484702 0.76397 1.41243 0 -0.360872 0.753124 1.243 0 -0.106279 0.740547 0.858723 0 0.0494671 0.731568 0.680266 0 0.148448 0.74321 0.589342 0 0.234083 0.75364 0.505336 0 0.274717 0.773296 0.494866 0 0.303147 0.790062 0.506583 0 0.342351 0.728565 0.440618 0 0.351166 0.720026 0.444069 0 0.356513 0.709638 0.447746 0 0.361 0.701736 0.451509 0 0.367929 0.693955 0.455248 0 0.375229 0.690731 0.458765 0 0.388424 0.688031 0.465028 0 0.397096 0.673948 0.470028 0 0.414279 0.695275 0.47879 0 0.441992 0.745775 0.4917 0 0.474689 0.770355 0.496625 0 0.500251 0.768119 0.498853 0 0.524294 0.76331 0.49874 0 0.545036 0.76079 0.502831 0 0.580312 0.75766 0.510875 0 0.630813 0.748712 0.476313 0 0.722709 0.734185 0.471685 0 0.792613 0.735246 0.471599 0 0.85279 0.73092 0.47689 0 -1.1927 1.00147 2.50505 0 -1.1927 1.00147 2.50505 0 -1.1927 1.00147 2.50505 0 -1.03356 0.982876 2.2407 0 -0.846544 0.957213 1.98604 0 -0.62111 0.925261 1.66374 0 -0.447016 0.911384 1.40359 0 -0.268011 0.894296 1.1632 0 -0.179519 0.880364 1.09318 0 0.0206402 0.866939 0.781784 0 0.126955 0.85576 0.643763 0 0.198143 0.846487 0.563184 0 0.248592 0.839071 0.516687 0 0.290191 0.827192 0.496579 0 0.316412 0.821008 0.499943 0 0.336183 0.816513 0.508298 0 0.348196 0.816 0.51131 0 0.388346 0.81021 0.463698 0 0.397312 0.816406 0.465529 0 0.411796 0.820674 0.468291 0 0.427038 0.829117 0.473976 0 0.444748 0.831506 0.482422 0 0.459443 0.832544 0.49057 0 0.482263 0.829948 0.485337 0 0.502522 0.828888 0.487133 0 0.523918 0.826628 0.488353 0 0.543023 0.825061 0.491833 0 0.566655 0.818806 0.492799 0 0.629369 0.809961 0.47833 0 0.747399 0.822333 0.477441 0 0.810128 0.855688 0.45977 0 0.84643 0.845492 0.471347 0 -1.463 1.0499 2.99173 0 -1.463 1.0499 2.99173 0 -1.463 1.0499 2.99173 0 -1.24234 1.03016 2.59728 0 -0.973285 1.00133 2.16682 0 -0.718718 0.969034 1.77302 0 -0.616389 0.95231 1.64882 0 -0.3608 0.918616 1.23651 0 -0.250518 0.898826 1.14471 0 -0.189121 0.904215 1.09354 0 -0.0496134 0.923469 0.947527 0 0.142116 0.919029 0.651242 0 0.206329 0.915587 0.595917 0 0.29191 0.899779 0.506557 0 0.312908 0.894489 0.514102 0 0.329994 0.893991 0.518231 0 0.343101 0.893841 0.520044 0 0.370506 0.889021 0.508963 0 0.406458 0.880538 0.471939 0 0.425121 0.882886 0.462166 0 0.436213 0.884616 0.466669 0 0.446582 0.885407 0.4723 0 0.457169 0.880659 0.480665 0 0.468607 0.875948 0.48827 0 0.491147 0.863609 0.484231 0 0.517704 0.87104 0.4833 0 0.546192 0.883912 0.481585 0 0.576355 0.893512 0.485288 0 0.639672 0.898948 0.476109 0 0.748989 0.905088 0.478717 0 0.794368 0.910944 0.459836 0 0.842644 0.900889 0.466167 0 -0.400643 0.131456 1.3464 0 -0.400643 0.131456 1.3464 0 -0.400643 0.131456 1.3464 0 -0.18506 0.115309 0.972736 0 -0.0331011 0.104411 0.800334 0 0.0362169 0.101614 0.70839 0 0.0596851 0.101431 0.68594 0 0.15572 0.0935483 0.55593 0 0.23773 0.0850748 0.483345 0 0.264475 0.0823693 0.496684 0 0.272313 0.0891334 0.499109 0 0.281712 0.095913 0.499276 0 0.306319 0.096032 0.502603 0 0.327157 0.0933458 0.514018 0 0.346961 0.0907848 0.517109 0 0.363262 0.0905078 0.519853 0 0.370576 0.0937279 0.521292 0 0.378 0.0977654 0.524052 0 0.395614 0.0977189 0.525716 0 0.4175 0.0979332 0.529416 0 0.436308 0.100042 0.508511 0 0.442642 0.100723 0.51299 0 0.456272 0.0985825 0.520529 0 0.4645 0.0988694 0.521953 0 0.471787 0.105099 0.520035 0 0.488016 0.110986 0.506623 0 0.554124 0.0958928 0.527258 0 0.569581 0.0949774 0.526092 0 0.627862 0.106352 0.493032 0 0.755366 0.101214 0.509575 0 0.826346 0.0994626 0.503686 0 0.848452 0.102028 0.492886 0 -0.400643 0.131456 1.3464 0 -0.400643 0.131456 1.3464 0 -0.400643 0.131456 1.3464 0 -0.18506 0.115309 0.972736 0 -0.0331011 0.104411 0.800334 0 0.0362169 0.101614 0.70839 0 0.0596851 0.101431 0.68594 0 0.15572 0.0935483 0.55593 0 0.23773 0.0850748 0.483345 0 0.264475 0.0823693 0.496684 0 0.272313 0.0891334 0.499109 0 0.281712 0.095913 0.499276 0 0.306319 0.096032 0.502603 0 0.327157 0.0933458 0.514018 0 0.346961 0.0907848 0.517109 0 0.363262 0.0905078 0.519853 0 0.370576 0.0937279 0.521292 0 0.378 0.0977654 0.524052 0 0.395614 0.0977189 0.525716 0 0.4175 0.0979332 0.529416 0 0.436308 0.100042 0.508511 0 0.442642 0.100723 0.51299 0 0.456272 0.0985825 0.520529 0 0.4645 0.0988694 0.521953 0 0.471787 0.105099 0.520035 0 0.488016 0.110986 0.506623 0 0.554124 0.0958928 0.527258 0 0.569581 0.0949774 0.526092 0 0.627862 0.106352 0.493032 0 0.755366 0.101214 0.509575 0 0.826346 0.0994626 0.503686 0 0.848452 0.102028 0.492886 0 -0.400643 0.131456 1.3464 0 -0.400643 0.131456 1.3464 0 -0.400643 0.131456 1.3464 0 -0.18506 0.115309 0.972736 0 -0.0331011 0.104411 0.800334 0 0.0362169 0.101614 0.70839 0 0.0596849 0.101431 0.68594 0 0.15572 0.0935483 0.55593 0 0.23773 0.0850749 0.483345 0 0.264475 0.0823694 0.496684 0 0.272313 0.0891334 0.499109 0 0.281712 0.095913 0.499276 0 0.306319 0.096032 0.502603 0 0.327157 0.0933459 0.514018 0 0.346961 0.0907848 0.517109 0 0.363262 0.0905078 0.519853 0 0.370576 0.0937279 0.521292 0 0.378 0.0977654 0.524052 0 0.395614 0.097719 0.525716 0 0.4175 0.0979332 0.529416 0 0.436308 0.100042 0.508511 0 0.442642 0.100723 0.51299 0 0.456272 0.0985825 0.520529 0 0.4645 0.0988694 0.521953 0 0.471787 0.105099 0.520035 0 0.488016 0.110986 0.506623 0 0.554124 0.0958928 0.527258 0 0.569581 0.0949774 0.526092 0 0.627862 0.106352 0.493032 0 0.755366 0.101214 0.509575 0 0.826346 0.0994626 0.503686 0 0.848452 0.102028 0.492886 0 -0.403421 0.144202 1.34666 0 -0.403421 0.144202 1.34666 0 -0.403421 0.144202 1.34666 0 -0.244955 0.133938 1.07837 0 -0.0413654 0.113503 0.80813 0 0.0378602 0.108252 0.703336 0 0.0619431 0.108191 0.677731 0 0.153582 0.100807 0.553579 0 0.236726 0.0957117 0.482686 0 0.264098 0.0928919 0.495513 0 0.276019 0.0970994 0.500514 0 0.284842 0.105547 0.500145 0 0.305359 0.106739 0.501413 0 0.325163 0.103724 0.512338 0 0.345406 0.10135 0.51598 0 0.364142 0.0997733 0.520022 0 0.372291 0.102127 0.522375 0 0.379619 0.105419 0.525205 0 0.396181 0.105954 0.526153 0 0.418618 0.104521 0.530797 0 0.436762 0.107122 0.508436 0 0.443279 0.107788 0.512932 0 0.455425 0.106124 0.519974 0 0.465433 0.106176 0.522703 0 0.473006 0.111007 0.521798 0 0.489324 0.118306 0.507764 0 0.548929 0.10568 0.524941 0 0.571813 0.103794 0.526014 0 0.632114 0.11458 0.495976 0 0.75589 0.108717 0.509961 0 0.827436 0.107483 0.504097 0 0.848445 0.110274 0.493288 0 -0.411661 0.161922 1.35148 0 -0.411661 0.161922 1.35148 0 -0.411661 0.161922 1.35148 0 -0.322359 0.154326 1.21608 0 -0.0617444 0.127177 0.823771 0 0.0411103 0.11895 0.694137 0 0.0680648 0.118805 0.661592 0 0.140775 0.117928 0.568985 0 0.235665 0.115936 0.48197 0 0.262876 0.114548 0.494956 0 0.281923 0.112333 0.50254 0 0.290246 0.118318 0.503213 0 0.303761 0.124732 0.499563 0 0.322401 0.122563 0.509842 0 0.34261 0.120707 0.513848 0 0.364018 0.118547 0.517647 0 0.37551 0.117822 0.523573 0 0.382697 0.121075 0.527623 0 0.395607 0.121062 0.526113 0 0.420376 0.117048 0.533492 0 0.439412 0.11941 0.510123 0 0.444931 0.12153 0.512958 0 0.453605 0.122173 0.518752 0 0.46734 0.121629 0.524503 0 0.476777 0.124901 0.524394 0 0.49272 0.132984 0.510857 0 0.538096 0.12863 0.520451 0 0.577331 0.124489 0.525772 0 0.630969 0.131246 0.495491 0 0.757298 0.125114 0.510764 0 0.829635 0.123596 0.504758 0 0.849615 0.126005 0.495051 0 -0.432912 0.181906 1.36867 0 -0.432912 0.181906 1.36867 0 -0.432912 0.181906 1.36867 0 -0.353851 0.172096 1.26508 0 -0.0771582 0.141891 0.830491 0 0.058044 0.135095 0.665407 0 0.0836455 0.140222 0.638644 0 0.12453 0.144684 0.595467 0 0.233928 0.138774 0.481278 0 0.260361 0.135549 0.494388 0 0.279562 0.133051 0.501856 0 0.296934 0.132115 0.50536 0 0.309321 0.140339 0.503167 0 0.320541 0.144594 0.50702 0 0.340342 0.143462 0.511442 0 0.361604 0.140979 0.51386 0 0.37476 0.137882 0.520691 0 0.384323 0.136635 0.530889 0 0.394205 0.137924 0.527231 0 0.418085 0.133696 0.534023 0 0.442657 0.134713 0.512289 0 0.448686 0.138569 0.514822 0 0.453972 0.141939 0.51834 0 0.469211 0.140928 0.52596 0 0.482272 0.144251 0.524949 0 0.497808 0.152695 0.514654 0 0.527149 0.153773 0.516264 0 0.575905 0.145931 0.523885 0 0.620382 0.152768 0.493867 0 0.756156 0.145301 0.509307 0 0.831162 0.142681 0.504974 0 0.851451 0.145791 0.497148 0 -0.449842 0.197262 1.3873 0 -0.449842 0.197262 1.3873 0 -0.449842 0.197262 1.3873 0 -0.379959 0.186501 1.30988 0 -0.0880438 0.156811 0.843869 0 0.0698594 0.148734 0.649418 0 0.0905285 0.15463 0.630723 0 0.118012 0.15915 0.605698 0 0.232812 0.150974 0.480861 0 0.258417 0.146986 0.494262 0 0.277686 0.14481 0.501356 0 0.298393 0.144121 0.502367 0 0.31354 0.149787 0.505263 0 0.321174 0.157132 0.506738 0 0.338476 0.156658 0.509844 0 0.359142 0.152883 0.512231 0 0.373174 0.149592 0.519137 0 0.384545 0.147162 0.529667 0 0.39426 0.147213 0.529182 0 0.416758 0.144154 0.533639 0 0.444651 0.144194 0.513547 0 0.451051 0.147849 0.516185 0 0.455835 0.153349 0.518742 0 0.46882 0.153921 0.525488 0 0.484378 0.155733 0.525677 0 0.499891 0.162757 0.516618 0 0.524515 0.164127 0.515706 0 0.568719 0.157767 0.520347 0 0.617066 0.163079 0.492374 0 0.750864 0.156782 0.505319 0 0.830354 0.152033 0.504176 0 0.852187 0.153472 0.497889 0 -0.46233 0.207378 1.39897 0 -0.46233 0.207378 1.39897 0 -0.46233 0.207378 1.39897 0 -0.396493 0.196716 1.33682 0 -0.0949396 0.169273 0.852075 0 0.0651683 0.160456 0.6607 0 0.0919568 0.163624 0.630529 0 0.120402 0.16681 0.600849 0 0.232072 0.159256 0.480445 0 0.257312 0.156743 0.493707 0 0.276771 0.155348 0.501037 0 0.299629 0.153838 0.500012 0 0.316917 0.157506 0.506969 0 0.324468 0.164799 0.508593 0 0.336203 0.166188 0.508373 0 0.357152 0.16237 0.51098 0 0.370942 0.15929 0.517498 0 0.384073 0.156266 0.527833 0 0.394549 0.155113 0.530813 0 0.415825 0.153221 0.533458 0 0.446312 0.152715 0.514562 0 0.453454 0.157151 0.517453 0 0.458004 0.162204 0.51982 0 0.468425 0.164784 0.525008 0 0.484865 0.165888 0.527731 0 0.501418 0.171964 0.517583 0 0.522133 0.172841 0.515174 0 0.562233 0.168468 0.517239 0 0.618185 0.171766 0.493438 0 0.745516 0.168633 0.501327 0 0.829474 0.16014 0.503984 0 0.852739 0.160421 0.498875 0 -0.523196 0.244058 1.49259 0 -0.523196 0.244058 1.49259 0 -0.523195 0.244057 1.49258 0 -0.423557 0.233474 1.35839 0 -0.194213 0.213691 1.00661 0 0.0261091 0.190722 0.725443 0 0.102547 0.188 0.616365 0 0.134313 0.192207 0.581513 0 0.233937 0.191556 0.47961 0 0.255981 0.193443 0.492693 0 0.274337 0.192772 0.50147 0 0.296948 0.18978 0.499687 0 0.318264 0.18766 0.503544 0 0.332683 0.186377 0.513075 0 0.341036 0.190694 0.512967 0 0.3541 0.194941 0.508236 0 0.366063 0.195079 0.512252 0 0.382253 0.192391 0.521696 0 0.395868 0.191122 0.525402 0 0.407993 0.1912 0.528619 0 0.452042 0.185085 0.517076 0 0.460156 0.187836 0.520704 0 0.465768 0.191857 0.523942 0 0.47103 0.197349 0.525902 0 0.487848 0.198354 0.531387 0 0.507644 0.202008 0.519245 0 0.517447 0.205564 0.513387 0 0.540736 0.206068 0.509842 0 0.62402 0.201152 0.496861 0 0.724532 0.208203 0.487603 0 0.825873 0.195971 0.500797 0 0.857854 0.196773 0.499327 0 -0.595753 0.288119 1.61144 0 -0.595753 0.288119 1.61144 0 -0.595753 0.288119 1.61144 0 -0.463748 0.278008 1.40525 0 -0.241592 0.255391 1.08735 0 0.00736234 0.231049 0.737875 0 0.119446 0.225059 0.595201 0 0.157891 0.229711 0.551504 0 0.234019 0.231574 0.479983 0 0.256097 0.229835 0.490104 0 0.270988 0.228947 0.498601 0 0.289716 0.227123 0.500292 0 0.317276 0.224049 0.498942 0 0.332906 0.223658 0.506862 0 0.345612 0.224806 0.513241 0 0.362784 0.224045 0.517505 0 0.37018 0.227768 0.516242 0 0.377744 0.232735 0.515407 0 0.39212 0.230913 0.521551 0 0.408363 0.229808 0.527068 0 0.433593 0.230535 0.505507 0 0.462669 0.223181 0.520162 0 0.473226 0.223631 0.527634 0 0.479201 0.229246 0.530369 0 0.489772 0.232936 0.532815 0 0.515092 0.234207 0.520337 0 0.522727 0.238026 0.517287 0 0.531283 0.238978 0.510242 0 0.638988 0.230669 0.506821 0 0.71932 0.245764 0.483579 0 0.818001 0.238075 0.490862 0 0.855685 0.230594 0.49729 0 -0.682481 0.315906 1.76803 0 -0.682481 0.315906 1.76803 0 -0.682481 0.315906 1.76803 0 -0.50169 0.300332 1.46684 0 -0.278373 0.277017 1.15153 0 -0.00485858 0.252011 0.75275 0 0.098679 0.246034 0.632673 0 0.163133 0.247554 0.547035 0 0.231724 0.250286 0.478935 0 0.255497 0.247404 0.49057 0 0.270251 0.246615 0.496452 0 0.286721 0.246534 0.501344 0 0.315309 0.242797 0.498119 0 0.332604 0.240765 0.504837 0 0.34488 0.241712 0.510705 0 0.361042 0.242292 0.51467 0 0.3746 0.241011 0.520463 0 0.38231 0.245973 0.519573 0 0.389446 0.248445 0.519508 0 0.407807 0.246396 0.526606 0 0.43312 0.245397 0.505176 0 0.454325 0.241327 0.515003 0 0.475384 0.237701 0.528419 0 0.482395 0.241195 0.532603 0 0.492167 0.244381 0.535056 0 0.516023 0.247906 0.524214 0 0.526551 0.253514 0.518137 0 0.535138 0.256295 0.511173 0 0.64039 0.248187 0.508128 0 0.722425 0.258534 0.488673 0 0.81938 0.255802 0.490477 0 0.85 0.251183 0.492301 0 -0.708764 0.336092 1.80138 0 -0.708764 0.336092 1.80138 0 -0.708764 0.336092 1.80138 0 -0.535281 0.319183 1.5211 0 -0.356755 0.300779 1.29588 0 -0.0286902 0.271687 0.785462 0 0.0828642 0.26539 0.656369 0 0.167921 0.263961 0.5418 0 0.231127 0.265703 0.478269 0 0.255028 0.26285 0.490721 0 0.26924 0.262447 0.496907 0 0.285941 0.261435 0.499841 0 0.313097 0.257416 0.497853 0 0.331081 0.2552 0.504309 0 0.345882 0.254682 0.508053 0 0.36087 0.255477 0.511643 0 0.373634 0.254696 0.519422 0 0.385372 0.255719 0.527351 0 0.393867 0.258252 0.524111 0 0.406005 0.259717 0.525585 0 0.433582 0.26084 0.505002 0 0.445977 0.260416 0.509887 0 0.474765 0.251955 0.527129 0 0.485499 0.252497 0.534949 0 0.494056 0.259084 0.536328 0 0.518922 0.263572 0.527032 0 0.531706 0.270617 0.518106 0 0.53918 0.273315 0.511607 0 0.638087 0.261517 0.507864 0 0.731948 0.268927 0.495984 0 0.821047 0.272015 0.490536 0 0.845828 0.270422 0.487463 0 -0.732076 0.361744 1.83093 0 -0.732076 0.361744 1.83093 0 -0.732076 0.361744 1.83093 0 -0.614606 0.34895 1.66325 0 -0.36966 0.327782 1.30308 0 -0.0791607 0.305343 0.85695 0 0.0753084 0.286757 0.657777 0 0.18356 0.280836 0.515909 0 0.230126 0.279498 0.477386 0 0.25307 0.278052 0.49041 0 0.268001 0.277074 0.498384 0 0.28535 0.274855 0.499467 0 0.309795 0.273937 0.498917 0 0.32919 0.272846 0.50421 0 0.348337 0.272664 0.503747 0 0.362442 0.276449 0.507128 0 0.373856 0.275917 0.51465 0 0.388409 0.274407 0.527992 0 0.398574 0.276344 0.533516 0 0.411117 0.282049 0.528351 0 0.435607 0.285751 0.505249 0 0.445278 0.286775 0.508398 0 0.46447 0.282854 0.519661 0 0.488217 0.277898 0.533913 0 0.49764 0.281255 0.538469 0 0.522368 0.283515 0.531192 0 0.536289 0.288196 0.52045 0 0.543328 0.293378 0.513469 0 0.643116 0.279554 0.506672 0 0.72107 0.29906 0.487808 0 0.823375 0.29502 0.491445 0 0.844124 0.296664 0.483172 0 -0.723761 0.391039 1.81408 0 -0.723761 0.391039 1.81408 0 -0.723761 0.391039 1.81408 0 -0.677126 0.389655 1.76941 0 -0.388598 0.359757 1.32055 0 -0.113207 0.328873 0.900173 0 0.0483787 0.306936 0.695205 0 0.182738 0.29575 0.516693 0 0.229573 0.305909 0.476535 0 0.252655 0.305024 0.489208 0 0.269285 0.305889 0.498726 0 0.285668 0.307003 0.500292 0 0.309578 0.308867 0.49904 0 0.327632 0.307297 0.503571 0 0.347498 0.304726 0.502795 0 0.36445 0.304679 0.502739 0 0.3746 0.3044 0.509303 0 0.388915 0.303061 0.518463 0 0.401858 0.3019 0.527995 0 0.418339 0.301204 0.534105 0 0.441325 0.303403 0.509801 0 0.44791 0.307947 0.509553 0 0.455726 0.310197 0.514176 0 0.486588 0.302638 0.531144 0 0.500751 0.303145 0.538928 0 0.523838 0.304996 0.53906 0 0.540939 0.307909 0.523871 0 0.549401 0.314318 0.514745 0 0.637305 0.306284 0.498695 0 0.723155 0.323151 0.488097 0 0.827631 0.312452 0.497545 0 0.847172 0.320173 0.482896 0 -0.746438 0.409934 1.84391 0 -0.746438 0.409934 1.84391 0 -0.746437 0.409934 1.84391 0 -0.69825 0.406064 1.79108 0 -0.408876 0.37535 1.33935 0 -0.140526 0.344884 0.935315 0 0.0149602 0.329198 0.740976 0 0.168571 0.319355 0.537029 0 0.228718 0.328484 0.481404 0 0.252612 0.327192 0.488968 0 0.269541 0.326126 0.498263 0 0.284817 0.32593 0.502083 0 0.310062 0.324132 0.498377 0 0.325192 0.324162 0.504158 0 0.344442 0.321319 0.504265 0 0.364484 0.320011 0.501423 0 0.374204 0.320015 0.507675 0 0.387441 0.319214 0.516242 0 0.400748 0.318389 0.525263 0 0.416708 0.318464 0.532705 0 0.44411 0.317653 0.51275 0 0.452343 0.321348 0.512633 0 0.456607 0.327261 0.513957 0 0.476995 0.323861 0.52529 0 0.502132 0.319952 0.537788 0 0.525097 0.320481 0.544088 0 0.542748 0.323836 0.526846 0 0.553584 0.330061 0.516638 0 0.617996 0.332376 0.487372 0 0.724622 0.338316 0.489884 0 0.830829 0.327776 0.501603 0 0.849604 0.337303 0.484599 0 -0.773273 0.424631 1.87876 0 -0.773273 0.424631 1.87876 0 -0.773273 0.424631 1.87876 0 -0.702667 0.41681 1.79047 0 -0.441173 0.395471 1.38425 0 -0.178282 0.37265 0.997885 0 -0.0253112 0.362484 0.790273 0 0.154941 0.342745 0.552541 0 0.232669 0.344733 0.477699 0 0.2512 0.345471 0.489121 0 0.2684 0.343645 0.497894 0 0.284559 0.342846 0.503042 0 0.310532 0.34051 0.497554 0 0.325383 0.341211 0.503949 0 0.34091 0.340612 0.506611 0 0.364165 0.338127 0.500397 0 0.374631 0.337716 0.506406 0 0.386955 0.337547 0.514416 0 0.399309 0.337004 0.522548 0 0.414991 0.337907 0.530847 0 0.443837 0.337103 0.511396 0 0.456357 0.33728 0.515211 0 0.461616 0.343087 0.517254 0 0.468877 0.348667 0.519961 0 0.502993 0.341442 0.536515 0 0.521809 0.343778 0.540267 0 0.545539 0.343074 0.531002 0 0.558555 0.34862 0.518805 0 0.628695 0.347561 0.493258 0 0.726763 0.357158 0.492169 0 0.829278 0.349909 0.499448 0 0.852408 0.353739 0.489896 0 -0.798073 0.442207 1.91477 0 -0.798073 0.442207 1.91477 0 -0.798073 0.442207 1.91477 0 -0.712524 0.43476 1.80064 0 -0.486885 0.418064 1.46203 0 -0.264773 0.395268 1.15987 0 -0.0401444 0.377194 0.80602 0 0.153031 0.355604 0.548785 0 0.233552 0.357131 0.478004 0 0.250932 0.359901 0.488678 0 0.267119 0.358632 0.498692 0 0.285281 0.356396 0.503107 0 0.309135 0.355639 0.4987 0 0.326254 0.355313 0.503404 0 0.339888 0.356098 0.507581 0 0.363609 0.353786 0.49995 0 0.374268 0.353186 0.505818 0 0.38676 0.352524 0.513062 0 0.398427 0.351965 0.520549 0 0.414329 0.353755 0.529127 0 0.442959 0.353801 0.510257 0 0.457327 0.353754 0.515147 0 0.465575 0.355997 0.519896 0 0.470955 0.363278 0.520976 0 0.50227 0.358573 0.534634 0 0.5227 0.360052 0.535576 0 0.547485 0.358341 0.533509 0 0.561247 0.360934 0.520639 0 0.637546 0.357937 0.497539 0 0.728555 0.369693 0.495063 0 0.827295 0.366765 0.497295 0 0.855116 0.367722 0.49389 0 -0.831927 0.466336 1.97002 0 -0.831927 0.466336 1.97002 0 -0.831927 0.466336 1.97002 0 -0.729213 0.456501 1.82315 0 -0.565752 0.442535 1.60178 0 -0.318218 0.415822 1.25203 0 -0.0581225 0.393299 0.827521 0 0.13535 0.371822 0.576688 0 0.234401 0.37186 0.478245 0 0.251461 0.376006 0.488694 0 0.266858 0.37633 0.49819 0 0.285335 0.373372 0.502812 0 0.306911 0.373832 0.501803 0 0.326756 0.371989 0.502758 0 0.340096 0.372893 0.507659 0 0.363696 0.371098 0.500172 0 0.373649 0.371404 0.505448 0 0.386165 0.370969 0.512697 0 0.39759 0.370445 0.519367 0 0.413788 0.371901 0.527375 0 0.442064 0.372583 0.509279 0 0.457776 0.372083 0.514827 0 0.468235 0.372071 0.521448 0 0.475123 0.376419 0.524124 0 0.49273 0.378245 0.529028 0 0.525742 0.375104 0.531784 0 0.549596 0.374165 0.534917 0 0.561896 0.374727 0.524437 0 0.643299 0.371901 0.500274 0 0.730977 0.3838 0.497886 0 0.827518 0.384722 0.497287 0 0.857744 0.38542 0.494968 0 -0.863232 0.482474 2.0213 0 -0.863232 0.482474 2.0213 0 -0.863232 0.482474 2.0213 0 -0.745875 0.471225 1.84497 0 -0.618138 0.460227 1.69358 0 -0.327984 0.430898 1.25813 0 -0.0757953 0.407656 0.851552 0 0.111721 0.386535 0.616469 0 0.235204 0.384887 0.478489 0 0.252018 0.388878 0.48879 0 0.266552 0.389904 0.497739 0 0.283341 0.388773 0.505331 0 0.305808 0.388571 0.505239 0 0.325674 0.387276 0.504159 0 0.340892 0.387033 0.507575 0 0.363592 0.386072 0.500463 0 0.374013 0.386164 0.505782 0 0.38599 0.38631 0.512565 0 0.396954 0.385994 0.519167 0 0.413341 0.386676 0.525698 0 0.441148 0.387045 0.508442 0 0.456878 0.385859 0.513748 0 0.468702 0.384726 0.521049 0 0.478388 0.385918 0.527015 0 0.49291 0.389739 0.529238 0 0.527319 0.387524 0.529719 0 0.549015 0.388757 0.53324 0 0.563298 0.387213 0.527246 0 0.643467 0.385391 0.500839 0 0.734228 0.395582 0.500259 0 0.828732 0.397457 0.498687 0 0.859219 0.398124 0.495229 0 -0.898316 0.502381 2.07677 0 -0.898316 0.502381 2.07677 0 -0.898316 0.502381 2.07677 0 -0.767285 0.490321 1.87254 0 -0.644022 0.480581 1.73136 0 -0.337706 0.449637 1.26393 0 -0.114206 0.428643 0.91217 0 0.0579265 0.412333 0.701027 0 0.236036 0.400533 0.47863 0 0.253393 0.404754 0.48861 0 0.266756 0.406307 0.497337 0 0.282032 0.407093 0.505113 0 0.307163 0.405662 0.505103 0 0.324591 0.406076 0.506896 0 0.341793 0.404317 0.507428 0 0.363364 0.404515 0.500828 0 0.374004 0.403996 0.506206 0 0.385617 0.403674 0.512421 0 0.396122 0.403027 0.518817 0 0.415514 0.401561 0.518933 0 0.439339 0.402431 0.507182 0 0.455504 0.400873 0.512375 0 0.46845 0.399463 0.520182 0 0.480165 0.399823 0.528058 0 0.498308 0.401495 0.533428 0 0.527194 0.405015 0.526517 0 0.548312 0.407651 0.532123 0 0.566572 0.405392 0.529294 0 0.640742 0.402304 0.500522 0 0.735366 0.411534 0.500804 0 0.829901 0.412576 0.500327 0 0.856265 0.409771 0.493159 0 -0.925082 0.520524 2.11582 0 -0.925082 0.520524 2.11582 0 -0.925081 0.520524 2.11581 0 -0.802288 0.510162 1.93017 0 -0.643073 0.496043 1.72659 0 -0.348674 0.469659 1.27436 0 -0.196281 0.454698 1.0617 0 0.0319757 0.43521 0.733318 0 0.237275 0.416316 0.478358 0 0.255061 0.42068 0.488198 0 0.267426 0.422547 0.496239 0 0.281502 0.42453 0.504601 0 0.308523 0.422388 0.504846 0 0.323129 0.423284 0.510443 0 0.340419 0.421467 0.509386 0 0.361271 0.420699 0.502511 0 0.37307 0.419822 0.506263 0 0.385026 0.419052 0.512618 0 0.394978 0.418779 0.518822 0 0.418112 0.415935 0.511342 0 0.438009 0.417066 0.505547 0 0.454065 0.416555 0.511043 0 0.468543 0.415975 0.519758 0 0.481336 0.41702 0.528083 0 0.504587 0.415381 0.538628 0 0.53189 0.419814 0.530021 0 0.54835 0.426367 0.530623 0 0.569856 0.42445 0.531513 0 0.611395 0.430143 0.488569 0 0.738051 0.428928 0.501675 0 0.831962 0.428518 0.503054 0 0.854455 0.421716 0.49321 0 -0.957032 0.542257 2.16187 0 -0.957032 0.542257 2.16187 0 -0.957032 0.542257 2.16187 0 -0.845359 0.532551 2.00161 0 -0.651941 0.515272 1.73464 0 -0.362523 0.492077 1.28807 0 -0.279092 0.48236 1.21467 0 0.022076 0.457311 0.73999 0 0.239058 0.435753 0.477983 0 0.257093 0.439594 0.487506 0 0.268405 0.440762 0.494799 0 0.281766 0.441807 0.503001 0 0.306562 0.440593 0.505573 0 0.324317 0.440337 0.50885 0 0.338101 0.440302 0.513397 0 0.360964 0.437446 0.50209 0 0.371036 0.437628 0.507574 0 0.38373 0.437633 0.515725 0 0.394068 0.437715 0.522123 0 0.413847 0.43532 0.515129 0 0.437662 0.437252 0.504169 0 0.453629 0.438239 0.510265 0 0.468446 0.437696 0.519088 0 0.482772 0.438285 0.528191 0 0.497762 0.439495 0.534844 0 0.53904 0.436071 0.538457 0 0.551719 0.446111 0.529974 0 0.569355 0.446786 0.530396 0 0.609867 0.448456 0.490079 0 0.74102 0.447716 0.501606 0 0.829898 0.435985 0.50475 0 0.852075 0.431829 0.492935 0 -0.990021 0.565342 2.2133 0 -0.990021 0.565342 2.2133 0 -0.990021 0.565342 2.2133 0 -0.882182 0.555079 2.06058 0 -0.668625 0.535196 1.75364 0 -0.418631 0.51557 1.38071 0 -0.291005 0.502315 1.22114 0 0.00839415 0.477147 0.749687 0 0.240077 0.452233 0.476783 0 0.259051 0.454914 0.485541 0 0.270471 0.455958 0.492668 0 0.282578 0.457224 0.500042 0 0.303217 0.457976 0.506726 0 0.32564 0.456723 0.506392 0 0.337827 0.457874 0.512723 0 0.36194 0.455456 0.500913 0 0.37216 0.456018 0.506435 0 0.382993 0.45688 0.517791 0 0.391898 0.457899 0.528223 0 0.411509 0.455846 0.521153 0 0.438375 0.456986 0.503153 0 0.452887 0.459367 0.509269 0 0.468067 0.458683 0.518341 0 0.48389 0.458469 0.528362 0 0.49802 0.4599 0.534379 0 0.543172 0.453046 0.542719 0 0.556939 0.460984 0.535373 0 0.568218 0.466409 0.5291 0 0.614632 0.464414 0.488553 0 0.743159 0.46754 0.500157 0 0.824702 0.444567 0.503279 0 0.849797 0.438973 0.493652 0 -1.02663 0.591268 2.27099 0 -1.02663 0.591268 2.27099 0 -1.02663 0.591268 2.27099 0 -0.916067 0.580847 2.11086 0 -0.689314 0.559932 1.78078 0 -0.500332 0.545697 1.5269 0 -0.301268 0.525128 1.22681 0 -0.0349899 0.500454 0.815627 0 0.239415 0.470234 0.474941 0 0.260642 0.472614 0.483631 0 0.272957 0.474152 0.490677 0 0.284331 0.476571 0.496619 0 0.302101 0.47918 0.505433 0 0.325457 0.4778 0.506268 0 0.33921 0.478196 0.51077 0 0.36008 0.477729 0.503744 0 0.373505 0.477563 0.505864 0 0.385023 0.479014 0.516606 0 0.393961 0.480147 0.52714 0 0.411905 0.479387 0.52543 0 0.44028 0.477445 0.502739 0 0.453087 0.480606 0.508397 0 0.467692 0.480562 0.517537 0 0.484179 0.480294 0.528051 0 0.499612 0.480785 0.534697 0 0.537028 0.475783 0.538365 0 0.560963 0.476592 0.542295 0 0.569557 0.486058 0.529333 0 0.603688 0.486856 0.489935 0 0.739352 0.479497 0.500136 0 0.811511 0.458063 0.49564 0 0.847596 0.445996 0.495575 0 -1.04466 0.620632 2.29188 0 -1.04466 0.620632 2.29188 0 -1.04466 0.620632 2.29188 0 -0.956599 0.61208 2.17221 0 -0.716468 0.589293 1.81759 0 -0.546606 0.574387 1.60619 0 -0.316739 0.551958 1.24372 0 -0.131304 0.534889 0.987043 0 0.23528 0.494458 0.473908 0 0.263665 0.49577 0.480532 0 0.276318 0.496919 0.488106 0 0.288206 0.499083 0.492424 0 0.305336 0.502324 0.49955 0 0.32262 0.503366 0.506646 0 0.339832 0.502826 0.510953 0 0.356513 0.504707 0.510545 0 0.370541 0.504642 0.513145 0 0.384913 0.504768 0.518906 0 0.396128 0.50489 0.524936 0 0.412635 0.506315 0.528428 0 0.441125 0.502364 0.503209 0 0.454061 0.504573 0.507624 0 0.467799 0.504884 0.516146 0 0.483355 0.504837 0.526572 0 0.500606 0.504664 0.534686 1597.05 0.521711 0.504899 0.533217 1595.13 0.565179 0.497642 0.541791 0 0.572788 0.500025 0.534651 0 0.601917 0.510419 0.487728 0 0.737782 0.499694 0.503893 0 0.79153 0.479001 0.485471 0 0.848694 0.469912 0.49787 0 -1.05796 0.650069 2.30241 0 -1.05796 0.650069 2.30241 0 -1.05796 0.650069 2.30241 0 -1.00126 0.643769 2.24153 0 -0.765653 0.621739 1.89464 0 -0.555262 0.600475 1.61322 0 -0.389312 0.58918 1.36721 0 -0.230749 0.570891 1.16838 0 0.233757 0.519319 0.473091 0 0.26929 0.520032 0.474751 0 0.281123 0.521756 0.483021 0 0.292818 0.523646 0.488011 0 0.309282 0.527591 0.493927 0 0.324594 0.529447 0.501018 0 0.339333 0.529619 0.508676 0 0.358699 0.531257 0.507308 0 0.369861 0.531782 0.513064 0 0.383592 0.531615 0.519608 0 0.394583 0.531412 0.52562 0 0.413179 0.531489 0.527233 0 0.441295 0.529716 0.504592 0 0.454963 0.529454 0.506095 0 0.468022 0.528001 0.514667 0 0.481653 0.526295 0.523906 0 0.499103 0.523717 0.533807 1595.13 0.518572 0.521996 0.530631 9746.64 0.565742 0.515249 0.537897 1484.08 0.579039 0.523372 0.535913 0 0.627213 0.547759 0.497332 0 0.735056 0.510758 0.5068 0 0.789784 0.501977 0.486242 0 0.843859 0.481781 0.50003 0 -1.14716 0.681439 2.45912 0 -1.14716 0.681439 2.45912 0 -1.14716 0.681439 2.45912 0 -1.02824 0.673158 2.27581 0 -0.823201 0.656457 1.98246 0 -0.60231 0.633967 1.68371 0 -0.474965 0.625929 1.5171 0 -0.24678 0.601232 1.17835 0 0.224337 0.553155 0.488252 0 0.271098 0.546639 0.472645 0 0.286176 0.54807 0.478512 0 0.297201 0.550369 0.484043 0 0.312669 0.553964 0.490462 0 0.326809 0.555746 0.496865 0 0.340525 0.555692 0.503687 0 0.361624 0.557283 0.502182 0 0.372359 0.556171 0.506299 0 0.384016 0.554337 0.514938 0 0.393136 0.552811 0.522671 0 0.410659 0.550215 0.524551 0 0.430031 0.548765 0.518518 0 0.453868 0.545051 0.502978 0 0.466335 0.545047 0.511245 0 0.481231 0.547529 0.520896 0 0.500744 0.56041 0.532176 0 0.528042 0.569382 0.529142 1484.22 0.567731 0.573131 0.536095 1393.22 0.591354 0.571879 0.537056 0 0.618035 0.563859 0.498915 0 0.73202 0.521337 0.509497 0 0.791226 0.503146 0.494178 0 0.849205 0.527101 0.500694 0 -1.25611 0.713985 2.65742 0 -1.25611 0.713985 2.65742 0 -1.25611 0.713985 2.65742 0 -1.04588 0.693472 2.28287 0 -0.873106 0.678531 2.05231 0 -0.631968 0.659111 1.71026 0 -0.458276 0.645433 1.46289 0 -0.268043 0.630457 1.19522 0 0.15916 0.594926 0.597916 0 0.269015 0.575651 0.468881 0 0.287583 0.57567 0.47529 0 0.301604 0.576886 0.480669 0 0.313579 0.577501 0.486451 0 0.327349 0.576203 0.49262 0 0.340998 0.574236 0.49635 0 0.358743 0.573347 0.496743 0 0.369855 0.571825 0.501255 0 0.382268 0.570156 0.508569 0 0.392906 0.570509 0.514951 0 0.409696 0.57983 0.523725 0 0.436294 0.587442 0.51373 0 0.459751 0.592029 0.506045 0 0.473702 0.598112 0.513933 0 0.490099 0.599644 0.521992 0 0.505836 0.597872 0.533756 0 0.527122 0.593193 0.536185 0 0.556717 0.586785 0.536456 0 0.589281 0.577127 0.540606 0 0.600993 0.570253 0.496117 0 0.731011 0.528803 0.51291 0 0.806406 0.549652 0.492212 0 0.837077 0.552561 0.47788 0 -1.58018 0.787688 3.23949 0 -1.58018 0.787688 3.23949 0 -1.58018 0.787688 3.23949 0 -1.35476 0.783413 2.85272 0 -0.986674 0.774715 2.23355 0 -0.755209 0.756316 1.90297 0 -0.599576 0.743385 1.68228 0 -0.390843 0.722776 1.38864 0 0.0507071 0.670414 0.738191 0 0.230449 0.664296 0.529326 0 0.260267 0.664667 0.52321 0 0.289904 0.65888 0.506969 0 0.329049 0.651472 0.477148 0 0.341627 0.652773 0.481408 0 0.351817 0.651784 0.48703 0 0.362838 0.653674 0.491749 0 0.372577 0.652854 0.496575 0 0.383758 0.649078 0.503413 0 0.391405 0.646641 0.508552 0 0.40244 0.642736 0.514334 0 0.433196 0.648412 0.496687 0 0.449969 0.643637 0.501609 0 0.46008 0.640212 0.507196 0 0.471533 0.636088 0.514422 0 0.486539 0.630837 0.521005 0 0.509532 0.624836 0.518396 0 0.52457 0.61936 0.526828 0 0.547138 0.606623 0.524705 0 0.604604 0.611332 0.483181 0 0.756445 0.633208 0.506126 0 0.814928 0.649063 0.500505 0 0.834374 0.625951 0.493449 0 -1.99606 0.944451 3.9924 0 -1.99606 0.944451 3.9924 0 -1.99606 0.944451 3.9924 0 -1.77073 0.936274 3.60268 0 -1.32788 0.913807 2.82525 0 -0.974925 0.831535 2.20466 0 -0.820014 0.799111 1.98579 0 -0.619576 0.767173 1.68649 0 -0.218649 0.74175 1.1299 0 0.113766 0.759614 0.667956 0 0.16888 0.775628 0.626031 0 0.231501 0.79864 0.567737 0 0.299163 0.782938 0.510293 0 0.31721 0.770485 0.51765 0 0.328946 0.758149 0.519869 0 0.350349 0.690761 0.46843 0 0.367178 0.683408 0.457118 0 0.374177 0.678935 0.467456 0 0.379664 0.675402 0.476052 0 0.392831 0.670698 0.478288 0 0.402797 0.667831 0.478909 0 0.430787 0.721243 0.487796 0 0.456985 0.752716 0.50009 0 0.480303 0.767922 0.507157 0 0.505106 0.766221 0.508099 0 0.52462 0.762694 0.513332 0 0.552104 0.759258 0.52185 0 0.588074 0.756142 0.529901 0 0.618449 0.751923 0.495963 0 0.717703 0.735528 0.489111 0 0.806886 0.724134 0.506944 0 0.845412 0.734269 0.497602 0 -2.31882 1.08427 4.6081 0 -2.31882 1.08427 4.6081 0 -2.31882 1.08427 4.6081 0 -2.09403 1.07033 4.21589 0 -1.6403 1.0368 3.41057 0 -1.14533 0.995627 2.53211 0 -0.911592 0.970744 2.15001 0 -0.734716 0.945121 1.90963 0 -0.311181 0.892776 1.28034 0 -0.109721 0.869238 1.04414 0 -0.0594479 0.862552 0.993019 0 0.0207097 0.856646 0.871333 0 0.180464 0.844716 0.627314 0 0.272186 0.83374 0.527309 0 0.306839 0.826929 0.514863 0 0.332389 0.818083 0.5237 0 0.359667 0.815252 0.518 0 0.37527 0.816413 0.521773 0 0.385452 0.816849 0.523869 0 0.406092 0.815152 0.515877 0 0.438158 0.817528 0.493699 0 0.454423 0.830568 0.498242 0 0.465793 0.833259 0.505923 0 0.480169 0.835545 0.518862 0 0.497834 0.830893 0.517729 0 0.523017 0.824965 0.507074 0 0.544595 0.816678 0.502524 0 0.571266 0.809999 0.508932 0 0.620468 0.817939 0.501911 0 0.740391 0.826899 0.496638 0 0.825855 0.848821 0.494332 0 0.854377 0.841183 0.501129 0 -2.5782 1.14121 5.07819 0 -2.5782 1.14121 5.07819 0 -2.5782 1.14121 5.07819 0 -2.36199 1.1134 4.68706 0 -1.91367 1.07625 3.89166 0 -1.41706 1.03204 3.00011 0 -1.0912 1.00209 2.42209 0 -0.877682 0.975896 2.09544 0 -0.494596 0.918552 1.55354 0 -0.165266 0.912954 1.07852 0 -0.0949 0.938819 1.03172 0 -0.0521308 0.94787 1.00058 0 0.0309206 0.934775 0.927003 0 0.202199 0.91513 0.668581 0 0.268945 0.907629 0.58564 0 0.326945 0.898858 0.525206 0 0.353596 0.890658 0.525394 0 0.371082 0.885146 0.525394 0 0.384131 0.882757 0.527531 0 0.39792 0.88438 0.530854 0 0.421735 0.887166 0.525712 0 0.448266 0.879691 0.494436 0 0.460856 0.873295 0.499593 0 0.474049 0.864592 0.514369 0 0.487793 0.858696 0.526731 0 0.507716 0.87088 0.528905 0 0.542819 0.88102 0.504103 0 0.578591 0.88894 0.500913 0 0.630596 0.897257 0.494517 0 0.753009 0.901634 0.503853 0 0.786597 0.913211 0.478797 0 0.855815 0.898625 0.497043 0 -0.867064 0.173508 2.08095 0 -0.867064 0.173508 2.08095 0 -0.867064 0.173508 2.08095 0 -0.777349 0.169337 1.95561 0 -0.550241 0.147341 1.62815 0 -0.27917 0.121743 1.25574 0 -0.0230698 0.0975105 0.830452 0 0.0718336 0.0879523 0.738541 0 0.129893 0.0931271 0.678325 0 0.251587 0.0916731 0.517636 0 0.279024 0.0910877 0.504512 0 0.293472 0.0908594 0.514524 0 0.316837 0.0895723 0.532611 0 0.335391 0.0896536 0.542656 0 0.348701 0.0912619 0.540889 0 0.361604 0.0949861 0.539835 0 0.369559 0.0982843 0.540098 0 0.38585 0.0994223 0.537632 0 0.407217 0.0975211 0.538233 0 0.421992 0.0967889 0.550892 0 0.425302 0.097717 0.562345 0 0.435097 0.0996225 0.553844 0 0.451529 0.0993993 0.538618 0 0.466562 0.102142 0.524058 0 0.47165 0.1089 0.526064 0 0.499924 0.107824 0.541026 0 0.556407 0.0922824 0.553625 0 0.564243 0.0964328 0.543924 0 0.599285 0.110814 0.510934 0 0.762768 0.0998228 0.533738 0 0.818305 0.099845 0.526209 0 0.848681 0.102123 0.522372 0 -0.867064 0.173508 2.08095 0 -0.867064 0.173508 2.08095 0 -0.867064 0.173508 2.08095 0 -0.777349 0.169337 1.95561 0 -0.550241 0.147341 1.62815 0 -0.27917 0.121743 1.25574 0 -0.0230698 0.0975105 0.830452 0 0.0718336 0.0879523 0.738541 0 0.129893 0.0931271 0.678325 0 0.251587 0.0916731 0.517636 0 0.279024 0.0910877 0.504512 0 0.293472 0.0908594 0.514524 0 0.316837 0.0895723 0.532611 0 0.335391 0.0896536 0.542656 0 0.348701 0.0912619 0.540889 0 0.361604 0.0949861 0.539835 0 0.369559 0.0982843 0.540098 0 0.38585 0.0994223 0.537632 0 0.407217 0.0975211 0.538233 0 0.421992 0.0967889 0.550892 0 0.425302 0.097717 0.562345 0 0.435097 0.0996225 0.553844 0 0.451529 0.0993993 0.538618 0 0.466562 0.102142 0.524058 0 0.47165 0.1089 0.526064 0 0.499924 0.107824 0.541026 0 0.556407 0.0922824 0.553625 0 0.564243 0.0964328 0.543924 0 0.599285 0.110814 0.510934 0 0.762768 0.0998228 0.533738 0 0.818305 0.099845 0.526209 0 0.848681 0.102123 0.522372 0 -0.867064 0.173508 2.08095 0 -0.867064 0.173508 2.08095 0 -0.867064 0.173508 2.08095 0 -0.777349 0.169337 1.95561 0 -0.550241 0.147341 1.62815 0 -0.27917 0.121743 1.25574 0 -0.0230698 0.0975105 0.830452 0 0.0718336 0.0879523 0.738541 0 0.129893 0.0931271 0.678325 0 0.251587 0.0916731 0.517636 0 0.279024 0.0910878 0.504512 0 0.293472 0.0908594 0.514524 0 0.316837 0.0895723 0.532611 0 0.335391 0.0896537 0.542656 0 0.348701 0.0912619 0.540889 0 0.361604 0.0949861 0.539835 0 0.369559 0.0982843 0.540098 0 0.38585 0.0994223 0.537632 0 0.407217 0.0975211 0.538233 0 0.421992 0.0967889 0.550892 0 0.425302 0.097717 0.562345 0 0.435097 0.0996225 0.553844 0 0.451529 0.0993993 0.538618 0 0.466562 0.102142 0.524058 0 0.47165 0.1089 0.526064 0 0.499924 0.107824 0.541026 0 0.556406 0.0922825 0.553626 0 0.564243 0.0964328 0.543924 0 0.599285 0.110814 0.510934 0 0.762768 0.0998228 0.533738 0 0.818305 0.099845 0.526209 0 0.848681 0.102123 0.522372 0 -0.8735 0.189248 2.08977 0 -0.8735 0.189248 2.08977 0 -0.8735 0.189248 2.08977 0 -0.807577 0.188248 2.00887 0 -0.571254 0.162756 1.66411 0 -0.290612 0.130833 1.26313 0 -0.038804 0.106474 0.852244 0 0.0655156 0.0958788 0.741664 0 0.125585 0.100492 0.688868 0 0.250317 0.101213 0.527926 0 0.279955 0.103018 0.503067 0 0.293861 0.103181 0.512561 0 0.315433 0.101353 0.530652 0 0.333722 0.10032 0.54091 0 0.349946 0.100213 0.543 0 0.362936 0.103798 0.541804 0 0.37121 0.106097 0.542192 0 0.386654 0.107482 0.539008 0 0.405731 0.10703 0.538494 0 0.423192 0.104155 0.549818 0 0.426665 0.104799 0.561828 0 0.436586 0.106514 0.553188 0 0.450888 0.106428 0.541971 0 0.467952 0.108661 0.525136 0 0.473388 0.115654 0.52694 0 0.49534 0.117553 0.538292 0 0.554866 0.101907 0.553165 0 0.565678 0.102894 0.545302 0 0.606777 0.118112 0.513192 0 0.760764 0.108282 0.532566 0 0.81938 0.10792 0.526629 0 0.848721 0.110224 0.522076 0 -0.898568 0.213072 2.12866 0 -0.898568 0.213072 2.12866 0 -0.898568 0.213072 2.12866 0 -0.825624 0.206981 2.03192 0 -0.610919 0.18094 1.72576 0 -0.305871 0.14623 1.27364 0 -0.102199 0.124713 0.958599 0 0.0500593 0.111871 0.752221 0 0.129098 0.118859 0.687561 0 0.257173 0.117393 0.531845 0 0.284497 0.117408 0.507322 0 0.29359 0.120607 0.509283 0 0.31366 0.119237 0.525394 0 0.332068 0.11853 0.53657 0 0.350287 0.116708 0.543147 0 0.365135 0.118693 0.54502 0 0.3739 0.121617 0.545828 0 0.388242 0.122047 0.541173 0 0.403987 0.120865 0.541326 0 0.423432 0.119165 0.54788 0 0.4291 0.119344 0.560048 0 0.439017 0.120796 0.553056 0 0.451859 0.121681 0.546628 0 0.470657 0.122734 0.527429 0 0.477219 0.130074 0.529787 0 0.492829 0.135623 0.536868 0 0.542281 0.127173 0.545923 0 0.568721 0.121708 0.546786 0 0.619269 0.131296 0.516262 0 0.75712 0.126679 0.530259 0 0.821494 0.124298 0.527525 0 0.8486 0.126432 0.521492 0 -0.934696 0.230896 2.17626 0 -0.934696 0.230896 2.17626 0 -0.934696 0.230896 2.17626 0 -0.824461 0.219978 2.01151 0 -0.637201 0.199659 1.7561 0 -0.33027 0.169065 1.29526 0 -0.244563 0.162349 1.22451 0 0.0430847 0.135946 0.754941 0 0.135529 0.142169 0.679573 0 0.260205 0.134563 0.533386 0 0.288647 0.132352 0.512491 0 0.296445 0.136773 0.512263 0 0.313383 0.139095 0.519005 0 0.33074 0.139959 0.531216 0 0.348543 0.139705 0.538388 0 0.36675 0.136833 0.546121 0 0.375331 0.137835 0.549323 0 0.389582 0.1384 0.543433 0 0.402048 0.13766 0.544962 0 0.421271 0.136546 0.550744 0 0.432452 0.137494 0.557849 0 0.441821 0.139373 0.553836 0 0.44929 0.141641 0.549905 0 0.473121 0.142115 0.529653 0 0.482369 0.148919 0.533756 0 0.490889 0.158264 0.535544 0 0.524655 0.155372 0.539086 0 0.565407 0.1464 0.54455 0 0.61563 0.15064 0.517893 0 0.758761 0.145491 0.531334 0 0.823817 0.143129 0.528678 0 0.84878 0.14639 0.520926 0 -0.958797 0.243374 2.20827 0 -0.958797 0.243374 2.20827 0 -0.958797 0.243374 2.20827 0 -0.854258 0.232969 2.0562 0 -0.656286 0.214499 1.77774 0 -0.348037 0.188184 1.31338 0 -0.252071 0.17785 1.22846 0 0.0398071 0.151569 0.755355 0 0.137717 0.152719 0.675237 0 0.258726 0.145885 0.532255 0 0.289571 0.143425 0.513696 0 0.299704 0.146965 0.515501 0 0.313257 0.152425 0.515807 0 0.33108 0.153598 0.526595 0 0.347267 0.152644 0.534452 0 0.3662 0.148952 0.543593 0 0.376081 0.147583 0.551285 0 0.390163 0.147908 0.544686 0 0.400241 0.147756 0.546255 0 0.420835 0.146792 0.553136 0 0.433782 0.148007 0.55782 0 0.443209 0.149961 0.554254 0 0.449189 0.153731 0.549965 0 0.475104 0.154403 0.531043 0 0.48517 0.15905 0.535859 0 0.492297 0.168636 0.536866 0 0.519507 0.167178 0.538521 0 0.556177 0.160531 0.53883 0 0.611025 0.161211 0.517033 0 0.75954 0.154647 0.531966 0 0.824899 0.151866 0.529245 0 0.849044 0.155951 0.520896 0 -0.978441 0.254306 2.23604 0 -0.978441 0.254306 2.23604 0 -0.978441 0.254306 2.23604 0 -0.874597 0.24333 2.08516 0 -0.674219 0.227878 1.80125 0 -0.368047 0.20115 1.34108 0 -0.256918 0.188477 1.23074 0 0.0352188 0.16232 0.758918 0 0.14078 0.160153 0.669489 0 0.258035 0.155871 0.531636 0 0.28875 0.154089 0.51334 0 0.302315 0.154937 0.519073 0 0.313817 0.163053 0.517125 0 0.330982 0.163092 0.522325 0 0.346504 0.161627 0.531034 0 0.365216 0.158155 0.541621 0 0.375553 0.156282 0.550526 0 0.390632 0.155706 0.545795 0 0.400546 0.1564 0.547079 0 0.42049 0.155306 0.555126 0 0.434021 0.156524 0.5601 0 0.444527 0.159636 0.554662 0 0.451875 0.163311 0.548719 0 0.476983 0.164283 0.532081 0 0.487536 0.168481 0.536736 0 0.4933 0.176767 0.538022 0 0.516622 0.176658 0.538766 0 0.548974 0.172176 0.534836 0 0.607433 0.171241 0.516094 0 0.760312 0.163875 0.532606 0 0.826124 0.161281 0.529853 0 0.849304 0.163648 0.521567 0 -1.03209 0.294453 2.31871 0 -1.03209 0.294453 2.31871 0 -1.03209 0.294453 2.31871 0 -0.922401 0.284199 2.1569 0 -0.73838 0.26989 1.89827 0 -0.451511 0.23977 1.47437 0 -0.27426 0.219407 1.24139 0 -0.0163795 0.196021 0.835512 0 0.151781 0.191122 0.650089 0 0.247615 0.19398 0.54822 0 0.286408 0.19179 0.512582 0 0.302064 0.188646 0.521255 0 0.319864 0.186853 0.529827 0 0.334183 0.189187 0.51773 0 0.342577 0.193228 0.520126 0 0.360644 0.191919 0.532225 0 0.374252 0.190223 0.54294 0 0.390158 0.189775 0.543473 0 0.401305 0.189153 0.547439 0 0.41886 0.188447 0.558211 0 0.435759 0.18851 0.567314 0 0.451968 0.190778 0.559067 0 0.461067 0.195167 0.546443 0 0.477308 0.198603 0.531434 0 0.490946 0.200126 0.539122 0 0.499339 0.204734 0.542678 0 0.514193 0.206872 0.544319 0 0.529395 0.21153 0.524756 0 0.613831 0.202119 0.516935 0 0.748775 0.196207 0.527276 0 0.824225 0.192273 0.529443 0 0.853035 0.196612 0.523314 0 -1.05515 0.332437 2.33107 0 -1.05515 0.332437 2.33107 0 -1.05515 0.332437 2.33107 0 -0.983316 0.324785 2.25047 0 -0.745048 0.304246 1.89351 0 -0.525065 0.284445 1.60076 0 -0.31579 0.268386 1.28104 0 -0.161037 0.253203 1.09235 0 0.161187 0.230551 0.633325 0 0.240241 0.230785 0.55557 0 0.282961 0.226541 0.508578 0 0.297117 0.225442 0.518014 0 0.317706 0.224169 0.531147 0 0.338174 0.221189 0.532093 0 0.354043 0.222635 0.524237 0 0.36115 0.22868 0.526014 0 0.370946 0.229829 0.532972 0 0.387679 0.229447 0.538798 0 0.401348 0.228807 0.539593 0 0.414523 0.227165 0.553585 0 0.43454 0.223099 0.566298 0 0.458437 0.222678 0.563388 0 0.464908 0.227205 0.560619 0 0.483323 0.232956 0.535051 0 0.496038 0.23648 0.542703 0 0.508144 0.239631 0.54635 0 0.511631 0.242405 0.544879 0 0.523443 0.242729 0.529915 0 0.62227 0.230472 0.523853 0 0.728338 0.243679 0.512009 0 0.820563 0.23226 0.525043 0 0.857085 0.230504 0.525088 0 -1.09333 0.35573 2.39341 0 -1.09333 0.35573 2.39341 0 -1.09333 0.35573 2.39341 0 -1.01438 0.347695 2.29869 0 -0.786312 0.327065 1.96098 0 -0.581001 0.309008 1.69914 0 -0.358628 0.291321 1.35125 0 -0.189231 0.273298 1.14343 0 0.16756 0.246643 0.621309 0 0.230148 0.250188 0.567577 0 0.281874 0.24539 0.507388 0 0.296449 0.244333 0.516367 0 0.316068 0.243124 0.529487 0 0.334856 0.240301 0.532915 0 0.356249 0.237475 0.527886 0 0.36763 0.241235 0.529329 0 0.372372 0.245964 0.5313 0 0.385197 0.248495 0.535892 0 0.40199 0.24707 0.536497 0 0.413913 0.247138 0.548091 0 0.429811 0.244058 0.562831 0 0.45904 0.240039 0.564296 0 0.468529 0.24145 0.563517 0 0.486882 0.244244 0.538082 0 0.498154 0.248196 0.544872 0 0.510036 0.251293 0.547773 0 0.513903 0.253557 0.546642 0 0.523538 0.255748 0.532964 0 0.628035 0.247838 0.527453 0 0.717352 0.263915 0.505237 0 0.816017 0.252951 0.520353 0 0.85899 0.247097 0.526355 0 -1.15681 0.377216 2.50919 0 -1.15681 0.377216 2.50919 0 -1.15681 0.377216 2.50919 0 -1.02508 0.365491 2.30431 0 -0.82328 0.347031 2.02204 0 -0.604776 0.330628 1.73047 0 -0.392095 0.312045 1.40728 0 -0.214216 0.292443 1.18638 0 0.17524 0.260689 0.610061 0 0.225295 0.266928 0.570117 0 0.280168 0.262062 0.507486 0 0.295271 0.259996 0.515217 0 0.314916 0.258475 0.527807 0 0.332304 0.257457 0.53348 0 0.354469 0.254138 0.527467 0 0.373489 0.252233 0.532507 0 0.378295 0.255965 0.534868 0 0.385819 0.260058 0.535762 0 0.399676 0.260127 0.535182 0 0.413056 0.259751 0.547024 0 0.426573 0.258496 0.560359 0 0.455957 0.252952 0.564852 0 0.47131 0.251785 0.565989 0 0.490014 0.255896 0.540306 0 0.501078 0.261518 0.547026 0 0.51075 0.267809 0.548539 0 0.518304 0.270363 0.547792 0 0.527892 0.273124 0.532963 0 0.631827 0.260033 0.529848 0 0.720848 0.277191 0.507871 0 0.814309 0.270844 0.517757 0 0.858811 0.262292 0.52627 0 -1.23375 0.404822 2.6515 0 -1.23375 0.404822 2.6515 0 -1.23375 0.404822 2.6515 0 -1.03543 0.389773 2.31044 0 -0.854607 0.374018 2.07173 0 -0.631291 0.360333 1.77088 0 -0.433999 0.337755 1.47562 0 -0.234327 0.31808 1.20057 0 0.167119 0.280355 0.617203 0 0.229921 0.282724 0.562254 0 0.279439 0.278306 0.507843 0 0.293398 0.276677 0.515856 0 0.313774 0.275115 0.526922 0 0.330356 0.274858 0.534988 0 0.351007 0.272149 0.530491 0 0.371396 0.269561 0.532961 0 0.385528 0.268306 0.540712 0 0.393325 0.276293 0.540929 0 0.40241 0.281818 0.536579 0 0.414523 0.283674 0.542277 0 0.423449 0.282478 0.555531 0 0.444478 0.279434 0.5588 0 0.474125 0.273773 0.56608 0 0.495132 0.277665 0.542659 0 0.504919 0.28369 0.549284 0 0.514186 0.290237 0.551207 0 0.524124 0.292187 0.549183 0 0.533747 0.293635 0.534105 0 0.636744 0.278048 0.527802 0 0.737231 0.294791 0.518794 0 0.815955 0.295018 0.517044 0 0.851766 0.28878 0.520492 0 -1.32327 0.441144 2.81908 0 -1.32327 0.441144 2.81908 0 -1.32327 0.441144 2.81908 0 -1.10136 0.42619 2.43085 0 -0.890437 0.407365 2.127 0 -0.638236 0.384176 1.77119 0 -0.51917 0.371185 1.62174 0 -0.260268 0.347258 1.22656 0 0.162841 0.298367 0.616988 0 0.237019 0.302981 0.552014 0 0.281738 0.30601 0.508728 0 0.293989 0.308455 0.516242 0 0.312953 0.307874 0.527774 0 0.330772 0.305918 0.531357 0 0.347955 0.305635 0.532284 0 0.369109 0.302914 0.530577 0 0.382654 0.30119 0.538567 0 0.399828 0.299512 0.541694 0 0.410508 0.30139 0.542299 0 0.417873 0.306515 0.5423 0 0.424767 0.309052 0.549975 0 0.44043 0.308468 0.551664 0 0.462654 0.304566 0.55849 0 0.497824 0.301199 0.542537 0 0.508596 0.304915 0.553534 0 0.518756 0.311165 0.555102 0 0.526845 0.314544 0.552233 0 0.540025 0.315746 0.535631 0 0.64012 0.300752 0.526043 0 0.734093 0.318439 0.516857 0 0.817767 0.31794 0.516683 0 0.841553 0.318357 0.51142 0 -1.39431 0.466936 2.95033 0 -1.39431 0.466936 2.95033 0 -1.39431 0.466936 2.95032 0 -1.17329 0.449774 2.55997 0 -0.925421 0.42723 2.17824 0 -0.655044 0.400576 1.78687 0 -0.562806 0.390755 1.6867 0 -0.287806 0.363825 1.26133 0 0.154981 0.318683 0.62678 0 0.249403 0.326011 0.533318 0 0.283321 0.326424 0.509312 0 0.294608 0.326667 0.516273 0 0.312147 0.327018 0.527091 0 0.329023 0.323702 0.531677 0 0.345781 0.322619 0.533323 0 0.366695 0.32012 0.531515 0 0.379662 0.318653 0.538065 0 0.401006 0.315539 0.535081 0 0.412572 0.316685 0.540531 0 0.422326 0.319473 0.547407 0 0.427665 0.324914 0.547832 0 0.439837 0.326489 0.549802 0 0.454188 0.325392 0.553048 0 0.498825 0.318284 0.541352 0 0.511619 0.319883 0.556358 0 0.522201 0.326051 0.557048 0 0.529267 0.330619 0.555241 0 0.545252 0.333658 0.536643 0 0.60858 0.3314 0.510059 0 0.721689 0.339204 0.509449 0 0.821026 0.333998 0.519626 0 0.842246 0.338419 0.510128 0 -1.46699 0.490725 3.08181 0 -1.46699 0.490725 3.08181 0 -1.46699 0.490725 3.08181 0 -1.24819 0.47185 2.6932 0 -0.96356 0.444666 2.23571 0 -0.69129 0.417071 1.83867 0 -0.590886 0.410201 1.72274 0 -0.327192 0.386524 1.32386 0 0.135676 0.345037 0.65527 0 0.253625 0.341821 0.525332 0 0.276185 0.344558 0.519449 0 0.295369 0.342759 0.516433 0 0.312475 0.343894 0.526968 0 0.326819 0.343294 0.533741 0 0.345684 0.340859 0.531308 0 0.364121 0.340267 0.533297 0 0.377295 0.338818 0.539635 0 0.396755 0.335904 0.537234 0 0.413957 0.335249 0.533576 0 0.426753 0.334871 0.549148 0 0.432463 0.339159 0.553291 0 0.440767 0.345716 0.549745 0 0.451214 0.347245 0.550163 0 0.493065 0.341657 0.536527 0 0.513974 0.339912 0.552778 0 0.526223 0.344011 0.559281 0 0.532445 0.3496 0.558238 0 0.547723 0.353089 0.541322 0 0.580926 0.359815 0.498131 0 0.721394 0.360256 0.509787 0 0.825141 0.350339 0.524183 0 0.845162 0.359959 0.51063 0 -1.52909 0.506651 3.19467 0 -1.52909 0.506651 3.19467 0 -1.52909 0.506651 3.19467 0 -1.31081 0.487456 2.80507 0 -0.983348 0.457895 2.26277 0 -0.722928 0.437154 1.88987 0 -0.593276 0.428647 1.72128 0 -0.353639 0.407334 1.36588 0 0.105439 0.365054 0.689442 0 0.25325 0.354261 0.524861 0 0.272255 0.358794 0.522934 0 0.296106 0.357433 0.516605 0 0.312953 0.357708 0.526997 0 0.326112 0.358854 0.534493 0 0.345533 0.355639 0.530074 0 0.362772 0.355831 0.534897 0 0.374976 0.355044 0.541931 0 0.393877 0.351919 0.538426 0 0.413151 0.35033 0.531496 0 0.429092 0.350067 0.543422 0 0.437918 0.351236 0.553968 0 0.445214 0.358275 0.552384 0 0.452359 0.363713 0.550245 0 0.484909 0.36156 0.530922 0 0.514523 0.356164 0.551219 0 0.529194 0.357724 0.560865 0 0.534856 0.362524 0.56 0 0.547841 0.365631 0.54552 0 0.584512 0.371874 0.500154 0 0.723687 0.373856 0.511127 0 0.827695 0.363459 0.526661 0 0.847818 0.377105 0.511202 0 -1.59728 0.525724 3.31897 0 -1.59728 0.525724 3.31897 0 -1.59728 0.525724 3.31897 0 -1.37498 0.510528 2.92297 0 -0.990987 0.481459 2.26749 0 -0.757325 0.461434 1.94549 0 -0.592101 0.445439 1.71314 0 -0.409644 0.428559 1.46194 0 0.055557 0.386532 0.769215 0 0.253089 0.369217 0.524473 0 0.27719 0.374304 0.513887 0 0.296092 0.374156 0.516274 0 0.312766 0.374173 0.526564 0 0.326935 0.375252 0.534214 0 0.342504 0.374728 0.534968 0 0.363462 0.373697 0.532651 0 0.373747 0.374109 0.542328 0 0.392543 0.371546 0.539437 0 0.412346 0.368938 0.530198 0 0.42861 0.368301 0.540826 0 0.441506 0.368352 0.551656 0 0.449717 0.371862 0.554519 0 0.456734 0.377152 0.554331 0 0.477775 0.380723 0.526134 0 0.515001 0.371466 0.549743 0 0.530433 0.37343 0.56136 0 0.537435 0.375861 0.561592 0 0.547452 0.379269 0.550953 0 0.588913 0.386596 0.502459 0 0.727007 0.389093 0.512365 0 0.827144 0.382994 0.525155 0 0.850543 0.391078 0.514935 0 -1.64384 0.544818 3.40318 0 -1.64384 0.544818 3.40318 0 -1.64384 0.544818 3.40318 0 -1.42133 0.530387 3.00748 0 -0.998634 0.499224 2.27254 0 -0.785027 0.477885 1.98933 0 -0.608037 0.461274 1.73433 0 -0.476876 0.449275 1.58198 0 0.0455107 0.400129 0.783103 0 0.254429 0.381907 0.522276 0 0.281038 0.387314 0.50673 0 0.295056 0.388813 0.515352 0 0.312879 0.388709 0.526354 0 0.327628 0.389087 0.533788 0 0.341714 0.390297 0.538199 0 0.363624 0.3885 0.531481 0 0.374603 0.388847 0.540537 0 0.391416 0.387816 0.541053 0 0.410996 0.384938 0.529529 0 0.427875 0.38337 0.539689 0 0.442283 0.381711 0.549466 0 0.452044 0.382504 0.555327 0 0.459946 0.386871 0.55741 0 0.481303 0.390239 0.529127 0 0.511618 0.385821 0.547147 0 0.53142 0.386183 0.56095 0 0.539985 0.387698 0.562966 0 0.548166 0.39185 0.55526 0 0.592272 0.399033 0.504755 0 0.730565 0.400861 0.514037 0 0.825963 0.398079 0.523634 0 0.85216 0.400558 0.517846 0 -1.70595 0.568047 3.51683 0 -1.70595 0.568047 3.51683 0 -1.70595 0.568047 3.51683 0 -1.4862 0.550427 3.12466 0 -1.03418 0.518341 2.32919 0 -0.813443 0.497962 2.03138 0 -0.627684 0.481344 1.76055 0 -0.513486 0.47209 1.63681 0 0.0284393 0.419003 0.808497 0 0.262682 0.397384 0.509204 0 0.281131 0.403791 0.506469 0 0.294819 0.405569 0.514883 0 0.313069 0.406147 0.526135 0 0.328062 0.406038 0.533279 0 0.341725 0.407383 0.538138 0 0.363285 0.405795 0.532991 0 0.374913 0.405281 0.538573 0 0.389022 0.405233 0.54332 0 0.409257 0.401537 0.528745 0 0.426139 0.39929 0.538907 0 0.440498 0.397544 0.548227 0 0.452648 0.396839 0.554777 0 0.462542 0.398848 0.558741 0 0.487049 0.401906 0.533887 0 0.502763 0.406451 0.541518 0 0.533323 0.403829 0.560879 0 0.543498 0.405734 0.564716 0 0.549255 0.407498 0.560413 0 0.595389 0.413854 0.507635 0 0.734959 0.415125 0.51746 0 0.825118 0.414428 0.522932 0 0.851375 0.405818 0.520418 0 -1.76855 0.58832 3.63216 0 -1.76855 0.58832 3.63216 0 -1.76855 0.58832 3.63216 0 -1.54891 0.571108 3.24053 0 -1.0972 0.536854 2.44354 0 -0.839421 0.514924 2.07042 0 -0.656623 0.4996 1.80392 0 -0.532806 0.490451 1.6574 0 -0.00567389 0.439849 0.865093 0 0.264315 0.413585 0.504177 0 0.281377 0.419721 0.506315 0 0.294619 0.422033 0.514442 0 0.313123 0.421658 0.52587 0 0.327154 0.42188 0.532881 0 0.34229 0.421777 0.5363 0 0.360779 0.421681 0.53704 0 0.373177 0.42099 0.540495 0 0.388035 0.420347 0.541857 0 0.406558 0.417659 0.531098 0 0.424246 0.415425 0.538398 0 0.438167 0.414074 0.548501 0 0.453358 0.412419 0.55409 0 0.463569 0.41579 0.558557 0 0.491635 0.416911 0.537403 0 0.50578 0.42235 0.544369 0 0.534474 0.421355 0.560332 0 0.545785 0.424464 0.565745 0 0.55261 0.424286 0.56282 0 0.598889 0.430241 0.510642 0 0.740086 0.430826 0.521901 0 0.824533 0.429477 0.5233 0 0.850366 0.415377 0.520058 0 -1.84285 0.615502 3.77055 0 -1.84285 0.615502 3.77055 0 -1.84285 0.615502 3.77055 0 -1.62338 0.59799 3.3792 0 -1.17165 0.562295 2.58013 0 -0.871644 0.53696 2.12124 0 -0.700032 0.522055 1.87351 0 -0.532565 0.507192 1.64994 0 -0.121237 0.469121 1.07872 0 0.26662 0.432659 0.496958 0 0.281545 0.437687 0.505306 0 0.294358 0.439291 0.512615 0 0.313367 0.438325 0.524048 0 0.326013 0.4393 0.531497 0 0.342769 0.438489 0.534033 0 0.359061 0.439397 0.537659 0 0.371642 0.438989 0.540133 0 0.388451 0.4385 0.541135 0 0.400955 0.438332 0.53864 0 0.420292 0.436898 0.543449 0 0.435318 0.436102 0.550598 0 0.452879 0.434494 0.554222 0 0.465129 0.436495 0.558513 0 0.491148 0.438655 0.536092 0 0.513264 0.438774 0.550362 0 0.53524 0.442663 0.559412 0 0.548879 0.445711 0.566245 0 0.559 0.445374 0.562109 0 0.600152 0.448483 0.512481 0 0.741991 0.449361 0.523679 0 0.819992 0.438068 0.522017 0 0.847298 0.429084 0.517142 0 -1.91381 0.642276 3.90152 0 -1.91381 0.642276 3.90152 0 -1.91381 0.642276 3.90152 0 -1.69389 0.625447 3.51022 0 -1.24209 0.589074 2.70931 0 -0.903589 0.560588 2.1732 0 -0.741316 0.546253 1.94129 0 -0.544093 0.528039 1.66086 0 -0.147621 0.491414 1.11411 0 0.257386 0.450721 0.51207 0 0.281318 0.453377 0.503744 0 0.294311 0.45466 0.510824 0 0.313195 0.454155 0.521735 0 0.326596 0.455362 0.529202 0 0.341733 0.456658 0.534239 0 0.360352 0.45699 0.53487 0 0.371104 0.4573 0.539648 0 0.388324 0.45717 0.541011 0 0.400654 0.458804 0.541939 0 0.417062 0.458979 0.549167 0 0.432438 0.45831 0.552343 0 0.451613 0.456629 0.553614 0 0.466965 0.45613 0.557742 0 0.492677 0.45886 0.536048 0 0.514276 0.457459 0.551213 0 0.540554 0.458899 0.563063 0 0.551937 0.464394 0.566744 0 0.562743 0.464806 0.562482 0 0.603844 0.464282 0.510163 0 0.741474 0.463487 0.522934 0 0.817102 0.445094 0.522582 0 0.843943 0.437647 0.515733 0 -1.99105 0.670528 4.04274 0 -1.99105 0.670528 4.04274 0 -1.99105 0.670528 4.04274 0 -1.77108 0.654436 3.65204 0 -1.31927 0.618793 2.85065 0 -0.929055 0.586424 2.20991 0 -0.773593 0.572316 1.99139 0 -0.566341 0.553643 1.69004 0 -0.159692 0.515879 1.12305 0 0.243001 0.474216 0.536656 0 0.281935 0.471594 0.500991 0 0.295878 0.473873 0.507033 0 0.314635 0.473439 0.51749 0 0.328785 0.474575 0.525187 0 0.340911 0.477148 0.530991 0 0.362582 0.478063 0.531352 0 0.373405 0.478997 0.537711 0 0.387921 0.480055 0.541014 0 0.402752 0.480306 0.541236 0 0.417257 0.481681 0.548348 0 0.431162 0.48156 0.551645 0 0.449877 0.480303 0.552842 0 0.471713 0.476937 0.55066 0 0.493655 0.480369 0.536179 0 0.510326 0.480412 0.548367 0 0.547018 0.47434 0.566782 0 0.55525 0.483101 0.567831 0 0.564044 0.486254 0.560951 0 0.598675 0.484496 0.515153 0 0.73215 0.474944 0.52155 0 0.812488 0.45299 0.522655 0 0.840693 0.446703 0.514892 0 -2.087 0.690454 4.21338 0 -2.087 0.690454 4.21338 0 -2.087 0.690454 4.21338 0 -1.86524 0.679632 3.82201 0 -1.41011 0.652402 3.01991 0 -0.942604 0.616219 2.21794 0 -0.811131 0.60299 2.04921 0 -0.593558 0.583345 1.72633 0 -0.176568 0.543467 1.14053 0 0.188594 0.510415 0.605659 0 0.285347 0.493612 0.496449 0 0.297793 0.496734 0.501478 0 0.317391 0.496483 0.511125 0 0.333385 0.497467 0.518371 0 0.345305 0.500664 0.523736 0 0.363218 0.502723 0.529036 0 0.375246 0.503066 0.53475 0 0.388662 0.504582 0.540256 0 0.403715 0.504631 0.540048 0 0.420313 0.505137 0.544632 0 0.433248 0.505361 0.54858 0 0.447788 0.505508 0.551361 0 0.466573 0.503481 0.557605 0 0.494541 0.504152 0.53618 0 0.508708 0.505363 0.546704 0 0.544734 0.498304 0.565783 0 0.559077 0.49784 0.570451 0 0.567739 0.502232 0.556924 0 0.58983 0.50759 0.510446 0 0.732635 0.502382 0.522163 0 0.80146 0.474763 0.517503 0 0.845315 0.478601 0.518818 0 -2.18143 0.73977 4.39962 0 -2.18143 0.73977 4.39962 0 -2.18143 0.73977 4.39962 0 -1.9635 0.715438 4.00672 0 -1.51214 0.677189 3.2051 0 -0.999853 0.647152 2.31548 0 -0.855729 0.633636 2.12045 0 -0.645482 0.615515 1.81397 0 -0.204012 0.575716 1.17444 0 0.178951 0.537378 0.613999 0 0.287054 0.517698 0.492117 0 0.302055 0.521566 0.493885 0 0.320763 0.522181 0.503106 0 0.337738 0.522773 0.51145 0 0.34965 0.525583 0.517564 0 0.362766 0.528356 0.524348 0 0.375059 0.528278 0.530158 0 0.390163 0.528799 0.53647 0 0.401919 0.531043 0.54059 0 0.421616 0.530375 0.541863 0 0.436152 0.52994 0.545193 0 0.447848 0.528824 0.55014 0 0.463011 0.526731 0.555884 0 0.492725 0.523889 0.533658 0 0.507823 0.52201 0.545233 0 0.528706 0.518277 0.556634 1484.22 0.561326 0.511763 0.57129 1393.23 0.574267 0.528583 0.565451 0 0.597369 0.557265 0.511544 0 0.729814 0.513931 0.523937 0 0.796252 0.502985 0.513599 0 0.844336 0.487755 0.525017 0 -2.28369 0.770691 4.58749 0 -2.28369 0.770691 4.58749 0 -2.28369 0.770691 4.58749 0 -2.06292 0.757409 4.19656 0 -1.61219 0.716807 3.39462 0 -1.10364 0.672245 2.50198 0 -0.893034 0.658409 2.17338 0 -0.701609 0.643177 1.90655 0 -0.315146 0.613137 1.37024 0 0.14821 0.568349 0.655771 0 0.284235 0.547151 0.497389 0 0.30653 0.548077 0.489912 0 0.32328 0.548587 0.497741 0 0.338934 0.548997 0.505964 0 0.352651 0.550793 0.512673 0 0.364974 0.553298 0.519498 0 0.374764 0.552227 0.525216 0 0.388019 0.550644 0.531478 0 0.402654 0.549883 0.53185 0 0.41853 0.547882 0.537138 0 0.43246 0.545636 0.541364 0 0.445358 0.543456 0.54765 0 0.458448 0.543409 0.553051 0 0.492695 0.55077 0.530648 0 0.51269 0.56097 0.544954 0 0.53222 0.571635 0.55594 1393.23 0.572472 0.572683 0.575069 7964.18 0.585319 0.5721 0.569359 1329.07 0.602967 0.570588 0.519542 0 0.728842 0.526937 0.526587 0 0.793316 0.505296 0.518412 0 0.850505 0.521106 0.528876 0 -2.39557 0.781471 4.77603 0 -2.39557 0.781471 4.77603 0 -2.39557 0.781471 4.77603 0 -2.17284 0.778012 4.38875 0 -1.71859 0.758461 3.59577 0 -1.20961 0.71714 2.70326 0 -0.909837 0.684166 2.18118 0 -0.748049 0.666841 1.97479 0 -0.396223 0.635228 1.50145 0 0.0425724 0.602642 0.839074 0 0.266279 0.583971 0.528475 0 0.308288 0.574761 0.486084 0 0.325442 0.572253 0.493982 0 0.338413 0.570602 0.500254 0 0.353279 0.569354 0.504459 0 0.366063 0.56872 0.509938 0 0.374163 0.567838 0.517849 0 0.385122 0.566615 0.525977 0 0.403707 0.570213 0.522251 0 0.420468 0.577953 0.531392 0 0.434966 0.582866 0.539848 0 0.449322 0.588535 0.547775 0 0.46789 0.600427 0.55594 0 0.499839 0.598739 0.533623 0 0.516926 0.596484 0.544572 0 0.53352 0.594026 0.555303 0 0.565496 0.585404 0.571728 1329.07 0.584194 0.579958 0.570157 1373.15 0.5986 0.573741 0.519895 0 0.728712 0.533123 0.534119 0 0.796611 0.549488 0.51119 0 0.845293 0.543525 0.512885 0 -2.6861 0.91727 5.32475 0 -2.6861 0.91727 5.32475 0 -2.6861 0.91727 5.32475 0 -2.46476 0.906756 4.93396 0 -2.02803 0.814945 4.1247 0 -1.51762 0.77687 3.22833 0 -1.18675 0.767256 2.65674 0 -0.868714 0.757411 2.13823 0 -0.464022 0.730649 1.57796 0 -0.101992 0.696748 1.06725 0 0.177323 0.670128 0.652633 0 0.286542 0.662868 0.529713 0 0.318378 0.660608 0.524509 0 0.33366 0.655563 0.522911 0 0.362736 0.647684 0.495397 0 0.376619 0.645905 0.503145 0 0.386325 0.645486 0.509047 0 0.396918 0.645736 0.51586 0 0.403167 0.643467 0.518902 0 0.414569 0.639681 0.52586 0 0.427896 0.64185 0.534319 0 0.441043 0.639808 0.541612 0 0.463532 0.635648 0.527997 0 0.480359 0.631789 0.524575 0 0.495728 0.62611 0.533731 0 0.511044 0.610099 0.544049 0 0.527603 0.601336 0.551187 0 0.541804 0.596067 0.558215 0 0.600579 0.610565 0.505143 0 0.760113 0.637395 0.529866 0 0.806354 0.639347 0.527691 0 0.830571 0.623978 0.515927 0 -3.14224 1.03306 6.15394 0 -3.14224 1.03306 6.15394 0 -3.14224 1.03306 6.15394 0 -2.91974 1.01438 5.7517 0 -2.46556 0.969564 4.93044 0 -1.934 0.945132 4.00523 0 -1.61439 0.923514 3.45105 0 -1.22438 0.905981 2.78164 0 -0.659321 0.85271 1.88827 0 -0.334077 0.799274 1.43079 0 -0.0539916 0.832998 1.02614 0 0.206482 0.819653 0.640751 0 0.260289 0.792895 0.576025 0 0.293146 0.765174 0.541566 0 0.317218 0.725437 0.522129 0 0.338714 0.708336 0.527214 0 0.351446 0.693018 0.521095 0 0.362093 0.675605 0.518147 0 0.386811 0.669344 0.489848 0 0.395737 0.666238 0.493557 0 0.402125 0.663394 0.506753 0 0.424135 0.696473 0.527272 0 0.456164 0.764264 0.545927 0 0.488276 0.766222 0.521949 0 0.507403 0.764929 0.526958 0 0.527018 0.760708 0.535997 0 0.556836 0.757153 0.540703 0 0.586638 0.755016 0.543203 0 0.605753 0.75497 0.523002 0 0.710934 0.739953 0.509849 0 0.801417 0.724049 0.52981 0 0.836718 0.738788 0.518144 0 -3.46206 1.15961 6.74874 0 -3.46206 1.15961 6.74874 0 -3.46206 1.15961 6.74874 0 -3.23675 1.15004 6.34998 0 -2.77877 1.11843 5.53395 0 -2.26689 1.07587 4.63936 0 -1.93636 1.05688 4.0658 0 -1.54105 1.02617 3.36542 0 -0.791216 0.950297 2.06042 0 -0.450861 0.898997 1.55833 0 -0.203989 0.87417 1.20816 0 -0.041888 0.85838 0.992031 0 0.0205497 0.848372 0.941712 0 0.0691026 0.842785 0.900692 0 0.196017 0.834061 0.714957 0 0.312867 0.824324 0.552597 0 0.339817 0.820955 0.532185 0 0.360848 0.818203 0.536293 0 0.385485 0.815318 0.533083 0 0.417372 0.818852 0.530453 0 0.438277 0.827727 0.536575 0 0.453328 0.832836 0.543237 0 0.463061 0.834892 0.548262 0 0.486856 0.83604 0.5342 0 0.504485 0.835371 0.536233 0 0.520692 0.828314 0.543422 0 0.536647 0.819245 0.548501 0 0.572402 0.80579 0.534626 0 0.614129 0.822065 0.517811 0 0.728815 0.830275 0.524298 0 0.836438 0.843845 0.527997 0 0.85311 0.839933 0.52528 0 -3.6834 1.23418 7.14709 0 -3.6834 1.23418 7.14709 0 -3.6834 1.23418 7.14709 0 -3.46588 1.2147 6.75539 0 -3.02164 1.17321 5.95583 0 -2.51585 1.13039 5.06698 0 -2.19446 1.0889 4.49191 0 -1.79982 1.05972 3.79294 0 -0.949438 0.980283 2.28215 0 -0.582838 0.945136 1.7559 0 -0.334102 0.956774 1.44147 0 -0.040689 0.947116 0.995301 0 0.00663975 0.942127 0.95984 0 0.0272463 0.939408 0.964596 0 0.109071 0.927329 0.87645 0 0.18744 0.912974 0.811215 0 0.290716 0.902318 0.650296 0 0.336954 0.896924 0.595586 0 0.367891 0.891229 0.549201 0 0.404185 0.882631 0.535306 0 0.416753 0.881119 0.535937 0 0.433911 0.868984 0.537678 0 0.455898 0.859054 0.545231 0 0.471982 0.856868 0.54344 0 0.496135 0.861156 0.533168 0 0.512565 0.873459 0.541485 0 0.532652 0.884214 0.549754 0 0.570664 0.891126 0.549083 0 0.628523 0.892447 0.502491 0 0.744049 0.903112 0.530359 0 0.779498 0.91803 0.500285 0 0.859437 0.900342 0.527116 0 -1.81349 0.249362 3.77172 0 -1.81349 0.249362 3.77172 0 -1.81349 0.249362 3.77171 0 -1.58912 0.235502 3.37511 0 -1.11643 0.20849 2.53975 0 -0.83362 0.184015 2.11878 0 -0.71826 0.172987 1.97444 0 -0.500048 0.145743 1.66169 0 0.0261117 0.090638 0.859748 0 0.147305 0.0861662 0.723443 0 0.202402 0.086785 0.666718 0 0.286848 0.0826128 0.573724 0 0.333937 0.0846603 0.545208 0 0.342768 0.0910997 0.550429 0 0.35054 0.095062 0.554058 0 0.359544 0.0997667 0.557951 0 0.37481 0.099563 0.562926 0 0.397454 0.0966244 0.568603 0 0.416343 0.0942202 0.569053 0 0.422879 0.0956189 0.572098 0 0.428497 0.0980113 0.570698 0 0.432288 0.102336 0.569049 0 0.435907 0.106788 0.568633 0 0.445555 0.109897 0.561992 0 0.469371 0.110989 0.566183 0 0.539612 0.0949311 0.570988 0 0.550023 0.0990059 0.575508 0 0.552865 0.102539 0.571535 0 0.593493 0.112871 0.534114 0 0.769433 0.0970527 0.564374 0 0.811653 0.100811 0.548549 0 0.861971 0.100304 0.556502 0 -1.81349 0.249362 3.77172 0 -1.81349 0.249362 3.77172 0 -1.81349 0.249362 3.77171 0 -1.58912 0.235502 3.37511 0 -1.11643 0.20849 2.53975 0 -0.83362 0.184015 2.11878 0 -0.71826 0.172987 1.97444 0 -0.500048 0.145743 1.66169 0 0.0261117 0.090638 0.859748 0 0.147305 0.0861662 0.723443 0 0.202402 0.086785 0.666718 0 0.286848 0.0826128 0.573724 0 0.333937 0.0846603 0.545208 0 0.342768 0.0910997 0.550429 0 0.35054 0.095062 0.554058 0 0.359544 0.0997667 0.557951 0 0.37481 0.099563 0.562926 0 0.397454 0.0966244 0.568603 0 0.416343 0.0942202 0.569053 0 0.422879 0.0956189 0.572098 0 0.428497 0.0980113 0.570698 0 0.432288 0.102336 0.569049 0 0.435907 0.106788 0.568633 0 0.445555 0.109897 0.561992 0 0.469371 0.110989 0.566183 0 0.539612 0.0949311 0.570988 0 0.550023 0.0990059 0.575508 0 0.552865 0.102539 0.571535 0 0.593493 0.112871 0.534114 0 0.769433 0.0970527 0.564374 0 0.811653 0.100811 0.548549 0 0.861971 0.100304 0.556502 0 -1.81349 0.249362 3.77172 0 -1.81349 0.249362 3.77172 0 -1.81349 0.249362 3.77171 0 -1.58912 0.235502 3.37511 0 -1.11643 0.20849 2.53975 0 -0.83362 0.184015 2.11878 0 -0.71826 0.172987 1.97444 0 -0.500048 0.145743 1.66169 0 0.0261117 0.090638 0.859748 0 0.147305 0.0861662 0.723443 0 0.202402 0.086785 0.666718 0 0.286848 0.0826128 0.573724 0 0.333937 0.0846603 0.545208 0 0.342768 0.0910997 0.550429 0 0.35054 0.095062 0.554058 0 0.359544 0.0997667 0.557951 0 0.37481 0.099563 0.562926 0 0.397455 0.0966244 0.568603 0 0.416343 0.0942202 0.569052 0 0.422879 0.0956189 0.572098 0 0.428497 0.0980113 0.570698 0 0.432288 0.102336 0.569049 0 0.435907 0.106788 0.568633 0 0.445555 0.109897 0.561992 0 0.469371 0.110989 0.566183 0 0.539612 0.0949311 0.570988 0 0.550023 0.0990059 0.575508 0 0.552865 0.102539 0.571535 0 0.593493 0.112871 0.534114 0 0.769433 0.0970527 0.564374 0 0.811653 0.100811 0.548549 0 0.861971 0.100304 0.556502 0 -1.86319 0.265868 3.87656 0 -1.86319 0.265868 3.87656 0 -1.86319 0.265868 3.87656 0 -1.63922 0.250229 3.47895 0 -1.16615 0.222264 2.64275 0 -0.853086 0.196167 2.14474 0 -0.744678 0.185779 2.00836 0 -0.512084 0.156699 1.67281 0 -0.0159066 0.103428 0.932622 0 0.152353 0.0960556 0.710763 0 0.199239 0.100485 0.666226 0 0.283435 0.0966917 0.575658 0 0.335255 0.0951628 0.54582 0 0.344511 0.0996264 0.551071 0 0.352723 0.103515 0.554934 0 0.360821 0.107551 0.558515 0 0.373761 0.10833 0.561756 0 0.394039 0.107029 0.56673 0 0.414454 0.103441 0.56827 0 0.423821 0.103018 0.572004 0 0.430354 0.104935 0.571205 0 0.433716 0.108423 0.569947 0 0.437389 0.112885 0.56947 0 0.446325 0.1177 0.563384 0 0.467073 0.119969 0.564152 0 0.534901 0.105347 0.56797 0 0.550223 0.106272 0.576519 0 0.552904 0.110109 0.572568 0 0.592068 0.122388 0.533488 0 0.768196 0.105214 0.563613 0 0.81246 0.108994 0.548848 0 0.861437 0.108453 0.556189 0 -1.93303 0.291858 4.01514 0 -1.93303 0.291858 4.01514 0 -1.93302 0.291858 4.01513 0 -1.71362 0.275004 3.62886 0 -1.25008 0.236997 2.80513 0 -0.887983 0.208391 2.20602 0 -0.761145 0.198101 2.02525 0 -0.532616 0.176461 1.69174 0 -0.138962 0.137788 1.14697 0 0.161101 0.117836 0.691901 0 0.197377 0.123578 0.66241 0 0.27441 0.119227 0.581348 0 0.332505 0.114337 0.543753 0 0.347755 0.113824 0.55213 0 0.355739 0.117001 0.555975 0 0.364598 0.121683 0.559567 0 0.376278 0.123288 0.562346 0 0.389798 0.123908 0.563556 0 0.410404 0.119915 0.56662 0 0.425616 0.117116 0.571723 0 0.43283 0.119231 0.571481 0 0.437072 0.122554 0.571654 0 0.440944 0.127074 0.571494 0 0.448584 0.132718 0.566206 0 0.468725 0.135252 0.564798 0 0.518909 0.130563 0.557328 0 0.55097 0.122055 0.578248 0 0.553636 0.126965 0.575169 0 0.594157 0.138762 0.53521 0 0.766016 0.123321 0.56237 0 0.814554 0.125421 0.549805 0 0.860276 0.125347 0.555734 0 -2.00463 0.313995 4.13499 0 -2.00463 0.313995 4.13499 0 -2.00463 0.313995 4.13499 0 -1.78535 0.296644 3.74776 0 -1.33442 0.257751 2.95948 0 -0.904717 0.222067 2.22988 0 -0.762011 0.211367 2.03054 0 -0.559019 0.198043 1.73613 0 -0.157611 0.166272 1.15943 0 0.170644 0.139459 0.671107 0 0.206322 0.141633 0.639987 0 0.266274 0.139685 0.584191 0 0.328945 0.135908 0.54114 0 0.348326 0.134066 0.551168 0 0.359791 0.134283 0.557202 0 0.368089 0.137256 0.56001 0 0.37777 0.139277 0.562583 0 0.391115 0.140485 0.563605 0 0.402553 0.141216 0.563315 0 0.424892 0.136694 0.57085 0 0.435558 0.137647 0.571842 0 0.441814 0.140314 0.573183 0 0.444831 0.143298 0.573855 0 0.452206 0.148981 0.569007 0 0.471686 0.155186 0.564115 0 0.511817 0.155269 0.552436 0 0.550815 0.14576 0.577539 0 0.554279 0.145193 0.577583 0 0.604321 0.153805 0.541825 0 0.763562 0.144369 0.561089 0 0.816871 0.144351 0.551092 0 0.859468 0.145807 0.555398 0 -2.05132 0.327645 4.2117 0 -2.05132 0.327645 4.2117 0 -2.05132 0.327645 4.2117 0 -1.83205 0.310239 3.82441 0 -1.38021 0.273278 3.03654 0 -0.907811 0.236173 2.23043 0 -0.780575 0.224878 2.06744 0 -0.605014 0.215052 1.8235 0 -0.157719 0.175768 1.15839 0 0.176129 0.149721 0.658983 0 0.209051 0.152638 0.632767 0 0.26572 0.152966 0.582111 0 0.327343 0.15054 0.539869 0 0.346703 0.14733 0.548517 0 0.361163 0.144542 0.557037 0 0.37008 0.147005 0.560208 0 0.378863 0.148605 0.562461 0 0.391866 0.14959 0.563863 0 0.40345 0.150738 0.563524 0 0.423018 0.148835 0.570013 0 0.436968 0.148409 0.571964 0 0.443853 0.150615 0.573555 0 0.446802 0.153849 0.57505 0 0.455111 0.159137 0.570164 0 0.474646 0.165644 0.563493 0 0.509763 0.167415 0.5512 0 0.543408 0.160222 0.572541 0 0.55246 0.157307 0.576142 0 0.609084 0.161615 0.544767 0 0.762347 0.154472 0.560632 0 0.817963 0.153222 0.5517 0 0.859296 0.155434 0.555262 0 -2.09014 0.339121 4.27801 0 -2.09014 0.339121 4.27801 0 -2.09014 0.339121 4.27801 0 -1.87024 0.321971 3.88895 0 -1.41673 0.287877 3.10242 0 -0.913521 0.249498 2.23361 0 -0.79851 0.237787 2.09764 0 -0.640799 0.22754 1.89292 0 -0.158875 0.182234 1.16012 0 0.17778 0.157736 0.655283 0 0.21139 0.162556 0.628525 0 0.265697 0.164168 0.580773 0 0.326096 0.162947 0.539208 0 0.344434 0.157684 0.546955 0 0.360786 0.153819 0.555969 0 0.371577 0.154023 0.560274 0 0.379348 0.156032 0.56218 0 0.39273 0.157378 0.564142 0 0.404562 0.158752 0.563757 0 0.4214 0.158711 0.569304 0 0.438143 0.157364 0.57206 0 0.445492 0.159789 0.573639 0 0.449296 0.163251 0.575687 0 0.457543 0.167603 0.571096 0 0.477942 0.174014 0.56438 0 0.507624 0.17688 0.550002 0 0.537786 0.171944 0.568634 0 0.544273 0.170065 0.57082 0 0.610823 0.169996 0.546342 0 0.761067 0.164412 0.560169 0 0.819159 0.162582 0.552341 0 0.858808 0.164718 0.554989 0 -2.19911 0.382098 4.47346 0 -2.19911 0.382098 4.47346 0 -2.19911 0.382098 4.47346 0 -1.97987 0.364808 4.08335 0 -1.52632 0.329997 3.29847 0 -1.02101 0.291817 2.42405 0 -0.853807 0.276185 2.17742 0 -0.675555 0.260277 1.93746 0 -0.187025 0.214257 1.2116 0 0.200095 0.182668 0.636184 0 0.2337 0.192318 0.608613 0 0.262179 0.197222 0.58299 0 0.317879 0.194716 0.538002 0 0.337287 0.190022 0.542424 0 0.354644 0.186852 0.552475 0 0.373514 0.183262 0.558733 0 0.384196 0.183657 0.561349 0 0.397193 0.186061 0.563142 0 0.408405 0.188036 0.563868 0 0.421777 0.19036 0.568634 0 0.440174 0.19125 0.572139 0 0.453151 0.193585 0.570133 0 0.459995 0.195232 0.573616 0 0.464005 0.198758 0.574389 0 0.483475 0.201508 0.566717 0 0.50876 0.206279 0.551696 0 0.526987 0.207955 0.561494 0 0.531817 0.209658 0.561872 0 0.609359 0.204453 0.541272 0 0.758301 0.195172 0.56105 0 0.821865 0.190172 0.555322 0 0.856401 0.195325 0.555063 0 -2.32745 0.427068 4.70332 0 -2.32745 0.427068 4.70332 0 -2.32745 0.427068 4.70332 0 -2.10753 0.411637 4.31206 0 -1.65251 0.377795 3.52435 0 -1.14664 0.339158 2.64483 0 -0.881251 0.319167 2.2012 0 -0.710614 0.303616 1.97666 0 -0.296753 0.267302 1.39384 0 0.169944 0.219782 0.682473 0 0.249299 0.216624 0.592602 0 0.277176 0.22089 0.571139 0 0.322415 0.223666 0.547801 0 0.339579 0.227273 0.54509 0 0.349029 0.229619 0.548981 0 0.367653 0.226089 0.556146 0 0.385642 0.223599 0.556151 0 0.399008 0.223712 0.557468 0 0.411709 0.222748 0.562832 0 0.424662 0.223794 0.568956 0 0.442777 0.223478 0.573631 0 0.461159 0.225271 0.570735 0 0.467641 0.230391 0.57093 0 0.474365 0.2333 0.574594 0 0.484011 0.23974 0.573332 0 0.512701 0.241176 0.552538 0 0.521858 0.243347 0.557902 0 0.523844 0.245566 0.55746 0 0.616862 0.23052 0.543729 0 0.753968 0.235035 0.55322 0 0.82223 0.230645 0.552998 0 0.855511 0.233851 0.553434 0 -2.39511 0.452562 4.82631 0 -2.39511 0.452562 4.82631 0 -2.39511 0.452562 4.82631 0 -2.17497 0.436417 4.43396 0 -1.71953 0.403869 3.64476 0 -1.21333 0.365869 2.76515 0 -0.891055 0.341014 2.20676 0 -0.740963 0.326372 2.01875 0 -0.337007 0.288413 1.45786 0 0.0679788 0.248975 0.8573 0 0.253569 0.234412 0.584957 0 0.282014 0.239782 0.563047 0 0.317864 0.242018 0.553831 0 0.343208 0.240715 0.547491 0 0.350155 0.245584 0.549876 0 0.363807 0.245947 0.554852 0 0.382672 0.243014 0.555956 0 0.399817 0.242131 0.555713 0 0.408605 0.243007 0.558999 0 0.427274 0.240006 0.568886 0 0.442067 0.241644 0.573253 0 0.464051 0.24181 0.571398 0 0.471562 0.245224 0.571902 0 0.477793 0.248851 0.574725 0 0.485567 0.253208 0.57491 0 0.512289 0.253025 0.551821 0 0.523324 0.252576 0.558881 0 0.523446 0.255887 0.557384 0 0.621872 0.248347 0.545004 0 0.745043 0.25463 0.547363 0 0.820876 0.248116 0.552127 0 0.856592 0.250099 0.554533 0 -2.45891 0.474364 4.94435 0 -2.45891 0.474364 4.94435 0 -2.45891 0.474364 4.94435 0 -2.23869 0.457832 4.55193 0 -1.78096 0.424607 3.75438 0 -1.27404 0.38885 2.87502 0 -0.948414 0.364166 2.31223 0 -0.769315 0.348329 2.05986 0 -0.371845 0.308731 1.51314 0 -0.0446026 0.277301 1.05902 0 0.25939 0.251051 0.576614 0 0.285781 0.25532 0.556464 0 0.315628 0.258097 0.55329 0 0.344639 0.255374 0.547814 0 0.353753 0.259215 0.552336 0 0.361498 0.263512 0.554537 0 0.379362 0.260508 0.555624 0 0.400201 0.257628 0.554695 0 0.409085 0.258264 0.557693 0 0.425659 0.256575 0.566198 0 0.441058 0.255597 0.573004 0 0.464107 0.253146 0.573044 0 0.473891 0.255114 0.573556 0 0.479433 0.25857 0.575555 0 0.487006 0.2638 0.576088 0 0.515151 0.26709 0.552669 0 0.523854 0.267316 0.558309 0 0.52476 0.270983 0.557513 0 0.626464 0.261348 0.549455 0 0.73951 0.272044 0.543894 0 0.819722 0.263812 0.551356 0 0.857457 0.264113 0.555516 0 -2.53669 0.501387 5.08924 0 -2.53669 0.501387 5.08924 0 -2.53669 0.501387 5.08924 0 -2.3167 0.484447 4.69797 0 -1.85881 0.451442 3.89913 0 -1.34734 0.417034 3.00859 0 -1.02085 0.393212 2.44298 0 -0.805493 0.374123 2.11282 0 -0.407557 0.334443 1.56351 0 -0.0560355 0.299861 1.06573 0 0.259245 0.269952 0.572721 0 0.290269 0.274655 0.549241 0 0.315409 0.277477 0.551211 0 0.343518 0.274042 0.54657 0 0.358123 0.273489 0.554712 0 0.365742 0.277195 0.558378 0 0.37583 0.279268 0.557345 0 0.397272 0.27827 0.554354 0 0.409852 0.277106 0.556115 0 0.421938 0.275956 0.56202 0 0.438032 0.274145 0.570049 0 0.464202 0.270386 0.574354 0 0.47802 0.272442 0.574407 0 0.483523 0.27768 0.576987 0 0.491924 0.287632 0.578321 0 0.518044 0.291931 0.554365 0 0.524498 0.292764 0.556861 0 0.526049 0.293879 0.556996 0 0.63183 0.279632 0.55868 0 0.725381 0.301928 0.533422 0 0.813597 0.291057 0.54496 0 0.859379 0.285182 0.556437 0 -2.62755 0.536435 5.25935 0 -2.62755 0.536435 5.25935 0 -2.62755 0.536435 5.25935 0 -2.4064 0.522315 4.86863 0 -1.9487 0.490083 4.06857 0 -1.43977 0.449283 3.17712 0 -1.1129 0.423819 2.60612 0 -0.840966 0.400944 2.16207 0 -0.447948 0.366744 1.61298 0 -0.0651389 0.325369 1.07067 0 0.248917 0.292878 0.580541 0 0.29025 0.2938 0.548861 0 0.312455 0.303573 0.550984 0 0.340592 0.30411 0.544927 0 0.356485 0.301484 0.552791 0 0.372148 0.299505 0.560744 0 0.379909 0.303789 0.561851 0 0.396967 0.30553 0.554968 0 0.408603 0.306177 0.554474 0 0.422412 0.304558 0.559106 0 0.434067 0.304952 0.56442 0 0.453669 0.303571 0.568232 0 0.480571 0.297654 0.575127 0 0.488455 0.300986 0.578693 0 0.497479 0.308303 0.581149 0 0.520839 0.314289 0.556307 0 0.527632 0.315385 0.558001 0 0.529695 0.315992 0.557898 0 0.636264 0.301756 0.558206 0 0.737305 0.318574 0.539835 0 0.813449 0.316823 0.541269 0 0.862127 0.30814 0.557577 0 -2.6978 0.564401 5.39079 0 -2.6978 0.564401 5.39079 0 -2.6978 0.564401 5.39079 0 -2.47791 0.546656 4.99937 0 -2.02125 0.513202 4.19763 0 -1.51262 0.472865 3.30909 0 -1.1858 0.446833 2.73665 0 -0.851197 0.420727 2.16815 0 -0.481178 0.386997 1.65853 0 -0.0793982 0.342293 1.08043 0 0.231748 0.31702 0.59697 0 0.291061 0.31691 0.548916 0 0.310033 0.324687 0.54933 0 0.338191 0.323861 0.543225 0 0.353491 0.321652 0.550997 0 0.370814 0.319004 0.559064 0 0.38339 0.318545 0.562385 0 0.398561 0.319828 0.560185 0 0.410718 0.32085 0.556916 0 0.42175 0.322696 0.558482 0 0.433656 0.322758 0.561128 0 0.45108 0.32274 0.563732 0 0.476528 0.316992 0.573186 0 0.491392 0.315682 0.5798 0 0.50138 0.322684 0.582882 0 0.523789 0.329386 0.558329 0 0.529571 0.333124 0.559385 0 0.532528 0.333717 0.559458 0 0.639274 0.320071 0.557276 0 0.748069 0.329698 0.550414 0 0.816047 0.336177 0.541255 0 0.862722 0.326697 0.557658 0 -2.77068 0.588477 5.52185 0 -2.77068 0.588477 5.52185 0 -2.77068 0.588477 5.52185 0 -2.55077 0.570656 5.13031 0 -2.09485 0.534268 4.3278 0 -1.58464 0.498679 3.44084 0 -1.25921 0.472351 2.87038 0 -0.866627 0.43941 2.18301 0 -0.50848 0.405755 1.70035 0 -0.104916 0.371657 1.10491 0 0.142941 0.351136 0.739547 0 0.291363 0.334472 0.548764 0 0.313234 0.340742 0.542619 0 0.337094 0.341814 0.542157 0 0.351182 0.340689 0.549398 0 0.367919 0.338572 0.557266 0 0.383347 0.337057 0.56117 0 0.398592 0.337076 0.562604 0 0.413455 0.336572 0.560714 0 0.422971 0.340263 0.560146 0 0.435885 0.341548 0.558005 0 0.449952 0.343433 0.558659 0 0.467815 0.340658 0.568272 0 0.493019 0.334004 0.58024 0 0.505917 0.33939 0.584711 0 0.527781 0.347138 0.560578 0 0.532407 0.353288 0.561261 0 0.535816 0.355173 0.56121 0 0.616401 0.346222 0.547924 0 0.739664 0.353673 0.548031 0 0.818146 0.357312 0.54132 0 0.856681 0.354011 0.551645 0 -2.82688 0.608188 5.62323 0 -2.82688 0.608188 5.62323 0 -2.82688 0.608188 5.62323 0 -2.60695 0.590176 5.23152 0 -2.15072 0.55404 4.42995 0 -1.64561 0.514315 3.55151 0 -1.32174 0.489407 2.98416 0 -0.928942 0.455723 2.29864 0 -0.495367 0.422301 1.67131 0 -0.124457 0.3905 1.12969 0 0.0810928 0.370162 0.851313 0 0.29291 0.346949 0.547256 0 0.316761 0.354317 0.536812 0 0.336859 0.356082 0.541354 0 0.35056 0.355229 0.548437 0 0.365983 0.353722 0.555989 0 0.381728 0.352081 0.559853 0 0.39835 0.351907 0.561297 0 0.413506 0.350844 0.562161 0 0.425901 0.353426 0.562814 0 0.436824 0.357281 0.559545 0 0.450405 0.360745 0.555796 0 0.465998 0.358427 0.565117 0 0.490359 0.352111 0.578506 0 0.509153 0.353527 0.585914 0 0.530744 0.360297 0.562149 0 0.534609 0.365682 0.562793 0 0.537629 0.368835 0.562291 0 0.584273 0.370635 0.529953 0 0.72408 0.374794 0.539307 0 0.820377 0.370809 0.543549 0 0.851572 0.374392 0.546701 0 -2.89114 0.630689 5.73995 0 -2.89114 0.630689 5.73995 0 -2.89114 0.630689 5.73995 0 -2.67313 0.612056 5.35257 0 -2.22136 0.573088 4.56 0 -1.71668 0.53093 3.68058 0 -1.38697 0.509854 3.10255 0 -0.986195 0.483346 2.40534 0 -0.518096 0.443542 1.70801 0 -0.163069 0.409891 1.19721 0 0.0615115 0.386859 0.886061 0 0.293709 0.36177 0.543637 0 0.320616 0.369472 0.5315 0 0.33651 0.373268 0.540442 0 0.350423 0.37257 0.547553 0 0.365489 0.371676 0.554622 0 0.379868 0.370915 0.558541 0 0.399078 0.370177 0.559636 0 0.411495 0.37041 0.56115 0 0.428811 0.368742 0.565197 0 0.438937 0.372413 0.56418 0 0.452357 0.376833 0.556065 0 0.46354 0.376583 0.562603 0 0.484605 0.371708 0.574845 0 0.51077 0.368539 0.586061 0 0.533715 0.373648 0.563736 0 0.537336 0.378811 0.564486 0 0.539548 0.382104 0.563937 0 0.57615 0.39001 0.524777 0 0.720418 0.393118 0.537201 0 0.824187 0.386206 0.547728 0 0.846272 0.395296 0.541803 0 -2.94845 0.645821 5.845 0 -2.94845 0.645821 5.845 0 -2.94845 0.645821 5.845 0 -2.73033 0.627522 5.45762 0 -2.27599 0.590141 4.66088 0 -1.76301 0.552643 3.76553 0 -1.43387 0.529036 3.18786 0 -1.035 0.502125 2.49354 0 -0.54845 0.460469 1.75979 0 -0.192402 0.426909 1.24581 0 0.0366126 0.402151 0.932612 0 0.290064 0.375977 0.547162 0 0.321725 0.382603 0.531931 0 0.335806 0.388204 0.539851 0 0.350495 0.387256 0.54692 0 0.365621 0.386539 0.553423 0 0.378303 0.386443 0.55746 0 0.399511 0.385157 0.557821 0 0.411546 0.38536 0.560291 0 0.427745 0.383269 0.564572 0 0.440561 0.383119 0.566953 0 0.455739 0.385928 0.557562 0 0.461357 0.389919 0.560336 0 0.480357 0.386318 0.571866 0 0.512197 0.381419 0.584251 0 0.536213 0.385456 0.565012 0 0.540027 0.390702 0.565948 0 0.542004 0.394487 0.565588 0 0.579258 0.402849 0.528229 0 0.722016 0.405775 0.539978 0 0.826448 0.397545 0.550705 0 0.844835 0.402423 0.541541 0 -3.01695 0.665234 5.96945 0 -3.01695 0.665234 5.96945 0 -3.01695 0.665234 5.96945 0 -2.79462 0.650658 5.57534 0 -2.33444 0.617418 4.76944 0 -1.82361 0.578496 3.87691 0 -1.49792 0.5527 3.30638 0 -1.10197 0.521633 2.6148 0 -0.58741 0.479444 1.82352 0 -0.228771 0.447744 1.30541 0 -0.00809231 0.423835 1.01536 0 0.287174 0.395455 0.545003 0 0.323115 0.398649 0.53248 0 0.335606 0.405178 0.539158 0 0.349313 0.405003 0.545796 0 0.365876 0.403153 0.551877 0 0.37766 0.402845 0.555716 0 0.397303 0.401303 0.556409 0 0.411218 0.400327 0.558539 0 0.425607 0.399053 0.563091 0 0.440604 0.397003 0.567155 0 0.459718 0.3966 0.559329 0 0.463838 0.402672 0.561027 0 0.478746 0.403268 0.56994 0 0.510957 0.399409 0.583371 0 0.539997 0.403527 0.566631 0 0.543551 0.40619 0.567839 0 0.545308 0.409675 0.567538 0 0.582452 0.417857 0.533382 0 0.724317 0.421563 0.543376 0 0.828477 0.41229 0.5523 0 0.842496 0.410208 0.541071 0 -3.07438 0.680097 6.06849 0 -3.07438 0.680097 6.06849 0 -3.07438 0.680097 6.06849 0 -2.8509 0.669708 5.67511 0 -2.39343 0.640215 4.87904 0 -1.88566 0.60049 3.99161 0 -1.56004 0.574385 3.42162 0 -1.16409 0.542911 2.72865 0 -0.61727 0.496606 1.86801 0 -0.276443 0.466905 1.38715 0 -0.0237574 0.443614 1.02602 0 0.260818 0.420991 0.572686 0 0.323852 0.414127 0.532636 0 0.335496 0.419502 0.538217 0 0.348612 0.419249 0.54454 0 0.364691 0.418132 0.549701 0 0.377834 0.417374 0.552951 0 0.394498 0.416936 0.554918 0 0.410479 0.41517 0.55684 0 0.424801 0.414231 0.561761 0 0.439119 0.413172 0.566419 0 0.461376 0.412105 0.560451 0 0.468894 0.416059 0.563337 0 0.477254 0.422329 0.567718 0 0.506343 0.419851 0.582555 0 0.542873 0.421712 0.567147 0 0.546983 0.421852 0.569721 0 0.548725 0.42524 0.569494 0 0.586919 0.433698 0.539321 0 0.727696 0.437855 0.547929 0 0.824489 0.424202 0.549892 0 0.841532 0.417326 0.542461 0 -3.14473 0.712519 6.20127 0 -3.14473 0.712519 6.20127 0 -3.14473 0.712519 6.20127 0 -2.92708 0.687935 5.81052 0 -2.46936 0.661906 5.01735 0 -1.96019 0.627027 4.12886 0 -1.63433 0.601404 3.55949 0 -1.23813 0.569526 2.86449 0 -0.648603 0.520415 1.9143 0 -0.343852 0.494279 1.50106 0 -0.0461217 0.46636 1.04434 0 0.199484 0.446256 0.67438 0 0.324581 0.430801 0.532231 0 0.336541 0.436174 0.537482 0 0.348662 0.43574 0.542544 0 0.363309 0.435499 0.547358 0 0.377606 0.435284 0.549673 0 0.394004 0.435645 0.551619 0 0.408153 0.435357 0.555313 0 0.42506 0.434514 0.560487 0 0.438298 0.434686 0.565268 0 0.461617 0.434212 0.560677 0 0.472789 0.433995 0.565965 0 0.481879 0.439604 0.569952 0 0.497788 0.444747 0.577202 0 0.545745 0.442686 0.567701 0 0.551393 0.443179 0.571957 0 0.55255 0.443018 0.571783 0 0.588474 0.452398 0.542811 0 0.732224 0.452524 0.55481 0 0.817199 0.435772 0.545225 0 0.841103 0.423868 0.546094 0 -3.21512 0.747278 6.33711 0 -3.21512 0.747278 6.33711 0 -3.21512 0.747278 6.33711 0 -2.99641 0.726187 5.94658 0 -2.54464 0.677378 5.14957 0 -2.03292 0.651043 4.26112 0 -1.70583 0.627541 3.69169 0 -1.30892 0.596689 2.99458 0 -0.679704 0.544065 1.96109 0 -0.367453 0.519 1.52982 0 -0.0603125 0.488854 1.05972 0 0.188269 0.464913 0.6907 0 0.326095 0.446074 0.531777 0 0.33774 0.452458 0.536561 0 0.350522 0.452435 0.541124 0 0.36387 0.45246 0.545855 0 0.37699 0.45295 0.547288 0 0.394833 0.454149 0.549209 0 0.407019 0.455077 0.553319 0 0.424633 0.454962 0.559495 0 0.438948 0.454746 0.564531 0 0.461585 0.455438 0.560553 0 0.473227 0.454695 0.565869 0 0.485916 0.455374 0.571627 0 0.49909 0.463631 0.57693 0 0.5472 0.462027 0.567743 0 0.555309 0.462679 0.573203 0 0.557108 0.462638 0.573844 0 0.591286 0.468483 0.547008 0 0.733907 0.461616 0.558234 0 0.813542 0.443806 0.543201 0 0.840211 0.429086 0.548993 0 -3.2969 0.768416 6.48387 0 -3.2969 0.768416 6.48387 0 -3.2969 0.768416 6.48387 0 -3.0756 0.755094 6.09316 0 -2.61932 0.718666 5.29478 0 -2.11354 0.668701 4.40136 0 -1.78486 0.65167 3.83424 0 -1.38707 0.625658 3.13764 0 -0.716932 0.571236 2.01792 0 -0.381981 0.542951 1.54642 0 -0.0893202 0.513904 1.10083 0 0.151359 0.488189 0.7571 0 0.327826 0.464427 0.530277 0 0.339887 0.471901 0.533989 0 0.352774 0.472153 0.539494 0 0.367315 0.47296 0.543296 0 0.377984 0.474696 0.545579 0 0.396008 0.476028 0.547446 0 0.407989 0.477633 0.55103 0 0.424164 0.477694 0.557476 0 0.438766 0.477423 0.56299 0 0.460056 0.478395 0.559476 0 0.473261 0.477323 0.565548 0 0.485814 0.476148 0.570788 0 0.512801 0.477965 0.572598 0 0.549948 0.480191 0.568955 0 0.55833 0.482555 0.573851 0 0.561694 0.483087 0.575364 0 0.596468 0.484915 0.541456 0 0.726863 0.471372 0.555813 0 0.808654 0.453045 0.540374 0 0.839968 0.443143 0.546197 0 -3.39435 0.775786 6.64714 0 -3.39435 0.775786 6.64714 0 -3.39435 0.775786 6.64714 0 -3.17046 0.772294 6.25797 0 -2.70983 0.752557 5.46207 0 -2.20075 0.713439 4.56941 0 -1.8769 0.67822 3.99817 0 -1.4792 0.651487 3.30264 0 -0.758614 0.601587 2.07868 0 -0.389586 0.567391 1.55086 0 -0.138544 0.543997 1.18182 0 0.0346549 0.525058 0.971926 0 0.325358 0.490823 0.530483 0 0.344144 0.495394 0.528062 0 0.357391 0.496375 0.53577 0 0.371255 0.4976 0.54074 0 0.381821 0.498945 0.543292 0 0.395809 0.50017 0.546006 0 0.409905 0.500595 0.549552 0 0.424048 0.501586 0.55514 0 0.438699 0.50115 0.558992 0 0.459054 0.50286 0.558184 0 0.472588 0.501604 0.564959 0 0.485097 0.500144 0.570186 0 0.520933 0.496856 0.567987 0 0.555862 0.496796 0.572576 0 0.559839 0.500538 0.573567 0 0.564098 0.500211 0.575539 0 0.589866 0.502099 0.544462 0 0.720507 0.495703 0.555643 0 0.805089 0.473937 0.542363 0 0.844135 0.487157 0.545959 0 -3.49607 0.785662 6.81777 0 -3.49607 0.785662 6.81777 0 -3.49607 0.785662 6.81777 0 -3.27339 0.778357 6.42853 0 -2.81136 0.767076 5.63598 0 -2.29695 0.747954 4.74748 0 -1.96944 0.727772 4.17701 0 -1.57594 0.685845 3.48088 0 -0.773765 0.630401 2.08617 0 -0.417691 0.59797 1.58958 0 -0.249798 0.583155 1.38096 0 0.0127353 0.55709 0.987564 0 0.319517 0.525073 0.528541 0 0.349142 0.520351 0.520352 0 0.362042 0.521647 0.529117 0 0.375458 0.522768 0.537656 0 0.384879 0.523841 0.541417 0 0.396253 0.525731 0.54527 0 0.409036 0.525648 0.548146 0 0.426332 0.525572 0.552026 0 0.440014 0.525916 0.55385 0 0.458485 0.525663 0.556459 0 0.470634 0.523338 0.562542 0 0.484058 0.520186 0.568899 0 0.512221 0.516807 0.56346 0 0.556574 0.509318 0.572154 0 0.56284 0.514672 0.574289 0 0.570235 0.535032 0.576799 0 0.593466 0.559644 0.537603 0 0.720898 0.516608 0.555895 0 0.81196 0.501172 0.553065 0 0.844865 0.505781 0.550798 0 -3.58438 0.853569 6.99975 0 -3.58438 0.853569 6.99975 0 -3.58438 0.85357 6.99975 0 -3.37211 0.807553 6.60495 0 -2.9164 0.774798 5.81043 0 -2.40175 0.760923 4.92719 0 -2.07102 0.754805 4.35832 0 -1.67239 0.730288 3.66507 0 -0.820248 0.650729 2.15223 0 -0.467906 0.620936 1.66649 0 -0.306924 0.608312 1.46403 0 -0.00743014 0.585509 1.00584 0 0.299126 0.559783 0.549214 0 0.351907 0.546039 0.517272 0 0.363916 0.547673 0.526409 0 0.37776 0.547986 0.535948 0 0.38712 0.547257 0.539456 0 0.39737 0.547043 0.543088 0 0.406485 0.546393 0.546479 0 0.423709 0.543578 0.549433 0 0.439727 0.541225 0.548906 0 0.454308 0.540731 0.552839 0 0.467744 0.53857 0.559257 0 0.482394 0.536669 0.566297 0 0.510908 0.547539 0.55936 0 0.559495 0.56828 0.571629 0 0.577746 0.570479 0.579861 1329.07 0.580267 0.573213 0.58047 1373.15 0.594491 0.573176 0.538778 0 0.723505 0.534012 0.556105 0 0.812925 0.514919 0.561674 0 0.851109 0.526905 0.557769 0 -3.68789 0.913529 7.20821 0 -3.68789 0.913529 7.20821 0 -3.68789 0.913529 7.20821 0 -3.46548 0.903711 6.81741 0 -3.01884 0.826728 6.00877 0 -2.51322 0.770138 5.11432 0 -2.18405 0.759117 4.54281 0 -1.78173 0.751131 3.85532 0 -0.922884 0.699557 2.35139 0 -0.527044 0.656957 1.76824 0 -0.312116 0.634774 1.46321 0 -0.0325266 0.606305 1.02485 0 0.296192 0.580218 0.547009 0 0.353109 0.566098 0.511612 0 0.36417 0.565333 0.52104 0 0.376089 0.563984 0.531371 0 0.385779 0.562777 0.536296 0 0.396462 0.562182 0.539959 0 0.406379 0.566208 0.543915 0 0.422328 0.575484 0.549132 0 0.439935 0.579907 0.549644 0 0.460068 0.588019 0.553773 0 0.474954 0.595377 0.560605 0 0.494416 0.596448 0.561693 0 0.521725 0.594322 0.55391 0 0.552314 0.589383 0.5663 0 0.576263 0.582866 0.578381 1373.24 0.580804 0.58033 0.580444 8944.62 0.59224 0.576259 0.548755 1681.87 0.721658 0.535909 0.567281 0 0.808953 0.53981 0.554736 0 0.852401 0.533688 0.555231 0 -4.00063 0.99294 7.77137 0 -4.00063 0.99294 7.77137 0 -4.00063 0.99294 7.77137 0 -3.78241 0.973439 7.38254 0 -3.33129 0.930766 6.58948 0 -2.81668 0.911037 5.70191 0 -2.48735 0.89693 5.12946 0 -2.08831 0.874396 4.43074 0 -1.24059 0.754051 2.90305 0 -0.668789 0.730919 1.96271 0 -0.40601 0.715394 1.58005 0 -0.249428 0.700506 1.39351 0 0.0727665 0.681682 0.927994 0 0.332359 0.658658 0.533175 0 0.353123 0.652653 0.539929 0 0.377228 0.646442 0.538362 0 0.391084 0.643035 0.538848 0 0.405875 0.640145 0.540272 0 0.413386 0.639862 0.543839 0 0.427086 0.635741 0.544479 0 0.434594 0.63318 0.551564 0 0.447319 0.63322 0.550698 0 0.460493 0.62372 0.553451 0 0.473072 0.618971 0.559898 0 0.486828 0.613684 0.56646 0 0.519031 0.605399 0.550552 0 0.536259 0.598673 0.557826 0 0.553512 0.592249 0.566971 1681.87 0.591379 0.610423 0.541599 1799.41 0.754137 0.643562 0.570179 0 0.801241 0.644246 0.556911 0 0.832816 0.630873 0.556113 0 -4.45011 1.13818 8.60686 0 -4.45011 1.13818 8.60686 0 -4.45011 1.13818 8.60686 0 -4.23404 1.11299 8.2178 0 -3.77772 1.07314 7.40967 0 -3.26839 1.03208 6.51268 0 -2.93735 1.002 5.9228 0 -2.52151 0.985873 5.19216 0 -1.6432 0.941919 3.65412 0 -0.930782 0.887837 2.41584 0 -0.614203 0.866671 1.9274 0 -0.380896 0.846516 1.58906 0 -0.118419 0.823073 1.22808 0 0.115805 0.7793 0.883976 0 0.28808 0.730195 0.591205 0 0.317389 0.702748 0.55773 0 0.3367 0.682746 0.53539 0 0.34781 0.675774 0.534175 0 0.366422 0.670442 0.534207 0 0.394281 0.661479 0.53345 0 0.415739 0.659071 0.529087 0 0.447147 0.738543 0.545416 0 0.467194 0.765086 0.554816 0 0.47898 0.767013 0.560939 0 0.492855 0.767009 0.56741 0 0.532837 0.760188 0.552915 0 0.571157 0.755288 0.554869 0 0.581285 0.754996 0.555578 0 0.59823 0.755804 0.543949 0 0.714927 0.74533 0.554069 0 0.797234 0.731308 0.554777 0 0.830876 0.733301 0.559077 0 -4.75471 1.26151 9.16004 0 -4.75471 1.26151 9.16004 0 -4.75471 1.26151 9.16004 0 -4.53956 1.24251 8.7784 0 -4.09478 1.20404 8.00157 0 -3.57661 1.17345 7.10069 0 -3.24765 1.15014 6.52702 0 -2.84893 1.12671 5.8296 0 -2.00036 1.04295 4.31771 0 -1.27077 0.981322 3.01787 0 -0.779024 0.93481 2.13587 0 -0.563147 0.904966 1.81812 0 -0.286773 0.871145 1.41324 0 -0.0538557 0.853358 1.09114 0 0.114847 0.836616 0.874657 0 0.161035 0.830372 0.838733 0 0.197117 0.825414 0.8115 0 0.247974 0.82127 0.769747 0 0.354916 0.821638 0.621749 0 0.399461 0.824766 0.552507 0 0.423495 0.831199 0.548099 0 0.455207 0.832948 0.547122 0 0.47318 0.831147 0.554162 0 0.489113 0.829451 0.551439 0 0.509754 0.828384 0.545121 0 0.523667 0.826423 0.548867 0 0.545831 0.816604 0.557291 0 0.558976 0.811819 0.563383 0 0.613676 0.816929 0.526643 0 0.716164 0.825195 0.548081 0 0.83063 0.842841 0.566584 0 0.842822 0.84166 0.561127 0 -4.97408 1.34032 9.55751 0 -4.97408 1.34032 9.55751 0 -4.97408 1.34032 9.55751 0 -4.75412 1.32158 9.16253 0 -4.30245 1.2806 8.3611 0 -3.79772 1.23418 7.46971 0 -3.47379 1.20446 6.89655 0 -3.08162 1.16675 6.19846 0 -2.23133 1.0872 4.67814 0 -1.52109 1.02954 3.44558 0 -1.03861 0.997426 2.62082 0 -0.619547 0.997599 1.92786 0 -0.328459 0.976422 1.51566 0 -0.0992731 0.952691 1.20617 0 0.0594071 0.934338 0.981479 0 0.0821389 0.931448 0.976009 0 0.121777 0.927041 0.928266 0 0.211331 0.915998 0.804606 0 0.271263 0.904351 0.749222 0 0.338561 0.894739 0.691356 0 0.398151 0.889048 0.615788 0 0.424937 0.878003 0.565327 0 0.459357 0.861552 0.548236 0 0.471927 0.8595 0.553493 0 0.500457 0.856486 0.54487 0 0.523322 0.863768 0.547094 0 0.543123 0.882228 0.554925 0 0.560538 0.884904 0.562357 0 0.620805 0.888872 0.521226 0 0.734355 0.89792 0.546731 0 0.83848 0.904788 0.566224 0 0.852636 0.902468 0.5685 0 -6.39772 0.592637 12.3753 0 -6.39772 0.592637 12.3753 0 -6.39772 0.592637 12.3753 0 -6.17215 0.574956 11.9903 0 -5.72285 0.54316 11.1956 0 -5.2087 0.508283 10.2899 0 -4.87613 0.485083 9.70064 0 -4.48639 0.461201 8.97654 0 -3.61325 0.390916 7.43934 0 -2.89356 0.341719 6.14402 0 -2.41904 0.309103 5.27292 0 -1.94114 0.268636 4.46986 0 -1.31703 0.220545 3.39927 0 -0.812549 0.185193 2.49077 0 -0.464975 0.161025 1.91268 0 -0.201278 0.132306 1.56566 0 -0.0168198 0.116014 1.29558 0 0.204978 0.101613 0.93543 0 0.249648 0.103796 0.864954 0 0.288492 0.106121 0.809076 0 0.321379 0.109685 0.766593 0 0.340437 0.118516 0.744907 0 0.424823 0.116835 0.644981 0 0.501186 0.099933 0.629177 0 0.505993 0.101002 0.643416 0 0.510969 0.0995496 0.643159 0 0.517453 0.0983793 0.622437 0 0.521024 0.0983658 0.615968 0 0.648736 0.0972783 0.635983 0 0.744476 0.0986422 0.650468 0 0.838295 0.0981766 0.657339 0 0.875965 0.0986023 0.658429 0 -6.39772 0.592637 12.3753 0 -6.39772 0.592637 12.3753 0 -6.39772 0.592637 12.3753 0 -6.17215 0.574956 11.9903 0 -5.72285 0.54316 11.1956 0 -5.2087 0.508283 10.2899 0 -4.87613 0.485083 9.70064 0 -4.48639 0.461201 8.97654 0 -3.61325 0.390916 7.43934 0 -2.89356 0.341719 6.14402 0 -2.41904 0.309103 5.27292 0 -1.94114 0.268636 4.46986 0 -1.31703 0.220545 3.39927 0 -0.812549 0.185193 2.49077 0 -0.464975 0.161025 1.91268 0 -0.201278 0.132306 1.56566 0 -0.0168198 0.116014 1.29558 0 0.204978 0.101613 0.93543 0 0.249648 0.103796 0.864954 0 0.288492 0.106121 0.809076 0 0.321379 0.109685 0.766593 0 0.340437 0.118516 0.744907 0 0.424823 0.116835 0.644981 0 0.501186 0.099933 0.629177 0 0.505993 0.101002 0.643416 0 0.510969 0.0995496 0.643159 0 0.517453 0.0983793 0.622437 0 0.521024 0.0983658 0.615968 0 0.648736 0.0972783 0.635983 0 0.744476 0.0986422 0.650468 0 0.838295 0.0981766 0.657339 0 0.875965 0.0986023 0.658429 0 -6.39772 0.592637 12.3753 0 -6.39772 0.592637 12.3753 0 -6.39772 0.592637 12.3753 0 -6.17215 0.574956 11.9903 0 -5.72285 0.54316 11.1956 0 -5.2087 0.508283 10.2899 0 -4.87613 0.485083 9.70064 0 -4.48639 0.461201 8.97654 0 -3.61325 0.390916 7.43934 0 -2.89356 0.341719 6.14402 0 -2.41904 0.309103 5.27292 0 -1.94114 0.268636 4.46986 0 -1.31703 0.220545 3.39927 0 -0.812549 0.185193 2.49077 0 -0.464975 0.161025 1.91268 0 -0.201277 0.132306 1.56566 0 -0.0168198 0.116014 1.29558 0 0.204978 0.101613 0.93543 0 0.249648 0.103796 0.864954 0 0.288492 0.106121 0.809076 0 0.321379 0.109685 0.766593 0 0.340437 0.118516 0.744907 0 0.424823 0.116835 0.644981 0 0.501186 0.099933 0.629177 0 0.505993 0.101002 0.643416 0 0.510969 0.0995496 0.643159 0 0.517453 0.0983793 0.622437 0 0.521024 0.0983658 0.615968 0 0.648736 0.0972783 0.635983 0 0.744476 0.0986422 0.650468 0 0.838295 0.0981766 0.657339 0 0.875965 0.0986023 0.658429 0 -6.43748 0.611792 12.4503 0 -6.43748 0.611792 12.4503 0 -6.43748 0.611792 12.4503 0 -6.21163 0.594456 12.065 0 -5.76175 0.562452 11.2698 0 -5.25872 0.523319 10.3834 0 -4.92538 0.496094 9.7968 0 -4.5322 0.471892 9.07345 0 -3.66318 0.403867 7.53182 0 -2.93428 0.352938 6.22699 0 -2.46337 0.323018 5.35344 0 -1.98464 0.282327 4.5483 0 -1.35327 0.234766 3.46728 0 -0.842657 0.201173 2.54568 0 -0.449806 0.172412 1.88363 0 -0.218418 0.145153 1.59217 0 -0.0299788 0.127356 1.31524 0 0.149503 0.115388 1.03422 0 0.234362 0.111001 0.894622 0 0.284409 0.112496 0.818209 0 0.325766 0.115133 0.762597 0 0.345072 0.125643 0.74135 0 0.418722 0.130141 0.631302 0 0.499826 0.109683 0.625526 0 0.50576 0.110631 0.642053 0 0.512319 0.109381 0.641563 0 0.518248 0.108137 0.622288 0 0.522454 0.107808 0.614599 0 0.648409 0.1064 0.635833 0 0.745041 0.106224 0.651418 0 0.83768 0.106295 0.65767 0 0.875874 0.107193 0.65912 0 -6.49924 0.636909 12.5642 0 -6.49924 0.636909 12.5642 0 -6.49924 0.636909 12.5642 0 -6.27305 0.622367 12.1803 0 -5.8241 0.588086 11.3828 0 -5.32168 0.544815 10.4949 0 -4.99498 0.515793 9.92525 0 -4.60613 0.485465 9.22712 0 -3.74514 0.424942 7.68454 0 -3.00007 0.368551 6.38152 0 -2.53671 0.347743 5.48809 0 -2.05567 0.307603 4.67812 0 -1.42271 0.258213 3.59849 0 -0.902453 0.22341 2.66669 0 -0.452748 0.189682 1.88678 0 -0.246628 0.168127 1.62401 0 -0.0593208 0.14948 1.35349 0 0.122158 0.132058 1.08489 0 0.228732 0.12487 0.910512 0 0.288361 0.125379 0.818619 0 0.334729 0.127804 0.755312 0 0.354171 0.139191 0.734202 0 0.426292 0.139324 0.666298 0 0.500781 0.126062 0.625898 0 0.509125 0.127472 0.642124 0 0.514184 0.12808 0.640327 0 0.519855 0.12747 0.621822 0 0.52516 0.127444 0.612407 0 0.647527 0.124161 0.635393 0 0.746514 0.122301 0.653683 0 0.836625 0.12393 0.658459 0 0.875946 0.125194 0.66072 0 -6.57112 0.654217 12.6876 0 -6.57112 0.654217 12.6876 0 -6.57112 0.654217 12.6876 0 -6.34516 0.640311 12.3034 0 -5.89887 0.611048 11.5082 0 -5.39549 0.567152 10.624 0 -5.06941 0.538927 10.0561 0 -4.68082 0.509533 9.35885 0 -3.8354 0.452462 7.85483 0 -3.08529 0.393646 6.55684 0 -2.6183 0.370149 5.66606 0 -2.14577 0.335909 4.84176 0 -1.5059 0.283342 3.75362 0 -0.978747 0.245915 2.82084 0 -0.509284 0.214023 1.98775 0 -0.297157 0.194932 1.6944 0 -0.0875697 0.174106 1.39015 0 0.113292 0.152191 1.10494 0 0.256265 0.141304 0.872539 0 0.290999 0.146194 0.822611 0 0.344846 0.1461 0.74815 0 0.364822 0.153092 0.725001 0 0.439952 0.148641 0.691142 0 0.509013 0.141233 0.646004 0 0.514056 0.148166 0.641842 0 0.517788 0.149673 0.640751 0 0.519064 0.151062 0.620003 0 0.523689 0.151877 0.608637 0 0.647113 0.142922 0.634892 0 0.748735 0.142346 0.65614 0 0.835597 0.144362 0.659336 0 0.875821 0.145104 0.66229 0 -6.61657 0.672027 12.7682 0 -6.61657 0.672027 12.7682 0 -6.61657 0.672027 12.7682 0 -6.39298 0.649243 12.3827 0 -5.94711 0.625886 11.5871 0 -5.44248 0.583323 10.7076 0 -5.11682 0.556483 10.1427 0 -4.72761 0.528167 9.44338 0 -3.88152 0.469954 7.93827 0 -3.14254 0.411384 6.66807 0 -2.66652 0.381419 5.78545 0 -2.20743 0.351296 4.95316 0 -1.56268 0.299345 3.86485 0 -1.02588 0.261409 2.91714 0 -0.562446 0.229492 2.08333 0 -0.339717 0.211033 1.76271 0 -0.110222 0.187287 1.42307 0 0.0942129 0.165771 1.1341 0 0.272874 0.152118 0.849344 0 0.295848 0.157173 0.819868 0 0.348901 0.156582 0.746101 0 0.370294 0.162693 0.720753 0 0.444571 0.15893 0.684622 0 0.511377 0.152105 0.651647 0 0.516326 0.159285 0.647233 0 0.520603 0.161831 0.641216 0 0.517758 0.164362 0.618146 0 0.519886 0.165816 0.604847 0 0.647169 0.152797 0.634722 0 0.750044 0.1524 0.656854 0 0.835022 0.153441 0.659929 0 0.875675 0.154239 0.663106 0 -6.65637 0.688725 12.8406 0 -6.65637 0.688725 12.8406 0 -6.65637 0.688725 12.8406 0 -6.43337 0.660207 12.4523 0 -5.98905 0.634147 11.6555 0 -5.48094 0.597896 10.7772 0 -5.1547 0.572351 10.2122 0 -4.76609 0.543514 9.5145 0 -3.92033 0.482781 8.00783 0 -3.18195 0.424157 6.73796 0 -2.70584 0.389976 5.88127 0 -2.25774 0.363242 5.0437 0 -1.60928 0.312619 3.95657 0 -1.07242 0.273028 3.00953 0 -0.606264 0.241234 2.16256 0 -0.369666 0.222846 1.81 0 -0.132943 0.197544 1.45945 0 0.0764075 0.175447 1.16393 0 0.273458 0.160149 0.850898 0 0.299242 0.164924 0.817877 0 0.343921 0.165437 0.75485 0 0.37508 0.170851 0.716979 0 0.430752 0.173447 0.681402 0 0.513173 0.161759 0.654341 0 0.518451 0.167523 0.653185 0 0.522368 0.170785 0.642559 0 0.518588 0.173745 0.61704 0 0.518905 0.175924 0.602345 0 0.647424 0.16231 0.634982 0 0.751073 0.161366 0.657536 0 0.834929 0.162429 0.659731 0 0.875387 0.163216 0.663927 0 -6.78864 0.730152 13.0875 0 -6.78864 0.730152 13.0875 0 -6.78864 0.730152 13.0875 0 -6.55815 0.715677 12.6935 0 -6.10425 0.674543 11.8775 0 -5.59078 0.634704 10.9729 0 -5.26301 0.617102 10.4064 0 -4.87626 0.588141 9.71182 0 -4.03473 0.521802 8.21224 0 -3.29786 0.464107 6.94819 0 -2.8172 0.433875 6.09475 0 -2.38324 0.407361 5.27348 0 -1.75147 0.352361 4.21321 0 -1.21737 0.310575 3.29109 0 -0.752185 0.277119 2.43685 0 -0.385057 0.249607 1.8255 0 -0.201003 0.230165 1.57094 0 0.0050109 0.211344 1.28063 0 0.196103 0.19551 0.990646 0 0.310775 0.193014 0.813594 0 0.334774 0.199833 0.781974 0 0.391624 0.202182 0.705026 0 0.415617 0.212089 0.677652 0 0.480915 0.20782 0.633545 0 0.526391 0.195986 0.661839 0 0.529273 0.197666 0.662801 0 0.532804 0.1974 0.635109 0 0.523878 0.202452 0.60955 0 0.64427 0.199604 0.633696 0 0.753867 0.192262 0.660251 0 0.836091 0.196454 0.656406 0 0.874534 0.196355 0.667507 0 -6.94262 0.745248 13.3664 0 -6.94262 0.745248 13.3664 0 -6.94262 0.745248 13.3664 0 -6.71522 0.741342 12.9737 0 -6.24621 0.721949 12.1731 0 -5.74462 0.688792 11.2642 0 -5.41019 0.651758 10.6852 0 -5.01216 0.625931 9.9734 0 -4.15652 0.577298 8.43803 0 -3.42094 0.514846 7.17328 0 -2.9527 0.481039 6.30799 0 -2.50978 0.451943 5.50023 0 -1.88048 0.394949 4.44341 0 -1.34942 0.353146 3.52955 0 -0.882156 0.321342 2.69618 0 -0.391461 0.284886 1.83653 0 -0.305878 0.280094 1.75483 0 -0.0265746 0.251948 1.33837 0 0.144973 0.234354 1.09128 0 0.296478 0.228891 0.857771 0 0.349378 0.232409 0.775806 0 0.40742 0.233308 0.694463 0 0.442726 0.242272 0.64846 0 0.465594 0.250031 0.622244 0 0.492909 0.246693 0.639343 0 0.528035 0.236608 0.66173 0 0.530427 0.237073 0.641792 0 0.529243 0.237873 0.619325 0 0.620309 0.2425 0.618271 0 0.750582 0.224212 0.663686 0 0.831765 0.229739 0.664701 0 0.876015 0.233173 0.671516 0 -7.02732 0.751308 13.5172 0 -7.02732 0.751308 13.5172 0 -7.02732 0.751308 13.5172 0 -6.80116 0.744066 13.1227 0 -6.32802 0.732623 12.3225 0 -5.82527 0.715484 11.4152 0 -5.4878 0.693321 10.8413 0 -5.09022 0.65224 10.1313 0 -4.23923 0.602415 8.59296 0 -3.49231 0.538236 7.3029 0 -3.02567 0.506802 6.41687 0 -2.57525 0.473359 5.61665 0 -1.94326 0.422169 4.55898 0 -1.41607 0.379098 3.64831 0 -0.945365 0.34549 2.81358 0 -0.461065 0.311392 1.96004 0 -0.329993 0.303176 1.77642 0 -0.0617831 0.274311 1.39461 0 0.0812996 0.259294 1.20562 0 0.300597 0.243862 0.860306 0 0.351646 0.248269 0.781527 0 0.41552 0.248338 0.688923 0 0.44813 0.256196 0.647023 0 0.468763 0.263503 0.622423 0 0.481791 0.265543 0.631147 0 0.504049 0.260798 0.644627 0 0.51566 0.25819 0.63631 0 0.515019 0.257782 0.614909 0 0.619824 0.256959 0.617773 0 0.749025 0.244068 0.661683 0 0.831328 0.251836 0.664764 0 0.876844 0.250912 0.671958 0 -7.08588 0.767792 13.6144 0 -7.08588 0.767792 13.6144 0 -7.08588 0.767792 13.6144 0 -6.86663 0.752595 13.2329 0 -6.40417 0.734735 12.4515 0 -5.89427 0.729126 11.5495 0 -5.56034 0.711771 10.9739 0 -5.15649 0.68524 10.2705 0 -4.31474 0.616239 8.72788 0 -3.56382 0.559562 7.4384 0 -3.08837 0.527204 6.54798 0 -2.63545 0.496601 5.72672 0 -2.00045 0.444152 4.66268 0 -1.47409 0.402705 3.75248 0 -1.01095 0.36848 2.92284 0 -0.523747 0.332019 2.07059 0 -0.331708 0.317001 1.77774 0 -0.0956873 0.293917 1.44229 0 0.0607795 0.278963 1.23085 0 0.308171 0.258437 0.854436 0 0.347272 0.262815 0.797372 0 0.409496 0.264067 0.703523 0 0.4511 0.267464 0.648639 0 0.471274 0.27323 0.624112 0 0.478976 0.27617 0.628673 0 0.4993 0.271981 0.641466 0 0.507497 0.271024 0.635237 0 0.507953 0.271467 0.614049 0 0.621761 0.27632 0.617615 0 0.747757 0.264521 0.658689 0 0.829707 0.265271 0.66647 0 0.877258 0.263156 0.672038 0 -7.13588 0.848216 13.7296 0 -7.13588 0.848216 13.7296 0 -7.13588 0.848216 13.7296 0 -6.92416 0.803939 13.3452 0 -6.4756 0.744481 12.5682 0 -5.97861 0.730277 11.7007 0 -5.64994 0.724824 11.1319 0 -5.24053 0.7056 10.4303 0 -4.40336 0.634259 8.8866 0 -3.65103 0.586626 7.60455 0 -3.16441 0.552061 6.72084 0 -2.7268 0.524823 5.8936 0 -2.08288 0.468655 4.80972 0 -1.54816 0.430369 3.88444 0 -1.08546 0.397236 3.0544 0 -0.596789 0.359234 2.20173 0 -0.338029 0.337794 1.78329 0 -0.164371 0.323319 1.54587 0 0.0365049 0.302902 1.26172 0 0.296935 0.279362 0.869168 0 0.353046 0.281111 0.796763 0 0.395045 0.284343 0.733558 0 0.455188 0.281032 0.6509 0 0.474403 0.28624 0.628015 0 0.478859 0.292935 0.626482 0 0.488817 0.295173 0.632672 0 0.492676 0.299305 0.624958 0 0.494023 0.302355 0.607599 0 0.624791 0.301223 0.618739 0 0.745104 0.287145 0.659861 0 0.826957 0.285074 0.668609 0 0.878459 0.284083 0.671967 0 -7.21452 0.88901 13.8665 0 -7.21452 0.88901 13.8665 0 -7.21452 0.88901 13.8665 0 -6.9903 0.877986 13.4861 0 -6.54109 0.822072 12.7048 0 -6.06586 0.744826 11.8218 0 -5.73675 0.730882 11.268 0 -5.33674 0.719709 10.5935 0 -4.50158 0.6857 9.0807 0 -3.75808 0.609912 7.79668 0 -3.2579 0.580132 6.92503 0 -2.82914 0.557395 6.09807 0 -2.19252 0.504068 5.00911 0 -1.65125 0.460607 4.08014 0 -1.17846 0.430461 3.23136 0 -0.677411 0.393447 2.35241 0 -0.359305 0.36848 1.79885 0 -0.231185 0.359062 1.64406 0 0.00495338 0.333425 1.28987 0 0.266193 0.303207 0.913886 0 0.364533 0.297741 0.777919 0 0.398851 0.302299 0.735995 0 0.459687 0.30313 0.653251 0 0.479173 0.31265 0.629284 0 0.485204 0.317527 0.628872 0 0.488252 0.320714 0.626678 0 0.49269 0.323671 0.619801 0 0.497469 0.324795 0.610777 0 0.631596 0.323011 0.625868 0 0.741327 0.30906 0.661223 0 0.825871 0.30996 0.669464 0 0.879412 0.311919 0.677879 0 -7.28047 0.90375 13.9737 0 -7.28047 0.90375 13.9737 0 -7.28047 0.90375 13.9737 0 -7.05474 0.893791 13.5938 0 -6.60071 0.872027 12.8113 0 -6.1184 0.797482 11.927 0 -5.79937 0.740801 11.3668 0 -5.40442 0.725697 10.6901 0 -4.57138 0.706228 9.20298 0 -3.83856 0.636533 7.94636 0 -3.33749 0.598171 7.07341 0 -2.89797 0.580178 6.253 0 -2.27484 0.531783 5.15929 0 -1.7313 0.485626 4.23455 0 -1.25782 0.45107 3.3875 0 -0.755774 0.417393 2.50308 0 -0.401581 0.390253 1.87146 0 -0.265478 0.377924 1.70008 0 -0.027837 0.351587 1.32679 0 0.210768 0.325793 1.00649 0 0.382289 0.316879 0.748086 0 0.410306 0.324459 0.724427 0 0.464166 0.323381 0.655626 0 0.482996 0.328215 0.628834 0 0.488742 0.332111 0.629098 0 0.490983 0.334416 0.628791 0 0.49581 0.33709 0.621005 0 0.499902 0.338863 0.613859 0 0.623438 0.336648 0.654578 0 0.743177 0.3265 0.661405 0 0.82545 0.329218 0.6695 0 0.880255 0.333612 0.683054 0 -7.35551 0.920657 14.1052 0 -7.35551 0.920657 14.1052 0 -7.35551 0.920657 14.1052 0 -7.12271 0.904513 13.7044 0 -6.67045 0.887042 12.9149 0 -6.16975 0.863261 12.0416 0 -5.85277 0.796512 11.4789 0 -5.47164 0.736488 10.7907 0 -4.63371 0.719617 9.30328 0 -3.89667 0.676565 8.05743 0 -3.41079 0.621137 7.20718 0 -2.97015 0.596182 6.41025 0 -2.35776 0.558726 5.30978 0 -1.81151 0.511608 4.38781 0 -1.33697 0.475091 3.54667 0 -0.848181 0.437056 2.67295 0 -0.491639 0.411017 2.04482 0 -0.254839 0.391325 1.68301 0 -0.0935264 0.381539 1.44514 0 0.137105 0.359863 1.1407 0 0.389628 0.338737 0.738903 0 0.417013 0.344012 0.716311 0 0.466537 0.343114 0.656708 0 0.488679 0.344345 0.626253 0 0.493605 0.348698 0.625726 0 0.496227 0.350351 0.626197 0 0.501462 0.352807 0.618215 0 0.503769 0.354707 0.61452 0 0.628268 0.35443 0.66118 0 0.746232 0.348758 0.655047 0 0.827437 0.352257 0.669627 0 0.881753 0.356986 0.686023 0 -7.42513 0.94203 14.2476 0 -7.42513 0.94203 14.2476 0 -7.42513 0.94203 14.2476 0 -7.19761 0.91986 13.8437 0 -6.73075 0.894867 13.0182 0 -6.22058 0.874267 12.1255 0 -5.89215 0.856111 11.5686 0 -5.51658 0.775633 10.8764 0 -4.6837 0.722398 9.37937 0 -3.943 0.693292 8.1357 0 -3.45436 0.653324 7.2899 0 -3.02832 0.61154 6.49099 0 -2.42164 0.579285 5.42631 0 -1.87466 0.531295 4.50821 0 -1.40237 0.490739 3.67726 0 -0.920607 0.453094 2.80501 0 -0.551078 0.428147 2.16242 0 -0.272872 0.409446 1.71774 0 -0.139073 0.403504 1.52588 0 0.117803 0.376678 1.16886 0 0.387689 0.352525 0.741491 0 0.421613 0.35782 0.710796 0 0.465662 0.358851 0.66193 0 0.493693 0.356633 0.623488 0 0.498341 0.360847 0.621148 0 0.501449 0.36242 0.621508 0 0.505606 0.364782 0.615008 0 0.507382 0.367372 0.612833 0 0.632419 0.370299 0.662897 0 0.741977 0.367337 0.648821 0 0.829833 0.369486 0.670314 0 0.879821 0.366056 0.686664 0 -7.50508 0.964217 14.4097 0 -7.50508 0.964217 14.4097 0 -7.50508 0.964217 14.4097 0 -7.27932 0.945406 14.0046 0 -6.80894 0.900508 13.182 0 -6.29493 0.885692 12.2558 0 -5.95286 0.870463 11.667 0 -5.56027 0.846801 10.9777 0 -4.74253 0.729785 9.47317 0 -3.99859 0.706868 8.22509 0 -3.50928 0.680357 7.38006 0 -3.08986 0.650471 6.57153 0 -2.48149 0.593878 5.52899 0 -1.95095 0.550978 4.64455 0 -1.47528 0.51146 3.81802 0 -0.984812 0.479398 2.92749 0 -0.611772 0.451866 2.28123 0 -0.287033 0.427027 1.73679 0 -0.178911 0.420913 1.59485 0 0.102535 0.392512 1.1849 0 0.377385 0.367502 0.759813 0 0.428925 0.369385 0.703621 0 0.45692 0.374907 0.678094 0 0.499848 0.370436 0.619873 0 0.504145 0.374915 0.617754 0 0.506259 0.376372 0.617939 0 0.509747 0.378406 0.612285 0 0.511297 0.381004 0.610609 0 0.635935 0.387545 0.663193 0 0.733212 0.388364 0.641609 0 0.832022 0.386859 0.672961 0 0.87729 0.374714 0.687194 0 -7.55981 0.981541 14.5122 0 -7.55981 0.981541 14.5122 0 -7.55981 0.981541 14.5122 0 -7.33973 0.964397 14.126 0 -6.87358 0.92292 13.3112 0 -6.3652 0.892745 12.3816 0 -6.01966 0.878308 11.7955 0 -5.61298 0.862634 11.0741 0 -4.78979 0.736924 9.54937 0 -4.04747 0.709464 8.29998 0 -3.55988 0.695855 7.45799 0 -3.14284 0.676304 6.65023 0 -2.53188 0.603523 5.61405 0 -1.99138 0.570239 4.7183 0 -1.51952 0.534245 3.89914 0 -1.03435 0.500044 3.02747 0 -0.667211 0.470006 2.38749 0 -0.295455 0.440706 1.74187 0 -0.1916 0.433635 1.61681 0 0.0881983 0.405375 1.20177 0 0.357184 0.379702 0.793462 0 0.435094 0.379107 0.69745 0 0.463612 0.385603 0.672203 0 0.499158 0.382571 0.628605 0 0.507481 0.387485 0.619027 0 0.508808 0.389562 0.619654 0 0.513283 0.390374 0.611015 0 0.518329 0.39279 0.603748 0 0.639623 0.400388 0.66313 0 0.728025 0.403621 0.637299 0 0.82949 0.394426 0.672502 0 0.875246 0.381402 0.687579 0 -7.62012 1.00545 14.6179 0 -7.62012 1.00545 14.6179 0 -7.62012 1.00545 14.6179 0 -7.3999 0.98823 14.2314 0 -6.94387 0.951158 13.4448 0 -6.4433 0.906333 12.5473 0 -6.10865 0.887065 11.9549 0 -5.69534 0.871994 11.2372 0 -4.84064 0.799663 9.6664 0 -4.11423 0.714299 8.40708 0 -3.62963 0.704048 7.56825 0 -3.20092 0.694112 6.75081 0 -2.5737 0.638528 5.69887 0 -2.04108 0.588247 4.79593 0 -1.57246 0.560533 3.9852 0 -1.0958 0.523989 3.13229 0 -0.733135 0.492174 2.51019 0 -0.319378 0.459125 1.77825 0 -0.183179 0.446017 1.60162 0 0.0697038 0.422855 1.22403 0 0.297621 0.399468 0.898859 0 0.44453 0.39182 0.688038 0 0.474849 0.399566 0.662197 0 0.500155 0.399251 0.638002 0 0.51279 0.402701 0.618024 0 0.512892 0.406095 0.621768 0 0.521863 0.405407 0.603964 0 0.524918 0.408193 0.599964 0 0.643254 0.415194 0.665014 0 0.719433 0.424319 0.631624 0 0.826107 0.401678 0.672108 0 0.87251 0.388863 0.687897 0 -7.6752 1.02724 14.7142 0 -7.6752 1.02724 14.7142 0 -7.6752 1.02724 14.7142 0 -7.45523 1.00979 14.3281 0 -6.99881 0.972572 13.5431 0 -6.5019 0.933116 12.6616 0 -6.1842 0.90344 12.0938 0 -5.772 0.878348 11.3873 0 -4.91589 0.85062 9.82879 0 -4.18232 0.721414 8.52354 0 -3.69233 0.710604 7.64227 0 -3.24697 0.70925 6.82987 0 -2.6207 0.669245 5.7905 0 -2.09514 0.610109 4.88798 0 -1.62959 0.577389 4.07351 0 -1.14959 0.546647 3.224 0 -0.79054 0.516231 2.60503 0 -0.377724 0.481871 1.87899 0 -0.206194 0.46435 1.64147 0 0.0378658 0.443629 1.27112 0 0.228551 0.423269 1.02876 0 0.455052 0.406098 0.677995 0 0.479075 0.413981 0.663081 0 0.504819 0.41812 0.644246 0 0.516906 0.417698 0.62 0 0.518525 0.422202 0.620705 0 0.528288 0.421556 0.601621 0 0.529608 0.424705 0.600816 0 0.646448 0.42997 0.667745 0 0.732786 0.436959 0.652037 0 0.823013 0.409146 0.671557 0 0.866342 0.396095 0.683894 0 -7.74556 1.04906 14.8359 0 -7.74556 1.04906 14.8359 0 -7.74556 1.04906 14.8359 0 -7.52399 1.03589 14.4493 0 -7.06511 0.999873 13.6621 0 -6.56932 0.963786 12.7787 0 -6.24753 0.93898 12.2128 0 -5.85177 0.896413 11.534 0 -5.01783 0.860652 10.0233 0 -4.26296 0.779282 8.70032 0 -3.76774 0.714517 7.80892 0 -3.32644 0.71221 6.95963 0 -2.68619 0.689354 5.90583 0 -2.15698 0.650171 5.00301 0 -1.69807 0.59834 4.18172 0 -1.21218 0.57037 3.32951 0 -0.84957 0.543832 2.70675 0 -0.431537 0.509941 1.97558 0 -0.240856 0.492142 1.68821 0 -0.039369 0.475948 1.40393 0 0.18248 0.449886 1.10635 0 0.463951 0.423765 0.669739 0 0.483413 0.432095 0.665409 0 0.508958 0.438472 0.646408 0 0.520554 0.437015 0.625888 0 0.523346 0.440042 0.623222 0 0.531302 0.440582 0.60835 0 0.534247 0.44102 0.601855 0 0.649654 0.445391 0.670686 0 0.739205 0.443517 0.680668 0 0.81338 0.416743 0.666914 0 0.856359 0.403191 0.675626 0 -7.81377 1.07396 14.9567 0 -7.81377 1.07396 14.9567 0 -7.81377 1.07396 14.9567 0 -7.59324 1.05615 14.569 0 -7.13264 1.02633 13.784 0 -6.64144 0.987699 12.9056 0 -6.32169 0.961289 12.3442 0 -5.92489 0.924073 11.6669 0 -5.08816 0.87408 10.1462 0 -4.34506 0.839437 8.87858 0 -3.85169 0.753928 7.99584 0 -3.42338 0.718247 7.13823 0 -2.77246 0.696326 6.05004 0 -2.22067 0.673159 5.11097 0 -1.7587 0.638526 4.28845 0 -1.27594 0.586864 3.43438 0 -0.913357 0.566715 2.81148 0 -0.487827 0.536664 2.075 0 -0.2668 0.518635 1.71404 0 -0.0803394 0.504114 1.46872 0 0.16119 0.477646 1.11997 0 0.455066 0.44705 0.676223 0 0.486669 0.450215 0.66707 0 0.512437 0.457727 0.648184 0 0.517233 0.459769 0.649349 0 0.523866 0.458687 0.634996 0 0.53222 0.457482 0.61717 0 0.538483 0.455818 0.602807 0 0.655457 0.457191 0.664638 0 0.733434 0.450261 0.679723 0 0.798847 0.426811 0.65353 0 0.861614 0.42306 0.680115 0 -7.88939 1.11119 15.0992 0 -7.88939 1.11119 15.0992 0 -7.88939 1.11119 15.0992 0 -7.67214 1.08707 14.714 0 -7.21843 1.0438 13.9328 0 -6.71926 1.01497 13.0441 0 -6.39262 0.99116 12.4727 0 -5.98951 0.96035 11.7806 0 -5.16344 0.89409 10.2684 0 -4.42408 0.854393 9.013 0 -3.92659 0.828605 8.1671 0 -3.50086 0.742486 7.34995 0 -2.88488 0.701834 6.23931 0 -2.32115 0.684896 5.29927 0 -1.83913 0.665925 4.4411 0 -1.34086 0.627125 3.55435 0 -0.985371 0.587175 2.92888 0 -0.562757 0.563902 2.19551 0 -0.281269 0.546473 1.72133 0 -0.10023 0.530574 1.49646 0 0.138499 0.506057 1.13702 0 0.433905 0.475376 0.684102 0 0.484794 0.47272 0.665478 0 0.515276 0.478531 0.650227 0 0.521526 0.479633 0.651572 0 0.523349 0.481924 0.651912 0 0.537326 0.474598 0.61839 0 0.542879 0.473731 0.60599 0 0.663598 0.467472 0.647346 0 0.690638 0.479087 0.651641 0 0.793527 0.440381 0.643889 0 0.877695 0.474879 0.694518 0 -7.98235 1.13671 15.2633 0 -7.98235 1.13671 15.2633 0 -7.98235 1.13671 15.2633 0 -7.75876 1.12423 14.8723 0 -7.29546 1.0864 14.077 0 -6.80259 1.0453 13.1839 0 -6.47467 1.02443 12.6204 0 -6.07627 0.993753 11.9352 0 -5.24906 0.935464 10.4256 0 -4.51401 0.868444 9.16302 0 -4.01497 0.846558 8.31367 0 -3.57294 0.83111 7.50608 0 -2.99424 0.72004 6.42946 0 -2.44746 0.688663 5.52046 0 -1.95132 0.677628 4.671 0 -1.45384 0.661374 3.77593 0 -1.08069 0.637057 3.12504 0 -0.651915 0.591246 2.35463 0 -0.29742 0.567257 1.72632 0 -0.106312 0.548764 1.48573 0 0.111859 0.531819 1.16968 0 0.358732 0.513016 0.79351 0 0.482272 0.498313 0.663429 0 0.513586 0.499281 0.648238 0 0.524038 0.498053 0.653253 0 0.526237 0.498262 0.653219 0 0.536039 0.495607 0.635295 0 0.547357 0.492944 0.609906 0 0.668005 0.498988 0.642781 0 0.685026 0.5006 0.643225 0 0.806943 0.500738 0.648871 0 0.873608 0.4833 0.701354 0 -8.07135 1.17333 15.425 0 -8.07135 1.17333 15.425 0 -8.07135 1.17333 15.425 0 -7.85005 1.15574 15.0347 0 -7.38749 1.1218 14.2437 0 -6.89544 1.0863 13.355 0 -6.5706 1.05147 12.7891 0 -6.17118 1.02385 12.1026 0 -5.34124 0.969958 10.59 0 -4.60309 0.904817 9.32385 0 -4.10937 0.862036 8.46869 0 -3.66863 0.851284 7.66073 0 -3.06162 0.823991 6.59461 0 -2.53993 0.710823 5.68072 0 -2.0623 0.683275 4.86264 0 -1.5738 0.673448 4.00771 0 -1.20621 0.662799 3.36749 0 -0.768234 0.636456 2.6011 0 -0.408464 0.600356 1.95642 0 -0.15349 0.57486 1.55707 0 0.0424845 0.558238 1.2727 0 0.283259 0.534743 0.915605 0 0.475763 0.515874 0.659074 0 0.509222 0.514599 0.645834 0 0.525053 0.513045 0.654489 0 0.527456 0.512928 0.654418 0 0.531215 0.512978 0.653179 0 0.550922 0.505524 0.609736 0 0.668777 0.53528 0.640644 0 0.692714 0.518621 0.636782 0 0.8037 0.51083 0.652092 0 0.869038 0.504193 0.688638 0 -8.17312 1.2068 15.613 0 -8.17312 1.2068 15.613 0 -8.17312 1.2068 15.613 0 -7.9515 1.19018 15.2227 0 -7.49076 1.15185 14.4294 0 -6.99324 1.12048 13.5338 0 -6.66258 1.09981 12.9637 0 -6.26565 1.05866 12.2712 0 -5.43371 1.00639 10.7574 0 -4.69384 0.944471 9.4893 0 -4.2004 0.901641 8.63467 0 -3.76875 0.867663 7.8219 0 -3.15562 0.844538 6.75465 0 -2.61244 0.813581 5.85513 0 -2.15482 0.716275 5.02468 0 -1.67415 0.681956 4.16431 0 -1.31038 0.671455 3.53987 0 -0.88064 0.662036 2.80763 0 -0.528157 0.639379 2.19322 0 -0.199306 0.613134 1.6516 0 -0.0238662 0.598357 1.40931 0 0.21208 0.569478 1.05363 0 0.467739 0.53823 0.653691 0 0.510673 0.553291 0.645254 0 0.534745 0.569583 0.658522 0 0.540848 0.570211 0.661048 0 0.544735 0.574381 0.66028 0 0.566143 0.567721 0.620456 0 0.663952 0.544591 0.634749 0 0.696496 0.538844 0.646067 0 0.802996 0.524647 0.670731 0 0.86192 0.511745 0.683546 0 -8.28192 1.24247 15.8124 0 -8.28192 1.24247 15.8124 0 -8.28192 1.24247 15.8124 0 -8.0598 1.22623 15.4215 0 -7.59844 1.19045 14.6267 0 -7.0995 1.15485 13.7311 0 -6.77237 1.12893 13.1588 0 -6.36879 1.10332 12.4652 0 -5.53687 1.03586 10.9384 0 -4.79403 0.982533 9.67005 0 -4.30057 0.942401 8.81818 0 -3.86984 0.91529 8.00265 0 -3.25994 0.860245 6.92886 0 -2.71645 0.833234 6.03289 0 -2.23881 0.809778 5.20966 0 -1.77346 0.721017 4.33875 0 -1.4155 0.681904 3.71037 0 -0.98758 0.667403 2.97623 0 -0.629802 0.66055 2.36297 0 -0.220093 0.638553 1.66557 0 -0.0231389 0.619505 1.40409 0 0.198351 0.603943 1.084 0 0.471587 0.587459 0.655117 0 0.525427 0.59059 0.653641 0 0.535491 0.593829 0.6578 0 0.540181 0.593467 0.659799 0 0.54663 0.59217 0.661181 0 0.55646 0.588575 0.645331 1681.87 0.6619 0.549375 0.63223 1799.41 0.698071 0.54587 0.652674 0 0.801603 0.527517 0.683913 0 0.851933 0.521861 0.679688 0 -8.57757 1.33922 16.3537 0 -8.57757 1.33922 16.3537 0 -8.57757 1.33922 16.3537 0 -8.35658 1.32266 15.9644 0 -7.89998 1.28688 15.172 0 -7.39829 1.25026 14.2853 0 -7.07822 1.228 13.7129 0 -6.67481 1.19562 13.025 0 -5.84334 1.13674 11.511 0 -5.10879 1.08434 10.2421 0 -4.61429 1.03648 9.38436 0 -4.17392 1.01135 8.56462 0 -3.56137 0.978279 7.48173 0 -3.01516 0.936983 6.57117 0 -2.54006 0.898051 5.74019 0 -2.0622 0.853251 4.86687 0 -1.69801 0.830212 4.24036 0 -1.27357 0.811587 3.50731 0 -0.924814 0.793122 2.89814 0 -0.472756 0.675532 2.05568 0 -0.19032 0.657939 1.615 0 0.0510121 0.639408 1.26473 0 0.24879 0.625004 0.997971 0 0.493091 0.611896 0.636482 0 0.522943 0.601647 0.651724 0 0.532715 0.598351 0.656282 0 0.535514 0.597418 0.657506 0 0.538498 0.59643 0.658756 1799.41 0.669489 0.677696 0.680754 23575.8 0.747996 0.678078 0.627784 4488.59 0.814929 0.660284 0.658438 0 0.849511 0.652503 0.676585 0 -9.00595 1.49031 17.1399 0 -9.00595 1.49031 17.1399 0 -9.00595 1.49031 17.1399 0 -8.78512 1.47262 16.7503 0 -8.33098 1.4354 15.9549 0 -7.82638 1.39162 15.0686 0 -7.51297 1.36593 14.4935 0 -7.11216 1.32769 13.8058 0 -6.28006 1.26109 12.2973 0 -5.55321 1.20808 11.0328 0 -5.071 1.16148 10.2042 0 -4.61174 1.12833 9.41395 0 -4.02225 1.10903 8.30357 0 -3.47731 1.06273 7.38672 0 -2.99979 1.00697 6.55687 0 -2.50982 0.978189 5.66638 0 -2.14258 0.949923 5.02135 0 -1.71559 0.914157 4.26329 0 -1.36265 0.885698 3.63031 0 -0.878301 0.839326 2.76217 0 -0.415351 0.828276 1.96469 0 -0.138206 0.806301 1.55142 0 0.117889 0.786747 1.18133 0 0.378296 0.767898 0.822598 0 0.527941 0.752377 0.647555 0 0.544835 0.749085 0.644096 0 0.552835 0.74862 0.637913 0 0.555189 0.752656 0.632143 0 0.623303 0.754488 0.651966 4488.7 0.729439 0.7527 0.671689 3627.41 0.794284 0.753036 0.634107 0 0.880384 0.744022 0.678962 0 -9.35165 1.59027 17.7677 0 -9.35165 1.59027 17.7677 0 -9.35165 1.59027 17.7677 0 -9.13539 1.57039 17.3876 0 -8.68336 1.53821 16.5938 0 -8.16101 1.50547 15.7018 0 -7.83774 1.49077 15.1188 0 -7.42187 1.47356 14.393 0 -6.56885 1.41376 12.8415 0 -5.83342 1.34816 11.5519 0 -5.34182 1.30095 10.6948 0 -4.92005 1.27062 9.86605 0 -4.30121 1.21039 8.79581 0 -3.7749 1.15919 7.90362 0 -3.32097 1.11902 7.12068 0 -2.83881 1.08518 6.27786 0 -2.46902 1.07011 5.62652 0 -2.02732 1.05621 4.86779 0 -1.66298 1.04471 4.23502 0 -1.1855 1.00916 3.39423 0 -0.753476 0.964961 2.632 0 -0.286108 0.929876 1.81152 0 -0.0232853 0.897573 1.42232 0 0.236284 0.865376 1.03628 0 0.501006 0.829574 0.642867 0 0.515268 0.82381 0.642787 0 0.531973 0.817033 0.647958 0 0.55906 0.804029 0.618308 0 0.635133 0.820381 0.658559 0 0.726829 0.837486 0.669792 0 0.797632 0.839732 0.670764 0 0.86793 0.823684 0.684026 0 -9.54697 1.6937 18.1346 0 -9.54697 1.6937 18.1346 0 -9.54697 1.6937 18.1346 0 -9.33167 1.67438 17.759 0 -8.88209 1.63328 16.9587 0 -8.3744 1.58517 16.0699 0 -8.06192 1.55925 15.4896 0 -7.66101 1.52034 14.7958 0 -6.83236 1.45004 13.268 0 -6.10356 1.38072 12.004 0 -5.61751 1.34132 11.1739 0 -5.1486 1.33428 10.3362 0 -4.5261 1.3233 9.22891 0 -3.99383 1.27451 8.3358 0 -3.52333 1.23247 7.52851 0 -3.04674 1.18995 6.69797 0 -2.7015 1.16057 6.06879 0 -2.28234 1.12116 5.33944 0 -1.92865 1.09248 4.71509 0 -1.44652 1.05628 3.85871 0 -1.00262 1.02575 3.07289 0 -0.532493 0.97099 2.22947 0 -0.141268 0.942208 1.56789 0 0.141681 0.922315 1.16089 0 0.375519 0.906135 0.853424 0 0.447903 0.899443 0.749385 0 0.517458 0.889069 0.649404 0 0.545053 0.876068 0.646739 0 0.644002 0.877726 0.661856 0 0.689068 0.911588 0.645275 0 0.821231 0.911244 0.668531 0 0.857796 0.898872 0.676715 0 -10.9595 0.931189 20.8834 0 -10.9595 0.931189 20.8834 0 -10.9595 0.931189 20.8834 0 -10.7424 0.910488 20.5049 0 -10.2964 0.875639 19.7286 0 -9.78971 0.857023 18.8537 0 -9.46252 0.843355 18.2845 0 -9.0686 0.81293 17.588 0 -8.22776 0.697931 16.0699 0 -7.49021 0.681419 14.7918 0 -6.99859 0.652395 13.9308 0 -6.54469 0.606294 13.123 0 -5.93353 0.562775 12.0489 0 -5.41018 0.525862 11.1339 0 -4.94022 0.488315 10.3009 0 -4.44989 0.450615 9.43559 0 -4.08951 0.424604 8.8025 0 -3.66514 0.396696 8.05899 0 -3.31168 0.373604 7.43932 0 -2.82825 0.336545 6.5904 0 -2.39484 0.303213 5.81678 0 -1.91211 0.264135 4.98275 0 -1.43415 0.229235 4.09596 0 -0.888653 0.185589 3.11716 0 -0.414403 0.157968 2.23801 0 0.0709396 0.113587 1.39071 0 0.239913 0.100438 1.11468 0 0.292498 0.109506 1.05159 0 0.666958 0.0960136 0.738094 0 0.750576 0.099332 0.739831 0 0.845602 0.0987186 0.758026 0 0.867151 0.101298 0.763937 0 -10.9595 0.931189 20.8834 0 -10.9595 0.931189 20.8834 0 -10.9595 0.931189 20.8834 0 -10.7424 0.910488 20.5049 0 -10.2964 0.875639 19.7286 0 -9.78971 0.857023 18.8537 0 -9.46252 0.843355 18.2845 0 -9.0686 0.81293 17.588 0 -8.22776 0.697931 16.0699 0 -7.49021 0.681419 14.7918 0 -6.99859 0.652395 13.9308 0 -6.54469 0.606294 13.123 0 -5.93353 0.562775 12.0489 0 -5.41018 0.525862 11.1339 0 -4.94022 0.488315 10.3009 0 -4.44989 0.450615 9.43559 0 -4.08951 0.424604 8.8025 0 -3.66514 0.396696 8.05899 0 -3.31168 0.373604 7.43932 0 -2.82825 0.336545 6.5904 0 -2.39484 0.303213 5.81678 0 -1.91211 0.264135 4.98275 0 -1.43415 0.229235 4.09596 0 -0.888653 0.185589 3.11716 0 -0.414403 0.157968 2.23801 0 0.0709396 0.113587 1.39071 0 0.239913 0.100438 1.11468 0 0.292498 0.109506 1.05159 0 0.666958 0.0960136 0.738094 0 0.750576 0.099332 0.739831 0 0.845602 0.0987186 0.758026 0 0.867151 0.101298 0.763937 0 -10.9595 0.931189 20.8834 0 -10.9595 0.931189 20.8834 0 -10.9595 0.931189 20.8834 0 -10.7424 0.910488 20.5049 0 -10.2964 0.875639 19.7286 0 -9.78971 0.857023 18.8537 0 -9.46252 0.843355 18.2845 0 -9.0686 0.81293 17.588 0 -8.22776 0.697931 16.0699 0 -7.49021 0.681419 14.7918 0 -6.99859 0.652395 13.9308 0 -6.54469 0.606294 13.123 0 -5.93353 0.562775 12.0489 0 -5.41018 0.525862 11.1339 0 -4.94022 0.488315 10.3009 0 -4.44989 0.450615 9.43559 0 -4.08951 0.424604 8.8025 0 -3.66515 0.396696 8.059 0 -3.31168 0.373604 7.43932 0 -2.82825 0.336545 6.5904 0 -2.39484 0.303213 5.81678 0 -1.91211 0.264135 4.98275 0 -1.43415 0.229235 4.09596 0 -0.888653 0.185589 3.11716 0 -0.414403 0.157968 2.23801 0 0.0709396 0.113587 1.39071 0 0.239913 0.100438 1.11468 0 0.292498 0.109506 1.05159 0 0.666958 0.0960136 0.738094 0 0.750576 0.099332 0.739831 0 0.845602 0.0987186 0.758026 0 0.867151 0.101298 0.763937 0 -10.993 0.952847 20.9397 0 -10.993 0.952847 20.9397 0 -10.993 0.952847 20.9397 0 -10.7745 0.936592 20.562 0 -10.3296 0.896417 19.7845 0 -9.83018 0.865319 18.9197 0 -9.50744 0.852255 18.3622 0 -9.1102 0.833559 17.6657 0 -8.27262 0.703367 16.1441 0 -7.53475 0.684494 14.8667 0 -7.04131 0.663923 14.007 0 -6.58464 0.627583 13.201 0 -5.97629 0.571214 12.1244 0 -5.451 0.539886 11.2073 0 -4.97904 0.504408 10.3742 0 -4.48773 0.467645 9.50784 0 -4.1271 0.441312 8.87418 0 -3.70298 0.411019 8.12974 0 -3.34995 0.387232 7.51034 0 -2.86994 0.349308 6.6621 0 -2.43345 0.314494 5.88513 0 -1.95042 0.274754 5.05064 0 -1.47249 0.241104 4.16443 0 -0.926312 0.197002 3.18496 0 -0.42572 0.168255 2.25094 0 0.054023 0.125947 1.42079 0 0.24188 0.109808 1.11331 0 0.297909 0.118242 1.0466 0 0.6656 0.105176 0.735877 0 0.750671 0.107229 0.740069 0 0.845741 0.10722 0.758052 0 0.86791 0.110204 0.764508 0 -11.0456 0.981667 21.0309 0 -11.0456 0.981667 21.0309 0 -11.0456 0.981667 21.0309 0 -10.8251 0.965664 20.6476 0 -10.3782 0.932609 19.8711 0 -9.8845 0.881857 19.0004 0 -9.56336 0.863327 18.4415 0 -9.17099 0.846307 17.7608 0 -8.33589 0.734484 16.2652 0 -7.6068 0.686749 14.9869 0 -7.1102 0.678379 14.128 0 -6.65077 0.652041 13.3241 0 -6.04154 0.594715 12.2463 0 -5.51674 0.559554 11.3244 0 -5.04242 0.531388 10.4956 0 -4.55129 0.495111 9.62895 0 -4.19195 0.466727 8.99621 0 -3.76957 0.433115 8.25202 0 -3.41783 0.405028 7.63035 0 -2.93524 0.369472 6.78116 0 -2.49586 0.333013 6.00111 0 -2.01568 0.294516 5.16898 0 -1.54006 0.263149 4.28638 0 -0.991941 0.220062 3.30578 0 -0.395448 0.180145 2.19519 0 0.0327192 0.145323 1.4641 0 0.245621 0.127567 1.11071 0 0.306806 0.132502 1.03788 0 0.662109 0.123395 0.731466 0 0.751237 0.124188 0.740703 0 0.846396 0.125111 0.758322 0 0.868949 0.12717 0.766099 0 -11.1106 1.01414 21.1494 0 -11.1106 1.01414 21.1494 0 -11.1106 1.01414 21.1494 0 -10.8903 0.996849 20.7646 0 -10.4419 0.958715 19.9741 0 -9.94371 0.913598 19.0943 0 -9.62708 0.879207 18.5335 0 -9.23582 0.859239 17.8539 0 -8.39032 0.80864 16.3866 0 -7.687 0.695503 15.1243 0 -7.19128 0.681217 14.2617 0 -6.72611 0.672998 13.46 0 -6.11078 0.637884 12.3865 0 -5.59188 0.583714 11.4607 0 -5.11889 0.553358 10.6359 0 -4.62738 0.521657 9.7703 0 -4.26838 0.492075 9.13539 0 -3.84657 0.456458 8.38956 0 -3.49462 0.428087 7.76753 0 -3.01149 0.39146 6.91727 0 -2.56646 0.359557 6.1349 0 -2.09264 0.321266 5.30803 0 -1.61667 0.28864 4.42504 0 -1.06402 0.247274 3.44262 0 -0.451102 0.203604 2.2952 0 0.0160236 0.165101 1.50259 0 0.25196 0.14459 1.10317 0 0.28709 0.151899 1.05964 0 0.655715 0.143723 0.726061 0 0.752076 0.144831 0.741553 0 0.846506 0.143768 0.758537 0 0.870242 0.145622 0.767069 0 -11.1563 1.02669 21.2246 0 -11.1563 1.02669 21.2246 0 -11.1563 1.02669 21.2246 0 -10.9358 1.01167 20.8397 0 -10.4876 0.973191 20.0493 0 -9.98809 0.930869 19.1684 0 -9.66826 0.899441 18.6023 0 -9.27843 0.867273 17.9167 0 -8.42846 0.830475 16.4501 0 -7.72804 0.716817 15.1965 0 -7.24259 0.686048 14.348 0 -6.77816 0.674765 13.5465 0 -6.16063 0.651589 12.4766 0 -5.63908 0.609273 11.5523 0 -5.16979 0.563645 10.7267 0 -4.67668 0.536641 9.85854 0 -4.31691 0.507855 9.22267 0 -3.89413 0.473351 8.4759 0 -3.54204 0.444484 7.85348 0 -3.0601 0.406843 7.00412 0 -2.61111 0.375228 6.21908 0 -2.14158 0.338926 5.39598 0 -1.66413 0.304341 4.51104 0 -1.10983 0.261584 3.52778 0 -0.49749 0.219041 2.37813 0 0.00537521 0.1767 1.52598 0 0.256726 0.154155 1.09743 0 0.280897 0.163616 1.06743 0 0.652762 0.155542 0.723022 0 0.752428 0.155478 0.742113 0 0.846474 0.153345 0.758747 0 0.870974 0.155125 0.767523 0 -11.2026 1.03527 21.3051 0 -11.2026 1.03527 21.3051 0 -11.2026 1.03527 21.3051 0 -10.9772 1.02132 20.9073 0 -10.5281 0.985263 20.1169 0 -10.0281 0.943861 19.237 0 -9.70691 0.916766 18.6719 0 -9.3167 0.879738 17.9817 0 -8.46371 0.839543 16.5046 0 -7.75323 0.762178 15.2558 0 -7.28016 0.691986 14.4066 0 -6.82242 0.676055 13.6211 0 -6.20244 0.661514 12.5517 0 -5.67811 0.628506 11.6276 0 -5.21006 0.576321 10.8007 0 -4.71763 0.545608 9.93056 0 -4.35691 0.520474 9.29511 0 -3.93401 0.486394 8.54841 0 -3.58174 0.458012 7.92657 0 -3.10027 0.420376 7.07757 0 -2.65415 0.387098 6.29424 0 -2.18327 0.351954 5.47074 0 -1.70524 0.316779 4.58545 0 -1.14983 0.273076 3.60191 0 -0.538775 0.232127 2.45144 0 -0.000831902 0.186029 1.54035 0 0.261683 0.162055 1.09178 0 0.279714 0.17371 1.07051 0 0.651394 0.165651 0.721017 0 0.752389 0.164089 0.742602 0 0.846556 0.162642 0.759272 0 0.871789 0.164596 0.768027 0 -11.3463 1.06758 21.5886 0 -11.3463 1.06758 21.5886 0 -11.3463 1.06758 21.5886 0 -11.1198 1.0466 21.1824 0 -10.6554 1.01913 20.3587 0 -10.1388 0.987343 19.4416 0 -9.80795 0.964278 18.8525 0 -9.41635 0.934114 18.1638 0 -8.5709 0.859662 16.6739 0 -7.84322 0.828982 15.4165 0 -7.36293 0.783302 14.5714 0 -6.92685 0.694005 13.7793 0 -6.31844 0.670839 12.7328 0 -5.79574 0.661377 11.8328 0 -5.32421 0.630978 11.0189 0 -4.83789 0.580123 10.145 0 -4.47854 0.551819 9.51029 0 -4.05343 0.528229 8.76698 0 -3.7015 0.500494 8.14655 0 -3.22103 0.46202 7.29865 0 -2.77888 0.427214 6.5189 0 -2.30423 0.391369 5.69052 0 -1.82089 0.360694 4.80851 0 -1.27083 0.316289 3.82688 0 -0.661992 0.27688 2.67382 0 -0.0854744 0.234115 1.69004 0 0.240372 0.200889 1.13104 0 0.292808 0.204858 1.0569 0 0.656973 0.195586 0.715223 0 0.753032 0.196715 0.743629 0 0.847396 0.197714 0.761245 0 0.874865 0.199433 0.76978 0 -11.476 1.1186 21.8311 0 -11.476 1.1186 21.8311 0 -11.476 1.1186 21.8311 0 -11.2555 1.10481 21.4488 0 -10.8073 1.06934 20.6635 0 -10.3074 1.02184 19.7791 0 -9.97614 1.00324 19.1918 0 -9.57505 0.975936 18.4776 0 -8.70319 0.915813 16.9266 0 -7.96816 0.853926 15.621 0 -7.47799 0.834639 14.7722 0 -7.02101 0.81326 13.9742 0 -6.4316 0.703312 12.9001 0 -5.91219 0.671548 11.998 0 -5.44142 0.660589 11.1903 0 -4.95361 0.638524 10.3495 0 -4.59869 0.612943 9.72876 0 -4.18565 0.566984 9.00073 0 -3.83528 0.542511 8.38891 0 -3.35112 0.515806 7.54214 0 -2.90882 0.482221 6.76299 0 -2.42941 0.442658 5.92684 0 -1.95922 0.408238 5.05681 0 -1.40501 0.366317 4.07543 0 -0.795386 0.323874 2.91827 0 -0.198094 0.277441 1.88989 0 0.185605 0.246016 1.24707 0 0.30778 0.240542 1.03947 0 0.659755 0.225462 0.709026 0 0.753568 0.233327 0.742336 0 0.844343 0.233358 0.770739 0 0.878233 0.231305 0.773374 0 -11.5427 1.14382 21.9448 0 -11.5427 1.14382 21.9448 0 -11.5427 1.14382 21.9448 0 -11.3233 1.12565 21.5616 0 -10.8731 1.09624 20.7766 0 -10.3739 1.05301 19.8991 0 -10.0538 1.0222 19.3342 0 -9.6605 0.999387 18.6484 0 -8.79245 0.940796 17.1106 0 -8.05032 0.882166 15.7847 0 -7.55137 0.844658 14.893 0 -7.08945 0.826552 14.0831 0 -6.48356 0.77517 13.0185 0 -5.97791 0.681866 12.1017 0 -5.50463 0.665954 11.2768 0 -5.01132 0.655074 10.4385 0 -4.65384 0.639078 9.81751 0 -4.23636 0.60989 9.0917 0 -3.89284 0.570352 8.48572 0 -3.41887 0.534283 7.65967 0 -2.97871 0.50655 6.89118 0 -2.50065 0.468066 6.0555 0 -2.02932 0.432611 5.18529 0 -1.47442 0.387449 4.20237 0 -0.855131 0.349206 3.02665 0 -0.166698 0.293759 1.81306 0 0.165399 0.26678 1.2893 0 0.315253 0.258425 1.02974 0 0.65645 0.242915 0.704153 0 0.753694 0.245957 0.742418 0 0.842882 0.246744 0.772121 0 0.87949 0.24849 0.774452 0 -11.6108 1.16591 22.0737 0 -11.6108 1.16591 22.0737 0 -11.6108 1.16591 22.0737 0 -11.387 1.1491 21.6793 0 -10.9311 1.11477 20.8739 0 -10.4282 1.08473 19.9986 0 -10.1076 1.05565 19.4343 0 -9.71838 1.01808 18.7467 0 -8.86865 0.960852 17.2619 0 -8.1293 0.904121 15.9443 0 -7.63217 0.858293 15.0507 0 -7.16227 0.835554 14.2152 0 -6.53667 0.81078 13.1193 0 -6.02515 0.739667 12.2041 0 -5.56478 0.675349 11.372 0 -5.07108 0.658253 10.5301 0 -4.70853 0.652325 9.90169 0 -4.28812 0.630905 9.17397 0 -3.94101 0.604569 8.5697 0 -3.47186 0.550085 7.74097 0 -3.03431 0.525605 6.98288 0 -2.56457 0.491032 6.16895 0 -2.08569 0.455944 5.28735 0 -1.52846 0.410229 4.29712 0 -0.902962 0.371699 3.1096 0 -0.232809 0.322323 1.87848 0 0.14012 0.286863 1.32499 0 0.325169 0.273865 1.01875 0 0.653435 0.255007 0.702139 0 0.754002 0.261541 0.742044 0 0.846849 0.263262 0.764887 0 0.880792 0.265911 0.775131 0 -11.6895 1.191 22.2232 0 -11.6895 1.191 22.2232 0 -11.6895 1.191 22.2232 0 -11.4655 1.1749 21.8289 0 -11.0094 1.14162 21.0245 0 -10.5017 1.10495 20.1292 0 -10.1746 1.08621 19.5549 0 -9.78362 1.05355 18.8661 0 -8.93726 0.985245 17.3771 0 -8.21712 0.927439 16.1146 0 -7.72369 0.890397 15.241 0 -7.25919 0.848905 14.4037 0 -6.63028 0.822936 13.2964 0 -6.09279 0.800899 12.3492 0 -5.6304 0.722432 11.5009 0 -5.14728 0.667322 10.6531 0 -4.78642 0.65602 10.0236 0 -4.3602 0.648286 9.29026 0 -4.00792 0.631143 8.67917 0 -3.53189 0.594236 7.84668 0 -3.1014 0.545002 7.08483 0 -2.6242 0.517576 6.27222 0 -2.14456 0.486351 5.38521 0 -1.59343 0.441658 4.40178 0 -0.967502 0.397856 3.21935 0 -0.313481 0.355553 1.99592 0 0.0920758 0.318229 1.36189 0 0.341605 0.292342 0.998428 0 0.64891 0.279595 0.699419 0 0.754837 0.284597 0.739299 0 0.849046 0.285365 0.761838 0 0.883115 0.289865 0.776289 0 -11.7941 1.22266 22.4289 0 -11.7941 1.22266 22.4289 0 -11.7941 1.22266 22.4289 0 -11.568 1.20706 22.0289 0 -11.1083 1.175 21.2147 0 -10.6005 1.13856 20.319 0 -10.275 1.11271 19.7415 0 -9.87787 1.08713 19.0398 0 -9.02169 1.01174 17.5162 0 -8.29707 0.964936 16.2525 0 -7.81266 0.926111 15.403 0 -7.36 0.890401 14.6056 0 -6.75256 0.833365 13.5315 0 -6.21397 0.815039 12.5853 0 -5.72964 0.795653 11.7276 0 -5.23841 0.72407 10.8384 0 -4.87981 0.668045 10.1787 0 -4.45119 0.654011 9.43052 0 -4.09646 0.646478 8.82068 0 -3.61383 0.628702 7.98627 0 -3.1741 0.597914 7.21696 0 -2.70088 0.542466 6.39411 0 -2.21836 0.519383 5.51124 0 -1.67962 0.481432 4.5326 0 -1.04939 0.433504 3.36657 0 -0.397683 0.390067 2.13533 0 0.0225508 0.351255 1.46337 0 0.36313 0.312606 0.954637 0 0.639876 0.311348 0.692413 0 0.761164 0.303172 0.730793 0 0.850543 0.309941 0.761765 0 0.885573 0.317346 0.776087 0 -11.8821 1.24732 22.605 0 -11.8821 1.24732 22.605 0 -11.8821 1.24732 22.605 0 -11.6552 1.23246 22.2042 0 -11.1943 1.20067 21.3866 0 -10.682 1.1634 20.475 0 -10.3531 1.13908 19.8894 0 -9.95667 1.10768 19.1846 0 -9.09702 1.04589 17.6646 0 -8.36625 0.987277 16.3718 0 -7.87742 0.952774 15.514 0 -7.42436 0.917226 14.7177 0 -6.81919 0.866647 13.6561 0 -6.30127 0.824171 12.7473 0 -5.8225 0.806897 11.9077 0 -5.31764 0.785169 11.026 0 -4.96067 0.723103 10.3647 0 -4.53733 0.66157 9.58838 0 -4.17366 0.650473 8.94937 0 -3.68147 0.641151 8.09486 0 -3.23738 0.621056 7.32789 0 -2.76235 0.5823 6.50588 0 -2.28393 0.535786 5.62128 0 -1.74283 0.508877 4.6402 0 -1.1128 0.459439 3.48128 0 -0.46995 0.401929 2.31638 0 -0.0124742 0.36864 1.50926 0 0.359418 0.330189 0.977133 0 0.63719 0.327334 0.689761 0 0.768975 0.318435 0.720398 0 0.851797 0.329591 0.759969 0 0.887094 0.334453 0.776049 0 -11.9579 1.27416 22.7524 0 -11.9579 1.27416 22.7524 0 -11.9579 1.27416 22.7524 0 -11.7364 1.2571 22.3634 0 -11.2787 1.22328 21.5519 0 -10.7667 1.18568 20.6407 0 -10.4383 1.16116 20.0557 0 -10.0394 1.13154 19.3457 0 -9.17379 1.07258 17.811 0 -8.44514 1.00594 16.5175 0 -7.95081 0.977099 15.6493 0 -7.49043 0.944592 14.8357 0 -6.88236 0.897652 13.7676 0 -6.36589 0.850954 12.8571 0 -5.89786 0.817787 12.0371 0 -5.40629 0.797011 11.1925 0 -5.04243 0.78094 10.5538 0 -4.62161 0.709702 9.77622 0 -4.26901 0.657252 9.1313 0 -3.77242 0.642115 8.25942 0 -3.31366 0.635326 7.45968 0 -2.82889 0.612015 6.6188 0 -2.34463 0.570588 5.73577 0 -1.81142 0.524591 4.77309 0 -1.21274 0.481582 3.66903 0 -0.554037 0.419956 2.51343 0 -0.0459006 0.39404 1.53856 0 0.3458 0.349493 1.00385 0 0.635047 0.345155 0.686195 0 0.774946 0.337394 0.714748 0 0.853048 0.351696 0.757832 0 0.888054 0.345141 0.776352 0 -12.012 1.29413 22.8484 0 -12.012 1.29413 22.8484 0 -12.012 1.29413 22.8484 0 -11.7907 1.27671 22.4597 0 -11.3392 1.24123 21.6642 0 -10.8343 1.20245 20.7725 0 -10.5057 1.17859 20.1882 0 -10.1066 1.14951 19.4783 0 -9.24038 1.08629 17.9381 0 -8.503 1.03412 16.6332 0 -8.01224 0.991844 15.763 0 -7.55048 0.964726 14.9506 0 -6.93637 0.917908 13.8635 0 -6.41482 0.87739 12.9434 0 -5.94956 0.831907 12.1234 0 -5.45909 0.807529 11.2737 0 -5.09878 0.792092 10.6504 0 -4.6773 0.768709 9.91398 0 -4.33359 0.69773 9.27778 0 -3.84632 0.647487 8.40065 0 -3.39006 0.635945 7.59894 0 -2.89231 0.625042 6.74985 0 -2.42196 0.596331 5.88552 0 -1.88409 0.531716 4.92506 0 -1.28706 0.500326 3.81036 0 -0.61632 0.442777 2.63388 0 -0.036736 0.410376 1.51361 0 0.336965 0.364578 1.01872 0 0.632588 0.363346 0.681922 0 0.777162 0.353471 0.71574 0 0.852365 0.3633 0.755901 0 0.887838 0.352798 0.775939 0 -12.0756 1.31485 22.9601 0 -12.0756 1.31485 22.9601 0 -12.0756 1.31485 22.9601 0 -11.8543 1.2974 22.5714 0 -11.4026 1.26242 21.7763 0 -10.8994 1.22404 20.8907 0 -10.576 1.1995 20.3211 0 -10.1826 1.1698 19.6274 0 -9.31665 1.10675 18.0893 0 -8.5752 1.06063 16.7781 0 -8.08064 1.01628 15.8946 0 -7.62072 0.981206 15.0806 0 -7.00497 0.939996 13.9931 0 -6.47897 0.900523 13.0617 0 -6.00489 0.862736 12.2258 0 -5.51913 0.818442 11.3656 0 -5.1582 0.803919 10.7469 0 -4.73538 0.785907 10.0099 0 -4.38389 0.766429 9.39852 0 -3.92288 0.668139 8.55366 0 -3.47403 0.639675 7.75854 0 -2.98533 0.626998 6.91588 0 -2.50998 0.610031 6.05527 0 -1.95783 0.558621 5.08559 0 -1.35799 0.521495 3.94105 0 -0.669139 0.469816 2.72706 0 -0.0439941 0.427163 1.52765 0 0.309703 0.389339 1.04002 0 0.637951 0.381926 0.678408 0 0.776675 0.373068 0.714914 0 0.850096 0.371256 0.753487 0 0.882507 0.36122 0.772098 0 -12.1254 1.33146 23.0464 0 -12.1254 1.33146 23.0464 0 -12.1254 1.33146 23.0464 0 -11.9046 1.3144 22.66 0 -11.4531 1.28 21.8667 0 -10.9497 1.24195 20.9808 0 -10.6262 1.21751 20.4112 0 -10.2327 1.18816 19.7178 0 -9.37751 1.12481 18.2109 0 -8.63786 1.07281 16.8991 0 -8.14025 1.03982 16.0172 0 -7.67921 0.994133 15.1905 0 -7.05974 0.958337 14.097 0 -6.5337 0.918723 13.1659 0 -6.05909 0.8833 12.3311 0 -5.56787 0.839935 11.4528 0 -5.20657 0.812354 10.8247 0 -4.78314 0.796453 10.0866 0 -4.43079 0.780292 9.47558 0 -3.9616 0.720115 8.64072 0 -3.53774 0.644507 7.87331 0 -3.06152 0.628143 7.0503 0 -2.5702 0.621497 6.18399 0 -2.0069 0.588519 5.19137 0 -1.40541 0.534822 4.01966 0 -0.716568 0.488984 2.81053 0 -0.0737413 0.444006 1.58257 0 0.282318 0.411367 1.0571 0 0.642454 0.397468 0.67556 0 0.776291 0.38894 0.714236 0 0.848352 0.377755 0.75161 0 0.877955 0.367608 0.768271 0 -12.1879 1.35411 23.1564 0 -12.1879 1.35411 23.1564 0 -12.1879 1.35411 23.1564 0 -11.9669 1.33722 22.7698 0 -11.5159 1.30284 21.978 0 -11.0135 1.26472 21.0955 0 -10.6898 1.24065 20.5264 0 -10.2964 1.21117 19.8332 0 -9.44362 1.14712 18.3323 0 -8.71611 1.09066 17.0518 0 -8.21755 1.05979 16.1694 0 -7.75317 1.02456 15.3432 0 -7.13378 0.974732 14.2367 0 -6.60257 0.941403 13.297 0 -6.12799 0.905565 12.4615 0 -5.63477 0.868899 11.5825 0 -5.27334 0.835548 10.9514 0 -4.85013 0.805736 10.1987 0 -4.49664 0.791539 9.58391 0 -4.01928 0.767485 8.75749 0 -3.5942 0.682884 7.98071 0 -3.12246 0.636127 7.15023 0 -2.62879 0.626815 6.26446 0 -2.06993 0.609616 5.28905 0 -1.46332 0.563632 4.12543 0 -0.779318 0.510485 2.92328 0 -0.143305 0.467052 1.70891 0 0.23877 0.435801 1.11229 0 0.647043 0.414442 0.675476 0 0.775639 0.407436 0.713598 0 0.846437 0.386287 0.750842 0 0.872292 0.375492 0.763525 0 -12.2438 1.37465 23.2552 0 -12.2438 1.37465 23.2552 0 -12.2438 1.37465 23.2552 0 -12.0229 1.35779 22.8687 0 -11.572 1.32351 22.0772 0 -11.0698 1.28558 21.1956 0 -10.7471 1.26122 20.6287 0 -10.3546 1.23163 19.9379 0 -9.50231 1.16746 18.4378 0 -8.77627 1.11277 17.1633 0 -8.28797 1.07462 16.3041 0 -7.82308 1.04822 15.4844 0 -7.20576 0.992205 14.3777 0 -6.67334 0.959366 13.4349 0 -6.19381 0.926726 12.5873 0 -5.70085 0.889289 11.7063 0 -5.3419 0.859143 11.0837 0 -4.92367 0.815758 10.3329 0 -4.56789 0.799189 9.70998 0 -4.07543 0.780951 8.84925 0 -3.62853 0.760426 8.06936 0 -3.17048 0.664506 7.23846 0 -2.69069 0.632987 6.35871 0 -2.12958 0.621094 5.38507 0 -1.52046 0.596528 4.23665 0 -0.849904 0.523655 3.05017 0 -0.210751 0.490133 1.83227 0 0.209724 0.456344 1.16622 0 0.650805 0.43226 0.677212 0 0.772178 0.419262 0.713808 0 0.843939 0.393438 0.749617 0 0.870899 0.386192 0.756621 0 -12.3257 1.39851 23.4119 0 -12.3257 1.39851 23.4119 0 -12.3257 1.39851 23.4119 0 -12.1007 1.38237 23.0145 0 -11.6427 1.34932 22.2038 0 -11.1392 1.31159 21.3186 0 -10.8164 1.2873 20.7515 0 -10.4238 1.25779 20.0604 0 -9.57235 1.19397 18.5635 0 -8.84647 1.1398 17.2901 0 -8.35817 1.10241 16.4314 0 -7.90178 1.06749 15.6285 0 -7.28948 1.02693 14.5507 0 -6.76141 0.977134 13.6052 0 -6.28355 0.948912 12.7645 0 -5.79183 0.909914 11.8829 0 -5.42792 0.881869 11.2474 0 -4.99695 0.850811 10.478 0 -4.64128 0.819828 9.84364 0 -4.15313 0.793687 8.98671 0 -3.70577 0.77578 8.20607 0 -3.22649 0.740567 7.37015 0 -2.76703 0.64255 6.48682 0 -2.20898 0.623583 5.51785 0 -1.59824 0.61638 4.38015 0 -0.925752 0.552695 3.19646 0 -0.297552 0.516888 1.9912 0 0.162995 0.482502 1.24782 0 0.653164 0.452496 0.685441 0 0.753511 0.427234 0.734618 0 0.836151 0.399918 0.745175 0 0.879638 0.401402 0.747515 0 -12.4081 1.42206 23.5718 0 -12.4081 1.42206 23.5718 0 -12.4081 1.42206 23.5718 0 -12.1832 1.40591 23.1744 0 -11.7248 1.3731 22.3633 0 -11.2147 1.33649 21.4599 0 -10.8868 1.31298 20.879 0 -10.4913 1.28399 20.1801 0 -9.63974 1.22005 18.6829 0 -8.91548 1.16532 17.4136 0 -8.42753 1.12867 16.5568 0 -7.9709 1.09354 15.7533 0 -7.36033 1.05072 14.6776 0 -6.84378 1.00585 13.7685 0 -6.37636 0.96301 12.9434 0 -5.87581 0.933936 12.0496 0 -5.50648 0.90885 11.4034 0 -5.07412 0.879151 10.6315 0 -4.71767 0.852176 9.99647 0 -4.23397 0.80678 9.13333 0 -3.78683 0.786663 8.35199 0 -3.305 0.76611 7.51603 0 -2.82943 0.710411 6.64071 0 -2.29005 0.631546 5.6597 0 -1.67597 0.626498 4.51678 0 -1.00407 0.588782 3.35671 0 -0.389146 0.532899 2.15218 0 0.104716 0.505066 1.34835 0 0.652555 0.463007 0.71022 0 0.746748 0.434997 0.733617 0 0.833986 0.410026 0.743906 0 0.898982 0.46022 0.746178 0 -12.4957 1.44827 23.7407 0 -12.4957 1.44827 23.7407 0 -12.4957 1.44827 23.7407 0 -12.2713 1.43218 23.345 0 -11.8136 1.3992 22.5357 0 -11.3031 1.36269 21.6315 0 -10.9752 1.33915 21.0504 0 -10.5772 1.31041 20.3444 0 -9.71375 1.24807 18.8139 0 -8.98902 1.19365 17.5438 0 -8.50136 1.1571 16.6881 0 -8.04987 1.12045 15.8957 0 -7.44689 1.06932 14.8306 0 -6.92193 1.03699 13.9131 0 -6.44928 0.996804 13.0779 0 -5.95727 0.958225 12.2033 0 -5.59671 0.936075 11.5818 0 -5.16885 0.904303 10.8197 0 -4.81215 0.877928 10.1845 0 -4.32479 0.840664 9.31852 0 -3.87905 0.799481 8.52239 0 -3.39417 0.779858 7.67222 0 -2.90468 0.759662 6.80645 0 -2.37116 0.675169 5.82858 0 -1.76721 0.626378 4.69797 0 -1.10376 0.609737 3.53995 0 -0.479292 0.565922 2.32089 0 0.0661215 0.518925 1.41535 0 0.649875 0.478916 0.713653 0 0.741546 0.44277 0.732999 0 0.852699 0.469769 0.754431 0 0.898876 0.471477 0.746922 0 -12.5955 1.47895 23.9322 0 -12.5955 1.47895 23.9322 0 -12.5955 1.47895 23.9322 0 -12.371 1.4628 23.536 0 -11.9135 1.42978 22.7273 0 -11.4046 1.39286 21.8271 0 -11.0776 1.3691 21.2485 0 -10.68 1.3403 20.5436 0 -9.81578 1.27849 19.0117 0 -9.08529 1.22227 17.7196 0 -8.59797 1.18347 16.8599 0 -8.13951 1.15071 16.0547 0 -7.52646 1.10708 14.9734 0 -7.00441 1.06625 14.0567 0 -6.53419 1.03549 13.2325 0 -6.04695 0.993065 12.3701 0 -5.68951 0.96013 11.7419 0 -5.26592 0.934916 11.0037 0 -4.91478 0.909094 10.3842 0 -4.43226 0.872682 9.53332 0 -3.98339 0.839782 8.73617 0 -3.50563 0.79626 7.88058 0 -3.01033 0.771454 7.0208 0 -2.47107 0.751223 6.04529 0 -1.87711 0.6338 4.91551 0 -1.21071 0.618563 3.71937 0 -0.567989 0.606004 2.48404 0 0.0694339 0.540723 1.41799 0 0.645543 0.506088 0.712097 0 0.741298 0.468529 0.732377 0 0.847331 0.491559 0.778731 0 0.893651 0.476174 0.746851 0 -12.6844 1.51359 24.0881 0 -12.6844 1.51359 24.0881 0 -12.6844 1.51359 24.0881 0 -12.4653 1.49659 23.7072 0 -12.0176 1.46206 22.9255 0 -11.5098 1.42514 22.0285 0 -11.1826 1.40159 21.4495 0 -10.7852 1.3729 20.7455 0 -9.93172 1.3058 19.2352 0 -9.19537 1.25306 17.9327 0 -8.69587 1.21967 17.0475 0 -8.23225 1.1867 16.2258 0 -7.61697 1.14102 15.1345 0 -7.09687 1.10164 14.2221 0 -6.62851 1.06435 13.3966 0 -6.13899 1.03224 12.5415 0 -5.78073 1.00506 11.9098 0 -5.36112 0.962513 11.1734 0 -5.00857 0.940297 10.5515 0 -4.5272 0.907813 9.70714 0 -4.08622 0.873641 8.93156 0 -3.61431 0.837194 8.1003 0 -3.12513 0.78794 7.2274 0 -2.58337 0.76859 6.24231 0 -1.95703 0.728117 5.09696 0 -1.31301 0.627348 3.88912 0 -0.665178 0.627857 2.65186 0 0.0681964 0.577345 1.4327 0 0.648884 0.532774 0.70829 0 0.743343 0.518256 0.736777 0 0.836906 0.495495 0.789173 0 0.891191 0.490328 0.742059 0 -12.7671 1.55061 24.2257 0 -12.7671 1.55061 24.2257 0 -12.7671 1.55061 24.2257 0 -12.548 1.53369 23.8445 0 -12.1 1.49931 23.0624 0 -11.6051 1.45863 22.1973 0 -11.2872 1.43239 21.6412 0 -10.9003 1.40054 20.9629 0 -10.0372 1.33993 19.437 0 -9.29926 1.2885 18.1326 0 -8.80661 1.25188 17.2612 0 -8.34531 1.21801 16.4446 0 -7.72825 1.17351 15.3506 0 -7.20005 1.13541 14.4148 0 -6.72317 1.10145 13.569 0 -6.23181 1.06347 12.706 0 -5.87365 1.03844 12.0694 0 -5.44988 1.01222 11.3421 0 -5.10238 0.975645 10.7191 0 -4.62375 0.937706 9.87697 0 -4.18195 0.908451 9.10332 0 -3.71013 0.871558 8.27209 0 -3.21906 0.8313 7.40228 0 -2.68628 0.782587 6.41534 0 -2.05485 0.761845 5.27017 0 -1.39865 0.672428 4.05474 0 -0.76508 0.631623 2.81436 0 0.054262 0.603359 1.46451 0 0.648592 0.544818 0.707999 0 0.732488 0.531148 0.741691 0 0.833206 0.508455 0.784332 0 0.884341 0.501177 0.74486 0 -12.8697 1.58537 24.4012 0 -12.8697 1.58537 24.4012 0 -12.8697 1.58537 24.4012 0 -12.6518 1.56736 24.0215 0 -12.2027 1.53283 23.2362 0 -11.6987 1.49661 22.3532 0 -11.3755 1.47337 21.7877 0 -10.9829 1.44474 21.099 0 -10.1389 1.37837 19.6206 0 -9.41807 1.32232 18.3594 0 -8.92488 1.28621 17.4879 0 -8.46397 1.25248 16.6732 0 -7.84676 1.20822 15.5806 0 -7.31848 1.17009 14.6441 0 -6.84186 1.13543 13.7989 0 -6.34565 1.09928 12.923 0 -5.98275 1.07191 12.2726 0 -5.55451 1.03954 11.5221 0 -5.19975 1.01823 10.897 0 -4.72363 0.973939 10.0532 0 -4.28519 0.936566 9.28151 0 -3.81359 0.90498 8.45583 0 -3.32124 0.864428 7.58393 0 -2.78372 0.824968 6.59455 0 -2.15958 0.78094 5.43992 0 -1.48163 0.756268 4.23735 0 -0.865463 0.675368 3.02733 0 -0.0520065 0.612866 1.64106 0 0.6442 0.552297 0.714912 0 0.740892 0.53701 0.730831 0 0.844287 0.570834 0.788913 0 0.884971 0.554611 0.759196 0 -13.1877 1.67669 25.0134 0 -13.1877 1.67669 25.0134 0 -13.1877 1.67669 25.0134 0 -12.9679 1.65976 24.6293 0 -12.5076 1.62693 23.8102 0 -11.9951 1.59059 22.8975 0 -11.6651 1.56779 22.3102 0 -11.265 1.53995 21.5976 0 -10.4037 1.47851 20.0711 0 -9.68564 1.42286 18.8157 0 -9.2023 1.38534 17.9694 0 -8.75052 1.35022 17.1777 0 -8.14866 1.30259 16.1237 0 -7.63168 1.26542 15.2167 0 -7.16413 1.23276 14.4032 0 -6.6775 1.1991 13.5532 0 -6.31959 1.17464 12.9264 0 -5.89246 1.14645 12.1737 0 -5.54033 1.11839 11.556 0 -5.05987 1.08102 10.7014 0 -4.61811 1.04545 9.91923 0 -4.1449 1.00855 9.08079 0 -3.6629 0.964152 8.20736 0 -3.12725 0.917966 7.22609 0 -2.50347 0.865572 6.09848 0 -1.86805 0.808089 4.90499 0 -1.18995 0.766335 3.69087 0 -0.437005 0.662883 2.28645 0 0.672525 0.674756 0.742803 4488.9 0.748419 0.676134 0.730966 3627.84 0.810425 0.661822 0.744832 0 0.877638 0.651065 0.767052 0 -13.5889 1.83756 25.7294 0 -13.5889 1.83756 25.7294 0 -13.5889 1.83756 25.7294 0 -13.367 1.82228 25.3419 0 -12.9183 1.78543 24.5523 0 -12.4183 1.74445 23.6711 0 -12.097 1.71812 23.1046 0 -11.7068 1.68611 22.4155 0 -10.8636 1.61406 20.9268 0 -10.1479 1.54956 19.6656 0 -9.66696 1.5062 18.8179 0 -9.21466 1.46979 18.0241 0 -8.59547 1.4398 16.9491 0 -8.06884 1.40823 16.0278 0 -7.59545 1.36835 15.1759 0 -7.09513 1.32941 14.2787 0 -6.72898 1.30051 13.6173 0 -6.29762 1.26643 12.8437 0 -5.93956 1.23715 12.1961 0 -5.45662 1.19517 11.3316 0 -5.0205 1.15652 10.5628 0 -4.54522 1.137 9.74457 0 -4.07166 1.09326 8.9196 0 -3.53604 1.06474 7.94409 0 -2.88953 1.0321 6.75841 0 -2.21849 0.995691 5.55593 0 -1.58268 0.930331 4.40129 0 -0.822854 0.871816 3.02787 0 0.662384 0.708521 0.735894 3627.82 0.770409 0.747622 0.766541 26505.1 0.838345 0.766457 0.752807 7838.87 0.893127 0.762026 0.769401 0 -13.939 1.92424 26.3498 0 -13.939 1.92424 26.3498 0 -13.939 1.92424 26.3498 0 -13.7136 1.91185 25.9569 0 -13.2533 1.88685 25.1525 0 -12.7424 1.85744 24.2579 0 -12.4139 1.83833 23.6825 0 -12.0143 1.81522 22.9811 0 -11.1554 1.75678 21.4691 0 -10.431 1.69256 20.1785 0 -9.94524 1.64926 19.3141 0 -9.49166 1.60871 18.5069 0 -8.88551 1.5544 17.4276 0 -8.36829 1.50738 16.5068 0 -7.91234 1.46576 15.7086 0 -7.43783 1.42757 14.8834 0 -7.07828 1.40409 14.2618 0 -6.63698 1.38464 13.4886 0 -6.26086 1.37927 12.8373 0 -5.78653 1.34479 12.0117 0 -5.3573 1.30838 11.2643 0 -4.89758 1.26868 10.4585 0 -4.42245 1.22529 9.60171 0 -3.87986 1.17617 8.63947 0 -3.23547 1.14559 7.4603 0 -2.58256 1.10441 6.22468 0 -1.90326 1.05012 5.00295 0 -1.13268 0.993736 3.59354 0 0.642933 0.820031 0.70941 0 0.747366 0.843111 0.753107 7839.34 0.836403 0.849447 0.780414 10703.1 0.893642 0.839131 0.769418 0 -14.1391 2.03708 26.7366 0 -14.1391 2.03708 26.7366 0 -14.1391 2.03708 26.7366 0 -13.9177 2.01993 26.3484 0 -13.4696 1.98226 25.5593 0 -12.9706 1.93632 24.6704 0 -12.6499 1.90679 24.099 0 -12.2603 1.87099 23.4037 0 -11.4152 1.79326 21.8961 0 -10.6949 1.72682 20.6139 0 -10.2114 1.68607 19.7621 0 -9.75234 1.65641 18.9628 0 -9.08066 1.6616 17.8028 0 -8.5699 1.62297 16.9167 0 -8.1106 1.5822 16.1108 0 -7.6328 1.53997 15.2689 0 -7.28093 1.50976 14.6528 0 -6.85569 1.47801 13.9008 0 -6.50161 1.45101 13.2774 0 -6.01852 1.41453 12.4178 0 -5.5724 1.38289 11.6431 0 -5.10129 1.34303 10.7996 0 -4.61022 1.3041 9.91592 0 -4.06999 1.26462 8.91808 0 -3.44032 1.2125 7.77305 0 -2.79584 1.16089 6.58486 0 -2.14724 1.10382 5.40434 0 -1.38858 1.04611 4.03596 0 0.665807 0.88517 0.733995 0 0.756398 0.888696 0.755871 0 0.834304 0.907557 0.778128 0 0.888064 0.888601 0.768551 0 -14.3574 1.18588 27.2583 0 -14.3574 1.18588 27.2583 0 -14.3574 1.18588 27.2583 0 -14.1359 1.16938 26.8677 0 -13.6832 1.13725 26.0703 0 -13.1788 1.10088 25.1825 0 -12.8532 1.07961 24.6122 0 -12.4554 1.0577 23.9189 0 -11.6029 0.980603 22.4073 0 -10.8761 0.927904 21.1244 0 -10.3868 0.891182 20.2621 0 -9.92998 0.854198 19.456 0 -9.31884 0.809128 18.3766 0 -8.79183 0.787899 17.4607 0 -8.31944 0.758191 16.6301 0 -7.84662 0.655887 15.7572 0 -7.48452 0.6387 15.1258 0 -7.05594 0.626372 14.3893 0 -6.69828 0.620672 13.7688 0 -6.21983 0.598169 12.9218 0 -5.78712 0.562176 12.1413 0 -5.32685 0.51894 11.3031 0 -4.84473 0.492261 10.429 0 -4.30812 0.448849 9.44806 0 -3.68258 0.397555 8.30455 0 -3.02243 0.349475 7.11554 0 -2.33579 0.294072 5.90318 0 -1.51466 0.233022 4.51075 0 0.353417 0.107676 1.28487 0 0.798303 0.0952206 0.80643 0 0.846359 0.100078 0.823085 0 0.967106 0.0949066 0.87681 0 -14.3574 1.18588 27.2583 0 -14.3574 1.18588 27.2583 0 -14.3574 1.18588 27.2583 0 -14.1359 1.16938 26.8677 0 -13.6832 1.13725 26.0703 0 -13.1788 1.10088 25.1825 0 -12.8532 1.07961 24.6122 0 -12.4554 1.0577 23.9189 0 -11.6029 0.980603 22.4073 0 -10.8761 0.927904 21.1244 0 -10.3868 0.891182 20.2621 0 -9.92998 0.854198 19.456 0 -9.31884 0.809128 18.3766 0 -8.79183 0.787899 17.4607 0 -8.31944 0.758191 16.6301 0 -7.84662 0.655887 15.7572 0 -7.48452 0.6387 15.1258 0 -7.05594 0.626372 14.3893 0 -6.69828 0.620672 13.7688 0 -6.21983 0.598169 12.9218 0 -5.78712 0.562176 12.1413 0 -5.32685 0.51894 11.3031 0 -4.84473 0.492261 10.429 0 -4.30812 0.448849 9.44806 0 -3.68258 0.397555 8.30455 0 -3.02243 0.349475 7.11554 0 -2.33579 0.294072 5.90318 0 -1.51466 0.233022 4.51075 0 0.353417 0.107676 1.28487 0 0.798303 0.0952206 0.80643 0 0.846359 0.100078 0.823085 0 0.967106 0.0949066 0.87681 0 -14.3574 1.18588 27.2583 0 -14.3574 1.18588 27.2583 0 -14.3574 1.18588 27.2583 0 -14.1359 1.16938 26.8677 0 -13.6832 1.13725 26.0703 0 -13.1788 1.10088 25.1825 0 -12.8532 1.07961 24.6122 0 -12.4554 1.0577 23.9189 0 -11.6029 0.980603 22.4073 0 -10.8761 0.927904 21.1244 0 -10.3868 0.891182 20.2621 0 -9.92998 0.854198 19.456 0 -9.31884 0.809128 18.3766 0 -8.79183 0.787899 17.4607 0 -8.31944 0.758192 16.6301 0 -7.84662 0.655887 15.7572 0 -7.48452 0.6387 15.1258 0 -7.05593 0.626372 14.3893 0 -6.69828 0.620672 13.7688 0 -6.21983 0.598169 12.9218 0 -5.78712 0.562176 12.1413 0 -5.32685 0.51894 11.3031 0 -4.84473 0.492261 10.429 0 -4.30812 0.448849 9.44806 0 -3.68257 0.397554 8.30455 0 -3.02243 0.349475 7.11553 0 -2.33579 0.294072 5.90318 0 -1.51466 0.233022 4.51075 0 0.353417 0.107676 1.28487 0 0.798303 0.0952206 0.80643 0 0.846359 0.100078 0.823085 0 0.967106 0.0949066 0.87681 0 -14.403 1.20317 27.342 0 -14.403 1.20317 27.342 0 -14.403 1.20317 27.342 0 -14.1809 1.1879 26.9522 0 -13.7275 1.15667 26.1549 0 -13.2223 1.12144 25.2665 0 -12.897 1.09782 24.6954 0 -12.5007 1.06999 23.9986 0 -11.6478 0.992199 22.4849 0 -10.9186 0.944919 21.2031 0 -10.4287 0.908434 20.3405 0 -9.97091 0.874313 19.5345 0 -9.36355 0.816554 18.4543 0 -8.83621 0.794969 17.5368 0 -8.36111 0.773736 16.7066 0 -7.88001 0.69928 15.8379 0 -7.52702 0.644557 15.1981 0 -7.09821 0.629874 14.4615 0 -6.74083 0.622114 13.8397 0 -6.25896 0.610803 12.9935 0 -5.82388 0.583434 12.2127 0 -5.3667 0.528583 11.3727 0 -4.88413 0.503343 10.4988 0 -4.34668 0.461115 9.51716 0 -3.72089 0.409321 8.37294 0 -3.05839 0.359716 7.18194 0 -2.37294 0.306187 5.9704 0 -1.54971 0.245266 4.57861 0 0.349454 0.116195 1.28951 0 0.798523 0.102931 0.80567 0 0.847377 0.108429 0.822723 0 0.96594 0.102372 0.875769 0 -14.4668 1.22948 27.4634 0 -14.4668 1.22948 27.4634 0 -14.4668 1.22948 27.4634 0 -14.2447 1.21421 27.0736 0 -13.7912 1.18298 26.2763 0 -13.2863 1.14705 25.387 0 -12.962 1.12116 24.8134 0 -12.5672 1.08798 24.1151 0 -11.7109 1.02267 22.6037 0 -10.9842 0.965926 21.3231 0 -10.4946 0.931468 20.4622 0 -10.0379 0.89579 19.6569 0 -9.42885 0.84405 18.578 0 -8.9061 0.804227 17.6561 0 -8.42911 0.786683 16.8256 0 -7.93297 0.765074 15.9653 0 -7.58035 0.709997 15.3229 0 -7.16666 0.638891 14.5809 0 -6.81108 0.627114 13.9578 0 -6.32933 0.618007 13.1112 0 -5.89215 0.599573 12.3322 0 -5.43131 0.558328 11.4943 0 -4.95336 0.515763 10.6179 0 -4.41382 0.481361 9.63738 0 -3.78947 0.430825 8.49545 0 -3.12036 0.378556 7.29899 0 -2.43827 0.330704 6.09136 0 -1.61549 0.268464 4.70326 0 0.352547 0.133691 1.2878 0 0.798318 0.119364 0.804181 0 0.850442 0.124558 0.819844 0 0.963385 0.117515 0.872427 0 -14.5392 1.2595 27.6014 0 -14.5392 1.2595 27.6014 0 -14.5392 1.2595 27.6014 0 -14.3171 1.24424 27.2116 0 -13.8646 1.21048 26.4123 0 -13.3612 1.17074 25.5199 0 -13.0368 1.14507 24.9464 0 -12.6417 1.11326 24.2483 0 -11.7849 1.05245 22.7425 0 -11.0621 0.984605 21.4618 0 -10.5713 0.954813 20.6015 0 -10.1134 0.921577 19.7955 0 -9.50156 0.876174 18.7165 0 -8.97928 0.83283 17.7926 0 -8.50643 0.799293 16.9612 0 -8.01052 0.780145 16.1035 0 -7.64843 0.764223 15.4648 0 -7.23326 0.700171 14.7258 0 -6.89188 0.635681 14.0936 0 -6.41166 0.620945 13.2457 0 -5.97102 0.615613 12.4686 0 -5.50583 0.589363 11.6328 0 -5.02966 0.539036 10.7554 0 -4.48955 0.505574 9.77486 0 -3.86394 0.459386 8.63341 0 -3.19126 0.40544 7.43408 0 -2.51264 0.3562 6.22992 0 -1.69328 0.294705 4.84856 0 0.356359 0.154341 1.28586 0 0.798106 0.138102 0.8026 0 0.85352 0.141478 0.816306 0 0.960184 0.136196 0.868214 0 -14.5864 1.27912 27.6914 0 -14.5864 1.27912 27.6914 0 -14.5864 1.27912 27.6914 0 -14.3652 1.26163 27.2998 0 -13.9134 1.22597 26.499 0 -13.41 1.18613 25.6067 0 -13.0861 1.15985 25.0336 0 -12.6911 1.12931 24.338 0 -11.8356 1.06454 22.8327 0 -11.1097 1.00756 21.5531 0 -10.6205 0.968322 20.6899 0 -10.1608 0.940678 19.8842 0 -9.5488 0.895593 18.8061 0 -9.02564 0.85735 17.8833 0 -8.55659 0.812942 17.0523 0 -8.06252 0.78718 16.1935 0 -7.70011 0.77225 15.5538 0 -7.27576 0.743049 14.8185 0 -6.93743 0.665554 14.1852 0 -6.46319 0.626085 13.3319 0 -6.02278 0.617447 12.5537 0 -5.55417 0.602648 11.7193 0 -5.07431 0.564893 10.8433 0 -4.53797 0.516014 9.85989 0 -3.91016 0.476502 8.71893 0 -3.23643 0.422091 7.51844 0 -2.55787 0.36981 6.31427 0 -1.7395 0.311183 4.93578 0 0.358302 0.164957 1.28498 0 0.797969 0.147496 0.801785 0 0.855071 0.150185 0.814536 0 0.960046 0.145593 0.863211 0 -14.6309 1.2924 27.7706 0 -14.6309 1.2924 27.7706 0 -14.6309 1.2924 27.7706 0 -14.4095 1.27486 27.3788 0 -13.9581 1.23828 26.578 0 -13.4551 1.19751 25.6858 0 -13.1307 1.17231 25.1138 0 -12.7353 1.14235 24.4186 0 -11.8798 1.07529 22.912 0 -11.1496 1.02865 21.6312 0 -10.6625 0.980294 20.7662 0 -10.2024 0.952975 19.9601 0 -9.58987 0.910139 18.8834 0 -9.06738 0.870452 17.9602 0 -8.59699 0.829729 17.1297 0 -8.10583 0.792106 16.2664 0 -7.74273 0.778366 15.6278 0 -7.31552 0.757873 14.8904 0 -6.97092 0.702235 14.2619 0 -6.50517 0.630833 13.4039 0 -6.06568 0.618828 12.6251 0 -5.59468 0.612841 11.792 0 -5.11238 0.584172 10.9174 0 -4.57907 0.524114 9.9323 0 -3.95024 0.489349 8.79269 0 -3.27943 0.435906 7.5945 0 -2.59795 0.382243 6.38867 0 -1.7792 0.325088 5.0113 0 0.360036 0.173725 1.28413 0 0.797441 0.15601 0.801313 0 0.856713 0.158816 0.812937 0 0.961135 0.154235 0.856092 0 -14.747 1.32344 27.9742 0 -14.747 1.32344 27.9742 0 -14.747 1.32344 27.9742 0 -14.526 1.30553 27.5829 0 -14.0745 1.27085 26.785 0 -13.5706 1.23366 25.8961 0 -13.2454 1.21038 25.3244 0 -12.8491 1.18203 24.6287 0 -11.9914 1.12018 23.1212 0 -11.2654 1.06359 21.8413 0 -10.7745 1.0345 20.9821 0 -10.3197 0.991782 20.1767 0 -9.70827 0.947629 19.1015 0 -9.18525 0.910031 18.1752 0 -8.71371 0.872759 17.3443 0 -8.22399 0.830368 16.4776 0 -7.86614 0.795392 15.84 0 -7.43877 0.778972 15.0985 0 -7.08332 0.763644 14.4828 0 -6.61046 0.721582 13.6287 0 -6.19227 0.632359 12.8394 0 -5.72399 0.618342 12.0064 0 -5.23599 0.613234 11.1367 0 -4.6952 0.583655 10.1573 0 -4.07432 0.519776 9.01441 0 -3.40147 0.481385 7.8184 0 -2.72358 0.430308 6.61762 0 -1.89949 0.366712 5.24065 0 0.36128 0.204868 1.27581 0 0.796076 0.188638 0.799707 0 0.860249 0.191503 0.811338 0 0.965549 0.188088 0.83603 0 -14.8781 1.36959 28.2135 0 -14.8781 1.36959 28.2135 0 -14.8781 1.36959 28.2135 0 -14.6562 1.35372 27.8232 0 -14.2034 1.32128 27.025 0 -13.6999 1.28363 26.1364 0 -13.3757 1.25906 25.5655 0 -12.9807 1.22912 24.8707 0 -12.1253 1.16504 23.3665 0 -11.3974 1.11349 22.0881 0 -10.9077 1.07749 21.2269 0 -10.4501 1.0441 20.4199 0 -9.83988 0.995384 19.3408 0 -9.31933 0.950076 18.4143 0 -8.84655 0.918852 17.586 0 -8.35636 0.880418 16.7195 0 -7.99655 0.852485 16.0878 0 -7.57594 0.814359 15.3374 0 -7.22325 0.784697 14.725 0 -6.74314 0.768668 13.8727 0 -6.30558 0.750695 13.0932 0 -5.85283 0.677217 12.2511 0 -5.3777 0.622979 11.3738 0 -4.83137 0.613186 10.3969 0 -4.20084 0.58696 9.25997 0 -3.53841 0.518617 8.06081 0 -2.85435 0.480451 6.86356 0 -2.03113 0.416205 5.4852 0 0.362945 0.239535 1.26297 0 0.794479 0.227176 0.798663 0 0.863231 0.229036 0.811865 0 0.960817 0.222328 0.832375 0 -14.9518 1.3967 28.3502 0 -14.9518 1.3967 28.3502 0 -14.9518 1.3967 28.3502 0 -14.7305 1.37996 27.9602 0 -14.2787 1.34567 27.1625 0 -13.7753 1.30745 26.2736 0 -13.4509 1.28283 25.7024 0 -13.0551 1.25371 25.0071 0 -12.1971 1.19288 23.5015 0 -11.4691 1.14046 22.2216 0 -10.9803 1.10224 21.3581 0 -10.5238 1.06462 20.5505 0 -9.9114 1.02375 19.4727 0 -9.39203 0.972563 18.5466 0 -8.91964 0.93937 17.7163 0 -8.42736 0.905657 16.8489 0 -8.0664 0.878767 16.218 0 -7.64355 0.847544 15.4652 0 -7.29048 0.817882 14.8542 0 -6.81592 0.779749 13.9986 0 -6.37761 0.764773 13.2195 0 -5.91063 0.744856 12.3851 0 -5.44768 0.645293 11.5013 0 -4.90645 0.61636 10.5217 0 -4.2715 0.605356 9.38631 0 -3.60465 0.552875 8.18856 0 -2.91974 0.497755 6.98533 0 -2.10008 0.44143 5.60757 0 0.372436 0.255067 1.24398 0 0.792532 0.246438 0.800404 0 0.863734 0.240871 0.811932 0 0.95684 0.234075 0.834424 0 -15.0166 1.41737 28.4669 0 -15.0166 1.41737 28.4669 0 -15.0166 1.41737 28.4669 0 -14.7966 1.40037 28.0805 0 -14.3446 1.36614 27.2825 0 -13.8401 1.3291 26.3926 0 -13.5149 1.30585 25.8212 0 -13.1185 1.27773 25.1261 0 -12.2607 1.21637 23.6204 0 -11.5343 1.15985 22.3382 0 -11.0454 1.12157 21.4745 0 -10.5885 1.0852 20.667 0 -9.97714 1.03957 19.5892 0 -9.45294 1.00348 18.6648 0 -8.98364 0.95667 17.8303 0 -8.48964 0.928442 16.9646 0 -8.12825 0.903141 16.333 0 -7.70552 0.871253 15.5813 0 -7.35236 0.844297 14.9692 0 -6.8792 0.800907 14.1158 0 -6.44422 0.773729 13.334 0 -5.97646 0.756291 12.4997 0 -5.49962 0.708275 11.6232 0 -4.97302 0.624046 10.6354 0 -4.33807 0.612064 9.49936 0 -3.66507 0.581646 8.30427 0 -2.98133 0.510658 7.09682 0 -2.16395 0.463253 5.72008 0 0.378268 0.27133 1.23487 0 0.787632 0.258452 0.804709 0 0.864088 0.252861 0.81217 0 0.959221 0.252679 0.832445 0 -15.0778 1.44383 28.5659 0 -15.0778 1.44383 28.5659 0 -15.0778 1.44383 28.5659 0 -14.8595 1.42701 28.1852 0 -14.4131 1.39288 27.4043 0 -13.9137 1.35613 26.5304 0 -13.5885 1.33295 25.9593 0 -13.1927 1.30408 25.2646 0 -12.3366 1.23881 23.7568 0 -11.6107 1.18207 22.475 0 -11.1217 1.1447 21.6118 0 -10.6638 1.11112 20.8052 0 -10.0524 1.06477 19.7269 0 -9.52823 1.02956 18.8041 0 -9.05593 0.99577 17.9713 0 -8.56776 0.948777 17.1053 0 -8.20613 0.927421 16.4743 0 -7.78321 0.897681 15.7259 0 -7.43077 0.8704 15.1105 0 -6.95565 0.834062 14.2619 0 -6.52476 0.792785 13.4775 0 -6.0589 0.769058 12.6424 0 -5.57437 0.750713 11.7706 0 -5.04731 0.669355 10.7838 0 -4.42386 0.616144 9.64239 0 -3.74678 0.603236 8.45091 0 -3.06122 0.552405 7.24969 0 -2.24912 0.483893 5.86548 0 0.381525 0.292684 1.23988 0 0.782527 0.281722 0.808998 0 0.865529 0.2832 0.813272 0 0.949818 0.286074 0.858238 0 -15.1493 1.48026 28.6814 0 -15.1493 1.48026 28.6814 0 -15.1493 1.48026 28.6814 0 -14.9311 1.46367 28.3011 0 -14.4852 1.42985 27.5219 0 -13.9883 1.39217 26.6536 0 -13.669 1.36751 26.0974 0 -13.281 1.33564 25.4202 0 -12.4298 1.26961 23.9243 0 -11.7025 1.21557 22.6425 0 -11.2127 1.17964 21.7798 0 -10.7548 1.146 20.9732 0 -10.1438 1.10037 19.8965 0 -9.62148 1.06011 18.9751 0 -9.14953 1.02729 18.1418 0 -8.65802 0.9923 17.2785 0 -8.30043 0.955982 16.6436 0 -7.87679 0.927376 15.8976 0 -7.5234 0.904753 15.2784 0 -7.04777 0.868159 14.4334 0 -6.61477 0.83521 13.649 0 -6.15423 0.791725 12.8109 0 -5.67141 0.767371 11.9383 0 -5.12834 0.746248 10.9607 0 -4.52229 0.628437 9.8099 0 -3.84702 0.609551 8.61808 0 -3.15577 0.586802 7.42184 0 -2.34145 0.517987 6.02912 0 0.381113 0.312544 1.23621 0 0.781854 0.310641 0.810829 0 0.863825 0.314174 0.823734 0 0.93836 0.30787 0.855423 0 -15.2174 1.50793 28.8012 0 -15.2174 1.50793 28.8012 0 -15.2174 1.50793 28.8012 0 -14.9975 1.49153 28.4162 0 -14.5476 1.45889 27.6272 0 -14.0475 1.42062 26.7479 0 -13.7281 1.39503 26.1897 0 -13.3395 1.36374 25.5118 0 -12.4972 1.29706 24.0427 0 -11.7752 1.24204 22.7763 0 -11.286 1.20502 21.9139 0 -10.8285 1.17095 21.1082 0 -10.2172 1.12544 20.0313 0 -9.69411 1.08671 19.1097 0 -9.22293 1.04998 18.2743 0 -8.73032 1.01735 17.4117 0 -8.36974 0.99202 16.7769 0 -7.94951 0.949239 16.0306 0 -7.59664 0.925683 15.4078 0 -7.11936 0.89371 14.5665 0 -6.68654 0.860125 13.7809 0 -6.22399 0.823593 12.9434 0 -5.74674 0.7776 12.0674 0 -5.20261 0.759442 11.0898 0 -4.58026 0.701309 9.94719 0 -3.92187 0.616271 8.74421 0 -3.22665 0.599382 7.5467 0 -2.40535 0.554193 6.15487 0 0.341116 0.331431 1.29495 0 0.781671 0.327727 0.808971 0 0.864228 0.337 0.833779 0 0.923826 0.319527 0.848648 0 -15.2809 1.53627 28.9145 0 -15.2809 1.53627 28.9145 0 -15.2809 1.53627 28.9145 0 -15.0606 1.52025 28.529 0 -14.6114 1.48535 27.7376 0 -14.111 1.44648 26.8557 0 -13.7889 1.42136 26.2899 0 -13.3969 1.39048 25.6026 0 -12.5551 1.32367 24.135 0 -11.8402 1.26715 22.8873 0 -11.3586 1.22963 22.0471 0 -10.9011 1.19581 21.2416 0 -10.2896 1.15076 20.1645 0 -9.7665 1.11198 19.2428 0 -9.29492 1.07699 18.4079 0 -8.80412 1.0382 17.545 0 -8.44326 1.01508 16.9096 0 -8.01985 0.984227 16.1674 0 -7.67083 0.947912 15.5396 0 -7.19325 0.915959 14.7015 0 -6.75973 0.885583 13.9155 0 -6.29685 0.850042 13.0781 0 -5.81815 0.809437 12.2026 0 -5.27935 0.77072 11.2217 0 -4.64728 0.747526 10.0835 0 -3.9958 0.637788 8.87734 0 -3.30792 0.602487 7.67873 0 -2.48357 0.575558 6.29151 0 0.193152 0.373702 1.5618 0 0.782341 0.348032 0.807156 0 0.864932 0.349614 0.837673 0 0.903043 0.332267 0.848223 0 -15.3439 1.55586 29.0371 0 -15.3439 1.55586 29.0371 0 -15.3439 1.55586 29.0371 0 -15.1178 1.53971 28.6336 0 -14.6623 1.50546 27.8241 0 -14.1624 1.46581 26.9428 0 -13.8406 1.44058 26.3777 0 -13.4485 1.41019 25.6913 0 -12.6009 1.34423 24.2074 0 -11.8856 1.2886 22.96 0 -11.4037 1.2514 22.1196 0 -10.9533 1.21661 21.3339 0 -10.3461 1.17068 20.2684 0 -9.82313 1.1317 19.3467 0 -9.35173 1.09643 18.5126 0 -8.86073 1.05873 17.6497 0 -8.50138 1.03017 17.013 0 -8.07654 1.00426 16.2728 0 -7.72555 0.975454 15.6448 0 -7.25108 0.930869 14.8053 0 -6.81593 0.906133 14.0202 0 -6.35314 0.870465 13.182 0 -5.87309 0.83396 12.3065 0 -5.33723 0.78353 11.3234 0 -4.70579 0.758486 10.1852 0 -4.04161 0.697085 8.98636 0 -3.3681 0.609393 7.7795 0 -2.54616 0.584999 6.39709 0 0.108902 0.398672 1.71687 0 0.784218 0.365287 0.805607 0 0.864487 0.357543 0.836593 0 0.888353 0.341851 0.845058 0 -15.4256 1.57479 29.2002 0 -15.4256 1.57479 29.2002 0 -15.4256 1.57479 29.2002 0 -15.1998 1.55818 28.797 0 -14.7402 1.52415 27.9754 0 -14.2277 1.48715 27.061 0 -13.8999 1.4631 26.4796 0 -13.5077 1.43278 25.793 0 -12.658 1.36803 24.3053 0 -11.9371 1.31349 23.0431 0 -11.4553 1.27624 22.2026 0 -11.005 1.24095 21.4169 0 -10.4033 1.1938 20.366 0 -9.88805 1.15352 19.4655 0 -9.41656 1.11818 18.6319 0 -8.92528 1.08142 17.768 0 -8.56548 1.05371 17.1319 0 -8.1422 1.02142 16.3897 0 -7.78882 1.0007 15.7642 0 -7.31376 0.958929 14.9221 0 -6.88108 0.923129 14.1376 0 -6.41628 0.893964 13.2988 0 -5.9363 0.856992 12.4228 0 -5.39892 0.812752 11.4408 0 -4.7727 0.768279 10.2999 0 -4.09821 0.741548 9.10302 0 -3.43288 0.625487 7.89387 0 -2.6227 0.587094 6.52623 0 0.0700884 0.417595 1.79573 0 0.787964 0.383353 0.803219 0 0.859375 0.366281 0.832759 0 0.873707 0.352482 0.839321 0 -15.4912 1.58912 29.3305 0 -15.4912 1.58912 29.3305 0 -15.4912 1.58912 29.3305 0 -15.2654 1.57251 28.9272 0 -14.8055 1.53928 28.1065 0 -14.293 1.50257 27.1921 0 -13.9618 1.47922 26.6019 0 -13.5573 1.45088 25.8815 0 -12.7048 1.38707 24.387 0 -11.9834 1.33235 23.1229 0 -11.4978 1.29516 22.2713 0 -11.0471 1.25991 21.4841 0 -10.4454 1.21276 20.4332 0 -9.93047 1.17247 19.5337 0 -9.46623 1.13628 18.7214 0 -8.97724 1.09939 17.863 0 -8.6171 1.07264 17.2276 0 -8.19408 1.03966 16.4844 0 -7.84173 1.0145 15.8598 0 -7.36345 0.984663 15.0165 0 -6.9329 0.939739 14.2326 0 -6.46828 0.910295 13.393 0 -5.98794 0.875285 12.5175 0 -5.44981 0.833911 11.5359 0 -4.81706 0.777306 10.3652 0 -4.14203 0.752795 9.16811 0 -3.48239 0.670936 8.00422 0 -2.6774 0.59133 6.61957 0 0.0949633 0.42716 1.75556 0 0.790003 0.396987 0.801805 0 0.854978 0.372993 0.829586 0 0.866186 0.359984 0.835344 0 -15.5568 1.61047 29.4469 0 -15.5568 1.61047 29.4469 0 -15.5568 1.61047 29.4469 0 -15.3372 1.5935 29.062 0 -14.8885 1.55903 28.2732 0 -14.3757 1.52254 27.3587 0 -14.0444 1.49932 26.7685 0 -13.6397 1.47146 26.0484 0 -12.765 1.41039 24.4918 0 -12.0437 1.35515 23.2274 0 -11.5581 1.31791 22.3757 0 -11.1039 1.28328 21.5792 0 -10.4985 1.23686 20.5186 0 -9.98337 1.19672 19.6189 0 -9.51892 1.16049 18.8076 0 -9.03561 1.12279 17.9626 0 -8.68113 1.09509 17.3444 0 -8.2588 1.06349 16.6034 0 -7.90666 1.03586 15.9796 0 -7.42922 1.00343 15.1327 0 -6.99513 0.970898 14.3533 0 -6.53448 0.926823 13.5109 0 -6.05058 0.898256 12.6309 0 -5.50263 0.858229 11.6223 0 -4.86978 0.805486 10.4537 0 -4.20475 0.763229 9.26612 0 -3.52694 0.731691 8.09886 0 -2.73466 0.599891 6.72006 0 0.067246 0.445128 1.811 0 0.78323 0.403398 0.798907 0 0.84917 0.380228 0.825758 0 0.872047 0.378552 0.835967 0 -15.6095 1.6312 29.537 0 -15.6095 1.6312 29.537 0 -15.6095 1.6312 29.537 0 -15.3899 1.61429 29.1521 0 -14.9413 1.57987 28.3636 0 -14.4413 1.54187 27.4852 0 -14.1182 1.51763 26.918 0 -13.714 1.48947 26.1985 0 -12.8394 1.42826 24.6413 0 -12.0984 1.3761 23.3223 0 -11.6127 1.3392 22.4706 0 -11.1586 1.30467 21.6743 0 -10.5517 1.25856 20.6095 0 -10.0326 1.21907 19.6984 0 -9.56774 1.18294 18.8869 0 -9.08445 1.14543 18.04 0 -8.72967 1.11788 17.4231 0 -8.31307 1.08553 16.6958 0 -7.96624 1.05818 16.09 0 -7.49157 1.02033 15.2421 0 -7.05408 0.994101 14.4622 0 -6.58896 0.953019 13.6084 0 -6.10045 0.917704 12.7085 0 -5.55562 0.879981 11.7087 0 -4.92653 0.829772 10.5508 0 -4.25579 0.774867 9.34098 0 -3.57279 0.747645 8.16378 0 -2.78393 0.659204 6.83864 0 -0.0113132 0.461238 1.94131 0 0.776684 0.40944 0.795627 0 0.842709 0.386273 0.821527 0 0.883963 0.392714 0.840108 0 -15.6769 1.65752 29.6545 0 -15.6769 1.65752 29.6545 0 -15.6769 1.65752 29.6545 0 -15.4553 1.64079 29.2636 0 -15.0067 1.6066 28.4757 0 -14.5069 1.56853 27.5978 0 -14.1853 1.54396 27.0347 0 -13.7938 1.51394 26.3504 0 -12.9317 1.45099 24.8283 0 -12.1899 1.3992 23.507 0 -11.6906 1.36429 22.6177 0 -11.2251 1.33139 21.7896 0 -10.6182 1.28527 20.7246 0 -10.0986 1.24598 19.8129 0 -9.63005 1.21051 18.9912 0 -9.14276 1.17362 18.1327 0 -8.788 1.14592 17.5164 0 -8.37174 1.11333 16.7872 0 -8.02437 1.08615 16.1855 0 -7.55051 1.05 15.3332 0 -7.11348 1.01628 14.5543 0 -6.64696 0.989131 13.7086 0 -6.168 0.93713 12.8167 0 -5.6211 0.906021 11.8181 0 -4.98459 0.862201 10.6518 0 -4.3172 0.808251 9.45011 0 -3.63979 0.760867 8.26739 0 -2.84914 0.716187 6.98093 0 -0.0948997 0.493099 2.09069 0 0.770376 0.416141 0.792795 0 0.845228 0.400695 0.819994 0 0.911577 0.447622 0.843375 0 -15.7555 1.6815 29.8027 0 -15.7555 1.6815 29.8027 0 -15.7555 1.6815 29.8027 0 -15.5327 1.66517 29.4093 0 -15.0784 1.63179 28.6055 0 -14.5721 1.59478 27.7099 0 -14.2504 1.57026 27.1463 0 -13.8586 1.54027 26.4616 0 -13.0101 1.47539 24.9775 0 -12.2807 1.42158 23.6907 0 -11.7814 1.38654 22.8012 0 -11.3144 1.35393 21.9692 0 -10.6904 1.3105 20.8576 0 -10.1636 1.27233 19.9257 0 -9.69503 1.23684 19.1041 0 -9.20763 1.19963 18.2461 0 -8.84987 1.1724 17.6191 0 -8.42974 1.14037 16.8812 0 -8.08155 1.11331 16.2748 0 -7.61062 1.07611 15.4317 0 -7.17853 1.04061 14.6572 0 -6.71367 1.00687 13.8177 0 -6.22486 0.976015 12.9201 0 -5.6796 0.929837 11.9154 0 -5.04824 0.889594 10.7634 0 -4.38215 0.838102 9.56631 0 -3.70844 0.775159 8.38065 0 -2.92066 0.731728 7.09036 0 -0.16661 0.530972 2.22953 0 0.766132 0.421203 0.793733 0 0.858981 0.449716 0.824739 0 0.913121 0.461618 0.840625 0 -15.8402 1.70781 29.9632 0 -15.8402 1.70781 29.9632 0 -15.8402 1.70781 29.9632 0 -15.6174 1.69162 29.5697 0 -15.1628 1.65849 28.7657 0 -14.6565 1.62138 27.8697 0 -14.3301 1.59751 27.2932 0 -13.9321 1.56842 26.5911 0 -13.0807 1.5038 25.0985 0 -12.3602 1.44865 23.8365 0 -11.8747 1.41171 22.9859 0 -11.4127 1.37854 22.1681 0 -10.7889 1.33513 21.0567 0 -10.2553 1.29784 20.106 0 -9.77344 1.26412 19.2471 0 -9.27851 1.22795 18.3697 0 -8.92327 1.19935 17.7449 0 -8.50686 1.16539 17.0162 0 -8.16009 1.13718 16.4089 0 -7.68526 1.10153 15.5622 0 -7.24625 1.07195 14.7705 0 -6.77607 1.03932 13.9271 0 -6.29231 1.00625 13.0373 0 -5.75137 0.963311 12.0444 0 -5.14064 0.913155 10.9437 0 -4.47678 0.86359 9.75475 0 -3.77964 0.811859 8.51168 0 -2.98387 0.745412 7.18738 0 -0.242296 0.55251 2.37218 0 0.76129 0.427024 0.79374 0 0.866413 0.477283 0.824768 0 0.911355 0.470332 0.839325 0 -15.9476 1.73735 30.1756 0 -15.9476 1.73735 30.1756 0 -15.9476 1.73735 30.1756 0 -15.7227 1.72137 29.7763 0 -15.2646 1.68855 28.9619 0 -14.7543 1.65194 28.0548 0 -14.428 1.62802 27.4783 0 -14.03 1.59886 26.7762 0 -13.1679 1.53606 25.2547 0 -12.4408 1.48226 23.9749 0 -11.9554 1.44535 23.1245 0 -11.5017 1.41084 22.3295 0 -10.8954 1.36439 21.2661 0 -10.3693 1.32571 20.3356 0 -9.88946 1.29079 19.4804 0 -9.39393 1.25251 18.5963 0 -9.02981 1.22514 17.9458 0 -8.59289 1.19817 17.1704 0 -8.2368 1.17431 16.5411 0 -7.7592 1.14002 15.6937 0 -7.32572 1.10758 14.9048 0 -6.86054 1.07263 14.0762 0 -6.39234 1.03356 13.2263 0 -5.86521 0.996009 12.278 0 -5.25741 0.935368 11.1761 0 -4.591 0.892694 9.98607 0 -3.89301 0.842541 8.7421 0 -3.06639 0.776032 7.32292 0 -0.320439 0.55488 2.52252 0 0.768537 0.478078 0.799927 0 0.863419 0.485534 0.823113 0 0.900595 0.473684 0.836161 0 -16.0593 1.76831 30.3946 0 -16.0593 1.76831 30.3946 0 -16.0593 1.76831 30.3946 0 -15.8369 1.75191 30.0021 0 -15.3788 1.71908 29.1877 0 -14.8684 1.68248 28.2804 0 -14.5389 1.65918 27.6952 0 -14.1365 1.63093 26.9812 0 -13.2703 1.56895 25.4486 0 -12.539 1.51553 24.1569 0 -12.0466 1.47956 23.2866 0 -11.5872 1.44559 22.4753 0 -10.9842 1.39714 21.4178 0 -10.47 1.35498 20.5162 0 -10.0055 1.3177 19.7032 0 -9.51379 1.28355 18.8396 0 -9.1421 1.26065 18.176 0 -8.70851 1.23161 17.4059 0 -8.35005 1.20595 16.7654 0 -7.87181 1.17024 15.9141 0 -7.44235 1.13725 15.1356 0 -6.98272 1.10153 14.3238 0 -6.51422 1.06386 13.4731 0 -5.98237 1.02091 12.5067 0 -5.34802 0.982884 11.3486 0 -4.68388 0.920165 10.1462 0 -4.00611 0.873717 8.96424 0 -3.15371 0.815662 7.47763 0 -0.396867 0.561694 2.64084 0 0.773614 0.511961 0.806832 0 0.857049 0.487263 0.824218 0 0.888543 0.478758 0.827622 0 -16.155 1.80284 30.567 0 -16.155 1.80284 30.567 0 -16.155 1.80284 30.567 0 -15.934 1.78628 30.1783 0 -15.4824 1.75268 29.3824 0 -14.9792 1.71526 28.4954 0 -14.6548 1.69121 27.9247 0 -14.2527 1.66277 27.2111 0 -13.3822 1.60115 25.6662 0 -12.6439 1.54862 24.3545 0 -12.1556 1.51016 23.4918 0 -11.7 1.47378 22.6865 0 -11.0848 1.42938 21.5999 0 -10.5536 1.39443 20.6615 0 -10.0828 1.36032 19.8359 0 -9.59693 1.32267 18.9848 0 -9.24103 1.29507 18.3571 0 -8.82215 1.26259 17.6263 0 -8.47352 1.23566 17.0134 0 -7.99692 1.1996 16.1661 0 -7.56488 1.16682 15.381 0 -7.09804 1.13225 14.5485 0 -6.61334 1.09717 13.656 0 -6.06985 1.05767 12.6572 0 -5.43834 1.01035 11.498 0 -4.77274 0.961157 10.3037 0 -4.0963 0.904319 9.11557 0 -3.2705 0.850754 7.71372 0 -0.49106 0.578372 2.78152 0 0.768349 0.513809 0.805043 0 0.853872 0.496644 0.816842 0 0.870614 0.491811 0.819489 0 -16.2585 1.8415 30.7521 0 -16.2585 1.8415 30.7521 0 -16.2585 1.8415 30.7521 0 -16.0378 1.82481 30.3645 0 -15.5871 1.79078 29.5711 0 -15.084 1.75303 28.6842 0 -14.76 1.72875 28.1144 0 -14.3651 1.6992 27.4211 0 -13.5098 1.63468 25.9176 0 -12.7792 1.57738 24.62 0 -12.2819 1.54239 23.737 0 -11.8124 1.51243 22.9034 0 -11.1918 1.46947 21.8036 0 -10.6669 1.43035 20.8762 0 -10.1931 1.39501 20.0393 0 -9.7 1.35804 19.1681 0 -9.33869 1.33098 18.5267 0 -8.91896 1.29853 17.7916 0 -8.56959 1.27158 17.1779 0 -8.09376 1.23557 16.3338 0 -7.65905 1.20304 15.544 0 -7.19328 1.1679 14.7055 0 -6.70835 1.13207 13.8203 0 -6.17309 1.09111 12.8417 0 -5.55137 1.04266 11.71 0 -4.88619 0.994314 10.5169 0 -4.19657 0.945465 9.30321 0 -3.38886 0.88946 7.95626 0 -0.587147 0.625986 2.87248 0 0.760791 0.525815 0.800148 0 0.866084 0.55578 0.812107 0 0.876953 0.534748 0.825309 0 -16.5562 1.9301 31.3065 0 -16.5562 1.9301 31.3065 0 -16.5562 1.9301 31.3065 0 -16.3353 1.91269 30.9152 0 -15.8848 1.87706 30.1162 0 -15.3735 1.84284 29.2087 0 -15.0437 1.82104 28.6239 0 -14.6438 1.794 27.9185 0 -13.7956 1.7294 26.4318 0 -13.0753 1.67455 25.1673 0 -12.5901 1.6376 24.3149 0 -12.1356 1.6029 23.515 0 -11.5277 1.55656 22.4444 0 -11.0078 1.51681 21.5284 0 -10.5389 1.48087 20.7028 0 -10.0405 1.44917 19.8221 0 -9.67373 1.42648 19.1716 0 -9.24306 1.39979 18.407 0 -8.88422 1.37743 17.7741 0 -8.40703 1.34316 16.9224 0 -7.97868 1.30907 16.1555 0 -7.52115 1.2732 15.3275 0 -7.05071 1.23497 14.4885 0 -6.52448 1.19305 13.5308 0 -5.90245 1.1431 12.3906 0 -5.24063 1.08716 11.1895 0 -4.56455 1.026 9.9868 0 -3.72516 0.956315 8.50164 0 -0.919461 0.782902 3.57633 0 0.749736 0.660522 0.825373 0 0.854179 0.637554 0.832197 0 0.885593 0.632642 0.831757 0 -16.9769 2.08312 32.0654 0 -16.9769 2.08312 32.0654 0 -16.9769 2.08312 32.0654 0 -16.7565 2.068 31.6803 0 -16.3062 2.03705 30.8917 0 -15.8052 2.00231 30.0146 0 -15.4859 1.97661 29.4548 0 -15.0979 1.9441 28.7762 0 -14.2574 1.87384 27.3053 0 -13.5347 1.81482 26.0281 0 -13.0483 1.77178 25.1631 0 -12.5938 1.73152 24.3554 0 -11.987 1.67773 23.2776 0 -11.4551 1.6478 22.3426 0 -10.9781 1.61324 21.4945 0 -10.4846 1.57116 20.6098 0 -10.1226 1.54039 19.9611 0 -9.69748 1.50425 19.199 0 -9.34999 1.47185 18.576 0 -8.87616 1.43037 17.7263 0 -8.44349 1.3944 16.9383 0 -7.97992 1.35634 16.0955 0 -7.50262 1.3195 15.2255 0 -6.95914 1.29614 14.2543 0 -6.32825 1.26609 13.1308 0 -5.65605 1.23356 11.9374 0 -4.98239 1.18339 10.7638 0 -4.17674 1.1178 9.39462 0 -1.37087 0.913735 4.37515 0 0.779729 0.744787 0.806304 7840.2 0.862695 0.779947 0.830483 10703.5 0.89765 0.768661 0.841714 0 -17.3554 2.16107 32.7571 0 -17.3554 2.16107 32.7571 0 -17.3554 2.16107 32.7571 0 -17.1366 2.14307 32.3721 0 -16.6819 2.11594 31.577 0 -16.1665 2.08796 30.6675 0 -15.8323 2.07092 30.0769 0 -15.4222 2.05252 29.3553 0 -14.5415 2.00274 27.7977 0 -13.8185 1.94322 26.5174 0 -13.3365 1.89931 25.6622 0 -12.8859 1.85827 24.8627 0 -12.2839 1.80297 23.7936 0 -11.7702 1.75536 22.8822 0 -11.3071 1.71229 22.061 0 -10.8142 1.6879 21.2126 0 -10.4569 1.66452 20.5952 0 -10.0375 1.63639 19.8692 0 -9.68439 1.61293 19.2488 0 -9.22035 1.57147 18.4275 0 -8.80023 1.53388 17.6734 0 -8.34079 1.49758 16.8496 0 -7.8593 1.46217 15.9674 0 -7.28998 1.44247 14.9301 0 -6.61767 1.42607 13.7104 0 -5.96146 1.37033 12.5175 0 -5.29981 1.30995 11.3607 0 -4.49877 1.23425 9.98452 0 -1.70092 1.03 5.00914 0 0.772457 0.822126 0.836282 10703.6 0.860601 0.858481 0.848135 46057.7 0.901594 0.850569 0.84026 1431.51 -17.5362 2.28957 33.1059 0 -17.5362 2.28957 33.1059 0 -17.5362 2.28957 33.1059 0 -17.3163 2.27253 32.7199 0 -16.8666 2.23783 31.9287 0 -16.3661 2.19609 31.0416 0 -16.0445 2.16749 30.4691 0 -15.6527 2.13235 29.7736 0 -14.8055 2.05607 28.2702 0 -14.0862 1.99132 26.9917 0 -13.5989 1.94818 26.1226 0 -13.1308 1.9178 25.2934 0 -12.5096 1.87774 24.1992 0 -12.0025 1.83328 23.3119 0 -11.5174 1.80768 22.457 0 -11.0217 1.78229 21.5977 0 -10.6425 1.77414 20.9408 0 -10.2097 1.74806 20.1799 0 -9.85319 1.72321 19.551 0 -9.38084 1.68513 18.7067 0 -8.95492 1.64692 17.9397 0 -8.4994 1.60603 17.1136 0 -8.0246 1.56453 16.2432 0 -7.49053 1.51787 15.2594 0 -6.87632 1.46402 14.1353 0 -6.21429 1.41028 12.9419 0 -5.51484 1.35994 11.6883 0 -4.71067 1.31258 10.3604 0 -1.96848 1.09026 5.56027 0 0.707702 0.899409 0.91945 0 0.84232 0.896381 0.833607 1431.51 0.900367 0.88893 0.847557 554.172 -16.0215 1.31007 30.3699 0 -16.0215 1.31007 30.3699 0 -16.0215 1.31007 30.3699 0 -15.8004 1.2936 29.9793 0 -15.3481 1.26043 29.181 0 -14.8415 1.22587 28.294 0 -14.5158 1.20366 27.7237 0 -14.1195 1.17662 27.0296 0 -13.2643 1.11178 25.5206 0 -12.5392 1.05296 24.2367 0 -12.0481 1.02345 23.3748 0 -11.5934 0.979494 22.5676 0 -10.9811 0.937824 21.4913 0 -10.4573 0.901229 20.57 0 -9.98684 0.864593 19.7376 0 -9.49781 0.823118 18.8739 0 -9.14036 0.788314 18.2408 0 -8.71592 0.771221 17.4971 0 -8.36732 0.758022 16.8773 0 -7.89357 0.726134 16.0354 0 -7.47931 0.633846 15.2409 0 -7.01565 0.61557 14.4057 0 -6.52798 0.609177 13.5357 0 -5.98624 0.583915 12.5567 0 -5.35857 0.517178 11.4146 0 -4.67827 0.476788 10.222 0 -3.97243 0.418844 9.02329 0 -3.1669 0.355856 7.64593 0 -0.399288 0.152512 2.70586 0 0.690457 0.0987134 1.02592 0 0.898029 0.0929676 0.853218 0 1.0184 0.0853611 0.908614 0 -16.0215 1.31007 30.3699 0 -16.0215 1.31007 30.3699 0 -16.0215 1.31007 30.3699 0 -15.8004 1.2936 29.9793 0 -15.3481 1.26043 29.181 0 -14.8415 1.22587 28.294 0 -14.5158 1.20366 27.7237 0 -14.1195 1.17662 27.0296 0 -13.2643 1.11178 25.5206 0 -12.5392 1.05296 24.2367 0 -12.0481 1.02345 23.3748 0 -11.5934 0.979494 22.5676 0 -10.9811 0.937824 21.4913 0 -10.4573 0.901229 20.57 0 -9.98684 0.864593 19.7376 0 -9.49781 0.823118 18.8739 0 -9.14036 0.788314 18.2408 0 -8.71592 0.771221 17.4971 0 -8.36732 0.758022 16.8773 0 -7.89357 0.726134 16.0354 0 -7.47931 0.633846 15.2409 0 -7.01565 0.61557 14.4057 0 -6.52798 0.609177 13.5357 0 -5.98624 0.583915 12.5567 0 -5.35857 0.517178 11.4146 0 -4.67827 0.476788 10.222 0 -3.97243 0.418844 9.02329 0 -3.1669 0.355856 7.64593 0 -0.399288 0.152512 2.70586 0 0.690457 0.0987134 1.02592 0 0.898029 0.0929676 0.853218 0 1.0184 0.0853611 0.908614 0 -16.0215 1.31007 30.3699 0 -16.0215 1.31007 30.3699 0 -16.0215 1.31007 30.3699 0 -15.8004 1.2936 29.9793 0 -15.3481 1.26043 29.181 0 -14.8415 1.22587 28.294 0 -14.5158 1.20366 27.7237 0 -14.1195 1.17662 27.0296 0 -13.2643 1.11178 25.5206 0 -12.5392 1.05296 24.2367 0 -12.0481 1.02345 23.3748 0 -11.5934 0.979494 22.5676 0 -10.9811 0.937824 21.4913 0 -10.4573 0.901229 20.57 0 -9.98684 0.864593 19.7376 0 -9.49781 0.823118 18.8739 0 -9.14036 0.788314 18.2408 0 -8.71592 0.771221 17.4971 0 -8.36732 0.758022 16.8773 0 -7.89357 0.726134 16.0354 0 -7.47931 0.633846 15.2409 0 -7.01565 0.61557 14.4057 0 -6.52798 0.609177 13.5357 0 -5.98624 0.583915 12.5567 0 -5.35857 0.517178 11.4146 0 -4.67827 0.476788 10.222 0 -3.97243 0.418844 9.02329 0 -3.1669 0.355856 7.64593 0 -0.399288 0.152512 2.70586 0 0.690457 0.0987134 1.02592 0 0.898029 0.0929676 0.853218 0 1.0184 0.0853611 0.908614 0 -16.068 1.32757 30.4549 0 -16.068 1.32757 30.4549 0 -16.068 1.32757 30.4549 0 -15.8465 1.31142 30.0642 0 -15.393 1.28019 29.267 0 -14.886 1.24543 28.3791 0 -14.5601 1.22309 27.8083 0 -14.1641 1.19427 27.1123 0 -13.3091 1.12663 25.5999 0 -12.583 1.06843 24.3158 0 -12.0919 1.03659 23.4539 0 -11.6338 1.00375 22.6477 0 -11.0248 0.949739 21.5695 0 -10.5005 0.91579 20.6492 0 -10.0297 0.878804 19.8154 0 -9.53924 0.840663 18.952 0 -9.1808 0.807718 18.3183 0 -8.75844 0.777858 17.5717 0 -8.40886 0.766481 16.9496 0 -7.93127 0.746745 16.1101 0 -7.50867 0.684202 15.319 0 -7.05667 0.621104 14.4759 0 -6.56975 0.610769 13.6037 0 -6.02562 0.594087 12.6259 0 -5.39604 0.534424 11.4848 0 -4.71661 0.488302 10.2908 0 -4.00842 0.431174 9.09053 0 -3.20322 0.36989 7.71103 0 -0.425234 0.162694 2.75815 0 0.694833 0.106199 1.01922 0 0.897342 0.101737 0.852545 0 1.01745 0.0929002 0.907853 0 -16.132 1.35301 30.5756 0 -16.132 1.35301 30.5756 0 -16.132 1.35301 30.5756 0 -15.9102 1.33774 30.1857 0 -15.4568 1.3065 29.3884 0 -14.9498 1.27174 28.5005 0 -14.625 1.2463 27.9272 0 -14.2299 1.21501 27.2291 0 -13.3749 1.14737 25.7168 0 -12.647 1.09463 24.436 0 -12.1581 1.05629 23.574 0 -11.6998 1.02702 22.7695 0 -11.0916 0.971751 21.6917 0 -10.5683 0.934049 20.7711 0 -10.0959 0.901417 19.9366 0 -9.60362 0.866083 19.0736 0 -9.24279 0.840375 18.4393 0 -8.82183 0.804443 17.6933 0 -8.47673 0.777324 17.0665 0 -7.99901 0.759534 16.2296 0 -7.56503 0.741205 15.4447 0 -7.12314 0.642233 14.5956 0 -6.64121 0.614793 13.7214 0 -6.09439 0.608282 12.7451 0 -5.4607 0.564257 11.6064 0 -4.7856 0.501478 10.4111 0 -4.07813 0.456346 9.21434 0 -3.26888 0.395117 7.82926 0 -0.481205 0.18315 2.874 0 0.704137 0.121557 1.00499 0 0.895157 0.117664 0.850956 0 1.01585 0.109617 0.90644 0 -16.2043 1.38301 30.7134 0 -16.2043 1.38301 30.7134 0 -16.2043 1.38301 30.7134 0 -15.9826 1.36774 30.3236 0 -15.5295 1.33567 29.5256 0 -15.0244 1.29568 28.6336 0 -14.6997 1.26997 28.0601 0 -14.3047 1.23869 27.362 0 -13.4488 1.17435 25.8537 0 -12.7228 1.11947 24.5749 0 -12.2341 1.08189 23.7135 0 -11.7778 1.04537 22.9079 0 -11.1639 1.00816 21.8314 0 -10.6432 0.957388 20.9076 0 -10.1692 0.929002 20.0738 0 -9.67624 0.89666 19.212 0 -9.31672 0.869204 18.5776 0 -8.8957 0.835717 17.8338 0 -8.55285 0.802375 17.2046 0 -8.07956 0.769666 16.3628 0 -7.64465 0.753555 15.5818 0 -7.18848 0.708533 14.7395 0 -6.72204 0.623412 13.8568 0 -6.17656 0.611175 12.8798 0 -5.53638 0.589845 11.7446 0 -4.8602 0.528738 10.5486 0 -4.15516 0.480396 9.35338 0 -3.34399 0.422033 7.96478 0 -0.57341 0.213405 3.02907 0 0.712076 0.13952 0.992836 0 0.892325 0.135853 0.848859 0 1.01354 0.129282 0.904657 0 -16.2516 1.40267 30.8035 0 -16.2516 1.40267 30.8035 0 -16.2516 1.40267 30.8035 0 -16.03 1.38683 30.4132 0 -15.5783 1.35116 29.6123 0 -15.0732 1.31117 28.7202 0 -14.7485 1.28546 28.1467 0 -14.3535 1.25468 27.4499 0 -13.4986 1.19005 25.9445 0 -12.7726 1.13512 24.6656 0 -12.2832 1.09871 23.8037 0 -11.8255 1.06427 22.997 0 -11.2123 1.02372 21.9197 0 -10.6882 0.985147 20.9982 0 -10.2185 0.942735 20.1637 0 -9.72557 0.913749 19.3038 0 -9.36658 0.8846 18.6667 0 -8.94553 0.850464 17.924 0 -8.60155 0.821352 17.2954 0 -8.13186 0.776192 16.4491 0 -7.69595 0.76143 15.6702 0 -7.23225 0.74271 14.8303 0 -6.7679 0.647377 13.9454 0 -6.22756 0.614078 12.9646 0 -5.58428 0.602973 11.8303 0 -4.90425 0.554531 10.6357 0 -4.20213 0.489939 9.43761 0 -3.38878 0.43749 8.04644 0 -0.626872 0.23127 3.11994 0 0.711493 0.149744 0.993976 0 0.891038 0.14618 0.847749 0 1.01206 0.139705 0.903642 0 -16.296 1.41773 30.8849 0 -16.296 1.41773 30.8849 0 -16.296 1.41773 30.8849 0 -16.0749 1.40024 30.493 0 -15.6228 1.36448 29.6917 0 -15.118 1.3238 28.7995 0 -14.7935 1.29786 28.2267 0 -14.3982 1.26791 27.5314 0 -13.5428 1.20309 26.0251 0 -12.8154 1.1491 24.7444 0 -12.325 1.11357 23.8812 0 -11.8667 1.08002 23.0742 0 -11.2541 1.03547 21.9962 0 -10.7285 1.00457 21.0767 0 -10.2602 0.956868 20.2418 0 -9.76836 0.922451 19.3791 0 -9.40838 0.896202 18.7416 0 -8.98709 0.861809 17.9984 0 -8.6421 0.834721 17.3702 0 -8.17197 0.7894 16.5208 0 -7.73771 0.766753 15.7426 0 -7.27359 0.749755 14.9026 0 -6.80069 0.686417 14.0223 0 -6.26952 0.618831 13.0364 0 -5.62669 0.60631 11.902 0 -4.94348 0.571188 10.7103 0 -4.24335 0.499124 9.51129 0 -3.42944 0.451584 8.11909 0 -0.668204 0.243754 3.19691 0 0.710391 0.15842 0.995887 0 0.889836 0.155484 0.846734 0 1.01071 0.149443 0.902727 0 -16.4104 1.44975 31.0865 0 -16.4104 1.44975 31.0865 0 -16.4104 1.44975 31.0865 0 -16.1898 1.43191 30.6952 0 -15.7386 1.39631 29.8961 0 -15.2337 1.35817 29.0083 0 -14.9087 1.33416 28.4372 0 -14.5126 1.30581 27.7415 0 -13.6555 1.24406 26.2338 0 -12.9278 1.19123 24.9532 0 -12.4389 1.15474 24.0926 0 -11.9819 1.12098 23.2884 0 -11.3712 1.07571 22.2135 0 -10.8487 1.03409 21.2915 0 -10.3753 1.00493 20.458 0 -9.88718 0.957196 19.5899 0 -9.52761 0.928663 18.9539 0 -9.10407 0.902608 18.2104 0 -8.7588 0.875915 17.5866 0 -8.28729 0.839617 16.7342 0 -7.85739 0.80082 15.9598 0 -7.39784 0.76919 15.1177 0 -6.91335 0.751776 14.2445 0 -6.38204 0.687412 13.2603 0 -5.75649 0.614117 12.119 0 -5.06828 0.598525 10.9307 0 -4.36064 0.561034 9.73722 0 -3.55834 0.484251 8.34392 0 -0.786217 0.287087 3.42864 0 0.697122 0.193772 1.01398 0 0.884947 0.192526 0.850301 0 1.00517 0.186963 0.906366 0 -16.5428 1.49334 31.3256 0 -16.5428 1.49334 31.3256 0 -16.5428 1.49334 31.3256 0 -16.3214 1.47748 30.9352 0 -15.8685 1.44504 30.137 0 -15.3623 1.40873 29.2479 0 -15.0377 1.3843 28.677 0 -14.6428 1.35437 27.9822 0 -13.7881 1.29006 26.4774 0 -13.0612 1.23738 25.1997 0 -12.5712 1.20271 24.3388 0 -12.1139 1.1685 23.5322 0 -11.5032 1.12161 22.4532 0 -10.9804 1.08122 21.5302 0 -10.5096 1.04351 20.6983 0 -10.0183 1.00979 19.8314 0 -9.65802 0.984338 19.1989 0 -9.23979 0.940513 18.4513 0 -8.89328 0.917966 17.8327 0 -8.42093 0.886765 16.9757 0 -7.98883 0.854282 16.2027 0 -7.52972 0.818568 15.364 0 -7.05238 0.774115 14.4849 0 -6.50832 0.75644 13.5067 0 -5.8764 0.705766 12.3677 0 -5.21015 0.609298 11.1678 0 -4.50026 0.585804 9.97787 0 -3.68396 0.548439 8.59064 0 -0.921757 0.331643 3.68331 0 0.693452 0.234405 1.01312 0 0.877211 0.232889 0.860271 0 0.996107 0.226773 0.917092 0 -16.6159 1.52212 31.462 0 -16.6159 1.52212 31.462 0 -16.6159 1.52212 31.462 0 -16.3948 1.50549 31.0719 0 -15.943 1.47124 30.2742 0 -15.438 1.43289 29.3858 0 -15.1133 1.40823 28.8147 0 -14.7182 1.37822 28.1195 0 -13.8612 1.31696 26.614 0 -13.1331 1.26531 25.3348 0 -12.6438 1.22776 24.4709 0 -12.187 1.1921 23.6635 0 -11.5765 1.14435 22.5845 0 -11.0535 1.10442 21.6624 0 -10.5818 1.06855 20.831 0 -10.0919 1.02912 19.9618 0 -9.73002 1.00667 19.3298 0 -9.30715 0.977462 18.5824 0 -8.96339 0.942516 17.9612 0 -8.49038 0.911635 17.1055 0 -8.05762 0.881858 16.3294 0 -7.59769 0.847043 15.4932 0 -7.11931 0.806613 14.6136 0 -6.58107 0.767424 13.6321 0 -5.94251 0.742591 12.4971 0 -5.27812 0.638453 11.2959 0 -4.57452 0.589955 10.101 0 -3.74958 0.566483 8.71289 0 -1.00412 0.357702 3.82191 0 0.695181 0.250583 1.00985 0 0.872619 0.248057 0.864572 0 0.994961 0.243581 0.916769 0 -16.6821 1.5428 31.5827 0 -16.6821 1.5428 31.5827 0 -16.6821 1.5428 31.5827 0 -16.4611 1.52601 31.1925 0 -16.0092 1.49168 30.3946 0 -15.5039 1.45357 29.5058 0 -15.1783 1.43 28.9343 0 -14.7821 1.40188 28.2391 0 -13.9246 1.34099 26.7329 0 -13.198 1.28551 25.4513 0 -12.7091 1.24722 24.5876 0 -12.2522 1.21146 23.7801 0 -11.6413 1.16464 22.7019 0 -11.1179 1.12514 21.7796 0 -10.6453 1.09037 20.9473 0 -10.1539 1.05402 20.0773 0 -9.79319 1.02651 19.4451 0 -9.36944 1.00032 18.6974 0 -9.02277 0.975999 18.0776 0 -8.55418 0.928788 17.2215 0 -8.12068 0.903738 16.4438 0 -7.66079 0.868715 15.6104 0 -7.18152 0.831776 14.7305 0 -6.64629 0.780968 13.7469 0 -6.00825 0.754006 12.6114 0 -5.32954 0.702171 11.4172 0 -4.64068 0.597887 10.2133 0 -3.81371 0.570437 8.82352 0 -1.06813 0.381067 3.94119 0 0.690921 0.265493 1.0108 0 0.869696 0.260582 0.866435 0 0.996425 0.25943 0.916676 0 -16.7581 1.566 31.7213 0 -16.7581 1.566 31.7213 0 -16.7581 1.566 31.7213 0 -16.5367 1.54974 31.3307 0 -16.0839 1.5165 30.532 0 -15.5776 1.48028 29.6434 0 -15.2519 1.45718 29.0722 0 -14.8557 1.42893 28.3771 0 -14.0001 1.36444 26.8699 0 -13.274 1.30758 25.5873 0 -12.7852 1.26935 24.7239 0 -12.328 1.23514 23.9177 0 -11.7163 1.19028 22.8396 0 -11.1925 1.15186 21.9172 0 -10.72 1.11787 21.0859 0 -10.2288 1.08225 20.2175 0 -9.86876 1.0552 19.5855 0 -9.4475 1.02193 18.8388 0 -9.10089 0.999928 18.2191 0 -8.62979 0.962709 17.3671 0 -8.20081 0.923178 16.5843 0 -7.739 0.895327 15.7556 0 -7.26008 0.858317 14.8756 0 -6.72299 0.81573 13.8932 0 -6.09158 0.765626 12.7546 0 -5.40691 0.73764 11.5646 0 -4.71381 0.652655 10.3642 0 -3.90559 0.575959 8.97328 0 -1.14722 0.411512 4.09544 0 0.657508 0.28702 1.06536 0 0.872319 0.291037 0.863998 0 0.998112 0.289611 0.916184 0 -16.8474 1.59938 31.8865 0 -16.8474 1.59938 31.8865 0 -16.8474 1.59938 31.8865 0 -16.626 1.58368 31.4967 0 -16.1735 1.55113 30.6998 0 -15.6682 1.51437 29.8126 0 -15.3432 1.49074 29.2423 0 -14.9482 1.46028 28.5463 0 -14.0935 1.39401 27.0371 0 -13.3665 1.33958 25.755 0 -12.8767 1.30366 24.8922 0 -12.419 1.27009 24.0856 0 -11.8074 1.22517 23.0081 0 -11.2844 1.1863 22.0871 0 -10.8126 1.15124 21.2566 0 -10.322 1.11473 20.3895 0 -9.96208 1.08781 19.7559 0 -9.53998 1.05651 19.0104 0 -9.19482 1.0293 18.3882 0 -8.72187 0.997553 17.5394 0 -8.29151 0.96432 16.7532 0 -7.83334 0.921786 15.9238 0 -7.35205 0.892844 15.0471 0 -6.8148 0.851364 14.0638 0 -6.18454 0.798049 12.9247 0 -5.50449 0.753691 11.7329 0 -4.79777 0.720656 10.5397 0 -4.0021 0.595772 9.14269 0 -1.22349 0.439016 4.25812 0 0.651135 0.310481 1.07594 0 0.875528 0.319406 0.862004 0 0.977536 0.303344 0.906568 0 -16.9225 1.62694 32.0266 0 -16.9225 1.62694 32.0266 0 -16.9225 1.62694 32.0266 0 -16.7013 1.6108 31.6369 0 -16.2489 1.5778 30.8399 0 -15.7436 1.53989 29.951 0 -15.4186 1.51511 29.3781 0 -15.023 1.48497 28.6808 0 -14.1667 1.42035 27.1707 0 -13.4391 1.36688 25.8889 0 -12.9496 1.33013 25.0263 0 -12.4924 1.29588 24.2203 0 -11.8812 1.25038 23.1434 0 -11.3579 1.21143 22.2221 0 -10.8858 1.17639 21.391 0 -10.3947 1.13996 20.5238 0 -10.0346 1.11325 19.8885 0 -9.61216 1.08189 19.1437 0 -9.26656 1.05618 18.5203 0 -8.79471 1.01891 17.6724 0 -8.36269 0.991985 16.8852 0 -7.90408 0.951434 16.0545 0 -7.42488 0.913067 15.1792 0 -6.88633 0.876253 14.1953 0 -6.25467 0.82753 13.0563 0 -5.57906 0.765087 11.8614 0 -4.87132 0.734014 10.6674 0 -4.05776 0.669336 9.27793 0 -1.28365 0.452369 4.37876 0 0.662043 0.332898 1.05666 0 0.863201 0.331106 0.856369 0 0.962105 0.313134 0.898585 0 -16.9944 1.65204 32.1602 0 -16.9944 1.65204 32.1602 0 -16.9944 1.65204 32.1602 0 -16.7727 1.63656 31.77 0 -16.3202 1.60295 30.9707 0 -15.8147 1.56446 30.0797 0 -15.4896 1.53971 29.5069 0 -15.0941 1.50959 28.8098 0 -14.238 1.44588 27.3015 0 -13.5116 1.39095 26.021 0 -13.0223 1.35449 25.1593 0 -12.565 1.32047 24.3537 0 -11.9536 1.27536 23.2767 0 -11.4302 1.23661 22.3551 0 -10.9581 1.20161 21.5239 0 -10.4671 1.16521 20.6576 0 -10.1072 1.13837 20.0213 0 -9.68495 1.10669 19.2776 0 -9.33966 1.08084 18.6535 0 -8.86746 1.04503 17.8073 0 -8.43739 1.01076 17.0199 0 -7.97553 0.983881 16.188 0 -7.49878 0.935548 15.3144 0 -6.95966 0.901239 14.33 0 -6.32784 0.853308 13.1908 0 -5.65004 0.798823 11.997 0 -4.94829 0.744922 10.7988 0 -4.12908 0.708043 9.41631 0 -1.35471 0.485258 4.52699 0 0.638087 0.355396 1.09916 0 0.859177 0.341102 0.853792 0 0.94441 0.323888 0.889447 0 -17.0451 1.67454 32.251 0 -17.0451 1.67454 32.251 0 -17.0451 1.67454 32.251 0 -16.827 1.65722 31.8683 0 -16.3762 1.6226 31.0722 0 -15.8707 1.58411 30.1812 0 -15.5457 1.55939 29.6086 0 -15.1504 1.52949 28.9128 0 -14.2951 1.4648 27.4054 0 -13.5685 1.41039 26.1255 0 -13.079 1.37424 25.2636 0 -12.6215 1.34055 24.4578 0 -12.0101 1.29533 23.3806 0 -11.4867 1.25653 22.4589 0 -11.0148 1.22131 21.6279 0 -10.5239 1.18453 20.7623 0 -10.1643 1.15759 20.1251 0 -9.74188 1.1259 19.3822 0 -9.39658 1.10005 18.7581 0 -8.92435 1.06467 17.911 0 -8.49374 1.0314 17.1252 0 -8.03352 0.99905 16.2898 0 -7.55292 0.963837 15.4203 0 -7.01739 0.916296 14.4332 0 -6.38416 0.873904 13.2946 0 -5.70529 0.822097 12.1002 0 -5.00594 0.759648 10.9009 0 -4.18789 0.719061 9.51951 0 -1.42046 0.511924 4.64846 0 0.618608 0.373848 1.13645 0 0.859879 0.348751 0.853741 0 0.931163 0.332006 0.882637 0 -17.0965 1.69922 32.3316 0 -17.0965 1.69922 32.3316 0 -17.0965 1.69922 32.3316 0 -16.8786 1.68167 31.9492 0 -16.4332 1.64559 31.1672 0 -15.9362 1.60564 30.2997 0 -15.6113 1.58105 29.728 0 -15.216 1.55113 29.0322 0 -14.3604 1.48684 27.5248 0 -13.6332 1.43327 26.2447 0 -13.1435 1.3972 25.3827 0 -12.686 1.36333 24.5766 0 -12.0748 1.3177 23.4993 0 -11.5516 1.2785 22.5777 0 -11.0798 1.24312 21.7467 0 -10.5888 1.20629 20.8816 0 -10.2291 1.17939 20.2436 0 -9.80638 1.14794 19.5009 0 -9.46093 1.12223 18.8766 0 -8.98859 1.08706 18.0283 0 -8.5574 1.05495 17.2444 0 -8.09843 1.01876 16.4054 0 -7.61621 0.988236 15.539 0 -7.08118 0.938684 14.5506 0 -6.4475 0.896819 13.4108 0 -5.7687 0.844633 12.2164 0 -5.06757 0.78937 11.0189 0 -4.25422 0.728644 9.63439 0 -1.48413 0.532942 4.75979 0 0.616529 0.392117 1.14416 0 0.86067 0.35715 0.853705 0 0.916458 0.340925 0.875609 0 -17.1389 1.71699 32.3975 0 -17.1389 1.71699 32.3975 0 -17.1389 1.71699 32.3975 0 -16.9211 1.69935 32.015 0 -16.4755 1.66368 31.2335 0 -15.979 1.6242 30.3683 0 -15.6598 1.59879 29.8125 0 -15.2683 1.56841 29.1275 0 -14.4121 1.50514 27.6203 0 -13.685 1.45157 26.3402 0 -13.1954 1.41523 25.4781 0 -12.7382 1.38097 24.6722 0 -12.1271 1.33518 23.595 0 -11.6039 1.29596 22.6734 0 -11.1321 1.26062 21.8423 0 -10.6408 1.22409 20.9771 0 -10.281 1.19735 20.3394 0 -9.8583 1.16593 19.5959 0 -9.51277 1.14022 18.9723 0 -9.04051 1.10506 18.1231 0 -8.60916 1.07293 17.3406 0 -8.15011 1.03794 16.4995 0 -7.66909 1.00198 15.6339 0 -7.13064 0.964175 14.6466 0 -6.50033 0.910358 13.5044 0 -5.82041 0.86296 12.3111 0 -5.11827 0.810623 11.1142 0 -4.30709 0.740814 9.72819 0 -1.53375 0.539852 4.84977 0 0.627098 0.401671 1.12642 0 0.86129 0.363857 0.85364 0 0.923193 0.35584 0.876699 0 -17.1973 1.73912 32.4933 0 -17.1973 1.73912 32.4933 0 -17.1973 1.73912 32.4933 0 -16.9777 1.72217 32.1068 0 -16.5297 1.68752 31.3199 0 -16.0329 1.64829 30.4543 0 -15.7135 1.62304 29.8983 0 -15.3247 1.59281 29.2218 0 -14.4782 1.52818 27.7422 0 -13.7514 1.47386 26.4621 0 -13.262 1.43716 25.5999 0 -12.8047 1.40287 24.7938 0 -12.1934 1.3571 23.7163 0 -11.6699 1.31814 22.7943 0 -11.1977 1.283 21.9629 0 -10.7064 1.24645 21.0975 0 -10.3465 1.2197 20.4603 0 -9.92376 1.18821 19.7157 0 -9.57811 1.16242 19.0927 0 -9.10589 1.12718 18.2424 0 -8.6743 1.09485 17.4615 0 -8.21498 1.06066 16.6166 0 -7.73409 1.02316 15.7501 0 -7.19462 0.988001 14.766 0 -6.56584 0.929156 13.6221 0 -5.88426 0.886373 12.4291 0 -5.18185 0.834018 11.2318 0 -4.3764 0.764728 9.85936 0 -1.60139 0.541133 4.96871 0 0.635252 0.407561 1.09463 0 0.862038 0.371569 0.853309 0 0.93434 0.368257 0.879907 0 -17.2509 1.75943 32.5858 0 -17.2509 1.75943 32.5858 0 -17.2509 1.75943 32.5858 0 -17.0312 1.74263 32.1994 0 -16.5821 1.7083 31.4093 0 -16.0808 1.66997 30.5316 0 -15.7612 1.64521 29.9756 0 -15.3725 1.61489 29.2993 0 -14.5306 1.54916 27.8312 0 -13.8116 1.49365 26.5723 0 -13.3223 1.45704 25.7103 0 -12.8649 1.42306 24.9042 0 -12.2536 1.37762 23.8269 0 -11.7302 1.33871 22.9051 0 -11.2582 1.30364 22.074 0 -10.7671 1.26708 21.2089 0 -10.4072 1.2403 20.5725 0 -9.98472 1.20885 19.8271 0 -9.6391 1.18303 19.205 0 -9.16696 1.14777 18.3533 0 -8.73499 1.11559 17.5737 0 -8.27576 1.08151 16.729 0 -7.79501 1.0455 15.8604 0 -7.25716 1.0041 14.8784 0 -6.62466 0.959738 13.7359 0 -5.94662 0.903757 12.541 0 -5.24944 0.852903 11.3562 0 -4.44027 0.789126 9.9798 0 -1.66944 0.547527 5.08849 0 0.646079 0.413088 1.05571 0 0.862335 0.385158 0.850026 0 0.954793 0.413476 0.887561 0 -17.3175 1.78589 32.7007 0 -17.3175 1.78589 32.7007 0 -17.3175 1.78589 32.7007 0 -17.0978 1.7691 32.3143 0 -16.6487 1.73481 31.5246 0 -16.1476 1.69662 30.6476 0 -15.8254 1.67204 30.0841 0 -15.4332 1.64214 29.398 0 -14.59 1.57645 27.9258 0 -13.8746 1.52075 26.6777 0 -13.3929 1.48322 25.837 0 -12.9385 1.44877 25.0393 0 -12.3273 1.40329 23.962 0 -11.804 1.36431 23.0404 0 -11.332 1.32918 22.2092 0 -10.8409 1.29263 21.3442 0 -10.4809 1.26579 20.7084 0 -10.0582 1.23431 19.9609 0 -9.71222 1.20859 19.3392 0 -9.24002 1.1735 18.4861 0 -8.80804 1.14129 17.7074 0 -8.34884 1.10709 16.8644 0 -7.86828 1.07152 15.9925 0 -7.32961 1.03087 15.0133 0 -6.69749 0.987754 13.8714 0 -6.0278 0.923655 12.6891 0 -5.32624 0.877033 11.4969 0 -4.50556 0.820242 10.1006 0 -1.74435 0.574044 5.22828 0 0.650988 0.420305 1.0212 0 0.865016 0.412983 0.847429 0 0.962225 0.441634 0.892446 0 -17.4087 1.80806 32.8842 0 -17.4087 1.80806 32.8842 0 -17.4087 1.80806 32.8842 0 -17.1837 1.79215 32.4831 0 -16.7235 1.75962 31.6631 0 -16.2142 1.72258 30.7634 0 -15.8918 1.69813 30.1996 0 -15.4995 1.66824 29.5131 0 -14.6501 1.60365 28.0243 0 -13.9331 1.54809 26.7714 0 -13.4513 1.51044 25.9307 0 -13.001 1.47528 25.1441 0 -12.3991 1.42834 24.0927 0 -11.8766 1.38922 23.1736 0 -11.4045 1.35412 22.3423 0 -10.913 1.31763 21.4762 0 -10.5526 1.29081 20.8403 0 -10.1299 1.25935 20.0914 0 -9.7839 1.23352 19.4705 0 -9.3118 1.19838 18.6175 0 -8.87975 1.1664 17.8384 0 -8.41998 1.1325 16.997 0 -7.93948 1.09706 16.1217 0 -7.40317 1.05549 15.1505 0 -6.77442 1.00379 14.0057 0 -6.09704 0.958481 12.8226 0 -5.3919 0.89942 11.613 0 -4.57727 0.845462 10.2331 0 -1.80621 0.648286 5.35222 0 0.635084 0.427496 1.03095 0 0.873096 0.46455 0.851687 0 0.959987 0.449411 0.894042 0 -17.508 1.8321 33.085 0 -17.508 1.8321 33.085 0 -17.508 1.8321 33.085 0 -17.283 1.81624 32.6839 0 -16.8226 1.78403 31.8636 0 -16.3061 1.74813 30.9442 0 -15.9738 1.72506 30.3526 0 -15.5713 1.69669 29.6378 0 -14.722 1.6319 28.1491 0 -14.0007 1.57686 26.8841 0 -13.5152 1.53976 26.0332 0 -13.0648 1.50468 25.2465 0 -12.4627 1.45793 24.1949 0 -11.9473 1.41798 23.2957 0 -11.4826 1.38163 22.4847 0 -10.9916 1.34492 21.62 0 -10.6314 1.31793 20.9851 0 -10.2089 1.28648 20.2355 0 -9.86283 1.26089 19.6149 0 -9.39031 1.22612 18.7627 0 -8.95812 1.19426 17.982 0 -8.50069 1.15889 17.1474 0 -8.02001 1.12126 16.2609 0 -7.47285 1.0817 15.2655 0 -6.8312 1.03864 14.0968 0 -6.16151 0.988849 12.9318 0 -5.47023 0.933789 11.7612 0 -4.65886 0.868854 10.3813 0 -1.88485 0.68258 5.48446 0 0.628543 0.44001 1.0358 0 0.870579 0.478488 0.854276 0 0.954138 0.450891 0.895383 0 -17.5968 1.8644 33.2457 0 -17.5968 1.8644 33.2457 0 -17.5968 1.8644 33.2457 0 -17.3773 1.8477 32.8601 0 -16.9286 1.81354 32.0718 0 -16.4206 1.77629 31.1757 0 -16.0883 1.75313 30.5841 0 -15.6841 1.72491 29.8643 0 -14.8107 1.66369 28.3085 0 -14.0838 1.60965 27.0285 0 -13.5976 1.57293 26.176 0 -13.1432 1.53864 25.3786 0 -12.536 1.49251 24.3128 0 -12.0205 1.45204 23.4124 0 -11.5561 1.41547 22.6018 0 -11.0726 1.3777 21.7579 0 -10.7178 1.35039 21.1391 0 -10.2997 1.31869 20.4034 0 -9.95309 1.29343 19.7802 0 -9.48287 1.25622 18.9313 0 -9.05097 1.22233 18.1446 0 -8.582 1.18994 17.2857 0 -8.08894 1.1586 16.3728 0 -7.53868 1.12122 15.3647 0 -6.90621 1.07374 14.2224 0 -6.23819 1.01985 13.054 0 -5.56333 0.967085 11.933 0 -4.75269 0.896175 10.5512 0 -1.98158 0.699277 5.62375 0 0.643557 0.473949 1.02769 0 0.864611 0.480838 0.854234 0 0.939584 0.454898 0.895616 0 -17.6829 1.89918 33.3935 0 -17.6829 1.89918 33.3935 0 -17.6829 1.89918 33.3935 0 -17.4634 1.88244 33.008 0 -17.0147 1.84821 32.2197 0 -16.5143 1.80981 31.3442 0 -16.1924 1.78512 30.7816 0 -15.8007 1.75514 30.0967 0 -14.9313 1.69359 28.5524 0 -14.1889 1.64212 27.2302 0 -13.6894 1.6072 26.3403 0 -13.2306 1.57307 25.5298 0 -12.6237 1.52659 24.4639 0 -12.1039 1.48698 23.5522 0 -11.6349 1.45206 22.7305 0 -11.1525 1.41325 21.8876 0 -10.8007 1.3843 21.2743 0 -10.3876 1.35027 20.5513 0 -10.0402 1.32492 19.9216 0 -9.56066 1.29282 19.0583 0 -9.12031 1.26378 18.2541 0 -8.65369 1.23023 17.3984 0 -8.17077 1.19444 16.5135 0 -7.62932 1.15447 15.5179 0 -6.99608 1.10695 14.3806 0 -6.32347 1.0551 13.198 0 -5.64828 0.997025 12.0713 0 -4.84666 0.941667 10.731 0 -2.09362 0.71565 5.74423 0 0.672693 0.511287 0.997763 0 0.860006 0.482457 0.852534 0 0.929972 0.464722 0.886554 0 -17.7879 1.93228 33.5917 0 -17.7879 1.93228 33.5917 0 -17.7879 1.93228 33.5917 0 -17.5656 1.91599 33.1984 0 -17.1112 1.88268 32.3942 0 -16.6029 1.84556 31.497 0 -16.2802 1.82106 30.9322 0 -15.8882 1.79123 30.2469 0 -15.0396 1.72656 28.7605 0 -14.3125 1.67225 27.4794 0 -13.8131 1.63705 26.5892 0 -13.3462 1.60454 25.757 0 -12.7238 1.56045 24.6485 0 -12.1998 1.51966 23.7203 0 -11.7348 1.48235 22.906 0 -11.2432 1.4478 22.0441 0 -10.8829 1.42228 21.4121 0 -10.4596 1.3923 20.6693 0 -10.1141 1.36631 20.0426 0 -9.64156 1.33076 19.1913 0 -9.20862 1.29821 18.405 0 -8.74614 1.26384 17.5572 0 -8.26272 1.22786 16.6756 0 -7.72872 1.18717 15.6959 0 -7.10277 1.13887 14.583 0 -6.41342 1.08956 13.3529 0 -5.72886 1.03369 12.1998 0 -4.94923 0.967493 10.9157 0 -2.19755 0.72897 5.93066 0 0.491819 0.516155 1.30076 0 0.861609 0.491815 0.843273 0 0.915651 0.485461 0.875187 0 -17.9083 1.96829 33.823 0 -17.9083 1.96829 33.823 0 -17.9083 1.96829 33.823 0 -17.6842 1.9522 33.4246 0 -17.2273 1.91915 32.6139 0 -16.7185 1.88202 31.7157 0 -16.3912 1.85812 31.1383 0 -15.993 1.82897 30.4357 0 -15.1357 1.7653 28.925 0 -14.4144 1.71021 27.6607 0 -13.9289 1.67317 26.8099 0 -13.479 1.63661 26.0219 0 -12.8665 1.58873 24.9359 0 -12.3271 1.55437 23.9752 0 -11.8401 1.52355 23.1074 0 -11.34 1.48752 22.2166 0 -10.9788 1.46029 21.5784 0 -10.5597 1.42753 20.843 0 -10.2138 1.40133 20.2172 0 -9.74124 1.36555 19.3624 0 -9.30726 1.3332 18.5766 0 -8.85581 1.29761 17.7585 0 -8.38571 1.25979 16.9155 0 -7.86009 1.21769 15.9592 0 -7.23485 1.16863 14.8472 0 -6.54222 1.11887 13.6074 0 -5.8203 1.07601 12.3636 0 -5.03189 1.01574 11.0593 0 -2.29358 0.765672 6.1296 0 0.36991 0.528484 1.50664 0 0.8731 0.552064 0.852235 0 0.919168 0.554732 0.872146 0 -18.2119 2.05617 34.3995 0 -18.2119 2.05617 34.3995 0 -18.2119 2.05617 34.3995 0 -17.9915 2.03997 34.0109 0 -17.541 2.00656 33.2164 0 -17.0381 1.96906 32.3323 0 -16.7176 1.94313 31.7697 0 -16.3213 1.91246 31.0671 0 -15.4531 1.85292 29.5266 0 -14.714 1.80301 28.2145 0 -14.2233 1.76669 27.3461 0 -13.7661 1.73229 26.5379 0 -13.1552 1.68589 25.4575 0 -12.6317 1.6463 24.5318 0 -12.1612 1.61062 23.7024 0 -11.674 1.57543 22.8495 0 -11.3159 1.55102 22.2235 0 -10.8951 1.52232 21.488 0 -10.5473 1.49909 20.8625 0 -10.0729 1.46733 20.0035 0 -9.6369 1.43913 19.2174 0 -9.17557 1.40423 18.3707 0 -8.69744 1.36728 17.4975 0 -8.16586 1.32548 16.531 0 -7.54118 1.27649 15.4053 0 -6.86384 1.21896 14.1976 0 -6.17865 1.15317 13.0148 0 -5.34326 1.07847 11.5388 0 -2.56607 0.913028 6.65307 0 0.209995 0.671865 1.86307 0 0.874801 0.628988 0.866059 0 0.908498 0.621113 0.877193 0 -18.6656 2.19984 35.2406 0 -18.6656 2.19984 35.2406 0 -18.6656 2.19984 35.2406 0 -18.4425 2.18499 34.8465 0 -17.9864 2.15463 34.0406 0 -17.4734 2.12219 33.1351 0 -17.143 2.10124 32.5522 0 -16.7436 2.07246 31.8451 0 -15.8855 2.00402 30.3215 0 -15.1666 1.94517 29.0559 0 -14.6843 1.90323 28.2051 0 -14.2349 1.86285 27.4116 0 -13.6349 1.80886 26.3536 0 -13.118 1.76564 25.4433 0 -12.6432 1.73604 24.6115 0 -12.1566 1.69228 23.7446 0 -11.7997 1.66021 23.109 0 -11.376 1.6236 22.3505 0 -11.0329 1.59413 21.7293 0 -10.5657 1.55376 20.8821 0 -10.1353 1.51777 20.0936 0 -9.67616 1.48086 19.2497 0 -9.19597 1.4427 18.3697 0 -8.65769 1.40016 17.378 0 -8.01879 1.36457 16.2321 0 -7.32073 1.34793 15.0447 0 -6.61394 1.31427 13.8521 0 -5.78671 1.2488 12.4241 0 -3.02493 1.02359 7.48054 0 -0.208264 0.823839 2.59044 0 0.878411 0.771187 0.86773 0 0.90442 0.762288 0.870239 0 -18.9941 2.29259 35.8054 0 -18.9941 2.29259 35.8054 0 -18.9941 2.29259 35.8054 0 -18.7772 2.2731 35.4224 0 -18.3298 2.23885 34.6368 0 -17.8267 2.20715 33.7626 0 -17.5033 2.18675 33.2014 0 -17.1075 2.16511 32.5178 0 -16.2508 2.1158 31.031 0 -15.5195 2.06074 29.7327 0 -15.0295 2.01807 28.8552 0 -14.5716 1.97822 28.0351 0 -13.9592 1.92484 26.9372 0 -13.4337 1.87922 25.9944 0 -12.9597 1.83807 25.144 0 -12.4606 1.80758 24.2646 0 -12.0926 1.79038 23.6241 0 -11.6695 1.76292 22.8878 0 -11.3213 1.73997 22.2668 0 -10.8487 1.70731 21.4204 0 -10.4197 1.67425 20.646 0 -9.97067 1.63739 19.8292 0 -9.50758 1.59592 18.9951 0 -8.98886 1.5497 18.0552 0 -8.36389 1.50187 16.9307 0 -7.66273 1.4663 15.6983 0 -6.91528 1.44043 14.3956 0 -6.11691 1.36335 13.0356 0 -3.3996 1.13464 8.20538 0 -0.516448 0.947541 3.23811 0 0.874885 0.857982 0.864163 1431.51 0.889879 0.849689 0.870691 554.172 -19.2122 2.40923 36.2459 0 -19.2122 2.40923 36.2459 0 -19.2122 2.40923 36.2459 0 -18.9862 2.39548 35.8455 0 -18.5265 2.3642 35.0289 0 -18.0134 2.32509 34.1128 0 -17.6831 2.29711 33.5175 0 -17.2919 2.26186 32.8234 0 -16.4483 2.18547 31.328 0 -15.7318 2.12036 30.0569 0 -15.25 2.07648 29.2031 0 -14.7991 2.04009 28.4126 0 -14.1939 1.99924 27.3658 0 -13.6753 1.96444 26.4692 0 -13.1958 1.94395 25.6408 0 -12.706 1.90921 24.7809 0 -12.355 1.87752 24.1633 0 -11.936 1.84543 23.427 0 -11.5855 1.82425 22.8008 0 -11.1105 1.79283 21.9473 0 -10.6769 1.76135 21.1633 0 -10.2098 1.73077 20.3078 0 -9.72167 1.69862 19.4185 0 -9.16677 1.66452 18.3978 0 -8.54526 1.60827 17.2622 0 -7.8827 1.54586 16.0893 0 -7.18981 1.48276 14.8891 0 -6.35879 1.42676 13.4702 0 -3.58293 1.23961 8.54849 0 -0.752256 1.02056 3.63392 0 0.87845 0.881648 0.86545 554.204 0.888966 0.894897 0.869075 715.376 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977241 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977241 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911257 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947321 0.0937069 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939604 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.103108 0.100348 0.100815 0 0.112024 0.0992947 0.0989183 0 0.124309 0.099395 0.0983103 0 0.143447 0.0977242 0.096852 0 0.156834 0.0962994 0.0983838 0 0.171881 0.0961285 0.100248 0 0.198717 0.0994046 0.0961407 0 0.225948 0.103992 0.0916527 0 0.24274 0.105818 0.0904319 0 0.258478 0.104636 0.0900048 0 0.292925 0.0981208 0.0975422 0 0.314234 0.0963951 0.0984234 0 0.329237 0.0971156 0.0966318 0 0.344643 0.098299 0.0947205 0 0.356146 0.0985571 0.0928293 0 0.370779 0.0982689 0.0911256 0 0.384122 0.0978275 0.0903787 0 0.405959 0.0973717 0.0922149 0 0.422732 0.0982456 0.0931888 0 0.447917 0.0961112 0.094164 0 0.46283 0.0979555 0.0939595 0 0.474 0.102481 0.0934319 0 0.504016 0.102852 0.0942863 0 0.537858 0.100419 0.0944431 0 0.558151 0.10163 0.0932197 0 0.601666 0.0947322 0.093707 0 0.70134 0.0920606 0.0991001 0 0.811399 0.0968621 0.0939605 0 0.864648 0.0931458 0.0864742 0 0.877071 0.0949265 0.0695519 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 0 0.1016 0.106895 0.100922 0 0.11121 0.105589 0.0990744 0 0.124489 0.105234 0.0981091 0 0.14285 0.10424 0.0969901 0 0.156873 0.104849 0.0977054 0 0.172591 0.105764 0.0995333 0 0.200586 0.110308 0.0972666 0 0.22703 0.113814 0.092632 0 0.242711 0.11288 0.0906824 0 0.256924 0.111623 0.0894573 0 0.2906 0.105517 0.096397 0 0.314418 0.104635 0.0987714 0 0.329628 0.105126 0.0970934 0 0.344979 0.105535 0.0951455 0 0.356248 0.106105 0.0930922 0 0.370591 0.106312 0.0910463 0 0.383753 0.105931 0.0901219 0 0.405869 0.105398 0.0920197 0 0.423186 0.106096 0.0931316 0 0.446707 0.104519 0.0939249 0 0.464308 0.106078 0.0941193 0 0.475953 0.111412 0.0938088 0 0.502583 0.112999 0.0944078 0 0.539177 0.107704 0.0947286 0 0.55734 0.108891 0.0935049 0 0.600319 0.101628 0.0942467 0 0.700562 0.0979163 0.099486 0 0.795915 0.113711 0.0832809 0 0.865822 0.10228 0.0868203 0 0.878062 0.102212 0.0709787 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.0987037 0.120446 0.100897 0 0.108522 0.119627 0.09915 0 0.12619 0.12054 0.0976438 0 0.144819 0.125006 0.0976981 0 0.159277 0.127251 0.0974273 0 0.175061 0.129844 0.0986945 0 0.2014 0.1303 0.0977466 0 0.225375 0.127091 0.0938513 0 0.242283 0.125972 0.0913866 0 0.255695 0.125054 0.0899477 0 0.288169 0.122361 0.0948259 0 0.31427 0.120053 0.0990754 0 0.330137 0.120595 0.0975185 0 0.3461 0.121594 0.0956857 0 0.356774 0.12227 0.0936165 0 0.370853 0.122568 0.0914054 0 0.383359 0.122659 0.0898949 0 0.405651 0.122365 0.0916249 0 0.42453 0.123494 0.0934267 0 0.445279 0.123785 0.0943483 0 0.467331 0.122799 0.0952489 0 0.47912 0.126927 0.095391 0 0.500791 0.127006 0.0955408 0 0.54063 0.120295 0.0960233 0 0.555484 0.121926 0.0944484 0 0.595948 0.116539 0.0950904 0 0.698604 0.120355 0.0967409 0 0.771118 0.138753 0.0681622 0 0.866145 0.119529 0.0855344 0 0.87886 0.119323 0.069961 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.0994721 0.144656 0.10048 0 0.109384 0.14584 0.0997291 0 0.129898 0.147533 0.0974849 0 0.147524 0.150328 0.0987069 0 0.161533 0.15078 0.0983779 0 0.174942 0.149377 0.0981566 0 0.197074 0.146152 0.0954093 0 0.222031 0.141394 0.0940509 0 0.242096 0.13932 0.0930018 0 0.256364 0.141815 0.0905952 0 0.286539 0.14246 0.0931772 0 0.312766 0.14082 0.0970466 0 0.0928641 0.0928641 0.0928641 1 1 1 1 8560912601927365585 4785877010151409887" +analysisType "Auto-analyze Per Frame" +sourceRefFrames {{curve x1069 1069}} +targetRefFrames {{curve x1069 1069}} +slope {0.1846578121 0.2853971422 0.2381676137} +offset {-0.1349507719 -0.2470083982 -0.2368390113} +power {2.06201911 1.108166099 1.243426681} +saturation 0.9411833882 +cdlError {0.23354581 0.3947029412 0.2723744214} +lutExists true +cdlExists true +userMessage "" +isLog true +boxWidth 2048 +boxHeight 1317 +scale {1.000279903 1.000335097} +translation {-0.1381194293 -0.2429918349} +name MatchGrade2 +xpos -861 +ypos 313 +} +push $N956847a0 +Dot { +name Dot3 +xpos -937 +ypos 251 +} +Copy { +inputs 2 +from0 rgba.blue +to0 rgba.blue +name Copy1 +xpos -971 +ypos 313 +} +Multiply { +channels {-rgba.red -rgba.green rgba.blue none} +name Multiply2 +xpos -971 +ypos 349 +} +Dot { +name Dot5 +xpos -937 +ypos 447 +} +push $N95684e80 +Dot { +name Dot21 +xpos -452 +ypos 246 +} +set N95941c90 [stack 0] +Dot { +name Dot23 +xpos -342 +ypos 246 +} +Shuffle { +red green +blue green +alpha green +name Shuffle12 +xpos -376 +ypos 314 +} +push $N95941c90 +Shuffle { +green red +blue red +alpha red +name Shuffle11 +xpos -486 +ypos 284 +} +MatchGrade { +inputs 2 +serializeKnob "0 0 0 0 0 0 1 1 1 0 18446744073709551615 18446744073709551615" +analysisType "Auto-analyze Per Frame" +userMessage "" +isLog true +boxWidth 2048 +boxHeight 1317 +scale {1.000279903 1.000335097} +translation {-0.1381194293 -0.2429918349} +name MatchGrade1 +xpos -486 +ypos 308 +} +push $N95941c90 +Dot { +name Dot22 +xpos -562 +ypos 246 +} +Copy { +inputs 2 +from0 rgba.green +to0 rgba.green +name Copy11 +xpos -596 +ypos 308 +} +Multiply { +channels {-rgba.red rgba.green -rgba.blue none} +name Multiply1 +xpos -596 +ypos 344 +} +Dot { +name Dot24 +xpos -562 +ypos 380 +} +push $N956851f0 +ChannelMerge { +inputs 2 +A rgba.green +operation min +B rgba.green +output rgba.green +name ChannelMerge7 +xpos -280 +ypos 365 +} +ChannelMerge { +inputs 2 +A rgba.blue +operation min +B rgba.blue +output rgba.blue +name ChannelMerge1 +xpos -280 +ypos 432 +} +Output { +name Output1 +xpos -280 +ypos 532 +} +end_group diff --git a/gizmos/Keyer/a_IDKeyer.gizmo b/gizmos/Keyer/a_IDKeyer.gizmo new file mode 100644 index 0000000..06de800 --- /dev/null +++ b/gizmos/Keyer/a_IDKeyer.gizmo @@ -0,0 +1,62 @@ +#! C:/Program Files/Nuke6.1/Nuke6.1.exe -nx +version 6.1 v3 +Gizmo { + label "v 1.0\n\[value size]\n" + note_font "Comic Sans MS Bold Bold" + addUserKnob {20 J_IDKeyer_L l J_IDKeyer} + addUserKnob {41 pick_color l pick_ID_color T ID_expression.pick_color} + addUserKnob {26 line l "" +STARTLINE} + addUserKnob {20 Erode n 1} + addUserKnob {41 channels T ID_Erode_blur.channels} + addUserKnob {41 size T ID_Erode_blur.size} + addUserKnob {41 blur T ID_Erode_blur.blur} + addUserKnob {41 quality T ID_Erode_blur.quality} + addUserKnob {6 invert l invert_ID +STARTLINE} + addUserKnob {41 mix T ID_Erode_blur.mix} + addUserKnob {20 endGroup n -1} +} + Input { + inputs 0 + name Input1 + xpos -240 + ypos -94 + } + Expression { + temp_name0 rr + temp_expr0 pick_color.r + temp_name1 gg + temp_expr1 pick_color.g + temp_name2 bb + temp_expr2 pick_color.b + expr0 floor(r*255)==floor(rr*255)&&floor(g*255)==floor(gg*255)&&floor(b*255)==floor(bb*255) + expr1 floor(r*255)==floor(rr*255)&&floor(g*255)==floor(gg*255)&&floor(b*255)==floor(bb*255) + expr2 floor(r*255)==floor(rr*255)&&floor(g*255)==floor(gg*255)&&floor(b*255)==floor(bb*255) + expr3 floor(r*255)==floor(rr*255)&&floor(g*255)==floor(gg*255)&&floor(b*255)==floor(bb*255) + name ID_expression + tile_color 0x380000ff + gl_color 0x930091ff + xpos -240 + ypos 12 + addUserKnob {20 Pick_InPut_color} + addUserKnob {18 pick_color l pick_ID_color} + pick_color {0 0 0} + } + Erode { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + quality 30 + name ID_Erode_blur + xpos 30 + ypos 12 + } + Invert { + name ID_Invert + xpos 30 + ypos 59 + disable {{1-parent.invert}} + } + Output { + name Output1 + xpos 30 + ypos 120 + } +end_group diff --git a/gizmos/Keyer/alpha_edge.gizmo b/gizmos/Keyer/alpha_edge.gizmo new file mode 100644 index 0000000..6454755 --- /dev/null +++ b/gizmos/Keyer/alpha_edge.gizmo @@ -0,0 +1,81 @@ +#! C:/Program Files/Nuke8.0v4/nuke-8.0.v4.dll -nx +version 8.0 v4 +Gizmo { + note_font Verdana + mapsize {0.15 0.15} + addUserKnob {20 settings} + addUserKnob {7 InnerBlur l "Inner Blur" R 0 50} + addUserKnob {7 InnerWhitePoint l "Inner Gain"} + addUserKnob {26 ""} + addUserKnob {7 OuterBlur l "Outer Blur" R 0 50} + addUserKnob {7 OuterWhitePoint l "Outer Gain"} + addUserKnob {26 ""} + addUserKnob {7 OverallBlur l "Overall Blur" R 0 50} + addUserKnob {7 OverallWhitePoint l "Overall Gain"} +} + Input { + inputs 0 + name Input1 + xpos -251 + ypos 542 + } +set N254cf940 [stack 0] + Blur { + channels alpha + size {{parent.OuterBlur i}} + name BlurOuter + xpos -302 + ypos 600 + } + Grade { + channels alpha + whitepoint {1 1 1 {1-(parent.OuterWhitePoint*.99) i}} + white_clamp true + name GradeOut + xpos -302 + ypos 639 + } +push $N254cf940 + Blur { + channels alpha + size {{parent.InnerBlur i}} + name BlurInner + xpos -199 + ypos 597 + } + Grade { + channels alpha + blackpoint {0 0 0 {parent.InnerWhitePoint*0.99 i}} + white_clamp true + name Grade3In + xpos -199 + ypos 636 + } + Merge2 { + inputs 2 + operation out + name Out2 + xpos -245 + ypos 687 + } + Blur { + channels alpha + size {{parent.OverallBlur i}} + name BlurAll + xpos -245 + ypos 714 + } + Grade { + channels alpha + whitepoint {1 1 1 {1-(parent.OverallWhitePoint*.99) i}} + white_clamp true + name GradeAll + xpos -245 + ypos 753 + } + Output { + name Output1 + xpos -245 + ypos 792 + } +end_group diff --git a/gizmos/Keyer/edgeDespill.gizmo b/gizmos/Keyer/edgeDespill.gizmo new file mode 100644 index 0000000..5f14df8 --- /dev/null +++ b/gizmos/Keyer/edgeDespill.gizmo @@ -0,0 +1,774 @@ +#! /usr/local/Nuke6.1v1/Nuke6.1 -nx +version 6.1 v1 +Gizmo { + inputs 4 + help "KillOutline reduces unwanted outlines from keyed footage.\n\nerode controls: erode the alpha in for the amount of the visible outline.\n\nexpand controls: expand outer pixels of eroded image out again until it reaches the edge of the original alpha.\n\ntransition treatment: if needed, blur the transition between original image and extension." + addUserKnob {20 Settings} + addUserKnob {26 title l "" +STARTLINE T "KillOutline by Andreas Frickinger"} + addUserKnob {26 expectation l "" +STARTLINE T "expects premultiplied input."} + addUserKnob {26 ""} + addUserKnob {20 erodeControls l "erode controls" n 1} + addUserKnob {41 erodeSize l "erode size" t "alpha gets eroded in by this amount." T GizmoControl.erodeSize} + addUserKnob {20 endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 extendControls l "expand controls" n 1} + addUserKnob {41 slices T EdgeExtend2.slices} + addUserKnob {41 slice_width l "slice width" T EdgeExtend2.slice_width} + addUserKnob {41 expandSize l "expand size" t "outer pixels of eroded image gets dilated out by this amount. " T EdgeExtend2.blurResult} + addUserKnob {26 ""} + addUserKnob {20 transitionTreatment l "transition treatment" n 1} + addUserKnob {41 transitionTreatmentSwitch l on/off T GizmoControl.transitionTreatmentSwitch} + addUserKnob {41 edgeSize l "edge size" t "size of transition edge." T GizmoControl.edgeSize} + addUserKnob {41 edgeBlur l "edge blur" t "blur size of transition edge." T GizmoControl.edgeBlur} + addUserKnob {41 size l "image blur" t "blur size of image, masked out by transition edge." T TransitionBlur.size} + addUserKnob {20 endGroup_2 l endGroup n -1} +} + Input { + inputs 0 + name mask + xpos 1466 + ypos 765 + number 1 + } + Invert { + name Invert1 + xpos 1466 + ypos 827 + } + Input { + inputs 0 + name img + xpos 833 + ypos -395 + } + Dot { + name Dot5 + xpos 867 + ypos -311 + } +set Ndacf5f0 [stack 0] + Dot { + name Dot6 + xpos 585 + ypos -311 + } + Input { + inputs 0 + name GB2 + xpos 753 + ypos 519 + number 3 + } + Shuffle { + alpha black + name Shuffle2 + xpos 753 + ypos 547 + } + Merge2 { + inputs 2 + name Merge2 + xpos 551 + ypos 547 + } + Dot { + name Dot7 + xpos 585 + ypos 839 + } + Dot { + name Dot8 + xpos 1057 + ypos 839 + } +push $Ndacf5f0 + Unpremult { + name UnpremultInput + xpos 833 + ypos -254 + } + Dot { + name Dot3 + xpos 867 + ypos -144 + } +set Ndba0e20 [stack 0] + Dot { + name Dot4 + xpos 867 + ypos 434 + } + Dot { + name Dot1 + xpos 1054 + ypos 434 + } +set Ndc5ff30 [stack 0] + Dot { + name Dot2 + xpos 1054 + ypos 672 + } + Expression { + expr3 a==0?0:a + name Expression1 + xpos 1128 + ypos 668 + } +push $Ndba0e20 + Shuffle { + red black + green black + blue black + name AlphaOnly + xpos 1250 + ypos -149 + } + Erode { + size {{GizmoControl.erodeSize i}} + name ErodeShrink + xpos 1250 + ypos 35 + } +set Ndcc6220 [stack 0] + Dot { + name Dot10 + xpos 1657 + ypos 47 + } + EdgeDetectWrapper { + channels alpha + erodesize {{GizmoControl.edgeSize*-1 i}} + name EdgeDetectWrapper1 + xpos 1623 + ypos 239 + } + Blur { + size {{GizmoControl.edgeBlur i}} + name EdgeBlur + xpos 1623 + ypos 294 + } + Dot { + name Dot9 + xpos 1657 + ypos 605 + } +push $Ndcc6220 +push $Ndc5ff30 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy1 + xpos 1250 + ypos 422 + } + Premult { + name Premult2 + xpos 1250 + ypos 479 + } +set Ndc7ee70 [stack 0] +push $Ndc7ee70 + Group { + inputs 2 + name EdgeExtend2 + help "EdgeExtend repeatedly blurs and unpremuliplies the image to extend edges outward while trying to preserve the original source colour" + xpos 1250 + ypos 507 + addUserKnob {20 "" l User} + addUserKnob {4 premult l "input is" M {premultiplied unpremultiplied}} + addUserKnob {3 slices t "How many times the edges are blurred and unpremuliplied.\nThis is the fine control for slightly better quality. The current maximum is 10."} + slices 4 + addUserKnob {3 slice_width l "slice width" t "Blur amount that is applied before unpremultiplying the result per slice.\nThis is the brute force control and should be kept at 1 if possible.\nOnly increase this if the maximum amount of slices (10) doesn't cover the area you need."} + slice_width 1 + addUserKnob {7 blurResult l "blur slices" R 0 10} + blurResult 5.58 + } + Input { + inputs 0 + name img + xpos -590 + ypos -509 + } +set Ndc882d0 [stack 0] + Dot { + name Dot1 + xpos -556 + ypos 978 + } + Input { + inputs 0 + name matte + xpos -358 + ypos -653 + number 1 + } +push $Ndc882d0 + Unpremult { + name Unpremult11 + xpos -468 + ypos -509 + disable {{parent.premult}} + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels alpha + name Copy2 + xpos -354 + ypos -513 + } + Premult { + name Premult1 + xpos -358 + ypos -450 + } + Shuffle { + black alpha + out2 depth + name Shuffle1 + label alpha>depth + xpos -223 + ypos -415 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult1 + xpos -223 + ypos -373 + } +set Nda83770 [stack 0] + Dot { + name Dot2 + xpos -189 + ypos -214 + } +set Nda87610 [stack 0] +push $Nda83770 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width i}} + name Blur1 + xpos -25 + ypos -378 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle3 + label depth>alpha + xpos -25 + ypos -331 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult3 + xpos -25 + ypos -289 + } + Blur { + channels rgba + size {{parent.blurResult i}} + name Blur10 + xpos -25 + ypos -247 + } + set Cda9f4a0 [stack 0] + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge1 + xpos -25 + ypos -219 + } +set Ndaa6e90 [stack 0] + Dot { + name Dot3 + xpos 9 + ypos -73 + } +set Ndab01d0 [stack 0] +push $Ndaa6e90 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur2 + xpos 159 + ypos -219 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle5 + label alpha>depth + xpos 159 + ypos -179 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult2 + xpos 159 + ypos -137 + } + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.blurResult i}} + name Blur3 + xpos 159 + ypos -102 + } + set Cda13670 [stack 0] + Merge2 { + inputs 2 + name Merge2 + xpos 159 + ypos -78 + } +set Nda1b060 [stack 0] + Dot { + name Dot4 + xpos 193 + ypos 103 + } +set Nda243a0 [stack 0] +push $Nda1b060 + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle2 + label depth>alpha + xpos 342 + ypos -24 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult4 + xpos 342 + ypos 16 + } +set Nda30710 [stack 0] +clone $Cda9f4a0 { + xpos 342 + ypos 68 + selected false + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge3 + xpos 342 + ypos 98 + } + Dot { + name Dot5 + xpos 373 + ypos 226 + } +set Nda45210 [stack 0] +push $Nda30710 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur4 + xpos 503 + ypos 23 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle4 + label alpha>depth + xpos 503 + ypos 65 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult5 + xpos 503 + ypos 105 + } +set Nda59110 [stack 0] +clone $Cda13670 { + xpos 503 + ypos 174 + selected false + } + Merge2 { + inputs 2 + name Merge4 + xpos 503 + ypos 221 + } +set Ndba8fb0 [stack 0] + Dot { + name Dot6 + xpos 537 + ypos 321 + } +set Ndbb1fd0 [stack 0] +push $Nda59110 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width}} + name Blur5 + xpos 689 + ypos 105 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle6 + label depth>alpha + xpos 689 + ypos 145 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult6 + xpos 689 + ypos 185 + } +set Ndbc6220 [stack 0] +clone $Cda9f4a0 { + xpos 684 + ypos 272 + selected false + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge5 + xpos 689 + ypos 316 + } + Dot { + name Dot7 + xpos 723 + ypos 448 + } +set Ndbdab70 [stack 0] +push $Ndbc6220 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur6 + xpos 856 + ypos 200 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle7 + label alpha>depth + xpos 856 + ypos 280 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult7 + xpos 856 + ypos 320 + } +set Ndbdd820 [stack 0] +clone $Cda13670 { + xpos 852 + ypos 405 + selected false + } + Merge2 { + inputs 2 + name Merge6 + xpos 852 + ypos 447 + } + Dot { + name Dot8 + xpos 890 + ypos 514 + } +set Ndc037e0 [stack 0] +push $Ndbdd820 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width}} + name Blur7 + xpos 1042 + ypos 320 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle8 + label depth>alpha + xpos 1042 + ypos 393 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult8 + xpos 1042 + ypos 433 + } +set Ndc17750 [stack 0] +clone $Cda9f4a0 { + xpos 1046 + ypos 484 + selected false + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge7 + xpos 1046 + ypos 512 + } + Dot { + name Dot9 + xpos 1076 + ypos 579 + } +set Ndc17440 [stack 0] +push $Ndc17750 + Blur { + channels {rgba.red rgba.green rgba.blue rgba.alpha} + size {{parent.slice_width}} + name Blur8 + xpos 1205 + ypos 440 + } + Shuffle { + in2 depth + black alpha + out2 depth + name Shuffle9 + label alpha>depth + xpos 1205 + ypos 466 + } + Unpremult { + channels {rgba.red rgba.green rgba.blue depth.Z} + name Unpremult9 + xpos 1205 + ypos 506 + } +set Ndc3fe50 [stack 0] +clone $Cda13670 { + xpos 1206 + ypos 551 + selected false + } + Merge2 { + inputs 2 + name Merge8 + xpos 1206 + ypos 574 + } + Dot { + name Dot10 + xpos 1239 + ypos 664 + } +set Ndc549a0 [stack 0] +push $Ndc3fe50 + Blur { + channels {rgba.red rgba.green rgba.blue depth.Z} + size {{parent.slice_width}} + name Blur9 + xpos 1421 + ypos 506 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle11 + label depth>alpha + xpos 1421 + ypos 546 + } + Unpremult { + channels rgba + alpha depth.Z + name Unpremult10 + xpos 1421 + ypos 586 + } +clone $Cda9f4a0 { + xpos 1421 + ypos 638 + selected false + } + Merge2 { + inputs 2 + Achannels {rgba.red rgba.green rgba.blue depth.Z} + name Merge9 + xpos 1421 + ypos 666 + } +push $Ndc549a0 +push $Ndc17440 +push $Ndc037e0 +push $Ndbdab70 +push $Ndbb1fd0 +push $Nda45210 +push $Nda243a0 +push $Ndab01d0 +push $Nda87610 +push $Ndc882d0 + Switch { + inputs 11 + which {{parent.slices i}} + name Switch1 + xpos 689 + ypos 828 + } + Shuffle { + in2 depth + alpha red2 + out2 depth + name Shuffle10 + label depth>alpha + xpos 689 + ypos 866 + } + Remove { + channels depth + name Remove1 + xpos 689 + ypos 908 + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels depth + name Copy1 + xpos 689 + ypos 959 + } + Output { + name Output1 + xpos 689 + ypos 1290 + } + Blur { + inputs 0 + channels {rgba.red rgba.green rgba.blue depth.Z} + size 8.5 + name Blur11 + xpos 299 + ypos -61 + } +push $Ndaa6e90 +push $Ndba8fb0 + Viewer { + inputs 2 + viewerProcess rec709 + input_process false + name Viewer1 + selected true + xpos 85 + ypos -331 + } + end_group + Blur { + inputs 1+1 + size 3 + name TransitionBlur + xpos 1250 + ypos 570 + disable {{(GizmoControl.transitionTreatmentSwitch-1)*-1 i}} + } + Input { + inputs 0 + name BG + xpos 1417 + ypos 613 + number 2 + } + Shuffle { + alpha black + name Shuffle1 + xpos 1417 + ypos 641 + } +set Ndb403b0 [stack 0] + Merge2 { + inputs 2 + name Merge1 + xpos 1250 + ypos 633 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy2 + xpos 1250 + ypos 661 + } + Premult { + name Premult3 + selected true + xpos 1250 + ypos 756 + } + Keymix { + inputs 3 + name Keymix1 + xpos 1250 + ypos 827 + } +set Ndb5e020 [stack 0] + Output { + name Output1 + xpos 1250 + ypos 913 + } + NoOp { + inputs 0 + name GizmoControl + xpos 1425 + ypos 255 + addUserKnob {20 User} + addUserKnob {6 transitionTreatmentSwitch l on/off +STARTLINE} + transitionTreatmentSwitch true + addUserKnob {7 edgeBlur l "edge blur" R 0 100} + edgeBlur 3 + addUserKnob {7 edgeSize l "edge size" R -1 10} + edgeSize 0.32 + addUserKnob {7 erodeSize l "erode size" R 0 10} + erodeSize 0.1 + } + Blur { + inputs 0 + name Blur1 + xpos 1494 + ypos 388 + } +push $Ndb403b0 +push $Ndb5e020 + Viewer { + inputs 2 + viewerProcess rec709 + input_process false + name Viewer1 + xpos 1373 + ypos -135 + } +end_group diff --git a/gizmos/Keyer/hairEasyKey.gizmo b/gizmos/Keyer/hairEasyKey.gizmo new file mode 100644 index 0000000..7d4ece0 --- /dev/null +++ b/gizmos/Keyer/hairEasyKey.gizmo @@ -0,0 +1,203 @@ +#! /usr/local/Nuke6.1v1/Nuke6.1 -nx +version 6.1 v1 +Gizmo { + inputs 3 + addUserKnob {20 User} + addUserKnob {41 saturation T Saturation2.saturation} + addUserKnob {26 ""} + addUserKnob {41 value l Brightness_Low T Brightness_Lows2.value} + addUserKnob {41 value_1 l Mult_Low T Multiply_lows2.value} + addUserKnob {26 ""} + addUserKnob {41 Value l Brightness_High T Brightness_Highs2.value} + addUserKnob {41 value_2 l Mult_High T Multiply_highs2.value} +} + Input { + inputs 0 + name FG + xpos -44 + ypos 431 + } + NoOp { + name Foreground + xpos -44 + ypos 493 + } + Colorspace { + colorspace_out Cineon + name Colorspace1 + xpos -44 + ypos 533 + } +set N1493f550 [stack 0] + Input { + inputs 0 + name clean + xpos -154 + ypos 498 + number 1 + } + Colorspace { + colorspace_out Cineon + name Colorspace2 + xpos -154 + ypos 582 + } + Merge2 { + inputs 2 + operation minus + name Merge3 + xpos -44 + ypos 582 + } + Saturation { + saturation 0 + name Saturation2 + xpos -44 + ypos 610 + } +set N14964f30 [stack 0] + Clamp { + minimum -15 + maximum 0 + MinClampTo -15 + MaxClampTo 0 + name Clamp3 + xpos -95 + ypos 653 + } + Multiply { + value 2.7 + name Brightness_Lows2 + xpos -95 + ypos 710 + } + Multiply { + channels rgb + value 1.04 + name Multiply_lows2 + xpos -95 + ypos 768 + } + Input { + inputs 0 + name BG + xpos 248 + ypos 434 + number 2 + } + NoOp { + name Background + xpos 248 + ypos 474 + } + Colorspace { + colorspace_out Cineon + name Colorspace6 + xpos 248 + ypos 519 + } + Dot { + name Dot5 + xpos 282 + ypos 616 + } +set N14991f70 [stack 0] + Expression { + channel0 {-rgba.red -rgba.green -rgba.blue} + channel1 {-rgba.red -rgba.green -rgba.blue} + channel2 {-rgba.red -rgba.green -rgba.blue} + expr3 (r+g+b)/3 + name Expression_luma1 + xpos 160 + ypos 611 + } + Dot { + name Dot6 + xpos 194 + ypos 732 + } +set N1499c3e0 [stack 0] + Merge2 { + inputs 2 + operation multiply + name Multiply2 + xpos -95 + ypos 818 + } +push $N14964f30 + Clamp { + maximum 15 + MaxClampTo 15 + name Clamp4 + xpos 5 + ypos 653 + } + Multiply { + value 0 + name Brightness_Highs2 + xpos 5 + ypos 710 + } + Multiply { + channels rgb + value {1 1 1 1} + name Multiply_highs2 + xpos 5 + ypos 767 + } +push $N1499c3e0 + Merge2 { + inputs 2 + operation multiply + name Multiply3 + xpos 5 + ypos 818 + } + Merge2 { + inputs 2 + operation plus + name Plus1 + xpos -28 + ypos 872 + } +set N149c56d0 [stack 0] +push $N14991f70 + Merge2 { + inputs 2 + operation plus + name Plus2 + xpos 248 + ypos 872 + } + Colorspace { + colorspace_in Cineon + name Colorspace8 + xpos 248 + ypos 913 + } + NoOp { + name ScreenDiff_Out + xpos 248 + ypos 949 + } + Output { + name Output1 + xpos 248 + ypos 996 + } + Output { + name Output2 + xpos 248 + ypos 1045 + } +push $N1493f550 +push $N149c56d0 + Viewer { + inputs 2 + viewerProcess rec709 + input_process false + name Viewer1 + xpos -154 + ypos 997 + } +end_group diff --git a/gizmos/Lighting/EnvRelight.gizmo b/gizmos/Lighting/EnvRelight.gizmo new file mode 100644 index 0000000..ae9bb3d --- /dev/null +++ b/gizmos/Lighting/EnvRelight.gizmo @@ -0,0 +1,702 @@ +#! ./Contents/MacOS/Nuke6.1v2 -nx +version 6.1 v2 +Gizmo { + inputs 3 + help "This gizmo allows an input latlong or angular (lightprobe) environment map to be remapped to create image based diffuse and specular relighting. To do this requires renders of point positions and normal vectors of a 3D scene, and a Nuke camera. Note that Nuke's own ScanlineRender shader outputs are suitable for relighting using this gizmo.\n\nTo use, select a surface type (diffuse or specular). This will determine whether to remap the image using the normal (diffuse) or the reflection vector (specular). Try it out with the EnvConvolve gizmo on Nukepedia to pre-convolve a latlong environment prior to input. This will allow fully diffuse as well as glossy and specular effects. For a more naturalistic result, the diffuse lighting works well with a bent normal render." + knobChanged "\nk = nuke.thisKnob()\nn=nuke.thisNode()\n\nif k.name() == \"type\":\n if k.value() == \"Diffuse\":\n n\['point'].setEnabled(False)\n n\['camera'].setEnabled(False)\n else:\n n\['point'].setEnabled(True)\n n\['camera'].setEnabled(True)" + addUserKnob {20 EnvRelight} + addUserKnob {6 use_alpha l "use alpha" +STARTLINE} + addUserKnob {4 type l "surface type" t "Determines whether the environment is remapped along the normal for diffuse effects or the reflection vector for specular effects." M {Diffuse Specular "" ""}} + type Specular + addUserKnob {41 normal l "normal vectors" T Shuffle2.in} + addUserKnob {41 point l "point positions" T Shuffle1.in} + addUserKnob {4 camera t "The camera position is used to calculate the specular reflection. Choose either a Nuke 3D camera (cam input) or, if available, derive the camera position from RenderMan OpenEXR metadata (vec input)." M {"nuke camera" "renderman openexr metadata" "" "" ""}} + addUserKnob {26 envmap l "environment map"} + addUserKnob {4 env_format l format t "Set this according to the input environment map format." M {latlong "lightprobe (angular map 360)" "" "" "" ""}} + addUserKnob {13 env_rotate l rotate t "This allows you to orient the environment map independent of the scene."} + addUserKnob {41 filter t "Set this to Impulse if you are using a convolved environment and are getting a seam." T STMap12.filter} +} + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x7171c600 + label "reflection vector" + note_font_size 24 + xpos -349 + ypos -249 + bdwidth 446 + bdheight 788 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x7171c600 + label "orient angular" + note_font_size 24 + xpos 580 + ypos -329 + bdwidth 290 + bdheight 320 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x7171c600 + label "orient latlong,\nremap to angular" + note_font_size 24 + xpos 930 + ypos -547 + bdwidth 422 + bdheight 532 + } + Input { + inputs 0 + name vec + xpos 392 + ypos -538 + } +set N1e618160 [stack 0] + Dot { + name Dot12 + xpos -49 + ypos -200 + } +set N1e61aac0 [stack 0] + Dot { + name Dot1 + xpos -487 + ypos -200 + } + Dot { + name Dot2 + xpos -513 + ypos 1044 + } +set N1e61fe50 [stack 0] +push $N1e61fe50 +push $N1e618160 + Dot { + name Dot3 + xpos 426 + ypos 861 + } +set N1e622870 [stack 0] +push $N1e61aac0 + Shuffle { + in none + out rgb + name Shuffle1 + label "point to rgb" + xpos -316 + ypos -107 + } +push $N1e618160 + Dot { + name Dot4 + xpos -89 + ypos -453 + } +set N1e62d590 [stack 0] +push 0 + Switch { + inputs 2 + which {{parent.camera}} + name Switch3 + xpos -88 + ypos -403 + } + Matrix { + channels none + matrix { + {1 0 0 0} + {0 1 0 0} + {0 0 -1 0} + {0 0 0 1} + } + name Matrix1 + label "working with callback in init.py" + selected true + xpos -88 + ypos -366 + addUserKnob {20 User} + addUserKnob {3 frameHold} + frameHold {{frame i}} + addUserKnob {3 doThis} + doThis {{"\[python exrCam()]" i}} + } + Expression { + temp_name0 R + temp_expr0 Matrix1.matrix.3 + temp_name1 G + temp_expr1 Matrix1.matrix.7 + temp_name2 B + temp_expr2 Matrix1.matrix.11 + expr0 R + expr1 G + expr2 B + name Expression5 + label "Get \"point world\" value \nof camera position" + xpos -88 + ypos -312 + } +push $N1e62d590 + Expression { + temp_name0 R + temp_expr0 Axis2.world_matrix.3 + temp_name1 G + temp_expr1 Axis2.world_matrix.7 + temp_name2 B + temp_expr2 Axis2.world_matrix.11 + expr0 R + expr1 G + expr2 B + name Expression1 + label "Get \"point world\" value \nof camera position" + xpos -232 + ypos -324 + } + Switch { + inputs 2 + which {{camera i}} + name Switch2 + label "select method for getting camera position" + xpos -183 + ypos -59 + } + Merge2 { + inputs 2 + operation minus + Achannels rgb + Bchannels rgb + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask -rgba.alpha + name Merge3 + label "Cam to surface \nlight ray direction" + xpos -316 + ypos 65 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize2 + xpos -316 + ypos 137 + } +set N1e653750 [stack 0] +push $N1e61aac0 + Shuffle { + in none + out rgb + name Shuffle2 + label "normals to rgb" + xpos -49 + ypos -113 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize6 + xpos -49 + ypos -56 + } +set N1e6629c0 [stack 0] + Dot { + name Dot15 + xpos -15 + ypos 233 + } +set N1e669820 [stack 0] +push $N1e653750 + MergeExpression { + inputs 2 + channel0 rgb + expr0 (Ar*Br)+(Ag*Bg)+(Ab*Bb) + channel1 {-rgba.red -rgba.green -rgba.blue} + channel2 {-rgba.red -rgba.green -rgba.blue} + channel3 {none none none -rgba.alpha} + maskChannelMask -rgba.alpha + name DotP1 + label I.N + xpos -316 + ypos 223 + } + Multiply { + channels rgb + value 2 + name Multiply5 + label *2 + xpos -316 + ypos 263 + } + Dot { + name Dot16 + xpos -282 + ypos 379 + } +push $N1e669820 + MergeExpression { + inputs 2 + expr0 Ar*Br + expr1 Ag*Bg + expr2 Ab*Bb + name MergeExpression5 + label *N + xpos -49 + ypos 368 + } + Merge2 { + inputs 2 + operation minus + name Merge6 + xpos -49 + ypos 431 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize3 + xpos -49 + ypos 482 + } +push $N1e6629c0 + Switch { + inputs 2 + which {{type i}} + name Switch4 + label "surface type" + xpos 220 + ypos 475 + } + Expression { + temp_name0 length + temp_expr0 sqrt((r*r)+(g*g)+(b*b)) + expr0 r/length + expr1 g/length + expr2 b/length + name Normalize1 + xpos 220 + ypos 673 + } + Expression { + temp_name0 radius + temp_expr0 ".5/pi*acos(b)/sqrt(r*r + g*g)" + expr0 "0.5 + (r*radius)" + expr1 "0.5 + (g*radius)" + expr2 0 + name AngularMapProjection + xpos 220 + ypos 699 + } + Input { + inputs 0 + name map + xpos 591 + ypos -532 + number 1 + } +set N1e6a2ea0 [stack 0] + Mirror { + Horizontal true + name Mirror1 + xpos 972 + ypos -459 + } + Reformat { + type "to box" + box_width {{width i}} + box_height {{width i}} + box_fixed true + resize distort + name Reformat2 + label width*width + xpos 972 + ypos -433 + } +set N1e6a96c0 [stack 0] + Expression { + expr0 (pi+atan(cx,cy))/(2*pi) + expr1 sqrt((cx**2)+(cy**2)) + expr2 0 + name st2polar2 + xpos 669 + ypos -221 + } +set N1e6b14a0 [stack 0] +push $N1e6b14a0 +push $N1e6a96c0 + Reformat { + type scale + scale {2 1} + name Reformat3 + label 2*width + xpos 972 + ypos -387 + } + Expression { + expr0 cos(2*PI*x/size.w+PI/2)*sin(PI*(y/size.h)) + expr1 cos(PI*(1-y/size.h)) + expr2 cos(2*PI*x/size.w)*sin(PI*(y/size.h)) + name Expression2 + label "latlong unit sphere" + xpos 972 + ypos -347 + postage_stamp true + addUserKnob {20 User} + addUserKnob {14 size R 0 100} + size {{!proxy?input.width:(input.width/proxy_scale) i} {!proxy?input.height:(input.height/proxy_scale) i}} + } + Group { + name RotationMatrix6 + help "Use this for rotating xyz vector data such as P and N." + label identity + xpos 972 + ypos -257 + addUserKnob {20 RotationMatrix} + addUserKnob {13 rot l rotation t "Link to say axis' or camera's rotate.\nYaw = y axis.\nPitch = x axis.\nRoll = z axis."} + rot {-90 -90 90} + } + Input { + inputs 0 + name Input + xpos -304 + ypos -17 + } + ColorMatrix { + matrix { + {{cos(radians(yrot)) i} 0 {-sin(radians(yrot)) i}} + {0 1 0} + {{sin(radians(yrot)) i} 0 {cos(radians(yrot)) i}} + } + name ColorMatrix14 + label "yrot (yaw)" + xpos -304 + ypos 89 + addUserKnob {20 "" l User} + addUserKnob {7 yrot l "y rotation" R -90 90} + yrot {{parent.rot.y i}} + } + ColorMatrix { + matrix { + {1 0 0} + {0 {cos(radians(xrot)) i} {sin(radians(xrot)) i}} + {0 {-sin(radians(xrot)) i} {cos(radians(xrot)) i}} + } + name ColorMatrix15 + label "xrot (pitch)\n" + xpos -304 + ypos 127 + addUserKnob {20 "" l User} + addUserKnob {7 xrot l "x rotation" R -90 90} + xrot {{parent.rot.x i}} + } + ColorMatrix { + matrix { + {{cos(radians(zrot)) i} {sin(radians(zrot)) i} 0} + {{-sin(radians(zrot)) i} {cos(radians(zrot)) i} 0} + {0 0 1} + } + name ColorMatrix13 + label "zrot (roll)" + xpos -304 + ypos 165 + addUserKnob {20 "" l User} + addUserKnob {7 zrot l "z rotation" R -90 90} + zrot {{parent.rot.z i}} + } + Output { + name Output1 + xpos -304 + ypos 280 + } + end_group + Group { + name RotationMatrix2 + help "Use this for rotating xyz vector data such as P and N." + label "manual env rotate" + xpos 972 + ypos -219 + addUserKnob {20 RotationMatrix} + addUserKnob {13 rot l rotation t "Link to say axis' or camera's rotate.\nYaw = y axis.\nPitch = x axis.\nRoll = z axis."} + rot {{env_rotate i} {env_rotate i} {env_rotate i}} + } + Input { + inputs 0 + name Input + xpos -304 + ypos -17 + } + ColorMatrix { + matrix { + {{cos(radians(yrot)) i} 0 {-sin(radians(yrot)) i}} + {0 1 0} + {{sin(radians(yrot)) i} 0 {cos(radians(yrot)) i}} + } + name ColorMatrix14 + label "yrot (yaw)" + xpos -304 + ypos 89 + addUserKnob {20 "" l User} + addUserKnob {7 yrot l "y rotation" R -90 90} + yrot {{parent.rot.y i}} + } + ColorMatrix { + matrix { + {1 0 0} + {0 {cos(radians(xrot)) i} {sin(radians(xrot)) i}} + {0 {-sin(radians(xrot)) i} {cos(radians(xrot)) i}} + } + name ColorMatrix15 + label "xrot (pitch)\n" + xpos -304 + ypos 127 + addUserKnob {20 "" l User} + addUserKnob {7 xrot l "x rotation" R -90 90} + xrot {{parent.rot.x i}} + } + ColorMatrix { + matrix { + {{cos(radians(zrot)) i} {sin(radians(zrot)) i} 0} + {{-sin(radians(zrot)) i} {cos(radians(zrot)) i} 0} + {0 0 1} + } + name ColorMatrix13 + label "zrot (roll)" + xpos -304 + ypos 165 + addUserKnob {20 "" l User} + addUserKnob {7 zrot l "z rotation" R -90 90} + zrot {{parent.rot.z i}} + } + Output { + name Output1 + xpos -304 + ypos 280 + } + end_group +set N1e6e4840 [stack 0] + Group { + name RotationMatrix1 + help "Use this for rotating xyz vector data such as P and N." + label "match latlong orientation" + xpos 773 + ypos -219 + addUserKnob {20 RotationMatrix} + addUserKnob {13 rot l rotation t "Link to say axis' or camera's rotate.\nYaw = y axis.\nPitch = x axis.\nRoll = z axis."} + rot {0 90 0} + } + Input { + inputs 0 + name Input + xpos -304 + ypos -17 + } + ColorMatrix { + matrix { + {{cos(radians(yrot)) i} 0 {-sin(radians(yrot)) i}} + {0 1 0} + {{sin(radians(yrot)) i} 0 {cos(radians(yrot)) i}} + } + name ColorMatrix14 + label "yrot (yaw)" + xpos -304 + ypos 89 + addUserKnob {20 "" l User} + addUserKnob {7 yrot l "y rotation" R -90 90} + yrot {{parent.rot.y i}} + } + ColorMatrix { + matrix { + {1 0 0} + {0 {cos(radians(xrot)) i} {sin(radians(xrot)) i}} + {0 {-sin(radians(xrot)) i} {cos(radians(xrot)) i}} + } + name ColorMatrix15 + label "xrot (pitch)\n" + xpos -304 + ypos 127 + addUserKnob {20 "" l User} + addUserKnob {7 xrot l "x rotation" R -90 90} + xrot {{parent.rot.x i}} + } + ColorMatrix { + matrix { + {{cos(radians(zrot)) i} {sin(radians(zrot)) i} 0} + {{-sin(radians(zrot)) i} {cos(radians(zrot)) i} 0} + {0 0 1} + } + name ColorMatrix13 + label "zrot (roll)" + xpos -304 + ypos 165 + addUserKnob {20 "" l User} + addUserKnob {7 zrot l "z rotation" R -90 90} + zrot {{parent.rot.z i}} + } + Output { + name Output1 + xpos -304 + ypos 280 + } + end_group + STMap { + inputs 2 + channels rgb + uv rgb + name STMap1 + xpos 730 + ypos -174 + } + CopyBBox { + inputs 2 + name CopyBBox1 + xpos 669 + ypos -135 + } + Expression { + temp_name0 radius + temp_expr0 ".5/pi*acos(b)/sqrt(r*r + g*g)" + expr0 "0.5 + (r*radius)" + expr1 "0.5 + (g*radius)" + expr2 0 + name AngularMapProjection1 + xpos 669 + ypos -109 + } +push $N1e6a2ea0 + STMap { + inputs 2 + channels rgb + uv rgb + name STMap2 + xpos 591 + ypos -58 + } +push $N1e6a96c0 + Dot { + name Dot6 + xpos 1156 + ypos -422 + } +set N1ff32c60 [stack 0] + Expression { + expr0 (pi+atan(cx,cy))/(2*pi) + expr1 sqrt((cx**2)+(cy**2)) + expr2 0 + name st2polar1 + xpos 1237 + ypos -164 + } +set N1ff3add0 [stack 0] +push $N1ff3add0 +push $N1e6e4840 + Expression { + temp_name0 u + temp_expr0 0.5*(1+atan(b,r)/pi) + temp_name1 v + temp_expr1 acos(-g)/pi + expr0 u + expr1 v + expr2 0 + channel3 {none none none -rgba.alpha} + name SphericalProjection5 + label "Convert normals \nto latlong UV coords" + xpos 972 + ypos -179 + } +push $N1ff32c60 + STMap { + inputs 2 + channels rgb + uv rgb + name STMap13 + xpos 1122 + ypos -165 + } + STMap { + inputs 2 + channels rgb + uv rgb + name STMap12 + label "latlong to angular" + xpos 1122 + ypos -108 + } + CopyBBox { + inputs 2 + name CopyBBox4 + xpos 1122 + ypos -46 + } + Switch { + inputs 2 + which {{env_format i}} + name Switch1 + label "env format" + xpos 591 + ypos 33 + } + Dot { + name Dot5 + xpos 625 + ypos 767 + } + STMap { + inputs 2 + channels rgba + uv rgb + name STMap24 + xpos 220 + ypos 763 + } + CopyBBox { + inputs 2 + name CopyBBox2 + xpos 220 + ypos 857 + } +push $N1e622870 + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels rgb + name Copy1 + xpos 392 + ypos 958 + } + Keymix { + inputs 3 + channels rgb + invertMask true + name Keymix1 + xpos 392 + ypos 1040 + disable {{!use_alpha}} + } + Output { + name Output1 + xpos 392 + ypos 1215 + } + Input { + inputs 0 + name cam + xpos -225 + ypos -562 + number 2 + } + Axis2 { + name Axis2 + xpos -215 + ypos -503 + } +end_group diff --git a/gizmos/Lighting/MT_Relight.gizmo b/gizmos/Lighting/MT_Relight.gizmo new file mode 100644 index 0000000..5759858 --- /dev/null +++ b/gizmos/Lighting/MT_Relight.gizmo @@ -0,0 +1,223 @@ +#! /Applications/Nuke5.2v1/Nuke5.2v1.app/Contents/MacOS/Nuke5.2v1 -nx +version 5.2100 +Gizmo { + inputs 2 + help "This node is a Relighting tool to use with a RGBpass or a normal pass to adjust an image.\nRelight tab is for setup light position and intensity.\nAccurate tab is for setup each channel with more control. \n" + tile_color 0x5380b5ff + lock_connections true + mapsize {0.159353 0.255396} + addUserKnob {20 Relight t "use this tab to set up the light and the direction"} + addUserKnob {41 hue_rotation l "Light position" t "define the position of light source around the object" T HueShift1.hue_rotation} + addUserKnob {41 Red t "set red (x) direction light" T Blend1.weight0} + addUserKnob {41 Green t "set green (y) direction light" T Blend1.weight1} + addUserKnob {41 Blue t "set blue (z) direction light" T Blend1.weight2} + addUserKnob {41 color_saturation l "light contrast" t "increase/decrease the contrast from light" T HueShift1.color_saturation} + addUserKnob {26 ""} + addUserKnob {20 author n 1} + addUserKnob {26 "" -STARTLINE T "MT_Lighting V.0.3 by William Eguienta\n\nthanks to report me bugs or request for new functions.\n\nwww.menthor-skillz.com\nmail: contact@menthor-skillz.com\n"} + addUserKnob {20 Accurate l "Accurate Master" t "set the master first and adjust others for details"} + addUserKnob {20 master_RED l "@b;master_RED" n 1} + addUserKnob {41 saturation T ColorCorrectR.saturation} + addUserKnob {41 contrast T ColorCorrectR.contrast} + addUserKnob {41 gamma T ColorCorrectR.gamma} + addUserKnob {41 gain T ColorCorrectR.gain} + addUserKnob {41 offset T ColorCorrectR.offset} + addUserKnob {20 master_GREEN l "@b;master_GREEN" n 1} + addUserKnob {41 saturation_1 l saturation T ColorCorrectG.saturation} + addUserKnob {41 contrast_1 l contrast T ColorCorrectG.contrast} + addUserKnob {41 gamma_1 l gamma T ColorCorrectG.gamma} + addUserKnob {41 gain_1 l gain T ColorCorrectG.gain} + addUserKnob {41 offset_1 l offset T ColorCorrectG.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 master_BLUE l "@b;master_BLUE" n 1} + addUserKnob {41 saturation_2 l saturation T ColorCorrectB.saturation} + addUserKnob {41 contrast_2 l contrast T ColorCorrectB.contrast} + addUserKnob {41 gamma_2 l gamma T ColorCorrectB.gamma} + addUserKnob {41 gain_2 l gain T ColorCorrectB.gain} + addUserKnob {41 offset_2 l offset T ColorCorrectB.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 Accurate_1 l "accurate midtones"} + addUserKnob {20 midtones_RED l "@b;midtones_RED" n 1} + addUserKnob {41 midtones.saturation l saturation T ColorCorrectR.midtones.saturation} + addUserKnob {41 midtones.contrast l contrast T ColorCorrectR.midtones.contrast} + addUserKnob {41 midtones.gamma l gamma T ColorCorrectR.midtones.gamma} + addUserKnob {41 midtones.gain l gain T ColorCorrectR.midtones.gain} + addUserKnob {41 midtones.offset l offset T ColorCorrectR.midtones.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 midtones_GREEN l "@b;midtones_GREEN" n 1} + addUserKnob {41 midtones.saturation_2 l saturation T ColorCorrectB.midtones.saturation} + addUserKnob {41 midtones.contrast_2 l contrast T ColorCorrectB.midtones.contrast} + addUserKnob {41 midtones.gamma_2 l gamma T ColorCorrectB.midtones.gamma} + addUserKnob {41 midtones.gain_2 l gain T ColorCorrectB.midtones.gain} + addUserKnob {41 midtones.offset_2 l offset T ColorCorrectB.midtones.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 midtones_BLUE l "@b;midtones_BLUE" n 1} + addUserKnob {41 midtones.saturation_1 l saturation T ColorCorrectG.midtones.saturation} + addUserKnob {41 midtones.contrast_1 l contrast T ColorCorrectG.midtones.contrast} + addUserKnob {41 midtones.gamma_1 l gamma T ColorCorrectG.midtones.gamma} + addUserKnob {41 midtones.gain_1 l gain T ColorCorrectG.midtones.gain} + addUserKnob {41 midtones.offset_1 l offset T ColorCorrectG.midtones.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 accurate_shadow l "accurate Shadow"} + addUserKnob {20 shadows_RED l "@b;shadows_RED" n 1} + addUserKnob {41 shadows.saturation l saturation T ColorCorrectR.shadows.saturation} + addUserKnob {41 shadows.contrast l contrast T ColorCorrectR.shadows.contrast} + addUserKnob {41 shadows.gamma l gamma T ColorCorrectR.shadows.gamma} + addUserKnob {41 shadows.gain l gain T ColorCorrectR.shadows.gain} + addUserKnob {41 shadows.offset l offset T ColorCorrectR.shadows.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 shadows_GREEN l "@b;shadows_GREEN" n 1} + addUserKnob {41 shadows.saturation_1 l saturation T ColorCorrectG.shadows.saturation} + addUserKnob {41 shadows.contrast_1 l contrast T ColorCorrectG.shadows.contrast} + addUserKnob {41 shadows.gamma_1 l gamma T ColorCorrectG.shadows.gamma} + addUserKnob {41 shadows.gain_1 l gain T ColorCorrectG.shadows.gain} + addUserKnob {41 shadows.offset_1 l offset T ColorCorrectG.shadows.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 shadows_BLUE l "@b;shadows_BLUE" n 1} + addUserKnob {41 shadows.saturation_2 l saturation T ColorCorrectB.shadows.saturation} + addUserKnob {41 shadows.contrast_2 l contrast T ColorCorrectB.shadows.contrast} + addUserKnob {41 shadows.gamma_2 l gamma T ColorCorrectB.shadows.gamma} + addUserKnob {41 shadows.gain_2 l gain T ColorCorrectB.shadows.gain} + addUserKnob {41 shadows.offset_2 l offset T ColorCorrectB.shadows.offset} + addUserKnob {20 "" n -1} + addUserKnob {20 endGroup n -1} + addUserKnob {20 endGroup_1 l endGroup n -1} +} + Input { + inputs 0 + name RGBpass + xpos 0 + ypos -71 + } + HueShift { + name HueShift1 + xpos 0 + ypos -26 + } + Dot { + name Dot1 + xpos 34 + ypos 15 + } +set N1d2829f0 [stack 0] + Dot { + name Dot3 + xpos 150 + ypos 15 + } +set N1d284290 [stack 0] + Dot { + name Dot4 + xpos 271 + ypos 15 + } + Input { + inputs 0 + name Source + xpos 180 + ypos -70 + number 1 + } + Dot { + name Dot2 + tile_color 0xffc000ff + xpos 214 + ypos 48 + } +set N1d2de6b0 [stack 0] + Copy { + inputs 2 + from0 rgba.blue + to0 rgba.alpha + name Blue + tile_color 0x28ffff + gl_color 0x38ffff + xpos 237 + ypos 98 + } + Premult { + name Premult3 + tile_color 0xdffff + xpos 237 + ypos 160 + } + ColorCorrect { + name ColorCorrectB + tile_color 0xffff + xpos 237 + ypos 201 + } +push 0 +push $N1d284290 +push $N1d2de6b0 + Copy { + inputs 2 + from0 rgba.green + to0 rgba.alpha + name Green + tile_color 0xff19ff + gl_color 0xff28ff + xpos 116 + ypos 99 + } + Premult { + name Premult2 + tile_color 0x1fff00ff + xpos 116 + ypos 159 + } + ColorCorrect { + name ColorCorrectG + tile_color 0xff00ff + xpos 116 + ypos 201 + } +push $N1d2829f0 +push $N1d2de6b0 + Dot { + name Dot5 + tile_color 0xffbc00ff + xpos 78 + ypos 48 + } + Copy { + inputs 2 + from0 rgba.red + to0 rgba.alpha + name Red + tile_color 0xff0000ff + xpos 0 + ypos 99 + } + Premult { + name Premult1 + tile_color 0xff0000ff + xpos 0 + ypos 160 + } + ColorCorrect { + name ColorCorrectR + tile_color 0xff0000ff + xpos 0 + ypos 201 + } + Blend { + inputs 3+1 + normalize false + name Blend1 + xpos 116 + ypos 286 + } +set N1d30a1f0 [stack 0] + Viewer { + name Viewer1 + xpos 316 + ypos 399 + } +push $N1d30a1f0 + Output { + name Output1 + xpos 116 + ypos 367 + } +end_group diff --git a/gizmos/Lighting/Mask3D_RS.gizmo b/gizmos/Lighting/Mask3D_RS.gizmo new file mode 100644 index 0000000..744c0c4 --- /dev/null +++ b/gizmos/Lighting/Mask3D_RS.gizmo @@ -0,0 +1,128 @@ +#! C:/Program Files/Nuke6.1v1/Nuke6.1.exe -nx +version 6.1 v1 +Gizmo { + inputs 2 + tile_color 0x417c3eff + addUserKnob {20 User} + addUserKnob {18 pos l Position t "Select the colour that corresponds to the position you want."} + pos {0.1597469896 -0.1521629989 0.3190000057} + addUserKnob {13 rad l Radius} + rad {4.6 3.2 12.6} + addUserKnob {7 fall l "Falloff Exponent" R 1 10} + fall 7.65 + addUserKnob {7 gain l Hardness} + gain 0.905 +} + Input { + inputs 0 + name alpha + selected true + xpos -34 + ypos 535 + number 1 + } + Input { + inputs 0 + name normals + selected true + xpos 95 + ypos 502 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy1 + selected true + xpos 101 + ypos 530 + } + Expression { + temp_name0 distR + temp_expr0 (Br-parent.pos.r)/rad.x + temp_name1 distG + temp_expr1 (Bg-parent.pos.g)/rad.y + temp_name2 distB + temp_expr2 (Bb-parent.pos.b)/rad.z + temp_name3 len + temp_expr3 sqrt((distR*distR)+(distG*distG)+(distB*distB)) + expr0 pow(1-len,fall) + expr1 pow(1-len,fall) + expr2 pow(1-len,fall) + expr3 pow(1-len,fall) + maskChannelInput rgba.alpha + name __POSITION_KEY__ + selected true + xpos 95 + ypos 578 + } + Clamp { + channels rgba + name Clamp1 + selected true + xpos 95 + ypos 612 + } + Group { + name Perlin_gain + help "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched." + tile_color 0xcc9d6d00 + selected true + xpos 95 + ypos 669 + addUserKnob {20 "" l User} + addUserKnob {7 realGain l "Perlin Gain function" t "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched."} + realGain {{parent.gain i x23 0.69}} + } + Input { + inputs 0 + name Input1 + selected true + xpos 130 + ypos -89 + } + Expression { + temp_name0 gain + temp_expr0 parent.realGain + temp_name1 lum + temp_expr1 "0.2125*Br + 0.7154*Bg + 0.0721*Bb" + temp_name2 val + temp_expr2 .5*((lum<.5)?((1-gain)>0?pow(2*lum,log(1-gain)/log(0.5)):0):2-((1-gain)>0?pow(2-2*lum,log(1-gain)/log(0.5)):0)) + expr0 r>1?r:r*(val/(lum+0.00001)) + expr1 g>1?g:g*(val/(lum+0.00001)) + expr2 b>1?b:b*(val/(lum+0.00001)) + name KPGain + tile_color 0xd47f3b00 + label "TRUE GAIN\nFUNCTION" + xpos 130 + ypos -24 + addUserKnob {20 "" l User} + } + Output { + name Output1 + xpos 130 + ypos 98 + } + end_group + Clamp { + channels rgba + name Clamp2 + selected true + xpos 95 + ypos 762 + } +set N781b780 [stack 0] + Output { + name Output1 + selected true + xpos 95 + ypos 839 + } +push $N781b780 + Viewer { + name Viewer1 + selected true + xpos -78 + ypos 627 + } +end_group diff --git a/gizmos/Lighting/PP_Mask_hub.gizmo b/gizmos/Lighting/PP_Mask_hub.gizmo new file mode 100644 index 0000000..e4568ef --- /dev/null +++ b/gizmos/Lighting/PP_Mask_hub.gizmo @@ -0,0 +1,700 @@ +#! C:/Program Files/Nuke6.3v2/Nuke6.3.exe -nx +version 6.3 v2 +Group { + name PPmask_hub + help "- For fine details on tiny distances, prefer 32b float renders to avoid banding.\n- To perform better antialiasing than by Matrix antialias, render pPass with double master resolution. The output is downscaled to root.format resolution.\n\n- If the the result is completly black, try raising spread and multiplier values.\n- If the the result is completly white, try lowering spread and multiplier values.\n - You can copy the rotation of the camera in the rotate channels to line up the orientations or tweak it to your needs...\n\n- falloff issue is now fixed, it's bidirectional.\n- This gizmo uses RotateNormals gizmo from Hakan Blomdahl. Thanks to him\n- Thanks to Nathan Dunsworth who made me discover pPass power !\n" + tile_color 0xff00ff + addUserKnob {20 PositionPass_maskGenerator_hub t "If the the result is completly black try to raise spread and multiplier values.\nIf the the result is completly white try to lower spread and multiplier values."} + addUserKnob {26 howto l "HOWTO : " T "first pick color on Ppass to select center of mask"} + addUserKnob {41 color T Constant1.color} + addUserKnob {6 Put_Alpha_In_RGB l "Put Alpha In RGB (beware that color position changing wont work with this option ticked)" +STARTLINE} + addUserKnob {6 invert +STARTLINE} + addUserKnob {20 setup n 1} + setup 0 + addUserKnob {6 premult -STARTLINE} + premult true + addUserKnob {41 in l "point position layer" T ShuffleIN.in} + addUserKnob {41 out2 l "out mask" -STARTLINE T ShuffleCopyOUT.out2} + addUserKnob {6 AntiAlias l "MatrixAntiAlias (when no double size Ppass)" +STARTLINE} + addUserKnob {41 filter l "downscale filter" T ReformatOUT.filter} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {18 pos l offset R -2 -2} + pos {0 0 0} + addUserKnob {41 rotate T AxisInternRot.rotate} + addUserKnob {7 spread_uniform l spread R 0 2} + spread_uniform 0.5 + addUserKnob {7 Multiplier R 0.1 50} + Multiplier 1 + addUserKnob {7 falloff R 0 2} + falloff 1 + addUserKnob {20 non_unif_GROUP l non_uniform n 1} + addUserKnob {7 spread_x R 0.1 1} + spread_x 0.1 + addUserKnob {7 falloff_x R 0 2} + falloff_x 1 + addUserKnob {7 spread_y R 0.1 1} + spread_y 0.1 + addUserKnob {7 falloff_y R 0 2} + falloff_y 1 + addUserKnob {7 spread_z R 0.1 1} + spread_z 0.1 + addUserKnob {7 falloff_z R 0 2} + falloff_z 1 + addUserKnob {20 endGroup n -1} + addUserKnob {18 outFade} + outFade {0 0 0} + addUserKnob {20 philhub_2010 n 1} + philhub_2010 0 + addUserKnob {26 philpmaATfreeDOTfr} + addUserKnob {20 endGroup_1 l endGroup n -1} +} + Axis2 { + inputs 0 + name AxisInternRot + xpos 240 + ypos -4 + } + Constant { + inputs 0 + channels rgb + color {0 0 0 1} + name Constant1 + xpos 726 + ypos -112 + } +set Nee0d370 [stack 0] + Expression { + expr0 1-r + expr1 1-g + expr2 1-b + name Expression2 + xpos 726 + ypos -26 + } + Input { + inputs 0 + name Input1 + label "\[value number]" + xpos 349 + ypos -234 + } +add_layer {shadow} + Shuffle { + name ShuffleIN + xpos 349 + ypos -165 + } +set N143056c0 [stack 0] + Dot { + name Dot2 + xpos 590 + ypos -161 + } + Dot { + name Dot1 + xpos 590 + ypos 309 + } +set Ne4d56e0 [stack 0] +push $Ne4d56e0 +push $Nee0d370 + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression3 + xpos 488 + ypos -89 + } +push $N143056c0 + Merge2 { + inputs 2 + operation plus + Achannels rgb + Bchannels rgb + output rgb + name PLUS + xpos 349 + ypos -27 + } +set Ne4d5d40 [stack 0] + Grade { + add {{-parent.pos.r i} {-parent.pos.g i x483 0} {-parent.pos.b i} 1} + black_clamp false + name Grade_pos + xpos 349 + ypos 110 + } + Group { + name RotateNormals + help "This will rotate Normal-data using rotation matrixes.\nhttp://en.wikipedia.org/wiki/Rotation_matrix\n\nYou enable Normal-data in the ScanlineRender-node, create a new layer for this.\n\nTip 1:\n Link the rotation knob to the Nuke camera, revert the camera order and then either invert the matrixes or negate the angles.\nThis will convert the Normal data from World Space to Camera Space. I guess. I am no expert on the subject.\n\n\nTip 2:\nPut these in your init.tcl to always render out the normals:\n\nadd_layer \{P P.x P.y P.z\}\nknob_default ScanlineRender.P_channel P\nadd_layer \{N N.x N.y N.z\}\nknob_default ScanlineRender.N_channel N\nknob_default ScanlineRender.output_shader_vectors true\n\nNote:\n In Nuke4.6 and earlier, the Normals is multiplied with the Z, so you need to divide them first. Use Channel Merge for this.\n" + xpos 231 + ypos 110 + addUserKnob {20 "" l Parameters} + addUserKnob {26 "" l Rotation} + addUserKnob {41 negx t "Multiply x-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negx} + addUserKnob {41 negy t "Multiply y-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negy} + addUserKnob {41 negz t "Multiply z-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negz} + addUserKnob {41 rotate T RotData.rotate} + addUserKnob {26 ""} + addUserKnob {4 rotationorder M {XYZ XZY YXZ YZX ZXY ZYX}} + rotationorder ZXY + addUserKnob {6 revertorder l "Revert Order" t "Quick order reversal." -STARTLINE} + addUserKnob {26 ""} + addUserKnob {41 invertxmatrix t "Inverts the X rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertxmatrix} + addUserKnob {41 invertymatrix t "Inverts the Y rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertymatrix} + addUserKnob {41 invertzmatrix t "Inverts the Z rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertzmatrix} + addUserKnob {26 "" l "Source Channels"} + addUserKnob {41 from0 l "Normal X" T CopyFrom.from0} + addUserKnob {41 from1 l "Normal Y" T CopyFrom.from1} + addUserKnob {41 from2 l "Normal Z" T CopyFrom.from2} + addUserKnob {26 "" l "Destination Channels"} + addUserKnob {41 to0 l X T CopyBack.to0} + addUserKnob {41 to1 l Y T CopyBack.to1} + addUserKnob {41 to2 l Z T CopyBack.to2} + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x8e8e3800 + label "Normal Order" + note_font_size 32 + xpos -581 + ypos 22 + bdwidth 1001 + bdheight 355 + } + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x7171c600 + label "Reverted Order" + note_font_size 32 + xpos 650 + ypos 4 + bdwidth 1030 + bdheight 354 + } + NoOp { + inputs 0 + name RotData + xpos 1170 + ypos -370 + addUserKnob {20 "" l User} + addUserKnob {6 invertxmatrix -STARTLINE} + addUserKnob {6 invertymatrix -STARTLINE} + addUserKnob {6 invertzmatrix -STARTLINE} + addUserKnob {26 ""} + addUserKnob {6 negx -STARTLINE} + addUserKnob {6 negy -STARTLINE} + addUserKnob {6 negz -STARTLINE} + addUserKnob {13 rotate} + rotate {{parent.parent.AxisInternRot.rotate} {parent.parent.AxisInternRot.rotate} {parent.parent.AxisInternRot.rotate}} + addUserKnob {26 ""} + addUserKnob {1 alphaexpr} + alphaexpr (negy?-1:1)*rotate.y/360.0*(2*PI) + addUserKnob {1 betaexpr} + betaexpr (negz?-1:1)*rotate.z/360.0*(2*PI) + addUserKnob {1 gammaexpr} + gammaexpr (negx?-1:1)*rotate.x/360.0*(2*PI) + addUserKnob {26 ""} + addUserKnob {7 alpha} + alpha {{"\[knob alphaexpr]" i}} + addUserKnob {7 beta} + beta {{"\[knob betaexpr]" i}} + addUserKnob {7 gamma} + gamma {{"\[knob gammaexpr]" i}} + } + Input { + inputs 0 + name Input1 + xpos 1830 + ypos -610 + } + Dot { + name Dot2 + xpos 1863 + ypos -487 + } +set N14102330 [stack 0] + Dot { + name Dot3 + xpos 653 + ypos -477 + } +set N14102660 [stack 0] + Dot { + name Dot1 + xpos 433 + ypos -477 + } +push $N14102660 + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + from1 rgba.green + to1 rgba.green + from2 rgba.blue + to2 rgba.blue + name CopyFrom + xpos 400 + ypos -367 + } + Dot { + name Dot4 + xpos 433 + ypos -175 + } +set N3fd8ed30 [stack 0] + ColorMatrix { + matrix { + {1 0 0} + {0 {"cos( \[value RotData.gamma] )" i} {"-1 * sin( \[value RotData.gamma] )" i}} + {0 {"sin( \[value RotData.gamma] )" i} {"cos( \[value RotData.gamma] )" i}} + } + invert {{"\[value RotData.invertxmatrix]" i}} + name ColorMatrix10 + label "ROLL X\ngamma" + xpos 1500 + ypos 96 + } + set C3fd8f060 [stack 0] + ColorMatrix { + matrix { + {{"cos( \[value RotData.alpha] )" i} 0 {"sin( \[value RotData.alpha] )" i}} + {0 1 0} + {{"-1 * sin( \[value RotData.alpha] )" i} 0 {"cos( \[value RotData.alpha] )" i}} + } + invert {{"\[value RotData.invertymatrix]" i}} + name ColorMatrix11 + label "Pitch Y\nalpha" + xpos 1500 + ypos 150 + } + set C3fd8f390 [stack 0] + ColorMatrix { + matrix { + {{"cos( \[value RotData.beta] )" i} {"-1 * sin( \[value RotData.beta] )" i} 0} + {{"sin( \[value RotData.beta] )" i} {"cos( \[value RotData.beta] )" i} 0} + {0 0 1} + } + invert {{"\[value RotData.invertzmatrix]"}} + name ColorMatrix12 + label "Yaw Z\nbeta" + xpos 1500 + ypos 204 + } + set C3fd8f6c0 [stack 0] +push $N3fd8ed30 +clone $C3fd8f390 { + xpos 1360 + ypos 96 + selected false + } +clone $C3fd8f060 { + xpos 1360 + ypos 150 + selected false + } +clone $C3fd8f6c0 { + xpos 1360 + ypos 204 + selected false + } +push $N3fd8ed30 +clone $C3fd8f6c0 { + xpos 1210 + ypos 102 + selected false + } +clone $C3fd8f060 { + xpos 1210 + ypos 156 + selected false + } +clone $C3fd8f390 { + xpos 1210 + ypos 210 + selected false + } +push $N3fd8ed30 +clone $C3fd8f060 { + xpos 1047 + ypos 108 + selected false + } +clone $C3fd8f6c0 { + xpos 1047 + ypos 174 + selected false + } +clone $C3fd8f390 { + xpos 1047 + ypos 228 + selected false + } +push $N3fd8ed30 +clone $C3fd8f390 { + xpos 890 + ypos 108 + selected false + } +clone $C3fd8f6c0 { + xpos 890 + ypos 167 + selected false + } +clone $C3fd8f060 { + xpos 890 + ypos 228 + selected false + } +push $N3fd8ed30 +clone $C3fd8f6c0 { + xpos 730 + ypos 120 + selected false + } +clone $C3fd8f390 { + xpos 730 + ypos 174 + selected false + } +clone $C3fd8f060 { + xpos 730 + ypos 228 + selected false + } + Switch { + inputs 6 + which {{rotationorder}} + name Switch2 + xpos 950 + ypos 446 + } +push $N3fd8ed30 +clone $C3fd8f6c0 { + xpos 240 + ypos 102 + selected false + } +clone $C3fd8f390 { + xpos 240 + ypos 156 + selected false + } +clone $C3fd8f060 { + xpos 240 + ypos 210 + selected false + } +push $N3fd8ed30 +clone $C3fd8f6c0 { + xpos 100 + ypos 102 + selected false + } +clone $C3fd8f060 { + xpos 100 + ypos 156 + selected false + } +clone $C3fd8f390 { + xpos 100 + ypos 210 + selected false + } +push $N3fd8ed30 +clone $C3fd8f390 { + xpos -50 + ypos 108 + selected false + } +clone $C3fd8f060 { + xpos -50 + ypos 162 + selected false + } +clone $C3fd8f6c0 { + xpos -50 + ypos 216 + selected false + } +push $N3fd8ed30 +clone $C3fd8f390 { + xpos -213 + ypos 114 + selected false + } +clone $C3fd8f6c0 { + xpos -213 + ypos 180 + selected false + } +clone $C3fd8f060 { + xpos -213 + ypos 234 + selected false + } +push $N3fd8ed30 +clone $C3fd8f060 { + xpos -370 + ypos 114 + selected false + } +clone $C3fd8f6c0 { + xpos -370 + ypos 173 + selected false + } +clone $C3fd8f390 { + xpos -370 + ypos 247 + selected false + } +push $N3fd8ed30 +clone $C3fd8f060 { + xpos -501 + ypos 102 + selected false + } +clone $C3fd8f390 { + xpos -501 + ypos 171 + selected false + } +clone $C3fd8f6c0 { + xpos -501 + ypos 234 + selected false + } + Switch { + inputs 6 + which {{rotationorder}} + name Switch1 + xpos -75 + ypos 422 + } + Switch { + inputs 2 + which {{revertorder}} + name Switch3 + xpos 510 + ypos 542 + } + Dot { + name Dot5 + xpos 543 + ypos 665 + } +push $N14102330 + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + from1 rgba.green + to1 rgba.green + from2 rgba.blue + to2 rgba.blue + name CopyBack + xpos 1830 + ypos 641 + } + Output { + name Output1 + xpos 1830 + ypos 758 + } + end_group + Grade { + multiply {{1/parent.Multiplier*10 i}} + black_clamp false + name MainMultiplier + xpos 113 + ypos 110 + } + Grade { + multiply {{(1/parent.spread_uniform+.1)/10}} + black_clamp false + name GradeSpreadUnif + xpos -155 + ypos 110 + } + Grade { + channels {rgba.red -rgba.green -rgba.blue} + multiply {{(1/parent.spread_x+.1)/10 i}} + black_clamp false + name Grade_SpreadX + xpos -155 + ypos 218 + } + Grade { + channels {-rgba.red rgba.green -rgba.blue} + multiply {{(1/parent.spread_y+.1)/10 i}} + black_clamp false + name Grade_SpreadY + xpos -155 + ypos 264 + } + Grade { + channels {-rgba.red -rgba.green rgba.blue} + multiply {{(1/parent.spread_z+.1)/10 i}} + black_clamp false + name Grade_SpreadZ + xpos -155 + ypos 310 + } + ColorLookup { + lut {master {curve C x-10 0 x0 1 0} + red {} + green {} + blue {} + alpha {}} + name GaussCentered + xpos -155 + ypos 445 + } + Grade { + gamma {{parent.falloff i}} + black_clamp false + name GradeFalloffUnif + xpos 157 + ypos 445 + } + Grade { + channels {rgba.red -rgba.green -rgba.blue} + gamma {{parent.falloff_x}} + black_clamp false + name Grade_FalloffX + selected true + xpos 157 + ypos 308 + } + Grade { + channels {-rgba.red rgba.green -rgba.blue} + gamma {{parent.falloff_y}} + black_clamp false + name Grade_FalloffY + xpos 157 + ypos 262 + } + Grade { + channels {-rgba.red -rgba.green rgba.blue} + gamma {{parent.falloff_z}} + black_clamp false + name Grade_FalloffZ + xpos 157 + ypos 216 + } + Clamp { + channels rgba + name Clamp1 + xpos 421 + ypos 225 + } + Expression { + channel0 {-rgba.red -rgba.green -rgba.blue rgba.alpha} + expr0 r*g*b + name Expression1 + xpos 421 + ypos 263 + } +set N3fda09d0 [stack 0] + ShuffleCopy { + inputs 2 + in2 alpha + alpha alpha2 + black red + white green + red2 blue + out alpha + out2 rgb + name ShuffleCopy1 + xpos 421 + ypos 305 + } +set N3fda1040 [stack 0] + Multiply { + inputs 1+1 + channels rgba + value 0 + invert_mask true + name Multiply1 + xpos 421 + ypos 346 + disable {{!premult i}} + } + Invert { + channels rgba + name Invert1 + xpos 421 + ypos 383 + disable {{!invert i}} + } +set N3fda16a0 [stack 0] + Matrix { + channels rgba + matrix { + {1 2 1} + {2 10 2} + {1 2 1} + } + normalize true + name Matrix1 + xpos 421 + ypos 421 + disable {{1-AntiAlias}} + } + Dot { + name Dot3 + xpos 455 + ypos 470 + } +set N3fda71e0 [stack 0] +push $N3fda71e0 + ShuffleCopy { + inputs 2 + in alpha + alpha alpha2 + black red + out2 alpha + name ShuffleCopyOUT + xpos 556 + ypos 465 + } + Reformat { + name ReformatOUT + xpos 556 + ypos 518 + } + Expression { + channel0 rgba + expr0 a + name AtoRGB + xpos 556 + ypos 590 + disable {{1-Put_Alpha_In_RGB}} + } + Output { + name Output1 + xpos 556 + ypos 644 + } +push $Ne4d5d40 +push 0 +push $Ne4d56e0 +push $N3fda1040 +push $Ne4d56e0 +push $N3fda16a0 +push $N3fda09d0 + Viewer { + inputs 7 + viewerProcess None + input_process false + name Viewer1 + xpos -110 + ypos -96 + } +end_group diff --git a/gizmos/Lighting/PP_Mask_hub_V2.gizmo b/gizmos/Lighting/PP_Mask_hub_V2.gizmo new file mode 100644 index 0000000..82e975e --- /dev/null +++ b/gizmos/Lighting/PP_Mask_hub_V2.gizmo @@ -0,0 +1,1470 @@ +#! C:/Program Files/Nuke6.2v4/Nuke6.2.exe -nx +version 6.2 v4 +Gizmo { + help "- For fine details on tiny distances, prefer 32b float renders to avoid banding.\n- To perform better antialiasing than by Matrix antialias, render pPass with double master resolution. The output is downscaled to root.format resolution.\n\n- If the the result is completly black, try raising spread and multiplier values.\n- If the the result is completly white, try lowering spread and multiplier values.\n - You can copy the rotation of the camera in the rotate channels to line up the orientations or tweak it to your needs...\n\n- falloff issue is now fixed, it's bidirectional.\n- This gizmo uses RotateNormals gizmo from Hakan Blomdahl. Thanks to him\n- Thanks to Nathan Dunsworth who made me discover pPass power !\n" + tile_color 0xff00ff + note_font Verdana + mapsize {0.15 0.15} + addUserKnob {20 PositionPass_maskGenerator_hub t "If the the result is completly black try to raise spread and multiplier values.\nIf the the result is completly white try to lower spread and multiplier values."} + addUserKnob {26 howto l "HOWTO : " T "first pick color on Ppass to select center of mask"} + addUserKnob {41 color T Constant1.color} + addUserKnob {6 Put_Alpha_In_RGB l "Put Alpha In RGB (beware that color position changing wont work with this option ticked)" +STARTLINE} + Put_Alpha_In_RGB true + addUserKnob {20 setup n 1} + setup 0 + addUserKnob {6 invert +STARTLINE} + addUserKnob {6 premult -STARTLINE} + premult true + addUserKnob {41 in l "point position layer" T ShuffleIN.in} + addUserKnob {41 out2 l "out mask" -STARTLINE T ShuffleCopyOUT.out2} + addUserKnob {6 AntiAlias l "MatrixAntiAlias (when no double size Ppass)" +STARTLINE} + AntiAlias true + addUserKnob {41 filter l "downscale filter" T ReformatOUT.filter} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {18 pos l offset R -2 -2} + pos {0 0 0} + addUserKnob {41 rotate T AxisInternRot.rotate} + addUserKnob {7 spread_uniform l spread R 0 2} + spread_uniform 0.31 + addUserKnob {7 Multiplier R 0.1 50} + Multiplier 1 + addUserKnob {7 falloff R 0 2} + falloff 1.15 + addUserKnob {20 non_unif_GROUP l non_uniform n 1} + non_unif_GROUP 0 + addUserKnob {7 spread_x} + spread_x 0.1 + addUserKnob {7 falloff_x R 0 2} + falloff_x 1 + addUserKnob {7 spread_y} + spread_y 0.1 + addUserKnob {7 falloff_y R 0 2} + falloff_y 1 + addUserKnob {7 spread_z} + spread_z 0.1 + addUserKnob {7 falloff_z R 0 2} + falloff_z 1 + addUserKnob {18 outFade} + outFade {0 0 0} + addUserKnob {20 endGroup n -1} + addUserKnob {20 philhub_2010 n 1} + philhub_2010 0 + addUserKnob {26 philpmaATfreeDOTfr} + addUserKnob {20 endGroup_1 l endGroup n -1} +} + Axis2 { + inputs 0 + name AxisInternRot + xpos 240 + ypos -4 + } + Input { + inputs 0 + name Input1 + label "\[value number]" + xpos 349 + ypos -203 + } + Shuffle { + name ShuffleIN + xpos 349 + ypos -165 + } +set N18ed5400 [stack 0] + Dot { + name Dot2 + xpos 590 + ypos -161 + } + Dot { + name Dot1 + xpos 590 + ypos 309 + } +set N18ed6ee0 [stack 0] + Reformat { + filter Parzen + name ReformatOUT + xpos 566 + ypos 423 + } + set C18ed7190 [stack 0] +set N18ed7190 [stack 0] + Dot { + name Dot3 + xpos 743 + ypos 427 + } + Dot { + name Dot4 + xpos 743 + ypos 513 + } +push $N18ed6ee0 + Constant { + inputs 0 + channels rgb + color {-2.488512993 0.9999999404 4.085286617 0.8658558726} + name Constant1 + xpos 459 + ypos -104 + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression3 + xpos 459 + ypos -26 + } +push $N18ed5400 + Merge2 { + inputs 2 + operation plus + Achannels rgb + Bchannels rgb + output rgb + name PLUS + xpos 349 + ypos -26 + } +set N21499960 [stack 0] + Grade { + add {{-parent.pos.r i} {-parent.pos.g i x483 0} {-parent.pos.b i} 1} + black_clamp false + name Grade_pos + xpos 349 + ypos 110 + } + Group { + name RotateNormals + help "This will rotate Normal-data using rotation matrixes.\nhttp://en.wikipedia.org/wiki/Rotation_matrix\n\nYou enable Normal-data in the ScanlineRender-node, create a new layer for this.\n\nTip 1:\n Link the rotation knob to the Nuke camera, revert the camera order and then either invert the matrixes or negate the angles.\nThis will convert the Normal data from World Space to Camera Space. I guess. I am no expert on the subject.\n\n\nTip 2:\nPut these in your init.tcl to always render out the normals:\n\nadd_layer \{P P.x P.y P.z\}\nknob_default ScanlineRender.P_channel P\nadd_layer \{N N.x N.y N.z\}\nknob_default ScanlineRender.N_channel N\nknob_default ScanlineRender.output_shader_vectors true\n\nNote:\n In Nuke4.6 and earlier, the Normals is multiplied with the Z, so you need to divide them first. Use Channel Merge for this.\n" + xpos 230 + ypos 110 + addUserKnob {20 "" l Parameters} + addUserKnob {26 "" l Rotation} + addUserKnob {41 negx t "Multiply x-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negx} + addUserKnob {41 negy t "Multiply y-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negy} + addUserKnob {41 negz t "Multiply z-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negz} + addUserKnob {41 rotate T RotData.rotate} + addUserKnob {26 ""} + addUserKnob {4 rotationorder M {XYZ XZY YXZ YZX ZXY ZYX}} + rotationorder ZXY + addUserKnob {6 revertorder l "Revert Order" t "Quick order reversal." -STARTLINE} + addUserKnob {26 ""} + addUserKnob {41 invertxmatrix t "Inverts the X rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertxmatrix} + addUserKnob {41 invertymatrix t "Inverts the Y rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertymatrix} + addUserKnob {41 invertzmatrix t "Inverts the Z rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertzmatrix} + addUserKnob {26 "" l "Source Channels"} + addUserKnob {41 from0 l "Normal X" T CopyFrom.from0} + addUserKnob {41 from1 l "Normal Y" T CopyFrom.from1} + addUserKnob {41 from2 l "Normal Z" T CopyFrom.from2} + addUserKnob {26 "" l "Destination Channels"} + addUserKnob {41 to0 l X T CopyBack.to0} + addUserKnob {41 to1 l Y T CopyBack.to1} + addUserKnob {41 to2 l Z T CopyBack.to2} + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x8e8e3800 + label "Normal Order" + note_font_size 32 + xpos -581 + ypos 22 + bdwidth 1001 + bdheight 355 + } + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x7171c600 + label "Reverted Order" + note_font_size 32 + xpos 650 + ypos 4 + bdwidth 1030 + bdheight 354 + } + NoOp { + inputs 0 + name RotData + xpos 1170 + ypos -370 + addUserKnob {20 "" l User} + addUserKnob {6 invertxmatrix -STARTLINE} + addUserKnob {6 invertymatrix -STARTLINE} + addUserKnob {6 invertzmatrix -STARTLINE} + addUserKnob {26 ""} + addUserKnob {6 negx -STARTLINE} + addUserKnob {6 negy -STARTLINE} + addUserKnob {6 negz -STARTLINE} + addUserKnob {13 rotate} + rotate {{parent.parent.AxisInternRot.rotate i} {parent.parent.AxisInternRot.rotate i} {parent.parent.AxisInternRot.rotate i}} + addUserKnob {26 ""} + addUserKnob {1 alphaexpr} + alphaexpr (negy?-1:1)*rotate.y/360.0*(2*PI) + addUserKnob {1 betaexpr} + betaexpr (negz?-1:1)*rotate.z/360.0*(2*PI) + addUserKnob {1 gammaexpr} + gammaexpr (negx?-1:1)*rotate.x/360.0*(2*PI) + addUserKnob {26 ""} + addUserKnob {7 alpha} + alpha {{"\[knob alphaexpr]" i}} + addUserKnob {7 beta} + beta {{"\[knob betaexpr]" i}} + addUserKnob {7 gamma} + gamma {{"\[knob gammaexpr]" i}} + } + Input { + inputs 0 + name Input1 + xpos 1830 + ypos -610 + } + Dot { + name Dot2 + xpos 1863 + ypos -487 + } +set N2149a980 [stack 0] + Dot { + name Dot3 + xpos 653 + ypos -477 + } +set N2149ac30 [stack 0] + Dot { + name Dot1 + xpos 433 + ypos -477 + } +push $N2149ac30 + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + from1 rgba.green + to1 rgba.green + from2 rgba.blue + to2 rgba.blue + name CopyFrom + xpos 400 + ypos -367 + } + Dot { + name Dot4 + xpos 433 + ypos -175 + } +set N2149b440 [stack 0] + ColorMatrix { + matrix { + {1 0 0} + {0 {"cos( \[value RotData.gamma] )" i} {"-1 * sin( \[value RotData.gamma] )" i}} + {0 {"sin( \[value RotData.gamma] )" i} {"cos( \[value RotData.gamma] )" i}} + } + invert {{"\[value RotData.invertxmatrix]" i}} + name ColorMatrix10 + label "ROLL X\ngamma" + xpos 1500 + ypos 96 + } + set C2149b6f0 [stack 0] + ColorMatrix { + matrix { + {{"cos( \[value RotData.alpha] )" i} 0 {"sin( \[value RotData.alpha] )" i}} + {0 1 0} + {{"-1 * sin( \[value RotData.alpha] )" i} 0 {"cos( \[value RotData.alpha] )" i}} + } + invert {{"\[value RotData.invertymatrix]" i}} + name ColorMatrix11 + label "Pitch Y\nalpha" + xpos 1500 + ypos 150 + } + set C2149b9a0 [stack 0] + ColorMatrix { + matrix { + {{"cos( \[value RotData.beta] )" i} {"-1 * sin( \[value RotData.beta] )" i} 0} + {{"sin( \[value RotData.beta] )" i} {"cos( \[value RotData.beta] )" i} 0} + {0 0 1} + } + invert {{"\[value RotData.invertzmatrix]"}} + name ColorMatrix12 + label "Yaw Z\nbeta" + xpos 1500 + ypos 204 + } + set C2149bc50 [stack 0] +push $N2149b440 +clone $C2149b9a0 { + xpos 1360 + ypos 96 + selected false + } +clone $C2149b6f0 { + xpos 1360 + ypos 150 + selected false + } +clone $C2149bc50 { + xpos 1360 + ypos 204 + selected false + } +push $N2149b440 +clone $C2149bc50 { + xpos 1210 + ypos 102 + selected false + } +clone $C2149b6f0 { + xpos 1210 + ypos 156 + selected false + } +clone $C2149b9a0 { + xpos 1210 + ypos 210 + selected false + } +push $N2149b440 +clone $C2149b6f0 { + xpos 1047 + ypos 108 + selected false + } +clone $C2149bc50 { + xpos 1047 + ypos 174 + selected false + } +clone $C2149b9a0 { + xpos 1047 + ypos 228 + selected false + } +push $N2149b440 +clone $C2149b9a0 { + xpos 890 + ypos 108 + selected false + } +clone $C2149bc50 { + xpos 890 + ypos 167 + selected false + } +clone $C2149b6f0 { + xpos 890 + ypos 228 + selected false + } +push $N2149b440 +clone $C2149bc50 { + xpos 730 + ypos 120 + selected false + } +clone $C2149b9a0 { + xpos 730 + ypos 174 + selected false + } +clone $C2149b6f0 { + xpos 730 + ypos 228 + selected false + } + Switch { + inputs 6 + which {{rotationorder}} + name Switch2 + xpos 950 + ypos 446 + } +push $N2149b440 +clone $C2149bc50 { + xpos 240 + ypos 102 + selected false + } +clone $C2149b9a0 { + xpos 240 + ypos 156 + selected false + } +clone $C2149b6f0 { + xpos 240 + ypos 210 + selected false + } +push $N2149b440 +clone $C2149bc50 { + xpos 100 + ypos 102 + selected false + } +clone $C2149b6f0 { + xpos 100 + ypos 156 + selected false + } +clone $C2149b9a0 { + xpos 100 + ypos 210 + selected false + } +push $N2149b440 +clone $C2149b9a0 { + xpos -50 + ypos 108 + selected false + } +clone $C2149b6f0 { + xpos -50 + ypos 162 + selected false + } +clone $C2149bc50 { + xpos -50 + ypos 216 + selected false + } +push $N2149b440 +clone $C2149b9a0 { + xpos -213 + ypos 114 + selected false + } +clone $C2149bc50 { + xpos -213 + ypos 180 + selected false + } +clone $C2149b6f0 { + xpos -213 + ypos 234 + selected false + } +push $N2149b440 +clone $C2149b6f0 { + xpos -370 + ypos 114 + selected false + } +clone $C2149bc50 { + xpos -370 + ypos 173 + selected false + } +clone $C2149b9a0 { + xpos -370 + ypos 247 + selected false + } +push $N2149b440 +clone $C2149b6f0 { + xpos -501 + ypos 102 + selected false + } +clone $C2149b9a0 { + xpos -501 + ypos 171 + selected false + } +clone $C2149bc50 { + xpos -501 + ypos 234 + selected false + } + Switch { + inputs 6 + which {{rotationorder}} + name Switch1 + xpos -75 + ypos 422 + } + Switch { + inputs 2 + which {{revertorder}} + name Switch3 + xpos 510 + ypos 542 + } + Dot { + name Dot5 + xpos 543 + ypos 665 + } +push $N2149a980 + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + from1 rgba.green + to1 rgba.green + from2 rgba.blue + to2 rgba.blue + name CopyBack + xpos 1830 + ypos 641 + } + Output { + name Output1 + xpos 1830 + ypos 758 + } + end_group + Grade { + multiply {{1/parent.Multiplier*10 i}} + black_clamp false + name MainMultiplier + xpos 113 + ypos 110 + } + Grade { + channels {rgba.red -rgba.green -rgba.blue} + multiply {{(1/parent.spread_x+.1)/10 x1 0.77823077}} + gamma {{parent.falloff_x}} + black_clamp false + name GradeSpreadX + xpos 15 + ypos 105 + } + set C21580440 [stack 0] + Grade { + channels {-rgba.red rgba.green -rgba.blue} + multiply {{(1/parent.spread_y+.1)/10 i}} + gamma {{parent.falloff_y i}} + black_clamp false + name GradeSpreadY + xpos 15 + ypos 143 + } + set C215806f0 [stack 0] + Grade { + channels {-rgba.red -rgba.green rgba.blue} + multiply {{(1/parent.spread_z+.1)/10 i}} + gamma {{parent.falloff_z i}} + black_clamp false + name GradeSpreadZ + xpos 15 + ypos 181 + } + set C215809a0 [stack 0] + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression6 + xpos 15 + ypos 249 + } +clone $C21580440 { + xpos 15 + ypos 275 + selected false + } +clone $C215806f0 { + xpos 15 + ypos 313 + selected false + } +clone $C215809a0 { + xpos 15 + ypos 351 + selected false + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression7 + xpos 15 + ypos 389 + } + Grade { + multiply {{(1/parent.spread_uniform+.1)/10}} + gamma {{parent.falloff}} + black_clamp false + name GradeSpreadUnif + xpos 182 + ypos 389 + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression4 + xpos 182 + ypos 267 + } + Grade { + gamma {{parent.GradeSpreadUnif.gamma i}} + black_clamp false + name GradeSpreadUnif_neg + xpos 182 + ypos 227 + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression5 + xpos 182 + ypos 187 + } + ColorLookup { + lut {master {curve C x-10 0 x0 1 0} + red {} + green {} + blue {} + alpha {}} + name GaussCentered + xpos 421 + ypos 187 + } + Clamp { + channels rgba + name Clamp1 + xpos 421 + ypos 235 + } + Expression { + channel0 {-rgba.red -rgba.green -rgba.blue rgba.alpha} + expr0 r*g*b + name Expression1 + xpos 421 + ypos 279 + } + ShuffleCopy { + inputs 2 + in2 alpha + alpha alpha2 + black red + white green + red2 blue + out alpha + out2 rgb + name ShuffleCopy1 + xpos 421 + ypos 305 + } +set N21582f40 [stack 0] + Invert { + channels rgba + name Invert1 + xpos 421 + ypos 351 + disable {{!invert i}} + } + Matrix { + channels rgba + matrix { + {1 2 1} + {2 10 2} + {1 2 1} + } + normalize true + name Matrix1 + xpos 421 + ypos 392 + disable {{1-AntiAlias}} + } +clone $C18ed7190 { + xpos 421 + ypos 465 + selected false + } +push $N18ed7190 + ShuffleCopy { + inputs 2 + in alpha + alpha alpha2 + black red + out2 alpha + name ShuffleCopyOUT + xpos 566 + ypos 465 + } +set N21584f80 [stack 0] + Merge2 { + inputs 2 + operation multiply + bbox B + name Multiply + selected true + xpos 566 + ypos 509 + disable {{!parent.premult}} + } +set N215867b0 [stack 0] + Expression { + channel0 rgba + expr0 a + name AtoRGB + xpos 566 + ypos 563 + disable {{1-Put_Alpha_In_RGB}} + } + Output { + name Output1 + xpos 566 + ypos 613 + } +push $N21499960 +push 0 +push $N18ed6ee0 +push $N21582f40 +push $N18ed6ee0 +push $N215867b0 +push $N21584f80 + Viewer { + inputs 7 + input_number 1 + viewerProcess None + input_process false + name Viewer1 + xpos -110 + ypos -96 + } +end_group +#! C:/Program Files/Nuke6.2v4/Nuke6.2.exe -nx +version 6.2 v4 +Gizmo { + help "- For fine details on tiny distances, prefer 32b float renders to avoid banding.\n- To perform better antialiasing than by Matrix antialias, render pPass with double master resolution. The output is downscaled to root.format resolution.\n\n- If the the result is completly black, try raising spread and multiplier values.\n- If the the result is completly white, try lowering spread and multiplier values.\n - You can copy the rotation of the camera in the rotate channels to line up the orientations or tweak it to your needs...\n\n- falloff issue is now fixed, it's bidirectional.\n- This gizmo uses RotateNormals gizmo from Hakan Blomdahl. Thanks to him\n- Thanks to Nathan Dunsworth who made me discover pPass power !\n" + tile_color 0xff00ff + note_font Verdana + mapsize {0.15 0.15} + addUserKnob {20 PositionPass_maskGenerator_hub t "If the the result is completly black try to raise spread and multiplier values.\nIf the the result is completly white try to lower spread and multiplier values."} + addUserKnob {26 howto l "HOWTO : " T "first pick color on Ppass to select center of mask"} + addUserKnob {41 color T Constant1.color} + addUserKnob {6 Put_Alpha_In_RGB l "Put Alpha In RGB (beware that color position changing wont work with this option ticked)" +STARTLINE} + Put_Alpha_In_RGB true + addUserKnob {20 setup n 1} + setup 0 + addUserKnob {6 invert +STARTLINE} + addUserKnob {6 premult -STARTLINE} + premult true + addUserKnob {41 in l "point position layer" T ShuffleIN.in} + addUserKnob {41 out2 l "out mask" -STARTLINE T ShuffleCopyOUT.out2} + addUserKnob {6 AntiAlias l "MatrixAntiAlias (when no double size Ppass)" +STARTLINE} + AntiAlias true + addUserKnob {41 filter l "downscale filter" T ReformatOUT.filter} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {18 pos l offset R -2 -2} + pos {0 0 0} + addUserKnob {41 rotate T AxisInternRot.rotate} + addUserKnob {7 spread_uniform l spread R 0 2} + spread_uniform 0.31 + addUserKnob {7 Multiplier R 0.1 50} + Multiplier 1 + addUserKnob {7 falloff R 0 2} + falloff 1.15 + addUserKnob {20 non_unif_GROUP l non_uniform n 1} + non_unif_GROUP 0 + addUserKnob {7 spread_x} + spread_x 0.1 + addUserKnob {7 falloff_x R 0 2} + falloff_x 1 + addUserKnob {7 spread_y} + spread_y 0.1 + addUserKnob {7 falloff_y R 0 2} + falloff_y 1 + addUserKnob {7 spread_z} + spread_z 0.1 + addUserKnob {7 falloff_z R 0 2} + falloff_z 1 + addUserKnob {18 outFade} + outFade {0 0 0} + addUserKnob {20 endGroup n -1} + addUserKnob {20 philhub_2010 n 1} + philhub_2010 0 + addUserKnob {26 philpmaATfreeDOTfr} + addUserKnob {20 endGroup_1 l endGroup n -1} +} + Axis2 { + inputs 0 + name AxisInternRot + xpos 240 + ypos -4 + } + Input { + inputs 0 + name Input1 + label "\[value number]" + xpos 349 + ypos -203 + } + Shuffle { + name ShuffleIN + xpos 349 + ypos -165 + } +set N18ed5400 [stack 0] + Dot { + name Dot2 + xpos 590 + ypos -161 + } + Dot { + name Dot1 + xpos 590 + ypos 309 + } +set N18ed6ee0 [stack 0] + Reformat { + filter Parzen + name ReformatOUT + xpos 566 + ypos 423 + } + set C18ed7190 [stack 0] +set N18ed7190 [stack 0] + Dot { + name Dot3 + xpos 743 + ypos 427 + } + Dot { + name Dot4 + xpos 743 + ypos 513 + } +push $N18ed6ee0 + Constant { + inputs 0 + channels rgb + color {-2.488512993 0.9999999404 4.085286617 0.8658558726} + name Constant1 + xpos 459 + ypos -104 + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression3 + xpos 459 + ypos -26 + } +push $N18ed5400 + Merge2 { + inputs 2 + operation plus + Achannels rgb + Bchannels rgb + output rgb + name PLUS + xpos 349 + ypos -26 + } +set N21499960 [stack 0] + Grade { + add {{-parent.pos.r i} {-parent.pos.g i x483 0} {-parent.pos.b i} 1} + black_clamp false + name Grade_pos + xpos 349 + ypos 110 + } + Group { + name RotateNormals + help "This will rotate Normal-data using rotation matrixes.\nhttp://en.wikipedia.org/wiki/Rotation_matrix\n\nYou enable Normal-data in the ScanlineRender-node, create a new layer for this.\n\nTip 1:\n Link the rotation knob to the Nuke camera, revert the camera order and then either invert the matrixes or negate the angles.\nThis will convert the Normal data from World Space to Camera Space. I guess. I am no expert on the subject.\n\n\nTip 2:\nPut these in your init.tcl to always render out the normals:\n\nadd_layer \{P P.x P.y P.z\}\nknob_default ScanlineRender.P_channel P\nadd_layer \{N N.x N.y N.z\}\nknob_default ScanlineRender.N_channel N\nknob_default ScanlineRender.output_shader_vectors true\n\nNote:\n In Nuke4.6 and earlier, the Normals is multiplied with the Z, so you need to divide them first. Use Channel Merge for this.\n" + xpos 230 + ypos 110 + addUserKnob {20 "" l Parameters} + addUserKnob {26 "" l Rotation} + addUserKnob {41 negx t "Multiply x-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negx} + addUserKnob {41 negy t "Multiply y-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negy} + addUserKnob {41 negz t "Multiply z-angle with -1.\nGood if you have linked the rotation data to something and want to reverse it.\n" T RotData.negz} + addUserKnob {41 rotate T RotData.rotate} + addUserKnob {26 ""} + addUserKnob {4 rotationorder M {XYZ XZY YXZ YZX ZXY ZYX}} + rotationorder ZXY + addUserKnob {6 revertorder l "Revert Order" t "Quick order reversal." -STARTLINE} + addUserKnob {26 ""} + addUserKnob {41 invertxmatrix t "Inverts the X rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertxmatrix} + addUserKnob {41 invertymatrix t "Inverts the Y rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertymatrix} + addUserKnob {41 invertzmatrix t "Inverts the Z rotation matrix. (Checks the invert knob on the ColorMatrix Node)\n" T RotData.invertzmatrix} + addUserKnob {26 "" l "Source Channels"} + addUserKnob {41 from0 l "Normal X" T CopyFrom.from0} + addUserKnob {41 from1 l "Normal Y" T CopyFrom.from1} + addUserKnob {41 from2 l "Normal Z" T CopyFrom.from2} + addUserKnob {26 "" l "Destination Channels"} + addUserKnob {41 to0 l X T CopyBack.to0} + addUserKnob {41 to1 l Y T CopyBack.to1} + addUserKnob {41 to2 l Z T CopyBack.to2} + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x8e8e3800 + label "Normal Order" + note_font_size 32 + xpos -581 + ypos 22 + bdwidth 1001 + bdheight 355 + } + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x7171c600 + label "Reverted Order" + note_font_size 32 + xpos 650 + ypos 4 + bdwidth 1030 + bdheight 354 + } + NoOp { + inputs 0 + name RotData + xpos 1170 + ypos -370 + addUserKnob {20 "" l User} + addUserKnob {6 invertxmatrix -STARTLINE} + addUserKnob {6 invertymatrix -STARTLINE} + addUserKnob {6 invertzmatrix -STARTLINE} + addUserKnob {26 ""} + addUserKnob {6 negx -STARTLINE} + addUserKnob {6 negy -STARTLINE} + addUserKnob {6 negz -STARTLINE} + addUserKnob {13 rotate} + rotate {{parent.parent.AxisInternRot.rotate i} {parent.parent.AxisInternRot.rotate i} {parent.parent.AxisInternRot.rotate i}} + addUserKnob {26 ""} + addUserKnob {1 alphaexpr} + alphaexpr (negy?-1:1)*rotate.y/360.0*(2*PI) + addUserKnob {1 betaexpr} + betaexpr (negz?-1:1)*rotate.z/360.0*(2*PI) + addUserKnob {1 gammaexpr} + gammaexpr (negx?-1:1)*rotate.x/360.0*(2*PI) + addUserKnob {26 ""} + addUserKnob {7 alpha} + alpha {{"\[knob alphaexpr]" i}} + addUserKnob {7 beta} + beta {{"\[knob betaexpr]" i}} + addUserKnob {7 gamma} + gamma {{"\[knob gammaexpr]" i}} + } + Input { + inputs 0 + name Input1 + xpos 1830 + ypos -610 + } + Dot { + name Dot2 + xpos 1863 + ypos -487 + } +set N2149a980 [stack 0] + Dot { + name Dot3 + xpos 653 + ypos -477 + } +set N2149ac30 [stack 0] + Dot { + name Dot1 + xpos 433 + ypos -477 + } +push $N2149ac30 + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + from1 rgba.green + to1 rgba.green + from2 rgba.blue + to2 rgba.blue + name CopyFrom + xpos 400 + ypos -367 + } + Dot { + name Dot4 + xpos 433 + ypos -175 + } +set N2149b440 [stack 0] + ColorMatrix { + matrix { + {1 0 0} + {0 {"cos( \[value RotData.gamma] )" i} {"-1 * sin( \[value RotData.gamma] )" i}} + {0 {"sin( \[value RotData.gamma] )" i} {"cos( \[value RotData.gamma] )" i}} + } + invert {{"\[value RotData.invertxmatrix]" i}} + name ColorMatrix10 + label "ROLL X\ngamma" + xpos 1500 + ypos 96 + } + set C2149b6f0 [stack 0] + ColorMatrix { + matrix { + {{"cos( \[value RotData.alpha] )" i} 0 {"sin( \[value RotData.alpha] )" i}} + {0 1 0} + {{"-1 * sin( \[value RotData.alpha] )" i} 0 {"cos( \[value RotData.alpha] )" i}} + } + invert {{"\[value RotData.invertymatrix]" i}} + name ColorMatrix11 + label "Pitch Y\nalpha" + xpos 1500 + ypos 150 + } + set C2149b9a0 [stack 0] + ColorMatrix { + matrix { + {{"cos( \[value RotData.beta] )" i} {"-1 * sin( \[value RotData.beta] )" i} 0} + {{"sin( \[value RotData.beta] )" i} {"cos( \[value RotData.beta] )" i} 0} + {0 0 1} + } + invert {{"\[value RotData.invertzmatrix]"}} + name ColorMatrix12 + label "Yaw Z\nbeta" + xpos 1500 + ypos 204 + } + set C2149bc50 [stack 0] +push $N2149b440 +clone $C2149b9a0 { + xpos 1360 + ypos 96 + selected false + } +clone $C2149b6f0 { + xpos 1360 + ypos 150 + selected false + } +clone $C2149bc50 { + xpos 1360 + ypos 204 + selected false + } +push $N2149b440 +clone $C2149bc50 { + xpos 1210 + ypos 102 + selected false + } +clone $C2149b6f0 { + xpos 1210 + ypos 156 + selected false + } +clone $C2149b9a0 { + xpos 1210 + ypos 210 + selected false + } +push $N2149b440 +clone $C2149b6f0 { + xpos 1047 + ypos 108 + selected false + } +clone $C2149bc50 { + xpos 1047 + ypos 174 + selected false + } +clone $C2149b9a0 { + xpos 1047 + ypos 228 + selected false + } +push $N2149b440 +clone $C2149b9a0 { + xpos 890 + ypos 108 + selected false + } +clone $C2149bc50 { + xpos 890 + ypos 167 + selected false + } +clone $C2149b6f0 { + xpos 890 + ypos 228 + selected false + } +push $N2149b440 +clone $C2149bc50 { + xpos 730 + ypos 120 + selected false + } +clone $C2149b9a0 { + xpos 730 + ypos 174 + selected false + } +clone $C2149b6f0 { + xpos 730 + ypos 228 + selected false + } + Switch { + inputs 6 + which {{rotationorder}} + name Switch2 + xpos 950 + ypos 446 + } +push $N2149b440 +clone $C2149bc50 { + xpos 240 + ypos 102 + selected false + } +clone $C2149b9a0 { + xpos 240 + ypos 156 + selected false + } +clone $C2149b6f0 { + xpos 240 + ypos 210 + selected false + } +push $N2149b440 +clone $C2149bc50 { + xpos 100 + ypos 102 + selected false + } +clone $C2149b6f0 { + xpos 100 + ypos 156 + selected false + } +clone $C2149b9a0 { + xpos 100 + ypos 210 + selected false + } +push $N2149b440 +clone $C2149b9a0 { + xpos -50 + ypos 108 + selected false + } +clone $C2149b6f0 { + xpos -50 + ypos 162 + selected false + } +clone $C2149bc50 { + xpos -50 + ypos 216 + selected false + } +push $N2149b440 +clone $C2149b9a0 { + xpos -213 + ypos 114 + selected false + } +clone $C2149bc50 { + xpos -213 + ypos 180 + selected false + } +clone $C2149b6f0 { + xpos -213 + ypos 234 + selected false + } +push $N2149b440 +clone $C2149b6f0 { + xpos -370 + ypos 114 + selected false + } +clone $C2149bc50 { + xpos -370 + ypos 173 + selected false + } +clone $C2149b9a0 { + xpos -370 + ypos 247 + selected false + } +push $N2149b440 +clone $C2149b6f0 { + xpos -501 + ypos 102 + selected false + } +clone $C2149b9a0 { + xpos -501 + ypos 171 + selected false + } +clone $C2149bc50 { + xpos -501 + ypos 234 + selected false + } + Switch { + inputs 6 + which {{rotationorder}} + name Switch1 + xpos -75 + ypos 422 + } + Switch { + inputs 2 + which {{revertorder}} + name Switch3 + xpos 510 + ypos 542 + } + Dot { + name Dot5 + xpos 543 + ypos 665 + } +push $N2149a980 + Copy { + inputs 2 + from0 rgba.red + to0 rgba.red + from1 rgba.green + to1 rgba.green + from2 rgba.blue + to2 rgba.blue + name CopyBack + xpos 1830 + ypos 641 + } + Output { + name Output1 + xpos 1830 + ypos 758 + } + end_group + Grade { + multiply {{1/parent.Multiplier*10 i}} + black_clamp false + name MainMultiplier + xpos 113 + ypos 110 + } + Grade { + channels {rgba.red -rgba.green -rgba.blue} + multiply {{(1/parent.spread_x+.1)/10 x1 0.77823077}} + gamma {{parent.falloff_x}} + black_clamp false + name GradeSpreadX + xpos 15 + ypos 105 + } + set C21580440 [stack 0] + Grade { + channels {-rgba.red rgba.green -rgba.blue} + multiply {{(1/parent.spread_y+.1)/10 i}} + gamma {{parent.falloff_y i}} + black_clamp false + name GradeSpreadY + xpos 15 + ypos 143 + } + set C215806f0 [stack 0] + Grade { + channels {-rgba.red -rgba.green rgba.blue} + multiply {{(1/parent.spread_z+.1)/10 i}} + gamma {{parent.falloff_z i}} + black_clamp false + name GradeSpreadZ + xpos 15 + ypos 181 + } + set C215809a0 [stack 0] + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression6 + xpos 15 + ypos 249 + } +clone $C21580440 { + xpos 15 + ypos 275 + selected false + } +clone $C215806f0 { + xpos 15 + ypos 313 + selected false + } +clone $C215809a0 { + xpos 15 + ypos 351 + selected false + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression7 + xpos 15 + ypos 389 + } + Grade { + multiply {{(1/parent.spread_uniform+.1)/10}} + gamma {{parent.falloff}} + black_clamp false + name GradeSpreadUnif + xpos 182 + ypos 389 + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression4 + xpos 182 + ypos 267 + } + Grade { + gamma {{parent.GradeSpreadUnif.gamma i}} + black_clamp false + name GradeSpreadUnif_neg + xpos 182 + ypos 227 + } + Expression { + expr0 -r + expr1 -g + expr2 -b + name Expression5 + xpos 182 + ypos 187 + } + ColorLookup { + lut {master {curve C x-10 0 x0 1 0} + red {} + green {} + blue {} + alpha {}} + name GaussCentered + xpos 421 + ypos 187 + } + Clamp { + channels rgba + name Clamp1 + xpos 421 + ypos 235 + } + Expression { + channel0 {-rgba.red -rgba.green -rgba.blue rgba.alpha} + expr0 r*g*b + name Expression1 + xpos 421 + ypos 279 + } + ShuffleCopy { + inputs 2 + in2 alpha + alpha alpha2 + black red + white green + red2 blue + out alpha + out2 rgb + name ShuffleCopy1 + xpos 421 + ypos 305 + } +set N21582f40 [stack 0] + Invert { + channels rgba + name Invert1 + xpos 421 + ypos 351 + disable {{!invert i}} + } + Matrix { + channels rgba + matrix { + {1 2 1} + {2 10 2} + {1 2 1} + } + normalize true + name Matrix1 + xpos 421 + ypos 392 + disable {{1-AntiAlias}} + } +clone $C18ed7190 { + xpos 421 + ypos 465 + selected false + } +push $N18ed7190 + ShuffleCopy { + inputs 2 + in alpha + alpha alpha2 + black red + out2 alpha + name ShuffleCopyOUT + xpos 566 + ypos 465 + } +set N21584f80 [stack 0] + Merge2 { + inputs 2 + operation multiply + bbox B + name Multiply + selected true + xpos 566 + ypos 509 + disable {{!parent.premult}} + } +set N215867b0 [stack 0] + Expression { + channel0 rgba + expr0 a + name AtoRGB + xpos 566 + ypos 563 + disable {{1-Put_Alpha_In_RGB}} + } + Output { + name Output1 + xpos 566 + ypos 613 + } +push $N21499960 +push 0 +push $N18ed6ee0 +push $N21582f40 +push $N18ed6ee0 +push $N215867b0 +push $N21584f80 + Viewer { + inputs 7 + input_number 1 + viewerProcess None + input_process false + name Viewer1 + xpos -110 + ypos -96 + } +end_group diff --git a/gizmos/Lighting/P_Matte.gizmo b/gizmos/Lighting/P_Matte.gizmo new file mode 100644 index 0000000..6178039 --- /dev/null +++ b/gizmos/Lighting/P_Matte.gizmo @@ -0,0 +1,212 @@ +Gizmo { + help "P_Matte creates a sphere or cube shaped 3D matte based on a pass/layer containing position data" + knobChanged "\nn = nuke.thisNode()\nk = nuke.thisKnob()\ns = nuke.toNode('SphereMatte')\nr = nuke.toNode('Start_End')\n\nif k.name() == \"falloffType\":\n n\['falloff'].setVisible( k.value() != 'None' )\n n\['exp'].setVisible( k.value() == 'Exponential' )\n\n" + addUserKnob {20 User} + addUserKnob {41 in l "position data" t "Choose a layer from the input that contains position data" T Shuffle_Input_Channels.in} + addUserKnob {41 output t "Resulting matte will be written to this layer only" T OutChannel.out} + addUserKnob {6 unpremultiply t "Check if your position layer is premultiplied" +STARTLINE} + addUserKnob {6 useAlpha l "ignore outside alpha" t "If your input has an alpha channel, checking this will force everything outside that alpha channel to be black" -STARTLINE} + useAlpha true + addUserKnob {26 ""} + addUserKnob {4 matteShape t "Choose the shape of the 3D matte. Current options are \"Sphere\" and \"Cube\"" M {Sphere Cube ""}} + addUserKnob {41 center t "Sample the viewer or copy XYZ coordinates here to choose the center of the 3D sphere or cube" T Center.center} + addUserKnob {26 ""} + addUserKnob {41 rot_order l "rotation order" T Axis1.rot_order} + addUserKnob {41 rotate T Axis1.rotate} + addUserKnob {41 scaling l scale T Axis1.scaling} + addUserKnob {41 uniform_scale l "uniform scale" T Axis1.uniform_scale} + addUserKnob {41 skew T Axis1.skew} + addUserKnob {41 pivot T Axis1.pivot} + addUserKnob {26 ""} + addUserKnob {4 falloffType M {None Linear Smooth Quadratic Cubic Exponential ""}} + falloffType Linear + addUserKnob {7 falloff} + falloff 1 + addUserKnob {7 exp +HIDDEN R 0.1 10} + exp 8 +} + Input { + inputs 0 + name img + selected true + xpos -828 + ypos -353 + } + AddChannels { + channels alpha + color 1 + name AddChannels1 + xpos -828 + ypos -259 + } + Shuffle { + in rgb + alpha blue + out rgb + name Shuffle_Input_Channels + xpos -828 + ypos -198 + } +set Nfb3ab9e0 [stack 0] + Unpremult { + name Unpremult1 + xpos -646 + ypos -198 + disable {{!parent.unpremultiply i}} + } + Dot { + name Dot2 + xpos -326 + ypos -193 + } +set Nfb4d0ed0 [stack 0] + Add { + channels rgb + value {{-center} {-center} {-center} {curve}} + name Center + xpos -360 + ypos -160 + addUserKnob {20 User} + addUserKnob {18 center} + center {0 0 0} + } + Add { + channels rgb + value {{-Axis1.world_matrix.3 i} {-Axis1.world_matrix.7 i} {-Axis1.world_matrix.11 i} {curve i}} + name Translate_Pivot + xpos -360 + ypos -116 + } + ColorMatrix { + matrix { + {{Axis1.world_matrix.0} {Axis1.world_matrix.1} {Axis1.world_matrix.2}} + {{Axis1.world_matrix.4} {Axis1.world_matrix.5} {Axis1.world_matrix.6}} + {{Axis1.world_matrix.8} {Axis1.world_matrix.9} {Axis1.world_matrix.10}} + } + invert true + name Rotate_Scale_Skew + xpos -360 + ypos -88 + disable {{hasError x200 1}} + } +set Ndfb9e340 [stack 0] + Expression { + expr3 "(parent.useAlpha && a == 0.0 )? 0 : 1-max(abs(r),abs(g),abs(b))" + name CubeMatte + xpos -285 + ypos -11 + } +push $Ndfb9e340 + Expression { + expr3 "(parent.useAlpha && a == 0.0 )? 0 : 1-(sqrt((r*r)+(g*g)+(b*b)))" + name SphereMatte + xpos -442 + ypos -12 + } + Switch { + inputs 2 + which {{matteShape i}} + name Switch1 + xpos -366 + ypos 58 + } + Grade { + channels alpha + whitepoint {{falloffType?falloff:0}} + white_clamp true + name Falloff + xpos -366 + ypos 124 + } +set Ndfb0c740 [stack 0] + Expression { + expr3 pow(a,parent.exp) + name Exponential + xpos -81 + ypos 229 + } +push $Ndfb0c740 + Expression { + expr3 clamp((a**3),0,1) + name Cubic + xpos -175 + ypos 228 + } +set Ndc1495e0 [stack 0] +push $Ndfb0c740 + Expression { + expr3 clamp(pow2(a),0,1) + name Quadratic + xpos -269 + ypos 227 + } +push $Ndfb0c740 + Expression { + expr3 smoothstep(0,1,a) + name Smooth + xpos -366 + ypos 230 + } +push $Ndfb0c740 + NoOp { + name Linear + xpos -457 + ypos 231 + } +push $Ndfb0c740 + NoOp { + name None + xpos -557 + ypos 231 + } + Switch { + inputs 6 + which {{falloffType i}} + name Switch2 + xpos -366 + ypos 318 + } + Remove { + operation keep + channels alpha + name Remove1 + xpos -366 + ypos 378 + } + Shuffle { + in alpha + out alpha + name OutChannel + xpos -366 + ypos 439 + } +push $Nfb3ab9e0 + Dot { + name Dot1 + xpos -794 + ypos 527 + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels all + name Copy1 + xpos -366 + ypos 508 + } + Output { + name Output1 + xpos -366 + ypos 637 + } + Axis2 { + inputs 0 + xform_order STR + rot_order ZYX + uniform_scale 5 + name Axis1 + xpos -86 + ypos -102 + } +end_group diff --git a/gizmos/Lighting/P_Noise3D.gizmo b/gizmos/Lighting/P_Noise3D.gizmo new file mode 100644 index 0000000..0a7aaf3 --- /dev/null +++ b/gizmos/Lighting/P_Noise3D.gizmo @@ -0,0 +1,94 @@ +Gizmo { + help "Generates a 3D noise pattern on a given position pass.\nSupports fBm (Fractional Brownian Noise) and Turbulent Noise algorithms." + addUserKnob {20 User} + addUserKnob {41 in l "position data" T Shuffle_Input_Channels.in} + addUserKnob {41 output T OutChannel.out} + addUserKnob {6 unpremultiply +STARTLINE} + addUserKnob {6 useAlpha l "ignore outside alpha" -STARTLINE} + useAlpha true + addUserKnob {26 ""} + addUserKnob {4 noisetype M {fBm turbulent}} + noisetype turbulent + addUserKnob {13 size} + size {5 5 5} + addUserKnob {13 offset} + addUserKnob {26 ""} + addUserKnob {3 octaves} + addUserKnob {7 lacunarity R 0 5} + addUserKnob {7 gain} + gain 0.5 +} + Input { + inputs 0 + name img + xpos 131 + ypos -676 + } + AddChannels { + channels alpha + color 1 + name AddChannels1 + xpos 131 + ypos -547 + } + Shuffle { + in rgb + alpha blue + out rgb + name Shuffle_Input_Channels + xpos 131 + ypos -486 + } +set N5a4e540 [stack 0] + Unpremult { + name Unpremult1 + xpos 389 + ypos -486 + disable {{!parent.unpremultiply i}} + } + Expression { + temp_name0 fBmNoise + temp_expr0 fBm((r+offset.x)*1/size.x,(g+offset.y)*1/size.y,(b+offset.z)*1/size.z,octaves,lacunarity,gain)*.5+0.5 + temp_name1 turbNoise + temp_expr1 turbulence((r+offset.x)*1/size.x,(g+offset.y)*1/size.y,(b+offset.z)*1/size.z,octaves,lacunarity,gain) + channel0 alpha + expr0 "parent.useAlpha && a == 0 ? 0 : (noisetype==0?fBmNoise:noisetype==1?turbNoise:0)" + name Expression3 + xpos 390 + ypos -431 + } + Remove { + operation keep + channels alpha + name Remove1 + xpos 390 + ypos -363 + } + Shuffle { + in alpha + out alpha + name OutChannel + xpos 390 + ypos -301 + } +push $N5a4e540 + Dot { + name Dot1 + xpos 165 + ypos -244 + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels all + name Copy1 + xpos 390 + ypos -263 + } + Output { + name Output1 + xpos 389 + ypos -44 + } +end_group diff --git a/gizmos/Lighting/P_Ramp.gizmo b/gizmos/Lighting/P_Ramp.gizmo new file mode 100644 index 0000000..8115bfa --- /dev/null +++ b/gizmos/Lighting/P_Ramp.gizmo @@ -0,0 +1,323 @@ +Gizmo { + help "P_Ramp creates a gradient matte based on a pass/layer containing position data" + knobChanged "\nn = nuke.thisNode()\nk = nuke.thisKnob()\ns = nuke.toNode('SphereMatte')\nr = nuke.toNode('Start_End')\n\nif k.name() == \"falloffType\":\n n\['falloff'].setVisible( k.value() != 'None' )\n n\['exp'].setVisible( k.value() == 'Exponential' )\n\nif k.name() == \"rampDirection\":\n for knob in \[n\['rotDivider'], n\['rotateAround'], n\['rot_order'], n\['rotate']]:\n knob.setVisible(k.value() == 'Custom')\n\n" + addUserKnob {20 User} + addUserKnob {41 in l "position data" t "Choose a layer from the input that contains position data" T Shuffle_Input_Channels.in} + addUserKnob {41 output t "Resulting matte will be written to this layer only" T OutChannel.out} + addUserKnob {6 unpremultiply t "Check if your position layer is premultiplied" +STARTLINE} + addUserKnob {6 useAlpha l "ignore outside alpha" t "If your input has an alpha channel, checking this will force everything outside that alpha channel to be black" -STARTLINE} + useAlpha true + addUserKnob {26 ""} + addUserKnob {4 rampDirection t "Choose the axis/direction of the ramp\n\nX : ramp along the X axis\nY : ramp along the Y axis\nZ : ramp along the Z axis\nCustom : starting with a ramp along the Z axis, rotate the ramp at will using the rotation controls\nStart to End: ramp along the vector that goes from start to end points" M {X Y Z Custom "Start to End" "" "" "" ""}} + rampDirection "Start to End" + addUserKnob {41 start T Start_End.start} + addUserKnob {41 end T Start_End.end} + addUserKnob {26 rotDivider l "" +STARTLINE +HIDDEN} + addUserKnob {4 rotateAround l "rotate around" +HIDDEN M {"start\t" center end}} + rotateAround center + addUserKnob {4 rot_order l "rotation order" +HIDDEN M {XYZ XZY YXZ YZX ZXY ZYX "" "" ""}} + rot_order ZXY + addUserKnob {13 rotate +HIDDEN} + addUserKnob {26 ""} + addUserKnob {4 falloffType M {None Linear Smooth Quadratic Cubic Exponential ""}} + falloffType Linear + addUserKnob {7 falloff} + falloff 1 + addUserKnob {7 exp +HIDDEN R 0.1 10} + exp 4.5 +} + Input { + inputs 0 + name img + selected true + xpos -828 + ypos -365 + } + AddChannels { + channels alpha + color 1 + name AddChannels1 + xpos -828 + ypos -271 + } + Shuffle { + in rgb + alpha blue + out rgb + name Shuffle_Input_Channels + xpos -828 + ypos -210 + } +set N64beaa0 [stack 0] + Unpremult { + name Unpremult1 + xpos -646 + ypos -210 + disable {{!parent.unpremultiply i}} + } + Dot { + name Dot4 + xpos -278 + ypos -205 + } + NoOp { + name Ramps + xpos -312 + ypos -187 + } +set N643cc60 [stack 0] + Add { + channels rgb + value {{-parent.start i} {-parent.start i} {-parent.start i} {curve i}} + name Set_Origin + xpos 133 + ypos -187 + } + ColorMatrix { + matrix { + {{tt*wnorm.x**2+d i} {tt*wnorm.x*wnorm.y-s*wnorm.z i} {"tt*wnorm.x*wnorm.z + s*wnorm.y" i}} + {{"tt*wnorm.x*wnorm.y + s*wnorm.z" i} {tt*wnorm.y**2+d i} {"tt*wnorm.y*wnorm.z - wnorm.x*s" i}} + {{"tt*wnorm.x*wnorm.z - s*wnorm.y" i} {tt*wnorm.y*wnorm.z+s*wnorm.x i} {"tt*wnorm.z**2 + d" i}} + } + name Rotate_Scale_Skew1 + xpos 133 + ypos -100 + disable {{hasError i x200 1}} + addUserKnob {20 User} + addUserKnob {7 length} + length {{"sqrt ( ( (parent.end.r - parent.start.r) ** 2 ) + ( (parent.end.g - parent.start.g) ** 2 ) + ( (parent.end.b - parent.start.b) ** 2 ))" i}} + addUserKnob {13 u} + u {0 1 0} + addUserKnob {13 v} + v {{"(parent.end.r - parent.start.r) / length" i} {"(parent.end.g - parent.start.g) / length" i} {"(parent.end.b - parent.start.b) / length" i}} + addUserKnob {13 w} + w {{"u.y * v.z - u.z * v.y" i} {"u.z * v.x - u.x * v.z" i} {"u.x * v.y - u.y * v.x" i}} + addUserKnob {13 wnorm} + wnorm {{"w.x / sqrt(w.x**2+w.y**2+w.z**2)" i} {"w.y / sqrt(w.x**2+w.y**2+w.z**2)" i} {"w.z / sqrt(w.x**2+w.y**2+w.z**2)" i}} + addUserKnob {7 phi} + phi {{acos(u.x*v.x+u.y*v.y+u.z*v.z) i}} + addUserKnob {7 tt} + tt {{1-cos(phi) i}} + addUserKnob {7 s} + s {{-sin(phi) i}} + addUserKnob {7 d} + d {{cos(phi) i}} + } + Multiply { + channels rgb + value {{1/Rotate_Scale_Skew1.length i}} + name Multiply1 + xpos 133 + ypos -64 + } + Clamp { + channels rgb + name Clamp1 + xpos 133 + ypos -28 + } + Expression { + expr0 "parent.useAlpha && a==0.0 ? 0 : r" + expr1 "parent.useAlpha && a==0.0 ? 0 : g" + expr2 "parent.useAlpha && a==0.0 ? 0 : b" + name IgnoreOutsideAlpha1 + xpos 133 + ypos 12 + } + Shuffle { + alpha green + name Shuffle3 + xpos 133 + ypos 72 + } +push $N643cc60 + Grade { + blackpoint {{start i} {start i} {start i} {curve i}} + whitepoint {{end i} {end i} {end i} {curve i}} + black_clamp false + maskChannelInput -rgba.alpha + unpremult -rgba.alpha + name Start_End + xpos -312 + ypos -146 + addUserKnob {20 User} + addUserKnob {18 start} + start {0 0 0} + addUserKnob {18 end} + end {0 0 0} + } +set N61967c0 [stack 0] + Dot { + name Dot2 + xpos -141 + ypos -141 + } + Add { + channels rgb + value {{-Axis1.world_matrix.3} {-Axis1.world_matrix.7} {-Axis1.world_matrix.11} {curve}} + name Translate1 + xpos -175 + ypos -89 + } + ColorMatrix { + matrix { + {{Axis1.world_matrix.0} {Axis1.world_matrix.1} {Axis1.world_matrix.2}} + {{Axis1.world_matrix.4} {Axis1.world_matrix.5} {Axis1.world_matrix.6}} + {{Axis1.world_matrix.8} {Axis1.world_matrix.9} {Axis1.world_matrix.10}} + } + invert true + name Rotate_Scale_Skew3 + xpos -175 + ypos -61 + disable {{hasError x200 1}} + } + Expression { + expr0 "parent.useAlpha && a==0.0 ? 0 : r" + expr1 "parent.useAlpha && a==0.0 ? 0 : g" + expr2 "parent.useAlpha && a==0.0 ? 0 : b" + name IgnoreOutsideAlpha3 + xpos -175 + ypos -33 + } + Shuffle { + alpha blue + name Shuffle4 + xpos -175 + ypos 2 + } +push $N61967c0 + Expression { + expr0 "parent.useAlpha && a==0.0 ? 0 : r" + expr1 "parent.useAlpha && a==0.0 ? 0 : g" + expr2 "parent.useAlpha && a==0.0 ? 0 : b" + name IgnoreOutsideAlpha + xpos -312 + ypos -109 + } +set N6611630 [stack 0] + Shuffle { + alpha blue + name Z + xpos -312 + ypos -30 + } +push $N6611630 + Shuffle { + alpha green + name Y + xpos -412 + ypos -28 + } +push $N6611630 + Shuffle { + alpha red + name X + xpos -518 + ypos -28 + } + Switch { + inputs 5 + which {{parent.rampDirection i}} + name Switch3 + xpos -371 + ypos 72 + } + Grade { + channels alpha + whitepoint {{falloffType?falloff:0}} + white_clamp true + name Falloff + xpos -366 + ypos 124 + } +set N623a980 [stack 0] + Expression { + expr3 pow(a,parent.exp) + name Exponential + xpos -81 + ypos 229 + } +push $N623a980 + Expression { + expr3 clamp((a**3),0,1) + name Cubic + xpos -175 + ypos 228 + } +push $N623a980 + Expression { + expr3 clamp(pow2(a),0,1) + name Quadratic + xpos -269 + ypos 227 + } +push $N623a980 + Expression { + expr3 smoothstep(0,1,a) + name Smooth + xpos -366 + ypos 230 + } +push $N623a980 + NoOp { + name Linear + xpos -457 + ypos 231 + } +push $N623a980 + NoOp { + name None + xpos -557 + ypos 231 + } + Switch { + inputs 6 + which {{falloffType i}} + name Switch2 + xpos -366 + ypos 318 + } + Remove { + operation keep + channels alpha + name Remove1 + xpos -366 + ypos 378 + } + Shuffle { + in alpha + out alpha + name OutChannel + xpos -366 + ypos 439 + } +push $N64beaa0 + Dot { + name Dot1 + xpos -794 + ypos 527 + } + Copy { + inputs 2 + from0 -rgba.alpha + to0 -rgba.alpha + channels all + name Copy1 + xpos -366 + ypos 508 + } + Output { + name Output1 + xpos -366 + ypos 637 + } + Axis2 { + inputs 0 + rot_order {{parent.rot_order i}} + rotate {{parent.rotate i} {parent.rotate i} {parent.rotate i}} + pivot {{parent.rotateAround/2 i} {parent.rotateAround/2 i} {parent.rotateAround/2 i}} + name Axis1 + xpos -20 + ypos -93 + } +end_group diff --git a/gizmos/Lighting/ReLight_RS.gizmo b/gizmos/Lighting/ReLight_RS.gizmo new file mode 100644 index 0000000..25043db --- /dev/null +++ b/gizmos/Lighting/ReLight_RS.gizmo @@ -0,0 +1,1472 @@ +#! C:/Program Files/Nuke6.1v1/Nuke6.1.exe -nx +version 6.1 v1 +Gizmo { + inputs 3 + tile_color 0x85ff7fff + addUserKnob {20 "" l IrradRigTop} + addUserKnob {26 "" l "TOP LIGHT"} + addUserKnob {6 top_on l "Enable Top Light" -STARTLINE} + addUserKnob {7 scaleT l "Overall Brightness" R 0 10} + scaleT 6.4 + addUserKnob {26 ""} + addUserKnob {7 ambT l "Ambient Ratio" R -1 5} + ambT 0.5 + addUserKnob {7 tboT l "Top/Bottom Ratio" R -5 5} + tboT 1 + addUserKnob {7 lriT l "Left/Right Ratio" R -5 5} + lriT 1 + addUserKnob {26 ""} + addUserKnob {7 top_spread l Spread} + top_spread 0.57 + addUserKnob {18 top_gamma l Gamma R 0 5} + top_gamma {1 1 1} + addUserKnob {18 top_gain l Gain R 0 5} + top_gain {1 1 1} + addUserKnob {26 ""} + addUserKnob {6 top_shad l "Enable Top Shade" -STARTLINE} + top_shad true + addUserKnob {19 top_shad_cc l "Top Shade CC"} + top_shad_cc {0.2 1 0.9 1} + addUserKnob {7 top_shad_opac l "Top Shade Opacity"} + top_shad_opac 0.01 + addUserKnob {26 ""} + addUserKnob {30 rot_top l "Rotation X/Z"} + rot_top {220 -22} + addUserKnob {26 ""} + addUserKnob {20 "" l IrradRigBottom} + addUserKnob {26 "" l "BOTTOM LIGHT"} + addUserKnob {6 bottom_on l "Enable Bottom Light" -STARTLINE} + bottom_on true + addUserKnob {7 scaleB l "Overall Brightness" R 0 10} + scaleB 5 + addUserKnob {26 ""} + addUserKnob {7 ambB l "Ambient Ratio" R -1 5} + ambB -1 + addUserKnob {7 tboB l "Top/Bottom Ratio" R -5 5} + tboB 1 + addUserKnob {7 lriB l "Left/Right Ratio" R -5 5} + lriB 1 + addUserKnob {26 ""} + addUserKnob {7 bottom_spread l Spread} + bottom_spread 0.46 + addUserKnob {18 bottom_gamma l Gamma R 0 5} + bottom_gamma {1 1 1} + addUserKnob {18 bottom_gain l Gain R 0 5} + bottom_gain 1 + addUserKnob {26 ""} + addUserKnob {6 bottom_shad l "Enable Bottom Shade" -STARTLINE} + bottom_shad true + addUserKnob {19 bottom_shad_cc l "Bottom Shade CC"} + bottom_shad_cc 0.71 + addUserKnob {7 bottom_shad_opac l "Bottom Shade Opacity"} + bottom_shad_opac 0.04 + addUserKnob {26 ""} + addUserKnob {30 rot_bottom l "Rotation X/Z"} + rot_bottom {120 63} + addUserKnob {26 ""} + addUserKnob {20 "" l IrradRigLeft} + addUserKnob {26 "" l "LEFT LIGHT"} + addUserKnob {6 left_on l "Enable Left Light" -STARTLINE} + addUserKnob {7 scaleL l "Overall Brightness" R 0 10} + scaleL 2.4 + addUserKnob {26 ""} + addUserKnob {7 ambL l "Ambient Ratio" R -1 5} + ambL 1 + addUserKnob {7 tboL l "Top/Bottom Ratio" R -5 5} + tboL 1 + addUserKnob {7 lriL l "Left/Right Ratio" R -5 5} + lriL 1 + addUserKnob {26 ""} + addUserKnob {7 left_spread l Spread} + left_spread 0.62 + addUserKnob {18 left_gamma l Gamma R 0 5} + left_gamma 1 + addUserKnob {18 left_gain l Gain R 0 5} + left_gain 5 + addUserKnob {26 ""} + addUserKnob {6 left_shad l "Enable Left Shade" -STARTLINE} + left_shad true + addUserKnob {19 left_shad_cc l "Left Shade CC"} + left_shad_cc 0.5 + addUserKnob {7 left_shad_opac l "Left Shade Opacity"} + left_shad_opac 0.01 + addUserKnob {26 ""} + addUserKnob {30 rot_left l "Rotation Y/Z"} + addUserKnob {26 ""} + addUserKnob {20 "" l IrradRigRight} + addUserKnob {26 "" l "RIGHT LIGHT"} + addUserKnob {6 right_on l "Enable Right Light" -STARTLINE} + addUserKnob {7 scaleR l "Overall Brightness" R 0 10} + scaleR 1 + addUserKnob {26 ""} + addUserKnob {7 ambR l "Ambient Ratio" R -1 5} + ambR 0.4 + addUserKnob {7 tboR l "Top/Bottom Ratio" R -5 5} + tboR 1 + addUserKnob {7 lriR l "Left/Right Ratio" R -5 5} + lriR 1 + addUserKnob {26 ""} + addUserKnob {7 right_spread l Spread} + right_spread 0.775 + addUserKnob {18 right_gamma l Gamma R 0 5} + right_gamma 1 + addUserKnob {18 right_gain l Gain R 0 5} + right_gain 1 + addUserKnob {26 ""} + addUserKnob {6 right_shad l "Enable Right Shade" -STARTLINE} + right_shad true + addUserKnob {19 right_shad_cc l "Right Shade CC"} + right_shad_cc 1 + addUserKnob {7 right_shad_opac l "Right Shade Opacity"} + right_shad_opac 0.085 + addUserKnob {26 ""} + addUserKnob {30 rot_right l "Rotation Y/Z"} + rot_right {-100 0} + addUserKnob {26 ""} + addUserKnob {20 "" l IrradRigGeneral} + addUserKnob {26 "" l "ROTATE RIG"} + addUserKnob {13 rot_rig l "Rotate Rig"} + rot_rig {28 900 0} + addUserKnob {26 "" l TEXTURE} + addUserKnob {6 Ccol l "Texture Pass" -STARTLINE} + Ccol true + addUserKnob {19 Ccol_cc l "Texture Pass CC" R 0 5} + Ccol_cc 1 +} + BackdropNode { + inputs 0 + name RIGHT_SHADOW + tile_color 0x6a808000 + xpos -1046 + ypos 437 + bdwidth 200 + bdheight 385 + } + BackdropNode { + inputs 0 + name LEFT_SHADOW + tile_color 0x6a808000 + xpos -1680 + ypos 442 + bdwidth 200 + bdheight 385 + } + BackdropNode { + inputs 0 + name BOTTOM_SHADOW + tile_color 0x6a808000 + xpos -2296 + ypos 431 + bdwidth 200 + bdheight 385 + } + BackdropNode { + inputs 0 + name TOP_SHADOW + tile_color 0x6a808000 + xpos -2907 + ypos 436 + bdwidth 200 + bdheight 385 + } + BackdropNode { + inputs 0 + name ROTATE_RIG + tile_color 0x6a806f00 + xpos -731 + ypos -298 + bdwidth 185 + bdheight 248 + } + BackdropNode { + inputs 0 + name THREE_D_BACKGROUND_RIGHT_LIGHT + tile_color 0xff00 + xpos -800 + ypos 1151 + bdwidth 280 + bdheight 266 + } + BackdropNode { + inputs 0 + name THREE_D_BACKGROUND_LEFT_LIGHT + tile_color 0xff00 + xpos -1416 + ypos 1148 + bdwidth 280 + bdheight 266 + } + BackdropNode { + inputs 0 + name RIGHT_LIGHT_CENTERING + tile_color 0x61806000 + xpos -737 + ypos 471 + bdwidth 182 + bdheight 118 + } + BackdropNode { + inputs 0 + name RIGHT_LIGHT_ROTATION + tile_color 0x64807300 + xpos -776 + ypos 313 + bdwidth 257 + bdheight 140 + } + BackdropNode { + inputs 0 + name RIGHT_LIGHT + tile_color 0x388e8e00 + xpos -802 + ypos 256 + bdwidth 323 + bdheight 597 + } + BackdropNode { + inputs 0 + name THREE_D_BACKGROUND_BOTTOM_LIGHT + tile_color 0xff00 + xpos -2048 + ypos 1131 + bdwidth 280 + bdheight 266 + } + BackdropNode { + inputs 0 + name LEFT_LIGHT_CENTERING + tile_color 0x61806000 + xpos -1372 + ypos 476 + bdwidth 182 + bdheight 118 + } + BackdropNode { + inputs 0 + name LEFT_LIGHT_ROTATION + tile_color 0x64807300 + xpos -1411 + ypos 318 + bdwidth 257 + bdheight 140 + } + BackdropNode { + inputs 0 + name LEFT_LIGHT + tile_color 0x388e8e00 + xpos -1437 + ypos 261 + bdwidth 344 + bdheight 599 + } + BackdropNode { + inputs 0 + name TOP_LIGHT_CENTERING + tile_color 0x61806000 + xpos -2629 + ypos 468 + bdwidth 182 + bdheight 118 + } + BackdropNode { + inputs 0 + name BOTTOM_LIGHT_CENTERING + tile_color 0x61806000 + xpos -1997 + ypos 468 + bdwidth 189 + bdheight 116 + } + BackdropNode { + inputs 0 + name TOP_LIGHT_ROTATION + tile_color 0x64807300 + xpos -2668 + ypos 310 + bdwidth 257 + bdheight 140 + } + BackdropNode { + inputs 0 + name TOP_LIGHT + tile_color 0x388e8e00 + xpos -2694 + ypos 257 + bdwidth 373 + bdheight 611 + } + BackdropNode { + inputs 0 + name BOTTOM_LIGHT_ROTATION + tile_color 0x64807300 + xpos -2025 + ypos 302 + bdwidth 257 + bdheight 140 + } + BackdropNode { + inputs 0 + name BOTTOM_LIGHT + tile_color 0x637c8000 + xpos -2064 + ypos 257 + bdwidth 352 + bdheight 604 + } + BackdropNode { + inputs 0 + name THREE_D_BACKGROUND_TOP_LIGHT + tile_color 0xff00 + xpos -2669 + ypos 1128 + bdwidth 280 + bdheight 266 + } + Camera { + inputs 0 + file_menu Axis/File + snap_menu Axis/Snap + focal 14 + name Camera1 + tile_color 0x9c000000 + gl_color 0xff0000 + label "OUR POV" + xpos -1599 + ypos 1731 + } + Read { + inputs 0 + file /Volumes/filmsoup/fxphd/class/nuk302/nuk302-class10/Normals/Nuke_MC_demo03_25Lighting/footage/singleLight_900.exr + format "1024 512 0 0 1024 512 1 " + proxy_format "666 401 0 0 666 401 1 lighting_proxy_1" + version 1 + colorspace linear + name Read2 + label (linear) + xpos -1628 + ypos 1102 + } +set N6f8b420 [stack 0] + Mirror { + Horizontal true + name Mirror4 + tile_color 0xa57aaa00 + xpos -774 + ypos 1332 + } + Axis { + inputs 0 + file_menu Axis/File + snap_menu Axis/Snap + rotate {{-(parent.rot_rig.x)} {-(parent.rot_rig.y) i} {parent.rot_rig.z i}} + name Axis5 + tile_color 0x9c000000 + xpos -1650 + ypos 962 + } +set N6f8bb70 [stack 0] + Dot { + name Dot9 + xpos -630 + ypos 1022 + } + Axis { + file_menu Axis/File + snap_menu Axis/Snap + rotate {0 {-(parent.rot_right.u)} {parent.rot_right.v i}} + name Axis4 + tile_color 0x9c000000 + xpos -654 + ypos 1239 + } + SphereObj { + inputs 2 + name ENV_SPHERE3 + xpos -664 + ypos 1332 + disable {{parent.right_on==0 i}} + } +push $N6f8b420 + Mirror { + Horizontal true + name Mirror3 + tile_color 0xa57aaa00 + xpos -1392 + ypos 1321 + } +push $N6f8bb70 + Dot { + name Dot12 + xpos -1248 + ypos 1096 + } + Axis { + file_menu Axis/File + snap_menu Axis/Snap + rotate {0 {-(parent.rot_left.u)} {parent.rot_left.v i}} + name Axis3 + tile_color 0x9c000000 + xpos -1272 + ypos 1230 + } + SphereObj { + inputs 2 + name ENV_SPHERE2 + xpos -1282 + ypos 1321 + disable {{parent.left_on==0 i}} + } +push $N6f8b420 + Mirror { + Horizontal true + name Mirror2 + tile_color 0xa57aaa00 + xpos -2019 + ypos 1312 + } +push $N6f8bb70 + Dot { + name Dot11 + xpos -1878 + ypos 1090 + } + Axis { + file_menu Axis/File + snap_menu Axis/Snap + rotate {{-(parent.rot_bottom.u) i} {curve} {parent.rot_bottom.v i}} + name Axis1 + tile_color 0x9c000000 + xpos -1902 + ypos 1208 + } + SphereObj { + inputs 2 + name ENV_SPHERE1 + xpos -1909 + ypos 1312 + disable {{parent.bottom_on==0 i}} + } +push $N6f8b420 + Mirror { + Horizontal true + name Mirror1 + tile_color 0xa57aaa00 + xpos -2640 + ypos 1288 + } +push $N6f8bb70 + Dot { + name Dot10 + xpos -2484 + ypos 1022 + } + Axis { + file_menu Axis/File + snap_menu Axis/Snap + rotate {{-(parent.rot_top.u) i} 0 {parent.rot_top.v}} + name Axis2 + tile_color 0x9c000000 + xpos -2508 + ypos 1183 + } + SphereObj { + inputs 2 + name ENV_SPHERE + note_font "Helvetica bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + xpos -2518 + ypos 1289 + disable {{parent.top_on==0 i}} + } + Scene { + inputs 5 + name Scene1 + tile_color 0x9c000000 + xpos -1272 + ypos 1651 + } + Input { + inputs 0 + name alpha + xpos -436 + ypos -717 + number 2 + } + Clamp { + channels alpha + name CLAMP_ALPHA + tile_color 0x7aa9ff00 + xpos -436 + ypos -649 + } +set N7b94870 [stack 0] + Input { + inputs 0 + name normals + xpos -656 + ypos -556 + } +set N7b94ae0 [stack 0] + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy2 + xpos -436 + ypos -561 + } +set N7b94d50 [stack 0] +push $N7b94ae0 +add_layer {o_Nobj o_Nobj.red o_Nobj.green o_Nobj.blue} + ShuffleCopy { + inputs 2 + in alpha + in2 o_Nobj + name ShuffleCopy1 + xpos -741 + ypos -462 + disable true + } +push $N7b94870 + Input { + inputs 0 + name aov + xpos -210 + ypos -711 + number 1 + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy1 + selected true + xpos -210 + ypos -649 + } +add_layer {o_occ o_occ.red o_occ.green o_occ.blue} + Shuffle { + in o_occ + out rgb + name __USE_OCC__ + tile_color 0x9e3c6300 + xpos -210 + ypos 704 + disable true + } + Unpremult { + name Unpremult6 + xpos -210 + ypos 994 + } +set N7c46b80 [stack 0] +push $N7c46b80 +push $N7b94d50 + Dot { + name Dot8 + xpos -402 + ypos -179 + } + Expression { + temp_name0 input + temp_expr0 parent.rot_rig.z + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z8 + xpos -687 + ypos -183 + } + Expression { + temp_name0 input2 + temp_expr0 parent.rot_rig.x + temp_name1 theta + temp_expr1 radians(input2) + expr1 "cos(theta)*g + sin(theta)*b" + expr2 "-sin(theta)*g + cos(theta)*b" + name ROT_X6 + xpos -687 + ypos -159 + } + Expression { + temp_name0 input3 + temp_expr0 parent.rot_rig.y + temp_name1 epsilon + temp_expr1 radians(input3) + expr0 "cos(epsilon)*r - sin(epsilon)*b" + expr2 "sin(epsilon)*r + cos(epsilon)*b" + name ROT_Y6 + xpos -687 + ypos -135 + } + Dot { + name Dot7 + xpos -653 + ypos 176 + } +set N7c477b0 [stack 0] + Expression { + temp_name0 input + temp_expr0 parent.rot_right.v + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z6 + xpos -687 + ypos 361 + } + Expression { + temp_name0 input3 + temp_expr0 parent.rot_right.u + temp_name1 epsilon + temp_expr1 radians(input3) + expr0 "cos(epsilon)*r - sin(epsilon)*b" + expr2 "sin(epsilon)*r + cos(epsilon)*b" + name ROT_Y4 + xpos -687 + ypos 399 + } + Expression { + temp_name0 input + temp_expr0 -42 + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z7 + xpos -687 + ypos 502 + } + Expression { + temp_name0 input2 + temp_expr0 -30 + temp_name1 theta + temp_expr1 radians(input2) + expr1 "cos(theta)*g + sin(theta)*b" + expr2 "-sin(theta)*g + cos(theta)*b" + name ROT_X4 + xpos -687 + ypos 526 + } + Expression { + temp_name0 input3 + temp_expr0 26 + temp_name1 epsilon + temp_expr1 radians(input3) + expr0 "cos(epsilon)*r - sin(epsilon)*b" + expr2 "sin(epsilon)*r + cos(epsilon)*b" + name ROT_Y5 + xpos -687 + ypos 550 + } +set N7c483e0 [stack 0] + Expression { + temp_name0 scaleT + temp_expr0 parent.right_shad_opac + temp_name1 ambT + temp_expr1 1 + temp_name2 tboT + temp_expr2 1 + temp_name3 lriT + temp_expr3 1 + expr0 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr1 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr2 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr3 a + name Irrad_RENDER_RightShad + tile_color 0xc6595900 + label RIGHT_SHADE + note_font "Helvetica bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 24 + xpos -984 + ypos 534 + addUserKnob {20 "" l Irradiance} + } + CCorrect { + gain {{1/(parent.right_shad_cc.r+0.00001) i} {1/(parent.right_shad_cc.g+0.00001) i} {1/(parent.right_shad_cc.b+0.00001) i} 1} + mix {{parent.right_shad_cc.a}} + name CCorrect9 + tile_color 0x7aa9ff00 + xpos -984 + ypos 637 + } + Premult { + name Premult8 + xpos -984 + ypos 697 + } + Dot { + name Dot16 + xpos -950 + ypos 789 + } +push $N7c483e0 + Expression { + temp_name0 scaleR + temp_expr0 parent.scaleR + temp_name1 ambR + temp_expr1 parent.ambR + temp_name2 tboR + temp_expr2 parent.tboR + temp_name3 lriR + temp_expr3 parent.lriR + expr0 "0.429043*scaleR*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleR*-0.120835 *pow2(b))+0.886227*scaleR*ambR*0.204266-(0.247708*scaleR*-0.120835 )+2*0.429043*((scaleR*0.286652 *r*g)+(scaleR*0.144743*r*b)+(scaleR*0.207198*g*b))+2*0.511664*((scaleR*lriR*0.178752*r)+(scaleR*tboR*0.262809*g)+(scaleR*0.129309*b))" + expr1 "0.429043*scaleR*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleR*-0.120835 *pow2(b))+0.886227*scaleR*ambR*0.204266-(0.247708*scaleR*-0.120835 )+2*0.429043*((scaleR*0.286652 *r*g)+(scaleR*0.144743*r*b)+(scaleR*0.207198*g*b))+2*0.511664*((scaleR*lriR*0.178752*r)+(scaleR*tboR*0.262809*g)+(scaleR*0.129309*b))" + expr2 "0.429043*scaleR*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleR*-0.120835 *pow2(b))+0.886227*scaleR*ambR*0.204266-(0.247708*scaleR*-0.120835 )+2*0.429043*((scaleR*0.286652 *r*g)+(scaleR*0.144743*r*b)+(scaleR*0.207198*g*b))+2*0.511664*((scaleR*lriR*0.178752*r)+(scaleR*tboR*0.262809*g)+(scaleR*0.129309*b))" + expr3 a + name Irrad_RENDER_RightLight + tile_color 0xc6595900 + xpos -687 + ypos 621 + addUserKnob {20 "" l Irradiance} + } + Group { + name PerlinSpread + help "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched." + tile_color 0xcc9d6d00 + xpos -687 + ypos 665 + addUserKnob {20 "" l User} + addUserKnob {7 realGain l "Inverse Perlin Gain function" t "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched."} + realGain {{parent.right_spread}} + } + Input { + inputs 0 + name Input1 + xpos 191 + ypos -85 + } + Expression { + temp_name0 gain + temp_expr0 "1 - parent.realGain" + temp_name1 lum + temp_expr1 "0.2125*Br + 0.7154*Bg + 0.0721*Bb" + temp_name2 val + temp_expr2 .5*((lum<.5)?((1-gain)>0?pow(2*lum,log(1-gain)/log(0.5)):0):2-((1-gain)>0?pow(2-2*lum,log(1-gain)/log(0.5)):0)) + temp_name3 inv + expr0 r>1?r:r*(val/(lum+0.00001)) + expr1 g>1?g:g*(val/(lum+0.00001)) + expr2 b>1?b:b*(val/(lum+0.00001)) + name KPGain + tile_color 0xd47f3b00 + label "TRUE GAIN\nFUNCTION" + selected true + xpos 121 + ypos -19 + addUserKnob {20 "" l User} + } + Output { + name Output1 + xpos 191 + ypos 137 + } + end_group + CCorrect { + gamma {{parent.right_gamma.r i} {parent.right_gamma.g i} {parent.right_gamma.b i} 1} + gain {{parent.right_gain.r i} {parent.right_gain.g i} {parent.right_gain.b} 1} + name CCorrect3 + tile_color 0x7aa9ff00 + xpos -687 + ypos 704 + } + Premult { + name Premult3 + xpos -687 + ypos 738 + } + Merge { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.alpha} + operation from + name Merge8 + tile_color 0x4b5ec600 + xpos -687 + ypos 786 + disable {{parent.right_shad.0==0}} + } + Clamp { + channels rgba + maximum_enable false + name CLAMP_BLACKS4 + tile_color 0x7aa9ff00 + xpos -687 + ypos 825 + } +push $N7c477b0 + Dot { + name Dot6 + xpos -1288 + ypos 176 + } +set N7c4a870 [stack 0] + Expression { + temp_name0 input + temp_expr0 parent.rot_left.v + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z4 + xpos -1322 + ypos 366 + } + Expression { + temp_name0 input3 + temp_expr0 parent.rot_left.u + temp_name1 epsilon + temp_expr1 radians(input3) + expr0 "cos(epsilon)*r - sin(epsilon)*b" + expr2 "sin(epsilon)*r + cos(epsilon)*b" + name ROT_Y3 + xpos -1322 + ypos 404 + } + Expression { + temp_name0 input + temp_expr0 138 + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z5 + xpos -1322 + ypos 507 + } + Expression { + temp_name0 input2 + temp_expr0 30 + temp_name1 theta + temp_expr1 radians(input2) + expr1 "cos(theta)*g + sin(theta)*b" + expr2 "-sin(theta)*g + cos(theta)*b" + name ROT_X5 + xpos -1322 + ypos 531 + } + Expression { + temp_name0 input3 + temp_expr0 26 + temp_name1 epsilon + temp_expr1 radians(input3) + expr0 "cos(epsilon)*r - sin(epsilon)*b" + expr2 "sin(epsilon)*r + cos(epsilon)*b" + name ROT_Y2 + xpos -1322 + ypos 555 + } +set N7c4b4a0 [stack 0] + Expression { + temp_name0 scaleT + temp_expr0 parent.left_shad_opac + temp_name1 ambT + temp_expr1 1 + temp_name2 tboT + temp_expr2 1 + temp_name3 lriT + temp_expr3 1 + expr0 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr1 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr2 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr3 a + name Irrad_RENDER_LeftShad + tile_color 0xc6595900 + label LEFT_SHADE + note_font "Helvetica bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 24 + xpos -1618 + ypos 542 + addUserKnob {20 "" l Irradiance} + } + CCorrect { + gain {{1/(parent.left_shad_cc.r+0.00001) i} {1/(parent.left_shad_cc.g+0.00001) i} {1/(parent.left_shad_cc.b+0.00001) i} 1} + mix {{parent.left_shad_cc.a}} + name CCorrect8 + tile_color 0x7aa9ff00 + xpos -1618 + ypos 642 + } + Premult { + name Premult7 + xpos -1618 + ypos 702 + } + Dot { + name Dot15 + xpos -1584 + ypos 803 + } +push $N7c4b4a0 + Expression { + temp_name0 scaleL + temp_expr0 parent.scaleL + temp_name1 ambL + temp_expr1 parent.ambL + temp_name2 tboL + temp_expr2 parent.tboL + temp_name3 lriL + temp_expr3 parent.lriL + expr0 "0.429043*scaleL*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleL*-0.120835 *pow2(b))+0.886227*scaleL*ambL*0.204266-(0.247708*scaleL*-0.120835 )+2*0.429043*((scaleL*0.286652 *r*g)+(scaleL*0.144743*r*b)+(scaleL*0.207198*g*b))+2*0.511664*((scaleL*lriL*0.178752*r)+(scaleL*tboL*0.262809*g)+(scaleL*0.129309*b))" + expr1 "0.429043*scaleL*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleL*-0.120835 *pow2(b))+0.886227*scaleL*ambL*0.204266-(0.247708*scaleL*-0.120835 )+2*0.429043*((scaleL*0.286652 *r*g)+(scaleL*0.144743*r*b)+(scaleL*0.207198*g*b))+2*0.511664*((scaleL*lriL*0.178752*r)+(scaleL*tboL*0.262809*g)+(scaleL*0.129309*b))" + expr2 "0.429043*scaleL*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleL*-0.120835 *pow2(b))+0.886227*scaleL*ambL*0.204266-(0.247708*scaleL*-0.120835 )+2*0.429043*((scaleL*0.286652 *r*g)+(scaleL*0.144743*r*b)+(scaleL*0.207198*g*b))+2*0.511664*((scaleL*lriL*0.178752*r)+(scaleL*tboL*0.262809*g)+(scaleL*0.129309*b))" + expr3 a + name Irrad_RENDER_LeftLight + tile_color 0xc6595900 + xpos -1322 + ypos 625 + addUserKnob {20 "" l Irradiance} + } + Group { + name PerlinSpread1 + help "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched." + tile_color 0xcc9d6d00 + xpos -1322 + ypos 666 + addUserKnob {20 "" l User} + addUserKnob {7 realGain l "Inverse Perlin Gain function" t "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched."} + realGain {{parent.left_spread i}} + } + Input { + inputs 0 + name Input1 + xpos 191 + ypos -85 + } + Expression { + temp_name0 gain + temp_expr0 "1 - parent.realGain" + temp_name1 lum + temp_expr1 "0.2125*Br + 0.7154*Bg + 0.0721*Bb" + temp_name2 val + temp_expr2 .5*((lum<.5)?((1-gain)>0?pow(2*lum,log(1-gain)/log(0.5)):0):2-((1-gain)>0?pow(2-2*lum,log(1-gain)/log(0.5)):0)) + temp_name3 inv + expr0 r>1?r:r*(val/(lum+0.00001)) + expr1 g>1?g:g*(val/(lum+0.00001)) + expr2 b>1?b:b*(val/(lum+0.00001)) + name KPGain + tile_color 0xd47f3b00 + label "TRUE GAIN\nFUNCTION" + selected true + xpos 121 + ypos -19 + addUserKnob {20 "" l User} + } + Output { + name Output1 + xpos 191 + ypos 137 + } + end_group + CCorrect { + gamma {{parent.left_gamma.r i} {parent.left_gamma.g i} {parent.left_gamma.b i} 1} + gain {{parent.left_gain.r i} {parent.left_gain.g i} {parent.left_gain.b} 1} + name CCorrect2 + tile_color 0x7aa9ff00 + xpos -1322 + ypos 706 + } + Premult { + name Premult2 + xpos -1322 + ypos 743 + } + Merge { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.alpha} + operation from + name Merge7 + tile_color 0x4b5ec600 + xpos -1322 + ypos 800 + disable {{parent.left_shad.0==0}} + } + Clamp { + channels rgba + maximum_enable false + name CLAMP_BLACKS3 + tile_color 0x7aa9ff00 + xpos -1322 + ypos 835 + } +push $N7c4a870 + Dot { + name Dot4 + xpos -1895 + ypos 176 + } +set N7d39a70 [stack 0] + Expression { + temp_name0 input + temp_expr0 parent.rot_bottom.v + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z3 + xpos -1929 + ypos 362 + } + Expression { + temp_name0 input2 + temp_expr0 parent.rot_bottom.u + temp_name1 theta + temp_expr1 radians(input2) + expr1 "cos(theta)*g + sin(theta)*b" + expr2 "-sin(theta)*g + cos(theta)*b" + name ROT_X3 + xpos -1929 + ypos 386 + } + Expression { + temp_name0 input + temp_expr0 214 + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z2 + xpos -1929 + ypos 496 + } + Expression { + temp_name0 input2 + temp_expr0 -22 + temp_name1 theta + temp_expr1 radians(input2) + expr1 "cos(theta)*g + sin(theta)*b" + expr2 "-sin(theta)*g + cos(theta)*b" + name ROT_X2 + xpos -1929 + ypos 520 + } + Expression { + temp_name0 input3 + temp_expr0 33 + temp_name1 epsilon + temp_expr1 radians(input3) + expr0 "cos(epsilon)*r - sin(epsilon)*b" + expr2 "sin(epsilon)*r + cos(epsilon)*b" + name ROT_Y1 + xpos -1929 + ypos 544 + } +set N7d3a6a0 [stack 0] + Expression { + temp_name0 scaleT + temp_expr0 parent.bottom_shad_opac + temp_name1 ambT + temp_expr1 1 + temp_name2 tboT + temp_expr2 1 + temp_name3 lriT + temp_expr3 1 + expr0 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr1 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr2 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr3 a + name Irrad_RENDER_BottomShad + tile_color 0xc6595900 + label BOTTOM_SHADE + note_font "Helvetica bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 24 + xpos -2234 + ypos 531 + addUserKnob {20 "" l Irradiance} + } + CCorrect { + gain {{1/(parent.bottom_shad_cc.r+0.00001) i} {1/(parent.bottom_shad_cc.g+0.00001) i} {1/(parent.bottom_shad_cc.b+0.00001) i} 1} + mix {{parent.bottom_shad_cc.a}} + name CCorrect7 + tile_color 0x7aa9ff00 + xpos -2234 + ypos 631 + } + Premult { + name Premult5 + xpos -2234 + ypos 691 + } + Dot { + name Dot14 + xpos -2200 + ypos 792 + } +push $N7d3a6a0 + Expression { + temp_name0 scaleT + temp_expr0 parent.scaleB + temp_name1 ambT + temp_expr1 parent.ambB + temp_name2 tboT + temp_expr2 parent.tboB + temp_name3 lriT + temp_expr3 parent.lriB + expr0 "0.429043*scaleB*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleB*-0.120835 *pow2(b))+0.886227*scaleB*ambB*0.204266-(0.247708*scaleB*-0.120835 )+2*0.429043*((scaleB*0.286652 *r*g)+(scaleB*0.144743*r*b)+(scaleB*0.207198*g*b))+2*0.511664*((scaleB*lriB*0.178752*r)+(scaleB*tboB*0.262809*g)+(scaleB*0.129309*b))" + expr1 "0.429043*scaleB*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleB*-0.120835 *pow2(b))+0.886227*scaleB*ambB*0.204266-(0.247708*scaleB*-0.120835 )+2*0.429043*((scaleB*0.286652 *r*g)+(scaleB*0.144743*r*b)+(scaleB*0.207198*g*b))+2*0.511664*((scaleB*lriB*0.178752*r)+(scaleB*tboB*0.262809*g)+(scaleB*0.129309*b))" + expr2 "0.429043*scaleB*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleB*-0.120835 *pow2(b))+0.886227*scaleB*ambB*0.204266-(0.247708*scaleB*-0.120835 )+2*0.429043*((scaleB*0.286652 *r*g)+(scaleB*0.144743*r*b)+(scaleB*0.207198*g*b))+2*0.511664*((scaleB*lriB*0.178752*r)+(scaleB*tboB*0.262809*g)+(scaleB*0.129309*b))" + expr3 a + name Irrad_RENDER_BottomLight + tile_color 0xc6595900 + xpos -1929 + ypos 632 + addUserKnob {20 "" l Irradiance} + } + Group { + name PerlinSpread2 + help "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched." + tile_color 0xcc9d6d00 + xpos -1929 + ypos 667 + addUserKnob {20 "" l User} + addUserKnob {7 realGain l "Inverse Perlin Gain function" t "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched."} + realGain {{parent.bottom_spread i}} + } + Input { + inputs 0 + name Input1 + xpos 191 + ypos -85 + } + Expression { + temp_name0 gain + temp_expr0 "1 - parent.realGain" + temp_name1 lum + temp_expr1 "0.2125*Br + 0.7154*Bg + 0.0721*Bb" + temp_name2 val + temp_expr2 .5*((lum<.5)?((1-gain)>0?pow(2*lum,log(1-gain)/log(0.5)):0):2-((1-gain)>0?pow(2-2*lum,log(1-gain)/log(0.5)):0)) + temp_name3 inv + expr0 r>1?r:r*(val/(lum+0.00001)) + expr1 g>1?g:g*(val/(lum+0.00001)) + expr2 b>1?b:b*(val/(lum+0.00001)) + name KPGain + tile_color 0xd47f3b00 + label "TRUE GAIN\nFUNCTION" + selected true + xpos 121 + ypos -19 + addUserKnob {20 "" l User} + } + Output { + name Output1 + xpos 191 + ypos 137 + } + end_group + CCorrect { + gamma {{parent.bottom_gamma.r i} {parent.bottom_gamma.g i} {parent.bottom_gamma.b i} 1} + gain {{parent.bottom_gain.r i} {parent.bottom_gain.g i} {parent.bottom_gain.b} 1} + name CCorrect4 + tile_color 0x7aa9ff00 + xpos -1929 + ypos 711 + } + Premult { + name Premult1 + xpos -1929 + ypos 735 + } + Merge { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.alpha} + operation from + name Merge6 + tile_color 0x4b5ec600 + xpos -1929 + ypos 789 + disable {{parent.bottom_shad.0==0}} + } + Clamp { + channels rgba + maximum_enable false + name CLAMP_BLACKS2 + tile_color 0x7aa9ff00 + xpos -1929 + ypos 833 + } +push $N7d39a70 + Dot { + name Dot3 + xpos -2545 + ypos 176 + } + Expression { + temp_name0 input + temp_expr0 parent.rot_top.v + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z1 + xpos -2579 + ypos 358 + } + Expression { + temp_name0 input2 + temp_expr0 parent.rot_top.u + temp_name1 theta + temp_expr1 radians(input2) + expr1 "cos(theta)*g + sin(theta)*b" + expr2 "-sin(theta)*g + cos(theta)*b" + name ROT_X1 + xpos -2579 + ypos 382 + } + Expression { + temp_name0 input + temp_expr0 34 + temp_name1 sigma + temp_expr1 radians(input) + expr0 "cos(sigma)*r + sin(sigma)*g" + expr1 "-sin(sigma)*r + cos(sigma)*g" + name ROT_Z + xpos -2579 + ypos 499 + } + Expression { + temp_name0 input2 + temp_expr0 -22 + temp_name1 theta + temp_expr1 radians(input2) + expr1 "cos(theta)*g + sin(theta)*b" + expr2 "-sin(theta)*g + cos(theta)*b" + name ROT_X + xpos -2579 + ypos 523 + } + Expression { + temp_name0 input3 + temp_expr0 33 + temp_name1 epsilon + temp_expr1 radians(input3) + expr0 "cos(epsilon)*r - sin(epsilon)*b" + expr2 "sin(epsilon)*r + cos(epsilon)*b" + name ROT_Y + xpos -2579 + ypos 547 + } +set N7d3d760 [stack 0] + Expression { + temp_name0 scaleT + temp_expr0 parent.top_shad_opac + temp_name1 ambT + temp_expr1 1 + temp_name2 tboT + temp_expr2 1 + temp_name3 lriT + temp_expr3 1 + expr0 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr1 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr2 0.429043*scaleT*0.077106*(pow2(r)-pow2(g))+(0.743125*scaleT*0.07674*pow2(b))+0.886227*scaleT*ambT*3.34088-(0.247708*scaleT*0.07674)+2*0.429043*((scaleT*-0.190799*r*g)+(scaleT*-0.093763*r*b)+(scaleT*-0.127488*g*b))+2*0.511664*((scaleT*lriT*-0.149453*r)+(scaleT*tboT*-0.185939*g)+(scaleT*-0.093958*b)) + expr3 a + name Irrad_RENDER_TopShad + tile_color 0xc6595900 + label TOP_SHADE + note_font "Helvetica bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold Bold" + note_font_size 24 + xpos -2845 + ypos 531 + addUserKnob {20 "" l Irradiance} + } + CCorrect { + gain {{1/(parent.top_shad_cc.r+0.00001) i} {1/(parent.top_shad_cc.g+0.00001) i} {1/(parent.top_shad_cc.b+0.00001) i} 1} + mix {{parent.top_shad_cc.a}} + name CCorrect6 + tile_color 0x7aa9ff00 + xpos -2845 + ypos 636 + } + Premult { + name Premult4 + xpos -2845 + ypos 703 + } + Dot { + name Dot5 + xpos -2811 + ypos 801 + } +push $N7d3d760 + Expression { + temp_name0 scaleT + temp_expr0 parent.scaleT + temp_name1 ambT + temp_expr1 parent.ambT + temp_name2 tboT + temp_expr2 parent.tboT + temp_name3 lriT + temp_expr3 parent.lriT + expr0 "0.429043*scaleT*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleT*-0.120835 *pow2(b))+0.886227*scaleT*ambT*0.204266-(0.247708*scaleT*-0.120835 )+2*0.429043*((scaleT*0.286652 *r*g)+(scaleT*0.144743*r*b)+(scaleT*0.207198*g*b))+2*0.511664*((scaleT*lriT*0.178752*r)+(scaleT*tboT*0.262809*g)+(scaleT*0.129309*b))" + expr1 "0.429043*scaleT*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleT*-0.120835 *pow2(b))+0.886227*scaleT*ambT*0.204266-(0.247708*scaleT*-0.120835 )+2*0.429043*((scaleT*0.286652 *r*g)+(scaleT*0.144743*r*b)+(scaleT*0.207198*g*b))+2*0.511664*((scaleT*lriT*0.178752*r)+(scaleT*tboT*0.262809*g)+(scaleT*0.129309*b))" + expr2 "0.429043*scaleT*-0.115481*(pow2(r)-pow2(g))+(0.743125*scaleT*-0.120835 *pow2(b))+0.886227*scaleT*ambT*0.204266-(0.247708*scaleT*-0.120835 )+2*0.429043*((scaleT*0.286652 *r*g)+(scaleT*0.144743*r*b)+(scaleT*0.207198*g*b))+2*0.511664*((scaleT*lriT*0.178752*r)+(scaleT*tboT*0.262809*g)+(scaleT*0.129309*b))" + expr3 a + name Irrad_RENDER_TopLight + tile_color 0xc6595900 + xpos -2579 + ypos 609 + addUserKnob {20 "" l Irradiance} + } + Group { + name PerlinSpread3 + help "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched." + tile_color 0xcc9d6d00 + xpos -2579 + ypos 660 + addUserKnob {20 "" l User} + addUserKnob {7 realGain l "Inverse Perlin Gain function" t "This is an implementation of Ken Perlin's gain function. It boosts micro-contrast (acutance, in photographic terms) without clipping. When set to 0.5, it has no effect. When >0.5, gain is boosted; when <.5, gain is muted. Only luminance is affected; not hue nor saturation. Superwhites remain untouched."} + realGain {{parent.top_spread i}} + } + Input { + inputs 0 + name Input1 + xpos 191 + ypos -85 + } + Expression { + temp_name0 gain + temp_expr0 "1 - parent.realGain" + temp_name1 lum + temp_expr1 "0.2125*Br + 0.7154*Bg + 0.0721*Bb" + temp_name2 val + temp_expr2 .5*((lum<.5)?((1-gain)>0?pow(2*lum,log(1-gain)/log(0.5)):0):2-((1-gain)>0?pow(2-2*lum,log(1-gain)/log(0.5)):0)) + temp_name3 inv + expr0 r>1?r:r*(val/(lum+0.00001)) + expr1 g>1?g:g*(val/(lum+0.00001)) + expr2 b>1?b:b*(val/(lum+0.00001)) + name KPGain + tile_color 0xd47f3b00 + label "TRUE GAIN\nFUNCTION" + selected true + xpos 121 + ypos -19 + addUserKnob {20 "" l User} + } + Output { + name Output1 + xpos 191 + ypos 137 + } + end_group + CCorrect { + gamma {{parent.top_gamma.r i} {parent.top_gamma.g i} {parent.top_gamma.b i} 1} + gain {{parent.top_gain.r i} {parent.top_gain.g i} {parent.top_gain.b} 1} + name CCorrect5 + tile_color 0x7aa9ff00 + xpos -2579 + ypos 706 + } + Premult { + name Premult6 + xpos -2579 + ypos 742 + } + Merge { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.alpha} + operation from + name Merge5 + tile_color 0x4b5ec600 + xpos -2579 + ypos 798 + disable {{parent.top_shad.0==0}} + } + Clamp { + channels rgba + maximum_enable false + name CLAMP_BLACKS1 + tile_color 0x7aa9ff00 + xpos -2579 + ypos 840 + } + Dot { + name Dot13 + xpos -2545 + ypos 897 + } + Switch { + which {{parent.top_on.0==0 i}} + name Switch1 + xpos -2463 + ypos 894 + } + Merge { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.alpha} + operation plus + B {rgba.red rgba.green rgba.blue -rgba.alpha} + output {rgba.red rgba.green rgba.blue -rgba.alpha} + name Merge2 + tile_color 0x4b5ec600 + xpos -1929 + ypos 894 + disable {{parent.bottom_on.0==0 x86 1}} + } + Merge { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.alpha} + operation plus + B {rgba.red rgba.green rgba.blue -rgba.alpha} + output {rgba.red rgba.green rgba.blue -rgba.alpha} + name Merge3 + tile_color 0x4b5ec600 + xpos -1322 + ypos 894 + disable {{parent.left_on.0==0}} + } + Merge { + inputs 2 + A {rgba.red rgba.green rgba.blue -rgba.alpha} + operation plus + B {rgba.red rgba.green rgba.blue -rgba.alpha} + output {rgba.red rgba.green rgba.blue -rgba.alpha} + name Merge4 + tile_color 0x4b5ec600 + xpos -687 + ypos 894 + disable {{parent.right_on.0==0}} + } + Unpremult { + name Unpremult5 + xpos -436 + ypos 894 + } + Merge { + inputs 2 + A rgb + operation mult + B rgb + bbox A + name Merge1 + tile_color 0x4b5ec600 + label "(rgba / )" + xpos -436 + ypos 989 + disable {{parent.Ccol.0==0 i}} + } + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + bbox B + name ChannelCopy14 + tile_color 0x9e3c6300 + xpos -360 + ypos 1124 + } + Premult { + name Premult9 + xpos -360 + ypos 1169 + } +set N7e76430 [stack 0] + Output { + name Output1 + xpos -360 + ypos 1814 + } +push $N7e76430 + Viewer { + name Viewer1 + xpos 33 + ypos 158 + } +end_group diff --git a/gizmos/Lighting/ReProject3D.gizmo b/gizmos/Lighting/ReProject3D.gizmo new file mode 100644 index 0000000..bc2d5a9 --- /dev/null +++ b/gizmos/Lighting/ReProject3D.gizmo @@ -0,0 +1,1012 @@ +#! ./Contents/MacOS/Nuke6.1v2 -nx +version 6.1 v2 +Gizmo { + inputs 4 + help "This gizmo does camera projection using the STMap node to remap all the layers in the input image. It uses a 3D render of point positions in world space (as output by Nuke's ScanlineRender node) and a 3D camera to create UV texture coordinates that are then used to warp an input image such as a matte painting. It optionally uses exr metadata (from a RenderMan-compliant renderer such as PRMan or 3Delight) to work out the 3D camera projection.\n\nNOTE: The projection works best with unmatted input images or at least unpremulted matting with some coverage, then all masking occurs within the gizmo.\n\nIt can mask the projected image in the following ways:\n- Crop based on camera frustum.\n- Input image matte channel.\n- Input alpha from the 3D render.\n- Depth map shadow mask based on an image of point (P) in world space rendered from the projecting camera. This means the projection will only be visible based on what surfaces the projecting camera can see. The effect of this is more evident as the viewing camera changes position and angle.\n- Projecting on surfaces facing camera, using normal (N) in world space. This means all surfaces facing the projecting camera will receive the projection regardless of whether they are blocked by other geometry. This is like Nuke's existing camera projection masking." + knobChanged "\nk = nuke.thisKnob()\nn=nuke.thisNode()\n\nif k.name() == \"zdepth_shadow\":\n if k.value() == False:\n n\['smooth'].setEnabled(False)\n n\['shadow_point'].setEnabled(False)\n n\['bias'].setEnabled(False)\n \n if k.value() == True:\n n\['smooth'].setEnabled(True)\n n\['shadow_point'].setEnabled(True)\n n\['bias'].setEnabled(True)\n \nif k.name() == \"front_facing_only\":\n if k.value() == False:\n n\['smooth_'].setEnabled(False)\n n\['surface_normal'].setEnabled(False)\n \n if k.value() == True:\n n\['smooth_'].setEnabled(True)\n n\['surface_normal'].setEnabled(True)\n\nif k.name() == \"camera\":\n if k.value() == 'nuke camera':\n n\['holdFrame'].setEnabled(False)\n n\['filmbackWidth'].setEnabled(False)\n n\['useMetaData'].setEnabled(False)\n n\['createCamera'].setEnabled(False) \n \n if k.value() == 'renderman openexr metadata':\n n\['holdFrame'].setEnabled(True)\n n\['filmbackWidth'].setEnabled(True)\n n\['useMetaData'].setEnabled(True)\n n\['createCamera'].setEnabled(True)" + addUserKnob {20 ReProject3D} + addUserKnob {41 surface_point l "surface point" t "Choose the input P surface layer from the \"vec\" input. Note that it needs to be rendered in world space." T ShuffleP.in} + addUserKnob {41 surface_alpha l "surface alpha" t "Choose the input surface's alpha channel, from the \"vec\" input. This is used as an overall object mask to matte the camera projection." T Multiply2.maskChannelMask} + addUserKnob {41 projected_matte l "projected matte" t "Choose a matte channel in the stream from the \"img\" input to premult all layers of the projected texture. Note: this happens *after* the texture warp since it's cleaner." T Multiply7.maskChannelMask} + addUserKnob {4 camera t "Choose either a Nuke 3D camera (cam input) or, if available, derive the camera position and projection from RenderMan OpenEXR metadata (vec input)." M {"nuke camera" "renderman openexr metadata" "" "" "" "" ""}} + addUserKnob {7 imageAspect l "image aspect ratio" t "Enter the aspect ratio of the source image being projected." R 0 3} + imageAspect 1.316195373 + addUserKnob {6 outputUVs l "output UV's instead" t "This will output UV (ST) coordinates to the r+g channels. Use this if you want to remap an image downstream instead of using the internal STMap node." +STARTLINE} + addUserKnob {26 ""} + addUserKnob {20 projection_occlusion l "projection occlusion" n 1} + projection_occlusion 0 + addUserKnob {6 crop_to_frustum l "crop to cam frustum" t "This will limit the projection to the bounds of the camera frustum, and turn off tiling of the projection edge pixels." +STARTLINE} + crop_to_frustum true + addUserKnob {6 zdepth_shadow l "enable zdepth shadow matte" t "Enables the ability to mask the projection with a shadow which is derived from a still image of world P (point) space as seen from the projecting camera. This image is connected to the \"shadow\" input.\n\nIf you are projecting on a frame from the rendering camera move then select the right frame, apply a FrameHold and connect to the \"shadow\" input. If you are projecting from a camera that is not a still frame derived from the render cam move then you need a separate world P (point) space render from the correct point of view." +STARTLINE} + addUserKnob {6 smooth l "smooth edges" t "Uses Bilateral blur to anti alias the zdepth matte to some extent. Can be expensive." -STARTLINE +DISABLED} + addUserKnob {41 shadow_point l "shadow point" t "Choose the input P layer from the \"shadow\" input. It should be a still image in world space and rendered from the projecting camera.\n\nIf using metadata, then the \"shadow\" input can be connected to the main point P render and the frame will be held on the projecting frame. If _not_using metadata, then you will need to use a FrameHold node before the \"shadow\" input." T ShufflePshad.in} + addUserKnob {7 bias l "shadow bias" +DISABLED R 0.01 1} + bias 0.1 + addUserKnob {6 front_facing_only l "project on front facing surfaces only (requires normal vectors)" t "This will mask the projection in the same way Nuke does in full 3D. Requires world N (normals) in the stream of the \"vec\" input." +STARTLINE} + addUserKnob {6 smooth_ l "smooth edges" t "Uses Bilateral blur to anti alias the matte to some extent. Can be expensive." -STARTLINE +DISABLED} + addUserKnob {41 surface_normal l "surface normal" t "Choose the normal vectors layer (in world space) from the \"vec\" input. Used to derive the front-facing matte." T ShuffleN.in} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {20 exrcam l "exr cam metadata" n 1} + exrcam 0 + addUserKnob {3 holdFrame l "hold frame" t "This will hold the camera metadata and the P 'shadow' input on the frame that you want to project from." +DISABLED} + holdFrame 1 + addUserKnob {7 filmbackWidth l "filmback width" t "Since the exr metadata does not contain the film back width info by default, you can enter it manually. This means if you create a 3D Camera from the exr metadata, the horizontal and vertical apertures and the focal length will be set correctly.\nHowever it's not essential to getting an accurate projection, as long as the aspect ratio is correct." +DISABLED R 0.1 50} + filmbackWidth 24.576 + addUserKnob {6 useMetaData l "use metadata for aspect ratio" t "This will take the image aspect from the metadata in the incoming exr Point render (vec input) and will override the \"image aspect ratio\" knob. " +DISABLED +STARTLINE} + addUserKnob {22 createCamera l "create camera" t "Creates a Nuke camera based on the exr metadata and user settings for the projection." +DISABLED T "n=nuke.thisNode()\nn_name=n.fullName()\n\nnuke.Root().begin()\ncam=nuke.createNode('Camera2')\n\nhold=int(n\['holdFrame'].value())\nfbw=n\['filmbackWidth'].value()\nsww=n.metadata('exr/screenWindowWidth',hold)\nfocal=fbw*sww\n\t\ncam\['focal'].setExpression(n_name + '.focal')\ncam\['haperture'].setExpression(n_name + '.filmbackWidth')\ncam\['vaperture'].setExpression(n_name + '.filmbackHeight')\ncam\['label'].setValue('hold frame ' + '\[value ' + n_name + '.holdFrame]')\n\n\ncam\['useMatrix'].setValue(1)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '0',0)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '1',1)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '2',2)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '3',3)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '4',4)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '5',5)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '6',6)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '7',7)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '8',8)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '9',9)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '10',10)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '11',11)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '12',12)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '13',13)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '14',14)\ncam\['matrix'].setExpression(n_name + '.' + 'matrix' + '.' + '15',15)\n" +STARTLINE} + addUserKnob {41 matrix l INVISIBLE +INVISIBLE T Matrix1.matrix} + addUserKnob {1 focal l INVISIBLE +INVISIBLE} + focal "\[value parent.\[full_name \[node this]].Shuffle2.focal]" + addUserKnob {1 filmbackHeight l INVISIBLE +INVISIBLE} + filmbackHeight "\[value parent.\[full_name \[node this]].Shuffle2.v_apert]" + addUserKnob {20 endGroup n -1} +} + BackdropNode { + inputs 0 + name Depth5 + label "P to Z from projcam" + note_font_size 18 + xpos 413 + bdwidth 188 + bdheight 180 + } + BackdropNode { + inputs 0 + name Depth6 + label "P to Z from shotcam" + note_font_size 18 + xpos -43 + ypos -5 + bdwidth 188 + bdheight 180 + } + BackdropNode { + inputs 0 + name Depth1 + label "mdata P to Z from projcam" + note_font_size 18 + xpos 1308 + ypos -3 + bdwidth 188 + bdheight 180 + } + BackdropNode { + inputs 0 + name FacingRatio + label FacingRatio + note_font_size 18 + xpos -927 + ypos -155 + bdwidth 294 + bdheight 384 + } + BackdropNode { + inputs 0 + name BackdropNode4 + label "Pworld to Pcam" + note_font_size 18 + xpos 189 + ypos -70 + bdwidth 190 + bdheight 338 + } + BackdropNode { + inputs 0 + name Depth2 + label "mdata P to Z from shotcam" + note_font_size 18 + xpos 854 + ypos -4 + bdwidth 234 + bdheight 179 + } + BackdropNode { + inputs 0 + name BackdropNode5 + tile_color 0x888888ff + label "Cam Shadow" + note_font_size 18 + xpos 292 + ypos 1457 + bdwidth 637 + bdheight 622 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x8e8e3800 + label "Cam Shadow UV's" + note_font_size 18 + xpos 566 + ypos 1149 + bdwidth 344 + bdheight 245 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x7171c600 + label "img UV's" + note_font_size 18 + xpos 557 + ypos 652 + bdwidth 336 + bdheight 244 + } + BackdropNode { + inputs 0 + name BackdropNode1 + label "mdata Pworld to Pcam" + note_font_size 18 + xpos 1100 + ypos -83 + bdwidth 197 + bdheight 336 + } + Input { + inputs 0 + name cam + label "\[value number]" + xpos 204 + ypos -521 + number 3 + } +set N202b2d20 [stack 0] + Shuffle { + name Shuffle1 + label "cam focal, aperture" + xpos 84 + ypos -233 + disable {{"!\[exists parent.input3]" i}} + addUserKnob {20 User} + addUserKnob {7 focal} + focal {{"\[input \[node this.parent] 3].focal" i}} + addUserKnob {7 h_apert} + h_apert {{"\[input \[node this.parent] 3].haperture" i}} + addUserKnob {7 v_apert} + v_apert {{"\[input \[node this.parent] 3].vaperture" i}} + } + Input { + inputs 0 + name vec + label "\[value number]" + xpos -720 + ypos -521 + } + Dot { + name Dot9 + xpos -686 + ypos -373 + } +set N202c0e30 [stack 0] +push $N202c0e30 + Shuffle { + in none + alpha white + name ShuffleP + xpos -606 + ypos -266 + } + Multiply { + inputs 1+1 + channels alpha + value {{"!\[value . maskChannelMask]" i}} + maskChannelMask none + invert_mask true + name Multiply2 + xpos -606 + ypos -167 + disable {{"!\[exists parent.input0]" i}} + } +set N202835a0 [stack 0] +push $N202c0e30 + Shuffle { + in none + name ShuffleN + xpos -834 + ypos -250 + } + ShuffleCopy { + inputs 2 + name ShuffleCopy2 + label alpha + xpos -834 + ypos -113 + } + Unpremult { + name Unpremult3 + xpos -834 + ypos -73 + disable {{!Multiply2.maskChannelMask i}} + } +set N2023d0a0 [stack 0] + ColorMatrix { + matrix { + {{Matrix1.matrix.0 i} {Matrix1.matrix.1 i} {Matrix1.matrix.2 i}} + {{Matrix1.matrix.4 i} {Matrix1.matrix.5 i} {Matrix1.matrix.6 i}} + {{Matrix1.matrix.8 i} {Matrix1.matrix.9 i} {Matrix1.matrix.10 i}} + } + invert true + name ColorMatrix3 + label "Convert to camera space" + xpos -741 + ypos -17 + } +push $N2023d0a0 + ColorMatrix { + matrix { + {{Axis1.world_matrix.0 i} {Axis1.world_matrix.1 i} {Axis1.world_matrix.2 i}} + {{Axis1.world_matrix.4 i} {Axis1.world_matrix.5 i} {Axis1.world_matrix.6 i}} + {{Axis1.world_matrix.8 i} {Axis1.world_matrix.9 i} {Axis1.world_matrix.10 i}} + } + invert true + name ColorMatrix2 + label "Convert to camera space" + xpos -920 + ypos -17 + } + Switch { + inputs 2 + which {{parent.camera i}} + name Switch1 + xpos -834 + ypos 38 + } + set C20253f80 [stack 0] + Multiply { + channels {-rgba.red -rgba.green rgba.blue} + value -1 + name Multiply10 + label "reverse z" + xpos -834 + ypos 82 + } + Expression { + expr0 clamp(-b) + expr1 0 + expr2 0 + name Expression5 + xpos -834 + ypos 136 + } + Expression { + expr0 "step(0, r)" + channel1 {-rgba.red -rgba.green -rgba.blue} + channel2 {-rgba.red -rgba.green -rgba.blue} + channel3 {none none none -rgba.alpha} + name cull_backfaces + label step + xpos -834 + ypos 175 + } + Bilateral { + Size 1 + PositionalSigma 2 + ColorSigma 2 + name Bilateral2 + selected true + xpos -834 + ypos 2078 + disable {{!smooth_ i}} + } +set N2026f120 [stack 0] + Dot { + name Dot7 + xpos -800 + ypos 2208 + } +set N20274e20 [stack 0] +push $N20274e20 +push $N2026f120 +push $N202835a0 + Dot { + name Dot14 + xpos -80 + ypos -134 + } +set N20277790 [stack 0] + Dot { + name Dot15 + xpos -6 + ypos 1804 + } + Invert { + channels alpha + name Invert2 + xpos 590 + ypos 1793 + } +push $N20277790 + Dot { + name Dot16 + xpos 282 + ypos -127 + } +set N202cf120 [stack 0] + Dot { + name Dot4 + xpos 1178 + ypos -134 + } + Unpremult { + name Unpremult2 + xpos 1159 + ypos -45 + disable {{!Multiply2.maskChannelMask i}} + } + Expression { + temp_name0 R + temp_expr0 Matrix1.matrix.3 + temp_name1 G + temp_expr1 Matrix1.matrix.7 + temp_name2 B + temp_expr2 Matrix1.matrix.11 + expr0 r-R + expr1 g-G + expr2 b-B + name Expression1 + label "translate Pworld to camera" + xpos 1159 + ypos -19 + } +set N202d8110 [stack 0] + Premult { + name Premult2 + xpos 898 + ypos 34 + } + Multiply { + channels rgb + value -1 + name Multiply6 + label "cam to surface ray direction" + xpos 898 + ypos 66 + } + Expression { + temp_name0 camx + temp_expr0 Matrix1.matrix.3 + temp_name1 camy + temp_expr1 Matrix1.matrix.7 + temp_name2 camz + temp_expr2 Matrix1.matrix.11 + expr0 sqrt((camx*r)+(camy*g)+(camz*b)) + expr1 0 + expr2 0 + name VectorLength1 + xpos 898 + ypos 105 + } +push $N202cf120 + Unpremult { + name Unpremult1 + xpos 248 + ypos -25 + disable {{!Multiply2.maskChannelMask i}} + } + Expression { + temp_name0 R + temp_expr0 Axis1.world_matrix.3 + temp_name1 G + temp_expr1 Axis1.world_matrix.7 + temp_name2 B + temp_expr2 Axis1.world_matrix.11 + expr0 r-R + expr1 g-G + expr2 b-B + name Expression14 + label "translate Pworld to camera" + xpos 248 + ypos 1 + } +set N202f32a0 [stack 0] + Premult { + name Premult6 + xpos 3 + ypos 36 + } + Multiply { + channels rgb + value -1 + name Multiply12 + label "cam to surface ray direction" + xpos 3 + ypos 68 + } + Expression { + temp_name0 camx + temp_expr0 Axis1.world_matrix.3 + temp_name1 camy + temp_expr1 Axis1.world_matrix.7 + temp_name2 camz + temp_expr2 Axis1.world_matrix.11 + expr0 sqrt((camx*r)+(camy*g)+(camz*b)) + expr1 0 + expr2 0 + name VectorLength5 + xpos 3 + ypos 108 + } +clone $C20253f80 { + inputs 2 + xpos 247 + ypos 638 + selected false + } + Dot { + name Dot5 + xpos 471 + ypos 1626 + } +push $N202d8110 + ColorMatrix { + matrix { + {{Matrix1.matrix.0 i} {Matrix1.matrix.1 i} {Matrix1.matrix.2 i}} + {{Matrix1.matrix.4 i} {Matrix1.matrix.5 i} {Matrix1.matrix.6 i}} + {{Matrix1.matrix.8 i} {Matrix1.matrix.9 i} {Matrix1.matrix.10 i}} + } + invert true + name ColorMatrix1 + label "Rotate to camera" + xpos 1160 + ypos 31 + } + Multiply { + channels {-rgba.red -rgba.green rgba.blue} + value -1 + name Multiply8 + label "reverse Z" + xpos 1160 + ypos 71 + } + Premult { + name Premult3 + xpos 1157 + ypos 125 + } + Expression { + expr2 b<0?0:b + name Expression2 + label "clip Z behind cam" + xpos 1157 + ypos 197 + } +set N24a24b60 [stack 0] + Expression { + temp_name0 h_tan + temp_expr0 "(h_apert /2) / focal" + temp_name1 v_tan + temp_expr1 "(v_apert /2) / focal" + expr0 "0.5 + 0.5 * r / h_tan / b" + expr1 "0.5 + 0.5 * g / v_tan / b" + expr2 0 + channel3 {none none none -rgba.alpha} + name Expression7 + label CameraUVs + xpos 820 + ypos 1235 + addUserKnob {20 "" l User} + addUserKnob {26 "" l "camera settings"} + addUserKnob {7 focal l "focal length" t "Link to projecting camera's focal length" R 0 100} + focal {{"h_apert/\[metadata exr/screenWindowWidth]" i}} + addUserKnob {7 h_apert l "horiz aperture" t "Link to projecting camera's horizontal aperture" R 0 50} + h_apert {{width/height*pixel_aspect i}} + addUserKnob {7 v_apert l "vert aperture" t "Link to projecting camera's vertical aperture" R 0 50} + v_apert 1 + } + Expression { + expr3 "(r<0 || r>1 || g<0 || g>1)?0:a" + name Expression9 + label "clamp projection to cam frustum" + xpos 820 + ypos 1275 + disable {{!crop_to_frustum i}} + } +push $N202f32a0 + ColorMatrix { + matrix { + {{Axis1.world_matrix.0 i} {Axis1.world_matrix.1 i} {Axis1.world_matrix.2 i}} + {{Axis1.world_matrix.4 i} {Axis1.world_matrix.5 i} {Axis1.world_matrix.6 i}} + {{Axis1.world_matrix.8 i} {Axis1.world_matrix.9 i} {Axis1.world_matrix.10 i}} + } + invert true + name ColorMatrix4 + label "Rotate to camera" + xpos 248 + ypos 49 + } + Multiply { + channels {-rgba.red -rgba.green rgba.blue} + value -1 + name Multiply13 + label "reverse Z" + xpos 248 + ypos 89 + } + Premult { + name Premult7 + xpos 244 + ypos 143 + } + Expression { + expr2 b<0?0:b + name Expression15 + label "clip Z behind cam" + xpos 244 + ypos 214 + } +set N24a4a600 [stack 0] + Expression { + temp_name0 h_tan + temp_expr0 "(h_apert /2) / focal" + temp_name1 v_tan + temp_expr1 "(v_apert /2) / focal" + expr0 "0.5 + 0.5 * r / h_tan / b" + expr1 "0.5 + 0.5 * g / v_tan / b" + expr2 0 + channel3 {none none none -rgba.alpha} + name Expression10 + label CameraUVs + xpos 576 + ypos 1232 + addUserKnob {20 "" l User} + addUserKnob {26 "" l "camera settings"} + addUserKnob {7 focal l "focal length" t "Link to projecting camera's focal length" R 0 100} + focal {{parent.Shuffle1.focal i}} + addUserKnob {7 h_apert l "horiz aperture" t "Link to projecting camera's horizontal aperture" R 0 50} + h_apert {{parent.Shuffle1.h_apert i}} + addUserKnob {7 v_apert l "vert aperture" t "Link to projecting camera's vertical aperture" R 0 50} + v_apert {{parent.Shuffle1.v_apert i}} + } + Expression { + expr3 "(r<0 || r>1 || g<0 || g>1)?0:a" + name Expression11 + label "clamp projection to cam frustum" + xpos 576 + ypos 1272 + disable {{!crop_to_frustum}} + } +clone $C20253f80 { + inputs 2 + xpos 700 + ypos 1364 + selected false + } + Dot { + name Dot11 + xpos 734 + ypos 1479 + } +set N24a5fe50 [stack 0] + Dot { + name Dot18 + xpos 643 + ypos 1483 + } + Dot { + name Dot12 + xpos 643 + ypos 1579 + } +push $N24a5fe50 + Input { + inputs 0 + name shadow + label "\[value number]" + xpos 693 + ypos -521 + number 1 + } + FrameHold { + first_frame {{parent.Matrix1.frameHold i}} + name FrameHold1 + xpos 693 + ypos -425 + disable {{!parent.camera i}} + } + Shuffle { + in none + alpha white + out rgb + name ShufflePshad + label "no alpha required" + xpos 693 + ypos -329 + } +set N24a71d70 [stack 0] + Expression { + temp_name0 camx + temp_expr0 Matrix1.matrix.3 + temp_name1 camy + temp_expr1 Matrix1.matrix.7 + temp_name2 camz + temp_expr2 Matrix1.matrix.11 + expr0 camx-r + expr1 camy-g + expr2 camz-b + name Expression6 + label "cam to surface ray direction" + xpos 1347 + ypos 49 + } + Expression { + temp_name0 camx + temp_expr0 Matrix1.matrix.3 + temp_name1 camy + temp_expr1 Matrix1.matrix.7 + temp_name2 camz + temp_expr2 Matrix1.matrix.11 + expr0 sqrt((camx*r)+(camy*g)+(camz*b)) + expr1 0 + expr2 0 + name VectorLength2 + xpos 1347 + ypos 118 + } +push $N24a71d70 + Expression { + temp_name0 camx + temp_expr0 Axis1.world_matrix.3 + temp_name1 camy + temp_expr1 Axis1.world_matrix.7 + temp_name2 camz + temp_expr2 Axis1.world_matrix.11 + expr0 camx-r + expr1 camy-g + expr2 camz-b + name Expression18 + label "cam to surface ray direction" + xpos 458 + ypos 53 + } + Expression { + temp_name0 camx + temp_expr0 Axis1.world_matrix.3 + temp_name1 camy + temp_expr1 Axis1.world_matrix.7 + temp_name2 camz + temp_expr2 Axis1.world_matrix.11 + expr0 sqrt((camx*r)+(camy*g)+(camz*b)) + expr1 0 + expr2 0 + name VectorLength6 + xpos 458 + ypos 118 + } +clone $C20253f80 { + inputs 2 + xpos 1226 + ypos 638 + selected false + } + Dot { + name Dot8 + xpos 1152 + ypos 1506 + } + STMap { + inputs 2 + channels {rgba.red -rgba.green -rgba.blue} + uv rgb + blur -rgba.alpha + blur_scale 0 + maskChannel -rgba.alpha + name STMap3 + label "warp Pshad" + xpos 700 + ypos 1521 + } + CopyBBox { + inputs 2 + name CopyBBox4 + xpos 700 + ypos 1601 + } + MergeExpression { + inputs 2 + expr0 "step(Ar, Br+bias)" + channel1 {-rgba.red -rgba.green -rgba.blue} + channel2 {-rgba.red -rgba.green -rgba.blue} + channel3 {none none none -rgba.alpha} + name MergeExpression3 + label "Step depthtest" + xpos 700 + ypos 1640 + addUserKnob {20 User} + addUserKnob {7 bias} + bias {{parent.bias i}} + } + ChannelMerge { + inputs 2 + operation max + B rgba.red + output rgba.red + name ChannelMerge1 + label "clean shadow edges" + xpos 700 + ypos 1779 + } + Expression { + expr0 step(0,r) + channel1 {-rgba.red -rgba.green -rgba.blue} + channel2 {-rgba.red -rgba.green -rgba.blue} + channel3 {none none none -rgba.alpha} + name Expression19 + label "step (clean edges)" + xpos 700 + ypos 1847 + } + Bilateral { + Size 1 + PositionalSigma 2 + ColorSigma 2 + name Bilateral1 + xpos 700 + ypos 1906 + disable {{!smooth i}} + } + Gamma { + channels {rgba.red -rgba.green -rgba.blue} + value 0.45 + name Gamma2 + xpos 700 + ypos 1960 + } +push $N202835a0 + Dot { + name Dot6 + xpos -572 + ypos 998 + } +push $N24a24b60 + Dot { + name Dot3 + label "mdata cam" + xpos 864 + ypos 626 + } + Expression { + temp_name0 h_tan + temp_expr0 "(h_apert /2) / focal" + temp_name1 v_tan + temp_expr1 "(v_apert /2) / focal" + expr0 "0.5 + 0.5 * r / h_tan / b" + expr1 "0.5 + 0.5 * g / v_tan / b" + expr2 0 + channel3 {none none none -rgba.alpha} + name Expression3 + label CameraUVs + xpos 771 + ypos 703 + addUserKnob {20 "" l User} + addUserKnob {26 "" l "camera settings"} + addUserKnob {7 focal l "focal length" t "Link to projecting camera's focal length" R 0 100} + focal {{parent.Shuffle2.focal i}} + addUserKnob {7 h_apert l "horiz aperture" t "Link to projecting camera's horizontal aperture" R 0 50} + h_apert {{parent.Shuffle2.h_apert i}} + addUserKnob {7 v_apert l "vert aperture" t "Link to projecting camera's vertical aperture" R 0 50} + v_apert {{parent.Shuffle2.v_apert i}} + } + Expression { + expr3 "(r<0 || r>1 || g<0 || g>1)?0:a" + name Expression4 + label "clamp projection to cam frustum" + xpos 771 + ypos 743 + disable {{!crop_to_frustum i}} + } +push $N24a4a600 + Dot { + name Dot2 + label "nuke cam" + xpos 544 + ypos 624 + } + Expression { + temp_name0 h_tan + temp_expr0 "(h_apert /2) / focal" + temp_name1 v_tan + temp_expr1 "(v_apert /2) / focal" + expr0 "0.5 + 0.5 * r / h_tan / b" + expr1 "0.5 + 0.5 * g / v_tan / b" + expr2 0 + channel3 {none none none -rgba.alpha} + name Expression16 + label CameraUVs + xpos 565 + ypos 697 + addUserKnob {20 "" l User} + addUserKnob {26 "" l "camera settings"} + addUserKnob {7 focal l "focal length" t "Link to projecting camera's focal length" R 0 100} + focal {{(Shuffle1.v_apert*parent.imageAspect)/(Shuffle1.h_apert/Shuffle1.focal) i}} + addUserKnob {7 h_apert l "horiz aperture" t "Link to projecting camera's horizontal aperture" R 0 50} + h_apert {{Shuffle1.v_apert*parent.imageAspect i}} + addUserKnob {7 v_apert l "vert aperture" t "Link to projecting camera's vertical aperture" R 0 50} + v_apert {{parent.Shuffle1.v_apert i}} + } + Expression { + expr3 "(r<0 || r>1 || g<0 || g>1)?0:a" + name Expression17 + label "clamp projection to cam frustum" + xpos 566 + ypos 743 + disable {{!crop_to_frustum}} + } +clone $C20253f80 { + inputs 2 + xpos 678 + ypos 854 + selected false + } + Dot { + name Dot1 + xpos -203 + ypos 858 + } +set N24aeda80 [stack 0] +push $N24aeda80 + Input { + inputs 0 + name img + label "\[value number]" + xpos -410 + ypos -523 + number 2 + } + Expression { + expr0 x/width + expr1 y/height + expr2 0 + name Expression8 + label UVs + xpos -410 + ypos -434 + disable {{!outputUVs i}} + } + STMap { + inputs 2 + uv rgb + blur -rgba.alpha + blur_scale 0 + maskChannel -rgba.alpha + name STMap1 + xpos -410 + ypos 761 + } +set N24af9c30 [stack 0] +push $N24af9c30 + Shuffle { + alpha white + name Shuffle6 + xpos -510 + ypos 854 + } + Multiply { + inputs 1+1 + channels alpha + value 0 + maskChannelMask none + invert_mask true + name Multiply7 + xpos -410 + ypos 906 + disable {{"!\[value . maskChannelMask]" i}} + } + Premult { + channels all + name Premult1 + label "by projected matte" + xpos -410 + ypos 960 + } + Multiply { + inputs 1+1 + value 0 + invert_mask true + name Multiply1 + label "cam frustum" + xpos -410 + ypos 1023 + } + Multiply { + inputs 1+1 + value {{"\[value . maskChannelMask]>0?0:1" i}} + invert_mask true + name Multiply3 + label "by surface alpha" + xpos -410 + ypos 1080 + } + Multiply { + inputs 1+1 + value {{"\[value . maskChannelMask]>0?0:1" i}} + maskChannelMask rgba.red + invert_mask true + name Multiply4 + xpos -410 + ypos 1996 + disable {{!parent.zdepth_shadow i}} + } + Multiply { + inputs 1+1 + value 0 + maskChannelMask rgba.red + invert_mask true + name Multiply5 + xpos -410 + ypos 2077 + disable {{!front_facing_only}} + } + CopyBBox { + inputs 2 + name CopyBBox1 + xpos -410 + ypos 2204 + } + CopyMetaData { + inputs 2 + name CopyMetaData1 + xpos -410 + ypos 2261 + } + Output { + name Output1 + xpos -410 + ypos 2320 + } +push $N202b2d20 + Axis2 { + name Axis1 + xpos 300 + ypos -270 + } +push $N202c0e30 + Dot { + name Dot10 + xpos 1094 + ypos -387 + } +set N24b3e500 [stack 0] + Shuffle { + name Shuffle2 + label "mdata focal, aperture" + xpos 950 + ypos -267 + disable {{!parent.camera i}} + addUserKnob {20 User} + addUserKnob {7 focal} + focal {{"parent.filmbackWidth/\[metadata exr/screenWindowWidth]" i}} + addUserKnob {7 h_apert} + h_apert {{parent.filmbackWidth i}} + addUserKnob {7 v_apert} + v_apert {{"parent.useMetaData? parent.filmbackWidth*(1/(\[metadata input/width]/\[metadata input/height])) : parent.filmbackWidth*(1/imageAspect)" i}} + } +push $N24b3e500 +push 0 + Switch { + inputs 2 + which {{parent.camera i}} + name Switch2 + xpos 1170 + ypos -307 + } + Matrix { + channels none + matrix { + {1 0 0 0} + {0 1 0 0} + {0 0 -1 0} + {0 0 0 1} + } + name Matrix1 + label "working with callback in init.py" + xpos 1170 + ypos -264 + addUserKnob {20 User} + addUserKnob {3 frameHold} + frameHold {{parent.holdFrame i}} + addUserKnob {3 doThis} + doThis {{"\[python exrCam()]" i}} + } +end_group diff --git a/gizmos/Lighting/RimLight_RS.gizmo b/gizmos/Lighting/RimLight_RS.gizmo new file mode 100644 index 0000000..eb57140 --- /dev/null +++ b/gizmos/Lighting/RimLight_RS.gizmo @@ -0,0 +1,231 @@ +#! C:/Program Files/Nuke6.1v1/Nuke6.1.exe -nx +version 6.1 v1 +Gizmo { + inputs 3 + help "Connect an attenuation map (i.e. map showing Viewing vector,or normalized -I, like a light shining down the cam +Z axis) and a normal map. The order of the two inputs is irrelevant. The result is similar to a rim lighting shader, with controls for the width and intensity of the effect." + tile_color 0x85ff7fff + addUserKnob {20 "" l User} + addUserKnob {7 RimLighting_UserEdgeWidth l "Edge Width"} + RimLighting_UserEdgeWidth 0.145 + addUserKnob {7 RimLighting_UserEdgeAmount l "Edge Amount"} + RimLighting_UserEdgeAmount 2 + addUserKnob {12 rim_light_pos l "Rim Light Position"} + rim_light_pos {{curve x40 537 x66 892 x80 551} {curve x40 558 x66 346 x80 420}} + addUserKnob {7 rim_depth l "Distance from Camera" R 0 5000} + addUserKnob {26 ""} + addUserKnob {6 nn l "Normalize the Normals?" -STARTLINE} + addUserKnob {26 ""} + addUserKnob {18 gamma_cc l "Gamma CC" R 0 5} + gamma_cc {1 1 1} + addUserKnob {18 gain_cc l "Gain CC" R 0 5} + gain_cc 5 + addUserKnob {7 cc_mix l "CC Mix"} + cc_mix 1 +} + Input { + inputs 0 + name P + xpos -531 + ypos -126 + number 2 + } +add_layer {o_Pobj o_Pobj.red o_Pobj.green o_Pobj.blue} + Shuffle { + in o_Pobj + out rgb + name Shuffle1 + xpos -381 + ypos -126 + } + Unpremult { + name Unpremult2 + xpos -239 + ypos -126 + } +set N781ed20 [stack 0] + Input { + inputs 0 + name N + xpos -228 + ypos -399 + number 1 + } + Input { + inputs 0 + name ALPHA + xpos -16 + ypos -380 + } + ShuffleCopy { + inputs 2 + in rgb + red red + green green + blue blue + alpha alpha2 + name ShuffleCopy1 + tile_color 0x9e3c6300 + xpos -130 + ypos -324 + } + Unpremult { + name Unpremult1 + xpos -130 + ypos -297 + } + Multiply { + channels {-rgba.red -rgba.green rgba.blue -rgba.alpha} + value -1 + name __SWITCH_HANDEDNESS__ + xpos -130 + ypos -270 + disable true + } + Matrix { + channels rgb + matrix { + {1 2 1} + {2 4 2} + {1 2 1} + } + normalize true + name AA + xpos -130 + ypos -225 + } + Expression { + temp_name0 length + temp_expr0 sqrt(pow2(Bg)+pow2(Br)+pow2(Bb)) + expr0 Br/(length+0.00001) + expr1 Bg/(length+0.00001) + expr2 Bb/(length+0.00001) + expr3 Ba + name Nn + xpos -130 + ypos -182 + disable {{nn.0==0 i}} + } +set N7866950 [stack 0] + MergeExpression { + inputs 2 + temp_name0 Lr + temp_expr0 "(parent.rim_light_pos.x - input.width/2) - Ar" + temp_name1 Lg + temp_expr1 "(parent.rim_light_pos.y - input.height/2) - Ag" + temp_name2 Lb + temp_expr2 "parent.rim_depth - Ab" + temp_name3 Llength + temp_expr3 sqrt(pow2(Lr)+pow2(Lg)+pow2(Lb))+0.00001 + expr0 (Lr/Llength)*Br+(Lg/Llength)*Bg+(Lb/Llength)*Bb + expr1 (Lr/Llength)*Br+(Lg/Llength)*Bg+(Lb/Llength)*Bb + expr2 (Lr/Llength)*Br+(Lg/Llength)*Bg+(Lb/Llength)*Bb + expr3 Ba + name LdotN + xpos -239 + ypos -28 + addUserKnob {20 "" l User} + } +push $N781ed20 + Dot { + name Dot1 + xpos -205 + ypos -203 + } + Dot { + name Dot2 + xpos 21 + ypos -203 + } + Expression { + temp_name0 Plength + temp_expr0 sqrt(pow2(Br)+pow2(Bg)+pow2(Bb))+0.00001 + expr0 Br/Plength + expr1 Bg/Plength + expr2 Bb/Plength + name I_normalized + xpos -13 + ypos -130 + } +set N7867310 [stack 0] + Multiply { + channels rgb + value -1 + name V + xpos -13 + ypos -76 + } +push $N7866950 + MergeExpression { + inputs 2 + temp_name0 VdotNf + temp_expr0 "(Ar*Br) + (Ag*Bg) + (Ab*Bb)" + temp_name1 edgeWidth + temp_expr1 parent.RimLighting_UserEdgeWidth + temp_name2 edgeScale + temp_expr2 edgeWidth>0?pow(1-VdotNf,log(edgeWidth)/log(0.5)):0 + temp_name3 edgeAmt + temp_expr3 parent.RimLighting_UserEdgeAmount + expr0 smoothstep(0,1,edgeAmt*edgeScale) + expr1 smoothstep(0,1,edgeAmt*edgeScale) + expr2 smoothstep(0,1,edgeAmt*edgeScale) + name RimLighting + xpos -13 + ypos -33 + addUserKnob {20 "" l User} + } + Merge2 { + inputs 2 + operation multiply + name Multiply + xpos -127 + ypos 16 + } + CCorrect { + gamma {{gamma_cc.r i} {gamma_cc.g i} {gamma_cc.b i} 1} + gain {{gain_cc.r i} {gain_cc.g i} {gain_cc.b i} 1} + mix {{cc_mix}} + name CCorrect1 + tile_color 0x7aa9ff00 + xpos -127 + ypos 72 + } + Premult { + name Premult1 + xpos -127 + ypos 141 + } + Clamp { + name Clamp1 + selected true + xpos -127 + ypos 165 + } +set N78d4da0 [stack 0] + Output { + name Output1 + xpos -127 + ypos 243 + } +push $N7867310 +push $N7866950 + MergeExpression { + inputs 2 + temp_name0 IdotN + temp_expr0 Ar*Br+Ag*Bg+Ab*Bb + expr0 IdotN>0?Br:-Br + channel1 rgb + expr1 IdotN>0?Bg:-Bg + expr2 IdotN>0?Bb:-Bb + expr3 Ba + name FACEFORWARD + xpos -130 + ypos -130 + disable true + } +push $N78d4da0 + Viewer { + name Viewer1 + xpos 90 + ypos -225 + } +end_group diff --git a/gizmos/Lighting/SH_Relighter.gizmo b/gizmos/Lighting/SH_Relighter.gizmo new file mode 100644 index 0000000..81048cc --- /dev/null +++ b/gizmos/Lighting/SH_Relighter.gizmo @@ -0,0 +1,64 @@ +#! D:/Program Files/Nuke5.1v2/Nuke5.1.exe -nx +version 5.1200 +Gizmo { + addUserKnob {20 User} + addUserKnob {41 format T Constant1.format} + addUserKnob {26 ""} + addUserKnob {41 latitude T Constant1.latitude} + addUserKnob {41 longitude T Constant1.longitude} + addUserKnob {26 ""} + addUserKnob {41 multiply l Vlaue T Grade3.multiply} + addUserKnob {26 ""} + addUserKnob {41 size l Blur T Blur1.size} + addUserKnob {41 filter T Blur1.filter} + addUserKnob {41 quality l "" -STARTLINE T Blur1.quality} +} + Input { + inputs 0 + name Input1 + selected true + xpos -384 + ypos -518 + } + Constant { + inputs 0 + channels rgb + color {{sin(radians(longitude))*cos(radians(latitude))} {sin(radians(latitude))} {cos(radians(longitude))*cos(radians(latitude))} 0} + name Constant1 + xpos -179 + ypos -607 + addUserKnob {20 User} + addUserKnob {7 longitude R 0 360} + addUserKnob {7 latitude R 0 360} + } + Merge2 { + inputs 2 + operation multiply + name Merge2 + xpos -237 + ypos -449 + } + Saturation { + saturation 0 + name Saturation1 + xpos -237 + ypos -407 + } + Grade { + white 3.85 + name Grade3 + xpos -237 + ypos -327 + } + Blur { + channels rgb + name Blur1 + xpos -237 + ypos -300 + } + Output { + name Output1 + xpos -237 + ypos -200 + } +end_group diff --git a/gizmos/Lighting/contactGizmo.gizmo b/gizmos/Lighting/contactGizmo.gizmo new file mode 100644 index 0000000..21ccf7f --- /dev/null +++ b/gizmos/Lighting/contactGizmo.gizmo @@ -0,0 +1,116 @@ +#! C:/Program Files/Nuke5.0v2/Nuke5.0.exe -nx +version 5.0200 +Gizmo { + inputs 2 + lock_connections true + addUserKnob {20 User} + addUserKnob {7 shadOpacity l "Shadow Opacity" R 0 5} + shadOpacity 0.45 + addUserKnob {7 occOpacity l "Occlusion Opacity" R 0 5} + occOpacity 1 + addUserKnob {26 "" l ""} + addUserKnob {7 shadowBlur l "Shadow Blur" R 0 50} + shadowBlur 0 + addUserKnob {7 shadBlurMix l "Shadow Blur Mix"} + shadBlurMix 0.85 + addUserKnob {7 occBlur l "Occlusion Blur" R 0 50} + occBlur 0 + addUserKnob {26 "" l ""} + addUserKnob {7 expIntensity l "Exposure Intensity" R -1 1} + expIntensity 0 + addUserKnob {7 expR l "Exposure Red" R -1 1} + expR -0.5 + addUserKnob {7 expG l "Exposure Green" R -1 1} + expG -0.5 + addUserKnob {7 expBlue l "Exposure Blue" R -1 1} + expBlue -0.5 +} + Input { + inputs 0 + name ContactMap + xpos 553 + ypos 159 + } +set N4a49078 [stack 0] +push 0 + Copy { + inputs 2 + from0 rgba.red + to0 rgba.alpha + name ShadowCopy + xpos 506 + ypos 240 + } + Multiply { + value {{parent.shadOpacity i}} + name ShadowIntensity + xpos 506 + ypos 300 + } + Blur { + size {{parent.shadowBlur i}} + mix {{parent.shadBlurMix i}} + name ShadowBlur + xpos 506 + ypos 356 + } +push $N4a49078 +push 0 + Copy { + inputs 2 + from0 rgba.green + to0 rgba.alpha + name OccCopy + xpos 621 + ypos 242 + } + Multiply { + value {{parent.occOpacity i}} + name OccIntensity + xpos 621 + ypos 298 + } + Blur { + size {{parent.occBlur i}} + name OccBlur + xpos 621 + ypos 356 + } + Merge2 { + inputs 2 + Achannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} + Bchannels {-rgba.red -rgba.green -rgba.blue rgba.alpha} + output {-rgba.red -rgba.green -rgba.blue rgba.alpha} + name ContactCombine + xpos 570 + ypos 434 + } + Input { + inputs 0 + name Through + xpos 390 + ypos 351 + number 1 + } + EXPTool { + inputs 1+1 + blackpoint {{parent.expIntensity i}} + gang false + red {{parent.expR i}} + green {{parent.expG i}} + blue {{parent.expBlue i}} + name ContactExposure + xpos 427 + ypos 454 + } + Output { + name 0 + xpos 435 + ypos 560 + } + Viewer { + name Viewer1 + xpos 435 + ypos 605 + } +end_group diff --git a/gizmos/Lighting/depthSlice.gizmo b/gizmos/Lighting/depthSlice.gizmo new file mode 100644 index 0000000..73c1bce --- /dev/null +++ b/gizmos/Lighting/depthSlice.gizmo @@ -0,0 +1,154 @@ +#! /Applications/Nuke5.0v1/Nuke5.0v1.app/Contents/MacOS/Nuke5.0 -nx +version 5.0100 +Gizmo { + help "==========================================\nShake DepthSlice for Nuke\n==========================================\n\nFUNCTION\n\nCreates a slice in the alpha channel based on Z, as defined by a center point, and a drop-off range.\n\n\nCenter\nThe center z depth from which the slice is measured.\n\nLo, Hi\nThe distance included in the slice away from the center. lo adds distance towards the camera, hi add thickness away from the camera.\n\nGrad\t\nWhen this is turned on, there is a gradation from hi to lo. Beyond the slice is still black.\n\nMirror\nWhen this is on, the effect is mirrored in z.\n\nMatteMult\t\nWhen this is on, the rgb channels are pre-multiplied by the new mask.\n\n\n==========================================\nCuco Burés - 2008 || cucobures@gmail.com\n==========================================" + lock_connections true + addUserKnob {20 "" Controls} + addUserKnob {7 Center} + Center 0 + addUserKnob {7 Lo} + Lo 0 + addUserKnob {7 Hi} + Hi 1 + addUserKnob {26 "" l " " T " "} + addUserKnob {6 Grad} + Grad true + addUserKnob {26 "" l " " T " "} + addUserKnob {6 Mirror} + addUserKnob {26 "" l " " T " "} + addUserKnob {6 MatteMult} + MatteMult true +} + Input { + inputs 0 + name Input1 + xpos 293 + ypos -113 + } +set N19baf190 [stack 0] + Colorspace { + layer depth + illuminant_in D75 + colorspace_out sRGB + illuminant_out C + name Colorspace1 + xpos 120 + ypos -52 + } + Shuffle { + in depth + in2 alpha + out alpha + name Shuffle2 + xpos 120 + ypos 2 + } +set N19d0dfa0 [stack 0] + Grade { + channels {-rgba.alpha none none rgba.alpha} + blackpoint {{parent.Center-parent.Lo i x1 0.1}} + whitepoint {{parent.Center-parent.Hi i x1 0.3}} + black_clamp false + maskChannel -rgba.alpha + name Grade2 + xpos 214 + ypos 121 + } +push $N19baf190 + Colorspace { + layer depth + colorspace_out sRGB + name Colorspace2 + xpos -27 + ypos -49 + } + Shuffle { + in depth + in2 alpha + out alpha + name Shuffle1 + xpos -27 + ypos 5 + } +set N187d09e0 [stack 0] + Expression { + temp_name0 na + temp_expr0 "(a>=(parent.Center-max(parent.Lo,parent.Hi)) && a<=(parent.Center-min(parent.Lo,parent.Hi)))?1:0" + channel0 alpha + expr0 na + channel1 none + channel2 none + channel3 {none none none -rgba.alpha} + name Expression1 + xpos 91 + ypos 129 + } + Merge2 { + inputs 2 + operation min + name Min1 + xpos 152 + ypos 265 + disable {{1-parent.Grad i}} + } +push $N19d0dfa0 + Grade { + channels {-rgba.alpha none none rgba.alpha} + blackpoint {{parent.Lo+parent.Center i x1 0.2}} + whitepoint {{parent.Hi+parent.Center i x1 1}} + black_clamp false + maskChannel -rgba.alpha + name Grade1 + xpos -40 + ypos 120 + } +push $N187d09e0 + Expression { + temp_name0 na + temp_expr0 "(a>=(min(parent.Lo,parent.Hi) + parent.Center) && a<=(max(parent.Lo,parent.Hi) + parent.Center))? 1 : 0" + channel0 alpha + expr0 na + channel1 none + channel2 none + channel3 {none none none -rgba.alpha} + name Expression2 + xpos -156 + ypos 128 + } + Merge2 { + inputs 2 + operation min + name Min + xpos -98 + ypos 270 + disable {{1-parent.Grad i}} + } + Merge2 { + inputs 2 + operation max + name Max + xpos 26 + ypos 393 + disable {{1-parent.Mirror i}} + } +push $N19baf190 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + name Copy1 + xpos 293 + ypos 522 + } + Premult { + name Premult1 + xpos 293 + ypos 591 + disable {{1-parent.MatteMult i}} + } + Output { + name Output1 + xpos 293 + ypos 668 + } +end_group diff --git a/gizmos/Lighting/final_flare_tool.gizmo b/gizmos/Lighting/final_flare_tool.gizmo new file mode 100644 index 0000000..5588b85 --- /dev/null +++ b/gizmos/Lighting/final_flare_tool.gizmo @@ -0,0 +1,15374 @@ +#! C:/Program Files/Nuke8.0v6/nuke-8.0.v6.dll -nx +version 8.0 v6 +Gizmo { + inputs 0 + tile_color 0xffffffff + label "\[value ffx_presets]" + addUserKnob {20 ffx_flare l start} + addUserKnob {26 ""} + addUserKnob {4 ffx_presets l presets M {Default "Blue Abrams" "Abrams Squared" "Warm Light 2" "Desert Sun" "Purple Steel" Serenity "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""}} + addUserKnob {22 ffx_configure l configure -STARTLINE T "import nuke\n\nif nuke.thisNode()\['ffx_presets'].value() == \"Default\":\n\tnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(15)\n\tnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(600)\n\tnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['disable'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\n\tnuke.toNode('cores')\['which'].setValue(0)\n\tnuke.toNode('core_bits')\['which'].setValue(0)\n\tnuke.toNode('core_coronas')\['which'].setValue(0)\n\tnuke.toNode('core_shapes')\['which'].setValue(0)\n\tnuke.toNode('lens_anomolies')\['which'].setValue(0)\n\tnuke.toNode('pieces')\['which'].setValue(0)\n\tnuke.toNode('big_pieces')\['which'].setValue(0)\n\tnuke.toNode('rings')\['which'].setValue(0)\n\tnuke.toNode('lines')\['which'].setValue(0)\n\n\tnuke.thisNode()\['ffx_flare_size'].setValue(1)\n\tnuke.thisNode()\['core_size'].setValue(0)\n\tnuke.thisNode()\['core_rays_size'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_rotation'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_thickness'].setValue(0)\n\tnuke.thisNode()\['ffx_rings_rotation'].setValue(0)\n\tnuke.thisNode()\['core_corona_size'].setValue(0)\n\tnuke.thisNode()\['core_shape_size'].setValue(0)\n\n\tnuke.toNode('Cores_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Rings_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Lines_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\n\tnuke.toNode('Core_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Rays_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Corona_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Shapes_Blur')\['size'].setValue(0)\n\tnuke.toNode('Pieces_Blur')\['size'].setValue(0)\n\tnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Bits_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Core_Corona_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Core_Shape_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Pieces_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Rings_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(1)\n\n\tnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\n\tnuke.toNode('Global_Brightness')\['white'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\n\tnuke.thisNode()\['ffx_more_pieces'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_size'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\n\tnuke.thisNode()\['ffx_lines_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_line_stretch'].setValue(1)\n\n\tnuke.message('Flare Successfully Reset...')\n\nif nuke.thisNode()\['ffx_presets'].value() == \"Blue Abrams\":\n\tnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(15)\n\tnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(600)\n\tnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['disable'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\n\tnuke.toNode('cores')\['which'].setValue(0)\n\tnuke.toNode('core_bits')\['which'].setValue(7)\n\tnuke.toNode('core_coronas')\['which'].setValue(0)\n\tnuke.toNode('core_shapes')\['which'].setValue(0)\n\tnuke.toNode('lens_anomolies')\['which'].setValue(0)\n\tnuke.toNode('pieces')\['which'].setValue(1)\n\tnuke.toNode('big_pieces')\['which'].setValue(1)\n\tnuke.toNode('rings')\['which'].setValue(1)\n\tnuke.toNode('lines')\['which'].setValue(0)\n\n\tnuke.thisNode()\['ffx_flare_size'].setValue(1)\n\tnuke.thisNode()\['core_size'].setValue(0)\n\tnuke.thisNode()\['core_rays_size'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_rotation'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_thickness'].setValue(30)\n\tnuke.thisNode()\['ffx_rings_rotation'].setValue(0)\n\tnuke.thisNode()\['core_corona_size'].setValue(0)\n\tnuke.thisNode()\['core_shape_size'].setValue(0)\n\n\tnuke.toNode('Cores_Color')\['multiply'].setValue(\['0.2', '0.2', '4', '0'])\n\tnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '1', '4', '0'])\n\tnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['.56', '1.03', '4', '0'])\n\tnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['0.3', '0.5', '1', '0'])\n\tnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['0', '0.47', '2', '0'])\n\tnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1', '1', '2', '0'])\n\tnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1', '1.4', '3.7', '0'])\n\tnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['1', '1.4', '3.7', '0'])\n\tnuke.toNode('Rings_Color')\['multiply'].setValue(\['0.87', '1.04', '3.5', '0'])\n\tnuke.toNode('Lines_Color')\['multiply'].setValue(\['0.001', '0.2', '1.8', '0'])\n\n\tnuke.toNode('Core_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Rays_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Corona_Blur')\['size'].setValue(75)\n\tnuke.toNode('Core_Shapes_Blur')\['size'].setValue(0)\n\tnuke.toNode('Pieces_Blur')\['size'].setValue(0)\n\tnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Bits_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Corona_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Shape_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Pieces_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Rings_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Bits_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Corona_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Shape_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Pieces_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Big_Pieces_Plus')\['mix'].setValue(.15)\n\tnuke.toNode('Rings_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['mix'].setValue(1)\n\n\tnuke.thisNode()\['ffx_cores_seed'].setValue(0)\n\n\tnuke.thisNode()\['ffx_anomoly_size'].setValue(0)\n\tnuke.thisNode()\['ffx_anomoly_anamorph'].setValue(0)\n\tnuke.thisNode()\['ffx_anomolies_offset'].setValue(0)\n\n\tnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\n\tnuke.toNode('Global_Brightness')\['white'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\n\tnuke.thisNode()\['ffx_more_pieces'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_size'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\n\tnuke.thisNode()\['ffx_lines_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_line_stretch'].setValue(1)\n\n\tnuke.message('\"Blue Abrams\" Flare Configured!')\n\nif nuke.thisNode()\['ffx_presets'].value() == \"Abrams Squared\":\n\tnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(15)\n\tnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(600)\n\tnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['disable'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\n\tnuke.toNode('cores')\['which'].setValue(0)\n\tnuke.toNode('core_bits')\['which'].setValue(7)\n\tnuke.toNode('core_coronas')\['which'].setValue(0)\n\tnuke.toNode('core_shapes')\['which'].setValue(0)\n\tnuke.toNode('lens_anomolies')\['which'].setValue(0)\n\tnuke.toNode('pieces')\['which'].setValue(1)\n\tnuke.toNode('big_pieces')\['which'].setValue(1)\n\tnuke.toNode('rings')\['which'].setValue(1)\n\tnuke.toNode('lines')\['which'].setValue(1)\n\n\tnuke.thisNode()\['ffx_flare_size'].setValue(1)\n\tnuke.thisNode()\['core_size'].setValue(0)\n\tnuke.thisNode()\['core_rays_size'].setValue(-0.4)\n\tnuke.thisNode()\['ffx_core_rays_rotation'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_thickness'].setValue(100)\n\tnuke.thisNode()\['ffx_rings_rotation'].setValue(0)\n\tnuke.thisNode()\['core_corona_size'].setValue(0)\n\tnuke.thisNode()\['core_shape_size'].setValue(0)\n\n\tnuke.toNode('Cores_Color')\['multiply'].setValue(\['0.2', '0.54', '2.95', '0'])\n\tnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '1', '4', '0'])\n\tnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['.41', '1.34', '3.2', '0'])\n\tnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['0.3', '0.51', '1', '0'])\n\tnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['0', '0.47', '2', '0'])\n\tnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1', '1', '2', '0'])\n\tnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1', '1.4', '3.7', '0'])\n\tnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['1', '1.85', '3.5', '0'])\n\tnuke.toNode('Rings_Color')\['multiply'].setValue(\['0.87', '1.04', '3.5', '0'])\n\tnuke.toNode('Lines_Color')\['multiply'].setValue(\['0.001', '0.83', '1.79', '0'])\n\n\tnuke.toNode('Core_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Rays_Blur')\['size'].setValue(4)\n\tnuke.toNode('Core_Corona_Blur')\['size'].setValue(75)\n\tnuke.toNode('Core_Shapes_Blur')\['size'].setValue(0)\n\tnuke.toNode('Pieces_Blur')\['size'].setValue(0)\n\tnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Bits_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Corona_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Shape_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Pieces_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Rings_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Bits_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Corona_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Shape_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Pieces_Plus')\['mix'].setValue(0.065)\n\tnuke.toNode('Big_Pieces_Plus')\['mix'].setValue(0.4)\n\tnuke.toNode('Rings_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['mix'].setValue(0.695)\n\n\tnuke.thisNode()\['ffx_cores_seed'].setValue(0)\n\n\tnuke.thisNode()\['ffx_anomoly_size'].setValue(0)\n\tnuke.thisNode()\['ffx_anomoly_anamorph'].setValue(0)\n\tnuke.thisNode()\['ffx_anomolies_offset'].setValue(0)\n\n\tnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\n\tnuke.toNode('Global_Brightness')\['white'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\n\tnuke.thisNode()\['ffx_more_pieces'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_size'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\n\tnuke.thisNode()\['ffx_lines_offset'].setValue(.45)\n\tnuke.thisNode()\['ffx_line_stretch'].setValue(1)\n\n\tnuke.message('\"Abrams Squared\" Flare Configured!')\n\nif nuke.thisNode()\['ffx_presets'].value() == \"Warm Light 2\":\n\tnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(77)\n\tnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(100)\n\tnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(12.5)\n\tnuke.toNode('FFX_VolumeRays')\['disable'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\n\tnuke.toNode('cores')\['which'].setValue(0)\n\tnuke.toNode('core_bits')\['which'].setValue(7)\n\tnuke.toNode('core_coronas')\['which'].setValue(5)\n\tnuke.toNode('core_shapes')\['which'].setValue(2)\n\tnuke.toNode('lens_anomolies')\['which'].setValue(5)\n\tnuke.toNode('pieces')\['which'].setValue(1)\n\tnuke.toNode('big_pieces')\['which'].setValue(3)\n\tnuke.toNode('rings')\['which'].setValue(1)\n\tnuke.toNode('lines')\['which'].setValue(0)\n\n\tnuke.thisNode()\['ffx_flare_size'].setValue(.65)\n\tnuke.thisNode()\['core_size'].setValue(-0.15)\n\tnuke.thisNode()\['core_rays_size'].setValue(.1)\n\tnuke.thisNode()\['ffx_core_rays_rotation'].setValue(40)\n\tnuke.thisNode()\['ffx_core_rays_thickness'].setValue(0)\n\tnuke.thisNode()\['ffx_rings_rotation'].setValue(0)\n\tnuke.thisNode()\['core_corona_size'].setValue(0.75)\n\tnuke.thisNode()\['core_shape_size'].setValue(0)\n\tnuke.thisNode()\['lens_pieces_size'].setValue(0.3)\n\n\tnuke.toNode('Cores_Color')\['multiply'].setValue(\['1.27', '1', '0.72', '0'])\n\tnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['1', '.91', '.76', '0'])\n\tnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['0', '0.47', '2', '0'])\n\tnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1.5', '1.39', '0.51', '0'])\n\tnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['1.6', '1', '.39', '0'])\n\tnuke.toNode('Rings_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Lines_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\n\tnuke.toNode('Core_Blur')\['size'].setValue(23)\n\tnuke.toNode('Core_Rays_Blur')\['size'].setValue(5.6)\n\tnuke.toNode('Core_Corona_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Shapes_Blur')\['size'].setValue(0)\n\tnuke.toNode('Pieces_Blur')\['size'].setValue(3)\n\tnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Bits_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Corona_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Shape_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Pieces_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Rings_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Bits_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Corona_Plus')\['mix'].setValue(.23)\n\tnuke.toNode('Core_Shape_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Pieces_Plus')\['mix'].setValue(.05)\n\tnuke.toNode('Big_Pieces_Plus')\['mix'].setValue(.2)\n\tnuke.toNode('Rings_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['mix'].setValue(1)\n\n\tnuke.thisNode()\['ffx_cores_seed'].setValue(0)\n\n\tnuke.thisNode()\['ffx_anomoly_size'].setValue(0)\n\tnuke.thisNode()\['ffx_anomoly_anamorph'].setValue(0)\n\tnuke.thisNode()\['ffx_anomolies_offset'].setValue(0)\n\n\tnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\n\tnuke.toNode('Global_Brightness')\['white'].setValue(\['1.27', '1.09', '0.96', '0'])\n\tnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\n\tnuke.thisNode()\['ffx_more_pieces'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_size'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\n\tnuke.thisNode()\['ffx_lines_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_line_stretch'].setValue(1)\n\n\tnuke.message('\"Warm Light\" Flare Configured!')\n\nif nuke.thisNode()\['ffx_presets'].value() == \"Desert Sun\":\n\tnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(77)\n\tnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(100)\n\tnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(12.5)\n\tnuke.toNode('FFX_VolumeRays')\['disable'].setValue(1)\n\tnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\n\tnuke.toNode('cores')\['which'].setValue(0)\n\tnuke.toNode('core_bits')\['which'].setValue(9)\n\tnuke.toNode('core_coronas')\['which'].setValue(2)\n\tnuke.toNode('core_shapes')\['which'].setValue(2)\n\tnuke.toNode('lens_anomolies')\['which'].setValue(5)\n\tnuke.toNode('pieces')\['which'].setValue(3)\n\tnuke.toNode('big_pieces')\['which'].setValue(3)\n\tnuke.toNode('rings')\['which'].setValue(1)\n\tnuke.toNode('lines')\['which'].setValue(0)\n\n\tnuke.thisNode()\['ffx_flare_size'].setValue(.65)\n\tnuke.thisNode()\['core_size'].setValue(2.35)\n\tnuke.thisNode()\['core_rays_size'].setValue(1)\n\tnuke.thisNode()\['ffx_core_rays_rotation'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_thickness'].setValue(0)\n\tnuke.thisNode()\['ffx_rings_rotation'].setValue(0)\n\tnuke.thisNode()\['core_corona_size'].setValue(0.5)\n\tnuke.thisNode()\['core_shape_size'].setValue(2)\n\tnuke.thisNode()\['lens_pieces_size'].setValue(0.3)\n\n\tnuke.toNode('Cores_Color')\['multiply'].setValue(\['1.27', '1', '0.72', '0'])\n\tnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '.97', '.66', '0'])\n\tnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['1', '.91', '.76', '0'])\n\tnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['1', '.97', '.47', '0'])\n\tnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['0', '0.47', '2', '0'])\n\tnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1.32', '1.35', '1.07', '0'])\n\tnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1.5', '1.46', '0.56', '0'])\n\tnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['1.6', '1', '.39', '0'])\n\tnuke.toNode('Rings_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Lines_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\n\tnuke.toNode('Core_Blur')\['size'].setValue(23)\n\tnuke.toNode('Core_Rays_Blur')\['size'].setValue(5.6)\n\tnuke.toNode('Core_Corona_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Shapes_Blur')\['size'].setValue(0)\n\tnuke.toNode('Pieces_Blur')\['size'].setValue(3)\n\tnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Bits_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Corona_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Shape_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Anomolies_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Rings_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Bits_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Corona_Plus')\['mix'].setValue(.23)\n\tnuke.toNode('Core_Shape_Plus')\['mix'].setValue(.04)\n\tnuke.toNode('Anomolies_Plus')\['mix'].setValue(.72)\n\tnuke.toNode('Pieces_Plus')\['mix'].setValue(.1)\n\tnuke.toNode('Big_Pieces_Plus')\['mix'].setValue(.15)\n\tnuke.toNode('Rings_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['mix'].setValue(1)\n\n\tnuke.thisNode()\['ffx_cores_seed'].setValue(0)\n\n\tnuke.thisNode()\['ffx_anomoly_size'].setValue(0)\n\tnuke.thisNode()\['ffx_anomoly_anamorph'].setValue(0)\n\tnuke.thisNode()\['ffx_anomolies_offset'].setValue(0)\n\n\tnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\n\tnuke.toNode('Global_Brightness')\['white'].setValue(\['1.79', '1.79', '1.33', '0'])\n\tnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\n\tnuke.thisNode()\['ffx_more_pieces'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_size'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\n\tnuke.thisNode()\['ffx_lines_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_line_stretch'].setValue(1)\n\n\tnuke.message('\"Desert Sun\" Flare Configured!')\n\nif nuke.thisNode()\['ffx_presets'].value() == \"Purple Steel\":\n\tnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(57)\n\tnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(600)\n\tnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['disable'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\n\tnuke.toNode('cores')\['which'].setValue(5)\n\tnuke.toNode('core_bits')\['which'].setValue(8)\n\tnuke.toNode('core_coronas')\['which'].setValue(5)\n\tnuke.toNode('core_shapes')\['which'].setValue(1)\n\tnuke.toNode('lens_anomolies')\['which'].setValue(7)\n\tnuke.toNode('pieces')\['which'].setValue(1)\n\tnuke.toNode('big_pieces')\['which'].setValue(4)\n\tnuke.toNode('rings')\['which'].setValue(0)\n\tnuke.toNode('lines')\['which'].setValue(7)\n\n\tnuke.thisNode()\['ffx_flare_size'].setValue(1)\n\tnuke.thisNode()\['core_size'].setValue(0)\n\tnuke.thisNode()\['core_rays_size'].setValue(0.3)\n\tnuke.thisNode()\['ffx_core_rays_rotation'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_thickness'].setValue(0)\n\tnuke.thisNode()\['ffx_rings_rotation'].setValue(0)\n\tnuke.thisNode()\['core_corona_size'].setValue(0)\n\tnuke.thisNode()\['core_shape_size'].setValue(-0.4)\n\tnuke.thisNode()\['lens_pieces_size'].setValue(-0.05)\n\n\tnuke.toNode('Cores_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['0.54', '1.29', '3.7', '0'])\n\tnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['0', '0.47', '2', '0'])\n\tnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1', '1.24', '3.25', '0'])\n\tnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1', '1.4', '3.7', '0'])\n\tnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['.49', '.54', '1', '0'])\n\tnuke.toNode('Rings_Color')\['multiply'].setValue(\['0.87', '1.04', '3.5', '0'])\n\tnuke.toNode('Lines_Color')\['multiply'].setValue(\['1.02', '1.02', '1.02', '0'])\n\n\tnuke.toNode('Core_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Rays_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Corona_Blur')\['size'].setValue(75)\n\tnuke.toNode('Core_Shapes_Blur')\['size'].setValue(22.5)\n\tnuke.toNode('Pieces_Blur')\['size'].setValue(7)\n\tnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Bits_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Corona_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Shape_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Anomolies_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Rings_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Bits_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Corona_Plus')\['mix'].setValue(.745)\n\tnuke.toNode('Core_Shape_Plus')\['mix'].setValue(.7)\n\tnuke.toNode('Anomolies_Plus')\['mix'].setValue(.76)\n\tnuke.toNode('Pieces_Plus')\['mix'].setValue(0.08)\n\tnuke.toNode('Big_Pieces_Plus')\['mix'].setValue(.27)\n\tnuke.toNode('Rings_Plus')\['mix'].setValue(.58)\n\tnuke.toNode('Lines_Plus')\['mix'].setValue(1)\n\n\tnuke.thisNode()\['ffx_cores_seed'].setValue(0)\n\n\tnuke.thisNode()\['ffx_anomoly_size'].setValue(0)\n\tnuke.thisNode()\['ffx_anomoly_anamorph'].setValue(0)\n\tnuke.thisNode()\['ffx_anomolies_offset'].setValue(0)\n\n\tnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\n\tnuke.toNode('Global_Brightness')\['white'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\n\tnuke.thisNode()\['ffx_more_pieces'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_size'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\n\tnuke.thisNode()\['ffx_lines_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_line_stretch'].setValue(1)\n\n\tnuke.message('\"Purple Steel\" Flare Configured!')\n\nif nuke.thisNode()\['ffx_presets'].value() == \"Serenity\":\n\tnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(17)\n\tnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(600)\n\tnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['disable'].setValue(0)\n\tnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\n\tnuke.toNode('cores')\['which'].setValue(5)\n\tnuke.toNode('core_bits')\['which'].setValue(10)\n\tnuke.toNode('core_coronas')\['which'].setValue(2)\n\tnuke.toNode('core_shapes')\['which'].setValue(6)\n\tnuke.toNode('lens_anomolies')\['which'].setValue(0)\n\tnuke.toNode('pieces')\['which'].setValue(8)\n\tnuke.toNode('big_pieces')\['which'].setValue(1)\n\tnuke.toNode('rings')\['which'].setValue(0)\n\tnuke.toNode('lines')\['which'].setValue(0)\n\n\tnuke.thisNode()\['ffx_flare_size'].setValue(1)\n\tnuke.thisNode()\['core_size'].setValue(0)\n\tnuke.thisNode()\['core_rays_size'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_rotation'].setValue(0)\n\tnuke.thisNode()\['ffx_core_rays_thickness'].setValue(0)\n\tnuke.thisNode()\['ffx_rings_rotation'].setValue(0)\n\tnuke.thisNode()\['core_corona_size'].setValue(0)\n\tnuke.thisNode()\['core_shape_size'].setValue(0)\n\n\tnuke.toNode('Cores_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['1', '1', '1.7', '0'])\n\tnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Rings_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Lines_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\n\tnuke.toNode('Core_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Rays_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Corona_Blur')\['size'].setValue(0)\n\tnuke.toNode('Core_Shapes_Blur')\['size'].setValue(0)\n\tnuke.toNode('Pieces_Blur')\['size'].setValue(0)\n\tnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Bits_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Corona_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Core_Shape_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Anomolies_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(0)\n\tnuke.toNode('Rings_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(1)\n\tnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(0)\n\n\tnuke.toNode('Core_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Bits_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Core_Corona_Plus')\['mix'].setValue(.23)\n\tnuke.toNode('Core_Shape_Plus')\['mix'].setValue(.7)\n\tnuke.toNode('Anomolies_Plus')\['mix'].setValue(.72)\n\tnuke.toNode('Pieces_Plus')\['mix'].setValue(0.06)\n\tnuke.toNode('Big_Pieces_Plus')\['mix'].setValue(.25)\n\tnuke.toNode('Rings_Plus')\['mix'].setValue(1)\n\tnuke.toNode('Lines_Plus')\['mix'].setValue(1)\n\n\tnuke.thisNode()\['ffx_cores_seed'].setValue(0)\n\n\tnuke.thisNode()\['ffx_anomoly_size'].setValue(0)\n\tnuke.thisNode()\['ffx_anomoly_anamorph'].setValue(0)\n\tnuke.thisNode()\['ffx_anomolies_offset'].setValue(0)\n\n\tnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\n\tnuke.toNode('Global_Brightness')\['white'].setValue(\['1', '1', '1', '0'])\n\tnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\n\tnuke.thisNode()\['ffx_more_pieces'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_size'].setValue(0)\n\tnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\n\tnuke.thisNode()\['ffx_lines_offset'].setValue(0)\n\tnuke.thisNode()\['ffx_line_stretch'].setValue(1)\n\n\tnuke.message('\"Serenity\" Flare Configured!')"} + addUserKnob {22 ffx_reset l "reset all" -STARTLINE T "import nuke\n\nn = nuke.toNode('Flare_Tool')\n\nnuke.thisNode()\['ffx_presets'].setValue(0)\n\nnuke.toNode('FFX_VolumeRays')\['raylength'].setValue(15)\nnuke.toNode('FFX_VolumeRays')\['radial_size'].setValue(600)\nnuke.toNode('FFX_VolumeRays')\['pre_blur'].setValue(0)\nnuke.toNode('FFX_VolumeRays')\['disable'].setValue(0)\nnuke.toNode('FFX_VolumeRays')\['CCorrect1_gain'].setValue(1)\n\nnuke.toNode('cores')\['which'].setValue(0)\nnuke.toNode('core_bits')\['which'].setValue(0)\nnuke.toNode('core_coronas')\['which'].setValue(0)\nnuke.toNode('core_shapes')\['which'].setValue(0)\nnuke.toNode('lens_anomolies')\['which'].setValue(0)\nnuke.toNode('pieces')\['which'].setValue(0)\nnuke.toNode('big_pieces')\['which'].setValue(0)\nnuke.toNode('rings')\['which'].setValue(0)\nnuke.toNode('lines')\['which'].setValue(0)\n\nnuke.thisNode()\['ffx_flare_size'].setValue(1)\nnuke.thisNode()\['core_size'].setValue(0)\nnuke.thisNode()\['core_rays_size'].setValue(0)\nnuke.thisNode()\['core_corona_size'].setValue(0)\nnuke.thisNode()\['core_shape_size'].setValue(0)\nnuke.thisNode()\['lens_pieces_size'].setValue(0)\n\nnuke.toNode('Cores_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Core_Rays_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Core_Coronas_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Core_Shapes_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Bloom_Grade')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Anomolies_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Pieces_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Big_Pieces_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Rings_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Lines_Color')\['multiply'].setValue(\['1', '1', '1', '0'])\n\nnuke.toNode('Core_Blur')\['size'].setValue(0)\nnuke.toNode('Core_Rays_Blur')\['size'].setValue(0)\nnuke.toNode('Core_Corona_Blur')\['size'].setValue(0)\nnuke.toNode('Core_Shapes_Blur')\['size'].setValue(0)\nnuke.toNode('Pieces_Blur')\['size'].setValue(0)\nnuke.toNode('Big_Pieces_Blur')\['size'].setValue(0)\n\nnuke.toNode('Core_Plus')\['disable'].setValue(0)\nnuke.toNode('Core_Bits_Plus')\['disable'].setValue(1)\nnuke.toNode('Core_Corona_Plus')\['disable'].setValue(1)\nnuke.toNode('Core_Shape_Plus')\['disable'].setValue(1)\nnuke.toNode('Anomolies_Plus')\['disable'].setValue(1)\nnuke.toNode('Pieces_Plus')\['disable'].setValue(1)\nnuke.toNode('Big_Pieces_Plus')\['disable'].setValue(1)\nnuke.toNode('Rings_Plus')\['disable'].setValue(1)\nnuke.toNode('Lines_Plus')\['disable'].setValue(1)\nnuke.toNode('Center_Bloom_Plus')\['disable'].setValue(0)\nnuke.toNode('Edge_Shimmer_Bloom')\['disable'].setValue(0)\n\nnuke.toNode('Global_Brightness')\['multiply'].setValue(1)\nnuke.toNode('Global_Brightness')\['white'].setValue(\['1', '1', '1', '0'])\nnuke.toNode('Global_Brightness')\['gamma'].setValue(1)\n\nnuke.thisNode()\['ffx_more_pieces'].setValue(0)\nnuke.thisNode()\['ffx_pieces_offset'].setValue(0)\nnuke.thisNode()\['ffx_pieces_size'].setValue(0)\nnuke.thisNode()\['ffx_pieces_seed'].setValue(0)\nnuke.thisNode()\['ffx_lines_offset'].setValue(0)\nnuke.thisNode()\['ffx_line_stretch'].setValue(0)\n\nnuke.message('Flare Successfully Reset...')"} + addUserKnob {26 ""} + addUserKnob {41 format T Constant3.format} + addUserKnob {26 flare_position_txt l "@b;Flare Translate"} + addUserKnob {12 ffx_position l "flare position"} + ffx_position {1985 1035} + addUserKnob {7 ffx_flare_size l size R 0.1 10} + ffx_flare_size 1 + addUserKnob {26 ""} + addUserKnob {26 flare_color_txt l "@b;Global CC"} + addUserKnob {41 multiply_9 l brightness T Global_Brightness.multiply} + addUserKnob {41 white l color T Global_Brightness.white} + addUserKnob {41 gamma T Global_Brightness.gamma} + addUserKnob {26 ""} + addUserKnob {20 ffx_cores l components} + addUserKnob {26 volume_rays_txt l "@b;Volume Ray Options"} + addUserKnob {41 raylength l "Ray Length" T FFX_VolumeRays.raylength} + addUserKnob {41 radial_size l "Radial Size" T FFX_VolumeRays.radial_size} + addUserKnob {41 pre_blur l "Pre-Ray Blur" T FFX_VolumeRays.pre_blur} + addUserKnob {41 CCorrect1_gain l "Volume Gain" T FFX_VolumeRays.CCorrect1_gain} + addUserKnob {26 ""} + addUserKnob {20 core_group l Core n 1} + core_group 0 + addUserKnob {7 core_size l size R -4 4} + addUserKnob {26 ""} + addUserKnob {41 ffx_cores_choice l core T cores.which} + addUserKnob {41 multiply l color T Cores_Color.multiply} + addUserKnob {41 size_3 l blur T Core_Blur.size} + addUserKnob {41 mix T Core_Plus.mix} + addUserKnob {20 endGroup n -1} + addUserKnob {41 disable_1 l disable T Core_Plus.disable} + addUserKnob {20 core_rays_group l "Core Rays" n 1} + core_rays_group 0 + addUserKnob {7 core_rays_size l size R -4 4} + addUserKnob {7 ffx_core_rays_rotation l rotation t "When available." R 0 360} + addUserKnob {7 ffx_core_rays_thickness l thickness t "When available." R 0 100} + ffx_core_rays_thickness 30 + addUserKnob {26 ""} + addUserKnob {41 ffx_core_rays_choice l "core rays" T core_bits.which} + addUserKnob {41 multiply_1 l color T Core_Rays_Color.multiply} + addUserKnob {41 size_2 l blur T Core_Rays_Blur.size} + addUserKnob {41 mix_1 l mix T Core_Bits_Plus.mix} + addUserKnob {3 ffx_cores_seed l "pick a seed"} + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {41 disable_2 l disable T Core_Bits_Plus.disable} + addUserKnob {20 core_corona_group l "Core Corona" n 1} + core_corona_group 0 + addUserKnob {7 core_corona_size l size R -4 4} + addUserKnob {26 ""} + addUserKnob {41 ffx_core_coronas_choice l "core corona" T core_coronas.which} + addUserKnob {41 multiply_2 l color T Core_Coronas_Color.multiply} + addUserKnob {41 size_4 l blur T Core_Corona_Blur.size} + addUserKnob {41 mix_2 l mix T Core_Corona_Plus.mix} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {41 disable_3 l disable T Core_Corona_Plus.disable} + addUserKnob {20 core_shape_group l "Core Shape" n 1} + core_shape_group 0 + addUserKnob {7 core_shape_size l size R -4 4} + addUserKnob {7 core_shape_rotation l rotate R 0 360} + addUserKnob {26 ""} + addUserKnob {41 ffx_core_shapes_choice l "core shape" T core_shapes.which} + addUserKnob {41 multiply_3 l color T Core_Shapes_Color.multiply} + addUserKnob {41 size_5 l blur T Core_Shapes_Blur.size} + addUserKnob {41 mix_3 l mix T Core_Shape_Plus.mix} + addUserKnob {20 endGroup_3 l endGroup n -1} + addUserKnob {41 disable_4 l disable T Core_Shape_Plus.disable} + addUserKnob {20 ffx_lens_anomolies l "lens anomolies"} + addUserKnob {26 lens_anomolies_txt l "@b;Lens Anomolies"} + addUserKnob {41 ffx_lens_anomolies_choice l "lens anomoly" T lens_anomolies.which} + addUserKnob {41 multiply_4 l color T Anomolies_Color.multiply} + addUserKnob {41 saturation l pre-sat T Anomolies_Saturation.saturation} + addUserKnob {7 ffx_anomoly_size l size R -4 4} + addUserKnob {7 ffx_anomoly_anamorph l anamorph R -10 10} + addUserKnob {7 ffx_anomolies_offset l offset R -5 5} + addUserKnob {41 mix_4 l mix T Anomolies_Plus.mix} + addUserKnob {41 disable_5 l disable T Anomolies_Plus.disable} + addUserKnob {20 ffx_lens_pieces l "lens pieces"} + addUserKnob {20 lens_pieces_group l "Lens Pieces" n 1} + lens_pieces_group 0 + addUserKnob {7 lens_pieces_size l size R -4 4} + addUserKnob {7 ffx_more_pieces l "more pieces" R 0 10} + addUserKnob {7 ffx_pieces_offset l offset R -5 5} + addUserKnob {7 ffx_pieces_size l "size variation" R -5 5} + addUserKnob {3 ffx_pieces_seed l seed} + addUserKnob {26 ""} + addUserKnob {41 ffx_flare_pieces_choice l pieces T pieces.which} + addUserKnob {41 multiply_5 l color T Pieces_Color.multiply} + addUserKnob {41 size l blur T Pieces_Blur.size} + addUserKnob {41 mix_5 l mix T Pieces_Plus.mix} + addUserKnob {20 endGroup_4 l endGroup n -1} + addUserKnob {41 disable_6 l disable T Pieces_Plus.disable} + addUserKnob {20 big_pieces_group l "Big Pieces" n 1} + big_pieces_group 0 + addUserKnob {41 which l "big pieces" T big_pieces.which} + addUserKnob {7 ffx_big_pieces_offset l offset R -5 5} + addUserKnob {41 multiply_8 l color T Big_Pieces_Color.multiply} + addUserKnob {41 size_1 l blur T Big_Pieces_Blur.size} + addUserKnob {41 mix_8 l mix T Big_Pieces_Plus.mix} + addUserKnob {20 endGroup_5 l endGroup n -1} + addUserKnob {41 disable_9 l disable T Big_Pieces_Plus.disable} + addUserKnob {20 rings_group l Rings n 1} + rings_group 0 + addUserKnob {41 ffx_flare_rings_choice l rings T rings.which} + addUserKnob {41 multiply_6 l color T Rings_Color.multiply} + addUserKnob {7 ffx_rings_rotation l rotation t "When available" R 0 360} + addUserKnob {41 mix_6 l mix T Rings_Plus.mix} + addUserKnob {20 endGroup_6 l endGroup n -1} + addUserKnob {41 disable_7 l disable T Rings_Plus.disable} + addUserKnob {20 lines_group l Lines n 1} + lines_group 0 + addUserKnob {41 ffx_flare_lines_choice l lines T lines.which} + addUserKnob {41 multiply_7 l color T Lines_Color.multiply} + addUserKnob {7 ffx_line_stretch l stretch R 1 20} + addUserKnob {7 ffx_lines_offset l offset R -5 5} + addUserKnob {41 mix_7 l mix T Lines_Plus.mix} + addUserKnob {20 endGroup_7 l endGroup n -1} + addUserKnob {41 disable_8 l disable T Lines_Plus.disable} + addUserKnob {20 lens_dynamics l "lens dynamics"} + addUserKnob {26 center_frame_txt l "@b;Center Frame Bloom"} + addUserKnob {41 disable_10 l disable T Center_Bloom_Plus.disable} + addUserKnob {26 edge_shimmer_bloom l "@b;Edge Shimmer / Bloom"} + addUserKnob {41 disable_11 l "shimmer disable" T Edge_Shimmer_Bloom.disable} + addUserKnob {41 disable_12 l "bloom disable" T FFX_VolumeRays.disable} +} + BackdropNode { + inputs 0 + name BackdropNode10 + tile_color 0x822020ff + label "(Dynamics) Center Frame Bloom" + note_font_size 42 + xpos -1016 + ypos 3903 + bdwidth 722 + bdheight 338 + } + BackdropNode { + inputs 0 + name BackdropNode6 + tile_color 0x208229ff + label "Lens Anomolies" + note_font_size 42 + xpos -3602 + ypos 4426 + bdwidth 3291 + bdheight 778 + } + BackdropNode { + inputs 0 + name BackdropNode1 + tile_color 0x8e8e3800 + label Cores + note_font_size 42 + xpos -5305 + ypos -1652 + bdwidth 5042 + bdheight 5272 + } + BackdropNode { + inputs 0 + name BackdropNode9 + tile_color 0x822020ff + label "(Dynamics) Camera Gate Bloom" + note_font_size 42 + xpos -1439 + ypos 77 + bdwidth 1130 + bdheight 658 + } + BackdropNode { + inputs 0 + name BackdropNode4 + tile_color 0x70702cff + label "Core Shapes" + note_font_size 42 + xpos -5274 + ypos 1844 + bdwidth 4965 + bdheight 1737 + } + BackdropNode { + inputs 0 + name BackdropNode2 + tile_color 0x70702cff + label "Core Rays" + note_font_size 42 + xpos -5219 + ypos -1131 + bdwidth 4916 + bdheight 1084 + } + BackdropNode { + inputs 0 + name BackdropNode3 + tile_color 0x70702cff + label "Core Coronas" + note_font_size 42 + xpos -2660 + ypos 843 + bdwidth 2367 + bdheight 922 + } + BackdropNode { + inputs 0 + name BackdropNode8 + tile_color 0x4b65a0ff + label Pieces + note_font_size 42 + xpos -8343 + ypos 5361 + bdwidth 8014 + bdheight 4879 + } + BackdropNode { + inputs 0 + name BackdropNode7 + tile_color 0x364a75ff + label Lines + note_font_size 42 + xpos -8325 + ypos 7462 + bdwidth 7965 + bdheight 2744 + } + BackdropNode { + inputs 0 + name BackdropNode5 + tile_color 0x364a75ff + label Rings + note_font_size 42 + xpos -3216 + ypos 6874 + bdwidth 2849 + bdheight 569 + } + StickyNote { + inputs 0 + name StickyNote1 + label "\"Aura\"" + xpos -2170 + ypos 1130 + } + StickyNote { + inputs 0 + name StickyNote19 + label "\"Stepping Cloud\"" + xpos -1807 + ypos 921 + } + StickyNote { + inputs 0 + name StickyNote20 + label "\"Double Cloud\"" + xpos -2412 + ypos 1105 + } + StickyNote { + inputs 0 + name StickyNote22 + label "Cloud Anomoly" + xpos -1645 + ypos 1188 + } + StickyNote { + inputs 0 + name StickyNote24 + label "Double Ring" + xpos -4974 + ypos 1952 + } + StickyNote { + inputs 0 + name StickyNote25 + label "Single Line" + xpos -2676 + ypos 4597 + } + StickyNote { + inputs 0 + name StickyNote26 + label "Double Line" + xpos -3108 + ypos 4588 + } + StickyNote { + inputs 0 + name StickyNote27 + label "Double Line" + xpos -3378 + ypos 4581 + } + StickyNote { + inputs 0 + name StickyNote28 + label "Double Sun Anomoly" + xpos -3531 + ypos 2185 + } + StickyNote { + inputs 0 + name StickyNote29 + label "Half Rainbow Anomoly" + xpos -2487 + ypos 7007 + } + StickyNote { + inputs 0 + name StickyNote30 + label "Chopped Lines #1" + xpos -6072 + ypos 7622 + } + StickyNote { + inputs 0 + name StickyNote31 + label "Chopped Lines #1" + xpos -6611 + ypos 8182 + } + StickyNote { + inputs 0 + name StickyNote2 + label "Double Sun Anomoly" + xpos -3166 + ypos 2206 + } + StickyNote { + inputs 0 + name StickyNote4 + label "Double Sun Anomoly" + xpos -4300 + ypos 1937 + } + StickyNote { + inputs 0 + name StickyNote5 + label "Double Ring" + xpos -3901 + ypos 1936 + } + StickyNote { + inputs 0 + name StickyNote3 + label "Chopped Lines #1" + xpos -4523 + ypos 7556 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.15+(ffx_lines_offset) i}} + radius {0 1.06 136.36} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 11.52 + ring_color 3 + inner_color 1 + outer_falloff 1.7 + chroma_spread 0.02 + brightness 0.095 + vis_mask -rgba.alpha + name Flare55 + xpos -1847 + ypos 9566 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Blur { + size 16 + name Blur145 + xpos -1847 + ypos 9592 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Blur { + size 1 + name Blur146 + xpos -1847 + ypos 9630 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x+55 i} {parent.ffx_position.y+7 i}} + offset {{2.15+(ffx_lines_offset) i}} + radius {0 3.97 31.8} + size_mult {{(parent.ffx_flare_size)+1.8 i}} + anamorph 11.52 + ring_color 0.5 + inner_color 1 + outer_falloff 1.7 + chroma_spread 0.02 + brightness 0.095 + vis_mask -rgba.alpha + name Flare204 + xpos -1991 + ypos 9435 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Blur { + size 3 + name Blur147 + xpos -1991 + ypos 9461 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Glow { + brightness 0.5 + name Glow35 + xpos -1991 + ypos 9501 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Grade { + multiply 10 + name Grade58 + xpos -1991 + ypos 9527 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Grade { + multiply {1 1 1 0} + name Grade59 + xpos -1991 + ypos 9553 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.07 + name Merge175 + xpos -1991 + ypos 9636 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.15+(ffx_lines_offset) i}} + radius {0 1.06 136.36} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 11.52 + ring_color 3 + inner_color 1 + outer_falloff 1.7 + chroma_spread 0.02 + brightness 0.095 + vis_mask -rgba.alpha + name Flare53 + xpos -2265 + ypos 9519 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Blur { + size 16 + name Blur6 + xpos -2265 + ypos 9545 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Blur { + size 1 + name Blur143 + xpos -2265 + ypos 9583 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.15+(ffx_lines_offset) i}} + radius {0 3.97 31.8} + size_mult {{(parent.ffx_flare_size)+1.8 i}} + anamorph 11.52 + ring_color 0.5 + inner_color 1 + outer_falloff 1.7 + chroma_spread 0.02 + brightness 0.095 + vis_mask -rgba.alpha + name Flare54 + xpos -2144 + ypos 9388 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Blur { + size 3 + name Blur144 + xpos -2144 + ypos 9414 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Glow { + brightness 0.5 + name Glow34 + xpos -2144 + ypos 9454 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Grade { + multiply 10 + name Grade56 + xpos -2144 + ypos 9480 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Grade { + multiply {1 1 1 0} + name Grade57 + xpos -2144 + ypos 9506 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.07 + name Merge174 + xpos -2144 + ypos 9589 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + mix 0.5 + name Merge188 + xpos -2144 + ypos 9636 + disable {{Lines_Plus.disable==1?1:lines.which==6?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {262.81 269.91 269.91} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare287 + xpos -4213 + ypos 8214 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform84 + xpos -4213 + ypos 8240 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {156.26 160.52 261.37} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare288 + xpos -4218 + ypos 8181 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {83.82 92.34 126.43} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare289 + xpos -4093 + ypos 8114 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform85 + xpos -4093 + ypos 8140 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge228 + xpos -4093 + ypos 8181 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge229 + xpos -4093 + ypos 8240 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {282.69 289.79 377.86} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare290 + xpos -3984 + ypos 8154 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {-60 0} + center {960 540} + black_outside false + name Transform86 + xpos -3984 + ypos 8180 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {181.84 198.88 218.76} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare291 + xpos -3880 + ypos 8128 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform87 + xpos -3880 + ypos 8154 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {117.91 129.27 161.94} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare292 + xpos -3881 + ypos 8080 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {42.92 42.92 104} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.23 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare293 + xpos -3760 + ypos 8014 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {200 0} + center {960 540} + black_outside false + name Transform88 + xpos -3760 + ypos 8040 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge230 + xpos -3760 + ypos 8080 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge231 + xpos -3760 + ypos 8154 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge232 + xpos -3760 + ypos 8180 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge233 + xpos -3760 + ypos 8240 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Blur { + size 61 + name Blur127 + xpos -3760 + ypos 8266 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +set N2151c920 [stack 0] + Shuffle { + green red + blue red + alpha red + name Shuffle23 + xpos -3760 + ypos 8313 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +push $N2151c920 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 8 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.25 + chroma_shift -10.4 + chroma_shift_angle 42 + vis_out 1 + flattening 3.2 + name Flare294 + xpos -3631 + ypos 8055 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Grade { + inputs 1+1 + white 4 + multiply 4 + maskChannelMask rgba.red + name Grade53 + xpos -3631 + ypos 8272 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge234 + xpos -3631 + ypos 8313 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {262.81 269.91 269.91} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare303 + xpos -4079 + ypos 7836 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform96 + xpos -4079 + ypos 7862 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {156.26 160.52 261.37} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare304 + xpos -4084 + ypos 7803 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {83.82 92.34 126.43} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare305 + xpos -3959 + ypos 7736 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform97 + xpos -3959 + ypos 7762 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge249 + xpos -3959 + ypos 7803 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge250 + xpos -3959 + ypos 7862 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {282.69 289.79 377.86} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare306 + xpos -3850 + ypos 7776 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {-60 0} + center {960 540} + black_outside false + name Transform98 + xpos -3850 + ypos 7802 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {181.84 198.88 218.76} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare307 + xpos -3746 + ypos 7750 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform99 + xpos -3746 + ypos 7776 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {117.91 129.27 161.94} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare308 + xpos -3747 + ypos 7702 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {42.92 42.92 104} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.23 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare309 + xpos -3626 + ypos 7636 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {200 0} + center {960 540} + black_outside false + name Transform100 + xpos -3626 + ypos 7662 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge251 + xpos -3626 + ypos 7702 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge252 + xpos -3626 + ypos 7776 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge253 + xpos -3626 + ypos 7802 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge254 + xpos -3626 + ypos 7862 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Blur { + size 61 + name Blur122 + xpos -3626 + ypos 7888 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +set N216cda50 [stack 0] + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 8 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.25 + chroma_shift -10.4 + chroma_shift_angle 42 + vis_out 1 + flattening 3.2 + name Flare310 + xpos -3497 + ypos 7677 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Grade { + inputs 1+1 + white 4 + multiply 4 + maskChannelMask rgba.red + name Grade60 + xpos -3497 + ypos 7894 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +set N216ce130 [stack 0] + Merge2 { + inputs 2 + operation mask + maskChannelMask none + mix 0.885 + name Merge235 + xpos -3497 + ypos 8313 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {0 -40} + scale {1.4 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform89 + xpos -3185 + ypos 8313 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {42.92 42.92 146.15} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 1 + outer_falloff 0.23 + inner_falloff 0.41 + vis_out 1.04 + corners 0 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare286 + xpos -3362 + ypos 7747 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform83 + xpos -3362 + ypos 7773 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Blur { + size 30 + name Blur77 + xpos -3362 + ypos 7799 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Shuffle { + green red + blue red + alpha red + name Shuffle6 + xpos -3362 + ypos 7857 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +set N216cf5d0 [stack 0] +push $N216cda50 + Shuffle { + green red + blue red + alpha red + name Shuffle26 + xpos -3626 + ypos 7935 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +push $N216ce130 + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge255 + xpos -3497 + ypos 7935 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation stencil + maskChannelMask none + mix 0.7 + name Merge226 + xpos -3362 + ypos 7935 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {0 -10} + scale {1.4 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform101 + xpos -3197 + ypos 7935 + } +set N217eaeb0 [stack 0] +push 0 +push $N217eaeb0 +push $N216cf5d0 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {243.04 247.3 357.63} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare312 + xpos -3198 + ypos 7714 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {33.01 61.88 106.14} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 3 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare313 + xpos -3069 + ypos 7647 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform103 + xpos -3069 + ypos 7673 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge256 + xpos -3069 + ypos 7714 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {105.13 116.49 174.73} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare315 + xpos -2951 + ypos 7620 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {33.02 44.38 86.99} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare316 + xpos -2841 + ypos 7553 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform105 + xpos -2841 + ypos 7579 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge258 + xpos -2841 + ypos 7620 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge260 + xpos -2841 + ypos 7714 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Blur { + size 61 + name Blur123 + xpos -2841 + ypos 7753 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +set N217ed110 [stack 0] + Shuffle { + green red + blue red + alpha red + name Shuffle27 + xpos -2841 + ypos 7799 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } +push $N217ed110 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {1.45 1.45 34.17} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 10 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.25 + chroma_shift -10.4 + chroma_shift_angle 42 + vis_out 1 + flattening 5.5 + name Flare317 + xpos -2712 + ypos 7542 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade61 + xpos -2712 + ypos 7759 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge261 + xpos -2712 + ypos 7799 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Transform { + translate {0 30} + scale {1.3 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform106 + xpos -2712 + ypos 7825 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation stencil + maskChannelMask none + mix 0.94 + name Merge227 + xpos -2712 + ypos 7857 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 3+1 + operation plus + maskChannelMask none + name Merge262 + xpos -2712 + ypos 7935 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge236 + xpos -2712 + ypos 8313 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Blur { + size {10 0} + name Blur134 + xpos -2712 + ypos 8375 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation16 + xpos -2712 + ypos 8413 + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 28 + maskChannelMask none + name DirBlurWrapper30 + xpos -2712 + ypos 8462 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 38 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper31 + xpos -2712 + ypos 8500 + disable {{Lines_Plus.disable==1?1:lines.which==5?0:1}} + } + Sharpen { + amount 50 + maskChannelMask none + name Sharpen5 + xpos -2712 + ypos 8538 + } + Grade { + whitepoint 0.8 + maskChannelMask none + name Grade62 + xpos -2712 + ypos 8576 + } + Grade { + multiply 0.54 + gamma 1.54 + maskChannelMask none + name Grade63 + xpos -2712 + ypos 8979 + } + Glow { + tolerance 0.56 + brightness 1.5 + size 70 + maskChannelMask none + name Glow22 + xpos -2712 + ypos 9038 + } + Dot { + name Dot38 + xpos -2678 + ypos 9480 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.65 + radius {0 26.23 37.09} + anamorph 3 + ring_color {0 0.01600027084 1} + inner_color {0 0.8500001431 1} + outer_falloff 0.75 + inner_falloff 2 + chroma_spread 0.005 + vis_in 0.9 + vis_mask -rgba.alpha + corners 4 + flattening 2.4 + sharpness 0.53 + corners_angle 48 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare221 + label Pieces + xpos -5399 + ypos 9433 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Blur { + size 4.8 + name Blur133 + xpos -5399 + ypos 9471 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 7 + BlurAngle 180 + maskChannelMask none + name DirBlurWrapper25 + xpos -5399 + ypos 9535 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 15 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper26 + xpos -5399 + ypos 9573 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset -0.31 + radius {0 26.23 37.09} + anamorph 6 + ring_color {0 0.01600027084 1} + inner_color {0 0.8500001431 1} + outer_falloff 0.75 + inner_falloff 2 + chroma_spread 0.005 + vis_in 0.9 + vis_mask -rgba.alpha + corners 4 + flattening 2.4 + sharpness 0.53 + corners_angle 48 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare17 + label Pieces + xpos -5288 + ypos 9399 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Blur { + size 4.8 + name Blur132 + xpos -5288 + ypos 9437 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 7 + BlurAngle 180 + maskChannelMask none + name DirBlurWrapper23 + xpos -5288 + ypos 9501 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 15 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper24 + xpos -5288 + ypos 9539 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.5 + radius {0 26.23 37.09} + size_mult 3 + anamorph 6 + ring_color {0 0.01600027084 1} + inner_color {0 0.8500001431 1} + outer_falloff 0.75 + inner_falloff 2 + chroma_spread 0.005 + vis_in 0.9 + vis_mask -rgba.alpha + corners 4 + flattening 2.4 + sharpness 0.53 + corners_angle 48 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare18 + label Pieces + xpos -5169 + ypos 9354 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Blur { + size 4.8 + name Blur131 + xpos -5169 + ypos 9392 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 7 + BlurAngle 180 + maskChannelMask none + name DirBlurWrapper21 + xpos -5169 + ypos 9456 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 15 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper22 + xpos -5169 + ypos 9494 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset -0.2 + radius {0 26.23 37.09} + size_mult 2 + anamorph 4 + ring_color {0 0.01600027084 1} + inner_color {0 0.8500001431 1} + outer_falloff 0.75 + inner_falloff 2 + chroma_spread 0.005 + vis_in 0.9 + vis_mask -rgba.alpha + corners 4 + flattening 2.4 + sharpness 0.53 + corners_angle 48 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare19 + label Pieces + xpos -4990 + ypos 9328 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Blur { + size 4.8 + name Blur130 + xpos -4990 + ypos 9366 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Transform { + translate {268 0} + center {986 506} + black_outside false + name Transform30 + xpos -4990 + ypos 9404 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 7 + BlurAngle 180 + maskChannelMask none + name DirBlurWrapper19 + xpos -4990 + ypos 9430 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurLength 15 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper20 + xpos -4990 + ypos 9468 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.3 + radius {0 26.23 37.09} + anamorph 3 + ring_color {0 0.01600027084 1} + inner_color {0 0.8500001431 1} + outer_falloff 0.75 + inner_falloff 2 + chroma_spread 0.005 + vis_in 0.9 + vis_mask -rgba.alpha + corners 4 + flattening 2.4 + sharpness 0.57 + corners_angle 48 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare30 + label Pieces + xpos -4812 + ypos 9370 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Blur { + size 4.8 + name Blur129 + xpos -4812 + ypos 9408 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Transform { + translate {98 38} + center {986 506} + name Transform31 + xpos -4812 + ypos 9446 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge199 + xpos -4812 + ypos 9474 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge200 + xpos -4812 + ypos 9500 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge201 + xpos -4812 + ypos 9545 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge202 + xpos -4812 + ypos 9579 + disable {{Lines_Plus.disable==1?1:lines.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {111.1 263.38 292.18} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.78 + inner_falloff 10 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare189 + xpos -5854 + ypos 8683 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform58 + xpos -5854 + ypos 8709 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {325.16 366.98 381.31} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.7 + inner_falloff 6 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare190 + xpos -5854 + ypos 8633 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform59 + xpos -5854 + ypos 8659 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {234.8 463.99 500} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.13 + inner_falloff 10 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare191 + xpos -5725 + ypos 8589 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform60 + xpos -5725 + ypos 8615 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + name Merge76 + xpos -5725 + ypos 8659 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation plus + name Merge160 + xpos -5725 + ypos 8709 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } +set N21c28070 [stack 0] + Shuffle { + green red + blue red + alpha red + name Shuffle17 + xpos -5725 + ypos 8735 + } +push $N21c28070 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {1.42 1.42 34.14} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 15 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.012 + chroma_shift -3.4 + vis_out 1 + name Flare192 + xpos -5581 + ypos 8583 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade4 + xpos -5581 + ypos 8709 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge161 + xpos -5581 + ypos 8735 + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 47 + BlurAngle 0 + maskChannelMask none + name DirBlurWrapper9 + xpos -5581 + ypos 8761 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + whitepoint 0.25 + gamma 0.295 + maskChannelMask none + name Grade6 + xpos -5581 + ypos 8799 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {71.04 85.24 93.76} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.14 + inner_falloff 6 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare193 + xpos -5719 + ypos 8454 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform61 + xpos -5719 + ypos 8480 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {107.03 167.62 203.63} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 1.06 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.13 + inner_falloff 10 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare194 + xpos -5590 + ypos 8410 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform62 + xpos -5590 + ypos 8436 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + name Merge162 + xpos -5590 + ypos 8480 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } +set N21c2a640 [stack 0] + Shuffle { + green red + blue red + alpha red + name Shuffle18 + xpos -5590 + ypos 8528 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } +push $N21c2a640 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 10 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.012 + chroma_shift -3.4 + vis_out 1 + name Flare195 + xpos -5446 + ypos 8408 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade7 + xpos -5446 + ypos 8480 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge163 + xpos -5446 + ypos 8528 + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 47 + BlurAngle 0 + maskChannelMask none + name DirBlurWrapper10 + xpos -5446 + ypos 8554 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + whitepoint 0.25 + gamma 0.295 + maskChannelMask none + name Grade18 + xpos -5446 + ypos 8620 + } + Merge2 { + inputs 2 + operation screen + name Merge164 + xpos -5446 + ypos 8799 + } + Blur { + size {0 20} + name Blur19 + xpos -5446 + ypos 8825 + } + Dot { + name Dot9 + xpos -5412 + ypos 8872 + } + Dot { + name Dot11 + xpos -4967 + ypos 8872 + } +set N21d809f0 [stack 0] +push $N21d809f0 + Transform { + scale {2.2 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform81 + xpos -4824 + ypos 8868 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.45 + radius {198.59 208.53 221.32} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.135 + inner_falloff 5.8 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare216 + xpos -5155 + ypos 8268 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {60 0} + center {960 540} + black_outside false + name Transform75 + xpos -5155 + ypos 8294 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.65 + radius {119.99 149.82 164.1} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.24 + inner_falloff 10 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.9 + sharpness 1 + corners_angle 45 + name Flare217 + xpos -5073 + ypos 8249 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.55 + radius {71.04 85.24 96.6} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.54 + inner_falloff 0.36 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare218 + xpos -5061 + ypos 8185 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform76 + xpos -5061 + ypos 8211 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.55 + radius {137.79 167.62 182.32} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare219 + xpos -4932 + ypos 8141 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform77 + xpos -4932 + ypos 8167 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + name Merge183 + xpos -4932 + ypos 8211 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + name Merge184 + xpos -4932 + ypos 8249 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } +set N21eb87d0 [stack 0] + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge185 + xpos -4932 + ypos 8294 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Shuffle { + green red + blue red + alpha red + name Shuffle22 + xpos -4932 + ypos 8363 + } +push $N21eb87d0 + Flare { + inputs 0 + position {{parent.ffx_position.x i x11 1501} {parent.ffx_position.y i x11 550}} + offset 0.55 + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 10 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.024 + chroma_shift 2.2 + chroma_shift_angle 74 + vis_out 1 + name Flare220 + xpos -4788 + ypos 8137 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Blur { + size {0 40} + name Blur18 + xpos -4788 + ypos 8163 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade34 + xpos -4788 + ypos 8249 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge186 + xpos -4788 + ypos 8363 + } + Blur { + size {0 10} + name Blur9 + xpos -4788 + ypos 8412 + } + Transform { + scale {1.4 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform78 + xpos -4606 + ypos 8418 + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 10 + maskChannelMask none + name DirBlurWrapper14 + xpos -4606 + ypos 8444 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Sharpen { + amount 20 + maskChannelMask none + name Sharpen3 + xpos -4606 + ypos 8482 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {262.81 269.91 269.91} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare196 + xpos -5628 + ypos 7840 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform63 + xpos -5628 + ypos 7866 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {156.26 160.52 261.37} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare197 + xpos -5633 + ypos 7807 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {83.82 92.34 126.43} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare198 + xpos -5508 + ypos 7740 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform64 + xpos -5508 + ypos 7766 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge165 + xpos -5508 + ypos 7807 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge166 + xpos -5508 + ypos 7866 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {282.69 289.79 377.86} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare199 + xpos -5400 + ypos 7814 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform65 + xpos -5400 + ypos 7840 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {181.84 198.88 218.76} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare200 + xpos -5400 + ypos 7754 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform66 + xpos -5400 + ypos 7780 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {117.91 129.27 161.94} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare201 + xpos -5401 + ypos 7706 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {42.92 42.92 104} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.23 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare202 + xpos -5280 + ypos 7639 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform67 + xpos -5280 + ypos 7665 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge167 + xpos -5280 + ypos 7706 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge168 + xpos -5280 + ypos 7780 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge169 + xpos -5280 + ypos 7840 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } +set N22052550 [stack 0] + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge170 + xpos -5280 + ypos 7866 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Shuffle { + green red + blue red + alpha red + name Shuffle19 + xpos -5280 + ypos 7892 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } +push $N22052550 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 8 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.25 + chroma_shift -10.4 + chroma_shift_angle 42 + vis_out 1 + name Flare203 + xpos -5151 + ypos 7682 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + inputs 1+1 + white 4 + multiply 4 + maskChannelMask rgba.red + name Grade19 + xpos -5151 + ypos 7840 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge171 + xpos -5151 + ypos 7892 + } + Transform { + translate {0 -20} + scale {1.4 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform80 + xpos -5008 + ypos 7892 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {181.75 193.14 214.74} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare209 + xpos -4996 + ypos 7770 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform71 + xpos -4996 + ypos 7796 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {243.04 247.3 357.63} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare210 + xpos -5004 + ypos 7737 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {33.01 61.88 106.14} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 3 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare211 + xpos -4876 + ypos 7670 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform72 + xpos -4876 + ypos 7696 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge177 + xpos -4876 + ypos 7737 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge178 + xpos -4876 + ypos 7796 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {191.78 198.88 210.24} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare212 + xpos -4768 + ypos 7725 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform73 + xpos -4768 + ypos 7751 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {105.13 116.49 174.73} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare213 + xpos -4758 + ypos 7692 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {33.02 44.38 86.99} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare214 + xpos -4648 + ypos 7625 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform74 + xpos -4648 + ypos 7651 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge179 + xpos -4648 + ypos 7692 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge180 + xpos -4648 + ypos 7751 + } +set N221b7950 [stack 0] + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge181 + xpos -4648 + ypos 7796 + } + Shuffle { + green red + blue red + alpha red + name Shuffle21 + xpos -4648 + ypos 7822 + } +push $N221b7950 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {1.45 1.45 34.17} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 10 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.25 + chroma_shift -10.4 + chroma_shift_angle 42 + vis_out 1 + name Flare215 + xpos -4519 + ypos 7614 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade33 + xpos -4519 + ypos 7751 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge182 + xpos -4519 + ypos 7822 + } + Transform { + scale {1.3 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform79 + xpos -4519 + ypos 7848 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge176 + xpos -4519 + ypos 7892 + } + Blur { + size {10 0} + name Blur17 + xpos -4519 + ypos 7918 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation7 + xpos -4519 + ypos 7956 + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 28 + maskChannelMask none + name DirBlurWrapper13 + xpos -4519 + ypos 8005 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 38 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper18 + xpos -4519 + ypos 8043 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Sharpen { + amount 50 + maskChannelMask none + name Sharpen1 + xpos -4519 + ypos 8081 + } + Grade { + whitepoint 0.4 + maskChannelMask none + name Grade51 + xpos -4519 + ypos 8119 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge187 + xpos -4519 + ypos 8488 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.01 + name Merge189 + xpos -4519 + ypos 8868 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.008 + name Merge190 + xpos -4519 + ypos 8923 + disable {{Lines_Plus.disable==1?1:lines.which==3?0:1}} + } + Grade { + multiply 0.18 + gamma 1.54 + maskChannelMask none + name Grade35 + xpos -4519 + ypos 8984 + } + Glow { + tolerance 0.56 + brightness 1.5 + size 70 + maskChannelMask none + name Glow4 + xpos -4519 + ypos 9044 + } + Dot { + name Dot12 + xpos -5529 + ypos 9048 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.15+(ffx_lines_offset) i}} + radius {0 3.97 209.04} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 11.52 + ring_color 3 + inner_color 1 + outer_falloff 1.7 + chroma_spread 0.02 + brightness 0.095 + vis_mask -rgba.alpha + name Flare50 + xpos -6917 + ypos 10078 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Blur { + size 16 + name Blur23 + xpos -6917 + ypos 10104 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Blur { + size 1 + name Blur1 + xpos -6917 + ypos 10142 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.15+(ffx_lines_offset) i}} + radius {0 3.97 72.49} + size_mult {{(parent.ffx_flare_size)+1.8 i}} + anamorph 11.52 + ring_color 0.5 + inner_color 1 + outer_falloff 1.7 + chroma_spread 0.02 + brightness 0.095 + vis_mask -rgba.alpha + name Flare51 + xpos -6796 + ypos 9947 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Blur { + size 3 + name Blur24 + xpos -6796 + ypos 9973 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Glow { + brightness 0.5 + name Glow9 + xpos -6796 + ypos 10013 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Grade { + multiply 10 + name Grade10 + xpos -6796 + ypos 10039 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Grade { + multiply {1 1 1 0} + name Grade55 + xpos -6796 + ypos 10065 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.07 + name Merge4 + xpos -6796 + ypos 10148 + disable {{Lines_Plus.disable==1?1:lines.which==2?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.2+(ffx_lines_offset) i}} + radius {161.95 176.16 187.52} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.78 + inner_falloff 10 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare170 + xpos -8270 + ypos 8870 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform13 + xpos -8270 + ypos 8896 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.1+(ffx_lines_offset) i}} + radius {143.48 157.68 166.2} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.7 + inner_falloff 6 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare121 + xpos -8270 + ypos 8820 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform11 + xpos -8270 + ypos 8846 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.1+(ffx_lines_offset) i}} + radius {291.2 311.09 347.1} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.13 + inner_falloff 10 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare168 + xpos -8141 + ypos 8776 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform12 + xpos -8141 + ypos 8802 + } + Merge2 { + inputs 2 + operation screen + name Merge66 + xpos -8141 + ypos 8846 + } + Merge2 { + inputs 2 + operation plus + name Merge69 + xpos -8141 + ypos 8896 + } +set N22452680 [stack 0] + Shuffle { + green red + blue red + alpha red + name Shuffle4 + xpos -8141 + ypos 8922 + } +push $N22452680 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.1+(ffx_lines_offset) i}} + radius {1.42 1.42 34.14} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.012 + chroma_shift -3.4 + vis_out 1 + name Flare169 + xpos -7997 + ypos 8771 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade15 + xpos -7997 + ypos 8896 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge67 + xpos -7997 + ypos 8922 + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 47 + BlurAngle 0 + maskChannelMask none + name DirBlurWrapper17 + xpos -7997 + ypos 8948 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Grade { + whitepoint 0.25 + gamma 0.295 + maskChannelMask none + name Grade17 + xpos -7997 + ypos 8986 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_lines_offset) i}} + radius {71.04 85.24 93.76} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.14 + inner_falloff 6 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare151 + xpos -8135 + ypos 8641 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform45 + xpos -8135 + ypos 8667 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_lines_offset) i}} + radius {147.73 167.62 203.63} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.13 + inner_falloff 10 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare152 + xpos -8006 + ypos 8597 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform46 + xpos -8006 + ypos 8623 + } + Merge2 { + inputs 2 + operation screen + name Merge142 + xpos -8006 + ypos 8667 + } +set N22619fe0 [stack 0] + Shuffle { + green red + blue red + alpha red + name Shuffle14 + xpos -8006 + ypos 8715 + } +push $N22619fe0 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.012 + chroma_shift -3.4 + vis_out 1 + name Flare153 + xpos -7862 + ypos 8592 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade38 + xpos -7862 + ypos 8667 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge143 + xpos -7862 + ypos 8715 + } + DirBlurWrapper { + BlurType linear + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 47 + BlurAngle 0 + maskChannelMask none + name DirBlurWrapper4 + xpos -7862 + ypos 8741 + } + Grade { + whitepoint 0.25 + gamma 0.295 + maskChannelMask none + name Grade40 + xpos -7862 + ypos 8807 + } + Merge2 { + inputs 2 + operation screen + name Merge68 + xpos -7862 + ypos 8986 + } + Dot { + name Dot28 + xpos -7828 + ypos 9059 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {262.81 269.91 269.91} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare64 + xpos -7181 + ypos 8744 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform1 + xpos -7181 + ypos 8770 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {156.26 160.52 261.37} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare65 + xpos -7184 + ypos 8711 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {83.82 92.34 126.43} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare66 + xpos -7061 + ypos 8644 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform2 + xpos -7061 + ypos 8670 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge19 + xpos -7061 + ypos 8711 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge26 + xpos -7061 + ypos 8770 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {282.69 289.79 377.86} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare120 + xpos -6953 + ypos 8718 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform10 + xpos -6953 + ypos 8744 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {181.84 198.88 218.76} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare67 + xpos -6953 + ypos 8658 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform3 + xpos -6953 + ypos 8684 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {117.91 129.27 161.94} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare69 + xpos -6956 + ypos 8610 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {18.48 29.84 90.92} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare72 + xpos -6833 + ypos 8543 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform6 + xpos -6833 + ypos 8569 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge28 + xpos -6833 + ypos 8610 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge29 + xpos -6833 + ypos 8684 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge56 + xpos -6833 + ypos 8744 + } +set N2276c0c0 [stack 0] + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge30 + xpos -6833 + ypos 8770 + } + Shuffle { + green red + blue red + alpha red + name Shuffle2 + xpos -6833 + ypos 8796 + } +push $N2276c0c0 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.25 + chroma_shift -10.4 + chroma_shift_angle 42 + vis_out 1 + name Flare77 + xpos -6705 + ypos 8585 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade12 + xpos -6704 + ypos 8744 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge31 + xpos -6704 + ypos 8796 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset) i}} + radius {149.17 159.11 166.22} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.135 + inner_falloff 5.8 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare79 + xpos -7664 + ypos 8676 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {60 0} + center {960 540} + black_outside false + name Transform7 + xpos -7664 + ypos 8702 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset) i}} + radius {90.92 120.75 130.7} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.24 + inner_falloff 10 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.9 + sharpness 1 + corners_angle 45 + name Flare80 + xpos -7581 + ypos 8657 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset) i}} + radius {71.04 85.24 113.65} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.54 + inner_falloff 0.36 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare89 + xpos -7570 + ypos 8593 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform8 + xpos -7570 + ypos 8619 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset) i}} + radius {82.39 112.22 182.32} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare118 + xpos -7441 + ypos 8549 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform9 + xpos -7441 + ypos 8575 + } + Merge2 { + inputs 2 + operation screen + name Merge33 + xpos -7441 + ypos 8619 + } + Merge2 { + inputs 2 + operation screen + name Merge41 + xpos -7441 + ypos 8657 + } +set N22922cf0 [stack 0] + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge45 + xpos -7441 + ypos 8702 + } + Shuffle { + green red + blue red + alpha red + name Shuffle3 + xpos -7441 + ypos 8803 + } +push $N22922cf0 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.024 + chroma_shift 2.2 + chroma_shift_angle 74 + vis_out 1 + name Flare119 + xpos -7297 + ypos 8546 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade13 + xpos -7297 + ypos 8657 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + mix 0.95 + name Merge54 + xpos -7297 + ypos 8803 + } + Blur { + size {0 10} + name Blur59 + xpos -7297 + ypos 8877 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.15 + name Merge55 + xpos -6704 + ypos 8883 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {186.11 196.05 204.57} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare154 + xpos -7084 + ypos 8396 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform47 + xpos -7084 + ypos 8422 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {112.23 116.49 184.67} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare155 + xpos -7090 + ypos 8363 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {18.48 27 61.09} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare156 + xpos -6964 + ypos 8296 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform48 + xpos -6964 + ypos 8322 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge144 + xpos -6964 + ypos 8363 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge145 + xpos -6964 + ypos 8422 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {191.78 198.88 210.24} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare158 + xpos -6856 + ypos 8351 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform49 + xpos -6856 + ypos 8377 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {105.13 116.49 174.73} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare159 + xpos -6846 + ypos 8318 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {18.48 29.84 72.45} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare160 + xpos -6736 + ypos 8251 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform50 + xpos -6736 + ypos 8277 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge146 + xpos -6736 + ypos 8318 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge147 + xpos -6736 + ypos 8377 + } +set N22927520 [stack 0] + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge148 + xpos -6736 + ypos 8422 + } + Shuffle { + green red + blue red + alpha red + name Shuffle15 + xpos -6736 + ypos 8448 + } +push $N22927520 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2.08+(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.25 + chroma_shift -10.4 + chroma_shift_angle 42 + vis_out 1 + name Flare161 + xpos -6607 + ypos 8243 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade41 + xpos -6607 + ypos 8377 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + mix 0.8 + name Merge149 + xpos -6607 + ypos 8448 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset)-.35 i}} + radius {149.17 159.11 183.53} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.135 + inner_falloff 5.8 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare162 + xpos -7683 + ypos 8328 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {60 0} + center {960 540} + black_outside false + name Transform51 + xpos -7683 + ypos 8354 + } + Blur { + size 10.5 + name Blur156 + xpos -7683 + ypos 8380 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset)-.35 i}} + radius {90.92 120.75 132.12} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.24 + inner_falloff 10 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.9 + sharpness 1 + corners_angle 45 + name Flare163 + xpos -7576 + ypos 8309 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Blur { + size 10.5 + name Blur157 + xpos -7576 + ypos 8335 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset)-.35 i}} + radius {71.04 85.24 96.6} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.54 + inner_falloff 0.36 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare164 + xpos -7473 + ypos 8277 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + center {960 540} + black_outside false + name Transform52 + xpos -7473 + ypos 8303 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset)-.35 i}} + radius {137.79 167.62 182.32} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare165 + xpos -7344 + ypos 8233 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform53 + xpos -7344 + ypos 8259 + } + Merge2 { + inputs 2 + operation screen + name Merge150 + xpos -7344 + ypos 8303 + } + Merge2 { + inputs 2 + operation screen + name Merge151 + xpos -7344 + ypos 8341 + } +set N22bedaa0 [stack 0] + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge152 + xpos -7344 + ypos 8386 + } + Shuffle { + green red + blue red + alpha red + name Shuffle16 + xpos -7344 + ypos 8455 + } +push $N22bedaa0 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_lines_offset)-.25 i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.024 + chroma_shift 2.2 + chroma_shift_angle 74 + vis_out 1 + name Flare166 + xpos -7200 + ypos 8229 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade42 + xpos -7200 + ypos 8341 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge153 + xpos -7200 + ypos 8455 + } + Blur { + size {0 10} + name Blur105 + xpos -7200 + ypos 8502 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.15 + name Merge154 + xpos -6607 + ypos 8508 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.6 + name Merge65 + xpos -6607 + ypos 8940 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.07 + name Merge155 + xpos -6607 + ypos 9055 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Glow { + tolerance 0.56 + brightness 1.5 + size 70 + maskChannelMask none + name Glow28 + xpos -6607 + ypos 9081 + disable {{Lines_Plus.disable==1?1:lines.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.7+(ffx_lines_offset) i}} + radius {53.47 253.76 500} + size_mult {{(parent.ffx_flare_size)+1 i}} + anamorph 1.07 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.13 + inner_falloff 10 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare123 + xpos -8240 + ypos 7773 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform35 + xpos -8240 + ypos 7799 + } + Shuffle { + green red + blue red + alpha red + name Shuffle10 + xpos -8240 + ypos 7859 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{2+(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.012 + chroma_shift -3.4 + vis_out 1 + name Flare124 + xpos -8095 + ypos 7626 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1}} + } + Blur { + size {0 90} + name Blur98 + xpos -8095 + ypos 7652 + } + Grade { + blackpoint 0.03 + whitepoint 0.035 + gamma 2.9 + maskChannelMask none + name Grade25 + xpos -8095 + ypos 7690 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge122 + xpos -8095 + ypos 7859 + } + Blur { + size 14 + name Blur99 + xpos -8095 + ypos 7937 + } + Blur { + size {154 0} + name Blur100 + xpos -8095 + ypos 7975 + } + Dot { + name Dot25 + xpos -8061 + ypos 8033 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.1+(ffx_lines_offset) i}} + radius {46.89 62.51 69.61} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.14 + inner_falloff 6 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare125 + xpos -7941 + ypos 7806 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.1+(ffx_lines_offset) i}} + radius {102.28 106.54 129.28} + size_mult {{(parent.ffx_flare_size)+3 i}} + anamorph 1.56 + inner_color 0 + outer_falloff 0.14 + inner_falloff 6 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 28 + name Flare127 + xpos -7721 + ypos 7762 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.2+(ffx_lines_offset) i}} + radius {89.5 106.54 117.91} + size_mult {{(parent.ffx_flare_size)+2.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.14 + inner_falloff 6 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare128 + xpos -7941 + ypos 7727 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.2+(ffx_lines_offset) i}} + radius {147.73 167.62 185.16} + size_mult {{(parent.ffx_flare_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.13 + inner_falloff 10 + brightness 2 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare130 + xpos -7831 + ypos 7649 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform36 + xpos -7831 + ypos 7675 + } + Merge2 { + inputs 2 + operation screen + name Merge123 + xpos -7831 + ypos 7727 + } + Merge2 { + inputs 2 + operation screen + name Merge124 + xpos -7831 + ypos 7762 + } + Merge2 { + inputs 2 + operation screen + name Merge125 + xpos -7831 + ypos 7806 + } +set N22bf3ae0 [stack 0] + Dot { + name Dot47 + xpos -7797 + ypos 7842 + } +set N22bf3e50 [stack 0] + Shuffle { + green red + blue red + alpha red + name Shuffle11 + xpos -7831 + ypos 7874 + } +push $N22bf3ae0 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.1+(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+9 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.012 + chroma_shift -3.4 + vis_out 1 + name Flare133 + xpos -7602 + ypos 7642 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade26 + xpos -7602 + ypos 7806 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge126 + xpos -7602 + ypos 7874 + } + Blur { + size 14 + name Blur101 + xpos -7602 + ypos 7952 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.07 + name Merge127 + xpos -7602 + ypos 8029 + } + Dot { + name Dot26 + xpos -7568 + ypos 8105 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{0+(ffx_lines_offset) i}} + radius {0 89.49 500} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 1.03 + ring_color 0.74 + inner_color 1 + outer_falloff 10 + inner_falloff 5.4 + chroma_shift_angle 42 + vis_out 1 + name Flare134 + xpos -7192 + ypos 7743 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Blur { + size 1100 + name Blur102 + xpos -7192 + ypos 7769 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i x50 488} {parent.ffx_position.y i x50 984}} + offset {{1.19+(ffx_lines_offset) i}} + radius {0 0 38.4} + size_mult {{(parent.ffx_flare_size)+2 i}} + anamorph 20 + inner_color 0 + outer_falloff 0.9 + chroma_shift -3.4 + vis_out 1 + name Flare135 + xpos -7439 + ypos 7686 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + translate {0 16} + center {960 540} + name Transform37 + xpos -7439 + ypos 7712 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i x50 488} {parent.ffx_position.y i x50 984}} + offset {{1.16+(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 14 + inner_color 0 + outer_falloff 0.9 + chroma_shift -3.4 + vis_out 1 + name Flare138 + xpos -7320 + ypos 7651 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge128 + xpos -7320 + ypos 7712 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation mask + Achannels {rgba.red rgba.green rgba.blue rgba.red} + maskChannelMask none + name Merge129 + xpos -7320 + ypos 7775 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Dot { + name Dot27 + xpos -7286 + ypos 8036 + } +push $N22bf3e50 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_lines_offset) i}} + radius {38.37 46.89 113.66} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.48 + inner_falloff 1.2 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare139 + xpos -6962 + ypos 7776 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + translate {60 0} + center {960 540} + black_outside false + name Transform38 + xpos -6962 + ypos 7802 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.6+(ffx_lines_offset) i}} + radius {0 46.89 139.22} + size_mult {{(parent.ffx_flare_size)+1.4 i}} + anamorph 1.01 + inner_color 0 + outer_falloff 0.39 + inner_falloff 4.8 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 0.8 + sharpness 1 + corners_angle 45 + name Flare140 + xpos -6956 + ypos 7693 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + center {960 540} + black_outside false + name Transform39 + xpos -6956 + ypos 7719 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.6+(ffx_lines_offset) i}} + radius {0 142.05 251.93} + size_mult {{(parent.ffx_flare_size)-.1 i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.185 + inner_falloff 7.8 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare141 + xpos -6827 + ypos 7624 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + translate {50 0} + center {960 540} + black_outside false + name Transform40 + xpos -6827 + ypos 7675 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation screen + name Merge130 + xpos -6827 + ypos 7719 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } +set N22ec8ce0 [stack 0] + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge131 + xpos -6827 + ypos 7802 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation plus + name Merge285 + xpos -6827 + ypos 7838 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Shuffle { + green red + blue red + alpha red + name Shuffle12 + xpos -6827 + ypos 7871 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } +push $N22ec8ce0 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.6+(ffx_lines_offset) i}} + radius {0 0 32.72} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 25 + inner_color 0 + outer_falloff 0.9 + chroma_spread 0.024 + chroma_shift 2.2 + chroma_shift_angle 74 + vis_out 1 + name Flare142 + xpos -6683 + ypos 7643 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade27 + xpos -6683 + ypos 7719 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + mix 0.8 + name Merge132 + xpos -6683 + ypos 7871 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Blur { + size {0 10} + name Blur103 + xpos -6683 + ypos 7962 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.07+(ffx_lines_offset) i}} + radius {213.1 234.4 322.47} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare143 + xpos -6551 + ypos 7786 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform41 + xpos -6551 + ypos 7812 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.07+(ffx_lines_offset) i}} + radius {112.23 116.49 184.67} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare144 + xpos -6552 + ypos 7753 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.07+(ffx_lines_offset) i}} + radius {18.48 27 62.51} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare146 + xpos -6431 + ypos 7686 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform42 + xpos -6431 + ypos 7712 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge133 + xpos -6431 + ypos 7753 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge134 + xpos -6431 + ypos 7812 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Grade { + whitepoint 0.56 + gamma 0.57 + maskChannelMask none + name Grade30 + xpos -6431 + ypos 7838 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.07+(ffx_lines_offset) i}} + radius {126.44 198.88 241.49} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 1.15 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare147 + xpos -6317 + ypos 7767 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform43 + xpos -6317 + ypos 7793 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.07+(ffx_lines_offset) i}} + radius {65.36 116.49 173.31} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare148 + xpos -6319 + ypos 7734 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.07+(ffx_lines_offset) i}} + radius {0 29.84 95.18} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.39 + inner_falloff 1.15 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle 45 + name Flare149 + xpos -6197 + ypos 7667 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform44 + xpos -6197 + ypos 7693 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge135 + xpos -6197 + ypos 7734 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge136 + xpos -6197 + ypos 7793 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } +set N231d9410 [stack 0] + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge137 + xpos -6197 + ypos 7838 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Shuffle { + green red + blue red + alpha red + name Shuffle13 + xpos -6197 + ypos 7864 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } +push $N231d9410 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.17+(ffx_lines_offset) i}} + radius {0 0 38.4} + size_mult {{(parent.ffx_flare_size)+4 i}} + anamorph 25 + ring_color 0.74 + inner_color 0 + outer_falloff 0.1 + inner_falloff 5.4 + chroma_spread 0.108 + chroma_shift -9.8 + chroma_shift_angle 42 + vis_out 1 + name Flare150 + xpos -6068 + ypos 7665 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1t}} + } + Grade { + inputs 1+1 + white 1.7 + multiply 2.5 + maskChannelMask rgba.red + name Grade31 + xpos -6068 + ypos 7793 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge138 + xpos -6068 + ypos 7864 + } + Blur { + size {5 7} + name Blur104 + xpos -6068 + ypos 7890 + } + Grade { + multiply 0.36 + maskChannelMask none + name Grade32 + xpos -6068 + ypos 7928 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge139 + xpos -6068 + ypos 7968 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.7 + name Merge140 + xpos -6068 + ypos 8032 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.1 + name Merge141 + xpos -6068 + ypos 8101 + } + Glow { + tolerance 0.56 + brightness 1.5 + size 70 + maskChannelMask none + name Glow27 + xpos -6068 + ypos 8127 + disable {{Lines_Plus.disable==1?1:lines.which==0?0:1}} + } + Switch { + inputs 7 + name lines + xpos -6068 + ypos 10148 + } + Transform { + scale {{(parent.ffx_line_stretch) i} 1} + center {986 506} + black_outside false + name Lines_Stretch + xpos -747 + ypos 10148 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Lines_Color + label "Lines CC" + xpos -612 + ypos 10142 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.4 + radius {45.54 75.01 107.34} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.09 + vis_mask -rgba.alpha + corners 4 + sharpness 1 + corners_angle 50 + corner_angle_add true + asym_multiplier 0 + asym_falloff 20 + asym_angle -350 + asym_angle_add true + name Flare205 + label Source + xpos -1941 + ypos 7101 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Blur { + size 18.5 + name Blur140 + xpos -1941 + ypos 7139 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.4 + radius {88.16 99.16 133.37} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.02 + chroma_shift -5.2 + chroma_shift_angle -54 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + sharpness 1 + corners_angle 50 + corner_angle_add true + asym_multiplier 0 + asym_falloff 14 + asym_angle -350 + asym_angle_add true + name Flare206 + label Source + xpos -1712 + ypos 7038 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Blur { + size 18.5 + name Blur141 + xpos -1712 + ypos 7076 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.4 + radius {0 116.11 236.08} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread 0.04 + chroma_shift -1.8 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + sharpness 1 + corners_angle 50 + corner_angle_add true + asym_multiplier 0 + asym_falloff 14 + asym_angle -350 + asym_angle_add true + name Flare207 + label Source + xpos -1594 + ypos 6995 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Blur { + size 18.5 + name Blur142 + xpos -1594 + ypos 7033 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge172 + xpos -1594 + ypos 7082 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } +set N231dd8d0 [stack 0] + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge173 + xpos -1709 + ypos 7145 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } +push $N231dd8d0 + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge240 + xpos -1594 + ypos 7145 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Saturation { + saturation 0.49 + maskChannelMask none + name Saturation20 + xpos -1594 + ypos 7171 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Grade { + multiply {0.9965000153 1 0.777872026 1} + maskChannelMask none + name Grade20 + xpos -1594 + ypos 7197 + disable {{Rings_Plus.disable==1?1:rings.which==3?0:1}} + } + Dot { + name Dot41 + xpos -1560 + ypos 7322 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i x100 300} {parent.ffx_position.y i x100 200}} + offset 1.5 + radius {44.5 105.21 120.49} + size_mult {{(parent.ffx_flare_size) i}} + ring_color {0.529843 0.670316 0.796} + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_spread 0.016 + brightness 0.22 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0.33 + asym_multiplier 0 + asym_falloff 2.65 + asym_angle -40 + name Flare20 + label Source + xpos -2223 + ypos 7050 + disable {{Rings_Plus.disable==1?1:rings.which==2?0:1}} + } + Blur { + size 12 + name Blur7 + xpos -2223 + ypos 7088 + disable {{Rings_Plus.disable==1?1:rings.which==2?0:1}} + } + Flare { + position {{parent.ffx_position.x i x100 300} {parent.ffx_position.y i x100 200}} + offset 1.5 + radius {65.44 126.15 141.43} + size_mult {{(parent.ffx_flare_size) i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_spread 0.016 + brightness 0.08 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0.33 + asym_multiplier 0 + asym_falloff 3.4 + asym_angle -40 + name Flare21 + label Source + xpos -2223 + ypos 7126 + disable {{Rings_Plus.disable==1?1:rings.which==2?0:1}} + } + Grade { + multiply 0.5 + name Grade70 + xpos -2223 + ypos 7164 + disable {{Rings_Plus.disable==1?1:rings.which==2?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.7 + radius {110.89 171.6 186.88} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_spread 0.016 + brightness 0.08 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0.33 + asym_multiplier 0 + asym_falloff 3.4 + asym_angle -40 + name Flare122 + label Source + xpos -2462 + ypos 7052 + disable {{Rings_Plus.disable==1?1:rings.which==1?0:1 i}} + } + Grade { + white {1.300000072 1 0.7000000477 1} + multiply 0.3 + name Grade24 + xpos -2462 + ypos 7090 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.1 + radius {0.93 0.93 55.11} + size_mult {{(parent.ffx_flare_size)-.5 i}} + ring_color 0.05 + inner_color 0.04 + outer_falloff {1 1 1} + inner_falloff {1 1 1} + chroma_spread 0.01 + chroma_shift -2 + chroma_shift_angle_add true + brightness {1 1 1} + vis_mask -rgba.alpha + flattening 0.82 + sharpness 0.73 + corners_angle {{parent.ffx_rings_rotation+5 i}} + corner_angle_add true + asym_multiplier 5 + asym_angle 160 + asym_angle_add true + mult_num 2 + mult_seed 6 + mult_offset 1.6 + mult_size 1 + mult_color 0.3 + mult_color_seed 77097 + mult_brightness 6 + mult_brightness_seed 75027 + mult_visibility 0.32 + mult_flattening -1 + mult_flattening_seed 45204 + mult_rotate 0.06 + name Flare110 + label Source + xpos -3131 + ypos 7285 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Glow { + brightness 3.42 + maskChannelMask none + name Glow24 + xpos -3131 + ypos 7323 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } +set N234bc790 [stack 0] + Blur { + size 65 + name Blur94 + xpos -3131 + ypos 7369 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } +set N234bcb00 [stack 0] +push $N234bcb00 +push $N234bc790 +push $N234bc790 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.1 + radius {45.54 75.01 107.34} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.09 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle {{parent.ffx_rings_rotation+50 i}} + corner_angle_add true + asym_multiplier 0 + asym_falloff 20 + asym_angle {{parent.ffx_rings_rotation-350 i}} + asym_angle_add true + name Flare226 + label Source + xpos -2995 + ypos 7217 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Blur { + size 18.5 + name Blur56 + xpos -2995 + ypos 7255 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.1 + radius {88.16 99.16 113.02} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle {{parent.ffx_rings_rotation+50 i}} + corner_angle_add true + asym_multiplier 0 + asym_falloff 10 + asym_angle {{parent.ffx_rings_rotation-350 i}} + asym_angle_add true + name Flare235 + label Source + xpos -2881 + ypos 7165 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Blur { + size 18.5 + name Blur57 + xpos -2881 + ypos 7203 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.1 + radius {0 116.11 129.97} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle {{parent.ffx_rings_rotation+50 i}} + corner_angle_add true + asym_multiplier 0 + asym_falloff 14 + asym_angle {{parent.ffx_rings_rotation-350 i}} + asym_angle_add true + name Flare236 + label Source + xpos -2763 + ypos 7122 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Blur { + size 18.5 + name Blur68 + xpos -2763 + ypos 7160 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge8 + xpos -2763 + ypos 7209 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } +set N234be310 [stack 0] + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge191 + xpos -2763 + ypos 7261 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } +push $N234be310 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.3 + radius {45.54 75.01 107.34} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.09 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle {{parent.ffx_rings_rotation+50 i}} + corner_angle_add true + asym_multiplier 0 + asym_falloff 16 + asym_angle {{parent.ffx_rings_rotation+180 i}} + asym_angle_add true + name Flare111 + label Source + xpos -2880 + ypos 7034 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Blur { + size 18.5 + name Blur95 + xpos -2880 + ypos 7072 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.3 + radius {88.16 99.16 113.02} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle {{parent.ffx_rings_rotation+50 i}} + corner_angle_add true + asym_multiplier 0 + asym_falloff 14 + asym_angle {{parent.ffx_rings_rotation+180 i}} + asym_angle_add true + name Flare112 + label Source + xpos -2766 + ypos 6982 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Blur { + size 18.5 + name Blur96 + xpos -2766 + ypos 7020 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.3 + radius {0 116.11 129.97} + size_mult {{(parent.ffx_flare_size)+3.8 i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle {{parent.ffx_rings_rotation+50 i}} + corner_angle_add true + asym_multiplier 0 + asym_falloff 14 + asym_angle {{parent.ffx_rings_rotation+180 i}} + asym_angle_add true + name Flare113 + label Source + xpos -2648 + ypos 6939 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Blur { + size 18.5 + name Blur97 + xpos -2648 + ypos 6977 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge116 + xpos -2648 + ypos 7026 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge117 + xpos -2648 + ypos 7078 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge192 + xpos -2648 + ypos 7209 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge194 + xpos -2648 + ypos 7261 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Grade { + inputs 1+1 + white 0.42 + multiply 4 + maskChannelMask rgba.red + name Grade21 + xpos -2648 + ypos 7323 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Grade { + inputs 1+1 + white 0.96 + multiply 3.2 + gamma 0.92 + maskChannelMask rgba.red + name Grade22 + xpos -2648 + ypos 7349 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Glow { + inputs 1+1 + tolerance 0.06 + brightness 5 + W rgba.red + size 43.5 + maskChannelMask none + name Glow25 + xpos -2648 + ypos 7375 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Grade { + inputs 1+1 + white 6 + multiply 4 + gamma 1.1 + maskChannelMask rgba.red + name Grade23 + xpos -2648 + ypos 7401 + disable {{Rings_Plus.disable==1?1:rings.which==0?0:1}} + } + Switch { + inputs 4 + name rings + xpos -2317 + ypos 7401 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Rings_Color + label "Rings CC" + xpos -607 + ypos 7395 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise14 + xpos -715 + ypos 6638 + } + Flare { + inputs 0 + position {{parent.ffx_position.x-210 i} {parent.ffx_position.y i}} + radius {5.32 20.75 23.32} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.32 + vis_mask -rgba.alpha + corners 6 + flattening 1.2 + sharpness 0.89 + corners_angle 14 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare281 + xpos -1215 + ypos 6318 + } + Flare { + position {{parent.ffx_position.x-170 i} {parent.ffx_position.y i}} + radius {18.1 33.53 46.04} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.32 + vis_mask -rgba.alpha + corners 6 + flattening 0.5 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare278 + xpos -1215 + ypos 6344 + } + Flare { + position {{parent.ffx_position.x-120 i} {parent.ffx_position.y i}} + radius {9.58 25.01 29} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.55 + vis_mask -rgba.alpha + corners 6 + flattening 0.5 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare279 + xpos -1215 + ypos 6370 + } + Flare { + position {{parent.ffx_position.x--90 i} {parent.ffx_position.y i}} + radius {16.68 32.11 36.1} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.44 + vis_mask -rgba.alpha + corners 6 + flattening 0.5 + sharpness 0.86 + corners_angle 40 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare280 + xpos -1215 + ypos 6396 + } + Flare { + position {{parent.ffx_position.x-170 i} {parent.ffx_position.y i}} + radius {66.39 81.82 118.48} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 0.94 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.065 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare270 + xpos -1215 + ypos 6460 + } + Flare { + position {{parent.ffx_position.x-50 i} {parent.ffx_position.y i}} + radius {46.5 61.93 98.6} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare273 + xpos -1215 + ypos 6486 + } + Flare { + position {{parent.ffx_position.x-100 i} {parent.ffx_position.y i}} + radius {66.39 110.23 136.95} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.1 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare261 + xpos -1215 + ypos 6512 + } + Flare { + position {{parent.ffx_position.x-120 i} {parent.ffx_position.y i}} + radius {22.36 66.2 88.66} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.1 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.11 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare277 + xpos -1215 + ypos 6538 + } + Flare { + position {{parent.ffx_position.x-100 i} {parent.ffx_position.y i}} + radius {134.57 178.41 237.8} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.03 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.035 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare272 + xpos -1215 + ypos 6564 + } + Flare { + position {{parent.ffx_position.x-270 i} {parent.ffx_position.y i}} + radius {93.38 137.22 236.38} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.29 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.02 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare276 + xpos -1215 + ypos 6590 + } +set N2367c570 [stack 0] + Flare { + position {{parent.ffx_position.x+200 i} {parent.ffx_position.y i}} + radius {5.32 20.75 23.32} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.32 + vis_mask -rgba.alpha + corners 6 + flattening 1.2 + sharpness 0.89 + corners_angle 14 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare282 + xpos -1090 + ypos 6506 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+170 i} {parent.ffx_position.y i}} + radius {18.1 33.53 46.04} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.32 + vis_mask -rgba.alpha + corners 6 + flattening 0.5 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare283 + xpos -1090 + ypos 6532 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+110 i} {parent.ffx_position.y i}} + radius {9.58 25.01 29} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.55 + vis_mask -rgba.alpha + corners 6 + flattening 0.5 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare284 + xpos -1090 + ypos 6558 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+90 i} {parent.ffx_position.y i}} + radius {16.68 32.11 36.1} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.6999999881 + brightness 0.44 + vis_mask -rgba.alpha + corners 6 + flattening 0.5 + sharpness 0.86 + corners_angle 40 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare285 + xpos -1090 + ypos 6584 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+150 i} {parent.ffx_position.y i}} + radius {91.96 107.39 135.53} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.56 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare260 + xpos -973 + ypos 6483 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+50 i} {parent.ffx_position.y i}} + radius {59.29 74.72 102.86} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.56 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare274 + xpos -973 + ypos 6509 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+200 i} {parent.ffx_position.y i}} + radius {91.96 107.39 135.53} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.2 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.69 + brightness 0.065 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare262 + xpos -973 + ypos 6535 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+100 i} {parent.ffx_position.y i}} + radius {197.07 212.5 278.99} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 0.98 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.69 + brightness 0.05 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare271 + xpos -973 + ypos 6561 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Flare { + position {{parent.ffx_position.x+300 i} {parent.ffx_position.y i}} + radius {187.13 202.56 301.72} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.29 + ring_color {0.528470993 0.6299999952 0.528470993} + inner_color 0.69 + brightness 0.03 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset 0 + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare275 + xpos -973 + ypos 6587 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==6?0:1}} + } + Blur { + size 4 + name Blur75 + xpos -863 + ypos 6581 + } + Merge { + inputs 2 + operation in + mix 0.745 + name Merge223 + xpos -863 + ypos 6638 + } + Dot { + name Dot32 + xpos -829 + ypos 6722 + } + Dot { + name Dot39 + xpos -829 + ypos 6788 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-.75 i}} + radius {42.08 75.93 192.67} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 0.76 + ring_color {1 0.111784 0} + inner_color {1 0.111784 0} + outer_falloff 1.9 + chroma_spread 0.046 + brightness 0.3 + flattening 0.7 + mult_num 2 + mult_offset 2.4 + name Flare311 + label Orange_Glow02 + xpos -1561 + ypos 6409 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } + Blur { + size 9.5 + name Blur137 + xpos -1561 + ypos 6447 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.13 i}} + radius {58.97 101.23 134.74} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.8 + ring_color {0.716 0.048 0.009} + inner_color 0.003 + chroma_shift_angle_add true + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -36 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare300 + label Half_Concave + xpos -1683 + ypos 6403 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.202 i}} + radius {132.79 178.61 214.62} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 2.1 + ring_color {0.716 0.048 0.009} + inner_color 0 + chroma_shift_angle_add true + brightness 0.4 + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -220 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare301 + label Half_Convex + xpos -1683 + ypos 6441 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.73 i}} + radius {55.03 101.23 137.55} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.8 + ring_color {0.716 0.048 0.009} + inner_color 0.003 + chroma_shift_angle_add true + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -36 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare302 + label Half_Concave + xpos -1683 + ypos 6479 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.12 + name Merge237 + xpos -1561 + ypos 6554 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation18 + xpos -1561 + ypos 6580 + } +set N23a18b00 [stack 0] + Transform { + rotate 2 + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform90 + xpos -1436 + ypos 6580 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } + Blur { + size {200 2} + name Blur136 + xpos -1436 + ypos 6606 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } +push $N23a18b00 + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge238 + xpos -1561 + ypos 6612 + } +set N23a19550 [stack 0] + Blur { + size 300 + name Blur139 + xpos -1676 + ypos 6606 + } + Glow { + brightness 0.4 + size 31 + maskChannelMask none + name Glow33 + xpos -1676 + ypos 6644 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==5?0:1}} + } + Dot { + name Dot37 + xpos -1642 + ypos 6696 + } +push $N23a19550 + Glow { + brightness 0.4 + size 31 + maskChannelMask none + name Glow32 + xpos -1561 + ypos 6650 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge239 + xpos -1561 + ypos 6692 + } + Dot { + name Dot36 + xpos -1527 + ypos 6767 + } +push $N2367c570 + Blur { + size 4 + name Blur155 + xpos -1215 + ypos 6714 + } + Grade { + whitepoint 0.42 + gamma 0.72 + maskChannelMask none + name Grade68 + xpos -2407 + ypos 6720 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(-0.6)+ffx_big_pieces_offset i}} + radius {21.87 28.75 37.09} + size_mult 15 + anamorph 1.14 + ring_color {0.09384614974 0.06153845787 0.1599999964} + inner_color {0.08718749881 0.08718749881 0.1550000012} + outer_falloff 4.2 + inner_falloff 0.9 + chroma_spread 0.005 + vis_mask -rgba.alpha + sharpness 0.255 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare178 + label Pieces + xpos -2546 + ypos 6379 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Saturation { + saturation 3 + maskChannelMask none + name Saturation11 + xpos -2546 + ypos 6417 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Blur { + size 60 + name Blur124 + xpos -2546 + ypos 6443 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.35+ffx_big_pieces_offset i}} + radius {0 21.87 37.09} + size_mult 10 + anamorph 1.56 + ring_color {0.2099999934 0.05669999495 0.1486800611} + inner_color {0.1550000012 0.08718749881 0.1482187212} + outer_falloff 0.105 + inner_falloff 2.4 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.7 + sharpness 1 + corners_angle 50 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare34 + label Pieces + xpos -2295 + ypos 6376 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.6+ffx_big_pieces_offset i}} + radius {0 37.09 37.09} + size_mult 9.5 + anamorph 1.22 + ring_color {0.2099999934 0.05669999495 0.1486800611} + inner_color {0.09000000358 0.05062500387 0.08606249094} + outer_falloff 0.105 + inner_falloff 2.3 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.5 + sharpness 1 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare35 + label Pieces + xpos -2436 + ypos 6318 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge2 { + inputs 2 + operation plus + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask none + mix 0.895 + name Merge6 + xpos -2436 + ypos 6382 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Saturation { + saturation 3.6 + maskChannelMask none + name Saturation10 + xpos -2436 + ypos 6408 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Blur { + size 68 + name Blur125 + xpos -2436 + ypos 6452 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.5+ffx_big_pieces_offset i}} + radius {0 21.87 37.09} + size_mult 1.8 + anamorph 3.3 + ring_color {0.5799999833 0.2667999864 0.4547201097} + inner_color 0 + outer_falloff 0.62 + inner_falloff 2.4 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.9 + sharpness 0.8 + corners_angle 8 + asym_multiplier 0 + asym_falloff 4.4 + asym_angle 56 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare326 + label Pieces + xpos -1934 + ypos 6500 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Blur { + size 0.1 + name Blur152 + xpos -1934 + ypos 6538 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Grade { + multiply 2 + maskChannelMask none + name Grade65 + xpos -1934 + ypos 6576 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.7+ffx_big_pieces_offset i}} + radius {0 21.87 37.09} + size_mult 5 + anamorph 1.22 + ring_color {0.2099999934 0.05669999495 0.1486800611} + inner_color 0 + outer_falloff 0.105 + inner_falloff 2.4 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.6 + sharpness 1 + asym_multiplier 0 + asym_falloff 4.9 + asym_angle 44 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare327 + label Pieces + xpos -1934 + ypos 6457 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.07+ffx_big_pieces_offset i}} + radius {0 21.87 37.09} + size_mult 4.2 + anamorph 0.95 + ring_color {0.2099999934 0.05669999495 0.1486800611} + inner_color 0 + outer_falloff 0.105 + inner_falloff 2.4 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.6 + sharpness 1 + asym_multiplier 0 + asym_falloff 4.3 + asym_angle 46 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare328 + label Pieces + xpos -2044 + ypos 6425 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge274 + xpos -2044 + ypos 6463 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge275 + xpos -2044 + ypos 6544 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Grade { + white 4 + multiply 1.85 + maskChannelMask none + unpremult -rgba.alpha + name Grade64 + xpos -2044 + ypos 6570 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Blur { + size 12 + name Blur153 + xpos -2044 + ypos 6596 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.5+ffx_big_pieces_offset i}} + radius {0 21.87 37.09} + size_mult 1.8 + anamorph 3.3 + ring_color {0.5799999833 0.2667999864 0.4547201097} + inner_color {0.8700000048 0.4893749952 0.8319373727} + outer_falloff 0.62 + inner_falloff 2.4 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.9 + sharpness 0.8 + corners_angle 8 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare31 + label Pieces + xpos -2183 + ypos 6508 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Blur { + size 0.1 + name Blur128 + xpos -2183 + ypos 6546 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.7+ffx_big_pieces_offset i}} + radius {0 21.87 37.09} + size_mult 5 + anamorph 1.22 + ring_color {0.2099999934 0.05669999495 0.1486800611} + inner_color {0.1049999967 0.05906249955 0.1004062295} + outer_falloff 0.105 + inner_falloff 2.4 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.6 + sharpness 1 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare32 + label Pieces + xpos -2183 + ypos 6465 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1.07+ffx_big_pieces_offset i}} + radius {0 21.87 37.09} + size_mult 4.2 + anamorph 0.95 + ring_color {0.2099999934 0.05669999495 0.1486800611} + inner_color {0.125 0.0703125 0.1195312291} + outer_falloff 0.105 + inner_falloff 2.4 + chroma_spread 0.005 + vis_mask -rgba.alpha + corners 4 + flattening 0.6 + sharpness 1 + asym_falloff 0.72 + asym_angle 116 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare33 + label Pieces + xpos -2293 + ypos 6433 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge3 + xpos -2293 + ypos 6471 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge5 + xpos -2293 + ypos 6552 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Grade { + white 0.4 + maskChannelMask none + unpremult -rgba.alpha + name Grade117 + xpos -2293 + ypos 6578 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Blur { + size 12 + name Blur126 + xpos -2293 + ypos 6604 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge2 { + inputs 2 + operation plus + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask none + mix 0.3 + name Merge276 + xpos -2293 + ypos 6642 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Grade { + multiply 0.68 + gamma 0.88 + maskChannelMask none + name Grade66 + xpos -2293 + ypos 6668 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge2 { + inputs 2 + operation plus + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask none + mix 0.17 + name Merge7 + xpos -2436 + ypos 6668 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Merge { + inputs 2 + operation plus + mix 0.145 + name Merge196 + xpos -2546 + ypos 6668 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==4?0:1}} + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation19 + xpos -2546 + ypos 6694 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge278 + xpos -2546 + ypos 6720 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise6 + xpos -2672 + ypos 6543 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==3?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{1+ffx_big_pieces_offset i}} + radius {317.32 324.2 500} + size_mult {{(parent.ffx_flare_size)+.6 i}} + anamorph 1.44 + ring_color 0.04 + inner_color 0.04 + outer_falloff 0.38 + inner_falloff 1.15 + chroma_spread -0.13 + brightness 0.19 + vis_mask -rgba.alpha + flattening 0.1 + sharpness 1 + mult_num 5 + mult_offset 8 + mult_size -0.16 + mult_brightness -0.02 + mult_visibility -0.18 + name Flare173 + label Pieces + xpos -2830 + ypos 6463 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==3?0:1}} + } + Merge { + inputs 2 + operation in + mix 0.845 + name Merge23 + xpos -2830 + ypos 6543 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==3?0:1}} + } + Grade { + multiply 3 + maskChannelMask none + name Grade29 + xpos -2830 + ypos 6569 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==3?0:1}} + } + Glow { + size 20 + maskChannelMask none + name Glow19 + xpos -2830 + ypos 6595 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==3?0:1}} + } + Blur { + size 50 + name Blur110 + xpos -2830 + ypos 6621 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==3?0:1}} + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise4 + xpos -2973 + ypos 6550 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==2?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{0+ffx_big_pieces_offset i}} + radius {317.32 324.2 500} + size_mult {{(parent.ffx_flare_size)+.6 i}} + anamorph 1.44 + ring_color 0.1525 + inner_color 0.135 + outer_falloff 0.86 + inner_falloff 0.9 + chroma_spread 0.062 + brightness 0.14 + vis_mask -rgba.alpha + flattening 0.1 + sharpness 1 + mult_num 4 + mult_offset 8 + mult_size -0.1 + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare56 + label Pieces + xpos -3125 + ypos 6476 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==2?0:1}} + } + Merge { + inputs 2 + operation in + mix 0.845 + name Merge15 + xpos -3125 + ypos 6550 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==2?0:1}} + } + Grade { + multiply 3 + maskChannelMask none + name Grade28 + xpos -3125 + ypos 6576 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==2?0:1}} + } + Glow { + size 20 + maskChannelMask none + name Glow11 + xpos -3125 + ypos 6602 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==2?0:1}} + } + Blur { + size 50 + name Blur111 + xpos -3125 + ypos 6628 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==2?0:1}} + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise3 + xpos -3302 + ypos 6477 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{0.13+ffx_big_pieces_offset i}} + radius {252.02 397.85 500} + size_mult {{(parent.ffx_flare_size)+3.6 i}} + ring_color 0.65 + inner_color 0.33 + corners 27 + flattening 0.7 + sharpness 1 + mult_num 4 + mult_offset 5.6 + mult_size 1 + mult_color 0.95 + mult_brightness -0.72 + mult_visibility 0.12 + mult_rotate 1 + name Flare59 + xpos -3589 + ypos 6583 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==1?0:1}} + } + Blur { + size 24 + name Blur29 + xpos -3589 + ypos 6609 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==1?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{0.13+ffx_big_pieces_offset i}} + radius {119.33 397.85 500} + size_mult {{(parent.ffx_flare_size) i}} + ring_color 0.75 + inner_color 0.26 + brightness 0.105 + corners 27 + flattening 0.7 + sharpness 1 + mult_num 11 + mult_offset 3.6 + mult_size 1 + mult_color 0.95 + mult_brightness -0.72 + mult_visibility 0.12 + mult_rotate 1 + name Flare60 + xpos -3468 + ypos 6491 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==1?0:1}} + } + Blur { + size 24 + name Blur45 + xpos -3468 + ypos 6517 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==1?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.055 + name Merge14 + xpos -3468 + ypos 6615 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==1?0:1}} + } + Merge { + inputs 2 + operation in + mix 0.725 + name Merge21 + xpos -3302 + ypos 6615 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==1?0:1}} + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise2 + xpos -3791 + ypos 6489 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{0.13+ffx_big_pieces_offset i}} + radius {252.02 397.85 500} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + inner_color 0.83 + corners 27 + flattening 0.7 + sharpness 1 + mult_num 4 + mult_offset 5.6 + mult_size 1 + mult_color 0.95 + mult_brightness -0.72 + mult_visibility 0.12 + mult_rotate 1 + name Flare171 + xpos -4078 + ypos 6591 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==0?0:1}} + } + Blur { + size 24 + name Blur108 + xpos -4078 + ypos 6617 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==0?0:1}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{0.13+ffx_big_pieces_offset i}} + radius {119.33 265.16 367.31} + size_mult {{(parent.ffx_flare_size) i}} + inner_color 0.7 + brightness 0.13 + corners 27 + flattening 0.7 + sharpness 1 + mult_num 8 + mult_offset 3.6 + mult_size 1 + mult_color 0.95 + mult_brightness -0.72 + mult_visibility 0.12 + mult_rotate 1 + name Flare172 + xpos -3957 + ypos 6499 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==0?0:1}} + } + Blur { + size 24 + name Blur109 + xpos -3957 + ypos 6525 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==0?0:1}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.055 + name Merge80 + xpos -3957 + ypos 6623 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==0?0:1}} + } + Merge { + inputs 2 + operation in + mix 0.725 + name Merge81 + xpos -3791 + ypos 6623 + disable {{Big_Pieces_Plus.disable==1?1:big_pieces.which==0?0:1}} + } + Switch { + inputs 7 + name big_pieces + xpos -3302 + ypos 6806 + } + Blur { + name Big_Pieces_Blur + label "Pieces Blur" + xpos -711 + ypos 6794 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Big_Pieces_Color + label "Pieces CC" + xpos -601 + ypos 6800 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.4 + radius {4.36 12.69 18.11} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.403333 0.338333} + inner_color 0.29 + brightness 0.47 + vis_mask -rgba.alpha + corners 0 + flattening 1 + sharpness 0.86 + asym_multiplier 0 + asym_falloff 2.45 + asym_angle 6 + mult_num {{5+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{3.05+(parent.ffx_pieces_offset) i}} + mult_size {{-0.52+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare295 + xpos -642 + ypos 5564 + disable {{Pieces_Plus.disable==1?1:pieces.which==10?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.3 + radius {2.91 11.24 16.66} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.34 0.37} + chroma_spread 0.07 + brightness 0.5 + vis_mask -rgba.alpha + corners 0 + flattening 1 + sharpness 0.86 + asym_multiplier 0 + asym_falloff 1.25 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{1.65+(parent.ffx_pieces_offset) i}} + mult_size {{0.72+(parent.ffx_pieces_size) i}} + mult_color -1.95 + mult_brightness -1 + mult_visibility -0.34 + mult_flattening -0.4 + mult_rotate 0.5 + name Flare298 + xpos -642 + ypos 5590 + disable {{Pieces_Plus.disable==1?1:pieces.which==10?0:1 i}} + } + Blur { + size 11 + name Blur138 + xpos -642 + ypos 5616 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.4 + radius {4.36 12.69 18.11} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.403333 0.338333} + inner_color 0.29 + brightness 0.105 + vis_mask -rgba.alpha + corners 0 + flattening 1 + sharpness 0.86 + mult_num {{5+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{3.05+(parent.ffx_pieces_offset) i}} + mult_size {{-0.52+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare296 + xpos -735 + ypos 5561 + disable {{Pieces_Plus.disable==1?1:pieces.which==10?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.3 + radius {2.91 11.24 16.66} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.34 0.37} + chroma_spread 0.07 + brightness 0.13 + vis_mask -rgba.alpha + corners 0 + flattening 1 + sharpness 0.86 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{1.65+(parent.ffx_pieces_offset) i}} + mult_size {{0.72+(parent.ffx_pieces_size) i}} + mult_color -1.95 + mult_brightness -1 + mult_visibility -0.34 + mult_flattening -0.4 + mult_rotate 0.5 + name Flare297 + xpos -735 + ypos 5587 + disable {{Pieces_Plus.disable==1?1:pieces.which==10?0:1 i}} + } + Saturation { + saturation 0.6 + name Saturation17 + xpos -735 + ypos 5613 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge263 + xpos -735 + ypos 5651 + } + Blur { + size 4 + name Blur135 + xpos -735 + ypos 5703 + } + Grade { + white {1 1 2 1} + multiply 4 + name Grade54 + xpos -735 + ypos 5741 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + lacunarity 1.84 + gain 0.245 + gamma 0.73 + center {320 240} + name Noise16 + xpos -845 + ypos 5931 + } + Merge { + inputs 2 + operation in + name Merge259 + xpos -735 + ypos 5931 + } + Dot { + name Dot40 + xpos -701 + ypos 6193 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 2 + radius {0 8.33 13.75} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.403333 0.338333} + inner_color 0.37 + chroma_spread 0.062 + chroma_shift_angle_add true + brightness 0.04 + vis_mask -rgba.alpha + corners 6 + flattening 0.6 + sharpness 0.86 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{5+(parent.ffx_pieces_offset) i}} + mult_size {{-0.02+(parent.ffx_pieces_size) i}} + mult_color 1.5 + mult_brightness -1 + name Flare247 + xpos -2361 + ypos 5538 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.4 + radius {0 8.33 13.75} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.403333 0.338333} + inner_color 0.29 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + flattening 1 + sharpness 0.86 + mult_num {{3+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{3.05+(parent.ffx_pieces_offset) i}} + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare252 + xpos -2361 + ypos 5564 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.3 + radius {0 8.33 13.75} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.34 0.37} + inner_color 0.29 + chroma_spread 0.07 + brightness 0.13 + vis_mask -rgba.alpha + corners 6 + flattening 1 + sharpness 0.86 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{1.65+(parent.ffx_pieces_offset) i}} + mult_size {{0.72+(parent.ffx_pieces_size) i}} + mult_color -1.95 + mult_brightness -1 + mult_visibility -0.34 + mult_flattening -0.4 + mult_rotate 0.5 + name Flare257 + xpos -2361 + ypos 5590 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Saturation { + saturation 0.6 + name Saturation15 + xpos -2361 + ypos 5618 + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.55 + radius {38.38 46.71 52.13} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 3 + ring_color {0.338333 0.403333 0.338333} + inner_color 0.32 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + flattening 0.7 + sharpness 0.86 + mult_num {{2+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{1+(parent.ffx_pieces_offset) i}} + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.72 + mult_rotate 0.8 + name Flare258 + xpos -2361 + ypos 5644 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Blur { + size 10 + name Blur73 + xpos -2361 + ypos 5671 + } + Grade { + white {1 1 2 1} + multiply 4 + name Grade44 + xpos -2361 + ypos 5709 + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.9 + radius {37.95 46.28 50.39} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 0.7 + ring_color {0.338333 0.403333 0.338333} + inner_color 0.295 + outer_falloff 0.7 + inner_falloff 4.8 + chroma_spread 0.018 + chroma_shift 0.2 + chroma_shift_angle 46 + brightness 0.03 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + asym_multiplier 0 + asym_falloff 10 + asym_angle -28 + mult_num {{1+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{-0.3+(parent.ffx_pieces_offset) i}} + mult_size {{0.2+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 1 + name Flare259 + xpos -2361 + ypos 5735 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Dot { + name Dot31 + xpos -2327 + ypos 5830 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-.8 i}} + radius {17.72 31.88 48.99} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 3.8 + ring_color {1 0.5505269766 0.07443982363} + inner_color {0.7400000095 0.590524435 0.3758593202} + brightness 0.035 + flattening 1 + sharpness 0.85 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{2+(parent.ffx_pieces_seed) i}} + mult_offset {{5.3+(parent.ffx_pieces_offset) i}} + mult_size {{.64+(parent.ffx_pieces_size) i}} + mult_color -0.3 + mult_brightness -0.38 + mult_flattening -0.24 + name Flare248 + label Multi_Orange + xpos -2213 + ypos 5495 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.13 i}} + radius {89.49 101.23 133.29} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 4.8 + ring_color {0.716 0.048 0.009} + inner_color 0.003 + chroma_shift_angle_add true + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -36 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare249 + label Half_Concave + xpos -2213 + ypos 5533 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.202 i}} + radius {164.77 178.61 214.62} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 4.1 + ring_color {0.716 0.048 0.009} + inner_color 0 + chroma_shift_angle_add true + brightness 0.4 + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -220 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare250 + label Half_Convex + xpos -2213 + ypos 5571 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.73 i}} + radius {71.02 101.23 137.55} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 4.8 + ring_color {0.716 0.048 0.009} + inner_color 0.003 + chroma_shift_angle_add true + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -36 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare251 + label Half_Concave + xpos -2213 + ypos 5609 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size) i}} + radius {65.34 75.93 114.18} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 4.66 + ring_color {1 0.111784 0} + inner_color {1 0.111784 0} + outer_falloff 1.9 + chroma_spread 0.046 + brightness 0.3 + flattening 0.7 + mult_num 2 + name Flare253 + label Orange_Glow02 + xpos -2091 + ypos 5485 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.5 i}} + radius {0 72.31 213.3} + size_mult {{-((parent.ffx_flare_size)-1.04)+(parent.lens_pieces_size) i}} + anamorph 3.7 + ring_color {1.54601 0.0067025 0} + inner_color {3.17968 0.0106466 0} + outer_falloff 2 + brightness 0.4 + name Flare254 + label Little_Red_01 + xpos -2091 + ypos 5523 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.565 i}} + radius {0 72.31 166.65} + size_mult {{-((parent.ffx_flare_size)-1.04)+(parent.lens_pieces_size) i}} + anamorph 4 + ring_color {1 0.00519486 0} + inner_color {1.72586 0.00716965 0} + outer_falloff 2 + brightness 0.6 + flattening 0.02 + asym_multiplier 0.125 + asym_falloff 1.35 + asym_angle -200 + name Flare255 + label Little_Red_02 + xpos -2091 + ypos 5561 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.56 i}} + radius {0 75.15 198.64} + size_mult {{-((parent.ffx_flare_size)-1.05)+(parent.lens_pieces_size) i}} + anamorph 2 + ring_color {1.69674 0.00709478 0} + inner_color {3.11749 0.0105057 0} + outer_falloff 2 + brightness 0.6 + flattening 0.9 + name Flare256 + label Little_Red_03 + xpos -2091 + ypos 5599 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge198 + xpos -2091 + ypos 5653 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation14 + xpos -2091 + ypos 5679 + } +set N23fce340 [stack 0] + Transform { + rotate 2 + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform54 + xpos -1966 + ypos 5679 + } + Blur { + size {300 2} + name Blur69 + xpos -1966 + ypos 5705 + } +push $N23fce340 + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge220 + xpos -2091 + ypos 5723 + } + Glow { + brightness 0.4 + size 31 + maskChannelMask none + name Glow21 + xpos -2091 + ypos 5749 + } + Dot { + name Dot30 + xpos -2057 + ypos 5797 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.139442 + radius {71.88 77.09 102.8} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 0.645 + ring_color 0.59 + inner_color 0.76 + brightness {0.2300000042 0.3799999952 0.2700000107} + flattening 0.1 + sharpness 1 + mult_num {{2+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{5.35++(parent.ffx_pieces_offset) i}} + mult_size {{1+(parent.ffx_pieces_size) i}} + mult_color 0.95 + mult_brightness -0.56 + mult_visibility 0.12 + name Flare238 + xpos -1758 + ypos 5483 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Blur { + size 12 + name Blur70 + xpos -1758 + ypos 5509 + } + Glow { + maskChannelMask none + name Glow17 + xpos -1758 + ypos 5547 + } + Transform { + scale {1.6 1} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + black_outside false + name Transform82 + xpos -1758 + ypos 5573 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.139442 + radius {71.88 77.09 102.8} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.51 + ring_color 0.59 + inner_color 0.76 + brightness 0.16 + flattening 0.1 + sharpness 1 + mult_num {{4+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{2.35++(parent.ffx_pieces_offset) i}} + mult_size {{1+(parent.ffx_pieces_size) i}} + mult_color 0.95 + mult_brightness -0.72 + mult_visibility 0.12 + name Flare237 + xpos -1891 + ypos 5496 + disable {{Pieces_Plus.disable==1?1:pieces.which==9?0:1 i}} + } + Glow { + maskChannelMask none + name Glow5 + xpos -1891 + ypos 5522 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + mix 0.325 + name Merge197 + xpos -1891 + ypos 5573 + } + Grade { + multiply 0.3 + maskChannelMask none + name Grade45 + xpos -1891 + ypos 5599 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + mix 0.05 + name Merge221 + xpos -1891 + ypos 5793 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + mix 0.12 + name Merge222 + xpos -1891 + ypos 5826 + } + Noise { + inputs 0 + size {{75*(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + lacunarity 1.84 + gain 0.245 + gamma 0.96 + center {320 240} + name Noise13 + xpos -2001 + ypos 5941 + } + Merge { + inputs 2 + operation in + name Merge195 + xpos -1891 + ypos 5941 + } + Dot { + name Dot29 + xpos -1857 + ypos 6004 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset -1 + inner_color 0.23 + asym_multiplier 0.17 + asym_angle 180 + mult_num 6 + mult_offset -7 + mult_size 1 + mult_color 1.8 + mult_brightness -1 + mult_visibility -0.74 + mult_flattening 1 + mult_rotate 1 + name Flare265 + xpos -2534 + ypos 5775 + disable {{Pieces_Plus.disable==1?1:pieces.which==8?0:1 i}} + } + Blur { + size 6.2 + name Blur119 + xpos -2534 + ypos 5801 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.05 + radius {71.28 91.28 111.28} + inner_color 0.35 + asym_multiplier 0.315 + asym_falloff 2.35 + asym_angle 28 + mult_num 3 + mult_offset 7.9 + mult_size 0.78 + mult_color 1.8 + mult_brightness -0.66 + mult_visibility -0.74 + mult_flattening 1 + mult_rotate 0.7 + name Flare266 + xpos -2666 + ypos 5667 + disable {{Pieces_Plus.disable==1?1:pieces.which==8?0:1 i}} + } + Blur { + size 6.2 + name Blur120 + xpos -2666 + ypos 5709 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.065 + name Merge247 + xpos -2666 + ypos 5807 + } + Dot { + name Dot15 + xpos -2632 + ypos 5978 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise9 + xpos -2815 + ypos 5904 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{parent.Flare188.offset.left i}} + radius {0 50.86 125.81} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1.55 i}} + ring_color 0.7 + inner_color 0.01 + outer_falloff 1.35 + inner_falloff 2.5 + chroma_spread 0.1 + chroma_shift 0.4 + vis_out 1.2 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0 + corners_angle -16 + asym_multiplier 0 + asym_falloff 2.7 + asym_angle -112 + mult_num {{2+(parent.ffx_more_pieces) i}} + mult_offset {{5.9+(parent.ffx_pieces_offset) i}} + mult_size {{1.32+(parent.ffx_pieces_size) i}} + name Flare103 + label Source + xpos -2857 + ypos 5760 + disable {{Pieces_Plus.disable==1?1:pieces.which==7?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{parent.Flare188.offset.left i}} + radius {28.41 80.69 101.66} + size_mult {{(parent.ffx_flare_size)+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1.55 i}} + ring_color 0.7 + inner_color 0.01 + outer_falloff 1.35 + inner_falloff 2.5 + chroma_spread 0.1 + chroma_shift 0.4 + brightness 0.31 + vis_out 1.2 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0 + corners_angle -16 + asym_multiplier 0 + asym_falloff 2.7 + asym_angle 38 + mult_num {{2+(parent.ffx_more_pieces) i}} + mult_offset {{5.9+(parent.ffx_pieces_offset) i}} + mult_size {{1.32+(parent.ffx_pieces_size) i}} + name Flare179 + label Source + xpos -2860 + ypos 5702 + disable {{Pieces_Plus.disable==1?1:pieces.which==7?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i x11 322} {parent.ffx_position.y i x11 650}} + offset 0.5 + radius {71.02 90.68 127.43} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.55 + ring_color 0.29 + inner_color {0.2225581408 0.276279062 0.3300000131} + inner_falloff 0.7 + chroma_spread 0.065 + chroma_shift 14.6 + chroma_shift_angle 52 + brightness 0.18 + vis_mask -rgba.alpha + asym_angle -28 + mult_num {{2+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{5.9+(parent.ffx_pieces_offset) i}} + mult_size {{1.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -0.78 + mult_visibility 0.06 + mult_flattening 0.06 + mult_rotate 0.18 + name Flare188 + label Bits + xpos -2954 + ypos 5641 + disable {{Pieces_Plus.disable==1?1:pieces.which==7?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge158 + xpos -2954 + ypos 5708 + } + Merge2 { + inputs 2 + operation stencil + Achannels {rgba.red rgba.green rgba.blue rgba.red} + maskChannelMask none + mix 0.57 + name Merge159 + xpos -2954 + ypos 5766 + } + Merge { + inputs 2 + operation in + mix 0.845 + name Merge157 + xpos -2954 + ypos 5904 + } + Grade { + multiply 3 + maskChannelMask none + name Grade5 + xpos -2954 + ypos 5930 + } + Glow { + size 20 + maskChannelMask none + name Glow3 + xpos -2954 + ypos 5956 + } + Radial { + inputs 0 + maskChannelMask none + area {0 0 {root.width i} {root.height i}} + name Radial3 + xpos -3182 + ypos 5954 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size) i}} + radius {16.37 34.91 72.4} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.8 + ring_color {0.692071 0.0696023 0.00848491} + inner_color {0.5 0.0967598 0.0334461} + chroma_shift_angle_add true + brightness 0.19 + flattening 0.8 + sharpness 0.58 + mult_num {{4+(parent.ffx_more_pieces) i}} + mult_seed {{2+(parent.ffx_pieces_seed) i}} + mult_offset {{2.1+(parent.ffx_pieces_offset) i}} + mult_size {{.32+(parent.ffx_pieces_size) i}} + mult_color -0.3 + mult_brightness -0.82 + name Flare180 + label Big_Red + xpos -3488 + ypos 5622 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-.8 i}} + radius {17.72 31.88 48.99} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.8 + ring_color {1 0.5505269766 0.07443982363} + inner_color {0.7400000095 0.590524435 0.3758593202} + brightness 0.035 + flattening 1 + sharpness 0.85 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{2+(parent.ffx_pieces_seed) i}} + mult_offset {{5.3+(parent.ffx_pieces_offset) i}} + mult_size {{.64+(parent.ffx_pieces_size) i}} + mult_color -0.3 + mult_brightness -0.38 + mult_flattening -0.24 + name Flare181 + label Multi_Orange + xpos -3488 + ypos 5660 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.13 i}} + radius {89.49 101.23 133.29} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.8 + ring_color {0.716 0.048 0.009} + inner_color 0.003 + chroma_shift_angle_add true + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -36 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare182 + label Half_Concave + xpos -3488 + ypos 5698 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.202 i}} + radius {164.77 178.61 214.62} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 2.1 + ring_color {0.716 0.048 0.009} + inner_color 0 + chroma_shift_angle_add true + brightness 0.4 + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -220 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare183 + label Half_Convex + xpos -3488 + ypos 5736 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.73 i}} + radius {71.02 101.23 137.55} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 2.8 + ring_color {0.716 0.048 0.009} + inner_color 0.003 + chroma_shift_angle_add true + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -36 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare101 + label Half_Concave + xpos -3488 + ypos 5774 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.92 i}} + radius {113.63 178.61 214.62} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 2.8 + ring_color {0.716 0.048 0.009} + inner_color 0 + chroma_shift_angle_add true + brightness 0.4 + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -220 + mult_seed {{(parent.ffx_pieces_seed) i}} + name Flare102 + label Half_Convex + xpos -3488 + ypos 5812 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size) i}} + radius {65.34 75.93 114.18} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 2.66 + ring_color {1 0.111784 0} + inner_color {1 0.111784 0} + outer_falloff 1.9 + chroma_spread 0.046 + brightness 0.3 + flattening 0.7 + mult_num 2 + name Flare184 + label Orange_Glow02 + xpos -3366 + ypos 5650 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.5 i}} + radius {0 72.31 213.3} + size_mult {{-((parent.ffx_flare_size)-1.04)+(parent.lens_pieces_size) i}} + anamorph 1.7 + ring_color {1.54601 0.0067025 0} + inner_color {3.17968 0.0106466 0} + outer_falloff 2 + brightness 0.4 + name Flare185 + label Little_Red_01 + xpos -3366 + ypos 5688 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.565 i}} + radius {0 72.31 166.65} + size_mult {{-((parent.ffx_flare_size)-1.04)+(parent.lens_pieces_size) i}} + anamorph 2 + ring_color {1 0.00519486 0} + inner_color {1.72586 0.00716965 0} + outer_falloff 2 + brightness 0.6 + flattening 0.02 + asym_multiplier 0.125 + asym_falloff 1.35 + asym_angle -200 + name Flare186 + label Little_Red_02 + xpos -3366 + ypos 5726 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.56 i}} + radius {0 75.15 198.64} + size_mult {{-((parent.ffx_flare_size)-1.05)+(parent.lens_pieces_size) i}} + anamorph 2 + ring_color {1.69674 0.00709478 0} + inner_color {3.11749 0.0105057 0} + outer_falloff 2 + brightness 0.6 + flattening 0.9 + name Flare187 + label Little_Red_03 + xpos -3366 + ypos 5764 + disable {{Pieces_Plus.disable==1?1:pieces.which==6?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge121 + xpos -3366 + ypos 5818 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation6 + xpos -3366 + ypos 5844 + } +set N242f2ec0 [stack 0] + Transform { + rotate 2 + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform56 + xpos -3241 + ypos 5844 + } + Blur { + size {300 2} + name Blur5 + xpos -3241 + ypos 5870 + } +push $N242f2ec0 + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge110 + xpos -3366 + ypos 5888 + } + Glow { + brightness 0.4 + size 31 + maskChannelMask none + name Glow2 + xpos -3366 + ypos 5914 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge156 + xpos -3366 + ypos 5954 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise12 + xpos -3646 + ypos 5877 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {15.62 22.5 30.84} + size_mult {{(parent.ffx_flare_size)+.4+(parent.lens_pieces_size) i}} + anamorph 1.35072 + ring_color 0.1525 + inner_color 0.135 + outer_falloff 0.86 + inner_falloff 0.9 + chroma_spread 0.038 + brightness 0.034 + vis_mask -rgba.alpha + flattening 0.7 + mult_num {{20+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{3.9+(parent.ffx_pieces_offset) i}} + mult_size {{.82+(parent.ffx_pieces_size) i}} + mult_color -0.85 + mult_brightness -0.18 + mult_visibility 0.18 + mult_rotate 0.08 + name Flare57 + label Bits + xpos -3785 + ypos 5715 + disable {{Pieces_Plus.disable==1?1:pieces.which==5?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {21.87 28.75 47.03} + size_mult {{(parent.ffx_flare_size)+.2+(parent.lens_pieces_size) i}} + anamorph 1.44 + ring_color 0.1525 + inner_color 0.135 + outer_falloff 0.86 + inner_falloff 0.9 + chroma_spread 0.062 + brightness 0.016 + vis_mask -rgba.alpha + flattening 0.7 + mult_num {{5+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{8+(parent.ffx_pieces_offset) i}} + mult_size {{-0.1+(parent.ffx_pieces_size) i}} + mult_color 0.6 + mult_brightness -0.72 + mult_visibility -0.18 + name Flare58 + label Pieces + xpos -3785 + ypos 5753 + disable {{Pieces_Plus.disable==1?1:pieces.which==5?0:1 i}} + } + Grade { + multiply 8 + name Grade14 + xpos -3785 + ypos 5791 + } + Merge { + inputs 2 + operation in + mix 0.845 + name Merge24 + xpos -3785 + ypos 5877 + } + Grade { + multiply 3 + maskChannelMask none + name Grade8 + xpos -3785 + ypos 5903 + } + Glow { + size 20 + maskChannelMask none + name Glow8 + xpos -3785 + ypos 5929 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-1 i}} + radius {33.35 53.35 73.35} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.19 0.325 0.1} + inner_color {0.19 0.325 0.1} + chroma_spread 0.028 + brightness 0.06 + vis_mask -rgba.alpha + corners 3 + flattening 0.9 + sharpness 0.56 + mult_num {{5+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{++(parent.ffx_pieces_offset) i}} + mult_size {{1+(parent.ffx_pieces_size) i}} + mult_color 0.1 + mult_brightness -0.66 + mult_flattening -1 + name Flare68 + xpos -4017 + ypos 5794 + disable {{Pieces_Plus.disable==1?1:pieces.which==4?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-1 i}} + radius {0 9.8 28.34} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.19 0.325 0.1} + inner_color {0.19 0.325 0.1} + chroma_spread 0.068 + brightness 0.085 + vis_mask -rgba.alpha + corners 3 + flattening 0.9 + mult_num {{15+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{4+(parent.ffx_pieces_offset) i}} + mult_size {{1+(parent.ffx_pieces_size) i}} + mult_color 0.5 + mult_brightness -0.64 + mult_visibility -0.84 + mult_flattening -1 + name Flare70 + xpos -4017 + ypos 5820 + disable {{Pieces_Plus.disable==1?1:pieces.which==4?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-1 i}} + radius {0 5.43 9.39} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.19 0.325 0.1} + inner_color {0.19 0.325 0.1} + chroma_spread 0.036 + brightness 0.048 + vis_mask -rgba.alpha + corners 3 + flattening 0.9 + mult_num {{15+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{4.3+(parent.ffx_pieces_offset) i}} + mult_size {{1+(parent.ffx_pieces_size) i}} + mult_color 0.45 + mult_brightness -0.78 + mult_visibility -0.84 + mult_flattening -1 + name Flare71 + xpos -4017 + ypos 5846 + disable {{Pieces_Plus.disable==1?1:pieces.which==4?0:1 i}} + } + Grade { + multiply 2.5 + maskChannelMask none + name Grade1 + xpos -4017 + ypos 5872 + } + Glow { + brightness 2.04 + size 31 + maskChannelMask none + name Glow7 + xpos -4017 + ypos 5898 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.55 i}} + radius {45.45 54.05 55.75} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.717144 0.831651 0.231489} + inner_color {0.290861 0.320133 0.150273} + brightness 0.32 + flattening 0.5 + asym_multiplier 0 + asym_falloff 0.62 + asym_angle -88 + name Flare6 + label Little_Yellow_01 + xpos -4274 + ypos 5606 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.55 i}} + radius {42.62 42.62 42.62} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.717144 0.831651 0.231489} + inner_color {0.290861 0.320133 0.150273} + brightness 0.32 + flattening 0.5 + asym_multiplier 0 + asym_falloff 0.62 + asym_angle -88 + name Flare7 + label Little_Yellow_02 + xpos -4274 + ypos 5644 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.58 i}} + radius {21.31 29.59 32.78} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.717144 0.831651 0.231489} + inner_color {0.290861 0.320133 0.150273} + brightness 0.2 + flattening 0.5 + asym_multiplier 0 + asym_falloff 0.62 + asym_angle -88 + name Flare8 + label Little_Yellow_03 + xpos -4274 + ypos 5682 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.58 i}} + radius {11.36 15.16 24.44} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.717144 0.831651 0.231489} + inner_color {0.290861 0.320133 0.150273} + brightness 0.11 + flattening 0.3 + asym_multiplier 0.135 + asym_falloff 0.44 + asym_angle -102 + name Flare9 + label Little_Yellow_04 + xpos -4274 + ypos 5720 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.56 i}} + radius {18.82 34.78 39.89} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.717144 0.831651 0.231489} + inner_color {0.290861 0.320133 0.150273} + chroma_spread 0.068 + brightness 0.06 + flattening 0.1 + asym_multiplier 0.135 + asym_falloff 0.44 + asym_angle -102 + name Flare10 + label Little_Yellow_05 + xpos -4274 + ypos 5758 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size) i}} + radius {16.37 34.91 72.4} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.692071 0.0696023 0.00848491} + inner_color {0.5 0.0967598 0.0334461} + chroma_shift_angle_add true + brightness 0.19 + corners 6 + flattening 0.3 + sharpness 0.58 + mult_num {{6+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{2.1+(parent.ffx_pieces_offset) i}} + mult_size {{.32+(parent.ffx_pieces_size) i}} + mult_color -0.3 + mult_brightness -0.82 + name Flare2 + label Big_Red + xpos -4379 + ypos 5605 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-.8 i}} + radius {17.72 31.88 48.99} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {1 0.550527 0.0744398} + inner_color {0.5 0.399003 0.253959} + brightness 0.02 + corners 6 + flattening 0.9 + sharpness 0.95 + mult_num {{8+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{3.3+(parent.ffx_pieces_offset) i}} + mult_size {{.34+(parent.ffx_pieces_size) i}} + mult_color -0.3 + mult_brightness -0.38 + mult_flattening -0.24 + name Flare3 + label Multi_Orange + xpos -4379 + ypos 5643 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.13 i}} + radius {0 11.74 19.65} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.716 0.048 0.009} + inner_color 0.003 + chroma_shift_angle_add true + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -36 + name Flare4 + label Half_Concave + xpos -4379 + ypos 5684 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.202 i}} + radius {0 13.84 20.02} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.716 0.048 0.009} + inner_color 0 + chroma_shift_angle_add true + brightness 0.4 + asym_multiplier 0 + asym_falloff 3.3 + asym_angle -220 + name Flare5 + label Half_Convex + xpos -4379 + ypos 5722 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.4 + name Merge1 + xpos -4274 + ypos 5809 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+.9 i}} + radius {0 10.59 31.79} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 1.06 + ring_color {1 0.111784 0} + inner_color {1 0.111784 0} + outer_falloff 1.9 + chroma_spread 0.046 + brightness 0.3 + mult_num 2 + name Flare11 + label Orange_Glow02 + xpos -4172 + ypos 5641 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.5 i}} + radius {0 72.31 213.3} + size_mult {{-((parent.ffx_flare_size)-1.04)+(parent.lens_pieces_size) i}} + ring_color {1.54601 0.0067025 0} + inner_color {3.17968 0.0106466 0} + outer_falloff 2 + brightness 0.4 + name Flare12 + label Little_Red_01 + xpos -4172 + ypos 5679 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.565 i}} + radius {0 72.31 166.65} + size_mult {{-((parent.ffx_flare_size)-1.04)+(parent.lens_pieces_size) i}} + ring_color {1 0.00519486 0} + inner_color {1.72586 0.00716965 0} + outer_falloff 2 + brightness 0.6 + asym_multiplier 0.125 + asym_falloff 1.35 + asym_angle -200 + name Flare13 + label Little_Red_02 + xpos -4172 + ypos 5717 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)+1.56 i}} + radius {0 72.31 195.8} + size_mult {{-((parent.ffx_flare_size)-1.05)+(parent.lens_pieces_size) i}} + ring_color {1.69674 0.00709478 0} + inner_color {3.11749 0.0105057 0} + outer_falloff 2 + brightness 0.6 + name Flare14 + label Little_Red_03 + xpos -4172 + ypos 5755 + disable {{Pieces_Plus.disable==1?1:pieces.which==3?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge2 + xpos -4172 + ypos 5809 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation1 + xpos -4172 + ypos 5835 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise11 + xpos -4602 + ypos 5784 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1 + radius {0 8.33 13.75} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.403333 0.338333} + inner_color 0.37 + chroma_spread 0.062 + chroma_shift_angle_add true + brightness 0.04 + vis_mask -rgba.alpha + corners 6 + flattening 0.6 + sharpness 0.86 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{5+(parent.ffx_pieces_offset) i}} + mult_size {{-0.02+(parent.ffx_pieces_size) i}} + mult_color 1.5 + mult_brightness -1 + name Flare15 + xpos -4750 + ypos 5561 + disable {{Pieces_Plus.disable==1?1:pieces.which==2?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 8.33 13.75} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.403333 0.338333} + inner_color 0.29 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + flattening 1 + sharpness 0.86 + mult_num {{3+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{3.05+(parent.ffx_pieces_offset) i}} + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare23 + xpos -4750 + ypos 5587 + disable {{Pieces_Plus.disable==1?1:pieces.which==2?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 8.33 13.75} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.34 0.37} + inner_color 0.29 + chroma_spread 0.07 + brightness 0.13 + vis_mask -rgba.alpha + corners 6 + flattening 1 + sharpness 0.86 + mult_num {{10+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{1.65+(parent.ffx_pieces_offset) i}} + mult_size {{0.72+(parent.ffx_pieces_size) i}} + mult_color -1.95 + mult_brightness -1 + mult_visibility -0.34 + mult_flattening -0.4 + mult_rotate 0.5 + name Flare24 + xpos -4750 + ypos 5613 + disable {{Pieces_Plus.disable==1?1:pieces.which==2?0:1 i}} + } + Saturation { + saturation 0.6 + name Saturation3 + xpos -4750 + ypos 5641 + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.45 + radius {20.94 29.27 34.69} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color {0.338333 0.403333 0.338333} + inner_color 0.32 + brightness 0.105 + vis_mask -rgba.alpha + corners 6 + flattening 0.7 + sharpness 0.86 + mult_num {{2+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{1+(parent.ffx_pieces_offset) i}} + mult_size {{-0.32+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 0.8 + name Flare25 + xpos -4750 + ypos 5667 + disable {{Pieces_Plus.disable==1?1:pieces.which==2?0:1 i}} + } + Blur { + size 4 + name Blur3 + xpos -4750 + ypos 5694 + } + Grade { + white {1 1 2 1} + multiply 4 + name Grade67 + xpos -4750 + ypos 5732 + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 1.9 + radius {37.95 46.28 50.39} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + anamorph 0.7 + ring_color {0.338333 0.403333 0.338333} + inner_color 0.295 + outer_falloff 0.7 + inner_falloff 4.8 + chroma_spread 0.018 + chroma_shift 0.2 + chroma_shift_angle 46 + brightness 0.03 + vis_mask -rgba.alpha + corners 6 + sharpness 0.86 + asym_multiplier 0 + asym_falloff 10 + asym_angle -28 + mult_num {{1+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{-0.3+(parent.ffx_pieces_offset) i}} + mult_size {{0.2+(parent.ffx_pieces_size) i}} + mult_color -0.1 + mult_brightness -1 + mult_flattening -0.68 + mult_rotate 1 + name Flare26 + xpos -4750 + ypos 5758 + disable {{Pieces_Plus.disable==1?1:pieces.which==2?0:1 i}} + } + Merge { + inputs 2 + operation in + mix 0.745 + name Merge25 + xpos -4750 + ypos 5784 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.139442 + radius {34.09 39.3 53.38} + size_mult {{(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + ring_color 0.59 + inner_color 0.76 + brightness 0.5 + flattening 0.7 + sharpness 1 + mult_num {{8+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{2.35++(parent.ffx_pieces_offset) i}} + mult_size {{1+(parent.ffx_pieces_size) i}} + mult_color 0.95 + mult_brightness -0.72 + mult_visibility 0.12 + name Flare27 + xpos -5024 + ypos 5842 + disable {{Pieces_Plus.disable==1?1:pieces.which==1?0:1 i}} + } + Glow { + maskChannelMask none + name Glow6 + xpos -5024 + ypos 5868 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.lens_pieces_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise1 + xpos -5134 + ypos 5905 + } + Merge { + inputs 2 + operation in + name Merge20 + xpos -5024 + ypos 5905 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(parent.ffx_flare_size)-1 i}} + radius {14.8 24.44 28.18} + size_mult {{(parent.ffx_flare_size)-.4+(parent.lens_pieces_size) i}} + anamorph 1.2 + inner_color 1 + corners 6 + flattening 0.573007 + sharpness 0.861716 + mult_num {{12+(parent.ffx_more_pieces) i}} + mult_seed {{(parent.ffx_pieces_seed) i}} + mult_offset {{5+(parent.ffx_flare_size)+(parent.ffx_pieces_offset) i}} + mult_size {{.44+(parent.ffx_pieces_size) i}} + mult_color 1.35 + mult_brightness -0.758621 + mult_visibility -0.701149 + mult_rotate 0.4 + name Flare1 + xpos -5375 + ypos 6012 + disable {{Pieces_Plus.disable==1?1:pieces.which==0?0:1 i}} + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation2 + xpos -5375 + ypos 6038 + } + Glow { + maskChannelMask none + name Glow29 + xpos -5375 + ypos 6064 + } + Blur { + size {{(parent.ffx_flare_size) i}} + name Blur4 + xpos -5265 + ypos 6058 + } + Switch { + inputs 11 + name pieces + xpos -4218 + ypos 6237 + } + Blur { + name Pieces_Blur + label "Pieces Blur" + xpos -1696 + ypos 6225 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Pieces_Color + label "Pieces CC" + xpos -1586 + ypos 6231 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.4 + radius {0 38.8 87.21} + size_mult 16 + anamorph 1.16 + inner_color 0 + outer_falloff 14 + inner_falloff 10 + chroma_spread -0.03 + brightness 0.53 + asym_repeat 2 + asym_multiplier 0 + asym_falloff 1.55 + asym_angle {{(parent.ffx_position.x)-92 i}} + name Flare267 + xpos -567 + ypos 4755 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==8?0:1 i}} + } + Grade { + gamma 0.75 + maskChannelMask none + unpremult -rgba.alpha + name Grade50 + xpos -567 + ypos 4781 + } + Dot { + name Dot16 + xpos -533 + ypos 5106 + } + Noise { + inputs 0 + size {{(parent.ffx_flare_size*20)+80 i}} + lacunarity 1.84 + gain 0.435 + gamma 0.81 + center {320 240} + name Noise10 + xpos -1153 + ypos 4904 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 3.97 32.72} + size_mult {3.6 4.2} + anamorph 10.08 + ring_color {0 1 0.7899999619} + inner_color {0.1000000238 1 0.8109999895} + outer_falloff 1.3 + inner_falloff 1.05 + vis_mask -rgba.alpha + name Flare227 + xpos -863 + ypos 4815 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==7?0:1 i}} + } + Blur { + size 25.5 + name Blur20 + xpos -863 + ypos 4841 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 27.23 44.38} + size_mult {1.3 3.9} + anamorph 23.52 + inner_color 0 + outer_falloff 1.45 + inner_falloff 0.42 + chroma_spread -0.21 + brightness 0.65 + vis_mask -rgba.alpha + name Flare228 + xpos -1009 + ypos 4763 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==7?0:1 i}} + } + Blur { + size {20 5} + name Blur21 + xpos -1009 + ypos 4789 + } + Merge { + inputs 2 + operation plus + name Merge47 + xpos -1009 + ypos 4847 + } + Merge { + inputs 2 + operation stencil + mix 0.9 + name Merge205 + xpos -1009 + ypos 4904 + } + Glow { + brightness 0.5 + maskChannelMask none + name Glow40 + xpos -1009 + ypos 4944 + } + Dot { + name Dot10 + xpos -975 + ypos 5080 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {120.83 130.41 137.17} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1 i}} + ring_color 0.7900000215 + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_shift 0.4 + brightness 0.275 + vis_mask -rgba.alpha + sharpness 0 + asym_multiplier 0 + asym_falloff 10 + asym_angle 144 + name Flare44 + label Source + xpos -1560 + ypos 5018 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {122.25 134.67 140.01} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1 i}} + ring_color 0.7900000215 + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_shift 0.4 + brightness 0.08 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0 + asym_multiplier 0 + asym_falloff 4.6 + asym_angle 144 + name Flare45 + label Source + xpos -1560 + ypos 4957 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {65.44 126.15 141.43} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1 i}} + ring_color 0.7 + inner_color 0 + outer_falloff 3.8 + inner_falloff 7.2 + chroma_shift 0.4 + brightness 0.08 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0 + asym_multiplier 0 + asym_falloff 5 + asym_angle 144 + name Flare46 + label Source + xpos -1450 + ypos 4900 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==6?0:1 i}} + } + Merge { + inputs 2 + operation plus + name Merge90 + xpos -1450 + ypos 4963 + } + Merge { + inputs 2 + operation plus + name Merge92 + xpos -1450 + ypos 5024 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {130.77 141.77 148.53} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1 i}} + ring_color 0.7900000215 + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_shift 0.4 + brightness 0.48 + vis_out 0.99 + vis_mask -rgba.alpha + sharpness 0 + asym_multiplier 0 + asym_falloff 6 + asym_angle -40 + name Flare126 + label Source + xpos -1444 + ypos 4830 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {120.83 130.41 138.59} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1 i}} + ring_color 0.7900000215 + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_shift 0.4 + brightness 0.175 + vis_mask -rgba.alpha + sharpness 0 + asym_multiplier 0 + asym_falloff 10 + asym_angle -40 + name Flare129 + label Source + xpos -1444 + ypos 4732 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {116.57 134.67 149.95} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1 i}} + ring_color 0.7900000215 + inner_color 0 + outer_falloff 3.2 + inner_falloff 5.6 + chroma_shift 0.4 + brightness 0.08 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0 + asym_multiplier 0 + asym_falloff 4.6 + asym_angle -40 + name Flare131 + label Source + xpos -1444 + ypos 4671 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {65.44 126.15 141.43} + size_mult {{(parent.ffx_flare_size)+1.3+(ffx_anomoly_size) i}} + anamorph {{(ffx_anomoly_anamorph)+1 i}} + ring_color 0.7 + inner_color 0 + outer_falloff 3.8 + inner_falloff 7.2 + chroma_shift 0.4 + brightness 0.08 + vis_mask -rgba.alpha + flattening 0.15 + sharpness 0 + asym_multiplier 0 + asym_falloff 5 + asym_angle -36 + name Flare132 + label Source + xpos -1334 + ypos 4617 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==6?0:1 i}} + } + Merge { + inputs 2 + operation plus + name Merge93 + xpos -1334 + ypos 4677 + } + Merge { + inputs 2 + operation plus + name Merge94 + xpos -1334 + ypos 4738 + } + Merge { + inputs 2 + operation plus + name Merge95 + xpos -1334 + ypos 4836 + } + Merge { + inputs 2 + operation plus + name Merge96 + xpos -1334 + ypos 5024 + } + Group { + name Static_Noise1 + help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." + tile_color 0x992620ff + note_font "Bitstream Vera Sans" + xpos -1334 + ypos 5050 + mapsize {0.15 0.15} + addUserKnob {20 master_control l Master} + addUserKnob {7 noise_intensity_global l Intensity R 0 2} + noise_intensity_global 1.5 + addUserKnob {7 rgb_size_multiplier l Size R 0 2} + rgb_size_multiplier 1 + addUserKnob {26 ""} + addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} + no_alpha true + addUserKnob {20 adv_controls l Advanced} + addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} + fractal_noise_size 0 + addUserKnob {14 red_size l r R 0 100} + red_size 1.7 + addUserKnob {14 green_size l g R 0 100} + green_size 1.6 + addUserKnob {14 blue_size l b R 0 100} + blue_size 1.5 + addUserKnob {20 endGroup n -1} + addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} + noise_irregularity 0 + addUserKnob {7 red_i l r} + red_i 1 + addUserKnob {7 green_i l g} + green_i 0.75 + addUserKnob {7 blue_i l b} + blue_i 0.65 + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} + noise_intensity 0 + addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} + red_m 0.2 + addUserKnob {7 green_m l g} + green_m 0.4 + addUserKnob {7 blue_m l b} + blue_m 0.6 + addUserKnob {18 black t "Amount of grain to add everywhere"} + black {0 0 0} + addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {18 minimum t "Minimum black level" R 0 0.01} + minimum {0 0 0} + addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {3 seed l Seed} + seed 134 + addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} + } + Input { + inputs 0 + name Input1 + xpos 0 + } +set N2497f680 [stack 0] + Noise { + output {rgba.red -rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} + octaves 2 + gamma 1 + xrotate {{red_i*45 i}} + yrotate {{red_i*45 i}} + name red + xpos 144 + ypos -7 + } + Noise { + output {-rgba.red rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} + zoffset 10 + octaves 2 + gamma 1 + xrotate {{green_i*45 i}} + yrotate {{green_i*45 i}} + name green + xpos 144 + ypos 35 + } + Noise { + output {-rgba.red -rgba.green rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} + zoffset 20 + octaves 2 + gamma 1 + xrotate {{blue_i*45 i}} + yrotate {{blue_i*45 i}} + name blue + xpos 144 + ypos 77 + } +push $N2497f680 + MergeExpression { + inputs 2 + expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) + expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) + expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) + name MergeExpression1 + xpos 144 + ypos 117 + } +set N24980e90 [stack 0] +push $N24980e90 +push $N2497f680 + Copy { + inputs 2 + channels rgb + maskChannelInput rgba.alpha + name Copy1 + xpos 0 + ypos 105 + disable {{parent.no_alpha i}} + } + Switch { + inputs 2 + which {{parent.no_alpha i}} + name Switch1 + xpos 144 + ypos 171 + } + Output { + name Output1 + xpos 144 + ypos 219 + } + end_group + Constant { + inputs 0 + channels rgb + color 1 + name Constant1 + label "Matte Box Edge" + xpos -1738 + ypos 4748 + } + Crop { + box {{-100 i} {-100 i} {root.width+100 i} {root.height+100 i}} + name Crop3 + xpos -1738 + ypos 4832 + } + Erode { + channels rgba + size 100 + blur 1 + maskChannelMask none + name Erode1 + xpos -1738 + ypos 4858 + } + Clamp { + maskChannelMask none + name Clamp1 + xpos -1738 + ypos 4884 + } + Invert { + maskChannelMask none + name Invert1 + xpos -1738 + ypos 4922 + } + Blur { + size 400 + name Blur12 + xpos -1738 + ypos 4960 + } + Blur { + size 400 + name Blur15 + xpos -1738 + ypos 4998 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise7 + xpos -1849 + ypos 4797 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.85+(ffx_anomolies_offset) i}} + radius {601.92 637.04 800} + size_mult {{(parent.ffx_flare_size)+.6+(ffx_anomoly_size) i}} + anamorph {{1.27+(ffx_anomoly_anamorph) i}} + ring_color 0.38 + inner_color 0 + inner_falloff 1.05 + chroma_spread -0.015 + chroma_shift 0.4 + brightness 0.19 + vis_mask -rgba.alpha + flattening 0.1 + sharpness 1 + mult_offset 8 + mult_size -0.16 + mult_brightness -0.02 + mult_visibility -0.18 + name Flare43 + label Pieces + xpos -1897 + ypos 4739 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.85+(ffx_anomolies_offset) i}} + radius {531.92 577.04 800} + size_mult {{(parent.ffx_flare_size)+.6+(ffx_anomoly_size) i}} + anamorph {{1.29+(ffx_anomoly_anamorph) i}} + ring_color 0.29 + inner_color 0 + inner_falloff 1.05 + chroma_spread -0.015 + chroma_shift 0.4 + brightness 0.19 + vis_mask -rgba.alpha + flattening 0.1 + sharpness 1 + mult_offset 8 + mult_size -0.16 + mult_brightness -0.02 + mult_visibility -0.18 + name Flare42 + label Pieces + xpos -1897 + ypos 4689 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.55+(ffx_anomolies_offset) i}} + radius {541.92 547.04 800} + size_mult {{(parent.ffx_flare_size)+.6+(ffx_anomoly_size) i}} + anamorph {{1.29+(ffx_anomoly_anamorph) i}} + ring_color 0.125 + inner_color 0 + inner_falloff 1.05 + chroma_spread -0.015 + chroma_shift 0.4 + brightness 0.19 + vis_mask -rgba.alpha + flattening 0.1 + sharpness 1 + mult_offset 8 + mult_size -0.16 + mult_brightness -0.02 + mult_visibility -0.18 + name Flare41 + label Pieces + xpos -1897 + ypos 4644 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.55+(ffx_anomolies_offset) i}} + radius {461.92 487.04 800} + size_mult {{(parent.ffx_flare_size)+.6+(ffx_anomoly_size) i}} + anamorph {{1.32+(ffx_anomoly_anamorph) i}} + ring_color 0.19 + inner_color 0 + inner_falloff 1.05 + chroma_spread -0.015 + chroma_shift 0.4 + brightness 0.19 + vis_mask -rgba.alpha + flattening 0.1 + sharpness 1 + mult_offset 8 + mult_size -0.16 + mult_brightness -0.02 + mult_visibility -0.18 + name Flare40 + label Pieces + xpos -1897 + ypos 4605 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{0.85+(ffx_anomolies_offset) i}} + radius {384.65 527.04 800} + size_mult {{(parent.ffx_flare_size)+.6+(ffx_anomoly_size) i}} + anamorph {{1.24+(ffx_anomoly_anamorph) i}} + ring_color 0.08 + inner_color 0 + inner_falloff 1.05 + chroma_spread -0.015 + chroma_shift 0.4 + brightness 0.19 + vis_mask -rgba.alpha + flattening 0.1 + sharpness 1 + mult_offset 8 + mult_size -0.16 + mult_brightness -0.02 + mult_visibility -0.18 + name Flare39 + label Pieces + xpos -2007 + ypos 4573 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==5?0:1 i}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge86 + xpos -2007 + ypos 4611 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge87 + xpos -2007 + ypos 4650 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge88 + xpos -2007 + ypos 4695 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge89 + xpos -2007 + ypos 4745 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation4 + xpos -2007 + ypos 4771 + } + Merge { + inputs 2 + operation in + mix 0.845 + name Merge85 + xpos -2007 + ypos 4797 + } + DirBlurWrapper { + BlurType radial + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurAngle 0 + maskChannelMask none + name DirBlurWrapper8 + xpos -2007 + ypos 4873 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==5?0:1 i}} + } + Grade { + white {1.699708104 1.026119709 0.6997081041 1.649999976} + maskChannelMask none + name Grade2 + xpos -2007 + ypos 4948 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge91 + xpos -2007 + ypos 5004 + } + Transform { + scale 1.15 + center {986 506} + black_outside false + name Transform57 + xpos -2007 + ypos 5030 + } + Noise { + inputs 0 + size {{(parent.ffx_flare_size*20)+80 i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise5 + xpos -2476 + ypos 4982 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {1.42 30.89 63.22} + size_mult {{(parent.ffx_flare_size)+3.8+(ffx_anomoly_size) i}} + anamorph {{1+(ffx_anomoly_anamorph) i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.09 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle 17 + corner_angle_add true + asym_multiplier 0 + asym_falloff 20 + asym_angle 140 + asym_angle_add true + name Flare62 + label Source + xpos -2562 + ypos 4751 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==4?0:1 i}} + } + Blur { + size 18.5 + name Blur48 + xpos -2562 + ypos 4789 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {28.41 39.41 120.03} + size_mult {{(parent.ffx_flare_size)+3.8+(ffx_anomoly_size) i}} + anamorph {{1.35+(ffx_anomoly_anamorph) i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.11 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle 17 + corner_angle_add true + asym_multiplier 0 + asym_falloff 14 + asym_angle 140 + asym_angle_add true + name Flare63 + label Source + xpos -2448 + ypos 4699 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==4?0:1 i}} + } + Blur { + size 18.5 + name Blur58 + xpos -2448 + ypos 4737 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{(ffx_anomolies_offset) i}} + radius {29.83 56.46 162.65} + size_mult {{(parent.ffx_flare_size)+3.8+(ffx_anomoly_size) i}} + anamorph {{.91+(ffx_anomoly_anamorph) i}} + ring_color {0.796096 1.00716 1.196} + inner_color 0 + outer_falloff 5.2 + inner_falloff 5.6 + chroma_spread -0.034 + chroma_shift -5.2 + chroma_shift_angle 58 + chroma_shift_angle_add true + brightness 0.21 + vis_mask -rgba.alpha + corners 4 + flattening 1 + sharpness 1 + corners_angle 17 + corner_angle_add true + asym_multiplier 0 + asym_falloff 14 + asym_angle 140 + asym_angle_add true + name Flare61 + label Source + xpos -2330 + ypos 4656 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==4?0:1 i}} + } + Blur { + size 18.5 + name Blur47 + xpos -2330 + ypos 4694 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge16 + xpos -2330 + ypos 4743 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge18 + xpos -2330 + ypos 4795 + } + Grade { + white 2 + multiply 2.8 + gamma 1.06 + maskChannelMask rgba.red + name Grade11 + xpos -2330 + ypos 4874 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation5 + xpos -2330 + ypos 4900 + } + Merge { + inputs 2 + operation in + mix 0.725 + name Merge22 + xpos -2330 + ypos 4982 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_anomolies_offset) i}} + radius {0 0 22.78} + size_mult {{(parent.ffx_flare_size)+4+(ffx_anomoly_size) i}} + anamorph {{25+(ffx_anomoly_anamorph) i}} + inner_color 0 + outer_falloff 1.15 + inner_falloff 10 + vis_out 1 + name Flare109 + xpos -2681 + ypos 4657 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==3?0:1 i}} + } +set N24ec6b00 [stack 0] + Blur { + size {100.5 10.5} + name Blur93 + xpos -2586 + ypos 4651 + } +push $N24ec6b00 + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge74 + xpos -2681 + ypos 4712 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_anomolies_offset) i}} + radius {1.28 9.62 48.57} + size_mult {{(parent.ffx_flare_size)+(ffx_anomoly_size)+(ffx_anomoly_size) i}} + anamorph {{14.4+(ffx_anomoly_anamorph) i}} + inner_color 1 + brightness 2 + vis_mask -rgba.alpha + name Flare22 + xpos -2919 + ypos 4615 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==2?0:1 i}} + } + Blur { + size 5.2 + name Blur8 + xpos -2919 + ypos 4641 + } +set N24ec78c0 [stack 0] + Blur { + size 22.5 + name Blur22 + xpos -2819 + ypos 4641 + } +push $N24ec78c0 + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge9 + xpos -2919 + ypos 4712 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_anomolies_offset) i}} + radius {0 0 34.14} + size_mult {{(parent.ffx_flare_size)+.3+(ffx_anomoly_size) i}} + anamorph {{15+(ffx_anomoly_anamorph) i}} + inner_color 0 + outer_falloff 1.15 + inner_falloff 1.1 + vis_out 1 + name Flare107 + xpos -3220 + ypos 4668 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==1?0:1 i}} + } + Transform { + translate {0 -6} + center {960 540} + black_outside false + name Transform34 + xpos -3220 + ypos 4694 + } + Blur { + size 3 + name Blur92 + xpos -3220 + ypos 4720 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_anomolies_offset) i}} + radius {0 0 31.3} + size_mult {{(parent.ffx_flare_size)+.3+(ffx_anomoly_size) i}} + anamorph {{15+(ffx_anomoly_anamorph) i}} + inner_color 0 + outer_falloff 0.9 + vis_out 1 + name Flare108 + xpos -3110 + ypos 4643 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==1?0:1 i}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge114 + xpos -3110 + ypos 4726 + } + Blur { + size {10 2} + name Blur25 + xpos -3110 + ypos 4752 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_anomolies_offset) i}} + radius {0 0 34.14} + size_mult {{(parent.ffx_flare_size)+.3+(ffx_anomoly_size) i}} + anamorph {{15+(ffx_anomoly_anamorph) i}} + inner_color 0 + outer_falloff 1.15 + inner_falloff 1.1 + vis_out 1 + name Flare104 + xpos -3490 + ypos 4785 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==0?0:1 i}} + } + Transform { + translate {0 6} + scale {1.2 1} + center {960 540} + black_outside false + name Transform32 + xpos -3490 + ypos 4811 + } + Blur { + size {50 3} + name Blur90 + xpos -3490 + ypos 4837 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_anomolies_offset) i}} + radius {0 0 34.14} + size_mult {{(parent.ffx_flare_size)+.3+(ffx_anomoly_size) i}} + anamorph {{15+(ffx_anomoly_anamorph) i}} + inner_color 0 + outer_falloff 1.15 + inner_falloff 1.1 + vis_out 1 + name Flare105 + xpos -3490 + ypos 4661 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==0?0:1 i}} + } + Transform { + translate {0 -6} + center {960 540} + black_outside false + name Transform33 + xpos -3490 + ypos 4687 + } + Blur { + size 3 + name Blur91 + xpos -3490 + ypos 4713 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset {{.7+(ffx_anomolies_offset) i}} + radius {0 0 31.3} + size_mult {{(parent.ffx_flare_size)+.3+(ffx_anomoly_size) i}} + anamorph {{15+(ffx_anomoly_anamorph) i}} + inner_color 0 + outer_falloff 0.9 + vis_out 1 + name Flare106 + xpos -3380 + ypos 4631 + disable {{Anomolies_Plus.disable==1?1:lens_anomolies.which==0?0:1 i}} + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge112 + xpos -3380 + ypos 4719 + } + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge113 + xpos -3380 + ypos 4843 + } + Blur { + size {10 2} + name Blur28 + xpos -3380 + ypos 4869 + } + Switch { + inputs 9 + name lens_anomolies + selected true + xpos -2857 + ypos 5135 + } + Saturation { + saturation 0 + maskChannelMask none + name Anomolies_Saturation + xpos -708 + ypos 5135 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Anomolies_Color + label "Lens Anomolies CC" + xpos -606 + ypos 5129 + } + Radial { + inputs 0 + maskChannelMask none + area {0 0 {root.width i} {root.height i}} + name Radial2 + xpos -307 + ypos 4148 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 55.87} + size_mult 3.4 + anamorph 1.1 + ring_color 0.3720190227 + inner_color 0.1795123965 + inner_falloff 7.4 + flattening 0.15 + corners_angle -16 + asym_falloff 0.45018 + asym_angle -180 + asym_angle_add true + mult_num 2 + mult_offset 0.3 + mult_size -0.28 + name Flare167 + label "Center Bloom" + xpos -788 + ypos 4009 + disable {{Center_Bloom_Plus.disable==0?0:1 i}} + } + VolumeRays { + name VolumeRays12 + label "Mar 20 2005" + xpos -788 + ypos 4047 + disable {{Center_Bloom_Plus.disable==0?0:1 i}} + vol_pos {{parent.ffx_position.x i} {parent.ffx_position.y i}} + quality Low + chk_flicker false + xform_flicker true + volume_end_color {0 0 0 0} + radial_size 400 + } + Blur { + size 5 + name Blur106 + xpos -788 + ypos 4085 + } + Blur { + size 30 + name Blur107 + xpos -788 + ypos 4142 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Bloom_Grade + xpos -612 + ypos 4148 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {19.16 186.02 495.46} + size_mult 2.4 + inner_color 0 + outer_falloff 0.6 + inner_falloff 7.4 + asym_repeat 2 + asym_multiplier 0 + asym_falloff 5 + asym_angle {{((parent.ffx_position.x/30)-24)+parent.core_shape_rotation i}} + name Flare230 + xpos -1045 + ypos 2404 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Shuffle { + green red + blue red + alpha red + name Shuffle24 + xpos -1045 + ypos 2430 + } +set N2547c570 [stack 0] +push $N2547c570 + Copy { + inputs 2 + from0 rgba.alpha + to0 rgba.alpha + maskChannelMask none + name Copy2 + xpos -1045 + ypos 2458 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {71.91 172.77 231.62} + size_mult 2.4 + ring_color {0 0 1} + inner_color 0 + outer_falloff 2.1 + inner_falloff 6.4 + asym_falloff 10 + asym_angle -24 + name Flare234 + xpos -1045 + ypos 2367 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {104.58 205.44 269.97} + size_mult 2.4 + ring_color {1 0 0} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.4 + asym_falloff 10 + asym_angle -24 + name Flare239 + xpos -1045 + ypos 2324 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {131.57 235.27 275.65} + size_mult 2.4 + ring_color {1 1 0} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.4 + asym_falloff 10 + asym_angle -24 + name Flare240 + xpos -1045 + ypos 2272 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {152.88 258 309.74} + size_mult 2.4 + ring_color {0 1 0} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.4 + asym_falloff 10 + asym_angle -24 + name Flare241 + xpos -1045 + ypos 2219 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {155.72 287.83 332.47} + size_mult 2.4 + ring_color {0 1 1} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.4 + asym_falloff 10 + asym_angle -24 + name Flare242 + xpos -1045 + ypos 2166 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {188.39 317.66 457.47} + size_mult 2.4 + ring_color {0 0 1} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.4 + asym_falloff 10 + asym_angle -24 + name Flare243 + xpos -1045 + ypos 2120 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {79.93 364.53 468.84} + size_mult 2.4 + ring_color {1 0 0} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.4 + asym_falloff 10 + asym_angle -24 + name Flare244 + xpos -1045 + ypos 2068 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {274.71 413.95 457.21} + size_mult 2.4 + ring_color {1 1 0} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.2 + asym_falloff 10 + asym_angle -22 + name Flare245 + xpos -1045 + ypos 2013 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {307.38 435.26 494.04} + size_mult 2.4 + ring_color {0.003999948502 1 0} + inner_color 0 + outer_falloff 1.45 + inner_falloff 6.2 + asym_falloff 10 + asym_angle -22 + name Flare246 + xpos -935 + ypos 1959 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge211 + xpos -935 + ypos 2013 + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge212 + xpos -935 + ypos 2068 + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge213 + xpos -935 + ypos 2120 + } + Merge2 { + inputs 2 + maskChannelMask none + mix 0.76 + name Merge214 + xpos -935 + ypos 2166 + } + Merge2 { + inputs 2 + maskChannelMask none + mix 0.68 + name Merge215 + xpos -935 + ypos 2219 + } + Merge2 { + inputs 2 + maskChannelMask none + mix 0.73 + name Merge216 + xpos -935 + ypos 2272 + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge217 + xpos -935 + ypos 2324 + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge218 + xpos -935 + ypos 2367 + } + Blur { + size 97 + name Blur115 + xpos -935 + ypos 2393 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge219 + xpos -935 + ypos 2464 + } + Grade { + multiply 0.48 + gamma 0.59 + maskChannelMask none + unpremult -rgba.alpha + name Grade47 + xpos -935 + ypos 2503 + } +set N25480da0 [stack 0] +push $N25480da0 + Sparkles { + inputs 0 + mode Sparkles + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1300 + anamorphic 1.1 + rotation {{(parent.ffx_position.x/30)+100 i}} + ray_nb 400 + ray_thick 3 + spark_falloff 0 + ray_falloff 10 + seed 95 + chroma_shift 1.06 + chroma_spread 0.16 + name Sparkles34 + xpos -725 + ypos 2371 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Sparkles { + mode Sparkles + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1800 + anamorphic 1.1 + rotation {{(parent.ffx_position.x/30)+100 i}} + ray_nb 600 + ray_thick 3 + spark_falloff 0.016 + ray_falloff 10 + seed 65 + chroma_shift 1.06 + chroma_spread 0.295 + name Sparkles35 + xpos -725 + ypos 2397 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Merge2 { + inputs 2 + operation mask + Achannels {rgba.red rgba.green rgba.blue rgba.red} + maskChannelMask none + name Merge241 + xpos -725 + ypos 2441 + } + Merge2 { + inputs 2 + operation geometric + maskChannelMask none + mix 0.5 + name Merge242 + xpos -725 + ypos 2467 + } + Grade { + multiply 2.65 + maskChannelMask none + name Grade48 + xpos -725 + ypos 2505 + } + DirBlurWrapper { + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 90 + BlurAngle 70 + maskChannelMask none + name DirBlurWrapper16 + xpos -725 + ypos 2531 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==6?0:1 i}} + } + Glow { + tolerance 0.06 + brightness 2.6 + maskChannelMask none + name Glow26 + xpos -725 + ypos 2567 + } +push $N25480da0 + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge243 + xpos -935 + ypos 2567 + } + Glow { + tolerance 0.055 + brightness 1.44 + size 100 + maskChannelMask none + name Glow30 + xpos -935 + ypos 2612 + } + Saturation { + saturation 0.7 + maskChannelMask none + name Saturation13 + xpos -935 + ypos 2671 + } + Dot { + name Dot18 + xpos -901 + ypos 2771 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 3.9 20.82} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + anamorph 0.1 + ring_color {1.16889 1 0.831105} + inner_color 1.16889 + chroma_spread 0.075 + chroma_shift -5.2 + corners 0 + flattening 0.699989 + sharpness 0.899097 + name Flare36 + xpos -2815 + ypos 1942 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==3?0:1 i}} + } + Transform { + translate {-8 -17} + center {986 506} + name Transform4 + xpos -2815 + ypos 2026 + } +set N25484130 [stack 0] + Transform { + translate {13 -50} + center {986 506} + name Transform5 + xpos -2917 + ypos 2026 + } +set N254844a0 [stack 0] + Transform { + translate {19 -22} + center {986 506} + name Transform14 + xpos -3016 + ypos 2026 + } +set N25484810 [stack 0] + Transform { + translate {-7 47} + center {986 506} + name Transform15 + xpos -3107 + ypos 2026 + } +set N25484b80 [stack 0] + Transform { + translate {-39 37} + center {986 506} + name Transform16 + xpos -3187 + ypos 2026 + } +set N25484ef0 [stack 0] + Transform { + translate {18 18} + center {986 506} + name Transform17 + xpos -3297 + ypos 2026 + } +push $N25484ef0 +push $N25484b80 +push $N25484810 +push $N254844a0 +push $N25484130 + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge37 + xpos -2815 + ypos 2079 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge51 + xpos -2815 + ypos 2120 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge60 + xpos -2815 + ypos 2158 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge61 + xpos -2815 + ypos 2193 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge62 + xpos -2815 + ypos 2238 + } + DirBlurWrapper { + BlurType linear + BlurCenter {1528 780} + BlurLength 80 + BlurAngle 0 + maskChannelMask none + name DirBlurWrapper2 + xpos -2815 + ypos 2264 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==3?0:1 i}} + } + Dot { + name Dot4 + xpos -2781 + ypos 2337 + } +set N25486a70 [stack 0] + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 3.9 26.5} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + anamorph 7 + ring_color {1.16889 1 0.831105} + inner_color 1.16889 + chroma_spread 0.04 + chroma_shift -2.6 + corners 0 + flattening 0.699989 + sharpness 0.899097 + name Flare37 + xpos -1416 + ypos 1962 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==5?0:1 i}} + } + Transform { + translate {-14 3} + center {986 506} + name Transform18 + xpos -1416 + ypos 2032 + } +set N25487150 [stack 0] + Transform { + translate {55 -10} + center {986 506} + name Transform19 + xpos -1526 + ypos 2032 + } +set N254874c0 [stack 0] + Transform { + translate {-74 19} + center {986 506} + name Transform20 + xpos -1616 + ypos 2032 + } +set N25487830 [stack 0] + Transform { + translate {97 8} + center {986 506} + name Transform21 + xpos -1708 + ypos 2032 + } +set N25487ba0 [stack 0] + Transform { + translate {-119 -33} + center {986 506} + name Transform22 + xpos -1788 + ypos 2032 + } +set N259a6880 [stack 0] + Transform { + translate {28 12} + center {986 506} + name Transform23 + xpos -1898 + ypos 2032 + } +push $N259a6880 +push $N25487ba0 +push $N25487830 +push $N254874c0 +push $N25487150 + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge63 + xpos -1416 + ypos 2085 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge64 + xpos -1416 + ypos 2126 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge70 + xpos -1416 + ypos 2164 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge71 + xpos -1416 + ypos 2190 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge72 + xpos -1416 + ypos 2244 + } + DirBlurWrapper { + BlurType linear + BlurCenter {1528 780} + BlurLength 80 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper3 + xpos -1416 + ypos 2270 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==5?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge73 + xpos -1416 + ypos 2333 + } + Glow { + brightness 2 + maskChannelMask none + name Glow39 + xpos -1416 + ypos 2412 + } + Dot { + name Dot7 + xpos -1382 + ypos 2561 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 3.9 25.08} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + anamorph 15 + ring_color {1.16889 1 0.831105} + inner_color 1.16889 + chroma_spread 0.04 + chroma_shift -2.6 + corners 0 + flattening 0.699989 + sharpness 0.899097 + name Flare38 + xpos -2149 + ypos 1979 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==4?0:1 i}} + } + Transform { + translate {-14 3} + center {986 506} + name Transform24 + xpos -2149 + ypos 2047 + } +set N259a91c0 [stack 0] + Transform { + translate {55 -10} + center {986 506} + name Transform25 + xpos -2259 + ypos 2047 + } +set N259a9530 [stack 0] + Transform { + translate {-74 19} + center {986 506} + name Transform26 + xpos -2349 + ypos 2047 + } +set N259a98a0 [stack 0] + Transform { + translate {97 8} + center {986 506} + name Transform27 + xpos -2441 + ypos 2047 + } +set N259a9c10 [stack 0] + Transform { + translate {-119 -33} + center {986 506} + name Transform28 + xpos -2521 + ypos 2047 + } +set N259a9f80 [stack 0] + Transform { + translate {28 12} + center {986 506} + name Transform29 + xpos -2631 + ypos 2047 + } +push $N259a9f80 +push $N259a9c10 +push $N259a98a0 +push $N259a9530 +push $N259a91c0 + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge77 + xpos -2149 + ypos 2100 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge78 + xpos -2149 + ypos 2141 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge79 + xpos -2149 + ypos 2179 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge82 + xpos -2149 + ypos 2205 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge83 + xpos -2149 + ypos 2259 + } + DirBlurWrapper { + BlurType linear + BlurCenter {1528 780} + BlurLength 80 + BlurAngle 90 + maskChannelMask none + name DirBlurWrapper7 + xpos -2149 + ypos 2285 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==4?0:1 i}} + } + Glow { + brightness 2 + maskChannelMask none + name Glow38 + xpos -2149 + ypos 2395 + } + Dot { + name Dot5 + xpos -2115 + ypos 2543 + } +push $N25486a70 + Glow { + brightness 2 + maskChannelMask none + name Glow37 + xpos -2815 + ypos 2389 + } + Dot { + name Dot3 + xpos -2781 + ypos 2498 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {119.3 147.71 176.18} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + asym_angle 180 + name Flare47 + xpos -3346 + ypos 2387 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {122.15 150.56 179.03} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + name Flare48 + xpos -3236 + ypos 2361 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge10 + xpos -3236 + ypos 2387 + } + Shuffle { + green red + blue red + alpha red + name Shuffle1 + xpos -3236 + ypos 2430 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {132.1 139.18 171.91} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 5.2 + inner_falloff 0.9 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare49 + xpos -3236 + ypos 2296 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {133.51 153.38 183.27} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 2.7 + inner_falloff 0.76 + chroma_spread 0.012 + chroma_shift -3.2 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare52 + xpos -3126 + ypos 2242 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge11 + xpos -3126 + ypos 2296 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge12 + xpos -3126 + ypos 2430 + } + Dot { + name Dot1 + xpos -3092 + ypos 2488 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {65.33 93.74 122.21} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + asym_angle 180 + name Flare114 + xpos -3711 + ypos 2366 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {65.33 93.74 122.21} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + name Flare115 + xpos -3601 + ypos 2340 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge118 + xpos -3601 + ypos 2366 + } + Shuffle { + green red + blue red + alpha red + name Shuffle9 + xpos -3601 + ypos 2409 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {103.69 110.77 126.45} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 5.2 + inner_falloff 0.9 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare116 + xpos -3601 + ypos 2275 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {106.52 126.39 134.97} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 2.7 + inner_falloff 0.76 + chroma_spread 0.012 + chroma_shift -3.2 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare117 + xpos -3491 + ypos 2225 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==2?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge119 + xpos -3491 + ypos 2275 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge120 + xpos -3491 + ypos 2409 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge13 + xpos -3491 + ypos 2484 + } + Radial { + inputs 0 + maskChannelMask none + area {0 0 {root.width} {root.height}} + name Radial1 + xpos -4466 + ypos 2400 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {170.91 284.65 345.84} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread -0.004 + chroma_shift -0.6 + brightness {1 1 1} + asym_multiplier 0 + asym_falloff 10 + asym_angle 150 + mult_offset 0 + name Flare97 + xpos -4128 + ypos 2160 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {308.69 337.21 473.01} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread 0.012 + chroma_shift 0.6 + asym_multiplier 0 + asym_falloff {{Flare100.asym_falloff i}} + asym_angle 150 + mult_offset 0 + name Flare98 + xpos -4018 + ypos 2134 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge103 + xpos -4018 + ypos 2160 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {312.96 324.43 465.17} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread 0.012 + chroma_shift -4.4 + brightness {1 1 1} + asym_multiplier 0 + asym_falloff 10 + asym_angle -30 + mult_offset 0 + name Flare99 + xpos -3999 + ypos 2042 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {293.07 323.01 335.91} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread 0.012 + chroma_shift -4.4 + brightness {1 1 1} + asym_multiplier 0 + asym_falloff 4 + asym_angle -30 + mult_offset 0 + name Flare100 + xpos -3889 + ypos 1992 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge104 + xpos -3889 + ypos 2042 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge105 + xpos -3889 + ypos 2160 + } + Glow { + tolerance 0.51 + size 35 + maskChannelMask none + name Glow1 + xpos -3889 + ypos 2253 + } + Group { + name Static_Noise3 + help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." + tile_color 0x992620ff + note_font "Bitstream Vera Sans" + xpos -3889 + ypos 2279 + mapsize {0.15 0.15} + addUserKnob {20 master_control l Master} + addUserKnob {7 noise_intensity_global l Intensity R 0 2} + noise_intensity_global 1 + addUserKnob {7 rgb_size_multiplier l Size R 0 2} + rgb_size_multiplier 1 + addUserKnob {26 ""} + addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} + no_alpha true + addUserKnob {20 adv_controls l Advanced} + addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} + fractal_noise_size 0 + addUserKnob {14 red_size l r R 0 100} + red_size 1.7 + addUserKnob {14 green_size l g R 0 100} + green_size 1.6 + addUserKnob {14 blue_size l b R 0 100} + blue_size 1.5 + addUserKnob {20 endGroup n -1} + addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} + noise_irregularity 0 + addUserKnob {7 red_i l r} + red_i 1 + addUserKnob {7 green_i l g} + green_i 0.75 + addUserKnob {7 blue_i l b} + blue_i 0.65 + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} + noise_intensity 0 + addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} + red_m 0.2 + addUserKnob {7 green_m l g} + green_m 0.4 + addUserKnob {7 blue_m l b} + blue_m 0.6 + addUserKnob {18 black t "Amount of grain to add everywhere"} + black {0 0 0} + addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {18 minimum t "Minimum black level" R 0 0.01} + minimum {0 0 0} + addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {3 seed l Seed} + seed 134 + addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} + } + Input { + inputs 0 + name Input1 + xpos 0 + } +set N259b2590 [stack 0] + Noise { + output {rgba.red -rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} + octaves 2 + gamma 1 + xrotate {{red_i*45 i}} + yrotate {{red_i*45 i}} + name red + xpos 144 + ypos -7 + } + Noise { + output {-rgba.red rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} + zoffset 10 + octaves 2 + gamma 1 + xrotate {{green_i*45 i}} + yrotate {{green_i*45 i}} + name green + xpos 144 + ypos 35 + } + Noise { + output {-rgba.red -rgba.green rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} + zoffset 20 + octaves 2 + gamma 1 + xrotate {{blue_i*45 i}} + yrotate {{blue_i*45 i}} + name blue + xpos 144 + ypos 77 + } +push $N259b2590 + MergeExpression { + inputs 2 + expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) + expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) + expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) + name MergeExpression1 + xpos 144 + ypos 117 + } +set N259b3da0 [stack 0] +push $N259b3da0 +push $N259b2590 + Copy { + inputs 2 + channels rgb + maskChannelInput rgba.alpha + name Copy1 + xpos 0 + ypos 105 + disable {{parent.no_alpha i}} + } + Switch { + inputs 2 + which {{parent.no_alpha i}} + name Switch1 + xpos 144 + ypos 171 + } + Output { + name Output1 + xpos 144 + ypos 219 + } + end_group + Transform { + rotate -45 + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Transform55 + xpos -4017 + ypos 2279 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {119.3 147.71 176.18} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + asym_angle 142 + name Flare136 + xpos -4480 + ypos 2118 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {122.15 150.56 179.03} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + asym_angle -28 + name Flare137 + xpos -4370 + ypos 2092 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge98 + xpos -4370 + ypos 2118 + } + Shuffle { + green red + blue red + alpha red + name Shuffle7 + xpos -4370 + ypos 2161 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {132.1 139.18 171.91} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 5.2 + inner_falloff 0.9 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare145 + xpos -4370 + ypos 2027 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {133.51 153.38 183.27} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 2.7 + inner_falloff 0.76 + chroma_spread 0.012 + chroma_shift -3.2 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare157 + xpos -4260 + ypos 1976 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge99 + xpos -4260 + ypos 2027 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge101 + xpos -4260 + ypos 2187 + } + Dot { + name Dot8 + xpos -4226 + ypos 2219 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {73.85 124.98 170.5} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + asym_angle -150 + name Flare174 + xpos -4800 + ypos 2097 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {44.02 140.56 264.21} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 0.86 + inner_falloff 3.8 + chroma_shift_angle 42 + vis_out 1 + corners 4 + asym_multiplier 0 + asym_falloff 10 + asym_angle 30 + name Flare175 + xpos -4690 + ypos 2056 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge106 + xpos -4690 + ypos 2097 + } + Shuffle { + green red + blue red + alpha red + name Shuffle8 + xpos -4690 + ypos 2140 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {103.69 110.77 126.45} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 5.2 + inner_falloff 0.9 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare176 + xpos -4690 + ypos 2006 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {106.52 126.39 134.97} + size_mult {{(parent.ffx_flare_size)+2.5+(parent.core_shape_size) i}} + inner_color 0 + outer_falloff 2.7 + inner_falloff 0.76 + chroma_spread 0.012 + chroma_shift -3.2 + chroma_shift_angle 42 + vis_out 1 + corners 3 + name Flare177 + xpos -4580 + ypos 1960 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==1?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge107 + xpos -4580 + ypos 2006 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge111 + xpos -4580 + ypos 2166 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge115 + xpos -4580 + ypos 2215 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge108 + xpos -4580 + ypos 2279 + } + Grade { + multiply 0.4 + maskChannelMask none + name Grade3 + xpos -4580 + ypos 2305 + } + Group { + name Static_Noise4 + help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." + tile_color 0x992620ff + note_font "Bitstream Vera Sans" + xpos -4580 + ypos 2331 + mapsize {0.15 0.15} + addUserKnob {20 master_control l Master} + addUserKnob {7 noise_intensity_global l Intensity R 0 2} + noise_intensity_global 1 + addUserKnob {7 rgb_size_multiplier l Size R 0 2} + rgb_size_multiplier 1 + addUserKnob {26 ""} + addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} + no_alpha true + addUserKnob {20 adv_controls l Advanced} + addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} + fractal_noise_size 0 + addUserKnob {14 red_size l r R 0 100} + red_size 1.7 + addUserKnob {14 green_size l g R 0 100} + green_size 1.6 + addUserKnob {14 blue_size l b R 0 100} + blue_size 1.5 + addUserKnob {20 endGroup n -1} + addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} + noise_irregularity 0 + addUserKnob {7 red_i l r} + red_i 1 + addUserKnob {7 green_i l g} + green_i 0.75 + addUserKnob {7 blue_i l b} + blue_i 0.65 + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} + noise_intensity 0 + addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} + red_m 0.2 + addUserKnob {7 green_m l g} + green_m 0.4 + addUserKnob {7 blue_m l b} + blue_m 0.6 + addUserKnob {18 black t "Amount of grain to add everywhere"} + black {0 0 0} + addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {18 minimum t "Minimum black level" R 0 0.01} + minimum {0 0 0} + addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {3 seed l Seed} + seed 134 + addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} + } + Input { + inputs 0 + name Input1 + xpos 0 + } +set N25fa32c0 [stack 0] + Noise { + output {rgba.red -rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} + octaves 2 + gamma 1 + xrotate {{red_i*45 i}} + yrotate {{red_i*45 i}} + name red + xpos 144 + ypos -7 + } + Noise { + output {-rgba.red rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} + zoffset 10 + octaves 2 + gamma 1 + xrotate {{green_i*45 i}} + yrotate {{green_i*45 i}} + name green + xpos 144 + ypos 35 + } + Noise { + output {-rgba.red -rgba.green rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} + zoffset 20 + octaves 2 + gamma 1 + xrotate {{blue_i*45 i}} + yrotate {{blue_i*45 i}} + name blue + xpos 144 + ypos 77 + } +push $N25fa32c0 + MergeExpression { + inputs 2 + expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) + expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) + expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) + name MergeExpression1 + xpos 144 + ypos 117 + } +set N25fa4ad0 [stack 0] +push $N25fa4ad0 +push $N25fa32c0 + Copy { + inputs 2 + channels rgb + maskChannelInput rgba.alpha + name Copy1 + xpos 0 + ypos 105 + disable {{parent.no_alpha i}} + } + Switch { + inputs 2 + which {{parent.no_alpha i}} + name Switch1 + xpos 144 + ypos 171 + } + Output { + name Output1 + xpos 144 + ypos 219 + } + end_group + Saturation { + saturation 0 + maskChannelMask none + name Saturation8 + xpos -4580 + ypos 2357 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + name Merge109 + xpos -4580 + ypos 2400 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {260.4 271.87 287.61} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread -0.004 + chroma_shift -0.6 + brightness {1 1 1} + asym_multiplier 0 + asym_falloff 10 + asym_angle 150 + mult_offset 0 + name Flare93 + xpos -5201 + ypos 2176 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==0?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {241.93 271.87 284.77} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread 0.012 + chroma_shift 0.6 + asym_multiplier 0 + asym_falloff {{Flare96.asym_falloff i}} + asym_angle 150 + mult_offset 0 + name Flare94 + xpos -5091 + ypos 2150 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==0?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge97 + xpos -5091 + ypos 2176 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {260.4 271.87 287.61} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread 0.012 + chroma_shift -4.4 + brightness {1 1 1} + asym_multiplier 0 + asym_falloff 10 + asym_angle -30 + mult_offset 0 + name Flare95 + xpos -5072 + ypos 2058 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==0?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {241.93 271.87 284.77} + size_mult {{(parent.ffx_flare_size)+(parent.core_shape_size) i}} + ring_color 0.55 + inner_color 0 + outer_falloff 1.65 + inner_falloff 1.35 + chroma_spread 0.012 + chroma_shift -4.4 + brightness {1 1 1} + asym_multiplier 0 + asym_falloff 4 + asym_angle -30 + mult_offset 0 + name Flare96 + xpos -4962 + ypos 2008 + disable {{Core_Shape_Plus.disable==1?1:core_shapes.which==0?0:1 i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge100 + xpos -4962 + ypos 2058 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge102 + xpos -4962 + ypos 2176 + } + Glow { + tolerance 0.51 + size 35 + maskChannelMask none + name Glow20 + xpos -4962 + ypos 2269 + } + Group { + name Static_Noise2 + help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." + tile_color 0x992620ff + note_font "Bitstream Vera Sans" + xpos -4962 + ypos 2295 + mapsize {0.15 0.15} + addUserKnob {20 master_control l Master} + addUserKnob {7 noise_intensity_global l Intensity R 0 2} + noise_intensity_global 1 + addUserKnob {7 rgb_size_multiplier l Size R 0 2} + rgb_size_multiplier 1 + addUserKnob {26 ""} + addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} + no_alpha true + addUserKnob {20 adv_controls l Advanced} + addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} + fractal_noise_size 0 + addUserKnob {14 red_size l r R 0 100} + red_size 1.7 + addUserKnob {14 green_size l g R 0 100} + green_size 1.6 + addUserKnob {14 blue_size l b R 0 100} + blue_size 1.5 + addUserKnob {20 endGroup n -1} + addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} + noise_irregularity 0 + addUserKnob {7 red_i l r} + red_i 1 + addUserKnob {7 green_i l g} + green_i 0.75 + addUserKnob {7 blue_i l b} + blue_i 0.65 + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} + noise_intensity 0 + addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} + red_m 0.2 + addUserKnob {7 green_m l g} + green_m 0.4 + addUserKnob {7 blue_m l b} + blue_m 0.6 + addUserKnob {18 black t "Amount of grain to add everywhere"} + black {0 0 0} + addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {18 minimum t "Minimum black level" R 0 0.01} + minimum {0 0 0} + addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {3 seed l Seed} + seed 134 + addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} + } + Input { + inputs 0 + name Input1 + xpos 0 + } +set N25fa7780 [stack 0] + Noise { + output {rgba.red -rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} + octaves 2 + gamma 1 + xrotate {{red_i*45 i}} + yrotate {{red_i*45 i}} + name red + xpos 144 + ypos -7 + } + Noise { + output {-rgba.red rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} + zoffset 10 + octaves 2 + gamma 1 + xrotate {{green_i*45 i}} + yrotate {{green_i*45 i}} + name green + xpos 144 + ypos 35 + } + Noise { + output {-rgba.red -rgba.green rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} + zoffset 20 + octaves 2 + gamma 1 + xrotate {{blue_i*45 i}} + yrotate {{blue_i*45 i}} + name blue + xpos 144 + ypos 77 + } +push $N25fa7780 + MergeExpression { + inputs 2 + expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) + expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) + expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) + name MergeExpression1 + xpos 144 + ypos 117 + } +set N25fa8f90 [stack 0] +push $N25fa8f90 +push $N25fa7780 + Copy { + inputs 2 + channels rgb + maskChannelInput rgba.alpha + name Copy1 + xpos 0 + ypos 105 + disable {{parent.no_alpha i}} + } + Switch { + inputs 2 + which {{parent.no_alpha i}} + name Switch1 + xpos 144 + ypos 171 + } + Output { + name Output1 + xpos 144 + ypos 219 + } + end_group + Switch { + inputs 7 + name core_shapes + xpos -4670 + ypos 3414 + } + Blur { + name Core_Shapes_Blur + xpos -730 + ypos 3408 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Core_Shapes_Color + label "Core Shapes CC" + xpos -620 + ypos 3408 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {161.33 236.9 283.11} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_corona_size) i}} + anamorph 1.39 + ring_color 0.41 + inner_color 0.23 + brightness 0.33 + corners 4 + flattening 0.9 + sharpness 0.59 + corners_angle 45 + name Flare318 + xpos -1234 + ypos 1253 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {120.64 135.17 181.38} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_corona_size) i}} + anamorph 1.27 + ring_color 0.37 + inner_color 0.125 + brightness 0.61 + corners 4 + flattening 0.9 + sharpness 0.59 + corners_angle 45 + name Flare208 + xpos -1225 + ypos 1167 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {78.49 94.47 105.8} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_corona_size) i}} + anamorph 1.4 + ring_color 0.37 + inner_color 0.19 + corners 4 + flattening 0.9 + sharpness 0.59 + corners_angle 45 + name Flare320 + xpos -1225 + ypos 1080 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {36.35 50.88 63.66} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_corona_size) i}} + anamorph 1.34 + ring_color 0.37 + inner_color 0.24 + brightness 2 + corners 4 + flattening 0.9 + sharpness 0.59 + corners_angle 45 + name Flare319 + xpos -1115 + ypos 1016 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==5?0:1 i}} + } + Merge2 { + inputs 2 + operation screen + mix 0.615 + name Merge257 + xpos -1115 + ypos 1080 + } + Merge2 { + inputs 2 + operation screen + mix 0.215 + name Merge264 + xpos -1115 + ypos 1167 + } + Merge2 { + inputs 2 + operation screen + mix 0.165 + name Merge265 + xpos -1115 + ypos 1253 + } + Blur { + size 38.5 + name Blur148 + xpos -1115 + ypos 1300 + } + Sharpen { + maximum 100 + amount 100 + maskChannelMask none + name Sharpen4 + xpos -1115 + ypos 1394 + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.core_corona_size) i}} + lacunarity 3.55 + gain 0.69 + gamma 0.73 + center {320 240} + name Noise17 + xpos -987 + ypos 1429 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==5?0:1 i}} + } + Blur { + size {{(parent.ffx_flare_size)+26 i}} + name Blur154 + xpos -987 + ypos 1455 + } + Merge { + inputs 2 + operation in + name Merge277 + xpos -1115 + ypos 1461 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 6.7 500} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_corona_size) i}} + anamorph 1.15 + ring_color {0.73 0.57 0.79} + inner_color {0.768889 0.478889 0.702222} + outer_falloff {{(parent.ffx_flare_size)+2 i}} + inner_falloff 0.22 + chroma_spread -0.006 + brightness 0.2 + vis_mask -rgba.alpha + name Flare78 + label "Outer Corona" + xpos -1467 + ypos 1362 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==4?0:1 i}} + } + Noise { + inputs 0 + size {{100*(parent.ffx_flare_size)+(parent.core_corona_size) i}} + lacunarity 1.84 + gain 0.425 + center {320 240} + name Noise8 + xpos -1577 + ypos 1388 + } + Blur { + size {{(parent.ffx_flare_size)+26 i}} + name Blur112 + xpos -1577 + ypos 1414 + } + Merge { + inputs 2 + operation in + name Merge32 + xpos -1467 + ypos 1420 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {34.09 51.33 72.52} + size_mult {{(parent.ffx_flare_size)+2.4+(parent.core_corona_size) i}} + anamorph 1.1 + ring_color 0.33 + inner_color 0.31 + inner_falloff 7.4 + brightness 0.39 + flattening 0.15 + corners_angle -16 + asym_falloff 0.45018 + asym_angle -180 + asym_angle_add true + mult_num 2 + mult_offset 0.3 + mult_size -0.28 + name Flare92 + xpos -1648 + ypos 1233 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==3?0:1 i}} + } + VolumeRays { + name VolumeRays7 + label "Mar 20 2005" + xpos -1648 + ypos 1259 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==3?0:1 i}} + vol_pos {{parent.ffx_position.x i} {parent.ffx_position.y i}} + pre_blur 27.5 + flicker_size 150 + xform_flicker true + volume_end_color {0 0 0 0} + radial_size 400 + } + Blur { + size 15 + name Blur89 + xpos -1648 + ypos 1297 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 11.36 251.92} + size_mult {{(parent.ffx_flare_size)+1.6+(parent.core_corona_size) i}} + anamorph 1.01 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.6 + inner_falloff 0.1 + brightness 0.06 + vis_out 1 + name Flare84 + xpos -1910 + ypos 1344 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==2?0:1 i}} + } + Blur { + size 50 + name Blur81 + xpos -1910 + ypos 1370 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 35.51 169.53} + size_mult {{(parent.ffx_flare_size)+1.6+(parent.core_corona_size) i}} + anamorph 1.01 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.6 + inner_falloff 0.1 + brightness 0.08 + vis_out 1.01 + name Flare85 + xpos -1910 + ypos 1254 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==2?0:1 i}} + } + Blur { + size 50 + name Blur82 + xpos -1910 + ypos 1280 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 112.72} + size_mult {{(parent.ffx_flare_size)+1.6+(parent.core_corona_size) i}} + anamorph 1.01 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.28 + inner_falloff 0.1 + brightness 0.05 + name Flare86 + xpos -1910 + ypos 1176 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==2?0:1 i}} + } + Blur { + size 50 + name Blur83 + xpos -1910 + ypos 1202 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 75.79} + size_mult {{(parent.ffx_flare_size)+1.6+(parent.core_corona_size) i}} + anamorph 1.03 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.1 + inner_falloff 0.1 + brightness 0.09 + name Flare87 + xpos -1910 + ypos 1099 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==2?0:1 i}} + } + Blur { + size 50 + name Blur84 + xpos -1910 + ypos 1125 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 97.09} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_corona_size) i}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + brightness 2 + name Flare88 + xpos -1800 + ypos 1023 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==2?0:1 i}} + } + Blur { + size 50 + name Blur85 + xpos -1800 + ypos 1049 + } + Merge2 { + inputs 2 + operation screen + name Merge52 + xpos -1800 + ypos 1131 + } + Merge2 { + inputs 2 + operation screen + name Merge53 + xpos -1800 + ypos 1208 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge57 + xpos -1800 + ypos 1286 + } + Merge2 { + inputs 2 + operation screen + mix 0.8 + name Merge58 + xpos -1800 + ypos 1376 + } + Sharpen { + maximum 100 + amount 100 + maskChannelMask none + name Sharpen2 + xpos -1800 + ypos 1402 + } + Grade { + multiply 2 + maskChannelMask none + name Grade74 + xpos -1800 + ypos 1440 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 128.34} + size_mult {{(parent.ffx_flare_size)+1+(parent.core_corona_size) i}} + ring_color 0.4 + inner_color 0 + brightness 0.5 + name Flare90 + xpos -2270 + ypos 1236 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==1?0:1 i}} + } + Blur { + size 50 + name Blur87 + xpos -2270 + ypos 1262 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 48.34} + size_mult {{(parent.ffx_flare_size)+2+(parent.core_corona_size) i}} + ring_color 0.379197 + inner_color 0 + brightness 0.5 + name Flare91 + xpos -2167 + ypos 1173 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==1?0:1 i}} + } + Blur { + size 20 + name Blur88 + xpos -2167 + ypos 1199 + } + Glow { + tint {1 0.217637 0.0879641} + tolerance 0.0150376 + name Glow18 + xpos -2167 + ypos 1242 + } + Merge2 { + inputs 2 + operation plus + name Merge59 + xpos -2167 + ypos 1268 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 112.72} + size_mult {{(parent.ffx_flare_size)+1.6+(parent.core_corona_size) i}} + anamorph 1.01 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.28 + inner_falloff 0.1 + brightness 0.05 + name Flare81 + xpos -2518 + ypos 1277 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==0?0:1 i}} + } + Blur { + size 88 + name Blur78 + xpos -2518 + ypos 1303 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 75.79} + size_mult {{(parent.ffx_flare_size)+1.6+(parent.core_corona_size) i}} + anamorph 1.03 + ring_color 0.379197 + inner_color 0 + outer_falloff 0.1 + inner_falloff 0.1 + brightness 0.09 + name Flare82 + xpos -2518 + ypos 1186 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==0?0:1 i}} + } + Blur { + size 70 + name Blur79 + xpos -2518 + ypos 1212 + } + Flare { + inputs 0 + position {{parent.ffx_position.x} {parent.ffx_position.y}} + radius {0 0 97.09} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_corona_size)}} + anamorph 0.96 + ring_color 0.379197 + inner_color 0 + brightness 2 + name Flare83 + xpos -2408 + ypos 1147 + disable {{Core_Corona_Plus.disable==1?1:core_coronas.which==0?0:1}} + } + Blur { + size 100 + name Blur80 + xpos -2408 + ypos 1173 + } + Merge2 { + inputs 2 + operation screen + name Merge48 + xpos -2408 + ypos 1218 + } + Merge2 { + inputs 2 + operation screen + name Merge49 + xpos -2408 + ypos 1309 + } + Switch { + inputs 6 + name core_coronas + xpos -1883 + ypos 1638 + } + Blur { + name Core_Corona_Blur + xpos -694 + ypos 1632 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + name Core_Coronas_Color + label "Core Coronas CC" + xpos -584 + ypos 1632 + } +set N264bc130 [stack 0] + Constant { + inputs 0 + channels rgb + color 1 + name Constant2 + label "Matte Box Edge" + xpos -658 + ypos 103 + } + Crop { + box {{-100 i} {-100 i} {root.width+100 i} {root.height+100 i}} + name Crop2 + xpos -658 + ypos 187 + } + Erode { + channels rgba + size 100 + blur 1 + maskChannelMask none + name Erode2 + xpos -658 + ypos 213 + } + Clamp { + maskChannelMask none + name Clamp2 + xpos -658 + ypos 239 + } + Invert { + maskChannelMask none + name Invert2 + xpos -658 + ypos 277 + } + Blur { + size 200 + name Blur40 + xpos -658 + ypos 315 + } +set N264bd5d0 [stack 0] + Dot { + name Dot33 + xpos -624 + ypos 384 + } +set N264bd940 [stack 0] +push $N264bd940 +push $N264bd940 +push $N264bd940 +push $N264bd940 +push $N264bd940 + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.08 + radius {262.81 269.91 269.91} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle {{45+parent.ffx_core_rays_rotation i}} + name Flare299 + xpos -1654 + ypos -650 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform68 + xpos -1654 + ypos -624 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.18 + radius {156.26 160.52 261.37} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle {{45+parent.ffx_core_rays_rotation i}} + name Flare314 + xpos -1661 + ypos -683 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.05 + radius {106.29 124.98 124.98} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle {{45+parent.ffx_core_rays_rotation i}} + name Flare321 + xpos -1534 + ypos -750 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform69 + xpos -1534 + ypos -724 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge266 + xpos -1534 + ypos -683 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge267 + xpos -1534 + ypos -624 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.68 + radius {282.69 289.79 377.86} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle {{45+parent.ffx_core_rays_rotation i}} + name Flare322 + xpos -1426 + ypos -676 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform70 + xpos -1426 + ypos -650 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.25 + radius {181.84 198.88 218.76} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle {{45+parent.ffx_core_rays_rotation i}} + name Flare323 + xpos -1426 + ypos -736 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Transform { + translate {-30 0} + center {960 540} + black_outside false + name Transform91 + xpos -1426 + ypos -710 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + offset 0.2 + radius {117.91 129.27 161.94} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle {{45+parent.ffx_core_rays_rotation i}} + name Flare324 + xpos -1430 + ypos -784 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {18.48 29.84 90.92} + size_mult {{(parent.ffx_flare_size)+1.6 i}} + anamorph 2 + inner_color 0 + outer_falloff 0.23 + inner_falloff 0.41 + brightness 0.42 + vis_out 1.04 + corners 4 + flattening 1 + sharpness 1 + corners_angle {{45+parent.ffx_core_rays_rotation i}} + name Flare325 + xpos -1306 + ypos -851 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Transform { + translate {30 0} + center {960 540} + black_outside false + name Transform92 + xpos -1306 + ypos -825 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge268 + xpos -1306 + ypos -784 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge269 + xpos -1306 + ypos -710 + } + Merge2 { + inputs 2 + operation screen + mix 0.6 + name Merge270 + xpos -1306 + ypos -650 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge271 + xpos -1306 + ypos -624 + } + Shuffle { + green red + blue red + alpha red + name Shuffle20 + xpos -1306 + ypos -598 + } + Blur { + size 24 + name Blur151 + xpos -1306 + ypos -572 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size {{512+parent.core_rays_size i}} + rotation {{-58+parent.ffx_core_rays_rotation i}} + ray_nb 1 + ray_thick {{35+parent.ffx_core_rays_thickness i}} + random_thick true + spark_falloff 0 + ray_falloff 2.5 + seed {{65+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles6 + label "Anamorphic Bits" + xpos -1130 + ypos -914 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } + Sparkles { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size {{512+parent.core_rays_size i}} + rotation {{122+parent.ffx_core_rays_rotation i}} + ray_nb 1 + ray_thick {{35+parent.ffx_core_rays_thickness i}} + random_thick true + spark_falloff 0 + ray_falloff 2.5 + seed {{65+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles17 + label "Anamorphic Bits" + xpos -1130 + ypos -876 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==12?0:1 i}} + } +set N269de200 [stack 0] + Dot { + name Dot44 + xpos -948 + ypos -866 + } + Blur { + size 20 + name Blur149 + xpos -982 + ypos -760 + } +push $N269de200 + Blur { + size 3 + name Blur150 + xpos -1130 + ypos -818 + } + Glow { + brightness 1.14 + name Glow36 + xpos -1130 + ypos -780 + } + Merge { + inputs 2 + operation plus + name Merge272 + xpos -1130 + ypos -754 + } + Merge2 { + inputs 2 + operation mask + maskChannelMask none + mix 0.9 + name Merge273 + xpos -1130 + ypos -566 + } + Dot { + name Dot46 + xpos -1096 + ypos -167 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 59.2 436.08} + size_mult {{(parent.ffx_flare_size)+(parent.core_rays_size)+.8 i}} + anamorph 0.4 + ring_color {0 0.01999999955 1} + inner_color {0.5199999809 0.6832000017 1} + outer_falloff 4.2 + inner_falloff 0.48 + brightness 0.125 + name Flare268 + xpos -1971 + ypos -705 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==11?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {17.44 42.38 293.11} + size_mult {{(parent.ffx_flare_size)+(parent.core_rays_size)+.8 i}} + anamorph 0.715 + ring_color {0 0.2200000286 1} + inner_color 0 + outer_falloff 5.2 + inner_falloff 0.76 + name Flare269 + xpos -2081 + ypos -893 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==11?0:1 i}} + } + Blur { + size 83 + name Blur121 + xpos -2081 + ypos -867 + } + Glow { + tint 0.305 + tolerance 0.1 + brightness 1.32 + size 49 + maskChannelMask none + name Glow31 + xpos -2081 + ypos -829 + } + Merge2 { + inputs 2 + operation plus + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask none + name Merge248 + xpos -2081 + ypos -705 + } + Dot { + name Dot17 + xpos -2047 + ypos -191 + } +push $N264bc130 + Dot { + name Dot19 + xpos -550 + ypos 776 + } + Dot { + name Dot20 + xpos -2755 + ypos 776 + } + Dot { + name Dot22 + xpos -2755 + ypos -485 + } + Noise { + inputs 0 + size {200 500} + zoffset 2 + lacunarity 2.02 + gain 0.61 + gamma 0.54 + center {320 240} + name Noise19 + xpos -2590 + ypos -585 + } + Noise { + inputs 0 + size {200 800} + lacunarity 2.02 + gain 0.63 + gamma 0.405 + center {320 240} + name Noise18 + xpos -2584 + ypos -628 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1000 + anamorphic 1.68 + rotation {{(parent.ffx_position.x/30)+80 i}} + ray_nb 1 + ray_thick 2 + spark_falloff 0 + ray_falloff 3.45 + seed 65 + name Sparkles28 + xpos -2245 + ypos -830 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1000 + anamorphic 1.68 + rotation {{(parent.ffx_position.x/30)-100 i}} + ray_nb 1 + ray_thick 2 + spark_falloff 0.042 + ray_falloff 3.5 + seed 65 + name Sparkles29 + xpos -2367 + ypos -856 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge206 + xpos -2367 + ypos -830 + } + Blur { + size 8.4 + name Blur86 + xpos -2367 + ypos -804 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 800 + anamorphic 1.68 + rotation {{(parent.ffx_position.x/30)+80 i}} + ray_nb 1 + ray_thick 6 + spark_falloff 0 + ray_falloff 3.45 + seed 65 + name Sparkles30 + xpos -2367 + ypos -895 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1000 + anamorphic 1.68 + rotation {{(parent.ffx_position.x/30)-100 i}} + ray_nb 1 + ray_thick 6 + spark_falloff 0.042 + ray_falloff 3.5 + seed 65 + name Sparkles31 + xpos -2514 + ypos -921 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge207 + xpos -2514 + ypos -895 + } + Blur { + size 18 + name Blur113 + xpos -2514 + ypos -869 + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge208 + xpos -2514 + ypos -798 + } + Glow { + tint {0 0.3399999142 1} + tolerance 0.165 + maskChannelMask none + name Glow23 + xpos -2514 + ypos -757 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1100 + anamorphic 1.68 + rotation {{(parent.ffx_position.x/30)+90 i}} + ray_nb 1 + ray_thick 6 + spark_falloff 0 + ray_falloff 3.45 + seed 65 + chroma_shift 0.72 + chroma_spread 0.09 + name Sparkles32 + xpos -2369 + ypos -973 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1300 + anamorphic 1.68 + rotation {{(parent.ffx_position.x/30)-90 i}} + ray_nb 1 + ray_thick 6 + spark_falloff 0.042 + ray_falloff 3.5 + seed 65 + chroma_shift 0.88 + chroma_spread 0.09 + name Sparkles33 + xpos -2514 + ypos -999 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Merge2 { + inputs 2 + maskChannelMask none + name Merge209 + xpos -2514 + ypos -973 + } + DirBlurWrapper { + BlurType radial + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 7 + BlurAngle 70 + maskChannelMask none + name DirBlurWrapper15 + xpos -2672 + ypos -979 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Blur { + size 9.5 + name Blur114 + xpos -2672 + ypos -932 + } + Grade { + multiply {0.5399999619 0.6963999271 1 1} + gamma 0.68 + maskChannelMask none + unpremult -rgba.alpha + name Grade46 + xpos -2672 + ypos -894 + } + Merge2 { + inputs 2 + operation plus + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask none + mix 0.305 + name Merge210 + xpos -2672 + ypos -757 + } + Grade { + multiply {1.795000076 1 0.7950000763 1} + gamma 1.12 + maskChannelMask none + mix 0.8 + name Grade73 + xpos -2672 + ypos -687 + } + Saturation { + inputs 1+1 + saturation 10 + name Saturation21 + xpos -2672 + ypos -628 + } + Grade { + inputs 1+1 + multiply 2.7 + gamma 0.52 + name Grade72 + xpos -2672 + ypos -585 + } + Grade { + inputs 1+1 + multiply {1 1 4 4} + maskChannelMask rgba.red + name Grade43 + xpos -2672 + ypos -489 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {17.44 34.59 500} + size_mult 0.3 + ring_color {0.5 0.6699999571 1} + inner_color 1 + outer_falloff 17 + inner_falloff 1.7 + name Flare263 + xpos -2287 + ypos -707 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Grade { + multiply 6 + maskChannelMask none + unpremult -rgba.alpha + name Grade49 + xpos -2287 + ypos -681 + } +set N269e8de0 [stack 0] + Blur { + size 73 + name Blur116 + xpos -2287 + ypos -461 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {17.27 21.25 92.18} + size_mult 3 + anamorph 1.02 + ring_color {0.3832257986 0.3832257986 0.9900000095} + inner_color 1 + outer_falloff 3.6 + inner_falloff 0.95 + vis_mask -rgba.alpha + corners 9 + flattening 21.5 + sharpness 1 + corners_angle 54 + name Flare264 + xpos -2392 + ypos -612 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Blur { + size 7 + name Blur117 + xpos -2392 + ypos -578 + } +push $N269e8de0 + Blur { + size 200 + name Blur118 + xpos -2507 + ypos -687 + } + Merge { + inputs 2 + operation plus + mix 0.225 + name Merge244 + xpos -2507 + ypos -572 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge245 + xpos -2507 + ypos -455 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation12 + xpos -2507 + ypos -429 + } + Grade { + multiply {0.9217296839 0.908107996 1.25999999 1} + gamma 0.63 + maskChannelMask none + name Grade39 + xpos -2507 + ypos -403 + } + Merge2 { + inputs 2 + operation plus + output {rgba.red rgba.green rgba.blue -rgba.alpha} + maskChannelMask none + mix 0.6 + name Merge246 + xpos -2672 + ypos -403 + } +set N269eacd0 [stack 0] +push $N269eacd0 + Sparkles { + inputs 0 + mode Sparkles + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1300 + anamorphic 1.1 + rotation {{(parent.ffx_position.x/30)+100 i}} + ray_nb 600 + ray_thick 3 + spark_falloff 0 + ray_falloff 10 + seed 95 + chroma_shift 1.06 + chroma_spread 0.16 + name Sparkles24 + xpos -2158 + ypos -460 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Sparkles { + mode Sparkles + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1800 + anamorphic 1.1 + rotation {{(parent.ffx_position.x/30)+100 i}} + ray_nb 800 + ray_thick 3 + spark_falloff 0.016 + ray_falloff 10 + seed 65 + chroma_shift 1.06 + chroma_spread 0.295 + name Sparkles25 + xpos -2158 + ypos -434 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==10?0:1 i}} + } + Merge2 { + inputs 2 + operation mask + Achannels {rgba.red rgba.green rgba.blue rgba.red} + maskChannelMask none + name Merge279 + xpos -2158 + ypos -390 + } + Merge2 { + inputs 2 + operation geometric + maskChannelMask none + mix 0.5 + name Merge280 + xpos -2158 + ypos -364 + } + Grade { + multiply 2.65 + maskChannelMask none + name Grade69 + xpos -2158 + ypos -326 + } +push $N269eacd0 + Merge2 { + inputs 2 + operation screen + maskChannelMask none + name Merge281 + xpos -2672 + ypos -326 + } + Dot { + name Dot14 + xpos -2638 + ypos -222 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {93.02 104.27 208.82} + size_mult {{Transform1.scale i}} + ring_color {0.67 0.67 0.79} + inner_color 1 + chroma_shift_angle_add true + vis_mask -rgba.alpha + corners 7 + flattening 100 + sharpness 0.99 + name Flare222 + xpos -2893 + ypos -602 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==9?0:1 i}} + } + DirBlurWrapper { + BlurType radial + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 15 + BlurAngle 90 + target {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name DirBlurWrapper11 + xpos -2893 + ypos -576 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==9?0:1 i}} + } + Blur { + size 5.8 + name Blur53 + xpos -2893 + ypos -536 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {105.98 117.23 243.65} + size_mult {{Transform1.scale i}} + ring_color {0.67 0.67 0.79} + inner_color 1 + brightness {1 1 1} + vis_mask -rgba.alpha + corners 7 + flattening 100 + sharpness 0.99 + name Flare223 + xpos -3113 + ypos -733 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==9?0:1 i}} + } + DirBlurWrapper { + BlurType radial + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 16 + BlurAngle 90 + target {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name DirBlurWrapper12 + xpos -3113 + ypos -707 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==9?0:1 i}} + } + Blur { + size 5 + name Blur54 + xpos -3113 + ypos -666 + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {98.72 105.6 208.69} + size_mult {{Transform1.scale i}} + ring_color {0.67 0.67 0.79} + inner_color 1 + brightness 0.22 + vis_mask -rgba.alpha + corners 7 + flattening 69 + sharpness 0.99 + name Flare225 + xpos -3113 + ypos -628 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==9?0:1 i}} + } + Blur { + size 3 + name Blur55 + xpos -3113 + ypos -600 + } + Merge { + inputs 2 + operation plus + name Merge46 + xpos -3113 + ypos -530 + } + Dot { + name Dot13 + xpos -3079 + ypos -229 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {1.28 38.69 48.57} + anamorph 1.58 + ring_color {0.24 0.24 0.62} + inner_color 1 + outer_falloff 0.95 + inner_falloff 0.95 + vis_mask -rgba.alpha + corners 4 + flattening 21.5 + sharpness 1 + corners_angle 54 + name Flare224 + xpos -3308 + ypos -595 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==8?0:1 i}} + } +set N26e809f0 [stack 0] +push $N26e809f0 + Blur { + size 18 + name Blur44 + xpos -3418 + ypos -601 + } + Merge { + inputs 2 + operation plus + mix 0.095 + name Merge193 + xpos -3418 + ypos -556 + } + Grade { + multiply 4 + name Grade36 + xpos -3418 + ypos -530 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {1.28 5.26 76.19} + anamorph 1.58 + ring_color {0.3832257986 0.3832257986 0.9900000095} + inner_color 1 + outer_falloff 3.6 + inner_falloff 0.95 + vis_mask -rgba.alpha + corners 9 + flattening 21.5 + sharpness 1 + corners_angle 54 + name Flare233 + xpos -3321 + ypos -674 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==8?0:1 i}} + } +set N26e817b0 [stack 0] +push $N26e817b0 + Blur { + size 18 + name Blur46 + xpos -3418 + ypos -680 + } + Merge { + inputs 2 + operation plus + mix 0.485 + name Merge203 + xpos -3418 + ypos -632 + } + Grade { + multiply 4 + name Grade37 + xpos -3528 + ypos -632 + } + Merge { + inputs 2 + operation plus + mix 0.215 + name Merge204 + xpos -3528 + ypos -530 + } + Dot { + name Dot2 + xpos -3494 + ypos -297 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size {{512+parent.core_rays_size i}} + rotation {{-58+parent.ffx_core_rays_rotation i}} + ray_nb 1 + ray_thick {{35+parent.ffx_core_rays_thickness i}} + random_thick true + spark_falloff 0 + ray_falloff 2.5 + seed {{65+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles22 + label "Anamorphic Bits" + xpos -3777 + ypos -531 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==7?0:1 i}} + } + Sparkles { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size {{512+parent.core_rays_size i}} + rotation {{122+parent.ffx_core_rays_rotation i}} + ray_nb 1 + ray_thick {{35+parent.ffx_core_rays_thickness i}} + random_thick true + spark_falloff 0 + ray_falloff 2.5 + seed {{65+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles23 + label "Anamorphic Bits" + xpos -3777 + ypos -493 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==7?0:1 i}} + } +set N26e83330 [stack 0] + Dot { + name Dot45 + xpos -3595 + ypos -483 + } + Blur { + size 20 + name Blur26 + xpos -3629 + ypos -377 + } +push $N26e83330 + Blur { + size 3 + name Blur27 + xpos -3777 + ypos -435 + } + Glow { + brightness 1.14 + name Glow10 + xpos -3777 + ypos -397 + } + Merge { + inputs 2 + operation plus + name Merge27 + xpos -3777 + ypos -371 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 150 + rotation -14.9246 + ray_nb 4 + ray_thick 0.4 + seed {{107+parent.ffx_cores_seed i}} + name Sparkles18 + xpos -3804 + ypos -795 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==6?0:1 i}} + } + Sparkles { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 150 + rotation -14.9246 + ray_nb 4 + ray_thick 0.4 + seed {{114+parent.ffx_cores_seed i}} + name Sparkles19 + xpos -3804 + ypos -769 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==6?0:1 i}} + } + Sparkles { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 335 + anamorphic 0.5 + rotation -14.9246 + ray_nb 56.4656 + spark_falloff 0.045283 + ray_falloff 8.41509 + seed {{31+parent.ffx_cores_seed i}} + color 0.6 + name Sparkles20 + xpos -3804 + ypos -743 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==6?0:1 i}} + } + Sparkles { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 305 + anamorphic 0.649481 + rotation 75.0754 + ray_nb 37.0218 + spark_falloff 0.045283 + ray_falloff 10 + seed {{34+parent.ffx_cores_seed i}} + color 0.5 + name Sparkles21 + xpos -3804 + ypos -717 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==6?0:1 i}} + } + DirBlurWrapper { + BlurType radial + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + BlurLength 10 + maskChannelMask none + name DirBlurWrapper6 + xpos -3804 + ypos -691 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 250 + ray_nb 60 + seed {{23+parent.ffx_cores_seed i}} + brightness 0.15 + name Sparkles1 + xpos -4058 + ypos -819 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==5?0:1 i}} + } + Blur { + size 2 + name Blur14 + xpos -4058 + ypos -793 + } + DirBlurWrapper { + BlurType radial + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + Samples 3 + name DirBlurWrapper5 + xpos -4058 + ypos -755 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==5?0:1 i}} + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 255 + anamorphic 1.34389 + rotation 57.4372 + relative_rotation true + ray_nb 5 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{35+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles16 + xpos -3948 + ypos -863 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==5?0:1 i}} + } + Blur { + size 2 + name Blur13 + xpos -3948 + ypos -837 + } + DirBlurWrapper { + BlurType radial + BlurCenter {{parent.ffx_position.x i} {parent.ffx_position.y i}} + Samples 3 + name DirBlurWrapper1 + xpos -3948 + ypos -799 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==5?0:1 i}} + } + Merge2 { + inputs 2 + name Merge17 + xpos -3948 + ypos -749 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {60.77 77.81 137.81} + ring_color {0.16796 0.396161 0.596516} + inner_color 1 + brightness 2 + corners 9 + flattening 100 + sharpness 0.999 + name Flare16 + label "Flare Spike" + xpos -4177 + ypos -792 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==4?0:1 i}} + } + Blur { + size 4 + name Blur2 + xpos -4177 + ypos -754 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 385 + anamorphic 3 + ray_nb 8 + ray_thick 3 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{46+parent.ffx_cores_seed i}} + broken_affected 9.89774 + name Sparkles7 + xpos -4470 + ypos -851 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==3?0:1 i}} + } + Blur { + size 5 + name Blur49 + xpos -4470 + ypos -825 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 340 + anamorphic 3 + rotation 13 + ray_nb 3 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{60+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles11 + xpos -4470 + ypos -944 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==3?0:1 i}} + } + Blur { + size 3 + name Blur62 + xpos -4470 + ypos -918 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 412 + anamorphic 3 + rotation 2 + ray_nb 4 + ray_thick 1 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{65+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles15 + label "Anamorphic Bits" + xpos -4360 + ypos -1064 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==3?0:1 i}} + } + Blur { + size 2 + name Blur71 + xpos -4360 + ypos -1026 + } + Blur { + size 5 + name Blur72 + xpos -4360 + ypos -988 + } + Merge2 { + inputs 2 + operation plus + mix 0.7 + name Merge40 + xpos -4360 + ypos -912 + } + Merge2 { + inputs 2 + operation plus + mix 0.5 + name Merge44 + xpos -4360 + ypos -819 + } + Blur { + size 2 + name Blur74 + xpos -4360 + ypos -701 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 495 + anamorphic 1.34389 + rotation 11.0377 + ray_nb 7 + ray_thick 1 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{15+parent.ffx_cores_seed i}} + broken_affected 9.89774 + name Sparkles2 + xpos -4722 + ypos -769 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==2?0:1 i}} + } + Blur { + size 2 + name Blur34 + xpos -4722 + ypos -743 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 385 + anamorphic 1.34389 + rotation -13.1156 + ray_nb 20 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{36+parent.ffx_cores_seed i}} + broken_affected 9.89774 + name Sparkles3 + xpos -4722 + ypos -856 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==2?0:1 i}} + } + Blur { + size 5 + name Blur35 + xpos -4722 + ypos -830 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 340 + anamorphic 1.34389 + rotation 31 + ray_nb 7 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{50+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles4 + xpos -4722 + ypos -949 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==2?0:1 i}} + } + Blur { + size 3 + name Blur36 + xpos -4722 + ypos -923 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 412 + anamorphic 1.34389 + rotation 31.1156 + ray_nb 8 + ray_thick 1 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{35+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles5 + label "Lots of Bits" + xpos -4612 + ypos -1069 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==2?0:1 i}} + } + Blur { + size 2 + name Blur37 + xpos -4612 + ypos -1031 + } + Blur { + size 5 + name Blur38 + xpos -4612 + ypos -993 + } + Merge2 { + inputs 2 + operation plus + mix 0.7 + name Merge34 + xpos -4612 + ypos -917 + } + Merge2 { + inputs 2 + operation plus + mix 0.5 + name Merge35 + xpos -4612 + ypos -824 + } + Merge2 { + inputs 2 + operation plus + mix 0.4 + name Merge36 + xpos -4612 + ypos -737 + } + Blur { + size 2 + name Blur39 + xpos -4612 + ypos -711 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 385 + anamorphic 1.34389 + rotation -13.1156 + ray_nb 8 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{26+parent.ffx_cores_seed i}} + broken_affected 9.89774 + name Sparkles12 + xpos -4977 + ypos -849 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==1?0:1 i}} + } + Blur { + size 5 + name Blur63 + xpos -4977 + ypos -823 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 340 + anamorphic 1.34389 + rotation 31 + ray_nb 5 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{40+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles13 + xpos -4977 + ypos -942 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==1?0:1 i}} + } + Blur { + size 3 + name Blur64 + xpos -4977 + ypos -916 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 412 + anamorphic 1.34389 + rotation 31.1156 + ray_nb 4 + ray_thick 1 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{45+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles14 + label "More Bits" + xpos -4867 + ypos -1062 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==1?0:1 i}} + } + Blur { + size 2 + name Blur65 + xpos -4867 + ypos -1024 + } + Blur { + size 5 + name Blur66 + xpos -4867 + ypos -986 + } + Merge2 { + inputs 2 + operation plus + mix 0.7 + name Merge42 + xpos -4867 + ypos -910 + } + Merge2 { + inputs 2 + operation plus + mix 0.5 + name Merge43 + xpos -4867 + ypos -817 + } + Blur { + size 2 + name Blur67 + xpos -4867 + ypos -705 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 385 + anamorphic 1.34389 + rotation -83.1156 + ray_nb 9 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{36+parent.ffx_cores_seed i}} + broken_affected 9.89774 + name Sparkles8 + xpos -5206 + ypos -836 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==0?0:1 i}} + } + Blur { + size 5 + name Blur50 + xpos -5206 + ypos -810 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 340 + anamorphic 1.34389 + rotation 51 + ray_nb 4 + ray_thick 2 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{50+parent.ffx_cores_seed i}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles9 + xpos -5206 + ypos -929 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==0?0:1 i}} + } + Blur { + size 3 + name Blur51 + xpos -5206 + ypos -903 + } + Sparkles { + inputs 0 + position {{parent.ffx_position.x} {parent.ffx_position.y}} + size 412 + anamorphic 1.34389 + rotation 41.1156 + ray_nb 4 + ray_thick 1 + random_thick true + spark_falloff 0 + ray_falloff 6.45283 + seed {{35+parent.ffx_cores_seed}} + brightness 0.4 + broken_affected 9.89774 + name Sparkles10 + label "Few Bits" + xpos -5096 + ypos -1049 + disable {{Core_Bits_Plus.disable==1?1:core_bits.which==0?0:1 x21 0}} + } + Blur { + size 2 + name Blur52 + xpos -5096 + ypos -1011 + } + Blur { + size 5 + name Blur60 + xpos -5096 + ypos -973 + } + Merge2 { + inputs 2 + operation plus + mix 0.7 + name Merge38 + xpos -5096 + ypos -897 + } + Merge2 { + inputs 2 + operation plus + mix 0.5 + name Merge39 + xpos -5096 + ypos -804 + } + Blur { + size 2 + name Blur61 + xpos -5096 + ypos -691 + } + Switch { + inputs 13 + name core_bits + xpos -4438 + ypos -114 + } + Transform { + scale {{(parent.ffx_flare_size)+(parent.core_rays_size) i}} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + black_outside false + name Size1 + xpos -2254 + ypos -114 + disable {{parent.core_bits.which==11?1:0 i}} + } + Blur { + name Core_Rays_Blur + xpos -2120 + ypos -120 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + unpremult -rgba.alpha + name Core_Rays_Color + label "Core Rays CC" + xpos -2010 + ypos -120 + } + Dot { + name Dot42 + xpos -1003 + ypos -110 + } +set N26e95ad0 [stack 0] + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 227.56} + size_mult 0.1 + anamorph 1.01 + ring_color {0.7653999925 0.7450000048 1} + inner_color 1 + outer_falloff 2 + name Flare232 + xpos -1028 + ypos -1447 + disable {{Core_Plus.disable==1?1:cores.which==6?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 0 227.56} + size_mult 0.1 + anamorph 1.01 + ring_color {0.7653999925 0.7450000048 1} + inner_color 1 + outer_falloff 2 + name Flare231 + xpos -1138 + ypos -1499 + disable {{Core_Plus.disable==1?1:cores.which==6?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 3.97 21.06} + size_mult 3 + anamorph 1.728 + ring_color 0.2300000191 + inner_color 1 + outer_falloff 9 + inner_falloff 2 + chroma_spread 0.02 + vis_mask -rgba.alpha + name Flare229 + xpos -1138 + ypos -1473 + disable {{Core_Plus.disable==1?1:cores.which==6?0:1 i}} + } + Merge { + inputs 2 + operation plus + name Merge50 + xpos -1138 + ypos -1447 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {27.75 35.91 49.99} + size_mult {{(parent.ffx_flare_size)+(parent.core_size) i}} + ring_color {1.16889 1 0.831105} + inner_color 1.16889 + corners 4 + flattening 0.699989 + sharpness 0.899097 + name Flare28 + xpos -1291 + ypos -1508 + disable {{Core_Plus.disable==1?1:cores.which==5?0:1 i}} + } + Flare { + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {20.35 29.99 66.17} + size_mult {{(parent.ffx_flare_size)+(parent.core_size) i}} + ring_color 0.910118 + inner_color 1.16889 + brightness 0.412299 + corners 4 + flattening 0.228568 + sharpness 0.899097 + name Flare29 + xpos -1291 + ypos -1459 + disable {{Core_Plus.disable==1?1:cores.which==5?0:1 i}} + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {4.36 12.39 14.88} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_size) i}} + inner_color 1 + name Flare73 + label "Core 4" + xpos -1453 + ypos -1508 + disable {{Core_Plus.disable==1?1:cores.which==4?0:1 i}} + } + Blur { + size 2 + name Blur30 + xpos -1453 + ypos -1470 + } + Glow { + tint {1 0.217637 0.0879641} + tolerance 0.0150376 + name Glow12 + xpos -1453 + ypos -1432 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 7.61 10.51} + size_mult {{(parent.ffx_flare_size)+(parent.core_size) i} {(parent.ffx_flare_size)+2.5+(parent.core_size) i}} + inner_color 1 + name Flare76 + label "Core 3" + xpos -1614 + ypos -1505 + disable {{Core_Plus.disable==1?1:cores.which==3?0:1 i}} + } + Glow { + brightness 3 + size 25 + name Glow15 + xpos -1614 + ypos -1467 + } + Blur { + size 25 + name Blur33 + xpos -1614 + ypos -1441 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {0 7.61 10.51} + size_mult {{(parent.ffx_flare_size)+1+(parent.core_size) i} {(parent.ffx_flare_size)+.5+(parent.core_size) i}} + anamorph 2 + inner_color 1 + name Flare75 + label "Core 2" + xpos -1775 + ypos -1511 + disable {{Core_Plus.disable==1?1:cores.which==1?0:1 i}} + } + Glow { + brightness 3 + size 25 + name Glow14 + xpos -1775 + ypos -1473 + } + Blur { + size 25 + name Blur32 + xpos -1775 + ypos -1447 + } + Flare { + inputs 0 + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + radius {5.68 6.45 22.01} + size_mult {{(parent.ffx_flare_size)+.5+(parent.core_size) i}} + inner_color 1 + name Flare74 + label "Core 1" + xpos -1951 + ypos -1506 + disable {{Core_Plus.disable==1?1:cores.which==0?0:1 i}} + } +set N26e991d0 [stack 0] + Glow { + brightness 3 + size 25 + name Glow13 + xpos -1951 + ypos -1468 + } + Blur { + size 25 + name Blur31 + xpos -1951 + ypos -1442 + } + Switch { + inputs 6 + name cores + xpos -1291 + ypos -1237 + } + Blur { + name Core_Blur + xpos -694 + ypos -1243 + } + Grade { + multiply {1 1 1 0} + maskChannelMask none + unpremult -rgba.alpha + name Cores_Color + label "Cores CC" + xpos -584 + ypos -1243 + } + Constant { + inputs 0 + channels rgb + name Constant3 + xpos -474 + ypos -1550 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Core_Plus + xpos -474 + ypos -1237 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Core_Bits_Plus + xpos -474 + ypos -114 + disable true + } + Dot { + name Dot21 + xpos -440 + ypos 182 + } +set N26e9ad50 [stack 0] + Dot { + name Dot23 + xpos -364 + ypos 182 + } + Dot { + name Dot24 + xpos -364 + ypos 384 + } +push $N26e9ad50 + Merge2 { + inputs 2+1 + operation plus + name Edge_Shimmer_Bloom + label "Edge Shimmer" + xpos -474 + ypos 374 + } + Blur { + inputs 1+1 + size 100 + name Blur41 + xpos -474 + ypos 412 + disable {{parent.Edge_Shimmer_Bloom.disable.left i x11 1}} + } + Blur { + inputs 1+1 + size 100 + name Blur42 + xpos -474 + ypos 450 + disable {{parent.Edge_Shimmer_Bloom.disable.left i x11 1}} + } + Blur { + inputs 1+1 + size 100 + name Blur43 + xpos -474 + ypos 488 + disable {{parent.Edge_Shimmer_Bloom.disable.left i x11 1}} + } + Grade { + inputs 1+1 + white 4 + multiply 4 + name Grade16 + label Bloom + xpos -474 + ypos 526 + disable {{parent.Edge_Shimmer_Bloom.disable.left i x11 1}} + } + Glow { + inputs 1+1 + name Glow16 + xpos -474 + ypos 564 + disable {{parent.Edge_Shimmer_Bloom.disable.left i x11 1}} + } + Shuffle { + alpha red + name Shuffle5 + xpos -474 + ypos 590 + } + VolumeRays { + name FFX_VolumeRays + label "Mar 20 2005" + xpos -474 + ypos 634 + blur_size 0 + vol_pos {{parent.ffx_position.x i x1 377 x11 450 x40 2020 x55 973} {parent.ffx_position.y i x1 544 x11 728 x40 864 x55 557}} + raylength 15 + quality Low + chk_flicker false + flicker_speed 0 + flicker_size 0 + xform_flicker true + volume_end_color {0 0 0 0} + radial_size 600 + } +set Ne90d9d0 [stack 0] + Blur { + size 300 + name Blur76 + xpos -338 + ypos 634 + } +push $N264bd5d0 + Grade { + channels rgba + whitepoint 0.4 + gamma 0.24 + maskChannelMask none + name Grade52 + xpos -347 + ypos 321 + } + Constant { + inputs 0 + channels rgb + format "1972 1012 0 0 1972 1012 1 " + name Constant4 + xpos -196 + ypos 145 + } + Noise { + maskChannelMask none + size 15.8 + zoffset {{frame/10 i}} + lacunarity 10 + translate {1660 676} + center {{parent.ffx_position.x i} {parent.ffx_position.y i}} + name Noise15 + xpos -196 + ypos 245 + } + VolumeRays { + inputs 2 + name FFX_VolumeRays1 + label "Mar 20 2005" + xpos -196 + ypos 315 + style "Alpha Edges" + blur_size 0 + vol_pos {{parent.ffx_position.x i x1 377 x11 450 x40 2020 x55 973} {parent.ffx_position.y i x1 544 x11 728 x40 864 x55 557}} + raylength 8 + pre_blur 13 + quality Low + chk_flicker false + flicker_size 2 + xform_flicker true + volume_end_color {0 0 0 0} + radial_size 400 + chk_use_mask true + } +set Ne90e270 [stack 0] +push $Ne90e270 + Sparkles { + inputs 0 + mode Sparkles + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1300 + anamorphic 1.1 + rotation {{(parent.ffx_position.x/30)+100 i}} + ray_nb 600 + ray_thick 3 + spark_falloff 0 + ray_falloff 10 + seed 95 + chroma_shift 1.06 + chroma_spread 0.16 + name Sparkles26 + xpos 249 + ypos 244 + } + Sparkles { + mode Sparkles + position {{parent.ffx_position.x i} {parent.ffx_position.y i}} + size 1800 + anamorphic 1.1 + rotation {{(parent.ffx_position.x/30)+100 i}} + ray_nb 800 + ray_thick 3 + spark_falloff 0.016 + ray_falloff 10 + seed 65 + chroma_shift 1.06 + chroma_spread 0.295 + name Sparkles27 + xpos 249 + ypos 270 + } + VolumeRays { + name FFX_VolumeRays2 + label "Mar 20 2005" + xpos 249 + ypos 296 + blur_size 0 + vol_pos {{parent.ffx_position.x i x1 377 x11 450 x40 2020 x55 973} {parent.ffx_position.y i x1 544 x11 728 x40 864 x55 557}} + raylength 11 + pre_blur 13 + quality Low + chk_flicker false + flicker_size 2 + xform_flicker true + volume_end_color {0 0 0 0} + radial_size 400 + } + Merge2 { + inputs 2 + operation mask + Achannels {rgba.red rgba.green rgba.blue rgba.red} + maskChannelMask none + name Merge282 + xpos 249 + ypos 348 + } + Merge2 { + inputs 2 + operation geometric + maskChannelMask none + mix 0.5 + name Merge283 + xpos 249 + ypos 374 + } + Grade { + multiply 2.65 + maskChannelMask none + name Grade71 + xpos 249 + ypos 412 + } + Saturation { + saturation 0 + maskChannelMask none + name Saturation9 + xpos 249 + ypos 438 + } +push $Ne90e270 + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge284 + xpos -196 + ypos 438 + } + Merge2 { + inputs 2 + operation multiply + maskChannelMask none + name Merge225 + xpos -196 + ypos 640 + } + Dot { + name Dot35 + xpos -162 + ypos 695 + } + Dot { + name Dot34 + xpos -162 + ypos 751 + } +push $N26e95ad0 + Dot { + name Dot43 + xpos -1003 + ypos 707 + } +push $Ne90d9d0 + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Core_Bits_Plus1 + xpos -474 + ypos 703 + disable {{parent.Core_Bits_Plus.disable.left i}} + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Merge224 + xpos -474 + ypos 747 + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Core_Corona_Plus + xpos -474 + ypos 1638 + disable true + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Core_Shape_Plus + xpos -474 + ypos 3414 + disable true + } + Merge2 { + inputs 2+1 + operation plus + mix 0.2 + name Center_Bloom_Plus + xpos -474 + ypos 4148 + disable true + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Anomolies_Plus + xpos -474 + ypos 5135 + disable true + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Pieces_Plus + xpos -474 + ypos 6237 + disable true + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + mix 0.15 + name Big_Pieces_Plus + xpos -474 + ypos 6806 + disable true + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Rings_Plus + xpos -474 + ypos 7401 + disable true + } + Merge2 { + inputs 2 + operation plus + maskChannelMask none + name Lines_Plus + xpos -474 + ypos 10148 + disable true + } + Grade { + white {1 1 1 0} + maskChannelMask none + name Global_Brightness + xpos -474 + ypos 10530 + } + Group { + name Static_Noise5 + help "Adds synthetic grain. Push \"presets\" to get predefined types of grain, these are the correct size for 2K scans.\n\nYou can also adjust the sliders to match a sample piece of grain. Find a sample with a rather constant background, blur it to remove the grain, and use as input to this. View with a wipe in the viewer so you can make a match. It helps to view and match each of the red, green, blue seperately." + tile_color 0x992620ff + note_font "Bitstream Vera Sans" + xpos -474 + ypos 10834 + mapsize {0.15 0.15} + addUserKnob {20 master_control l Master} + addUserKnob {7 noise_intensity_global l Intensity R 0 2} + noise_intensity_global 0.7 + addUserKnob {7 rgb_size_multiplier l Size R 0 2} + rgb_size_multiplier 1 + addUserKnob {26 ""} + addUserKnob {6 no_alpha l "no alpha?" t "Check this box if your image doesn't have an alpha and you cannot use another alpha channel.\n\n(Note: This WILL cause the grain to be more prevalent. So please compensate using the Noise Size and Noise Intensity controls above.)" +STARTLINE} + no_alpha true + addUserKnob {20 adv_controls l Advanced} + addUserKnob {20 fractal_noise_size l "RGB Noise Size" n 1} + fractal_noise_size 0 + addUserKnob {14 red_size l r R 0 100} + red_size 1.7 + addUserKnob {14 green_size l g R 0 100} + green_size 1.6 + addUserKnob {14 blue_size l b R 0 100} + blue_size 1.5 + addUserKnob {20 endGroup n -1} + addUserKnob {20 noise_irregularity l "RGB Noise Irregularity" n 1} + noise_irregularity 0 + addUserKnob {7 red_i l r} + red_i 1 + addUserKnob {7 green_i l g} + green_i 0.75 + addUserKnob {7 blue_i l b} + blue_i 0.65 + addUserKnob {20 endGroup_1 l endGroup n -1} + addUserKnob {20 noise_intensity l "RGB Noise Intensity" n 1} + noise_intensity 0 + addUserKnob {7 red_m l r t "Amount of grain to add to a white pixel"} + red_m 0.2 + addUserKnob {7 green_m l g} + green_m 0.4 + addUserKnob {7 blue_m l b} + blue_m 0.6 + addUserKnob {18 black t "Amount of grain to add everywhere"} + black {0 0 0} + addUserKnob {6 black_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {18 minimum t "Minimum black level" R 0 0.01} + minimum {0 0 0} + addUserKnob {6 minimum_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} + addUserKnob {20 endGroup_2 l endGroup n -1} + addUserKnob {26 ""} + addUserKnob {3 seed l Seed} + seed 134 + addUserKnob {32 reset l Reset T "knobs this \{rgb_size_multiplier 0 red_size 1.70 green_size 1.60 blue_size 1.50 red_i 1.00 green_i 0.75 blue_i 0.65 red_m 0.40 green_m 0.60 blue_m 1.65 black 0.00\}" +STARTLINE} + } + Input { + inputs 0 + name Input1 + xpos 0 + } +set N2780d0c0 [stack 0] + Noise { + output {rgba.red -rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.red_size.w*(rgb_size_multiplier) i} {parent.red_size.h*(rgb_size_multiplier) i}} + octaves 2 + gamma 1 + xrotate {{red_i*45 i}} + yrotate {{red_i*45 i}} + name red + xpos 144 + ypos -7 + } + Noise { + output {-rgba.red rgba.green -rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.green_size.w*(rgb_size_multiplier) i} {parent.green_size.h*(rgb_size_multiplier) i}} + zoffset 10 + octaves 2 + gamma 1 + xrotate {{green_i*45 i}} + yrotate {{green_i*45 i}} + name green + xpos 144 + ypos 35 + } + Noise { + output {-rgba.red -rgba.green rgba.blue -rgba.alpha} + cliptype none + replace true + size {{parent.blue_size.w*(rgb_size_multiplier) i} {parent.blue_size.h*(rgb_size_multiplier) i}} + zoffset 20 + octaves 2 + gamma 1 + xrotate {{blue_i*45 i}} + yrotate {{blue_i*45 i}} + name blue + xpos 144 + ypos 77 + } +push $N2780d0c0 + MergeExpression { + inputs 2 + expr0 max(minimum.r,r+(2*Ar-1)*(r*red_m*noise_intensity_global)) + expr1 max(minimum.g,g+(2*Ag-1)*(g*green_m*noise_intensity_global)) + expr2 max(minimum.b,b+(2*Ab-1)*(b*blue_m*noise_intensity_global)) + name MergeExpression1 + xpos 144 + ypos 117 + } +set N2780e8d0 [stack 0] +push $N2780e8d0 +push $N2780d0c0 + Copy { + inputs 2 + channels rgb + maskChannelInput rgba.alpha + name Copy1 + xpos 0 + ypos 105 + disable {{parent.no_alpha i}} + } + Switch { + inputs 2 + which {{parent.no_alpha i}} + name Switch1 + xpos 144 + ypos 171 + } + Output { + name Output1 + xpos 144 + ypos 219 + } + end_group + Crop { + box {0 0 {input.width i} {input.height i}} + reformat true + name Crop1 + xpos -474 + ypos 11000 + } + Output { + name Output1 + xpos -474 + ypos 11138 + } +push $N26e991d0 +push 0 +push 0 +push 0 +push 0 +push 0 +push 0 +push 0 +push 0 +push $Ne90d9d0 + Viewer { + inputs 10 + input_process false + translate {-1.164000034 -0.5619999766} + gauge 0.5282895607 + name Viewer1 + xpos -16 + ypos 10663 + } +end_group diff --git a/gizmos/Lighting/normalLighting.gizmo b/gizmos/Lighting/normalLighting.gizmo new file mode 100644 index 0000000..41e4f09 --- /dev/null +++ b/gizmos/Lighting/normalLighting.gizmo @@ -0,0 +1,79 @@ +#! D:/Program Files/Nuke4.6/Nuke.exe -nx +version 4.6000 +Gizmo { + inputs 1 + label v01 + addUserKnob {20 "" l NormalLighting.V01} + addUserKnob {41 hue_rotation l Direction T HueShift1.hue_rotation} + addUserKnob {41 weight0 l RPass T Blend1.weight0} + addUserKnob {41 weight1 l GPass T Blend1.weight1} + addUserKnob {41 weight2 l BPass T Blend1.weight2} + addUserKnob {41 in l Soft_Hard T Histogram1.in} + addUserKnob {41 unpremult l "(un)premult by" T Histogram1.unpremult} + addUserKnob {26 "" "NormalLighting Based RGBPass By ShawnKim" } + + name NormalLighting.v01 + label v01 + indicators 2 +} + Input { + inputs 0 + name Input1 + selected true + xpos -210 + ypos -232 + } + HueShift { + color {1 0 0} + name HueShift1 + xpos -210 + ypos -192 + } + NoOp { + name NoOp1 + xpos -210 + ypos -140 + } +set N9d4c880 [stack 0] + Shuffle { + red blue + green blue + name Shuffle3 + xpos -28 + ypos -57 + } +push $N9d4c880 + Shuffle { + red green + blue green + name Shuffle2 + xpos -210 + ypos -56 + } +push $N9d4c880 + Shuffle { + green red + blue red + name Shuffle1 + xpos -369 + ypos -51 + } + Blend { + inputs 3 + name Blend1 + xpos -210 + ypos 54 + } + Histogram { + in {0 1 1} + out {0 1} + name Histogram1 + xpos -210 + ypos 114 + } + Output { + name Output1 + xpos -210 + ypos 214 + } +end_group diff --git a/icons/icon_item/AntsSlate.png b/icons/icon_item/AntsSlate.png new file mode 100644 index 0000000..3bbe6d6 Binary files /dev/null and b/icons/icon_item/AntsSlate.png differ diff --git a/icons/icon_item/CWDefocus.png b/icons/icon_item/CWDefocus.png new file mode 100644 index 0000000..23d4dd5 Binary files /dev/null and b/icons/icon_item/CWDefocus.png differ diff --git a/icons/icon_item/DespillMadness.png b/icons/icon_item/DespillMadness.png new file mode 100644 index 0000000..78a153b Binary files /dev/null and b/icons/icon_item/DespillMadness.png differ diff --git a/icons/icon_item/FallingLeavesIcon.png b/icons/icon_item/FallingLeavesIcon.png new file mode 100644 index 0000000..349c3f0 Binary files /dev/null and b/icons/icon_item/FallingLeavesIcon.png differ diff --git a/icons/icon_item/LumaDespill.png b/icons/icon_item/LumaDespill.png new file mode 100644 index 0000000..edfb10f Binary files /dev/null and b/icons/icon_item/LumaDespill.png differ diff --git a/icons/icon_item/RainMakerIcon.png b/icons/icon_item/RainMakerIcon.png new file mode 100644 index 0000000..5afb741 Binary files /dev/null and b/icons/icon_item/RainMakerIcon.png differ diff --git a/icons/icon_item/ReLighting.png b/icons/icon_item/ReLighting.png new file mode 100644 index 0000000..6d0fc7b Binary files /dev/null and b/icons/icon_item/ReLighting.png differ diff --git a/icons/icon_item/RealHeatDistortion.png b/icons/icon_item/RealHeatDistortion.png new file mode 100644 index 0000000..5b77d9a Binary files /dev/null and b/icons/icon_item/RealHeatDistortion.png differ diff --git a/icons/icon_item/TXFogIcon.png b/icons/icon_item/TXFogIcon.png new file mode 100644 index 0000000..7fb1783 Binary files /dev/null and b/icons/icon_item/TXFogIcon.png differ diff --git a/icons/icon_item/autoComper.png b/icons/icon_item/autoComper.png new file mode 100644 index 0000000..c54c7c8 Binary files /dev/null and b/icons/icon_item/autoComper.png differ diff --git a/icons/icon_item/iBlur.png b/icons/icon_item/iBlur.png new file mode 100644 index 0000000..c57353a Binary files /dev/null and b/icons/icon_item/iBlur.png differ diff --git a/icons/icon_item/nuke2pack.png b/icons/icon_item/nuke2pack.png new file mode 100644 index 0000000..48029dd Binary files /dev/null and b/icons/icon_item/nuke2pack.png differ diff --git a/icons/icon_item/pgBokeh.png b/icons/icon_item/pgBokeh.png new file mode 100644 index 0000000..892c3c0 Binary files /dev/null and b/icons/icon_item/pgBokeh.png differ diff --git a/icons/icon_menu/logo.png b/icons/icon_menu/logo.png new file mode 100644 index 0000000..fba6d6d Binary files /dev/null and b/icons/icon_menu/logo.png differ diff --git a/icons/icon_toolbar/Tangent_Space_Normals.png b/icons/icon_toolbar/Tangent_Space_Normals.png new file mode 100644 index 0000000..52863f0 Binary files /dev/null and b/icons/icon_toolbar/Tangent_Space_Normals.png differ diff --git a/icons/icon_toolbar/Thumbs.db b/icons/icon_toolbar/Thumbs.db new file mode 100644 index 0000000..9202be5 Binary files /dev/null and b/icons/icon_toolbar/Thumbs.db differ diff --git a/icons/icon_toolbar/icon_toolbar_3d.png b/icons/icon_toolbar/icon_toolbar_3d.png new file mode 100644 index 0000000..2dbc5ef Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_3d.png differ diff --git a/icons/icon_toolbar/icon_toolbar_channel.png b/icons/icon_toolbar/icon_toolbar_channel.png new file mode 100644 index 0000000..962d684 Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_channel.png differ diff --git a/icons/icon_toolbar/icon_toolbar_draw.png b/icons/icon_toolbar/icon_toolbar_draw.png new file mode 100644 index 0000000..ad2aaaf Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_draw.png differ diff --git a/icons/icon_toolbar/icon_toolbar_filter.png b/icons/icon_toolbar/icon_toolbar_filter.png new file mode 100644 index 0000000..c773113 Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_filter.png differ diff --git a/icons/icon_toolbar/icon_toolbar_image.png b/icons/icon_toolbar/icon_toolbar_image.png new file mode 100644 index 0000000..6dbbadc Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_image.png differ diff --git a/icons/icon_toolbar/icon_toolbar_keyer.png b/icons/icon_toolbar/icon_toolbar_keyer.png new file mode 100644 index 0000000..bdf5b09 Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_keyer.png differ diff --git a/icons/icon_toolbar/icon_toolbar_light.png b/icons/icon_toolbar/icon_toolbar_light.png new file mode 100644 index 0000000..2109ca3 Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_light.png differ diff --git a/icons/icon_toolbar/icon_toolbar_other.png b/icons/icon_toolbar/icon_toolbar_other.png new file mode 100644 index 0000000..bba9abc Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_other.png differ diff --git a/icons/icon_toolbar/icon_toolbar_other_lighting_magicCarpet.png b/icons/icon_toolbar/icon_toolbar_other_lighting_magicCarpet.png new file mode 100644 index 0000000..c861ff7 Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_other_lighting_magicCarpet.png differ diff --git a/icons/icon_toolbar/icon_toolbar_release.png b/icons/icon_toolbar/icon_toolbar_release.png new file mode 100644 index 0000000..b10a2e3 Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_release.png differ diff --git a/icons/icon_toolbar/icon_toolbar_toolsets.png b/icons/icon_toolbar/icon_toolbar_toolsets.png new file mode 100644 index 0000000..98f7978 Binary files /dev/null and b/icons/icon_toolbar/icon_toolbar_toolsets.png differ diff --git a/libs/__init__.py b/libs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/libs/json_operation.py b/libs/json_operation.py new file mode 100644 index 0000000..83a09cb --- /dev/null +++ b/libs/json_operation.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# title : +# description : +# author :heshuai +# mtine :2015/11/9 +# version : +# usage : +# notes : + +# Built-in modules +import json +import os +# Third-party modules + +# Studio modules + +# Local modules + + +def get_json_data(path): + if os.path.isfile(path): + with open(path, 'r') as f: + data = json.loads(f.read()) + return data + else: + return False + + +def set_json_data(path, data): + with open(path, 'w') as f: + json_data = json.dumps(data) + f.write(json_data) diff --git a/menu.py b/menu.py new file mode 100644 index 0000000..d8402b6 --- /dev/null +++ b/menu.py @@ -0,0 +1,163 @@ +# coding=utf-8 +# author=weijer +# http://www.cgspread.com + +import nuke +import os.path +import config +import sys +import command + + +class NukeMenu(object): + def __init__(self): + self.config = config.nuke_config + """ + add folder path + """ + base_dir = os.path.dirname(__file__) + self.libs_dir = self.replace_path(os.path.join(base_dir, "libs")) + self.luts_dir = self.replace_path(os.path.join(base_dir, "luts")) + self.python_dir = self.replace_path(os.path.join(base_dir, "python")) + self.template_dir = self.replace_path(os.path.join(base_dir, "template")) + + """ + append system path + """ + if not self.python_dir in sys.path: + sys.path.append(self.python_dir) + + """ + add gizmos path + """ + self.gizmos_image_dir = self.replace_path(os.path.join(base_dir, "gizmos/Image")) + self.gizmos_Filter_dir = self.replace_path(os.path.join(base_dir, "gizmos/Filter")) + self.gizmos_channel_dir = self.replace_path(os.path.join(base_dir, "gizmos/Channel")) + self.gizmos_Lighting_dir = self.replace_path(os.path.join(base_dir, "gizmos/Lighting")) + self.gizmos_3D_dir = self.replace_path(os.path.join(base_dir, "gizmos/3D")) + self.gizmos_Keyer_dir = self.replace_path(os.path.join(base_dir, "gizmos/Keyer")) + self.gizmos_ToolSet_dir = self.replace_path(os.path.join(base_dir, "gizmos/ToolSet")) + self.gizmos_3D_Tangent_dir = self.replace_path(os.path.join(base_dir, "gizmos/3D/Tangent_Space_Normals")) + nuke.pluginAddPath(self.gizmos_image_dir) + nuke.pluginAddPath(self.gizmos_channel_dir) + nuke.pluginAddPath(self.gizmos_Filter_dir) + nuke.pluginAddPath(self.gizmos_Lighting_dir) + nuke.pluginAddPath(self.gizmos_3D_dir) + nuke.pluginAddPath(self.gizmos_Keyer_dir) + nuke.pluginAddPath(self.gizmos_ToolSet_dir) + nuke.pluginAddPath(self.gizmos_3D_Tangent_dir) + + """ + add icons path + """ + self.icons_menu_dir = self.replace_path(os.path.join(base_dir, "icons/icon_menu")) + self.icons_toolbar_dir = self.replace_path(os.path.join(base_dir, "icons/icon_toolbar")) + self.icons_item_dir = self.replace_path(os.path.join(base_dir, "icons/icon_item")) + nuke.pluginAddPath(self.icons_menu_dir) + nuke.pluginAddPath(self.icons_toolbar_dir) + nuke.pluginAddPath(self.icons_item_dir) + + def create_menu(self, name, icon_name): + """ + create nuke menu + :param name: + :param icon: + :return: + """ + tool_bar = nuke.menu('Nodes') + menu = tool_bar.addMenu(name, icon=icon_name) + return menu + + def create_tools(self, menu, type, name, command, shortcut, icon_name): + """ + create menu tools + :param type: + :param menu: + :param name: + :param command: + :param shortcut: + :param icon: + :return: + """ + if type == "python": + menu.addCommand(name, command, shortcut, icon=icon_name) + elif type == "gizmo": + menu.addCommand(name, "nuke.createNode(\"%s\")" % command, icon=icon_name) + elif type == "toolbar": + menu.addCommand(name, icon=icon_name) + + def add_bar_tools(self): + """ + add nuke menu tools + :return: + """ + toolbar_config = self.config["toolbar"] + for menus in toolbar_config: + # first create tool menu + menu_icon_name = toolbar_config[menus]['icon'] + cmenu = self.create_menu(menus, menu_icon_name) + list = toolbar_config[menus]['list'] + for tools in list: + # second add menu list + if tools["icon"]: + tools_icon = tools["icon"] + else: + tools_icon = "" + + print tools_icon + self.create_tools(cmenu, + tools["type"], + tools["name"], + tools["command"], + tools["shortcut"], + tools_icon + ) + + def create_menu_tools(self, toolMenu, name, command): + """ + create_menu_tools + :param toolMenu: + :param name: + :param command: + :return: + """ + toolMenu.addCommand(name, command) + + def add_menu_tools(self): + """ + add_menu_tools + :return: + """ + menubar = nuke.menu("Nuke") + toolMenu = menubar.addMenu('&Tools') + toolMenu_config = self.config["toolMenu"] + for tools in toolMenu_config: + self.create_menu_tools(toolMenu, + toolMenu_config[tools]["name"], + toolMenu_config[tools]["command"] + ) + + def replace_path(self, path): + """ + replace path + :param path: + :return: + """ + final_path = path.replace('\\', '/') + return final_path + + def knob_show_frame(self): + """ + show frame range on knob + :return: + """ + nuke.knobDefault("Read.label", + " Frame range : " + "[value first] - [value last] ") + + +if __name__ == '__main__': + run = NukeMenu() + run.add_bar_tools() + run.add_menu_tools() + run.knob_show_frame() diff --git a/python/Channel/PreCompForArnold.py b/python/Channel/PreCompForArnold.py new file mode 100644 index 0000000..0073c8c --- /dev/null +++ b/python/Channel/PreCompForArnold.py @@ -0,0 +1,120 @@ +import nuke + + +def preCompForArnold(): + # set a ordered list of input layer + layerlist = ['indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection', + 'refraction', + 'AO', 'depth', 'MV', 'alpha'] + gradelayers = ['indirect_diffuse', 'direct_diffuse', 'indirect_specular', 'direct_specular', 'reflection', + 'refraction', + 'AO'] + # Get The Layers Of Selected Read Node + + orderedmerge = [] + + Read = nuke.selectedNode() + layers = nuke.layers(Read) + + for i in layerlist: + for n in layers: + if i == n: + orderedmerge.append(i) + + for o in orderedmerge: + for l in layers: + if l == o: + layers.remove(l) + + layers.remove('rgba') + layers.remove('rgb') + orderedshow = layers + + ################Create Shuffle######################################## + + x = Read['xpos'].getValue() + y = Read['ypos'].getValue() + + shufflegroup = [] + gradegroup = [] + dotYgroup = [] + mergegroup = [] + for k in orderedmerge: + shuffle = nuke.nodes.Shuffle(name=k, postage_stamp=1, note_font_size=25) + shuffle.setInput(0, Read) + shuffle.knob('in').setValue(k) + num = int(orderedmerge.index(k)) + shuffle.setXYpos(int(x + 150 * num), int(y + 250)) + shuffleX = shuffle['xpos'].getValue() + shuffleY = shuffle['ypos'].getValue() + shufflegroup.append(shuffle) + + ###Create Grade### + if num < 7: + gradenode = nuke.nodes.Grade(name=k, note_font_size=15) + gradenode.setInput(0, shuffle) + gradegroup.append(gradenode) + else: + pass + + ###Create Dot##### + + if num >= 1 and num < 7: + dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25) + dot.setInput(0, gradenode) + dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num)) + dotX = dot['xpos'].getValue() + dotY = dot['ypos'].getValue() + dotYgroup.append(dotY) + + elif num > 6: + dot = nuke.nodes.Dot(name=k, label=k, note_font_size=25) + dot.setInput(0, shuffle) + dot.setXYpos(int(shuffleX + 34), int(shuffleY + 180 * num)) + dotX = dot['xpos'].getValue() + dotY = dot['ypos'].getValue() + dotYgroup.append(dotY) + + ###Create Merge#### + + if num < 1: + pass + elif num > 0 and num < 2: + merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[gradegroup[0], dot], note_font_size=15) + merge.setXYpos(int(x), int(dotY - 6)) + mergegroup.append(merge) + elif num > 1 and num < 6: + merge = nuke.nodes.Merge(name=k, operation='plus', mix=1, inputs=[mergegroup[num - 2], dot], + note_font_size=15) + mergegroup.append(merge) + merge.setXYpos(int(x), int(dotY - 6)) + elif num > 5 and num < 7: + merge = nuke.nodes.Merge(name=k, operation='multiply', mix=0.15, inputs=[mergegroup[num - 2], dot], + note_font_size=15) + mergegroup.append(merge) + merge.setXYpos(int(x), int(dotY - 6)) + elif num > 6 and num < 8: + copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='depth.Z', inputs=[mergegroup[num - 2], dot], + note_font_size=15) + mergegroup.append(copy) + copy.setXYpos(int(x), int(dotY - 14)) + elif num > 7 and num < 9: + copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='MV.red', from1='rgba.green', to1='MV.green', + inputs=[mergegroup[num - 2], dot], note_font_size=15) + mergegroup.append(copy) + copy.setXYpos(int(x), int(dotY - 26)) + elif num > 8 and num < 10: + copy = nuke.nodes.Copy(name=k, from0='rgba.red', to0='rgba.alpha', inputs=[mergegroup[num - 2], dot], + note_font_size=15) + mergegroup.append(copy) + copy.setXYpos(int(x), int(dotY - 14)) + ###Create show Layers#### + + for element in orderedshow: + num += 1 + shuffle = nuke.nodes.Shuffle(name=element, postage_stamp=1, note_font_size=25) + shuffle.setInput(0, Read) + shuffle.knob('in').setValue(element) + shuffle.setXYpos(int(x + 150 * num), int(y + 250)) + + nuke.connectViewer(0, mergegroup[-1]) diff --git a/python/Channel/RenderLayer.py b/python/Channel/RenderLayer.py new file mode 100644 index 0000000..13c57a6 --- /dev/null +++ b/python/Channel/RenderLayer.py @@ -0,0 +1,142 @@ +import nuke + +def RenderLayer(): + RenderLayernode = nuke.nodes.NoOp(name='RenderLayer') + knob_tk = nuke.Tab_Knob('User', 'RenderLayer') + RenderLayernode.addKnob(knob_tk) + + knob_fk = nuke.File_Knob('filename', 'FileName') + RenderLayernode.addKnob(knob_fk) + + knob_pk = nuke.Pulldown_Knob('choosefiletype', 'chooseFileType') + + knob_ek1 = nuke.Enumeration_Knob('filetype', 'FileType', ['tiff', 'targa', 'jpeg', 'png']) + + RenderLayernode.addKnob(knob_pk) + RenderLayernode.addKnob(knob_ek1) + + # tiff + knob_ek_tiff1 = nuke.Enumeration_Knob('datatypetiff', 'DataType', ['8 bit', '16 bit', '32 bit float']) + knob_ek_tiff2 = nuke.Enumeration_Knob('compressiontiff', 'Compression', ['none', 'PackBits', 'LZW', 'Deflate']) + RenderLayernode.addKnob(knob_ek_tiff1) + RenderLayernode.addKnob(knob_ek_tiff2) + knob_ek_tiff1.setVisible(False) + knob_ek_tiff2.setVisible(False) + # tga + knob_ek_tga = nuke.Enumeration_Knob('compressiontga', 'Compression', ['none', 'RLE']) + RenderLayernode.addKnob(knob_ek_tga) + knob_ek_tga.setVisible(False) + # jpeg + knob_dk_jpeg1 = nuke.Double_Knob('jpeg_quality', 'quality') + knob_dk_jpeg1.setValue(1) + knob_ek_jpeg2 = nuke.Enumeration_Knob('jpeg_sub_sampling', 'sub-sampling', ['4:1:1', '4:2:2', '4:4:4']) + RenderLayernode.addKnob(knob_dk_jpeg1) + RenderLayernode.addKnob(knob_ek_jpeg2) + knob_dk_jpeg1.setVisible(False) + knob_ek_jpeg2.setVisible(False) + # png + knob_ek_png = nuke.Enumeration_Knob('datatypepng', 'DataType', ['8 bit', '16 bit']) + RenderLayernode.addKnob(knob_ek_png) + knob_ek_png.setVisible(False) + + knob_pk.setValues({ + 'chosefiletype/tiff': 'nuke.thisNode().knob("filetype").setValue("tiff");nuke.thisNode().knob("datatypetiff").setVisible(True);nuke.thisNode().knob("compressiontiff").setVisible(True);nuke.thisNode().knob("compressiontga").setVisible(False);nuke.thisNode().knob("jpeg_quality").setVisible(False);nuke.thisNode().knob("jpeg_sub_sampling").setVisible(False);nuke.thisNode().knob("datatypepng").setVisible(False)', + + 'targa': 'nuke.thisNode().knob("filetype").setValue("targa");nuke.thisNode().knob("datatypetiff").setVisible(False);nuke.thisNode().knob("compressiontiff").setVisible(False);nuke.thisNode().knob("compressiontga").setVisible(True);nuke.thisNode().knob("jpeg_quality").setVisible(False);nuke.thisNode().knob("jpeg_sub_sampling").setVisible(False);nuke.thisNode().knob("datatypepng").setVisible(False)', + + 'jpeg': 'nuke.thisNode().knob("filetype").setValue("jpeg");nuke.thisNode().knob("datatypetiff").setVisible(False);nuke.thisNode().knob("compressiontiff").setVisible(False);nuke.thisNode().knob("compressiontga").setVisible(False);nuke.thisNode().knob("jpeg_quality").setVisible(True);nuke.thisNode().knob("jpeg_sub_sampling").setVisible(True);nuke.thisNode().knob("datatypepng").setVisible(False) ', + + 'png': 'nuke.thisNode().knob("filetype").setValue("png");nuke.thisNode().knob("datatypetiff").setVisible(False);nuke.thisNode().knob("compressiontiff").setVisible(False);nuke.thisNode().knob("compressiontga").setVisible(False);nuke.thisNode().knob("jpeg_quality").setVisible(False);nuke.thisNode().knob("jpeg_sub_sampling").setVisible(False);nuke.thisNode().knob("datatypepng").setVisible(True)'}) + + knob_line = nuke.Text_Knob('') + RenderLayernode.addKnob(knob_line) + + knob_py = nuke.PyScript_Knob('createwrite', 'CreateWrite') + RenderLayernode.addKnob(knob_py) + + knob_py.setCommand(""" + layerlist = nuke.layers(nuke.thisNode()) + print layerlist + for i in layerlist: + if i == 'rgb': + print i + pass + else: + node = nuke.nodes.Shuffle() + node.setInput(0,nuke.thisNode()) + node.knob('in').setValue(i) + node.knob('name').setValue(i) + node.knob('postage_stamp').setValue(1) + node.knob('note_font_size').setValue(16) + filename = nuke.thisNode().knob('filename').value() + i + '.####.' + nuke.thisNode().knob('filetype').value() + write = nuke.nodes.Write() + write.setInput(0,node) + write.knob('file').setValue(filename) + write.knob('file_type').setValue(nuke.thisNode().knob('filetype').value()) + if nuke.thisNode().knob('filetype').value() == 'tiff': + write.knob('datatype').setValue(nuke.thisNode().knob('datatypetiff').value()) + write.knob('compression').setValue(nuke.thisNode().knob('compressiontiff').value()) + elif nuke.thisNode().knob('filetype').value() == 'targa': + write.knob('compression').setValue(nuke.thisNode().knob('compressiontga').value()) + elif nuke.thisNode().knob('filetype').value() == 'jpeg': + write.knob('_jpeg_quality').setValue(nuke.thisNode().knob('jpeg_quality').value()) + write.knob('_jpeg_sub_sampling').setValue(nuke.thisNode().knob('jpeg_sub_sampling').value()) + else: + write.knob('datatype').setValue(nuke.thisNode().knob('datatypepng').value()) + write.knob('beforeRender').setValue(''' + if os.path.exists(os.path.dirname(nuke.thisNode().knob('file').value()))==True: + print nuke.thisNode().knob('file').value() + else: + os.makedirs(os.path.dirname(nuke.thisNode().knob('file').value()))''') + write.knob('afterRender').setValue(''' + + inputx = nuke.thisNode()['xpos'].value() + inputy = nuke.thisNode()['ypos'].value() + filelist = nuke.getFileNameList(os.path.dirname(nuke.thisNode().knob('file').value())) + writename = os.path.basename(nuke.thisNode().knob('file').value()) + + for file in filelist: + #print file + if file.find('.db') < 0: + if file.find(' ') > 0 and file.find('-') > 0: + filename = file.split(' ')[0] + if filename.find('#') > 0: + number = filename.count('#') + place = filename.find('#') + oldstr = filename[place:place + number] + filename = filename.replace(oldstr,'%0'+ str(number) + 'd') + print filename + if filename == writename: + firstframe=file.split(' ')[-1].split("-")[0] + lastframe=file.split(' ')[-1].split("-")[1] + newnode = nuke.nodes.Read(file=os.path.dirname(nuke.thisNode().knob('file').value()) + '/' + writename,first=firstframe,last=lastframe,) + newnode.setXYpos(int(inputx),int(inputy)+50) + else: + pass + else: + filename = file + if filename == writename: + firstframe=filename.split('.')[-2] + lastframe=filename.split('.')[-2] + newnode = nuke.nodes.Read(file=os.path.dirname(nuke.thisNode().knob('file').value()) + '/' + writename,first=firstframe,last=lastframe,) + newnode.setXYpos(int(inputx),int(inputy)+50) + else: + pass + + + ''') + """ + ) + + knob_doc = nuke.PyScript_Knob('document', 'HelpDocument') + RenderLayernode.addKnob(knob_doc) + + knob_doc.setCommand("""nuke.message('''USE STEP + 1.connect this node to Read node + 2.set up your render path at the FileName + 3.choose render file Type + 4.choose the sub setting + 5.click createwrite button + ''') + """ + ) diff --git a/python/Channel/__init__.py b/python/Channel/__init__.py new file mode 100644 index 0000000..758bf67 --- /dev/null +++ b/python/Channel/__init__.py @@ -0,0 +1,2 @@ +# coding=utf-8 +# author=weijer \ No newline at end of file diff --git a/python/Channel/autoComper.py b/python/Channel/autoComper.py new file mode 100644 index 0000000..cf291cd --- /dev/null +++ b/python/Channel/autoComper.py @@ -0,0 +1,321 @@ +####################################################################################################### +# autoComper V1.2 - Date: 17.09.2011 - Created by Jan Oberhauser - jan.oberhauser@gmail.com # +# Creates a ready to start script on the push of a button # +# Check for a updateted Version at http://janoberhauser.gute-filme-enden-nie.de # +####################################################################################################### + +# How to Comp the different Channels +# ------------------------------------- +# EXPLANATION: +# Here you can define the Channels/Layers/Files (from now on just Channel) to look for and their order. You dont have enter the full name of the channel if its +# called "Thatever_Diffuse_WhatDoIKnow" it is enough to just put "diffuse" (always Lower-Case) in the Channel then its gonna find it. The Scripts find them if they +# are part of the Channel-Name or if it just has one Channel it look also for the File-Name. If you have more then one Channel with the same Name-Part you can just use the +# "notCompNodes"-Variable to exclude Channels. It is always just the Channel to comp and the Parent in Lower-Case (except the START which has to be in Capitals) +# The Script has two modes. Either it just ignores the defined Comp-Channels if they are not found, or it creates a not connected Shuffle and Merge anyway +# to connect them later with other Nodes. You can switch the Modes with the Variable "createNotFoundChannels". +# and then hock-up the other Readers to the shuffels by yourself. +# DESCRIPTION: compNodes = {"FIRST_CHANNEL_NAME":"START", "SECOND_CHANNEL_NAME":"PARENT_CHANNEL", "THIRD_CHANNEL_NAME":"PARENT_CHANNEL", .., ..} +# EXAMPLE: starts with the "paint"-Channel, then "diffuse", then "specular", then "refl", then "occlusion", then depth +compNodes = {"paint": "START", "indirect_diffuse": "paint", "direct_diffuse": "indirect_diffuse", + "indirect_specular": "direct_diffuse", "direct_specular": "indirect_specular", "refl": "direct_specular", + "refr": "refl", "AO": "refr", "depth": "AO"} + +# Now you can define which Node shall be created and connected with that found Channel and also which values it should have. So you can create any node Nuke +# offers. A Merge-Node with the Operation and the Mix-Value, a Copy-Node with the Copy-Channels, ... , .. or whatever +# You can set as many Start-Values as you want, just seperate them by a ";" +# DESCRIPTION: compNodeOperations = {"CHANNELNAME":"NODENAME:KNOBNAME=VALUE;KNOBNAME=VALUE;KNOBNAME=VALUE", "CHANNELNAME":"NODENAME:KNOBNAME=VALUE", "CHANNELNAME":"NODENAME:", .., ..} +compNodeOperations = {"direct_diffuse": "Merge:operation='plus';mix=1", + "indirect_diffuse": "Merge:operation='plus';mix=1", + "direct_specular": "Merge:operation='plus';mix=1", + "indirect_specular": "Merge:operation='plus';mix=1", "refl": "Merge:operation='plus';mix=1", + "refr": "Merge:operation='plus';mix=1", "AO": "Merge:operation='mult';mix=0.15", + "depth": "Copy:from0='rgba.red';to0='depth.Z'"} + +# With this both variables you can create more Nodes. The Variable "addNodesBeforeComped" defines Nodes which should be created BEFORE the Channel gets +# connected with the Main-Tree. So if for example a Grade node for the depth-Channel or a ColorCorrection for the paint +# The Variable "addNodesAfterComped" defines Nodes which are created after the Channel is connected with the Main-Tree. So for Example a ZBlur-Node for the +# depth-Channel. The Syntax is the same like in the "compNodeOperations" above. I hope it is not to confusing! Probably it is the best just to select a few Nodes +# and start the Script. Then you can easily see what is created and then it is not complicated any more. And if I am wrong with that just write me a mail. +# It is also possible to create more then just one Node. All you have to do then is to sperate them with "|". Then the Nodes will get created in the same +# order you defined them. An example is the diffuse Channel bellow. It creates an Unpremult, Grade and then a Premult Node before it merges it in the Main-Tree. +addNodesBeforeComped = {"paint": "ColorCorrect:", "diffuse": "Unpremult:|Grade:|Premult:", "specular": "Grade:", + "refl": "Grade:", "refr": "Grade:", "AO": "Grade:", "depth": "Grade:"} +addNodesAfterComped = {"depth": "ZBlur:"} + +# Which Channels should not be found +# ------------------------------------- +# EXPLANATION: +# If you have for example more Channels with the same name-parts like "paint", "rotopaint", "carpaint" then you can just type in the +# channls which should not be found +# DESCRIPTION: notCompNodes = {"FIRST_LAYER":"NOT_TO_BE_FOUND_1:NOT_TO_BE_FOUND_2:NOT_TO_BE_FOUND_3", "SECOND_LAYER":"NOT_TO_BE_FOUND_1", ..., } +notCompNodes = {"paint": "rotopaint:carpaint"} + +# Create Not-Found-Channels +# EXPLANATION: +# If this is set to True then it created for each Channel in compNodes a Shuffle, NoOp and Merge Node even if it is not found. This can be useful if +# this Channels come from different Files then the selected ones. +createNotFoundChannels = False + +# Align the readers automatically +autoAlignReaders = True +# Create the NoOp-Node beween the Shuffle and the Merge? +createNoOpNode = True +# Create the Dot-Node beween the NoOp and the Merge? +createDotNode = True +# Show Dot-Label? +showDotLabel = True + +# Color of the NoOp-Nodes after the Shuffle-Node +noOpTileColor = 0x9b00ff + +# Set the Node-Positon-Offset +nodeXOffset = 180 +nodeYOffset = 150 + +####################################################################################################### +# # +# NO CHANGES FROM HERE: (OR JUST IF YOU KNOW WHAT YOU ARE DOING) # +# # +####################################################################################################### +import nuke + + +def getParentNode(layer, compNodes, mergeLayer): + iteration = 0 + parentNode = layer + while True: + parentNode = compNodes[parentNode] + if parentNode in mergeLayer: + break + + if parentNode == 'START': + break + + iteration += 1 + if iteration > 20: + print "ERROR:\nPLEASE CHECK IF THE NAMES OF THE PARENT-NAMES FIT TO THE LAYER-NAMES" + parentNode = -1 + break + + return parentNode + + +def calculateAdditionalYOffset(additionalYOffset, nodeToAddCount, nodeYOffset, nodeNumber): + if nodeToAddCount * 40 > nodeYOffset: + if nodeNumber > 1: + if nodeNumber == 2: + additionalYOffset = 0 + additionalYOffset += (nodeToAddCount * 40) - (nodeYOffset) - ((nodeNumber - 1) * nodeYOffset) + else: + additionalYOffset += (nodeToAddCount * 40) - (nodeYOffset) + return additionalYOffset + + +def createNode(layer, nodeOperations, xPos, yPos): + operationNode = nodeOperations.split(':') + operationParameters = operationNode[1].split(';') + operationNode = operationNode[0] + + exec ('thisNode = nuke.nodes.' + str(operationNode) + '(name="' + operationNode + ' ' + str(layer) + '")') + thisNode.setXYpos(int(xPos), int(yPos)) + + for parameter in operationParameters: + if parameter != '': + parameter = parameter.split('=') + exec ("thisNode['" + parameter[0] + "'].setValue(" + parameter[1] + ")") + + return thisNode + + +def autoComper(): + allSelectedNodes = nuke.selectedNodes() + mergeLayer = {} + mergeLayerInv = {} + layerHasReader = {} + nodesOrdered = [] + allLayers = {} + layerType = {} + xPosMin = 999999 + yPosMin = 999999 + additionalYOffset = 0 + additionalYOffsetFirst = 0 + + for object in compNodes: + if compNodes[object] == 'START': + nodesOrdered.append(object) + break + + count = 0 + for object in compNodes: + for object2 in compNodes: + childNode = compNodes[object2] + if childNode == nodesOrdered[count]: + nodesOrdered.append(object2) + count += 1 + break + + for thisNode in allSelectedNodes: + thisLayers = {} + allChannels = thisNode.channels() + for channel in allChannels: + thisData = str(channel.split('.')[0]) + thisLayers.update({thisData: ''}) + + if len(thisLayers) == 1 and 'rgba' in thisLayers: + fileName = thisNode['file'].getValue() + fileName = fileName.split('/') + fileName = fileName[len(fileName) - 1] + fileName = fileName.split('.')[0] + allLayers.update({fileName: thisNode}) + layerType.update({fileName: 'file'}) + else: + for layer in thisLayers: + allLayers.update({layer: thisNode}) + layerType.update({layer: 'channel'}) + + for layer in allLayers: + layerLower = layer.lower() + + if int(allLayers[layer]['xpos'].getValue()) < xPosMin: + xPosMin = allLayers[layer]['xpos'].getValue() + if int(allLayers[layer]['ypos'].getValue()) < yPosMin: + yPosMin = allLayers[layer]['ypos'].getValue() + + for compChannel in compNodes: + compThis = True + if layerLower.find(compChannel, 0, len(layerLower)) > -1: + if compChannel in notCompNodes: + notNodes = notCompNodes[compChannel].split(':') + for notNode in notNodes: + if layerLower.find(notNode, 0, len(layer)) > -1: + compThis = False + break + + if compThis == True: + mergeLayer.update({compChannel: layer}) + mergeLayerInv.update({layer: compChannel}) + layerHasReader.update({layer: ''}) + + if createNotFoundChannels == True: + for node in nodesOrdered: + if node not in allLayers: + if node not in mergeLayer: + mergeLayer.update({node: node}) + mergeLayerInv.update({node: node}) + newAllLayers = [] + for node in nodesOrdered: + if node in mergeLayer: + newAllLayers.append(mergeLayer[node]) + for layer in allLayers: + if layer not in newAllLayers: + newAllLayers.append(layer) + + mergeCount = -1 + nodeNumber = -1 + + for layer in newAllLayers: + layerLower = layer.lower() + nodeNumber += 1 + layerOriginal = layer + if layer in mergeLayerInv: + layer = mergeLayerInv[layer] + + if len(allSelectedNodes) > 1 and autoAlignReaders == True: + if layerOriginal in allLayers: + allLayers[layerOriginal].setXYpos(int(nodeNumber * nodeXOffset + xPosMin), int(yPosMin)) + + if layerOriginal in layerType: + if layerType[layerOriginal] == 'channel': + exec ( + str(layer) + ' = nuke.nodes.Shuffle(name = "' + str(layerOriginal) + '_Shuffel", postage_stamp = True)') + eval(layer).setXYpos(int(nodeNumber * nodeXOffset + xPosMin), int(yPosMin + 2 * nodeYOffset)) + if layerOriginal in allLayers: + eval(layer).setInput(0, allLayers[layerOriginal]) + eval(layer)['in'].setValue(layerOriginal) + + if createNoOpNode: + noOpNode = nuke.nodes.NoOp(name=layerOriginal, tile_color=noOpTileColor) + noOpNode.setXYpos(int(nodeNumber * nodeXOffset + xPosMin), int(yPosMin + 3 * nodeYOffset)) + if layerOriginal in layerType: + if layerType[layerOriginal] == 'file': + noOpNode.setInput(0, allLayers[layerOriginal]) + else: + noOpNode.setInput(0, eval(layer)) + else: + if layerOriginal in layerType: + if layerType[layerOriginal] == 'file': + noOpNode = allLayers[layerOriginal] + else: + noOpNode = eval(layer) + + exec (layer + "noOpNode = noOpNode") + + if layer in addNodesBeforeComped: + nodeToAddCount = 0 + nodeBefore = eval(str(layer) + "noOpNode") + + for nodeToAdd in addNodesBeforeComped[layer].split('|'): + xPos = nodeNumber * nodeXOffset + xPosMin + yPos = yPosMin + 4 * nodeYOffset + (nodeToAddCount * 40) + noOpNode = createNode(layer, nodeToAdd, xPos, yPos) + noOpNode.setInput(0, nodeBefore) + + nodeToAddCount += 1 + nodeBefore = noOpNode + + additionalYOffset = calculateAdditionalYOffset(additionalYOffset, nodeToAddCount, nodeYOffset, nodeNumber) + + if layer in mergeLayer: + exec (layer + " = noOpNode") + exec (layer + "Node = noOpNode") + + mergeCount += 1 + + parentNode = getParentNode(layer, compNodes, mergeLayer) + + if parentNode != 'START': + xPos = xPosMin + yPos = mergeCount * nodeYOffset + yPosMin + 4 * nodeYOffset + additionalYOffset + additionalYOffsetFirst + thisNode = createNode(layer, compNodeOperations[layer], xPos, yPos) + + exec (layer + "Node = thisNode") + + if mergeCount > 0 and createDotNode == True: + # Create Dot-Nodes + dot = nuke.nodes.Dot(note_font_size=20) + if showDotLabel: + dot['label'].setValue(' ' + str(layerOriginal)) + dot.setXYpos(int(eval(layer)['xpos'].getValue() + 35), int(thisNode['ypos'].getValue() + 3)) + dot.setInput(0, eval(layer)) + exec (layer + " = dot") + + if layer in addNodesAfterComped: + nodeToAddCount = 1 + nodeBefore = eval(str(layer) + "Node") + + for nodeToAdd in addNodesAfterComped[layer].split('|'): + xPos = xPosMin + yPos = mergeCount * nodeYOffset + yPosMin + 4 * nodeYOffset + additionalYOffset + additionalYOffsetFirst + ( + nodeToAddCount * 40) + thisNode = createNode(layer, nodeToAdd, xPos, yPos) + thisNode.setInput(0, nodeBefore) + + nodeToAddCount += 1 + nodeBefore = thisNode + + additionalYOffsetFirst = calculateAdditionalYOffset(additionalYOffsetFirst, nodeToAddCount, + nodeYOffset, 1) + + exec (layer + "NodeAdd = thisNode") + + for layer in mergeLayer: + parentNode = getParentNode(layer, compNodes, mergeLayer) + + if parentNode != 'START': + if parentNode in addNodesAfterComped: + parentNode = parentNode + "NodeAdd" + else: + parentNode = parentNode + "Node" + + exec (layer + "Node.setInput(1, " + layer + ")") + exec (layer + "Node.setInput(0, " + str(parentNode) + ")") diff --git a/python/ToolSet/ListShuffle.py b/python/ToolSet/ListShuffle.py new file mode 100644 index 0000000..c3c6c23 --- /dev/null +++ b/python/ToolSet/ListShuffle.py @@ -0,0 +1,18 @@ +import nuke + + +def shuffle(): + for selected_node in nuke.selectedNodes(): + if selected_node.Class() == 'Read': + all_channels = selected_node.channels() + all_channels = list(set([i.split('.')[0] for i in all_channels])) + for channel in all_channels: + shuffle_node = nuke.createNode('Shuffle', inpanel=False) + shuffle_node['name'].setValue(channel+'_'+selected_node['name'].getValue()) + shuffle_node['in'].setValue(channel) + shuffle_node.setInput(0, selected_node) + shuffle_node['postage_stamp'].setValue(1) + + +def main(): + shuffle() \ No newline at end of file diff --git a/python/ToolSet/__init__.py b/python/ToolSet/__init__.py new file mode 100644 index 0000000..95b6fb6 --- /dev/null +++ b/python/ToolSet/__init__.py @@ -0,0 +1,13 @@ +# coding=utf-8 +# author=weijer + +import presetBackdrop +import browseDir +import single_to_sequence +import switch_shot +import correct_error_read_node +import ListShuffle +import replace_read_node_path +import toggle_input +import toggle_stamp + diff --git a/python/ToolSet/browseDir.py b/python/ToolSet/browseDir.py new file mode 100644 index 0000000..b0b109a --- /dev/null +++ b/python/ToolSet/browseDir.py @@ -0,0 +1,84 @@ +# Browse Directory v1.0, 2011-11-12 +# by Fredrik Averpil, fredrik.averpil [at] gmail.com, www.averpil.com/fredrik +# +# +# Usage: +# a) select any Write node or Read node and run browseDirByNode() +# b) open any path via command browseDir(path) +# +# Example of menu.py: +# import browseDir +# nuke.menu( 'Nuke' ).addCommand( 'My file menu/Browse/Node\'s file path', "browseDir.browseDirByNode()", 'shift+b' ) +# nuke.menu( 'Nuke' ).addCommand( 'My file menu/Browse/Scripts folder', "browseDir.browseDir('scripts')" ) +# +# And if your folder structure looks like this - +# serverpath/ ... sequence_folder/shot_folder/nuke/scripts/ +# you should be able to use the following as well: +# nuke.menu( 'Nuke' ).addCommand( 'My file menu/Browse/Scripts folder', "browseDir.browseDir('sequence')" ) +# nuke.menu( 'Nuke' ).addCommand( 'My file menu/Browse/Scripts folder', "browseDir.browseDir('shot')" ) +# +# + + + +import nuke +import sys +import os +import re + + +def launch(directory): + # Open folder + print('Attempting to open folder: ' + directory) + if os.path.exists(directory): + if (sys.platform == 'win32'): + os.system('start ' + directory) + elif (sys.platform == 'darwin'): + os.system('open ' + directory) + else: + nuke.message('Path does not exist:\n' + directory) + + +def browseDirByNode(): + error = False + + selectedNode = nuke.selectedNode() + + try: + selectedNodeFilePath = nuke.callbacks.filenameFilter(selectedNode['file'].getValue()) + + except ValueError: + error = True + nuke.message('No node selected.') + except NameError: + error = True + nuke.message('You must select a Read node or a Write node.') + + if error == False: + filePathSplitted = str.split(selectedNodeFilePath, '/') + + dirFromNode = '' + for i in range(0, (len(filePathSplitted) - 1)): + dirFromNode = dirFromNode + filePathSplitted[i] + '/' + + regcombile_r = re.compile('(//192.168.0.243/nas/)\S+') + regcombile_t = re.compile('(//192.168.0.250/tvcServe/)\S+') + matchgroup_r = regcombile_r.match(dirFromNode) + matchgroup_t = regcombile_t.match(dirFromNode) + print matchgroup_r, matchgroup_t + + if matchgroup_r: + dirFromNode_new = re.sub("//192.168.0.243/nas/", "R:/", dirFromNode) + elif matchgroup_t: + dirFromNode_new = re.sub("//192.168.0.250/tvcServe/", "T:/", dirFromNode) + else: + dirFromNode_new = dirFromNode + + print dirFromNode + # selectedNode['file'].setValue(dirFromNode_new) + + + # Debug + # print('Directory: ' + dirFromNode) + + launch(dirFromNode_new) diff --git a/python/ToolSet/correct_error_read_node.py b/python/ToolSet/correct_error_read_node.py new file mode 100644 index 0000000..7232806 --- /dev/null +++ b/python/ToolSet/correct_error_read_node.py @@ -0,0 +1,77 @@ +import nuke +import os +import re + + +EXTS = ['.mov', '.jpg', '.tga', '.exr', '.jpeg', '.iff', '.tiff'] + + +def get_sequence(folder): + if os.path.isdir(folder): + all_frames = [os.path.join(folder, frame).replace('\\', '/') + for frame in os.listdir(folder) + if os.path.isfile(os.path.join(folder, frame))] + try: + all_frames.remove('Thumb.db') + except:pass + return all_frames + + +def get_frame_numbers(frame_list): + frame_numbers = [int(re.findall('\.(\d{4})', frame)[0]) + for frame in frame_list + if re.findall('\.(\d{4})', frame)] + return frame_numbers + + +def set_read_node_frame(node, first, last): + node['first'].setValue(first) + node['last'].setValue(last) + node['origfirst'].setValue(first) + node['origlast'].setValue(last) + + +def main(): + for node in nuke.allNodes('Read'): + file_name = node['file'].getValue() + + if os.path.isfile(file_name): + if os.path.splitext(file_name)[-1] not in EXTS: + nuke.delete(node) + + if '####' in file_name or '%04d' in file_name: + folder = os.path.dirname(file_name) + frames = get_sequence(folder) + frame_numbers = list() + if frames: + if '####' in file_name: + pattern = re.sub('####', '(\d{4})', file_name) + else: + pattern = re.sub('%04d', '(\d{4})', file_name) + for frame in frames: + if re.match(pattern, frame): + frame_number = re.match(pattern, frame).group(1) + frame_numbers.append(frame_number) + if frame_numbers: + frame_numbers.sort() + first_frame = int(frame_numbers[0]) + last_frame = int(frame_numbers[-1]) + set_read_node_frame(node, first_frame, last_frame) + else: + nuke.delete(node) + + if os.path.isdir(file_name): + for root, dir, files in os.walk(file_name): + if '.mayaSwatches' not in root: + if files: + frames = [os.path.join(root, file).replace('\\', '/') + for file in files + if os.path.splitext(file)[-1] in EXTS] + if frames: + read_node_file = re.sub('\.\d{4}', '.%04d', frames[0]) + read_node = nuke.nodes.Read(file=read_node_file) + frame_numbers = get_frame_numbers(frames) + frame_numbers.sort() + if frame_numbers: + set_read_node_frame(read_node, frame_numbers[0], frame_numbers[1]) + nuke.delete(node) \ No newline at end of file diff --git a/python/ToolSet/presetBackdrop.py b/python/ToolSet/presetBackdrop.py new file mode 100644 index 0000000..948c7a8 --- /dev/null +++ b/python/ToolSet/presetBackdrop.py @@ -0,0 +1,95 @@ +# Preset Backdrop 1.2 +# Copyright (c) 2011 Victor Perez. All Rights Reserved. +### Add to menu.py ### +# import presetBackdrop +# VictorMenu = nuke.menu('Nuke').addMenu('V!ctor') +# VictorMenu.addCommand('Preset Backdrop', 'presetBackdrop.presetBackdrop()', 'ctrl+alt+b') +### + +import nuke, colorsys, operator + + +### Preset Backdrop +def presetBackdrop(): + customPreset = None + sep = '"' + presets = ['Main', 'CG', 'Key', 'Output', 'Roto'] + p = nuke.Panel('Preset Backdrop') + p.addEnumerationPulldown('Preset', ' '.join(presets)) + p.addSingleLineInput('Custom Label', '') + if p.show(): + customPreset = p.value('Preset') + customLabel = p.value('Custom Label') + + # Backdrop presets + if customPreset == 'Main': + presetLabel = 'Main' + presetIcon = 'Glint.png' + presetColor = colorsys.hsv_to_rgb(0, 1, 0.5) + + elif customPreset == 'CG': + presetLabel = 'CG' + presetIcon = 'Shader.png' + presetColor = colorsys.hsv_to_rgb(0.062, 1, 0.5) + + elif customPreset == 'Key': + presetLabel = 'Key' + presetIcon = 'Keyer.png' + presetColor = colorsys.hsv_to_rgb(0.333, 1, 0.5) + + elif customPreset == 'Output': + presetLabel = 'Output' + presetIcon = 'Write.png' + presetColor = colorsys.hsv_to_rgb(0.167, 1, 0.373) + + elif customPreset == 'Roto': + presetLabel = 'Roto' + presetIcon = 'Roto.png' + presetColor = colorsys.hsv_to_rgb(0.333, 0.430, 0.384) + + ### Backdrop creation based on presets + if customPreset is not None: + # RGB to HEX + r = presetColor[0] + g = presetColor[1] + b = presetColor[2] + hexColour = int('%02x%02x%02x%02x' % (r * 255, g * 255, b * 255, 1), 16) + + if presetIcon == '': + icon = '' + else: + icon = ' ' + + selNodes = nuke.selectedNodes() + if not selNodes: + if customLabel == '': + return nuke.nodes.BackdropNode(label='
' + icon + presetLabel, tile_color=hexColour, + note_font_size=30) + else: + return nuke.nodes.BackdropNode(label='
' + icon + customLabel, tile_color=hexColour, + note_font_size=30) + + # Find Min. and Max. of Positions + positions = [(i.xpos(), i.ypos()) for i in selNodes] + xPos = sorted(positions, key=operator.itemgetter(0)) + yPos = sorted(positions, key=operator.itemgetter(1)) + xMinMaxPos = (xPos[0][0], xPos[-1:][0][0]) + yMinMaxPos = (yPos[0][1], yPos[-1:][0][1]) + + if customLabel == '': + n = nuke.nodes.BackdropNode(xpos=xMinMaxPos[0] - 10, bdwidth=xMinMaxPos[1] - xMinMaxPos[0] + 110, + ypos=yMinMaxPos[0] - 85, bdheight=yMinMaxPos[1] - yMinMaxPos[0] + 160, + label='
' + icon + presetLabel, tile_color=hexColour, note_font_size=30) + else: + n = nuke.nodes.BackdropNode(xpos=xMinMaxPos[0] - 10, bdwidth=xMinMaxPos[1] - xMinMaxPos[0] + 110, + ypos=yMinMaxPos[0] - 85, bdheight=yMinMaxPos[1] - yMinMaxPos[0] + 160, + label='
' + icon + customLabel, tile_color=hexColour, note_font_size=30) + + n['selected'].setValue(False) + + # Revert to Previous Selection + [i['selected'].setValue(True) for i in selNodes] + + return n + else: + pass diff --git a/python/ToolSet/replace_read_node_path.py b/python/ToolSet/replace_read_node_path.py new file mode 100644 index 0000000..eada4e0 --- /dev/null +++ b/python/ToolSet/replace_read_node_path.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# title : +# description : +# author :heshuai +# mtine :2015/12/7 +# version : +# usage : +# notes : + +# Built-in modules +from PySide import QtGui, QtCore +# Third-party modules +import nuke +# Studio modules + +# Local modules + + +class ReplacePath(QtGui.QDialog): + def __init__(self, parent=None): + super(ReplacePath, self).__init__(parent) + self.resize(500, 100) + self.setWindowTitle('Replace Read Node Path') + self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint) + main_layout = QtGui.QVBoxLayout(self) + main_layout.setSpacing(15) + + source_label = QtGui.QLabel('Source Path') + self.source_le = QtGui.QLineEdit() + target_label = QtGui.QLabel('Target Path') + self.target_le = QtGui.QLineEdit() + self.replace_btn = QtGui.QPushButton('Replace') + self.replace_btn.clicked.connect(self.do_replace) + + source_layout = QtGui.QHBoxLayout() + source_layout.addWidget(source_label) + source_layout.addWidget(self.source_le) + + target_layout = QtGui.QHBoxLayout() + target_layout.addWidget(target_label) + target_layout.addWidget(self.target_le) + + main_layout.addLayout(source_layout) + main_layout.addLayout(target_layout) + main_layout.addWidget(self.replace_btn) + + def do_replace(self): + source_path = str(self.source_le.text()) + target_path = str(self.target_le.text()) + for node in nuke.allNodes('Read'): + node_file_path = node['file'].getValue() + if source_path in node_file_path: + new_path = node_file_path.replace(source_path, target_path) + node['file'].setValue(new_path) + + +def main(): + app = QtGui.qApp + global rp + try: + rp.close() + rp.deleteLater() + except:pass + nuke_win = app.activeWindow() + rp = ReplacePath(nuke_win) + rp.show() diff --git a/python/ToolSet/single_to_sequence.py b/python/ToolSet/single_to_sequence.py new file mode 100644 index 0000000..36c5068 --- /dev/null +++ b/python/ToolSet/single_to_sequence.py @@ -0,0 +1,53 @@ +# -*- coding:utf-8 -*- +# __author__ = "heshuai" +# description=""" """ + + +import nuke +import os +import re + + +def get_frames(folder): + all_frames = os.listdir(folder) + if 'Thumb.db' in all_frames: + all_frames.remove('Thumb.db') + all_frames = [frame for frame in all_frames if os.path.isfile(os.path.join(folder, frame))] + if len(all_frames) > 1: + return all_frames + + +def get_frame_range(all_frames): + pattern_frame = r'.*\.(\d{4})\.[a-z]+$' + frame_numbers = [int(re.match(pattern_frame, frame).group(1)) + for frame in all_frames + if re.match(pattern_frame, frame)] + if frame_numbers: + start_frame, end_frame = [min(frame_numbers), max(frame_numbers)] + if end_frame > start_frame: + return start_frame, end_frame + + +def rebuild_read_node(read_node, start_frame, end_frame): + read_node['first'].setValue(start_frame) + read_node['last'].setValue(end_frame) + read_node['origfirst'].setValue(start_frame) + read_node['origlast'].setValue(end_frame) + + +def main(): + for read_node in nuke.allNodes('Read'): + file_name = read_node['file'].getValue().replace('\\', '/') + folder = os.path.dirname(file_name) + all_frames = get_frames(folder) + if all_frames: + replaced_frame = re.sub(r'\.\d{4}', '.%04d', all_frames[0]) + frame_ext = os.path.join(folder, replaced_frame) + frame_ext = frame_ext.replace('\\', '/') + if file_name == frame_ext: + continue + read_node['file'].setValue(frame_ext) + frames = get_frame_range(all_frames) + if frames: + start_frame, end_frame = frames + rebuild_read_node(read_node, start_frame, end_frame) \ No newline at end of file diff --git a/python/ToolSet/switch_shot.py b/python/ToolSet/switch_shot.py new file mode 100644 index 0000000..4457e4b --- /dev/null +++ b/python/ToolSet/switch_shot.py @@ -0,0 +1,361 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# title : +# description : +# author :heshuai +# mtine :2015/11/9 +# version : +# usage : +# notes : + +# Built-in modules +from PySide import QtGui, QtCore +import os +import getpass +import re +import random +# Third-party modules +import nuke +# Studio modules + +# Local modules +from libs import json_operation + + +class Nuke(object): + + def get_frames_under_sequence(self, sequence_dir): + all_frames = os.listdir(sequence_dir) + if 'Thumb.db' in all_frames: + all_frames.remove('Thumb.db') + if not all_frames: + return + all_frames = [frame for frame in all_frames + if os.path.isfile(os.path.join(sequence_dir, frame))] + return all_frames + + def get_frame_range(self, sequence_dir, sep): + all_frames = self.get_frames_under_sequence(sequence_dir) + if all_frames: + if sep == '.': + pattern_frame = r'.*\.(\d+)\.(exr|png|jpg|jpeg|tga|tiff|tif|iff)' + elif sep == '_': + pattern_frame = r'.*_(\d+)\.(exr|png|jpg|jpeg|tga|tiff|tif|iff)' + frame_numbers = [int(re.match(pattern_frame, frame).group(1)) + for frame in all_frames + if re.match(pattern_frame, frame)] + frame_numbers = list(set(frame_numbers)) + if frame_numbers: + start_frame, end_frame = [min(frame_numbers), max(frame_numbers)] + if len(frame_numbers) != end_frame - start_frame + 1: + nuke.message('%s has some frame lost' % os.path.basename(sequence_dir)) + return start_frame, end_frame + else: + return None, None, None + else: + return None, None, None + + def get_frame_profile(self, sequence_dir, sep): + all_frames = self.get_frames_under_sequence(sequence_dir) + if not all_frames: + return + if sep == '.': + pattern_string = r'.*\.(\d+)\.(exr|png|jpg|jpeg|tga|tiff|tif|iff)' + elif sep == '_': + pattern_string = r'.*_(\d+)\.(exr|png|jpg|jpeg|tga|tiff|tif|iff)' + matched = re.findall(pattern_string, all_frames[0]) + if len(all_frames) == 1: + replaced_frame = all_frames[0] + elif len(all_frames) > 1 and matched: + if not matched[0][0].startswith('0'): + replaced = '%d' + else: + replaced = '%0{num}d'.format(num=len(matched[0][0])) + if sep == '.': + replaced_frame = re.sub('\.(\d+)\.', '.'+replaced+'.', all_frames[0]) + elif sep == '_': + replaced_frame = re.sub('_(\d+)\.', '_'+replaced+'.', all_frames[0]) + return os.path.join(sequence_dir, replaced_frame).replace('\\', '/') + + def fix_read_node(self, read_node, start_frame, end_frame): + read_node['first'].setValue(start_frame) + read_node['last'].setValue(end_frame) + read_node['origfirst'].setValue(start_frame) + read_node['origlast'].setValue(end_frame) + read_node['label'].setValue(" Frame range :" + " [value first] - [value last] ") + + def import_pictures(self, sequence_dir, sep): + all_read_file = [read_node['file'].getValue() + for read_node in nuke.allNodes('Read')] + all_read_file = list(set(all_read_file)) + start_frame, end_frame = self.get_frame_range(sequence_dir, sep) + read_file_name = self.get_frame_profile(sequence_dir, sep) + if read_file_name: + read_file_name = read_file_name.replace('\\', '/') + if all((start_frame, end_frame)) and read_file_name not in all_read_file: + read_node = nuke.nodes.Read(file=read_file_name) + self.fix_read_node(read_node, start_frame, end_frame) + nuke.zoom(1, [read_node.xpos(), read_node.ypos()]) + + def import_project_pictures(self, project_dir, sep): + if os.path.isdir(project_dir): + sequence_dirs = [os.path.join(project_dir, sequence_dir).replace('\\', '/') + for sequence_dir in os.listdir(project_dir) + if os.path.isdir(os.path.join(project_dir, sequence_dir))] + if sequence_dirs: + task = nuke.ProgressTask("AAS | Reading Files") + value = 1 + for sequence_dir in sequence_dirs: + task.setMessage(sequence_dir) + task.setProgress(100/len(sequence_dirs)*value) + try: + self.import_pictures(sequence_dir, sep) + except Exception as e: + print '[AAs] error:', e + value += 1 + task.setMessage('Auto Read Successful') + task.setProgress(100) + else: + print '[AAS info]: %s is not an exist folder' % project_dir + + def get_current_shot_options(self): + all_paths = list() + for read_node in nuke.allNodes('Read'): + file_name = read_node['file'].getValue() + file_dir_name = os.path.dirname(file_name) + all_path = file_dir_name.split('/') + all_paths.extend(all_path) + all_paths = list(set(all_paths)) + current_shot = [content for content in all_paths + if re.findall('\d+', content)] + return current_shot + + def get_current_project_dir(self): + all_dirs = list() + if not nuke.allNodes('Read'): + return + for read_node in nuke.allNodes('Read'): + file_name = read_node['file'].getValue() + file_dir_name = os.path.dirname(os.path.dirname(file_name)) + all_dirs.append(file_dir_name) + all_dirs = list(set(all_dirs)) + return all_dirs + + def replace_shot(self, current_shot, new_shot, sep): + all_read_node = nuke.allNodes('Read') + if all_read_node: + replace_task = nuke.ProgressTask("AAS | Replacing Files") + value = 1 + for read_node in nuke.allNodes('Read'): + replace_task.setProgress(100/len(all_read_node)*value) + file_name = read_node['file'].getValue() + new_file_name = re.sub(current_shot, new_shot, file_name) + new_file_dir = os.path.dirname(new_file_name) + if os.path.isdir(new_file_dir): + read_node['file'].setValue(self.get_frame_profile(new_file_dir, sep)) + read_node['disable'].setValue(0) + start_frame, end_frame = self.get_frame_range(new_file_dir, sep) + self.fix_read_node(read_node, start_frame, end_frame) + else: + read_node['disable'].setValue(1) + value += 1 + replace_task.setProgress(100) + + def show_message(self, message): + nuke.message(message) + + +class ReplaceReadNodeView(QtGui.QDialog): + def __init__(self, parent=None): + super(ReplaceReadNodeView, self).__init__(parent) + self.setWindowTitle('Replace Read Node') + self.resize(550, 120) + self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint) + + main_layout = QtGui.QVBoxLayout(self) + main_layout.setContentsMargins(5, 15, 5, 10) + + file_path_layout = QtGui.QHBoxLayout() + file_path_label = QtGui.QLabel('The File Path') + file_path_label.setAlignment(QtCore.Qt.AlignVCenter) + file_path_label.setFixedWidth(80) + file_path_label.setAlignment(QtCore.Qt.AlignRight) + self.file_path_cbox = QtGui.QComboBox() + self.file_path_cbox.setEditable(True) + self.file_path_btn = QtGui.QToolButton() + icon = QtGui.QIcon() + icon.addPixmap(self.style().standardPixmap(QtGui.QStyle.SP_DirOpenIcon)) + self.file_path_btn.setIcon(icon) + separator_label = QtGui.QLabel('Sep:') + separator_label.setFixedWidth(30) + self.separator_cbox = QtGui.QComboBox() + self.separator_cbox.setFixedWidth(30) + for separator in ['.', '_']: + self.separator_cbox.addItem(separator) + self.import_btn = QtGui.QPushButton('Import') + self.import_btn.setFixedWidth(75) + + file_path_layout.addWidget(file_path_label) + file_path_layout.addWidget(self.file_path_cbox) + file_path_layout.addWidget(self.file_path_btn) + file_path_layout.addWidget(separator_label) + file_path_layout.addWidget(self.separator_cbox) + file_path_layout.addWidget(self.import_btn) + + replace_grp = QtGui.QGroupBox('Replace') + replace_layout = QtGui.QHBoxLayout(replace_grp) + replace_layout.setContentsMargins(10, 15, 10, 15) + shot_attr_layout = QtGui.QVBoxLayout() + shot_attr_layout.setSpacing(20) + current_shot_layout = QtGui.QHBoxLayout() + current_shot_layout.setSpacing(3) + current_shot_label = QtGui.QLabel('Current scene/shot no.') + current_shot_label.setFixedWidth(130) + current_shot_label.setAlignment(QtCore.Qt.AlignRight) + self.current_shot_cbox = QtGui.QComboBox() + self.current_shot_cbox.setEditable(True) + current_shot_layout.addWidget(current_shot_label) + current_shot_layout.addWidget(self.current_shot_cbox) + new_shot_layout = QtGui.QHBoxLayout() + new_shot_layout.setSpacing(3) + new_shot_label = QtGui.QLabel('New scene/shot no.') + new_shot_label.setFixedWidth(130) + new_shot_label.setAlignment(QtCore.Qt.AlignRight) + self.new_shot_le = QtGui.QLineEdit() + new_shot_layout.addWidget(new_shot_label) + new_shot_layout.addWidget(self.new_shot_le) + + shot_attr_layout.addLayout(current_shot_layout) + shot_attr_layout.addLayout(new_shot_layout) + + self.replace_btn = QtGui.QPushButton('Replace') + self.replace_btn.setFixedSize(75, 62) + + replace_layout.addLayout(shot_attr_layout) + replace_layout.addWidget(self.replace_btn) + + button_layout = QtGui.QHBoxLayout() + self.replace_and_import_btn = QtGui.QPushButton('Replace And Import') + button_layout.addStretch() + button_layout.addWidget(self.replace_and_import_btn) + main_layout.addLayout(file_path_layout) + main_layout.addWidget(replace_grp) + main_layout.addLayout(button_layout) + + +class ReplaceReadNode(ReplaceReadNodeView): + nuke_util = Nuke() + + def __init__(self, parent=None): + super(ReplaceReadNode, self).__init__(parent) + self.init_shot() + self.init_file_path() + self.set_signals() + + def init_shot(self): + current_shot_options = self.nuke_util.get_current_shot_options() + self.current_shot_cbox.addItems(current_shot_options) + if current_shot_options: + self.current_shot_cbox.setCurrentIndex(self.current_shot_cbox.findText(current_shot_options[0])) + self.new_shot_le.setText(self.current_shot_cbox.itemText(0)) + + def init_file_path(self): + project_dirs = self.nuke_util.get_current_project_dir() + if project_dirs: + self.file_path_cbox.addItems(project_dirs) + + def set_signals(self): + self.file_path_btn.clicked.connect(self.choose_file_path) + self.file_path_cbox.currentIndexChanged.connect(self.save_history) + self.file_path_cbox.editTextChanged.connect(self.save_history) + self.import_btn.clicked.connect(self.do_import) + self.current_shot_cbox.currentIndexChanged.connect(self.set_new_shot) + self.replace_btn.clicked.connect(self.do_replace) + self.replace_and_import_btn.clicked.connect(self.replace_and_import) + + def choose_file_path(self): + file_dialog = QtGui.QFileDialog() + file_dialog.setFileMode(QtGui.QFileDialog.ExistingFile) + current_text = self.file_path_cbox.currentText() + if current_text: + caption = os.path.dirname(current_text) + else: + caption = '/' + file_path = file_dialog.getExistingDirectory(self, 'choose directory', caption) + if file_path: + file_path = file_path.replace('\\', '/') + if self.file_path_cbox.findText(file_path) == -1: + self.file_path_cbox.addItem(str(file_path)) + self.file_path_cbox.setCurrentIndex(self.file_path_cbox.findText(file_path)) + + def get_history_path(self): + user = getpass.getuser() + nuke_root_path = 'C:/Users/%s/.nuke' % user + history_dir = os.path.join(nuke_root_path, 'history') + history_path = os.path.join(history_dir, 'replace_read_node.json') + return history_path + + def set_new_shot(self, index): + if not self.new_shot_le.text(): + current_shot = self.current_shot_cbox.itemText(index) + self.new_shot_le.setText(current_shot) + + def save_history(self, value): + history_path = self.get_history_path() + history_dir = os.path.dirname(history_path) + if not os.path.isdir(history_dir): + os.makedirs(history_dir) + if isinstance(value, int): + text = self.file_path_cbox.itemText(value) + else: + text = str(value) + if text: + json_operation.set_json_data(history_path, {"history": text}) + + def do_import(self): + picture_dir = str(self.file_path_cbox.currentText()) + sep = str(self.separator_cbox.currentText()) + self.nuke_util.import_project_pictures(picture_dir, sep) + self.init_shot() + + def read_settings(self): + history_path = self.get_history_path() + if not os.path.isfile(history_path): + return + history_info = json_operation.get_json_data(history_path) + if self.file_path_cbox.findText(str(history_info['history'])) == -1: + self.file_path_cbox.addItem(str(history_info['history'])) + + def do_replace(self): + current_shot = str(self.current_shot_cbox.currentText()) + new_shot = str(self.new_shot_le.text()) + sep = str(self.separator_cbox.currentText()) + if current_shot != new_shot: + self.nuke_util.replace_shot(current_shot, new_shot, sep) + + def replace_and_import(self): + self.do_replace() + picture_dir = str(self.file_path_cbox.currentText()) + current_shot = str(self.current_shot_cbox.currentText()) + new_shot = str(self.new_shot_le.text()) + new_dir = re.sub(current_shot, new_shot, picture_dir) + sep = str(self.separator_cbox.currentText()) + if current_shot in picture_dir: + self.nuke_util.import_project_pictures(new_dir, sep) + else: + self.nuke_util.show_message('[AAS info]: Perhaps \n %s \n is not the' + 'directory what you want to import.' % new_dir) + + +def main(): + app = QtGui.qApp + global rrn + try: + rrn.close() + rrn.deleteLater() + except:pass + nuke_win = app.activeWindow() + rrn = ReplaceReadNode(nuke_win) + rrn.read_settings() + rrn.show() diff --git a/python/ToolSet/toggle_input.py b/python/ToolSet/toggle_input.py new file mode 100644 index 0000000..7efb91e --- /dev/null +++ b/python/ToolSet/toggle_input.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +import nuke + + +def toggleInput(): + sel = nuke.selectedNodes() + if len(sel): + toggleVal = not bool(sel[0].knob('hide_input').getValue()) + for node in sel: + if node.knob('hide_input') != None: + node.knob('hide_input').setValue(toggleVal) + else: + nodes = nuke.allNodes() + toggleVal = not bool(nodes[0].knob('hide_input').getValue()) + for node in nodes: + if node.knob('hide_input') != None: + node.knob('hide_input').setValue(toggleVal) + + +def main(): + toggleInput() diff --git a/python/ToolSet/toggle_stamp.py b/python/ToolSet/toggle_stamp.py new file mode 100644 index 0000000..2c13063 --- /dev/null +++ b/python/ToolSet/toggle_stamp.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +import nuke + + +def toggleStamp(): + sel = nuke.selectedNodes() + if len(sel): + toggleVal = True + for n in sel: + if n.knob('postage_stamp') != None: + toggleVal = not bool(n.knob('postage_stamp').getValue()) + break + for node in sel: + if node.knob('postage_stamp') != None: + node.knob('postage_stamp').setValue(toggleVal) + else: + nodes = nuke.allNodes() + toggleVal = True + for n in nodes: + if n.knob('postage_stamp') != None: + toggleVal = not bool(n.knob('postage_stamp').getValue()) + break + for node in nodes: + if node.knob('postage_stamp') != None: + node.knob('postage_stamp').setValue(toggleVal) + +def main(): + toggleStamp() diff --git a/python/__init__.py b/python/__init__.py new file mode 100644 index 0000000..758bf67 --- /dev/null +++ b/python/__init__.py @@ -0,0 +1,2 @@ +# coding=utf-8 +# author=weijer \ No newline at end of file diff --git a/python/packproject/__init__.py b/python/packproject/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/python/packproject/__init__.py @@ -0,0 +1 @@ + diff --git a/python/packproject/config.py b/python/packproject/config.py new file mode 100644 index 0000000..6db2d44 --- /dev/null +++ b/python/packproject/config.py @@ -0,0 +1,11 @@ +# coding=utf-8 +# author=weijer + +config = { + "m_dir": "media", + "m_suffix": ['.mp4', '.mov'], + "p_dir": "plate", + "p_suffix": ['.jpg', '.jpeg', '.png', '.exr', '.tiff', '.tif', '.dpx', '.tga', '.psd', '.hdri', '.r3d ', '.CR2'], + "g_dir": "geo", + "g_suffix": ['.abc', '.fbx', '.obj'] +} diff --git a/python/packproject/loadui.py b/python/packproject/loadui.py new file mode 100644 index 0000000..eee88f2 --- /dev/null +++ b/python/packproject/loadui.py @@ -0,0 +1,12 @@ +# coing=utf8 +import PySide.QtCore as QtCore +import PySide.QtUiTools as QtUiTools + + +def load_ui(ui_path): + loader = QtUiTools.QUiLoader() + f = QtCore.QFile(ui_path) + f.open(QtCore.QFile.ReadOnly) + widget = loader.load(f) + f.close() + return widget diff --git a/python/packproject/nuke2pack.py b/python/packproject/nuke2pack.py new file mode 100644 index 0000000..a20a8d3 --- /dev/null +++ b/python/packproject/nuke2pack.py @@ -0,0 +1,73 @@ +# coding=utf-8 +# author=weijer +import PySide.QtGui as QtGui +import PySide.QtCore as QtCore +import sys +import os +import loadui +import package + +current_dir = os.path.dirname(__file__) +ui_path = os.path.join(current_dir, "static/pack.ui") + + +class PackageDialog(QtGui.QDialog): + def __init__(self): + super(PackageDialog, self).__init__() + + main_layout = QtGui.QVBoxLayout(self) + self.mainWidget = loadui.load_ui(ui_path) + self.setWindowTitle(self.mainWidget.windowTitle()) + main_layout.addWidget(self.mainWidget) + + self.mainWidget.FileButton.clicked.connect(self.on_FileButton_clicked) + self.mainWidget.packButton.clicked.connect(self.on_packButton_clicked) + self.mainWidget.cancelButton.clicked.connect(self.close) + + @QtCore.Slot() + def on_FileButton_clicked(self): + """ + choice pack file folder + :return: + """ + dir = QtGui.QFileDialog.getExistingDirectory(self, "") + self.mainWidget.filelineEdit.setText(dir) + + @QtCore.Slot() + def on_packButton_clicked(self): + """ + pack nuke project ro target dir + :return: + """ + target_dir = self.mainWidget.filelineEdit.text() + if target_dir: + package.Package(target_dir, self, self.show_Progress()).packed_file() + else: + self.show_msgBox() + + def show_msgBox(self): + """ + MessageBox tips + :return: + """ + msgBox = QtGui.QMessageBox() + msgBox.warning(self, u"警告", u"必须选择文件夹!") + + def show_Progress(self): + """ + progress Dialog + :return: + """ + progressDialog = QtGui.QProgressDialog() + progressDialog.setWindowModality(QtCore.Qt.ApplicationModal) + progressDialog.setWindowTitle(u"请等待") + progressDialog.setLabelText(u"拷贝中...") + progressDialog.setCancelButtonText(u"取消") + return progressDialog + + +if __name__ == "__main__": + app = QtGui.QApplication(sys.argv) + Package = PackageDialog() + Package.show() + sys.exit(app.exec_()) diff --git a/python/packproject/package.py b/python/packproject/package.py new file mode 100644 index 0000000..4e6dfff --- /dev/null +++ b/python/packproject/package.py @@ -0,0 +1,131 @@ +# coding=utf-8 +# author=weijer +import nuke +import os.path +import shutil +import re +import config + + +class Package(object): + def __init__(self, target_dir, Progress_Main=None, show_Progress=None): + self._read_list = ['Read', 'ReadGeo2', 'Camera2', 'SmartVector', 'DeepRead'] + self.target_dir = target_dir + self.Progress_Main = Progress_Main + self.show_Progress = show_Progress + self.config = config.config + self.m_dir = self.config["m_dir"] + self.p_dir = self.config["p_dir"] + self.g_dir = self.config["g_dir"] + self._relative_path = '[python {nuke.script_directory()}]' + + # current project path + current_project = nuke.Root().name() + proj_path = os.path.splitext(current_project) + self._nuke_proj = current_project + self._proj_name = (os.path.split(proj_path[0]))[1] + self._proj_basename = os.path.basename(current_project) + self._proj_path = os.path.dirname(current_project) + + def packed_file(self): + """ + Package nuke project + :return: + """ + # backup project + # backup_name = self._proj_name + "_backup.nk" + # backup_path = os.path.join(self._proj_path, backup_name) + # shutil.copy(self._nuke_proj, backup_path) + + # packed project + allNodes = nuke.allNodes() + maxlen = len(allNodes) + start_len = 0 + + # set progressDialog range + progressDialog = self.show_Progress + progressDialog.setRange(1, maxlen) + + for node in allNodes: + start_len += start_len + node_class = node.Class() + if node_class in self._read_list: + read_file = node.knob("file").getValue() + file_info = self.get_file_path(read_file) + if file_info: + # copy dir option + copy_dirname = "" + if file_info["suffix"] in self.config["m_suffix"]: + copy_dirname = self.config["m_dir"] + elif file_info["suffix"] in self.config["p_suffix"]: + copy_dirname = self.config["p_dir"] + elif file_info["suffix"] in self.config["g_suffix"]: + copy_dirname = self.config["g_dir"] + copy_dir = os.path.join(self.target_dir, copy_dirname) + # is sequence copy dir + if file_info["is_sequence"]: + copy_path = os.path.join(copy_dir, file_info["folder"]) + relative_folder = os.path.join(self._relative_path, copy_dirname) + relative_dir = os.path.join(relative_folder, file_info["folder"]) + # Multiple nodes refer to the same material + if not os.path.isdir(copy_path): + shutil.copytree(file_info["dir_name"], copy_path) + + # is file copy file + else: + copy_path = os.path.join(copy_dir, file_info["base_name"]) + relative_dir = os.path.join(self._relative_path, copy_dirname) + if not os.path.isdir(copy_dir): + os.makedirs(copy_dir) + shutil.copy2(read_file, copy_path) + + print copy_path + # change file path to relative + cdir = os.path.join(relative_dir, file_info["base_name"]) + cdir = cdir.replace("\\", "/") + node.knob("file").setValue(cdir) + + # set progressDialog value + progressDialog.setValue(start_len) + + # save as nuke script project + project_path = os.path.join(self.target_dir, self._proj_basename) + nuke.scriptSaveAs(project_path, 1) + self.Progress_Main.close() + + def get_file_path(self, path): + """ + Get file info + :param path: + :return: file dict + """ + if path: + suffix = os.path.splitext(path)[1] + base_name = os.path.basename(path) + dir_name = os.path.dirname(path) + folder = os.path.split(dir_name)[1] + is_sequence = self.check_sequence(base_name) + path_dict = { + "suffix": suffix, + "base_name": base_name, + "dir_name": dir_name, + "folder": folder, + "is_sequence": is_sequence + } + return path_dict + else: + return + + def check_sequence(self, basename): + """ + To determine whether the sequence + + :param basename: + :return: bool + """ + rex = '(%\d+d|#+)' + if re.search(rex, basename): + # result = re.search(rex, basename) + return True + else: + return False diff --git a/python/packproject/static/pack.ui b/python/packproject/static/pack.ui new file mode 100644 index 0000000..58e7c53 --- /dev/null +++ b/python/packproject/static/pack.ui @@ -0,0 +1,91 @@ + + + PackDialog + + + + 0 + 0 + 460 + 120 + + + + + 460 + 120 + + + + + 460 + 120 + + + + Nuke工程打包 + + + + + + + + 选择输出文件夹 + + + + + + + + + + + + Qt::Vertical + + + + 20 + 17 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 打包 + + + + + + + 取消 + + + + + + + + + + diff --git a/python/pw_multiScriptEditor/__init__.py b/python/pw_multiScriptEditor/__init__.py new file mode 100644 index 0000000..08c2cf8 --- /dev/null +++ b/python/pw_multiScriptEditor/__init__.py @@ -0,0 +1,30 @@ +import os, sys + +root = os.path.dirname(__file__) +if not root in sys.path: + sys.path.append(root) + + +# HOUDINI +def showHoudini(clear=False, ontop=False, name=None, floating=False, position=(), size=(), + pane=None, replacePyPanel=False, hideTitleMenu=True): + """ + This method use hqt module. Download it before + """ + from .managers import _houdini + reload(_houdini) + _houdini.show(clear=clear, ontop=ontop, name=name, floating=floating, position=position, + size=size, pane=pane, replacePyPanel=replacePyPanel, hideTitleMenu=hideTitleMenu) + +# NUKE +def showNuke(panel=False): + from .managers import _nuke + reload(_nuke) + _nuke.show(panel) + + +# MAYA +def showMaya(dock=False): + from .managers import _maya + reload (_maya) + _maya.show(dock) diff --git a/python/pw_multiScriptEditor/helpText.txt b/python/pw_multiScriptEditor/helpText.txt new file mode 100644 index 0000000..9985659 --- /dev/null +++ b/python/pw_multiScriptEditor/helpText.txt @@ -0,0 +1,26 @@ + + + + + +

+ Multi Script Editor v%s

+

+ By PaulWinex paulwinex.ru

+

+ Editor Variables:

+
    +
  • + self_main: (QWidget) main widget
  • +
  • + self_output: (QWidget) output widget
  • +
  • + self_version: (string) current version
  • +
  • + self_context: (string or None) current context
  • +
  • + self_help: (function) show this text
  • +
+


+ + \ No newline at end of file diff --git a/python/pw_multiScriptEditor/icons/__init__.py b/python/pw_multiScriptEditor/icons/__init__.py new file mode 100644 index 0000000..81decd6 --- /dev/null +++ b/python/pw_multiScriptEditor/icons/__init__.py @@ -0,0 +1,12 @@ +import os + +root = os.path.dirname(__file__) + +icons = dict( + pw=os.path.join(root,'pw.png'), + all=os.path.join(root,'exec_all.png'), + sel=os.path.join(root,'exec_sel.png'), + clear=os.path.join(root,'clear.png'), + help=os.path.join(root,'help.png'), + donate=os.path.join(root,'donate.png'), +) \ No newline at end of file diff --git a/python/pw_multiScriptEditor/icons/clear.png b/python/pw_multiScriptEditor/icons/clear.png new file mode 100644 index 0000000..40079a5 Binary files /dev/null and b/python/pw_multiScriptEditor/icons/clear.png differ diff --git a/python/pw_multiScriptEditor/icons/donate.png b/python/pw_multiScriptEditor/icons/donate.png new file mode 100644 index 0000000..7cdf51f Binary files /dev/null and b/python/pw_multiScriptEditor/icons/donate.png differ diff --git a/python/pw_multiScriptEditor/icons/exec_all.png b/python/pw_multiScriptEditor/icons/exec_all.png new file mode 100644 index 0000000..ed5e9a3 Binary files /dev/null and b/python/pw_multiScriptEditor/icons/exec_all.png differ diff --git a/python/pw_multiScriptEditor/icons/exec_sel.png b/python/pw_multiScriptEditor/icons/exec_sel.png new file mode 100644 index 0000000..1506aa2 Binary files /dev/null and b/python/pw_multiScriptEditor/icons/exec_sel.png differ diff --git a/python/pw_multiScriptEditor/icons/help.png b/python/pw_multiScriptEditor/icons/help.png new file mode 100644 index 0000000..bc0e26b Binary files /dev/null and b/python/pw_multiScriptEditor/icons/help.png differ diff --git a/python/pw_multiScriptEditor/icons/pw.png b/python/pw_multiScriptEditor/icons/pw.png new file mode 100644 index 0000000..35a9ad2 Binary files /dev/null and b/python/pw_multiScriptEditor/icons/pw.png differ diff --git a/python/pw_multiScriptEditor/icons/pw_logo.png b/python/pw_multiScriptEditor/icons/pw_logo.png new file mode 100644 index 0000000..b033391 Binary files /dev/null and b/python/pw_multiScriptEditor/icons/pw_logo.png differ diff --git a/python/pw_multiScriptEditor/icons_rcs.py b/python/pw_multiScriptEditor/icons_rcs.py new file mode 100644 index 0000000..81db89d --- /dev/null +++ b/python/pw_multiScriptEditor/icons_rcs.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +# Resource object code +# +# Created: Чт 12. июн 19:19:41 2014 +# by: The Resource Compiler for PySide (Qt v4.8.5) +# +# WARNING! All changes made in this file will be lost! + +from PySide import QtCore + +qt_resource_data = "\x00\x00F~\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:4129fec3-aa60-0e4a-bd2d-0c1e89a9dba5\x0a xmp.did:1205f81a-573a-6345-84bc-1bec692589ce\x0a xmp.did:1205f81a-573a-6345-84bc-1bec692589ce\x0a \x0a \x0a \x0a created\x0a xmp.iid:1205f81a-573a-6345-84bc-1bec692589ce\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:4129fec3-aa60-0e4a-bd2d-0c1e89a9dba5\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x1c\xda\xc4\xc8\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xc5IDATx\xda\xdc\xd3=jBQ\x10\xc5\xf1\xdf\x93`-\xe2\x12\xb2\x01\x85\xe0\x02\xde6\x82\xba\x85$ba\x95^\x0d\xa9\xd2&\xd8\xd9\xd9Z\xbc\x15\xa4M\xd2\xa5\x10\x02\xb1\xb0\xb5\x92\xf0\xd2\x8c ~\x06\xac\xe2T\x03\xf7\xce\xb9\xffs\x0f\x93\xe4y\xee\x94*8\xb1\xce@\xe0b\xd5dYV@\x19\xf3#3%,\xd34]l\x12\x5ca\x82\x9b\x03d5\x8c\xd0\xdd\x22\xc0,^o\x85\xc0\x03\xd63\xae\xa2\x87\x0a>w\xfd\xc1\x14w\xf8F\x03m$qV\xc7c\x0c?\xe1e\x17\x01\xbc\x85\xc8\x00\xd7\xf8\xc1+\xee\xc3\xfb\x00\xc3c)\xbc\xe3\x16_h\x86\x95J\x10\x0c\xff\x1a\xe3\x07:a\xa7\x88>\x9e\x0f\xc6\xb8\x87\xa4\x8dK\x8c\xf7]J\xfe\xff2\xfd\x0e\x00\x01\xd7(\xfc\x88\x81e\xcb\x00\x00\x00\x00IEND\xaeB`\x82\x00\x008\xe3\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x18\x00\x00\x00\x11\x08\x06\x00\x00\x00\xc7xl0\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x008\x1aiTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:51+04:00\x0a 2013-11-30T20:47:55+04:00\x0a 2013-11-30T20:47:55+04:00\x0a image/png\x0a 3\x0a xmp.iid:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a xmp.did:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a xmp.did:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a \x0a \x0a \x0a created\x0a xmp.iid:108a5c37-0a08-6f40-9e0e-3045064bd091\x0a 2013-11-30T20:27:51+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 65535\x0a 24\x0a 17\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aD\x1e`\xf0\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00CIDATx\xdab\xfc\xff\xff?\x03\xb1 22\xd2\x8b\x81\x81\xe1\xcf\xf2\xe5\xcbw\x11\xab\x87q\xd4\x82Q\x0b\x06\xc4\x02N\x06\x06\x86\xc7\xb4\xb4\x80\x83\x81\x81\xe1\xe1h\x1c\x8cZ0j\x01\xf1\x16\x00\x00\x00\x00\xff\xff\x03\x00)\x82\x82^\xb0\x8fF\x15\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00F{\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:f58ea093-289f-7d49-8786-e3a77ce63fb9\x0a xmp.did:6b476d3f-677f-1148-8796-2a2f6b11441d\x0a xmp.did:6b476d3f-677f-1148-8796-2a2f6b11441d\x0a \x0a \x0a \x0a created\x0a xmp.iid:6b476d3f-677f-1148-8796-2a2f6b11441d\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:f58ea093-289f-7d49-8786-e3a77ce63fb9\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a;Q\xea\x18\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xc2IDATx\xda\xc4\xd31N\x02a\x10\x05\xe0\x0f\x824\xb4\x1e\x05O\xb0-\x05\x07\x00\x12[\x1b4 \x09T^\x83\xce\x8b\xec\x01h\xa0\x82J\x0b\x13\x92\xa50\xc6\x9a\xc2\xb5\x99\x82\x10\x02\xfeK\xe1T\x93\x7f2\xef\x9f\xf7\xdeL\xad,K\xd7D\xdd\x95\xd18\xf5\x98\xe7y\x0b3\xbc\xe3\x15?\x87\xf5,\xcb\xce\x03\xe0\x06mt\x22\x9f\xa7R\xf8\xc6\x14\x9fx\xc0\xa0\x8a\x06K\x8c\x03l\x84\xfb*\x22\xae0\x89I\x1e\xd1\xaf\xe2\xc2\x02/\xd8\xc7D\xddT\x80\x1a\xee\xd0D\x81\xb7\x8b6\x1e5\x8f\xd1\xc36\xe8\xac\xff\x0aP\xc7S4\x17x\xc6&E\x83a\xd8W\x84\x0b\x9b\x14\x17n\xe3\xe7]PX'\xad2\xbeb\x81v\xf88+\xd2\xbf_\xe3\xef\x00\x1c\x17*-\xd7G\xaa_\x00\x00\x00\x00IEND\xaeB`\x82\x00\x009u\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x0c\x00\x00\x00\x0c\x08\x06\x00\x00\x00Vu\x5c\xe7\x00\x00\x00\x09pHYs\x00\x00\x01#\x00\x00\x01#\x01rAw\xde\x00\x008\x18iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:38+04:00\x0a 2013-11-30T20:48:59+04:00\x0a 2013-11-30T20:48:59+04:00\x0a image/png\x0a 3\x0a xmp.iid:7616c5dd-35f8-9440-9856-45cc4980ec01\x0a xmp.did:17ee26ae-3d57-e54f-80da-9ef46285218f\x0a xmp.did:7616c5dd-35f8-9440-9856-45cc4980ec01\x0a \x0a \x0a \x0a created\x0a xmp.iid:7616c5dd-35f8-9440-9856-45cc4980ec01\x0a 2013-11-30T20:27:38+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 73914/10000\x0a 73914/10000\x0a 2\x0a 65535\x0a 12\x0a 12\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a0$Pw\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xd7IDATx\xdal\xd1\xcdJ\x03A\x10\x04\xe0\x8e\xe8bT<\x1a\xffE\x85\x90K\x14L\x0e^<\xa8\x18M\xf4\x94\x0d\x89\xeb\xc1\xf7\x7f\x8b\xcfK/\x0c\x8b\x87\x82\x99\xaa\xae\x9e\xee\x9a@\x14\xb8\xc1\x1b\x96\x89\x19n\xcb\x9a\xf6\xb0\x8d\x17\xac1\xc5Eb\x82U6\xa9J\xc3+\xbe\xd0\xef\xbc\x18\xd8\xc5\x1c\xef\xe8\x05\xae\xd1\xa4\xd0\x16\x0cp\x8a\xfd\xe4v\xb0\xc10\xd29-\x8a\xdb16x*LwX\x04j\x9c'y\x94\xf7\xdfD\x93\xbb\x04\x8eQw\x0d\x83\xec\xde\x1a~pUhu\xe0\x03\x0fI\xf6\xf1\x98\xe34x\xc6ajc|F\xe6\xfc\xdd\xc6\x86=\x9c\xe1\x12\x07\xe8e\xeck\x8c\x22\x89YFW\xfd\x13k\x95\xfa\x02[]r\x85{\x9c\xe4\x92\xe3\xfc\xf1y\x1b{\xd9\xa9\x87a\x8a\xcb\xa2p\x94Z \xfe\x06\x00\xefw\xc3A\xdf\x8f\xb4\xd9\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00V\x08\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00@\x00\x00\x00@\x08\x06\x00\x00\x00\xaaiq\xde\x00\x00\x00\x09pHYs\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\x95+\x0e\x1b\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00A\x05iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-05-12T21:58:38+04:00\x0a 2014-05-13T11:06+04:00\x0a 2014-05-13T11:06+04:00\x0a image/png\x0a xmp.iid:90266b52-84a9-2c4f-afb6-b1c65e09b7fb\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a \x0a \x0a \x0a created\x0a xmp.iid:E8A7C96826BBE211806D84C2D957BF50\x0a 2013-05-12T21:58:38+04:00\x0a Adobe Photoshop CS6 (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:c1161d27-f700-274f-93d8-153843ea278c\x0a 2014-05-13T10:08:20+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a saved\x0a xmp.iid:43a23237-6cf6-5941-a4de-3cd947c17736\x0a 2014-05-13T11:06+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a converted\x0a from application/vnd.adobe.photoshop to image/png\x0a \x0a \x0a derived\x0a converted from application/vnd.adobe.photoshop to image/png\x0a \x0a \x0a saved\x0a xmp.iid:90266b52-84a9-2c4f-afb6-b1c65e09b7fb\x0a 2014-05-13T11:06+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a xmp.iid:43a23237-6cf6-5941-a4de-3cd947c17736\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a xmp.did:E8A7C96826BBE211806D84C2D957BF50\x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a 1\x0a 960000/10000\x0a 960000/10000\x0a 2\x0a 1\x0a 64\x0a 64\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aD?\xa7~\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x0a\x22IDATx\xda\xdc\x9by\x8c\xdce\x19\xc7?s\xec\xbd\xdd\xed\xf6\xd8\x85\xb4\x14\xa8\xb8\xc5\xd2C%E\xac\xa0\x82\x84(VE\xc0@c\xa2\xa0Q\x9azWc\xa5\x8ah\xd4\xe0\xc1*T\x11\x0f\xbcm\x8c\x91\x9a\x80-\xe0U\xb4H]\x89Z1\xdb\x9bV[z\xd0\xa5\xdb\xed\xb5Gwg\xe6\xf1\x8f\xdf\xf7M\xdf\xfe\x98\xeb7G\xbb\xeb\x9bLvf\xf6\xf7\x9by\x9f\xef\xf3<\xdf\xe7z'ff\x8c\x91\xd5\x0c\xbc\x02\xd8\x00\xa4\xcf\xd4\x97\xc6\x19;\xcb\x80\x9b\x81\x8f\x01\x13\xff\xdf\x00\x88\x15q\xcd \xf0\x1f\xe0\x1d\xc0\xf7\x80\xcb\xce\xc4\xfebUt\x81V`!0W\x1a\xcd\x00\xfd\x12r\x17\xb0G\xaf\xfd\x0d\xcc\x04V\x01\xe7\x03\xbd\xc0\xc3\xc0O\x81\x9d\xd5\xdad\xb2\xcaZ\xef\x04\xde*\x81\xea\x81\x140\x0c\x0c\x00\x87\x81\xa7\x81u\xc0\xdf%\xf0.\xe0I\xe0\xa5\xba\xf7v\xe0:`\x0d\xb0\x1a\xd8\x06\x8c\x8e\x17\x0bp.\xf6^\xe0\x93\xc0y@\x8d4n\x12d\x108\x02\x1c\x00\xd6\x02\x8f\x00W\x01\x9f\x03&\xe93F\x80\xa3\xc0\xf3\x02l5\xd0\xad\xf7\xc6<\x00\x0e\x84\x9f\x00o\x13\xd3\xc7B\xc4\x97\x96\x90\xc7\x80\xe3\xb2\x92\x0bd1\xee\xda\x8c\xde\x1f\x00\x0e\xc9%V\x03\x8f\x02\xfb\xc7\xa2\x0b4\x88\x03\x1a\x80\x84L;\x93\xc3M\x92\xba\xa6\x1e\x98\xe2\x81\x16\x0b\x81X+\x0b\x9a\x00\x9c\x0b\x5c\x02\xdc*\xce\xf8\x95\x809\xab\x16P\x0f\xcc\x07\xae\x06^\x05\x9c\xa3M\xd7\x01m\xc0d\xbd\xaeT\xc8\xcc\x00'%\xf8f\xe0\xeb\xc0\x1fs\x00]U\x00&\x03W*\x86\xcf\x95\x16\x9b\xa5\xad\x98\xf7\x88\x17\x19\x0e\xa3\x02\x91\x96k\xec\x915|[\xaeT5\x00\xea\x81v\x85\xac\x85\xc0\xb5\xc0\x0c\x91V\xa3\xcc9V\x05a\xf3-g\x0d\xbd\xc0\x1f\x80;E\xacU\x01\xa0\x11X v\x7f\xa5\xd8\xdd\x17\xfclf\x92)\xa0\x0fx\x0aX&\xab\xa8\x9a\x0bL\x06\xee\x05\xde.\x00\xce\xa6\xf0\xfeJ)\xc7\xf8\x0b\xf0\x01\x85\xcf\x8a\xa7\xc2S\x81\xeb\x81Y\xd2\xfcXZI\xb9\xe3B\xe0\x8b\xe2\xa3\x8aY@\xbd2\xb3%\xca\xd6\xa6*\xd4\xc5\x19{k\x14\xd8\x07<\x00\xdc\x93+:D\x01`\x16\xf0q\xe0u\x8a\xc3\x0dc\xc0\xef\x0bq\xc20\xb0\x03\xf8\x10\xb0\xbeT\x00b\xc0\x1b\x81\xcfH\xeb\xad^\x88\x1b\xeb+\xa3\x90\xf8'\xe0]\xca6#q@\x1c\xb8\x0d\xb8[1\xde%3\xe3Ax\xb7\xff&`\x9eR\xf1H$\x18\x13j\xcb\xa4\xf9\xe61\xea\xeb\x85VB\x5c\xf5NYo\xd1\x00\xbcE\xdd\x99\x0b\xe5\xef1\xc6\xe7\x8a\x89\xbc_\xa2\xc8P\x14\x00s\x81;\x94\xed\x8dg\xe1}+\x98$\xa5&\x0a\x01\xd0\x0c|Zf\x7f6\x13\x1cW\xf0\xa4\x95\xdc\xa4\xf4<\xad\xf7-\xa2\x154)sm/T\x0e\xdf\xa8~\x5ck\x08 \xf3\x1e\xb1*\xe5\xfb\xe6\xa5\xb4'\xd50\x19R\xbf\xc0\xb4\x9f:)\xa6Q\xcf\x13\x1e\xe3g\xf2\x14^IU\xa5\xb3\x94\x1dZ6\x00\xa6\x02\xef\x16J\x09O\x0b\xae\x955\xa8\xe7\x0d@K\x85\xc3aZB\x1fQQ\xb3E\xad\xb2\x1d\xca\xefG\xe5\xcb\x1d*\xbb\xaf\xd4\xdf\x16\xed!\x05\xfcW24f\x89V1Y\xf7\x5cu\x94\x86\xb3\x01p\x9d\xfc\xbeN\x82\x0f)\xaf>\x08\xfc\x0bxF\x05\xc6\xe5\xca\xb3\x93\x15\x00\xc0$x\xbf\x04\xf8\xa5:={\xf4~\xb6\xf5\x90\x08\xedG\x12*!\x00z\x08\x9a\xae\xb7\x08\x88\xda\x10\x00\x0d\xb2\x80\x96l\x004\xa9\xb0\x99(\x93\xeb\x93\x16~\x06K]gd\xba\xfdRT\xbb\x5c\xc7\xb5\xbe\xd6\x8a0\xb7\xea:'\x9b?\x8a\x1b\x06\x9e\x05\x9e\x8b\xd2\x10\xb9\xa2\x02\xc4\xe7\x008N0\xb9\xe9S\x87\xe9Ri2\x9e\xa7\xb9\xd9A0pAY\xe2z\x99\xfeDE\x90\xeb\x15\xa1\x1e\x06\x96*\x8bL{]\xeb\x0e\xed=#\xed?\xea2\xc0|\xc5\x90\x9f5-\xe0\xc5\x03\xcdR\xc9\xef\xa82\xcaZ`\xb1\xb4\x98,P\xc1MTZ\xdbM0F\xbf_\xae3\x9f`\x18\xf3\x15\xfd\x7f\xab8\xaa\x09\xf8\xb3@\xbd]\xc4\x9d\x90\xf5\xed\x03~\xffb\xd5\x98\xe5z\xb4\x9b\xd9_\xcdl\xd8\xca_\xc3f\xf6\xb4>s\x9e\x99=cf'\x8b\xb8/mf\xc7\xcc\xecofv\x95\xf65\xcf\xcc\xd6\x9a\xd9n3\xeb\xd7\xe3\xa0\x99\xf5\x98\xd9R]s\x8b\x99m\xd6\xf7\xa6\xccl\x9f\x99-\xcf&g>\x17\xe8\xf0\x0a\x8dr\xcd?%\x0d\x1cQ\x92\xd3Fq\x93i\xd7\xd3\xbb\x98`\x08\xb3BI\xd12\xe5\x01=^\xad?\xa0t\xfa&\xe0S\xb2\x90\x1a1\xfeN\xe0\xe7\xb9\xfc,\xd7:\xb7\x82\xdd g\x821\xf9~.\xb7\xca\xd6spd\xd6\xa9d\xe9f\x09~@\x05Z\xa7\x94\xb4\x93`\x5cw\x83R\xe6\x06o6\xb0R\x7f#\x010\xcd+$2e4B\x9c\x05\x1c\x92\xa6fr\xfa\xe1\x07\xff\x1a\xd7s\x18\x91\xe0\x0d\x8a\x185\xdaK\xbbB\xf2\x05\x22\xbb\xa4>\x0b\xe0M^\xda^\xeb%]kD\x92D\x05\xa0C\xff\x1fV\x865\xa4\x0f\x9fTB)\xecz\x0b-\xba?\x11\xca\x0f\x06\xa4\xd1\x8d*\xc2\xf6K\xf8y\x04\x83\x98\xf3t_\x9d\x1e\xb5\x9eB\xdcj\xf1\xc8\xd3\x91n7\xf0e\xf2\x9c+J\xe6a\xe0\xa9\xd2\xc6^\xd5\xea\xeb\x14{?L\xf4s|\xee$\xc8\x84\x10xi\xc5\xf6\x7fj\xa3\x1bBM\x90Ur\xc5\xc5\xc0{\xa4\xf9\xc6\x1cV\xe8\x7f\xe6Q\xd5\x19\xcb)pr$\x99\xe7\xfd\x09\x0a[]^\x81\xb4(\xe4\x0eQ\xba\xb2m\xd2j2\x14\x1a\xd7+\xa6\xe7j\x84\x1c\x00\xbe\xa1\x04\xe6\x0bJ\xccr\x9d4I\x89h7\xaa\xcc~\xb6\x18\x96\xcd\xb6\xea\x944,\xf3\x84\xafQM\x10u2\x14\xd3\xbd\x1d\xd2^\xd2\xcb\xcc\xb6\x8b\xb1\xf7\x16\xc1#\xeePT\xb6\xb4\xdde\x9a\x07\x95l-\xc9Q\xd8\x15\x0d\xc0\xa0\x88\xc3\x9f\xa55x\x15a\xd4\xc8P#\xf3\x9d\xe2ef}*\x8avD\xe0\x91Gd5\x96E\xf3\x07\xe52K\x09\x0ee\x15\xb5\x92y\xbe\x8c,M\x91R\xc6c\xce\xff\xa7\x09\xc0\x8c\xb4\xf5\x1c\xf0\x9b\x88\x9f\xb5_\xca\xc9\x84\x9a\x1c\xc7\xc5Q\x9f\xcd\xd3H\x8dd\x01\xb9\xc0*\xf5\xa0SB,=\xdb\x0bu\xdd\xc0\x0b%\x80\x19\xfe~\x17\xeb\xbf\x1bUx8\xb3\x87\xa5\x1b\x81\xd7(\x17\x18\x02\xfe\x11q\xba\xe3\x92\xb3\xba,Q\xe4q\x82S\xa4T\x13\x007\x9a\xb2\x12\x01\xa8SJ\xdb\xe1\xf9l\xd4u\x99\xa2S\x5c\xa6\x7fB$\xbd\x92\x12\x7fc\x10\xe5\xa4\xe8\x90H\xb1\xd4\x1f3\xc4=\x17\xb2\x12\xcc\xb5E\x8d\x8ff\xdd?\xa8(rW\x91\xb3\x84\xb2-`P\x0d\x8d\x91\x12\xad \x1c\x16[#\xde\xf7Z\xe5\x00q\xc5\xfaM\x12\xfe\xc9r|3\x0a\x00i\x82\xd1\xd8@\x05\x00h\x94;\x14\xbb&\x10\x1cp\xc8\xa8\xe8y\x9c`4\xf7X\xb9\xe4\x14\xf5\xb0t\xb7\xd0\x9fZ\x06\x81\xba\xf2\xf5\xf5\xc0w\x04h\xa15]\xe0w\x8b<7\x16y_\xc5\x01\xd8\xa2\xd6\xd4\x0c/\xa1q\x8dGw\xea;^\x04\x00uj^^\x93\xafR\xf3\xd6V=*~\xb6?\xaa\x16Oh\xc3\x87\xc5\x09\xfb\xe4\x83\x8fy\xfd\xf6T\x91yA\xbb\xea\xfb\x8e\x22K\xea\xea\xfc\xb0!OK,\xd7\xe3\x1c3[\xa7\xb6\xd6\xfb\xcd\xac\xd9\xccj\xccl\x8e\x99=df/\xa8\x0dUh\xa5\xcc\xec\x80\x99\xddkf\xf5%\xec\xa3\x22\x8fR\xcf\x0a/\x06.\x02\xbe\x14J\x9bg\x00?\xe6\xd4d\xb6\x90\x85\xb9N\xd1\x0f\x80\xaf\xe9\xf5\x19]\xa5\x02\xe0:\xb0\x87r\x84\xab\xfb\xd4\xaa*\xd4RsU\xdc^\xf5\xec\xba\x88p\xd6\xfflp\x80\x9f\x14\xe5j4\xac\x07\xbe\xcf\xa9\xb9\x9e\x15 \xc4Z\xb1\xfcmj|^4\x1e,\xa0\xd0\xaa'8Kp#\x85\xfb\xff~O\xf0\xa8\x9a\x18\x0f\xa8R\xec\x1f\xaf\x00@0\x99\xf9&\xc1X}\x92\x97L\xc5Ci\xb1\xdf\xce\xcax\xd6\xb5\x8d\xe0\xc7PO\x88'\x86\xc7\x1b\x00\xa8\x07\xd0%R\x1c!8\x17\xd0\xce\xa9\xe1\xa6;\xcd\x95\x08\xd5\x09i\x01\xd1\xaf\xa2i\x17A+|\x9b\xfa\x08{UJ\xa7\xc7:\x00\x10\xfcz\xecV\x82\xf3\x00\x9b\xd5P\xed$8o4\x9b`\x02<\x85\xd3\x7fv\xe3\x12\xac\x13\x02`\xb7\xee\xdd\xa4T\xb8\x8f\x0a\xfd\xc2\xdf\x807\x93\x0f\xf5\x1e\x9b<\x8bp\x07\x1f\xddA\xc9\x13\xaa@\x07\xaa\x15\x22\xff7\x00\x00\xce|\xf6T\x0e\xbbG\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00F~\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:912a076e-06c9-9c41-964c-4ac3b1eac27c\x0a xmp.did:f1a83438-1190-f446-b9f2-efc89d7bbf8b\x0a xmp.did:f1a83438-1190-f446-b9f2-efc89d7bbf8b\x0a \x0a \x0a \x0a created\x0a xmp.iid:f1a83438-1190-f446-b9f2-efc89d7bbf8b\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:912a076e-06c9-9c41-964c-4ac3b1eac27c\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0ack\x1e\x85\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xc5IDATx\xda\xd4\xd21N\x02A\x14\x87\xf1\x1f\x04n@\x81\x09\x89\x85\x9dp\x8b\xbd\x00\x17\x90Heb\xb5Qi\xecl,\x08\xe8\x15\x00\xb9\xc6VTT6\x96\x1e\xc0\x82\x18k\x0b\x87f61\xeb\x125[\x10\xfe\xd5\xcb{\xc97\xdf\x9b\x99Z\x08A\x95\xd4ULe@#/\xb2,+\x9b\xf7\xf1\x8a\x97\xe2 I\x92_\x0d\xcep\x87\x09\xba\xff]a\x88\x1b|\xe2\x08c\x9c\xfe\x150@\x8a\x0d\xae0G\x07\x0fe&\xf5B}\x81k|\xe0\x16+\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:55+04:00\x0a 2013-11-30T20:48:10+04:00\x0a 2013-11-30T20:48:10+04:00\x0a image/png\x0a 3\x0a xmp.iid:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a xmp.did:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a xmp.did:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a \x0a \x0a \x0a created\x0a xmp.iid:7bc40d1b-ffcd-7d44-a96d-87bb4278e245\x0a 2013-11-30T20:27:55+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 65535\x0a 81\x0a 58\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aj\xf7\xedW\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\x83IDATx\xda\xec\xd0\xb1\x0d\x00 \x0c\x04\xb1\xecD\xc7$?\x0c\xbb\x87\x96\x11\x22\xe4\xe2\xfa\x93\xab\xbbkbIv\x92\xf3\xb4\xa6\xbe\x16D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\xf1/\xc4\x0b\x00\x00\xff\xff\x03\x00^\x88\x0f~\xc4\xb7\xc6o\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00Fx\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x0aOiCCPPhotoshop ICC profile\x00\x00x\xda\x9dSgTS\xe9\x16=\xf7\xde\xf4BK\x88\x80\x94KoR\x15\x08 RB\x8b\x80\x14\x91&*!\x09\x10J\x88!\xa1\xd9\x15Q\xc1\x11EE\x04\x1b\xc8\xa0\x88\x03\x8e\x8e\x80\x8c\x15Q,\x0c\x8a\x0a\xd8\x07\xe4!\xa2\x8e\x83\xa3\x88\x8a\xca\xfb\xe1{\xa3k\xd6\xbc\xf7\xe6\xcd\xfe\xb5\xd7>\xe7\xac\xf3\x9d\xb3\xcf\x07\xc0\x08\x0c\x96H3Q5\x80\x0c\xa9B\x1e\x11\xe0\x83\xc7\xc4\xc6\xe1\xe4.@\x81\x0a$p\x00\x10\x08\xb3d!s\xfd#\x01\x00\xf8~<<+\x22\xc0\x07\xbe\x00\x01x\xd3\x0b\x08\x00\xc0M\x9b\xc00\x1c\x87\xff\x0f\xeaB\x99\x5c\x01\x80\x84\x01\xc0t\x918K\x08\x80\x14\x00@z\x8eB\xa6\x00@F\x01\x80\x9d\x98&S\x00\xa0\x04\x00`\xcbcb\xe3\x00P-\x00`'\x7f\xe6\xd3\x00\x80\x9d\xf8\x99{\x01\x00[\x94!\x15\x01\xa0\x91\x00 \x13e\x88D\x00h;\x00\xac\xcfV\x8aE\x00X0\x00\x14fK\xc49\x00\xd8-\x000IWfH\x00\xb0\xb7\x00\xc0\xce\x10\x0b\xb2\x00\x08\x0c\x000Q\x88\x85)\x00\x04{\x00`\xc8##x\x00\x84\x99\x00\x14F\xf2W<\xf1+\xae\x10\xe7*\x00\x00x\x99\xb2<\xb9$9E\x81[\x08-q\x07WW.\x1e(\xceI\x17+\x146a\x02a\x9a@.\xc2y\x99\x192\x814\x0f\xe0\xf3\xcc\x00\x00\xa0\x91\x15\x11\xe0\x83\xf3\xfdx\xce\x0e\xae\xce\xce6\x8e\xb6\x0e_-\xea\xbf\x06\xff\x22bb\xe3\xfe\xe5\xcf\xabp@\x00\x00\xe1t~\xd1\xfe,/\xb3\x1a\x80;\x06\x80m\xfe\xa2%\xee\x04h^\x0b\xa0u\xf7\x8bf\xb2\x0f@\xb5\x00\xa0\xe9\xdaW\xf3p\xf8~<\xdf5\x00\xb0j>\x01{\x91-\xa8]c\x03\xf6K'\x10Xt\xc0\xe2\xf7\x00\x00\xf2\xbbo\xc1\xd4(\x08\x03\x80h\x83\xe1\xcfw\xff\xef?\xfdG\xa0%\x00\x80fI\x92q\x00\x00^D$.T\xca\xb3?\xc7\x08\x00\x00D\xa0\x81*\xb0A\x1b\xf4\xc1\x18,\xc0\x06\x1c\xc1\x05\xdc\xc1\x0b\xfc`6\x84B$\xc4\xc2B\x10B\x0ad\x80\x1cr`)\xac\x82B(\x86\xcd\xb0\x1d*`/\xd4@\x1d4\xc0Qh\x86\x93p\x0e.\xc2U\xb8\x0e=p\x0f\xfaa\x08\x9e\xc1(\xbc\x81\x09\x04A\xc8\x08\x13a!\xda\x88\x01b\x8aX#\x8e\x08\x17\x99\x85\xf8!\xc1H\x04\x12\x8b$ \xc9\x88\x14Q\x22K\x915H1R\x8aT UH\x1d\xf2=r\x029\x87\x5cF\xba\x91;\xc8\x002\x82\xfc\x86\xbcG1\x94\x81\xb2Q=\xd4\x0c\xb5C\xb9\xa87\x1a\x84F\xa2\x0b\xd0dt1\x9a\x8f\x16\xa0\x9b\xd0r\xb4\x1a=\x8c6\xa1\xe7\xd0\xabh\x0f\xda\x8f>C\xc70\xc0\xe8\x18\x073\xc4l0.\xc6\xc3B\xb18,\x09\x93c\xcb\xb1\x22\xac\x0c\xab\xc6\x1a\xb0V\xac\x03\xbb\x89\xf5c\xcf\xb1w\x04\x12\x81E\xc0\x096\x04wB a\x1eAHXLXN\xd8H\xa8 \x1c$4\x11\xda\x097\x09\x03\x84Q\xc2'\x22\x93\xa8K\xb4&\xba\x11\xf9\xc4\x18b21\x87XH,#\xd6\x12\x8f\x13/\x10{\x88C\xc47$\x12\x89C2'\xb9\x90\x02I\xb1\xa4T\xd2\x12\xd2F\xd2nR#\xe9,\xa9\x9b4H\x1a#\x93\xc9\xdadk\xb2\x079\x94, +\xc8\x85\xe4\x9d\xe4\xc3\xe43\xe4\x1b\xe4!\xf2[\x0a\x9db@q\xa4\xf8S\xe2(R\xcajJ\x19\xe5\x10\xe54\xe5\x06e\x982AU\xa3\x9aR\xdd\xa8\xa1T\x115\x8fZB\xad\xa1\xb6R\xafQ\x87\xa8\x134u\x9a9\xcd\x83\x16IK\xa5\xad\xa2\x95\xd3\x1ah\x17h\xf7i\xaf\xe8t\xba\x11\xdd\x95\x1eN\x97\xd0W\xd2\xcb\xe9G\xe8\x97\xe8\x03\xf4w\x0c\x0d\x86\x15\x83\xc7\x88g(\x19\x9b\x18\x07\x18g\x19w\x18\xaf\x98L\xa6\x19\xd3\x8b\x19\xc7T071\xeb\x98\xe7\x99\x0f\x99oUX*\xb6*|\x15\x91\xca\x0a\x95J\x95&\x95\x1b*/T\xa9\xaa\xa6\xaa\xde\xaa\x0bU\xf3U\xcbT\x8f\xa9^S}\xaeFU3S\xe3\xa9\x09\xd4\x96\xabU\xaa\x9dP\xebS\x1bSg\xa9;\xa8\x87\xaag\xa8oT?\xa4~Y\xfd\x89\x06Y\xc3L\xc3OC\xa4Q\xa0\xb1_\xe3\xbc\xc6 \x0bc\x19\xb3x,!k\x0d\xab\x86u\x815\xc4&\xb1\xcd\xd9|v*\xbb\x98\xfd\x1d\xbb\x8b=\xaa\xa9\xa19C3J3W\xb3R\xf3\x94f?\x07\xe3\x98q\xf8\x9ctN\x09\xe7(\xa7\x97\xf3~\x8a\xde\x14\xef)\xe2)\x1b\xa64L\xb91e\x5ck\xaa\x96\x97\x96X\xabH\xabQ\xabG\xeb\xbd6\xae\xed\xa7\x9d\xa6\xbdE\xbbY\xfb\x81\x0eA\xc7J'\x5c'Gg\x8f\xce\x05\x9d\xe7S\xd9S\xdd\xa7\x0a\xa7\x16M=:\xf5\xae.\xaak\xa5\x1b\xa1\xbbDw\xbfn\xa7\xee\x98\x9e\xbe^\x80\x9eLo\xa7\xdey\xbd\xe7\xfa\x1c}/\xfdT\xfdm\xfa\xa7\xf5G\x0cX\x06\xb3\x0c$\x06\xdb\x0c\xce\x18<\xc55qo<\x1d/\xc7\xdb\xf1QC]\xc3@C\xa5a\x95a\x97\xe1\x84\x91\xb9\xd1<\xa3\xd5F\x8dF\x0f\x8ci\xc6\x5c\xe3$\xe3m\xc6m\xc6\xa3&\x06&!&KM\xeaM\xee\x9aRM\xb9\xa6)\xa6;L;L\xc7\xcd\xcc\xcd\xa2\xcd\xd6\x995\x9b=1\xd72\xe7\x9b\xe7\x9b\xd7\x9b\xdf\xb7`ZxZ,\xb6\xa8\xb6\xb8eI\xb2\xe4Z\xa6Y\xee\xb6\xbcn\x85Z9Y\xa5XUZ]\xb3F\xad\x9d\xad%\xd6\xbb\xad\xbb\xa7\x11\xa7\xb9N\x93N\xab\x9e\xd6g\xc3\xb0\xf1\xb6\xc9\xb6\xa9\xb7\x19\xb0\xe5\xd8\x06\xdb\xae\xb6m\xb6}agb\x17g\xb7\xc5\xae\xc3\xee\x93\xbd\x93}\xba}\x8d\xfd=\x07\x0d\x87\xd9\x0e\xab\x1dZ\x1d~s\xb4r\x14:V:\xde\x9a\xce\x9c\xee?}\xc5\xf4\x96\xe9/gX\xcf\x10\xcf\xd83\xe3\xb6\x13\xcb)\xc4i\x9dS\x9b\xd3Gg\x17g\xb9s\x83\xf3\x88\x8b\x89K\x82\xcb.\x97>.\x9b\x1b\xc6\xdd\xc8\xbd\xe4Jt\xf5q]\xe1z\xd2\xf5\x9d\x9b\xb3\x9b\xc2\xed\xa8\xdb\xaf\xee6\xeei\xee\x87\xdc\x9f\xcc4\x9f)\x9eY3s\xd0\xc3\xc8C\xe0Q\xe5\xd1?\x0b\x9f\x950k\xdf\xac~OCO\x81g\xb5\xe7#/c/\x91W\xad\xd7\xb0\xb7\xa5w\xaa\xf7a\xef\x17>\xf6>r\x9f\xe3>\xe3<7\xde2\xdeY_\xcc7\xc0\xb7\xc8\xb7\xcbO\xc3o\x9e_\x85\xdfC\x7f#\xffd\xffz\xff\xd1\x00\xa7\x80%\x01g\x03\x89\x81A\x81[\x02\xfb\xf8z|!\xbf\x8e?:\xdbe\xf6\xb2\xd9\xedA\x8c\xa0\xb9A\x15A\x8f\x82\xad\x82\xe5\xc1\xad!h\xc8\xec\x90\xad!\xf7\xe7\x98\xce\x91\xcei\x0e\x85P~\xe8\xd6\xd0\x07a\xe6a\x8b\xc3~\x0c'\x85\x87\x85W\x86?\x8ep\x88X\x1a\xd11\x975w\xd1\xdcCs\xdfD\xfaD\x96D\xde\x9bg1O9\xaf-J5*>\xaa.j<\xda7\xba4\xba?\xc6.fY\xcc\xd5X\x9dXIlK\x1c9.*\xae6nl\xbe\xdf\xfc\xed\xf3\x87\xe2\x9d\xe2\x0b\xe3{\x17\x98/\xc8]py\xa1\xce\xc2\xf4\x85\xa7\x16\xa9.\x12,:\x96@L\x88N8\x94\xf0A\x10*\xa8\x16\x8c%\xf2\x13w%\x8e\x0ay\xc2\x1d\xc2g\x22/\xd16\xd1\x88\xd8C\x5c*\x1eN\xf2H*Mz\x92\xec\x91\xbc5y$\xc53\xa5,\xe5\xb9\x84'\xa9\x90\xbcL\x0dL\xdd\x9b:\x9e\x16\x9av m2=:\xbd1\x83\x92\x91\x90qB\xaa!M\x93\xb6g\xeag\xe6fv\xcb\xace\x85\xb2\xfe\xc5n\x8b\xb7/\x1e\x95\x07\xc9k\xb3\x90\xac\x05Y-\x0a\xb6B\xa6\xe8TZ(\xd7*\x07\xb2geWf\xbf\xcd\x89\xca9\x96\xab\x9e+\xcd\xed\xcc\xb3\xca\xdb\x907\x9c\xef\x9f\xff\xed\x12\xc2\x12\xe1\x92\xb6\xa5\x86KW-\x1dX\xe6\xbd\xacj9\xb2\x15\x89\x8a\xae\x14\xdb\x17\x97\x15\x7f\xd8(\xdcx\xe5\x1b\x87o\xca\xbf\x99\xdc\x94\xb4\xa9\xab\xc4\xb9d\xcff\xd2f\xe9\xe6\xde-\x9e[\x0e\x96\xaa\x97\xe6\x97\x0en\x0d\xd9\xda\xb4\x0d\xdfV\xb4\xed\xf5\xf6E\xdb/\x97\xcd(\xdb\xbb\x83\xb6C\xb9\xa3\xbf<\xb8\xbce\xa7\xc9\xce\xcd;?T\xa4T\xf4T\xfaT6\xee\xd2\xdd\xb5a\xd7\xf8n\xd1\xee\x1b{\xbc\xf64\xec\xd5\xdb[\xbc\xf7\xfd>\xc9\xbe\xdbU\x01UM\xd5f\xd5e\xfbI\xfb\xb3\xf7?\xae\x89\xaa\xe9\xf8\x96\xfbm]\xadNmq\xed\xc7\x03\xd2\x03\xfd\x07#\x0e\xb6\xd7\xb9\xd4\xd5\x1d\xd2=TR\x8f\xd6+\xebG\x0e\xc7\x1f\xbe\xfe\x9d\xefw-\x0d6\x0dU\x8d\x9c\xc6\xe2#pDy\xe4\xe9\xf7\x09\xdf\xf7\x1e\x0d:\xdav\x8c{\xac\xe1\x07\xd3\x1fv\x1dg\x1d/jB\x9a\xf2\x9aF\x9bS\x9a\xfb[b[\xbaO\xcc>\xd1\xd6\xea\xdez\xfcG\xdb\x1f\x0f\x9c499\xe2?r\xfd\xe9\xfc\xa7C\xcfd\xcf&\x9e\x17\xfe\xa2\xfe\xcb\xae\x17\x16/~\xf8\xd5\xeb\xd7\xce\xd1\x98\xd1\xa1\x97\xf2\x97\x93\xbfm|\xa5\xfd\xea\xc0\xeb\x19\xaf\xdb\xc6\xc2\xc6\x1e\xbe\xc9x31^\xf4V\xfb\xed\xc1w\xdcw\x1d\xef\xa3\xdf\x0fO\xe4| \x7f(\xffh\xf9\xb1\xf5S\xd0\xa7\xfb\x93\x19\x93\x93\xff\x04\x03\x98\xf3\xfcc3-\xdb\x00\x00:\xd8iTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a 2014-04-02T00:14:53+04:00\x0a xmp.iid:24a905d7-3fe1-ca4d-a9c1-1ab2125c0f5e\x0a xmp.did:628324e0-7850-614a-be1a-f035b8641035\x0a xmp.did:628324e0-7850-614a-be1a-f035b8641035\x0a \x0a \x0a \x0a created\x0a xmp.iid:628324e0-7850-614a-be1a-f035b8641035\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:24a905d7-3fe1-ca4d-a9c1-1ab2125c0f5e\x0a 2014-04-02T00:14:53+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a \x0a \x0a xmp.did:CED979F2760511E1954F918C86BB5E3E\x0a \x0a \x0a 3\x0a sRGB IEC61966-2.1\x0a image/png\x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 1\x0a 16\x0a 16\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0aV\xfc\xea\xb3\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xbfIDATx\xda\xc4\xd3;n\x02A\x10\x04\xd0\x87\x85\x88\x91\xb5\x01D\x04\x10\x81\x13H|\x80\xbd\x18\x99%\xf3\xb1I\x1c@`\xf19\x80/\xb0'\xe0*\x9c\x00K\xac\x93\x0e\x90\x8d\x04\xb3\x04\xaed4RWOuWM\xad,K\xf7\xe0\xc1\x9d\xa8\x9f_\x8a\xa2\xb8T\xd3A\x0b\xfb<\xcfO\xa9\x0a\x9e\xb0\xc4\x07\x1eSG\x18`\x1a\xaf\xefpHi\xd0\xc7\x0cml\xb0HY\xe2\x00\x93 \xef0\xc7\xe9\xa6%\xc6\xcc\xd3 \xaf\xf1\x862\xc5\xc6^\x90\x8f\xd8_#_j\xf0\x15\x0a\x1a\x18\xe3\xb9J\x90\xb6xG\x86W\x0c\xab$\xf13\x5ch\x86\xa2Q\x95(o\x22@\x19^\xa2\xd9U\x17~c\x85ot\xe3\xfc\x83\xda\xbf\xff\xc6\x9f\x01\x00$\x1b${\x89\x22c7\x00\x00\x00\x00IEND\xaeB`\x82\x00\x00;\x00\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00\x0c\x00\x00\x00\x0c\x08\x06\x00\x00\x00Vu\x5c\xe7\x00\x00\x00\x09pHYs\x00\x00\x01#\x00\x00\x01#\x01rAw\xde\x00\x009\xcdiTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:38+04:00\x0a 2013-11-30T20:49:08+04:00\x0a 2013-11-30T20:49:08+04:00\x0a image/png\x0a 3\x0a xmp.iid:c789d111-ecc1-2943-8c52-95c61b03f3a8\x0a xmp.did:2acebcb2-7aac-0943-938e-d33e2def2b2b\x0a xmp.did:2acebcb2-7aac-0943-938e-d33e2def2b2b\x0a \x0a \x0a \x0a created\x0a xmp.iid:2acebcb2-7aac-0943-938e-d33e2def2b2b\x0a 2013-11-30T20:27:38+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a saved\x0a xmp.iid:c789d111-ecc1-2943-8c52-95c61b03f3a8\x0a 2013-11-30T20:49:08+04:00\x0a Adobe Photoshop CC (Windows)\x0a /\x0a \x0a \x0a \x0a 1\x0a 73914/10000\x0a 73914/10000\x0a 2\x0a 65535\x0a 12\x0a 12\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x97\xd8kP\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\xadIDATx\xda\x94\xd1\xd1JBA\x14\x85\xe1}\xc2\xc4\x9e@\x83\xbcPA\xbc1\xa1|\x82\xc2\xf2\xa8W*Y\xef\xff _7{`\x10N\xd8\xc5\x82a\xd6\xfa\xf70k\x07\xa2\xd2\x14\x1b\x1cS\x1f\x98\xd5\x99r\xe8\xe1\x0d_Xc\x9cz\xc59\x87\xf4k\xe0\x1d\x07<\x5c\xbd\x18\x18\xa0\xc5'\x9a\xc0\x04?iD\x87\xeeq\xc1<\x92\x5c\xff\x11.z\xc6.p\xc2\xd3\x0d\xc0\x08\xa7\xff\x00\xc3\x02l\xf1r\x03\xb0\xc4>\xb2\xe7\xefR[\x87zY\xf9\x22\xd0\xe4\x82\xda\x0e\xa8\x9f\xfe\x0ew\xd7\x97g\xac\xf0\x98\x9f\x5c\xe6\xc6\xdbR{=\xa9\xc1<\xcdc\x15\x5c\xa4\x17\x88\xdf\x01\x00\xdb\x9d\xbd\x04\x1e\x00\xecQ\x00\x00\x00\x00IEND\xaeB`\x82\x00\x009=\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x00Q\x00\x00\x00:\x08\x06\x00\x00\x00\xc8\xbc\xb5\xaf\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\x00\x008\x1aiTXtXML:com.adobe.xmp\x00\x00\x00\x00\x00\x0a\x0a \x0a \x0a Adobe Photoshop CC (Windows)\x0a 2013-11-30T20:27:47+04:00\x0a 2013-11-30T20:48:05+04:00\x0a 2013-11-30T20:48:05+04:00\x0a image/png\x0a 3\x0a xmp.iid:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a xmp.did:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a xmp.did:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a \x0a \x0a \x0a created\x0a xmp.iid:19b03b56-2069-2c45-9900-1dd879bc06b6\x0a 2013-11-30T20:27:47+04:00\x0a Adobe Photoshop CC (Windows)\x0a \x0a \x0a \x0a 1\x0a 720000/10000\x0a 720000/10000\x0a 2\x0a 65535\x0a 81\x0a 58\x0a \x0a \x0a\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x8aD\x09\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\x9dIDATx\xda\xec\xd0\xa1\x11\x84@\x14D\xc1\xcd\x820\x108\xcc\xa51Ta\xc9\x01A\xee\x8b\xa5\xd0\x88\x0f\xd7\xe2\x89qS\xddz\xef\xadbI\xe6$\xc7\xa5\xa9\xea\xd7\x06\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!B\x84\x08\x11\x22D\x88\x10!\xfe\x09\xe2/\xc9P\xb17!\xee\xb7]&\x88\x1fG\x1c\x93l\x97\xd6$K\xc5\xca\x22\xbe)\x08\x10!B\x14D\x88\x10!\x0a\x22D\x88\x10\x05\x11\x22D\x88\x82\x08\x11\x22DA\x84\x08\x11\xa2 B\x84(\x88\xcft\x02\x00\x00\xff\xff\x03\x00\x8a\x81\x01-;\x8b=H\x00\x00\x00\x00IEND\xaeB`\x82" +qt_resource_name = "\x00\x0e\x06\x0c\xe6\x07\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00o\x00w\x00n\x00.\x00p\x00n\x00g\x00\x08\x06\x88Y\xc7\x00m\x00o\x00r\x00e\x00.\x00p\x00n\x00g\x00\x0f\x0f,$\xc7\x00a\x00r\x00r\x00o\x00w\x00_\x00r\x00i\x00g\x00h\x00t\x00.\x00p\x00n\x00g\x00\x0a\x09\xba\x11\x87\x00c\x00l\x00o\x00s\x00e\x00d\x00.\x00p\x00n\x00g\x00\x0b\x08g\xfa'\x00p\x00w\x00_\x00t\x00r\x00a\x00y\x00.\x00p\x00n\x00g\x00\x0c\x0b\xd0z\xe7\x00a\x00r\x00r\x00o\x00w\x00_\x00u\x00p\x00.\x00p\x00n\x00g\x00\x09\x00H\xad'\x00v\x00l\x00i\x00n\x00e\x00.\x00p\x00n\x00g\x00\x0e\x08\xfa\xe1'\x00a\x00r\x00r\x00o\x00w\x00_\x00l\x00e\x00f\x00t\x00.\x00p\x00n\x00g\x00\x08\x06\xc1Y\x87\x00o\x00p\x00e\x00n\x00.\x00p\x00n\x00g\x00\x07\x0cGW\x87\x00e\x00n\x00d\x00.\x00p\x00n\x00g" +qt_resource_struct = "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0a\x00\x00\x00\x01\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x01\x9b\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x01\x00\x00F\x82\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x02\x1b\x92\x00\x00\x00v\x00\x00\x00\x00\x00\x01\x00\x00\xffa\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x01\x00\x01\xd5\x16\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\xc5\xe8\x00\x00\x00\x92\x00\x00\x00\x00\x00\x01\x00\x01Um\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x02V\x96\x00\x00\x008\x00\x00\x00\x00\x00\x01\x00\x00\x7fi" +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/python/pw_multiScriptEditor/jedi/__init__.py b/python/pw_multiScriptEditor/jedi/__init__.py new file mode 100644 index 0000000..a8439f8 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/__init__.py @@ -0,0 +1,41 @@ +""" +Jedi is an autocompletion tool for Python that can be used in IDEs/editors. +Jedi works. Jedi is fast. It understands all of the basic Python syntax +elements including many builtin functions. + +Additionaly, Jedi suports two different goto functions and has support for +renaming as well as Pydoc support and some other IDE features. + +Jedi uses a very simple API to connect with IDE's. There's a reference +implementation as a `VIM-Plugin `_, +which uses Jedi's autocompletion. I encourage you to use Jedi in your IDEs. +It's really easy. If there are any problems (also with licensing), just contact +me. + +To give you a simple example how you can use the Jedi library, here is an +example for the autocompletion feature: + +>>> import jedi +>>> source = ''' +... import datetime +... datetime.da''' +>>> script = jedi.Script(source, 3, len('datetime.da'), 'example.py') +>>> script + +>>> completions = script.completions() +>>> completions #doctest: +ELLIPSIS +[, , ...] +>>> print(completions[0].complete) +te +>>> print(completions[0].name) +date + +As you see Jedi is pretty simple and allows you to concentrate on writing a +good text editor, while still having very good IDE features for Python. +""" + +__version__ = '0.8.1-final0' + +from jedi.api import Script, Interpreter, NotFoundError, set_debug_function +from jedi.api import preload_module, defined_names +from jedi import settings diff --git a/python/pw_multiScriptEditor/jedi/__main__.py b/python/pw_multiScriptEditor/jedi/__main__.py new file mode 100644 index 0000000..b263971 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/__main__.py @@ -0,0 +1,43 @@ +from sys import argv +from os.path import join, dirname, abspath, isdir + + +if len(argv) == 2 and argv[1] == 'repl': + # don't want to use __main__ only for repl yet, maybe we want to use it for + # something else. So just use the keyword ``repl`` for now. + print(join(dirname(abspath(__file__)), 'api', 'replstartup.py')) +elif len(argv) > 1 and argv[1] == 'linter': + """ + This is a pre-alpha API. You're not supposed to use it at all, except for + testing. It will very likely change. + """ + import jedi + import sys + + if '--debug' in sys.argv: + jedi.set_debug_function() + + for path in sys.argv[2:]: + if path.startswith('--'): + continue + if isdir(path): + import fnmatch + import os + + paths = [] + for root, dirnames, filenames in os.walk(path): + for filename in fnmatch.filter(filenames, '*.py'): + paths.append(os.path.join(root, filename)) + else: + paths = [path] + + try: + for path in paths: + for error in jedi.Script(path=path)._analysis(): + print(error) + except Exception: + if '--pdb' in sys.argv: + import pdb + pdb.post_mortem() + else: + raise diff --git a/python/pw_multiScriptEditor/jedi/_compatibility.py b/python/pw_multiScriptEditor/jedi/_compatibility.py new file mode 100644 index 0000000..61c6d95 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/_compatibility.py @@ -0,0 +1,199 @@ +""" +To ensure compatibility from Python ``2.6`` - ``3.3``, a module has been +created. Clearly there is huge need to use conforming syntax. +""" +import sys +import imp +import os +import re +try: + import importlib +except ImportError: + pass + +is_py3 = sys.version_info[0] >= 3 +is_py33 = is_py3 and sys.version_info.minor >= 3 +is_py26 = not is_py3 and sys.version_info[1] < 7 + + +def find_module_py33(string, path=None): + loader = importlib.machinery.PathFinder.find_module(string, path) + + if loader is None and path is None: # Fallback to find builtins + loader = importlib.find_loader(string) + + if loader is None: + raise ImportError("Couldn't find a loader for {0}".format(string)) + + try: + is_package = loader.is_package(string) + if is_package: + module_path = os.path.dirname(loader.path) + module_file = None + else: + module_path = loader.get_filename(string) + module_file = open(module_path, 'rb') + except AttributeError: + # ExtensionLoader has not attribute get_filename, instead it has a + # path attribute that we can use to retrieve the module path + try: + module_path = loader.path + module_file = open(loader.path, 'rb') + except AttributeError: + module_path = string + module_file = None + finally: + is_package = False + + return module_file, module_path, is_package + + +def find_module_pre_py33(string, path=None): + module_file, module_path, description = imp.find_module(string, path) + module_type = description[2] + return module_file, module_path, module_type is imp.PKG_DIRECTORY + + +find_module = find_module_py33 if is_py33 else find_module_pre_py33 +find_module.__doc__ = """ +Provides information about a module. + +This function isolates the differences in importing libraries introduced with +python 3.3 on; it gets a module name and optionally a path. It will return a +tuple containin an open file for the module (if not builtin), the filename +or the name of the module if it is a builtin one and a boolean indicating +if the module is contained in a package. +""" + +# next was defined in python 2.6, in python 3 obj.next won't be possible +# anymore +try: + next = next +except NameError: + _raiseStopIteration = object() + + def next(iterator, default=_raiseStopIteration): + if not hasattr(iterator, 'next'): + raise TypeError("not an iterator") + try: + return iterator.next() + except StopIteration: + if default is _raiseStopIteration: + raise + else: + return default + +# unicode function +try: + unicode = unicode +except NameError: + unicode = str + +if is_py3: + u = lambda s: s +else: + u = lambda s: s.decode('utf-8') + +u.__doc__ = """ +Decode a raw string into unicode object. Do nothing in Python 3. +""" + +# exec function +if is_py3: + def exec_function(source, global_map): + exec(source, global_map) +else: + eval(compile("""def exec_function(source, global_map): + exec source in global_map """, 'blub', 'exec')) + +# re-raise function +if is_py3: + def reraise(exception, traceback): + raise exception.with_traceback(traceback) +else: + eval(compile(""" +def reraise(exception, traceback): + raise exception, None, traceback +""", 'blub', 'exec')) + +reraise.__doc__ = """ +Re-raise `exception` with a `traceback` object. + +Usage:: + + reraise(Exception, sys.exc_info()[2]) + +""" + +# hasattr function used because python +if is_py3: + hasattr = hasattr +else: + def hasattr(obj, name): + try: + getattr(obj, name) + return True + except AttributeError: + return False + + +class Python3Method(object): + def __init__(self, func): + self.func = func + + def __get__(self, obj, objtype): + if obj is None: + return lambda *args, **kwargs: self.func(*args, **kwargs) + else: + return lambda *args, **kwargs: self.func(obj, *args, **kwargs) + + +def use_metaclass(meta, *bases): + """ Create a class with a metaclass. """ + if not bases: + bases = (object,) + return meta("HackClass", bases, {}) + + +try: + encoding = sys.stdout.encoding + if encoding is None: + encoding = 'utf-8' +except AttributeError: + encoding = 'ascii' + + +def u(string): + """Cast to unicode DAMMIT! + Written because Python2 repr always implicitly casts to a string, so we + have to cast back to a unicode (and we now that we always deal with valid + unicode, because we check that in the beginning). + """ + if is_py3: + return str(string) + elif not isinstance(string, unicode): + return unicode(str(string), 'UTF-8') + return string + +try: + import builtins # module name in python 3 +except ImportError: + import __builtin__ as builtins + + +import ast + + +def literal_eval(string): + # py3.0, py3.1 and py32 don't support unicode literals. Support those, I + # don't want to write two versions of the tokenizer. + if is_py3 and sys.version_info.minor < 3: + if re.match('[uU][\'"]', string): + string = string[1:] + return ast.literal_eval(string) + + +try: + from itertools import zip_longest +except ImportError: + from itertools import izip_longest as zip_longest # Python 2 diff --git a/python/pw_multiScriptEditor/jedi/api/__init__.py b/python/pw_multiScriptEditor/jedi/api/__init__.py new file mode 100644 index 0000000..1aa73f7 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/api/__init__.py @@ -0,0 +1,725 @@ +""" +The API basically only provides one class. You can create a :class:`Script` and +use its methods. + +Additionally you can add a debug function with :func:`set_debug_function` and +catch :exc:`NotFoundError` which is being raised if your completion is not +possible. + +.. warning:: Please, note that Jedi is **not thread safe**. +""" +import re +import os +import warnings +import sys +from itertools import chain + +from jedi._compatibility import next, unicode, builtins +from jedi.parser import Parser +from jedi.parser.tokenize import source_tokens +from jedi.parser import representation as pr +from jedi.parser.user_context import UserContext, UserContextParser +from jedi import debug +from jedi import settings +from jedi import common +from jedi import cache +from jedi.api import keywords +from jedi.api import classes +from jedi.api import interpreter +from jedi.api import usages +from jedi.api import helpers +from jedi.evaluate import Evaluator, filter_private_variable +from jedi.evaluate import representation as er +from jedi.evaluate import compiled +from jedi.evaluate import imports +from jedi.evaluate.helpers import FakeName +from jedi.evaluate.finder import get_names_of_scope +from jedi.evaluate.helpers import search_call_signatures +from jedi.evaluate import analysis + +# Jedi uses lots and lots of recursion. By setting this a little bit higher, we +# can remove some "maximum recursion depth" errors. +sys.setrecursionlimit(2000) + + +class NotFoundError(Exception): + """A custom error to avoid catching the wrong exceptions.""" + + +class Script(object): + """ + A Script is the base for completions, goto or whatever you want to do with + |jedi|. + + You can either use the ``source`` parameter or ``path`` to read a file. + Usually you're going to want to use both of them (in an editor). + + :param source: The source code of the current file, separated by newlines. + :type source: str + :param line: The line to perform actions on (starting with 1). + :type line: int + :param col: The column of the cursor (starting with 0). + :type col: int + :param path: The path of the file in the file system, or ``''`` if + it hasn't been saved yet. + :type path: str or None + :param encoding: The encoding of ``source``, if it is not a + ``unicode`` object (default ``'utf-8'``). + :type encoding: str + :param source_encoding: The encoding of ``source``, if it is not a + ``unicode`` object (default ``'utf-8'``). + :type encoding: str + """ + def __init__(self, source=None, line=None, column=None, path=None, + encoding='utf-8', source_path=None, source_encoding=None): + if source_path is not None: + warnings.warn("Use path instead of source_path.", DeprecationWarning) + path = source_path + if source_encoding is not None: + warnings.warn("Use encoding instead of source_encoding.", DeprecationWarning) + encoding = source_encoding + + self._orig_path = path + self.path = None if path is None else os.path.abspath(path) + + if source is None: + with open(path) as f: + source = f.read() + + self.source = common.source_to_unicode(source, encoding) + lines = common.splitlines(self.source) + line = max(len(lines), 1) if line is None else line + if not (0 < line <= len(lines)): + raise ValueError('`line` parameter is not in a valid range.') + + line_len = len(lines[line - 1]) + column = line_len if column is None else column + if not (0 <= column <= line_len): + raise ValueError('`column` parameter is not in a valid range.') + self._pos = line, column + + cache.clear_caches() + debug.reset_time() + self._user_context = UserContext(self.source, self._pos) + self._parser = UserContextParser(self.source, path, self._pos, self._user_context) + self._evaluator = Evaluator() + debug.speed('init') + + @property + def source_path(self): + """ + .. deprecated:: 0.7.0 + Use :attr:`.path` instead. + .. todo:: Remove! + """ + warnings.warn("Use path instead of source_path.", DeprecationWarning) + return self.path + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, repr(self._orig_path)) + + def completions(self): + """ + Return :class:`classes.Completion` objects. Those objects contain + information about the completions, more than just names. + + :return: Completion objects, sorted by name and __ comes last. + :rtype: list of :class:`classes.Completion` + """ + def get_completions(user_stmt, bs): + if isinstance(user_stmt, pr.Import): + context = self._user_context.get_context() + next(context) # skip the path + if next(context) == 'from': + # completion is just "import" if before stands from .. + return ((k, bs) for k in keywords.keyword_names('import')) + return self._simple_complete(path, like) + + def completion_possible(path): + """ + The completion logic is kind of complicated, because we strip the + last word part. To ignore certain strange patterns with dots, just + use regex. + """ + if re.match('\d+\.\.$|\.{4}$', path): + return True # check Ellipsis and float literal `1.` + + return not re.search(r'^\.|^\d\.$|\.\.$', path) + + debug.speed('completions start') + path = self._user_context.get_path_until_cursor() + if not completion_possible(path): + return [] + path, dot, like = helpers.completion_parts(path) + + user_stmt = self._parser.user_stmt_with_whitespace() + b = compiled.builtin + completions = get_completions(user_stmt, b) + + if not dot: + # add named params + for call_sig in self.call_signatures(): + # allow protected access, because it's a public API. + module = call_sig._definition.get_parent_until() + # Compiled modules typically don't allow keyword arguments. + if not isinstance(module, compiled.CompiledObject): + for p in call_sig.params: + # Allow access on _definition here, because it's a + # public API and we don't want to make the internal + # Name object public. + if p._definition.stars == 0: # no *args/**kwargs + completions.append((p._definition.get_name(), p)) + + if not path and not isinstance(user_stmt, pr.Import): + # add keywords + completions += ((k, b) for k in keywords.keyword_names(all=True)) + + needs_dot = not dot and path + + comps = [] + comp_dct = {} + for c, s in set(completions): + n = str(c.names[-1]) + if settings.case_insensitive_completion \ + and n.lower().startswith(like.lower()) \ + or n.startswith(like): + if not filter_private_variable(s, user_stmt or self._parser.user_scope(), n): + new = classes.Completion(self._evaluator, c, needs_dot, len(like), s) + k = (new.name, new.complete) # key + if k in comp_dct and settings.no_completion_duplicates: + comp_dct[k]._same_name_completions.append(new) + else: + comp_dct[k] = new + comps.append(new) + + debug.speed('completions end') + + return sorted(comps, key=lambda x: (x.name.startswith('__'), + x.name.startswith('_'), + x.name.lower())) + + def _simple_complete(self, path, like): + try: + scopes = list(self._prepare_goto(path, True)) + except NotFoundError: + scopes = [] + scope_names_generator = get_names_of_scope(self._evaluator, + self._parser.user_scope(), + self._pos) + completions = [] + for scope, name_list in scope_names_generator: + for c in name_list: + completions.append((c, scope)) + else: + completions = [] + debug.dbg('possible completion scopes: %s', scopes) + for s in scopes: + if s.isinstance(er.Function): + names = s.get_magic_function_names() + elif isinstance(s, imports.ImportWrapper): + under = like + self._user_context.get_path_after_cursor() + if under == 'import': + current_line = self._user_context.get_position_line() + if not current_line.endswith('import import'): + continue + a = s.import_stmt.alias + if a and a.start_pos <= self._pos <= a.end_pos: + continue + names = s.get_defined_names(on_import_stmt=True) + else: + names = [] + for _, new_names in s.scope_names_generator(): + names += new_names + + for c in names: + completions.append((c, s)) + return completions + + def _prepare_goto(self, goto_path, is_completion=False): + """ + Base for completions/goto. Basically it returns the resolved scopes + under cursor. + """ + debug.dbg('start: %s in %s', goto_path, self._parser.user_scope()) + + user_stmt = self._parser.user_stmt_with_whitespace() + if not user_stmt and len(goto_path.split('\n')) > 1: + # If the user_stmt is not defined and the goto_path is multi line, + # something's strange. Most probably the backwards tokenizer + # matched to much. + return [] + + if isinstance(user_stmt, pr.Import): + scopes = [helpers.get_on_import_stmt(self._evaluator, self._user_context, + user_stmt, is_completion)[0]] + else: + # just parse one statement, take it and evaluate it + eval_stmt = self._get_under_cursor_stmt(goto_path) + + if not is_completion: + # goto_definition returns definitions of its statements if the + # cursor is on the assignee. By changing the start_pos of our + # "pseudo" statement, the Jedi evaluator can find the assignees. + if user_stmt is not None: + eval_stmt.start_pos = user_stmt.end_pos + scopes = self._evaluator.eval_statement(eval_stmt) + return scopes + + def _get_under_cursor_stmt(self, cursor_txt): + tokenizer = source_tokens(cursor_txt, line_offset=self._pos[0] - 1) + r = Parser(cursor_txt, no_docstr=True, tokenizer=tokenizer) + try: + # Take the last statement available. + stmt = r.module.statements[-1] + except IndexError: + raise NotFoundError() + if isinstance(stmt, pr.KeywordStatement): + stmt = stmt.stmt + if not isinstance(stmt, pr.Statement): + raise NotFoundError() + + user_stmt = self._parser.user_stmt() + if user_stmt is None: + # Set the start_pos to a pseudo position, that doesn't exist but works + # perfectly well (for both completions in docstrings and statements). + stmt.start_pos = self._pos + else: + stmt.start_pos = user_stmt.start_pos + stmt.parent = self._parser.user_scope() + return stmt + + def complete(self): + """ + .. deprecated:: 0.6.0 + Use :attr:`.completions` instead. + .. todo:: Remove! + """ + warnings.warn("Use completions instead.", DeprecationWarning) + return self.completions() + + def goto(self): + """ + .. deprecated:: 0.6.0 + Use :attr:`.goto_assignments` instead. + .. todo:: Remove! + """ + warnings.warn("Use goto_assignments instead.", DeprecationWarning) + return self.goto_assignments() + + def definition(self): + """ + .. deprecated:: 0.6.0 + Use :attr:`.goto_definitions` instead. + .. todo:: Remove! + """ + warnings.warn("Use goto_definitions instead.", DeprecationWarning) + return self.goto_definitions() + + def get_definition(self): + """ + .. deprecated:: 0.5.0 + Use :attr:`.goto_definitions` instead. + .. todo:: Remove! + """ + warnings.warn("Use goto_definitions instead.", DeprecationWarning) + return self.goto_definitions() + + def related_names(self): + """ + .. deprecated:: 0.6.0 + Use :attr:`.usages` instead. + .. todo:: Remove! + """ + warnings.warn("Use usages instead.", DeprecationWarning) + return self.usages() + + def get_in_function_call(self): + """ + .. deprecated:: 0.6.0 + Use :attr:`.call_signatures` instead. + .. todo:: Remove! + """ + return self.function_definition() + + def function_definition(self): + """ + .. deprecated:: 0.6.0 + Use :attr:`.call_signatures` instead. + .. todo:: Remove! + """ + warnings.warn("Use call_signatures instead.", DeprecationWarning) + sig = self.call_signatures() + return sig[0] if sig else None + + def goto_definitions(self): + """ + Return the definitions of a the path under the cursor. goto function! + This follows complicated paths and returns the end, not the first + definition. The big difference between :meth:`goto_assignments` and + :meth:`goto_definitions` is that :meth:`goto_assignments` doesn't + follow imports and statements. Multiple objects may be returned, + because Python itself is a dynamic language, which means depending on + an option you can have two different versions of a function. + + :rtype: list of :class:`classes.Definition` + """ + def resolve_import_paths(scopes): + for s in scopes.copy(): + if isinstance(s, imports.ImportWrapper): + scopes.remove(s) + scopes.update(resolve_import_paths(set(s.follow()))) + return scopes + + user_stmt = self._parser.user_stmt_with_whitespace() + goto_path = self._user_context.get_path_under_cursor() + context = self._user_context.get_context() + definitions = set() + if next(context) in ('class', 'def'): + definitions = set([self._parser.user_scope()]) + else: + # Fetch definition of callee, if there's no path otherwise. + if not goto_path: + (call, _) = search_call_signatures(user_stmt, self._pos) + if call is not None: + while call.next is not None: + call = call.next + # reset cursor position: + (row, col) = call.name.end_pos + pos = (row, max(col - 1, 0)) + self._user_context = UserContext(self.source, pos) + # then try to find the path again + goto_path = self._user_context.get_path_under_cursor() + + if not definitions: + if goto_path: + definitions = set(self._prepare_goto(goto_path)) + + definitions = resolve_import_paths(definitions) + d = set([classes.Definition(self._evaluator, s) for s in definitions + if s is not imports.ImportWrapper.GlobalNamespace]) + return helpers.sorted_definitions(d) + + def goto_assignments(self): + """ + Return the first definition found. Imports and statements aren't + followed. Multiple objects may be returned, because Python itself is a + dynamic language, which means depending on an option you can have two + different versions of a function. + + :rtype: list of :class:`classes.Definition` + """ + results, _ = self._goto() + d = [classes.Definition(self._evaluator, d) for d in set(results) + if d is not imports.ImportWrapper.GlobalNamespace] + return helpers.sorted_definitions(d) + + def _goto(self, add_import_name=False): + """ + Used for goto_assignments and usages. + + :param add_import_name: Add the the name (if import) to the result. + """ + def follow_inexistent_imports(defs): + """ Imports can be generated, e.g. following + `multiprocessing.dummy` generates an import dummy in the + multiprocessing module. The Import doesn't exist -> follow. + """ + definitions = set(defs) + for d in defs: + if isinstance(d.parent, pr.Import) \ + and d.start_pos == (0, 0): + i = imports.ImportWrapper(self._evaluator, d.parent).follow(is_goto=True) + definitions.remove(d) + definitions |= follow_inexistent_imports(i) + return definitions + + goto_path = self._user_context.get_path_under_cursor() + context = self._user_context.get_context() + user_stmt = self._parser.user_stmt() + if next(context) in ('class', 'def'): + user_scope = self._parser.user_scope() + definitions = set([user_scope.name]) + search_name = unicode(user_scope.name) + elif isinstance(user_stmt, pr.Import): + s, name_part = helpers.get_on_import_stmt(self._evaluator, + self._user_context, user_stmt) + try: + definitions = [s.follow(is_goto=True)[0]] + except IndexError: + definitions = [] + search_name = unicode(name_part) + + if add_import_name: + import_name = user_stmt.get_defined_names() + # imports have only one name + if not user_stmt.star \ + and unicode(name_part) == unicode(import_name[0].names[-1]): + definitions.append(import_name[0]) + else: + stmt = self._get_under_cursor_stmt(goto_path) + + def test_lhs(): + """ + Special rule for goto, left hand side of the statement returns + itself, if the name is ``foo``, but not ``foo.bar``. + """ + if isinstance(user_stmt, pr.Statement): + for name in user_stmt.get_defined_names(): + if name.start_pos <= self._pos <= name.end_pos \ + and len(name.names) == 1: + return name, unicode(name.names[-1]) + return None, None + + lhs, search_name = test_lhs() + if lhs is None: + expression_list = stmt.expression_list() + if len(expression_list) == 0: + return [], '' + # Only the first command is important, the rest should basically not + # happen except in broken code (e.g. docstrings that aren't code). + call = expression_list[0] + if isinstance(call, pr.Call): + call_path = list(call.generate_call_path()) + else: + call_path = [call] + + defs, search_name_part = self._evaluator.goto(stmt, call_path) + search_name = unicode(search_name_part) + definitions = follow_inexistent_imports(defs) + else: + definitions = [lhs] + if isinstance(user_stmt, pr.Statement): + c = user_stmt.expression_list() + if c and not isinstance(c[0], (str, unicode)) \ + and c[0].start_pos > self._pos \ + and not re.search(r'\.\w+$', goto_path): + # The cursor must be after the start, otherwise the + # statement is just an assignee. + definitions = [user_stmt] + return definitions, search_name + + def usages(self, additional_module_paths=()): + """ + Return :class:`classes.Definition` objects, which contain all + names that point to the definition of the name under the cursor. This + is very useful for refactoring (renaming), or to show all usages of a + variable. + + .. todo:: Implement additional_module_paths + + :rtype: list of :class:`classes.Definition` + """ + temp, settings.dynamic_flow_information = \ + settings.dynamic_flow_information, False + user_stmt = self._parser.user_stmt() + definitions, search_name = self._goto(add_import_name=True) + if isinstance(user_stmt, pr.Statement): + c = user_stmt.expression_list()[0] + if not isinstance(c, unicode) and self._pos < c.start_pos: + # the search_name might be before `=` + definitions = [v for v in user_stmt.get_defined_names() + if unicode(v.names[-1]) == search_name] + if not isinstance(user_stmt, pr.Import): + # import case is looked at with add_import_name option + definitions = usages.usages_add_import_modules(self._evaluator, definitions, search_name) + + module = set([d.get_parent_until() for d in definitions]) + module.add(self._parser.module()) + names = usages.usages(self._evaluator, definitions, search_name, module) + + for d in set(definitions): + try: + name_part = d.names[-1] + except AttributeError: + names.append(classes.Definition(self._evaluator, d)) + else: + names.append(classes.Definition(self._evaluator, name_part)) + + settings.dynamic_flow_information = temp + return helpers.sorted_definitions(set(names)) + + def call_signatures(self): + """ + Return the function object of the call you're currently in. + + E.g. if the cursor is here:: + + abs(# <-- cursor is here + + This would return the ``abs`` function. On the other hand:: + + abs()# <-- cursor is here + + This would return ``None``. + + :rtype: list of :class:`classes.CallSignature` + """ + user_stmt = self._parser.user_stmt_with_whitespace() + call, index = search_call_signatures(user_stmt, self._pos) + if call is None: + return [] + + stmt_el = call + while isinstance(stmt_el.parent, pr.StatementElement): + # Go to parent literal/variable until not possible anymore. This + # makes it possible to return the whole expression. + stmt_el = stmt_el.parent + # We can reset the execution since it's a new object + # (fast_parent_copy). + execution_arr, call.execution = call.execution, None + + with common.scale_speed_settings(settings.scale_call_signatures): + _callable = lambda: self._evaluator.eval_call(stmt_el) + origins = cache.cache_call_signatures(_callable, self.source, + self._pos, user_stmt) + debug.speed('func_call followed') + + key_name = None + try: + detail = execution_arr[index].assignment_details[0] + except IndexError: + pass + else: + try: + key_name = unicode(detail[0][0].name) + except (IndexError, AttributeError): + pass + return [classes.CallSignature(self._evaluator, o, call, index, key_name) + for o in origins if o.is_callable()] + + def _analysis(self): + #statements = set(chain(*self._parser.module().used_names.values())) + stmts, imps = analysis.get_module_statements(self._parser.module()) + # Sort the statements so that the results are reproducible. + for i in imps: + iw = imports.ImportWrapper(self._evaluator, i, + nested_resolve=True).follow() + if i.is_nested() and any(not isinstance(i, pr.Module) for i in iw): + analysis.add(self._evaluator, 'import-error', i.namespace.names[-1]) + for stmt in sorted(stmts, key=lambda obj: obj.start_pos): + if not (isinstance(stmt.parent, pr.ForFlow) + and stmt.parent.set_stmt == stmt): + self._evaluator.eval_statement(stmt) + + ana = [a for a in self._evaluator.analysis if self.path == a.path] + return sorted(set(ana), key=lambda x: x.line) + + +class Interpreter(Script): + """ + Jedi API for Python REPLs. + + In addition to completion of simple attribute access, Jedi + supports code completion based on static code analysis. + Jedi can complete attributes of object which is not initialized + yet. + + >>> from os.path import join + >>> namespace = locals() + >>> script = Interpreter('join().up', [namespace]) + >>> print(script.completions()[0].name) + upper + """ + + def __init__(self, source, namespaces=[], **kwds): + """ + Parse `source` and mixin interpreted Python objects from `namespaces`. + + :type source: str + :arg source: Code to parse. + :type namespaces: list of dict + :arg namespaces: a list of namespace dictionaries such as the one + returned by :func:`locals`. + + Other optional arguments are same as the ones for :class:`Script`. + If `line` and `column` are None, they are assumed be at the end of + `source`. + """ + super(Interpreter, self).__init__(source, **kwds) + self.namespaces = namespaces + + # Here we add the namespaces to the current parser. + interpreter.create(self._evaluator, namespaces[0], self._parser.module()) + + def _simple_complete(self, path, like): + user_stmt = self._parser.user_stmt_with_whitespace() + is_simple_path = not path or re.search('^[\w][\w\d.]*$', path) + if isinstance(user_stmt, pr.Import) or not is_simple_path: + return super(Interpreter, self)._simple_complete(path, like) + else: + class NamespaceModule(object): + def __getattr__(_, name): + for n in self.namespaces: + try: + return n[name] + except KeyError: + pass + raise AttributeError() + + def __dir__(_): + gen = (n.keys() for n in self.namespaces) + return list(set(chain.from_iterable(gen))) + + paths = path.split('.') if path else [] + + namespaces = (NamespaceModule(), builtins) + for p in paths: + old, namespaces = namespaces, [] + for n in old: + try: + namespaces.append(getattr(n, p)) + except AttributeError: + pass + + completions = [] + for namespace in namespaces: + for name in dir(namespace): + if name.lower().startswith(like.lower()): + scope = self._parser.module() + n = FakeName(name, scope) + completions.append((n, scope)) + return completions + + +def defined_names(source, path=None, encoding='utf-8'): + """ + Get all definitions in `source` sorted by its position. + + This functions can be used for listing functions, classes and + data defined in a file. This can be useful if you want to list + them in "sidebar". Each element in the returned list also has + `defined_names` method which can be used to get sub-definitions + (e.g., methods in class). + + :rtype: list of classes.Definition + """ + parser = Parser( + common.source_to_unicode(source, encoding), + module_path=path, + ) + return classes.defined_names(Evaluator(), parser.module) + + +def preload_module(*modules): + """ + Preloading modules tells Jedi to load a module now, instead of lazy parsing + of modules. Usful for IDEs, to control which modules to load on startup. + + :param modules: different module names, list of string. + """ + for m in modules: + s = "import %s as x; x." % m + Script(s, 1, len(s), None).completions() + + +def set_debug_function(func_cb=debug.print_to_stdout, warnings=True, + notices=True, speed=True): + """ + Define a callback debug function to get all the debug messages. + + :param func_cb: The callback function for debug messages, with n params. + """ + debug.debug_function = func_cb + debug.enable_warning = warnings + debug.enable_notice = notices + debug.enable_speed = speed diff --git a/python/pw_multiScriptEditor/jedi/api/classes.py b/python/pw_multiScriptEditor/jedi/api/classes.py new file mode 100644 index 0000000..ec8d725 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/api/classes.py @@ -0,0 +1,793 @@ +""" +The :mod:`jedi.api.classes` module contains the return classes of the API. +These classes are the much bigger part of the whole API, because they contain +the interesting information about completion and goto operations. +""" +import warnings +from itertools import chain + +from jedi._compatibility import next, unicode, use_metaclass +from jedi import settings +from jedi import common +from jedi.parser import representation as pr +from jedi.cache import underscore_memoization +from jedi.evaluate.cache import memoize_default, CachedMetaClass +from jedi.evaluate import representation as er +from jedi.evaluate import iterable +from jedi.evaluate import imports +from jedi.evaluate import compiled +from jedi.api import keywords +from jedi.evaluate.finder import get_names_of_scope + + +def defined_names(evaluator, scope): + """ + List sub-definitions (e.g., methods in class). + + :type scope: Scope + :rtype: list of Definition + """ + # Calling get_names_of_scope doesn't make sense always. It might include + # star imports or inherited stuff. Wanted? + # TODO discuss! + if isinstance(scope, pr.Module): + pair = scope, scope.get_defined_names() + else: + pair = next(get_names_of_scope(evaluator, scope, star_search=False, + include_builtin=False), None) + names = pair[1] if pair else [] + names = [n for n in names if isinstance(n, pr.Import) or (len(n) == 1)] + return [Definition(evaluator, d) for d in sorted(names, key=lambda s: s.start_pos)] + + +class BaseDefinition(object): + _mapping = { + 'posixpath': 'os.path', + 'riscospath': 'os.path', + 'ntpath': 'os.path', + 'os2emxpath': 'os.path', + 'macpath': 'os.path', + 'genericpath': 'os.path', + 'posix': 'os', + '_io': 'io', + '_functools': 'functools', + '_sqlite3': 'sqlite3', + '__builtin__': '', + 'builtins': '', + } + + _tuple_mapping = dict((tuple(k.split('.')), v) for (k, v) in { + 'argparse._ActionsContainer': 'argparse.ArgumentParser', + '_sre.SRE_Match': 're.MatchObject', + '_sre.SRE_Pattern': 're.RegexObject', + }.items()) + + def __init__(self, evaluator, definition, start_pos): + self._evaluator = evaluator + self._start_pos = start_pos + self._definition = definition + """ + An instance of :class:`jedi.parsing_representation.Base` subclass. + """ + self.is_keyword = isinstance(definition, keywords.Keyword) + + # generate a path to the definition + self._module = definition.get_parent_until() + if self.in_builtin_module(): + self.module_path = None + else: + self.module_path = self._module.path + """Shows the file path of a module. e.g. ``/usr/lib/python2.7/os.py``""" + + @property + def start_pos(self): + """ + .. deprecated:: 0.7.0 + Use :attr:`.line` and :attr:`.column` instead. + .. todo:: Remove! + """ + warnings.warn("Use line/column instead.", DeprecationWarning) + return self._start_pos + + @property + def type(self): + """ + The type of the definition. + + Here is an example of the value of this attribute. Let's consider + the following source. As what is in ``variable`` is unambiguous + to Jedi, :meth:`jedi.Script.goto_definitions` should return a list of + definition for ``sys``, ``f``, ``C`` and ``x``. + + >>> from jedi import Script + >>> source = ''' + ... import keyword + ... + ... class C: + ... pass + ... + ... class D: + ... pass + ... + ... x = D() + ... + ... def f(): + ... pass + ... + ... variable = keyword or f or C or x''' + >>> script = Script(source, len(source.splitlines()), 3, 'example.py') + >>> defs = script.goto_definitions() + + Before showing what is in ``defs``, let's sort it by :attr:`line` + so that it is easy to relate the result to the source code. + + >>> defs = sorted(defs, key=lambda d: d.line) + >>> defs # doctest: +NORMALIZE_WHITESPACE + [, , + , ] + + Finally, here is what you can get from :attr:`type`: + + >>> defs[0].type + 'module' + >>> defs[1].type + 'class' + >>> defs[2].type + 'instance' + >>> defs[3].type + 'function' + + """ + # generate the type + stripped = self._definition + if isinstance(stripped, compiled.CompiledObject): + return stripped.type() + if isinstance(stripped, er.InstanceElement): + stripped = stripped.var + if isinstance(stripped, pr.NamePart): + stripped = stripped.parent + if isinstance(stripped, pr.Name): + stripped = stripped.parent + return type(stripped).__name__.lower().replace('wrapper', '') + + def _path(self): + """The module path.""" + path = [] + + def insert_nonnone(x): + if x: + path.insert(0, x) + + if not isinstance(self._definition, keywords.Keyword): + par = self._definition + while par is not None: + if isinstance(par, pr.Import): + insert_nonnone(par.namespace) + insert_nonnone(par.from_ns) + if par.relative_count == 0: + break + with common.ignored(AttributeError): + path.insert(0, par.name) + par = par.parent + return path + + @property + def module_name(self): + """ + The module name. + + >>> from jedi import Script + >>> source = 'import json' + >>> script = Script(source, path='example.py') + >>> d = script.goto_definitions()[0] + >>> print(d.module_name) # doctest: +ELLIPSIS + json + """ + return str(self._module.name) + + def in_builtin_module(self): + """Whether this is a builtin module.""" + return isinstance(self._module, compiled.CompiledObject) + + @property + def line_nr(self): + """ + .. deprecated:: 0.5.0 + Use :attr:`.line` instead. + .. todo:: Remove! + """ + warnings.warn("Use line instead.", DeprecationWarning) + return self.line + + @property + def line(self): + """The line where the definition occurs (starting with 1).""" + if self.in_builtin_module(): + return None + return self._start_pos[0] + + @property + def column(self): + """The column where the definition occurs (starting with 0).""" + if self.in_builtin_module(): + return None + return self._start_pos[1] + + def docstring(self, raw=False): + r""" + Return a document string for this completion object. + + Example: + + >>> from jedi import Script + >>> source = '''\ + ... def f(a, b=1): + ... "Document for function f." + ... ''' + >>> script = Script(source, 1, len('def f'), 'example.py') + >>> doc = script.goto_definitions()[0].docstring() + >>> print(doc) + f(a, b = 1) + + Document for function f. + + Notice that useful extra information is added to the actual + docstring. For function, it is call signature. If you need + actual docstring, use ``raw=True`` instead. + + >>> print(script.goto_definitions()[0].docstring(raw=True)) + Document for function f. + + """ + if raw: + return _Help(self._definition).raw() + else: + return _Help(self._definition).full() + + @property + def doc(self): + """ + .. deprecated:: 0.8.0 + Use :meth:`.docstring` instead. + .. todo:: Remove! + """ + warnings.warn("Use docstring() instead.", DeprecationWarning) + return self.docstring() + + @property + def raw_doc(self): + """ + .. deprecated:: 0.8.0 + Use :meth:`.docstring` instead. + .. todo:: Remove! + """ + warnings.warn("Use docstring() instead.", DeprecationWarning) + return self.docstring(raw=True) + + @property + def description(self): + """A textual description of the object.""" + return unicode(self._definition) + + @property + def full_name(self): + """ + Dot-separated path of this object. + + It is in the form of ``[.[...]][.]``. + It is useful when you want to look up Python manual of the + object at hand. + + Example: + + >>> from jedi import Script + >>> source = ''' + ... import os + ... os.path.join''' + >>> script = Script(source, 3, len('os.path.join'), 'example.py') + >>> print(script.goto_definitions()[0].full_name) + os.path.join + + Notice that it correctly returns ``'os.path.join'`` instead of + (for example) ``'posixpath.join'``. + + """ + path = [unicode(p) for p in self._path()] + # TODO add further checks, the mapping should only occur on stdlib. + if not path: + return None # for keywords the path is empty + + with common.ignored(KeyError): + path[0] = self._mapping[path[0]] + for key, repl in self._tuple_mapping.items(): + if tuple(path[:len(key)]) == key: + path = [repl] + path[len(key):] + + return '.'.join(path if path[0] else path[1:]) + + @memoize_default() + def _follow_statements_imports(self): + """ + Follow both statements and imports, as far as possible. + """ + stripped = self._definition + if isinstance(stripped, pr.Name): + stripped = stripped.parent + + # We should probably work in `Finder._names_to_types` here. + if isinstance(stripped, pr.Function): + stripped = er.Function(self._evaluator, stripped) + elif isinstance(stripped, pr.Class): + stripped = er.Class(self._evaluator, stripped) + + if stripped.isinstance(pr.Statement): + return self._evaluator.eval_statement(stripped) + elif stripped.isinstance(pr.Import): + return imports.follow_imports(self._evaluator, [stripped]) + else: + return [stripped] + + @property + @memoize_default() + def params(self): + """ + Raises an ``AttributeError``if the definition is not callable. + Otherwise returns a list of `Definition` that represents the params. + """ + followed = self._follow_statements_imports() + if not followed or not followed[0].is_callable(): + raise AttributeError() + followed = followed[0] # only check the first one. + + if followed.isinstance(er.Function): + if isinstance(followed, er.InstanceElement): + params = followed.params[1:] + else: + params = followed.params + elif followed.isinstance(er.compiled.CompiledObject): + params = followed.params + else: + try: + sub = followed.get_subscope_by_name('__init__') + params = sub.params[1:] # ignore self + except KeyError: + return [] + return [_Param(self._evaluator, p) for p in params] + + def parent(self): + if isinstance(self._definition, compiled.CompiledObject): + non_flow = self._definition.parent + else: + scope = self._definition.get_parent_until(pr.IsScope, include_current=False) + non_flow = scope.get_parent_until(pr.Flow, reverse=True) + return Definition(self._evaluator, non_flow) + + def __repr__(self): + return "<%s %s>" % (type(self).__name__, self.description) + + +class Completion(BaseDefinition): + """ + `Completion` objects are returned from :meth:`api.Script.completions`. They + provide additional information about a completion. + """ + def __init__(self, evaluator, name, needs_dot, like_name_length, base): + super(Completion, self).__init__(evaluator, name.parent, name.start_pos) + + self._name = name + self._needs_dot = needs_dot + self._like_name_length = like_name_length + self._base = base + + # Completion objects with the same Completion name (which means + # duplicate items in the completion) + self._same_name_completions = [] + + def _complete(self, like_name): + dot = '.' if self._needs_dot else '' + append = '' + if settings.add_bracket_after_function \ + and self.type == 'Function': + append = '(' + + if settings.add_dot_after_module: + if isinstance(self._base, pr.Module): + append += '.' + if isinstance(self._base, pr.Param): + append += '=' + + name = str(self._name.names[-1]) + if like_name: + name = name[self._like_name_length:] + return dot + name + append + + @property + def complete(self): + """ + Return the rest of the word, e.g. completing ``isinstance``:: + + isinstan# <-- Cursor is here + + would return the string 'ce'. It also adds additional stuff, depending + on your `settings.py`. + """ + return self._complete(True) + + @property + def name(self): + """ + Similar to :attr:`complete`, but return the whole word, for + example:: + + isinstan + + would return `isinstance`. + """ + return unicode(self._name.names[-1]) + + @property + def name_with_symbols(self): + """ + Similar to :attr:`name`, but like :attr:`name` + returns also the symbols, for example:: + + list() + + would return ``.append`` and others (which means it adds a dot). + """ + return self._complete(False) + + @property + def word(self): + """ + .. deprecated:: 0.6.0 + Use :attr:`.name` instead. + .. todo:: Remove! + """ + warnings.warn("Use name instead.", DeprecationWarning) + return self.name + + @property + def description(self): + """Provide a description of the completion object.""" + parent = self._name.parent + if parent is None: + return '' + t = self.type + if t == 'statement' or t == 'import': + desc = self._definition.get_code(False) + else: + desc = '.'.join(unicode(p) for p in self._path()) + + line = '' if self.in_builtin_module else '@%s' % self.line + return '%s: %s%s' % (t, desc, line) + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self._name) + + def docstring(self, raw=False, fast=True): + """ + :param fast: Don't follow imports that are only one level deep like + ``import foo``, but follow ``from foo import bar``. This makes + sense for speed reasons. Completing `import a` is slow if you use + the ``foo.docstring(fast=False)`` on every object, because it + parses all libraries starting with ``a``. + """ + definition = self._definition + if isinstance(self._definition, pr.Import): + i = imports.ImportWrapper(self._evaluator, self._definition) + if len(i.import_path) > 1 or not fast: + followed = self._follow_statements_imports() + if followed: + # TODO: Use all of the followed objects as input to Documentation. + definition = followed[0] + + if raw: + return _Help(definition).raw() + else: + return _Help(definition).full() + + @property + def type(self): + """ + The type of the completion objects. Follows imports. For a further + description, look at :attr:`jedi.api.classes.BaseDefinition.type`. + """ + if isinstance(self._definition, pr.Import): + i = imports.ImportWrapper(self._evaluator, self._definition) + if len(i.import_path) <= 1: + return 'module' + + followed = self.follow_definition() + if followed: + # Caveat: Only follows the first one, ignore the other ones. + # This is ok, since people are almost never interested in + # variations. + return followed[0].type + return super(Completion, self).type + + @memoize_default() + def _follow_statements_imports(self): + # imports completion is very complicated and needs to be treated + # separately in Completion. + if self._definition.isinstance(pr.Import) and self._definition.alias is None: + i = imports.ImportWrapper(self._evaluator, self._definition, True) + import_path = i.import_path + (unicode(self._name),) + try: + return imports.get_importer(self._evaluator, import_path, + i._importer.module).follow(self._evaluator) + except imports.ModuleNotFound: + pass + return super(Completion, self)._follow_statements_imports() + + @memoize_default() + def follow_definition(self): + """ + Return the original definitions. I strongly recommend not using it for + your completions, because it might slow down |jedi|. If you want to + read only a few objects (<=20), it might be useful, especially to get + the original docstrings. The basic problem of this function is that it + follows all results. This means with 1000 completions (e.g. numpy), + it's just PITA-slow. + """ + defs = self._follow_statements_imports() + return [Definition(self._evaluator, d) for d in defs] + + +class Definition(use_metaclass(CachedMetaClass, BaseDefinition)): + """ + *Definition* objects are returned from :meth:`api.Script.goto_assignments` + or :meth:`api.Script.goto_definitions`. + """ + def __init__(self, evaluator, definition): + super(Definition, self).__init__(evaluator, definition, definition.start_pos) + + @property + @underscore_memoization + def name(self): + """ + Name of variable/function/class/module. + + For example, for ``x = None`` it returns ``'x'``. + + :rtype: str or None + """ + d = self._definition + if isinstance(d, er.InstanceElement): + d = d.var + + if isinstance(d, (compiled.CompiledObject, compiled.CompiledName)): + name = d.name + elif isinstance(d, pr.Name): + name = d.names[-1] + elif isinstance(d, iterable.Array): + name = d.type + elif isinstance(d, (pr.Class, er.Class, er.Instance, + er.Function, pr.Function)): + name = d.name + elif isinstance(d, pr.Module): + name = self.module_name + elif isinstance(d, pr.Import): + try: + name = d.get_defined_names()[0].names[-1] + except (AttributeError, IndexError): + return None + elif isinstance(d, pr.Param): + name = d.get_name() + elif isinstance(d, pr.Statement): + try: + expression_list = d.assignment_details[0][0] + name = expression_list[0].name.names[-1] + except IndexError: + return None + elif isinstance(d, iterable.Generator): + return None + elif isinstance(d, pr.NamePart): + name = d + return unicode(name) + + @property + def description(self): + """ + A description of the :class:`.Definition` object, which is heavily used + in testing. e.g. for ``isinstance`` it returns ``def isinstance``. + + Example: + + >>> from jedi import Script + >>> source = ''' + ... def f(): + ... pass + ... + ... class C: + ... pass + ... + ... variable = f or C''' + >>> script = Script(source, column=3) # line is maximum by default + >>> defs = script.goto_definitions() + >>> defs = sorted(defs, key=lambda d: d.line) + >>> defs + [, ] + >>> str(defs[0].description) # strip literals in python2 + 'def f' + >>> str(defs[1].description) + 'class C' + + """ + d = self._definition + if isinstance(d, er.InstanceElement): + d = d.var + if isinstance(d, pr.Name): + d = d.parent + + if isinstance(d, compiled.CompiledObject): + d = d.type() + ' ' + d.name + elif isinstance(d, iterable.Array): + d = 'class ' + d.type + elif isinstance(d, (pr.Class, er.Class, er.Instance)): + d = 'class ' + unicode(d.name) + elif isinstance(d, (er.Function, pr.Function)): + d = 'def ' + unicode(d.name) + elif isinstance(d, pr.Module): + # only show module name + d = 'module %s' % self.module_name + elif self.is_keyword: + d = 'keyword %s' % d.name + else: + d = d.get_code().replace('\n', '').replace('\r', '') + return d + + @property + def desc_with_module(self): + """ + In addition to the definition, also return the module. + + .. warning:: Don't use this function yet, its behaviour may change. If + you really need it, talk to me. + + .. todo:: Add full path. This function is should return a + `module.class.function` path. + """ + position = '' if self.in_builtin_module else '@%s' % (self.line) + return "%s:%s%s" % (self.module_name, self.description, position) + + @memoize_default() + def defined_names(self): + """ + List sub-definitions (e.g., methods in class). + + :rtype: list of Definition + """ + defs = self._follow_statements_imports() + # For now we don't want base classes or evaluate decorators. + defs = [d.base if isinstance(d, (er.Class, er.Function)) else d for d in defs] + iterable = (defined_names(self._evaluator, d) for d in defs) + iterable = list(iterable) + return list(chain.from_iterable(iterable)) + + def __eq__(self, other): + return self._start_pos == other._start_pos \ + and self.module_path == other.module_path \ + and self.name == other.name \ + and self._evaluator == other._evaluator + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self._start_pos, self.module_path, self.name, self._evaluator)) + + +class CallSignature(Definition): + """ + `CallSignature` objects is the return value of `Script.function_definition`. + It knows what functions you are currently in. e.g. `isinstance(` would + return the `isinstance` function. without `(` it would return nothing. + """ + def __init__(self, evaluator, executable, call, index, key_name): + super(CallSignature, self).__init__(evaluator, executable) + self._index = index + self._key_name = key_name + self._call = call + + @property + def index(self): + """ + The Param index of the current call. + Returns None if the index doesn't is not defined. + """ + if self._key_name is not None: + for i, param in enumerate(self.params): + if self._key_name == param.name: + return i + if self.params and self.params[-1]._definition.stars == 2: + return i + else: + return None + + if self._index >= len(self.params): + + for i, param in enumerate(self.params): + # *args case + if param._definition.stars == 1: + return i + return None + return self._index + + @property + def bracket_start(self): + """ + The indent of the bracket that is responsible for the last function + call. + """ + c = self._call + while c.next is not None: + c = c.next + return c.name.end_pos + + @property + def call_name(self): + """ + .. deprecated:: 0.8.0 + Use :attr:`.name` instead. + .. todo:: Remove! + + The name (e.g. 'isinstance') as a string. + """ + warnings.warn("Use name instead.", DeprecationWarning) + return unicode(self._definition.name) + + @property + def module(self): + """ + .. deprecated:: 0.8.0 + Use :attr:`.module_name` for the module name. + .. todo:: Remove! + """ + return self._executable.get_parent_until() + + def __repr__(self): + return '<%s: %s index %s>' % (type(self).__name__, self._definition, + self.index) + + +class _Param(Definition): + """ + Just here for backwards compatibility. + """ + def get_code(self): + """ + .. deprecated:: 0.8.0 + Use :attr:`.description` and :attr:`.name` instead. + .. todo:: Remove! + + A function to get the whole code of the param. + """ + warnings.warn("Use description instead.", DeprecationWarning) + return self.description + + +class _Help(object): + """ + Temporary implementation, will be used as `Script.help() or something in + the future. + """ + def __init__(self, definition): + self._definition = definition + + def full(self): + try: + return self._definition.doc + except AttributeError: + return self.raw() + + def raw(self): + """ + The raw docstring ``__doc__`` for any object. + + See :attr:`doc` for example. + """ + try: + return self._definition.raw_doc + except AttributeError: + return '' diff --git a/python/pw_multiScriptEditor/jedi/api/helpers.py b/python/pw_multiScriptEditor/jedi/api/helpers.py new file mode 100644 index 0000000..407ae73 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/api/helpers.py @@ -0,0 +1,46 @@ +""" +Helpers for the API +""" +import re + +from jedi.evaluate import imports + + +def completion_parts(path_until_cursor): + """ + Returns the parts for the completion + :return: tuple - (path, dot, like) + """ + match = re.match(r'^(.*?)(\.|)(\w?[\w\d]*)$', path_until_cursor, flags=re.S) + return match.groups() + + +def sorted_definitions(defs): + # Note: `or ''` below is required because `module_path` could be + return sorted(defs, key=lambda x: (x.module_path or '', x.line or 0, x.column or 0)) + + +def get_on_import_stmt(evaluator, user_context, user_stmt, is_like_search=False): + """ + Resolve the user statement, if it is an import. Only resolve the + parts until the user position. + """ + import_names = user_stmt.get_all_import_names() + kill_count = -1 + cur_name_part = None + for i in import_names: + if user_stmt.alias == i: + continue + for name_part in i.names: + if name_part.end_pos >= user_context.position: + if not cur_name_part: + cur_name_part = name_part + kill_count += 1 + + context = user_context.get_context() + just_from = next(context) == 'from' + + i = imports.ImportWrapper(evaluator, user_stmt, is_like_search, + kill_count=kill_count, nested_resolve=True, + is_just_from=just_from) + return i, cur_name_part diff --git a/python/pw_multiScriptEditor/jedi/api/interpreter.py b/python/pw_multiScriptEditor/jedi/api/interpreter.py new file mode 100644 index 0000000..318dc7a --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/api/interpreter.py @@ -0,0 +1,108 @@ +import inspect +import re + +from jedi._compatibility import builtins +from jedi import debug +from jedi.common import source_to_unicode +from jedi.cache import underscore_memoization +from jedi.evaluate import compiled +from jedi.evaluate.compiled.fake import get_module +from jedi.parser import representation as pr +from jedi.parser.fast import FastParser +from jedi.evaluate import helpers + + +class InterpreterNamespace(pr.Module): + def __init__(self, evaluator, namespace, parser_module): + self.namespace = namespace + self.parser_module = parser_module + self._evaluator = evaluator + + @underscore_memoization + def get_defined_names(self): + for name in self.parser_module.get_defined_names(): + yield name + for key, value in self.namespace.items(): + yield LazyName(self._evaluator, key, value) + + def scope_names_generator(self, position=None): + yield self, list(self.get_defined_names()) + + def __getattr__(self, name): + return getattr(self.parser_module, name) + + +class LazyName(helpers.FakeName): + def __init__(self, evaluator, name, value): + super(LazyName, self).__init__(name) + self._evaluator = evaluator + self._value = value + self._name = name + + @property + @underscore_memoization + def parent(self): + obj = self._value + parser_path = [] + if inspect.ismodule(obj): + module = obj + else: + class FakeParent(pr.Base): + parent = None # To avoid having no parent for NamePart. + path = None + + names = [] + try: + o = obj.__objclass__ + names.append(obj.__name__) + obj = o + except AttributeError: + pass + + try: + module_name = obj.__module__ + names.insert(0, obj.__name__) + except AttributeError: + # Unfortunately in some cases like `int` there's no __module__ + module = builtins + else: + module = __import__(module_name) + fake_name = helpers.FakeName(names, FakeParent()) + parser_path = fake_name.names + raw_module = get_module(self._value) + + try: + path = module.__file__ + except AttributeError: + pass + else: + path = re.sub('c$', '', path) + if path.endswith('.py'): + # cut the `c` from `.pyc` + with open(path) as f: + source = source_to_unicode(f.read()) + mod = FastParser(source, path[:-1]).module + if not parser_path: + return mod + found = self._evaluator.eval_call_path(iter(parser_path), mod, None) + if found: + return found[0] + debug.warning('Interpreter lookup for Python code failed %s', + mod) + + module = compiled.CompiledObject(raw_module) + if raw_module == builtins: + # The builtins module is special and always cached. + module = compiled.builtin + return compiled.create(self._evaluator, self._value, module, module) + + @parent.setter + def parent(self, value): + """Needed because of the ``representation.Simple`` super class.""" + + +def create(evaluator, namespace, parser_module): + ns = InterpreterNamespace(evaluator, namespace, parser_module) + for attr_name in pr.SCOPE_CONTENTS: + for something in getattr(parser_module, attr_name): + something.parent = ns diff --git a/python/pw_multiScriptEditor/jedi/api/keywords.py b/python/pw_multiScriptEditor/jedi/api/keywords.py new file mode 100644 index 0000000..540db8b --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/api/keywords.py @@ -0,0 +1,100 @@ +import pydoc +import keyword + +from jedi._compatibility import is_py3 +from jedi import common +from jedi.evaluate import compiled + +try: + from pydoc_data import topics as pydoc_topics +except ImportError: + # Python 2.6 + import pydoc_topics + +if is_py3: + keys = keyword.kwlist +else: + keys = keyword.kwlist + ['None', 'False', 'True'] + + +def keywords(string='', pos=(0, 0), all=False): + if all: + return set([Keyword(k, pos) for k in keys]) + if string in keys: + return set([Keyword(string, pos)]) + return set() + + +def keyword_names(*args, **kwargs): + kwds = [] + for k in keywords(*args, **kwargs): + start = k.start_pos + kwds.append(KeywordName(k, k.name, start)) + return kwds + + +def get_operator(string, pos): + return Keyword(string, pos) + + +class KeywordName(object): + def __init__(self, parent, name, start_pos): + self.parent = parent + self.names = [name] + self.start_pos = start_pos + + @property + def end_pos(self): + return self.start_pos[0], self.start_pos[1] + len(self.name) + + +class Keyword(object): + def __init__(self, name, pos): + self.name = name + self.start_pos = pos + self.parent = compiled.builtin + + def get_parent_until(self): + return self.parent + + @property + def names(self): + """ For a `parsing.Name` like comparision """ + return [self.name] + + @property + def docstr(self): + return imitate_pydoc(self.name) + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self.name) + + +def imitate_pydoc(string): + """ + It's not possible to get the pydoc's without starting the annoying pager + stuff. + """ + # str needed because of possible unicode stuff in py2k (pydoc doesn't work + # with unicode strings) + string = str(string) + h = pydoc.help + with common.ignored(KeyError): + # try to access symbols + string = h.symbols[string] + string, _, related = string.partition(' ') + + get_target = lambda s: h.topics.get(s, h.keywords.get(s)) + while isinstance(string, str): + string = get_target(string) + + try: + # is a tuple now + label, related = string + except TypeError: + return '' + + try: + return pydoc_topics.topics[label] if pydoc_topics else '' + except KeyError: + return '' diff --git a/python/pw_multiScriptEditor/jedi/api/replstartup.py b/python/pw_multiScriptEditor/jedi/api/replstartup.py new file mode 100644 index 0000000..5bfcc8c --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/api/replstartup.py @@ -0,0 +1,27 @@ +""" +To use Jedi completion in Python interpreter, add the following in your shell +setup (e.g., ``.bashrc``):: + + export PYTHONSTARTUP="$(python -m jedi repl)" + +Then you will be able to use Jedi completer in your Python interpreter:: + + $ python + Python 2.7.2+ (default, Jul 20 2012, 22:15:08) + [GCC 4.6.1] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> import os + >>> os.path.join().split().in # doctest: +SKIP + os.path.join().split().index os.path.join().split().insert + +""" +import jedi.utils +from jedi import __version__ as __jedi_version__ + +print('REPL completion using Jedi %s' % __jedi_version__) +jedi.utils.setup_readline() + +del jedi + +# Note: try not to do many things here, as it will contaminate global +# namespace of the interpreter. diff --git a/python/pw_multiScriptEditor/jedi/api/usages.py b/python/pw_multiScriptEditor/jedi/api/usages.py new file mode 100644 index 0000000..21ef7ec --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/api/usages.py @@ -0,0 +1,97 @@ +from jedi._compatibility import u, unicode +from jedi import common +from jedi.api import classes +from jedi.parser import representation as pr +from jedi.evaluate import imports +from jedi.evaluate import helpers + + +def usages(evaluator, definitions, search_name, mods): + def compare_array(definitions): + """ `definitions` are being compared by module/start_pos, because + sometimes the id's of the objects change (e.g. executions). + """ + result = [] + for d in definitions: + module = d.get_parent_until() + result.append((module, d.start_pos)) + return result + + def check_call_for_usage(call): + stmt = call.parent + while not isinstance(stmt.parent, pr.IsScope): + stmt = stmt.parent + # New definition, call cannot be a part of stmt + if len(call.name) == 1 and call.execution is None \ + and call.name in stmt.get_defined_names(): + # Class params are not definitions (like function params). They + # are super classes, that need to be resolved. + if not (isinstance(stmt, pr.Param) and isinstance(stmt.parent, pr.Class)): + return + + follow = [] # There might be multiple search_name's in one call_path + call_path = list(call.generate_call_path()) + for i, name in enumerate(call_path): + # name is `pr.NamePart`. + if u(name) == search_name: + follow.append(call_path[:i + 1]) + + for call_path in follow: + follow_res, search = evaluator.goto(call.parent, call_path) + # names can change (getattr stuff), therefore filter names that + # don't match `search`. + + # TODO add something like that in the future - for now usages are + # completely broken anyway. + #follow_res = [r for r in follow_res if str(r) == search] + #print search.start_pos,search_name.start_pos + #print follow_res, search, search_name, [(r, r.start_pos) for r in follow_res] + follow_res = usages_add_import_modules(evaluator, follow_res, search) + + compare_follow_res = compare_array(follow_res) + # compare to see if they match + if any(r in compare_definitions for r in compare_follow_res): + yield classes.Definition(evaluator, search) + + if not definitions: + return set() + + compare_definitions = compare_array(definitions) + mods |= set([d.get_parent_until() for d in definitions]) + names = [] + for m in imports.get_modules_containing_name(mods, search_name): + try: + stmts = m.used_names[search_name] + except KeyError: + continue + for stmt in stmts: + if isinstance(stmt, pr.Import): + count = 0 + imps = [] + for i in stmt.get_all_import_names(): + for name_part in i.names: + count += 1 + if unicode(name_part) == search_name: + imps.append((count, name_part)) + + for used_count, name_part in imps: + i = imports.ImportWrapper(evaluator, stmt, kill_count=count - used_count, + nested_resolve=True) + f = i.follow(is_goto=True) + if set(f) & set(definitions): + names.append(classes.Definition(evaluator, name_part)) + else: + for call in helpers.scan_statement_for_calls(stmt, search_name, assignment_details=True): + names += check_call_for_usage(call) + return names + + +def usages_add_import_modules(evaluator, definitions, search_name): + """ Adds the modules of the imports """ + new = set() + for d in definitions: + if isinstance(d.parent, pr.Import): + s = imports.ImportWrapper(evaluator, d.parent, nested_resolve=True) + with common.ignored(IndexError): + new.add(s.follow(is_goto=True)[0]) + return set(definitions) | new diff --git a/python/pw_multiScriptEditor/jedi/cache.py b/python/pw_multiScriptEditor/jedi/cache.py new file mode 100644 index 0000000..ad73c08 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/cache.py @@ -0,0 +1,354 @@ +""" +This caching is very important for speed and memory optimizations. There's +nothing really spectacular, just some decorators. The following cache types are +available: + +- module caching (`load_parser` and `save_parser`), which uses pickle and is + really important to assure low load times of modules like ``numpy``. +- ``time_cache`` can be used to cache something for just a limited time span, + which can be useful if there's user interaction and the user cannot react + faster than a certain time. + +This module is one of the reasons why |jedi| is not thread-safe. As you can see +there are global variables, which are holding the cache information. Some of +these variables are being cleaned after every API usage. +""" +import time +import os +import sys +import json +import hashlib +import gc +import inspect +import shutil +import re +try: + import cPickle as pickle +except ImportError: + import pickle + +from jedi import settings +from jedi import common +from jedi import debug + +_time_caches = [] + +_star_import_cache = {} + +# for fast_parser, should not be deleted +parser_cache = {} + + +class ParserCacheItem(object): + def __init__(self, parser, change_time=None): + self.parser = parser + if change_time is None: + change_time = time.time() + self.change_time = change_time + + +def clear_caches(delete_all=False): + """ Jedi caches many things, that should be completed after each completion + finishes. + + :param delete_all: Deletes also the cache that is normally not deleted, + like parser cache, which is important for faster parsing. + """ + global _time_caches + + if delete_all: + _time_caches = [] + _star_import_cache.clear() + parser_cache.clear() + else: + # normally just kill the expired entries, not all + for tc in _time_caches: + # check time_cache for expired entries + for key, (t, value) in list(tc.items()): + if t < time.time(): + # delete expired entries + del tc[key] + + +def time_cache(time_add_setting): + """ This decorator works as follows: Call it with a setting and after that + use the function with a callable that returns the key. + But: This function is only called if the key is not available. After a + certain amount of time (`time_add_setting`) the cache is invalid. + """ + def _temp(key_func): + dct = {} + _time_caches.append(dct) + + def wrapper(optional_callable, *args, **kwargs): + key = key_func(*args, **kwargs) + value = None + if key in dct: + expiry, value = dct[key] + if expiry > time.time(): + return value + value = optional_callable() + time_add = getattr(settings, time_add_setting) + if key is not None: + dct[key] = time.time() + time_add, value + return value + return wrapper + return _temp + + +@time_cache("call_signatures_validity") +def cache_call_signatures(source, user_pos, stmt): + """This function calculates the cache key.""" + index = user_pos[0] - 1 + lines = common.splitlines(source) + + before_cursor = lines[index][:user_pos[1]] + other_lines = lines[stmt.start_pos[0]:index] + whole = '\n'.join(other_lines + [before_cursor]) + before_bracket = re.match(r'.*\(', whole, re.DOTALL) + + module_path = stmt.get_parent_until().path + return None if module_path is None else (module_path, before_bracket, stmt.start_pos) + + +def underscore_memoization(func): + """ + Decorator for methods:: + + class A(object): + def x(self): + if self._x: + self._x = 10 + return self._x + + Becomes:: + + class A(object): + @underscore_memoization + def x(self): + return 10 + + A now has an attribute ``_x`` written by this decorator. + """ + name = '_' + func.__name__ + + def wrapper(self): + try: + return getattr(self, name) + except AttributeError: + result = func(self) + if inspect.isgenerator(result): + result = list(result) + setattr(self, name, result) + return result + + return wrapper + + +def memoize(func): + """A normal memoize function.""" + dct = {} + + def wrapper(*args, **kwargs): + key = (args, frozenset(kwargs.items())) + try: + return dct[key] + except KeyError: + result = func(*args, **kwargs) + dct[key] = result + return result + return wrapper + + +def cache_star_import(func): + def wrapper(evaluator, scope, *args, **kwargs): + with common.ignored(KeyError): + mods = _star_import_cache[scope] + if mods[0] + settings.star_import_cache_validity > time.time(): + return mods[1] + # cache is too old and therefore invalid or not available + _invalidate_star_import_cache_module(scope) + mods = func(evaluator, scope, *args, **kwargs) + _star_import_cache[scope] = time.time(), mods + + return mods + return wrapper + + +def _invalidate_star_import_cache_module(module, only_main=False): + """ Important if some new modules are being reparsed """ + with common.ignored(KeyError): + t, mods = _star_import_cache[module] + + del _star_import_cache[module] + + for m in mods: + _invalidate_star_import_cache_module(m, only_main=True) + + if not only_main: + # We need a list here because otherwise the list is being changed + # during the iteration in py3k: iteritems -> items. + for key, (t, mods) in list(_star_import_cache.items()): + if module in mods: + _invalidate_star_import_cache_module(key) + + +def invalidate_star_import_cache(path): + """On success returns True.""" + try: + parser_cache_item = parser_cache[path] + except KeyError: + return False + else: + _invalidate_star_import_cache_module(parser_cache_item.parser.module) + return True + + +def load_parser(path, name): + """ + Returns the module or None, if it fails. + """ + if path is None and name is None: + return None + + p_time = os.path.getmtime(path) if path else None + n = name if path is None else path + try: + parser_cache_item = parser_cache[n] + if not path or p_time <= parser_cache_item.change_time: + return parser_cache_item.parser + else: + # In case there is already a module cached and this module + # has to be reparsed, we also need to invalidate the import + # caches. + _invalidate_star_import_cache_module(parser_cache_item.parser.module) + except KeyError: + if settings.use_filesystem_cache: + return ParserPickling.load_parser(n, p_time) + + +def save_parser(path, name, parser, pickling=True): + try: + p_time = None if not path else os.path.getmtime(path) + except OSError: + p_time = None + pickling = False + + n = name if path is None else path + item = ParserCacheItem(parser, p_time) + parser_cache[n] = item + if settings.use_filesystem_cache and pickling: + ParserPickling.save_parser(n, item) + + +class ParserPickling(object): + + version = 13 + """ + Version number (integer) for file system cache. + + Increment this number when there are any incompatible changes in + parser representation classes. For example, the following changes + are regarded as incompatible. + + - Class name is changed. + - Class is moved to another module. + - Defined slot of the class is changed. + """ + + def __init__(self): + self.__index = None + self.py_tag = 'cpython-%s%s' % sys.version_info[:2] + """ + Short name for distinguish Python implementations and versions. + + It's like `sys.implementation.cache_tag` but for Python < 3.3 + we generate something similar. See: + http://docs.python.org/3/library/sys.html#sys.implementation + + .. todo:: Detect interpreter (e.g., PyPy). + """ + + def load_parser(self, path, original_changed_time): + try: + pickle_changed_time = self._index[path] + except KeyError: + return None + if original_changed_time is not None \ + and pickle_changed_time < original_changed_time: + # the pickle file is outdated + return None + + with open(self._get_hashed_path(path), 'rb') as f: + try: + gc.disable() + parser_cache_item = pickle.load(f) + finally: + gc.enable() + + debug.dbg('pickle loaded: %s', path) + parser_cache[path] = parser_cache_item + return parser_cache_item.parser + + def save_parser(self, path, parser_cache_item): + self.__index = None + try: + files = self._index + except KeyError: + files = {} + self._index = files + + with open(self._get_hashed_path(path), 'wb') as f: + pickle.dump(parser_cache_item, f, pickle.HIGHEST_PROTOCOL) + files[path] = parser_cache_item.change_time + + self._flush_index() + + @property + def _index(self): + if self.__index is None: + try: + with open(self._get_path('index.json')) as f: + data = json.load(f) + except (IOError, ValueError): + self.__index = {} + else: + # 0 means version is not defined (= always delete cache): + if data.get('version', 0) != self.version: + self.clear_cache() + self.__index = {} + else: + self.__index = data['index'] + return self.__index + + def _remove_old_modules(self): + # TODO use + change = False + if change: + self._flush_index(self) + self._index # reload index + + def _flush_index(self): + data = {'version': self.version, 'index': self._index} + with open(self._get_path('index.json'), 'w') as f: + json.dump(data, f) + self.__index = None + + def clear_cache(self): + shutil.rmtree(self._cache_directory()) + + def _get_hashed_path(self, path): + return self._get_path('%s.pkl' % hashlib.md5(path.encode("utf-8")).hexdigest()) + + def _get_path(self, file): + dir = self._cache_directory() + if not os.path.exists(dir): + os.makedirs(dir) + return os.path.join(dir, file) + + def _cache_directory(self): + return os.path.join(settings.cache_directory, self.py_tag) + + +# is a singleton +ParserPickling = ParserPickling() diff --git a/python/pw_multiScriptEditor/jedi/common.py b/python/pw_multiScriptEditor/jedi/common.py new file mode 100644 index 0000000..e15d221 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/common.py @@ -0,0 +1,158 @@ +""" A universal module with functions / classes without dependencies. """ +import sys +import contextlib +import functools +import re +from ast import literal_eval + +from jedi._compatibility import unicode, next, reraise +from jedi import settings + + +class MultiLevelStopIteration(Exception): + """ + StopIteration's get catched pretty easy by for loops, let errors propagate. + """ + + +class UncaughtAttributeError(Exception): + """ + Important, because `__getattr__` and `hasattr` catch AttributeErrors + implicitly. This is really evil (mainly because of `__getattr__`). + `hasattr` in Python 2 is even more evil, because it catches ALL exceptions. + Therefore this class originally had to be derived from `BaseException` + instead of `Exception`. But because I removed relevant `hasattr` from + the code base, we can now switch back to `Exception`. + + :param base: return values of sys.exc_info(). + """ + + +def safe_property(func): + return property(reraise_uncaught(func)) + + +def reraise_uncaught(func): + """ + Re-throw uncaught `AttributeError`. + + Usage: Put ``@rethrow_uncaught`` in front of the function + which does **not** suppose to raise `AttributeError`. + + AttributeError is easily get caught by `hasattr` and another + ``except AttributeError`` clause. This becomes problem when you use + a lot of "dynamic" attributes (e.g., using ``@property``) because you + can't distinguish if the property does not exist for real or some code + inside of the "dynamic" attribute through that error. In a well + written code, such error should not exist but getting there is very + difficult. This decorator is to help us getting there by changing + `AttributeError` to `UncaughtAttributeError` to avoid unexpected catch. + This helps us noticing bugs earlier and facilitates debugging. + + .. note:: Treating StopIteration here is easy. + Add that feature when needed. + """ + @functools.wraps(func) + def wrapper(*args, **kwds): + try: + return func(*args, **kwds) + except AttributeError: + exc_info = sys.exc_info() + reraise(UncaughtAttributeError(exc_info[1]), exc_info[2]) + return wrapper + + +class PushBackIterator(object): + def __init__(self, iterator): + self.pushes = [] + self.iterator = iterator + self.current = None + + def push_back(self, value): + self.pushes.append(value) + + def __iter__(self): + return self + + def next(self): + """ Python 2 Compatibility """ + return self.__next__() + + def __next__(self): + if self.pushes: + self.current = self.pushes.pop() + else: + self.current = next(self.iterator) + return self.current + + +@contextlib.contextmanager +def scale_speed_settings(factor): + a = settings.max_executions + b = settings.max_until_execution_unique + settings.max_executions *= factor + settings.max_until_execution_unique *= factor + yield + settings.max_executions = a + settings.max_until_execution_unique = b + + +def indent_block(text, indention=' '): + """This function indents a text block with a default of four spaces.""" + temp = '' + while text and text[-1] == '\n': + temp += text[-1] + text = text[:-1] + lines = text.split('\n') + return '\n'.join(map(lambda s: indention + s, lines)) + temp + + +@contextlib.contextmanager +def ignored(*exceptions): + """ + Context manager that ignores all of the specified exceptions. This will + be in the standard library starting with Python 3.4. + """ + try: + yield + except exceptions: + pass + + +def source_to_unicode(source, encoding=None): + def detect_encoding(): + """ + For the implementation of encoding definitions in Python, look at: + - http://www.python.org/dev/peps/pep-0263/ + - http://docs.python.org/2/reference/lexical_analysis.html#encoding-declarations + """ + byte_mark = literal_eval(r"b'\xef\xbb\xbf'") + if source.startswith(byte_mark): + # UTF-8 byte-order mark + return 'utf-8' + + first_two_lines = re.match(r'(?:[^\n]*\n){0,2}', str(source)).group(0) + possible_encoding = re.search(r"coding[=:]\s*([-\w.]+)", + first_two_lines) + if possible_encoding: + return possible_encoding.group(1) + else: + # the default if nothing else has been set -> PEP 263 + return encoding if encoding is not None else 'iso-8859-1' + + if isinstance(source, unicode): + # only cast str/bytes + return source + + # cast to unicode by default + return unicode(source, detect_encoding(), 'replace') + + +def splitlines(string): + """ + A splitlines for Python code. In contrast to Python's ``str.splitlines``, + looks at form feeds and other special characters as normal text. Just + splits ``\n`` and ``\r\n``. + Also different: Returns ``['']`` for an empty string input. + """ + return re.split('\n|\r\n', string) diff --git a/python/pw_multiScriptEditor/jedi/debug.py b/python/pw_multiScriptEditor/jedi/debug.py new file mode 100644 index 0000000..4a46227 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/debug.py @@ -0,0 +1,93 @@ +from jedi._compatibility import encoding, is_py3 +import inspect +import os +import time + +try: + if os.name == 'nt': + # does not work on Windows, as pyreadline and colorama interfere + raise ImportError + else: + # Use colorama for nicer console output. + from colorama import Fore, init + from colorama import initialise + # pytest resets the stream at the end - causes troubles. Since after + # every output the stream is reset automatically we don't need this. + initialise.atexit_done = True + init() +except ImportError: + class Fore(object): + RED = '' + GREEN = '' + YELLOW = '' + RESET = '' + +NOTICE = object() +WARNING = object() +SPEED = object() + +enable_speed = False +enable_warning = False +enable_notice = False + +# callback, interface: level, str +debug_function = None +ignored_modules = ['jedi.evaluate.builtin', 'jedi.parser'] +_debug_indent = -1 +_start_time = time.time() + + +def reset_time(): + global _start_time, _debug_indent + _start_time = time.time() + _debug_indent = -1 + + +def increase_indent(func): + """Decorator for makin """ + def wrapper(*args, **kwargs): + global _debug_indent + _debug_indent += 1 + result = func(*args, **kwargs) + _debug_indent -= 1 + return result + return wrapper + + +def dbg(message, *args): + """ Looks at the stack, to see if a debug message should be printed. """ + if debug_function and enable_notice: + frm = inspect.stack()[1] + mod = inspect.getmodule(frm[0]) + if not (mod.__name__ in ignored_modules): + i = ' ' * _debug_indent + debug_function(NOTICE, i + 'dbg: ' + message % args) + + +def warning(message, *args): + if debug_function and enable_warning: + i = ' ' * _debug_indent + debug_function(WARNING, i + 'warning: ' + message % args) + + +def speed(name): + if debug_function and enable_speed: + now = time.time() + i = ' ' * _debug_indent + debug_function(SPEED, i + 'speed: ' + '%s %s' % (name, now - _start_time)) + + +def print_to_stdout(level, str_out): + """ The default debug function """ + if level == NOTICE: + col = Fore.GREEN + elif level == WARNING: + col = Fore.RED + else: + col = Fore.YELLOW + if not is_py3: + str_out = str_out.encode(encoding, 'replace') + print(col + str_out + Fore.RESET) + + +# debug_function = print_to_stdout diff --git a/python/pw_multiScriptEditor/jedi/evaluate/__init__.py b/python/pw_multiScriptEditor/jedi/evaluate/__init__.py new file mode 100644 index 0000000..944385c --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/__init__.py @@ -0,0 +1,382 @@ +""" +Evaluation of Python code in |jedi| is based on three assumptions: + +* Code is recursive (to weaken this assumption, the + :mod:`jedi.evaluate.dynamic` module exists). +* No magic is being used: + + - metaclasses + - ``setattr()`` / ``__import__()`` + - writing to ``globals()``, ``locals()``, ``object.__dict__`` +* The programmer is not a total dick, e.g. like `this + `_ :-) + +That said, there's mainly one entry point in this script: ``eval_statement``. +This is where autocompletion starts. Everything you want to complete is either +a ``Statement`` or some special name like ``class``, which is easy to complete. + +Therefore you need to understand what follows after ``eval_statement``. Let's +make an example:: + + import datetime + datetime.date.toda# <-- cursor here + +First of all, this module doesn't care about completion. It really just cares +about ``datetime.date``. At the end of the procedure ``eval_statement`` will +return the ``datetime`` class. + +To *visualize* this (simplified): + +- ``eval_statement`` - ```` + + - Unpacking of the statement into ``[[]]`` +- ``eval_expression_list``, calls ``eval_call`` with ```` +- ``eval_call`` - searches the ``datetime`` name within the module. + +This is exactly where it starts to get complicated. Now recursions start to +kick in. The statement has not been resolved fully, but now we need to resolve +the datetime import. So it continues + +- follow import, which happens in the :mod:`jedi.evaluate.imports` module. +- now the same ``eval_call`` as above calls ``follow_path`` to follow the + second part of the statement ``date``. +- After ``follow_path`` returns with the desired ``datetime.date`` class, the + result is being returned and the recursion finishes. + +Now what would happen if we wanted ``datetime.date.foo.bar``? Just two more +calls to ``follow_path`` (which calls itself with a recursion). What if the +import would contain another Statement like this:: + + from foo import bar + Date = bar.baz + +Well... You get it. Just another ``eval_statement`` recursion. It's really +easy. Just that Python is not that easy sometimes. To understand tuple +assignments and different class scopes, a lot more code had to be written. Yet +we're still not talking about Descriptors and Nested List Comprehensions, just +the simple stuff. + +So if you want to change something, write a test and then just change what you +want. This module has been tested by about 600 tests. Don't be afraid to break +something. The tests are good enough. + +I need to mention now that this recursive approach is really good because it +only *evaluates* what needs to be *evaluated*. All the statements and modules +that are not used are just being ignored. It's a little bit similar to the +backtracking algorithm. + + +.. todo:: nonlocal statement, needed or can be ignored? (py3k) +""" +import itertools + +from jedi._compatibility import next, hasattr, unicode +from jedi.parser import representation as pr +from jedi.parser.tokenize import Token +from jedi.parser import fast +from jedi import debug +from jedi.evaluate import representation as er +from jedi.evaluate import imports +from jedi.evaluate import recursion +from jedi.evaluate import iterable +from jedi.evaluate.cache import memoize_default +from jedi.evaluate import stdlib +from jedi.evaluate import finder +from jedi.evaluate import compiled +from jedi.evaluate import precedence +from jedi.evaluate.helpers import FakeStatement + + +class Evaluator(object): + def __init__(self): + self.memoize_cache = {} # for memoize decorators + self.import_cache = {} # like `sys.modules`. + self.compiled_cache = {} # see `compiled.create()` + self.recursion_detector = recursion.RecursionDetector() + self.execution_recursion_detector = recursion.ExecutionRecursionDetector() + self.analysis = [] + + def find_types(self, scope, name_str, position=None, search_global=False, + is_goto=False, resolve_decorator=True): + """ + This is the search function. The most important part to debug. + `remove_statements` and `filter_statements` really are the core part of + this completion. + + :param position: Position of the last statement -> tuple of line, column + :return: List of Names. Their parents are the types. + """ + f = finder.NameFinder(self, scope, name_str, position) + scopes = f.scopes(search_global) + if is_goto: + return f.filter_name(scopes) + return f.find(scopes, resolve_decorator, search_global) + + @memoize_default(default=[], evaluator_is_first_arg=True) + @recursion.recursion_decorator + @debug.increase_indent + def eval_statement(self, stmt, seek_name=None): + """ + The starting point of the completion. A statement always owns a call + list, which are the calls, that a statement does. In case multiple + names are defined in the statement, `seek_name` returns the result for + this name. + + :param stmt: A `pr.Statement`. + """ + debug.dbg('eval_statement %s (%s)', stmt, seek_name) + expression_list = stmt.expression_list() + if isinstance(stmt, FakeStatement): + return expression_list # Already contains the results. + + result = self.eval_expression_list(expression_list) + + ass_details = stmt.assignment_details + if ass_details and ass_details[0][1] != '=' and not isinstance(stmt, er.InstanceElement): # TODO don't check for this. + expr_list, operator = ass_details[0] + # `=` is always the last character in aug assignments -> -1 + operator = operator[:-1] + name = str(expr_list[0].name) + parent = stmt.parent + if isinstance(parent, (pr.SubModule, fast.Module)): + parent = er.ModuleWrapper(self, parent) + left = self.find_types(parent, name, stmt.start_pos) + if isinstance(stmt.parent, pr.ForFlow): + # iterate through result and add the values, that's possible + # only in for loops without clutter, because they are + # predictable. + for r in result: + left = precedence.calculate(self, left, operator, [r]) + result = left + else: + result = precedence.calculate(self, left, operator, result) + elif len(stmt.get_defined_names()) > 1 and seek_name and ass_details: + # Assignment checking is only important if the statement defines + # multiple variables. + new_result = [] + for ass_expression_list, op in ass_details: + new_result += finder.find_assignments(ass_expression_list[0], result, seek_name) + result = new_result + return result + + def eval_expression_list(self, expression_list): + """ + `expression_list` can be either `pr.Array` or `list of list`. + It is used to evaluate a two dimensional object, that has calls, arrays and + operators in it. + """ + debug.dbg('eval_expression_list: %s', expression_list) + p = precedence.create_precedence(expression_list) + return self.process_precedence_element(p) or [] + + def process_precedence_element(self, el): + if el is None: + return None + else: + if isinstance(el, precedence.Precedence): + return self._eval_precedence(el) + else: + # normal element, no operators + return self.eval_statement_element(el) + + def _eval_precedence(self, _precedence): + left = self.process_precedence_element(_precedence.left) + right = self.process_precedence_element(_precedence.right) + return precedence.calculate(self, left, _precedence.operator, right) + + def eval_statement_element(self, element): + if pr.Array.is_type(element, pr.Array.NOARRAY): + try: + lst_cmp = element[0].expression_list()[0] + if not isinstance(lst_cmp, pr.ListComprehension): + raise IndexError + except IndexError: + r = list(itertools.chain.from_iterable(self.eval_statement(s) + for s in element)) + else: + r = [iterable.GeneratorComprehension(self, lst_cmp)] + call_path = element.generate_call_path() + next(call_path, None) # the first one has been used already + return self.follow_path(call_path, r, element.parent) + elif isinstance(element, pr.ListComprehension): + return self.eval_statement(element.stmt) + elif isinstance(element, pr.Lambda): + return [er.Function(self, element)] + # With things like params, these can also be functions... + elif isinstance(element, pr.Base) and element.isinstance( + er.Function, er.Class, er.Instance, iterable.ArrayInstance): + return [element] + # The string tokens are just operations (+, -, etc.) + elif isinstance(element, compiled.CompiledObject): + return [element] + elif isinstance(element, Token): + return [] + else: + return self.eval_call(element) + + def eval_call(self, call): + """Follow a call is following a function, variable, string, etc.""" + path = call.generate_call_path() + + # find the statement of the Scope + s = call + while not s.parent.isinstance(pr.IsScope): + s = s.parent + par = s.parent + return self.eval_call_path(path, par, s.start_pos) + + def eval_call_path(self, path, scope, position): + """ + Follows a path generated by `pr.StatementElement.generate_call_path()`. + """ + current = next(path) + + if isinstance(current, pr.Array): + types = [iterable.Array(self, current)] + else: + if isinstance(current, pr.NamePart): + # This is the first global lookup. + types = self.find_types(scope, current, position=position, + search_global=True) + else: + # for pr.Literal + types = [compiled.create(self, current.value)] + types = imports.follow_imports(self, types) + + return self.follow_path(path, types, scope) + + def follow_path(self, path, types, call_scope): + """ + Follows a path like:: + + self.follow_path(iter(['Foo', 'bar']), [a_type], from_somewhere) + + to follow a call like ``module.a_type.Foo.bar`` (in ``from_somewhere``). + """ + results_new = [] + iter_paths = itertools.tee(path, len(types)) + + for i, typ in enumerate(types): + fp = self._follow_path(iter_paths[i], typ, call_scope) + if fp is not None: + results_new += fp + else: + # This means stop iteration. + return types + return results_new + + def _follow_path(self, path, typ, scope): + """ + Uses a generator and tries to complete the path, e.g.:: + + foo.bar.baz + + `_follow_path` is only responsible for completing `.bar.baz`, the rest + is done in the `follow_call` function. + """ + # current is either an Array or a Scope. + try: + current = next(path) + except StopIteration: + return None + debug.dbg('_follow_path: %s in scope %s', current, typ) + + result = [] + if isinstance(current, pr.Array): + # This must be an execution, either () or []. + if current.type == pr.Array.LIST: + if hasattr(typ, 'get_index_types'): + if isinstance(typ, compiled.CompiledObject): + # CompiledObject doesn't contain an evaluator instance. + result = typ.get_index_types(self, current) + else: + result = typ.get_index_types(current) + elif current.type not in [pr.Array.DICT]: + # Scope must be a class or func - make an instance or execution. + result = self.execute(typ, current) + else: + # Curly braces are not allowed, because they make no sense. + debug.warning('strange function call with {} %s %s', current, typ) + else: + # The function must not be decorated with something else. + if typ.isinstance(er.Function): + typ = typ.get_magic_function_scope() + else: + # This is the typical lookup while chaining things. + if filter_private_variable(typ, scope, current): + return [] + types = self.find_types(typ, current) + result = imports.follow_imports(self, types) + return self.follow_path(path, result, scope) + + @debug.increase_indent + def execute(self, obj, params=(), evaluate_generator=False): + if obj.isinstance(er.Function): + obj = obj.get_decorated_func() + + debug.dbg('execute: %s %s', obj, params) + try: + return stdlib.execute(self, obj, params) + except stdlib.NotInStdLib: + pass + + if isinstance(obj, iterable.GeneratorMethod): + return obj.execute() + elif obj.isinstance(compiled.CompiledObject): + if obj.is_executable_class(): + return [er.Instance(self, obj, params)] + else: + return list(obj.execute_function(self, params)) + elif obj.isinstance(er.Class): + # There maybe executions of executions. + return [er.Instance(self, obj, params)] + else: + stmts = [] + if obj.isinstance(er.Function): + stmts = er.FunctionExecution(self, obj, params).get_return_types(evaluate_generator) + else: + if hasattr(obj, 'execute_subscope_by_name'): + try: + stmts = obj.execute_subscope_by_name('__call__', params) + except KeyError: + debug.warning("no __call__ func available %s", obj) + else: + debug.warning("no execution possible %s", obj) + + debug.dbg('execute result: %s in %s', stmts, obj) + return imports.follow_imports(self, stmts) + + def goto(self, stmt, call_path): + scope = stmt.get_parent_until(pr.IsScope) + pos = stmt.start_pos + call_path, search_name_part = call_path[:-1], call_path[-1] + + if call_path: + scopes = self.eval_call_path(iter(call_path), scope, pos) + search_global = False + pos = None + else: + # TODO does this exist? i don't think so + scopes = [scope] + search_global = True + follow_res = [] + for s in scopes: + follow_res += self.find_types(s, search_name_part, pos, + search_global=search_global, is_goto=True) + return follow_res, search_name_part + + +def filter_private_variable(scope, call_scope, var_name): + """private variables begin with a double underline `__`""" + var_name = str(var_name) # var_name could be a NamePart + if isinstance(var_name, (str, unicode)) and isinstance(scope, er.Instance)\ + and var_name.startswith('__') and not var_name.endswith('__'): + s = call_scope.get_parent_until((pr.Class, er.Instance, compiled.CompiledObject)) + if s != scope: + if isinstance(scope.base, compiled.CompiledObject): + if s != scope.base: + return True + else: + if s != scope.base.base: + return True + return False diff --git a/python/pw_multiScriptEditor/jedi/evaluate/analysis.py b/python/pw_multiScriptEditor/jedi/evaluate/analysis.py new file mode 100644 index 0000000..e036e9a --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/analysis.py @@ -0,0 +1,235 @@ +""" +Module for statical analysis. +""" + +from jedi import debug +from jedi.parser import representation as pr +from jedi.evaluate.compiled import CompiledObject + + +CODES = { + 'attribute-error': (1, AttributeError, 'Potential AttributeError.'), + 'name-error': (2, NameError, 'Potential NameError.'), + 'import-error': (3, ImportError, 'Potential ImportError.'), + 'type-error-generator': (4, TypeError, "TypeError: 'generator' object is not subscriptable."), + 'type-error-too-many-arguments': (5, TypeError, None), + 'type-error-too-few-arguments': (6, TypeError, None), + 'type-error-keyword-argument': (7, TypeError, None), + 'type-error-multiple-values': (8, TypeError, None), + 'type-error-star-star': (9, TypeError, None), + 'type-error-star': (10, TypeError, None), + 'type-error-operation': (11, TypeError, None), +} + + +class Error(object): + def __init__(self, name, module_path, start_pos, message=None): + self.path = module_path + self._start_pos = start_pos + self.name = name + if message is None: + message = CODES[self.name][2] + self.message = message + + @property + def line(self): + return self._start_pos[0] + + @property + def column(self): + return self._start_pos[1] + + @property + def code(self): + # The class name start + first = self.__class__.__name__[0] + return first + str(CODES[self.name][0]) + + def __unicode__(self): + return '%s:%s:%s: %s %s' % (self.path, self.line, self.column, + self.code, self.message) + + def __str__(self): + return self.__unicode__() + + def __eq__(self, other): + return (self.path == other.path and self.name == other.name + and self._start_pos == other._start_pos) + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self.path, self._start_pos, self.name)) + + def __repr__(self): + return '<%s %s: %s@%s,%s' % (self.__class__.__name__, + self.name, self.path, + self._start_pos[0], self._start_pos[1]) + + +class Warning(Error): + pass + + +def add(evaluator, name, jedi_obj, message=None, typ=Error, payload=None): + exception = CODES[name][1] + if _check_for_exception_catch(evaluator, jedi_obj, exception, payload): + return + + module_path = jedi_obj.get_parent_until().path + instance = typ(name, module_path, jedi_obj.start_pos, message) + debug.warning(str(instance)) + evaluator.analysis.append(instance) + + +def _check_for_setattr(instance): + """ + Check if there's any setattr method inside an instance. If so, return True. + """ + module = instance.get_parent_until() + try: + stmts = module.used_names['setattr'] + except KeyError: + return False + + return any(instance.start_pos < stmt.start_pos < instance.end_pos + for stmt in stmts) + + +def add_attribute_error(evaluator, scope, name_part): + message = ('AttributeError: %s has no attribute %s.' % (scope, name_part)) + from jedi.evaluate.representation import Instance + # Check for __getattr__/__getattribute__ existance and issue a warning + # instead of an error, if that happens. + if isinstance(scope, Instance): + typ = Warning + try: + scope.get_subscope_by_name('__getattr__') + except KeyError: + try: + scope.get_subscope_by_name('__getattribute__') + except KeyError: + if not _check_for_setattr(scope): + typ = Error + else: + typ = Error + + payload = scope, name_part + add(evaluator, 'attribute-error', name_part, message, typ, payload) + + +def _check_for_exception_catch(evaluator, jedi_obj, exception, payload=None): + """ + Checks if a jedi object (e.g. `Statement`) sits inside a try/catch and + doesn't count as an error (if equal to `exception`). + Also checks `hasattr` for AttributeErrors and uses the `payload` to compare + it. + Returns True if the exception was catched. + """ + def check_match(cls): + try: + return isinstance(cls, CompiledObject) and issubclass(exception, cls.obj) + except TypeError: + return False + + def check_try_for_except(obj): + while obj.next is not None: + obj = obj.next + if not obj.inputs: + # No import implies a `except:` catch, which catches + # everything. + return True + + for i in obj.inputs: + except_classes = evaluator.eval_statement(i) + for cls in except_classes: + from jedi.evaluate import iterable + if isinstance(cls, iterable.Array) and cls.type == 'tuple': + # multiple exceptions + for c in cls.values(): + if check_match(c): + return True + else: + if check_match(cls): + return True + return False + + def check_hasattr(stmt): + expression_list = stmt.expression_list() + try: + assert len(expression_list) == 1 + call = expression_list[0] + assert isinstance(call, pr.Call) and str(call.name) == 'hasattr' + execution = call.execution + assert execution and len(execution) == 2 + + # check if the names match + names = evaluator.eval_statement(execution[1]) + assert len(names) == 1 and isinstance(names[0], CompiledObject) + assert names[0].obj == str(payload[1]) + + objects = evaluator.eval_statement(execution[0]) + return payload[0] in objects + except AssertionError: + pass + return False + + obj = jedi_obj + while obj is not None and not obj.isinstance(pr.Function, pr.Class): + if obj.isinstance(pr.Flow): + # try/except catch check + if obj.command == 'try' and check_try_for_except(obj): + return True + # hasattr check + if exception == AttributeError and obj.command in ('if', 'while'): + if obj.inputs and check_hasattr(obj.inputs[0]): + return True + obj = obj.parent + + return False + + +def get_module_statements(module): + """ + Returns the statements used in a module. All these statements should be + evaluated to check for potential exceptions. + """ + def add_stmts(stmts): + new = set() + for stmt in stmts: + if isinstance(stmt, pr.Flow): + while stmt is not None: + new |= add_stmts(stmt.inputs) + stmt = stmt.next + continue + if isinstance(stmt, pr.KeywordStatement): + stmt = stmt.stmt + if stmt is None: + continue + + for expression in stmt.expression_list(): + if isinstance(expression, pr.Array): + new |= add_stmts(expression.values) + + if isinstance(expression, pr.StatementElement): + for element in expression.generate_call_path(): + if isinstance(element, pr.Array): + new |= add_stmts(element.values) + new.add(stmt) + return new + + stmts = set() + imports = set() + for scope in module.walk(): + imports |= set(scope.imports) + stmts |= add_stmts(scope.statements) + stmts |= add_stmts(r for r in scope.returns if r is not None) + + try: + decorators = scope.decorators + except AttributeError: + pass + else: + stmts |= add_stmts(decorators) + return stmts, imports diff --git a/python/pw_multiScriptEditor/jedi/evaluate/cache.py b/python/pw_multiScriptEditor/jedi/evaluate/cache.py new file mode 100644 index 0000000..1d1d06f --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/cache.py @@ -0,0 +1,54 @@ +""" +- the popular ``memoize_default`` works like a typical memoize and returns the + default otherwise. +- ``CachedMetaClass`` uses ``memoize_default`` to do the same with classes. +""" + +NO_DEFAULT = object() + + +def memoize_default(default=None, evaluator_is_first_arg=False, second_arg_is_evaluator=False): + """ This is a typical memoization decorator, BUT there is one difference: + To prevent recursion it sets defaults. + + Preventing recursion is in this case the much bigger use than speed. I + don't think, that there is a big speed difference, but there are many cases + where recursion could happen (think about a = b; b = a). + """ + def func(function): + def wrapper(obj, *args, **kwargs): + if evaluator_is_first_arg: + cache = obj.memoize_cache + elif second_arg_is_evaluator: # needed for meta classes + cache = args[0].memoize_cache + else: + cache = obj._evaluator.memoize_cache + + try: + memo = cache[function] + except KeyError: + memo = {} + cache[function] = memo + + key = (obj, args, frozenset(kwargs.items())) + if key in memo: + return memo[key] + else: + if default is not NO_DEFAULT: + memo[key] = default + rv = function(obj, *args, **kwargs) + memo[key] = rv + return rv + return wrapper + return func + + +class CachedMetaClass(type): + """ + This is basically almost the same than the decorator above, it just caches + class initializations. I haven't found any other way, so I'm doing it with + meta classes. + """ + @memoize_default(None, second_arg_is_evaluator=True) + def __call__(self, *args, **kwargs): + return super(CachedMetaClass, self).__call__(*args, **kwargs) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/__init__.py b/python/pw_multiScriptEditor/jedi/evaluate/compiled/__init__.py new file mode 100644 index 0000000..3ae14f7 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/__init__.py @@ -0,0 +1,429 @@ +""" +Imitate the parser representation. +""" +import inspect +import re +import sys +import os + +from jedi._compatibility import builtins as _builtins, unicode +from jedi import debug +from jedi.cache import underscore_memoization, memoize +from jedi.evaluate.sys_path import get_sys_path +from jedi.parser.representation import Param, SubModule, Base, IsScope, Operator +from jedi.evaluate.helpers import FakeName +from . import fake + + +_sep = os.path.sep +if os.path.altsep is not None: + _sep += os.path.altsep +_path_re = re.compile('(?:\.[^{0}]+|[{0}]__init__\.py)$'.format(re.escape(_sep))) +del _sep + + +class CompiledObject(Base): + # comply with the parser + start_pos = 0, 0 + asserts = [] + path = None # modules have this attribute - set it to None. + + def __init__(self, obj, parent=None): + self.obj = obj + self.parent = parent + + @property + def doc(self): + return inspect.getdoc(self.obj) or '' + + @property + def params(self): + params_str, ret = self._parse_function_doc() + tokens = params_str.split(',') + params = [] + module = SubModule(self.get_parent_until().name) + # it seems like start_pos/end_pos is always (0, 0) for a compiled + # object + start_pos, end_pos = (0, 0), (0, 0) + for p in tokens: + parts = [FakeName(part) for part in p.strip().split('=')] + if len(parts) >= 2: + parts.insert(1, Operator(module, '=', module, (0, 0))) + params.append(Param(module, parts, start_pos, + end_pos, builtin)) + return params + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, repr(self.obj)) + + @underscore_memoization + def _parse_function_doc(self): + if self.doc is None: + return '', '' + + return _parse_function_doc(self.doc) + + def type(self): + cls = self._cls().obj + if inspect.isclass(cls): + return 'class' + elif inspect.ismodule(cls): + return 'module' + elif inspect.isbuiltin(cls) or inspect.ismethod(cls) \ + or inspect.ismethoddescriptor(cls): + return 'function' + + def is_executable_class(self): + return inspect.isclass(self.obj) + + @underscore_memoization + def _cls(self): + # Ensures that a CompiledObject is returned that is not an instance (like list) + if fake.is_class_instance(self.obj): + try: + c = self.obj.__class__ + except AttributeError: + # happens with numpy.core.umath._UFUNC_API (you get it + # automatically by doing `import numpy`. + c = type(None) + return CompiledObject(c, self.parent) + return self + + def get_defined_names(self): + if inspect.ismodule(self.obj): + return self.instance_names() + else: + return type_names + self.instance_names() + + def scope_names_generator(self, position=None): + yield self, self.get_defined_names() + + @underscore_memoization + def instance_names(self): + names = [] + cls = self._cls() + for name in dir(cls.obj): + names.append(CompiledName(cls, name)) + return names + + def get_subscope_by_name(self, name): + if name in dir(self._cls().obj): + return CompiledName(self._cls(), name).parent + else: + raise KeyError("CompiledObject doesn't have an attribute '%s'." % name) + + def get_index_types(self, evaluator, index_array): + # If the object doesn't have `__getitem__`, just raise the + # AttributeError. + if not hasattr(self.obj, '__getitem__'): + debug.warning('Tried to call __getitem__ on non-iterable.') + return [] + if type(self.obj) not in (str, list, tuple, unicode, bytes, bytearray, dict): + # Get rid of side effects, we won't call custom `__getitem__`s. + return [] + + result = [] + from jedi.evaluate.iterable import create_indexes_or_slices + for typ in create_indexes_or_slices(evaluator, index_array): + index = None + try: + index = typ.obj + new = self.obj[index] + except (KeyError, IndexError, TypeError, AttributeError): + # Just try, we don't care if it fails, except for slices. + if isinstance(index, slice): + result.append(self) + else: + result.append(CompiledObject(new)) + if not result: + try: + for obj in self.obj: + result.append(CompiledObject(obj)) + except TypeError: + pass # self.obj maynot have an __iter__ method. + return result + + @property + def name(self): + # might not exist sometimes (raises AttributeError) + return self._cls().obj.__name__ + + def execute_function(self, evaluator, params): + if self.type() != 'function': + return + + for name in self._parse_function_doc()[1].split(): + try: + bltn_obj = _create_from_name(builtin, builtin, name) + except AttributeError: + continue + else: + if isinstance(bltn_obj, CompiledObject): + # We want everything except None. + if bltn_obj.obj is not None: + yield bltn_obj + else: + for result in evaluator.execute(bltn_obj, params): + yield result + + @property + @underscore_memoization + def subscopes(self): + """ + Returns only the faked scopes - the other ones are not important for + internal analysis. + """ + module = self.get_parent_until() + faked_subscopes = [] + for name in dir(self._cls().obj): + f = fake.get_faked(module.obj, self.obj, name) + if f: + f.parent = self + faked_subscopes.append(f) + return faked_subscopes + + def is_scope(self): + return True + + def get_self_attributes(self): + return [] # Instance compatibility + + def get_imports(self): + return [] # Builtins don't have imports + + def is_callable(self): + """Check if the object has a ``__call__`` method.""" + return hasattr(self.obj, '__call__') + + +class CompiledName(FakeName): + def __init__(self, obj, name): + super(CompiledName, self).__init__(name) + self._obj = obj + self.name = name + self.start_pos = 0, 0 # an illegal start_pos, to make sorting easy. + + def __repr__(self): + try: + name = self._obj.name # __name__ is not defined all the time + except AttributeError: + name = None + return '<%s: (%s).%s>' % (type(self).__name__, name, self.name) + + @property + @underscore_memoization + def parent(self): + module = self._obj.get_parent_until() + return _create_from_name(module, self._obj, self.name) + + @parent.setter + def parent(self, value): + pass # Just ignore this, FakeName tries to overwrite the parent attribute. + + +def dotted_from_fs_path(fs_path, sys_path=None): + """ + Changes `/usr/lib/python3.4/email/utils.py` to `email.utils`. I.e. + compares the path with sys.path and then returns the dotted_path. If the + path is not in the sys.path, just returns None. + """ + if sys_path is None: + sys_path = get_sys_path() + + # prefer + # - UNIX + # /path/to/pythonX.Y/lib-dynload + # /path/to/pythonX.Y/site-packages + # - Windows + # C:\path\to\DLLs + # C:\path\to\Lib\site-packages + # over + # - UNIX + # /path/to/pythonX.Y + # - Windows + # C:\path\to\Lib + path = '' + for s in sys_path: + if (fs_path.startswith(s) and + len(path) < len(s)): + path = s + return _path_re.sub('', fs_path[len(path):].lstrip(os.path.sep)).replace(os.path.sep, '.') + + +def load_module(path, name): + """ + if not name: + name = os.path.basename(path) + name = name.rpartition('.')[0] # cut file type (normally .so) + + # sometimes there are endings like `_sqlite3.cpython-32mu` + name = re.sub(r'\..*', '', name) + + dot_path = [] + if path: + p = path + # if path is not in sys.path, we need to make a well defined import + # like `from numpy.core import umath.` + while p and p not in sys.path: + p, sep, mod = p.rpartition(os.path.sep) + dot_path.insert(0, mod.partition('.')[0]) + if p: + name = ".".join(dot_path) + path = p + else: + path = os.path.dirname(path) + + """ + if path is not None: + dotted_path = dotted_from_fs_path(path) + else: + dotted_path = name + + sys_path = get_sys_path() + if dotted_path is None: + p, _, dotted_path = path.partition(os.path.sep) + sys_path.insert(0, p) + + temp, sys.path = sys.path, sys_path + __import__(dotted_path) + # Just access the cache after import, because of #59 as well as the very + # complicated import structure of Python. + module = sys.modules[dotted_path] + sys.path = temp + return CompiledObject(module) + + +docstr_defaults = { + 'floating point number': 'float', + 'character': 'str', + 'integer': 'int', + 'dictionary': 'dict', + 'string': 'str', +} + + +def _parse_function_doc(doc): + """ + Takes a function and returns the params and return value as a tuple. + This is nothing more than a docstring parser. + + TODO docstrings like utime(path, (atime, mtime)) and a(b [, b]) -> None + TODO docstrings like 'tuple of integers' + """ + # parse round parentheses: def func(a, (b,c)) + try: + count = 0 + start = doc.index('(') + for i, s in enumerate(doc[start:]): + if s == '(': + count += 1 + elif s == ')': + count -= 1 + if count == 0: + end = start + i + break + param_str = doc[start + 1:end] + except (ValueError, UnboundLocalError): + # ValueError for doc.index + # UnboundLocalError for undefined end in last line + debug.dbg('no brackets found - no param') + end = 0 + param_str = '' + else: + # remove square brackets, that show an optional param ( = None) + def change_options(m): + args = m.group(1).split(',') + for i, a in enumerate(args): + if a and '=' not in a: + args[i] += '=None' + return ','.join(args) + + while True: + param_str, changes = re.subn(r' ?\[([^\[\]]+)\]', + change_options, param_str) + if changes == 0: + break + param_str = param_str.replace('-', '_') # see: isinstance.__doc__ + + # parse return value + r = re.search('-[>-]* ', doc[end:end + 7]) + if r is None: + ret = '' + else: + index = end + r.end() + # get result type, which can contain newlines + pattern = re.compile(r'(,\n|[^\n-])+') + ret_str = pattern.match(doc, index).group(0).strip() + # New object -> object() + ret_str = re.sub(r'[nN]ew (.*)', r'\1()', ret_str) + + ret = docstr_defaults.get(ret_str, ret_str) + + return param_str, ret + + +class Builtin(CompiledObject, IsScope): + @memoize + def get_by_name(self, name): + item = [n for n in self.get_defined_names() if n.get_code() == name][0] + return item.parent + + +def _a_generator(foo): + """Used to have an object to return for generators.""" + yield 42 + yield foo + + +def _create_from_name(module, parent, name): + faked = fake.get_faked(module.obj, parent.obj, name) + # only functions are necessary. + if faked is not None: + faked.parent = parent + return faked + + try: + obj = getattr(parent.obj, name) + except AttributeError: + # happens e.g. in properties of + # PyQt4.QtGui.QStyleOptionComboBox.currentText + # -> just set it to None + obj = None + return CompiledObject(obj, parent) + + +builtin = Builtin(_builtins) +magic_function_class = CompiledObject(type(load_module), parent=builtin) +generator_obj = CompiledObject(_a_generator(1.0)) +type_names = [] # Need this, because it's return in get_defined_names. +type_names = builtin.get_by_name('type').get_defined_names() + + +def compiled_objects_cache(func): + def wrapper(evaluator, obj, parent=builtin, module=None): + # Do a very cheap form of caching here. + key = id(obj), id(parent), id(module) + try: + return evaluator.compiled_cache[key][0] + except KeyError: + result = func(evaluator, obj, parent, module) + # Need to cache all of them, otherwise the id could be overwritten. + evaluator.compiled_cache[key] = result, obj, parent, module + return result + return wrapper + + +@compiled_objects_cache +def create(evaluator, obj, parent=builtin, module=None): + """ + A very weird interface class to this module. The more options provided the + more acurate loading compiled objects is. + """ + + if not inspect.ismodule(obj): + faked = fake.get_faked(module and module.obj, obj) + if faked is not None: + faked.parent = parent + return faked + + return CompiledObject(obj, parent) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake.py b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake.py new file mode 100644 index 0000000..d9d2285 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake.py @@ -0,0 +1,116 @@ +""" +Loads functions that are mixed in to the standard library. E.g. builtins are +written in C (binaries), but my autocompletion only understands Python code. By +mixing in Python code, the autocompletion should work much better for builtins. +""" + +import os +import inspect + +from jedi._compatibility import is_py3, builtins, unicode +from jedi.parser import Parser +from jedi.parser import tokenize +from jedi.parser.representation import Class +from jedi.evaluate.helpers import FakeName + +modules = {} + + +def _load_faked_module(module): + module_name = module.__name__ + if module_name == '__builtin__' and not is_py3: + module_name = 'builtins' + + try: + return modules[module_name] + except KeyError: + path = os.path.dirname(os.path.abspath(__file__)) + try: + with open(os.path.join(path, 'fake', module_name) + '.pym') as f: + source = f.read() + except IOError: + modules[module_name] = None + return + module = Parser(unicode(source), module_name).module + modules[module_name] = module + + if module_name == 'builtins' and not is_py3: + # There are two implementations of `open` for either python 2/3. + # -> Rename the python2 version (`look at fake/builtins.pym`). + open_func = search_scope(module, 'open') + open_func.name = FakeName('open_python3') + open_func = search_scope(module, 'open_python2') + open_func.name = FakeName('open') + return module + + +def search_scope(scope, obj_name): + for s in scope.subscopes: + if str(s.name) == obj_name: + return s + + +def get_module(obj): + if inspect.ismodule(obj): + return obj + try: + obj = obj.__objclass__ + except AttributeError: + pass + + try: + imp_plz = obj.__module__ + except AttributeError: + # Unfortunately in some cases like `int` there's no __module__ + return builtins + else: + return __import__(imp_plz) + + +def _faked(module, obj, name): + # Crazy underscore actions to try to escape all the internal madness. + if module is None: + module = get_module(obj) + + faked_mod = _load_faked_module(module) + if faked_mod is None: + return + + # Having the module as a `parser.representation.module`, we need to scan + # for methods. + if name is None: + if inspect.isbuiltin(obj): + return search_scope(faked_mod, obj.__name__) + elif not inspect.isclass(obj): + # object is a method or descriptor + cls = search_scope(faked_mod, obj.__objclass__.__name__) + if cls is None: + return + return search_scope(cls, obj.__name__) + else: + if obj == module: + return search_scope(faked_mod, name) + else: + cls = search_scope(faked_mod, obj.__name__) + if cls is None: + return + return search_scope(cls, name) + + +def get_faked(module, obj, name=None): + obj = obj.__class__ if is_class_instance(obj) else obj + result = _faked(module, obj, name) + if not isinstance(result, Class) and result is not None: + # Set the docstr which was previously not set (faked modules don't + # contain it). + doc = '''"""%s"""''' % obj.__doc__ # TODO need escapes. + result.add_docstr(tokenize.Token(tokenize.STRING, doc, (0, 0))) + return result + + +def is_class_instance(obj): + """Like inspect.* methods.""" + return not (inspect.isclass(obj) or inspect.ismodule(obj) + or inspect.isbuiltin(obj) or inspect.ismethod(obj) + or inspect.ismethoddescriptor(obj) or inspect.iscode(obj) + or inspect.isgenerator(obj)) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_functools.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_functools.pym new file mode 100644 index 0000000..235e80a --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_functools.pym @@ -0,0 +1,9 @@ +class partial(): + def __init__(self, func, *args, **keywords): + self.__func = func + self.__args = args + self.__keywords = keywords + + def __call__(self, *args, **kwargs): + # I know this doesn't work in Python, but in Jedi it does ;-) + return self.__func(*self.__args, *args, **self.keywords, **kwargs) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_sqlite3.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_sqlite3.pym new file mode 100644 index 0000000..2151e65 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_sqlite3.pym @@ -0,0 +1,26 @@ +def connect(database, timeout=None, isolation_level=None, detect_types=None, factory=None): + return Connection() + + +class Connection(): + def cursor(self): + return Cursor() + + +class Cursor(): + def cursor(self): + return Cursor() + + def fetchone(self): + return Row() + + def fetchmany(self, size=cursor.arraysize): + return [self.fetchone()] + + def fetchall(self): + return [self.fetchone()] + + +class Row(): + def keys(self): + return [''] diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_sre.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_sre.pym new file mode 100644 index 0000000..217be56 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_sre.pym @@ -0,0 +1,99 @@ +def compile(): + class SRE_Match(): + endpos = int() + lastgroup = int() + lastindex = int() + pos = int() + string = str() + regs = ((int(), int()),) + + def __init__(self, pattern): + self.re = pattern + + def start(self): + return int() + + def end(self): + return int() + + def span(self): + return int(), int() + + def expand(self): + return str() + + def group(self, nr): + return str() + + def groupdict(self): + return {str(): str()} + + def groups(self): + return (str(),) + + class SRE_Pattern(): + flags = int() + groupindex = {} + groups = int() + pattern = str() + + def findall(self, string, pos=None, endpos=None): + """ + findall(string[, pos[, endpos]]) --> list. + Return a list of all non-overlapping matches of pattern in string. + """ + return [str()] + + def finditer(self, string, pos=None, endpos=None): + """ + finditer(string[, pos[, endpos]]) --> iterator. + Return an iterator over all non-overlapping matches for the + RE pattern in string. For each match, the iterator returns a + match object. + """ + yield SRE_Match(self) + + def match(self, string, pos=None, endpos=None): + """ + match(string[, pos[, endpos]]) --> match object or None. + Matches zero or more characters at the beginning of the string + pattern + """ + return SRE_Match(self) + + def scanner(self, string, pos=None, endpos=None): + pass + + def search(self, string, pos=None, endpos=None): + """ + search(string[, pos[, endpos]]) --> match object or None. + Scan through string looking for a match, and return a corresponding + MatchObject instance. Return None if no position in the string matches. + """ + return SRE_Match(self) + + def split(self, string, maxsplit=0]): + """ + split(string[, maxsplit = 0]) --> list. + Split string by the occurrences of pattern. + """ + return [str()] + + def sub(self, repl, string, count=0): + """ + sub(repl, string[, count = 0]) --> newstring + Return the string obtained by replacing the leftmost non-overlapping + occurrences of pattern in string by the replacement repl. + """ + return str() + + def subn(self, repl, string, count=0): + """ + subn(repl, string[, count = 0]) --> (newstring, number of subs) + Return the tuple (new_string, number_of_subs_made) found by replacing + the leftmost non-overlapping occurrences of pattern with the + replacement repl. + """ + return (str(), int()) + + return SRE_Pattern() diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_weakref.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_weakref.pym new file mode 100644 index 0000000..8d21a2c --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/_weakref.pym @@ -0,0 +1,8 @@ +def proxy(object, callback=None): + return object + +class weakref(): + def __init__(self, object, callback=None): + self.__object = object + def __call__(self): + return self.__object diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/builtins.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/builtins.pym new file mode 100644 index 0000000..41c51d2 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/builtins.pym @@ -0,0 +1,241 @@ +""" +Pure Python implementation of some builtins. +This code is not going to be executed anywhere. +These implementations are not always correct, but should work as good as +possible for the auto completion. +""" + + +def next(iterator, default=None): + if hasattr("next"): + return iterator.next() + else: + return iterator.__next__() + return default + + +def iter(collection, sentinel=None): + if sentinel: + yield collection() + else: + for c in collection: + yield c + + +def range(start, stop=None, step=1): + return [0] + + +class file(): + def __iter__(self): + yield '' + def next(self): + return '' + + +class xrange(): + # Attention: this function doesn't exist in Py3k (there it is range). + def __iter__(self): + yield 1 + + def count(self): + return 1 + + def index(self): + return 1 + + +def open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True): + import io + return io.TextIOWrapper(file, mode, buffering, encoding, errors, newline, closefd) + + +def open_python2(name, mode=None, buffering=None): + return file(name, mode, buffering) + + +#-------------------------------------------------------- +# descriptors +#-------------------------------------------------------- +class property(): + def __init__(self, fget, fset=None, fdel=None, doc=None): + self.fget = fget + self.fset = fset + self.fdel = fdel + self.__doc__ = doc + + def __get__(self, obj, cls): + return self.fget(obj) + + def __set__(self, obj, value): + self.fset(obj, value) + + def __delete__(self, obj): + self.fdel(obj) + + def setter(self, func): + self.fset = func + return self + + def getter(self, func): + self.fget = func + return self + + def deleter(self, func): + self.fdel = func + return self + + +class staticmethod(): + def __init__(self, func): + self.__func = func + + def __get__(self, obj, cls): + return self.__func + + +class classmethod(): + def __init__(self, func): + self.__func = func + + def __get__(self, obj, cls): + def _method(*args, **kwargs): + return self.__func(cls, *args, **kwargs) + return _method + + +#-------------------------------------------------------- +# array stuff +#-------------------------------------------------------- +class list(): + def __init__(self, iterable=[]): + self.__iterable = [] + for i in iterable: + self.__iterable += [i] + + def __iter__(self): + for i in self.__iterable: + yield i + + def __getitem__(self, y): + return self.__iterable[y] + + def pop(self): + return self.__iterable[-1] + + +class tuple(): + def __init__(self, iterable=[]): + self.__iterable = [] + for i in iterable: + self.__iterable += [i] + + def __iter__(self): + for i in self.__iterable: + yield i + + def __getitem__(self, y): + return self.__iterable[y] + + def index(self): + return 1 + + def count(self): + return 1 + + +class set(): + def __init__(self, iterable=[]): + self.__iterable = iterable + + def __iter__(self): + for i in self.__iterable: + yield i + + def pop(self): + return self.__iterable.pop() + + def copy(self): + return self + + def difference(self, other): + return self - other + + def intersection(self, other): + return self & other + + def symmetric_difference(self, other): + return self ^ other + + def union(self, other): + return self | other + + +class frozenset(): + def __init__(self, iterable=[]): + self.__iterable = iterable + + def __iter__(self): + for i in self.__iterable: + yield i + + def copy(self): + return self + + +class dict(): + def __init__(self, **elements): + self.__elements = elements + + def clear(self): + # has a strange docstr + pass + + def get(self, k, d=None): + # TODO implement + try: + #return self.__elements[k] + pass + except KeyError: + return d + + def setdefault(self, k, d): + # TODO maybe also return the content + return d + + +class reversed(): + def __init__(self, sequence): + self.__sequence = sequence + + def __iter__(self): + for i in self.__sequence: + yield i + + def __next__(self): + return next(self.__iter__()) + + def next(self): + return next(self.__iter__()) + + +def sorted(iterable, cmp=None, key=None, reverse=False): + return iterable + + +#-------------------------------------------------------- +# basic types +#-------------------------------------------------------- +class int(): + def __init__(self, x, base=None): + pass + + +class str(): + def __init__(self, obj): + pass + + +class type(): + def mro(): + return [object] diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/datetime.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/datetime.pym new file mode 100644 index 0000000..823ac5b --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/datetime.pym @@ -0,0 +1,4 @@ +class datetime(): + @staticmethod + def now(): + return datetime() diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/io.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/io.pym new file mode 100644 index 0000000..8225477 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/io.pym @@ -0,0 +1,3 @@ +class TextIOWrapper(): + def __next__(self): + return 'hacked io return' diff --git a/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/posix.pym b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/posix.pym new file mode 100644 index 0000000..4417f7c --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/compiled/fake/posix.pym @@ -0,0 +1,5 @@ +def getcwd(): + return '' + +def getcwdu(): + return '' diff --git a/python/pw_multiScriptEditor/jedi/evaluate/docstrings.py b/python/pw_multiScriptEditor/jedi/evaluate/docstrings.py new file mode 100644 index 0000000..9a789a5 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/docstrings.py @@ -0,0 +1,138 @@ +""" +Docstrings are another source of information for functions and classes. +:mod:`jedi.evaluate.dynamic` tries to find all executions of functions, while +the docstring parsing is much easier. There are two different types of +docstrings that |jedi| understands: + +- `Sphinx `_ +- `Epydoc `_ + +For example, the sphinx annotation ``:type foo: str`` clearly states that the +type of ``foo`` is ``str``. + +As an addition to parameter searching, this module also provides return +annotations. +""" + +import re +from itertools import chain +from textwrap import dedent + +from jedi.evaluate.cache import memoize_default +from jedi.parser import Parser +from jedi.common import indent_block + +DOCSTRING_PARAM_PATTERNS = [ + r'\s*:type\s+%s:\s*([^\n]+)', # Sphinx + r'\s*@type\s+%s:\s*([^\n]+)', # Epydoc +] + +DOCSTRING_RETURN_PATTERNS = [ + re.compile(r'\s*:rtype:\s*([^\n]+)', re.M), # Sphinx + re.compile(r'\s*@rtype:\s*([^\n]+)', re.M), # Epydoc +] + +REST_ROLE_PATTERN = re.compile(r':[^`]+:`([^`]+)`') + + +@memoize_default(None, evaluator_is_first_arg=True) +def follow_param(evaluator, param): + func = param.parent_function + param_str = _search_param_in_docstr(func.raw_doc, str(param.get_name())) + return _evaluate_for_statement_string(evaluator, param_str, param.get_parent_until()) + + +def _search_param_in_docstr(docstr, param_str): + """ + Search `docstr` for a type of `param_str`. + + >>> _search_param_in_docstr(':type param: int', 'param') + 'int' + >>> _search_param_in_docstr('@type param: int', 'param') + 'int' + >>> _search_param_in_docstr( + ... ':type param: :class:`threading.Thread`', 'param') + 'threading.Thread' + >>> _search_param_in_docstr('no document', 'param') is None + True + + """ + # look at #40 to see definitions of those params + patterns = [re.compile(p % re.escape(param_str)) + for p in DOCSTRING_PARAM_PATTERNS] + for pattern in patterns: + match = pattern.search(docstr) + if match: + return _strip_rst_role(match.group(1)) + + return None + + +def _strip_rst_role(type_str): + """ + Strip off the part looks like a ReST role in `type_str`. + + >>> _strip_rst_role(':class:`ClassName`') # strip off :class: + 'ClassName' + >>> _strip_rst_role(':py:obj:`module.Object`') # works with domain + 'module.Object' + >>> _strip_rst_role('ClassName') # do nothing when not ReST role + 'ClassName' + + See also: + http://sphinx-doc.org/domains.html#cross-referencing-python-objects + + """ + match = REST_ROLE_PATTERN.match(type_str) + if match: + return match.group(1) + else: + return type_str + + +def _evaluate_for_statement_string(evaluator, string, module): + code = dedent(""" + def pseudo_docstring_stuff(): + '''Create a pseudo function for docstring statements.''' + %s + """) + if string is None: + return [] + + for element in re.findall('((?:\w+\.)*\w+)\.', string): + # Try to import module part in dotted name. + # (e.g., 'threading' in 'threading.Thread'). + string = 'import %s\n' % element + string + + p = Parser(code % indent_block(string), no_docstr=True) + pseudo_cls = p.module.subscopes[0] + try: + stmt = pseudo_cls.statements[-1] + except IndexError: + return [] + + # Use the module of the param. + # TODO this module is not the module of the param in case of a function + # call. In that case it's the module of the function call. + # stuffed with content from a function call. + pseudo_cls.parent = module + definitions = evaluator.eval_statement(stmt) + it = (evaluator.execute(d) for d in definitions) + # TODO Executing tuples does not make sense, people tend to say + # `(str, int)` in a type annotation, which means that it returns a tuple + # with both types. + # At this point we just return the classes if executing wasn't possible, + # i.e. is a tuple. + return list(chain.from_iterable(it)) or definitions + + +@memoize_default(None, evaluator_is_first_arg=True) +def find_return_types(evaluator, func): + def search_return_in_docstr(code): + for p in DOCSTRING_RETURN_PATTERNS: + match = p.search(code) + if match: + return _strip_rst_role(match.group(1)) + + type_str = search_return_in_docstr(func.raw_doc) + return _evaluate_for_statement_string(evaluator, type_str, func.get_parent_until()) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/dynamic.py b/python/pw_multiScriptEditor/jedi/evaluate/dynamic.py new file mode 100644 index 0000000..49dbea1 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/dynamic.py @@ -0,0 +1,153 @@ +""" +One of the really important features of |jedi| is to have an option to +understand code like this:: + + def foo(bar): + bar. # completion here + foo(1) + +There's no doubt wheter bar is an ``int`` or not, but if there's also a call +like ``foo('str')``, what would happen? Well, we'll just show both. Because +that's what a human would expect. + +It works as follows: + +- |Jedi| sees a param +- search for function calls named ``foo`` +- execute these calls and check the input. This work with a ``ParamListener``. +""" + +from jedi._compatibility import unicode +from jedi.parser import representation as pr +from jedi import settings +from jedi.evaluate import helpers +from jedi.evaluate.cache import memoize_default +from jedi.evaluate import imports + +# This is something like the sys.path, but only for searching params. It means +# that this is the order in which Jedi searches params. +search_param_modules = ['.'] + + +class ParamListener(object): + """ + This listener is used to get the params for a function. + """ + def __init__(self): + self.param_possibilities = [] + + def execute(self, params): + self.param_possibilities.append(params) + + +@memoize_default([], evaluator_is_first_arg=True) +def search_params(evaluator, param): + """ + This is a dynamic search for params. If you try to complete a type: + + >>> def func(foo): + ... foo + >>> func(1) + >>> func("") + + It is not known what the type is, because it cannot be guessed with + recursive madness. Therefore one has to analyse the statements that are + calling the function, as well as analyzing the incoming params. + """ + if not settings.dynamic_params: + return [] + + def get_params_for_module(module): + """ + Returns the values of a param, or an empty array. + """ + @memoize_default([], evaluator_is_first_arg=True) + def get_posibilities(evaluator, module, func_name): + try: + possible_stmts = module.used_names[func_name] + except KeyError: + return [] + + for stmt in possible_stmts: + if isinstance(stmt, pr.Import): + continue + calls = helpers.scan_statement_for_calls(stmt, func_name) + for c in calls: + # no execution means that params cannot be set + call_path = list(c.generate_call_path()) + pos = c.start_pos + scope = stmt.parent + + # this whole stuff is just to not execute certain parts + # (speed improvement), basically we could just call + # ``eval_call_path`` on the call_path and it would + # also work. + def listRightIndex(lst, value): + return len(lst) - lst[-1::-1].index(value) - 1 + + # Need to take right index, because there could be a + # func usage before. + call_path_simple = [unicode(d) if isinstance(d, pr.NamePart) + else d for d in call_path] + i = listRightIndex(call_path_simple, func_name) + first, last = call_path[:i], call_path[i + 1:] + if not last and not call_path_simple.index(func_name) != i: + continue + scopes = [scope] + if first: + scopes = evaluator.eval_call_path(iter(first), c.parent, pos) + pos = None + from jedi.evaluate import representation as er + for scope in scopes: + s = evaluator.find_types(scope, func_name, position=pos, + search_global=not first, + resolve_decorator=False) + + c = [getattr(escope, 'base_func', None) or escope.base + for escope in s + if escope.isinstance(er.Function, er.Class)] + if compare in c: + # only if we have the correct function we execute + # it, otherwise just ignore it. + evaluator.follow_path(iter(last), s, scope) + return listener.param_possibilities + + result = [] + for params in get_posibilities(evaluator, module, func_name): + for p in params: + if str(p) == param_name: + result += evaluator.eval_statement(p.parent) + return result + + func = param.get_parent_until(pr.Function) + current_module = param.get_parent_until() + func_name = unicode(func.name) + compare = func + if func_name == '__init__' and isinstance(func.parent, pr.Class): + func_name = unicode(func.parent.name) + compare = func.parent + + # get the param name + if param.assignment_details: + # first assignment details, others would be a syntax error + expression_list, op = param.assignment_details[0] + else: + expression_list = param.expression_list() + offset = 1 if expression_list[0] in ['*', '**'] else 0 + param_name = str(expression_list[offset].name) + + # add the listener + listener = ParamListener() + func.listeners.add(listener) + + result = [] + # This is like backtracking: Get the first possible result. + for mod in imports.get_modules_containing_name([current_module], func_name): + result = get_params_for_module(mod) + if result: + break + + # cleanup: remove the listener; important: should not stick. + func.listeners.remove(listener) + + return result diff --git a/python/pw_multiScriptEditor/jedi/evaluate/finder.py b/python/pw_multiScriptEditor/jedi/evaluate/finder.py new file mode 100644 index 0000000..d38a44a --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/finder.py @@ -0,0 +1,567 @@ +""" +Searcjing for names with given scope and name. This is very central in Jedi and +Python. The name resolution is quite complicated with descripter, +``__getattribute__``, ``__getattr__``, ``global``, etc. + +Flow checks ++++++++++++ + +Flow checks are not really mature. There's only a check for ``isinstance``. It +would check whether a flow has the form of ``if isinstance(a, type_or_tuple)``. +Unfortunately every other thing is being ignored (e.g. a == '' would be easy to +check for -> a is a string). There's big potential in these checks. +""" +from itertools import chain + +from jedi._compatibility import hasattr, unicode, u +from jedi.parser import representation as pr, tokenize +from jedi.parser import fast +from jedi import debug +from jedi import common +from jedi import settings +from jedi.evaluate import representation as er +from jedi.evaluate import dynamic +from jedi.evaluate import compiled +from jedi.evaluate import docstrings +from jedi.evaluate import iterable +from jedi.evaluate import imports +from jedi.evaluate import analysis +from jedi.evaluate import precedence + + +class NameFinder(object): + def __init__(self, evaluator, scope, name_str, position=None): + self._evaluator = evaluator + self.scope = scope + self.name_str = name_str + self.position = position + + @debug.increase_indent + def find(self, scopes, resolve_decorator=True, search_global=False): + if unicode(self.name_str) == 'None': + # Filter None, because it's really just a keyword, nobody wants to + # access it. + return [] + + names = self.filter_name(scopes) + types = self._names_to_types(names, resolve_decorator) + + if not names and not types \ + and not (isinstance(self.name_str, pr.NamePart) + and isinstance(self.name_str.parent.parent, pr.Param)): + if not isinstance(self.name_str, (str, unicode)): # TODO Remove? + if search_global: + message = ("NameError: name '%s' is not defined." + % self.name_str) + analysis.add(self._evaluator, 'name-error', self.name_str, + message) + else: + analysis.add_attribute_error(self._evaluator, + self.scope, self.name_str) + + debug.dbg('finder._names_to_types: %s -> %s', names, types) + return self._resolve_descriptors(types) + + def scopes(self, search_global=False): + if search_global: + return get_names_of_scope(self._evaluator, self.scope, self.position) + else: + return self.scope.scope_names_generator(self.position) + + def filter_name(self, scope_names_generator): + """ + Filters all variables of a scope (which are defined in the + `scope_names_generator`), until the name fits. + """ + result = [] + for name_list_scope, name_list in scope_names_generator: + break_scopes = [] + if not isinstance(name_list_scope, compiled.CompiledObject): + # Here is the position stuff happening (sorting of variables). + # Compiled objects don't need that, because there's only one + # reference. + name_list = sorted(name_list, key=lambda n: n.start_pos, reverse=True) + + for name in name_list: + if unicode(self.name_str) != name.get_code(): + continue + + scope = name.parent.parent + if scope in break_scopes: + continue + + # Exclude `arr[1] =` from the result set. + if not self._name_is_array_assignment(name): + result.append(name) + + if result and self._is_name_break_scope(name): + if self._does_scope_break_immediately(scope, name_list_scope): + break + else: + break_scopes.append(scope) + if result: + break + + scope_txt = (self.scope if self.scope == name_list_scope + else '%s-%s' % (self.scope, name_list_scope)) + debug.dbg('finder.filter_name "%s" in (%s): %s@%s', self.name_str, + scope_txt, u(result), self.position) + return result + + def _check_getattr(self, inst): + """Checks for both __getattr__ and __getattribute__ methods""" + result = [] + # str is important to lose the NamePart! + name = compiled.create(self._evaluator, str(self.name_str)) + with common.ignored(KeyError): + result = inst.execute_subscope_by_name('__getattr__', [name]) + if not result: + # this is a little bit special. `__getattribute__` is executed + # before anything else. But: I know no use case, where this + # could be practical and the jedi would return wrong types. If + # you ever have something, let me know! + with common.ignored(KeyError): + result = inst.execute_subscope_by_name('__getattribute__', [name]) + return result + + def _is_name_break_scope(self, name): + """ + Returns True except for nested imports and instance variables. + """ + par = name.parent + if par.isinstance(pr.Statement): + if isinstance(name, er.InstanceElement) and not name.is_class_var: + return False + elif isinstance(par, pr.Import) and par.is_nested(): + return False + return True + + def _does_scope_break_immediately(self, scope, name_list_scope): + """ + In comparison to everthing else, if/while/etc doesn't break directly, + because there are multiple different places in which a variable can be + defined. + """ + if isinstance(scope, pr.Flow) \ + or isinstance(scope, pr.KeywordStatement) and scope.name == 'global': + + # Check for `if foo is not None`, because Jedi is not interested in + # None values, so this is the only branch we actually care about. + # ATM it carries the same issue as the isinstance checks. It + # doesn't work with instance variables (self.foo). + if isinstance(scope, pr.Flow) and scope.command in ('if', 'while'): + try: + expression_list = scope.inputs[0].expression_list() + except IndexError: + pass + else: + p = precedence.create_precedence(expression_list) + if (isinstance(p, precedence.Precedence) + and p.operator.string == 'is not' + and p.right.get_code() == 'None' + and p.left.get_code() == unicode(self.name_str)): + return True + + if isinstance(name_list_scope, er.Class): + name_list_scope = name_list_scope.base + return scope == name_list_scope + else: + return True + + def _name_is_array_assignment(self, name): + if name.parent.isinstance(pr.Statement): + def is_execution(calls): + for c in calls: + if isinstance(c, (unicode, str, tokenize.Token)): + continue + if c.isinstance(pr.Array): + if is_execution(c): + return True + elif c.isinstance(pr.Call): + # Compare start_pos, because names may be different + # because of executions. + if c.name.start_pos == name.start_pos \ + and c.execution: + return True + return False + + is_exe = False + for assignee, op in name.parent.assignment_details: + is_exe |= is_execution(assignee) + + if is_exe: + # filter array[3] = ... + # TODO check executions for dict contents + return True + return False + + def _names_to_types(self, names, resolve_decorator): + types = [] + # Add isinstance and other if/assert knowledge. + flow_scope = self.scope + evaluator = self._evaluator + while flow_scope: + # TODO check if result is in scope -> no evaluation necessary + n = check_flow_information(evaluator, flow_scope, + self.name_str, self.position) + if n: + return n + flow_scope = flow_scope.parent + + for name in names: + typ = name.parent + if typ.isinstance(pr.ForFlow): + types += self._handle_for_loops(typ) + elif isinstance(typ, pr.Param): + types += self._eval_param(typ) + elif typ.isinstance(pr.Statement): + if typ.is_global(): + # global keyword handling. + types += evaluator.find_types(typ.parent.parent, str(name)) + else: + types += self._remove_statements(typ, name) + else: + if isinstance(typ, pr.Class): + typ = er.Class(evaluator, typ) + elif isinstance(typ, pr.Function): + typ = er.Function(evaluator, typ) + elif isinstance(typ, pr.Module): + typ = er.ModuleWrapper(evaluator, typ) + + if typ.isinstance(er.Function) and resolve_decorator: + typ = typ.get_decorated_func() + types.append(typ) + + if not names and isinstance(self.scope, er.Instance): + # handling __getattr__ / __getattribute__ + types = self._check_getattr(self.scope) + + return types + + def _remove_statements(self, stmt, name): + """ + This is the part where statements are being stripped. + + Due to lazy evaluation, statements like a = func; b = a; b() have to be + evaluated. + """ + evaluator = self._evaluator + types = [] + # Remove the statement docstr stuff for now, that has to be + # implemented with the evaluator class. + #if stmt.docstr: + #res_new.append(stmt) + + check_instance = None + if isinstance(stmt, er.InstanceElement) and stmt.is_class_var: + check_instance = stmt.instance + stmt = stmt.var + + types += evaluator.eval_statement(stmt, seek_name=unicode(self.name_str)) + + # check for `except X as y` usages, because y needs to be instantiated. + p = stmt.parent + # TODO this looks really hacky, improve parser representation! + if isinstance(p, pr.Flow) and p.command == 'except' \ + and p.inputs and p.inputs[0].as_names == [name]: + # TODO check for types that are not classes and add it to the + # static analysis report. + types = list(chain.from_iterable( + evaluator.execute(t) for t in types)) + + if check_instance is not None: + # class renames + types = [er.InstanceElement(evaluator, check_instance, a, True) + if isinstance(a, (er.Function, pr.Function)) + else a for a in types] + return types + + def _eval_param(self, param): + evaluator = self._evaluator + res_new = [] + func = param.parent + + cls = func.parent.get_parent_until((pr.Class, pr.Function)) + + from jedi.evaluate.param import ExecutedParam + if isinstance(cls, pr.Class) and param.position_nr == 0 \ + and not isinstance(param, ExecutedParam): + # This is where we add self - if it has never been + # instantiated. + if isinstance(self.scope, er.InstanceElement): + res_new.append(self.scope.instance) + else: + for inst in evaluator.execute(er.Class(evaluator, cls)): + inst.is_generated = True + res_new.append(inst) + return res_new + + # Instances are typically faked, if the instance is not called from + # outside. Here we check it for __init__ functions and return. + if isinstance(func, er.InstanceElement) \ + and func.instance.is_generated and str(func.name) == '__init__': + param = func.var.params[param.position_nr] + + # Add docstring knowledge. + doc_params = docstrings.follow_param(evaluator, param) + if doc_params: + return doc_params + + if not param.is_generated: + # Param owns no information itself. + res_new += dynamic.search_params(evaluator, param) + if not res_new: + if param.stars: + t = 'tuple' if param.stars == 1 else 'dict' + typ = evaluator.find_types(compiled.builtin, t)[0] + res_new = evaluator.execute(typ) + if not param.assignment_details: + # this means that there are no default params, + # so just ignore it. + return res_new + return res_new + evaluator.eval_statement(param, seek_name=unicode(self.name_str)) + + def _handle_for_loops(self, loop): + # Take the first statement (for has always only one`in`). + if not loop.inputs: + return [] + result = iterable.get_iterator_types(self._evaluator.eval_statement(loop.inputs[0])) + if len(loop.set_vars) > 1: + expression_list = loop.set_stmt.expression_list() + # loops with loop.set_vars > 0 only have one command + result = _assign_tuples(expression_list[0], result, unicode(self.name_str)) + return result + + def _resolve_descriptors(self, types): + """Processes descriptors""" + result = [] + for r in types: + if isinstance(self.scope, (er.Instance, er.Class)) \ + and hasattr(r, 'get_descriptor_return'): + # handle descriptors + with common.ignored(KeyError): + result += r.get_descriptor_return(self.scope) + continue + result.append(r) + return result + + +def check_flow_information(evaluator, flow, search_name_part, pos): + """ Try to find out the type of a variable just with the information that + is given by the flows: e.g. It is also responsible for assert checks.:: + + if isinstance(k, str): + k. # <- completion here + + ensures that `k` is a string. + """ + if not settings.dynamic_flow_information: + return None + + result = [] + if isinstance(flow, pr.IsScope) and not result: + for ass in reversed(flow.asserts): + if pos is None or ass.start_pos > pos: + continue + result = _check_isinstance_type(evaluator, ass, search_name_part) + if result: + break + + if isinstance(flow, pr.Flow) and not result: + if flow.command in ['if', 'while'] and len(flow.inputs) == 1: + result = _check_isinstance_type(evaluator, flow.inputs[0], search_name_part) + return result + + +def _check_isinstance_type(evaluator, stmt, search_name_part): + try: + expression_list = stmt.expression_list() + # this might be removed if we analyze and, etc + assert len(expression_list) == 1 + call = expression_list[0] + assert isinstance(call, pr.Call) and str(call.name) == 'isinstance' + assert bool(call.execution) + + # isinstance check + isinst = call.execution.values + assert len(isinst) == 2 # has two params + obj, classes = [statement.expression_list() for statement in isinst] + assert len(obj) == 1 + assert len(classes) == 1 + assert isinstance(obj[0], pr.Call) + + # names fit? + assert unicode(obj[0].name) == unicode(search_name_part) + assert isinstance(classes[0], pr.StatementElement) # can be type or tuple + except AssertionError: + return [] + + result = [] + for c in evaluator.eval_call(classes[0]): + for typ in (c.values() if isinstance(c, iterable.Array) else [c]): + result += evaluator.execute(typ) + return result + + +def get_names_of_scope(evaluator, scope, position=None, star_search=True, include_builtin=True): + """ + Get all completions (names) possible for the current scope. The star search + option is only here to provide an optimization. Otherwise the whole thing + would probably start a little recursive madness. + + This function is used to include names from outer scopes. For example, when + the current scope is function: + + >>> from jedi._compatibility import u + >>> from jedi.parser import Parser + >>> parser = Parser(u(''' + ... x = ['a', 'b', 'c'] + ... def func(): + ... y = None + ... ''')) + >>> scope = parser.module.subscopes[0] + >>> scope + + + `get_names_of_scope` is a generator. First it yields names from most inner + scope. + + >>> from jedi.evaluate import Evaluator + >>> pairs = list(get_names_of_scope(Evaluator(), scope)) + >>> pairs[0] + (, []) + + Then it yield the names from one level outer scope. For this example, this + is the most outer scope. + + >>> pairs[1] + (>, [, ]) + + After that we have a few underscore names that have been defined + + >>> pairs[2] + (>, [, ...]) + + + Finally, it yields names from builtin, if `include_builtin` is + true (default). + + >>> pairs[3] #doctest: +ELLIPSIS + (, [, ...]) + + :rtype: [(pr.Scope, [pr.Name])] + :return: Return an generator that yields a pair of scope and names. + """ + if isinstance(scope, pr.ListComprehension): + position = scope.parent.start_pos + + in_func_scope = scope + non_flow = scope.get_parent_until(pr.Flow, reverse=True) + while scope: + # We don't want submodules to report if we have modules. + # As well as some non-scopes, which are parents of list comprehensions. + if isinstance(scope, pr.SubModule) and scope.parent or not scope.is_scope(): + scope = scope.parent + continue + # `pr.Class` is used, because the parent is never `Class`. + # Ignore the Flows, because the classes and functions care for that. + # InstanceElement of Class is ignored, if it is not the start scope. + if not (scope != non_flow and scope.isinstance(pr.Class) + or scope.isinstance(pr.Flow) + or scope.isinstance(er.Instance) + and non_flow.isinstance(er.Function) + or isinstance(scope, compiled.CompiledObject) + and scope.type() == 'class' and in_func_scope != scope): + + if isinstance(scope, (pr.SubModule, fast.Module)): + scope = er.ModuleWrapper(evaluator, scope) + + for g in scope.scope_names_generator(position): + yield g + if scope.isinstance(pr.ListComprehension): + # is a list comprehension + yield scope, scope.get_defined_names(is_internal_call=True) + + scope = scope.parent + # This is used, because subscopes (Flow scopes) would distort the + # results. + if scope and scope.isinstance(er.Function, pr.Function, er.FunctionExecution): + in_func_scope = scope + if in_func_scope != scope \ + and isinstance(in_func_scope, (pr.Function, er.FunctionExecution)): + position = None + + # Add star imports. + if star_search: + for s in imports.remove_star_imports(evaluator, non_flow.get_parent_until()): + for g in get_names_of_scope(evaluator, s, star_search=False): + yield g + + # Add builtins to the global scope. + if include_builtin: + yield compiled.builtin, compiled.builtin.get_defined_names() + + +def _assign_tuples(tup, results, seek_name): + """ + This is a normal assignment checker. In python functions and other things + can return tuples: + >>> a, b = 1, "" + >>> a, (b, c) = 1, ("", 1.0) + + Here, if `seek_name` is "a", the number type will be returned. + The first part (before `=`) is the param tuples, the second one result. + + :type tup: pr.Array + """ + def eval_results(index): + types = [] + for r in results: + try: + func = r.get_exact_index_types + except AttributeError: + debug.warning("invalid tuple lookup %s of result %s in %s", + tup, results, seek_name) + else: + with common.ignored(IndexError): + types += func(index) + return types + + result = [] + for i, stmt in enumerate(tup): + # Used in assignments. There is just one call and no other things, + # therefore we can just assume, that the first part is important. + command = stmt.expression_list()[0] + + if tup.type == pr.Array.NOARRAY: + + # unnessecary braces -> just remove. + r = results + else: + r = eval_results(i) + + # LHS of tuples can be nested, so resolve it recursively + result += find_assignments(command, r, seek_name) + return result + + +def find_assignments(lhs, results, seek_name): + """ + Check if `seek_name` is in the left hand side `lhs` of assignment. + + `lhs` can simply be a variable (`pr.Call`) or a tuple/list (`pr.Array`) + representing the following cases:: + + a = 1 # lhs is pr.Call + (a, b) = 2 # lhs is pr.Array + + :type lhs: pr.Call + :type results: list + :type seek_name: str + """ + if isinstance(lhs, pr.Array): + return _assign_tuples(lhs, results, seek_name) + elif unicode(lhs.name.names[-1]) == seek_name: + return results + else: + return [] diff --git a/python/pw_multiScriptEditor/jedi/evaluate/helpers.py b/python/pw_multiScriptEditor/jedi/evaluate/helpers.py new file mode 100644 index 0000000..409fb0e --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/helpers.py @@ -0,0 +1,216 @@ +import copy + +from jedi import common +from jedi.parser import representation as pr +from jedi import debug + + +def fast_parent_copy(obj): + """ + Much, much faster than copy.deepcopy, but just for certain elements. + """ + new_elements = {} + + def recursion(obj): + if isinstance(obj, pr.Statement): + # Need to set _set_vars, otherwise the cache is not working + # correctly, don't know why. + obj.get_defined_names() + + new_obj = copy.copy(obj) + new_elements[obj] = new_obj + + try: + items = list(new_obj.__dict__.items()) + except AttributeError: + # __dict__ not available, because of __slots__ + items = [] + + before = () + for cls in new_obj.__class__.__mro__: + with common.ignored(AttributeError): + if before == cls.__slots__: + continue + before = cls.__slots__ + items += [(n, getattr(new_obj, n)) for n in before] + + for key, value in items: + # replace parent (first try _parent and then parent) + if key in ['parent', '_parent'] and value is not None: + if key == 'parent' and '_parent' in items: + # parent can be a property + continue + with common.ignored(KeyError): + setattr(new_obj, key, new_elements[value]) + elif key in ['parent_function', 'use_as_parent', '_sub_module']: + continue + elif isinstance(value, list): + setattr(new_obj, key, list_rec(value)) + elif isinstance(value, pr.Simple): + setattr(new_obj, key, recursion(value)) + return new_obj + + def list_rec(list_obj): + copied_list = list_obj[:] # lists, tuples, strings, unicode + for i, el in enumerate(copied_list): + if isinstance(el, pr.Simple): + copied_list[i] = recursion(el) + elif isinstance(el, list): + copied_list[i] = list_rec(el) + return copied_list + return recursion(obj) + + +def call_signature_array_for_pos(stmt, pos): + """ + Searches for the array and position of a tuple. + """ + def search_array(arr, pos): + accepted_types = pr.Array.TUPLE, pr.Array.NOARRAY + if arr.type == 'dict': + for stmt in arr.values + arr.keys: + new_arr, index = call_signature_array_for_pos(stmt, pos) + if new_arr is not None: + return new_arr, index + else: + for i, stmt in enumerate(arr): + new_arr, index = call_signature_array_for_pos(stmt, pos) + if new_arr is not None: + return new_arr, index + + if arr.start_pos < pos <= stmt.end_pos: + if arr.type in accepted_types and isinstance(arr.parent, pr.Call): + return arr, i + if len(arr) == 0 and arr.start_pos < pos < arr.end_pos: + if arr.type in accepted_types and isinstance(arr.parent, pr.Call): + return arr, 0 + return None, 0 + + def search_call(call, pos): + arr, index = None, 0 + if call.next is not None: + if isinstance(call.next, pr.Array): + arr, index = search_array(call.next, pos) + else: + arr, index = search_call(call.next, pos) + if not arr and call.execution is not None: + arr, index = search_array(call.execution, pos) + return arr, index + + if stmt.start_pos >= pos >= stmt.end_pos: + return None, 0 + + for command in stmt.expression_list(): + arr = None + if isinstance(command, pr.Array): + arr, index = search_array(command, pos) + elif isinstance(command, pr.StatementElement): + arr, index = search_call(command, pos) + if arr is not None: + return arr, index + return None, 0 + + +def search_call_signatures(user_stmt, position): + """ + Returns the function Call that matches the position before. + """ + debug.speed('func_call start') + call, index = None, 0 + if user_stmt is not None and isinstance(user_stmt, pr.Statement): + # some parts will of the statement will be removed + user_stmt = fast_parent_copy(user_stmt) + arr, index = call_signature_array_for_pos(user_stmt, position) + if arr is not None: + call = arr.parent + + debug.speed('func_call parsed') + return call, index + + +def scan_statement_for_calls(stmt, search_name, assignment_details=False): + """ Returns the function Calls that match search_name in an Array. """ + def scan_array(arr, search_name): + result = [] + if arr.type == pr.Array.DICT: + for key_stmt, value_stmt in arr.items(): + result += scan_statement_for_calls(key_stmt, search_name) + result += scan_statement_for_calls(value_stmt, search_name) + else: + for stmt in arr: + result += scan_statement_for_calls(stmt, search_name) + return result + + check = list(stmt.expression_list()) + if assignment_details: + for expression_list, op in stmt.assignment_details: + check += expression_list + + result = [] + for c in check: + if isinstance(c, pr.Array): + result += scan_array(c, search_name) + elif isinstance(c, pr.Call): + s_new = c + while s_new is not None: + n = s_new.name + if isinstance(n, pr.Name) \ + and search_name in [str(x) for x in n.names]: + result.append(c) + + if s_new.execution is not None: + result += scan_array(s_new.execution, search_name) + s_new = s_new.next + elif isinstance(c, pr.ListComprehension): + for s in c.stmt, c.middle, c.input: + result += scan_statement_for_calls(s, search_name) + + return result + + +class FakeSubModule(): + line_offset = 0 + + +class FakeArray(pr.Array): + def __init__(self, values, parent=None, arr_type=pr.Array.LIST): + p = (0, 0) + super(FakeArray, self).__init__(FakeSubModule, p, arr_type, parent) + self.values = values + + +class FakeStatement(pr.Statement): + def __init__(self, expression_list, start_pos=(0, 0), parent=None): + p = start_pos + super(FakeStatement, self).__init__(FakeSubModule, expression_list, p, p) + self.set_expression_list(expression_list) + self.parent = parent + + +class FakeImport(pr.Import): + def __init__(self, name, parent, level=0): + p = 0, 0 + super(FakeImport, self).__init__(FakeSubModule, p, p, name, + relative_count=level) + self.parent = parent + + +class FakeName(pr.Name): + def __init__(self, name_or_names, parent=None): + p = 0, 0 + if isinstance(name_or_names, list): + names = [(n, p) for n in name_or_names] + else: + names = [(name_or_names, p)] + super(FakeName, self).__init__(FakeSubModule, names, p, p, parent) + + +def stmts_to_stmt(statements): + """ + Sometimes we want to have something like a result_set and unite some + statements in one. + """ + if len(statements) == 1: + return statements[0] + array = FakeArray(statements, arr_type=pr.Array.NOARRAY) + return FakeStatement([array]) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/imports.py b/python/pw_multiScriptEditor/jedi/evaluate/imports.py new file mode 100644 index 0000000..1d7c493 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/imports.py @@ -0,0 +1,570 @@ +""" +:mod:`jedi.evaluate.imports` is here to resolve import statements and return +the modules/classes/functions/whatever, which they stand for. However there's +not any actual importing done. This module is about finding modules in the +filesystem. This can be quite tricky sometimes, because Python imports are not +always that simple. + +This module uses imp for python up to 3.2 and importlib for python 3.3 on; the +correct implementation is delegated to _compatibility. + +This module also supports import autocompletion, which means to complete +statements like ``from datetim`` (curser at the end would return ``datetime``). +""" +import os +import pkgutil +import sys +from itertools import chain + +from jedi._compatibility import find_module, unicode +from jedi import common +from jedi import debug +from jedi import cache +from jedi.parser import fast +from jedi.parser import representation as pr +from jedi.evaluate.sys_path import get_sys_path, sys_path_with_modifications +from jedi.evaluate import helpers +from jedi import settings +from jedi.common import source_to_unicode +from jedi.evaluate import compiled +from jedi.evaluate import analysis +from jedi.evaluate.cache import memoize_default, NO_DEFAULT + + +class ModuleNotFound(Exception): + def __init__(self, name_part): + super(ModuleNotFound, self).__init__() + self.name_part = name_part + + +class ImportWrapper(pr.Base): + """ + An ImportWrapper is the path of a `pr.Import` object. + """ + class GlobalNamespace(object): + def __init__(self): + self.line_offset = 0 + + GlobalNamespace = GlobalNamespace() + + def __init__(self, evaluator, import_stmt, is_like_search=False, kill_count=0, + nested_resolve=False, is_just_from=False): + """ + :param is_like_search: If the wrapper is used for autocompletion. + :param kill_count: Placement of the import, sometimes we only want to + resole a part of the import. + :param nested_resolve: Resolves nested imports fully. + :param is_just_from: Bool if the second part is missing. + """ + self._evaluator = evaluator + self.import_stmt = import_stmt + self.is_like_search = is_like_search + self.nested_resolve = nested_resolve + self.is_just_from = is_just_from + + self.is_partial_import = bool(max(0, kill_count)) + + # rest is import_path resolution + import_path = [] + if import_stmt.from_ns: + import_path += import_stmt.from_ns.names + if import_stmt.namespace: + if self.import_stmt.is_nested() and not nested_resolve: + import_path.append(import_stmt.namespace.names[0]) + else: + import_path += import_stmt.namespace.names + + for i in range(kill_count + int(is_like_search)): + if import_path: + import_path.pop() + + module = import_stmt.get_parent_until() + self._importer = get_importer(self._evaluator, tuple(import_path), module, + import_stmt.relative_count) + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self.import_stmt) + + @property + def import_path(self): + return self._importer.str_import_path() + + def get_defined_names(self, on_import_stmt=False): + names = [] + for scope in self.follow(): + if scope is ImportWrapper.GlobalNamespace: + if not self._is_relative_import(): + names += self._get_module_names() + + if self._importer.file_path is not None: + path = os.path.abspath(self._importer.file_path) + for i in range(self.import_stmt.relative_count - 1): + path = os.path.dirname(path) + names += self._get_module_names([path]) + + if self._is_relative_import(): + rel_path = os.path.join(self._importer.get_relative_path(), + '__init__.py') + if os.path.exists(rel_path): + m = _load_module(rel_path) + names += m.get_defined_names() + else: + if on_import_stmt and isinstance(scope, pr.Module) \ + and scope.path.endswith('__init__.py'): + pkg_path = os.path.dirname(scope.path) + paths = self._importer.namespace_packages(pkg_path, + self.import_path) + names += self._get_module_names([pkg_path] + paths) + if self.is_just_from: + # In the case of an import like `from x.` we don't need to + # add all the variables. + if ('os',) == self.import_path and not self._is_relative_import(): + # os.path is a hardcoded exception, because it's a + # ``sys.modules`` modification. + names.append(self._generate_name('path')) + continue + from jedi.evaluate import finder + for s, scope_names in finder.get_names_of_scope(self._evaluator, + scope, include_builtin=False): + for n in scope_names: + if self.import_stmt.from_ns is None \ + or self.is_partial_import: + # from_ns must be defined to access module + # values plus a partial import means that there + # is something after the import, which + # automatically implies that there must not be + # any non-module scope. + continue + names.append(n) + return names + + def _generate_name(self, name): + return helpers.FakeName(name, parent=self.import_stmt) + + def _get_module_names(self, search_path=None): + """ + Get the names of all modules in the search_path. This means file names + and not names defined in the files. + """ + + names = [] + # add builtin module names + if search_path is None: + names += [self._generate_name(name) for name in sys.builtin_module_names] + + if search_path is None: + search_path = self._importer.sys_path_with_modifications() + for module_loader, name, is_pkg in pkgutil.iter_modules(search_path): + names.append(self._generate_name(name)) + return names + + def _is_relative_import(self): + return bool(self.import_stmt.relative_count) + + def follow(self, is_goto=False): + if self._evaluator.recursion_detector.push_stmt(self.import_stmt): + # check recursion + return [] + + if self.import_path: + try: + module, rest = self._importer.follow_file_system() + except ModuleNotFound as e: + analysis.add(self._evaluator, 'import-error', e.name_part) + return [] + + if self.import_stmt.is_nested() and not self.nested_resolve: + scopes = [NestedImportModule(module, self.import_stmt)] + else: + scopes = [module] + + star_imports = remove_star_imports(self._evaluator, module) + if star_imports: + scopes = [StarImportModule(scopes[0], star_imports)] + + # follow the rest of the import (not FS -> classes, functions) + if len(rest) > 1 or rest and self.is_like_search: + scopes = [] + if ('os', 'path') == self.import_path[:2] \ + and not self._is_relative_import(): + # This is a huge exception, we follow a nested import + # ``os.path``, because it's a very important one in Python + # that is being achieved by messing with ``sys.modules`` in + # ``os``. + scopes = self._evaluator.follow_path(iter(rest), [module], module) + elif rest: + if is_goto: + scopes = list(chain.from_iterable( + self._evaluator.find_types(s, rest[0], is_goto=True) + for s in scopes)) + else: + scopes = list(chain.from_iterable( + self._evaluator.follow_path(iter(rest), [s], s) + for s in scopes)) + else: + scopes = [ImportWrapper.GlobalNamespace] + debug.dbg('after import: %s', scopes) + if not scopes: + analysis.add(self._evaluator, 'import-error', + self._importer.import_path[-1]) + self._evaluator.recursion_detector.pop_stmt() + return scopes + + +class NestedImportModule(pr.Module): + def __init__(self, module, nested_import): + self._module = module + self._nested_import = nested_import + + def _get_nested_import_name(self): + """ + Generates an Import statement, that can be used to fake nested imports. + """ + i = self._nested_import + # This is not an existing Import statement. Therefore, set position to + # 0 (0 is not a valid line number). + zero = (0, 0) + names = [unicode(name_part) for name_part in i.namespace.names[1:]] + name = helpers.FakeName(names, self._nested_import) + new = pr.Import(i._sub_module, zero, zero, name) + new.parent = self._module + debug.dbg('Generated a nested import: %s', new) + return helpers.FakeName(str(i.namespace.names[1]), new) + + def _get_defined_names(self): + """ + NesteImportModule don't seem to be actively used, right now. + However, they might in the future. If we do more sophisticated static + analysis checks. + """ + nested = self._get_nested_import_name() + return self._module.get_defined_names() + [nested] + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s of %s>" % (self.__class__.__name__, self._module, + self._nested_import) + + +class StarImportModule(pr.Module): + """ + Used if a module contains star imports. + """ + def __init__(self, module, star_import_modules): + self._module = module + self.star_import_modules = star_import_modules + + def scope_names_generator(self, position=None): + for module, names in self._module.scope_names_generator(position): + yield module, names + for s in self.star_import_modules: + yield s, s.get_defined_names() + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self._module) + + +def get_importer(evaluator, import_path, module, level=0): + """ + Checks the evaluator caches first, which resembles the ``sys.modules`` + cache and speeds up libraries like ``numpy``. + """ + if level != 0: + # Only absolute imports should be cached. Otherwise we have a mess. + # TODO Maybe calculate the absolute import and save it here? + return _Importer(evaluator, import_path, module, level) + try: + return evaluator.import_cache[import_path] + except KeyError: + importer = _Importer(evaluator, import_path, module, level) + evaluator.import_cache[import_path] = importer + return importer + + +class _Importer(object): + def __init__(self, evaluator, import_path, module, level=0): + """ + An implementation similar to ``__import__``. Use `follow_file_system` + to actually follow the imports. + + *level* specifies whether to use absolute or relative imports. 0 (the + default) means only perform absolute imports. Positive values for level + indicate the number of parent directories to search relative to the + directory of the module calling ``__import__()`` (see PEP 328 for the + details). + + :param import_path: List of namespaces (strings). + """ + debug.speed('import %s' % (import_path,)) + self._evaluator = evaluator + self.import_path = import_path + self.level = level + self.module = module + path = module.path + # TODO abspath + self.file_path = os.path.dirname(path) if path is not None else None + + def str_import_path(self): + """Returns the import path as pure strings instead of NameParts.""" + return tuple(str(name_part) for name_part in self.import_path) + + def get_relative_path(self): + path = self.file_path + for i in range(self.level - 1): + path = os.path.dirname(path) + return path + + @memoize_default() + def sys_path_with_modifications(self): + # If you edit e.g. gunicorn, there will be imports like this: + # `from gunicorn import something`. But gunicorn is not in the + # sys.path. Therefore look if gunicorn is a parent directory, #56. + in_path = [] + if self.import_path: + parts = self.file_path.split(os.path.sep) + for i, p in enumerate(parts): + if p == unicode(self.import_path[0]): + new = os.path.sep.join(parts[:i]) + in_path.append(new) + + return in_path + sys_path_with_modifications(self._evaluator, self.module) + + def follow(self, evaluator): + scope, rest = self.follow_file_system() + if rest: + # follow the rest of the import (not FS -> classes, functions) + return evaluator.follow_path(iter(rest), [scope], scope) + return [scope] + + @memoize_default(NO_DEFAULT) + def follow_file_system(self): + if self.file_path: + sys_path_mod = list(self.sys_path_with_modifications()) + if not self.module.has_explicit_absolute_import: + # If the module explicitly asks for absolute imports, + # there's probably a bogus local one. + sys_path_mod.insert(0, self.file_path) + + # First the sys path is searched normally and if that doesn't + # succeed, try to search the parent directories, because sometimes + # Jedi doesn't recognize sys.path modifications (like py.test + # stuff). + old_path, temp_path = self.file_path, os.path.dirname(self.file_path) + while old_path != temp_path: + sys_path_mod.append(temp_path) + old_path, temp_path = temp_path, os.path.dirname(temp_path) + else: + sys_path_mod = list(get_sys_path()) + + from jedi.evaluate.representation import ModuleWrapper + module, rest = self._follow_sys_path(sys_path_mod) + if isinstance(module, pr.Module): + return ModuleWrapper(self._evaluator, module), rest + return module, rest + + def namespace_packages(self, found_path, import_path): + """ + Returns a list of paths of possible ``pkgutil``/``pkg_resources`` + namespaces. If the package is no "namespace package", an empty list is + returned. + """ + def follow_path(directories, paths): + try: + directory = next(directories) + except StopIteration: + return paths + else: + deeper_paths = [] + for p in paths: + new = os.path.join(p, directory) + if os.path.isdir(new) and new != found_path: + deeper_paths.append(new) + return follow_path(directories, deeper_paths) + + with open(os.path.join(found_path, '__init__.py'), 'rb') as f: + content = common.source_to_unicode(f.read()) + # these are strings that need to be used for namespace packages, + # the first one is ``pkgutil``, the second ``pkg_resources``. + options = ('declare_namespace(__name__)', 'extend_path(__path__') + if options[0] in content or options[1] in content: + # It is a namespace, now try to find the rest of the modules. + return follow_path(iter(import_path), sys.path) + return [] + + def _follow_sys_path(self, sys_path): + """ + Find a module with a path (of the module, like usb.backend.libusb10). + """ + def follow_str(ns_path, string): + debug.dbg('follow_module %s %s', ns_path, string) + path = None + if ns_path: + path = ns_path + elif self.level > 0: # is a relative import + path = self.get_relative_path() + + if path is not None: + importing = find_module(string, [path]) + else: + debug.dbg('search_module %s %s', string, self.file_path) + # Override the sys.path. It works only good that way. + # Injecting the path directly into `find_module` did not work. + sys.path, temp = sys_path, sys.path + try: + importing = find_module(string) + finally: + sys.path = temp + + return importing + + current_namespace = (None, None, None) + # now execute those paths + rest = [] + for i, s in enumerate(self.import_path): + try: + current_namespace = follow_str(current_namespace[1], unicode(s)) + except ImportError: + _continue = False + if self.level >= 1 and len(self.import_path) == 1: + # follow `from . import some_variable` + rel_path = self.get_relative_path() + with common.ignored(ImportError): + current_namespace = follow_str(rel_path, '__init__') + elif current_namespace[2]: # is a package + path = self.str_import_path()[:i] + for n in self.namespace_packages(current_namespace[1], path): + try: + current_namespace = follow_str(n, unicode(s)) + if current_namespace[1]: + _continue = True + break + except ImportError: + pass + + if not _continue: + if current_namespace[1]: + rest = self.str_import_path()[i:] + break + else: + raise ModuleNotFound(s) + + path = current_namespace[1] + is_package_directory = current_namespace[2] + + f = None + if is_package_directory or current_namespace[0]: + # is a directory module + if is_package_directory: + path = os.path.join(path, '__init__.py') + with open(path, 'rb') as f: + source = f.read() + else: + source = current_namespace[0].read() + current_namespace[0].close() + return _load_module(path, source, sys_path=sys_path), rest + else: + return _load_module(name=path, sys_path=sys_path), rest + + +def follow_imports(evaluator, scopes): + """ + Here we strip the imports - they don't get resolved necessarily. + Really used anymore? Merge with remove_star_imports? + """ + result = [] + for s in scopes: + if isinstance(s, pr.Import): + for r in ImportWrapper(evaluator, s).follow(): + result.append(r) + else: + result.append(s) + return result + + +@cache.cache_star_import +def remove_star_imports(evaluator, scope, ignored_modules=()): + """ + Check a module for star imports:: + + from module import * + + and follow these modules. + """ + if isinstance(scope, StarImportModule): + return scope.star_import_modules + modules = follow_imports(evaluator, (i for i in scope.get_imports() if i.star)) + new = [] + for m in modules: + if m not in ignored_modules: + new += remove_star_imports(evaluator, m, modules) + modules += new + + # Filter duplicate modules. + return set(modules) + + +def _load_module(path=None, source=None, name=None, sys_path=None): + def load(source): + dotted_path = path and compiled.dotted_from_fs_path(path, sys_path) + if path is not None and path.endswith('.py') \ + and not dotted_path in settings.auto_import_modules: + if source is None: + with open(path, 'rb') as f: + source = f.read() + else: + return compiled.load_module(path, name) + p = path or name + p = fast.FastParser(common.source_to_unicode(source), p) + cache.save_parser(path, name, p) + return p.module + + cached = cache.load_parser(path, name) + return load(source) if cached is None else cached.module + + +def get_modules_containing_name(mods, name): + """ + Search a name in the directories of modules. + """ + def check_python_file(path): + try: + return cache.parser_cache[path].parser.module + except KeyError: + try: + return check_fs(path) + except IOError: + return None + + def check_fs(path): + with open(path, 'rb') as f: + source = source_to_unicode(f.read()) + if name in source: + return _load_module(path, source) + + # skip non python modules + mods = set(m for m in mods if not isinstance(m, compiled.CompiledObject)) + mod_paths = set() + for m in mods: + mod_paths.add(m.path) + yield m + + if settings.dynamic_params_for_other_modules: + paths = set(settings.additional_dynamic_modules) + for p in mod_paths: + if p is not None: + d = os.path.dirname(p) + for entry in os.listdir(d): + if entry not in mod_paths: + if entry.endswith('.py'): + paths.add(d + os.path.sep + entry) + + for p in sorted(paths): + # make testing easier, sort it - same results on every interpreter + c = check_python_file(p) + if c is not None and c not in mods: + yield c diff --git a/python/pw_multiScriptEditor/jedi/evaluate/iterable.py b/python/pw_multiScriptEditor/jedi/evaluate/iterable.py new file mode 100644 index 0000000..b4d282d --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/iterable.py @@ -0,0 +1,518 @@ +""" +Contains all classes and functions to deal with lists, dicts, generators and +iterators in general. + +Array modifications +******************* + +If the content of an array (``set``/``list``) is requested somewhere, the +current module will be checked for appearances of ``arr.append``, +``arr.insert``, etc. If the ``arr`` name points to an actual array, the +content will be added + +This can be really cpu intensive, as you can imagine. Because |jedi| has to +follow **every** ``append`` and check wheter it's the right array. However this +works pretty good, because in *slow* cases, the recursion detector and other +settings will stop this process. + +It is important to note that: + +1. Array modfications work only in the current module. +2. Jedi only checks Array additions; ``list.pop``, etc are ignored. +""" +from itertools import chain + +from jedi import common +from jedi import debug +from jedi import settings +from jedi._compatibility import use_metaclass, is_py3, unicode +from jedi.parser import representation as pr +from jedi.evaluate import compiled +from jedi.evaluate import helpers +from jedi.evaluate import precedence +from jedi.evaluate.cache import CachedMetaClass, memoize_default, NO_DEFAULT +from jedi.cache import underscore_memoization +from jedi.evaluate import analysis + + +class Generator(use_metaclass(CachedMetaClass, pr.Base)): + """Handling of `yield` functions.""" + def __init__(self, evaluator, func, var_args): + super(Generator, self).__init__() + self._evaluator = evaluator + self.func = func + self.var_args = var_args + + @underscore_memoization + def _get_defined_names(self): + """ + Returns a list of names that define a generator, which can return the + content of a generator. + """ + executes_generator = '__next__', 'send', 'next' + for name in compiled.generator_obj.get_defined_names(): + if name.name in executes_generator: + parent = GeneratorMethod(self, name.parent) + yield helpers.FakeName(name.name, parent) + else: + yield name + + def scope_names_generator(self, position=None): + yield self, self._get_defined_names() + + def iter_content(self): + """ returns the content of __iter__ """ + return self._evaluator.execute(self.func, self.var_args, True) + + def get_index_types(self, index_array): + #debug.warning('Tried to get array access on a generator: %s', self) + analysis.add(self._evaluator, 'type-error-generator', index_array) + return [] + + def get_exact_index_types(self, index): + """ + Exact lookups are used for tuple lookups, which are perfectly fine if + used with generators. + """ + return [self.iter_content()[index]] + + def __getattr__(self, name): + if name not in ['start_pos', 'end_pos', 'parent', 'get_imports', + 'asserts', 'doc', 'docstr', 'get_parent_until', + 'get_code', 'subscopes']: + raise AttributeError("Accessing %s of %s is not allowed." + % (self, name)) + return getattr(self.func, name) + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self.func) + + +class GeneratorMethod(object): + """``__next__`` and ``send`` methods.""" + def __init__(self, generator, builtin_func): + self._builtin_func = builtin_func + self._generator = generator + + def execute(self): + return self._generator.iter_content() + + def __getattr__(self, name): + return getattr(self._builtin_func, name) + + +class GeneratorComprehension(Generator): + def __init__(self, evaluator, comprehension): + super(GeneratorComprehension, self).__init__(evaluator, comprehension, None) + self.comprehension = comprehension + + def iter_content(self): + return self._evaluator.eval_statement_element(self.comprehension) + + +class Array(use_metaclass(CachedMetaClass, pr.Base)): + """ + Used as a mirror to pr.Array, if needed. It defines some getter + methods which are important in this module. + """ + def __init__(self, evaluator, array): + self._evaluator = evaluator + self._array = array + + @memoize_default(NO_DEFAULT) + def get_index_types(self, index_array=()): + """ + Get the types of a specific index or all, if not given. + + :param indexes: The index input types. + """ + indexes = create_indexes_or_slices(self._evaluator, index_array) + if [index for index in indexes if isinstance(index, Slice)]: + return [self] + + lookup_done = False + types = [] + for index in indexes: + if isinstance(index, compiled.CompiledObject) \ + and isinstance(index.obj, (int, str, unicode)): + with common.ignored(KeyError, IndexError, TypeError): + types += self.get_exact_index_types(index.obj) + lookup_done = True + + return types if lookup_done else self.values() + + @memoize_default(NO_DEFAULT) + def values(self): + result = list(_follow_values(self._evaluator, self._array.values)) + result += check_array_additions(self._evaluator, self) + return result + + def get_exact_index_types(self, mixed_index): + """ Here the index is an int/str. Raises IndexError/KeyError """ + index = mixed_index + if self.type == pr.Array.DICT: + index = None + for i, key_statement in enumerate(self._array.keys): + # Because we only want the key to be a string. + key_expression_list = key_statement.expression_list() + if len(key_expression_list) != 1: # cannot deal with complex strings + continue + key = key_expression_list[0] + if isinstance(key, pr.Literal): + key = key.value + elif isinstance(key, pr.Name): + key = str(key) + else: + continue + + if mixed_index == key: + index = i + break + if index is None: + raise KeyError('No key found in dictionary') + + # Can raise an IndexError + values = [self._array.values[index]] + return _follow_values(self._evaluator, values) + + def scope_names_generator(self, position=None): + """ + This method generates all `ArrayMethod` for one pr.Array. + It returns e.g. for a list: append, pop, ... + """ + # `array.type` is a string with the type, e.g. 'list'. + scope = self._evaluator.find_types(compiled.builtin, self._array.type)[0] + scope = self._evaluator.execute(scope)[0] # builtins only have one class + for _, names in scope.scope_names_generator(): + yield self, [ArrayMethod(n) for n in names] + + @common.safe_property + def parent(self): + return compiled.builtin + + def get_parent_until(self): + return compiled.builtin + + def __getattr__(self, name): + if name not in ['type', 'start_pos', 'get_only_subelement', 'parent', + 'get_parent_until', 'items']: + raise AttributeError('Strange access on %s: %s.' % (self, name)) + return getattr(self._array, name) + + def __iter__(self): + return iter(self._array) + + def __len__(self): + return len(self._array) + + def __repr__(self): + return "" % (type(self).__name__, self._array) + + +class ArrayMethod(object): + """ + A name, e.g. `list.append`, it is used to access the original array + methods. + """ + def __init__(self, name): + super(ArrayMethod, self).__init__() + self.name = name + + def __getattr__(self, name): + # Set access privileges: + if name not in ['parent', 'names', 'start_pos', 'end_pos', 'get_code']: + raise AttributeError('Strange accesson %s: %s.' % (self, name)) + return getattr(self.name, name) + + def get_parent_until(self): + return compiled.builtin + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self.name) + + +class MergedArray(Array): + def __init__(self, evaluator, arrays): + super(MergedArray, self).__init__(evaluator, arrays[-1]._array) + self._arrays = arrays + + def get_index_types(self, mixed_index): + return list(chain(*(a.values() for a in self._arrays))) + + def get_exact_index_types(self, mixed_index): + raise IndexError + + def __iter__(self): + for array in self._arrays: + for a in array: + yield a + + def __len__(self): + return sum(len(a) for a in self._arrays) + + +def get_iterator_types(inputs): + """Returns the types of any iterator (arrays, yields, __iter__, etc).""" + iterators = [] + # Take the first statement (for has always only + # one, remember `in`). And follow it. + for it in inputs: + if isinstance(it, (Generator, Array, ArrayInstance)): + iterators.append(it) + else: + if not hasattr(it, 'execute_subscope_by_name'): + debug.warning('iterator/for loop input wrong: %s', it) + continue + try: + iterators += it.execute_subscope_by_name('__iter__') + except KeyError: + debug.warning('iterators: No __iter__ method found.') + + result = [] + from jedi.evaluate.representation import Instance + for it in iterators: + if isinstance(it, Array): + # Array is a little bit special, since this is an internal + # array, but there's also the list builtin, which is + # another thing. + result += it.values() + elif isinstance(it, Instance): + # __iter__ returned an instance. + name = '__next__' if is_py3 else 'next' + try: + result += it.execute_subscope_by_name(name) + except KeyError: + debug.warning('Instance has no __next__ function in %s.', it) + else: + # Is a generator. + result += it.iter_content() + return result + + +def check_array_additions(evaluator, array): + """ Just a mapper function for the internal _check_array_additions """ + if not pr.Array.is_type(array._array, pr.Array.LIST, pr.Array.SET): + # TODO also check for dict updates + return [] + + is_list = array._array.type == 'list' + current_module = array._array.get_parent_until() + res = _check_array_additions(evaluator, array, current_module, is_list) + return res + + +@memoize_default([], evaluator_is_first_arg=True) +def _check_array_additions(evaluator, compare_array, module, is_list): + """ + Checks if a `pr.Array` has "add" statements: + >>> a = [""] + >>> a.append(1) + """ + if not settings.dynamic_array_additions or isinstance(module, compiled.CompiledObject): + return [] + + def check_calls(calls, add_name): + """ + Calls are processed here. The part before the call is searched and + compared with the original Array. + """ + result = [] + for c in calls: + call_path = list(c.generate_call_path()) + call_path_simple = [unicode(n) if isinstance(n, pr.NamePart) else n + for n in call_path] + separate_index = call_path_simple.index(add_name) + if add_name == call_path_simple[-1] or separate_index == 0: + # this means that there is no execution -> [].append + # or the keyword is at the start -> append() + continue + backtrack_path = iter(call_path[:separate_index]) + + position = c.start_pos + scope = c.get_parent_until(pr.IsScope) + + found = evaluator.eval_call_path(backtrack_path, scope, position) + if not compare_array in found: + continue + + params = call_path[separate_index + 1] + if not params.values: + continue # no params: just ignore it + if add_name in ['append', 'add']: + for param in params: + result += evaluator.eval_statement(param) + elif add_name in ['insert']: + try: + second_param = params[1] + except IndexError: + continue + else: + result += evaluator.eval_statement(second_param) + elif add_name in ['extend', 'update']: + for param in params: + iterators = evaluator.eval_statement(param) + result += get_iterator_types(iterators) + return result + + from jedi.evaluate import representation as er + + def get_execution_parent(element, *stop_classes): + """ Used to get an Instance/FunctionExecution parent """ + if isinstance(element, Array): + stmt = element._array.parent + else: + # is an Instance with an ArrayInstance inside + stmt = element.var_args[0].var_args.parent + if isinstance(stmt, er.InstanceElement): + stop_classes = list(stop_classes) + [er.Function] + return stmt.get_parent_until(stop_classes) + + temp_param_add = settings.dynamic_params_for_other_modules + settings.dynamic_params_for_other_modules = False + + search_names = ['append', 'extend', 'insert'] if is_list else \ + ['add', 'update'] + comp_arr_parent = get_execution_parent(compare_array, er.FunctionExecution) + + possible_stmts = [] + res = [] + for n in search_names: + try: + possible_stmts += module.used_names[n] + except KeyError: + continue + for stmt in possible_stmts: + # Check if the original scope is an execution. If it is, one + # can search for the same statement, that is in the module + # dict. Executions are somewhat special in jedi, since they + # literally copy the contents of a function. + if isinstance(comp_arr_parent, er.FunctionExecution): + stmt = comp_arr_parent. \ + get_statement_for_position(stmt.start_pos) + if stmt is None: + continue + # InstanceElements are special, because they don't get copied, + # but have this wrapper around them. + if isinstance(comp_arr_parent, er.InstanceElement): + stmt = er.InstanceElement(comp_arr_parent.instance, stmt) + + if evaluator.recursion_detector.push_stmt(stmt): + # check recursion + continue + + res += check_calls(helpers.scan_statement_for_calls(stmt, n), n) + evaluator.recursion_detector.pop_stmt() + # reset settings + settings.dynamic_params_for_other_modules = temp_param_add + return res + + +def check_array_instances(evaluator, instance): + """Used for set() and list() instances.""" + if not settings.dynamic_arrays_instances: + return instance.var_args + ai = ArrayInstance(evaluator, instance) + return [ai] + + +class ArrayInstance(pr.Base): + """ + Used for the usage of set() and list(). + This is definitely a hack, but a good one :-) + It makes it possible to use set/list conversions. + """ + def __init__(self, evaluator, instance): + self._evaluator = evaluator + self.instance = instance + self.var_args = instance.var_args + + def iter_content(self): + """ + The index is here just ignored, because of all the appends, etc. + lists/sets are too complicated too handle that. + """ + items = [] + from jedi.evaluate.representation import Instance + for stmt in self.var_args: + for typ in self._evaluator.eval_statement(stmt): + if isinstance(typ, Instance) and len(typ.var_args): + array = typ.var_args[0] + if isinstance(array, ArrayInstance): + # Certain combinations can cause recursions, see tests. + if not self._evaluator.recursion_detector.push_stmt(self.var_args): + items += array.iter_content() + self._evaluator.recursion_detector.pop_stmt() + items += get_iterator_types([typ]) + + # TODO check if exclusion of tuple is a problem here. + if isinstance(self.var_args, tuple) or self.var_args.parent is None: + return [] # generated var_args should not be checked for arrays + + module = self.var_args.get_parent_until() + is_list = str(self.instance.name) == 'list' + items += _check_array_additions(self._evaluator, self.instance, module, is_list) + return items + + +def _follow_values(evaluator, values): + """ helper function for the index getters """ + return list(chain.from_iterable(evaluator.eval_statement(v) for v in values)) + + +class Slice(object): + def __init__(self, evaluator, start, stop, step): + self._evaluator = evaluator + # all of them are either a Precedence or None. + self._start = start + self._stop = stop + self._step = step + + @property + def obj(self): + """ + Imitate CompiledObject.obj behavior and return a ``builtin.slice()`` + object. + """ + def get(element): + if element is None: + return None + + result = self._evaluator.process_precedence_element(element) + if len(result) != 1: + # We want slices to be clear defined with just one type. + # Otherwise we will return an empty slice object. + raise IndexError + try: + return result[0].obj + except AttributeError: + return None + + try: + return slice(get(self._start), get(self._stop), get(self._step)) + except IndexError: + return slice(None, None, None) + + +def create_indexes_or_slices(evaluator, index_array): + if not index_array: + return () + + # Just take the first part of the "array", because this is Python stdlib + # behavior. Numpy et al. perform differently, but Jedi won't understand + # that anyway. + expression_list = index_array[0].expression_list() + prec = precedence.create_precedence(expression_list) + + # check for slices + if isinstance(prec, precedence.Precedence) and prec.operator == ':': + start = prec.left + if isinstance(start, precedence.Precedence) and start.operator == ':': + stop = start.right + start = start.left + step = prec.right + else: + stop = prec.right + step = None + return (Slice(evaluator, start, stop, step),) + else: + return tuple(evaluator.process_precedence_element(prec)) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/param.py b/python/pw_multiScriptEditor/jedi/evaluate/param.py new file mode 100644 index 0000000..b5d4f18 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/param.py @@ -0,0 +1,375 @@ +import copy + +from jedi._compatibility import unicode, zip_longest +from jedi.parser import representation as pr +from jedi.evaluate import iterable +from jedi import common +from jedi.evaluate import helpers +from jedi.evaluate import analysis +from jedi.evaluate.compiled import CompiledObject + + +class ExecutedParam(pr.Param): + def __init__(self): + """Don't use this method, it's just here to overwrite the old one.""" + pass + + @classmethod + def from_param(cls, param, parent, var_args): + instance = cls() + before = () + for cls in param.__class__.__mro__: + with common.ignored(AttributeError): + if before == cls.__slots__: + continue + before = cls.__slots__ + for name in before: + setattr(instance, name, getattr(param, name)) + + instance.original_param = param + instance.is_generated = True + instance.parent = parent + instance.var_args = var_args + return instance + + +def _get_calling_var_args(evaluator, var_args): + old_var_args = None + while var_args != old_var_args: + old_var_args = var_args + for argument in reversed(var_args): + if not isinstance(argument, pr.Statement): + continue + exp_list = argument.expression_list() + if len(exp_list) != 2 or exp_list[0] not in ('*', '**'): + continue + + names, _ = evaluator.goto(argument, [exp_list[1].get_code()]) + if len(names) != 1: + break + param = names[0].parent + if not isinstance(param, ExecutedParam): + if isinstance(param, pr.Param): + # There is no calling var_args in this case - there's just + # a param without any input. + return None + break + # We never want var_args to be a tuple. This should be enough for + # now, we can change it later, if we need to. + if isinstance(param.var_args, pr.Array): + var_args = param.var_args + return var_args + + +def get_params(evaluator, func, var_args): + result = [] + param_dict = {} + for param in func.params: + param_dict[str(param.get_name())] = param + # There may be calls, which don't fit all the params, this just ignores it. + unpacked_va = _unpack_var_args(evaluator, var_args, func) + var_arg_iterator = common.PushBackIterator(iter(unpacked_va)) + + non_matching_keys = [] + keys_used = set() + keys_only = False + va_values = None + had_multiple_value_error = False + for param in func.params: + # The value and key can both be null. There, the defaults apply. + # args / kwargs will just be empty arrays / dicts, respectively. + # Wrong value count is just ignored. If you try to test cases that are + # not allowed in Python, Jedi will maybe not show any completions. + key, va_values = next(var_arg_iterator, (None, [])) + while key: + keys_only = True + k = unicode(key) + try: + key_param = param_dict[unicode(key)] + except KeyError: + non_matching_keys.append((key, va_values)) + else: + result.append(_gen_param_name_copy(func, var_args, key_param, + values=va_values)) + + if k in keys_used: + had_multiple_value_error = True + m = ("TypeError: %s() got multiple values for keyword argument '%s'." + % (func.name, k)) + calling_va = _get_calling_var_args(evaluator, var_args) + if calling_va is not None: + analysis.add(evaluator, 'type-error-multiple-values', + calling_va, message=m) + else: + keys_used.add(k) + key, va_values = next(var_arg_iterator, (None, [])) + + keys = [] + values = [] + array_type = None + has_default_value = False + if param.stars == 1: + # *args param + array_type = pr.Array.TUPLE + lst_values = [va_values] + for key, va_values in var_arg_iterator: + # Iterate until a key argument is found. + if key: + var_arg_iterator.push_back((key, va_values)) + break + lst_values.append(va_values) + if lst_values[0]: + values = [helpers.stmts_to_stmt(v) for v in lst_values] + elif param.stars == 2: + # **kwargs param + array_type = pr.Array.DICT + if non_matching_keys: + keys, values = zip(*non_matching_keys) + values = [helpers.stmts_to_stmt(list(v)) for v in values] + non_matching_keys = [] + else: + # normal param + if va_values: + values = va_values + else: + if param.assignment_details: + # No value: Return the default values. + has_default_value = True + result.append(param.get_name()) + # TODO is this allowed? it changes it long time. + param.is_generated = True + else: + # No value: Return an empty container + values = [] + if not keys_only and isinstance(var_args, pr.Array): + calling_va = _get_calling_var_args(evaluator, var_args) + if calling_va is not None: + m = _error_argument_count(func, len(unpacked_va)) + analysis.add(evaluator, 'type-error-too-few-arguments', + calling_va, message=m) + + # Now add to result if it's not one of the previously covered cases. + if not has_default_value and (not keys_only or param.stars == 2): + keys_used.add(unicode(param.get_name())) + result.append(_gen_param_name_copy(func, var_args, param, + keys=keys, values=values, + array_type=array_type)) + + if keys_only: + # All arguments should be handed over to the next function. It's not + # about the values inside, it's about the names. Jedi needs to now that + # there's nothing to find for certain names. + for k in set(param_dict) - keys_used: + param = param_dict[k] + result.append(_gen_param_name_copy(func, var_args, param)) + + if not (non_matching_keys or had_multiple_value_error + or param.stars or param.assignment_details): + # add a warning only if there's not another one. + calling_va = _get_calling_var_args(evaluator, var_args) + if calling_va is not None: + m = _error_argument_count(func, len(unpacked_va)) + analysis.add(evaluator, 'type-error-too-few-arguments', + calling_va, message=m) + + for key, va_values in non_matching_keys: + m = "TypeError: %s() got an unexpected keyword argument '%s'." \ + % (func.name, key) + for value in va_values: + analysis.add(evaluator, 'type-error-keyword-argument', value, message=m) + + remaining_params = list(var_arg_iterator) + if remaining_params: + m = _error_argument_count(func, len(unpacked_va)) + for p in remaining_params[0][1]: + analysis.add(evaluator, 'type-error-too-many-arguments', + p, message=m) + return result + + +def _unpack_var_args(evaluator, var_args, func): + """ + Yields a key/value pair, the key is None, if its not a named arg. + """ + argument_list = [] + from jedi.evaluate.representation import InstanceElement + if isinstance(func, InstanceElement): + # Include self at this place. + argument_list.append((None, [helpers.FakeStatement([func.instance])])) + + # `var_args` is typically an Array, and not a list. + for stmt in _reorder_var_args(var_args): + if not isinstance(stmt, pr.Statement): + if stmt is None: + argument_list.append((None, [])) + # TODO generate warning? + continue + old = stmt + # generate a statement if it's not already one. + stmt = helpers.FakeStatement([old]) + + expression_list = stmt.expression_list() + if not len(expression_list): + continue + # *args + if expression_list[0] == '*': + arrays = evaluator.eval_expression_list(expression_list[1:]) + iterators = [_iterate_star_args(evaluator, a, expression_list[1:], func) + for a in arrays] + for values in list(zip_longest(*iterators)): + argument_list.append((None, [v for v in values if v is not None])) + # **kwargs + elif expression_list[0] == '**': + dct = {} + for array in evaluator.eval_expression_list(expression_list[1:]): + # Merge multiple kwargs dictionaries, if used with dynamic + # parameters. + s = _star_star_dict(evaluator, array, expression_list[1:], func) + for name, (key, value) in s.items(): + try: + dct[name][1].add(value) + except KeyError: + dct[name] = key, set([value]) + + for key, values in dct.values(): + # merge **kwargs/*args also for dynamic parameters + for i, p in enumerate(func.params): + if str(p.get_name()) == str(key) and not p.stars: + try: + k, vs = argument_list[i] + except IndexError: + pass + else: + if k is None: # k would imply a named argument + # Don't merge if they orginate at the same + # place. -> type-error-multiple-values + if [v.parent for v in values] != [v.parent for v in vs]: + vs.extend(values) + break + else: + # default is to merge + argument_list.append((key, values)) + # Normal arguments (including key arguments). + else: + if stmt.assignment_details: + key_arr, op = stmt.assignment_details[0] + # Filter error tokens + key_arr = [x for x in key_arr if isinstance(x, pr.Call)] + # named parameter + if key_arr and isinstance(key_arr[0], pr.Call): + argument_list.append((key_arr[0].name, [stmt])) + else: + argument_list.append((None, [stmt])) + return argument_list + + +def _reorder_var_args(var_args): + """ + Reordering var_args is necessary, because star args sometimes appear after + named argument, but in the actual order it's prepended. + """ + named_index = None + new_args = [] + for i, stmt in enumerate(var_args): + if isinstance(stmt, pr.Statement): + if named_index is None and stmt.assignment_details: + named_index = i + + if named_index is not None: + expression_list = stmt.expression_list() + if expression_list and expression_list[0] == '*': + new_args.insert(named_index, stmt) + named_index += 1 + continue + + new_args.append(stmt) + return new_args + + +def _iterate_star_args(evaluator, array, expression_list, func): + from jedi.evaluate.representation import Instance + if isinstance(array, iterable.Array): + for field_stmt in array: # yield from plz! + yield field_stmt + elif isinstance(array, iterable.Generator): + for field_stmt in array.iter_content(): + yield helpers.FakeStatement([field_stmt]) + elif isinstance(array, Instance) and array.name == 'tuple': + pass + else: + if expression_list: + m = "TypeError: %s() argument after * must be a sequence, not %s" \ + % (func.name, array) + analysis.add(evaluator, 'type-error-star', + expression_list[0], message=m) + + +def _star_star_dict(evaluator, array, expression_list, func): + dct = {} + from jedi.evaluate.representation import Instance + if isinstance(array, Instance) and array.name == 'dict': + # For now ignore this case. In the future add proper iterators and just + # make one call without crazy isinstance checks. + return {} + + if isinstance(array, iterable.Array) and array.type == pr.Array.DICT: + for key_stmt, value_stmt in array.items(): + # first index, is the key if syntactically correct + call = key_stmt.expression_list()[0] + if isinstance(call, pr.Name): + key = call + elif isinstance(call, pr.Call): + key = call.name + else: + continue # We ignore complicated statements here, for now. + + # If the string is a duplicate, we don't care it's illegal Python + # anyway. + dct[str(key)] = key, value_stmt + else: + if expression_list: + m = "TypeError: %s argument after ** must be a mapping, not %s" \ + % (func.name, array) + analysis.add(evaluator, 'type-error-star-star', + expression_list[0], message=m) + return dct + + +def _gen_param_name_copy(func, var_args, param, keys=(), values=(), array_type=None): + """ + Create a param with the original scope (of varargs) as parent. + """ + if isinstance(var_args, pr.Array): + parent = var_args.parent + start_pos = var_args.start_pos + else: + parent = func + start_pos = 0, 0 + + new_param = ExecutedParam.from_param(param, parent, var_args) + + # create an Array (-> needed for *args/**kwargs tuples/dicts) + arr = pr.Array(helpers.FakeSubModule, start_pos, array_type, parent) + arr.values = list(values) # Arrays only work with list. + key_stmts = [] + for key in keys: + key_stmts.append(helpers.FakeStatement([key], start_pos)) + arr.keys = key_stmts + arr.type = array_type + + new_param.set_expression_list([arr]) + + name = copy.copy(param.get_name()) + name.parent = new_param + return name + + +def _error_argument_count(func, actual_count): + default_arguments = sum(1 for p in func.params if p.assignment_details or p.stars) + + if default_arguments == 0: + before = 'exactly ' + else: + before = 'from %s to ' % (len(func.params) - default_arguments) + return ('TypeError: %s() takes %s%s arguments (%s given).' + % (func.name, before, len(func.params), actual_count)) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/precedence.py b/python/pw_multiScriptEditor/jedi/evaluate/precedence.py new file mode 100644 index 0000000..39e4afc --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/precedence.py @@ -0,0 +1,297 @@ +""" +Handles operator precedence. +""" + +from jedi._compatibility import unicode +from jedi.parser import representation as pr +from jedi import debug +from jedi.common import PushBackIterator +from jedi.evaluate.compiled import CompiledObject, create, builtin +from jedi.evaluate import analysis + + +class PythonGrammar(object): + """ + Some kind of mirror of http://docs.python.org/3/reference/grammar.html. + """ + + class MultiPart(str): + def __new__(cls, first, second): + self = str.__new__(cls, first) + self.second = second + return self + + def __str__(self): + return str.__str__(self) + ' ' + self.second + + FACTOR = '+', '-', '~' + POWER = '**', + TERM = '*', '/', '%', '//' + ARITH_EXPR = '+', '-' + + SHIFT_EXPR = '<<', '>>' + AND_EXPR = '&', + XOR_EXPR = '^', + EXPR = '|', + + COMPARISON = ('<', '>', '==', '>=', '<=', '!=', 'in', + MultiPart('not', 'in'), MultiPart('is', 'not'), 'is') + + NOT_TEST = 'not', + AND_TEST = 'and', + OR_TEST = 'or', + + #TEST = or_test ['if' or_test 'else' test] | lambdef + + TERNARY = 'if', + SLICE = ':', + + ORDER = (POWER, TERM, ARITH_EXPR, SHIFT_EXPR, AND_EXPR, XOR_EXPR, + EXPR, COMPARISON, AND_TEST, OR_TEST, TERNARY, SLICE) + + FACTOR_PRIORITY = 0 # highest priority + LOWEST_PRIORITY = len(ORDER) + NOT_TEST_PRIORITY = LOWEST_PRIORITY - 4 # priority only lower for `and`/`or` + SLICE_PRIORITY = LOWEST_PRIORITY - 1 # priority only lower for `and`/`or` + + +class Precedence(object): + def __init__(self, left, operator, right): + self.left = left + self.operator = operator + self.right = right + + def parse_tree(self, strip_literals=False): + def process(which): + try: + which = which.parse_tree(strip_literals) + except AttributeError: + pass + if strip_literals and isinstance(which, pr.Literal): + which = which.value + return which + + return (process(self.left), self.operator.string, process(self.right)) + + def __repr__(self): + return '(%s %s %s)' % (self.left, self.operator, self.right) + + +class TernaryPrecedence(Precedence): + def __init__(self, left, operator, right, check): + super(TernaryPrecedence, self).__init__(left, operator, right) + self.check = check + + +def create_precedence(expression_list): + iterator = PushBackIterator(iter(expression_list)) + return _check_operator(iterator) + + +def _syntax_error(element, msg='SyntaxError in precedence'): + debug.warning('%s: %s, %s' % (msg, element, element.start_pos)) + + +def _get_number(iterator, priority=PythonGrammar.LOWEST_PRIORITY): + el = next(iterator) + if isinstance(el, pr.Operator): + if el in PythonGrammar.FACTOR: + right = _get_number(iterator, PythonGrammar.FACTOR_PRIORITY) + elif el in PythonGrammar.NOT_TEST \ + and priority >= PythonGrammar.NOT_TEST_PRIORITY: + right = _get_number(iterator, PythonGrammar.NOT_TEST_PRIORITY) + elif el in PythonGrammar.SLICE \ + and priority >= PythonGrammar.SLICE_PRIORITY: + iterator.push_back(el) + return None + else: + _syntax_error(el) + return _get_number(iterator, priority) + return Precedence(None, el, right) + elif isinstance(el, pr.tokenize.Token): + return _get_number(iterator, priority) + else: + return el + + +class MergedOperator(pr.Operator): + """ + A way to merge the two operators `is not` and `not int`, which are two + words instead of one. + Maybe there's a better way (directly in the tokenizer/parser? but for now + this is fine.) + """ + def __init__(self, first, second): + string = first.string + ' ' + second.string + super(MergedOperator, self).__init__(first._sub_module, string, + first.parent, first.start_pos) + self.first = first + self.second = second + + +def _check_operator(iterator, priority=PythonGrammar.LOWEST_PRIORITY): + try: + left = _get_number(iterator, priority) + except StopIteration: + return None + + for el in iterator: + if not isinstance(el, pr.Operator): + _syntax_error(el) + continue + + operator = None + for check_prio, check in enumerate(PythonGrammar.ORDER): + if check_prio >= priority: + # respect priorities. + iterator.push_back(el) + return left + + try: + match_index = check.index(el) + except ValueError: + continue + + match = check[match_index] + if isinstance(match, PythonGrammar.MultiPart): + next_tok = next(iterator) + if next_tok == match.second: + el = MergedOperator(el, next_tok) + else: + iterator.push_back(next_tok) + if el == 'not': + continue + + operator = el + break + + if operator is None: + _syntax_error(el) + continue + + if operator in PythonGrammar.POWER: + check_prio += 1 # to the power of is right-associative + elif operator in PythonGrammar.TERNARY: + try: + middle = [] + for each in iterator: + if each == 'else': + break + middle.append(each) + middle = create_precedence(middle) + except StopIteration: + _syntax_error(operator, 'SyntaxError ternary incomplete') + right = _check_operator(iterator, check_prio) + if right is None and not operator in PythonGrammar.SLICE: + _syntax_error(iterator.current, 'SyntaxError operand missing') + else: + if operator in PythonGrammar.TERNARY: + left = TernaryPrecedence(left, operator, right, middle) + else: + left = Precedence(left, operator, right) + return left + + +def _literals_to_types(evaluator, result): + # Changes literals ('a', 1, 1.0, etc) to its type instances (str(), + # int(), float(), etc). + for i, r in enumerate(result): + if is_literal(r): + # Literals are only valid as long as the operations are + # correct. Otherwise add a value-free instance. + cls = builtin.get_by_name(r.name) + result[i] = evaluator.execute(cls)[0] + return list(set(result)) + + +def calculate(evaluator, left_result, operator, right_result): + result = [] + if left_result is None and right_result: + # cases like `-1` or `1 + ~1` + for right in right_result: + result.append(_factor_calculate(evaluator, operator, right)) + return result + else: + if not left_result or not right_result: + # illegal slices e.g. cause left/right_result to be None + result = (left_result or []) + (right_result or []) + result = _literals_to_types(evaluator, result) + else: + # I don't think there's a reasonable chance that a string + # operation is still correct, once we pass something like six + # objects. + if len(left_result) * len(right_result) > 6: + result = _literals_to_types(evaluator, left_result + right_result) + else: + for left in left_result: + for right in right_result: + result += _element_calculate(evaluator, left, operator, right) + return result + + +def _factor_calculate(evaluator, operator, right): + if _is_number(right): + if operator == '-': + return create(evaluator, -right.obj) + return right + + +def _is_number(obj): + return isinstance(obj, CompiledObject) \ + and isinstance(obj.obj, (int, float)) + + +def _is_string(obj): + return isinstance(obj, CompiledObject) \ + and isinstance(obj.obj, (str, unicode)) + + +def is_literal(obj): + return _is_number(obj) or _is_string(obj) + + +def _is_tuple(obj): + from jedi.evaluate import iterable + return isinstance(obj, iterable.Array) and obj.type == pr.Array.TUPLE + + +def _is_list(obj): + from jedi.evaluate import iterable + return isinstance(obj, iterable.Array) and obj.type == pr.Array.LIST + + +def _element_calculate(evaluator, left, operator, right): + from jedi.evaluate import iterable, representation as er + l_is_num = _is_number(left) + r_is_num = _is_number(right) + if operator == '*': + # for iterables, ignore * operations + if isinstance(left, iterable.Array) or _is_string(left): + return [left] + elif isinstance(right, iterable.Array) or _is_string(right): + return [right] + elif operator == '+': + if l_is_num and r_is_num or _is_string(left) and _is_string(right): + return [create(evaluator, left.obj + right.obj)] + elif _is_tuple(left) and _is_tuple(right) or _is_list(left) and _is_list(right): + return [iterable.MergedArray(evaluator, (left, right))] + elif operator == '-': + if l_is_num and r_is_num: + return [create(evaluator, left.obj - right.obj)] + elif operator == '%': + # With strings and numbers the left type typically remains. Except for + # `int() % float()`. + return [left] + + def check(obj): + """Checks if a Jedi object is either a float or an int.""" + return isinstance(obj, er.Instance) and obj.name in ('int', 'float') + + # Static analysis, one is a number, the other one is not. + if operator in ('+', '-') and l_is_num != r_is_num \ + and not (check(left) or check(right)): + message = "TypeError: unsupported operand type(s) for +: %s and %s" + analysis.add(evaluator, 'type-error-operation', operator, + message % (left, right)) + + return [left, right] diff --git a/python/pw_multiScriptEditor/jedi/evaluate/recursion.py b/python/pw_multiScriptEditor/jedi/evaluate/recursion.py new file mode 100644 index 0000000..a07299b --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/recursion.py @@ -0,0 +1,165 @@ +""" +Recursions are the recipe of |jedi| to conquer Python code. However, someone +must stop recursions going mad. Some settings are here to make |jedi| stop at +the right time. You can read more about them :ref:`here `. + +Next to :mod:`jedi.evaluate.cache` this module also makes |jedi| not +thread-safe. Why? ``ExecutionRecursionDecorator`` uses class variables to +count the function calls. +""" +from jedi.parser import representation as pr +from jedi import debug +from jedi import settings +from jedi.evaluate import compiled +from jedi.evaluate import iterable + + +def recursion_decorator(func): + def run(evaluator, stmt, *args, **kwargs): + rec_detect = evaluator.recursion_detector + # print stmt, len(self.node_statements()) + if rec_detect.push_stmt(stmt): + return [] + else: + result = func(evaluator, stmt, *args, **kwargs) + rec_detect.pop_stmt() + return result + return run + + +class RecursionDetector(object): + """ + A decorator to detect recursions in statements. In a recursion a statement + at the same place, in the same module may not be executed two times. + """ + def __init__(self): + self.top = None + self.current = None + + def push_stmt(self, stmt): + self.current = _RecursionNode(stmt, self.current) + check = self._check_recursion() + if check: + debug.warning('catched stmt recursion: %s against %s @%s', stmt, + check.stmt, stmt.start_pos) + self.pop_stmt() + return True + return False + + def pop_stmt(self): + if self.current is not None: + # I don't know how current can be None, but sometimes it happens + # with Python3. + self.current = self.current.parent + + def _check_recursion(self): + test = self.current + while True: + test = test.parent + if self.current == test: + return test + if not test: + return False + + def node_statements(self): + result = [] + n = self.current + while n: + result.insert(0, n.stmt) + n = n.parent + return result + + +class _RecursionNode(object): + """ A node of the RecursionDecorator. """ + def __init__(self, stmt, parent): + self.script = stmt.get_parent_until() + self.position = stmt.start_pos + self.parent = parent + self.stmt = stmt + + # Don't check param instances, they are not causing recursions + # The same's true for the builtins, because the builtins are really + # simple. + self.is_ignored = isinstance(stmt, pr.Param) \ + or (self.script == compiled.builtin) + + def __eq__(self, other): + if not other: + return None + + # List Comprehensions start on the same line as its statement. + # Therefore we have the unfortunate situation of the same start_pos for + # two statements. + is_list_comp = lambda x: isinstance(x, pr.ListComprehension) + return self.script == other.script \ + and self.position == other.position \ + and not is_list_comp(self.stmt.parent) \ + and not is_list_comp(other.parent) \ + and not self.is_ignored and not other.is_ignored + + +def execution_recursion_decorator(func): + def run(execution, evaluate_generator=False): + detector = execution._evaluator.execution_recursion_detector + if detector.push_execution(execution, evaluate_generator): + result = [] + else: + result = func(execution, evaluate_generator) + detector.pop_execution() + return result + + return run + + +class ExecutionRecursionDetector(object): + """ + Catches recursions of executions. + It is designed like a Singelton. Only one instance should exist. + """ + def __init__(self): + self.recursion_level = 0 + self.parent_execution_funcs = [] + self.execution_funcs = set() + self.execution_count = 0 + + def __call__(self, execution, evaluate_generator=False): + debug.dbg('Execution recursions: %s', execution, self.recursion_level, + self.execution_count, len(self.execution_funcs)) + if self.check_recursion(execution, evaluate_generator): + result = [] + else: + result = self.func(execution, evaluate_generator) + self.pop_execution() + return result + + def pop_execution(cls): + cls.parent_execution_funcs.pop() + cls.recursion_level -= 1 + + def push_execution(cls, execution, evaluate_generator): + in_par_execution_funcs = execution.base in cls.parent_execution_funcs + in_execution_funcs = execution.base in cls.execution_funcs + cls.recursion_level += 1 + cls.execution_count += 1 + cls.execution_funcs.add(execution.base) + cls.parent_execution_funcs.append(execution.base) + + if cls.execution_count > settings.max_executions: + return True + + if isinstance(execution.base, (iterable.Array, iterable.Generator)): + return False + module = execution.get_parent_until() + if evaluate_generator or module == compiled.builtin: + return False + + if in_par_execution_funcs: + if cls.recursion_level > settings.max_function_recursion_level: + return True + if in_execution_funcs and \ + len(cls.execution_funcs) > settings.max_until_execution_unique: + return True + if cls.execution_count > settings.max_executions_without_builtins: + return True + return False diff --git a/python/pw_multiScriptEditor/jedi/evaluate/representation.py b/python/pw_multiScriptEditor/jedi/evaluate/representation.py new file mode 100644 index 0000000..74ffcda --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/representation.py @@ -0,0 +1,569 @@ +""" +Like described in the :mod:`jedi.evaluate.parsing_representation` module, +there's a need for an ast like module to represent the states of parsed +modules. + +But now there are also structures in Python that need a little bit more than +that. An ``Instance`` for example is only a ``Class`` before it is +instantiated. This class represents these cases. + +So, why is there also a ``Class`` class here? Well, there are decorators and +they change classes in Python 3. +""" +import copy +import os +import pkgutil + +from jedi._compatibility import use_metaclass, unicode +from jedi.parser import representation as pr +from jedi.parser.tokenize import Token +from jedi import debug +from jedi import common +from jedi.evaluate.cache import memoize_default, CachedMetaClass +from jedi.evaluate import compiled +from jedi.evaluate import recursion +from jedi.evaluate import iterable +from jedi.evaluate import docstrings +from jedi.evaluate import helpers +from jedi.evaluate import param + + +class Executable(pr.IsScope): + """ + An instance is also an executable - because __init__ is called + :param var_args: The param input array, consist of `pr.Array` or list. + """ + def __init__(self, evaluator, base, var_args=()): + self._evaluator = evaluator + self.base = base + self.var_args = var_args + + def get_parent_until(self, *args, **kwargs): + return self.base.get_parent_until(*args, **kwargs) + + @common.safe_property + def parent(self): + return self.base.parent + + +class Instance(use_metaclass(CachedMetaClass, Executable)): + """ + This class is used to evaluate instances. + """ + def __init__(self, evaluator, base, var_args=()): + super(Instance, self).__init__(evaluator, base, var_args) + if str(base.name) in ['list', 'set'] \ + and compiled.builtin == base.get_parent_until(): + # compare the module path with the builtin name. + self.var_args = iterable.check_array_instances(evaluator, self) + else: + # need to execute the __init__ function, because the dynamic param + # searching needs it. + with common.ignored(KeyError): + self.execute_subscope_by_name('__init__', self.var_args) + # Generated instances are classes that are just generated by self + # (No var_args) used. + self.is_generated = False + + @memoize_default() + def _get_method_execution(self, func): + func = InstanceElement(self._evaluator, self, func, True) + return FunctionExecution(self._evaluator, func, self.var_args) + + def _get_func_self_name(self, func): + """ + Returns the name of the first param in a class method (which is + normally self. + """ + try: + return str(func.params[0].get_name()) + except IndexError: + return None + + @memoize_default([]) + def get_self_attributes(self): + def add_self_dot_name(name): + """ + Need to copy and rewrite the name, because names are now + ``instance_usage.variable`` instead of ``self.variable``. + """ + n = copy.copy(name) + n.names = n.names[1:] + n._get_code = unicode(n.names[-1]) + names.append(InstanceElement(self._evaluator, self, n)) + + names = [] + # This loop adds the names of the self object, copies them and removes + # the self. + for sub in self.base.subscopes: + if isinstance(sub, pr.Class): + continue + # Get the self name, if there's one. + self_name = self._get_func_self_name(sub) + if not self_name: + continue + + if sub.name.get_code() == '__init__': + # ``__init__`` is special because the params need are injected + # this way. Therefore an execution is necessary. + if not sub.decorators: + # __init__ decorators should generally just be ignored, + # because to follow them and their self variables is too + # complicated. + sub = self._get_method_execution(sub) + for n in sub.get_defined_names(): + # Only names with the selfname are being added. + # It is also important, that they have a len() of 2, + # because otherwise, they are just something else + if unicode(n.names[0]) == self_name and len(n.names) == 2: + add_self_dot_name(n) + + if not isinstance(self.base, compiled.CompiledObject): + for s in self.base.get_super_classes(): + for inst in self._evaluator.execute(s): + names += inst.get_self_attributes() + return names + + def get_subscope_by_name(self, name): + sub = self.base.get_subscope_by_name(name) + return InstanceElement(self._evaluator, self, sub, True) + + def execute_subscope_by_name(self, name, args=()): + method = self.get_subscope_by_name(name) + return self._evaluator.execute(method, args) + + def get_descriptor_return(self, obj): + """ Throws a KeyError if there's no method. """ + # Arguments in __get__ descriptors are obj, class. + # `method` is the new parent of the array, don't know if that's good. + args = [obj, obj.base] if isinstance(obj, Instance) else [None, obj] + return self.execute_subscope_by_name('__get__', args) + + def scope_names_generator(self, position=None): + """ + An Instance has two scopes: The scope with self names and the class + scope. Instance variables have priority over the class scope. + """ + yield self, self.get_self_attributes() + + names = [] + for var in self.base.instance_names(): + names.append(InstanceElement(self._evaluator, self, var, True)) + yield self, names + + def is_callable(self): + try: + self.get_subscope_by_name('__call__') + return True + except KeyError: + return False + + def get_index_types(self, index_array): + + indexes = iterable.create_indexes_or_slices(self._evaluator, index_array) + if any([isinstance(i, iterable.Slice) for i in indexes]): + # Slice support in Jedi is very marginal, at the moment, so just + # ignore them in case of __getitem__. + # TODO support slices in a more general way. + indexes = [] + + index = helpers.FakeStatement(indexes, parent=compiled.builtin) + try: + return self.execute_subscope_by_name('__getitem__', [index]) + except KeyError: + debug.warning('No __getitem__, cannot access the array.') + return [] + + def __getattr__(self, name): + if name not in ['start_pos', 'end_pos', 'name', 'get_imports', + 'doc', 'raw_doc', 'asserts']: + raise AttributeError("Instance %s: Don't touch this (%s)!" + % (self, name)) + return getattr(self.base, name) + + def __repr__(self): + return "" % \ + (type(self).__name__, self.base, len(self.var_args or [])) + + +class InstanceElement(use_metaclass(CachedMetaClass, pr.Base)): + """ + InstanceElement is a wrapper for any object, that is used as an instance + variable (e.g. self.variable or class methods). + """ + def __init__(self, evaluator, instance, var, is_class_var=False): + self._evaluator = evaluator + if isinstance(var, pr.Function): + var = Function(evaluator, var) + elif isinstance(var, pr.Class): + var = Class(evaluator, var) + self.instance = instance + self.var = var + self.is_class_var = is_class_var + + @common.safe_property + @memoize_default() + def parent(self): + par = self.var.parent + if isinstance(par, Class) and par == self.instance.base \ + or isinstance(par, pr.Class) \ + and par == self.instance.base.base: + par = self.instance + elif not isinstance(par, (pr.Module, compiled.CompiledObject)): + par = InstanceElement(self.instance._evaluator, self.instance, par, self.is_class_var) + return par + + def get_parent_until(self, *args, **kwargs): + return pr.Simple.get_parent_until(self, *args, **kwargs) + + def get_decorated_func(self): + """ Needed because the InstanceElement should not be stripped """ + func = self.var.get_decorated_func() + func = InstanceElement(self._evaluator, self.instance, func) + return func + + def expression_list(self): + # Copy and modify the array. + return [InstanceElement(self._evaluator, self.instance, command, self.is_class_var) + if not isinstance(command, (pr.Operator, Token)) else command + for command in self.var.expression_list()] + + def __iter__(self): + for el in self.var.__iter__(): + yield InstanceElement(self.instance._evaluator, self.instance, el, + self.is_class_var) + + def __getitem__(self, index): + return InstanceElement(self._evaluator, self.instance, self.var[index], + self.is_class_var) + + def __getattr__(self, name): + return getattr(self.var, name) + + def isinstance(self, *cls): + return isinstance(self.var, cls) + + def is_callable(self): + return self.var.is_callable() + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self.var) + + +class Class(use_metaclass(CachedMetaClass, pr.IsScope)): + """ + This class is not only important to extend `pr.Class`, it is also a + important for descriptors (if the descriptor methods are evaluated or not). + """ + def __init__(self, evaluator, base): + self._evaluator = evaluator + self.base = base + + @memoize_default(default=()) + def get_super_classes(self): + supers = [] + # TODO care for mro stuff (multiple super classes). + for s in self.base.supers: + # Super classes are statements. + for cls in self._evaluator.eval_statement(s): + if not isinstance(cls, (Class, compiled.CompiledObject)): + debug.warning('Received non class as a super class.') + continue # Just ignore other stuff (user input error). + supers.append(cls) + if not supers and self.base.parent != compiled.builtin: + # add `object` to classes + supers += self._evaluator.find_types(compiled.builtin, 'object') + return supers + + @memoize_default(default=()) + def instance_names(self): + def in_iterable(name, iterable): + """ checks if the name is in the variable 'iterable'. """ + for i in iterable: + # Only the last name is important, because these names have a + # maximal length of 2, with the first one being `self`. + if unicode(i.names[-1]) == unicode(name.names[-1]): + return True + return False + + result = self.base.get_defined_names() + super_result = [] + # TODO mro! + for cls in self.get_super_classes(): + # Get the inherited names. + for i in cls.instance_names(): + if not in_iterable(i, result): + super_result.append(i) + result += super_result + return result + + def scope_names_generator(self, position=None): + yield self, self.instance_names() + yield self, compiled.type_names + + def get_subscope_by_name(self, name): + for s in [self] + self.get_super_classes(): + for sub in reversed(s.subscopes): + if sub.name.get_code() == name: + return sub + raise KeyError("Couldn't find subscope.") + + def is_callable(self): + return True + + @common.safe_property + def name(self): + return self.base.name + + def __getattr__(self, name): + if name not in ['start_pos', 'end_pos', 'parent', 'asserts', 'raw_doc', + 'doc', 'get_imports', 'get_parent_until', 'get_code', + 'subscopes']: + raise AttributeError("Don't touch this: %s of %s !" % (name, self)) + return getattr(self.base, name) + + def __repr__(self): + return "" % (type(self).__name__, self.base) + + +class Function(use_metaclass(CachedMetaClass, pr.IsScope)): + """ + Needed because of decorators. Decorators are evaluated here. + """ + def __init__(self, evaluator, func, is_decorated=False): + """ This should not be called directly """ + self._evaluator = evaluator + self.base_func = func + self.is_decorated = is_decorated + + @memoize_default() + def _decorated_func(self): + """ + Returns the function, that is to be executed in the end. + This is also the places where the decorators are processed. + """ + f = self.base_func + + # Only enter it, if has not already been processed. + if not self.is_decorated: + for dec in reversed(self.base_func.decorators): + debug.dbg('decorator: %s %s', dec, f) + dec_results = self._evaluator.eval_statement(dec) + if not len(dec_results): + debug.warning('decorator not found: %s on %s', dec, self.base_func) + return None + decorator = dec_results.pop() + if dec_results: + debug.warning('multiple decorators found %s %s', + self.base_func, dec_results) + # Create param array. + old_func = Function(self._evaluator, f, is_decorated=True) + + wrappers = self._evaluator.execute(decorator, (old_func,)) + if not len(wrappers): + debug.warning('no wrappers found %s', self.base_func) + return None + if len(wrappers) > 1: + # TODO resolve issue with multiple wrappers -> multiple types + debug.warning('multiple wrappers found %s %s', + self.base_func, wrappers) + f = wrappers[0] + + debug.dbg('decorator end %s', f) + + if isinstance(f, pr.Function): + f = Function(self._evaluator, f, True) + return f + + def get_decorated_func(self): + """ + This function exists for the sole purpose of returning itself if the + decorator doesn't turn out to "work". + + We just ignore the decorator here, because sometimes decorators are + just really complicated and Jedi cannot understand them. + """ + return self._decorated_func() \ + or Function(self._evaluator, self.base_func, True) + + def get_magic_function_names(self): + return compiled.magic_function_class.get_defined_names() + + def get_magic_function_scope(self): + return compiled.magic_function_class + + def is_callable(self): + return True + + def __getattr__(self, name): + return getattr(self.base_func, name) + + def __repr__(self): + dec_func = self._decorated_func() + dec = '' + if not self.is_decorated and self.base_func.decorators: + dec = " is " + repr(dec_func) + return "" % (type(self).__name__, self.base_func, dec) + + +class FunctionExecution(Executable): + """ + This class is used to evaluate functions and their returns. + + This is the most complicated class, because it contains the logic to + transfer parameters. It is even more complicated, because there may be + multiple calls to functions and recursion has to be avoided. But this is + responsibility of the decorators. + """ + @memoize_default(default=()) + @recursion.execution_recursion_decorator + def get_return_types(self, evaluate_generator=False): + func = self.base + # Feed the listeners, with the params. + for listener in func.listeners: + listener.execute(self._get_params()) + if func.listeners: + # If we do have listeners, that means that there's not a regular + # execution ongoing. In this case Jedi is interested in the + # inserted params, not in the actual execution of the function. + return [] + + if func.is_generator and not evaluate_generator: + return [iterable.Generator(self._evaluator, func, self.var_args)] + else: + stmts = list(docstrings.find_return_types(self._evaluator, func)) + for r in self.returns: + if r is not None: + stmts += self._evaluator.eval_statement(r) + return stmts + + @memoize_default(default=()) + def _get_params(self): + """ + This returns the params for an TODO and is injected as a + 'hack' into the pr.Function class. + This needs to be here, because Instance can have __init__ functions, + which act the same way as normal functions. + """ + return param.get_params(self._evaluator, self.base, self.var_args) + + def get_defined_names(self): + """ + Call the default method with the own instance (self implements all + the necessary functions). Add also the params. + """ + return self._get_params() + pr.Scope.get_defined_names(self) + + def scope_names_generator(self, position=None): + names = pr.filter_after_position(pr.Scope.get_defined_names(self), position) + yield self, self._get_params() + names + + def _copy_properties(self, prop): + """ + Literally copies a property of a Function. Copying is very expensive, + because it is something like `copy.deepcopy`. However, these copied + objects can be used for the executions, as if they were in the + execution. + """ + # Copy all these lists into this local function. + attr = getattr(self.base, prop) + objects = [] + for element in attr: + if element is None: + copied = element + else: + copied = helpers.fast_parent_copy(element) + copied.parent = self._scope_copy(copied.parent) + if isinstance(copied, pr.Function): + copied = Function(self._evaluator, copied) + objects.append(copied) + return objects + + def __getattr__(self, name): + if name not in ['start_pos', 'end_pos', 'imports', '_sub_module']: + raise AttributeError('Tried to access %s: %s. Why?' % (name, self)) + return getattr(self.base, name) + + @memoize_default() + def _scope_copy(self, scope): + """ Copies a scope (e.g. if) in an execution """ + # TODO method uses different scopes than the subscopes property. + + # just check the start_pos, sometimes it's difficult with closures + # to compare the scopes directly. + if scope.start_pos == self.start_pos: + return self + else: + copied = helpers.fast_parent_copy(scope) + copied.parent = self._scope_copy(copied.parent) + return copied + + @common.safe_property + @memoize_default([]) + def returns(self): + return self._copy_properties('returns') + + @common.safe_property + @memoize_default([]) + def asserts(self): + return self._copy_properties('asserts') + + @common.safe_property + @memoize_default([]) + def statements(self): + return self._copy_properties('statements') + + @common.safe_property + @memoize_default([]) + def subscopes(self): + return self._copy_properties('subscopes') + + def get_statement_for_position(self, pos): + return pr.Scope.get_statement_for_position(self, pos) + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self.base) + + +class ModuleWrapper(use_metaclass(CachedMetaClass, pr.Module)): + def __init__(self, evaluator, module): + self._evaluator = evaluator + self._module = module + + def scope_names_generator(self, position=None): + yield self, pr.filter_after_position(self._module.get_defined_names(), position) + yield self, self._module_attributes() + sub_modules = self._sub_modules() + if sub_modules: + yield self, self._sub_modules() + + @memoize_default() + def _module_attributes(self): + names = ['__file__', '__package__', '__doc__', '__name__', '__version__'] + # All the additional module attributes are strings. + parent = Instance(self._evaluator, compiled.create(self._evaluator, str)) + return [helpers.FakeName(n, parent) for n in names] + + @memoize_default() + def _sub_modules(self): + """ + Lists modules in the directory of this module (if this module is a + package). + """ + path = self._module.path + names = [] + if path is not None and path.endswith(os.path.sep + '__init__.py'): + mods = pkgutil.iter_modules([os.path.dirname(path)]) + for module_loader, name, is_pkg in mods: + name = helpers.FakeName(name) + # It's obviously a relative import to the current module. + imp = helpers.FakeImport(name, self, level=1) + name.parent = imp + names.append(name) + return names + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self._module) diff --git a/python/pw_multiScriptEditor/jedi/evaluate/stdlib.py b/python/pw_multiScriptEditor/jedi/evaluate/stdlib.py new file mode 100644 index 0000000..adb2a3e --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/stdlib.py @@ -0,0 +1,131 @@ +""" +Implementations of standard library functions, because it's not possible to +understand them with Jedi. +""" +from jedi._compatibility import unicode +from jedi.evaluate import compiled +from jedi.evaluate import representation as er +from jedi.evaluate import iterable +from jedi.evaluate.helpers import FakeArray, FakeStatement +from jedi.parser import representation as pr +from jedi import debug + + +class NotInStdLib(LookupError): + pass + + +def execute(evaluator, obj, params): + try: + obj_name = str(obj.name) + except AttributeError: + pass + else: + if obj.parent == compiled.builtin: + module_name = 'builtins' + elif isinstance(obj.parent, pr.Module): + module_name = str(obj.parent.name) + else: + module_name = '' + + # for now we just support builtin functions. + try: + return _implemented[module_name][obj_name](evaluator, obj, params) + except KeyError: + pass + raise NotInStdLib() + + +def _follow_param(evaluator, params, index): + try: + stmt = params[index] + except IndexError: + return [] + else: + if isinstance(stmt, pr.Statement): + return evaluator.eval_statement(stmt) + else: + return [stmt] # just some arbitrary object + + +def builtins_getattr(evaluator, obj, params): + stmts = [] + # follow the first param + objects = _follow_param(evaluator, params, 0) + names = _follow_param(evaluator, params, 1) + for obj in objects: + if not isinstance(obj, (er.Instance, er.Class, pr.Module, compiled.CompiledObject)): + debug.warning('getattr called without instance') + continue + + for name in names: + s = unicode, str + if isinstance(name, compiled.CompiledObject) and isinstance(name.obj, s): + stmts += evaluator.follow_path(iter([name.obj]), [obj], obj) + else: + debug.warning('getattr called without str') + continue + return stmts + + +def builtins_type(evaluator, obj, params): + if len(params) == 1: + # otherwise it would be a metaclass... maybe someday... + objects = _follow_param(evaluator, params, 0) + return [o.base for o in objects if isinstance(o, er.Instance)] + return [] + + +def builtins_super(evaluator, obj, params): + # TODO make this able to detect multiple inheritance super + accept = (pr.Function,) + func = params.get_parent_until(accept) + if func.isinstance(*accept): + cls = func.get_parent_until(accept + (pr.Class,), + include_current=False) + if isinstance(cls, pr.Class): + cls = er.Class(evaluator, cls) + su = cls.get_super_classes() + if su: + return evaluator.execute(su[0]) + return [] + + +def builtins_reversed(evaluator, obj, params): + objects = tuple(_follow_param(evaluator, params, 0)) + if objects: + # unpack the iterator values + objects = tuple(iterable.get_iterator_types(objects)) + if objects: + rev = reversed(objects) + # Repack iterator values and then run it the normal way. This is + # necessary, because `reversed` is a function and autocompletion + # would fail in certain cases like `reversed(x).__iter__` if we + # just returned the result directly. + stmts = [FakeStatement([r]) for r in rev] + objects = (iterable.Array(evaluator, FakeArray(stmts, objects[0].parent)),) + return [er.Instance(evaluator, obj, objects)] + + +def _return_first_param(evaluator, obj, params): + if len(params) == 1: + return _follow_param(evaluator, params, 0) + return [] + + +_implemented = { + 'builtins': { + 'getattr': builtins_getattr, + 'type': builtins_type, + 'super': builtins_super, + 'reversed': builtins_reversed, + }, + 'copy': { + 'copy': _return_first_param, + 'deepcopy': _return_first_param, + }, + 'json': { + 'load': lambda *args: [], + 'loads': lambda *args: [], + }, +} diff --git a/python/pw_multiScriptEditor/jedi/evaluate/sys_path.py b/python/pw_multiScriptEditor/jedi/evaluate/sys_path.py new file mode 100644 index 0000000..23ae0d3 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/evaluate/sys_path.py @@ -0,0 +1,209 @@ +import os +import sys + +from jedi._compatibility import exec_function, unicode +from jedi.parser import representation as pr +from jedi.parser import Parser +from jedi.evaluate.cache import memoize_default +from jedi import debug +from jedi import common + + +def get_sys_path(): + def check_virtual_env(sys_path): + """ Add virtualenv's site-packages to the `sys.path`.""" + venv = os.getenv('VIRTUAL_ENV') + if not venv: + return + venv = os.path.abspath(venv) + if os.name == 'nt': + p = os.path.join(venv, 'lib', 'site-packages') + else: + p = os.path.join(venv, 'lib', 'python%d.%d' % sys.version_info[:2], + 'site-packages') + if p not in sys_path: + sys_path.insert(0, p) + + check_virtual_env(sys.path) + return [p for p in sys.path if p != ""] + + +def _execute_code(module_path, code): + c = "import os; from os.path import *; result=%s" + variables = {'__file__': module_path} + try: + exec_function(c % code, variables) + except Exception: + debug.warning('sys.path manipulation detected, but failed to evaluate.') + return None + try: + res = variables['result'] + if isinstance(res, str): + return os.path.abspath(res) + else: + return None + except KeyError: + return None + + +def _paths_from_assignment(statement): + """ + extracts the assigned strings from an assignment that looks as follows:: + + >>> sys.path[0:0] = ['module/path', 'another/module/path'] + """ + + names = statement.get_defined_names() + if len(names) != 1: + return [] + if [unicode(x) for x in names[0].names] != ['sys', 'path']: + return [] + expressions = statement.expression_list() + if len(expressions) != 1 or not isinstance(expressions[0], pr.Array): + return + stmts = (s for s in expressions[0].values if isinstance(s, pr.Statement)) + expression_lists = (s.expression_list() for s in stmts) + return [e.value for exprs in expression_lists for e in exprs + if isinstance(e, pr.Literal) and e.value] + + +def _paths_from_insert(module_path, exe): + """ extract the inserted module path from an "sys.path.insert" statement + """ + exe_type, exe.type = exe.type, pr.Array.NOARRAY + exe_pop = exe.values.pop(0) + res = _execute_code(module_path, exe.get_code()) + exe.type = exe_type + exe.values.insert(0, exe_pop) + return res + + +def _paths_from_call_expression(module_path, call): + """ extract the path from either "sys.path.append" or "sys.path.insert" """ + if call.execution is None: + return + n = call.name + if not isinstance(n, pr.Name) or len(n.names) != 3: + return + names = [unicode(x) for x in n.names] + if names[:2] != ['sys', 'path']: + return + cmd = names[2] + exe = call.execution + if cmd == 'insert' and len(exe) == 2: + path = _paths_from_insert(module_path, exe) + elif cmd == 'append' and len(exe) == 1: + path = _execute_code(module_path, exe.get_code()) + return path and [path] or [] + + +def _check_module(module): + try: + possible_stmts = module.used_names['path'] + except KeyError: + return get_sys_path() + sys_path = list(get_sys_path()) # copy + statements = (p for p in possible_stmts if isinstance(p, pr.Statement)) + for stmt in statements: + expressions = stmt.expression_list() + if len(expressions) == 1 and isinstance(expressions[0], pr.Call): + sys_path.extend( + _paths_from_call_expression(module.path, expressions[0]) or []) + elif ( + hasattr(stmt, 'assignment_details') and + len(stmt.assignment_details) == 1 + ): + sys_path.extend(_paths_from_assignment(stmt) or []) + return sys_path + + +@memoize_default(evaluator_is_first_arg=True) +def sys_path_with_modifications(evaluator, module): + if module.path is None: + # Support for modules without a path is bad, therefore return the + # normal path. + return list(get_sys_path()) + + curdir = os.path.abspath(os.curdir) + with common.ignored(OSError): + os.chdir(os.path.dirname(module.path)) + + result = _check_module(module) + result += _detect_django_path(module.path) + # buildout scripts often contain the same sys.path modifications + # the set here is used to avoid duplicate sys.path entries + buildout_paths = set() + for module_path in _get_buildout_scripts(module.path): + try: + with open(module_path, 'rb') as f: + source = f.read() + except IOError: + pass + else: + p = Parser(common.source_to_unicode(source), module_path) + for path in _check_module(p.module): + if path not in buildout_paths: + buildout_paths.add(path) + result.append(path) + # cleanup, back to old directory + os.chdir(curdir) + return list(result) + + +def _traverse_parents(path): + while True: + new = os.path.dirname(path) + if new == path: + return + path = new + yield path + + +def _get_parent_dir_with_file(path, filename): + for parent in _traverse_parents(path): + if os.path.isfile(os.path.join(parent, filename)): + return parent + return None + + +def _detect_django_path(module_path): + """ Detects the path of the very well known Django library (if used) """ + result = [] + + for parent in _traverse_parents(module_path): + with common.ignored(IOError): + with open(parent + os.path.sep + 'manage.py'): + debug.dbg('Found django path: %s', module_path) + result.append(parent) + return result + + +def _get_buildout_scripts(module_path): + """ + if there is a 'buildout.cfg' file in one of the parent directories of the + given module it will return a list of all files in the buildout bin + directory that look like python files. + + :param module_path: absolute path to the module. + :type module_path: str + """ + project_root = _get_parent_dir_with_file(module_path, 'buildout.cfg') + if not project_root: + return [] + bin_path = os.path.join(project_root, 'bin') + if not os.path.exists(bin_path): + return [] + extra_module_paths = [] + for filename in os.listdir(bin_path): + try: + filepath = os.path.join(bin_path, filename) + with open(filepath, 'r') as f: + firstline = f.readline() + if firstline.startswith('#!') and 'python' in firstline: + extra_module_paths.append(filepath) + except IOError as e: + # either permission error or race cond. because file got deleted + # ignore + debug.warning(unicode(e)) + continue + return extra_module_paths diff --git a/python/pw_multiScriptEditor/jedi/parser/__init__.py b/python/pw_multiScriptEditor/jedi/parser/__init__.py new file mode 100644 index 0000000..86a3124 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/parser/__init__.py @@ -0,0 +1,639 @@ +""" +The ``Parser`` tries to convert the available Python code in an easy to read +format, something like an abstract syntax tree. The classes who represent this +tree, are sitting in the :mod:`jedi.parser.representation` module. + +The Python module ``tokenize`` is a very important part in the ``Parser``, +because it splits the code into different words (tokens). Sometimes it looks a +bit messy. Sorry for that! You might ask now: "Why didn't you use the ``ast`` +module for this? Well, ``ast`` does a very good job understanding proper Python +code, but fails to work as soon as there's a single line of broken code. + +There's one important optimization that needs to be known: Statements are not +being parsed completely. ``Statement`` is just a representation of the tokens +within the statement. This lowers memory usage and cpu time and reduces the +complexity of the ``Parser`` (there's another parser sitting inside +``Statement``, which produces ``Array`` and ``Call``). +""" +import keyword + +from jedi._compatibility import next, unicode +from jedi import debug +from jedi import common +from jedi.parser import representation as pr +from jedi.parser import tokenize + +OPERATOR_KEYWORDS = 'and', 'for', 'if', 'else', 'in', 'is', 'lambda', 'not', 'or' +# Not used yet. In the future I intend to add something like KeywordStatement +STATEMENT_KEYWORDS = 'assert', 'del', 'global', 'nonlocal', 'raise', \ + 'return', 'yield', 'pass', 'continue', 'break' + + +class Parser(object): + """ + This class is used to parse a Python file, it then divides them into a + class structure of different scopes. + + :param source: The codebase for the parser. + :type source: str + :param module_path: The path of the module in the file system, may be None. + :type module_path: str + :param no_docstr: If True, a string at the beginning is not a docstr. + :param top_module: Use this module as a parent instead of `self.module`. + """ + def __init__(self, source, module_path=None, no_docstr=False, + tokenizer=None, top_module=None): + self.no_docstr = no_docstr + + tokenizer = tokenizer or tokenize.source_tokens(source) + self._gen = PushBackTokenizer(tokenizer) + + # initialize global Scope + start_pos = next(self._gen).start_pos + self._gen.push_last_back() + self.module = pr.SubModule(module_path, start_pos, top_module) + self._scope = self.module + self._top_module = top_module or self.module + + try: + self._parse() + except (common.MultiLevelStopIteration, StopIteration): + # StopIteration needs to be added as well, because python 2 has a + # strange way of handling StopIterations. + # sometimes StopIteration isn't catched. Just ignore it. + + # on finish, set end_pos correctly + pass + s = self._scope + while s is not None: + s.end_pos = self._gen.current.end_pos + s = s.parent + + # clean up unused decorators + for d in self._decorators: + # set a parent for unused decorators, avoid NullPointerException + # because of `self.module.used_names`. + d.parent = self.module + + self.module.end_pos = self._gen.current.end_pos + if self._gen.current.type == tokenize.NEWLINE: + # This case is only relevant with the FastTokenizer, because + # otherwise there's always an ENDMARKER. + # we added a newline before, so we need to "remove" it again. + # + # NOTE: It should be keep end_pos as-is if the last token of + # a source is a NEWLINE, otherwise the newline at the end of + # a source is not included in a ParserNode.code. + if self._gen.previous.type != tokenize.NEWLINE: + self.module.end_pos = self._gen.previous.end_pos + + del self._gen + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self.module) + + def _check_user_stmt(self, simple): + # this is not user checking, just update the used_names + for tok_name in self.module.temp_used_names: + try: + self.module.used_names[tok_name].add(simple) + except KeyError: + self.module.used_names[tok_name] = set([simple]) + self.module.temp_used_names = [] + + def _parse_dot_name(self, pre_used_token=None): + """ + The dot name parser parses a name, variable or function and returns + their names. + + :return: tuple of Name, next_token + """ + def append(el): + names.append(el) + self.module.temp_used_names.append(el[0]) + + names = [] + tok = next(self._gen) if pre_used_token is None else pre_used_token + + if tok.type != tokenize.NAME and tok.string != '*': + return None, tok + + first_pos = tok.start_pos + append((tok.string, first_pos)) + while True: + end_pos = tok.end_pos + tok = next(self._gen) + if tok.string != '.': + break + tok = next(self._gen) + if tok.type != tokenize.NAME: + break + append((tok.string, tok.start_pos)) + + n = pr.Name(self.module, names, first_pos, end_pos) if names else None + return n, tok + + def _parse_import_list(self): + """ + The parser for the imports. Unlike the class and function parse + function, this returns no Import class, but rather an import list, + which is then added later on. + The reason, why this is not done in the same class lies in the nature + of imports. There are two ways to write them: + + - from ... import ... + - import ... + + To distinguish, this has to be processed after the parser. + + :return: List of imports. + :rtype: list + """ + imports = [] + brackets = False + continue_kw = [",", ";", "\n", '\r\n', ')'] \ + + list(set(keyword.kwlist) - set(['as'])) + while True: + defunct = False + tok = next(self._gen) + if tok.string == '(': # python allows only one `(` in the statement. + brackets = True + tok = next(self._gen) + if brackets and tok.type == tokenize.NEWLINE: + tok = next(self._gen) + i, tok = self._parse_dot_name(tok) + if not i: + defunct = True + name2 = None + if tok.string == 'as': + name2, tok = self._parse_dot_name() + imports.append((i, name2, defunct)) + while tok.string not in continue_kw: + tok = next(self._gen) + if not (tok.string == "," or brackets and tok.type == tokenize.NEWLINE): + break + return imports + + def _parse_parentheses(self): + """ + Functions and Classes have params (which means for classes + super-classes). They are parsed here and returned as Statements. + + :return: List of Statements + :rtype: list + """ + names = [] + tok = None + pos = 0 + breaks = [',', ':'] + while tok is None or tok.string not in (')', ':'): + param, tok = self._parse_statement(added_breaks=breaks, + stmt_class=pr.Param) + if param and tok.string == ':': + # parse annotations + annotation, tok = self._parse_statement(added_breaks=breaks) + if annotation: + param.add_annotation(annotation) + + # params without vars are usually syntax errors. + if param and (param.get_defined_names()): + param.position_nr = pos + names.append(param) + pos += 1 + + return names + + def _parse_function(self): + """ + The parser for a text functions. Process the tokens, which follow a + function definition. + + :return: Return a Scope representation of the tokens. + :rtype: Function + """ + first_pos = self._gen.current.start_pos + tok = next(self._gen) + if tok.type != tokenize.NAME: + return None + + fname = pr.Name(self.module, [(tok.string, tok.start_pos)], tok.start_pos, + tok.end_pos) + + tok = next(self._gen) + if tok.string != '(': + return None + params = self._parse_parentheses() + + colon = next(self._gen) + annotation = None + if colon.string in ('-', '->'): + # parse annotations + if colon.string == '-': + # The Python 2 tokenizer doesn't understand this + colon = next(self._gen) + if colon.string != '>': + return None + annotation, colon = self._parse_statement(added_breaks=[':']) + + if colon.string != ':': + return None + + # because of 2 line func param definitions + return pr.Function(self.module, fname, params, first_pos, annotation) + + def _parse_class(self): + """ + The parser for a text class. Process the tokens, which follow a + class definition. + + :return: Return a Scope representation of the tokens. + :rtype: Class + """ + first_pos = self._gen.current.start_pos + cname = next(self._gen) + if cname.type != tokenize.NAME: + debug.warning("class: syntax err, token is not a name@%s (%s: %s)", + cname.start_pos[0], tokenize.tok_name[cname.type], cname.string) + return None + + cname = pr.Name(self.module, [(cname.string, cname.start_pos)], + cname.start_pos, cname.end_pos) + + super = [] + _next = next(self._gen) + if _next.string == '(': + super = self._parse_parentheses() + _next = next(self._gen) + + if _next.string != ':': + debug.warning("class syntax: %s@%s", cname, _next.start_pos[0]) + return None + + return pr.Class(self.module, cname, super, first_pos) + + def _parse_statement(self, pre_used_token=None, added_breaks=None, + stmt_class=pr.Statement, names_are_set_vars=False): + """ + Parses statements like:: + + a = test(b) + a += 3 - 2 or b + + and so on. One line at a time. + + :param pre_used_token: The pre parsed token. + :type pre_used_token: set + :return: Statement + last parsed token. + :rtype: (Statement, str) + """ + set_vars = [] + level = 0 # The level of parentheses + + if pre_used_token: + tok = pre_used_token + else: + tok = next(self._gen) + + while tok.type == tokenize.COMMENT: + # remove newline and comment + next(self._gen) + tok = next(self._gen) + + first_pos = tok.start_pos + opening_brackets = ['{', '(', '['] + closing_brackets = ['}', ')', ']'] + + # the difference between "break" and "always break" is that the latter + # will even break in parentheses. This is true for typical flow + # commands like def and class and the imports, which will never be used + # in a statement. + breaks = set(['\n', '\r\n', ':', ')']) + always_break = [';', 'import', 'from', 'class', 'def', 'try', 'except', + 'finally', 'while', 'return', 'yield'] + not_first_break = ['del', 'raise'] + if added_breaks: + breaks |= set(added_breaks) + + tok_list = [] + as_names = [] + in_lambda_param = False + while not (tok.string in always_break + or tok.string in not_first_break and not tok_list + or tok.string in breaks and level <= 0 + and not (in_lambda_param and tok.string in ',:')): + try: + # print 'parse_stmt', tok, tokenize.tok_name[token_type] + is_kw = tok.string in OPERATOR_KEYWORDS + if tok.type == tokenize.OP or is_kw: + tok_list.append( + pr.Operator(self.module, tok.string, self._scope, tok.start_pos) + ) + else: + tok_list.append(tok) + + if tok.string == 'as': + tok = next(self._gen) + if tok.type == tokenize.NAME: + n, tok = self._parse_dot_name(self._gen.current) + if n: + set_vars.append(n) + as_names.append(n) + tok_list.append(n) + continue + elif tok.string == 'lambda': + breaks.discard(':') + in_lambda_param = True + elif in_lambda_param and tok.string == ':': + in_lambda_param = False + elif tok.type == tokenize.NAME and not is_kw: + n, tok = self._parse_dot_name(self._gen.current) + # removed last entry, because we add Name + tok_list.pop() + if n: + tok_list.append(n) + continue + elif tok.string in opening_brackets: + level += 1 + elif tok.string in closing_brackets: + level -= 1 + + tok = next(self._gen) + except (StopIteration, common.MultiLevelStopIteration): + # comes from tokenizer + break + + if not tok_list: + return None, tok + + first_tok = tok_list[0] + # docstrings + if len(tok_list) == 1 and isinstance(first_tok, tokenize.Token) \ + and first_tok.type == tokenize.STRING: + # Normal docstring check + if self.freshscope and not self.no_docstr: + self._scope.add_docstr(first_tok) + return None, tok + + # Attribute docstring (PEP 224) support (sphinx uses it, e.g.) + # If string literal is being parsed... + elif first_tok.type == tokenize.STRING: + with common.ignored(IndexError, AttributeError): + # ...then set it as a docstring + self._scope.statements[-1].add_docstr(first_tok) + return None, tok + + stmt = stmt_class(self.module, tok_list, first_pos, tok.end_pos, + as_names=as_names, + names_are_set_vars=names_are_set_vars) + + stmt.parent = self._top_module + self._check_user_stmt(stmt) + + if tok.string in always_break + not_first_break: + self._gen.push_last_back() + return stmt, tok + + def _parse(self): + """ + The main part of the program. It analyzes the given code-text and + returns a tree-like scope. For a more detailed description, see the + class description. + + :param text: The code which should be parsed. + :param type: str + + :raises: IndentationError + """ + extended_flow = ['else', 'elif', 'except', 'finally'] + statement_toks = ['{', '[', '(', '`'] + + self._decorators = [] + self.freshscope = True + for tok in self._gen: + token_type = tok.type + tok_str = tok.string + first_pos = tok.start_pos + self.module.temp_used_names = [] + # debug.dbg('main: tok=[%s] type=[%s] indent=[%s]', \ + # tok, tokenize.tok_name[token_type], start_position[0]) + + # check again for unindented stuff. this is true for syntax + # errors. only check for names, because thats relevant here. If + # some docstrings are not indented, I don't care. + while first_pos[1] <= self._scope.start_pos[1] \ + and (token_type == tokenize.NAME or tok_str in ('(', '['))\ + and self._scope != self.module: + self._scope.end_pos = first_pos + self._scope = self._scope.parent + if isinstance(self._scope, pr.Module) \ + and not isinstance(self._scope, pr.SubModule): + self._scope = self.module + + if isinstance(self._scope, pr.SubModule): + use_as_parent_scope = self._top_module + else: + use_as_parent_scope = self._scope + if tok_str == 'def': + func = self._parse_function() + if func is None: + debug.warning("function: syntax error@%s", first_pos[0]) + continue + self.freshscope = True + self._scope = self._scope.add_scope(func, self._decorators) + self._decorators = [] + elif tok_str == 'class': + cls = self._parse_class() + if cls is None: + debug.warning("class: syntax error@%s" % first_pos[0]) + continue + self.freshscope = True + self._scope = self._scope.add_scope(cls, self._decorators) + self._decorators = [] + # import stuff + elif tok_str == 'import': + imports = self._parse_import_list() + for count, (m, alias, defunct) in enumerate(imports): + e = (alias or m or self._gen.previous).end_pos + end_pos = self._gen.previous.end_pos if count + 1 == len(imports) else e + i = pr.Import(self.module, first_pos, end_pos, m, + alias, defunct=defunct) + self._check_user_stmt(i) + self._scope.add_import(i) + if not imports: + i = pr.Import(self.module, first_pos, self._gen.current.end_pos, + None, defunct=True) + self._check_user_stmt(i) + self.freshscope = False + elif tok_str == 'from': + defunct = False + # take care for relative imports + relative_count = 0 + while True: + tok = next(self._gen) + if tok.string != '.': + break + relative_count += 1 + # the from import + mod, tok = self._parse_dot_name(self._gen.current) + tok_str = tok.string + if str(mod) == 'import' and relative_count: + self._gen.push_last_back() + tok_str = 'import' + mod = None + if not mod and not relative_count or tok_str != "import": + debug.warning("from: syntax error@%s", tok.start_pos[0]) + defunct = True + if tok_str != 'import': + self._gen.push_last_back() + names = self._parse_import_list() + for count, (name, alias, defunct2) in enumerate(names): + star = name is not None and unicode(name.names[0]) == '*' + if star: + name = None + e = (alias or name or self._gen.previous).end_pos + end_pos = self._gen.previous.end_pos if count + 1 == len(names) else e + i = pr.Import(self.module, first_pos, end_pos, name, + alias, mod, star, relative_count, + defunct=defunct or defunct2) + self._check_user_stmt(i) + self._scope.add_import(i) + self.freshscope = False + # loops + elif tok_str == 'for': + set_stmt, tok = self._parse_statement(added_breaks=['in'], + names_are_set_vars=True) + if tok.string != 'in': + debug.warning('syntax err, for flow incomplete @%s', tok.start_pos[0]) + + try: + statement, tok = self._parse_statement() + except StopIteration: + statement, tok = None, None + s = [] if statement is None else [statement] + f = pr.ForFlow(self.module, s, first_pos, set_stmt) + self._scope = self._scope.add_statement(f) + if tok is None or tok.string != ':': + debug.warning('syntax err, for flow started @%s', first_pos[0]) + elif tok_str in ['if', 'while', 'try', 'with'] + extended_flow: + added_breaks = [] + command = tok_str + if command in ('except', 'with'): + added_breaks.append(',') + # multiple inputs because of with + inputs = [] + first = True + while first or command == 'with' and tok.string not in (':', '\n', '\r\n'): + statement, tok = \ + self._parse_statement(added_breaks=added_breaks) + if command == 'except' and tok.string == ',': + # the except statement defines a var + # this is only true for python 2 + n, tok = self._parse_dot_name() + if n: + n.parent = statement + statement.as_names.append(n) + if statement: + inputs.append(statement) + first = False + + f = pr.Flow(self.module, command, inputs, first_pos) + if command in extended_flow: + # the last statement has to be another part of + # the flow statement, because a dedent releases the + # main scope, so just take the last statement. + try: + s = self._scope.statements[-1].set_next(f) + except (AttributeError, IndexError): + # If set_next doesn't exist, just add it. + s = self._scope.add_statement(f) + else: + s = self._scope.add_statement(f) + self._scope = s + if tok.string != ':': + debug.warning('syntax err, flow started @%s', tok.start_pos[0]) + # returns + elif tok_str in ('return', 'yield'): + s = tok.start_pos + self.freshscope = False + # add returns to the scope + func = self._scope.get_parent_until(pr.Function) + if tok_str == 'yield': + func.is_generator = True + + stmt, tok = self._parse_statement() + if stmt is not None: + stmt.parent = use_as_parent_scope + try: + func.statements.append(pr.KeywordStatement(tok_str, s, + use_as_parent_scope, stmt)) + func.returns.append(stmt) + # start_pos is the one of the return statement + stmt.start_pos = s + except AttributeError: + debug.warning('return in non-function') + elif tok_str == 'assert': + stmt, tok = self._parse_statement() + if stmt is not None: + stmt.parent = use_as_parent_scope + self._scope.statements.append(stmt) + self._scope.asserts.append(stmt) + elif tok_str in STATEMENT_KEYWORDS: + stmt, _ = self._parse_statement() + kw = pr.KeywordStatement(tok_str, tok.start_pos, + use_as_parent_scope, stmt) + self._scope.add_statement(kw) + if stmt is not None and tok_str == 'global': + for t in stmt._token_list: + if isinstance(t, pr.Name): + # Add the global to the top module, it counts there. + self.module.add_global(t) + # decorator + elif tok_str == '@': + stmt, tok = self._parse_statement() + if stmt is not None: + self._decorators.append(stmt) + elif tok_str == 'pass': + continue + # default + elif token_type in (tokenize.NAME, tokenize.STRING, + tokenize.NUMBER, tokenize.OP) \ + or tok_str in statement_toks: + # this is the main part - a name can be a function or a + # normal var, which can follow anything. but this is done + # by the statement parser. + stmt, tok = self._parse_statement(self._gen.current) + if stmt: + self._scope.add_statement(stmt) + self.freshscope = False + else: + if token_type not in (tokenize.COMMENT, tokenize.NEWLINE, tokenize.ENDMARKER): + debug.warning('Token not used: %s %s %s', tok_str, + tokenize.tok_name[token_type], first_pos) + continue + self.no_docstr = False + + +class PushBackTokenizer(object): + def __init__(self, tokenizer): + self._tokenizer = tokenizer + self._push_backs = [] + self.current = self.previous = tokenize.Token(None, '', (0, 0)) + + def push_last_back(self): + self._push_backs.append(self.current) + + def next(self): + """ Python 2 Compatibility """ + return self.__next__() + + def __next__(self): + if self._push_backs: + return self._push_backs.pop(0) + + previous = self.current + self.current = next(self._tokenizer) + self.previous = previous + return self.current + + def __iter__(self): + return self diff --git a/python/pw_multiScriptEditor/jedi/parser/fast.py b/python/pw_multiScriptEditor/jedi/parser/fast.py new file mode 100644 index 0000000..e8f79d9 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/parser/fast.py @@ -0,0 +1,466 @@ +""" +Basically a parser that is faster, because it tries to parse only parts and if +anything changes, it only reparses the changed parts. But because it's not +finished (and still not working as I want), I won't document it any further. +""" +import re + +from jedi._compatibility import use_metaclass, unicode +from jedi import settings +from jedi import common +from jedi.parser import Parser +from jedi.parser import representation as pr +from jedi.parser import tokenize +from jedi import cache +from jedi.parser.tokenize import (source_tokens, Token, FLOWS, NEWLINE, + COMMENT, ENDMARKER) + + +class Module(pr.Module, pr.Simple): + def __init__(self, parsers): + super(Module, self).__init__(self, (1, 0)) + self.parsers = parsers + self.reset_caches() + + self.start_pos = 1, 0 + self.end_pos = None, None + + def reset_caches(self): + """ This module does a whole lot of caching, because it uses different + parsers. """ + with common.ignored(AttributeError): + del self._used_names + + def __getattr__(self, name): + if name.startswith('__'): + raise AttributeError('Not available!') + else: + return getattr(self.parsers[0].module, name) + + @property + @cache.underscore_memoization + def used_names(self): + used_names = {} + for p in self.parsers: + for k, statement_set in p.module.used_names.items(): + if k in used_names: + used_names[k] |= statement_set + else: + used_names[k] = set(statement_set) + return used_names + + def __repr__(self): + return "" % (type(self).__name__, self.name, + self.start_pos[0], self.end_pos[0]) + + +class CachedFastParser(type): + """ This is a metaclass for caching `FastParser`. """ + def __call__(self, source, module_path=None): + if not settings.fast_parser: + return Parser(source, module_path) + + pi = cache.parser_cache.get(module_path, None) + if pi is None or isinstance(pi.parser, Parser): + p = super(CachedFastParser, self).__call__(source, module_path) + else: + p = pi.parser # pi is a `cache.ParserCacheItem` + p.update(source) + return p + + +class ParserNode(object): + def __init__(self, parser, code, parent=None): + self.parent = parent + + self.children = [] + # must be created before new things are added to it. + self.save_contents(parser, code) + + def save_contents(self, parser, code): + self.code = code + self.hash = hash(code) + self.parser = parser + + try: + # with fast_parser we have either 1 subscope or only statements. + self.content_scope = parser.module.subscopes[0] + except IndexError: + self.content_scope = parser.module + + scope = self.content_scope + self._contents = {} + for c in pr.SCOPE_CONTENTS: + self._contents[c] = list(getattr(scope, c)) + self._is_generator = scope.is_generator + + self.old_children = self.children + self.children = [] + + def reset_contents(self): + scope = self.content_scope + for key, c in self._contents.items(): + setattr(scope, key, list(c)) + scope.is_generator = self._is_generator + + if self.parent is None: + # Global vars of the first one can be deleted, in the global scope + # they make no sense. + self.parser.module.global_vars = [] + + for c in self.children: + c.reset_contents() + + def parent_until_indent(self, indent=None): + if indent is None or self.indent >= indent and self.parent: + self.old_children = [] + if self.parent is not None: + return self.parent.parent_until_indent(indent) + return self + + @property + def indent(self): + if not self.parent: + return 0 + module = self.parser.module + try: + el = module.subscopes[0] + except IndexError: + try: + el = module.statements[0] + except IndexError: + try: + el = module.imports[0] + except IndexError: + try: + el = [r for r in module.returns if r is not None][0] + except IndexError: + return self.parent.indent + 1 + return el.start_pos[1] + + def _set_items(self, parser, set_parent=False): + # insert parser objects into current structure + scope = self.content_scope + for c in pr.SCOPE_CONTENTS: + content = getattr(scope, c) + items = getattr(parser.module, c) + if set_parent: + for i in items: + if i is None: + continue # happens with empty returns + i.parent = scope.use_as_parent + if isinstance(i, (pr.Function, pr.Class)): + for d in i.decorators: + d.parent = scope.use_as_parent + content += items + + # global_vars + cur = self + while cur.parent is not None: + cur = cur.parent + cur.parser.module.global_vars += parser.module.global_vars + + scope.is_generator |= parser.module.is_generator + + def add_node(self, node, set_parent=False): + """Adding a node means adding a node that was already added earlier""" + self.children.append(node) + self._set_items(node.parser, set_parent=set_parent) + node.old_children = node.children # TODO potential memory leak? + node.children = [] + + scope = self.content_scope + while scope is not None: + #print('x',scope) + if not isinstance(scope, pr.SubModule): + # TODO This seems like a strange thing. Check again. + scope.end_pos = node.content_scope.end_pos + scope = scope.parent + return node + + def add_parser(self, parser, code): + return self.add_node(ParserNode(parser, code, self), True) + + +class FastParser(use_metaclass(CachedFastParser)): + + _keyword_re = re.compile('^[ \t]*(def|class|@|%s)' % '|'.join(tokenize.FLOWS)) + + def __init__(self, code, module_path=None): + # set values like `pr.Module`. + self.module_path = module_path + + self.current_node = None + self.parsers = [] + self.module = Module(self.parsers) + self.reset_caches() + + try: + self._parse(code) + except: + # FastParser is cached, be careful with exceptions + del self.parsers[:] + raise + + def update(self, code): + self.reset_caches() + + try: + self._parse(code) + except: + # FastParser is cached, be careful with exceptions + del self.parsers[:] + raise + + def _split_parts(self, code): + """ + Split the code into different parts. This makes it possible to parse + each part seperately and therefore cache parts of the file and not + everything. + """ + def gen_part(): + text = '\n'.join(current_lines) + del current_lines[:] + return text + + # Split only new lines. Distinction between \r\n is the tokenizer's + # job. + self._lines = code.split('\n') + current_lines = [] + is_decorator = False + current_indent = 0 + old_indent = 0 + new_indent = False + in_flow = False + # All things within flows are simply being ignored. + for l in self._lines: + # check for dedents + s = l.lstrip('\t ') + indent = len(l) - len(s) + if not s or s[0] in ('#', '\r'): + current_lines.append(l) # just ignore comments and blank lines + continue + + if indent < current_indent: # -> dedent + current_indent = indent + new_indent = False + if not in_flow or indent < old_indent: + if current_lines: + yield gen_part() + in_flow = False + elif new_indent: + current_indent = indent + new_indent = False + + # Check lines for functions/classes and split the code there. + if not in_flow: + m = self._keyword_re.match(l) + if m: + in_flow = m.group(1) in tokenize.FLOWS + if not is_decorator and not in_flow: + if current_lines: + yield gen_part() + is_decorator = '@' == m.group(1) + if not is_decorator: + old_indent = current_indent + current_indent += 1 # it must be higher + new_indent = True + elif is_decorator: + is_decorator = False + + current_lines.append(l) + if current_lines: + yield gen_part() + + def _parse(self, code): + """ :type code: str """ + def empty_parser(): + new, temp = self._get_parser(unicode(''), unicode(''), 0, [], False) + return new + + del self.parsers[:] + + line_offset = 0 + start = 0 + p = None + is_first = True + for code_part in self._split_parts(code): + if is_first or line_offset >= p.module.end_pos[0]: + indent = len(code_part) - len(code_part.lstrip('\t ')) + if is_first and self.current_node is not None: + nodes = [self.current_node] + else: + nodes = [] + if self.current_node is not None: + self.current_node = \ + self.current_node.parent_until_indent(indent) + nodes += self.current_node.old_children + + # check if code_part has already been parsed + # print '#'*45,line_offset, p and p.module.end_pos, '\n', code_part + p, node = self._get_parser(code_part, code[start:], + line_offset, nodes, not is_first) + + # The actual used code_part is different from the given code + # part, because of docstrings for example there's a chance that + # splits are wrong. + used_lines = self._lines[line_offset:p.module.end_pos[0]] + code_part_actually_used = '\n'.join(used_lines) + + if is_first and p.module.subscopes: + # special case, we cannot use a function subscope as a + # base scope, subscopes would save all the other contents + new = empty_parser() + if self.current_node is None: + self.current_node = ParserNode(new, '') + else: + self.current_node.save_contents(new, '') + self.parsers.append(new) + is_first = False + + if is_first: + if self.current_node is None: + self.current_node = ParserNode(p, code_part_actually_used) + else: + self.current_node.save_contents(p, code_part_actually_used) + else: + if node is None: + self.current_node = \ + self.current_node.add_parser(p, code_part_actually_used) + else: + self.current_node = self.current_node.add_node(node) + + self.parsers.append(p) + + is_first = False + #else: + #print '#'*45, line_offset, p.module.end_pos, 'theheck\n', repr(code_part) + + line_offset += code_part.count('\n') + 1 + start += len(code_part) + 1 # +1 for newline + + if self.parsers: + self.current_node = self.current_node.parent_until_indent() + else: + self.parsers.append(empty_parser()) + + self.module.end_pos = self.parsers[-1].module.end_pos + + # print(self.parsers[0].module.get_code()) + + def _get_parser(self, code, parser_code, line_offset, nodes, no_docstr): + h = hash(code) + for index, node in enumerate(nodes): + if node.hash != h or node.code != code: + continue + + if node != self.current_node: + offset = int(nodes[0] == self.current_node) + self.current_node.old_children.pop(index - offset) + p = node.parser + m = p.module + m.line_offset += line_offset + 1 - m.start_pos[0] + break + else: + tokenizer = FastTokenizer(parser_code, line_offset) + p = Parser(parser_code, self.module_path, tokenizer=tokenizer, + top_module=self.module, no_docstr=no_docstr) + p.module.parent = self.module + node = None + + return p, node + + def reset_caches(self): + self.module.reset_caches() + if self.current_node is not None: + self.current_node.reset_contents() + + +class FastTokenizer(object): + """ + Breaks when certain conditions are met, i.e. a new function or class opens. + """ + def __init__(self, source, line_offset=0): + self.source = source + self.gen = source_tokens(source, line_offset) + self.closed = False + + # fast parser options + self.current = self.previous = Token(None, '', (0, 0)) + self.in_flow = False + self.new_indent = False + self.parser_indent = self.old_parser_indent = 0 + self.is_decorator = False + self.first_stmt = True + self.parentheses_level = 0 + + def next(self): + """ Python 2 Compatibility """ + return self.__next__() + + def __next__(self): + if self.closed: + raise common.MultiLevelStopIteration() + + current = next(self.gen) + tok_type = current.type + tok_str = current.string + if tok_type == ENDMARKER: + raise common.MultiLevelStopIteration() + + self.previous = self.current + self.current = current + + # this is exactly the same check as in fast_parser, but this time with + # tokenize and therefore precise. + breaks = ['def', 'class', '@'] + + def close(): + if not self.first_stmt: + self.closed = True + raise common.MultiLevelStopIteration() + + # Ignore comments/newlines, irrelevant for indentation. + if self.previous.type in (None, NEWLINE) \ + and tok_type not in (COMMENT, NEWLINE): + # print c, tok_name[c[0]] + indent = current.start_pos[1] + if self.parentheses_level: + # parentheses ignore the indentation rules. + pass + elif indent < self.parser_indent: # -> dedent + self.parser_indent = indent + self.new_indent = False + if not self.in_flow or indent < self.old_parser_indent: + close() + + self.in_flow = False + elif self.new_indent: + self.parser_indent = indent + self.new_indent = False + + if not self.in_flow: + if tok_str in FLOWS or tok_str in breaks: + self.in_flow = tok_str in FLOWS + if not self.is_decorator and not self.in_flow: + close() + + self.is_decorator = '@' == tok_str + if not self.is_decorator: + self.old_parser_indent = self.parser_indent + self.parser_indent += 1 # new scope: must be higher + self.new_indent = True + + if tok_str != '@': + if self.first_stmt and not self.new_indent: + self.parser_indent = indent + self.first_stmt = False + + # Ignore closing parentheses, because they are all + # irrelevant for the indentation. + + if tok_str in '([{': + self.parentheses_level += 1 + elif tok_str in ')]}': + self.parentheses_level = max(self.parentheses_level - 1, 0) + return current diff --git a/python/pw_multiScriptEditor/jedi/parser/representation.py b/python/pw_multiScriptEditor/jedi/parser/representation.py new file mode 100644 index 0000000..b85f2fb --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/parser/representation.py @@ -0,0 +1,1592 @@ +""" +If you know what an abstract syntax tree (ast) is, you'll see that this module +is pretty much that. The classes represent syntax elements: ``Import``, +``Function``. + +A very central class is ``Scope``. It is not used directly by the parser, but +inherited. It's used by ``Function``, ``Class``, ``Flow``, etc. A ``Scope`` may +have ``subscopes``, ``imports`` and ``statements``. The entire parser is based +on scopes, because they also stand for indentation. + +One special thing: + +``Array`` values are statements. But if you think about it, this makes sense. +``[1, 2+33]`` for example would be an Array with two ``Statement`` inside. This +is the easiest way to write a parser. The same behaviour applies to ``Param``, +which is being used in a function definition. + +The easiest way to play with this module is to use :class:`parsing.Parser`. +:attr:`parsing.Parser.module` holds an instance of :class:`SubModule`: + +>>> from jedi._compatibility import u +>>> from jedi.parser import Parser +>>> parser = Parser(u('import os'), 'example.py') +>>> submodule = parser.module +>>> submodule + + +Any subclasses of :class:`Scope`, including :class:`SubModule` has +attribute :attr:`imports `. This attribute has import +statements in this scope. Check this out: + +>>> submodule.imports +[] + +See also :attr:`Scope.subscopes` and :attr:`Scope.statements`. +""" +import os +import re +from inspect import cleandoc + +from jedi._compatibility import (next, Python3Method, encoding, unicode, + is_py3, u, literal_eval) +from jedi import common +from jedi import debug +from jedi import cache +from jedi.parser import tokenize + + +SCOPE_CONTENTS = 'asserts', 'subscopes', 'imports', 'statements', 'returns' + + +def filter_after_position(names, position): + """ + Removes all names after a certain position. If position is None, just + returns the names list. + """ + if position is None: + return names + + names_new = [] + for n in names: + if n.start_pos[0] is not None and n.start_pos < position: + names_new.append(n) + return names_new + + +class GetCodeState(object): + """A helper class for passing the state of get_code in a thread-safe + manner.""" + __slots__ = ("last_pos",) + + def __init__(self): + self.last_pos = (0, 0) + + +class DocstringMixin(object): + __slots__ = () + + def add_docstr(self, token): + """ Clean up a docstring """ + self._doc_token = token + + @property + def raw_doc(self): + """ Returns a cleaned version of the docstring token. """ + try: + # Returns a literal cleaned version of the ``Token``. + cleaned = cleandoc(literal_eval(self._doc_token.string)) + # Since we want the docstr output to be always unicode, just force + # it. + if is_py3 or isinstance(cleaned, unicode): + return cleaned + else: + return unicode(cleaned, 'UTF-8', 'replace') + except AttributeError: + return u('') + + +class Base(object): + """ + This is just here to have an isinstance check, which is also used on + evaluate classes. But since they have sometimes a special type of + delegation, it is important for those classes to override this method. + + I know that there is a chance to do such things with __instancecheck__, but + since Python 2.5 doesn't support it, I decided to do it this way. + """ + __slots__ = () + + def isinstance(self, *cls): + return isinstance(self, cls) + + @property + def newline(self): + """Returns the newline type for the current code.""" + #TODO: we need newline detection + return "\n" + + @property + def whitespace(self): + """Returns the whitespace type for the current code: tab or space.""" + #TODO: we need tab detection + return " " + + @Python3Method + def get_parent_until(self, classes=(), reverse=False, + include_current=True): + """ + Searches the parent "chain" until the object is an instance of + classes. If classes is empty return the last parent in the chain + (is without a parent). + """ + if type(classes) not in (tuple, list): + classes = (classes,) + scope = self if include_current else self.parent + while scope.parent is not None: + if classes and reverse != scope.isinstance(*classes): + break + scope = scope.parent + return scope + + def is_callable(self): + """ + By default parser objects are not callable, we make them callable by + the ``evaluate.representation`` objects. + """ + return False + + def space(self, from_pos, to_pos): + """Return the space between two tokens""" + linecount = to_pos[0] - from_pos[0] + if linecount == 0: + return self.whitespace * (to_pos[1] - from_pos[1]) + else: + return "%s%s" % ( + self.newline * linecount, + self.whitespace * to_pos[1], + ) + + +class Simple(Base): + """ + The super class for Scope, Import, Name and Statement. Every object in + the parser tree inherits from this class. + """ + __slots__ = ('parent', '_sub_module', '_start_pos', 'use_as_parent', + '_end_pos') + + def __init__(self, module, start_pos, end_pos=(None, None)): + """ + Initialize :class:`Simple`. + + :type module: :class:`SubModule` + :param module: The module in which this Python object locates. + :type start_pos: 2-tuple of int + :param start_pos: Position (line, column) of the Statement. + :type end_pos: 2-tuple of int + :param end_pos: Same as `start_pos`. + """ + self._sub_module = module + self._start_pos = start_pos + self._end_pos = end_pos + + self.parent = None + # use this attribute if parent should be something else than self. + self.use_as_parent = self + + @property + def start_pos(self): + return self._sub_module.line_offset + self._start_pos[0], \ + self._start_pos[1] + + @start_pos.setter + def start_pos(self, value): + self._start_pos = value + + @property + def end_pos(self): + if None in self._end_pos: + return self._end_pos + return self._sub_module.line_offset + self._end_pos[0], \ + self._end_pos[1] + + @end_pos.setter + def end_pos(self, value): + self._end_pos = value + + def __repr__(self): + code = self.get_code().replace('\n', ' ') + if not is_py3: + code = code.encode(encoding, 'replace') + return "<%s: %s@%s,%s>" % \ + (type(self).__name__, code, self.start_pos[0], self.start_pos[1]) + + def is_scope(self): + return False + + +class IsScope(Base): + __slots__ = () + + def is_scope(self): + return True + + +class Scope(IsScope, Simple, DocstringMixin): + """ + Super class for the parser tree, which represents the state of a python + text file. + A Scope manages and owns its subscopes, which are classes and functions, as + well as variables and imports. It is used to access the structure of python + files. + + :param start_pos: The position (line and column) of the scope. + :type start_pos: tuple(int, int) + """ + __slots__ = ('subscopes', 'imports', 'statements', '_doc_token', 'asserts', + 'returns', 'is_generator') + + def __init__(self, module, start_pos): + super(Scope, self).__init__(module, start_pos) + self.subscopes = [] + self.imports = [] + self.statements = [] + self._doc_token = None + self.asserts = [] + # Needed here for fast_parser, because the fast_parser splits and + # returns will be in "normal" modules. + self.returns = [] + self.is_generator = False + + def add_scope(self, sub, decorators): + sub.parent = self.use_as_parent + sub.decorators = decorators + for d in decorators: + # the parent is the same, because the decorator has not the scope + # of the function + d.parent = self.use_as_parent + self.subscopes.append(sub) + return sub + + def add_statement(self, stmt): + """ + Used to add a Statement or a Scope. + A statement would be a normal command (Statement) or a Scope (Flow). + """ + stmt.parent = self.use_as_parent + self.statements.append(stmt) + return stmt + + def add_import(self, imp): + self.imports.append(imp) + imp.parent = self.use_as_parent + + def get_imports(self): + """ Gets also the imports within flow statements """ + i = [] + self.imports + for s in self.statements: + if isinstance(s, Scope): + i += s.get_imports() + return i + + def get_code2(self, state=GetCodeState()): + string = [] + return "".join(string) + + def get_code(self, first_indent=False, indention=' '): + """ + :return: Returns the code of the current scope. + :rtype: str + """ + string = "" + if self._doc_token is not None: + string += '"""' + self.raw_doc + '"""\n' + + objs = self.subscopes + self.imports + self.statements + self.returns + for obj in sorted(objs, key=lambda x: x.start_pos): + if isinstance(obj, Scope): + string += obj.get_code(first_indent=True, indention=indention) + else: + if obj in self.returns and not isinstance(self, Lambda): + string += 'yield ' if self.is_generator else 'return ' + string += obj.get_code() + + if first_indent: + string = common.indent_block(string, indention=indention) + return string + + @Python3Method + def get_defined_names(self): + """ + Get all defined names in this scope. + + >>> from jedi._compatibility import u + >>> from jedi.parser import Parser + >>> parser = Parser(u(''' + ... a = x + ... b = y + ... b.c = z + ... ''')) + >>> parser.module.get_defined_names() + [, , ] + """ + n = [] + for stmt in self.statements: + try: + n += stmt.get_defined_names(True) + except TypeError: + n += stmt.get_defined_names() + + # function and class names + n += [s.name for s in self.subscopes] + + for i in self.imports: + if not i.star: + n += i.get_defined_names() + return n + + @Python3Method + def get_statement_for_position(self, pos, include_imports=False): + checks = self.statements + self.asserts + if include_imports: + checks += self.imports + if self.isinstance(Function): + checks += self.params + self.decorators + checks += [r for r in self.returns if r is not None] + if self.isinstance(Flow): + checks += self.inputs + if self.isinstance(ForFlow) and self.set_stmt is not None: + checks.append(self.set_stmt) + + for s in checks: + if isinstance(s, Flow): + p = s.get_statement_for_position(pos, include_imports) + while s.next and not p: + s = s.next + p = s.get_statement_for_position(pos, include_imports) + if p: + return p + elif s.start_pos <= pos <= s.end_pos: + return s + + for s in self.subscopes: + if s.start_pos <= pos <= s.end_pos: + p = s.get_statement_for_position(pos, include_imports) + if p: + return p + + def __repr__(self): + try: + name = self.path + except AttributeError: + try: + name = self.name + except AttributeError: + name = self.command + + return "<%s: %s@%s-%s>" % (type(self).__name__, name, + self.start_pos[0], self.end_pos[0]) + + def walk(self): + yield self + for s in self.subscopes: + for scope in s.walk(): + yield scope + + for r in self.statements: + while isinstance(r, Flow): + for scope in r.walk(): + yield scope + r = r.next + + +class Module(IsScope): + """ + For isinstance checks. fast_parser.Module also inherits from this. + """ + + +class SubModule(Scope, Module): + """ + The top scope, which is always a module. + Depending on the underlying parser this may be a full module or just a part + of a module. + """ + __slots__ = ('path', 'global_vars', 'used_names', 'temp_used_names', + 'line_offset', 'use_as_parent') + + def __init__(self, path, start_pos=(1, 0), top_module=None): + """ + Initialize :class:`SubModule`. + + :type path: str + :arg path: File path to this module. + + .. todo:: Document `top_module`. + """ + super(SubModule, self).__init__(self, start_pos) + self.path = path + self.global_vars = [] + self.used_names = {} + self.temp_used_names = [] + # this may be changed depending on fast_parser + self.line_offset = 0 + + self.use_as_parent = top_module or self + + def add_global(self, name): + """ + Global means in these context a function (subscope) which has a global + statement. + This is only relevant for the top scope. + + :param name: The name of the global. + :type name: Name + """ + # set no parent here, because globals are not defined in this scope. + self.global_vars.append(name) + + def get_defined_names(self): + n = super(SubModule, self).get_defined_names() + n += self.global_vars + return n + + @property + @cache.underscore_memoization + def name(self): + """ This is used for the goto functions. """ + if self.path is None: + string = '' # no path -> empty name + else: + sep = (re.escape(os.path.sep),) * 2 + r = re.search(r'([^%s]*?)(%s__init__)?(\.py|\.so)?$' % sep, self.path) + # remove PEP 3149 names + string = re.sub('\.[a-z]+-\d{2}[mud]{0,3}$', '', r.group(1)) + # positions are not real therefore choose (0, 0) + names = [(string, (0, 0))] + return Name(self, names, (0, 0), (0, 0), self.use_as_parent) + + @property + def has_explicit_absolute_import(self): + """ + Checks if imports in this module are explicitly absolute, i.e. there + is a ``__future__`` import. + """ + for imp in self.imports: + if imp.from_ns is None or imp.namespace is None: + continue + + namespace, feature = imp.from_ns.names[0], imp.namespace.names[0] + if unicode(namespace) == "__future__" and unicode(feature) == "absolute_import": + return True + + return False + + +class Class(Scope): + """ + Used to store the parsed contents of a python class. + + :param name: The Class name. + :type name: str + :param supers: The super classes of a Class. + :type supers: list + :param start_pos: The start position (line, column) of the class. + :type start_pos: tuple(int, int) + """ + __slots__ = ('name', 'supers', 'decorators') + + def __init__(self, module, name, supers, start_pos): + super(Class, self).__init__(module, start_pos) + self.name = name + name.parent = self.use_as_parent + self.supers = supers + for s in self.supers: + s.parent = self.use_as_parent + self.decorators = [] + + def get_code(self, first_indent=False, indention=' '): + string = "\n".join('@' + stmt.get_code() for stmt in self.decorators) + string += 'class %s' % (self.name) + if len(self.supers) > 0: + sup = ', '.join(stmt.get_code(False) for stmt in self.supers) + string += '(%s)' % sup + string += ':\n' + string += super(Class, self).get_code(True, indention) + return string + + @property + def doc(self): + """ + Return a document string including call signature of __init__. + """ + docstr = "" + if self._doc_token is not None: + docstr = self.raw_doc + for sub in self.subscopes: + if unicode(sub.name.names[-1]) == '__init__': + return '%s\n\n%s' % ( + sub.get_call_signature(funcname=self.name.names[-1]), docstr) + return docstr + + def scope_names_generator(self, position=None): + yield self, filter_after_position(self.get_defined_names(), position) + + +class Function(Scope): + """ + Used to store the parsed contents of a python function. + + :param name: The Function name. + :type name: str + :param params: The parameters (Statement) of a Function. + :type params: list + :param start_pos: The start position (line, column) the Function. + :type start_pos: tuple(int, int) + """ + __slots__ = ('name', 'params', 'decorators', 'listeners', 'annotation') + + def __init__(self, module, name, params, start_pos, annotation): + super(Function, self).__init__(module, start_pos) + self.name = name + if name is not None: + name.parent = self.use_as_parent + self.params = params + for p in params: + p.parent = self.use_as_parent + p.parent_function = self.use_as_parent + self.decorators = [] + self.listeners = set() # not used here, but in evaluation. + + if annotation is not None: + annotation.parent = self.use_as_parent + self.annotation = annotation + + def get_code(self, first_indent=False, indention=' '): + string = "\n".join('@' + stmt.get_code() for stmt in self.decorators) + params = ', '.join([stmt.get_code(False) for stmt in self.params]) + string += "def %s(%s):\n" % (self.name, params) + string += super(Function, self).get_code(True, indention) + return string + + def get_defined_names(self): + n = super(Function, self).get_defined_names() + for p in self.params: + try: + n.append(p.get_name()) + except IndexError: + debug.warning("multiple names in param %s", n) + return n + + def scope_names_generator(self, position=None): + yield self, filter_after_position(self.get_defined_names(), position) + + def get_call_signature(self, width=72, funcname=None): + """ + Generate call signature of this function. + + :param width: Fold lines if a line is longer than this value. + :type width: int + :arg funcname: Override function name when given. + :type funcname: str + + :rtype: str + """ + l = unicode(funcname or self.name.names[-1]) + '(' + lines = [] + for (i, p) in enumerate(self.params): + code = p.get_code(False) + if i != len(self.params) - 1: + code += ', ' + if len(l + code) > width: + lines.append(l[:-1] if l[-1] == ' ' else l) + l = code + else: + l += code + if l: + lines.append(l) + lines[-1] += ')' + return '\n'.join(lines) + + @property + def doc(self): + """ Return a document string including call signature. """ + docstr = "" + if self._doc_token is not None: + docstr = self.raw_doc + return '%s\n\n%s' % (self.get_call_signature(), docstr) + + +class Lambda(Function): + def __init__(self, module, params, start_pos, parent): + super(Lambda, self).__init__(module, None, params, start_pos, None) + self.parent = parent + + def get_code(self, first_indent=False, indention=' '): + params = ','.join([stmt.get_code() for stmt in self.params]) + string = "lambda %s: " % params + return string + super(Function, self).get_code(indention=indention) + + def __repr__(self): + return "<%s @%s (%s-%s)>" % (type(self).__name__, self.start_pos[0], + self.start_pos[1], self.end_pos[1]) + + +class Flow(Scope): + """ + Used to describe programming structure - flow statements, + which indent code, but are not classes or functions: + + - for + - while + - if + - try + - with + + Therefore statements like else, except and finally are also here, + they are now saved in the root flow elements, but in the next variable. + + :param command: The flow command, if, while, else, etc. + :type command: str + :param inputs: The initializations of a flow -> while 'statement'. + :type inputs: list(Statement) + :param start_pos: Position (line, column) of the Flow statement. + :type start_pos: tuple(int, int) + """ + __slots__ = ('next', 'command', '_parent', 'inputs', 'set_vars') + + def __init__(self, module, command, inputs, start_pos): + self.next = None + self.command = command + super(Flow, self).__init__(module, start_pos) + self._parent = None + # These have to be statements, because of with, which takes multiple. + self.inputs = inputs + for s in inputs: + s.parent = self.use_as_parent + self.set_vars = [] + + @property + def parent(self): + return self._parent + + @parent.setter + def parent(self, value): + self._parent = value + try: + self.next.parent = value + except AttributeError: + return + + def get_code(self, first_indent=False, indention=' '): + stmts = [] + for s in self.inputs: + stmts.append(s.get_code(new_line=False)) + stmt = ', '.join(stmts) + string = "%s %s:\n" % (self.command, stmt) + string += super(Flow, self).get_code(True, indention) + if self.next: + string += self.next.get_code() + return string + + def get_defined_names(self, is_internal_call=False): + """ + Get the names for the flow. This includes also a call to the super + class. + + :param is_internal_call: defines an option for internal files to crawl + through this class. Normally it will just call its superiors, to + generate the output. + """ + if is_internal_call: + n = list(self.set_vars) + for s in self.inputs: + n += s.get_defined_names() + if self.next: + n += self.next.get_defined_names(is_internal_call) + n += super(Flow, self).get_defined_names() + return n + else: + return self.get_parent_until((Class, Function)).get_defined_names() + + def get_imports(self): + i = super(Flow, self).get_imports() + if self.next: + i += self.next.get_imports() + return i + + def set_next(self, next): + """Set the next element in the flow, those are else, except, etc.""" + if self.next: + return self.next.set_next(next) + else: + self.next = next + self.next.parent = self.parent + return next + + def scope_names_generator(self, position=None): + # For `with` and `for`. + yield self, filter_after_position(self.get_defined_names(), position) + + +class ForFlow(Flow): + """ + Used for the for loop, because there are two statement parts. + """ + def __init__(self, module, inputs, start_pos, set_stmt): + super(ForFlow, self).__init__(module, 'for', inputs, start_pos) + + self.set_stmt = set_stmt + + if set_stmt is not None: + set_stmt.parent = self.use_as_parent + self.set_vars = set_stmt.get_defined_names() + + for s in self.set_vars: + s.parent.parent = self.use_as_parent + s.parent = self.use_as_parent + + def get_code(self, first_indent=False, indention=" " * 4): + vars = ",".join(x.get_code() for x in self.set_vars) + stmts = [] + for s in self.inputs: + stmts.append(s.get_code(new_line=False)) + stmt = ', '.join(stmts) + s = "for %s in %s:\n" % (vars, stmt) + return s + super(Flow, self).get_code(True, indention) + + +class Import(Simple): + """ + Stores the imports of any Scopes. + + :param start_pos: Position (line, column) of the Import. + :type start_pos: tuple(int, int) + :param namespace: The import, can be empty if a star is given + :type namespace: Name + :param alias: The alias of a namespace(valid in the current namespace). + :type alias: Name + :param from_ns: Like the namespace, can be equally used. + :type from_ns: Name + :param star: If a star is used -> from time import *. + :type star: bool + :param defunct: An Import is valid or not. + :type defunct: bool + """ + def __init__(self, module, start_pos, end_pos, namespace, alias=None, + from_ns=None, star=False, relative_count=0, defunct=False): + super(Import, self).__init__(module, start_pos, end_pos) + + self.namespace = namespace + self.alias = alias + self.from_ns = from_ns + for n in namespace, alias, from_ns: + if n: + n.parent = self.use_as_parent + + self.star = star + self.relative_count = relative_count + self.defunct = defunct + + def get_code(self, new_line=True): + # in case one of the names is None + alias = self.alias or '' + namespace = self.namespace or '' + from_ns = self.from_ns or '' + + if self.alias: + ns_str = "%s as %s" % (namespace, alias) + else: + ns_str = unicode(namespace) + + nl = '\n' if new_line else '' + if self.from_ns or self.relative_count: + if self.star: + ns_str = '*' + dots = '.' * self.relative_count + return "from %s%s import %s%s" % (dots, from_ns, ns_str, nl) + else: + return "import %s%s" % (ns_str, nl) + + def get_defined_names(self): + if self.defunct: + return [] + if self.star: + return [self] + if self.alias: + return [self.alias] + if len(self.namespace) > 1: + o = self.namespace + n = Name(self._sub_module, [(unicode(o.names[0]), o.start_pos)], + o.start_pos, o.end_pos, parent=o.parent) + return [n] + else: + return [self.namespace] + + def get_all_import_names(self): + n = [] + if self.from_ns: + n.append(self.from_ns) + if self.namespace: + n.append(self.namespace) + if self.alias: + n.append(self.alias) + return n + + def is_nested(self): + """ + This checks for the special case of nested imports, without aliases and + from statement:: + + import foo.bar + """ + return not self.alias and not self.from_ns and self.namespace is not None \ + and len(self.namespace.names) > 1 + + +class KeywordStatement(Base): + """ + For the following statements: `assert`, `del`, `global`, `nonlocal`, + `raise`, `return`, `yield`, `pass`, `continue`, `break`, `return`, `yield`. + """ + __slots__ = ('name', 'start_pos', 'stmt', 'parent') + + def __init__(self, name, start_pos, parent, stmt=None): + self.name = name + self.start_pos = start_pos + self.stmt = stmt + self.parent = parent + + if stmt is not None: + stmt.parent = self + + def is_scope(self): + return False + + def __repr__(self): + return "<%s(%s): %s>" % (type(self).__name__, self.name, self.stmt) + + def get_code(self): + if self.stmt is None: + return "%s\n" % self.name + else: + return '%s %s\n' % (self.name, self.stmt) + + def get_defined_names(self): + return [] + + @property + def end_pos(self): + try: + return self.stmt.end_pos + except AttributeError: + return self.start_pos[0], self.start_pos[1] + len(self.name) + + +class Statement(Simple, DocstringMixin): + """ + This is the class for all the possible statements. Which means, this class + stores pretty much all the Python code, except functions, classes, imports, + and flow functions like if, for, etc. + + :type token_list: list + :param token_list: + List of tokens or names. Each element is either an instance + of :class:`Name` or a tuple of token type value (e.g., + :data:`tokenize.NUMBER`), token string (e.g., ``'='``), and + start position (e.g., ``(1, 0)``). + :type start_pos: 2-tuple of int + :param start_pos: Position (line, column) of the Statement. + """ + __slots__ = ('_token_list', '_set_vars', 'as_names', '_expression_list', + '_assignment_details', '_names_are_set_vars', '_doc_token') + + def __init__(self, module, token_list, start_pos, end_pos, parent=None, + as_names=(), names_are_set_vars=False, set_name_parents=True): + super(Statement, self).__init__(module, start_pos, end_pos) + self._token_list = token_list + self._names_are_set_vars = names_are_set_vars + if set_name_parents: + for t in token_list: + if isinstance(t, Name): + t.parent = self.use_as_parent + for n in as_names: + n.parent = self.use_as_parent + self.parent = parent + self._doc_token = None + self._set_vars = None + self.as_names = list(as_names) + + # cache + self._assignment_details = [] + + @property + def end_pos(self): + return self._token_list[-1].end_pos + + def get_code(self, new_line=True): + def assemble(command_list, assignment=None): + pieces = [c.get_code() if isinstance(c, Simple) else c.string if +isinstance(c, tokenize.Token) else unicode(c) + for c in command_list] + if assignment is None: + return ''.join(pieces) + return '%s %s ' % (''.join(pieces), assignment) + + code = ''.join(assemble(*a) for a in self.assignment_details) + code += assemble(self.expression_list()) + if self._doc_token: + code += '\n"""%s"""' % self.raw_doc + + if new_line: + return code + '\n' + else: + return code + + def get_defined_names(self): + """ Get the names for the statement. """ + if self._set_vars is None: + + def search_calls(calls): + for call in calls: + if isinstance(call, Array) and call.type != Array.DICT: + for stmt in call: + search_calls(stmt.expression_list()) + elif isinstance(call, Call): + c = call + # Check if there's an execution in it, if so this is + # not a set_var. + is_execution = False + while c: + if Array.is_type(c.execution, Array.TUPLE): + is_execution = True + c = c.next + if is_execution: + continue + self._set_vars.append(call.name) + + self._set_vars = [] + for calls, operation in self.assignment_details: + search_calls(calls) + + if not self.assignment_details and self._names_are_set_vars: + # In the case of Param, it's also a defining name without ``=`` + search_calls(self.expression_list()) + return self._set_vars + self.as_names + + def is_global(self): + p = self.parent + return isinstance(p, KeywordStatement) and p.name == 'global' + + @property + def assignment_details(self): + """ + Returns an array of tuples of the elements before the assignment. + + For example the following code:: + + x = (y, z) = 2, '' + + would result in ``[(Name(x), '='), (Array([Name(y), Name(z)]), '=')]``. + """ + # parse statement which creates the assignment details. + self.expression_list() + return self._assignment_details + + @cache.underscore_memoization + def expression_list(self): + """ + Parse a statement. + + This is not done in the main parser, because it might be slow and + most of the statements won't need this data anyway. This is something + 'like' a lazy execution. + + This is not really nice written, sorry for that. If you plan to replace + it and make it nicer, that would be cool :-) + """ + def is_assignment(tok): + return isinstance(tok, Operator) and tok.string.endswith('=') \ + and not tok.string in ('>=', '<=', '==', '!=') + + def parse_array(token_iterator, array_type, start_pos, add_el=None): + arr = Array(self._sub_module, start_pos, array_type, self) + if add_el is not None: + arr.add_statement(add_el) + old_stmt = add_el + + maybe_dict = array_type == Array.SET + break_tok = None + is_array = None + while True: + stmt, break_tok = parse_stmt(token_iterator, maybe_dict, + break_on_assignment=bool(add_el)) + if stmt is None: + break + else: + if break_tok == ',': + is_array = True + arr.add_statement(stmt, is_key=maybe_dict and break_tok == ':') + if break_tok in closing_brackets \ + or is_assignment(break_tok): + break + old_stmt = stmt + if arr.type == Array.TUPLE and len(arr) == 1 and not is_array: + arr.type = Array.NOARRAY + if not arr.values and maybe_dict: + # this is a really special case - empty brackets {} are + # always dictionaries and not sets. + arr.type = Array.DICT + + try: + arr.end_pos = (break_tok or stmt or old_stmt).end_pos + except UnboundLocalError: + # In case of something like `(def` + arr.end_pos = start_pos[0], start_pos[1] + 1 + return arr, break_tok + + def parse_stmt(token_iterator, maybe_dict=False, added_breaks=(), + break_on_assignment=False, stmt_class=Statement, + allow_comma=False): + token_list = [] + level = 0 + first = True + end_pos = None, None + tok = None + for tok in token_iterator: + end_pos = tok.end_pos + if first: + start_pos = tok.start_pos + first = False + + if isinstance(tok, Base): + # the token is a Name, which has already been parsed + if not level: + if isinstance(tok, ListComprehension): + # it's not possible to set it earlier + tok.parent = self + elif tok == 'lambda': + lambd, tok = parse_lambda(token_iterator) + if lambd is not None: + token_list.append(lambd) + elif tok == 'for': + list_comp, tok = parse_list_comp(token_iterator, token_list, + start_pos, tok.end_pos) + if list_comp is not None: + token_list = [list_comp] + + if tok in closing_brackets: + level -= 1 + elif tok in brackets.keys(): + level += 1 + + if level == -1 or level == 0 and ( + tok == ',' and not allow_comma + or tok in added_breaks + or maybe_dict and tok == ':' + or is_assignment(tok) and break_on_assignment): + end_pos = end_pos[0], end_pos[1] - 1 + break + + if tok is not None: # Can be None, because of lambda/for. + token_list.append(tok) + + if not token_list: + return None, tok + + statement = stmt_class(self._sub_module, token_list, start_pos, + end_pos, self.parent, set_name_parents=False) + return statement, tok + + def parse_lambda(token_iterator): + params = [] + start_pos = self.start_pos + while True: + param, tok = parse_stmt(token_iterator, added_breaks=[':'], + stmt_class=Param) + if param is None: + break + params.append(param) + if tok == ':': + break + if tok != ':': + return None, tok + + # Since Lambda is a Function scope, it needs Scope parents. + parent = self.get_parent_until(IsScope) + lambd = Lambda(self._sub_module, params, start_pos, parent) + + ret, tok = parse_stmt(token_iterator) + if ret is not None: + ret.parent = lambd + lambd.returns.append(ret) + lambd.end_pos = self.end_pos + return lambd, tok + + def parse_list_comp(token_iterator, token_list, start_pos, end_pos): + def parse_stmt_or_arr(token_iterator, added_breaks=(), + names_are_set_vars=False): + stmt, tok = parse_stmt(token_iterator, allow_comma=True, + added_breaks=added_breaks) + + if stmt is not None: + for t in stmt._token_list: + if isinstance(t, Name): + t.parent = stmt + stmt._names_are_set_vars = names_are_set_vars + return stmt, tok + + st = Statement(self._sub_module, token_list, start_pos, + end_pos, set_name_parents=False) + + middle, tok = parse_stmt_or_arr(token_iterator, ['in'], True) + if tok != 'in' or middle is None: + debug.warning('list comprehension middle %s@%s', tok, start_pos) + return None, tok + + in_clause, tok = parse_stmt_or_arr(token_iterator) + if in_clause is None: + debug.warning('list comprehension in @%s', start_pos) + return None, tok + + return ListComprehension(self._sub_module, st, middle, in_clause, self), tok + + # initializations + result = [] + is_chain = False + brackets = {'(': Array.TUPLE, '[': Array.LIST, '{': Array.SET} + closing_brackets = ')', '}', ']' + + token_iterator = iter(self._token_list) + for tok in token_iterator: + if isinstance(tok, tokenize.Token): + token_type = tok.type + tok_str = tok.string + if tok_str == 'as': # just ignore as, because it sets values + next(token_iterator, None) + continue + else: + # the token is a Name, which has already been parsed + tok_str = tok + token_type = None + + if is_assignment(tok): + # This means, there is an assignment here. + # Add assignments, which can be more than one + self._assignment_details.append((result, tok.string)) + result = [] + is_chain = False + continue + + if tok_str == 'lambda': + lambd, tok_str = parse_lambda(token_iterator) + if lambd is not None: + result.append(lambd) + if tok_str not in (')', ','): + continue + + is_literal = token_type in (tokenize.STRING, tokenize.NUMBER) + if isinstance(tok_str, Name) or is_literal: + cls = Literal if is_literal else Call + + call = cls(self._sub_module, tok_str, tok.start_pos, tok.end_pos, self) + if is_chain: + result[-1].set_next(call) + else: + result.append(call) + is_chain = False + elif tok_str in brackets.keys(): + arr, is_ass = parse_array( + token_iterator, brackets[tok.string], tok.start_pos + ) + if result and isinstance(result[-1], StatementElement): + result[-1].set_execution(arr) + else: + arr.parent = self + result.append(arr) + elif tok_str == '.': + if result and isinstance(result[-1], StatementElement): + is_chain = True + elif tok_str == ',' and result: # implies a tuple + # expression is now an array not a statement anymore + stmt = Statement(self._sub_module, result, result[0].start_pos, + tok.end_pos, self.parent, set_name_parents=False) + stmt._expression_list = result + arr, break_tok = parse_array(token_iterator, Array.TUPLE, + stmt.start_pos, stmt) + result = [arr] + if is_assignment(break_tok): + self._assignment_details.append((result, break_tok)) + result = [] + is_chain = False + else: + # comments, strange tokens (like */**), error tokens to + # reproduce the string correctly. + is_chain = False + result.append(tok) + return result + + def set_expression_list(self, lst): + """It's necessary for some "hacks" to change the expression_list.""" + self._expression_list = lst + + +class Param(Statement): + """ + The class which shows definitions of params of classes and functions. + But this is not to define function calls. + """ + __slots__ = ('position_nr', 'is_generated', 'annotation_stmt', + 'parent_function') + + def __init__(self, *args, **kwargs): + kwargs.pop('names_are_set_vars', None) + super(Param, self).__init__(*args, names_are_set_vars=True, **kwargs) + + # this is defined by the parser later on, not at the initialization + # it is the position in the call (first argument, second...) + self.position_nr = None + self.is_generated = False + self.annotation_stmt = None + self.parent_function = None + + def add_annotation(self, annotation_stmt): + annotation_stmt.parent = self.use_as_parent + self.annotation_stmt = annotation_stmt + + def get_name(self): + """ get the name of the param """ + n = self.get_defined_names() + if len(n) > 1: + debug.warning("Multiple param names (%s).", n) + return n[0] + + @property + def stars(self): + exp = self.expression_list() + if exp and isinstance(exp[0], Operator): + return exp[0].string.count('*') + return 0 + + +class StatementElement(Simple): + __slots__ = ('parent', 'next', 'execution') + + def __init__(self, module, start_pos, end_pos, parent): + super(StatementElement, self).__init__(module, start_pos, end_pos) + + # parent is not the oposite of next. The parent of c: a = [b.c] would + # be an array. + self.parent = parent + self.next = None + self.execution = None + + def set_next(self, call): + """ Adds another part of the statement""" + call.parent = self + if self.next is not None: + self.next.set_next(call) + else: + self.next = call + + def set_execution(self, call): + """ + An execution is nothing else than brackets, with params in them, which + shows access on the internals of this name. + """ + call.parent = self + if self.next is not None: + self.next.set_execution(call) + elif self.execution is not None: + self.execution.set_execution(call) + else: + self.execution = call + + def generate_call_path(self): + """ Helps to get the order in which statements are executed. """ + try: + for name_part in self.name.names: + yield name_part + except AttributeError: + yield self + if self.execution is not None: + for y in self.execution.generate_call_path(): + yield y + if self.next is not None: + for y in self.next.generate_call_path(): + yield y + + def get_code(self): + s = '' + if self.execution is not None: + s += self.execution.get_code() + if self.next is not None: + s += '.' + self.next.get_code() + return s + + +class Call(StatementElement): + __slots__ = ('name',) + + def __init__(self, module, name, start_pos, end_pos, parent=None): + super(Call, self).__init__(module, start_pos, end_pos, parent) + self.name = name + + def get_code(self): + return self.name.get_code() + super(Call, self).get_code() + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self.name) + + +class Literal(StatementElement): + __slots__ = ('literal', 'value') + + def __init__(self, module, literal, start_pos, end_pos, parent=None): + super(Literal, self).__init__(module, start_pos, end_pos, parent) + self.literal = literal + self.value = literal_eval(literal) + + def get_code(self): + return self.literal + super(Literal, self).get_code() + + def __repr__(self): + if is_py3: + s = self.literal + else: + s = self.literal.encode('ascii', 'replace') + return "<%s: %s>" % (type(self).__name__, s) + + +class Array(StatementElement): + """ + Describes the different python types for an array, but also empty + statements. In the Python syntax definitions this type is named 'atom'. + http://docs.python.org/py3k/reference/grammar.html + Array saves sub-arrays as well as normal operators and calls to methods. + + :param array_type: The type of an array, which can be one of the constants + below. + :type array_type: int + """ + __slots__ = ('type', 'end_pos', 'values', 'keys') + NOARRAY = None # just brackets, like `1 * (3 + 2)` + TUPLE = 'tuple' + LIST = 'list' + DICT = 'dict' + SET = 'set' + + def __init__(self, module, start_pos, arr_type=NOARRAY, parent=None): + super(Array, self).__init__(module, start_pos, (None, None), parent) + self.end_pos = None, None + self.type = arr_type + self.values = [] + self.keys = [] + + def add_statement(self, statement, is_key=False): + """Just add a new statement""" + statement.parent = self + if is_key: + self.type = self.DICT + self.keys.append(statement) + else: + self.values.append(statement) + + @staticmethod + def is_type(instance, *types): + """ + This is not only used for calls on the actual object, but for + ducktyping, to invoke this function with anything as `self`. + """ + try: + if instance.type in types: + return True + except AttributeError: + pass + return False + + def __len__(self): + return len(self.values) + + def __getitem__(self, key): + if self.type == self.DICT: + raise TypeError('no dicts allowed') + return self.values[key] + + def __iter__(self): + if self.type == self.DICT: + raise TypeError('no dicts allowed') + return iter(self.values) + + def items(self): + if self.type != self.DICT: + raise TypeError('only dicts allowed') + return zip(self.keys, self.values) + + def get_code(self): + map = { + self.NOARRAY: '(%s)', + self.TUPLE: '(%s)', + self.LIST: '[%s]', + self.DICT: '{%s}', + self.SET: '{%s}' + } + inner = [] + for i, stmt in enumerate(self.values): + s = '' + with common.ignored(IndexError): + key = self.keys[i] + s += key.get_code(new_line=False) + ': ' + s += stmt.get_code(new_line=False) + inner.append(s) + add = ',' if self.type == self.TUPLE and len(self) == 1 else '' + s = map[self.type] % (', '.join(inner) + add) + return s + super(Array, self).get_code() + + def __repr__(self): + if self.type == self.NOARRAY: + typ = 'noarray' + else: + typ = self.type + return "<%s: %s%s>" % (type(self).__name__, typ, self.values) + + +class NamePart(object): + """ + A string. Sometimes it is important to know if the string belongs to a name + or not. + """ + # Unfortunately there's no way to use slots for str (non-zero __itemsize__) + # -> http://utcc.utoronto.ca/~cks/space/blog/python/IntSlotsPython3k + # Therefore don't subclass `str`. + __slots__ = ('parent', '_string', '_line', '_column') + + def __init__(self, string, parent, start_pos): + self._string = string + self.parent = parent + self._line = start_pos[0] + self._column = start_pos[1] + + def __str__(self): + return self._string + + def __unicode__(self): + return self._string + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self._string) + + def get_code(self): + return self._string + + def get_parent_until(self, *args, **kwargs): + return self.parent.get_parent_until(*args, **kwargs) + + def isinstance(self, *cls): + return isinstance(self, cls) + + @property + def start_pos(self): + offset = self.parent._sub_module.line_offset + return offset + self._line, self._column + + @property + def end_pos(self): + return self.start_pos[0], self.start_pos[1] + len(self._string) + + +class Name(Simple): + """ + Used to define names in python. + Which means the whole namespace/class/function stuff. + So a name like "module.class.function" + would result in an array of [module, class, function] + """ + __slots__ = ('names', '_get_code') + + def __init__(self, module, names, start_pos, end_pos, parent=None): + super(Name, self).__init__(module, start_pos, end_pos) + # Cache get_code, because it's used quite often for comparisons + # (seen by using the profiler). + self._get_code = ".".join(n[0] for n in names) + + names = tuple(NamePart(n[0], self, n[1]) for n in names) + self.names = names + if parent is not None: + self.parent = parent + + def get_code(self): + """ Returns the names in a full string format """ + return self._get_code + + @property + def end_pos(self): + return self.names[-1].end_pos + + @property + def docstr(self): + """Return attribute docstring (PEP 257) if exists.""" + return self.parent.docstr + + def __str__(self): + return self.get_code() + + def __len__(self): + return len(self.names) + + +class ListComprehension(ForFlow): + """ Helper class for list comprehensions """ + def __init__(self, module, stmt, middle, input, parent): + self.input = input + nested_lc = input.expression_list()[0] + if isinstance(nested_lc, ListComprehension): + # is nested LC + input = nested_lc.stmt + nested_lc.parent = self + + super(ListComprehension, self).__init__(module, [input], + stmt.start_pos, middle) + self.parent = parent + self.stmt = stmt + self.middle = middle + for s in middle, input: + s.parent = self + # The stmt always refers to the most inner list comprehension. + stmt.parent = self._get_most_inner_lc() + + def _get_most_inner_lc(self): + nested_lc = self.input.expression_list()[0] + if isinstance(nested_lc, ListComprehension): + return nested_lc._get_most_inner_lc() + return self + + @property + def end_pos(self): + return self.stmt.end_pos + + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, self.get_code()) + + def get_code(self): + statements = self.stmt, self.middle, self.input + code = [s.get_code().replace('\n', '') for s in statements] + return "%s for %s in %s" % tuple(code) + + +class Operator(Simple): + __slots__ = ('string',) + + def __init__(self, module, string, parent, start_pos): + end_pos = start_pos[0], start_pos[1] + len(string) + super(Operator, self).__init__(module, start_pos, end_pos) + self.string = string + self.parent = parent + + def get_code(self): + return self.string + + def __repr__(self): + return "<%s: `%s`>" % (type(self).__name__, self.string) + + def __eq__(self, other): + """Make comparisons easy. Improves the readability of the parser.""" + return self.string == other + + def __ne__(self, other): + """Python 2 compatibility.""" + return self.string != other + + def __hash__(self): + return hash(self.string) diff --git a/python/pw_multiScriptEditor/jedi/parser/tokenize.py b/python/pw_multiScriptEditor/jedi/parser/tokenize.py new file mode 100644 index 0000000..40ecab1 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/parser/tokenize.py @@ -0,0 +1,299 @@ +# -*- coding: utf-8 -*- +""" +This tokenizer has been copied from the ``tokenize.py`` standard library +tokenizer. The reason was simple: The standard library tokenizer fails +if the indentation is not right. The fast parser of jedi however requires +"wrong" indentation. + +Basically this is a stripped down version of the standard library module, so +you can read the documentation there. Additionally we included some speed and +memory optimizations here. +""" +from __future__ import absolute_import + +import string +import re +from io import StringIO +from token import (tok_name, N_TOKENS, ENDMARKER, STRING, NUMBER, NAME, OP, + ERRORTOKEN, NEWLINE) + +from jedi._compatibility import u + +cookie_re = re.compile("coding[:=]\s*([-\w.]+)") + + +# From here on we have custom stuff (everything before was originally Python +# internal code). +FLOWS = ['if', 'else', 'elif', 'while', 'with', 'try', 'except', 'finally'] + + +namechars = string.ascii_letters + '_' + + +COMMENT = N_TOKENS +tok_name[COMMENT] = 'COMMENT' + + +class Token(object): + """ + The token object is an efficient representation of the structure + (type, token, (start_pos_line, start_pos_col)). It has indexer + methods that maintain compatibility to existing code that expects the above + structure. + + >>> repr(Token(1, "test", (1, 1))) + "" + >>> Token(1, 'bar', (3, 4)).__getstate__() + (1, 'bar', 3, 4) + >>> a = Token(0, 'baz', (0, 0)) + >>> a.__setstate__((1, 'foo', 3, 4)) + >>> a + + >>> a.start_pos + (3, 4) + >>> a.string + 'foo' + >>> a._start_pos_col + 4 + >>> Token(1, u("😷"), (1 ,1)).string + "p" == u("😷p") + True + """ + __slots__ = ("type", "string", "_start_pos_line", "_start_pos_col") + + def __init__(self, type, string, start_pos): + self.type = type + self.string = string + self._start_pos_line = start_pos[0] + self._start_pos_col = start_pos[1] + + def __repr__(self): + typ = tok_name[self.type] + content = typ, self.string, (self._start_pos_line, self._start_pos_col) + return "<%s: %s>" % (type(self).__name__, content) + + @property + def start_pos(self): + return (self._start_pos_line, self._start_pos_col) + + @property + def end_pos(self): + """Returns end position respecting multiline tokens.""" + end_pos_line = self._start_pos_line + lines = self.string.split('\n') + if self.string.endswith('\n'): + lines = lines[:-1] + lines[-1] += '\n' + end_pos_line += len(lines) - 1 + end_pos_col = self._start_pos_col + # Check for multiline token + if self._start_pos_line == end_pos_line: + end_pos_col += len(lines[-1]) + else: + end_pos_col = len(lines[-1]) + return (end_pos_line, end_pos_col) + + # Make cache footprint smaller for faster unpickling + def __getstate__(self): + return (self.type, self.string, self._start_pos_line, self._start_pos_col) + + def __setstate__(self, state): + self.type = state[0] + self.string = state[1] + self._start_pos_line = state[2] + self._start_pos_col = state[3] + + +def group(*choices): + return '(' + '|'.join(choices) + ')' + + +def maybe(*choices): + return group(*choices) + '?' + + +# Note: we use unicode matching for names ("\w") but ascii matching for +# number literals. +whitespace = r'[ \f\t]*' +comment = r'#[^\r\n]*' +name = r'\w+' + +hex_number = r'0[xX][0-9a-fA-F]+' +bin_number = r'0[bB][01]+' +oct_number = r'0[oO][0-7]+' +dec_number = r'(?:0+|[1-9][0-9]*)' +int_number = group(hex_number, bin_number, oct_number, dec_number) +exponent = r'[eE][-+]?[0-9]+' +point_float = group(r'[0-9]+\.[0-9]*', r'\.[0-9]+') + maybe(exponent) +Expfloat = r'[0-9]+' + exponent +float_number = group(point_float, Expfloat) +imag_number = group(r'[0-9]+[jJ]', float_number + r'[jJ]') +number = group(imag_number, float_number, int_number) + +# Tail end of ' string. +single = r"[^'\\]*(?:\\.[^'\\]*)*'" +# Tail end of " string. +double = r'[^"\\]*(?:\\.[^"\\]*)*"' +# Tail end of ''' string. +single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''" +# Tail end of """ string. +double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""' +triple = group("[bB]?[rR]?'''", '[bB]?[rR]?"""') +# Single-line ' or " string. + +# Because of leftmost-then-longest match semantics, be sure to put the +# longest operators first (e.g., if = came before ==, == would get +# recognized as two instances of =). +operator = group(r"\*\*=?", r">>=?", r"<<=?", r"!=", + r"//=?", r"->", + r"[+\-*/%&|^=<>]=?", + r"~") + +bracket = '[][(){}]' +special = group(r'\r?\n', r'\.\.\.', r'[:;.,@]') +funny = group(operator, bracket, special) + +# First (or only) line of ' or " string. +cont_str = group(r"[bBuU]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*" + + group("'", r'\\\r?\n'), + r'[bBuU]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*' + + group('"', r'\\\r?\n')) +pseudo_extras = group(r'\\\r?\n', comment, triple) +pseudo_token = whitespace + group(pseudo_extras, number, funny, cont_str, name) + + +def _compile(expr): + return re.compile(expr, re.UNICODE) + + +pseudoprog, single3prog, double3prog = map( + _compile, (pseudo_token, single3, double3)) +endprogs = {"'": _compile(single), '"': _compile(double), + "'''": single3prog, '"""': double3prog, + "r'''": single3prog, 'r"""': double3prog, + "b'''": single3prog, 'b"""': double3prog, + "u'''": single3prog, 'u"""': double3prog, + "br'''": single3prog, 'br"""': double3prog, + "R'''": single3prog, 'R"""': double3prog, + "B'''": single3prog, 'B"""': double3prog, + "U'''": single3prog, 'U"""': double3prog, + "bR'''": single3prog, 'bR"""': double3prog, + "Br'''": single3prog, 'Br"""': double3prog, + "BR'''": single3prog, 'BR"""': double3prog, + 'r': None, 'R': None, 'b': None, 'B': None} + +triple_quoted = {} +for t in ("'''", '"""', + "r'''", 'r"""', "R'''", 'R"""', + "b'''", 'b"""', "B'''", 'B"""', + "u'''", 'u"""', "U'''", 'U"""', + "br'''", 'br"""', "Br'''", 'Br"""', + "bR'''", 'bR"""', "BR'''", 'BR"""'): + triple_quoted[t] = t +single_quoted = {} +for t in ("'", '"', + "r'", 'r"', "R'", 'R"', + "b'", 'b"', "B'", 'B"', + "u'", 'u""', "U'", 'U"', + "br'", 'br"', "Br'", 'Br"', + "bR'", 'bR"', "BR'", 'BR"'): + single_quoted[t] = t + +del _compile + +tabsize = 8 + + +def source_tokens(source, line_offset=0): + """Generate tokens from a the source code (string).""" + source = source + '\n' # end with \n, because the parser needs it + readline = StringIO(source).readline + return generate_tokens(readline, line_offset) + + +def generate_tokens(readline, line_offset=0): + """ + The original stdlib Python version with minor modifications. + Modified to not care about dedents. + """ + lnum = line_offset + numchars = '0123456789' + contstr = '' + contline = None + while True: # loop over lines in stream + line = readline() # readline returns empty if it's finished. See StringIO + if not line: + if contstr: + yield Token(ERRORTOKEN, contstr, contstr_start) + break + + lnum += 1 + pos, max = 0, len(line) + + if contstr: # continued string + endmatch = endprog.match(line) + if endmatch: + pos = endmatch.end(0) + yield Token(STRING, contstr + line[:pos], contstr_start) + contstr = '' + contline = None + else: + contstr = contstr + line + contline = contline + line + continue + + while pos < max: + pseudomatch = pseudoprog.match(line, pos) + if not pseudomatch: # scan for tokens + txt = line[pos] + if line[pos] in '"\'': + # If a literal starts but doesn't end the whole rest of the + # line is an error token. + txt = txt = line[pos:] + yield Token(ERRORTOKEN, txt, (lnum, pos)) + pos += 1 + continue + + start, pos = pseudomatch.span(1) + spos = (lnum, start) + token, initial = line[start:pos], line[start] + + if (initial in numchars or # ordinary number + (initial == '.' and token != '.' and token != '...')): + yield Token(NUMBER, token, spos) + elif initial in '\r\n': + yield Token(NEWLINE, token, spos) + elif initial == '#': + assert not token.endswith("\n") + yield Token(COMMENT, token, spos) + elif token in triple_quoted: + endprog = endprogs[token] + endmatch = endprog.match(line, pos) + if endmatch: # all on one line + pos = endmatch.end(0) + token = line[start:pos] + yield Token(STRING, token, spos) + else: + contstr_start = (lnum, start) # multiple lines + contstr = line[start:] + contline = line + break + elif initial in single_quoted or \ + token[:2] in single_quoted or \ + token[:3] in single_quoted: + if token[-1] == '\n': # continued string + contstr_start = lnum, start + endprog = (endprogs[initial] or endprogs[token[1]] or + endprogs[token[2]]) + contstr = line[start:] + contline = line + break + else: # ordinary string + yield Token(STRING, token, spos) + elif initial in namechars: # ordinary name + yield Token(NAME, token, spos) + elif initial == '\\' and line[start:] == '\\\n': # continued stmt + continue + else: + yield Token(OP, token, spos) + + yield Token(ENDMARKER, '', (lnum, 0)) diff --git a/python/pw_multiScriptEditor/jedi/parser/user_context.py b/python/pw_multiScriptEditor/jedi/parser/user_context.py new file mode 100644 index 0000000..4637039 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/parser/user_context.py @@ -0,0 +1,255 @@ +import re +import os + +from jedi import cache +from jedi import common +from jedi.parser import tokenize +from jedi._compatibility import u +from jedi.parser.fast import FastParser +from jedi.parser import representation +from jedi import debug +from jedi.common import PushBackIterator + + +class UserContext(object): + """ + :param source: The source code of the file. + :param position: The position, the user is currently in. Only important \ + for the main file. + """ + def __init__(self, source, position): + self.source = source + self.position = position + self._line_cache = None + + # this two are only used, because there is no nonlocal in Python 2 + self._line_temp = None + self._relevant_temp = None + + @cache.underscore_memoization + def get_path_until_cursor(self): + """ Get the path under the cursor. """ + path, self._start_cursor_pos = self._calc_path_until_cursor(self.position) + return path + + def _calc_path_until_cursor(self, start_pos=None): + """ + Something like a reverse tokenizer that tokenizes the reversed strings. + """ + def fetch_line(): + if self._is_first: + self._is_first = False + self._line_length = self._column_temp + line = first_line + else: + line = self.get_line(self._line_temp) + self._line_length = len(line) + line = '\n' + line + + # add lines with a backslash at the end + while True: + self._line_temp -= 1 + last_line = self.get_line(self._line_temp) + if last_line and last_line[-1] == '\\': + line = last_line[:-1] + ' ' + line + self._line_length = len(last_line) + else: + break + return line[::-1] + + self._is_first = True + self._line_temp, self._column_temp = start_cursor = start_pos + first_line = self.get_line(self._line_temp)[:self._column_temp] + + open_brackets = ['(', '[', '{'] + close_brackets = [')', ']', '}'] + + gen = PushBackIterator(tokenize.generate_tokens(fetch_line)) + string = u('') + level = 0 + force_point = False + last_type = None + is_first = True + for tok in gen: + tok_type = tok.type + tok_str = tok.string + end = tok.end_pos + self._column_temp = self._line_length - end[1] + if is_first: + if tok.start_pos != (1, 0): # whitespace is not a path + return u(''), start_cursor + is_first = False + + # print 'tok', token_type, tok_str, force_point + if last_type == tok_type == tokenize.NAME: + string += ' ' + + if level > 0: + if tok_str in close_brackets: + level += 1 + if tok_str in open_brackets: + level -= 1 + elif tok_str == '.': + force_point = False + elif force_point: + # Reversed tokenizing, therefore a number is recognized as a + # floating point number. + # The same is true for string prefixes -> represented as a + # combination of string and name. + if tok_type == tokenize.NUMBER and tok_str[0] == '.' \ + or tok_type == tokenize.NAME and last_type == tokenize.STRING: + force_point = False + else: + break + elif tok_str in close_brackets: + level += 1 + elif tok_type in [tokenize.NAME, tokenize.STRING]: + force_point = True + elif tok_type == tokenize.NUMBER: + pass + else: + if tok_str == '-': + next_tok = next(gen) + if next_tok.string == 'e': + gen.push_back(next_tok) + else: + break + else: + break + + x = start_pos[0] - end[0] + 1 + l = self.get_line(x) + l = first_line if x == start_pos[0] else l + start_cursor = x, len(l) - end[1] + string += tok_str + last_type = tok_type + + # string can still contain spaces at the end + return string[::-1].strip(), start_cursor + + def get_path_under_cursor(self): + """ + Return the path under the cursor. If there is a rest of the path left, + it will be added to the stuff before it. + """ + return self.get_path_until_cursor() + self.get_path_after_cursor() + + def get_path_after_cursor(self): + line = self.get_line(self.position[0]) + return re.search("[\w\d]*", line[self.position[1]:]).group(0) + + def get_operator_under_cursor(self): + line = self.get_line(self.position[0]) + after = re.match("[^\w\s]+", line[self.position[1]:]) + before = re.match("[^\w\s]+", line[:self.position[1]][::-1]) + return (before.group(0) if before is not None else '') \ + + (after.group(0) if after is not None else '') + + def get_context(self, yield_positions=False): + self.get_path_until_cursor() # In case _start_cursor_pos is undefined. + pos = self._start_cursor_pos + while True: + # remove non important white space + line = self.get_line(pos[0]) + while True: + if pos[1] == 0: + line = self.get_line(pos[0] - 1) + if line and line[-1] == '\\': + pos = pos[0] - 1, len(line) - 1 + continue + else: + break + + if line[pos[1] - 1].isspace(): + pos = pos[0], pos[1] - 1 + else: + break + + try: + result, pos = self._calc_path_until_cursor(start_pos=pos) + if yield_positions: + yield pos + else: + yield result + except StopIteration: + if yield_positions: + yield None + else: + yield '' + + def get_line(self, line_nr): + if not self._line_cache: + self._line_cache = common.splitlines(self.source) + + if line_nr == 0: + # This is a fix for the zeroth line. We need a newline there, for + # the backwards parser. + return u('') + if line_nr < 0: + raise StopIteration() + try: + return self._line_cache[line_nr - 1] + except IndexError: + raise StopIteration() + + def get_position_line(self): + return self.get_line(self.position[0])[:self.position[1]] + + +class UserContextParser(object): + def __init__(self, source, path, position, user_context): + self._source = source + self._path = path and os.path.abspath(path) + self._position = position + self._user_context = user_context + + @cache.underscore_memoization + def _parser(self): + cache.invalidate_star_import_cache(self._path) + parser = FastParser(self._source, self._path) + # Don't pickle that module, because the main module is changing quickly + cache.save_parser(self._path, None, parser, pickling=False) + return parser + + @cache.underscore_memoization + def user_stmt(self): + module = self.module() + debug.speed('parsed') + return module.get_statement_for_position(self._position, include_imports=True) + + @cache.underscore_memoization + def user_stmt_with_whitespace(self): + """ + Returns the statement under the cursor even if the statement lies + before the cursor. + """ + user_stmt = self.user_stmt() + + if not user_stmt: + # for statements like `from x import ` (cursor not in statement) + # or `abs( ` where the cursor is out in the whitespace. + if self._user_context.get_path_under_cursor(): + # We really should have a user_stmt, but the parser couldn't + # process it - probably a Syntax Error (or in a comment). + debug.warning('No statement under the cursor.') + return + pos = next(self._user_context.get_context(yield_positions=True)) + user_stmt = self.module().get_statement_for_position(pos, include_imports=True) + return user_stmt + + @cache.underscore_memoization + def user_scope(self): + user_stmt = self.user_stmt() + if user_stmt is None: + def scan(scope): + for s in scope.statements + scope.subscopes: + if isinstance(s, representation.Scope): + if s.start_pos <= self._position <= s.end_pos: + return scan(s) or s + + return scan(self.module()) or self.module() + else: + return user_stmt.parent + + def module(self): + return self._parser().module diff --git a/python/pw_multiScriptEditor/jedi/refactoring.py b/python/pw_multiScriptEditor/jedi/refactoring.py new file mode 100644 index 0000000..fbd9bde --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/refactoring.py @@ -0,0 +1,202 @@ +""" +Introduce some basic refactoring functions to |jedi|. This module is still in a +very early development stage and needs much testing and improvement. + +.. warning:: I won't do too much here, but if anyone wants to step in, please + do. Refactoring is none of my priorities + +It uses the |jedi| `API `_ and supports currently the +following functions (sometimes bug-prone): + +- rename +- extract variable +- inline variable +""" +import difflib + +from jedi import common +from jedi.evaluate import helpers +from jedi.parser import representation as pr + + +class Refactoring(object): + def __init__(self, change_dct): + """ + :param change_dct: dict(old_path=(new_path, old_lines, new_lines)) + """ + self.change_dct = change_dct + + def old_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[new_path] = '\n'.join(new_l) + return dct + + def new_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[new_path] = '\n'.join(new_l) + return dct + + def diff(self): + texts = [] + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + if old_path: + udiff = difflib.unified_diff(old_l, new_l) + else: + udiff = difflib.unified_diff(old_l, new_l, old_path, new_path) + texts.append('\n'.join(udiff)) + return '\n'.join(texts) + + +def rename(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param operation: The refactoring operation to execute. + :type operation: str + :type source: str + :return: list of changed lines/changed files + """ + return Refactoring(_rename(script.usages(), new_name)) + + +def _rename(names, replace_str): + """ For both rename and inline. """ + order = sorted(names, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + + def process(path, old_lines, new_lines): + if new_lines is not None: # goto next file, save last + dct[path] = path, old_lines, new_lines + + dct = {} + current_path = object() + new_lines = old_lines = None + for name in order: + if name.in_builtin_module(): + continue + if current_path != name.module_path: + current_path = name.module_path + + process(current_path, old_lines, new_lines) + if current_path is not None: + # None means take the source that is a normal param. + with open(current_path) as f: + source = f.read() + + new_lines = common.splitlines(common.source_to_unicode(source)) + old_lines = new_lines[:] + + nr, indent = name.line, name.column + line = new_lines[nr - 1] + new_lines[nr - 1] = line[:indent] + replace_str + \ + line[indent + len(name.name):] + process(current_path, old_lines, new_lines) + return dct + + +def extract(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param operation: The refactoring operation to execute. + :type operation: str + :type source: str + :return: list of changed lines/changed files + """ + new_lines = common.splitlines(common.source_to_unicode(script.source)) + old_lines = new_lines[:] + + user_stmt = script._parser.user_stmt() + + # TODO care for multiline extracts + dct = {} + if user_stmt: + pos = script._pos + line_index = pos[0] - 1 + arr, index = helpers.array_for_pos(user_stmt, pos) + if arr is not None: + start_pos = arr[index].start_pos + end_pos = arr[index].end_pos + + # take full line if the start line is different from end line + e = end_pos[1] if end_pos[0] == start_pos[0] else None + start_line = new_lines[start_pos[0] - 1] + text = start_line[start_pos[1]:e] + for l in range(start_pos[0], end_pos[0] - 1): + text += '\n' + l + if e is None: + end_line = new_lines[end_pos[0] - 1] + text += '\n' + end_line[:end_pos[1]] + + # remove code from new lines + t = text.lstrip() + del_start = start_pos[1] + len(text) - len(t) + + text = t.rstrip() + del_end = len(t) - len(text) + if e is None: + new_lines[end_pos[0] - 1] = end_line[end_pos[1] - del_end:] + e = len(start_line) + else: + e = e - del_end + start_line = start_line[:del_start] + new_name + start_line[e:] + new_lines[start_pos[0] - 1] = start_line + new_lines[start_pos[0]:end_pos[0] - 1] = [] + + # add parentheses in multiline case + open_brackets = ['(', '[', '{'] + close_brackets = [')', ']', '}'] + if '\n' in text and not (text[0] in open_brackets and text[-1] == + close_brackets[open_brackets.index(text[0])]): + text = '(%s)' % text + + # add new line before statement + indent = user_stmt.start_pos[1] + new = "%s%s = %s" % (' ' * indent, new_name, text) + new_lines.insert(line_index, new) + dct[script.path] = script.path, old_lines, new_lines + return Refactoring(dct) + + +def inline(script): + """ + :type script: api.Script + """ + new_lines = common.splitlines(common.source_to_unicode(script.source)) + + dct = {} + + definitions = script.goto_assignments() + with common.ignored(AssertionError): + assert len(definitions) == 1 + stmt = definitions[0]._definition + usages = script.usages() + inlines = [r for r in usages + if not stmt.start_pos <= (r.line, r.column) <= stmt.end_pos] + inlines = sorted(inlines, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + expression_list = stmt.expression_list() + # don't allow multiline refactorings for now. + assert stmt.start_pos[0] == stmt.end_pos[0] + index = stmt.start_pos[0] - 1 + + line = new_lines[index] + replace_str = line[expression_list[0].start_pos[1]:stmt.end_pos[1] + 1] + replace_str = replace_str.strip() + # tuples need parentheses + if expression_list and isinstance(expression_list[0], pr.Array): + arr = expression_list[0] + if replace_str[0] not in ['(', '[', '{'] and len(arr) > 1: + replace_str = '(%s)' % replace_str + + # if it's the only assignment, remove the statement + if len(stmt.get_defined_names()) == 1: + line = line[:stmt.start_pos[1]] + line[stmt.end_pos[1]:] + + dct = _rename(inlines, replace_str) + # remove the empty line + new_lines = dct[script.path][2] + if line.strip(): + new_lines[index] = line + else: + new_lines.pop(index) + + return Refactoring(dct) diff --git a/python/pw_multiScriptEditor/jedi/settings.py b/python/pw_multiScriptEditor/jedi/settings.py new file mode 100644 index 0000000..0daa3fa --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/settings.py @@ -0,0 +1,245 @@ +""" +This module contains variables with global |jedi| settings. To change the +behavior of |jedi|, change the variables defined in :mod:`jedi.settings`. + +Plugins should expose an interface so that the user can adjust the +configuration. + + +Example usage:: + + from jedi import settings + settings.case_insensitive_completion = True + + +Completion output +~~~~~~~~~~~~~~~~~ + +.. autodata:: case_insensitive_completion +.. autodata:: add_dot_after_module +.. autodata:: add_bracket_after_function +.. autodata:: no_completion_duplicates + + +Filesystem cache +~~~~~~~~~~~~~~~~ + +.. autodata:: cache_directory +.. autodata:: use_filesystem_cache + + +Parser +~~~~~~ + +.. autodata:: fast_parser + + +Dynamic stuff +~~~~~~~~~~~~~ + +.. autodata:: dynamic_arrays_instances +.. autodata:: dynamic_array_additions +.. autodata:: dynamic_params +.. autodata:: dynamic_params_for_other_modules +.. autodata:: additional_dynamic_modules +.. autodata:: auto_import_modules + + +.. _settings-recursion: + +Recursions +~~~~~~~~~~ + +Recursion settings are important if you don't want extremly +recursive python code to go absolutely crazy. First of there is a +global limit :data:`max_executions`. This limit is important, to set +a maximum amount of time, the completion may use. + +The default values are based on experiments while completing the |jedi| library +itself (inception!). But I don't think there's any other Python library that +uses recursion in a similarly extreme way. These settings make the completion +definitely worse in some cases. But a completion should also be fast. + +.. autodata:: max_until_execution_unique +.. autodata:: max_function_recursion_level +.. autodata:: max_executions_without_builtins +.. autodata:: max_executions +.. autodata:: scale_call_signatures + + +Caching +~~~~~~~ + +.. autodata:: star_import_cache_validity +.. autodata:: call_signatures_validity + + +""" +import os +import platform + +# ---------------- +# completion output settings +# ---------------- + +case_insensitive_completion = True +""" +The completion is by default case insensitive. +""" + +add_dot_after_module = False +""" +Adds a dot after a module, because a module that is not accessed this way is +definitely not the normal case. However, in VIM this doesn't work, that's why +it isn't used at the moment. +""" + +add_bracket_after_function = False +""" +Adds an opening bracket after a function, because that's normal behaviour. +Removed it again, because in VIM that is not very practical. +""" + +no_completion_duplicates = True +""" +If set, completions with the same name don't appear in the output anymore, +but are in the `same_name_completions` attribute. +""" + +# ---------------- +# Filesystem cache +# ---------------- + +use_filesystem_cache = True +""" +Use filesystem cache to save once parsed files with pickle. +""" + +if platform.system().lower() == 'windows': + _cache_directory = os.path.join(os.getenv('APPDATA') or '~', 'Jedi', + 'Jedi') +elif platform.system().lower() == 'darwin': + _cache_directory = os.path.join('~', 'Library', 'Caches', 'Jedi') +else: + _cache_directory = os.path.join(os.getenv('XDG_CACHE_HOME') or '~/.cache', + 'jedi') +cache_directory = os.path.expanduser(_cache_directory) +""" +The path where all the caches can be found. + +On Linux, this defaults to ``~/.cache/jedi/``, on OS X to +``~/Library/Caches/Jedi/`` and on Windows to ``%APPDATA%\\Jedi\\Jedi\\``. +On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, +``$XDG_CACHE_HOME/jedi`` is used instead of the default one. +""" + +# ---------------- +# parser +# ---------------- + +fast_parser = True +""" +Use the fast parser. This means that reparsing is only being done if +something has been changed e.g. to a function. If this happens, only the +function is being reparsed. +""" + +# ---------------- +# dynamic stuff +# ---------------- + +dynamic_arrays_instances = True +""" +Check for `append`, etc. on array instances like list() +""" + +dynamic_array_additions = True +""" +check for `append`, etc. on arrays: [], {}, () +""" + +dynamic_params = True +""" +A dynamic param completion, finds the callees of the function, which define +the params of a function. +""" + +dynamic_params_for_other_modules = True +""" +Do the same for other modules. +""" + +additional_dynamic_modules = [] +""" +Additional modules in which |jedi| checks if statements are to be found. This +is practical for IDEs, that want to administrate their modules themselves. +""" + +dynamic_flow_information = True +""" +Check for `isinstance` and other information to infer a type. +""" + +auto_import_modules = [ + 'hashlib', # setattr +] +""" +Modules that are not analyzed but imported, although they contain Python code. +This improves autocompletion for libraries that use ``setattr`` or +``globals()`` modifications a lot. +""" + +# ---------------- +# recursions +# ---------------- + +max_until_execution_unique = 50 +""" +This limit is probably the most important one, because if this limit is +exceeded, functions can only be one time executed. So new functions will be +executed, complex recursions with the same functions again and again, are +ignored. +""" + +max_function_recursion_level = 5 +""" +`max_function_recursion_level` is more about whether the recursions are +stopped in deepth or in width. The ratio beetween this and +`max_until_execution_unique` is important here. It stops a recursion (after +the number of function calls in the recursion), if it was already used +earlier. +""" + +max_executions_without_builtins = 200 +""" +.. todo:: Document this. +""" + +max_executions = 250 +""" +A maximum amount of time, the completion may use. +""" + +scale_call_signatures = 0.1 +""" +Because call_signatures is normally used on every single key hit, it has +to be faster than a normal completion. This is the factor that is used to +scale `max_executions` and `max_until_execution_unique`: +""" + +# ---------------- +# caching validity (time) +# ---------------- + +star_import_cache_validity = 60.0 +""" +In huge packages like numpy, checking all star imports on every completion +might be slow, therefore we do a star import caching, that lasts a certain +time span (in seconds). +""" + +call_signatures_validity = 3.0 +""" +Finding function calls might be slow (0.1-0.5s). This is not acceptible for +normal writing. Therefore cache it for a short time. +""" diff --git a/python/pw_multiScriptEditor/jedi/utils.py b/python/pw_multiScriptEditor/jedi/utils.py new file mode 100644 index 0000000..9148c77 --- /dev/null +++ b/python/pw_multiScriptEditor/jedi/utils.py @@ -0,0 +1,114 @@ +""" +Utilities for end-users. +""" + +from __future__ import absolute_import +import __main__ +from collections import namedtuple +import re +import os +import sys + +from jedi import Interpreter +from jedi.api.helpers import completion_parts +from jedi.parser.user_context import UserContext + + +def setup_readline(namespace_module=__main__): + """ + Install Jedi completer to :mod:`readline`. + + This function setups :mod:`readline` to use Jedi in Python interactive + shell. If you want to use a custom ``PYTHONSTARTUP`` file (typically + ``$HOME/.pythonrc.py``), you can add this piece of code:: + + try: + from jedi.utils import setup_readline + setup_readline() + except ImportError: + # Fallback to the stdlib readline completer if it is installed. + # Taken from http://docs.python.org/2/library/rlcompleter.html + print("Jedi is not installed, falling back to readline") + try: + import readline + import rlcompleter + readline.parse_and_bind("tab: complete") + except ImportError: + print("Readline is not installed either. No tab completion is enabled.") + + This will fallback to the readline completer if Jedi is not installed. + The readline completer will only complete names in the global namespace, + so for example:: + + ran + + will complete to ``range`` + + with both Jedi and readline, but:: + + range(10).cou + + will show complete to ``range(10).count`` only with Jedi. + + You'll also need to add ``export PYTHONSTARTUP=$HOME/.pythonrc.py`` to + your shell profile (usually ``.bash_profile`` or ``.profile`` if you use + bash). + + """ + class JediRL(object): + def complete(self, text, state): + """ + This complete stuff is pretty weird, a generator would make + a lot more sense, but probably due to backwards compatibility + this is still the way how it works. + + The only important part is stuff in the ``state == 0`` flow, + everything else has been copied from the ``rlcompleter`` std. + library module. + """ + if state == 0: + sys.path.insert(0, os.getcwd()) + # Calling python doesn't have a path, so add to sys.path. + try: + interpreter = Interpreter(text, [namespace_module.__dict__]) + + path = UserContext(text, (1, len(text))).get_path_until_cursor() + path, dot, like = completion_parts(path) + before = text[:len(text) - len(like)] + completions = interpreter.completions() + finally: + sys.path.pop(0) + + self.matches = [before + c.name_with_symbols for c in completions] + try: + return self.matches[state] + except IndexError: + return None + + try: + import readline + except ImportError: + print("Module readline not available.") + else: + readline.set_completer(JediRL().complete) + readline.parse_and_bind("tab: complete") + # jedi itself does the case matching + readline.parse_and_bind("set completion-ignore-case on") + # because it's easier to hit the tab just once + readline.parse_and_bind("set show-all-if-unmodified") + readline.parse_and_bind("set show-all-if-ambiguous on") + # don't repeat all the things written in the readline all the time + readline.parse_and_bind("set completion-prefix-display-length 2") + # No delimiters, Jedi handles that. + readline.set_completer_delims('') + + +def version_info(): + """ + Returns a namedtuple of Jedi's version, similar to Python's + ``sys.version_info``. + """ + Version = namedtuple('Version', 'major, minor, micro, releaselevel, serial') + from jedi import __version__ + tupl = re.findall('[a-z]+|\d+', __version__) + return Version(*[x if i == 3 else int(x) for i, x in enumerate(tupl)]) diff --git a/python/pw_multiScriptEditor/managers/__init__.py b/python/pw_multiScriptEditor/managers/__init__.py new file mode 100644 index 0000000..9cad75b --- /dev/null +++ b/python/pw_multiScriptEditor/managers/__init__.py @@ -0,0 +1,86 @@ +main = __import__('__main__') +import platform + + +####### COMPLETERS ############################################## + +# NUKE +def nukeCompleter(*args): + from managers import _nuke + return _nuke.completer(*args) + +def getNukeContextMenu(*args): + from managers import _nuke + reload(_nuke) + return _nuke.contextMenu(*args) +################################################################### + +# HOUDINI +def houdiniCompleter(*args): + from managers import _houdini + return _houdini.completer(*args) +def getHoudiniContextMenu(*args): + from managers import _houdini + reload(_houdini) + return _houdini.contextMenu(*args) +def houdiniDropEvent(*args): + from managers import _houdini + reload(_houdini) + return _houdini.wrapDroppedText(*args) +################################################################### + +# MAYA +def mayaCompleter(*args): + from managers import _maya + reload(_maya) + return _maya.completer(*args) + +def mayaDropEvent(*args): + from managers import _maya + return _maya.wrapDroppedText(*args) +def getMayaContextMenu(*args): + from managers import _maya + reload(_maya) + return _maya.contextMenu(*args) +################################################################### + + +contextCompleters = dict( + nuke=nukeCompleter, + hou=houdiniCompleter, + maya=mayaCompleter +) + +contextMenus = dict( + hou=getHoudiniContextMenu, + nuke=getNukeContextMenu, + maya=getMayaContextMenu +) + +dropEvents = dict( + maya=mayaDropEvent, + hou=houdiniDropEvent +) + +autoImport = dict( + hou='import hou\n', + nuke='import nuke\n', +) +mayaDragTempData = 'maya_temp_drag_empty_Data' + +context = None +if 'hou' in main.__dict__: + context = 'hou' +elif 'cmds' in main.__dict__: + context = 'maya' +elif 'nuke' in main.__dict__: + context = 'nuke' + + + +if platform.system().lower() == 'windows': + _s = 'w' +elif platform.system().lower() == 'darwin': + _s = 'x' +else: + _s = 'l' \ No newline at end of file diff --git a/python/pw_multiScriptEditor/managers/_houdini.py b/python/pw_multiScriptEditor/managers/_houdini.py new file mode 100644 index 0000000..1ed8aaf --- /dev/null +++ b/python/pw_multiScriptEditor/managers/_houdini.py @@ -0,0 +1,209 @@ +import os, sys, re +# import hou +main = __import__('__main__') +hou = main.__dict__['hou'] +import hqt +reload (hqt) +from managers.completeWidget import contextCompleterClass + +path = os.path.join(os.path.dirname(__file__), 'houdini') + +main = __import__('__main__') +ns = main.__dict__ +for mod in [os.path.splitext(x)[0] for x in os.listdir(path)]: + if not mod in ns: + try: + exec 'import ' + mod in ns + except: + pass + +if not path in sys.path: + sys.path.insert(0, path) + +from pw_multiScriptEditor import scriptEditor +reload(scriptEditor) + + +def show(*args, **kwargs): + hqt.show(scriptEditor.scriptEditorClass, *args, **kwargs) + + + +# EXAMPLE SHELF BUTTON +# H13 +# path = 'path/to/MultiScriptEditor_module' +# # example c:/houdini/python/lib +# if not path in sys.path: +# sys.path.append(path) +# import pw_multiScriptEditor +# reload(pw_multiScriptEditor) +# pw_multiScriptEditor.showHoudini(ontop=1) + +# H14 +#import sys +# path = 'path/to/MultiScriptEditor_module' +# # example c:/houdini/python/lib +# if not path in sys.path: +# sys.path.append(path) +# import pw_multiScriptEditor +# reload(pw_multiScriptEditor) +# pw_multiScriptEditor.showHoudini(name='Multi Script Editor',replacePyPanel=1, hideTitleMenu=0) + + + + +###################### CONTEXT FUNCTIONS + +# def saveToNode(code, node): +# definition = node.type().definition() +# definition.sections()["PythonCook"].setContents(code) +# saveToNode('import hou',hou.selectedNodes()[0]) + +def getAllDifinitions(): + names = [] + for key in hou.nodeTypeCategories().keys(): + names += hou.nodeTypeCategories()[key].nodeTypes().keys() + names = list(set(names)) + return names + +roots = ['obj', 'shop', 'ch', 'vex', 'img', 'out'] +nodes = list(set(getAllDifinitions())) + +def completer(line): + # node types + func = ['createNode', 'createInputNode', 'createOutputNode'] + for f in func: + p = r"\.%s\(['\"](\w*)$" % f + m = re.search(p, line) + if m: + name = m.group(1) + if name: + auto = [x for x in nodes if x.lower().startswith(name.lower())] + else: + auto = nodes + l = len(name) + return [contextCompleterClass(x, x[l:], True) for x in auto], None + # absolute path + p = r"(?<=['\"]{1})(/[\w/]*)$" + m = re.search(p, line) + if m: + name = m.group(0) + auto, add = getChildrenFromPath(name) + if auto or add: + return auto, add + return None, None + +def getChildrenFromPath(path): + sp = path.rsplit('/', 1) + if not sp[0]: # rootOnly + if sp[1]: + nodes = [contextCompleterClass(x, x[len(sp[1]):]) for x in roots if x.startswith(sp[1])] + return nodes, None + else: + nodes = [contextCompleterClass(x, x) for x in roots] + return nodes, None + # add parms + else: + node = hou.node(sp[0][1:]) + if node: + nd = list(set([x.name() for x in node.children()])) + nodes = [contextCompleterClass(x, x[len(sp[1]):]) for x in sorted(nd) if x.startswith(sp[1])] + ch = list(set([x.name() for x in node.parms()] + [x.name() for x in node.parmTuples()])) + channels = [contextCompleterClass(x, x[len(sp[1]):]) for x in sorted(ch) if x.startswith(sp[1])] + return nodes, channels + return None, None + +def contextMenu(parent): + m = houdiniMenuClass(parent) + return m + +class houdiniMenuClass(hqt.QMenu): + def __init__(self, parent): + super(houdiniMenuClass, self).__init__('Houdini', parent) + self.par = parent + self.addAction(hqt.QAction('Save To Node', parent, triggered=self.saveToNode)) + self.addAction(hqt.QAction('Read From Node', parent, triggered=self.readFromNode)) + + + def readFromNode(self): + sel = hou.selectedNodes() + if sel: + res = self.getSectionsFromNode(sel[0]) + if not res: + hou.ui.displayMessage('Sections not found1') + return + keys = res.keys() + s = hou.ui.selectFromList(keys, exclusive=1) + if s: + source = res[keys[s[0]]] + text = '#Empty' + if isinstance(source, hou.Parm): + text = source.eval() + elif isinstance(source, hou.HDASection): + text = source.contents() + self.par.tab.addNewTab(sel[0].name()+'|'+source.name(), text) + else: + hou.ui.displayMessage('Select One Node') + + def saveToNode(self): + sel = hou.selectedNodes() + if sel: + res = self.getSectionsFromNode(sel[0]) + if res: + text = self.par.tab.getCurrentText() + keys = res.keys() + s = hou.ui.selectFromList(keys, exclusive=1) + if s: + source = res[keys[s[0]]] + if isinstance(source, hou.Parm): + source.set(text) + elif isinstance(source, hou.HDASection): + source.setContents(text.strip()) + else: + hou.ui.displayMessage('Sections not found') + return + else: + hou.ui.displayMessage('Select One Node') + + + def getSectionsFromNode(self, node): + default = ['Help', 'TypePropertiesOptions', 'ExtraFileOptions', 'Tools.shelf', 'InternalFileOptions', 'Contents.gz', 'CreateScript', 'DialogScript'] + res = {} + Def = node.type().definition() + if Def: + sections = Def.sections() + for s in sections: + if not sections[s].name() in default: + res[s] = sections[s] + pySop = hou.parm(node.path() + '/python') + if pySop: + res['PythonSOP'] = pySop + return res + + +def wrapDroppedText(namespace, text, event): + if event.keyboardModifiers() == hqt.Qt.AltModifier: + syntax = [] + #node + for node_parm in text.split(','): + node = hou.node(node_parm) + if node: + syntax.append('hou.node("%s")' % node_parm) + + #parmTuple + spl = text.split(',') + if len(list(set([x[:-1] for x in spl]))) == 1: + parmTuple = hou.parmTuple(spl[0][:-1]) + if parmTuple: + syntax.append('hou.parmTuple("%s")' % spl[0][:-1]) + # parm + if not syntax: + for node_parm in text.split(','): + parm = hou.parm(node_parm) + if parm: + syntax.append('hou.parm("%s")' % node_parm) + if syntax: + return '\n'.join(syntax) + + return text + diff --git a/python/pw_multiScriptEditor/managers/_maya.py b/python/pw_multiScriptEditor/managers/_maya.py new file mode 100644 index 0000000..9ddf8ef --- /dev/null +++ b/python/pw_multiScriptEditor/managers/_maya.py @@ -0,0 +1,160 @@ +from PySide.QtGui import * +from PySide.QtCore import * +import maya.OpenMayaUI as omui +from shiboken import wrapInstance as wrp +import os, sys, re +from managers.completeWidget import contextCompleterClass + +main = __import__('__main__') +ns = main.__dict__ +exec 'import pymel.core as pm' in ns +pm = main.__dict__['pm'] + +# jedi completion path +compPath = os.path.join(os.environ['MAYA_LOCATION'],'devkit/other/pymel/extras/completion/py').replace('\\','/') +if compPath in sys.path: + sys.path.remove(compPath) +sys.path.insert(0, compPath) + +def getMayaWindow(): + ptr = omui.MQtUtil.mainWindow() + if ptr is not None: + return wrp(long(ptr), QMainWindow) + +def show(dock=False): + if dock: + showDickControl() + else: + showWindow() + +def showWindow(): + from pw_multiScriptEditor import scriptEditor + reload(scriptEditor) + + editor = scriptEditor.scriptEditorClass(parent=getMayaWindow()) + editor.show() + + + +def showDickControl(): + name = 'pw_scriptEditor' + if pm.window(name, q=1, ex=1): + pm.deleteUI(name) + from pw_multiScriptEditor import scriptEditor + reload(scriptEditor) + editor = scriptEditor.scriptEditorClass(parent=getMayaWindow()) + + name = 'pw_scriptEditor' + dockName = 'pw_scriptEditorDock' + + if pm.dockControl(dockName, q=1, ex=1): + pm.deleteUI(dockName) + + + pm.dockControl(dockName, area='left', + content=editor.objectName(), + width=700, + label='Multi Script Editor', + allowedArea=['right', 'left']) + + +# Shelf button example +# import sys +# path = 'path/to/MultiScriptEditor_module' +# # example c:/maya/python/lib +# if not path in sys.path: +# sys.path.append(path) +# import pw_multiScriptEditor +# reload(pw_multiScriptEditor) +# pw_multiScriptEditor.showMaya(dock=True) + + +nodes = pm.allNodeTypes() + +def completer(line): + # create node + p = r"createNode\(['\"](\w*)$" + m = re.search(p, line) + if m: + name = m.group(1) + if name: + auto = [x for x in nodes if x.lower().startswith(name.lower())] + l = len(name) + return [contextCompleterClass(x, x[l:], True) for x in auto], None + # exists nodes + p = r"PyNode\(['\"](\w*)$" + m = re.search(p, line) + if m: + name = m.group(1) + existsNodes = sorted(pm.cmds.ls()) + l = len(name) + if name: + auto = [x for x in existsNodes if x.lower().startswith(name.lower())] + return [contextCompleterClass(x, x[l:], True) for x in auto], None + else: + return [contextCompleterClass(x, x, True) for x in existsNodes], None + return None, None + +# drop event + +def wrapDroppedText(namespace, text, event): + if event.keyboardModifiers() == Qt.AltModifier: + # pymel with namespace + for k, m in namespace.items(): + if hasattr(m, '__name__'): + if m.__name__ == 'pymel.core' and not k == 'm': + syntax = [] + for node in text.split(): + if namespace[k].objExists(node): + syntax.append(k+'.PyNode("%s")' % node) + else: + syntax.append(node) + return '\n'.join(syntax) + # pymel no namespace + if 'PyNode' in namespace.keys(): + syntax = [] + for node in text.split(): + if namespace['objExists'](node): + syntax.append('PyNode("%s")' % node) + else: + syntax.append(node) + return '\n'.join(syntax) + # return 'PyNode("%s")' % text + + # cmds with namespace + for k, m in namespace.items(): + if hasattr(m, '__name__'): + if m.__name__ == 'maya.cmds' and not k == 'm': + syntax = [] + for node in text.split(): + if namespace[k].objExists(node): + syntax.append('"%s"' % node) + else: + syntax.append(node) + return '\n'.join(syntax) + # cmds without namespace + if 'about' in namespace.keys(): + try: + syntax = [] + for node in text.split(): + if namespace['objExists'](node): + syntax.append('"%s"' % node) + else: + syntax.append(node) + return '\n'.join(syntax) + except: + pass + return text + +def contextMenu(parent): + m = mayaMenuClass(parent) + return m + +class mayaMenuClass(QMenu): + def __init__(self, parent): + super(mayaMenuClass, self).__init__('Maya', parent) + self.par = parent + a = QAction('Still Empty...', parent) + a.setEnabled(0) + self.addAction(a) + diff --git a/python/pw_multiScriptEditor/managers/_nuke.py b/python/pw_multiScriptEditor/managers/_nuke.py new file mode 100644 index 0000000..b09f6c7 --- /dev/null +++ b/python/pw_multiScriptEditor/managers/_nuke.py @@ -0,0 +1,182 @@ +import os, sys, re +# import nuke +main = __import__('__main__') +ns = main.__dict__ +exec 'import nuke' in ns +nuke = ns['nuke'] +import nukescripts +from managers.nuke import nodes +nuke_nodes = dir(nodes) +from managers.completeWidget import contextCompleterClass + +from PySide.QtGui import * +from PySide.QtCore import * + +p = os.path.dirname(__file__).replace('\\','/') +if not p in sys.path: + sys.path.insert(0, p) + +from pw_multiScriptEditor import scriptEditor +reload(scriptEditor) + +# QT +qApp = QApplication.instance() + +def getMainWindow(): + for widget in qApp.topLevelWidgets(): + if widget.metaObject().className() == 'Foundry::UI::DockMainWindow': + return widget +qNuke = getMainWindow() + +def show(panel=False): + if panel: + import pw_multiScriptEditor.scriptEditor + nukescripts.panels.registerWidgetAsPanel("pw_multiScriptEditor.scriptEditor.scriptEditorClass", "Multi Script Editor", "pw_multi_script_editor") + else: + showWindow() + + +def showWindow(): + se = scriptEditor.scriptEditorClass(qNuke) + se.runCommand('import nuke') + se.show() + + +# add to menu.py +# Add to menu.py +# menubar = nuke.menu("Nuke") +# toolMenu = menubar.addMenu('&Tools') +# path = 'path/to/MultiScriptEditor_module' +# # example c:/nuke/python/lib +# if not path in sys.path: +# sys.path.append(path) +# +# import pw_multiScriptEditor +# # add to menu +# toolMenu.addCommand("Multi Script Editor", "pw_multiScriptEditor.showNuke()") +# # create new pane +# pw_multiScriptEditor.showNuke(panel=True) + + +############ COMPLETER + +def completer(line): + # node types + p1 = r"nuke\.createNode\(['\"](\w*)$" + m = re.search(p1, line)# or re.search(p2, line) + if m: + name = m.group(1) + l = len(name) + if name: + auto = [x for x in nuke_nodes if x.lower().startswith(name.lower())] + else: + auto = nuke_nodes + return [contextCompleterClass(x, x[l:], True) for x in auto], None + # exists nodes + p3 = r"nuke\.toNode\(['\"](\w*)$" + m = re.search(p3, line) + if m: + name = m.group(1) + nuke.tprint(name) + nodes = [x.name() for x in nuke.allNodes()] #recurseGroups=True + if name: + result = [x for x in nodes if x.lower().startswith(name.lower())] + else: + result = nodes + l = len(name) + return [contextCompleterClass(x, x[l:], True) for x in result], None + return None, None + +################ CONTEXT MENU + +def contextMenu(parent): + m = nukeContextMenu(parent) + return m + +class nukeContextMenu(QMenu): + def __init__(self, parent): + super(nukeContextMenu, self).__init__('Nuke') + self.par = parent + # a.setShortcut('Alt+Return') + # a.setShortcutContext(Qt.ApplicationShortcut) + self.addAction(QAction('Read PyScript Knob', parent, triggered=self.readPyScriptKnob)) + self.addAction(QAction('Save To PyScript Knob', parent, triggered=self.saveToKnob)) + self.addSeparator() + self.addAction(QAction('From Selected', parent, triggered=self.nodeToCode)) + self.addAction(QAction('From Clipboard', parent, triggered=self.nodesFromClipboard)) + + def nodeToCode(self): + nodes = nuke.selectedNodes() + names = [x.name() for x in nodes] + result = '\n'.join(["nuke.toNode('%s')" % x for x in names]) + self.par.insertText(result) + + def getPyKnob(self, title): + s = nuke.selectedNodes() + if s: + s = s[0] + pyKnobs = [x for x in s.knobs().values() if x.Class() in ['PyScript_Knob','PythonCustomKnob']] + if pyKnobs: + result = {} + for k in pyKnobs: + result[k.name()] = k + if result: + dial = selectDialog(result.keys(), title) + if dial.exec_(): + name = dial.list.currentItem().text() + knob = result[name] + return knob + else: + nuke.message('Python Knobs not found') + else: + nuke.message('Select one node') + + def readPyScriptKnob(self): + knob = self.getPyKnob('Select Python Knob to Read') + if knob: + text = knob.value() + self.par.tab.addNewTab(knob.node().name()+' | '+knob.name(), text) + + def saveToKnob(self): + knob = self.getPyKnob('Select Python Knob to Save') + if knob: + text = self.par.tab.getCurrentText() + knob.setValue(text) + + def nodesFromClipboard(self): + nuke.tprint(str(self.par)) + text = QApplication.clipboard().text() + nodes = [] + if text: + for l in text.split('\n'): + res = re.findall(r'name \w+$', l) + if res: + name = res[0].split()[1] + nodes.append(name) + for n in nodes: + self.par.tab.addToCurrent('nuke.toNode("%s")\n' % n) + +class selectDialog(QDialog): + def __init__(self, items, title): + super(selectDialog, self).__init__() + self.setWindowTitle(title) + self.setWindowFlags(Qt.Tool) + self.list = QListWidget(self) + self.list.setSelectionMode(QAbstractItemView.SingleSelection) + self.ly = QVBoxLayout(self) + self.setLayout(self.ly) + self.ly.addWidget(self.list) + + self.btn = QPushButton('Select') + self.ly.addWidget(self.btn) + self.btn.clicked.connect(self.accept) + for i in items: + item = QListWidgetItem(i) + item.setData(32, i) + self.list.addItem(item) + + def closeEvent(self, *args, **kwargs): + self.reject() + super(selectDialog, self).closeEvent( *args, **kwargs) + + diff --git a/python/pw_multiScriptEditor/managers/completeWidget.py b/python/pw_multiScriptEditor/managers/completeWidget.py new file mode 100644 index 0000000..cd727ee --- /dev/null +++ b/python/pw_multiScriptEditor/managers/completeWidget.py @@ -0,0 +1,8 @@ + + +# context completer +class contextCompleterClass(object): + def __init__(self, name, complete, end=None): + self.name = name + self.complete = complete + self.end_char = end \ No newline at end of file diff --git a/python/pw_multiScriptEditor/managers/houdini/hou.py b/python/pw_multiScriptEditor/managers/houdini/hou.py new file mode 100644 index 0000000..c02db06 --- /dev/null +++ b/python/pw_multiScriptEditor/managers/houdini/hou.py @@ -0,0 +1,33445 @@ +mport hmath + +class EnumValue(object): + """ + hou.EnumValue + + This class is the base class for an enumeration value. It cannot be + instanced and is not meant to be used directly by the user. + + All the built-in HOM enumeration values are derived from this class such + as hou.paneTabType.*, hou.severityType.*, and hou.connectivityType.*. + """ + +class numericData(object): + + def __init__(self): raise AttributeError, "No constructor defined" + +class attribData(object): + """ + attribData + + Enumeration of attribute data types. + + * hou.attribData.Int + * hou.attribData.Float + * hou.attribData.String + """ + Int=None + Float=None + String=None + def __init__(self): raise AttributeError, "No constructor defined" + +class attribType(object): + """ + hou.attribType + + Enumeration of geometry attribute types. + + * hou.attribType.Point + * hou.attribType.Prim + * hou.attribType.Vertex + * hou.attribType.Global + Note that global attributes are also known as detail attributes. + + The type of data (e.g. int, float, string) is called the attribute data + type, can correspond to hou.attribData. + + See hou.Geometry.addAttrib and hou.Attrib for more information. + """ + Point=None + Prim=None + Vertex=None + Global=None + def __init__(self): raise AttributeError, "No constructor defined" + +class primType(object): + """ + hou.primType + + Enumeration of primitive types. + + * hou.primType.Polygon + * hou.primType.NURBSCurve + * hou.primType.BezierCurve + * hou.primType.Mesh + * hou.primType.NURBSSurface + * hou.primType.BezierSurface + * hou.primType.Circle + * hou.primType.Sphere + * hou.primType.Tube + * hou.primType.Metaball + * hou.primType.TriangleFan + * hou.primType.TriangleStrip + * hou.primType.TriangleBezier + * hou.primType.PastedSurface + * hou.primType.Volume + * hou.primType.ParticleSystem + * hou.primType.Tetrahedron + * hou.primType.PolySoup + * hou.primType.VDB + * hou.primType.AlembicRef + * hou.primType.Custom + * hou.primType.Unknown + hou.primType.Custom is a catch-all for all HDK-defined primitives types. + """ + Polygon=None + NURBSCurve=None + BezierCurve=None + Mesh=None + NURBSSurfac=None + BezierSurfa=None + Circle=None + Sphere=None + Tube=None + Metaball=None + TriangleFan=None + TriangleStr=None + TriangleBez=None + PastedSurfa=None + Volume=None + ParticleSys=None + Tetrahedron=None + PolySoup=None + VDB=None + AlembicRef=None + Custom=None + Unknown =None + def __init__(self): raise AttributeError, "No constructor defined" + +class parmData(object): + """ + hou.parmData + + Enumeration of parameter data types. + + * hou.parmData.Int + * hou.parmData.Float + * hou.parmData.String + * hou.parmData.Ramp + + """ + Int=None + Float=None + String=None + Ramp=None + def __init__(self): raise AttributeError, "No constructor defined" + +class parmTemplateType(object): + """ + hou.parmTemplateType + + Enumeration of parameter template types. + + * hou.parmTemplateType.Int + * hou.parmTemplateType.Float + * hou.parmTemplateType.String + * hou.parmTemplateType.Toggle + * hou.parmTemplateType.Menu + * hou.parmTemplateType.Button + * hou.parmTemplateType.FolderSet + * hou.parmTemplateType.Separator + * hou.parmTemplateType.Label + * hou.parmTemplateType.Ramp + + """ + Int=None + Float=None + String=None + Toggle=None + Menu=None + Button=None + FolderSet=None + Separator=None + Label=None + Ramp=None + def __init__(self): raise AttributeError, "No constructor defined" + +class parmLook(object): + """ + hou.parmLook + + Enumeration of available looks for a parameter + + These looks are used by hou.ParmTemplate objects and control the user + interface of the parameter in parameter editors. + + hou.parmLook.Regular + The default parameter look. + + hou.parmLook.Logarithmic + The parameter displays a slider that changes the value on a + logarithmic scale. + + hou.parmLook.Angle + The parameter has an arc control to enter an angle. + + If you use this look, set your parameter's naming scheme to + hou.parmNamingScheme.Base1. + + hou.parmLook.Vector + The parameter has a handle beside the label to edit the vector + direction. + + If you use this look, set your parameter's naming scheme to + hou.parmNamingScheme.XYZW. + + hou.parmLook.ColorSquare + The parameter has a square button beside the label to display the + current color. You can click on the square to edit the color. + + If you use this look, set your parameter's naming scheme to + hou.parmNamingScheme.RGBA. + + hou.parmLook.HueCircle + The parameter has a hue circle with a pie-shaped region, like the + keying nodes in COPs have. + + hou.parmLook.CRGBAPlaneChooser + The parameter has an RGBA mask, with buttons to toggle the red, + green, blue, and alpha planes. + + + """ + Regular=None + Logarithmic=None + Angle=None + Vector=None + ColorSquare=None + HueCircle=None + CRGBAPlaneChooser=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class parmNamingScheme(object): + """ + hou.parmNamingScheme + + Enumeration of available naming schemes for a parameter. + + These naming schemes are stored inside hou.ParmTemplate objects and + determine the names of hou.Parm objects inside hou.ParmTuple objects. + + The number of components in the parm template determines the number of + parms inside the parm tuple. If this number is 1, the parm name is the + same as the parm tuple name. If the naming scheme is Base1, the number + of components may be more than 4. Otherwise, the component may have + from 2 components up to the maximum number allowed by the naming scheme. + + The example names below are for a parm template named "foo": + + * hou.parmNamingScheme.Base1 + + "foo1", "foo2", "foo3", ... + + * hou.parmNamingScheme.XYZW + + "foox", "fooy", "fooz", "foow" + + * hou.parmNamingScheme.XYWH + + "foox", "fooy", "foow", "fooh" + + * hou.parmNamingScheme.UVW + + "foou", "foov", "foow" + + * hou.parmNamingScheme.RGBA + + "foor", "foog", "foob", "fooa" + + * hou.parmNamingScheme.MinMax + + "foomin", "foomax" + + * hou.parmNamingScheme.MaxMin + + "foomax", "foomin" + + * hou.parmNamingScheme.StartEnd + + "foostart", "fooend" + + * hou.parmNamingScheme.BeginEnd + + "foobegin", "fooend" + + The following restrictions exist on naming schemes: + + * You cannot use the following naming schemes when editing the parameter + interface on a node or a digital asset: MinMax, MaxMin, StartEnd, + BeginEnd, XYWH. However, some built-in node types use parameters with + these naming schemes, so asking these node types for their parm + templates may return ones using these naming schemes. + * String and toggle parameters only support the Base1 naming scheme. + * Parameters with the hou.parmLook.Vector look must use the XYZW naming + scheme. + * Parameters with the hou.parmLook.Angle look must use the Base1 naming + scheme. + * Parameters with the hou.parmLook.ColorSquare look must use an RGBA + naming scheme. + + """ + Base1=None + XYZW=None + XYWH=None + UVW=None + RGBA=None + MinMax=None + MaxMin=None + StartEnd=None + BeginEnd=None + def __init__(self): raise AttributeError, "No constructor defined" + +class parmCondType(object): + """ + hou.parmCondType + + Enumeration of available parameter conditional types. + + * hou.parmCondType.DisableWhen + * hou.parmCondType.HideWhen + + """ + DisableWhen=None + HideWhen=None + def __init__(self): raise AttributeError, "No constructor defined" + +class stringParmType(object): + """ + hou.stringParmType + + Enumeration of string parameter types. + + A hou.StringParmTemplate is set to one of these types to specify whether + a string parameter will hold an arbitrary string, a reference to a file, + a reference to a node, or a reference to multiple nodes. + + * hou.stringParmType.Regular + * hou.stringParmType.FileReference + * hou.stringParmType.NodeReference + * hou.stringParmType.NodeReferenceList + + """ + Regular=None + FileReference=None + NodeReference=None + NodeReferenceList=None + def __init__(self): raise AttributeError, "No constructor defined" + +class exprLanguage(object): + """ + hou.exprLanguage + + Enumeration of available expression languages. + + * hou.exprLanguage.Python + * hou.exprLanguage.Hscript + + """ + Python=None + Hscrip=None + def __init__(self): raise AttributeError, "No constructor defined" + +class scriptLanguage(object): + """ + hou.scriptLanguage + + Enumeration of available script languages. + + * hou.scriptLanguage.Python + * hou.scriptLanguage.Hscript + + """ + Python=None + Hscript=None + def __init__(self): raise AttributeError, "No constructor defined" + +class fileType(object): + """ + hou.fileType + + Enumeration of file types. + + * hou.fileType.Any + * hou.fileType.Image + * hou.fileType.Geometry + * hou.fileType.Ramp + * hou.fileType.Capture + * hou.fileType.Clip + * hou.fileType.Lut + * hou.fileType.Cmd + * hou.fileType.Midi + * hou.fileType.I3d + * hou.fileType.Chan + * hou.fileType.Sim + * hou.fileType.SimData + * hou.fileType.Hip + * hou.fileType.Otl + * hou.fileType.Dae + * hou.fileType.Gallery + * hou.fileType.Directory + + """ + Any=Nonr + Image=Nonr + Geometry=Nonr + Ramp=Nonr + Capture=Nonr + Clip=Nonr + Lut=Nonr + Cmd=Nonr + Midi=Nonr + I3d=Nonr + Chan=Nonr + Sim=Nonr + SimData=Nonr + Hip=Nonr + Otl=Nonr + Dae=Nonr + Gallery=Nonr + Directory=Nonr + def __init__(self): raise AttributeError, "No constructor defined" + +class fileChooserMode(object): + """ + hou.fileChooserMode + + Enumeration of possible read/write modes for the file chooser. + + See hou.ui.selectFile for more information. + + * hou.fileChooserMode.Read + * hou.fileChooserMode.Write + * hou.fileChooserMode.ReadAndWrite + + """ + Read=None + Write=None + ReadAndWrite=None + def __init__(self): raise AttributeError, "No constructor defined" + +class folderType(object): + """ + hou.folderType + + Enumeration of folder types for FolderParmTemplates. + + * hou.folderType.Collapsible + + A folder that expands and collapses to show and hide its contents + respectively. + + * hou.folderType.Simple + + A simple folder for organizing parameters in the form of a group box. + + * hou.folderType.Tabs + + A normal folder represented by a tab. + + * hou.folderType.RadioButtons + + A folder with a radio button. The open folder is the selected radio + button in the set of buttons. + + * hou.folderType.MultiparmBlock + + A block of multiparms. The user can add or remove instances of this + parameter block. + + * hou.folderType.ScrollingMultiparmBlock + + A multiparm block inside a smaller region with scroll bars. + + * hou.folderType.TabbedMultiparmBlock + + A multiparm block where each instance of the parameters in the block + appears in its own tab. + + * hou.folderType.ImportBlock + + A block containing parameters imported from another node. + + See also hou.FolderParmTemplate. + + + """ + Collapsible=None + Simple=None + Tabs=None + RadioButtons=None + MultiparmBlock=None + ScrollingMultiparmBlock=None + TabbedMultiparmBlock=None + ImportBlock=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class menuType(object): + """ + hou.menuType + + Enumeration of menu types for MenuParmTemplates and StringParmTemplates + with menus. + + * hou.menuType.Normal + + A standard menu that displays the currently selected menu item. + + * hou.menuType.Mini + + A condensed menu that only displays a dropdown arrow. Houdini lets + you choose a menu entry when you click on this arrow. + + * hou.menuType.StringReplace + + A menu that also displays an input field. Selecting an entry from + this menu will replace the contents of the field with the menu item. + This type of menu only has meaning for string parameters. + + * hou.menuType.StringToggle + + A menu that also displays an input field. Selecting an entry from + this menu will add the menu item to the field if it was not already + there, and will remove it from the field it if was. This type of menu + only has meaning for string parameters. + + See also hou.MenuParmTemplate and hou.StringParmTemplate. + + + """ + Normal=None + Mini=None + StringReplace=None + StringToggle=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class paneTabType(object): + """ + hou.paneTabType + + Enumeration of pane tab types. + + * hou.paneTabType.SceneViewer + * hou.paneTabType.ChannelViewer + * hou.paneTabType.CompositorViewer + * hou.paneTabType.OutputViewer + * hou.paneTabType.MaterialPalette + * hou.paneTabType.IPRViewer + * hou.paneTabType.NetworkEditor + * hou.paneTabType.Parm + * hou.paneTabType.DetailsView + * hou.paneTabType.ChannelEditor + * hou.paneTabType.ChannelList + * hou.paneTabType.Textport + * hou.paneTabType.HandleList + * hou.paneTabType.BundleList + * hou.paneTabType.TakeList + * hou.paneTabType.TreeView + * hou.paneTabType.HelpBrowser + * hou.paneTabType.PythonPanel + * hou.paneTabType.ParmSpreadsheet + * hou.paneTabType.LightLinker + * hou.paneTabType.AssetBrowser + + """ + SceneViewer=None + ChannelViewer=None + CompositorViewer=None + OutputViewer=None + MaterialPalette=None + IPRViewer=None + NetworkEditor=None + Parm=None + DetailsView=None + ChannelEditor=None + ChannelList=None + Textport=None + HandleList=None + BundleList=None + TakeList=None + TreeView=None + HelpBrowser=None + PythonPanel=None + ParmSpreadsheet=None + LightLinker=None + AssetBrowser=None + def __init__(self): raise AttributeError, "No constructor defined" + +class paneLinkType(object): + """ + hou.paneLinkType + + Enumeration of possible pane link values. + + * hou.paneLinkType.Pinned + * hou.paneLinkType.Group1 + * hou.paneLinkType.Group2 + * hou.paneLinkType.Group3 + * hou.paneLinkType.Group4 + * hou.paneLinkType.Group5 + * hou.paneLinkType.Group6 + * hou.paneLinkType.Group7 + * hou.paneLinkType.Group8 + * hou.paneLinkType.FollowSelection + + """ + Pinned=None + Group1=None + Group2=None + Group3=None + Group4=None + Group5=None + Group6=None + Group7=None + Group8=None + FollowSelection=None + def __init__(self): raise AttributeError, "No constructor defined" + +class geometryViewportType(object): + """ + hou.geometryViewportType + + Enumeration of scene viewer viewport types. + + * hou.geometryViewportType.Perspective + * hou.geometryViewportType.Top + * hou.geometryViewportType.Bottom + * hou.geometryViewportType.Front + * hou.geometryViewportType.Back + * hou.geometryViewportType.Right + * hou.geometryViewportType.Left + * hou.geometryViewportType.UV + + """ + Perspective=None + Top=None + Bottom=None + Front=None + Back=None + Right=None + Left=None + UV =None + def __init__(self): raise AttributeError, "No constructor defined" + +class glShadingType(object): + + def __init__(self): raise AttributeError, "No constructor defined" + +class geometryViewportLayout(object): + + def __init__(self): raise AttributeError, "No constructor defined" + +class snappingMode(object): + """ + snappingMode + + Enumeration of snapping modes. + + * hou.snappingMode.Off + * hou.snappingMode.Grid + * hou.snappingMode.Prim + * hou.snappingMode.Point + * hou.snappingMode.Multi + See hou.SceneViewer.snappingMode. + """ + Off=None + Grid=None + Prim=None + Point=None + Multi=None + def __init__(self): raise AttributeError, "No constructor defined" + +class pickStyle(object): + """ + hou.pickStyle + + Enumeration of pick styles. + + * hou.pickStyle.Box + * hou.pickStyle.Lasso + * hou.pickStyle.Brush + * hou.pickStyle.Laser + + """ + Box=None + Lasso=None + Brush=None + Laser=None + def __init__(self): raise AttributeError, "No constructor defined" + +class pickModifier(object): + """ + hou.pickModifier + + Enumeration of methods for modifying selections with new components. + + * hou.pickModifier.Add + * hou.pickModifier.Toggle + * hou.pickModifier.Remove + * hou.pickModifier.Replace + * hou.pickModifier.Intersect + + """ + Add=None + Toggle=None + Remove=None + Replace=None + Intersect=None + def __init__(self): raise AttributeError, "No constructor defined" + +class pickFacing(object): + """ + hou.pickFacing + + Enumeration for describing the facing direction of pickable components. + + * hou.pickFacing.Front + * hou.pickFacing.Back + * hou.pickFacing.FrontAndBack + + """ + Front=None + Back=None + FrontAndBack=None + def __init__(self): raise AttributeError, "No constructor defined" + +class groupListType(object): + """ + hou.groupListType + + Enumeration of group list types. + + * hou.groupListType.Points + * hou.groupListType.Vertices + * hou.groupListType.Edges + * hou.groupListType.Breakpoints + * hou.groupListType.Primitives + * hou.groupListType.MatchPickType + + """ + Points=None + Vertices=None + Edges=None + Breakpoints=None + Primitives=None + MatchPickType=None + def __init__(self): raise AttributeError, "No constructor defined" + +class geometryType(object): + """ + hou.geometryType + + Enumeration of geometry component types. + + * hou.geometryType.Points + * hou.geometryType.Vertices + * hou.geometryType.Edges + * hou.geometryType.Breakpoints + * hou.geometryType.Primitives + + """ + Points=None + Vertices=None + Edges=None + Breakpoints=None + Primitives=None + def __init__(self): raise AttributeError, "No constructor defined" + +class connectivityType(object): + """ + hou.connectivityType + + Enumeration of connectivity types. + + * hou.connectivityType.NoConnectivity + * hou.connectivityType.Texture + * hou.connectivityType.Position + + """ + NoConnectivi=None + Texture=None + Position=None + def __init__(self): raise AttributeError, "No constructor defined" + +class severityType(object): + """ + hou.severityType + + Enumeration of dialog message severities. + + * hou.severityType.Message + * hou.severityType.ImportantMessage + * hou.severityType.Warning + * hou.severityType.Error + * hou.severityType.Fatal + + """ + Message=None + ImportantMessage=None + Warning=None + Error=None + Fatal=None + def __init__(self): raise AttributeError, "No constructor defined" + +class positionType(object): + """ + hou.positionType + + Enumeration of spaces. + + * hou.positionType.WorldSpace + * hou.positionType.ViewportXY + * hou.positionType.ViewportUV + + """ + WorldSpace=None + ViewportXY=None + ViewportUV=None + def __init__(self): raise AttributeError, "No constructor defined" + +class shadingMode(object): + """ + hou.shadingMode + """ + WireBoundingBox=None + ShadedBoundingBox=None + Wireframe=None + HiddenLineInvisible=None + HiddenLineGhost=None + FlatShaded=None + FlatWireShaded=None + SmoothShaded=None + SmoothWireShaded=None + VexShaded=None + VexWireShaded=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class shaderType(object): + """ + hou.shaderType + + Enumeration of SHOP shader types. + + Each SHOP type defines a particular type of shader. For example, it + might be a surface shader or a displacement shader. This enumeration + contains all the possible shader types. + + Use hou.ShopNodeType.shaderType to determine what type of shader a + particular SHOP type is. + + * hou.shaderType.Surface + * hou.shaderType.SurfaceShadow + * hou.shaderType.Displacement + * hou.shaderType.Geometry + * hou.shaderType.Interior + * hou.shaderType.Light + * hou.shaderType.LightShadow + * hou.shaderType.Atmosphere + * hou.shaderType.Lens + * hou.shaderType.Output + * hou.shaderType.Background + * hou.shaderType.Photon + * hou.shaderType.Image3D + * hou.shaderType.BSDF + * hou.shaderType.CVEX + * hou.shaderType.Mutable + * hou.shaderType.Properties + * hou.shaderType.Material + * hou.shaderType.VopMaterial + * hou.shaderType.ShaderClass + """ + Surface=None + SurfaceShadow=None + Displacement=None + Geometry=None + Interior=None + Light=None + LightShadow=None + Atmosphere=None + Lens=None + Output=None + Background=None + Photon=None + Image3D=None + BSDF=None + CVEX=None + Mutable=None + Properties=None + Material=None + VopMaterial=None + ShaderClass=None + def __init__(self): raise AttributeError, "No constructor defined" + +class rampBasis(object): + """ + hou.rampBasis + + Enumeration of ramp interpolation types. + + These interpolation types specify how Houdini interpolates between + keyframed values in a hou.Ramp. See hou.Ramp.basis and + hou.Ramp.__init__ for more information about how to get and set ramp + interpolation types. + + hou.rampBasis.Linear + Does a linear (straight line) interpolation between keys. + + hou.rampBasis.Constant + Holds the value constant until the next key. + + hou.rampBasis.CatmullRom + Interpolates smoothly between the keys. See Wikipedia's Catmull- + Rom_spline page. + + hou.rampBasis.MonotonicCubic + Another smooth interpolation that ensures that there is no + overshoot. For example, if a key's value is smaller than the values + in the adjacent keys, this type ensures that the interpolated value + is never less than the key's value. + + hou.rampBasis.Bezier + Cubic Bezier curve that interpolates every third control point and + uses the other points to shape the curve. See Wikipedia's Bezier + curve page. + + hou.rampBasis.BSpline + Cubic curve where the control points influence the shape of the + curve locally (that is, they influence only a section of the curve). + See Wikipedia's B-Spline page. + + hou.rampBasis.Hermite + Cubic Hermite curve that interpolates the odd control points, while + even control points control the tangent at the previous + interpolation point. See Wikipedia's Hermite spline page. + """ + Linear=None + Constant=None + CatmullRom=None + MonotonicCubic=None + Bezier=None + BSpline=None + Hermite=None + def __init__(self): raise AttributeError, "No constructor defined" + +class rampParmType(object): + """ + hou.rampParmType + + Enumeration of ramp types. + + * hou.rampParmType.Color + * hou.rampParmType.Float + : + * hou.RampParmTemplate + """ + Color=None + Float=None + def __init__(self): raise AttributeError, "No constructor defined" + +class colorType(object): + """ + hou.colorType + + Enumeration of color spaces. + + * hou.colorType.RGB + + The red green blue color model. + + * hou.colorType.HSV + + The hue saturation value color model. + + * hou.colorType.HSL + + The hue saturation lightness color model. + + * hou.colorType.LAB + + The CIE L* a* b* color space model. + + * hou.colorType.XYZ + + The CIE XYZ color space model. + + + """ + RGB=None + HSV=None + HSL=None + LAB=None + XYZ=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class componentType(object): + """ + hou.componentType + """ + Point=None + Primitive=None + Edge=None + Vertex=None + Breakpoint=None + def __init__(self): raise AttributeError, "No constructor defined" + +class numericType(object): + """ + hou.numericType + """ + Int8=None + Int16=None + Int32=None + Int64=None + Float16=None + Float32=None + Float64=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class nodeTypeSource(object): + """ + hou.nodeTypeSource + + Enumeration of node type sources. + + * hou.nodeTypeSource.Internal + * hou.nodeTypeSource.CompiledCode + * hou.nodeTypeSource.VexCode + * hou.nodeTypeSource.RslCode + * hou.nodeTypeSource.Subnet + + """ + Internal=None + CompiledCode=None + VexCode=None + RslCode=None + Subnet=None + def __init__(self): raise AttributeError, "No constructor defined" + +class fieldType(object): + """ + hou.fieldType + + Enumeration of field types. + + * hou.fieldType.NoSuchField + * hou.fieldType.Integer + * hou.fieldType.Boolean + * hou.fieldType.Float + * hou.fieldType.String + * hou.fieldType.Vector2 + * hou.fieldType.Vector3 + * hou.fieldType.Vector4 + * hou.fieldType.Quaternion + * hou.fieldType.Matrix3 + * hou.fieldType.Matrix4 + * hou.fieldType.UV + * hou.fieldType.UVW + * hou.fieldType.IntArray + * hou.fieldType.FloatArray + + """ + NoSuchField=None + Integer=None + Boolean=None + Float=None + String=None + Vector2=None + Vector3=None + Vector4=None + Quaternion=None + Matrix3=None + Matrix4=None + UV=None + UVW=None + IntArray=None + FloatArray=None + def __init__(self): raise AttributeError, "No constructor defined" + +class renderMethod(object): + """ + hou.renderMethod + + Enumeration of dependency rendering methods. + + * hou.renderMethod.RopByRop + * hou.renderMethod.FrameByFrame + + """ + RopByRop=None + FrameByFrame=None + def __init__(self): raise AttributeError, "No constructor defined" + +class updateMode(object): + """ + hou.updateMode + + Enumeration of interface update modes. + + See hou.updateModeSetting for more information. + + * hou.updateMode.AutoUpdate + * hou.updateMode.OnMouseUp + * hou.updateMode.Manual + + """ + AutoUpdate=None + OnMouseUp=None + Manual=None + def __init__(self): raise AttributeError, "No constructor defined" + +class licenseCategoryType(object): + """ + licenseCategoryType + + Enumeration of license category values. + + * hou.licenseCategoryType.Commercial + * hou.licenseCategoryType.Education + * hou.licenseCategoryType.ApprenticeHD + * hou.licenseCategoryType.Apprentice + + """ + Commercial=None + Education=None + ApprenticeHD=None + Apprentice=None + def __init__(self): raise AttributeError, "No constructor defined" + +class hdaLicenseType(object): + """ + hou.hdaLicenseType + + Enumeration of digital asset license permission levels. + + Enumeration values: + + * Execute + * Read + * Full + + """ + Execute=None + Read=None + Full=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class orientUpAxis(object): + """ + hou.orientUpAxis + + Enumeration of global orientation mode. + + See hou.ui.orientationUpAxis for more information. + + * hou.orientUpAxis.Y + * hou.orientUpAxis.Z + + """ + Y=None + Z=None + def __init__(self): raise AttributeError, "No constructor defined" + +class nodeEventType(object): + """ + nodeEventType + + Enumeration of types of events that can happen to nodes. + + See hou.Node.addEventCallback for more information. + + * hou.nodeEventType.BeingDeleted + * hou.nodeEventType.NameChanged + * hou.nodeEventType.FlagChanged + * hou.nodeEventType.AppearanceChanged + * hou.nodeEventType.PositionChanged + * hou.nodeEventType.InputRewired + * hou.nodeEventType.ParmTupleChanged + * hou.nodeEventType.ChildCreated + * hou.nodeEventType.ChildDeleted + * hou.nodeEventType.ChildSwitched + * hou.nodeEventType.ChildSelectionChanged + + """ + BeingDeleted=None + NameChanged=None + FlagChanged=None + AppearanceChanged=None + PositionChanged=None + InputRewired=None + ParmTupleChanged=None + ChildCreated=None + ChildDeleted=None + ChildSwitched=None + ChildSelectionChanged=None + def __init__(self): raise AttributeError, "No constructor defined" + +class appearanceChangeType(object): + """ + appearanceChangeType + + Enumeration of types of appearance change events that can happen to + nodes. + + See hou.Node.addEventCallback for more information. + + * hou.appearanceChangeType.Any + * hou.appearanceChangeType.ErrorState + * hou.appearanceChangeType.Pick + * hou.appearanceChangeType.Color + * hou.appearanceChangeType.DeleteScript + * hou.appearanceChangeType.CommentLockFlag + * hou.appearanceChangeType.CompressFlag + * hou.appearanceChangeType.OTLMatchState + * hou.appearanceChangeType.ActiveInput + * hou.appearanceChangeType.Connections + * hou.appearanceChangeType.ExpressionLanguage + * hou.appearanceChangeType.NetworkBox + * hou.appearanceChangeType.PostIt + + """ + Any=None + ErrorState=None + Pick=None + Color=None + DeleteScript=None + CommentLockFlag=None + CompressFlag=None + OTLMatchState=None + ActiveInput=None + Connections=None + ExpressionLanguage=None + NetworkBox=None + PostIt=None + def __init__(self): raise AttributeError, "No constructor defined" + +class imageDepth(object): + """ + imageDepth + + Enumeration of image depths (data formats) for representing the pixels + in an image plane. + + See hou.CopNode.depth for more information. + + * hou.imageDepth.Int8 + * hou.imageDepth.Int16 + * hou.imageDepth.Int32 + * hou.imageDepth.Float16 + * hou.imageDepth.Float32 + + """ + Int8=None + Int16=None + Int32=None + Float16=None + Float32=None + def __init__(self): raise AttributeError, "No constructor defined" + +class playMode(object): + """ + hou.playMode + + Enumeration of play modes for the main playbar in Houdini. + + * hou.playMode.Loop + + Play through the frame range and when reaching the end of the range + loop back to the beginning and continue the playback. + + * hou.playMode.Once + + Play through the frame range and when reaching the end of the range + stop the playback. + + * hou.playMode.Zigzag + + Play through the frame range and when reaching the end of the range + reverse the playback. When the reverse playback reaches the beginning + of the range, then continue playback in the forward direction, etc. + """ + Loop = None + Once = None + Zigzag = None + def __init__(self): raise AttributeError, "No constructor defined" + +class playbarEvent(object): + """ + hou.playbarEvent + + Enumeration of the playbar events that can be handled by callback + functions registered with hou.playbar.addEventCallback(). + + * hou.playbarEvent.Started + + This event is triggered when the playbar has started playback either + in the forward or reverse direction. + + * hou.playbarEvent.Stopped + + This event is triggered when running playback has stopped. + + * hou.playbarEvent.FrameChanged + + This event is triggered when the playbar has changed to another frame + and after the scene has been cooked for the new frame. + + + """ + Started=None + Stopped=None + FrameChanged=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class perfMonTimeFormat(object): + """ + perfMonTimeFormat + + Enumeration of the different formats used when viewing times in the + Performance Monitor panetab. + + * hou.perfMonTimeFormat.Absolute + * hou.perfMonTimeFormat.Percent + + """ + Absolute=None + Percent=None + def __init__(self): raise AttributeError, "No constructor defined" + +class perfMonObjectView(object): + """ + perfMonObjectView + + Enumeration of the different structures that are used to view objects in + the Performance Monitor panetab. + + * hou.perfMonObjectView.List + * hou.perfMonObjectView.Tree + * hou.perfMonObjectView.EventLog + + """ + List=None + Tree=None + EventLog=None + def __init__(self): raise AttributeError, "No constructor defined" + +class compressionType(object): + + def __init__(self): raise AttributeError, "No constructor defined" + +class nodeTypeFilter(object): + """ + hou.nodeTypeFilter + + Enumeration of available node type filters. + + These filters are used by node bundles to limit the nodes in the bundle + based on type. + + hou.nodeTypeFilter.NoFilter + Any node + + hou.nodeTypeFilter.Sop + Any SOP + + hou.nodeTypeFilter.Pop + Any POP + + hou.nodeTypeFilter.Popnet + Any POP Network + + hou.nodeTypeFilter.Chop + Any CHOP + + hou.nodeTypeFilter.Chopnet + Any CHOP Network + + hou.nodeTypeFilter.Cop + Any COP + + hou.nodeTypeFilter.Copnet + Any COP Network + + hou.nodeTypeFilter.Vop + Any VOP + + hou.nodeTypeFilter.Vopnet + Any VOP Network + + hou.nodeTypeFilter.Rop + Any ROP + + hou.nodeTypeFilter.Shop + Any SHOP + + hou.nodeTypeFilter.Obj + Any Object + + hou.nodeTypeFilter.ObjBone + Object: Bone Only + + hou.nodeTypeFilter.ObjCamera + Object: Camera Only + + hou.nodeTypeFilter.ObjFog + Object: Fog Only + + hou.nodeTypeFilter.ObjGeometry + Object: Geometry Only + + hou.nodeTypeFilter.ObjGeometryOrFog + Object: Geometry and Fog Only + + hou.nodeTypeFilter.ObjLight + Object: Light Only + + hou.nodeTypeFilter.ObjMuscle + Object: Muscle Only + + hou.nodeTypeFilter.ObjSubnet + Object: Muscle Only + + hou.nodeTypeFilter.ShopAtmosphere + Shop: Atmosphere Only + + hou.nodeTypeFilter.ShopCVEX + Shop: CVEX Only + + hou.nodeTypeFilter.ShopDisplacement + Shop: Displacement Only + + hou.nodeTypeFilter.ShopImage3D + Shop: Image3D Only + + hou.nodeTypeFilter.ShopInterior + Shop: Interior Only + + hou.nodeTypeFilter.ShopLight + Shop: Light Only + + hou.nodeTypeFilter.ShopLightShadow + Shop: Light Shadow Only + + hou.nodeTypeFilter.ShopShopMaterial + Shop: Material Only + + hou.nodeTypeFilter.ShopPhoton + Shop: Photon Only + + hou.nodeTypeFilter.ShopProperties + Shop: Properties Only + + hou.nodeTypeFilter.ShopSurface + Shop: Surface Only + + + """ + NoFilter=None + Sop=None + Pop=None + Popnet=None + Chop=None + Chopnet=None + Cop=None + Copnet=None + Vop=None + Vopnet=None + Rop=None + Shop=None + Obj=None + ObjBone=None + ObjCamera=None + ObjFog=None + ObjGeometry=None + ObjGeometryOrFog=None + ObjLight=None + ObjMuscle=None + ObjSubnet=None + ShopAtmosphere=None + ShopCVEX=None + ShopDisplacement=None + ShopImage3D=None + ShopInterior=None + ShopLight=None + ShopLightShadow=None + ShopShopMaterial=None + ShopPhoton=None + ShopProperties=None + ShopSurface=None + def __init__(self): raise AttributeError, "No constructor defined" + +class vdbData(object): + """ + hou.vdbData + + Enumeration of hou.VDB voxel data types. + + * hou.vdbData.Boolean + * hou.vdbData.Float + * hou.vdbData.Int + * hou.vdbData.Vector3 + + """ + Boolean=None + Float=None + Int=None + Vector3=None + def __init__(self): raise AttributeError, "No constructor defined" + +class channelEditorMode(object): + + def __init__(self): raise AttributeError, "No constructor defined" + +class vopParmGenType(object): + """ + hou.vopParmGenType + + Enumeration of the different node configurations that can be created for + the inputs of a VOP node when calling hou.VopNode.insertParmGenerator() + or hou.VopNode.insertParmGeneratorsForAllInputs(). + + * hou.vopParmGenType.Constant + + Create a Constant VOP and connect it to the VOP node's input. + + * hou.vopParmGenType.Parameter + + Create a Parameter VOP and connect it to the VOP node's input. The + input parameter is automatically promoted to the VOP network's + parameter interface. + + * hou.vopParmGenType.SubnetInput + + Create a Parameter VOP and connect it to the VOP node's input. + Additionally set the Parameter VOP's Scope parameter to Subnet. The + input parameter is automatically promoted to the owning Subnet VOP's + parameter interface. + """ + Constant=None + Parameter=None + SubnetInput=None + + def __init__(self): raise AttributeError, "No constructor defined" + +class stateGenerateMode(object): + """ + hou.stateGenerateMode + + Enumeration of possible node generation modes by states. + + See hou.SceneViewer.setCurrentState for more information. + + * hou.stateGenerateMode.Insert + * hou.stateGenerateMode.Branch + + """ + Insert=None + Branch=None + def __init__(self): raise AttributeError, "No constructor defined" + +class SystemExit: + """ + hou.SystemExit + """ + + def __init__(self, *args): + """ + hou.SystemExit + """ + def code(self): + """ + code(self) -> int + """ + return 0 + +class Error: + """ + hou.Error + + Base class for all exceptions in the hou module. + + You can check if an exception instance is a Houdini-specific exception + using isinstance(ex, hou.Error). + """ + + def __init__(self, *args): + """ + hou.Error + + Base class for all exceptions in the hou module. + + You can check if an exception instance is a Houdini-specific exception + using isinstance(ex, hou.Error). + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + + def instanceMessage(self): + """ + instanceMessage(self) -> str + + Return a message specific to the exception instance. + """ + return '' + +class NotAvailable(Error): + """ + hou.NotAvailable + + Exception class for when an operation attempted to use a feature that is + not available. This class is a subclass of hou.Error. + + RELATED + * hou.Error + + + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, NotAvailable, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, NotAvailable, name) + def __init__(self, *args): + """ + hou.NotAvailable + + Exception class for when an operation attempted to use a feature that is + not available. This class is a subclass of hou.Error. + + RELATED + * hou.Error + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + + +class ObjectWasDeleted(Error): + """ + hou.ObjectWasDeleted + + Exception class for when you use a stale variable to attempt to access + something that was deleted in Houdini. This class is a subclass of + hou.Error. + + For example, setting a variable to a Node object, deleting that node in + Houdini, and attempting to call a method using the variable will raise + this exception. + + RELATED + * hou.Error + + + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, ObjectWasDeleted, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, ObjectWasDeleted, name) + def __init__(self, *args): + """ + hou.ObjectWasDeleted + + Exception class for when you use a stale variable to attempt to access + something that was deleted in Houdini. This class is a subclass of + hou.Error. + + For example, setting a variable to a Node object, deleting that node in + Houdini, and attempting to call a method using the variable will raise + this exception. + + RELATED + * hou.Error + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + + def __repr__(self): return '' + def __str__(self): return '' + +class InvalidInput(Error): + """ + hou.InvalidInput + + Exception that is raised when you try to set a node's input to something + invalid. + + + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, InvalidInput, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, InvalidInput, name) + def __init__(self, *args): + """ + hou.InvalidInput + + Exception that is raised when you try to set a node's input to something + invalid. + """ + this = InvalidInput() + try: self.this.append(this) + except: self.this = this + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + + def __repr__(self): return '' + def __str__(self): return '' + +class InvalidSize(Error): + """ + hou.InvalidSize + + Exception that is raised when you pass a sequence of the wrong length to + a function. + + + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, InvalidSize, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, InvalidSize, name) + def __init__(self, *args): + """ + hou.InvalidSize + + Exception that is raised when you pass a sequence of the wrong length to + a function. + """ + this = InvalidSize() + try: self.this.append(this) + except: self.this = this + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + + def __repr__(self): return '' + def __str__(self): return '' + +class TypeError(Error): + """ + hou.TypeError + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, TypeError, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, TypeError, name) + def __init__(self, *args): + """ + hou.TypeError + """ + this = TypeError() + try: self.this.append(this) + except: self.this = this + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + +class ValueError(Error): + """ + hou.ValueError + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, ValueError, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, ValueError, name) + def __init__(self, *args): + """ + hou.ValueError + """ + this = self + try: self.this.append(this) + except: self.this = this + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + +class OperationFailed(Error): + """ + hou.OperationFailed + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, OperationFailed, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, OperationFailed, name) + def __init__(self, *args): + """ + hou.OperationFailed + """ + this = self + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + +class InvalidNodeType(Error): + """ + hou.InvalidNodeType + + Exception that is raised when you try to call a method on a Node that + isn't supported by that type of node. + + For example, if you ask a non-subnet node for its indirect inputs, + hou.Node.indirectInputs raises an instance of this exception. + + + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, InvalidNodeType, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, InvalidNodeType, name) + def __init__(self, *args): + """ + hou.InvalidNodeType + + Exception that is raised when you try to call a method on a Node that + isn't supported by that type of node. + + For example, if you ask a non-subnet node for its indirect inputs, + hou.Node.indirectInputs raises an instance of this exception. + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + + +class InitScriptFailed(Error): + """ + hou.InitScriptFailed + + + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, InitScriptFailed, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, InitScriptFailed, name) + def __init__(self, *args): + """ + hou.InitScriptFailed + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + +class MatchDefinitionError(Error): + """ + hou.MatchDefinitionError + + + """ + __swig_setmethods__ = {} + for _s in [Error]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + __setattr__ = lambda self, name, value: _swig_setattr(self, MatchDefinitionError, name, value) + __swig_getmethods__ = {} + for _s in [Error]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + __getattr__ = lambda self, name: _swig_getattr(self, MatchDefinitionError, name) + def __init__(self, *args): + """ + hou.MatchDefinitionError """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + +class PermissionError(Error): + """ + hou.PermissionError + + """ + def __init__(self, *args): + """ + hou.PermissionError """ + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. """ + return '' + + def instanceMessage(self): + """ + instanceMessage(self) -> str + Return a message specific to the exception instance. """ + return '' + +class GeometryPermissionError(Error): + """ + hou.GeometryPermissionError + Exception that is raised when you try to modify geometry from outside of + a Python SOP. + + """ + def __init__(self, *args): + """ + hou.GeometryPermissionError + + Exception that is raised when you try to modify geometry from outside of + a Python SOP. """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. """ + return '' + +class KeyframeValueNotSet(Error): + """ + hou.KeyframeValueNotSet + + """ + def __init__(self, *args): + """ + hou.KeyframeValueNotSet + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. """ + return '' + +class OperationInterrupted(Error): + """ + hou.OperationInterrupted + + """ + def __init__(self, *args): + """ + hou.OperationInterrupted """ + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. """ + return '' + +class LoadWarning(Error): + """ + hou.LoadWarning + + Exception class for when loading a hip file in Houdini generates + warnings. + + """ + def __init__(self, *args): + """ + hou.LoadWarning + + Exception class for when loading a hip file in Houdini generates + warnings. + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. """ + return '' + +class NodeError(Error): + """ + hou.NodeError + + Exception class used to set errors on nodes implemented via Python. + + Raise instances of this class from within Python SOPs, objects, etc. to + set an error flag on the node. See Writing Python SOPs for more + information. + + RELATED + * hou.NodeWarning + * hou.Error + + """ + + def __init__(self, *args): + """ + hou.NodeError + + Exception class used to set errors on nodes implemented via Python. + + Raise instances of this class from within Python SOPs, objects, etc. to + set an error flag on the node. See Writing Python SOPs for more + information. + + RELATED + * hou.NodeWarning + * hou.Error """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. """ + return '' + +class NodeWarning(Error): + """ + hou.NodeWarning + + Exception class used to set warnings on nodes implemented via Python. + + Raise instances of this class from within Python SOPs, objects, etc. to + set an warning messages on the node. See Writing Python SOPs for more + information. + + RELATED + * hou.NodeError + * hou.Error + """ + + def __init__(self, *args): + """ + hou.NodeWarning + + Exception class used to set warnings on nodes implemented via Python. + + Raise instances of this class from within Python SOPs, objects, etc. to + set an warning messages on the node. See Writing Python SOPs for more + information. + + RELATED + * hou.NodeError + * hou.Error + """ + + def exceptionTypeName(self): + """ + exceptionTypeName(self) -> str + + Return the name of the exception type. Instances of different subclasses + of hou.Error will return different names. Instances of the base class + will return "Error". + + You can also use str(e.__class__) to get the name of the subclass. + """ + return '' + + def description(self): + """ + description(self) -> str + + Return a description of the class of exception. The description is not + related to the exception instance. + """ + return '' + + +class NetworkBox(object): + """ + hou.NetworkBox + + Represents a network box. + + To create a network box, use the hou.Node.createNetworkBox method on the + node inside which you want to create the box. To get an existing network + box, use the hou.Node.findNetworkBox method on the node containing the + network box. To get a list of all network boxes in a network, use the + hou.Node.networkBoxes method on the containing node. + + REPLACES + * nbcolor + * nbget + * nblocate + * nbls + * nblsop + * nbname + * nbop + * nbrm + * nbset + * nbsize + * opscript + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def name(self): + """ + name(self) -> str + + Return the name of the network box. """ + return '' + + def setName(self): + """ + setName(self, name) + + Sets the name of the network box. """ + + def parent(self): + """ + parent(self) -> Node + + Returns the node which contains the network box. """ + return Node() + + def position(self): + """ + position(self) -> hou.Vector2 + + Return the position of this network box. """ + return Vector2() + + def setPosition(self, vector2): + """ + setPosition(self, vector2) + + Sets the position of this network box to the given hou.Vector2. Use + move() to move the box relative to its current position. """ + + def move(self, vector2): + """ + move(self, vector2) + + Moves the network box by the increments in the given hou.Vector2. Use + setPosition() to set the box's absolute position. """ + + + def size(self): + """ + size(self) -> hou.Vector2 + + Returns the size of this network box. + """ + return Vector2() + + def setSize(self, size): + """ + setSize(self, size) + + Sets the size of this network box to the given hou.Vector2. Use resize() + to set the box's size relative to its current size. """ + + def resize(self, vector2): + """ + resize(self, vector2) + + Resizes a network box by the increments in the given hou.Vector2. Use + setSize() to set the box's absolute size. """ + + def fitAroundContents(self): + """ + fitAroundContents(self) + + Resizes the network box to fit its contents. """ + + def isMinimized(self): + """ + isMinimized(self) -> bool + + Returns whether the network box is minimized. """ + return True + + def setMinimized(self): + """ + setMinimized(self, on) + + Minimizes or restores the network box. """ + + def isPicked(self): + """ + isPicked(self) -> bool + + Returns whether the network box is selected. """ + return True + + def setPicked(self, on): + """ + setPicked(self, on) + + Selects or deselects the network box. """ + + def color(self): + """ + color(self) -> hou.Color + Returns the color of this network box. + """ + return Color() + + def setColor(self, color): + """ + setColor(self, color) + Set the color of this network box to the given hou.Color. + """ + + def nodes(self, recurse=True): + """ + nodes(self, recurse=True) -> tuple of hou.Node + + Returns the nodes inside the network box. + + recurse + If True, recurses down into nested network boxes. """ + return (Node(),) + + def addNode(self, node): + """ + addNode(self, node) + Adds a node to the network box. + """ + def removeNode(self, node): + """ + removeNode(self, node) + + Removes the given node from the network box. + """ + + def removeAllNodes(self): + """ + removeAllNodes(self) + + Removes all nodes from the network box. + """ + + def networkBoxes(self, recurse=True): + """ + networkBoxes(self, recurse=True) -> tuple of hou.NetworkBox + Returns the network boxes inside the network box. + + recurse + If True, recurses down into nested network boxes. + """ + return (NetworkBox(),) + + def stickyNotes(self, recurse=True): + """ + stickyNotes(self, recurse=True) -> tuple of hou.StickyNote + + Returns the sticky notes inside the network box. + + recurse + If True, recurses down into nested network boxes. """ + return (StickyNote(),) + + def destroy(self, destroy_contents=False): + """ + destroy(self, destroy_contents=False) + + Remove and delete the network box, optionally deleting the nodes it + contains. """ + + + def asCode(self, brief=False, recurse=False, save_box_contents=False, + save_channels_only=False, save_creation_commands=False, + save_keys_in_frames=False, save_parm_values_only=False, + save_spare_parms=False, function_name=None): + """ + asCode(self, brief=False, recurse=False, save_box_contents=False, + save_channels_only=False, save_creation_commands=False, + save_keys_in_frames=False, save_parm_values_only=False, + save_spare_parms=False, function_name=None) -> string + + Prints the Python code necessary to recreate a network box. + + See hou.Node.asCode for information on the keyword arguments. """ + return '' + +class StickyNote(object): + """ + hou.StickyNote + + Represents a sticky note. + + To create a sticky note, use the hou.Node.createStickyNote method on the + node inside which you want to create the note. To get an existing sticky + note, use the hou.Node.findStickyNote method on the node containing the + sticky note. To get a list of all notes in a network, use the + hou.Node.stickyNotes method on the containing node. + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def name(self): + """ + name(self) -> str + + Return the name of the sticky note. """ + return '' + + def setName(self, name): + """ + setName(self, name) + + Sets the name of the sticky note. + """ + + def text(self): + """ + text(self) -> str + + Return the text of the sticky note. """ + return '' + + def setText(self, str): + """ + setText(self, str) + + Sets the text of the sticky note. + """ + + def parent(self): + """ + parent(self) -> Node + + Returns the node which contains the sticky note. """ + return Node() + + def color(self): + """ + color(self) -> hou.Color + + Returns the color of this sticky note. """ + return Color() + + def setColor(self, color): + """ + setColor(self, color) + + Set the color of this sticky note to the given hou.Color. + """ + + def position(self): + """ + position(self) -> hou.Vector2 + Return the position of this sticky note. """ + return Vector2() + + def setPosition(self, vector2): + """ + setPosition(self, vector2) + + Sets the position of this sticky note to the given hou.Vector2. Use + move() to move the note relative to its current position. + """ + + def move(self, vector2): + """ + move(self, vector2) + + Moves the sticky note by the increments in the given hou.Vector2. Use + setPosition() to set the note's absolute position. + """ + + def size(self): + """ + size(self) -> hou.Vector2 + + Returns the size of this sticky note. """ + return Vector2() + + def setSize(self, size): + """ + setSize(self, size) + + Sets the size of this sticky note to the given hou.Vector2. Use resize() + to set the note's size relative to its current size. + """ + + def resize(self, vector2): + """ + resize(self, vector2) + + Resizes a sticky note by the increments in the given hou.Vector2. Use + setSize() to set the note's absolute size. + """ + + + def isMinimized(self): + """ + isMinimized(self) -> bool + + Returns whether the sticky note is minimized. """ + return True + + def setMinimized(self, on): + """ + setMinimized(self, on) + + Minimizes or restores the sticky note. """ + + def isPicked(self): + """ + isPicked(self) -> bool + + Returns whether the sticky note is selected. """ + return True + + def setPicked(self, on): + """ + setPicked(self, on) + + Selects or deselects the sticky note. """ + + def destroy(self): + """ + destroy(self) + + Remove and delete the sticky note. """ + + def asCode(self, brief=False, recurse=False, save_box_contents=False, + save_channels_only=False, save_creation_commands=False, + save_keys_in_frames=False, save_parm_values_only=False, + save_spare_parms=False, function_name=None): + """ + asCode(self, brief=False, recurse=False, save_box_contents=False, + save_channels_only=False, save_creation_commands=False, + save_keys_in_frames=False, save_parm_values_only=False, + save_spare_parms=False, function_name=None) -> string + + Prints the Python code necessary to recreate a sticky note. + + See hou.Node.asCode for information on the keyword arguments. + """ + return '' + +class ObjNode(object): + """ + hou.ObjNode + + An instance of an object node in the Houdini scene. + + Each object has a "transformation" (or "transform") encapsulating + its position (or "translation"), rotation, and scale. For a subnet + object, the subnet's transform is applied to the objects inside the + subnet. An object can have additional transforms from parent objects on + top of the transform defined by its parameters, as well as a normally + hidden pretransform that defines the object's "rest" or "zero" + position (normally all zeros). An object's final position/rotation/scale + in world space is defined by (object's transform) * (pretransform) * + (parent transform). + + + You can set an object's position/rotation/scale to certain world space + values regardless of parent/pre-transform values with the + hou.ObjNode.setWorldTransform method. + + + Houdini does not support shear parameters on objects. If you try to set + an object's parameters to a transform containing shear, Houdini will + automatically remove the shear. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def origin(self): + """ + origin(self) -> hou.Vector3 + + Return the object's origin position, in world space. + + obj.origin() is equivalent to obj.Vector3(0, 0, 0) * + obj.worldTransform(). + + # To compute the world space vector from obj1's origin to obj2's origin, you + # can write: + obj2.origin() - obj1.origin() + + # To compute the distance, in world space, between the origins of two + # objects, simply take the length of this vector: + (obj2.origin() - obj1.origin()).length() + + # If there are no rotations or scales, the vtorigin() hscript expression + # function will return the same result as obj2.origin() - obj1.origin(). + # If there are rotations or scales, though, it won't. A Python equivalent + # of vtorigin() is defined by: + def vtorigin(obj1, obj2): + return (obj2.worldTransform() * obj1.worldTransform().inverted()).extractTranslates() + + See also the hou.ObjNode.worldTransform and + hou.ObjNode.getTransformToNode methods. + + REPLACES + origin function """ + return Vector3() + + def localTransform(self): + """ + localTransform(self) -> hou.Matrix4 + + Return the matrix that transforms this object's geometry into space of + its input. + + The local transform matrix contains the cumulative transforms of: + + * The node's pre-transform + * The transform defined by the node's transform parameters + * The transform adjustment by the node's lookat and path parameters + See also hou.ObjNode.localTransformAtTime and + hou.ObjNode.worldTransform. + """ + return Matrix4() + + def localTransformAtTime(self, time): + """ + localTransformAtTime(self, time) -> hou.Matrix4 + + Return, for the specified time, the matrix that transforms this object's + geometry into the space of its input. + + If the object's local transform is animated, this method provides a way + to get the transformation at a specific time. + + See hou.ObjNode.localTransform for more information. + """ + return Matrix4() + + def worldTransform(self): + """ + worldTransform(self) -> hou.Matrix4 + + Return the matrix that transforms this object's geometry into world + space. + + The world transform matrix contains the cumulative transforms of: + + * The node's pre-transform + * The transform defined by the node's parameters + * The transforms of parent nodes or containing networks + This method can approximately be implemented as follows: + + def worldTransform(self): + return (self.localTransform() * self.parentAndSubnetTransform()) + + + + See also hou.ObjNode.setWorldTransform and + hou.ObjNode.worldTransformAtTime. + + REPLACES + optransform function """ + return Matrix4() + + def worldTransformAtTime(self, time): + """ + worldTransformAtTime(self, time) -> hou.Matrix4 + + Return, for the specified time, the matrix that transforms this object's + geometry into world space. + + If the object's world transform is animated, this method provides a way + to get the transformation at a specific time. + + See hou.ObjNode.worldTransform for more information. + """ + return Matrix4() + + def setWorldTransform(self, matrix, fail_on_locked_parms=False): + """ + setWorldTransform(self, matrix, fail_on_locked_parms=False) + + Adjust this object's parameters to achieve the desired world + transformation. + + This method will adjust the translate, rotate, and scale values of this + object to achieve the desired final world transform. It accounts for + the transforms of containing networks, parent transforms, and pre- + transforms. + + If fail_on_locked_parms is True, and any of the translate, rotate, or + scale parameters of the object are locked, this method raises + hou.OperationFailed. If it is False and any of those parameters are + locked, this method will change their values but leave them locked. + + Suppose: + + * W is the desired new world transform, + * W' is the existing world transform, + * L is the desired transform defined by the node's parameters, + * L' is the existing parm transform, + * P is the object's pre-transform, + * O is the parent transform combined with the containing subnet's, + transform + Then, since W = L * P * O we have P = W * O^ * R^. So, this method + could be implemented as follows: + def setWorldTransform(self): + self.setParmTransform( + matrix * self.parentAndSubnetTransform().inverted() * self.preTransform().inverted(), + fail_on_locked_parms) + + + Alternately, we can derive L from W' and L' as follows: + + * W' = L' * P * O + * so P * O = L^' * W' + * and (P * O)^ = W^' * L' + and + + * W = L * P * O + * so L = W * (P * O)^ + * giving L = W * W'^ * L' + Thus, this method could also be implemented using the current world and + parm transforms as follows: + def setWorldTransform(self): + self.setParmTransform( + matrix * self.worldTransform().inverted() * self.parmTransform(), + fail_on_locked_parms) + + + Note that, because parm transforms cannot contain shears, it is possible + that the resulting world transform will not match the desired transform. + If r is a function that removes shears from a transform then the new + world transform will actually be L * P * O = r(W * O^ * P^) * P * O. + + See also hou.ObjNode.worldTransform and hou.ObjNode.setParmTransform. + """ + + def setCookTransform(self, matrix): + """ + setCookTransform(self, matrix) + + Set the parameter transform for the Python object that's cooking. Call + this method from objects implemented in Python to set the result of the + cook. + + Note that an object implemented in Python controls the parameter + transform (i.e. the result of hou.ObjNode.parmTransform). The world + transform (i.e. the result of hou.ObjNode.worldTransform) is still + affected by parent node's transforms, pre-transforms, etc. + + This method raises hou.OperationFailed if you call it on an object that + is not implemented in Python or if you call it from outside that + object's Python cook code. + + See the Transforms from Disk example. """ + + + def parmTransform(self): + """ + parmTransform(self) -> hou.Matrix4 + + Return the transform defined by the parameters on this node. + + This method can approximately be implemented as follows: + def parmTransform(self): + pivot_transform = hou.hmath.buildTranslate(self.evalParmTuple("p")) + return ( + pivot_transform.inverted() * + hou.hmath.buildTransform({ + "translate": self.evalParmTuple("t"), + "rotate": self.evalParmTuple("r"), + "scale": [self.evalParm("scale") * s + for s in self.evalParmTuple("s")], + "shear": (0.0, 0.0, 0.0)}, + transform_order=self.parm("xOrd").evalAsString(), + rotate_order=self.parm("rOrd").evalAsString()) * + pivot_transform) + + + See the class documentation for the relation between this transform and + the world space transform. See also hou.ObjNode.worldTransform. + + + For Python Objects, the python code sets the parm transform as well and + + won't necessarily have any visible parameters. To get the local + transform of an object (ie. the transform without any parenting), use + hou.ObjNode.localTransform. + """ + return Matrix4() + + def setParmTransform(self, matrix, fail_on_locked_parms=False): + """ + setParmTransform(self, matrix, fail_on_locked_parms=False) + + Sets the transform controlled by this object's parameters. + + This method will adjust the translate, rotate, and scale values of this + object to achieve the desired parameter, or local, transform. It will + account for the existing pivot position, transformation order, and + rotation order, and will leave them unchanged. + + Note that object nodes do not currently have shears parameters, so any + shears in the matrix will be discarded. + + If fail_on_locked_parms is True, and any of the translate, rotate, or + scale parameters of the object are locked, this method will raise + hou.OperationFailed. If it is False and any of those parameters are + locked, this method will change their values but leave them locked. + + See also hou.ObjNode.parmTransform and hou.ObjNode.setWorldTransform. + + This method can be approximately implemented as follows, ignoring locked + parameters: + def setParmTransform(self, matrix): + parm_values = matrix.explode( + transform_order=self.parm('xOrd').evalAsString(), + rotate_order=self.parm('rOrd').evalAsString(), + pivot=hou.Vector3(self.evalParmTuple('p'))) + + for parm_name, key in ('t', 'translate'), ('r', 'rotate'), ('s', 'scale'): + self.parmTuple(parm_name).set(parm_values[key]) + + + See also hou.Matrix4.explode. """ + + + def preTransform(self): + """ + preTransform(self) -> hou.Matrix4 + + Return this object's pretransform. + + The pre-transform allows you to apply a transform after the parameter + transform but before input and containing object transforms. See the + class documentation for more details. + + Unlike the parameter transform, the pretransform is not stored using any + parameters on the node. Instead, Houdini stores the pretransform as a + matrix. Because it is directly as a matrix, the pretransform may + contain shears. + + REPLACES + objpretransform command + objpretransform function """ + return Matrix4() + + def setPreTransform(self, matrix): + """ + setPreTransform(self, matrix) + + Set this object's pretransform. See hou.ObjNode.preTransform for more + information. + + REPLACES + objpretransform command + objresetpretransform command """ + + def movePreTransformIntoParmTransform(self): + """ + movePreTransformIntoParmTransform(self) + + Set this object's pre-transform to the identity and adjust the parm + transform so that the world transform does not change. + + This method is implemented approximately as follows: + def movePreTransformIntoParmTransform(self): + self.setParmTransform(self.parmTransform() * self.preTransform()) + self.setPreTransform(hou.hmath.identityTransform()) + + + See also hou.ObjNode.movePreTransformIntoParmTransform. + + REPLACES + objextractpretransform command """ + + def moveParmTransformIntoPreTransform(self): + """ + moveParmTransformIntoPreTransform(self) + + Set this object's parm transform to the identity and adjust the pre- + transform so that the world transform does not change. + + This method is implemented approximately as follows: + def moveParmTransformIntoPreTransform(self): + self.setPreTransform(self.parmTransform() * self.preTransform()) + self.setParmTransform(hou.hmath.identityTransform()) + + + See also hou.ObjNode.moveParmRotateIntoPreTransform, + hou.ObjNode.moveParmScaleIntoPreTransform, and + hou.ObjNode.moveParmTranslateIntoPreTransform. Also see + hou.ObjNode.movePreTransformIntoParmTransform. + + REPLACES + objcleantransform command + """ + + + def moveParmTranslateIntoPreTransform(self): + """ + moveParmTranslateIntoPreTransform(self) + + Set this object's translate values to zero and adjust the pre-transform + so that the world transform does not change. + + See hou.ObjNode.moveParmRotateIntoPreTransform for more information. + + REPLACES + objcleantransform command """ + + def moveParmRotateIntoPreTransform(self): + """ + moveParmRotateIntoPreTransform(self) + + Set this object's rotate values to zero and adjust the pre-transform so + that the object's world transform does not change. + + Suppose: + + * W is the world transform, + * L is the parameter transform without any rotate component, + * L' is the existing parm transform, + * P is the desired new pre-transform, + * P' is the current pre-transform, + * O is the parent transform combined with the containing subnet's, + transform + Then, + + * W = L * P * O and W = L' * P' * O + * L * P = L' * P' + * P = L^ * L' * P' + So, this method is implemented approximately as follows: + def moveParmRotateIntoPreTransform(self): + old_parm_transform = self.parmTransform() + self.parmTuple("r").set((0.0, 0.0, 0.0)) + self.setPreTransform( + self.parmTransform() * old_parm_transform * self.preTransform()) + + + See also hou.ObjNode.preTransform and the class documentation. + + REPLACES + objcleantransform command """ + + def moveParmScaleIntoPreTransform(self): + """ + moveParmScaleIntoPreTransform(self) + + Set this object's scale values to one and adjust the pre-transform so + that the world transform does not change. + + See hou.ObjNode.moveParmRotateIntoPreTransform for more information. + + REPLACES + objcleantransform command """ + + def parentAndSubnetTransform(self): + """ + parentAndSubnetTransform(self) -> hou.Matrix4 + + Return the input node's world space transform (if there is an input + connected), combined with the world space transform of the containing + subnet object (if there is one). See the class documentation for more + information. + + This method can approximately be implemented as follows: + def parentAndSubnetTransform(self): + if len(self.inputConnectors()[0]) != 0: + return self.inputs()[0].worldTransform() + + containing_subnet = self.parent() + if containing_subnet.type().category() == hou.objNodeTypeCategory(): + return containing_subnet.worldTransform() + + return hou.hmath.identityMatrix() + """ + return Matrix4() + + def getTransformToNode(self, obj_node): + """ + getTransformToNode(self, obj_node) -> hou.Matrix4 + + TODO: Document the relationship with vtorigin. + ********************************************** + + Return a matrix that transforms this node to line up with the other + node. + + The following invariant is true: node1.worldTransform() * + node1.getTransformToNode(node2) == node2.worldTransform(). + + This method can be implemented as follows: + def getTransformToNode(self, obj_node): + self.worldTransform().inverted() * obj_node.worldTransform() + + + To align node1 (an ObjNode object) with node2 (another ObjNode object), + you don't need to use getTransformToNode(). You can simply write: + node1.setWorldTransform(node2.worldTransform()). + + See also hou.ObjNode.origin(), hou.ObjNode.worldTransform(), and + hou.ObjNode.setWorldTransform(). + + REPLACES + vorigin function + vrorigin function + vtorigin function """ + return Matrix4() + + def getTransformFromPointToPoint(self, pos3, other_node, other_pos3): + """ + getTransformFromPointToPoint(self, pos3, other_node, other_pos3) -> + hou.Matrix4 + + Return the transform matrix that rotates the point pos3 (in this object + node's transform space) to the point other_pos3 (in another object + node's transform space). + + obj1.getTransformFromPointToPoint(pos1, obj2, pos2) + + ...is equivalent to... + + (obj1.worldTransform().inverted() * + hou.hmath.buildTranslate(-pos1) * + hou.hmath.buildTranslate(pos2) * + obj2.worldTransform()) + + See also the hou.ObjNode.getTransformToNode and + hou.ObjNode.worldTransform methods, and the functions in the hou.hmath + module. + + REPLACES + originoffset function """ + return Matrix4() + + def buildLookatRotation(self, to_node, up_vector=None): + """ + buildLookatRotation(self, to_node, up_vector=None) -> hou.Matrix4 + + Return a matrix that will rotate this object to look at the specified + object. + + The returned hou.Matrix4 object transforms this object from its current + position in world space so that its negative z axis points at the origin + of the to_node object. + + up_vector can either be a hou.Vector3 object or None. If it is None, + this method uses an up vector of hou.Vector3(0, 1, 0). + + You can extract the rotation values from the return value with + hou.Matrix4.extractRotates. You can set an object's transform with + hou.ObjNode.setWorldTransform. + + # Set the cam1 object's transform so it points at geo1. + cam1 = hou.node("/obj/cam1") + lookat_obj = hou.node("/obj/geo1") + cam1.setWorldTransform(cam1.buildLookatRotation(lookat_obj)) + + See also hou.ObjNode.setWorldTransform. + + REPLACES + mlookat function + mobjlookat function """ + return Matrix4() + + def isObjectDisplayed(self): + """ + isObjectDisplayed(self) -> bool + + Return whether or not this object is displayed. This method takes into + account both the display flag and the display parameter. If the display + parameter is enabled, because the tdisplay parameter is set, this + parameter overrides the flag. + + See also hou.ObjNode.isDisplayFlagSet, which returns the current state + of the flag. + """ + return True + + def isDisplayFlagSet(self): + """ + isDisplayFlagSet(self) -> bool + + Return whether or not this object's display flag is turned on. Note + that the display flag and the display parameter both determine whether + the object is actually displayed. + + Use hou.ObjNode.isObjectDisplayed to determine if the object is actually + displayed. + + REPLACES + opget command + opflag function """ + return True + + def setDisplayFlag(self, on): + """ + setDisplayFlag(self, on) + + Turn the object's display flag on or off. See also + hou.ObjNode.isDisplayFlagSet. + + REPLACES + opset command """ + + def isSelectableInViewport(self): + """ + isSelectableInViewport(self) -> bool + + Return whether or not the selectable flag is set. When it is not set, + it is not possible to select this object or any of its geometry + interactively in the viewport. + + REPLACES + opget command + opflag function """ + return True + + def setSelectableInViewport(self, on): + """ + setSelectableInViewport(self, on) + + Set the object's selectable flag. See + hou.ObjNode.isSelectableInViewport for more information. + + REPLACES + opset command """ + + def isShowingOrigin(self): + """ + isShowingOrigin(self) -> bool + + Return whether or not this object displays its local origin gnomon in + the viewport. + + Note that you can change this setting by right-clicking on the node. + + REPLACES + opget command + opflag function """ + return True + + def showOrigin(self, on): + """ + showOrigin(self, on) + + Show or hide this object's local origin gnomon in the viewport. See + also hou.ObjNode.isShowingOrigin. + + REPLACES + opset command """ + + def isUsingXray(self): + """ + isUsingXray(self) -> bool + + Return whether or not this object displays its geometry in xray mode. + Houdini displays xrayed geometry in wireframe and makes it visible even + when it is hidden behind another surface. + + Note that you can change this setting by right-clicking on the node. + + REPLACES + opget command + opflag function """ + return True + + def useXray(self, on): + """ + useXray(self, on) + + Turn this object's xray mode on or off. See also + hou.ObjNode.isUsingXray. + + REPLACES + opset command """ + + def displayNode(self): + """ + displayNode(self) -> hou.Node or None + + If this object contains SOPs or DOPs, return the one that has its + display flag on. Otherwise, return None. + """ + return Node() + + def renderNode(self): + """ + renderNode(self) -> hou.Node or None + + If this object contains SOPs or DOPs, return the one that has its render + flag on. Otherwise, return None. + """ + return Node() + + def combine(self, nodes): + """ + combine(self, nodes) + + Combine the geometry from the given list of hou.ObjNode's into this + object. After this operation, the old objects will be deleted. + + Raises hou.ObjectWasDeleted if any of the nodes no longer exist in + Houdini. Raises TypeError if any of the nodes are not of type + hou.ObjNode. These exceptions are raised prior to performing the + combine operation to avoid partial results. """ + + def material(self, operation, parameter): + """ + material(self, operation, parameter) + + Manages object-local overrides of material parameters. This is basically + the scripting equivalent of the Material Override menu in the parameter + editor for objects. It allows you to create parameters on an object that + override the equivalent values on the object's material. + + The operation argument should be one of the following strings: + + "override" + Create parameters on the object to override _all_ material + parameters. + + "select" + Select and create object parameters to override material parameters. + + "remove" + Removes _all_ object parameter overrides. + + "rmdefault" + Removes any unchanged object parameters (that is, that are currently + set to their default value). + + "sync" + Synchronize the object parameter overrides with the parameter + definitions on the material. + + "revert" + Revert any parameter overrides on the object to their values on the + material. + + "addlist" + (Followed by a second argument containing a list of parameter names + strings.) Creates object parameters to override the named parameters + on the material. + + + myobject = hou.node("/obj/obj1") + + # Add all material overrides + myobject.material("override") + + # Remove all material overrides + myobject.material("remove") + + # Add specific overrides for "baseColor" and "roughness" parameters + myobject.material("addlist", ["baseColor", "roughness"]) + + REPLACES + objmaterial command """ + +class NodeGroup(object): + """ + hou.NodeGroup + + Represents a node group. + + In Houdini, a node group contains a set of nodes from the same network. + Each group is named, and you can edit a group's contents from the + network view pane by selecting Viewing Controls > Show Groups from its + right-mouse menu. + + A node bundle, on the other hand, may contain nodes from multiple + networks, and corresponds to a hou.NodeBundle object. You can edit a + node bundle from the bundle list pane. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def name(self): + """ + name(self) -> str + + Returns the name of this group. + """ + return '' + + def nodes(self): + """ + nodes(self) -> tuple of hou.Node + + Return a tuple containing the nodes in this group. + + REPLACES + opgls command """ + return (Node(),) + + def parent(self): + """ + parent(self) -> hou.Node + + Returns the network node containing this group. + """ + return Node() + + def addNode(self, node): + """ + addNode(self, node) + + Add a hou.Node to this group. + + If the node is already in the group, this method does nothing. If the + node is not in the correct network for this group, raises + hou.OperationFailed. + + REPLACES + opgop command """ + + def removeNode(self, node): + """ + removeNode(self, node) + + Remove a hou.Node from this group. + + Raises hou.OperationFailed if the node is not in the group. + + REPLACES + opgop command """ + + def clear(self): + """ + clear(self) + + Remove all nodes from this group. + + REPLACES + opgop command """ + + + def destroy(self): + """ + destroy(self) + + Delete this group. Does not delete the nodes that were contained in it. + + REPLACES + opgrm command + """ + + def asCode(self, save_creation_commands=False, function_name=None): + """ + asCode(self, save_creation_commands=False, function_name=None) -> str + + Returns the Python code necessary to recreate this group. + + save_creation_commands + Generate a creation script for the node group. If set to False (the + default), the generated script assumes that the node group already + exists. When set to True, the script will begin by creating the + node group. + + function_name + If a function_name is specified, the output will be wrapped in a + Python function. + + REPLACES + opscript command """ + return '' + +class Prim(object): + """ + hou.Prim + + Each Prim resides inside a Geometry object and stores some sort of 3D + geometric primitive, like a polygon, a NURBS curve, or a volume. Each + primitive usually contains a set of Vertex objects, each of which + references a Point object. + + This class has a number of subclasses for the different primitive types, + such as hou.Polygon and hou.Volume. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def geometry(self): + """ + geometry(self) -> hou.Geometry + + Return the hou.Geometry object containing this primitive. """ + return Geometry() + + def number(self): + """ + number(self) -> int + + Return the number of this primitive. Primitives are numbered + sequentially starting from 0, and the primitives returned by + hou.Geometry.prims are in order by their number. + + REPLACES + pointlist function + primlist function """ + return 0 + + def type(self): + """ + type(self) -> hou.primType enum value + + Return a hou.primType value containing the type of this primitive (e.g. + polygon, NURBS curve, metaball, etc). + """ + return primType() + + def attribType(self): + """ + attribType(self) -> hou.attribType enum value + + Return the enumerated value hou.attribType.Prim. Points, primitives, + vertices, and geometry support the same set of methods for querying + their attributes, and this method is one of them. + + See also: + + * hou.Point.attribType + * hou.Vertex.attribType + * hou.Geometry.attribType + * hou.attribType """ + return primType() + + def vertices(self): + """ + vertices(self) -> generator of hou.Vertex + + Return a sequence of the vertices contained in this primitive. + + If the primitive is a face (e.g. a polygon or NURBS curve), the result + corresponds to the order of the vertices in that face. If it is a + surface (e.g. a NURBS mesh), however, the primitive has a 2D array of + vertices, and this method returns all vertices in the 2D array, ordered + by the rows. + + See hou.Surface.vertex for more information about the relationship + between the 2D vertex array and the sequential vertex index, and for + more ways to access the vertices in a surface. + """ + return (Vertex(),) + + def numVertices(self): + """ + numVertices(self) -> int + + A shortcut for len(self.vertices()). You probably don't need to call + this method. + """ + return 0 + + def edges(self): return (Edge(),) + def numEdges(self): return 0 + def floatAttribValue(self, attrib): + """ + floatAttribValue(self, attrib) -> float + + Return the primitive attribute value for a particular floating point + attribute. The attribute may be specified by name or by hou.Attrib + object. + + Raises hou.OperationFailed if no attribute exists with this name or the + attribute is not float of size 1. + + In most cases, you'll just use hou.Prim.attribValue to access attribute + values. Houdini uses this method internally to implement attribValue. + """ + return 0.0 + + def floatListAttribValue(self, name_or_attrib): + """ + floatListAttribValue(self, name_or_attrib) -> tuple of float + + Return the primitive attribute value for a particular floating point + attribute. The attribute may be specified by name or by hou.Attrib + object. The return value is a tuple of floats. + + It is valid to call this method when the attribute's size is 1. In this + case, a tuple with one element is returned. + + See also hou.Prim.attribValue. """ + return (0.0,) + + def intAttribValue(self, name_or_attrib): + """ + intAttribValue(self, name_or_attrib) -> int + + Return the primitive attribute value for a particular integer attribute + of size 1. The attribute may be specified by name or by hou.Attrib + object. See hou.Point.floatAttribValue for more information. + """ + return (0,) + + def intListAttribValue(self, name_or_attrib): + """ + intListAttribValue(self, name_or_attrib) -> tuple of int + + Return the primitive attribute value for a particular integer attribute. + The attribute may be specified by name or by hou.Attrib object. The + return value is a tuple of ints. See hou.Prim.floatListAttribValue for + more information. + """ + return (0,) + + def stringAttribValue(self, name_or_attrib): + """ + stringAttribValue(self, name_or_attrib) -> str + + Return the primitive attribute value for a particular string attribute. + The attribute may be specified by name or by hou.Attrib object. See + hou.Prim.floatAttribValue for more information. + """ + return '' + + def stringListAttribValue(self, name_or_attrib): + """ + stringListAttribValue(self, name_or_attrib) -> tuple of str + + Return the primitive attribute value for a particular string attribute. + The attribute may be specified by name or by hou.Attrib object. The + return value is a tuple of strings. + + It is valid to call this method when the attribute's size is 1. In this + case, a tuple with one element is returned. + + See also hou.Prim.attribValue. + """ + return ('',) + + def setAttribValue(self, name_or_attrib, attrib_value): + """ + setAttribValue(self, name_or_attrib, attrib_value) + + Store an attribute value in this primitive. The attribute may be + specified by name or by hou.Attrib object, and must be an existing + primitive attribute in the geometry. You would typically call this + method from the code of a Python-defined SOP. + + Raises hou.OperationFailed if no attribute exists with this name or if + the attribute's data type does not match the value passed in. If the + attribute's size is more than 1, the attribute value must be a sequence + of integers/floats, and the size of the sequence must match the + attribute's size. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + # Create a float primitive attribute of size 3 named "Cd", and assign + # each primitive a unique color. This code will work from inside a Python + # SOP, but not from the Python shell. + geo = hou.pwd().geometry() + color_attrib = geo.addAttrib(hou.attribType.Prim, "Cd", (1.0, 1.0, 1.0)) + num_prims = len(geo.prims()) + color = hou.Color() + for prim in geo.prims(): + fraction = float(prim.number()) / num_prims + # Give each primitive a different hue, but full saturation and value. + # Store the RGB value in the attribute. + color.setHSV((fraction * 255, 1, 1)) + prim.setAttribValue(color_attrib, color.rgb()) + """ + + + def intrinsicNames(self): + """ + intrinsicNames(self) -> tuple of str + """ + return ('',) + + def intrinsicValue(self, intrinsic_name): + """ + intrinsicValue(self, intrinsic_name) -> int, float, str, or tuple + """ + + def intrinsicSize(self, intrinsic_name): + """ + intrinsicSize(self, intrinsic_name) -> int + + Returns the intrinsic value tuple size. """ + return 0 + + def intrinsicReadOnly(self, intrinsic_name): + """ + intrinsicReadOnly(self, intrinsic_name) -> bool + + Returns whether the intrinsic is read-only or can be modified with + setIntrinsicValue() """ + return True + + def setIntrinsicValue(self, intrinsic_name, value): + """ + setIntrinsicValue(self, intrinsic_name, value) """ + + def attribValue(self, name_or_attrib): + """ + attribValue(self, name_or_attrib) -> int, float, str or tuple + + Return the value stored in this primitive for a particular attribute. + The attribute may be specified by name or by hou.Attrib object. + + Looking an attribute value using a hou.Attrib object is slightly faster + than looking it up by name. When looking up attribute values inside a + loop, look up the hou.Attrib object outside the loop, and pass it into + this method. + + When looking up the attribute values of all primitives, it is faster to + call hou.Geometry.primFloatAttribValues or + hou.Geometry.primFloatAttribValuesAsString than to call this method for + each primitive in the geometry. + + Raises hou.OperationFailed if no attribute exists with this name. + + REPLACES + prim function + prims function """ + + def positionAtInterior(self, u, v, w=0.0): + """ + positionAtInterior(self, u, v, w=0.0) -> hou.Vector3 + + Given normalized (i.e. from 0 to 1) u, v, w values, return the interior + position of the primitive at that parametric location. + + Use hou.Face.positionAt for querying positions along the perimeter. + + REPLACES + primuv function """ + return Vector3() + + def attribValueAtInterior(self, attrib_or_name, u, v, w=0.0): + """ + attribValueAtInterior(self, attrib_or_name, u, v, w=0.0) -> int, float, + str or tuple + + Return an attribute value at the normalized u, v, w parametric position + in the interior of the primitive. + + Raises hou.OperationFailed if the attribute is not a point or vertex + attribute. If you want a primitive attribute value, it doesn't vary + across the surface, so use hou.Prim.attribValue. + + Use hou.Face.attribValueAt for querying attributes along the perimeter. + + REPLACES + primuv function """ + + def nearestToPosition(self, pos3): + """ + nearestToPosition(self, pos3) + + Given a sequence of three floats containing a position, find the + location on this primitive that is closest to that position. Returns a + tuple containing the u value on this primitive, the v value on this + primitive, and the distance to this primitive. + + REPLACES + xyzdist function """ + + def groups(self): + """ + groups(self) -> tuple of hou.PrimGroup + + Return a tuple of the primitive groups that contain this primitive. + """ + return (PrimGroup(),) + +class Face(Prim): + """ + hou.Face + + A Face is a kind of geometry primitive (Prim object) that contains a + sequence of vertices (Vertex objects). How these vertices are used + depends on the type of face; polygons, for example, use the vertices to + define the edges of the polygon, while NURBS curves use them as control + points. + + A hou.Surface, on the other hand, stores a two dimension grid of + vertices, and might be a NURBS surface, Bezier surface, or quadrilateral + mesh. + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def isClosed(self): + """ + isClosed(self) -> bool + + Return whether the first and last vertex are connected. + + An open face forms a multi-segment line or curve, since the first and + last vertices are not connected. A closed face forms a very thin + surface. + + REPLACES + isclosed function """ + return True + + def closed(self): return + def setIsClosed(self, on): + """ + setIsClosed(self, on) + + Set whether the face is open or closed. See hou.Face.isClosed for more + information. You would typically call this method from the code of a + Python-defined SOP. + + Note that this method will raise hou.OperationFailed on a Bezier curve. + See hou.Geometry.createBezierCurve for more information. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + + def normal(self): + """ + normal(self) -> hou.Vector3 + + Return the vector that's perpendicular to the face. + """ + return Vector3() + + def positionAt(self, u): + """ + positionAt(self, u) -> hou.Vector3 + + Given a normalized (i.e. from 0 to 1) u value, return the position of + the curve at that parametric location. + + REPLACES + primuv function """ + return Vector3() + + def attribValueAt(self, attrib_or_name, u, du=0): + """ + attribValueAt(self, attrib_or_name, u, du=0) -> int, float, str or tuple + + Return an attribute value at a normalized u parametric position on the + curve. If du is 0, returns the interpolated attribute value; otherwise, + returns the derivative of the attribute value. + + Raises hou.OperationFailed if the attribute is not a point or vertex + attribute. If you want a primitive attribute value, it doesn't vary + across the surface, so use hou.Prim.attribValue. + + REPLACES + primuv function """ + + def vertex(self, index): + """ + vertex(self, index) -> hou.Vertex + + A shortcut for self.vertices()[index]. You probably don't need to call + this method. + + This method supports negative indices to index from the end, just like + self.vertices()[index] would. Also, like Python's indexing operator, it + will raise IndexError when the index is out of range. """ + return Vertex() + + def addVertex(self, point): + """ + addVertex(self, point) -> hou.Vertex + + Create a new vertex inside this face, adding it to the end of the vertex + list. You would typically call this method from the code of a Python- + defined SOP. + + point is a hou.Point object that the new vertex will refer to. See + hou.Vertex for information on the relationship between points and + vertices. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + # These arrays define point positions and a set of polygons composed + # of those points. Note that the point positions could also be floating + # point values. + point_positions = ((0,0,0), (1,0,0), (1,1,0), (0,1,0)) + poly_point_indices = ((0,1,2), (2,3,0)) + + geo = hou.pwd().geometry() + + # Create all the points. + points = [] + for position in point_positions: + points.append(geo.createPoint()) + points[-1].setPosition(position) + + # Now create the polygons, adding vertices that refer to the points. + for point_indices in poly_point_indices: + poly = geo.createPolygon() + for point_index in point_indices: + poly.addVertex(points[point_index]) + + See also: + + * hou.Geometry.createPoint + * hou.Geometry.createPolygon """ + return Vertex() + +class BaseKeyframe(object): + """ + hou.BaseKeyframe + + Abstract base class for all keyframe class. + + REPLACES + * chkey + * chkeyls + * chkey + * chround + * chsraw + * lock + * opscript + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def evaluatedType(self): + """ + evaluatedType(self) -> hou.parmData enum value + + Returns the type that the keyframe evaluates to. + """ + return parmData() + + def setExpression(self, expression, language=None): + """ + setExpression(self, expression, language=None) + + Sets the keyframe's expression and language. + + This function raises hou.TypeError if language is not a value from + hou.exprLanguage. + + See expression(), expressionLanguage(), isExpressionSet(), + isExpressionLanguageSet(). + """ + + def expression(self): + """ + expression(self) -> str + + Returns the keyframe's expression. For example, in cases where the + keyframe has had two values set the interpolating function is returned + e.g. "bezier()", "spline()" etc. + + This function raises hou.KeyframeValueNotSet if an expression has not + been set. + + See setExpression() and isExpressionSet(). + """ + return '' + + def isExpressionSet(self): + """ + isExpressionSet(self) -> bool + + Returns whether the keyframe's expression is set. + + See setExpression() and expression(). """ + return True + + def expressionLanguage(self): + """ + expressionLanguage(self) -> hou.exprLanguage enum value + + Returns the keyframe's expression's language. + + This function raises hou.KeyframeValueNotSet if an expression language + has not ben set. + + See setExpression(), and isExpressionLanguageSet(). """ + return exprLanguage() + + def isExpressionLanguageSet(self): + """ + isExpressionLanguageSet(self) -> bool + + Returns whether the keyframe expression's language is set. + + See setExpression() and expressionLanguage(). + """ + return True + + def setTime(self, time): + """ + setTime(self, time) + + Sets the keyframe's time in seconds. Using the number of frames per + second (hou.fps), setting the time also sets the frame number. For + example, with an fps of 24, then setting the time to 2 seconds will set + the frame number to 49. + See time(). """ + + def isTimeSet(self): + """ + isTimeSet(self) -> bool + + Returns whether the keyframe's time is set. + + See setTime() and time(). + """ + return True + + def time(self): + """ + time(self) -> double + + Returns the keyframe's time in seconds. + + This function raises hou.KeyframeValueNotSet if the time or frame has + not been set. + + See setTime() and setFrame(). + """ + return 0.0 + + def setFrame(self, frame): + """ + setFrame(self, frame) + + Sets the keyframe's frame number. Using the number of frames per second + (hou.fps), setting the frame number also sets the time. For example, + with an fps of 24, then setting the frame number to 49 will set the time + to 2 seconds. + + See frame(). + """ + + + def frame(self): + """ + frame(self) -> double + + Returns the keyframe's frame number. + + This function raises hou.KeyframeValueNotSet if the frame or time has + not been set. + + See setFrame() and setTime(). + """ + return 0.0 + + def asCode(self, brief=False, save_keys_in_frames=False, function_name=None): + """ + asCode(self, brief=False, save_keys_in_frames=False, function_name=None) + -> str + + Returns a script of Python statements that can be executed to create the + keyframe. To run the script, use either Python's exec or execfile + functions. + + brief + When is True, the output script omits commands for setting + unused values, slopes and accelerations. This parameter only + applies to non-string keyframes. The value of must be + either True or False. + + save_keys_in_frames + When is True, asCode outputs commands for + setting channel and key times in samples (frames) instead of + seconds. The value of must be either True or + False. + + function_name + If is specified, then the output script is wrapped + in a Python function definition with the given name. + must be a non-zero length string consisting of only alphanumeric + and underscore characters. Any invalid characters are internally + converted to underscores. + + The function returns a reference to the newly created keyframe + object. + + Here is an example of saving the output to a file and then loading it + back into Houdini: + # Get a reference to the target keyframe. + tx_parm = hou.parm("/obj/geo1/tx") + key = tx_parm.keyframes()[0] + + # Execute asCode and write the output script to file. + script = key.asCode() + f = open("create_key.py", "w") + f.write(script) + f.close() + + # Execute the script. The new keyframe will be stored + # in the 'hou_keyframe' variable. + execfile("create_key.py") + + # Commit the keyframe back into the node parameter. + tx_parm.setKeyframe(hou_keyframe) + + + Here is an example of saving the output into a function and then + calling it in Houdini: + # Get a reference to the target keyframe. + tx_parm = hou.Node("/obj/geo1").Parm("tx") + key = tx_parm.keyframes()[0] + + # Execute asCode and write the function definition to file. + func = key.asCode(function_name="createKeyframe") + f = open("keylib.py", "w") + f.write(func) + f.close() + + # Call the function definition. + import keylib + hou_keyframe = keylib.createKeyframe() + + # Commit the keyframe back into the node parameter. + tx_parm.setKeyframe(hou_keyframe) + """ + return '' + +class NodeType(object): + """ + hou.NodeType + + A NodeType specifies the information common to all instances of a type + of node, such as the parameter set, algorithm, minimum number of inputs, + etc. For example, the geometry object and subdivide SOP are node types. + /obj/geo1 and /obj/geo2, on the other hand, are Nodes that are instances + of the geometry object node type. + + Note that a digital asset defines a node type. The nodes contained + inside the asset's definition implement the node type's algorithm, and + you can customize the parameters in the node type using the Type + Properties dialog, + + You can get a NodeType object from a Node object with hou.Node.type. For + example, if /obj/geo1 is a geometry object, + hou.node("/obj/geo1").type() will return the NodeType corresponding to + all geometry objects. + + All the node types in Houdini are organized into categories, and a node + type is uniquely identified by its category and node type name. For + example, objects, SOPs, POPs, etc. are node type categories. You can + also access a NodeType object from a category with + hou.NodeTypeCategory.nodeTypes. Similarly, you can call hou.nodeType_ + with the category and node type name. + + See also hou.Node and hou.NodeTypeCategory. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def category(self): + """ + category(self) -> hou.NodeTypeCategory + + Return the node type category for this node type. For example, for the + geometry object, the result is the object returned by + hou.objNodeTypeCategory. + + REPLACES + optypeinfo function """ + return NodeTypeCategory() + + def name(self): + """ + name(self) -> str + + Return the name of this node type. For example, for the geometry object + type, the name is "geo". The name and the node type category together + uniquely identify a node type. + + REPLACES + optype command + optypeinfo function """ + return '' + + def nameComponents(self): + """ + nameComponents(self) -> tuple of str + + Returns a tuple of node type name components that constitute the full + node type name. The components in the tuple appear in the following + order: scope network type, node type namespace, node type core name, and + version. + + # parse the full name into components + >>> node_type = hou.nodeType(hou.dopNodeTypeCategory(), 'pyrosolver::2.0') + >>> node_type.nameComponents() + ('', '', 'pyrosolver', '2.0') + """ + return ('',) + + def description(self): + """ + description(self) -> str + + Return the description of this node type that appears in the tab menu. + For example, for the geometry object, the description is "Geometry". + This description is also called the operator label in Houdini. + + REPLACES + optype command + optypeinfo function """ + return '' + + def nameWithCategory(self): + """ + nameWithCategory(self) -> str + + Return the name of the node type, prefixed with the name of the node + type category. For example, for the geometry object, this function + returns "Object/geo". The category name and type name together + uniquely identify a node type. + + >>> hou.nodeType(hou.objNodeTypeCategory(), "geo").nameWithCategory() + 'Object/geo' + """ + return '' + + def namespaceOrder(self): + """ + namespaceOrder(self) -> tuple of str + + Returns a node type name list sorted in the descending namespace + precedence order. The node types in the list have the same base type as + this node type. They have different namespace and/or version. + + Houdini uses this list when resolving an unqualified type name in + hou.Node.createNode(); it will use the first entry in that list that + matches the name specified in the function. + + # parse the full name into components + >>> node_type = hou.nodeType(hou.dopNodeTypeCategory(), 'pyrosolver') + >>> node_type.namespaceOrder() + ('pyrosolver::2.0', 'pyrosolver') + """ + return ('',) + + def source(self): + """ + source(self) -> hou.nodeTypeSource enum value + + Return a hou.nodeTypeSource enumerated value to indicate if this node + type is implemented in VEX, RSL, or the HDK (in C++), or if it is a + built-in node type that ships with Houdini. + + >>> obj_cat = hou.objNodeTypeCategory() + >>> sop_cat = hou.sopNodeTypeCategory() + >>> hou.nodeType(obj_cat, "biped_auto_rig").source() + nodeTypeSource.Subnet + >>> hou.nodeType(sop_cat, "mountain").source() + nodeTypeSource.VexCode + + REPLACES + dsoinfo command """ + return nodeTypeSource() + + def sourcePath(self): + """ + sourcePath(self) -> str + + Return the path to the source for this node type, or "Internal" if it + is a built-in node type. If the node was created using the HDK, return + the path to the shared object/dll for the node type. + + >>> obj_cat = hou.objNodeTypeCategory() + >>> hou.nodeType(obj_cat, "biped_auto_rig").sourcePath() + 'oplib:/Object/biped_auto_rig?Object/biped_auto_rig' + >>> hou.nodeType(obj_cat, "geo").sourcePath() + 'Internal' + + REPLACES + dsoinfo command """ + return '' + + def sourceNetwork(self): + """ + sourceNetwork(self) -> hou.Node or None + + If this node type is a digital asset, return the Node instance whose + contents define the digital asset. Otherwise, return None. + """ + return Node() + + def definition(self): + """ + definition(self) -> hou.HDADefinition + + If this node type corresponds to a digital asset, return the + hou.HDADefinition. Otherwise, return None. + + REPLACES + otgetotl command """ + return HDADefinition() + + def allInstalledDefinitions(self): + """ + allInstalledDefinitions(self) -> tuple of hou.HDADefinition + + Search all installed operator type libraries and return a tuple of + available hou.HDADefinition objects providing definitions for this node + type. + + Houdini allows multiple otl files to be loaded at the same time that + each contain definitions for the same node type. The definition in use + is called the current definition. See also hou.HDADefinition.isCurrent. + + REPLACES + otls command """ + return HDADefinition() + + def icon(self): + """ + icon(self) -> str + + Return the name or path of the icon for this node type. Note that node + types that ship with Houdini use a name instead of a full path, and + Houdini uses its search path to locate the icon with that name. + """ + return '' + + def minNumInputs(self): + """ + minNumInputs(self) -> int + + Return the minimum number of inputs that nodes of this type can have. + If these inputs are not connected, the node will generate an error. + """ + return 0 + + def maxNumInputs(self): + """ + maxNumInputs(self) -> int + + Return the maximum number of inputs that nodes of this type can have. + Return 9999 if this node type can accept an unlimited number of inputs + (e.g. the merge SOP). + """ + return 0 + + def maxNumOutputs(self): + """ + maxNumOutputs(self) -> int + + Return the maximum number of outputs that nodes of this type can have. + Most node types have only one output, but some, like the split dop, can + have multiple. + """ + return 0 + + def isGenerator(self): + """ + isGenerator(self) -> bool + + Return if this node type has been flagged as a generator. For example, + a grid SOP generates new geometry, while a subdivide SOP does not, and + instead processes the geometry passed into it. See also + hou.NodeType.minNumInputs. + """ + return True + + def generatorFlag(self): return + def isManager(self): + """ + isManager(self) -> bool + + Return whether this NodeType is a manager. The manager node instances + are /obj, /out, /part, /ch, /shop, /img, and /vex, as well as manager + nodes like SHOP networks. """ + return True + + def managerFlag(self): return + def hasUnorderedInputs(self): + """ + hasUnorderedInputs(self) -> bool + + Return whether it is impossible for this node type to have gaps in its + connected inputs. For example, the cookie SOP has two inputs, and it's + possible for only the second input to be connected, so this method would + return False. However, the merge SOP cannot have any gaps in its + inputs, so this method would return True. + + See also hou.Node.inputs, hou.Node.inputConnections, and + hou.Node.inputConnectors. """ + return True + + def unorderedInputsFlag(self): return True + def aliases(self): + """ + aliases(self) -> tuple of str + + Return all current aliases for this node type. See + hou.NodeType.addAlias for an example. + + REPLACES + opalias command """ + return ('',) + + def addAlias(self, alias): + """ + addAlias(self, alias) + + Add an alias for this node type. You can use this alias when creating + new nodes. + + >>> geo_type = hou.nodeType(hou.objNodeTypeCategory(), "geo") + >>> geo_type.addAlias("transformable") + >>> geo_type.aliases() + ('transformable',) + >>> hou.node("/obj").createNode("transformable") + + + REPLACES + opalias command """ + pass + + def removeAlias(self, alias): + """ + removeAlias(self, alias) + + Remove an alias for this node type. + + REPLACES + opalias command """ + pass + + def hidden(self): + """ + hidden(self) -> bool + + Return whether or not this node type appears in the tab menu. See also + hou.NodeType.setHidden. """ + return True + + def setHidden(self, hidden): + """ + setHidden(self, hidden) + + Set whether or not this node type appears in the tab menu. See also + hou.NodeType.hidden. + + REPLACES + opexclude command """ + pass + + def instances(self): + """ + instances(self) -> tuple of hou.Node + + Return a tuple of all the nodes of this type in the current scene. + + REPLACES + opstat command + otinuse command """ + return (Node(),) + + def parmTemplates(self): + """ + parmTemplates(self) -> tuple of hou.ParmTemplate + + Return a tuple of parm templates for the parameters on this node type. + Note that spare parameters on individual node instances are not included + in this tuple, since they are independent from the node type. + """ + return (ParmTemplate(),) + + def parmTemplateGroup(self): + """ + parmTemplateGroup(self) -> hou.ParmTemplateGroup + + Return the group of parm templates corresponding to this node type's + parameter interface. + + See hou.ParmTemplateGroup for more information on parm template groups. + To change the parameter interface for a node type defined by a digital + asset, see hou.HDADefinition.setParmTemplateGroup. + """ + return ParmTemplateGroup() + + def uninstallFromPath(self): return + def hdaModule(self): + """ + hdaModule(self) -> hou.HDAModule + + Return the HDAModule object for this node type. If the type is not for + a digital asset, the module is empty. Otherwise, the module contains + the functions, constants, classes, etc. in the user-defined + "PythonModule" section of the digital asset. + + You can use hou.Node.hdaModule as a shortcut to access the HDAModule + from a node instance. + + See hou.HDAModule for more information. + """ + return HDAModule() + + def hasPermanentUserDefaults(self): + """ + hasPermanentUserDefaults(self) -> bool + + Returns whether a user has set permanent defaults for this node type. + + See also hou.Parm.hasTemporaryDefaults """ + return True + + def _asVoidPointer(self): return + +class ParmTemplate(object): + """ + hou.ParmTemplate + + Describes a parameter tuple (its name, type, etc.). This is base class + for all parameter templates. + + ParmTemplates are most often used when describing a parameter in a + digital asset definition's parameter interface or when describing an + individual node's parameter layout (including its spare parameters). A + ParmTemplate describes a parameter and the type of data it holds, but it + does not store the current value of a parameter; only hou.Parm objects + inside hou.ParmTuple objects actually store parameter values. You can + think of a hou.ParmTuple as an instance of a ParmTemplate. For example, + the "t" parm tuple on geometry objects can be described by a + hou.FloatParmTemplate -- it has a label of "Transform", a data type of + hou.parmData.Float, 3 components, a naming scheme of + hou.parmNamingScheme.XYZW, etc. Each geometry object node has a + hou.ParmTuple named "t" that uses this ParmTemplate. + + Note that ParmTemplate objects are just data containers, and they have + no live relationship with objects in Houdini. For example, a hou.Node + object corresponds directly to a node in Houdini, and if the node is + renamed in Houdini hou.Node.name will return the new name. + ParmTemplates, on the other hand, do not have a live relationship. + Creating a ParmTemplate based on a spare parameter or asset definition + parameter will simply copy the information into the ParmTemplate object, + and modifying the object will not affect the spare parameter/asset + parameter. + + Note also that ParmTemplate objects are always instances of a subclass + of this class, so you cannot construct an instance of this class + directly. + + To manipulate the parameters of a digital asset, you can retrieve the + asset's current set of ParmTemplates into a hou.ParmTemplateGroup using + hou.HDADefinition.parmTemplateGroup. You can then modify the group, + adding parameters to it and replacing parameters in it, and save the + group back to the asset definition with + hou.HDADefinition.setParmTemplateGroup. Similarly, you can change a + node's parameter layout with hou.Node.parmTemplateGroup and + hou.Node.setParmTemplateGroup. + + You can also ask a hou.ParmTuple for its ParmTemplate in order to find + out information about the parameter, such as allowed ranges of values, + the label displayed to the user in the parameter pane, the parameter's + popup help, etc. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def clone(self): + """ + clone(self) -> hou.ParmTemplate + + Return a copy of this parm template. + + This method can be called on an instance of a ParmTemplate subclass and + an instance of the subclass is properly returned. + """ + return ParmTemplate() + + def name(self): + """ + name(self) -> string + + Return the internal name of the parm template. This is the name that + hou.ParmTuple objects created from this parm template will have. + + Note that the names of hou.Parm objects inside ParmTuples based off this + ParmTemplate are determined by this name, the number of components in + this parm template, and the naming scheme. See the namingScheme method + for more information. + """ + return '' + + def setName(self, name): + """ + setName(self, name) + + Change the internal name of this parm template. Remember that + ParmTemplates just store data, so the name change will not have any + effect unless this parm template is later used to modify a parameter + layout in Houdini. + """ + + + def label(self): + """ + label(self) -> string + + Return the name of the parameter tuple that is displayed in the + parameter pane. + """ + return '' + + def setLabel(self, label): + """ + setLabel(self, label) + + Change the name of the label that is displayed in the parameter pane. + """ + + + def type(self): + """ + type(self) -> hou.parmTemplateType enum value + + Return the enumerated value identifying the type of this parameter. + + Remember that ParmTemplate objects are always instances of a subclass of + this class. The following table shows the mapping between + hou.parmTemplateType enumeration values and ParmTemplate subclasses: + + Enumerated Value + ParmTemplate Subclass + + hou.parmTemplateType.Int + hou.IntParmTemplate + + hou.parmTemplateType.Float + hou.FloatParmTemplate + + hou.parmTemplateType.String + hou.StringParmTemplate + + hou.parmTemplateType.Toggle + hou.ToggleParmTemplate + + hou.parmTemplateType.Menu + hou.MenuParmTemplate + + hou.parmTemplateType.Button + hou.ButtonParmTemplate + + hou.parmTemplateType.FolderSet + hou.FolderSetParmTemplate + + hou.parmTemplateType.Folder + hou.FolderParmTemplate + + hou.parmTemplateType.Separator + hou.SeparatorParmTemplate + + hou.parmTemplateType.Label + hou.LabelParmTemplate + + hou.parmTemplateType.Ramp + hou.RampParmTemplate + """ + return parmTemplateType() + + def dataType(self): + """ + dataType(self) -> hou.parmData enum value + + Return the data type stored in hou.Parm instances inside hou.ParmTuple + instances corresponding to this ParmTemplate. + + For example, suppose this parm tuple is a hou.FloatParmTemplate with 3 + components. The corresponding hou.ParmTuple will have 3 hou.Parm + objects inside it, and each will store a floating point value. In this + example, this method would return hou.parmData.Float. + """ + return parmData() + + def look(self): + """ + look(self) -> hou.parmLook enum value + + Return the look of this parameter in the parameter pane. For example, a + tuple of 3 floats can be displayed as a 3D vector or as an RGB color. + + See hou.parmLook for more information. + """ + return parmLook() + + def setLook(self, look): + """ + setLook(self, look) + + Set the look of this parameter to a hou.parmLook enum value. + + See the look method for more information. + """ + + + def namingScheme(self): + """ + namingScheme(self) -> hou.parmNamingScheme enum value + + Return the naming scheme used to name parameters inside the parm tuple + for this ParmTemplate. + + For example, if the naming scheme is hou.parmNamingScheme.XYZW and the + parm template is named "foo" and has 3 components, the parameters will + be named "foox", "fooy", and "fooz". On the other hand, if the + naming scheme was hou.parmNamingScheme.Base1, the parameters would be + named "foo1", "foo2", and "foo3". + + Note that when the parm template only has 1 component, the parm name is + the same as the parm tuple name. + + See hou.parmNamingScheme for more information. + """ + return parmNamingScheme() + + def setNamingScheme(self, naming_scheme): + """ + setNamingScheme(self, naming_scheme) + + Set the naming scheme used to name parameters inside the parm tuple for + this ParmTemplate to a hou.parmNamingScheme enum value. + + See the namingScheme method for more information. + """ + + + def numComponents(self): + """ + numComponents(self) -> int + + Return the number of values stored inside hou.ParmTuple instances of + this ParmTemplate. + + For example, if this parm template has 3 components, there will be 3 + parameter fields displayed in the parameter pane and there will be 3 + hou.Parm objects inside a hou.ParmTuple based off this parm template. + """ + return 0 + + def setNumComponents(self, num_components): + """ + setNumComponents(self, num_components) -> int + + Set the number of values stored inside hou.ParmTuple instances of this + ParmTemplate. + + Note that some ParmTemplate subclasses only support one component, so + calling this method with a value other than 1 may raise a + hou.OperationFailed exception. Also, changing the number of components + may automatically change the size of the tuple of default values for + some ParmTemplate subclasses. + """ + return 0 + + def disableWhen(self): + """ + disableWhen(self) -> str + + This method is deprecated in favor of the conditionals method. + """ + return '' + + def setDisableWhen(self, disable_when): + """ + setDisableWhen(self, disable_when) + + This method is deprecated in favor of the setConditional method. + """ + + def conditionals(self): + """ + conditionals(self) -> dict of [Hom:hou.parmCondType] enum value to + string + + Returns the set of conditionals currently affecting this parameter. + + See the Conditionals section of the + help for more information on this string. + """ + return {'':parmCondType(),} + + def setConditional(self, type, conditional): + """ + setConditional(self, type, conditional) + + Set a conditional string of the given hou.parmCondType type for this + parameter. This string consists of rules on how this parameter's display + behaves when other parameters change. + + See the Conditionals section of the + help for more information on this string. + """ + + + def isHidden(self): + """ + isHidden(self) -> bool + + Return whether this parameter is hidden in the parameter pane. + """ + return True + + def hide(self, on): + """ + hide(self, on) + + Marks this parameter as visible or invisible in the parameter pane. + + Note that hidden parameters still exist, and can be evaluated, channel- + referenced, etc. They simply will not be displayed in the parameter + pane. + """ + + def isLabelHidden(self): + """ + isLabelHidden(self) -> bool + + Return whether the label for this parameter is hidden in the parameter + pane. + """ + return True + + def hideLabel(self, on): + """ + hideLabel(self, on) + + Hide or show the label for this parameter in the parameter pane. + """ + + + def joinsWithNext(self): + """ + joinsWithNext(self) -> bool + + Return whether this parameter is displayed on the same line as the next + parameter in the parameter pane. + """ + return True + + def setJoinWithNext(self, on): + """ + setJoinWithNext(self, on) + + Sets whether this parameter is displayed on the same line as the next + parameter in the parameter pane. + """ + + def joinWithNext(self): + """ + joinWithNext(self) -> bool + + This method is deprecated in favor of the joinsWithNext method. + """ + return True + + def help(self): + """ + help(self) -> str + + Return the help that Houdini displays when you hover over the parameter + label in the parameter pane. + """ + return '' + + def setHelp(self, help): + """ + setHelp(self, help) + + Set the help that Houdini displays when you hover over the parameter + label in the parameter pane. + """ + + def scriptCallback(self): + """ + scriptCallback(self) -> str + + Return the contents of the script that Houdini runs when this parameter + changes. This script is most commonly used in hou.ButtonParmTemplate + objects to respond to the button being pressed. + + Note that Houdini uses the tags dictionary to store the script callback + information. + """ + return '' + + def setScriptCallback(self, script_callback): + """ + setScriptCallback(self, script_callback) + + Set the callback script to the given string. This script runs in + response to a parameter change. + + See the scriptCallback method for more information. + """ + + + def scriptCallbackLanguage(self): + """ + scriptCallbackLanguage(self) -> hou.scriptLanguage enum value + + Return the language of the script that Houdini runs when this parameter + changes. + + Note that Houdini uses the tags dictionary to store the script callback + information. + + See also the scriptCallback method. + """ + return scriptLanguage() + + def setScriptCallbackLanguage(self, script_callback_language): + """ + setScriptCallbackLanguage(self, script_callback_language) + + Set the script callback language to a hou.scriptLanguage enum value. + + See the scriptCallbackLanguage method for more information. + """ + + def tags(self): + """ + tags(self) -> dict of string to string + + Return a dictionary of extra data stored in the parm template. + + Houdini uses this dictionary to attach arbitrary data to parm templates. + The keys in this dictionary vary depending on the ParmTemplate type and + its use. + """ + return {'':'',} + + def setTags(self, tags): + """ + setTags(self, tags) + + Set the dictionary of extra data stored in this parm template. + + See the tags method for more information. + """ + + def asCode(self, function_name=None, variable_name=None): + """ + asCode(self, function_name=None, variable_name=None) -> str + + Return a string containing Python statements that can be executed to + recreate the parameter template. To run the string, use Python's + compile, or execfile functions or the exec statement. + + function_name + If is specified, then the code returned creates a + Python function with the given name. must be a non- + zero length string consisting of only alphanumeric and underscore + characters. Any invalid characters are internally converted to + underscores. + + The function returns a reference to the newly created parameter + template object. + + variable_name + The name of a Python variable that the result code will assign to. + If None, Houdini uses the variable name "hou_parm_template". + + Here is an example of saving the output to a file and then loading it + back into Houdini: + + # Get a reference to the target parameter template. + node = hou.node("/obj/geo1") + parm_template = node.parm("tx").parmTemplate() + + # Execute asCode and write the output script to a file. + code = parm_template.asCode() + source_file = open("create_parm_template.py", "w") + source_file.write(code) + source_file.close() + + # Execute the script. The new parameter template will be stored + # in the 'hou_parm_template' variable. + execfile("create_parm_template.py") + + # Add a spare parameter to the node using the saved parameter + # template. + node.addSpareParmTuple(hou_parm_template) + + Here is an example of saving the output into a function in a file and + then calling it from Houdini: + + # Get a reference to the target parameter template. + node = hou.node("/obj/geo1") + parm_template = node.parm("tx").parmTemplate() + + # Execute asCode and write the function definition to a file. + code = parm_template.asCode(function_name="createParmTemplate") + source_file = open("parmtemplatelib.py", "w") + source_file.write(code) + source_file.close() + + # Call the function definition. + import parmtemplatelib + hou_parm_template = parmtemplatelib.createParmTemplate() + + # Add a spare parameter to the node using the saved parameter + # template. + node.addSpareParmTuple(hou_parm_template) + """ + return '' + +class ParmTemplateGroup(object): + """ + hou.ParmTemplateGroup + + A group of parameter templates used to represent the parameter layout of + a node or the parameters in a digital asset definition. + + This class stores a group of hou.ParmTemplate objects. You can create + an empty group, create a group from a sequence of parm templates, or + create a group from the parameter definitions of a digital asset or from + a particular node's current parameter layout. Similarly, you can set an + asset's parameters or a node's parameter interface to the contents of a + parameter group. + + You can get an asset's parm templates with + hou.HDADefinition.parmTemplateGroup and set them with + hou.HDADefinition.setParmTemplateGroup. Similarly, you can get an + individual node's parameter definition with hou.Node.parmTemplateGroup + and set it with hou.Node.setParmTemplateGroup. When setting a node's + parameter interface, any parms that are not in the node's type's set of + parms will be added as spare parameters. Similarly, if parameters in + the node's type are not present in the group, they will be automatically + added at the end and made invisible. Also, if they exist but the types, + labels, looks, naming schemes, etc are different, Houdini will discard + all changes you attempt to make to these reserved parameters except for + visibility settings. + + Note that ParmTemplateGroups store their own copy of the parm templates. + Asking for the parm templates in a group will return a copy of the parm + templates; modifying those copies will not change the contents of the + group. For example, to change a parameter in a group you cannot simply + call find and modify the hou.ParmTemplate it returned. Instead, you + must call replace. + + It is important to understand the difference between folder parm + templates and folder set parm templates when using ParmTemplateGroups. + Folder sets correspond directly to hou.ParmTuple objects -- there is one + parm tuple (that contains one parm) for each set of folders, and + changing the value of that parm changes which folder is displayed. + Individual Folders, on the other hand, do not directly correspond to + hou.ParmTuple objects, but they are used in Houdini's + dialog and they make it easy to add individual folders and control which + parameters are inside a folder. Unlike a hou.FolderSetParmTemplate, a + hou.FolderParmTemplate stores the set of parm templates inside that + folder. When a node or definition's parameters are set to the contents + of a parm template group, the folder sets are determined and the parm + tuple name for the set is the name of the first folder in that set. The + names of the other folders in the set are not used. + + ParmTemplateGroups use folder parm templates instead of folder set parm + templates. Attempting to add a FolderSetParmTemplate to a group will + raise hou.OperationFailed. Asking a parm tuple for its parm template, + on the other hand, may return a folder set but will never return a + folder. Previously, folder parameter templates and parm template groups + did not exist, so the only way to add folders were with special methods + like hou.HDADefinition.addParmFolder and hou.Node.addSpareParmFolder. + Now that that they exist, you may create folders by passing folder parm + templates to hou.HDADefinition.addParmTuple and + hou.Node.addSpareParmTuple. However, using parm template groups is + preferred over calling these methods. + + Note that folder parm templates are also used to represent multiparm + blocks, much like the dialog does. The folder parm + template's hou.folderType determines whether it is a folder or a + multiparm block. Unlike folder parm templates, which do not correspond + directly to parameter instances, a multiparm parm template does + correspond to an integer parameter that controls the number of instances + of the multiparm. + + + """ + + def __init__(self, parm_templates=()): + """ + __init__(self, parm_templates=()) + + Create a new group from an optional sequence of parm templates. If none + are passed in, the new group will be empty. + + Because groups and folder parm templates can both be constructed using a + sequence of contained parm templates, it is possible to construct a parm + template group with parameters inside folders using a single expression. + The following example creates a group with two folders and with + parameters inside each of those folders: + + >>> group = hou.ParmTemplateGroup(( + hou.FolderParmTemplate("folder", "Physical", ( + hou.FloatParmTemplate("mass", "Mass", 1), + hou.FloatParmTemplate("density", "Density", 1), + )), + hou.FolderParmTemplate("folder", "Divisions", ( + hou.FloatParmTemplate("divisions", "Divisions", 3), + hou.ToggleParmTemplate("laser", "Laser Scan", default_value=True), + )), + )) + >>> group.entries() + (, + ) + >>> group.entries()[0].parmTemplates()[0] + + >>> group.entriesWithoutFolders() + (, + , + , + ) + + Raises hou.OperationFailed if any of the parm templates in the sequence + are hou.FolderSetParmTemplate objects. + """ + def find(self, name): + """ + find(self, name) -> hou.ParmTemplate or None + + Search in this group for a parm template whose name matches the + specified one. Return a copy of the parm template or None if no match + was found. + + Note that this function returns a copy of the parm template stored in + this group. Modifying the copy will not affect the parameters in this + group. The following example shows how to use the find and replace + methods to modify the "pos" parm template in the group: + >>> parm_template = group.find("pos") + >>> parm_template.setLabel("Position") + >>> parm_template.replace("pos", parm_template) + + + If you created the group from existing parameters, folder parm templates + in the same folder set will share the same name, so searching for a + folder using this method may return the first folder in the folder set. + To instead search for a folder by its folder label, use findFolder. + + Note that, in general, the group does not prevent you from adding two + parameters with the same name. In this case, searching for a parameter + with this name will return the first one. Note, though, that when when + setting this group to a node or asset definition's parms, either the + duplicate parameters will be renamed on an exception will be raised. See + the rename_conflicting_parms parameter to + hou.HDADefinition.setParmTemplateGroup for more information. + """ + return ParmTemplate() + + def findIndices(self, name_or_parm_template): + """ + findIndices(self, name_or_parm_template) -> tuple of int + + Search in this group for a parm template and return a tuple of integers + corresponding to the indices of the parm in the group. Return an empty + tuple if no match was found. + + name_or_parm_template + Either the name of the parm template or another hou.ParmTemplate + object to compare against when searching for a match. + + If the parm template was found and it is not inside any folders, the + result tuple will contain a single integer with the index of the parm + template. Otherwise, the first entry will be the index of a folder + inside the group, the next will be an index of a folder inside that + folder, and so on until the last index is an index of a parm template + inside a folder. + + See also findIndicesForFolder. + """ + return (0,) + + def findFolder(self, label_or_labels): + """ + findFolder(self, label_or_labels) -> hou.FolderParmTemplate or None + + Search in this group for a folder parm template with the given label. + Return a copy of the hou.FolderParmTemplate or None if the folder wasn't + found. + + label_or_labels + Either a string containing the folder's label or a tuple of strings + containing the labels of containing folders as well as the folder's + label. + + Note that a folder parm template's label is what appears in the + interface in the parameter dialog. The folder parm template's name is + used to determine the name of the parm tuple for the folder set, if the + folder is the first in the folder set. See the documentation for this + class for more information. + """ + return FolderParmTemplate() + + def findIndicesForFolder(self, label_or_labels): + """ + findIndicesForFolder(self, label_or_labels) -> tuple of int + + Search in this group for a folder parm template with the given label. + Return an empty tuple if no match was found. + + See findFolder for a description of the parameter and findIndices for a + description of the return value. + + Note that this method does not accept a parm template. However, if you + have a folder parm template and want to find its indices, simply call + findIndices on the folder parm template. + """ + return (0,) + + def entryAtIndices(self, indices): + """ + entryAtIndices(self, indices) -> hou.ParmTemplate + + Given a sequence of integer indices return a copy of the + hou.ParmTemplate object at that location. The indices are of the format + returned by findIndices. + + Like the hou.ParmTemplate.find and hou.ParmTemplate.entries methods, + this method returns a copy of the parm template stored inside this + group. Modifying the copied parm template will not affect the contents + of this group. Use replace to change a parm template. + + Raises hou.OperationFailed if the indices are invalid, including when + the indices sequence is empty. + + This method could be implemented as follows: + def entryAtIndices(self, indices): + if len(indices) == 0: + raise hou.OperationFailed("Invalid indices") + parm_template = self.entries()[indices[0]] + + # If there are multiple indices then we should have just looked up + # a folder parm template. + for index in indices[1:]: + parm_template = parm_template.parmTemplates()[index] + return parm_template """ + return ParmTemplate(self): + + def containingFolderIndices(self, name_or_parm_template_or_indices): + """ + containingFolderIndices(self, name_or_parm_template_or_indices) -> tuple + of int + + Return the indices of the folder in this group containing a given parm + template. Return an empty tuple if no match was found. + + See replace for a description of the parameter and findIndices for a + description of the return value. + + Raises hou.OperationFailed if the parameter is not inside the group or + is not inside a folder. + """ + return (0,) + + def containingFolder(self, name_or_parm_template): + """ + containingFolder(self, name_or_parm_template) -> hou.FolderParmTemplate + + Return a copy of the hou.FolderParmTemplate in this group containing a + parm template. + + name_or_parm_template + Either the name of the parm template or another hou.ParmTemplate + object to compare against when searching for a match. + + Raises hou.OperationFailed if the parameter is not inside the group or + is not inside a folder. + """ + return FolderParmTemplate() + + def entries(self): + """ + entries(self) -> tuple of hou.ParmTemplate + + Return a tuple containing copies of the parm templates inside this + group. + + Note that folders are returned as hou.FolderParmTemplate objects, and + each folder parm template contains the parm templates inside it. Use + hou.FolderParmTemplate.parmTemplates to access the elements in a folder. + + The following example creates a function named allParmTemplates that + returns a single sequence of parm templates, including folders, for all + parm templates in the group: + def allParmTemplates(group_or_folder): + for parm_template in group_or_folder.parmTemplates(): + yield parm_template + + # Note that we don't want to return parm templates inside multiparm + # blocks, so we verify that the folder parm template is actually + # for a folder. + if (parm_template.type() == hou.parmTemplateType.Folder and + parm_template.isActualFolder()): + for sub_parm_template in allParmTemplates(parm_template): + yield sub_parm_template + + + See also the parmTemplates method. + """ + return (ParmTemplate(),) + + def parmTemplates(self): + """ + parmTemplates(self) -> tuple of hou.ParmTemplate + + This method is simply an alias for the entries method. + + It makes it easier to search down through a parm template group for + items nested in folders, since the hou.FolderParmTemplate class also has + a method named parmTemplates. The following example shows how to look + up the labels for a folder parameter given its indices: + def folderLabels(parm_template_group, indices): + container = parm_template_group + result = [] + for index in indices: + container = container.parmTemplates()[index] + result.append(container.label()) + return result """ + return (ParmTemplate(),) + + def entriesWithoutFolders(self): + """ + entriesWithoutFolders(self) -> tuple of hou.ParmTemplate + + Return a tuple containing all the non-folder parm templates inside this + group. The output is the flattened set of parm templates in the group, + and includes the non-folder parms inside folders. + + Like entries, this method returns a copy of the parm templates inside + this group. + + Note that this function does not return parm templates for entries + inside multiparm blocks. + + Also see the entries method for the example function allParmTemplates. + """ + return (ParmTemplate(),) + + def replace(self, name_or_parm_template_or_indices, parm_template): + """ + replace(self, name_or_parm_template_or_indices, parm_template) + + Replace a parm template inside this group with another parm template. + + name_or_parm_template_or_indices + Either the name of the parm template being replaced, a copy of the + parm template, or a tuple of integer indices that identify the parm + template and any containing folders. + + This method changes the contents of this group. Note that it stores a + copy of the parm template in the group, so future changes to the parm + template passed in will not affect the group. + + See the find method for a simple example of how to use this method. + + Note that parm templates for reserved parameters (for example, the + transform parameters in object-level digital assets) can be replaced in + the parm template group, but all aspects of reserved parameters except + for their visibility and join settings will be restored to their + defaults when you save this group to a node or asset definition. + + Raises hou.OperationFailed if the parm template doesn't exist. + """ + + def insertBefore(self, name_or_parm_template_or_indices, parm_template): + """ + insertBefore(self, name_or_parm_template_or_indices, parm_template) + + Insert a parm template inside this group before an existing one. The + new parm template will be in the same folder as the existing one. + + See replace for a description of the name/parm template/indices + parameter. + + Use appendToFolder to add an entry to a empty folder. Use append to add + an entry to an empty parm template group. + """ + + def insertAfter(self, name_or_parm_template_or_indices, parm_template): + """ + insertAfter(self, name_or_parm_template_or_indices, parm_template) + + Insert a parm template inside this group after an existing one. The new + parm template will be in the same folder as the existing one. + + See replace for a description of the name/ parm template/indices + parameter. + + Use appendToFolder to add an entry to a empty folder. Use append to add + an entry to an empty parm template group. + """ + + def append(self, parm_template): + """ + append(self, parm_template) + + Add a parm template after all existing parm templates, outside of any + folder. + + See also appendToFolder. + """ + + def appendToFolder(self, label_or_labels_or_parm_template_or_indices, parm_template): + """ + appendToFolder(self, label_or_labels_or_parm_template_or_indices, + parm_template) + + Add a parm template to the bottom of an existing folder. + + Note that you cannot add to a folder by simply looking up the folder + parm template and calling hou.FolderParmTemplate.addParmTemplate on it, + because asking for a folder will return a deep copy. The parm templates + inside the copied folder will be separate from those inside this group, + and modifying the folder will not affect the group. Consider the + following example: + + >>> folder = group.findFolder("Transform") + # "folder" now has its own copy of the parms inside it. + >>> folder.addParmTemplate(new_parm_template) + # "folder"'s parm templates are updated, but the group's parm templates are + # unchanged. + + >>> group.appendToFolder(folder, new_parm_template) + # The group is modified. "folder"'s contents are unchanged. + """ + + def addParmTemplate(self, parm_template): + """ + addParmTemplate(self, parm_template) + + This method is simply an alias for the append method. + + It makes it easier to treat parm template groups and + hou.FolderParmTemplate objects uniformly, since hou.FolderParmTemplate + has an addParmTemplate method. + """ + + def remove(self, name_or_parm_template_or_indices): + """ + remove(self, name_or_parm_template_or_indices) + + Remove a parm template from the group. Note that if you remove a + folder, all of the parm templates in the folder are also removed. + + See replace for a description of the name/parm template/indices + parameter. + + Raises hou.OperationFailed if the parm template could not be found. + """ + + def hide(self, name_or_parm_template_or_indices, on): + """ + hide(self, name_or_parm_template_or_indices, on) + + Hide a parameter by making it invisible. The parameter still exists in + the group, but parameter dialogs will not display it. + + See replace for a description of the name/parm template/indices + parameter. + + This method could be implemented as follows: + def hide(self, name_or_parm_template_or_indices, on): + parm_template = self.find(name_or_parm_template_or_indices) + parm_template.hide(on) + self.replace(name_or_parm_template_or_indices, parm_template) + + + See also hideFolder and hou.ParmTemplate.hide. + """ + + def hideFolder(self, label_or_labels, on): + """ + hideFolder(self, label_or_labels, on) + + Hide a folder and all the parameters in it. + + You may pass in either a string containing a single folder name or a + sequence of strings to indentify a nested folder. For example, the + sequence ("Render", "Dicing") identifies the Dicing folder inside + the Render folder. The folder is hidden if on is True and unhidden if + it is False. + + The following example hides the Transform parameter in a geometry + object: + >>> group = geo_node.parmTemplateGroup() + >>> group.hideFolder("Transform", True) + >>> geo_node.setParmTemplateGroup(group) + + + The following example hides the Dicing folder inside the Render folder + on a geometry object: + >>> group = geo_node.parmTemplateGroup() + >>> group.hideFolder(("Render", "Dicing"), True) + >>> geo_node.setParmTemplateGroup(group) + + + This method could be implemented as follows: + def hideFolder(self, label_or_labels, on): + self.hide(self.findFolder(label_or_labels), on) + + + See also hide. + """ + + def isHidden(self, name_or_parm_template_or_indices): + """ + isHidden(self, name_or_parm_template_or_indices) -> bool + + Return whether the given parameter is itself hidden or lies inside a + hidden folder. + + See replace for a description of the name/parm template/indices + parameter. + + Note that if the parameter is inside a hidden folder but the parameter + is not marked as hidden, calling hou.ParmTemplate.isHidden on the parm + template will return False, while this method will return True. + """ + return True + + def isFolderHidden(self, label_or_labels): + """ + isFolderHidden(self, label_or_labels) -> bool + + Return whether a folder or one of its containing folders is hidden. + + Note that if a folder is inside a hidden folder but this folder is not + marked as hidden, calling hou.ParmTemplate.isHidden on the folder parm + template will return False, while this method will return True. + + You may pass in either a string containing a single folder name or a + sequence of strings to indentify a nested folder. For example, the + sequence ("Render", "Dicing") identifies the Dicing folder inside + the Render folder. The folder is hidden if on is True and unhidden if + it is False. + """ + return True + + def clear(self): + """ + clear(self) + + Remove all parm templates from this group. + """ + + def asDialogScript(rename_conflicting_parms=False): + """ + asDialogScript(rename_conflicting_parms=False) + + Return a string containing the dialog script file contents corresponding + to this parm template group. + + Houdini saves parameter definitions in this format when saving digital + asset definitions (in the DialogScript section of the digital asset) and + when saving parameter layouts of nodes. + """ + + def setToDialogScript(dialog_script): + """ + setToDialogScript(dialog_script) + + Set the contents of this group to match the parameters defined by the + given dialog script string. + + Raises hou.OperationFailed if there is an error in the dialog script + contents. + """ + + def asCode(self, function_name=None, variable_name=None): + """ + asCode(self, function_name=None, variable_name=None) + + Return Python code that will recreate this group. + + function_name + If not None, the returned code will create a Python function. + + variable_name + The name of the variable that will be assigned the newly-created + parm template group. + """ + return '' + + def sourceNode(self): + """ + sourceNode(self) -> hou.Node or None + + Return the node that the parameter template group was generated from. If + the group was not generated from a node, then return None. + + Raises hou.ObjectWasDeleted if the source node has been destroyed. + """ + return Node() + +class Pane(object): + """ + hou.Pane + + A rectangular area of the desktop that contains one or more pane tabs. + + Desktops (and floating panels) are composed of one or more panes. + Initially a desktop contains one pane, and more panes are added to it by + splitting existing panes in two, either horizontally or vertically. + + See hou.Desktop for more information about panes and pane tabs. See + hou.FloatingPanel for more information about floating panels. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def desktop(self): + """ + desktop(self) -> hou.Desktop or None + + Return the desktop in which this pane exists, or None if it is in a + floating panel that's not attached to the desktop. + """ + return Desktop() + + def id(self): return 0 + def floatingPanel(self): return FloatingPanel () + def tabs(self): + """ + tabs(self) -> tuple of hou.PaneTab + + Return the pane tabs in this pane. + """ + return (PaneTab(),) + + def createTab(self, type): + """ + createTab(self, type) -> hou.PaneTab + + Create a new pane tab with the desired type and return it. The new pane + tab will be current (i.e. it will be the pane tab that's open). + """ + return PaneTab() + + def currentTab(self): + """ + currentTab(self) -> hou.PaneTab + + Return the currently focused pane tab. + + See also hou.PaneTab.setIsCurrentTab. + """ + return PaneTab() + + def tabOfType(self, type, index=0): + """ + tabOfType(self, type, index=0) -> hou.PaneTab or None + + Find and return a pane tab with the desired type, or None if no such tab + exists in the pane. + + If there are multiple tabs in the pane with the desired type, then the + first found tab is returned. Use 'index' to return the other tabs. For + example, use 'index=0' to return the first found tab, use 'index=1' to + return the second found tab, etc. + + See also hou.ui.paneTabOfType. + """ + return PaneTab() + + def splitHorizontally(self): + """ + splitHorizontally(self) -> hou.Pane + + Split the pane, adding a new pane to the right, and return the new pane. + The new pane will have a single tab whose type is the same as the type + of this pane's current tab. + + See also hou.Pane.splitVertically. + + REPLACES + pane command """ + return Pane() + + def splitVertically(self): + """ + splitVertically(self) -> hou.Pane + + Split the pane, adding a new pane to the bottom, and return the new + pane. The new pane will have a single tab whose type is the same as the + type of this pane's current tab. + + See also hou.Pane.splitHorizontally. + + REPLACES + pane command """ + return Pane() + +class PaneTab(object): + """ + hou.PaneTab + + One of the tabs inside a desktop pane. + + Each pane type is of a particular type (e.g. scene viewer, network view, + parameters, etc.). A pane may contain multiple tabs and displays the + contents of one tab at a time. + + See hou.Desktop for more information about panes and pane tabs. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + + def pane(self): + """ + pane(self) -> hou.Pane or None + + Return the pane in the desktop that contains this pane tab. Note that + pane tabs in regular floating panels are always in a pane, since regular + floating panels contain one or more panes. + + However, some floating panels have their content stripped down to only + contain one particular pane tab type, and do not display the user + interface to add more pane tabs, split the pane, etc. This method + returns None for these stripped down floating panels. + """ + return Pane() + + def name(self): + """ + name(self) -> str + + Return the name of this tab. + + REPLACES + pane command """ + return '' + + def setName(self, name): + """ + setName(self, name) + + Set the name of this pane tab. A pane tab name may contain spaces. + + Note that this name is the internal name of the tab, and is different + from the label displayed in the interface. + + REPLACES + pane command """ + + def isCurrentTab(self): + """ + isCurrentTab(self) -> bool + + Return whether this tab is the selected tab in the containing pane. + """ + return True + + def setIsCurrentTab(self): + """ + setIsCurrentTab(self) + + Set this tab as the selected tab in the containing pane. + """ + + def isFloating(self): + """ + isFloating(self) -> bool + + Return whether this pane tab is in a floating panel. + + This method can be approximately implemented as follows: + def isFloating(self): + return self.pane() is None or self.pane().floatingPanel() is not None + + + REPLACES + pane command """ + return True + + def clone(self): + """ + clone(self) -> hou.PaneTab + + Create a floating copy of the pane tab and return the cloned pane tab. + The new pane tab is in a new floating panel. + """ + return PaneTab() + + def close(self): + """ + close(self) + + Close the pane tab. + + REPLACES + pane command """ + + def type(self): + """ + type(self) -> hou.paneTabType enum value + + Return the type of this tab (i.e. whether it is a scene viewer, + parameter editor, network editor, etc.). + """ + return paneTabType() + + def setType(self, type): + """ + setType(self, type) -> hou.PaneTab + + Create a new pane tab of the given type, replace this tab with it, and + return the new pane tab. Use the returned pane tab afterward; + references to this tab become invalid. + + REPLACES + pane command """ + return PaneTab() + + def linkGroup(self): + """ + linkGroup(self) -> hou.paneLinkType enum value + + Return the link group that this pane tab belongs to. + + See also hou.PaneTab.isPin. + """ + return paneLinkType() + + def setLinkGroup(self, group): + """ + setLinkGroup(self, group) + + Set the link group membership of this pane tab. + """ + + def isPin(self): + """ + isPin(self) -> bool + + Return whether this pane tab is pinned. This method is equivalent to + (self.linkGroup() == hou.paneLinkType.Pinned) + + See also hou.PaneTab.linkGroup. + """ + return True + + def setPin(self, pin): + """ + setPin(self, pin) + + If pin is True, set the link group membership to + hou.paneLinkType.Pinned. Otherwise, set it to + hou.paneLinkType.FollowSelection. This method can be implemented using + hou.PaneTab.setLinkGroup as follows: + + def setPin(self, pin): + if pin: + self.setLinkGroup(hou.paneLinkType.Pinned) + else: + self.setLinkGroup(hou.paneLinkType.FollowSelection) + + See also hou.PaneTab.setLinkGroup. + """ + +class PathBasedPaneTab(PaneTab): + """ + hou.PathBasedPaneTab + + REPLACES + * bookmark + * pane + * mousepath + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def pwd(self): + """ + pwd(self) -> Node + """ + return Node() + + def setPwd(self, node): + """ + setPwd(self, node) + """ + + def cd(self, path): + """ + cd(self, path) + """ + + def currentNode(self): + """ + currentNode(self) -> Node + """ + return Node() + + def setCurrentNode(self, node): + """ + setCurrentNode(self, node) + """ + +class DopData(object): + """ + hou.DopData + + A piece of data stored inside a DOP network's simulation. + + Each DOP network builds a tree of data, and then Houdini examines and + updates this tree when it runs the simulation. DOP data elements can be + DOP objects, geometry, volumes, forces, solvers, etc. The data is + arranged in a tree structure, where child nodes are called subdata and + are said to be attached to their parent nodes. Under the root of the + tree are usually the DOP objects and data describing their + relationships. + + Note that the same piece of data can appear in the tree in multiple + locations, with different names. DopData objects thus do not store + their name, and the name of a piece of data in the tree is instead + stored with its parent data(s). + + By default, DopData objects store the path within the tree to the data. + As a consequence, if the time changes and the solvers within the + simulation change the contents of the tree of data, the Python DopData + object will update to refer to the simulation's new state. If the data + path no longer refers to valid data, Houdini raises hou.ObjectWasDeleted + when you try to access the DopData object from Python. + + If you do not want the DopData to update with changes to the simulation, + you can call hou.DopData.freeze. freeze returns another DopData object + that refers the simulation's state at the current time, and will not + change when the simulation time changes. + + Each piece of data can contain records, and each record stores a list of + name and value pairs called fields. Each record has a name, but it's + possible for multiple records with the same name to exist in the same + piece of data. In this case, the record also has an index, and you can + think of the records as rows of a spreadsheet. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def freeze(self): + """ + freeze(self) -> hou.DopData + + Return a frozen version of this DopData. Frozen versions of the data + will not update when the simulation updates. Instead, they will refer + to the state of the simulation at the time they were frozen. + + It is ok to call this method on a DopData object that is already frozen. + """ + return DopData() + + def isFrozen(self): + """ + isFrozen(self) -> bool + + Return whether or not this data is frozen. + + See hou.DopData.freeze for more information. + """ + return True + + def path(self): + """ + path(self) -> str + + Return the path to this object within the tree of DOP data. This path + includes the DOP object or relationship as the first part of the path. + + Note that the same piece of DOP data can exist in multiple places of the + tree. The path returned is the path stored inside this Python DopData + object, since the Python object uses the path to look up the underlying + data each time you call a method on it. + + Note that the path is only available for unfrozen objects. If you call + this method on a frozen DopData object it raises hou.OperationFailed. + """ + return "" + + def dopNetNode(self): + """ + dopNetNode(self) -> hou.Node + + Return the DOP network node containing this DOP data. + """ + return Node() + + def simulation(self): + """ + simulation(self) -> hou.DopSimulation + + Return the DOP simulation containing this DOP data. This method is a + shortcut for self.dopNetNode().simulation(). + """ + return DopSimulation() + + def creator(self): + """ + creator(self) -> hou.DopNode + + Return the DOP node that created this DOP data inside the DOP network. + """ + return DopNode() + + def id(self): + """ + id(self) -> str + + Return the globally unique identifier (GUID) for this DOP data. This + method is a shortcut for self.record("Basic").field("uniqueid"). + + If you want an object's index, hou.DopObject.objid. + """ + return '' + + def dataType(self): + """ + dataType(self) -> str + + Return a string describing the type of data this object contains. + + >>> obj = hou.node("/obj/AutoDopNetwork").simulation().objects()[0] + >>> obj.dataType() + 'SIM_Object' + + See also hou.DopData.dataTypeObject. + """ + return '' + + def recordTypes(self): + """ + recordTypes(self) -> tuple of str + + Return a tuple of strings containing the record types stored inside this + DOP data. Each DOP data contains records named "Basic" and + "Options", and some types of DOP data contain additional records. + + REPLACES + dopnumrecordtypes function + doprecordtypename function """ + return ('',) + + def record(self, record_type, record_index=0): + """ + record(self, record_type, record_index=0) -> hou.DopRecord + + Given a record type name return that record, or None if no record exists + with that name. If this DOP data contains multiple records with this + record type name you can think of each record as a row in a spreadsheet, + and record_index determines which one is returned. Use + len(self.records(record_type)) to determine how many records of this + type are in this DOP data. + + Use hou.DopData.recordTypes to get a tuple of record types in a DOP + data. See also hou.DopData.records for an example, and see + hou.DopData.options for a way to easily access the "Options" record. + + REPLACES + dopfield function """ + return DopRecord() + + def records(self, record_type): + """ + records(self, record_type) -> tuple of hou.DopRecord + + Return a tuple of all the records of this record type. See also + hou.DopData.record. + + This example lists the input affectors for a rigid body box that + collides with a ground plane: + >>> obj = hou.node("/obj/AutoDopNetwork").simulation().objects()[-1] + >>> obj.records("RelInAffectors") + (, ) + >>> [record.field("relname") for record in obj.records("RelInAffectors")] + ['merge1', 'staticsolver1_staticsolver1'] + >>> obj.record("RelInAffectors", 1).field("relname") + 'staticsolver1_staticsolver1' + + + REPLACES + dopnumrecords function """ + return (DopRecord(),) + + def options(self): + """ + options(self) -> hou.DopRecord + + Return the Options record. This method is a shortcut for + self.record("Options"). + + REPLACES + dopoption function + dopoptions function """ + return DopRecord() + + def subData(self): + """ + subData(self) -> dict of str to hou.DopData + + Return a dictionary mapping names to DOP data instances for the subdata + attached to this data. + + # The following code assumes you have created a box from the shelf and used + # Rigid Bodies > RBD Object on the shelf to make it a rigid body. + >>> obj = hou.node("/obj/AutoDopNetwork").simulation().objects()[0] + >>> obj + + >>> obj.recordTypes() + ('Basic', 'Options', 'RelInGroup', 'RelInAffectors') + >>> record = obj.record("Options") + >>> record.fieldNames() + ('name', 'groups', 'affectors', 'affectorids', 'objid') + >>> record.field("name") + 'box_object1' + + >>> obj.subData().keys() + ['PhysicalParms', 'ODE_Body', 'Solver', 'Geometry', 'SolverParms', 'ODE_Geometry', 'Forces', 'Position', 'Colliders'] + >>> obj.findSubData("Forces/Gravity_gravity1") + + >>> obj.findSubData("Forces/Gravity_gravity1").options().field("force") + + + REPLACES + dopsubdataname function + dopnumsubdata function """ + return {'':DopData()} + + def findSubData(self, data_spec): + """ + findSubData(self, data_spec) -> hou.DopData or None + + Return the DOP data with the given name that is attached to this DOP + data, or None if no such data exists. Note that the name may also be a + slash-separated path to nested subdata. + + See hou.DopData.subData for an example. + + This method can be approximately implemented as follows: + def findSubData(self, data_spec): + data = self + for name in data_spec.split("/"): + if name not in data.subData(): + return None + data = data.subData()[name] + return data + + + REPLACES + dophassubdata function """ + return DopData() + + def findAllSubData(*self, data_spec, recurse=False): + """ + findAllSubData(self, data_spec, recurse=False) -> dict of str to + hou.DopData + + Given a pattern, return a dictionary mapping subdata paths to DOP data + instances for all the subdatas whose name matches the pattern. If + recurse is True, all grandchildren subdata will be added to the result. + + # The following code assumes you have created a box from the shelf and used + # Rigid Bodies > RBD Object on the shelf to make it a rigid body. + >>> obj = hou.node("/obj/AutoDopNetwork").simulation().objects()[0] + >>> obj.findAllSubData("S*").keys() + ['SolverParms', 'Solver'] + >>> obj.findAllSubData("S*", recurse=True).keys() + ['SolverParms', 'Solver/Random', 'SolverParms/ActiveValue', 'Solver'] + >>> obj.findAllSubData("S*/*", recurse=True).keys() + ['SolverParms/ActiveValue', 'Solver/Random'] + """ + return {"":DopData(),} + + def createSubData(self, data_name, data_type="SIM_EmptyData", + avoid_name_collisions=False): + """ + createSubData(self, data_name, data_type="SIM_EmptyData", + avoid_name_collisions=False) -> hou.DopData + + Create subdata under this data with the specified name and type. You + would call this method from a script solver DOP. + + data_name + The name of the new data. Note that this name may contain slashes + to create subdata on existing data. + + data_type + Either the name of the data type to create or a hou.DopDataType + instance. If you simply want something containing an empty options + record, use "SIM_EmptyData". + + avoid_name_collisions + If True and data with the specified name exists, Houdini will create + a unique name that does not conflict with any existing data. + + Raises hou.OperationFailed if data with this name already exists. If + you want to replace existing data it is up to you to first call + hou.DopData.removeData. + + Raises hou.PermissionError if called from outside a script solver DOP. + + Use hou.DopData.attachSubData to create a reference to existing data. + See hou.DopData.copyContentsFrom for an example of how to create a copy + of existing data. + + REPLACES + dopsolveadddata command """ + return DopData() + + def attachSubData(self, data, new_data_name, avoid_name_collisions=False): + """ + attachSubData(self, data, new_data_name, avoid_name_collisions=False) + + Make existing data become subdata of this data. Houdini does not create + a duplicate of the data. Instead, the data's parent(s) and this data + will both refer to the same instance of subdata. You would call this + method from a script solver DOP. + + data + The DopData that will become subdata of this data. + + new_data_name + The name of the new subdata. + + avoid_name_collisions + If True and data with the specified name exists, Houdini will create + a unique name that does not conflict with any existing data. + + Raises hou.OperationFailed if data with this name already exists. If + you want to replace existing data it is up to you to first call + hou.DopData.removeData. + + Raises hou.PermissionError if called from outside a script solver DOP. + + See hou.DopData.copyContentsFrom for an example of how to create a copy + of existing data. + + REPLACES + dopsolvecopydata command """ + + def removeSubData(self, data_spec): + """ + removeSubData(self, data_spec) + + Remove subdata with the given name. Raises hou.PermissionError if + called from outside a script solver DOP. + + Raises hou.OperationFailed if data with that name already exists. + + REPLACES + dopsolveremovedata command """ + + def copyContentsFrom(self, data): + """ + copyContentsFrom(self, data) + + Copy the contents of the given DopData into this one, adapting the data + if it is of a different type. You would call this method from a script + solver DOP. + + Raises hou.PermissionError if called from outside a script solver DOP. + + Use this method along with hou.DopData.createSubData to copy existing + subdata: + def copySubData(new_parent_data, data_to_copy, new_data_name, avoid_name_collisions=False): + '''Create a copy of data and attach it to other data.''' + new_data = new_parent_data.createSubData(new_data_name, data_to_copy.dataType(), avoid_name_collisions) + new_data.copyContentsFrom(data_to_copy) + return new_data + + + REPLACES + dopsolveadddata command """ + + def _asVoidPointer(self): return + +class ShelfElement(object): + """ + hou.ShelfElement + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def filePath(self): + """ + filePath(self) -> str + """ + return '' + + def setFilePath(self, file_path): + """ + setFilePath(self, file_path) + """ + + def name(self): + """ + name(self) -> str + """ + return '' + + def setName(self): + """ + setName(self, name) + """ + + def label(self): + """ + label(self) -> str + """ + return '' + + def setLabel(self, label): + """ + setLabel(self, label) + """ + +class anonstats(object): + + def __init__(self): raise AttributeError, "No constructor defined" + def recordOccurrence(self): return + def recordString(self): return + def hasString(self): return True + def getString(self): return '' + def incrementCount(self): return 0 + def logEvent(self): return + def addSum(self): return + +class AssetBrowser(PathBasedPaneTab): + + def __init__(self): raise AttributeError, "No constructor defined" + def reload(self): return + def installRequiredDefinitionsForNodeTypeName(self): return + def storeUpdateSessionKey(self): return + def updateAssetDownloadFraction(self): return + def storeSyncSessionKey(self): return + +class Attrib(object): + """ + hou.Attrib + + This class stores information about a Geometry attribute. + + An attribute describes extra data you can attach to different elements + of geometry. The attribute values are the individual instances of that + data, and for each attribute there is exactly one attribute value per + geometry element. For example, if you look at the points in Houdini's + geometry spreadsheet, the point numbers are listed down the side, the + point attributes are listed across the top, and the point attribute + values are contained in the table. + + The attribute specifies which elements store the attribute values: + points, primitives, or vertices. An attribute can also be global (also + known as a detail attribute), in which case there is one instance of the + attribute value in the geometry. + + The attribute also specifies the data type of the attribute values. + + To look up existing attributes, use hou.Geometry.findPointAttrib, + hou.Geometry.findPrimAttrib, hou.Geometry.findVertexAttrib, and + hou.Geometry.findGlobalAttrib. To add a new attribute, use + hou.Geometry.addAttrib. + + + Point positions are stored in a point attribute named P and point + weights are stored in Pw. See hou.Point.position and hou.Point.weight + for more information. + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def destroy(self): + """ + destroy(self) + + Remove this attribute from the geometry. You would typically call this + method from the code of a Python-defined SOP. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Raises hou.OperationFailed if you try to destroy the P or Pw point + attributes. + """ + + def geometry(self): + """ + geometry(self) -> hou.Geometry + + Return the Geometry object containing this attribute. + """ + return Geometry() + + def name(self): + """ + name(self) -> str + + Return the attribute's name. Each attribute in the geometry has a + unique name. + """ + return '' + + def dataType(self): + """ + dataType(self) -> hou.attribData enum value + + Return the attribute's data type (int, float or string). + + The size of the attribute also determines the format of the attribute + values. For example, if the data type is int and the size is 3, the + attribute value will be a tuple of 3 ints. If the size was 1, the + attribute value would simply be an int. + + Note that a string attribute's size must be 1. + """ + return attribData() + + def type(self): + """ + type(self) -> hou.attribType enum value + + Return the type of attribute (point, primitive, vertex, or global). + """ + return attribType() + + def qualifier(self): + """ + qualifier(self) -> str + + Return the attribute's type qualifier. The qualifier is a description + of the data contained in the attribute. An empty string is returned if + the attribute has no numeric representation or if the attribute is the + pseudo Pw point attribute. + """ + return '' + + def size(self): + """ + size(self) -> int + + Return the number of data components in the attribute value. See + hou.Attrib.dataType for more information. + + REPLACES + pointattribsize function + primattribsize function + vertexattribsize function """ + return 0 + + def setSize(self): + """ + setSize(self) + Sets the number of data components in the attribute value. See + hou.Attrib.dataType for more information. + """ + + def isTransformedAsVector(self): return + def isTransformedAsNormal(self): + """ + isTransformedAsNormal(self) -> bool + + Return whether attribute values in the geometry are automatically + transformed as a normal when Houdini transforms (e.g. rotates) the + geometry. + + For more information, see the hou.Geometry.addAttrib, in the + transform_as_normal parameter documentation. + """ + return True + + def boostAnyDefaultValue(self): return + def strings(self): + """ + strings(self) -> tuple of str + + Return the string table for this attribute. If the attribute is not a + string, returns an empty tuple. + + A string attribute does not store each string value inside the attribute + element (i.e. point, primitive, etc.). Instead, the unique string + attribute values are stored in a table inside the attribute, and each + attribute value stores an index to that string. + + For example, suppose this attribute stores strings on points. If all + points have the attribute value "foo" then the string table will be + just ("foo",) and each point will store the index 0. When you set + some points' values to "bar", Houdini adds sets the string table to + ("foo", "bar") and sets stores the index 1 in those points. When + you set one of those points back to "foo", Houdini leaves the string + table unchanged and stores the index 0 in that point. + + When using string attribute values, this implementation is hidden from + you, and you get and set those attributes as strings. This method is + provided only in case you need access to the string table. + """ + return ('',) + + def indexPairPropertyTables(self): + """ + indexPairPropertyTables(self) -> tuple of hou.IndexPairPropertyTable + + Return the property tables for this attribute. If the attribute is not + an index pair, returns an empty tuple. + """ + return (IndexPairPropertyTable(),) + + def optionType(self, name): + """ + optionType(self, name) -> hou.fieldType enum value + + Return a hou.fieldType enumerated value that describes the type of data + stored in an option. Returns hou.fieldType.NoSuchField if no field + exists with that name. + """ + return fieldType() + + def setOption(self, name, value, type_hint = fieldType.NoSuchField): + """ + setOption(self, name, value, type_hint = hou.fieldType::NoSuchField) + + Set an entry in the dictionary of options. See hou.Attrib.options for + more information. + + name + The name of the option to set. + + value + An integer, float, string, hou.Vector2, hou.Vector3, hou.Vector4, + hou.Quaternion, hou.Matrix3, hou.matrix4, or sequence of numbers. + + type_hint + Used to determine the exact hou.fieldType desired when the specified + value type is not enough to unambiguously determine it. + """ + + def removeOption(self, name): + """ + removeOption(self, name) + + Remove an entry in the dictionary of options. See hou.Attrib.options + for more information. + + Raises hou.OperationFailed if there is no entry in the dictionary with + this name. + """ + + def defaultValue(self): + """ + defaultValue(self) -> int or float or str or tuple + + Return the attribute's default value. Returns a single int/float/string + for attributes of size 1 and a tuple of values for attributes with more + than one component. + + This method is useful when duplicating an attribute. See + hou.Geometry.addAttrib for an example. + """ + return 0 + + def options(self, name): + """ + option(self, name) -> bool, int, float, str, hou.Vector2, + Hom.hou.Vector3, hou.Vector4, hou.Quaternion, hou.Matrix3, hou.Matrix4, + tuple of int, or tuple of float + + Return the value of an individual option, on None if no such option + exists. + + See also hou.Attrib.options, hou.Attrib.setOption and + hou.Attrib.removeOption. + """ + return 0 + + def option(self): return + +class audio(object): + """ + hou.audio + + Functions related to playing audio using Houdini's playbar. + + REPLACES + * audiopanel + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def turnOffAudio(self): + """ + turnOffAudio() + + Turn off the audio playback. + """ + + def useTimeLineMode(self): + """ + useTimeLineMode() + + Put the Audio Panel into a scrub mode. + + When the Audio Panel is in the scrub (a.k.a. timeline) mode, Houdini + will play the audio during the animation or when scrubbing the thumb in + the playbar. + """ + + def useTimeSliceMode(self): + """ + useTimeSliceMode() + + Put the Audio Panel into realtime (a.k.a. timeslice) mode. + """ + + def useTestMode(self): + """ + useTestMode() + + Put the Audio Panel into a mode that tests the audio playback. + + When the Audio Panel is in the test mode, it will play the entire audio + soundtrack. The test can be stopped and resumed with stop() and play() + functions. + + The sound will not play when scrubbing the thumb in the playbar or when + playing the animation in the playbar. The audio must be in either scrub + or realtime mode for playing the sound during animation or scrubbing. + """ + + def setMono(self,on): + """ + setMono(on) + + Set whether the audio will play in mono or stereo mode. + """ + + def setVolumeTied(self, on): + """ + setVolumeTied(self, on) + + Set whether changing the volume of one channel affects the volume of the + other channel. If so, both channels will have the same volume set. + """ + + def setMeter(self): + """ + setMeter(on) + + Ses whether the meter will show the volume levels during the audio + playback. + """ + + def setLeftVolume(self, value): + """ + setLeftVolume(value) + + Set the volume for the left audio channel. + """ + + def setRightVolume(self,value): + """ + setRightVolume(value) + + Set the volume for the right channel. + """ + + def useChops(self): + """ + useChops() + + Set the Audio Panel to use a CHOP node for the audio. + """ + + def useAudioFile(self, file): + """ + useAudioFile() + + Set the Audio Panel to use a disk file for the audio. + """ + + def setChopPath(self): + """ + setChopPath(path) + + Set the Audio Panel to play the sound inside a CHOP node. Houdini plays + this sound during testing, animation or scrubbing. See also + hou.audio.useChops. + + path + A string containing the path to the CHOP node. + """ + + def setAudioFileName(self,path): + """ + setAudioFileName(path) + + Set the Audio Panel to play the sound inside an audio file. Houdini + plays this sound during testing, animation or scrubbing. See also + hou.audio.useAudioFile. + """ + + def setAudioOffset(self ,offset): + """ + setAudioOffset(offset) + + Set the time offset of the sound to sync the audio. This offset, + specified in seconds, will coincide with the audio frame. See also + hou.audio.setAudioFrame. + """ + + def setAudioFrame(self, frame): + """ + setAudioFrame(frame) + + Set the frame to sync the audio. The audio offset (in seconds) will + coincide with this frame. See also hou.audio.setAudioOffset. + """ + + def setScrubRepeat(self,on): + """ + setScrubRepeat(on) + + Set whether the sound chunk is repeated during scrubbing. See also + hou.audio.useTimeSliceMode. + """ + + def setScrubSustain(self, value): + """ + setScrubSustain(value) + + Set the length of time the that the sound chunk is repeatedly played + when scrubbing comes to a standstill on a particular single frame. In + practice, when the value is zero, no sound will be played when scrubbing + keeps hovering over one frame. But, when the value is non-zero, a small + sound chunk will keep playing repeatedly with a specified frequency. + See also hou.audio.useTimeSliceMode. + """ + + def setScrubRate(self, value): + """ + setScrubRate(value) + + When the sustain period is non-zero, the small chunk of the sound will + be repeated with this frequency when the scrubbing comes to a standstill + at a single frame. See also hou.audio.useTimeSliceMode. + """ + + def reverse(self): + """ + reverse() + + When the Audio Panel is in the test mode, start playing the sound in + reverse. + """ + + def stop(self): + """ + stop() + + When the Audio Panel is in the test mode, stop the test playback if any + audio is currently playing. + """ + + def play(self): + """ + play() + + When the Audio Panel is in the test mode, start playing the Audio + Panel's specified audio file or CHOP. See also + hou.audio.setAudioFileName and hou.audio.setChopPath. + """ + + def setLooping(self): + """ + setLooping(on) + + When the Audio Panel is in the test mode, set whether the test should + start playing from the beginning once the end is reached. See also + hou.audio.setRewind. + """ + + def setRewind(self): + """ + setRewind(on) + + When the Audio Panel is in the test mode, set whether the sound should + rewind to the beginning when the test is stopped. If not, on subsequent + start, the sound will resume from the point at which it was previously + stopped. See also hou.audio.setLooping. + """ + +class BoundingBox(object): + """ + hou.BoundingBox + + An axis-aligned 3D rectangular region. + + For example, a bounding box might describe a piece of geometry's minimum + and maximum values on each of the coordinate axes. See + hou.Geometry.boundingBox for an example of a function that returns a + bounding box. + """ + + def __init__(self, *args): + """ + __init__(self, xmin=0.0, ymin=0.0, zmin=0.0, xmax=0.0, ymax=0.0, + zmax=0.0) + + Construct a new bounding box with the specified minimum and maximum + bounds. Use hou.BoundingBox.setTo to change the position of an existing + bounding box. + """ + def isAlmostEqual(self, bbox, tolerance=0.00001): + """ + isAlmostEqual(self, bbox, tolerance=0.00001) -> bool + + Returns whether this bounding box is equal to another, subject to + numerical tolerances. + """ + return True + + def almostEqual(self, other): return True + def __mul__(self, matrix4): + """ + __mul__(self, matrix4) -> BoundingBox + + Take this bounding box, transform it by the given matrix, compute the + axis-aligned bounding box around this transformed box, and return it. + """ + return BoundingBox() + + def isValid(self): + """ + isValid(self) -> bool + + Returns whether this bounding box is valid. + """ + return True + + def setTo(self,bounds_sequence): + """ + setTo(self, bounds_sequence) + + Given a sequence of (xmin, ymin, zmin, xmax, ymax, zmax) values, set the + position of the bounding box. + + Raises hou.InvalidSize if the tuple does not contain six elements. + """ + + def minvec(self): + """ + minvec(self) -> hou.Vector3 + + Return a vector describing the corner of the box with the smallest x, y, + and z values. + """ + return Vector3() + + def maxvec(self): + """ + maxvec(self) -> hou.Vector3 + + Return a vector describing the corner of the box with the largest x, y, + and z values. + """ + return Vector3() + + def sizevec(self): + """ + sizevec(self) -> hou.Vector3 + + Return a vector describing the size of the box in each of the x, y, and + z axes. + + This method can be implemented as follows: + def sizevec(self): + return self.maxvec() - self.minvec() + """ + return Vector3() + + def center(self): + """ + center(self) -> hou.Vector3 + + Return the position of the center of the bounding box. + + This method can be implemented as follows: + def sizevec(self): + return (self.minvec() + self.maxvec()) * 0.5 + """ + return Vector3() + + def enlargeToContain(self,point_or_bbox): + """ + enlargeToContain(self, point_or_bbox) + + Enlarge the bounding box to contain the given element. The element may + be a sequence of 3 floats (such as a hou.Vector3) describing a position + or another bounding box. If this box does not need to grow because it + already completely contains the element, it won't be modified. + """ + + def contains(self, point): + """ + contains(self, point) + + Given a sequence of 3 floats (such as a hou.Vector3) describing a + position, return whether the position is inside the box. + """ + + def _asVoidPointer(self): return + +class ButtonParmTemplate(ParmTemplate): + """ + hou.ButtonParmTemplate + + Describes a parameter tuple containing a button. + """ + def __init__(self, name, label, disable_when=None, is_hidden=False, + is_label_hidden=False, join_with_next=False, help=None, + script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}): + """ + __init__(self, name, label, disable_when=None, is_hidden=False, + is_label_hidden=False, join_with_next=False, help=None, + script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}) + + Creates a new ButtonParmTemplate instance. + + Construct a new ButtonParmTemplate. + + name + See hou.ParmTemplate.name for more information. + + label + See hou.ParmTemplate.label for more information. + + disable_when + See hou.ParmTemplate.disableWhen for more information. + + is_hidden + See hou.ParmTemplate.isHidden for more information. + + is_label_hidden + See hou.ParmTemplate.isLabelHidden for more information. + + join_with_next + See hou.ParmTemplate.joinsWithNext for more information. + + help + See hou.ParmTemplate.help for more information. + + script_callback + See hou.ParmTemplate.scriptCallback for more information. + + script_callback_language + See hou.ParmTemplate.scriptCallbackLanguage for more information. + + tags + See hou.ParmTemplate.tags for more information. + """ + +class ChannelEditorPane(PaneTab): + """ + hou.ChannelEditorPane + + REPLACES + * chanlist + * animeditor + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def graph(self): + """ + graph(self) -> hou.ChannelGraph + + Return the channel graph for this pane. + """ + return ChannelGraph() + + def channelListSplitFraction(self): + """ + channelListSplitFraction(self) -> double + + Return the width of the embedded channel list as fraction (0-1 value) of + the pane's width. + """ + return 0.0 + + def setChannelListSplitFraction(self, value): + """ + setChannelListSplitFraction(self, value) + + Set the width of the embedded channel list as fraction (0-1 value) of + the pane's width. + """ + + def displayFilter(self): + """ + displayFilter(self) -> string + + Return the filter pattern for which channels are displayed. + """ + return '' + + def setDisplayFilter(self, filter): + """ + setDisplayFilter(self, filter) + + Set the filter pattern for which channels are displayed. The channel + name is used to match against the pattern. + """ + + def editorMode(self): + """ + editorMode(self) -> hou.channelEditorMode enum value + + Return the animation editor mode. + """ + return channelEditorMode() + + def setEditorMode(self, mode): + """ + setEditorMode(self, mode) + + Set the animation editor mode. + """ + + def templateFilter(self): + """ + templateFilter(self) -> string + + Return the filter pattern for which channels are templated. + """ + return '' + + def setTemplateFilter(self, filter): + """ + setTemplateFilter(self, filter) + + Set the filter pattern for which channels are templated. The channel + name is used to match against the pattern. + """ + + def colorsCallback(self): + """ + colorsCallback(self) -> string + + Return the active channel colors callback name. + """ + return '' + + def setColorsCallback(self, callback_name): + """ + setColorsCallback(self, callback_name) -> bool + + Set the active channel colors callback name. If the callback name is + invalid, the active callback will be reset to default. Return True if + the callback was successfully changed. Return False if the callback name + was invalid. + """ + return True + + def unregisterColorsCallback(self, callback_name): + """ + unregisterColorsCallback(self, callback_name) -> bool + + Unregister a callback by name. It also resets the active callback if the + callback to remove was the active one. Return True if the callback was + successfully removed. Return False if the callback name was invalid. + """ + return True + + def colorsCallbacks(self): + """ + colorsCallbacks(self) -> tuple of string + + Return the list of registered channel colors callback. + """ + return ('',) + + def registerColorsCallback(self, callback_name, callback_object ): + """ + registerColorsCallback(self, callback_name, callback_object ) -> bool + + Registers a callback to generate custom channel colors based on the node + and parameter names. + + callback_name + A name for the custom color scheme. You can use this to remove the + callback with the unregisterColorsCallback method. + + callback_object + A Python object with a getChannelColor method. For example: + + + class MyChannelColors(object): + def getChannelColor(self, node_path, channel_name): + return 0, 0, 0 + + The node argument is the path to the node (for example, /obj/table). + The parm argument is the internal name of the channel (for example, + tx). The method must return a 3-tuple representing normalized (0-1, + not 0-255) red, green, and blue values. If the method returns (0, 0, + 0) Houdini uses the default channel color. + + You should register the callback in a session-independent startup + script. When you register the callback, Houdini will call it once with + empty string arguments to make sure it returns a triple. Your + getChannelColor() method needs to handle this case. + + The following example object uses the custom color tint of a node to + color its channels: + + + import hou + + class NodeColors: + ''' + Use hue variants of a node's color for parameter names + ending in x, y or z. + ''' + + def getChannelColor(self, node_path, channel_name): + # Handle the empty string case + if not node_path: + return 0, 0, 0 + + # Get a Node object from the path + n = hou.node(node_path) + # Get the node's color as a hou.Color object + color = n.color() + # Get the color's HSV values as a triple + hue, sat, val = n.color().hsv() + + # If the color is gray, use the default + if not sat: + return 0, 0, 0 + + # Hue-shift the node color for X, Y, and Z channels: + if channel_name.endswith("x"): + color.setHSV(hue - 50, sat * 2, val * 1.2) + elif channel_name.endswith("y"): + color.setHSV(hue, sat * 2, val * 1.2) + elif channel_name.endswith("z"): + color.setHSV(hue + 50, sat * 2, val * 1.2) + + # Return the color as normalized (r, g, b) + return color.rgb() + """ + return True + +class ChannelGraph(object): + """ + hou.ChannelGraph + + REPLACES + * animeditor + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def selectedKeyframes(self): + """ + selectedKeyframes(self) -> dictionary of (hou.Parm, tuple of + hou.BaseKeyframe) pairs + + Returns a dictionary of (hou.Parm, keyframes) which are currently + selected in the playbar. Here is an example of how to scale the + selected key values by 2: + keyframes = hou.playbar.selectedKeyframes() + for parm in keyframes.keys(): + for key in keyframes[parm]: + key.setValue(2 * key.value()) + parm.setKeyframe(key) + """ + return {Parm():BaseKeyframe()} + +class ChopNode(Node): + """ + hou.ChopNode + + Class representing a CHOP node. + + REPLACES + * chopls + * opget + * opsave + * opset + * chop + * chope + * chopn + * chopr + * chops + * ic + * ice + * icl + * icmax + * icmin + * icn + * icr + * ics + * oc + * opflag + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def isBypassed(self): + """ + isBypassed(self) -> bool + + Returns whether the node's bypass flag is on. + """ + return True + + def bypass(self, on): + """ + bypass(self, on) + + Turn the node's bypass flag on or off, making this node have no effect. + """ + + def isLocked(self): + """ + isLocked(self) -> bool + + Returns whether this node's lock flag is on. + """ + return True + + def setLocked(self, on): + """ + setLocked(self, on) + + Turn this node's lock flag on or off. Locking a node saves its current + cooked channel data into the node. If you unlock a locked node, it will + discard its locked channel data and recook, computing its channel data + from its inputs and parameters. + + REPLACES """ + + def isDisplayFlagSet(self): + """ + isDisplayFlagSet(self) -> bool + + Returns whether the node's display flag is on. + """ + return True + + def setDisplayFlag(self, on): + """ + setDisplayFlag(self, on) + + Turns the node's display flag to on or off. + """ + + def isAudioFlagSet(self): + """ + isAudioFlagSet(self) -> bool + + Returns whether the node's audio flag is on. + """ + return True + + def setAudioFlag(self, on): + """ + setAudioFlag(self, on) + + Turns the node's audio flag on or off. + """ + + def isExportFlagSet(self): + """ + isExportFlagSet(self) -> bool + + Returns whether the node's export flag is on. + """ + return True + + def setExportFlag(self, on): + """ + setExportFlag(self, on) + + Turns the node's export flag to on or off. + """ + + def isUnloadFlagSet(self): + """ + isUnloadFlagSet(self) -> bool + + Returns whether the node's unload flag is on. + """ + return True + + def setUnloadFlag(self, on): + """ + setUnloadFlag(self, on) + + Turns the node's unload flag to on or off. + """ + + def tracks(self): + """ + tracks(self) -> tuple of Tracks + + Returns a tuple of all the tracks in this node. + """ + return (Tracks(),) + + def track(self, track_name): + """ + track(self, track_name) -> hou.Track or None + + Return the track of the given name, or None if it doesn't exist. + """ + return Track() + + def sampleRate(self): + """ + sampleRate(self) -> double + + Returns the sample rate used by this node in number of samples per + second. + """ + return 0.0 + + def sampleRange(self): + """ + sampleRange(self) -> (start, end) + + Return a 2-tuple containing the start and end values of the sample + range. The number of samples for each track in this node is start-end+1. + Note that samples start from 0, not 1. + """ + return (0,0) + + def frameToSamples(self, frame): + """ + frameToSamples(self, frame) -> double + + Converts a value expressed as frames to a value expressed in samples. + """ + return 0 + + def samplesToFrame(self, samples): + """ + samplesToFrame(self, samples) -> double + + Converts a value expressed as samples to a value expressed in frames. + """ + return 0.0 + + def timeToSamples(self, time): + """ + timeToSamples(self, time) -> double + + Converts a value expressed in seconds to a value expressed in samples. + """ + return 0.0 + + def samplesToTime(self, samples): + """ + samplesToTime(self, samples) -> double + + Converts a value expressed as samples to a value expressed in seconds. + """ + return 0.0 + +class Color(object): + """ + hou.Color + + REPLACES + * rgb + """ + + def __init__(self, *args): + """ + __init__(self, rgb_tuple=(0.0, 0.0, 0.0)) -> Color + """ + def rgb(self): + """ + rgb(self) -> (float, float, float) + """ + return (0.0,0.0,0.0) + + def hsv(self): + """ + hsv(self) -> (float, float, float) + """ + return (0.0,0.0,0.0) + + def hsl(self): + """ + hsl(self) -> (float, float, float) + """ + return (0.0,0.0,0.0) + + def xyz(self): + """ + xyz(self) -> (float, float, float) + """ + return (0.0,0.0,0.0) + + def lab(self): + """ + lab(self) -> (float, float, float) + """ + return (0.0,0.0,0.0) + + def tmi(self): pass + def setRGB(self, values): + """ + setRGB(self, tuple) + """ + + def setHSV(self, values): + """ + setHSV(self, tuple) + """ + + def setHSL(self, values): + """ + setHSL(self, tuple) + """ + + def setXYZ(self, values): + """ + setXYZ(self, tuple) + """ + + def setLAB(self, values): + """ + setLAB(self, tuple) + """ + + def setTMI(self): return + def _asVoidPointer(self): return + +class CompositorViewer(PathBasedPaneTab): + """ + hou.CompositorViewer + """ + def __init__(self): raise AttributeError, "No constructor defined" + def currentState(self): + """ + currentState(self) -> str + """ + return '' + + def enterViewState(self, wait_for_exit=False): + """ + enterViewState(self, wait_for_exit=False) + """ + + def setCurrentState(self, state, wait_for_exit=False): + """ + setCurrentState(self, state, wait_for_exit=False) + """ + +class ConstructionPlane(object): + """ + hou.ConstructionPlane + + The grid (a.k.a. construction plane) in the scene viewer pane tab. + + REPLACES + * cplane + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def sceneViewer(self): + """ + sceneViewer(self) -> hou.SceneViewer + + Return the scene viewer containing this plane. + """ + return SceneViewer() + + def isVisible(self): + """ + isVisible(self) -> bool + + Return whether the grid is visible in the viewer. + """ + return True + + def setIsVisible(self, on): + """ + setIsVisible(self, on) + + Make this grid visible or invisible in the viewer. + """ + + def transform(self): + """ + transform(self) -> hou.Matrix4 + + Return the transformation matrix for this plane. + + When the transformation matrix is the identity matrix, the plane's + bottom-left corner is at the origin and it sits in the XY plane. In + this orientation, increasing the number of cells in x or the size of a + cell in x grows the plane outward from the origin along the x-axis. + Similarly, increasing the number of cells or size of a cell in y grows + the plane along the y-axis. + + Note that the transformation matrix does not contain any scale + information. Use the cellSize and numberOfCells methods to get the size + of the plane. + + The following function will return the position of the lower-left corner + of the plane: + def origin(construction_plane): + return hou.Vector3(0, 0, 0) * construction_plane.transform() + + + The following function will return the normal of the plane: + def normal(construction_plane): + return hou.Vector3(0, 0, 1) * construction_plane.transform().inverted().transposed() + """ + return Matrix4() + + def setTransform(self, matrix): + """ + setTransform(self, matrix) + + Set the transformation matrix for this plane to a hou.Matrix4. + + This matrix is used to translate and rotate the plane. See the + transform method for more information. + + Note that scale information inside the transformation matrix is ignored. + Use the setCellSize and setNumberOfCells methods to adjust the size of + the plane. + + The following function will change the position of the lower-left corner + of the plane: + def set_origin(construction_plane, new_origin): + translation = hou.hmath.buildTranslate(hou.Vector3(new_origin) - origin(construction_plane)) + construction_plane.setTransform(construction_plane.transform() * translation) + + def origin(construction_plane): + return hou.Vector3(0, 0, 0) * construction_plane.transform() + + + The following function will change the normal of the plane: + def set_normal(construction_plane, normal_vector): + existing_rotation = hou.Matrix4(construction_plane.transform().extractRotationMatrix3()) + rotation = existing_rotation * normal(construction_plane).matrixToRotateTo(normal_vector) + translation = hou.hmath.buildTranslate(origin(construction_plane)) + construction_plane.setTransform(rotation * translation) + + def normal(construction_plane): + return hou.Vector3(0, 0, 1) * construction_plane.transform().inverted().transposed() + + def origin(construction_plane): + return hou.Vector3(0, 0, 0) * construction_plane.transform() + """ + + def cellSize(self): + """ + cellSize(self) -> tuple of float + + Return the x and y sizes (width and height) of one cell in the grid of + cells. The return value is a tuple of two floats. + """ + return (0.0,) + + def setCellSize(self, size): + """ + setCellSize(self, size) + + Change the x and y sizes (width and height) of each cell in the grid of + cells. size is a sequence of two floats. + + Changing the size of each cell will change the total size of the grid. + """ + + def numberOfCells(self): + """ + numberOfCells(self) -> tuple of int + + Return the number of cells in the x and y directions of the grid. In + other words, return the number of columns and rows. + """ + return (0,) + + def setNumberOfCells(self, num): return + def numberOfCellsPerRulerLine(self): + """ + numberOfCellsPerRulerLine(self) -> tuple of int + + Return the number of cells in the x and y directions between ruler + lines. Ruler lines are darker than the normal lines drawn between grid + cells. + """ + return (0,) + + def setNumberOfCellsPerRulerLine(self, num): return + +class ContextViewer(PathBasedPaneTab): + """ + hou.ContextViewer + + A class representing a context viewer pane tab. + """ + def __init__(self): raise AttributeError, "No constructor defined" + def sceneViewer(self): + """ + sceneViewer(self) -> hou.SceneViewer + + Returns a SceneViewer if the ContextViewer is displaying a scene viewer. + If not, returns None. + """ + return SceneViewer() + + def compositorViewer(self): + """ + compositorViewer(self) -> hou.CompositorViewer + + Returns a CompositorViewer if the ContextViewer is displaying a + compositor viewer. If not, returns None. + """ + return CompositorViewer() + +class CopNode(Node): + """ + hou.CopNode + + Represents a compositing node. + + REPLACES + * pic + * picni + * opflag + * opget + * opsave + * opset + * res + * seqanim + * seqend + * seqlength + * seqstart + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def isBypassed(self): + """ + isBypassed(self) -> bool + + Returns True if the node's bypass flag is turned on. Returns False + otherwise. + + REPLACES + opflag function + opget command """ + return True + + def bypass(self, on): + """ + bypass(self, on) + + Turns the node's bypass flag on or off. When the bypass flag is on, the + node will have no effect on the scene. The value of the on argument + must be True or False. + + Raises hou.PermissionError if the node is unwritable. + + REPLACES + opset command """ + + def isDisplayFlagSet(self): + """ + isDisplayFlagSet(self) -> bool + + Returns True if the node's display flag is turned on. Returns False + otherwise. + + REPLACES + opflag function + opget command """ + return True + + def setDisplayFlag(self, on): + """ + setDisplayFlag(self, on) + + Turns the node's display flag on or off. When the display flag is on, + the node's image will appear in the image viewport. The value of the on + argument must be True or False. + + Raises hou.PermissionError if the node is unwritable. + + REPLACES + opset command """ + + def isRenderFlagSet(self): + """ + isRenderFlagSet(self) -> bool + + Returns True if the node's render flag is turned on. Returns False + otherwise. + + REPLACES + opflag function + opget command """ + return True + + def setRenderFlag(self, on): + """ + setRenderFlag(self, on) + + Turns the node's render flag on or off. The render flag controls which + node in a compositing network will be rendered to mplay or to disk. + The value of the on argument must be True or False. + + Raises hou.PermissionError if the node is unwritable. + + REPLACES + opset command """ + def planes(self): + """ + planes(self) -> tuple of strings + + Returns a tuple of plane names in the node's image sequence. + + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + """ + return ('',) + + def components(self, plane): + """ + components(self, plane) -> tuple of str + + Returns a tuple of component names for the specified plane in the node's + image sequence. The value of the plane argument must be a plane name. + + Raises ValueError if plane is None or empty. Raises hou.OperationFailed + if the node could not be cooked or opened for processing. Raises + hou.OperationFailed if the given plane does not exist. + """ + return ('',) + + def depth(self, plane): + """ + depth(self, plane) -> hou.imageDepth enum value + + Return the data format used to represent one component of one pixel in + the given image plane. + + For example, if the depth of the "C" (color) plane is + hou.imageDepth.Int8, each of the red, green, and blue components is + stored as an (unsigned) 8-bit integer, occupying one byte. If, for + example, it is instead hou.imageDepth.Float32, each of the red, green, + and blue components is a 32-bit float and occupies 4 bytes (12 bytes + total for all 3 components combined). + """ + return imageDepth() + + def getPixelByUV(self, plane, u, v, component=None, interpolate=True): + """ + getPixelByUV(self, plane, u, v, component=None, interpolate=True) -> + tuple of float + + Returns plane values for a single pixel in the node's image. The plane + is defined by the plane argument which must be set to the plane's name. + The pixel is defined by (u, v) coordinates where u and v are values + between 0.0 and 1.0. If the optional component argument is specified, + then the value for that particular component is returned. Otherwise, + all of the plane's component values are returned. The value of + component should be the component's name (i.e. "r", "g", "b", + etc.). + + If the (u, v) coordinates do not fall exactly on a pixel, then the + return values are calculated by linear blending of the values for the + surrounding pixels. This can be disabled by setting the interpolate + argument to False, in which case the values of the pixel located + immediately to the bottom-left of (u, v) are returned. + + Note that the returned values are for the node's image at the current + frame. + + Raises ValueError if either u or v is outside of the 0.0-1.0 range. + Raises ValueError if plane is None or empty. Raises hou.OperationFailed + if the node could not be cooked or opened for processing. Raises + hou.OperationFailed if the given plane does not exist. Raises + hou.OperationFailed if the given component does not exist in the plane. + + REPLACES + pic function + picni function """ + return (0.0,) + + def getPixelHSVByUV(self, u, v, interpolate=True): + """ + getPixelHSVByUV(self, u, v, interpolate=True) -> tuple of float + + Returns a 3-tuple containing the hue, saturation and value for a single + pixel in the node's image. The pixel is defined by (u, v) coordinates + where u and v are values between 0.0 and 1.0. + + If the (u, v) coordinates do not fall exactly on a pixel, then the + return values are calculated by linear blending of the values for the + surrounding pixels. This can be disabled by setting the interpolate + argument to False, in which case the values of the pixel located + immediately to the bottom-left of (u, v) are returned. + + Note that the returned hue, saturation and value are for the node's + image at the current frame. + + Raises ValueError if either u or v is outside of the 0.0-1.0 range. + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + + REPLACES + pic function + picni function """ + return (0.0,) + + def getPixelLuminanceByUV(self, u, v, interpolate=True): + """ + getPixelLuminanceByUV(self, u, v, interpolate=True) -> float + + Returns the luminance value for a single pixel in the node's image. The + pixel is defined by (u, v) coordinates where u and v are values between + 0.0 and 1.0. + + If the (u, v) coordinates do not fall exactly on a pixel, then the + luminance is calculated by linear blending of the luminance values for + the surrounding pixels. This can be disabled by setting the interpolate + argument to False, in which case the luminance of the pixel located + immediately to the bottom-left of (u, v) is returned. + + Note that the returned luminance value is for the node's image at the + current frame. + + Raises ValueError if either u or v is outside of the 0.0-1.0 range. + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + + REPLACES + pic function + picni function """ + return 0.0 + + def allPixels(self, plane="C", component=None, interleaved=True, + time=-1.0): + """ + allPixels(self, plane="C", component=None, interleaved=True, + time=-1.0) -> tuple of float + + Return a tuple of floats containing all pixel values for a particular + image plane. The pixels in the bottom scanline of the image are first + in the result, followed by the second-last scanline, etc. Floating + point values in the color plane ("C"), for example, are typically in + the range 0.0 to 1.0. + + plane + The name of the image plane to return. All images have "C" + (color) and "A" (alpha) planes. Deep raster images may contain + other planes, such as "Pz" (depth), "N" (normal), etc. + + component + A particular subcomponent of the plane. For example, for the "C" + plane you could specify one of the "r", "g", or "b" + subcomponents. Specify None to indicate all components. + + interleaved + Whether the different components of the plane are interleaved in the + result. For example, if the plane is "C", the interleaved result + would be organized as rgbrgbrgb... while the uninterleaved result + would be rrr...ggg...bbb.... This parameter has no effect when a + particular component is specified. + + time + The time at which to cook the COP node. If this value is negative, + Houdini uses the current time. + + This method does not accept a depth parameter like allPixelsAsString + does. The values are converted to floating point data, regardless of + the actual depth of the image plane. + """ + return (0.0,) + + def allPixelsAsString(self, plane="C", component=None, interleaved=True, + time=-1.0, depth=None): + """ + allPixelsAsString(self, plane="C", component=None, interleaved=True, + time=-1.0, depth=None) -> str + + Return a binary string representation of the floats containing all the + values of all voxels. This method is faster than hou.CopNode.allPixels, + and you can use the array module to convert the string into a Python + sequence. Note that this method returns binary float data, so there are + 4 bytes per R, G, and B component, not 1 byte. + + If depth is hou.imageDepth.Float32, this method provides a faster + implementation of the following: + import array + def allPixelsAsString(self): + return array.array("f", self.allPixels()).tostring() + + + If depth is None and this method is called from the code implementing a + Python COP to get an input plane, the depth will be the same as the + plane's native depth. If depth is None and this method is called from + outside a Python COP, the depth will be hou.imageDepth.Float32. + Otherwise, if depth is a hou.imageDepth enumerated value the result will + be converted to the specified depth. + + See hou.CopNode.allPixels for more information. See also + hou.Volume.setVoxelSliceFromString. + """ + return '' + + def setPixelsOfCookingPlane(self, values, component=None, interleaved=True, + flip_vertically=False): + """ + setPixelsOfCookingPlane(self, values, component=None, interleaved=True, + flip_vertically=False) + + Set the pixels of the plane being cooked by the currently-running Python + COP. + + values + A sequence of floats, organized with the contents of the bottom + scanline first. + + If component is None, the length of the sequence of floats must be + the number of pixels in the image times the number of components. + Otherwise, it must be the number of pixels in the image. + + component + Either the name of one component in the plane being cooked, or None. + If a component name is given, values will contain only the values + for that component. Otherwise, it will contain the values for all + components of all pixels in the plane. + + interleaved + If component is None and interleaved is True, values is contains the + first component of the first pixel, followed by the second component + of the first pixel, until the last component of the first pixel, + then the first component of the second pixel, etc. If it is False, + values contains all the values of the first component for all + pixels, followed by all the values of the second component, etc. + + For example, if the plane is "C" and interleaved is True, the + values will be organized as rgbrgbrgb.... If it is not interleaved, + it will be organized as rrr...ggg...bbb.... + + If component is not None, this parameter is ignored. + + flip_vertically + The default value for this parameter is False, so the first scanline + in the values array is assumed to be the bottom scanline. If + flip_vertically is True, the input values are assumed to oriented + starting at the top scanline. + + If you call this method from outside the cook function in a Python COP, + raises hou.OperationFailed. + + See also hou.CopNode.allPixels and + hou.CopNode.setPixelsOfCookingPlaneFromString. Also see the HOM + cookbook and the Python COP documentation for examples. + """ + + def imageBounds(self, plane="C"): + """ + imageBounds(self, plane="C") -> tuple of int + + Returns the x and y boundaries of the given plane in the form of (xmin, + ymin, xmax, ymax). The value of the plane argument is the plane name. + By default, the image bounds of the color plane is returned. + + Note that the image bounds is not the same as the image resolution. For + example, the image bounds for a Font COP is the bounding rectangle + around the displayed letters while the resolution is the size of the + node's image. + + Note that the returned image bounds is for the current frame. + + Raises ValueError if plane is None or empty. Raises hou.OperationFailed + if the node could not be cooked or opened for processing. Raises + hou.OperationFailed if the given plane does not exist. + + REPLACES + Expression functions """ + return (0,) + + def xRes(self): + """ + xRes(self) + Returns the x-resolution of the node's image for the current frame. + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + REPLACES """ + + def yRes(self): + """ + yRes(self) + + Returns the y-resolution of the node's image for the current frame. + + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + + REPLACES """ + + def sequenceStartFrame(self): + """ + sequenceStartFrame(self) -> float + + Returns the start frame in the node's image sequence. + + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + + REPLACES + seqstart function """ + return 0.0 + + def sequenceEndFrame(self): + """ + sequenceEndFrame(self) -> float + + Returns the last frame in the node's image sequence. + + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + + REPLACES + seqend function """ + return 0.0 + + def sequenceFrameLength(self): + """ + sequenceFrameLength(self) -> float + + Returns the frame length of the node's image sequence. + + Raises hou.OperationFailed if the node could not be cooked or opened for + processing. + + REPLACES + seqlength function """ + return 0.0 + + def isSingleImage(self): + """ + isSingleImage(self) -> bool + + Returns True if the node has a single image. Returns False if the node + has an image sequence. + + REPLACES + seqanim function """ + return True + + def saveImage(self, file_name, frame_range=()): + """ + saveImage(self, file_name, frame_range=()) + + Saves the node's cooked image sequence to disk. For multiple images, + make sure that the file_name argument contains $F so that the sequence + is written to multiple files. + + The optional frame_range argument can be specified to write only a + subset of frames in the image sequence. frame_range must be a 2-tuple + or a 3-tuple, where the first element is the start frame, the second + element is the end frame and the third element is the frame increment. + If frame_range is not given, then every frame in the image sequence is + saved to disk. + + Raises ValueError if the frame increment in frame_range is 0. Raises + hou.InvalidSize if the size of frame_range is not 0, 2 or 3. Raises + hou.OperationFailed if the node could not be cooked or opened for + processing. Raises hou.OperationFailed if the image could not be saved + to disk. + + REPLACES + opsave command """ + + def setPixelsOfCookingPlaneFromString(self, values, component=None, + interleaved=True, depth=None, flip_vertically=False): + """ + setPixelsOfCookingPlaneFromString(self, values, component=None, + interleaved=True, depth=None, flip_vertically=False) + + Set the pixels of the plane being cooked by the currently-running Python + COP. This method is like hou.CopNode.setPixelsOfCookingPlane except + values contains a binary string representation of the data instead of a + sequence of floats. Consequently, this method is faster. + + The depth parameter specifies how to interpret the values in the binary + string, and is a hou.imageDepth enumerated value. If depth is None, the + depth is assumed to be in the depth of the plane being cooked. Note + that, by specifying depth explicitly, you can provide data in any depth, + regardless of the actual depth stored by the COP. + + Note that this method can accept more types that just a string: it can + receive any Python object that supports the buffer interface. In + particular, arrays from the array and numpy Python modules are + supported, so there is no need to first construct strings from those + arrays. + + See hou.CopNode.setPixelsOfCookingPlane and + hou.CopNode.allPixelsAsString for more information. + """ + +class Desktop(object): + """ + hou.Desktop + + Class representing a Houdini desktop (a pane layout). + + A desktop contains one or more panes. Each pane contains one or more + pane tabs of various types (scene viewer, parameters, network editor, + etc.) The main desktop window can be split horizontally or vertically + into two panes, and each pane can itself be split horizontally or + vertically. + + Note that a floating panel also contains one or more panes and a + floating panel may optionally be attached to a desktop. + + The methods in this class that return pane tabs, panes, and floating + panels only return those objects that are attached to (i.e. saved with) + the desktop. To access all the visible pane tabs, panes, and floating + panels, including those not attached to any desktop, use the functions + in hou.ui. + + See also hou.ui.curDesktop, hou.ui.desktops, hou.Pane, hou.PaneTab, and + hou.FloatingPanel. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def panes(self): + """ + panes(self) -> tuple of hou.Pane + + Return the panes inside this desktop. Note that the result includes + panes in floating panels as long as they are attached to the desktop. + + The following function will return all visible panes, regardless of + whether or not they are attached to a desktop: + def allPanes(): + '''Return a tuple of all visible panes, regardless of whether or not + they are attached to a desktop.''' + # Loop through all the pane tabs and add each tab's pane to the result + # if it's not already there. Note that the only way to uniquely + # identify a pane is using its id. + ids_to_panes = {} + for pane_tab in hou.ui.paneTabs(): + pane = pane_tab.pane() + if pane.id() not in ids_to_panes: + ids_to_panes[pane.id()] = pane + return ids_to_panes.values() + + + REPLACES + pane command """ + return (Pane(),) + + def paneTabs(self): + """ + paneTabs(self) -> tuple of hou.PaneTab + + Return the pane tabs that are contained in this desktop or are in + floating panels attached to this desktop. + + This method does not return floating pane tabs that are not attached to + this desktop. Use hou.ui.paneTabs to get all the visible pane tabs, + regardless of whether they are attached to this desktop. + + REPLACES + pane command """ + return (PaneTab(),) + + def floatingPaneTabs(self): + """ + floatingPaneTabs(self) -> tuple of hou.PaneTab + + Return all the pane tabs in floating panels that are attached to this + desktop. + """ + return (PaneTab(),) + + def paneTabOfType(self, type, index=0): + """ + paneTabOfType(self, type, index=0) -> hou.PaneTab or None + + Find and return the pane tab with the desired type. If no such tab + exists, return None. Like hou.Desktop.paneTabs, this method searches + pane tabs in the desktop or in floating panels attached to the desktop. + + Use hou.ui.paneTabOfType to search all the visible pane tabs, regardless + of whether they are attached to this desktop. + + type + A hou.paneTabType enumerated variable. + + index + If there are multiple tabs with the desired type, this parameter + determines which one is returned. Use index=0 to return the first + found tab, index=1 to return the second found tab, etc. By default, + index is 0. + + This method can be approximately implemented as follows: + def paneTabOfType(self, tab_type, index=0): + pane_tabs = [t for t in self.paneTabs() if t.type() == tab_type] + + if max(index, 0) > len(pane_tabs): + return None + return pane_tabs[max(index, 0)] + """ + return PaneTab() + + def findPaneTab(self, name): + """ + findPaneTab(self, name) -> hou.PaneTab or None + + Return the pane tab with the given name, or None if no such tab exists. + Like hou.Desktop.paneTabs, this method searches pane tabs in the desktop + or in floating panels attached to the desktop. + + The name may optionally be prefixed by the desktop name and a period. + + Use hou.ui.findPaneTab to search all the visible pane tabs, regardless + of whether they are attached to this desktop. + """ + return PaneTab() + + def createFloatingPaneTab(self, pane_tab_type, position=(), size=()): + """ + createFloatingPaneTab(self, pane_tab_type, position=(), size=()) -> + hou.PaneTab + + Create and return a new floating window containing a single pane tab. + Note that this method creates a floating panel with a single pane tab, + and the graphical interface to add more tabs or split the pane inside + the panel is not exposed. + + pane_tab_type + A hou.paneTabType enumerated variable. + + position + A tuple of two floats specifying the X and Y positions of the new + window, respectively. The window will open near this position, not + necessarily exactly at this position. If this value is an empty + tuple, Houdini will choose a default location. + + size + A tuple of two floats specifying the width and height of the new + window, respectively. If this value is an empty tuple, Houdini will + choose a default size. + + Also note that the floating panel containing the new pane tab does not + contain any panes: calling hou.PaneTab.pane on the pane tab returns + None, and calling hou.FloatingPanel.panes on its floating panel returns + an empty tuple. See hou.FloatingPanel for more information on these + stripped down floating panels. + + See also hou.Desktop.createFloatingPanel. + + The following example function takes a hou.Node and opens a floating + parameter pane pinned to that node. + def openParmPane(node): + '''Open a floating parameter pane for a particular node.''' + pane_tab = hou.ui.curDesktop().createFloatingPaneTab(hou.paneTabType.Parm) + pane_tab.setCurrentNode(node) + pane_tab.setPin(True) + return pane_tab + + + REPLACES + pane command """ + return PaneTab() + + def createFloatingPane(self): return + def floatingPanels(self): + """ + floatingPanels(self) -> tuple of hou.FloatingPanel + + Return all the floating panels attached to this desktop. + + Use hou.ui.floatingPanels to get all the visible floating panels, + including those not attached to this desktop. + + See also hou.Desktop.floatingPaneTabs. + """ + return FloatingPanel() + + def createFloatingPanel(self, pane_tab_type, position=(), size=()): + """ + createFloatingPanel(self, pane_tab_type, position=(), size=()) -> + hou.FloatingPanel + + Create a floating panel and return it. The returned floating panel + contains one pane which contains one pane tab of the desired type. + + See hou.Desktop.createFloatingPaneTab for a description of the + parameters. This method differs from createFloatingPaneTab in two ways: + First, it returns the floating panel instead of the pane tab. Second, + the floating panel that is created from this method is not locked down, + and the user can add more pane tabs and split the panes. + + The following example creates a floating panel with a parameters pane + tab and a channel viewer (motion viewer) pane tab: + panel = hou.ui.curDesktop().createFloatingPanel(hou.paneTabType.Parm) + pane1 = panel.panes()[0] + pane2 = pane1.splitVertically() + pane2.tabs()[0].setType(hou.paneTabType.ChannelViewer) + """ + return FloatingPanel() + + def name(self): + """ + name(self) -> str + + Return the desktop's name. + + Each desktop has a unique name. The desktop's name cannot be changed + through either the scripting interface or through Houdini. + + REPLACES + desk command """ + return '' + + def shelfDock(self): + """ + shelfDock(self) -> hou.ShelfDock + + Return the shelf dock for the current desktop. + """ + return ShelfDock() + + def displaySideHelp(self, show=True): + """ + displaySideHelp(self, show=True) -> hou.PaneTab + + Show or hide the side help pane. + + If show is set to True (default) this method displays the help pane and + returns a help browser pane tab. If set to False then this method hides + the help browser pane at the side of the desktop and returns None. + """ + return PaneTab() + + def setAsCurrent(self): + """ + setAsCurrent(self) + + Make this desktop the currently selected one. See also hou.ui.desktops. + + This example changes to the animate desktop: + desktops_dict = dict((d.name(), d) for d in hou.ui.desktops()) + desktops_dict['Animate'].setAsCurrent() + + REPLACES + desk command """ + +class Dialog(object): + """ + hou.Dialog + + Class representing a Houdini dialog. + + This class represents only dialogs created by hou..ui.createDialog. + + Custom dialogs can be created with Houdini's User Interface Script + Language. An overview of the language can be found in the Houdini + Development Kit (HDK) documentation, specifically in the "Houdini User + Interface -> The .ui Script Language" section. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def destroy(self): + """ + destroy(self) + + Delete this dialog. + + If you call methods on a Dialog instance after it has been destroyed, + Houdini will raise hou.ObjectWasDeleted. + """ + + def setValue(self, name, value): + """ + setValue(self, name, value) + + Set the value of the specified UI variable. + + Raises hou.TypeError if either name or value is None. Raises + hou.OperationFailed if no UI variable with the specified name exists. + """ + + def enableValue(self, name, onoff): + """ + enableValue(self, name, onoff) + + Enable or disable the specified UI variable. + + Set onoff to True to enable the variable. Set onoff to False to disable + the variable. + + Raises hou.TypeError if either name is None. Raises hou.OperationFailed + if no UI variable with the specified name exists. + """ + + def waitForValueToChangeTo(self, name, new_value): + """ + waitForValueToChangeTo(self, name, new_value) + + Wait for the specified UI variable to change its value to new_value. + + This is a blocking call. The method will return execution when the + variable has changed to the desired value. Note that Houdini will + remain responsive even when this method is blocked waiting. + + If the variable's current value is already set to new_value then this + method will return immediately. + + Raises hou.TypeError if name is None. Raises hou.OperationFailed if no + UI variable with the specified name exists. + """ + + def menuItems(self, name): + """ + menuItems(self, name) -> tuple of str + + Return the menu entries for the specified UI variable. + + Raises hou.TypeError if name is None. Raises hou.OperationFailed if no + UI variable with the specified name exists. Raises hou.OperationFailed + if the UI variable does not point to a menu. + """ + return ('',) + + def setMenuItems(self, name, items): + """ + setMenuItems(self, name, items) + + Set the menu entries in the specified UI variable. + + Raises hou.TypeError if name is None. Raises hou.OperationFailed if no + UI variable with the specified name exists. Raises hou.OperationFailed + if the UI variable does not point to a menu. + """ + + def value(self, name): + """ + value(self, name) + + Return the value of the given UI variable. + + Raises hou.TypeError if name is None. Raises hou.OperationFailed if no + UI variable with the specified name exists. + """ + + def addCallback(self, name, callback): + """ + addCallback(self, name, callback) + + Register a callback function for the specified UI variable. + + The function is invoked when the value of the UI variable changes and + receives no arguments. + + Raises hou.TypeError if name is None. Raises hou.OperationFailed if no + UI variable with the specified name exists. + """ + + def removeCallback(self, name, callback): + """ + removeCallback(self, name, callback) + + Remove the specified callback function from the UI variable. + + Raises hou.TypeError if name is None. Raises hou.OperationFailed if no + UI variable with the specified name exists. Raises hou.OperationFailed + if the specified callback is not registered with the UI variable. + """ + + def callbacks(self, name): + """ + callbacks(self, name) -> tuple of callbacks + + Return all callback functions registered with the given UI variable. + + Raises hou.TypeError if name is None. Raises hou.OperationFailed if no + UI variable with the specified name exists. + """ + return (None,) + +class dop(object): + """ + hou.dop + + DOP related functions. + + """ + def __init__(self): raise AttributeError, "No constructor defined" + def isScriptSolverRunning(self): + """ + isScriptSolverRunning() -> bool + + Return whether or not a Python script solver DOP is currently running. + + This function is called from the Python code that is automatically + generated when you create a new Python solver DOP type. + """ + return True + + def scriptSolverData(self): + """ + scriptSolverData() -> hou.DopData + + Return the solver solver data corresponding to the currently running + Python script solver DOP. + + A Python script solver DOP runs in two passes. During the first pass, + it evaluates its node parameters and stores them in the solver data. + During this pass, hou.dop.isScriptSolverRunning returns False and you + can access a writable version of the script solver data with + hou.DopNode.pythonSolverData. During the second pass the solver is + invoked to actually solve the objects. During this pass, + hou.dop.isScriptSolverRunning returns True and you use this function to + access a read-only version of the script solver data. You can access + the objects being solved in this pass with + hou.dop.scriptSolverNewObjects and hou.dop.scriptSolverObjects. + + DOP nodes attach data named "Solver" to each of the DOP objects being + solved. If the only solver in use is the script solver, this data will + be of type "SIM_SolverScript". Otherwise, this data will be of type + "SIM_SolverMulti", and the "SIM_SolverScript" will be subdata of the + multisolver data. This function provides an easy way of retrieving this + data, regardless of where it exists. + + Typically, the solver data is shared between all the objects being + solved. For this reason, the data returned by this function is read- + only. Otherwise, if you modified this data, the DOP engine would copy it + and the objects being solved would not share this data. + """ + return DopData() + + def scriptSolverNetwork(self): + """ + scriptSolverNetwork() -> hou.Node or None + + Return the DOP network node that contains the script solver DOP that is + currently running, or None if not script solver is running. You would + call this function from a script solver DOP. + + REPLACES + dopsolvedopnet function """ + return Node() + + def scriptSolverSimulation(self): return + def scriptSolverObjects(self): + """ + scriptSolverObjects() -> tuple of hou.DopObject + + Return a tuple of DOP objects being solved by the current script solver + DOP. If no script solver is running, returns an empty tuple. + + REPLACES + dopsolveobject function + dopsolvenumobjects function """ + return (DopObject(),) + + def scriptSolverNewObjects(self): + """ + scriptSolverNewObjects() -> tuple of hou.DopObject + + Return a tuple of newly-created DOP objects to later be solved by the + current script solver DOP. If no script solver is running, returns an + empty tuple. + + REPLACES + dopsolvenewobject function + dopsolvenumnewobjects function """ + return (DopObject(),) + + def scriptSolverTimestepSize(self): + """ + scriptSolverTimestepSize() -> float + + Return the timestep size for the script solver that is currently + running, or 0.0 if no script solver is running. + + REPLACES + dopsolvetimestep function """ + return 0.0 + + def scriptSolverTime(self): return + +class DopNode(Node): + """ + hou.DopNode + + Represents a dynamics node. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def dopNetNode(self): + """ + dopNetNode(self) -> hou.Node + + Return the DOP network node that contains this DOP node. + """ + return Node() + + def simulation(self): + """ + simulation(self) -> hou.DopSimulation + + Return the simulation that this node contributes to. This method is a + shortcut for self.dopNetNode().simulation(). + """ + return DopSimulation() + + def processedObjects(self): + """ + processedObjects(self) -> tuple of hou.DopObject + + Return a tuple of DOP objects that this DOP node processes. + """ + return (DopObject(),) + + def createdObjects(self): + """ + createdObjects(self) -> tuple of hou.DopObject + + Return a tuple of DOP objects that this DOP node creates. + + REPLACES + dopobjscreatedby function """ + return (DopObject(),) + + def isBypassed(self): + """ + isBypassed(self) -> bool + + Returns whether the node's bypass flag is on. + + REPLACES + opflag function """ + return True + + def bypass(self, on): + """ + bypass(self, on) + + Turn the node's bypass flag on or off, making this node have no effect. + """ + + def isDisplayFlagSet(self): + """ + isDisplayFlagSet(self) -> bool + + Return whether this node's display flag is on. + + REPLACES + opget command """ + return True + + def setDisplayFlag(self, on): + """ + setDisplayFlag(self, on) + + Turn the node's display flag on or off. + + REPLACES + opset command """ + + def displayNode(self): + """ + displayNode(self) -> hou.Node or None + + If this node is a subnet (i.e. it contains child nodes), return the + child that has its display flag set, or None if there are no children. + Otherwise, return None. + """ + return Node() + + def renderNode(self): return Node() + def objectsToProcess(self): + """ + objectsToProcess(self) -> tuple of hou.DopObject + + Return a tuple of DOP objects that this node should process. Raises + hou.PermissionError if called from outside a DOP implemented in Python. + """ + return (DopObject(),) + + def pythonSolverData(self): + """ + pythonSolverData(self) -> hou.DopData + + If this node is a Python DOP solver, return the solver data added to the + DOP network by this node. Otherwise, raises hou.PermissionError. + + This method is called from Python DOP solvers when the solver is not + running, to copy data from the DOP parameters into the solver data. + + See also hou.dop.scriptSolverData. + """ + return DopData() + +class DopObject(DopData): + """ + hou.DopObject + + A type of DOP data that contains an object in the simulation. + + This object might be a rigid body, a fluid, cloth, etc. The type and + properties of the DOP object are determined by the subdata attached to + the object. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def name(self): + """ + name(self) -> str + + Return the name of this DOP object. + + REPLACES + dopnodeobjs function """ + return '' + + def objid(self): + """ + objid(self) -> int + + Return the index of this object in the output from + hou.DopSimulation.objects. This method is a shortcut for + self.options().field("objid"). + + See hou.DopData.id for an example. + + Some fields in DOP records store an objid to refer to other objects. The + following function looks up an object by objid: + def findObjectByObjid(dopnet_node, objid): + return dopnet_node.simulation().objects()[objid] + """ + return 0 + + def matches(self, pattern): + """ + matches(self, pattern) -> bool + + Return whether or not this object's name matches a pattern. * will + match any number of characters and ? will match any single character. + The pattern string contains only one pattern, so spaces in the pattern + will be compared against the object name. + + >>> obj = hou.node("/obj/AutoDopNetwork").simulation().objects()[0] + >>> obj.name() + 'box_object1' + >>> obj.matches("box*") + True + >>> obj.matches("c*") + False + >>> obj.matches("box* b*") + False + >>> obj.matches("b?x_object1") + True + """ + return True + + def transform(self, include_geometry_transform=True): + """ + transform(self, include_geometry_transform=True) -> hou.Matrix4 + + Return the transformation matrix for this object. If + include_geometry_transform is False, the result is determined only by + the object's Position data. Otherwise, it is the transform in the + object's Geometry data, followed by the position transform. + + For simple DopData types, this method can be approximately implemented + as follows: + def transform(self, include_geometry_transform=True): + result = hou.hmath.identityTransform() + + geometry = self.findSubData("Geometry") + if include_geometry_transform and geometry is not None: + result *= geometry.record("Transform").field("transform") + + # Retrieve the position. If there is Geometry data, use its + # positionpath field to get the SIM_Position subdata. If not, look + # for data named Position. + position = None + if geometry is not None: + position = geometry.findSubData( + geometry.options().field("positionpath")) + if position is None: + position = self.findSubData("Position") + + # If we found position data, build a transformation from the pivot, + # rotation quaternion, and translate. + if position is not None: + options = position.options() + rotation = hou.Matrix4(options.field("orient").extractRotationMatrix3()) + result *= (hou.hmath.buildTranslate(-options.field("p")) * + rotation * + hou.hmath.buildTranslate(options.field("p")) * + hou.hmath.buildTranslate(options.field("t"))) + + return result + + + REPLACES + doptransform function """ + return Matrix4() + + def geometry(self, name="Geometry"): + """ + geometry(self, name="Geometry") -> hou.Geometry or None + + If this DOP object has SIM_Geometry subdata with the given name, return + its corresponding read-only hou.Geometry object. Otherwise, this method + returns None. + """ + return Geometry() + + def editableGeometry(self, name="Geometry"): + """ + editableGeometry(self, name="Geometry") -> + hou.EditableDopGeometryGuard or None + + If this method is called from a Python solver DOP and it has + SIM_Geometry (or SIM_GeometryCopy) subdata with the given name, it + returns a Python guard object that can be used with the "with" + statement to access and modify the corresponding hou.Geometry object. + + In Python 2.5, the with statement is not enabled by default. To enable + it, you need to add the following line at the beginning of your + script/module: + from __future__ import with_statement + + + For example, the following code in a Python solver DOP will add a point + at the origin of the geometry: + with dop_object.editableGeometry() as geo: + geo.createPoint() + + + Raises hou.PermissionError if not called from a Python solver DOP. + """ + return EditableDopGeometryGuard() + +class DopRecord(object): + """ + hou.DopRecord + + A table of values stored inside a DopData. + + See hou.DopData for a description of DOP data, records, and fields. + """ + def __init__(self): raise AttributeError, "No constructor defined" + def recordType(self): + """ + recordType(self) -> str + + Return the name of this record. See hou.DopData.recordTypes for more + information. + """ + return '' + + def recordIndex(self): + """ + recordIndex(self) -> int + + Return the index of this record. See hou.DopData.record and + hou.DopData.records for more information. + """ + return 0 + + def fieldNames(self): + """ + fieldNames(self) -> tuple of str + + Return the names of all the fields inside this record. See + hou.DopRecord.field for an example. + + REPLACES + dopallfields function + dopfieldname function + dophasfield function + dopnumfields function """ + return ('',) + + def fieldType(self, field_name): + """ + fieldType(self, field_name) -> hou.fieldType enum value + + Return a hou.fieldType enumerated value that describes the type of data + stored in a field. Returns hou.fieldType.NoSuchField if no field exists + with that name. + + See hou.DopRecord.field for an example. + + REPLACES + dopfieldtype function + dophasfield function + """ + return fieldType() + + def field(self): + """ + field(self) -> int, bool, float, str, hou.Vector2, hou.Vector3, + hou.Vector4, hou.Quaternion, hou.Matrix3, or hou.Matrix4 + + Return the value of a field inside this record, or None if no such field + exists. + + Note that you can add the suffixes "x", "y", and "z" to a vector + field's name to access the individual float values. + + # The following code assumes you have created a box from the shelf and used + # Rigid Bodies > RBD Object on the shelf to make it a rigid body. + >>> record = hou.node("/obj/AutoDopNetwork").simulation().findData("box_object1/Forces/Gravity_gravity1").options() + >>> record.fieldNames() + ('force', 'handlepos') + >>> record.field("force") + + >>> record.field("forcey") + -9.8066501617431641 + >>> record.fieldType("force") + fieldType.Vector3 + >>> record.fieldType("forcey") + fieldType.Float + + This example function creates a dict out of a record: + def recordAsDict(record): + return dict((field_name, record.field(field_name)) + for field_name in record.fieldNames()) + + + The following function returns the geometry transform of an object: + def dopGeometryTransform(dopnet_node, object_name): + subdata = dopnet_node.simulation().findObject(object_name).findSubData("Geometry") + return subdata.record("Transform").field("transform") + + + REPLACES + dopfield function + dopfields function """ + + def setFieldBool(self, field_name, value): + """ + setFieldBool(self, field_name, value) + + Set a field to the specified boolean value. You would call this method + from a script solver DOP. + + To set a field to a different type, use hou.DopRecord.setField. + + Raises hou.PermissionError if called from outside a script solver DOP. + + REPLACES + dopsolvesetoption command """ + + def setField(self, field_name, value): + """ + setField(self, field_name, value) + + Set a field to the specified value. You would call this method from a + script solver DOP. value may be an int, float, str, hou.Vector2, + hou.Vector3, hou.Vector4, hou.Quaternion, hou.Matrix3, or hou.Matrix4. + + Unfortunately, this method cannot be used to set a field to a boolean + (True or False) value. If you pass a boolean to this method, it will + set the field to the integer 1 or 0. To properly set it to a boolean + value, use hou.DopRecord.setFieldBool. + + Raises hou.PermissionError if called from outside a script solver DOP. + + REPLACES + dopsolvesetoption command """ + +class DopRelationship(DopData): + """ + hou.DopRelationship + + A type of DOP data that stores which DOP objects affect one another. + + In addition to the "Basic" and "Options" records, a DopRelationship + contains "ObjInAffectors" and "ObjInGroup" records. The former + contains the objects doing the affecting and the latter contains the + objects being affected. + + See hou.DopSimulation.relationships for an example. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def name(self): + """ + name(self) -> str + + Return the name of this DOP relationship. + """ + return '' + + def matches(self, pattern): + """ + matches(self, pattern) -> bool + + Return whether or not this relationship's name matches a pattern. See + hou.DopObject.matches for more information. + """ + return True + + def setGroup(self, objects): + """ + setGroup(self, objects) + + Sets the list of objects that are being affected. This corresponds to + the "ObjInGroup" record. + + objects: A list of DOP objects. + + Raises hou.PermissionError if called from outside a Python DOP. + """ + + def setAffectorGroup(self, objects): + """ + setAffectorGroup(self, objects) + + Sets the list of objects that are doing the affecting. This corresponds + to the "ObjInAffectors" record. + + objects: A list of DOP objects. + + Raises hou.PermissionError if called from outside a Python DOP. + """ + +class DopSimulation(object): + """ + hou.DopSimulation + + A dynamics simulation contained inside a DOP network node. + + See hou.DopData for more information about the contents of a DOP + simulation. Note that methods of this class implicitly use the + simulation data from the current frame. + """ + def __init__(self): raise AttributeError, "No constructor defined" + def createObject(self, name, solve_on_creation_frame): + """ + createObject(self, name, solve_on_creation_frame) -> hou.DopObject + + Create and return a new DOP object, or return None if the object was not + created successfully. + + name + The name of the new object. + + solve_on_creation_frame + If True, the object will be solved on its first frame of existance. + + Raises hou.PermissionError if called from outside a Python DOP. + + Use hou.DopData.copyContentsFrom to clone data from an existing object. + """ + return DopObject() + + def removeObject(self, object): + """ + removeObject(self, object) + + Remove the given DOP object from the simulation. + + object + The hou.DopObject to remove. + + Raises hou.PermissionError if called from outside a Python DOP. + """ + def createRelationship(self, name): + """ + createRelationship(self, name) -> hou.DopRelationship + + Create and return a new DOP relationship, or return None if the + relationship was not created successfully. + + name + The name of the new relationship. + + Raises hou.PermissionError if called from outside a Python DOP. + + Use hou.DopData.copyContentsFrom to clone data from an existing + relationship, and use hou.DopRelationship.setGroup and + hou.DopRelationship.setAffectorGroup to update the "ObjInGroup" and + "ObjInAffectors" records. + """ + return DopRelationship() + + def removeRelationship(self, rel): + """ + removeRelationship(self, rel) + + Remove the given DOP relationship from the simulation. + + rel + The hou.DopRelationship to remove. + + Raises hou.PermissionError if called from outside a Python DOP. + """ + + def dopNetNode(self): + """ + dopNetNode(self) -> hou.Node + + Return the DOP network node containing this simulation. + """ + return Node() + + def objects(self): + """ + objects(self) -> tuple of hou.DopData + + Return a tuple of all the DOP objects in the simulation. + + You cannot index into this list using the object ID (see + hou.DopObject.objid). To create a dictionary mapping object IDs to + hou.DopObjects, do this: + + id_dict = dict((obj.objid(), obj) for obj in simulation.objects()) + + REPLACES + dopnumobjects function + dopnodeobjs function """ + return DopData() + + def relationships(self): + """ + relationships(self) -> tuple of hou.DopRelationship + + Return a tuple of hou.DopRelationship objects for all the DOP + relationships in the simulation. + + # The following example assumes you have created two box objects and made + # them rigid bodies. + >>> simulation = hou.node("/obj/AutoDopNetwork").simulation() + >>> relationship = simulation.relationships()[1] + >>> affecting_objects = [ + ... simulation.objects()[record.field("objid")] + ... for record in relationship.records("ObjInAffectors")] + >>> [obj.name() for obj in affecting_objects] + ['box_object1'] + >>> affected_objects = [ + ... simulation.objects()[record.field("objid")] + ... for record in relationship.records("ObjInGroup")] + >>> [obj.name() for obj in affected_objects] + ['box_object2'] + """ + return (DopRelationship(),) + + def findObject(self, obj_spec)): + """ + findObject(self, obj_spec) -> hou.DopObject or None + + Return the DOP object with the given name, or None if no object exists + with that name. See also hou.DopSimulation.findData and + hou.DopSimulation.objects. + """ + return DopObject() + + def findRelationship(self, rel_spec): + """ + findRelationship(self, rel_spec) -> hou.DopRelationship + + Find a DOP relationship by name. Return None if no such relationship + with that name exists. See also hou.DopSimulation.relationships. + """ + return DopRelationship() + + def findData(self, data_spec): + """ + findData(self, data_spec) -> hou.DopData or None + + Return the DOP data with the given name. Note that the name may also be + a slash-separated path to nested subdata. + + If the data path refers to a DOP object, this method returns a + hou.DopObject instance. If it refers to a DOP relationship, it returns + a hou.DopRelationship instance. Otherwise, it returns a hou.DopData + instance. + + Note this method implicitly uses the simulation data from the current + frame. + + See also hou.DopData.findSubData. + """ + return DopData() + + def findAllObjects(self, obj_spec): + """ + findAllObjects(self, obj_spec) -> tuple of hou.DopObject + + Given a pattern, return a tuple of DOP objects whose names match the + pattern. + + >>> simulation = hou.node("/obj/AutoDopNetwork").simulation() + >>> [obj.name() for obj in simulation.findAllObjects("box_object?")] + ['box_object1', 'box_object2'] + >>> [obj.name() for obj in simulation.findAllObjects("o* b*")] + ['obj1', 'obj2', 'box_object1', 'box_object2'] + + REPLACES + dopobjectlist function """ + return (DopObject(),) + + def findAllRelationships(self, rel_spec): + """ + findAllRelationships(self, rel_spec) -> tuple of hou.DopRelationship + + Return a tuple of hou.DopRelationship objects whose names match a + pattern. See also hou.DopSimulation.relationships and + hou.DopSimulation.findRelationship. + """ + return (DopRelationship(),) + + def findAllData(self, data_spec): + """ + findAllData(self, data_spec) -> tuple of hou.DopData + + Given a pattern, return a tuple of DOP data whose names match the + pattern. See also hou.DopSimulation.findData. + """ + return (DopData(),) + + def time(self): + """ + time(self) + + Return the simulation's current time. This value is often the same as + hou.time, unless it is called from a Python solver DOP or the Time Scale + or Offset Time parameters of the DOP network have been changed from + their default values. + + REPLACES + doptime function """ + + def memoryUsage(self): + """ + memoryUsage(self) + + Return the simulation's total memory usage. + """ + +class Edge(object): + """ + hou.Edge + + Each Edge object resides inside a Geometry object and stores an edge. + Edges are reprsented as pairs of points. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def geometry(self): return Geometry() + def points(self): + """ + points(self) -> tuple of hou.Point + + Return a tuple of the points that make up this edge. + """ + return (Point(),) + + def edgeId(self): + """ + edgeId(self) -> str + + Return a string such as p8-9 that identifies the edge + """ + return '' + + def length(self): + """ + length(self) -> float + + Returns the length of this edge + """ + return 0.0 + + def prims(self): + """ + prims(self) -> tuple of hou.Prim + + Return a tuple of the prims that has this edge + """ + return (Prim(),) + +class EdgeGroup(object): + """ + hou.EdgeGroup + + A named group of edges inside a Geometry object. + + Edge groups reside inside the geometry, and each edge group has a unique + name. + + See hou.Edge for more information about edges. See also hou.PrimGroup + and hou.PointGroup. + + REPLACES + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def geometry(self): + """ + geometry(self) -> hou.Geometry + + Return the geometry object containing this group. + """ + return Geometry() + + def name(self): + """ + name(self) + + Return the name of the group. Each edge group has a unique name. + """ + + def edges(self): + """ + edges(self) -> tuple of hou.Edge + + Return the contents of this group. + """ + return (Edge(),) + + def contains(self, edge): + """ + contains(self, edge) -> bool + + Return whether or not an edge is in this group. + + Raises hou.OperationFailed if the edge belongs to a different geometry + object than this group. + """ + return True + + def add(self, edge_or_list_or_edge_group): + """ + add(self, edge_or_list_or_edge_group) + + If given a hou.Edge or a list of hou.Edge's, add the edge(s) to the + group. If given a hou.EdgeGroup, merge the contents of the other edge + group with this group (the other group is unaffected). You would + typically call this method from the code of a Python-defined SOP. + + It is ok to add edges to the group that were already in the group. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Raises hou.OperationFailed if the edge or edge group belong to a + different geometry object than this group. + """ + + def remove(self, edge_or_list_or_edge_group): + """ + remove(self, edge_or_list_or_edge_group) + + If given a hou.Edge or a list of hou.Edge's, remove the edge(s) from the + group. If given a hou.EdgeGroup, remove all edges in the other group + from this group (the other group is unaffected). You would typically + call this method from the code of a Python-defined SOP. + + It is not an error to try to remove an edge from the group that wasn't + already in the group. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Raises hou.OperationFailed if the edge belongs to a different geometry + object than this group. + """ + + def clear(self): return + def destroy(self): + """ + destroy(self) + + Remove this group from the geometry. You would typically call this + method from the code of a Python-defined SOP. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + +class EditableDopGeometryGuard(object): + + def __init__(self): raise AttributeError, "No constructor defined" + def __enter__(self): return + def __exit__(self): return + +class FloatingPanel(object): + """ + hou.FloatingPanel + + A floating window that contains one or more panes. + + Much like a desktop, a floating panel contains panes. A floating panel + may be attached to a desktop, in which case it is saved with the + desktop, hidden when the desktop is closed, and shown when the desktop + is opened. You can use floating panels to create desktops that span + multiple monitors. + + When you create a new floating panel, for example, it contains a single + pane, which in turn contains a single pane tab showing the network + editor. + + Note that a floating panel may be locked to one particular pane tab. + These stripped down panels do not display the interface for adding new + pane tabs or splitting panes. In fact, these stripped down floating + panels do not contain any panes at all, and hou.FloatingPanel.panes will + return an empty tuple. You can create such a stripped down floating + panel with hou.Desktop.createFloatingPaneTab. + + See hou.Desktop for more information about panes and pane tabs. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def panes(self): + """ + panes(self) -> tuple of hou.Pane + + Return all the panes inside the panel. As mentioned in the + documentation for this class, a floating panel may be stripped down and + locked to one particular pane tab, and these stripped down floating + panels do not contain any panes. + """ + return (Pane(),) + + def paneTabs(self): + """ + paneTabs(self) -> tuple of hou.PaneTab + + Return all the pane tabs that are in this floating panel, regardless of + which pane they are in. + """ + return (PaneTab(),) + + def paneTabOfType(self, type, index=0): + """ + paneTabOfType(self, type, index=0) -> hou.PaneTab or None + + Find and return the pane tab with the desired type or None if no such + pane tab exists. + + type + A hou.paneTabType enumerated variable. + + index + If there are multiple tabs with the desired type, this parameter + determines which one is returned. Use index=0 to return the first + found tab, index=1 to return the second found tab, etc. By default, + index is 0. + """ + return PaneTab() + + def findPaneTab(self, name): + """ + findPaneTab(self, name) -> hou.PaneTab or None + + Return the pane tab with the given name, or None if no such tab exists. + """ + return PaneTab() + + def name(self): + """ + name(self) -> str + + Return the name of the floating panel. The panel's name is displayed in + its window's title. + """ + return '' + + def setName(self, name): + """ + setName(self, name) + + Set this panel's name. Any characters in the name that are not letters, + numbers, or underscores are replaced with underscores. + + Raises hou.OperationFailed if the name is an empty string. + """ + + def containsPlaybar(self): + """ + containsPlaybar(self) -> bool + + Return whether or not this panel contains Houdini's playbar. + + See also hou.FloatingPanel.setContainsPlaybar. + """ + return True + + def setContainsPlaybar(self, on): + """ + setContainsPlaybar(self, on) + + If on is True, move Houdini's playbar to this panel. Otherwise, move it + back to the main desktop window. + + See also hou.FloatingPanel.containsPlaybar. + """ + + def containsShelf(self): + """ + containsShelf(self) -> bool + + Return whether or not this panel contains Houdini's shelf. + + See also hou.FloatingPanel.setContainsShelf. + """ + return True + + def setContainsShelf(self, on): + """ + setContainsShelf(self, on) + + If on is True, move Houdini's shelf to this panel. Otherwise, move it + back to the main desktop window. + + See also hou.FloatingPanel.containsShelf. + """ + + def containsStatusBar(self): + """ + containsStatusBar(self) -> bool + + Return whether or not this panel contains Houdini's status bar (the bar + at the bottom of the desktop for status messages). + + See also hou.FloatingPanel.setContainsStatusBar. + """ + return True + + def setContainsStatusBar(self, on): + """ + setContainsStatusBar(self, on) + + If on is True, move Houdini's status bar to this panel. Otherwise, move + it back to the main desktop window. + + See also hou.FloatingPanel.containsStatusBar. + """ + + def containsMenuBar(self): + """ + containsMenuBar(self) -> bool + + Return whether or not this panel contains Houdini's main menu bar. + + See also hou.FloatingPanel.setContainsMenuBar. + """ + return True + + def setContainsMenuBar(self, on): + """ + setContainsMenuBar(self, on) + + If on is True, move Houdini's main menu bar to this panel. Otherwise, + move it back to the main desktop window. + + See also hou.FloatingPanel.containsMenuBar. + """ + + def isAttachedToDesktop(self): + """ + isAttachedToDesktop(self) -> bool + + Return whether or not this panel is attached to the desktop. Panels + attached to the desktop are saved with the desktop and are opened when + the desktop is opened and closed when the desktop is closed. + + See also hou.FloatingPanel.attachToDesktop. + """ + return True + + def attachToDesktop(self, on): + """ + attachToDesktop(self, on) + + Attach this panel to the desktop. See + hou.FloatingPanel.isAttachedToDesktop for more information. + """ + + def isFullscreen(self): + """ + isFullscreen(self) -> bool + + Return whether or not this panel is in full screen mode. + + See also hou.FloatingPanel.setIsFullscreen. + """ + return True + + def setIsFullscreen(self, on): + """ + setIsFullscreen(self, on) + + Set whether or not this panel is in full screen mode. + + See also hou.FloatingPanel.isFullscreen. + """ + + def close(self): + """ + close(self) + + Close the floating panel's window, closing all the pane tabs inside it. + """ + +class FloatParmTemplate(ParmTemplate): + """ + hou.FloatParmTemplate + + Describes a parameter tuple containing floating point values. + """ + def __init__(self, name, label, num_components, default_value=(), min=0.0, + max=10.0, min_is_strict=False, max_is_strict=False, + look=hou.parmLook.Regular, naming_scheme=hou.parmNamingScheme.XYZW, + disable_when=None, is_hidden=False, is_label_hidden=False, + join_with_next=False, help=None, script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}, + default_expression=(), default_expression_language=()): + """ + __init__(self, name, label, num_components, default_value=(), min=0.0, + max=10.0, min_is_strict=False, max_is_strict=False, + look=hou.parmLook.Regular, naming_scheme=hou.parmNamingScheme.XYZW, + disable_when=None, is_hidden=False, is_label_hidden=False, + join_with_next=False, help=None, script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}, + default_expression=(), default_expression_language=()) + + Construct a new FloatParmTemplate. + + name + See hou.ParmTemplate.name for more information. + + label + See hou.ParmTemplate.label for more information. + + num_components + See hou.ParmTemplate.numComponents for more information. + + default_value + See the defaultValue method for more information. + + min + See the minValue method for more information. + + max + See the maxValue method for more information. + + min_is_strict + See the minIsStrict method for more information. + + max_is_strict + See the maxIsStrict method for more information. + + look + See hou.ParmTemplate.look for more information. + + naming_scheme + See hou.ParmTemplate.namingScheme for more information. + + disable_when + See hou.ParmTemplate.disableWhen for more information. + + is_hidden + See hou.ParmTemplate.isHidden for more information. + + is_label_hidden + See hou.ParmTemplate.isLabelHidden for more information. + + join_with_next + See hou.ParmTemplate.joinsWithNext for more information. + + help + See hou.ParmTemplate.help for more information. + + script_callback + See hou.ParmTemplate.scriptCallback for more information. + + script_callback_language + See hou.ParmTemplate.scriptCallbackLanguage for more information. + + tags + See hou.ParmTemplate.tags for more information. + + default_expression + See the defaultExpression method for more information. + + default_expression_language + See the defaultExpressionLanguage method for more information. + """ + def minValue(self): + """ + minValue(self) -> float + + Return the minimum value of the parameter. + + See also the minIsStrict method. + """ + return 0.0 + + def setMinValue(self, min_value): + """ + setMinValue(self, min_value) + + Set the minimum value of the parameter. + + See the minValue method for more information. + """ + + def maxValue(self): + """ + maxValue(self) -> float + + Return the minimum value of the parameter. + + See also the minIsStrict method. + """ + return 0.0 + + def setMaxValue(self, max_value): + """ + setMaxValue(self, max_value) + + Set the maximum value of the parameter. + + See the maxValue method for more information. + """ + + def minIsStrict(self): + """ + minIsStrict(self) -> bool + + Return whether the minimum value is strictly enforced. + + If a minimum value is not strictly enforced, the slider will not let you + change the value below the minimum, but you can set the value to be + lower than the minimum by typing it in, changing it via + hou.Parm.setValue, or using the ladder handle. + + If it is strictly enforced and you try to change it below the minimum + value using any mechanism, Houdini will set it to the minimum value. + + See also the minValue method. + """ + return True + + def setMinIsStrict(self, on): + """ + setMinIsStrict(self, on) + + Set whether the minimum value is strictly enforced. + + See the minIsStrict method for more information. + """ + + def maxIsStrict(self): + """ + maxIsStrict(self) -> bool + + Return whether the maximum value is strictly enforced. + + See the minIsStrict method for more information. + """ + return True + + def setMaxIsStrict(self, on): + """ + setMaxIsStrict(self, on) + + Set whether the maximum value is strictly enforced. + + See the maxIsStrict method for more information. + """ + + def defaultValue(self): + """ + defaultValue(self) -> tuple of float + + Return the default value for new parameter instances. + + For example, suppose this parm template is named "t", the naming + scheme is XYZW, it has 3 components, and the default value is (1.0, 2.0, + 3.0). The corresponding parm tuple instance on a node would be named + "t" and would contain parameters "tx", "ty", and "tz". When the + node is created, "tx" would be 1.0, "ty" would be 2.0, and "tz" + would be 3.0. + """ + return (0.0,) + + def setDefaultValue(self, default_value): + """ + setDefaultValue(self, default_value) + + Set the default value for new parameter instances to a sequence of + floats. + + See the defaultValue method for more information. Note that if the + number of floats in the sequence is different from the number of + components in the parm template, any extra values will be discarded and + any missing values will become zeros. + """ + + def defaultExpression(self): + """ + defaultExpression(self) -> tuple of strings + + Return the default expression for new parameter instances. + + The default expression takes precendence over the default value. If a + component has no default expression (i.e. an empty string), then the + default value is used for new parameter instances. + + Note that the default expression language is needed to interpret the + meaning of the default expression. + + For example, suppose this parm template is named "t", the naming + scheme is XYZW, it has 3 components, the default value is (1.0, 2.0, + 3.0), the default expression is ("$F", "hou.frame()", "") and the + default expression language is (hou.scriptLanguage.Hscript, + hou.scriptLanguage.Python, hou.scriptLanguage.Hscript). Then the + corresponding parm tuple instance on a node would be named "t" and + would contain parameters "tx", "ty", "tz". When the node is + created, "tx" would have a default Hscript expression of "$F", + "ty" would have a default Python expression of "hou.frame()", and + "tz" would have a default value of 3.0. + """ + return ('',) + + def setDefaultExpression(self, default_expression): + """ + setDefaultExpression(self, default_expression) + + Set the default expression for new parameter instances to a sequence of + strings. + + See the hou.FloatParmTemplate.defaultExpression method for more + information. Note that if the number of strings in the sequence is + different from the number of components in the parm template, any extra + values will be discarded and any missing expressions will become the + empty string. + """ + + def defaultExpressionLanguage(self): + """ + defaultExpressionLanguage(self) -> tuple of hou.scriptLanguage + + Return the default expression language for new parameter instances. + + The default expression language only applies if the default expression + is set. If the default expression of a component is not set, then the + expression language is set to hou.scriptLanguage.Hscript. + """ + return (scriptLanguage(),) + + def setDefaultExpressionLanguage(self, default_expression_language): + """ + setDefaultExpressionLanguage(self, default_expression_language) + + Set the default expression language for new parameter instances to a + sequence of hou.scriptLanguage values. + + See the defaultExpressionLanguage method for more information. Note + that if the number of hou.scriptLanguage values in the sequence is + different from the number of components in the parm template, any extra + values will be discarded and any missing expression languages will + become hou.scriptLanguage.Hscript. + """ + +class FolderParmTemplate(ParmTemplate): + """ + hou.FolderParmTemplate + + Describes a folder in a parameter dialog. + + Unlike all other hou.ParmTemplate subclasses, a folder does not + correspond to an individual hou.ParmTuple. Instead, the set of adjacent + folders form a folder set, and there is one parameter for this set that + controls which folder is currently visible. These folder sets + correspond to hou.FolderSetParmTemplate objects. + + Folder parm template objects are useful when manipulating the parameter + interface of a node or a digital asset definition. Unlike folder set + parm templates, they contain the parm templates inside the folder. They + also let you add, remove, or hide an individual folder or move it from + set one to another using hou.ParmTemplateGroup objects. Doing these + individual folder-level operations is not possible with folder set parm + templates. + + Note that folder parm templates are also used to represent multiparm + blocks, much like the dialog does. The folder parm + template's hou.folderType determines whether it is a folder or a + multiparm block. Unlike folder parm templates, which do not correspond + directly to parameter instances, a multiparm parm template does + correspond to an integer parameter that controls the number of instances + of the multiparm. + """ + def __init__(name, label, parm_templates=(), + folder_type=hou.folderType.Tabs, is_hidden=False, ends_tab_group=False, + tags={}): + """ + __init__(name, label, parm_templates=(), + folder_type=hou.folderType.Tabs, is_hidden=False, ends_tab_group=False, + tags={}) + + Create a new folder parm template. + + name + The internal name of the parm template. Normally, parm template + names correspond directly to parm tuples on nodes. However, because + folder sets, not folders, correspond directly to parm tuples, the + name used for the folder set parm tuple is the name of the first + folder parm template in the set of adjacent folder parm templates. + + label + The name of the folder that is displayed in the parameter dialog. + + parm_templates + A sequence of hou.ParmTemplate subclass objects for the parameters + inside the folder. Folders may be nested in other folders by + putting FolderParmTemplates in this sequence. + + folder_type + A hou.folderType enumerated value controlling whether the parameter + is a folder or a multiparm block. This value controls the look of + the folder/multiparm instance. + + is_hidden + Whether or not this folder is hidden. + + ends_tab_group + If True, this folder will be the last in the folder set, even if the + next parameter is also a folder. In that case, the next parameter + will begin a new folder set. + + tags + A dictionary of extra information attached to the parm template. + """ + def folderStyle(self): return + def folderType(self): + """ + folderType(self) -> hou.folderType enum value + + Return the type of folder. Note that the folder may actually be a + multiparm block. + """ + return folderType() + + def setFolderType(self, folder_type): + """ + setFolderType(self, folder_type) + + Set the type of folder to a hou.folderType enum value. + """ + + def isActualFolder(self): + """ + isActualFolder(self) -> bool + + Return whether or not this parm template corresponds to an actual + folder, as opposed to a multiparm or import block. + + This method can be implemented as follows: + def isActualFolder(self): + return self.folderType() in ( + hou.folderType.Tabs, hou.folderType.RadioButtons) + """ + return True + + def defaultValue(self): + """ + defaultValue(self) -> int + + Return the integer default value. + + The default value is only used for folders that are multiparm blocks, + and controls the default number of multiparm instances in newly created + nodes. + """ + return 0 + + def setDefaultValue(self, default_value): + """ + setDefaultValue(self, default_value) + + Set the default value to an integer. + + The default value is only used for folders that are multiparm blocks. + See the defaultValue method for more information. + """ + + def endsTabGroup(self): + """ + endsTabGroup(self) -> bool + + Return whether this folder will be the last in the folder set, even if + the next parameter is also a folder. In that case, the next parameter + will begin a new folder set. + + This parameter only has meaning if the parm template is for an actual + folder and not for a multiparm block. + """ + return True + + def setEndsTabGroup(self): return + def parmTemplates(self): + """ + parmTemplates(self) -> tuple of hou.ParmTemplate + + Return a tuple of copies of the parm templates stored inside this + folder. + + Because copies are returned, you cannot change the contents of the parm + templates inside this folder by modifying the parm templates returned. + Instead, use methods in hou.ParmTemplateGroup to modify parm templates + in this folder. + """ + return (ParmTemplate(),) + + def setParmTemplates(self, parm_templates): + """ + setParmTemplates(self, parm_templates) + + Replace the parm templates inside this folder with a new sequence of + parm templates. + """ + + def addParmTemplate(self, parm_template): + """ + addParmTemplate(self, parm_template) + + Append a parm template to the end of the list of parm templates inside + the folder. + + Note that hou.ParmTemplateGroup provides a number of methods to insert + parm templates inside folders, including + hou.ParmTemplateGroup.appendToFolder. + """ + +class FolderSetParmTemplate(ParmTemplate): + """ + hou.FolderSetParmTemplate + + Describes a set of folders. + + A folder set is a group of adjacent folders, and only one of those + folders can be displayed at a time. A folder set corresponds to one + parameter, and the value of that parameter determines which folder is + displayed. + + Note that there is also a hou.FolderParmTemplate class. Folder sets are + used when there is a mapping to a parameter; for example, asking a + hou.ParmTuple for its parm template may return a folder set, but it will + never return a folder. Folder parm templates are used by + hou.ParmTemplateGroup because they easily let you add, remove, and move + individual folders, and they let you easily place parameters inside + folders. Attempting to place folder set parm templates in + hou.ParmTemplateGroup objects will raise hou.OperationFailed. + """ + def __init__(self, *args, **kwargs): + """ + hou.FolderSetParmTemplate + + Describes a set of folders. + + A folder set is a group of adjacent folders, and only one of those + folders can be displayed at a time. A folder set corresponds to one + parameter, and the value of that parameter determines which folder is + displayed. + + Note that there is also a hou.FolderParmTemplate class. Folder sets are + used when there is a mapping to a parameter; for example, asking a + hou.ParmTuple for its parm template may return a folder set, but it will + never return a folder. Folder parm templates are used by + hou.ParmTemplateGroup because they easily let you add, remove, and move + individual folders, and they let you easily place parameters inside + folders. Attempting to place folder set parm templates in + hou.ParmTemplateGroup objects will raise hou.OperationFailed. + """ + def folderNames(self, folder_names): + """ + setFolderNames(self, folder_names) + + Set the names of the folders in this set to the given sequence of + strings. + + See the folderNames method for more information. + + Raises hou.OperationFailed if folder_names is an empty sequence. + """ + + def setFolderNames(self): return + def folderType(self): + """ + folderType(self) -> hou.folderType enum value + + Return the type of folder. + """ + return folderType() + + def setFolderType(self, folder_type): + """ + setFolderType(self, folder_type) + + Set the type of folder to a hou.folderType enum value. + + Raises TypeError if the folder type is for a multiparm or import block. + """ + return folderType() + + def folderStyle(self): + """ + folderStyle(self) -> hou.folderType enum value + + This method is deprecated. It is an alias for the folderType method. + """ + return folderType() + +class galleries(object): + """ + hou.galleries + + A module for managing galleries and their entries. + + This module provides a few basic functions for accessing and managing + hou.Gallery and hou.GalleryEntry. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def galleries(self): + """ + galleries() -> tuple of hou.Gallery + + Return a tuple containing all the galleries currently installed in the + Houdini session. + """ + return (Gallery(),) + + def galleryEntries(name_pattern=None, label_pattern=None, + keyword_pattern=None, category=None, node_type=None): + """ + galleryEntries(name_pattern=None, label_pattern=None, + keyword_pattern=None, category=None, node_type=None) -> tuple of + hou.GalleryEntry + + Return a tuple of hou.GalleryEntry objects matching the search criteria. + The result is the intersection of the matches against all the + parameters. If you call this function with no parameters, it returns + all the gallery entries. See also hou.Gallery.galleryEntries. + + Unless a parameter is None, the results are filtered by the following: + + name_pattern + gallery entry names matching this pattern + + label_pattern + gallery entry label names matching this pattern + + keyword_pattern + gallery entries that have a keyword matching this pattern + + category + gallery entries in a category matching this pattern + + node_type + gallery entries that can be applied to this node type + + This example prints all the gallery entries starting with a "b" that + have the Material keyword. + >>> hou.galleries.galleryEntries("b*", keyword_pattern="Material") + (, , ...) + + + This example prints the name and description of all the entries in the + Metals category: + >>> for entry in hou.galleries.galleryEntries(category="Metals"): + ... print "%s: %s" % (entry.name(), entry.description()) + chrome: Very bright metal with mirror reflections + aged_metal: Aged metal material with ray traced or environment mapped reflections + ... + + + This example prints the gallery entry names for the Lsystem SOP. + >>> node_type = hou.nodeType(hou.sopNodeTypeCategory(), "lsystem") + >>> for entry in hou.galleries.galleryEntries(node_type=node_type): + ... print entry.name() + planta + plantb + plantc + ... + sympodial_tree + ternary_tree + wheel + + + REPLACES + oppresetls command """ + def installGallery(self,gallery_path): + """ + installGallery(gallery_path) -> hou.Gallery or None + + Load a gallery into the current Houdini session. + + gallery_path + The file path of the gallery to be installed. + """ + return Gallery() + + def removeGallery(self, gallery_path): + """ + removeGallery(gallery_path) -> bool + + Remove a gallery from the current Houdini session. Returns False if the + specified gallery file was not installed. + + gallery_path + The file path of the gallery to be removed. + """ + return True + + def createGalleryEntry(self, gallery_path, entry_name, node): + """ + createGalleryEntry(gallery_path, entry_name, node) -> hou.GalleryEntry + or None + + Create and return a new gallery entry. + + gallery_path + The path of the gallery file in which the new element should be + stored. + + entry_name + The name of the new gallery entry. + + node + The operator node from which the new gallery entry should copy the + settings. The settings include parameter values, channels, spare + parameters etc, and also the children nodes if the node is a + subnetwork. + """ + return GalleryEntry() + +class Gallery(object): + """ + hou.Gallery + + A collection of gallery entries that can be applied to operator nodes + to set their parameters to predefined values. + + In Houdini, a gallery is a collection of node templates and their + parameter presets, which are represented by a hou.GalleryEntry. A + gallery corresponds to a file where such templates are saved. Galleries + can be managed with a hou.galleries module. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def galleryEntries(self, name_pattern=None, label_pattern=None, + keyword_pattern=None, category=None, node_type=None): + """ + galleryEntries(self, name_pattern=None, label_pattern=None, + keyword_pattern=None, category=None, node_type=None) -> tuple of + hou.GalleryEntry + + Return a tuple of entries that are stored in the gallery. See also + hou.galleries.galleryEntries. + + name_pattern + A pattern that the gallery entry name must match to be included in + the returned tuple. The pattern can contain '?' to match a single + character, '*' to match any number of characters, and '[char_set]' + to match any character in the set. If None, all gallery entries are + considered to match it. + + label_pattern + A pattern that the gallery entry label must match to be included in + the returned tuple. See the name_pattern above for special + characters in the pattern. If None, all gallery entries are + considered to match it. + + keyword_pattern + A pattern that any of the the gallery entry keywords needs to match + for the entry to be included in the returned tuple. See the + name_pattern above for special characters in the pattern. If None, + all gallery entries are considered to match it. + + category + If not None, only gallery entries in the specified category will be + included in the returned tuple. + + node_type + If not None, only gallery entries for a given node type will be + included in the returned tuple. + """ + return (GalleryEntry(),) + + def createEntry(self): return GalleryEntry() + def deleteEntry(self): return + +class GalleryEntry(object): + """ + hou.GalleryEntry + + A gallery entry that can be applied to operator nodes to set their + parameters to predefined values. + + A gallery entry is an entity containing data about an operator node + setup. It has information about the node's parameter values, any + additional spare parameters, channels, and for subnet nodes the + information about the children, etc. Thus, a gallery entry is like a + node template or a parameter preset. Such templates can be created from + and applied to existing nodes. + + A gallery entry is identified by a unique, and has a non-unique label, + and is usually associated with a specific hou.NodeType (or several node + types) of the nodes to which it applies. In addition to the node + information, gallery entries can have own categories that organize them + into manageable sets and also can have keywords that identify their + purpose. For more information about gallery entries, please see a + gallery entry editor. + + In order for your gallery entries to appear in the Material Palette + pane, they must satisfy two conditions. First, the node category must be + set to indicate the gallery entry creates a SHOP node. Use code like: + + hou.galleries.galleryEntries("entry_name")[0].setNodeTypeCategory(hou.shopNodeTypeCategory()) + + The second condition is that the entry must contain one or more keywords + that indicate what renderer the SHOP works with. This affects whether + the gallery entry appears when a specific renderer is chosen in the + Material Palette renderer menu. Even if "All" is chosen in that menu, + the gallery entry must contain a keyword that matches one of the + renderers that appears in that menu. To associate a gallery entry with + the Mantra renderer, do the following: + + hou.galleries.galleryEntries("entry_name")[0].setKeywords(('Mantra',)) + + In HOM the gallery entries can be managed using hou.Gallery. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def canApplyToNode(self, node): + """ + canApplyToNode(self, node) -> bool + + Return True if this gallery entry can be safely applied to the given + node. See hou.GalleryEntry.applyToNode for more info. + + node + A node to test whether the gallery entry can be applied to. + """ + return True + + def applyToNode(self, node): + """ + applyToNode(self, node) + + Apply the gallery entry to a given node. This method sets the node's + parameter values to match the ones stored by the entry. It may also add + spare parameters and channels to the node and for the subnets, it may + create new child nodes. + + node + A node to which to apply the gallery entry. + """ + + def canCreateChildNode(self, parent): + """ + canCreateChildNode(self, parent) -> bool + + Return True if hou.GalleryEntry.createChildNode can succeed. + """ + return True + + def createChildNode(self, parent): + """ + createChildNode(self, parent) -> Node + + Create a new node in the parent network and then apply this gallery + entry to that newly created node. + + parent + A subnetwork within which the new node should be created. If None, + an implicit natural parent is chosen using a node type this gallery + entry is associated with. + """ + return Node() + + def setEqual(self, entry): + """ + setEqual(self, entry) + + Set this gallery entry to be exactly the same as the given entry, except + for the name, which is left unchanged. + + entry + The gallery entry to copy the information from. + """ + + def name(self): + """ + name(self) -> string + + Return the gallery entry name. + """ + return '' + + def setName(self, name): + """ + setName(self, name) + + Set the gallery entry name. + + name + The name string. + """ + + def label(self): + """ + label(self) -> str + + Return the gallery entry label. + """ + return '' + def setLabel(self, label): + """ + setLabel(self, label) + + Set the gallery entry label. + + label + The label string. + """ + + def description(self): + """ + description(self) -> string + + Return a description of the gallery entry. A description is a short + string that states the gallery entry purpose. It is used for tool-tip + pop-ups. + """ + return '' + + def setDescription(self, description): + """ + setDescription(self, description) + + Set the description of the gallery entry. + + description + The text briefly describing the gallery entry purpose. + """ + + def helpURL(self): + """ + helpURL(self) -> string + + Return the URL of the help document for this gallery entry. + """ + return '' + + def setHelpURL(self, helpurl): + """ + setHelpURL(self, helpurl) + + Set the URL of the help document for this gallery entry. + """ + + def requiredHDAFile(self): + """ + requiredHDAFile(self) -> string + + Return a file path to an HDA library that should be loaded before trying + to apply this gallery entry. It is often used for gallery entries + associated with a non-native operator type. + """ + return '' + + def setRequiredHDAFile(self, hda_file): + """ + setRequiredHDAFile(self, hda_file) + + Set a file path to an HDA library on which this gallery entry depends. + + hda_file + A path of the HDA library file (OTL). + """ + + def icon(self): + """ + icon(self) -> string + + Return the icon name or a icon file path that should be used for this + gallery entry. + """ + return '' + + def setIcon(self, icon): + """ + setIcon(self, icon) + + Set the icon name or an icon file path that should be used for this + gallery entry. + """ + + def allowIconRegeneration(self): + """ + allowIconRegeneration(self) -> bool + + Return True if this gallery entry wants to let Houdini regenerate the + icon for it automatically using an appropriate renderer. Only applies to + material gallery entries. + """ + return True + + def setAllowIconRegeneration(self, allow): + """ + setAllowIconRegeneration(self, allow) + + Sets the allow icon regneration flag on this gallery entry. + """ + + def bestNodeType(self): + """ + bestNodeType(self) -> NodeType or None + + Return a best node type which this gallery entry is associated with and + whose nodes it can be applied to. + """ + return NodeType() + + def nodeTypeNames(self): + """ + nodeTypeNames(self) -> tuple of strings + + Return the names of the node type this gallery is associated with. The + gallery can be safely applied to the nodes of these types. + """ + return ('',) + + def setNodeTypeNames(self, nodetypes): + """ + setNodeTypeNames(self, nodetypes) + + Set the names of the node types this gallery should be associated with. + + nodetypes + A string containing white-space separated list of node type names. + """ + + def categories(self): + """ + categories(self) -> tuple of strings + + Return the categories this gallery entry subscribes to. + """ + return ('',) + + def setCategories(self, categories): + """ + setCategories(self, categories) + + Set the categories this gallery entry subscribes to. + + categories + A string with comma separated categories to set the gallery entry + to. + """ + + def keywords(self): + """ + keywords(self) -> tuple of strings + + Return the keywords that describe this gallery entry. + """ + return ('',) + + def setKeywords(self, keywords): + """ + setKeywords(self, keywords) + + Set the keywords that describe this gallery entry. + + keywords + A string containing a white-space separated list of keywords. + """ + + def nodeTypeCategory(self): + """ + nodeTypeCategory(self) -> NodeTypeCategory + + Return the category of the node types this gallery entry is associated + with. + """ + return NodeTypeCategory() + + def setNodeTypeCategory(self, category): + """ + setNodeTypeCategory(self, category) + + Set the category of the node types this gallery entry should be + associated with. + + category + A hou.NodeTypeCategory to associate this gallery entry with. + """ + + def script(self): + """ + script(self) -> string + + Return a script that modifies the node parameters to match the + information stored in the gallery entry. + """ + return '' + + def setScript(self, script): + """ + setScript(self, script) + + Set a script that modifies the parameters when the gallery entry is + applied to a node. + + script + A string that contains the commands setting the node's parameters. + """ + + def setScriptFromNode(self, node): + """ + setScriptFromNode(self, node) + + Set a script that modifies node parameters. Later on, when applying this + gallery entry to a node, the script will reconstruct that node's + parameters to match exactly the parameters of a node passed to this + method. + + node + A node object from which to build the script. + """ + + def setContentsFromNode(self, node): + """ + setContentsFromNode(self, node) + + Save the information about the node contents (i.e., child nodes). When + applying the node entry later on, these nodes will be reconstructed in + a new parent to match the contents of the current parent. + + node + The parent of the nodes whose data should be saved. + """ + +class Geometry(object): + """ + hou.Geometry + + A Geometry object contains the points and primitives that define a 3D + geometric shape. For example, each SOP node in Houdini generates a + single Geometry object. + + If you ask a SOP for its geometry via hou.SopNode.geometry, you'll get a + read-only reference to it. If the SOP recooks, the corresponding + Geometry object will update to the SOP's new geometry. If the SOP is + deleted, accessing the Geometry object will raise a hou.ObjectWasDeleted + exception. If you call methods that try to modify the geometry, they + will raise a hou.GeometryPermissionError exception. + + If you do not want the geometry to update when the SOP recooks, you can + call hou.Geometry.freeze. freeze returns another Geometry object that + will not change when the SOP recooks. Accessing frozen Geometry is + slightly faster, since Houdini does not need to look up the SOP node for + each access, so you may want to use frozen geometry for speed-crucial + operations. + + If you're writing a SOP using Python, you will have read-write access to + the geometry, and it will be frozen. To create a Python-defined SOP, + select File > New Operator Type... and place the Python code in the Code + tab. + + Finally, you can allocate a new frozen geometry with read-write access + by creating an instance of hou.Geometry. + + + """ + + def __init__(self, *args): + """ + hou.Geometry + + A Geometry object contains the points and primitives that define a 3D + geometric shape. For example, each SOP node in Houdini generates a + single Geometry object. + + If you ask a SOP for its geometry via hou.SopNode.geometry, you'll get a + read-only reference to it. If the SOP recooks, the corresponding + Geometry object will update to the SOP's new geometry. If the SOP is + deleted, accessing the Geometry object will raise a hou.ObjectWasDeleted + exception. If you call methods that try to modify the geometry, they + will raise a hou.GeometryPermissionError exception. + + If you do not want the geometry to update when the SOP recooks, you can + call hou.Geometry.freeze. freeze returns another Geometry object that + will not change when the SOP recooks. Accessing frozen Geometry is + slightly faster, since Houdini does not need to look up the SOP node for + each access, so you may want to use frozen geometry for speed-crucial + operations. + + If you're writing a SOP using Python, you will have read-write access to + the geometry, and it will be frozen. To create a Python-defined SOP, + select File > New Operator Type... and place the Python code in the Code + tab. + + Finally, you can allocate a new frozen geometry with read-write access + by creating an instance of hou.Geometry. + """ + def sopNode(self): + """ + sopNode(self) -> hou.SopNode + + If the Geometry is not frozen, return the hou.SopNode object + corresponding to this Geometry. Otherwise, return None. + + See hou.Geometry.freeze for more information on frozen geometry. + """ + return SopNode() + + def freeze(self): + """ + freeze(self) -> hou.Geometry + + Return another Geometry object that is not linked to a particular SOP. + + Normally, when you call hou.SopNode.geometry, the resultant Geometry + object retains a reference to that SOP, and is said to be unfrozen. + Each time you access points, primitives, attributes, etc. in an unfrozen + Geometry object, Houdini uses the SOP's latest cooked geometry. So, if + you change parameters or change the time for an animated SOP, the + Geometry object will update to the SOP's new geometry. + + Unless Python SOPs are involved, a frozen Geometry object does not have + a similar live association with a particular SOP. If you ask a SOP for + its geometry and then store a frozen copy of that geometry, when the SOP + recooks the frozen Geometry object will not update. Instead, the frozen + geometry saves its own copy of the point and primitive data, and is + unaffected by subsequent changes to the SOP. When a frozen Geometry + object is destroyed, any geometry copy it created is also destroyed. + + Note that accessing a Geometry object's points, primitives, attributes, + etc. may be faster when dealing with frozen objects. You may want to + work with frozen Geometry in speed-sensitive operations. + + Calling this method on an unfrozen Geometry object returns a frozen one. + Calling it on a frozen object has no effect, and it returns a frozen + object. + + When a Python-defined SOP cooks and runs Python code that asks for the + SOP's geometry, the returned Geometry object is writable. Modifying + this Geometry object affects the output of this SOP. For efficiency, + this geometry object is already frozen, so calling freeze on it has no + effect. + """ + return Geometry() + + def iterPoints(self): + """ + iterPoints(self) -> generator of hou.Point + + Return a generator that iterates through all the points in the geometry. + + Whereas hou.Geometry.points allocates and returns a tuple of all the + points in the geometry, this method returns a generator object that will + allocate hou.Point objects on demand. This object is very fast at + random access into the sequence. + + If you're accessing a specific point by index and the geometry contains + many points, it is faster to use iterPoints() than points(). If, + however, you are iterating over all the points in the geometry, it is + generally faster to use points() than iterPoints(). + + # This is preferred: + geo.iterPoints()[23] + + # over this: + geo.points()[23] + + # But this is preferred: + for point in geo.points(): + ...process point... + + # over this: + for point in geo.iterPoints(): + ...process point... + + REPLACES + haspoint function + point function + points function + pointlist function + poppoint function """ + return (Point(),) + + def points(self): + """ + points(self) -> tuple of hou.Point + + Return a tuple of all the points in the geometry. + + See also the hou.Geometry.iterPoints method. + """ + return (Point(),) + + def iterPrims(self): + """ + iterPrims(self) -> generator of hou.Prim + + Return a generator that iterates through all the primitives in the + geometry. + + Whereas hou.Geometry.prims allocates and returns a tuple of all the + primitives in the geometry, this method returns a generator object that + will yield hou.Prim objects on demand. This object is very fast at + random access into the sequence. + + If you're accessing a specific primitive by index and the geometry + contains many primitives, it is faster to use iterPrims() than prims(). + If, however, you are iterating over all the primitives in the geometry, + it is generally faster to use prims() than iterPrims(). + + # This is preferred: + geo.iterPrims()[23] + + # over this: + geo.prims()[23] + + # But this is preferred: + for prim in geo.prims(): + ...process prim... + + # over this: + for prim in geo.iterPrims(): + ...process prim... + + See also the hou.Geometry.prims method. + """ + return (Prim(),) + + def prims(self): + """ + prims(self) -> tuple of hou.Prim + + Return a tuple of all the primitives in the geometry. The primitives + returned will be subclasses of hou.Prim (e.g.polygons, volumes, etc.). + + See also: + + * hou.Geometry.iterPrims + * hou.Face + * hou.Polygon + * hou.Surface + * hou.Volume + REPLACES + hasprim function + prim function + prims function + primlist function """ + return (Prim(),) + + def averageMinDistance(self): + """ + averageMinDistance(self, local_transform, geometry, geometry_transform) + -> float + + Return the average over all points in of the minimum distance + to the point set of + + local_transform + A transform to be applied to all points in this geometry. + + geometry + The geometry to find distances from. + + geometry_transform + A transform to be applied to all points in . + + Raises hou.OperationFailed if has no vertices. + + query_geometry = query_node.geometry() + queried_geometry = queried_node.geometry() + + # Return the average over all points in of the minimum + # distance to the point set of + query_geometry.averageMinDistance( + query_node.worldTransform(), + queried_geometry, + queried_node.worldTransform()) + """ + + def averageEdgeLength(self): + """ + averageEdgeLength(self) -> float + + Return the average edge length of the mesh. + + Raises hou.OperationFailed if mesh does not contain any edges. + + # Return the average edge length. + geo.averageEdgeLength() + """ + return 0.0 + + def globPoints(self, pattern): + """ + globPoints(self, pattern) -> tuple of hou.Point + + Return a tuple of points corresponding to a pattern of point numbers. + + The pattern format is the same one used by the group fields on SOP nodes + that take point selections. Elements in the pattern are separated by + spaces, and elements can be point numbers, point number ranges, or group + names. + + This method can be useful when writing a Python SOP that works on only a + selected set of points. + + Raises hou.OperationFailed if the pattern is not valid or if it refers + to a group that does not exist. Note that an empty pattern is + considered to be invalid. Numbers that do not refer to valid points are + not errors, and simply do not match points. + + # Return a tuple containing points 5 and 7. + geo.globPoints("5 7") + + # Return a tuple containing points 5 to 10. + geo.globPoints("5-10") + + # Return a tuple containing all the points in the pointgroup called group1. + geo.globPoints("group1") + + # Return all the points except those from 0 to 98. + geo.globPoints("!0-98") + + # Return points 5, 10 to 20, and those in group1. + geo.globPoints("5 group1 10-20") + + The following Python SOP example is behaves similarly to the Point sop. + # This code will work from inside a Python SOP, but not from the Python + # shell. It assumes the Python sop has the following parm tuples: + # group: A string containing which points to affect + # t: A set of 3 floats that behaves like the point sop's position + # parameter. Set these parameters to the expressions ($TX, $TY, $TZ). + geo = hou.pwd().geometry() + + # Use the group field to determine which points to affect. If it's blank, + # operate on all points. + pattern = hou.ch("group") + if pattern == "": + points = geo.points() + else: + points = geo.globPoints(pattern) + + # Loop through the points, setting the SOP's current point as we go. + # Then evaluate the t parm tuple, so it can use the current point (e.g. + # with hscript's $TX or Python's pwd().curPoint()). + for point in points: + hou.pwd().setCurPoint(point) + new_position = hou.pwd().evalParmTuple("t") + point.setPosition(new_position) + + + REPLACES + pointpattern function """ + return (Point(),) + + def globPrims(self, pattern): + """ + globEdges(self, pattern) -> tuple of hou.Edge + + Return a tuple of edges corresponding to an edge pattern. + + The pattern format is the same one used by the group fields on SOP nodes + that take edge selections. See hou.Geometry.globPoints for more + information. + """ + return (Polygon(),) + + def globVertices(self, pattern): return (Vertex(),) + def globEdges(self, pattern): return (Edge(),) + def pointAttribs(self): + """ + pointAttribs(self) -> tuple of hou.Attrib + + Return a tuple of all the point attributes. + + Note that the point position attribute is named P and is 3 floats in + size. Also, the point weight attribute is named Pw and is 1 float in + size. These attributes always exist in HOM, even though they are not + listed by Houdini's UI. + """ + return (Attrib(),) + + def primAttribs(self): + """ + primAttribs(self) -> tuple of hou.Attrib + + Return a tuple of all the primitive attributes. + """ + return (Attrib(),) + + def vertexAttribs(self): + """ + vertexAttribs(self) -> tuple of hou.Attrib + + Return a tuple of all the vertex attributes. + """ + return (Attrib(),) + + def globalAttribs(self): + """ + globalAttribs(self) -> tuple of hou.Attrib + + Return a tuple of all the global (a.k.a. detail) attributes. + """ + return (Attrib(),) + + def findPointAttrib(self): + """ + findPointAttrib(self, name) -> hou.Attrib or None + + Look up a point attribute by name. Returns the corresponding hou.Attrib + object, or None if no attribute exists with that name. + + Note that the point position attribute is named P and is 3 floats in + size. Also, the point weight attribute is named Pw and is 1 float in + size. These attributes always exist in HOM, even though they are not + listed by Houdini's UI. + + See hou.Point.attribValue for an example. + + REPLACES + haspointattrib function """ + return Attrib() + + def findPrimAttrib(self): + """ + findPrimAttrib(self, name) -> hou.Attrib or None + + Look up a primitive attribute by name. Returns the corresponding + hou.Attrib object, or None if no attribute exists with that name. + + REPLACES + hasprimattrib function """ + return Attrib() + + def findVertexAttrib(self): + """ + findVertexAttrib(self, name) -> hou.Attrib or None + + Look up a vertex attribute by name. Returns the corresponding + hou.Attrib object, or None if no attribute exists with that name. + + REPLACES + hasvertexattrib function """ + return Attrib() + + def findGlobalAttrib(self): + """ + findGlobalAttrib(self, name) -> hou.Attrib or None + + Look up a global (a.k.a. detail) attribute by name. Returns the + corresponding hou.Attrib object, or None if no attribute exists with + that name. + + REPLACES + hasdetailattrib function """ + return Attrib() + + def attribType(self): + """ + attribType(self) -> hou.attribType enum value + + Return the enumerated value hou.attribType.Global. Points, primitives, + vertices, and geometry support the same set of methods for querying + their attributes, and this method is one of them. + + See also: + + * hou.Prim.attribType + * hou.Point.attribType + * hou.Vertex.attribType """ + return attribType() + + def floatAttribValue(self, name_or_attrib): + """ + floatAttribValue(self, name_or_attrib) -> float + + Return the global (a.k.a. detail) attribute value for a particular + floating point attribute. The attribute may be specified by name or by + hou.Attrib object. + + Raises hou.OperationFailed if no attribute exists with this name or the + attribute is not a float of size 1. + + In most cases, you'll just use hou.Geometry.attribValue to access + attribute values. Houdini uses this method internally to implement + attribValue. + """ + return 0.0 + + def floatListAttribValue(self, name_or_attrib): + """ + floatListAttribValue(self, name_or_attrib) -> tuple of float + + Return the global (a.k.a. detail) attribute value for a particular + floating point attribute. The attribute may be specified by name or by + hou.Attrib object. The return value is a list of floats. + + It is valid to call this method when the attribute's size is 1. In this + case, a list with one element is returned. + + See also: + + * hou.Geometry.attribValue """ + return (0.0,) + + def intAttribValue(self, name_or_attrib): + """ + intAttribValue(self, name_or_attrib) -> int + + Return the global (a.k.a. detail) attribute value for a particular + integer attribute of size 1. The attribute may be specified by name or + by hou.Attrib object. See hou.Geometry.floatAttribValue for more + information. + """ + return 0 + + def intListAttribValue(self, name_or_attrib): + """ + intListAttribValue(self, name_or_attrib) -> tuple of int + + Return the global (a.k.a. detail) attribute value for a particular + integer attribute. The attribute may be specified by name or by + hou.Attrib object. The return value is a list of ints. See + hou.Geometry.floatListAttribValue for more information. + """ + return (0,) + + def stringAttribValue(self, name_or_attrib): + """ + stringAttribValue(self, name_or_attrib) -> str + + Return the global (a.k.a. detail) attribute value for a particular + string attribute. The attribute may be specified by name or by + hou.Attrib object. See hou.Geometry.floatAttribValue for more + information. + """ + return '' + + def stringListAttribValue(self, name_or_attrib): + """ + stringListAttribValue(self, name_or_attrib) -> tuple of int + + Return the global (a.k.a. detail) attribute value for a particular + string attribute. The attribute may be specified by name or by + hou.Attrib object. The return value is a list of strings. See + hou.Geometry.floatListAttribValue for more information. + """ + return (0,) + + def pointFloatAttribValues(self, name): + """ + pointFloatAttribValues(self, name) -> tuple of float + + Return a tuple of floats containing one attribute's values for all the + points. + + This method only works on int or float attributes. If the attribute + contains more than one element, each point will correspond to multiple + values in the result. For example, if "Cd" is a float attribute of + size 3 and there are 3 points with values (0.1, 0.2, 0.3), (0.5, 0.5, + 0.5), and (0.8, 0.7, 0.6) then the result will be (0.1, 0.2, 0.3, 0.5, + 0.5, 0.5, 0.8, 0.7, 0.6). + + Calling this method is faster than looping over all the points and + calling hou.Point.attribValue. + + If the attribute name is invalid or the attribute is not an int or float + (e.g. it's a string attribute), this method raises hou.OperationFailed. + + Note that you cannot pass a hou.Attrib object to this method like you + can with many methods dealing with attributes. However, you can use + hou.Attrib.name to easily get the name from an Attrib object. + """ + return (0.0,) + + def pointFloatAttribValuesAsString(self, name, + float_type=hou.numericType.Float32): + """ + pointFloatAttribValuesAsString(self, name, + float_type=hou.numericType.Float32) -> str + + Return a string representation of the floats of one attribute's value + for all the points. This method is faster than + hou.Geometry.pointFloatAttribValues, and you can use the array module to + convert the string into a Python sequence. + + float_type + A Hom.hou.numericType value to specify the float data type (either + Float16, Float32 or Float64). + + This method provides a faster implementation of the following: + import array + def pointFloatAttribValuesAsString(self, name): + return array.array("f", self.pointFloatAttribValues(name)).tostring() + + + You can convert the return value from this method to an array using the + following method: + import array + def pointFloatAttribValuesAsArray(geometry, name): + a = array.array("f") + a.fromstring(geometry.pointFloatAttribValuesAsString(name)) + return a + + + See hou.Geometry.pointFloatAttribValues for more information. + """ + return '' + + def primFloatAttribValues(self, name): + """ + primFloatAttribValues(self, name) -> tuple of float + + Return a tuple of floats containing one attribute's values for all the + primitives. + + This method only works on int or float attributes. If the attribute + contains more than one element, each primitive will correspond to + multiple values in the result. For example, if Cd is a float attribute + of size 3 and there are 3 primitives with values (0.1, 0.2, 0.3), (0.5, + 0.5, 0.5), and (0.8, 0.7, 0.6) then the result will be (0.1, 0.2, 0.3, + 0.5, 0.5, 0.5, 0.8, 0.7, 0.6). + + Calling this method is faster than looping over all the primitives and + calling hou.Prim.attribValue. + + If the attribute name is invalid or the attribute is not an int or float + (e.g. it's a string attribute), this method raises hou.OperationFailed. + + Note that you cannot pass a hou.Attrib object to this method like you + can with many methods dealing with attributes. However, you can use + hou.Attrib.name to easily get the name from an Attrib object. + """ + return (0.0,) + + def primFloatAttribValuesAsString(self, name): + """ + primFloatAttribValuesAsString(self, name) -> str + + Return a string representation of the floats of one attribute's value + for all the primitives. This method is faster than + hou.Geometry.primFloatAttribValues, and you can use the array module to + convert the string into a Python sequence. + + This method provides a faster implementation of the following: + import array + def primFloatAttribValuesAsString(self, name): + return array.array("f", self.primFloatAttribValues(name)).tostring() + + + You can convert the return value from this method to an array using the + following method: + import array + def primFloatAttribValuesAsArray(geometry, name): + a = array.array("f") + a.fromstring(geometry.primFloatAttribValuesAsString(name)) + return a + + + See hou.Geometry.primFloatAttribValues for more information. + """ + return '' + + def pointIntAttribValues(self, name): + """ + pointIntAttribValues(self, name) -> tuple of int + + Return a tuple of integers containing one attribute's values for all the + points. + + This method only works on int or float attributes. If the attribute + contains more than one element, each point will correspond to multiple + values in the result. For example, if "idmap" is an integer attribute + of size 2 and there are 3 points with values (1, 2), (2, 3), and (3, 4) + then the result will be (1, 2, 2, 3, 3, 4). + + Calling this method is faster than looping over all the points and + calling hou.Point.attribValue. + + If the attribute name is invalid or the attribute is not an int or float + (e.g. it's a string attribute), this method raises hou.OperationFailed. + + Note that you cannot pass a hou.Attrib object to this method like you + can with many methods dealing with attributes. However, you can use + hou.Attrib.name to easily get the name from an Attrib object. + """ + return (0,) + + def pointIntAttribValuesAsString(self, name, int_type=hou.numericType.Int32): + """ + pointIntAttribValuesAsString(self, name, int_type=hou.numericType.Int32) + -> str + + Return a string representation of the integers of one attribute's value + for all the points. This method is faster than + hou.Geometry.pointIntAttribValues, and you can use the array module to + convert the string into a Python sequence. + + int_type + A Hom.hou.numericType value to specify the integer data type (either + Int8, Int16, Int32 or Int64). + + This method provides a faster implementation of the following: + import array + def pointIntAttribValuesAsString(self, name): + return array.array("i", self.pointIntAttribValues(name)).tostring() + + + You can convert the return value from this method to an array using the + following method: + import array + def pointIntAttribValuesAsArray(geometry, name): + a = array.array("i") + a.fromstring(geometry.pointIntAttribValuesAsString(name)) + return a + + + See hou.Geometry.pointIntAttribValues for more information. + """ + + def primIntAttribValues(self, name): + """ + primIntAttribValues(self, name) -> tuple of int + + Return a tuple of integers containing one attribute's values for all the + primitives. + + This method only works on int or float attributes. If the attribute + contains more than one element, each primitive will correspond to + multiple values in the result. For example, if idmap is an integer + attribute of size 2 and there are 3 primitives with values (1, 2), (2, + 3), and (3,4) then the result will be (1, 2, 2, 3, 3, 4). + + Calling this method is faster than looping over all the primitives and + calling hou.Prim.attribValue. + + If the attribute name is invalid or the attribute is not an int or float + (e.g. it's a string attribute), this method raises hou.OperationFailed. + + Note that you cannot pass a hou.Attrib object to this method like you + can with many methods dealing with attributes. However, you can use + hou.Attrib.name to easily get the name from an Attrib object. + """ + return (0,) + + def primIntAttribValuesAsString(self, name, int_type=hou.numericType.Int32): + """ + primIntAttribValuesAsString(self, name, int_type=hou.numericType.Int32) + -> str + + Return a string representation of the integers of one attribute's value + for all the primitives. This method is faster than + hou.Geometry.primFloatAttribValues, and you can use the array module to + convert the string into a Python sequence. + + int_type + A Hom.hou.numericType value to specify the integer data type (either + Int8, Int16, Int32 or Int64). + + This method provides a faster implementation of the following: + import array + def primIntAttribValuesAsString(self, name): + return array.array("i", self.primIntAttribValues(name)).tostring() + + + You can convert the return value from this method to an array using the + following method: + import array + def primIntAttribValuesAsArray(geometry, name): + a = array.array("i") + a.fromstring(geometry.primIntAttribValuesAsString(name)) + return a + + + See hou.Geometry.primIntAttribValues for more information. + """ + return '' + + def setPointFloatAttribValues(self, name, values): + """ + setPointFloatAttribValues(self, name, values) + + For a particular attribute, set the attribute values for all points. You + would typically call this method from the code of a Python-defined SOP. + + name + The name of the point attribute. + + values + A sequence of int or float values in the same format as that + returned by hou.Geometry.pointFloatAttribValues. See that method + for more information. + + Raises hou.OperationFailed if the attribute name is not valid, the + attribute is not an int or float (i.e. it's a string), or the array of + values is not the correct size. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Also see hou.Geometry.pointFloatAttribValues. + """ + + def setPrimFloatAttribValues(self, name, values): + """ + setPrimFloatAttribValues(self, name, values) + + For a particular attribute, set the attribute values for all primitives. + You would typically call this method from the code of a Python-defined + SOP. + + name + The name of the primitive attribute. + + values + A sequence of int or float values in the same format as that + returned by hou.Geometry.primFloatAttribValues. See that method for + more information. + + Raises hou.OperationFailed if the attribute name is not valid, the + attribute is not an int or float (i.e. it's a string), or the array of + values is not the correct size. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Also see hou.Geometry.primFloatAttribValues. + """ + + def setPointFloatAttribValuesFromString(*args, **kwargs): return + def setPrimFloatAttribValuesFromString(*args, **kwargs): return + def setPointIntAttribValues(self, name, values): + """ + setPointIntAttribValues(self, name, values) + + For a particular attribute, set the attribute values for all points. You + would typically call this method from the code of a Python-defined SOP. + + name + The name of the point attribute. + + values + A sequence of int or float values in the same format as that + returned by hou.Geometry.pointIntAttribValues. See that method for + more information. + + Raises hou.OperationFailed if the attribute name is not valid, the + attribute is not an int or float (i.e. it's a string), or the array of + values is not the correct size. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Also see hou.Geometry.pointIntAttribValues. + """ + + def setPrimIntAttribValues(self, name, values): + """ + setPrimIntAttribValues(self, name, values) + + For a particular attribute, set the attribute values for all primitives. + You would typically call this method from the code of a Python-defined + SOP. + + name + The name of the primitive attribute. + + values + A sequence of int or float values in the same format as that + returned by hou.Geometry.primFloatAttribValues. See that method for + more information. + + Raises hou.OperationFailed if the attribute name is not valid, the + attribute is not an int or float (i.e. it's a string), or the array of + values is not the correct size. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Also see hou.Geometry.primIntAttribValues. + """ + + def setPointIntAttribValuesFromString(*args, **kwargs): return + def setPrimIntAttribValuesFromString(*args, **kwargs): return + def createPoint(self): + """ + createPoint(self) -> hou.Point + + Create a new point located and (0, 0, 0) and return the corresponding + hou.Point object. You would typically call this method from the code of + a Python-defined SOP. + + If the geometry contains point attributes, the new point receives the + default values for those attributes. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + See hou.Geometry.addAttrib, hou.Geometry.createPolygon, and + hou.Face.addVertex for examples. + """ + return Point() + + def createPolygon(self): + """ + createPolygon(self) -> hou.Polygon + + Create a new polygon and return the corresponding hou.Polygon object. + You would typically call this method from the code of a Python-defined + SOP. + + The newly created polygon has no vertices. Use hou.Face.addVertex to + add them. The polygon is also closed (see hou.Face.isClosed for more + information). + + If the geometry contains primitive attributes, the new polygon receives + the default values for those attributes. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + geo = hou.pwd().geometry() + poly = geo.createPolygon() + for position in (0,0,0), (1,0,0), (0,1,0): + point = geo.createPoint() + point.setPosition(position) + poly.addVertex(point) + + See hou.Face.addVertex for a slightly more complicated example. + """ + return Polygon() + + def createPacked(self, typename): + """ + createPacked(self, typename) -> hou.PackedPrim + + typename + A string containing the name of a type of packed primitive. Typical + examples are "PackedDisk" (on-disk geometry file) or + "AlembicRef" (Alembic file). + + To see a complete list of possible typename values, run ginfo -P on + a Houdini tools command line. + + See hou.PackedPrim for more information. + """ + return PackedPrim() + + def createTetrahedron(self): + """ + createTetrahedron(self) -> hou.Prim + + Create a new tetrahedron and return the corresponding hou.Prim object. + You would typically call this method from the code of a Python-defined + SOP. + + The newly created tetrahedron has four vertices and new points have been + allocated for them. To build a tetrahedron out of existin points, use + Hom.hou.Geometry#createTetrahedronInPlace + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + return Prim() + + def createTetrahedronInPlace(self): + """ + createTetrahedronInPlace(self, p0, p1, p2, p3) -> hou.Prim + + Create a new tetrahedron and return the corresponding hou.Prim object. + You would typically call this method from the code of a Python-defined + SOP. + + The newly created tetrahedron has four vertices and uses the points that + have been passed into it. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + return Prim() + + def createNURBSCurve(self, num_vertices=4, is_closed=False, order=4): + """ + createNURBSCurve(self, num_vertices=4, is_closed=False, order=4) -> + hou.Face + + Create a new NURBS with the specified number of vertices and return it. + You would typically call this method from the code of a Python-defined + SOP. + + num_vertices + The number of verticies in the curve. A new point is added to the + geometry for each vertex, and this point is located at the origin + until you change its position. You can also add more vertices with + hou.Face.addVertex. + + The minimum number of vertices for a NURBS curve is identical to its + order. So for the default order of 4, the curve must have a minimum + of 4 vertices. If you specify too few vertices, this method raises + hou.OperationFailed. + + is_closed + Controls if the curve is open or closed; see hou.Face.isClosed for + more information. If not specified, the resulting curve is open. + This behavior is different from hou.Geometry.createPolygon, where + the new polygon is closed. You can also open or close it with + hou.Face.setIsClosed. + + order + Specifies the curve's order. The default order is 4, corresponding + to a cubic NURBS curve. An order of 2, the lowest order, will give a + curve with linear segments. + + If the geometry contains primitive attributes, the new curve receives + the default values for those attributes. + + # This code will work from inside a Python SOP, but not from the Python + # shell. + geo = hou.pwd().geometry() + curve = geo.createNURBSCurve(10) + i = 0 + for vertex in curve.vertices(): + vertex.point().setPosition((i, i % 3, 0)) + i = i + 1 + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + See also: + + * hou.Prim.vertices + * hou.Point.setPosition """ + return Face() + + def createBezierCurve(self, num_vertices=4, is_closed=False, order=4): + """ + createBezierCurve(self, num_vertices=4, is_closed=False, order=4) -> + hou.Face + + Create a new Bezier curve with the specified number of vertices and + return it. You would typically call this method from the code of a + Python-defined SOP. + + num_vertices + The number of verticies in the curve. A new point is added to the + geometry for each vertex, and this point is located at the origin + until you change its position. You can also add more vertices with + hou.Face.addVertex. + + is_closed + Controls if the curve is open or closed; see hou.Face.isClosed for + more information. If not specified, the resulting curve is open. + This behavior is different from hou.Geometry.createPolygon, where + the new polygon is closed. + + order + Specifies the curve's order. The default order is 4, corresponding + to a cubic Bezier curve. An order of 2, the lowest order, will give + a curve with linear segments. + + An open Bezier curve must have (order - 1) * n + 1 vertices for some + integer n>=1 (so valid values for order 4 curves are 4, 7, 10, etc.). + A closed Bezier curve must have (order - 1) * n vertices (e.g. 3, 6, 9, + etc. for order 4 curve). This restriction does not apply to curves of + order 2, however. + + As a consequence, you cannot use hou.Face.setIsClosed on non-linear + Bezier curves, since the number of vertices would need to change. + + See hou.Geometry.createNURBSCurve for more information. + """ + return Face() + + def createNURBSSurface(self, rows, cols, is_closed_in_u=False, + is_closed_in_v=False): + """ + createNURBSSurface(self, rows, cols, is_closed_in_u=False, + is_closed_in_v=False) -> hou.Surface + + Create a NURBS surface in the XY plane centered at the origin with size + (1, 1) and return it. You would typically call this method from the + code of a Python-defined SOP. + + rows, cols + Determines the size of the 2D array of vertices defining the control + points of the surface. The number of cols and rows in each + direction, must be equal to or larger than the U and V orders, + respectively. + + is_closed_in_u, is_closed_in_v + Controls if the surface is open or closed in each of the U and V + directionss; see hou.Surface.isClosedInU for more information. If + not specified, the default behavior is to build an open surface. + + order_u, order_v + Specifies the surface's order in each of the U and V directionss. + The default order for both is 4, corresponding to a cubic NURBS + surface. An order of 2, the lowest order, will give a surface with + linear segments, essentially a mesh. + + If the geometry contains primitive attributes, the new surface receives + the default values for those attributes. + + You can move or resize the surface using hou.Geometry.transformPrims. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Raises hou.OperationFailed if the number of rows and/or columns is + invalid. + + # This code will work from inside a Python SOP, but not from the Python + # shell. + geo = hou.pwd().geometry() + + # Create a surface with a 10x10 grid of vertices. + surf = geo.createNURBSSurface(10, 10) + + # Initially, the center is at (0, 0, 0), size is (1, 1, 1), on the XY + # plane. Scale to (20, 10) and rotate into the XZ plane. + geo.transformPrims((surf,), + hou.hmath.buildScale((20, 10, 1)) * + hou.hmath.buildRotateAboutAxis((1, 0, 0), 90)) + + See also: + + * hou.Geometry.transformPrims + * hou.Matrix4 + * hou.hmath """ + return Surface() + + def createBezierSurface(self, rows, cols, is_closed_in_u=False, + is_closed_in_v=False): + """ + createBezierSurface(self, rows, cols, is_closed_in_u=False, + is_closed_in_v=False) -> hou.Surface + + Create a Bezier surface in the XY plane centered at the origin with size + (1, 1) and return it. You would typically call this method from the + code of a Python-defined SOP. + + rows, cols + Determines the size of the 2D array of vertices defining the control + points of the surface. + + Note that the number of rows corresponds to v and the number or + columns corresponds to u, which can be slightly confusing. For + example, geo.createBezierSurface(9, 7, is_closed_in_u=False, + is_closed_in_v=True) is valid, but geo.createBezierSurface(9, 7, + is_closed_in_u=True, is_closed_in_v=False) raises + hou.OperationFailed. + + is_closed_in_u, is_closed_in_v + Determines if it is open or closed in each of the u and v + directions; see hou.Surface.isClosedInU for more information. + + order_u, order_v + Specifies the surface's order in of the U and V directions. The + default order for both is 4, corresponding to a cubic NURBS surface. + An order of 2, the lowest order, will give a surface with linear + segments, essentially a mesh. + + As with Bezier curves, a Bezier surface has some restrictions on the + point count in each of the U and V directions. For a given direction; if + it's open the number of points in the direction must be (order - 1) * n + + 1 for some integer n >= 1 (e.g. 4, 7, 10, ...). If it's open, the + number of points must be (order - 1) * n where n >= 1 in that direction + (e.g. 2, 4, 6, .. for order 3). + + You can move or resize the surface using hou.Geometry.transformPrims. + + If the geometry contains primitive attributes, the new surface receives + the default values for those attributes. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + import math + + # This code will work from inside a Python SOP, but not from the Python + # shell. + geo = hou.pwd().geometry() + + # Build a tube-like object about the y axis. + num_rows, num_cols = (10, 9) + surf = geo.createBezierSurface(num_rows, num_cols, is_closed_in_u=True) + for v_index in range(num_rows): + for u_index in range(num_cols): + angle = u_index * (2.0 * math.pi) / num_cols + surf.vertex(u_index, v_index).point().setPosition( + (math.cos(angle), v_index / float(num_cols-1), math.sin(angle))) + """ + return Surface() + + def createMeshSurface(self, rows, cols, is_closed_in_u=False, + is_closed_in_v=False): + """ + createMeshSurface(self, rows, cols, is_closed_in_u=False, + is_closed_in_v=False) -> hou.Surface + + Create a quadrilateral mesh surface in the XY plane centered at the + origin with size (1, 1) and return it. You would typically call this + method from the code of a Python-defined SOP. + + Note that a mesh object is not the same as a set of polygons defining + the same shape. A mesh object is a single primitive. + + See hou.Geometry.createNURBSSurface for more information. + """ + return Surface() + + def createVolume(self, xres, yres, zres, bounding_box=None): + """ + createVolume(self, xres, yres, zres, bounding_box=None) -> hou.Volume + + Given the x, y, and z resolution (or size) of a voxel array, add a new + volume primitive to the geometry and return it. The values in the new + volume's voxels are all zero. + + xres, yres, zres + Integers greater than zero that specify the size of the voxel array + in one dimension. Raises hou.OperationFailed if any of these values + are not positive. + + bounding_box + A hou.BoundingBox that specifies the volume's 3D size. Note that + this size is independent of the volume's voxel resolution. If this + parameter is None, Houdini uses a bounding box going from (-1,-1,-1) + to (1,1,1). + """ + return Volume() + + def transform(self, matrix): + """ + transform(self, matrix) + + Transforms (e.g. rotates, scales, translates, etc.) the geometry by a + transformation matrix. You would typically call this method from the + code of a Python-defined SOP. + + See hou.hmath for functions that build transformation matrices. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + + def transformPrims(self, prims, matrix): + """ + transformPrims(self, prims, matrix) + + Transforms a set of primitives (e.g. rotates, scales, translates, etc.) + by a transformation matrix. You would typically call this method from + the code of a Python-defined SOP. + + import math + + # This code will work from inside a Python SOP, but not from the Python + # shell. + + def createCircle(geo, num_vertices=10): + # Create a closed curve with the specified number of vertices. + curve = geo.createNURBSCurve(num_vertices) + curve.setIsClosed(True) + + # Arrange the points into a unit circle on the XZ plane, + # centered about the origin. + for i, vertex in enumerate(curve.vertices()): + angle = i * (2.0 * math.pi) / num_vertices + position = (math.cos(angle), 0, math.sin(angle)) + vertex.point().setPosition(position) + return curve + + # Create a bunch of circles on the XZ plane, tilt them slightly + # about X, translate them away from the origin, and rotate each + # one about the y axis by a different amount. + geo = hou.pwd().geometry() + num_copies = 20 + for i in range(num_copies): + curve = createCircle(geo) + geo.transformPrims([curve], + hou.hmath.buildRotateAboutAxis((1, 0, 0), 30) * + hou.hmath.buildTranslate((2, 0, 0)) * + hou.hmath.buildRotateAboutAxis((0, 1, 0), i * 360.0 / num_copies)) + + See hou.hmath functions that build transformation matrices. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + + def deletePrims(self, prims, keep_points=False): + """ + deletePrims(self, prims, keep_points=False) + + Delete a sequence of primitives. You would typically call this method + from the code of a Python-defined SOP. + + keep_points + if True, the primitive will be deleted but its points will remain. + + To delete a single primitive, pass in a sequence with one primitive. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + # Delete every other primitive: + prims = [p for p in geo.prims() if p.number() % 2 == 0] + geo.deletePrims(prims) + + # Delete the first primitive: + geo.deletePrims([geo.iterPrims()[0]]) + """ + + def deletePoints(self, points): + """ + deletePoints(self, points) + + Delete a sequence of points. You would typically call this method from + the code of a Python-defined SOP. + + Note that Houdini will delete any vertices that reference the point. For + example, suppose you have a box with 6 polygons, each with 4 vertices. + Also suppose that each point on the box is shared by 3 vertices on 3 + separate polygons. If you delete one of those points, Houdini will + remove each of those vertices from their corresponding polygons, leaving + 3 polygons with 4 vertices and 3 polygons with 3 vertices. + + To delete a single primitive, pass in a sequence with one point. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + + def addAttrib(self, type, name, default_value, transform_as_normal=False, + create_local_variable=True): + """ + addAttrib(self, type, name, default_value, transform_as_normal=False, + create_local_variable=True) -> hou.Attrib + + Create a new point, primitive, vertex, or global (a.k.a. detail) + attribute. Returns a hou.Attrib object describing the newly created + attribute. You would typically call this method from the code of a + Python-defined SOP. + + type + A hou.attribType value to specify if the new attribute should be a + point, primitive, vertex, or global attribute. + + name + The new attribute's name. Each attribute in the geometry must have + a unique name. + + default_value + The default value for this attribute. When an attribute is created, + all existing elements (e.g. primitives or points) will store this + value. As well, elements that you add later will also use this + value. + + This value also determines the attribute's data type, and may be one + of the following: + + * an integer + * a float + * a string + * an integer sequence + * a float sequence + If the default value is a sequence of integers or floats, the + sequence size will determine the attribute's size. Otherwise, the + attribute's size is 1. + + String attributes do not support a default value and use this value + solely for type determination. + + transform_as_normal + This parameter may only be set to True when the default value is a + sequence of 3 floats. For such attributes, Houdini will not modify + the attribute values when it transforms (translates, rotates, etc.) + the geometry. If you want to the attribute to be transformed as a + vector (such as a normal vector) when Houdini transforms the + geometry, set this parameter to True. + + create_local_variable + If True, Houdini will create a local variable for this attribute + that may be used in parameter expressions. The name of the local + variable is the attribute's name, all in upper case. The mapping + from attribute names to local variables is stored in a special + global attribute named "varmap". + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + Raises hou.OperationFailed if an attribute with this name already + exists. If you are familiar with the C++ Houdini Development Kit (HDK), + you know that Houdini can support attributes with the same name but with + different types. However, many SOPs do not let you distinguish between + attributes that have the same name, and multiple attributes with the + same name are discouraged. For this reason, you cannot create them with + this method. + + Raises hou.OperationFailed if transform_as_normal is True and the + default value is not a sequence of 3 floats. + + # Create an integer point attribute of size 1 named "population", and + # create 5 points with attribute values 0, 5, 10, 15, and 20. This code + # will work from inside a Python SOP, but not from the Python shell. + geo = hou.pwd().geometry() + population_attrib = geo.addAttrib(hou.attribType.Point, "population", 0) + for i in range(5): + point = geo.createPoint() + point.setPosition((i, 0, 0)) + point.setAttribValue(population_attrib, i * 5) + + The following example shows how to copy an existing attribute: + def copyAttrib(attrib, new_name): + return attrib.geometry().addAttrib( + attrib.type(), new_name, attrib.defaultValue(), attrib.isTransformedAsNormal()) + + + If create_local_variable is True, this function performs the equivalent + of the following code: + def addLocalVariable(geo, attrib_name): + '''Create a geometry attribute and add a local variable for it.''' + # The variable mappings are stored in the varmap attribute's string + # table. This table is different than varmap's current value, which + # simply refers to an entry in that table. So, to ensure an entry + # exists in the table, we simply set varmap's value. + map_value = "%s -> %s" % (attrib_name, attrib_name.upper()) + if geo.findGlobalAttrib("varmap") is None: + geo.addAttrib(hou.attribType.Global, "varmap", "") + geo.setGlobalAttribValue("varmap", map_value) + + + See also: + + * hou.Prim.setAttribValue + * hou.Point.setAttribValue + * hou.Prim.setAttribValue + * hou.Geometry.setGlobalAttribValue """ + return Attrib() + + def setGlobalAttribValue(self, name_or_attrib, attrib_value): + """ + setGlobalAttribValue(self, name_or_attrib, attrib_value) + + Set a global (a.k.a. detail) attribute value. The attribute may be + specified by name or by hou.Attrib object. You would typically call + this method from the code of a Python-defined SOP. + + Raises hou.OperationFailed if no attribute exists with this name or if + the attribute's data type does not match the value passed in. If the + attribute's size is more than 1, the attribute value must be a sequence + of integers/floats, and the size of the sequence must match the + attribute's size. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + # This code will work from inside a Python SOP, but not from the Python + # shell. + geo = hou.pwd().geometry() + geo.addAttrib(hou.attribType.Global, "author", "") + geo.addAttrib(hou.attribType.Global, "version", (0, 0, 0)) + geo.setGlobalAttribValue("author", "Joe") + geo.setGlobalAttribValue("version", (1, 0, 7)) + + See also: + + * hou.Geometry.attribValue + * hou.Point.setAttribValue + * hou.Prim.setAttribValue + * hou.Vertex.setAttribValue """ + + def attribValue(self, name_or_attrib): + """ + attribValue(self, name_or_attrib) -> int, float, str, or tuple + + Return the global (a.k.a. detail) attribute value for a particular + attribute. The attribute may be specified by name or by hou.Attrib + object. + + Raises hou.OperationFailed if no attribute exists with this name. + + REPLACES + detail function + detailattribsize function + details function """ + + def intrinsicNames(self): + """ + intrinsicNames(self) -> tuple of str + + Returns a tuple of strings representing the intrinsic values available + for this geometry. Different geometry types will have different + intrinsic values available. You can then get or set the value using + intrinsicValue and/or setIntrinsicValue. + + See the intrinsicValue method for more information. + """ + return ('',) + + def intrinsicValue(self, intrinsic_name): + """ + intrinsicValue(self, intrinsic_name) -> int, float, str, or tuple + + Gets the value of an "intrinsic", often computed, value of the + geometry, such as memoryusage, pointcount, pointattributes, and so on. + Raises OperationFailed if the given intrinsic name does not exist. + + You can also view these values in the user interface using the geometry + spreadsheet. + + In Houdini, some primitives have "intrinsic" values which can't be + accessed directly through the attribute interface. Most intrinsic values + are computed, such as measuredarea, however a few are writeable with the + setIntrinsicValue method. For example, sphere primitives have a + transform matrix as part of their definition. + + You can get a list of the available intrinsic value names with the + intrinsicNames method. Different geometry types will have different + intrinsic values available. + """ + + def intrinsicSize(self): return + def intrinsicReadOnly(self): return + def setIntrinsicValue(self, intrinsic_name, value): + """ + setIntrinsicValue(self, intrinsic_name, value) + + Some "intrinsic" values can be modified. For example, you change the + internal size and rotation (transform) of a sphere primitive by passing + a 16 float tuple representing the transform to setIntrinsicValue. Raises + Error if the intrinsic is not writeable or does not accept the passed + value, or if the given intrinsic name does not exist. + + + Modifying the geometry directly will lock the geometry's parent node. + + See the intrinsicValue method for more information. + """ + + def saveToFile(self, file_name): + """ + loadFromFile(self, file_name) + + Replace the contents of this geometry object with the data stored in a + file. You would typically call this method from the code of a Python- + defined SOP. + + You may specify any type of file supported by Houdini's File SOP. See + hou.Geometry.saveToFile for more information. + + Raises hou.OperationFailed if the file does not exist or otherwise + cannot be loaded. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + See also hou.Geometry.merge. + """ + + def loadFromFile(self, path): return + def merge(self, geometry): + """ + merge(self, geometry) + + Merge the points and primitives from another hou.Geometry object into + this one. The new points and primitives are appended to this geometry's + points and primitives. You would typically call this method from the + code of a Python-defined SOP. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + + See also hou.Geometry.loadFromFile. + """ + + def clear(self): + """ + clear(self) + + Remove everything from this geometry object. The geometry will have no + points or primitives after calling this method. + + Raises hou.GeometryPermissionError if this geometry is not modifiable. + """ + + def pointGroups(self): + """ + pointGroups(self) -> tuple of hou.PointGroup + + Return a tuple of all the point groups in the geometry. + + The following function returns the names of all the groups in the + geometry: + def pointGroupNames(geometry): + return [group.name() for group in geometry.pointGroups()] + + + REPLACES + pointgrouplist function """ + return (PointGroup(),) + + def findPointGroup(self, name): + """ + findPointGroup(self, name) -> hou.PointGroup or None + + Return the point group with the given name, or None if no such group + exists. + """ + return PointGroup() + + def createPointGroup(self, name, is_ordered=False): + """ + createPointGroup(self, name, is_ordered=False) -> hou.PointGroup + + Create a new point group in this geometry. + + name + The name of the new group. Raises hou.OperationFailed if a group + with this name already exists. + + is_ordered + Whether or not the new group should be ordered. See hou.PointGroup + for more information about ordered groups. + + Use hou.PointGroup.destroy to remove a primitive group from the + geometry. + """ + return PointGroup() + + def primGroups(self): + """ + primGroups(self) -> tuple of hou.PrimGroup + + Return a tuple of all the primitive groups in the geometry. + + REPLACES + primgrouplist function """ + return (PrimGroup(),) + + def findPrimGroup(self, name): + """ + findPrimGroup(self, name) -> hou.PrimGroup or None + + Return the primitive group with the given name, or None if no such group + exists. + """ + return PrimGroup() + + def createPrimGroup(self, name, is_ordered=False): + """ + createPrimGroup(self, name, is_ordered=False) -> hou.PrimGroup + + Create a new primitive group in this geometry. + + name + The name of the new group. Raises hou.OperationFailed if a group + with this name already exists. + + is_ordered + Whether or not the new group should be ordered. See hou.PrimGroup + for more information about ordered groups. + + Use hou.PrimGroup.destroy to remove a primitive group from the geometry. + """ + return PrimGroup() + + def edgeGroups(self): + """ + edgeGroups(self) -> tuple of hou.EdgeGroup + + Return a tuple of all the edge groups in the geometry. + """ + return (EdgeGroup(),) + + def findEdgeGroup(self, name): + """ + findEdgeGroup(self, name) -> hou.EdgeGroup or None + + name + The name of the edge group. + + Return the edge group with the given name, or None if no such group + exists. + """ + return EdgeGroup() + + def createEdgeGroup(self, name): + """ + createEdgeGroup(self, name) -> hou.EdgeGroup + + Create a new edge group in this geometry. + + name + The name of the new group. Raises hou.OperationFailed if a group + with this name already exists. + + Use hou.EdgeGroup.destroy to remove an edge group from the geometry. + """ + return EdgeGroup() + + def findEdge(self, p0, p1): + """ + findEdge(self, p0, p1) -> hou.Edge + + p0 + The first point that makes up the edge. See hou.Point for more + information. + + p1 + The second point that makes up the edge. See hou.Point for more + information. + + finds an edge given two points, or None if no such edge exists + """ + return Edge() + + def boundingBox(self): + """ + boundingBox(self) -> hou.BoundingBox + + Return an axis-aligned 3D bounding box that is sized and positioned to + be large enough to hold this geometry. + + REPLACES + bbox function """ + return BoundingBox() + + def nearestPrim(self, position): + """ + nearestPrim(self, position) -> (hou.Prim or None, float, float, float) + + Given a sequence of three floats containing a position, find the + location on the primitive closest to that position and return a tuple + containing that primitive, the u value on the primitive, the v value on + the primitive, and the distance to the primitive. + + Note that the first value in the return tuple can be None if there are + no primitives in the geometry. + + REPLACES + xyzdist function """ + return (Prim(), 0.0,0.0,0.0) + + def _guDetailHandle(self): return + +class GeometrySelection(object): + """ + hou.GeometrySelection + + Represents a component selection performed by the user in a viewport. + + Calling hou.SceneViewer.selectGeometry waits for the user to perform a + selection in the viewport, and returns an object of this type + representing the elected components. The returned selection can be + manipulated by converting it to a specific component type, grown, or + shrunk. Then the selection can be converted to a string that can be used + in a SOP node group parameter. + + If the selection contains components from more than one SOP, you can use + the hou.GeometrySelection.mergedNode function to create a Merge SOP + and/or Object Merge SOPs that brings all the referenced geometry into a + single node. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def ordered(self): + """ + ordered(self) -> bool + + Returns true if this is an ordered selection. This means that the order + in which the user selected the components is preserved. To have an + ordered selection, the ordered parameter needs to have been set to True + when calling hou.SceneViewer.geometrySelection. + """ + return True + + def geometryType(self): + """ + geometryType(self) -> hou.geometryType enum value + + Returns the type of component that was selected. + """ + return geometryType() + + def setGeometryType(self, type): + """ + setGeometryType(self, type) + + Changes the type of component contained in the selection, converting the + existing selection to the new comonent type. + """ + + def connectivity(self): + """ + connectivity(self) -> hou.connectivityType enum value + + Returns the hou.connectivityType that has been set on this geometry + selection. Unlesss you call hou.GeometrySelection.setConnectivity, this + function will return the no connectivity value. + """ + return connectivityType() + + def setConnectivity(self, connectivity): + """ + setConnectivity(self, connectivity) + + Sets the type of connectivity to enforce when modifying the selection. + The current selection is also expanded so that all connected components + (using the supplied style of connectivity) become part of the selection. + """ + + def primitiveTypes(self): + """ + primitiveTypes(self) -> tuple of hou.primitiveType enum values + + Returns a tuple containing all primitive types that are contained in the + selection. + """ + return (primitiveType(),) + + def setPrimitiveTypes(self, primitive_types): + """ + setPrimitiveTypes(self, primitive_types) + + Sets the tuple of primitive types allowed in the selection. Any + primtives that are not of an allowed type are removed from the + selection. Only has an effect if this is a primitive selection. + """ + + def nodes(self): + """ + nodes(self) -> tuple of Nodes + + Returns a tuple of all nodes referenced by the selection. + """ + return (Node(),) + + def selectionStrings(self, empty_string_selects_all=True, bool + force_numeric=False): + """ + selectionStrings(self, empty_string_selects_all=True, bool + force_numeric=False) -> tuple of strings + + Returns a tuple of strings that can be used to refer to the selected + components in each individual SOP node referenced by the selection. + """ + return ('',) + + def needsMergedNode(self, parent): + """ + needsMergedNode(self, parent) -> bool + + Returns true if a Merge SOP needs to be created in order to access all + components in the selection. + """ + return True + + def mergedNode(self, parent, creator_name, + force_keep_original_objects=False, display_original_objects=False): + """ + mergedNode(self, parent, creator_name, + force_keep_original_objects=False, display_original_objects=False) -> + Node + + Creates a Merge SOP that combines all the SOPs referenced by the + selection. Most selections will only reference a single SOP in which + case no Merge SOP is required, and the selected SOP will be returned. + """ + return Node() + + def mergedSelectionString(self, empty_string_selects_all=True, + force_numeric=False): + """ + mergedSelectionString(self, empty_string_selects_all=True, + force_numeric=False) -> string + + Returns a single string that can be used in group parameters of the + merged node returned by hou.GeometrySelection.mergedNode. If all + components are selected from a single node this is equivalent to the + first string in the tuple returned by + hou.GeometrySelection.selectionStrings. + """ + return '' + + def shrinkSelection(checkuv = True): + """ + shrinkSelection(checkuv = true) + + Removes components that are on the boundary of the selection. + """ + + def growSelection(self): + """ + growSelection() + + Expands the selection by adding all components that are connected to + components currently in the selection. + """ + +class GeometryViewport(object): + """ + hou.GeometryViewport + + REPLACES + * viewcamera + * viewhome + * viewwrite + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def type(self): + """ + type(self) -> hou.geometryViewportType enum value + """ + return geometryViewportType() + + def settings(self): + """ + settings(self) -> hou.GeometryViewportSettings + """ + return GeometryViewportSettings() + + def name(self): + """ + name(self) -> str + """ + return '' + + def home(self): + """ + home(self) + """ + + def homeAll(self): + """ + homeAll(self) + + Homes the viewport on all geometry objects. + """ + + def homeSelected(self): + """ + homeSelected(self) + Homes the viewport on the selected geometry. + """ + + def homeGrid(self): + """ + homeGrid(self) + Homes the viewport on the grid. + """ + + def homeNonTemplated(self): + """ + homeNonTemplated(self) + Homes the viewport on all non-templated geometry. + """ + + def frameAll(self): + """ + frameAll(self) + + Frames the viewport on all geometry objects. + """ + + def frameSelected(self): + """ + frameSelected(self) + + Frames the viewport on the selected geometry. + """ + + def frameGrid(self): + """ + frameGrid(self) + + Frames the viewport on the grid. + """ + + def frameNonTemplated(self): + """ + frameNonTemplated(self) + + Frames the viewport on all non-templated geometry. + """ + + def viewTransform(self): + """ + viewTransform(self) + + Returns the transform matrix of the viewport. + """ + return Matrix4() + + def camera(self): return ObjNode () + def setCamera(self, camera_node): + """ + setCamera(self, camera_node) + + Makes the viewport look through the given camera node. + """ + + def saveViewToCamera(self, camera_node): + """ + saveViewToCamera(self, camera_node) + + Saves the viewport's current view into the given camera node. It does + this by setting the camera's transform parameters to match the + viewport's view transform matrix. + """ + + def queryNodeAtPixel(self, x, y): + """ + queryNodeAtPixel(self, x, y) -> hou.ObjNode, hou.SopNode, or None + + Return the node draw at the specified pixel in the viewport, or None if + there is nothing there. The type of node returned depends on the level + of the viewer. + """ + return Node() + + def queryPrimAtPixel(self, node, x, y): + """ + queryPrimAtPixel(self, node, x, y) -> hou.Prim or None + + Return the primitive drawn at the specified pixel in the viewport, or + None if there is nothing there. The primitive returned will be a + subclass of hou.Prim. + + The parameter node is used to restrict the query to geometry within a + particular node. If node is None, then the query is unrestricted. + """ + return Prim() + + def queryInspectedGeometry(self): + """ + queryInspectedGeometry(self) -> hou.Geometry or None + + Return the geometry currently being inspected in the viewport, or None + when nothing is being inspected or when called outside of an inspect + script. + """ + return Geometry() + + def queryInspectedPrim(self): + """ + queryInspectedPrim(self) -> hou.Prim or None + + Return the primitive currently being inspected in the viewport, or None + when nothing is being inspected or when called outside of an inspect + script. The primitive returned will be a subclass of hou.Prim. + """ + return Prim() + + def mapToWorld(self, x, y): + """ + mapToWorld(self, x, y) -> tuple of (hou.Vector3, hou.Vector3) + + Convert viewport coordinates to world coordinates. Returns a ray + (direction vector and an origin point). + """ + return (Vector3(), Vector3()) + + def mapFromMouseChop(self, x, y): + """ + mapFromMouseChop(self, x, y) -> tuple of (hou.Vector3, hou.Vector3) + + Convert from the Mouse CHOP's X and Y screen values (which range from -1 + to 1) to viewport coordinates, where (0,0) is the bottom left corner of + the viewport. + """ + return (Vector3(), Vector3()) + +class GeometryViewportSettings(object): + """ + hou.GeometryViewportSettings + + REPLACES + * cplane + * viewbackground + * viewcamera + * viewcopy + * viewdisplay + * viewls + * viewname + * vieworthogrid + * viewprojection + * viewsnapshot + * viewtransform + * viewtype + * viewuvgrid + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def viewportType(self): + """ + viewportType(self) -> hou.geometryViewportType enum value + """ + return geometryViewportType() + + def normalScale(self): + """ + normalScale(self) -> float + """ + return 0.0 + + def setNormalScale(self, normal_scale): + """ + setNormalScale(self, normal_scale) + """ + + def camera(self): + """ + camera(self) -> ObjNode or None + + Return the camera or light node that the viewport is looking through. + Return None if the viewport is not looking through a camera or light + node. + """ + return ObjNode() + + def setCamera(self, camera_node): + """ + setCamera(self, camera_node) + Makes the viewport look through the given camera node. + """ + + def saveViewToCamera(self): + """ + saveViewToCamera(self, camera_node) + Saves the viewport's current view into the given camera node. It does + this by setting the camera's transform parameters to match the + viewport's view transform matrix. + """ + + def setSceneAntialias(self, aalevel): + """ + setSceneAntialias(self, aalevel) + Sets the viewports full-scene antialiasing level to one of 1, 2, 4 or 8. + This represents the number of samples rendered to produce a higher + quality image. Higher numbers produce better antialiasing, but this can + affect the viewport's rendering performance. + """ + + def sceneAntialias(self): + """ + sceneAntialias(self) + Returns the number of samples used to antialias the viewport. Possible + values are 1 (no antialiasing, default), 2, 4 or 8. + """ + +class _GUDetailHandle(object): + + def __init__(self): raise AttributeError, "No constructor defined" + def isReadOnly(self): return True + def destroy(self): return + +class hda(object): + """ + hou.hda + Module containing functions related to Houdini Digital Assets. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def installFile(file_path, oplibraries_file=None, + change_oplibraries_file=True, force_use_assets=False): + """ + installFile(file_path, oplibraries_file=None, + change_oplibraries_file=True, force_use_assets=False) + + Install all the node types defined in an otl file into the current + Houdini session. This function is equivalent to File > Install Digital + Asset Library... in Houdini. + + file_path + The otl file to load. + + oplibraries_file + The path to an OPlibraries file or None. OPlibraries files are text + files containing lists of otl files to load on startup. When + Houdini starts up it reads all the OPlibraries files it finds in the + Houdini path and loads all the otl files listed in them. By + creating OPlibraries files in $HOME/houdiniX.Y, $HSITE/houdiniX.Y, + $JOB, etc. you can create libraries that are specific to a + particular user, studio, job, etc. + + This parameter is only meaningful when change_oplibraries_file is + True. + + Note that OPlibraries are only used when the Use OPlibraries files + to find OTLS checkbox in the Configuration tab of the Operator Type + Manager is checked. + + If None or "Current HIP File", the otl file is loaded only into + the current Houdini session. The file name will also be saved in + the Hip file so that when the same Hip file is loaded, the otl file + will also be loaded automatically. + + If "Scanned OTL Directories", this is equivalent to the + installation menu entry in the Install Digital Asset Library dialog. + + change_oplibraries_file + When oplibraries_file is not None and this parameter is True, + Houdini will modify the OPlibraries file, adding the otl file to it. + + force_use_assets + When True, ensure that the definitions inside the otl file are + current. If they would not otherwise provide the current + definition, they are marked as preferred to ensure they are current. + See hou.HDADefinition.isPreferred for more information. + + Note that, if you do not store the path to the otl file in an + OPlibraries file, Houdini will store it in the current Houdini session. + So, when you load a hip file, it will try to load the otl files that it + references. + + REPLACES + otload command """ + + def uninstallFile(file_path, oplibraries_file=None, + change_oplibraries_file=True): + """ + uninstallFile(file_path, oplibraries_file=None, + change_oplibraries_file=True) + + Uninstall an otl file and all the node type definitions it provides from + the current Houdini session. The otl file and its contents on disk are + unchanged. + + You can set file_path to the special name "Embedded" to refer to the + digital assets embedded in the current hip file. The following example + removes any embedded digital asset definitions from the current Houdini + session: + hou.hda.uninstallFile("Embedded") + + + If oplibraries_file is not None and change_oplibraries_file is True, + Houdini will remove the path to the otl from the specified OPlibraries + file. See hou.hda.installFile for more information about these + parameters. + + If all the definitions of a node type are uninstalled, any instances of + that node type will warn that they are using an incomplete asset + definition. They will, however, retain their parameter values as spare + parameters. Installing an otl file with the missing node type will + restore those node instances and remove the warnings. + + See also hou.HDADefinition.destroy. + + REPLACES + otunload command """ + + def reloadFile(file_path): + """ + reloadFile(file_path) + + Reload the contents of an otl file, loading any updated digital asset + definitions inside it. + + You only need to call this function if an otl file was modified from + outside the current Houdini session. + + REPLACES + otrefresh command """ + + def expandToDirectory(file_path, directory_path): + """ + expandToDirectory(file_path, directory_path) + + Expand the contents of the otl file in file_path into the directory + directory_path. If the directory does not already exist it is created. + + When expanding an otl file, Houdini puts each digital asset definition + in the file into its own directory. As well, it puts each section + inside a definition into its own file. Each directory inside the + expanded file tree contains a Sections.List file that maps the actual + file or directory names into the section names, since section names may + contain characters that cannot occur in directory or file names. See + hou.HDASection for more information about sections. + + This function provides an easy way to inspect and modify the contents of + an otl file. See also hou.hda.collapseFromDirectory. + + REPLACES + otexpand command """ + + def collapseFromDirectory(file_path, directory_path): + """ + collapseFromDirectory(file_path, directory_path) + + Given a directory that contains a previously expanded otl file, collapse + it into the otl file specified by file_path. + + This function provides the inverse of hou.hda.expandToDirectory. + + REPLACES + otcollapse command """ + + def loadedFiles(self): + """ + loadedFiles() -> tuple of str + + Return a tuple of paths to the otl files that are loaded into the + current Houdini session. + + This method is can be approximately implemented as follows: + def loadedFiles(): + '''Return a list of otl files loaded into this Houdini session.''' + # Look through all the node types, and for those that have digital + # asset definitions, remember the otl file containing the definition. + result = [] + for category in hou.nodeTypeCategories().values(): + for node_type in category.nodeTypes().values(): + definition = node_type.definition() + if definition is None: + continue + if definition.libraryFilePath() not in result: + result.append(definition.libraryFilePath()) + return result + + + See hou.HDADefinition.isCurrent for an example. + + REPLACES + otrefresh command + otls command """ + return ('',) + + def renameSource(oplibraries_file, source_name=None): + """ + renameSource(oplibraries_file, source_name=None) + + Give a name to an OPlibraries file. This name appears in the Operator + Type Manager's list of OPlibraries file. If source_name is None, the + name is removed from the OPlibraries file. + + If the oplibraries_file does not already exist, it is created. + + See hou.hda.installFile for more information about OPlibraries files. + + REPLACES + otrenamesource command """ + + def definitionsInFile(file_path): + """ + definitionsInFile(file_path) -> tuple of hou.HDADefinition + + Return all the digital asset definitions inside an otl file. See + hou.HDADefinition for more information. + + Raises hou.OperationFailed if file_path does not refer to a valid otl + file. + + # Print the node types defined by digital assets in $HOME/houdiniX.Y/otls/OPcustom.otl: + >>> import os + >>> my_otl_file = "%s/otls/OPcustom.otl" % hou.homeHoudiniDirectory() + >>> for definition in hou.hda.definitionsInFile(my_otl_file): + ... print definition.nodeTypeCategory().name() + "/" + definition.nodeTypeName() + Sop/gcoggeo + Sop/gCogFlatGeo + Sop/gDivideAtCentroid + Object/gAxle + Object/gCog + + REPLACES + otglob command + otls command """ + return (HDADefinition(),) + + def componentsFromFullNodeTypeName(node_type_name): + """ + componentsFromFullNodeTypeName(node_type_name) -> tuple of str + + Returns a tuple of operator type name components that constitute the + full node type name. The components in the tuple appear in the following + order: scope network type, node type namespace, node type core name, and + version. + + >>> # Parse the full name into components + >>> hou.hda.componentsFromFullNodeTypeName('MyUserNamespace::MyHDA::2.5') + ('', 'MyUserNamespace', 'MyHDA', '2.5') + >>> hou.hda.componentsFromFullNodeTypeName('Sop/foreach::MyCounterHDA') + ('Sop/foreach', '', 'MyCounterHDA', '') + """ + return ('',) + + def fullNodeTypeNameFromComponents(scope_node_type, name_space, name, + version): + """ + fullNodeTypeNameFromComponents(scope_node_type, name_space, name, + version) -> str + + Returns a full node type name build out of the given components. The + arguments represent the following components: scope network type, node + type namespace, node type core name, and version. + + >>> # Compose the node type full name from components + >>> hou.hda.fullNodeTypeNameFromComponents('', 'userA', 'sphere', '') + 'userA::sphere' + >>> hou.hda.fullNodeTypeNameFromComponents('', 'userB', 'myHda', '2.6') + 'userB::myHda::2.6' + >>> hou.hda.fullNodeTypeNameFromComponents('Sop/foreach', '', 'MyCounterHDA', '') + 'Sop/foreach::MyCounterHDA' + """ + return '' + + def changeCurrentStoreUser(self): return + +class HDADefinition(object): + """ + hou.HDADefinition + + Represents the definition of a houdini digital asset (HDA). + + A digital asset definition defines a node type and exists inside an otl + file. The node type is implemented in terms of other nodes wired + together inside a subnet. These nodes inside the subnet are called the + definition's contents. + + An otl file contains one or more digital asset definitions, and + installing an otl file installs all the definitions in the file. When a + digital asset definition is installed, the node type it defines is added + to Houdini. Note that you can access an HDADefinition without + installing it. + + A digital asset's algorithm is determined by the nodes inside it. To + edit those nodes you create an instance of the digital asset, unlock it, + modify the contents, and save the definition. New digital asset + instances are normally locked, meaning that they are read-only, and they + automatically update when the asset's definition changes. An unlocked + instance is editable, does not update when the definition changes, and + you can save its contents to change the definition. + + To unlock a node, select Allow Editing of Contents or call + hou.Node.allowEditingOfContents. To save the contents of an unlocked + node to the definition, select Save Operator Type or call + hou.HDADefinition.updateFromNode. To revert an unlocked instance back + to the last saved definition and change it back into a locked instance, + select Match Current Definition or call hou.Node.matchCurrentDefinition. + + See also hou.hda and hou.HDAOptions. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def nodeType(self): + """ + nodeType(self) -> hou.NodeType + + Return the node type defined by this digital asset. Raises + hou.OperationFailed if the digital asset is not installed. + + REPLACES + otinuse command """ + return NodeType() + + def nodeTypeCategory(self): + """ + nodeTypeCategory(self) -> hou.NodeTypeCategory + + Return the node type category (e.g. Objects, SOPs, DOPs, etc.) for the + node type defined by this digital asset. See hou.NodeTypeCategory for + more information. + + It is safe to call this method if the digital asset is not installed. + If the digital asset is installed, this method is equivalent to + self.nodeType().category(). + + REPLACES + otls command """ + return NodeTypeCategory() + + def nodeTypeName(self): + """ + nodeTypeName(self) -> str + + Return the name of the node type defined by this digital asset. Raises + hou.OperationFailed if the digital asset is not installed. + + If the digital asset is installed, this method is a shortcut for + self.nodeType().name(). + + REPLACES + otinuse command + otls command """ + return '' + + def libraryFilePath(self): + """ + libraryFilePath(self) -> str + + Return the path to the otl file containing the digital asset's + definition. + + Note that it is possible to save an asset with a hip file, without + storing it in an otl file. In this case, this method returns + "Embedded". + + REPLACES + dsoinfo command + otgetotl command + otls command """ + return '' + + def embeddedHelp(self): + """ + embeddedHelp(self) -> str + + Return the help text embedded in the digital asset. Return an empty + string if no embedded help exists. + + Embedded help typically comes from the Help tab of the operator type + properties window, but it may also come from a dialog script. + """ + return '' + + def isInstalled(self): + """ + isInstalled(self) -> bool + + Return whether this definition is installed in Houdini. + + It is possible to access HDADefinition objects in otl files that are not + installed with hou.hda.definitionsInFile. + + See also hou.hda.installFile. + + REPLACES + otinuse command """ + return True + + def installed(self): return True + def isCurrent(self): + """ + isCurrent(self) -> bool + + Return whether this definition is the one currently in use by Houdini. + + This example shows how you can access other definitions for the same + node type: + def otherDefinitions(definition): + '''Given an HDADefinition object, return the other loaded definitions + for the same node type.''' + # Look through all the loaded otl files for definitions providing + # the same node type. + result = [] + for otl_file in hou.hda.loadedFiles(): + # Skip the otl file containing the definition that was passed in. + if otl_file == definition.libraryFilePath(): + continue + + for other_definition in hou.hda.definitionsInFile(otl_file): + if other_definition.nodeType() == definition.nodeType(): + result.append(other_definition) + return result + + + # Print the paths to otl files providing other definitions for a digital asset instance. + >>> for other_definition in otherDefinitions(hou.node("/obj/my_hda1").type().definition()): + ... print other_definition.libraryFilePath() + /path/to/file1.otl + /path/to/file2.otl + """ + return True + + def current(self): return True + def isPreferred(self): + """ + isPreferred(self) -> bool + + Return whether this definition is preferred. + + After loading otl files, Houdini uses a set of rules to resolve + conflicts when it encounters multiple definitions for the same node type + (e.g. preferring the most recent otl file, preferring definitions + embedded in the hip file, etc.). When these rules do not use the + definition you want, you can override them by explicitly marking a + definition as preferred. Houdini saves this list of preferred + definitions with the hip file. Marking a definition as not preferred + will remove it from this list, and the normal rules will apply again. + + REPLACES + otprefer command """ + return True + + def preferred(self): return True + def setIsPreferred(self, preferred): + """ + setIsPreferred(self, preferred) + + Set whether this definition is preferred. See + hou.HDADefinition.isPreferred for more information. + + REPLACES + otprefer command """ + + def setPreferred(self): return + def sections(self): + """ + sections(self) -> dict of str to hou.HDASection + + Return a dictionary mapping section names to hou.HDASection objects. See + hou.HDASection for more information on sections. + + REPLACES + otcontentls command """ + return {'':HDASection()} + def addParmFolder(self): + """ + Adds a folder to this node type’s parameters. + :return: + """ + + def addParmTuple(self): + """Add a parameter tuple to this node type’s parameters. Houdini places the new parameter at the bottom of the parameters in a particular folder. + """ + def addSection(name, contents=""): + """ + addSection(self, name, contents="") -> hou.HDASection + + Create a new section with the specified contents. If a section already + exists with this name, changes the existing contents to the new + contents. Note that the contents may contain binary data. Also note + that section names may contain '/'. + + See hou.HDASection for more information on sections. To remove a + section, use hou.HDASection.destroy. + + Sections can have associated properties stored in the + hou.HDADefinition.extraFileOptions. + + def addSectionFromFile(hda_definition, section_name, file_name): + '''Add a section whose contents come from a file. If the section + already exists, replace its contents.''' + section_file = open(file_name, "r") + hda_definition.addSection(section_name, section_file.read()) + section_file.close() + + REPLACES + otcontentadd command """ + return HDASection() + + def removeSection(name): + """ + removeSection(self, name) + + Remove an existing section. Only remove sections that you explicitly + added. Do not remove the special sections that Houdini uses to store + the contents of the digital asset definition, or Houdini will generate + errors or strange side effects. + + See hou.HDASection for more information on sections. Note that + hou.HDASection.destroy will also remove a section. + + Raises hou.OperationFailed if no such section exists in the definition. + """ + + def description(self): + """ + description(self) -> str + + Return the description for this definition's node type. Houdini uses + this description for user interface elements such as the TAB menu. This + description is also called the operator label in Houdini. + + See also hou.NodeType.description. + """ + return '' + + def setDescription(self, description): + """ + setDescription(self, description) + + Set the description for this definition's node type. Houdini uses this + description for user interface elements such as the TAB menu. This + description is also called the operator label in Houdini. + + See also hou.HDADefinition.description and hou.NodeType.description. + """ + pass + + def icon(self): + """ + icon(self) -> str + + Return the name or path of the icon for this definition's node type. + Note that Houdini uses its search path to locate icons, so you do not + need to pass in a full path. + + See also hou.NodeType.icon. + + REPLACES + otls command """ + return '' + + def setIcon(self, icon): + """ + setIcon(self, icon) + + Set the icon for this definition's node type. See + hou.HDADefinition.icon for more information. + """ + pass + + def minNumInputs(self): + """ + minNumInputs(self) -> int + + Return the minimum number of connected inputs that node instances of + this digital asset can have. If these inputs are not connected, the + node will generate an error. + + See also hou.NodeType.minNumInputs. + + REPLACES + otls command """ + return 0 + + def setMinNumInputs(self, min_num_inputs): + """ + setMinNumInputs(self, min_num_inputs) + + Set the minimum number of connected inputs that node instances of this + digital asset must have. min_num_inputs must be between 0 and 4, + inclusive. If a node does not have the minimum number of inputs, it + will generate an error. + """ + + def maxNumInputs(self): + """ + maxNumInputs(self) -> int + + Return the maximum number of inputs that node instances of this digital + asset can have. Return a number greater than 4 if this node type can + accept an unlimited number of inputs. + + See also hou.NodeType.maxNumInputs. + + REPLACES + otls command """ + return 0 + + def setMaxNumInputs(self, max_num_inputs): + """ + setMaxNumInputs(self, max_num_inputs) + + Set the maximum number of inputs that node instances of this digital + asset may have. This number must be greater than or equal to the + minimum number of inputs. If it is 5 or greater, Houdini will use a + merge SOP-style input connector that allows an unlimited number of + inputs. Otherwise, the node will have between 0 and 4 input connectors, + each of which may or may not be connected, that correspond to the subnet + indirect inputs inside the digital asset. + + See hou.Node.inputConnectors and hou.SubnetIndirectInput for more + information on input connectors and subnet indirect inputs. + """ + + def extraInfo(self): + """ + extraInfo(self) -> str + + Return a string storing extra information about the asset definition + that isn't stored elsewhere, like the representative node, guide + geometry, whether default parameters are hidden, etc. + + See also hou.HDADefinition.representativeNodePath and + hou.HDADefinition.hideDefaultParameters to more easily retrieve some + portions of the extra info. + + REPLACES + otls command """ + return '' + + def setExtraInfo(self, extra_info): + """ + setExtraInfo(self, extra_info) + + Set extra information about the asset definition that isn't stored + elsewhere, like the representative node, guide geometry, etc. This + string is encoded in a specific format, so it is recommended that you + only call this method with values returned from + hou.HDADefinition.extraInfo. + """ + + def hideDefaultParameters(self): + """ + hideDefaultParameters(self) -> bool + + Return whether the parameters that are common to nodes types in this + node type category are hidden or not. For example, nearly all objects + have common translation, rotation, scale, etc. parameters, and object + level digital assets have these parameters by default. If hidden, + though, these parameters are still there but are not displayed to the + user. + + Note that this value is also stored in the string returned by + hou.HDADefinition.extraInfo. + """ + return True + + def representativeNodePath(self): + """ + representativeNodePath(self) -> str + + Return the contents of the Representative Node field on the Basic tab of + the Type Properties dialog. + + For object-level digital assets that contain other object nodes, it is + possible to make Houdini treat your digital asset like a camera or light + by choosing a node inside the asset to represent it. For example, if + you choose a camera inside the asset as the representative node, + instances of the digital asset will appear in the viewport's list of + camera objects. + + Note that this value is also stored in the string returned by + hou.HDADefinition.extraInfo. + """ + return '' + + def comment(self): return '' + def setComment(self, comment): return + def version(self): return '' + def setVersion(self): return + def modificationTime(self): + """ + modificationTime(self) -> int + + Return the time when the definition was last modified. This time is + returned as a POSIX timestamp, such as is returned by time.time(). + + >>> import time + >>> time.ctime(hou.nodeType(hou.objNodeTypeCategory(), "toon_character"). + ... definition().modificationTime()) + 'Thu Nov 6 18:22:38 2008' + + REPLACES + otls command """ + return 0 + + def setModificationTime(self, time=-1): + """ + setModificationTime(self, time=-1) + + Set the modification time for the definition to the given POSIX + timestamp. If the time parameter is negative, uses the current time. + + See also hou.HDADefinition.modificationTime. + + REPLACES + ottouch command """ + + def options(self): + """ + options(self) -> hou.HDAOptions + + Return a hou.HDAOptions object for the options stored in this digital + asset. See hou.HDAOptions for more information. + """ + return HDAOptions() + + def setOptions(self, options): + """ + setOptions(self, options) + + Set this digital asset definition's options to the data in a + hou.HDAOptions object. See hou.HDAOptions for more information. + """ + + def updateFromNode(self, node): + """ + updateFromNode(self, node) + + Update and save the definition to match the contents of a given unlocked + instance of the asset. Calling this method is the same as selecting + Save Operator Type on the node's menu. + + def saveUnlockedNodes(): + '''Look through all the nodes in the file for unlocked digital asset + instances and save and lock them.''' + for node in hou.node("/").allSubChildren(): + if node.type().definition() is None or node.isLocked(): + continue + + node.type().definition().updateFromNode(node) + node.matchCurrentDefinition() + """ + + def save(self, file_name, template_node=None, options=None): + """ + save(self, file_name, template_node=None, options=None) + + Save the definition into an otl file. + + file_name + Where to save the definition. To save to the current otl file, use + the return value from hou.HDADefinition.libraryFilePath. + + template_node + Either None or a hou.Node object containing an unlocked instance of + the digital asset that defines the definition's new contents. If + None, this method does not update the definition's contents. + + options + Either None or a hou.HDAOptions object that specifies extra + behaviors of the definition. If template_node is not None, the + compressContents, lockContents, saveSpareParms, and + makeInitialParmsDefaults values of the hou.HDAOptions object are + used. Otherwise, only the compressContents value is used. + + See also hou.HDADefinition.updateFromNode for a way to save an unlocked + node's definition to the current otl file. See also + hou.HDADefinition.copyToHDAFile. + + REPLACES + otwrite command """ + + def copyToHDAFile(self, file_name, new_name=None, new_menu_name=None): + """ + copyToHDAFile(self, file_name, new_name=None, new_menu_name=None) + + Copy this definition into an otl file. + + file_name + The otl file where the definition will be saved. If the file does + not already exist, it will be created. If it already contains a + definition for this node type, it will be overwritten. + + new_name + The new name of the node type. If None, the definition will be + saved as the existing node type name. See also hou.NodeType.name. + + new_menu_name + The new description of the node type that appears in the tab menu. + If None, Houdini will use the existing description. Note that the + node type name must be unique within the otl file, so saving the + definition with a new description to an otl file containing a + definition with the old node name will still overwrite the existing + definition. See also hou.NodeType.description. + + REPLACES + otcopy command + otmerge command """ + + def destroy(self): + """ + destroy(self) + + Uninstall this definition and _delete it from the otl file_. Any node + instances of this asset will warn that they are using an incomplete + asset definition. + + See also hou.hda.uninstallFile. + + REPLACES + otdelete command """ + + def parmTemplateGroup(self): + """ + parmTemplateGroup(self) -> hou.ParmTemplateGroup + + Return the group of parm templates corresponding to the current + parameter layout for this node. + + You can edit the parameter layout for this node (add or remove spare + parameters, reorder or hide built-in parameters, etc.) by getting the + current parameter group, modifying it, and calling + hou.Node.setParmTemplateGroup with it. + + The following example creates a geometry object, adds a My Parms folder + to it, and adds a My Parm float parameter to it in that folder. The + parameters are added only to the geometry object created; other geometry + objects are unaffected. + + >>> node = hou.node("/obj").createNode("geo") + >>> group = node.parmTemplateGroup() + >>> folder = hou.FolderParmTemplate("folder", "My Parms") + >>> folder.addParmTemplate(hou.FloatParmTemplate("myparm", "My Parm", 1)) + >>> group.append(folder) + >>> node.setParmTemplateGroup(group) + + See hou.ParmTemplateGroup and the setParmTemplateGroup method for more + information and examples. + + REPLACES + opspare command """ + return ParmTemplateGroup() + + def setParmTemplateGroup(self, parm_template_group, + rename_conflicting_parms=False): + """ + setParmTemplateGroup(self, parm_template_group, + rename_conflicting_parms=False) + + Change the spare parameters for this node. + + parm_template_group + A hou.ParmTemplateGroup object containing the new parameter layout. + + rename_conflicting_parms + If True, parameters in the group with the same parm tuple names will + be automatically renamed. If False and there are parms with the + same name, this method raises hou.OperationFailed. + + Note that each node type has a set of parameters which must exist and + must be of certain types. If your parm template group does not contain + the required parameters for the node type the will be added at the + bottom and will be made invisible. Similarly, if your parm template + group attempts to modify the type, range, label, or other property of a + required parameter, all changes to that parameter other than visibility + settings will be ignored. + + This method is preferred over the other parameter-related methods in + this class (addSpareParmTuple, removeSpareParmTuple, + replaceSpareParmTuple, addSpareParmFolder, removeSpareParmFolder) + because it lets you more easily make manipulate parameters. + + See hou.HDADefinition.setParmTemplateGroup to change the parameter + interface of a digital asset. + + REPLACES + opspare command """ + + def setExtraFileOption(self, name, value, type_hint = + hou.fieldType.NoSuchField): + """ + setExtraFileOption(self, name, value, type_hint = + hou.fieldType::NoSuchField) + + Set an entry in the dictionary of extra file options. See + hou.HDADefinition.extraFileOptions for more information. + + name + The name of the option to set. + + value + An integer, float, string, hou.Vector2, hou.Vector3, hou.Vector4, + hou.Quaternion, hou.Matrix3, hou.matrix4, or sequence of numbers. + + type_hint + Used to determine the exact hou.fieldType desired when the specified + value type is not enough to unambiguously determine it. + + The following example function marks an section, such as OnCreated, as + containing Python code: + def markSectionAsPython(definition, section_name): + definition.setExtraFileOption(section_name + "/IsPython", True) + """ + + def removeExtraFileOption(self, name): + """ + removeExtraFileOption(self, name) + + Remove an entry in the dictionary of extra file options. See + hou.HDADefinition.extraFileOptions for more information. + + Raises hou.OperationFailed if there is no entry in the dictionary with + this name. + """ + + def compileCodeSection(self, source_section, destination_section): + """ + compileCodeSection(self, source_section, destination_section) + + This function is deprecated. Compiled VEX code should no longer be + stored inside of an HDA. + """ + + def extraFileOptions(self): + """ + extraFileOptions(self) -> dict of str to bool, int, float, str + + Return a dictionary containing the extra options attached to sections in + the asset's definition. For example, event handler scripts such as + OnCreated are stored as sections inside the asset, and extra metadata in + this dictionary determines whether Houdini runs these scripts as Python + as as Hscript. + + These is one dictionary for the entire asset, and keys in this + dictionary are usually of the form section_name/option_name. For + example, if the OnCreated section is marked as containing Python code, + this dictionary will contain "OnCreated/IsPython" set to True. + + Note that the contents of this dictionary are saved in the + ExtraFileOptions section and are encoded in a binary format. + + See also hou.HDADefinition.setExtraFileOption and + hou.HDADefinition.removeExtraFileOption. + """ + +class HDAModule(object): + """ + hou.HDAModule + + User-defined Python module containing functions, classes, and constants + that are stored with and accessed from a digital asset. + + In Python, a module lets you organize functions, classes, and constants + into a common namespace. For example, os is a module and os.getcwd is a + function inside that module, and you access the contents of a module by + looking up Python attributes on it. + + An HDAModule is a Python module that is associated with a particular + digital asset type. It lets you store a library of Python code in one + location in your asset, and you can invoke that code from parameters, + event handlers, and callbacks inside that asset. + + The module's source code is stored in the Python Module section of the + Scripts tab in the Type Properties dialog. For example, suppose the + digit asset is an object named gear and the Python Module section + contains the following: + + def position(): + return (hou.frame() * 1.2, 0.0, 3.2) + + def onButtonPress(): + print "you pressed the button" + + def onLoaded(): + print "onLoaded section running" + + Unlike regular Python modules, which you access by name, you access a + digital asset's Python module by calling hou.NodeType.hdaModule on its + node type. For example, suppose you created an object-level digital + asset named gear and put the above code in its Python Module section. + You could then access the contents of the Python module as follows: + + >>> node_type = hou.nodeType(hou.objNodeTypeCategory(), "gear") + >>> node_type.hdaModule().position() + (1.2, 0.0, 3.2) + >>> node_type.hdaModule().onButtonPress() + you pressed the button + + One use for the Python module is drive parameter expressions on nodes + inside the digital asset. For example, suppose /obj/gear1 is an + instance of the digital asset and /obj/gear1/geo1 is a node inside the + asset. You could put the following inside geo1's tx parameter + expression: + + hou.node("..").type().hdaModule().position()[0] + + For convenience, you can also access the module from a node instance of + the digital asset using hou.Node.hdaModule. So, you could simplify the + above expression to: + + hou.node("..").hdaModule().position()[0] + + And since you don't need to use the hou. prefix inside expressions, you + could further simplify it to: + + node("..").hdaModule().position()[0] + + The following example shows how you might run code in the module from + the Callback Script field of a button parameter: + hou.pwd().hdaModule().onButtonPress() + + + In an event handler script, such as On Loaded, you can use the kwargs + dict to access the node type: + kwargs["type"].hdaModule().onLoaded() + + + Note that Houdini creates a local kwargs dict that's accessible from the + Python Module, too. It contains one entry with the key "type", to + give you access to the hou.NodeType defined by the digital asset. + + If you find that a digital asset has too much Python code to store in + one module, it's possible to create submodules. For example, if you + want to create a submodule named bar, put its source code in a new + digital asset section (say, "bar_PythonModule"). Then, from the + Python Module section, you can write the following: + + import toolutils + bar = toolutils.createModuleFromSection("bar", kwargs["type"], "bar_PythonModule") + + bar now appears as a submodule of the main module. If, for example, the + bar_PythonModule section contains: + + def foo(): + return 3.2 + + then you could write the following from a parameter on the digital asset + node: + + pwd().hdaModule().bar.foo() + + Note that the Python Module code is stored in a section of the digital + asset named "PythonModule". For example, you can get a string + containing that source code using + node_type.definition().sections()["PythonModule"].contents(). + """ + + def __init__(self): raise AttributeError, "No constructor defined" + +class HDAOptions(object): + """ + hou.HDAOptions + + Stores miscellaneous options about a houdini digital asset (HDA). + + The contents of this object correspond to some of the checkboxes on the + Basic tab of the Type Properties dialog. These values are stored in the + TypePropertiesOptions section of a digital asset definition. + + Call hou.HDADefinition.options to get an HDAOptions instance. Note that + an instance of this class is simply a data structure, and is not + associated with an particular digital asset instance. In other words, + changing the values inside this object will not change the digital + asset. To save these values to the digital asset definition, call + hou.HDADefinition.setOptions. + + >>> node = hou.node("/obj/my_digital_asset1") + >>> definition = node.type().definition() + >>> print definition.sections()['TypePropertiesOptions'].contents() + ParmsFromVfl := 0; + PrefixDroppedParmName := 1; + UseDSParms := 1; + ForbidOutsideParms := 1; + LockContents := 1; + SaveSpareParms := 0; # <-- Currently 0 + CheckExternal := 1; + GzipContents := 1; + MakeDefault := 1; + PrefixDroppedParmLabel := 1; + UnlockOnCreate := 0; + + >>> options = definition.options() + >>> options.saveSpareParms() + False + >>> options.setSaveSpareParms(True) + >>> definition.setOptions(options) + >>> print definition.sections()['TypePropertiesOptions'].contents() + ParmsFromVfl := 0; + PrefixDroppedParmName := 1; + UseDSParms := 1; + ForbidOutsideParms := 1; + LockContents := 1; + SaveSpareParms := 1; # <-- Now 1 + CheckExternal := 1; + GzipContents := 1; + MakeDefault := 1; + PrefixDroppedParmLabel := 1; + UnlockOnCreate := 0; + + + """ + + def __init__(self, *args): + """ + __init__(self) + + Create an HDAOptions object with default settings. + + See the class documentation for more information. + """ + def checkForExternalLinks(self): + """ + checkForExternalLinks(self) -> bool + + Return whether the Check for External Node References option is set. + + If set, this option changes all absolute node references inside the + digital asset into relative references. + """ + return True + + def setCheckForExternalLinks(self,check_for_external_links): + """ + setCheckForExternalLinks(self, check_for_external_links) + + Sets the Check for External Node References option. See + hou.HDAOptions.checkForExternalLinks for more information. + """ + + def compressContents(self): + """ + compressContents(self) -> bool + + Return whether the Compress Contents option is on. + + When this option is set, Houdini compresses the contents of the asset + definition to reduce the size of the .otl file. Note that this option + only as effect when the result of hou.HDAOptions.lockContents is True. + """ + return True + + def setCompressContents(self, compress_contents): + """ + setCompressContents(self, compress_contents) + + Sets the Compress Contents option. See hou.HDAOptions.compressContents + for more information. + """ + + def compressionType(self): return + def setCompressionType(self): return + def forbidOutsideParms(self): + """ + forbidOutsideParms(self) -> bool + + Return whether the Forbid Linking Parameters from Outside this Subnet + option is set. + + When set, this option does not allow you to drag parameters from nodes + outside the contents of the digital asset. + """ + return True + + def setForbidOutsideParms(self, forbid_outside_parms): + """ + setForbidOutsideParms(self, forbid_outside_parms) + + Sets the Forbid Linking Parameters from Outside this Subnet option. See + hou.HDAOptions.forbidOutsideParms for more information. + """ + + def lockContents(self): + """ + lockContents(self) -> bool + + Return whether the Save Contents as Locked option is on. + + When this option is not set, Houdini will use a creation script to store + the contents of the digital asset instead of storing the node data. A + creation script cannot store extra data like locked SOPs, edit SOP + information, paint SOP information, etc. + + If this option is not set, new instances of the digital asset will be + locked, so the user can edit the contents. However, you probably do not + ever want to turn this option off. Instead, if you want to lock new + instances of the digital asset, see hou.HDAOptions.unlockNewInstances. + """ + return True + + def setLockContents(self, lock_contents): + """ + setLockContents(self, lock_contents) + + Sets the Save Contents as Locked option. See + hou.HDAOptions.lockContents for more information. + """ + + def makeInitialParmsDefaults(self): + """ + makeInitialParmsDefaults(self) -> bool + + Return whether the Save Defaults as Initial Parameters option is on. + + When set, this option uses the default values of the original parameters + as the initial values for new nodes, instead of their current values. + """ + return True + + def setMakeInitialParmsDefaults(self, make_initial_parms_defaults): + """ + setMakeInitialParmsDefaults(self, make_initial_parms_defaults) + + Sets the Save Defaults as Initial Parameters option. See + hou.HDAOptions.makeInitialParmsDefaults for more information. + """ + + def parametersFromVexCode(self): + """ + parametersFromVexCode(self) -> bool + + Return whether the Get Properties from VEX Code option is on. + + When this option is set, most properties and parameters of the operator + come from pragma statements in the VEX source code. + """ + return True + + def setParametersFromVexCode(self, parameters_from_vex_code): + """ + setParametersFromVexCode(self, parameters_from_vex_code) + + Sets the Get Properties from VEX Code option. See + hou.HDAOptions.parametersFromVexCode for more information. + """ + + def prefixDroppedParmLabels(self): return + def setPrefixDroppedParmLabels(self, prefix_dropped_parm_labels): + """ + setPrefixDroppedParmLabels(self, prefix_dropped_parm_labels) + + Sets the Prefix Dropped Parameter Labels option. See + hou.HDAOptions.prefixDroppedParmLabels for more information. + """ + + def prefixDroppedParmNames(self): + """ + prefixDroppedParmNames(self) -> bool + + Return whether the Prefix Dropped Parameter Names option is on. + + When this option is set, Houdini will not include a prefix on parameter + names when you drag and drop parameters into the Existing Parameters + areas of the Parameters tab of the Type Properties dialog. + + See also hou.HDAOptions.prefixDroppedParmLabels. + """ + return True + + def setPrefixDroppedParmNames(self, prefix_dropped_parm_names): + """ + setPrefixDroppedParmNames(self, prefix_dropped_parm_names) + + Sets the Prefix Dropped Parameter Names option. See + hou.HDAOptions.prefixDroppedParmNames for more information. + """ + + def saveInitialParmsAndContents(self): + """ + saveInitialParmsAndContents(self) -> bool + + Return whether the Save Initial Contents and Parameters option is on. + + When this option is set, Houdini saves any parameter values and node + contents referenced by the digital asset to be saved as part of the + asset's definition. + """ + return True + + def setSaveInitialParmsAndContents(self, save_initial_parms_and_contents): + """ + setSaveInitialParmsAndContents(self, save_initial_parms_and_contents) + + Set the Save Initial Contents and Parameters option. See + hou.HDAOptions.saveInitialParmsAndContents for more information. + """ + + def unlockNewInstances(self): + """ + unlockNewInstances(self) -> bool + + Return whether the Unlock New Nodes on Creation option is set. + + When this option is set, Houdini will unlock new instances of the + digital asset when they are created. Note that this option only has + effect when the result of hou.HDAOptions.lockContents is True. + """ + return True + + def setUnlockNewInstances(self,unlock_new_instances): + """ + setUnlockNewInstances(self, unlock_new_instances): + + Sets the Unlock New Nodes on Creation option. See + hou.HDAOptions.unlockNewInstances for more information. + """ + + def saveSpareParms(self): + """ + saveSpareParms(self) -> bool + + Return the Save Spare Parameters option. + + When set, this option will add code into the asset creation script to + recreate the node's current spare parameters. New node instances of the + digital asset will contain the same spare parameters as those on the + representative node. + """ + return True + + def setSaveSpareParms(self, save_spare_parms): + """ + setSaveSpareParms(self, save_spare_parms) + + Set the Save Spare Parameters option. See hou.HDAOptions.saveSpareParms + for more information. + """ + + def saveCachedCode(self): + """ + saveCachedCode(self) -> bool + + Return the Save Cached Code option. + + When set, this option will save cached code for applicable definitions, + such as digital assets defined by VOP networks that generate VEX code. + With this option on, the compiled code will be saved to the HDA + section(s) and will be used for shaders, etc, without the need to + recompile the network. This can save significant amounts of time for + complex shaders. + """ + return True + + def setSaveCachedCode(self, save_cached_code): + """ + setSaveCachedCode(self, save_cached_code) + + Set the Save Cached Code option. See hou.HDAOptions.saveCachedCode for + more information. + """ + +class HDASection(object): + """ + hou.HDASection + + Represents a "section" of data stored along with a digital asset. + + A digital asset stores its contents in a number of different pieces of + data called sections. Each section is named and contains an arbitrarily + sized piece of data, often textual. Each section is like a file + embedded inside the definition, and Houdini uses specially named + sections to store the node contents, list of parameters, etc. You can + embed your own data into a digital asset by putting it inside a section. + + Any parameter in Houdini that references a file can also reference a + section inside a digital asset. For example, if car is an object-level + digital asset and the section is named "texture.jpg", you can + reference that texture with opdef:/Object/car?texture.jpg. Note that + hou.readFile also supports this opdef: syntax. + + By moving files into digital asset sections, you can build self- + contained digital assets that can be distributed via a single otl file. + + Note that section names may contain '/'. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def definition(self): + """ + definition(self) -> hou.HDADefinition + + Return the digital asset definition containing this section. + """ + return HDADefinition() + + def name(self): + """ + name(self) -> str + + Return the name of this section. + + Note that is is not possible to rename a section, but the following + function will emulate renaming: + def renameSection(section): + '''Rename a section by removing it and creating a new one. Return the new section.''' + new_section = section.definition().addSection(new_name, section.contents()) + section.destroy() + return new_section + """ + return '' + + def contents(self): + """ + contents(self) -> str + + Return a string containing the contents of this section. + + def saveSectionToFile(section, file_name): + '''Given a section, save it to a file.''' + section_file = file(file_name, "w") + section_file.write(section.contents()) + section_file.close() + + REPLACES + otcontentsave command """ + return '' + + def setContents(self, contents): + """ + setContents(self, contents) + + Set the contents of this section to the given string. A section may + contain binary information, like bgeo files, images, etc. + + See hou.HDADefinition.addSection for an example of how to create a + section from a file on disk. + """ + + def size(self): + """ + size(self) -> int + + Return the number of bytes in the contents. This method is a shortcut + for len(self.contents()). + + REPLACES + otcontentls command """ + return 0 + + def modificationTime(self): + """ + modificationTime(self) -> int + + Return the time when the section was last modified. This time is + returned as a POSIX timestamp, such as is returned by time.time(). + + >>> hou.nodeType(hou.cop2NodeTypeCategory(), "colorwheel").definition() + + >>> definition = hou.nodeType(hou.cop2NodeTypeCategory(), "colorwheel").definition() + >>> definition.sections().keys() + ['VflCode', 'DialogScript', 'VexCode'] + >>> section = definition.sections()['VflCode'] + >>> section.modificationTime() + 1177535169 + >>> import datetime, time + >>> datetime.datetime.fromtimestamp(section.modificationTime()) + datetime.datetime(2007, 4, 25, 17, 6, 9) + >>> time.ctime(section.modificationTime()) + 'Wed Apr 25 17:06:09 2007' + + REPLACES + otcontentls command """ + return 0 + + def destroy(self): + """ + destroy(self) + + Remove this section from the HDA definition. You can also remove a + section with hou.HDADefinition.removeSection, and this method is + equivalent to self.definition().removeSection(self.name()). + + Only remove sections that you explicitly added. Do not remove the + special sections that Houdini uses to store the contents of the digital + asset definition, or Houdini will generate errors or strange side + effects. + + To add a section, use hou.HDADefinition.addSection. + + REPLACES + otcontentdelete command """ + +class HelpBrowser(PaneTab): + """ + hou.HelpBrowser + + Class representing a help browser pane tab. Provides methods for + controlling the help browser. + + REPLACES + * helpbrowser + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def displayHelp(self, node_type): + """ + displayHelp(self, node_type) + + Loads the help for the specified node type. + + Raises HOM_ObjectWasDeleted if the help browser pane tab was deleted. + """ + return _hou.HelpBrowser_displayHelp(*args) + + def displayHelpPath(self, help_path): + """ + displayHelpPath(self, help_path) + """ + + def homePage(self): + """ + homePage(self) -> str + + Returns the home page URL of this help browser. + + Raises HOM_ObjectWasDeleted if the help browser pane tab was deleted. + """ + return '' + + def setHomePage(self, home_page): + """ + setHomePage(self, home_page) + + Sets the home page for this help browser to the specified URL. + + Raises HOM_ObjectWasDeleted if the help browser pane tab was deleted, + and raises HOM_Error if home_page is not given. + """ + + def url(self): + """ + url(self) -> str + + Return the current URL of this help browser. + + Raises HOM_ObjectWasDeleted if the help browser pane tab was deleted. + """ + return '' + + def setUrl(self, url): + """ + setUrl(self, url) + + Loads the specified URL. + + Raises HOM_ObjectWasDeleted if the help browser pane tab was deleted, + and raises HOM_Error if url is not given. + """ + + def showUI(self, show): + """ + showUI(self, show) + + Shows or hides the help browser's navigation controls. + + Raises HOM_ObjectWasDeleted if the help browser pane tab was deleted. + """ + +class hipFile(object): + """ + hou.hipFile + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def save(file_name=None, save_to_recent_files=True): + """ + save(file_name=None, save_to_recent_files=True) + + Saves the current session to a hip file. + + file_name + The name or path to the file that will be written. If you attempt + to save a file to a directory that does not exist, the directory + will be created. If this parameter is None, Houdini will use the + current hip file path. + + save_to_recent_files + Whether Houdini will add this file to the contents of the File > + Open Recent Files list. This parameter is ignored when this + function is called from a non-graphical session. + + Raises hou.OperationFailed if the target file or directory cannot be + created or if other errors occur during save. The same exception will + also be raised if the method is called during shutting down or + loading/saving a hip file. In each case, the exception instance message + will reflect the failure reason. + + REPLACES + mwrite command """ + + def saveAndIncrementFileName(self): + """ + saveAndIncrementFileName() + + Saves the current session to a hip file, automatically incrementing the + file name. + + Raises hou.OperationFailed if the target file or directory cannot be + created or if other errors occur during save. The same exception will + also be raised if the method is called during shutting down or + loading/saving a hip file. In each case, the exception instance message + will reflect the failure reason. + + REPLACES + mwrite command """ + + def saveAsBackup(self): + """ + saveAsBackup() + + Creates a numbered backup from the current session. + + If a file with the same name as the current backup already exists, then + the backup is renamed to contain the next number in the sequence before + saving. The backup files are saved in the directory set in the + environment variable HOUDINI_BACKUP_DIR. If HOUDINI_BACKUP_DIR is not + set, then a default relative directory called "backup" is used. + + Raises hou.OperationFailed if the target file or directory cannot be + created or if other errors occur during save. The same exception will + also be raised if the method is called during shutting down or + loading/saving a hip file. In each case, the exception instance message + will reflect the failure reason. + + REPLACES + mwrite command """ + + def basename(self): + """ + basename() -> str + + Return only the filename portion of the current hip file. + """ + return '' + + def name(self): + """ + name() -> str + + Return the name of the current hip file. + + This function may or may not return a full path. If you need to always + get a full path, use hou.hipFile.path instead. + """ + return '' + + def path(self): + """ + path() -> str + + Return a full path to the current hip file. + """ + return '' + + def setName(file_name): + """ + setName(file_name) + + Changes the name of the current session for the next time it is saved to + a hip file. + + If the user subsequently chooses File > Save, Houdini saves to a hip + file with this name. Note that this function does not actually save the + hip file. To both set the name of the current session and save it to a + hip file, use hou.hipFile.save. + """ + + def clear(suppress_save_prompt=False): + """ + clear(suppress_save_prompt=False) + + This function replaces the current session with an empty session. + + If suppress_save_prompt is set to False, the method acts as File > New + in an interactive session. It prompts you to save the current file + before clearing. Otherwise, the session is cleared non-interactively: no + prompts appear and any changes are discarded. + + If the UI is not available (for example, if you run the method from + hython), the suppress_save_prompt parameter is ignored and non- + interactive clear is always performed. + + REPLACES + mnew command """ + + def load(file_name, suppress_save_prompt=False, ignore_load_warnings=False): + """ + load(file_name, suppress_save_prompt=False, ignore_load_warnings=False) + + Loads a hip file. + + If suppress_save_prompt is False, the function acts as if the file was + loaded via File > Open.... It prompts you to save the current file + before loading the new file and displays any load errors in a pop-up + window. It also changes the name of the current file at the top of the + main window and adds the file name to the list of most recently used + files. + + If the UI is not available (for example, if you run the function from + hython), the suppress_save_prompt parameter is ignored and non- + interactive load is always performed. + + Raises hou.OperationFailed if the file to be loaded does not exist or + cannot be opened. The same exception will also be raised if the method + is called during shutting down or loading/saving a hip file. In each + case, the exception instance message will reflect the failure reason. + + Raises hou.LoadWarning if warnings are generated during load and + ignore_load_warnings is False. The instance message will contain the + warning text. + + REPLACES + mread command """ + + def merge(file_name, node_pattern="*", overwrite_on_conflict=False, + ignore_load_warnings=False): + """ + merge(file_name, node_pattern="*", overwrite_on_conflict=False, + ignore_load_warnings=False) + + Merges the given file into the current hip file. The nodes to merge in + are indicated by the node_pattern parameter. + + If overwrite_on_conflict is True, the method will overwrite nodes with + the same name as nodes in the merge file. + + This method will raise a hou.OperationFailed exception if the file to be + merged into the current one does not exist or cannot be opened. The same + exception will also be raised if the method is called during shutting + down or loading/saving a hip file. In each case, the exception instance + message will reflect the failure reason. + + This method will raise a hou.LoadWarning exception if warnings are + generated during merge and ignore_load_warnings is False. The instance + message will contain the warning text. + + REPLACES + mread command """ + + def collisionNodesIfMerged(file_name, node_pattern="*"): + """ + collisionNodesIfMerged(file_name, node_pattern="*") -> tuple of + hou.Node + + Returns the Nodes that would collide if a merge was performed with the + specified node_pattern. + + The result is a tuple of all Nodes in the merge file satisfying the + node_pattern and having the same name as any of the existing nodes. + + Raises hou.OperationFailed if the file to be used in the collision check + does not exist, cannot be opened, or is not a valid hip file. The same + exception will also be thrown if the method is called during shutting + down or loading/saving a hip file. In each case, the exception instance + message will reflect the failure reason. + """ + return (Node(),) + + def isLoadingHipFile(self): + """ + isLoadingHipFile() -> bool + + Return whether the main application is loading a hip file. + + REPLACES + opisloading function """ + return True + + def isShuttingDown(self): + """ + isShuttingDown() -> bool + + Return whether the main application is shutting down. + + REPLACES + opisquitting function """ + return True + + def hasUnsavedChanges(self): + """ + hasUnsavedChanges() -> bool + + Returns whether the current Houdini session has been modified since it + was last saved. + """ + return True + +class hmath(object): + """ + hou.hmath + + Houdini and 3D related math functions. + + + """ + + def buildTranslate(values): + """ + Return a transformation matrix containing only a translation. You can build more complex transformations by multiplying the result with another transformation matrix. + values + + A sequence of 3 floats representing the translation in x, y, and z. + + See hou.Geometry.transformPrims and hou.Matrix4.explode for examples. + """ + return Matrix4() + + def buildRotateAboutAxis(axis, angle_in_deg): + """ + Return a transformation matrix containing only a rotation, given an axis and a rotation amount. You can build more complex + transformations by multiplying the result with another transformation matrix. + + See hou.Geometry.transformPrims and hou.Matrix4.explode for examples. + + If you want to convert Euler angles into a corresponding axis and angle, you can use the following code: + + + def extractAxisAndAngleFromRotateMatrix(m): + '''Given a matrix, return an (Vector3, float) tuple containing the + axis and angle. See Wikipedia's rotation represention page for + more details.''' + import math + + acos_input = (m.at(0, 0) + m.at(1, 1) + m.at(2, 2) - 1.0) * 0.5 + if acos_input < -1.0 or acos_input > 1.0: + return None + + angle = math.acos(acos_input) + if angle >= -1e-6 and angle <= 1e-6: + # There is no rotation. Choose an arbitrary axis and a rotation of 0. + return hou.Vector3(1, 0, 0), 0.0 + + inv_sin = 1.0 / (2.0 * math.sin(angle)) + axis = hou.Vector3( + (m.at(1, 2) - m.at(2, 1)) * inv_sin, + (m.at(2, 0) - m.at(0, 2)) * inv_sin, + (m.at(0, 1) - m.at(1, 0)) * inv_sin) + return axis, hou.hmath.radToDeg(angle) + + def eulerToAxisAndAngle(angles): + return extractAxisAndAngleFromRotateMatrix(hou.hmath.buildRotate(angles)) + + See Wikipedia’s axis angle page and rotation representation page for more information. + """ + return Matrix4() + + def buildRotate(values, order='xyz'): + """ + Return a transformation matrix containing only a rotation, given a sequence of Euler angles. You can build more complex transformations by multiplying the result with another transformation matrix. + values + + A sequence of 3 floats representing the rotations about each of the x, y, and z axes. Each rotation value is in degrees. + order + + A string containing a permutation of the letters x, y, and z that determines the order in which rotations are performed about the coordinate axes. + + See Wikipedia’s Euler angles page for more information. + + See hou.Matrix4.explode for an example. See also hou.hmath.buildRotateAboutAxis and hou.hmath.radToDeg. + """ + return Matrix4() + def buildRotateToFrame(new_z_axis, new_y_axis): + """ + This feature is not yet implemented + """ + return Matrix4() + + def buildScale(values): + """ + Return a transformation matrix containing only a scale, given a sequence of scale values for x, y, and z. You can build more complex transformations by multiplying the result with another transformation matrix. + To apply a uniform scale, use the same value for x, y, and z. + See hou.Geometry.createNURBSSurface and hou.Matrix4.explode for examples. + """ + return Matrix4() + def buildShear(values): + """ + Return a transformation matrix containing only a shear, given a sequence of shear values for x, y, and z. You can build more complex transformations by multiplying the result with another transformation matrix. + See Wikipedia’s shear matrix page for more information. + See hou.Matrix4.explode for an example. + """ + return Matrix4() + def buildTransform(values_dict, transform_order="srt", rotate_order="xyz"): + """ + Given a set of translate, rotate, scale, shear, and pivot values; and transform rotate orders, return a corresponding matrix. This function is the inverse of hou.Matrix4.explode. + values_dict + A dictionary whose keys are one of the strings “translate”, “rotate”, “scale”, “shear”, “pivot” and whose values are sequences of three floats. Note that the rotate values are Euler angles about the x, y, and z axes, in degrees. + transform_order + A string containing a permutation of the letters s, r, and t. The rotate, scale, and translate results are dependent on the order in which you perform those operations, and this string specifies that order. + rotate_order + A string containing a permutation of the letters x, y, and z that determines the order in which rotations are performed about the coordinate axes. + This function can be approximately implemented as follows: + + def buildTransform(values_dict, transform_order="srt", rotate_order="xyz"): + # Take the return value from explode, along with the transform and + # rotate order, and rebuild the original matrix. + result = hou.hmath.identityTransform() + for operation_type in transform_order: + if operation_type == "t": + result *= hou.hmath.buildTranslate(values_dict["translate"]) + elif operation_type == "s": + result *= hou.hmath.buildScale(values_dict["scale"]) + if "shear" in values_dict: + result *= hou.hmath.buildShear(values_dict["shear"]) + elif operation_type == "r": + result *= hou.hmath.buildRotate(values_dict["rotate"], rotate_order) + else: + raise ValueError("Invalid transform order") + return result + """ + return Matrix4() + + def identityTransform(): + """ + Returns the identity matrix. This is the same as calling hou.Matrix4(1). + >>> hou.hmath.identityTransform() + + See also hou.Matrix4.__init__. + """ + return Matrix4() + + def degToRad(degrees): + """ + Given a value in degrees, return the corresponding value in radians. + This function is equivalent to degrees * math.pi / 180.0. + """ + return 0.0 + + def radToDeg(radians): + """ + Given a value in radians, return the corresponding value in degrees. + This function is equivalent to radians * 180.0 / math.pi. + """ + return 0.0 + def clamp(value, min, max): + """ + Returns the value clamped to the range min to max. See also hou.hmath.wrap. This function is useful in expressions to prevent a value from going outside the specified range. + """ + return 0.0 + + def wrap(value, min, max): + """ + Similar to the hou.hmath.clamp function in that the resulting value will always fall between the specified minimum and maximum value. However, it will create a saw-tooth wave for continuously increasing or decreasing parameter values. + """ + pass + def sign(value): + """ + Returns 1.0 if value is positive, -1.0 if negative and 0.0 if value is zero. + Note that you can achieve the same effect with Python’s built-in cmp function: float(cmp(value, 0)). + """ + return 0 + + def smooth(value, min, max): + """ + Takes a value and range and returns a smooth interpolation between 0 and 1. + When value is less than min, the return value is 0. If value is greater than max, the return value is 1. + >>> hou.hmath.smooth(5, 0, 20) + 0.15625 + >>> hou.hmath.smooth(10, 0, 20) + 0.5 + >>> hou.hmath.smooth(15, 0, 20) + 0.84375 + # Visualize the output of this function by positioning geometry objects at various locations. + def createSpheres(num_spheres=40): + for i in range(num_spheres): + sphere = hou.node("/obj").createNode("geo").createNode("sphere") + sphere.parmTuple("rad").set((0.1, 0.1, 0.1)) + sphere.setDisplayFlag(True) + + # Given a value between 0 and 5, we'll call smooth with a range + # of 0 to 3, and the resulting y value will be between 0 and 1. + x = 5.0 * i / num_spheres + y = hou.hmath.smooth(x, 0, 3) + sphere.parent().setParmTransform(hou.hmath.buildTranslate((x, y, 0))) + """ + return 0.0 + + def fit(value, old_min, old_max, new_min, new_max): + """ + Returns a number between new_min and new_max that is relative to the value between the range old_min and old_max. If the value is outside the old_min to old_max range, it will be clamped to the new range. + >>> hou.hmath.fit(3, 1, 4, 5, 20) + 15.0 + """ + return 0.0 + + def fit01(value, new_min, new_max): + """ + Returns a number between new_min and new_max that is relative to the value between the range 0 and 1. If the value is outside the 0 to 1 range, it will be clamped to the new range. + This function is a shortcut for hou.hmath.fit(value, 0.0, 1.0, new_min, new_max). + """ + return 0.0 + + def fit10(value, new_min, new_max): + """ + Returns a number between new_min and new_max that is relative to the value between the range 1 to 0. If the value is outside the 1 to 0 range, it will be clamped to the new range. + This function is a shortcut for hou.hmath.fit(value, 1.0, 0.0, new_min, new_max). + """ + return 0.0 + + def fit11(value, new_min, new_max): + """ + Returns a number between new_min and new_max that is relative to the value between the range -1 to 1. If the value is outside the -1 to 1 range, it will be clamped to the new range. + This function is a shortcut for hou.hmath.fit(value, -1.0, 1.0, new_min, new_max). + """ + return 0.0 + def modularBlend(value1, value2, modulus, blend_factor): + """ + This feature is not yet implemented + """ + return + def rand(seed): + """ + Returns a pseudo-random number from 0 to 1. Using the same seed will always give the same result. + """ + return 0.0 + def noise1d(self, pos): + """ + Given a sequence of 1 to 4 floats representing a position in N-dimensional space, return a single float corresponding to 1 dimensional noise. + This function matches the output of the noise function from VEX. + """ + return 0.0 + + def noise3d(self, pos): + """ + Given a sequence of 1 to 4 floats representing a position in N-dimensional space, return a hou.Vector3 object representing the vector noise at the given position. + This function matches the output of the noise function from VEX. + """ + return hou.Vector3 + + def sparseConvolutionNoise(pos3): + pass + def sparseConvolutionTurbulantNoise(pos3, depth): + return 0.0 + def turbulantNoise(pos3, depth): + return 0.0 + def orient2d(pa, pb, point): + """ + Performs an adaptive exact sidedness test of the 2d point against the line defined by pa and pb. + See http://www.cs.cmu.edu/~quake/robust.html for details of the implementation. + """ + return 0.0 + def orient3d(pa, pb, pc, point): + """ + Performs an adaptive exact sidedness test of the 3d point against the plane defined by pa, pb, and pc. + See http://www.cs.cmu.edu/~quake/robust.html for details of the implementation. + """ + return 0.0 + def inCircle(pa, pb, pc, point): + """ + Performs an adaptive exact inside test of the 2d point against the circle defined by pa, pb, and pc. pa, pb, and pc must be in counter-clockwise order to get a positive value for interior points. + See http://www.cs.cmu.edu/~quake/robust.html for details of the implementation. + """ + return 0.0 + def inSphere(pa, pb, pc, pd, point): + """ + Performs an adaptive exact inside test of the 3d point against the sphere defined by pa, pb, pc, and pd. Note that inconsistent orientation of the four sphere defining points will reverse the sign of the result. + See http://www.cs.cmu.edu/~quake/robust.html for details of the implementation. + """ + return 0.0 + +class IndexPairPropertyTable(object): + """ + hou.IndexPairPropertyTable + + Describes properties of an index pair attribute. + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def attrib(self): + """ + attrib(self) -> hou.Attrib + + Return the parent index pair attribute. + """ + return Attrib() + + def numIndices(self): return 0 + def propertyNames(self): + """ + propertyNames(self) -> tuple of string + + Return a list of all property names. + """ + return ('',) + + def propertyDataType(self, property_name): + """ + propertyDataType(self, property_name) -> hou.attribData enum value + + Return the property's data type (int, float or string). + """ + return attribData() + + def propertySize(self,property_name): + """ + propertySize(self, property_name) -> int + + Return the number of data components in the property value. + """ + return 0 + + def floatPropertyValueAtIndex(self, property_name, row): + """ + floatPropertyValueAtIndex(self, property_name, row) -> float + + Return the property value for a particular floating point property. + + Raises hou.OperationFailed if no property exists with this name or the + property is not float of size 1. + """ + return 0.0 + + def floatListPropertyValueAtIndex(self, property_name, row): + """ + floatListPropertyValueAtIndex(self, property_name, row) -> tuple of + float + + Return a list of property values for a particular floating point + property. + + Raises hou.OperationFailed if no property exists with this name. + """ + return (0.0,) + + def intPropertyValueAtIndex(self, property_name, row): + """ + intPropertyValueAtIndex(self, property_name, row) -> int + + Return the property value for a particular integer property. + + Raises hou.OperationFailed if no property exists with this name or the + property is not integer of size 1. + """ + return 0 + + def intListPropertyValueAtIndex(self, property_name, row): + """ + intListPropertyValueAtIndex(self, property_name, row) -> tuple of int + + Return a list of property values for a particular integer property. + + Raises hou.OperationFailed if no property exists with this name. + """ + return (0,) + + def stringPropertyValueAtIndex(self, property_name, row): + """ + stringPropertyValueAtIndex(self, property_name, row) -> string + + Return the property value for a particular string property. + + Raises hou.OperationFailed if no property exists with this name or the + property is not string of size 1. + """ + return '' + + def stringListPropertyValueAtIndex(self, property_name, row): + """ + stringListPropertyValueAtIndex(self, property_name, row) -> tuple of + string + + Return a list of property values for a particular string property. + + Raises hou.OperationFailed if no property exists with this name. + """ + return ('',) + +class InterruptableOperation(object): + """ + hou.InterruptableOperation + + Use this class to turn any Python code block into an interruptable + operation. + + + """ + + def __init__(self, operation_name, long_operation_name=None, + open_interrupt_dialog=False): + """ + __init__(self, operation_name, long_operation_name=None, + open_interrupt_dialog=False) + + Construct a new InterruptableOperation. + + operation_name + A description of the interruptable operation that appears in the + progress bar of the interrupt dialog. + + long_operation_name + A description of the long, or higher-level, operation. If it is not + None, a second progress bar appears on the interrupt dialog with the + long operation name in it. + + open_interrupt_dialog + Determines whether the interrupt dialog should appear or not. + + The constructor should only be called from within a with statement. For + example: + with hou.InterruptableOperation( + "Performing Tasks", open_interrupt_dialog=True) as operation: + for i in num_tasks: + # + # PERFORM TASK HERE. + # + + # Update operation progress. + percent = float(i) / float(num_tasks) + operation.updateProgress(percent) + + + In Python 2.5, the with statement is not enabled by default. To enable + it, you need to add the following line at the beginning of your + script/module: + from __future__ import with_statement + + + You can nest multiple interruptable operations. This is ideal when you + have a long operation consisting of several smaller operations. For + example: + # Start the overall, long operation. + with hou.InterruptableOperation( + "Performing", "Performing Tasks", + open_interrupt_dialog=True) as operation: + for i in num_tasks: + # Update long operation progress. + overall_percent = float(i) / float(num_tasks) + operation.updateLongProgress(overall_percent) + + # Start the sub-operation. + with hou.InterruptableOperation( + "Performing Task %i" % i) as suboperation: + for j in num_subtasks: + # Update sub-operation progress. + percent = float(j) / float(num_subtasks) + suboperation.updateProgress(percent) + + # + # PERFORM SUBTASK HERE. + # + """ + def updateLongProgress(self, percentage=-1.0, long_op_status=None): + """ + updateLongProgress(self, percentage=-1.0, long_op_status=None) + + Update the progress percentage and status of the long, or high-level, + operation. At the same time, check if the operation was interrupted by + the user. + + percentage + A fractional number between 0.0 and 1.0. A value of 0.0 means that + no progress has been made while 1.0 means that the operation is + complete. A negative percentage indicates that the progress + percentage is not available. + + long_op_status + Text describing the current status of the long operation. The + status will overwrite the text in the 2nd progress bar of the + interrupt dialog. To keep the previous text in the progress bar, + set this parameter to None. + + Raises hou.OperationInterrupted if the user has chosen to interrupt the + operation. + + Raises hou.OperationFailed if the interruptable operation object was + constructed outside of a with statement. + """ + + def updateProgress(self, percentage=-1.0): + """ + updateProgress(self, percentage=-1.0) + + Update the progress percentage of the operation. At the same time, + check if the operation was interrupted by the user. + + percentage + A fractional number between 0.0 and 1.0. A value of 0.0 means that + no progress has been made while 1.0 means that the operation is + complete. A negative percentage indicates that the progress + percentage is not available. + + Raises hou.OperationInterrupted if the user has chosen to interrupt the + operation. + + Raises hou.OperationFailed if the interruptable operation object was + constructed outside of a with statement. + """ + + def __enter__(self): return InterruptableOperation() + def __exit__(self): return InterruptableOperation() + +class IntParmTemplate(ParmTemplate): + """ + hou.IntParmTemplate + + Describes a parameter tuple containing integer values. + + + """ + + def __init__(self, name, label, num_components, default_value=(), min=0, + max=10, min_is_strict=False, max_is_strict=False, + naming_scheme=hou.parmNamingScheme.XYZW, disable_when=None, + is_hidden=False, is_label_hidden=False, join_with_next=False, help=None, + script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}, + default_expression=(), default_expression_language=()): + """ + __init__(self, name, label, num_components, default_value=(), min=0, + max=10, min_is_strict=False, max_is_strict=False, + naming_scheme=hou.parmNamingScheme.XYZW, disable_when=None, + is_hidden=False, is_label_hidden=False, join_with_next=False, help=None, + script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}, + default_expression=(), default_expression_language=()) + + Construct a new IntParmTemplate. + + name + See hou.ParmTemplate.name for more information. + + label + See hou.ParmTemplate.label for more information. + + num_components + See hou.ParmTemplate.numComponents for more information. + + default_value + See the defaultValue method for more information. + + min + See the minValue method for more information. + + max + See the maxValue method for more information. + + min_is_strict + See the minIsStrict method for more information. + + max_is_strict + See the maxIsStrict method for more information. + + look + See hou.ParmTemplate.look for more information. + + naming_scheme + See hou.ParmTemplate.namingScheme for more information. + + disable_when + See hou.ParmTemplate.disableWhen for more information. + + is_hidden + See hou.ParmTemplate.isHidden for more information. + + is_label_hidden + See hou.ParmTemplate.isLabelHidden for more information. + + join_with_next + See hou.ParmTemplate.joinsWithNext for more information. + + help + See hou.ParmTemplate.help for more information. + + script_callback + See hou.ParmTemplate.scriptCallback for more information. + + script_callback_language + See hou.ParmTemplate.scriptCallbackLanguage for more information. + + tags + See hou.ParmTemplate.tags for more information. + + default_expression + See the defaultExpression method for more information. + + default_expression_language + See the defaultExpressionLanguage method for more information. + """ + def minValue(self): + """ + minValue(self) -> int + + Return the minimum value of the parameter. + + See also the minIsStrict method. + """ + return 0 + + def setMinValue(self, min_value): + """ + setMinValue(self, min_value) + + Set the minimum value of the parameter. + + See the minValue method for more information. + """ + + def maxValue(self): + """ + maxValue(self) -> int + + Return the minimum value of the parameter. + + See also the minIsStrict method. + """ + + def setMaxValue(self, max_value): + """ + setMaxValue(self, max_value) + + Set the maximum value of the parameter. + + See the maxValue method for more information. + """ + + def minIsStrict(self): + """ + minIsStrict(self) -> bool + + Returns whether the minimum value is strictly enforced. + + If a minimum value is not strictly enforced, the slider will not let you + change the value below the minimum, but you can set the value to be + lower than the minimum by typing it in, changing it via + hou.Parm.setValue, or using the ladder handle. + + If it is strictly enforced and you try to change it below the minimum + value using any mechanism, Houdini will set it to the minimum value. + + See also the minValue method. + """ + return True + + def setMinIsStrict(self, on): + """ + setMinIsStrict(self, on) + + Set whether the minimum value is strictly enforced. + + See the minIsStrict method for more information. + """ + + def maxIsStrict(self): + """ + maxIsStrict(self) -> bool + + Return whether the maximum value is strictly enforced. + + See the minIsStrict method for more information. + """ + return True + + def setMaxIsStrict(self, on): + """ + setMaxIsStrict(self, on) + + Set whether the maximum value is strictly enforced. + + See the maxIsStrict method for more information. + """ + + def defaultValue(self): + """ + defaultValue(self) -> tuple of int + + Return the default value for new parameter instances. + + For example, suppose this parm template is named "divisions", the + naming scheme is XYZW, it has 3 components, and the default value is + (10, 20, 30). The corresponding parm tuple instance on a node would be + named "divisions" and would contain parameters "divisionsx", + "divisionsy", and "divisionsz". When the node is created, + "divisionsx" would be 10, "divisionsy" would be 20, and + "divisionsz" would be 30. + """ + return (0,) + + def setDefaultValue(self, default_value): + """ + setDefaultValue(self, default_value) + + Set the default value for new parameter instances to a sequence of ints. + + See the defaultValue method for more information. Note that if the + number of ints in the sequence is different from the number of + components in the parm template, any extra values will be discarded and + any missing values will become zeros. + """ + + def defaultExpression(self): + """ + defaultExpression(self) -> tuple of strings + + Return the default expression for new parameter instances. + + The default expression takes precendence over the default value. If a + component has no default expression (i.e. an empty string), then the + default value is used for new parameter instances. + + Note that the default expression language is needed to interpret the + meaning of the default expression. + + For example, suppose this parm template is named "divisions", the + naming scheme is XYZW, it has 3 components, the default value is (10, + 20, 30), the default expression is ("$F", "hou.frame()", "") and + the default expression language is (hou.scriptLanguage.Hscript, + hou.scriptLanguage.Python, hou.scriptLanguage.Hscript). Then the + corresponding parm tuple instance on a node would be named + "divisions" and would contain parameters "divisionsx", + "divisionsy", "divisionsz". When the node is created, + "divisionsx" would have a default Hscript expression of "$F", + "divisionsy" would have a default Python expression of + "hou.frame()", and "divisionsz" would have a default value of 30. + """ + return ('',) + + def setDefaultExpression(self, default_expression): + """ + setDefaultExpression(self, default_expression) + + Set the default expression for new parameter instances to a sequence of + strings. + + See the hou.IntParmTemplate.defaultExpression method for more + information. Note that if the number of strings in the sequence is + different from the number of components in the parm template, any extra + values will be discarded and any missing expressions will become the + empty string. + """ + + def defaultExpressionLanguage(self): + """ + defaultExpressionLanguage(self) -> tuple of hou.scriptLanguage + + Return the default expression language for new parameter instances. + + The default expression language only applies if the default expression + is set. If the default expression of a component is not set, then the + expression language is set to hou.scriptLanguage.Hscript. + """ + return (scriptLanguage(),) + + def setDefaultExpressionLanguage(self, default_expression_language): + """ + setDefaultExpressionLanguage(self, default_expression_language) + + Set the default expression language for new parameter instances to a + sequence of hou.scriptLanguage values. + + See the defaultExpressionLanguage method for more information. Note + that if the number of hou.scriptLanguage values in the sequence is + different from the number of components in the parm template, any extra + values will be discarded and any missing expression languages will + become hou.scriptLanguage.Hscript. + """ + +class IPRViewer(PaneTab): + """ + hou.IPRViewer + + An interactive preview render (IPR) window. + + The IPR viewer progressively refines a render, first providing a rough + view of the rendered image and eventually providing the fully rendered + image. When you change a shader value, move an object, etc., the viewer + will re-render the image. + + When you Ctrl+click on a pixel in the rendered image, Houdini searches + $HOUDINI_PATH for scripts/ipr/pickpixel.py and runs it. The version of + this file that ships with Houdini pops up the shader contributing the + pixel, or an information window if there is is no shader. If Houdini + cannot find that Python file it then looks for the Hscript file + scripts/ipr/pickpixel.cmd. + + When you drag a SHOP node onto the rendered image, Houdini searches for + and runs scripts/ipr/dragdrop.py. By default, this script assigns the + SHOP to the object contributing the pixel. If it cannot find a Python + version, Houdini then looks for scripts/ipr/dragdrop.cmd. + + Note that shelf scripts can access the last location the user clicked on + with hou.IPRViewer.lastClickLocation. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def isPaused(self): + """ + isPaused(self) -> bool + + Indicates whether the IPR session is paused. If there is no active + session, this returns false. + """ + return True + + def killRender(self): + """ + killRender(self) + + Kills the active IPR session (if there is one). + """ + + def pauseRender(self): + """ + pauseRender(self) + + Pauses the active IPR session (if there is one). + """ + + def resumeRender(self): + """ + resumeRender(self) + + Resumes the active IPR session (if there is one). + """ + + def startRender(self): + """ + startRender(self) + + Start a new render if there is no active IPR session or issue a re- + render if there is one. + """ + + def isPreviewOn(self): + """ + isPreviewOn(self) -> bool + + Return whether or not the Preview checkbox is checked. When it is + unchecked, the viewer will not progressively refine the image using IPR, + and will instead use the rendering engine from the ROP node to render + it. + + See also hou.IPRViewer.setPreview. + + REPLACES + iprquery function """ + return True + + def setPreview(self, on): + """ + setPreview(self, on) + + Check or uncheck the Preview checkbox. + + See hou.IPRViewer.isPreviewOn for more information. + + REPLACES + iprquery function """ + + def isAutoUpdateOn(self): + """ + isAutoUpdateOn(self) -> bool + + Return whether or not the Auto-Update checkbox is checked. When it is + unchecked, the viewer will not refresh when objects, shaders, lights, + etc. change. In this case, you can force a re-render by clicking on the + Render button. + + See also hou.IPRViewer.setAutoUpdate. + + REPLACES + iprview command """ + return True + + def setAutoUpdate(self, on): + """ + setAutoUpdate(self, on) + + Check or uncheck the Auto-Update checkbox. + + See hou.IPRViewer.isAutoUpdateOn for more information. + + REPLACES + iprview command """ + + def delay(self): + """ + delay(self) -> float + + Return the contents of the viewer's Delay field. This value determines + how long Houdini waits between when you change a parameter value and + when it starts re-rendering. + + See also hou.IPRViewer.setDelay and hou.IPRViewer.updateTime. + + REPLACES + iprview command """ + return 0.0 + + def setDelay(self, time): + """ + setDelay(self, time) + + Set the contents of the viewer's Delay field. + + See hou.IPRViewer.delay for more information. + + REPLACES + iprview command """ + + def updateTime(self): + """ + updateTime(self) -> float + + Return the contents of the viewer's Update Time field. This value + determines approximately how long each progressive refinement should + take. Smaller values will produce more progressive renders where detail + is added more gradually. + + See also hou.IPRViewer.setUpdateTime and hou.IPRViewer.delay. + """ + return 0.0 + + def setUpdateTime(self, time): + """ + setUpdateTime(self, time) + + Set the contents of the viewer's Update Time field. + + See hou.IPRViewer.updateTime for more information. + """ + + def lastClickLocation(self): + """ + lastClickLocation(self) -> (int, int) + + Return the x and y coordinates for the pixel location where the user + last clicked in the IPR viewer. Note that this location might be + outside the image: the x and y coordinates can be negative and can be + greater than or equal to the image resolution. Note that if the user + never clicked in the viewer, the x and y coordinates will be negative. + + You would typically call this method from a shelf script. For example, + a user can click on a pixel in the IPR viewer and then click on the + shelf to perform an action on that pixel (e.g. display the shader + parameters, assign a shader, etc.). + + Use hou.IPRViewer.imageResolution to get the valid range for pixel + coordinates. + + Note that when you Ctrl-click on a pixel, Houdini searches $HOUDINI_PATH + for scripts/ipr/pickpixel.py and runs it. This script can access the + viewer with kwargs["viewer"] and the location where the user clicked + with kwargs["position"]. + + The following script opens a floating parameter window for the shader + corresponding to the pixel the user last clicked on. + viewer = hou.ui.paneTabOfType(hou.paneTabType.IPRViewer) + px, py = viewer.lastClickLocation() + + if (px < 0 or px > viewer.imageResolution()[0] or + py < 0 or py >= viewer.imageResolution()[1]): + hou.ui.displayMessage("Click on the image and then run this script again") + else: + material = viewer.materialNode(px, py) + + if material is not None: + parm_window = hou.ui.curDesktop().createFloatingPaneTab( + hou.paneTabType.Parm) + parm_window.setCurrentNode(material) + parm_window.setPin(True) + else: + hou.ui.displayMessage("Click on an object to bring up the shader.") + """ + return (0,0) + + def ropNode(self): + """ + ropNode(self) -> hou.RopNode or None + + Return the ROP node that is selected in the viewer, or None if nothing + is selected. + + REPLACES + iprquerys function """ + return RopNode() + + def setRopNode(self, rop_node): + """ + setRopNode(self, rop_node) + + Set the ROP node to use for rendering. + """ + + def imageResolution(self): + """ + imageResolution(self) -> (int, int) + + Return the resolution of the image. + + Raises hou.OperationFailed if the viewer does not contain an image. + + REPLACES + iprquery function """ + return (0,0) + + def cropRegion(self): + """ + cropRegion(self) -> (float, float, float, float) + + Return the x0, x1, y0, and y1 normalized coordinates of the subregion + that is selected, where (x0, y0) is the bottom-left corner and (x1, y1) + is the top-right corner of the subregion. + + You can optionally tell the IPR viewer to only re-render only a portion + of the image. To select a subportion of the image, hold down shift and + select the box. + + Note that the bottom-left corner is (0.0, 0.0) and the top-right corner + is (1.0, 1.0). For example, if the entire image is being rendered, this + method returns (0.0, 1.0, 0.0, 1.0). + + REPLACES + iprquery function """ + return (0.0, 1.0, 0.0, 1.0) + + def planes(self): + """ + planes(self) -> tuple of str + + Return the names of the image planes in the rendered output. + + Note that the special Op_Id image plane contains the hou.Node.sessionId + ids of the object nodes in the image. -1 indicates that there is no + object node associated with the pixel. Use hou.IPRViewer.objectNode to + access the object corresponding to that id. + + Similarly, the Prim_Id plane contains the hou.Prim.number ids of the + primitives in the image. Use hou.IPRViewer.prim to access the primitive + corresponding to that id. + + Raises hou.OperationFailed if the viewer does not contain an image. + + REPLACES + iprquery function + iprquerys function """ + return ('',) + + def pixel(self, plane_name, x, y): + """ + pixel(self, plane_name, x, y) -> tuple of float + + Return the value of a pixel in one plane of the image. This method + returns a tuple of 1 to 4 floats, depending on the type of image plane. + + Note that the color plane is named C. + + Raises hou.OperationFailed if the plane name is invalid, the pixel + location is outside the image, or the viewer does not contain an image. + + You can determine the number of components in the image plane using the + following: len(viewer.pixel(plane_name, 0, 0)). + + >>> viewer.pixel("C", 300, 200) + (0.69970703125, 0.46728515625, 0.289794921875, 1.0) + + REPLACES + iprquery function """ + return (0.0, 0.0, 0.0, 1.0) + + def objectNode(self, x, y): + """ + objectNode(self, x, y) -> hou.ObjNode or None + + Return the object node contributing the pixel at the specified location, + or None if there is no object at the pixel or if the pixel location is + outside the image bounds + + The following function returns the SOP node containing the geometry that + contributes the pixel to the final image: + def sopNode(viewer, x, y): + obj_node = viewer.objectNode(x, y) + return (obj_node.renderNode() if obj_node is not None else None) + + + Raises hou.OperationFailed if the viewer does not contain an image. + + REPLACES + iprquerys function """ + return ObjNode() + + def prim(self, x, y): + """ + prim(self, x, y) -> hou.Prim or None + + Return the geometry primitive contributing the pixel at the specified + location, or None if there is nothing at the pixel or if the pixel + location is outside the image bounds + + Raises hou.OperationFailed if the viewer does not contain an image. + + REPLACES + iprquery function """ + return Prim() + + def materialNode(self, x, y): + """ + materialNode(self, x, y) -> hou.ShopNode or None + + Return the SHOP node contributing the pixel at the specified location, + or None if there is nothing at the pixel, the pixel location is outside + the image bounds, or there is no shader on the geometry. + + This method first checks the primitive corresponding to the pixel and + returns the SHOP corresponding to its shop_materialpath attribute. If + the primitive does not have this attribute then it returns the SHOP + assigned to the object. If no SHOP is assigned to the object, it + returns None. + + Raises hou.OperationFailed if the viewer does not contain an image. + + REPLACES + iprquerys function """ + return ShopNode() + +class Keyframe(BaseKeyframe): + """ + hou.Keyframe + + Class representing the default keyframe type, a numerical keyframe. + + REPLACES + * chkey + * chkeyls + """ + + def __init__(self, *args): + """ + __init__(self, values) + + Return a new Keyframe object. You can pass no parameters (the result + will have no value set), a float value, a float value and float time, or + a Keyframe object. + """ + def evaluatedType(self): + """ + evaluatedType(self) -> hou.parmData enum value + """ + return parmData() + + def setValue(self, value): + """ + setValue(self, value) + + Sets the value leaving the keyframe. + """ + + def value(self): + """ + value(self) -> double + + Returns the value leaving the keyframe. + + This method raises hou.KeyframeValueNotSet if the value has not been + set. + """ + return 0.0 + + def isValueSet(self): + """ + isValueSet(self) -> bool + + Returns True if the value entering or leaving the keyframe has been set. + """ + return True + + def setInValue(self, in_value): + """ + setInValue(self, in_value) + + Sets the value entering the keyframe. Sets the value leaving the + keyframe, if not already set. Unties the value. + """ + + def unsetInValue(self): + """ + unsetInValue(self) + + Unsets the value entering the keyframe and untie the values. + """ + + def inValue(self): + """ + inValue(self) -> double + + Returns the value entering the keyframe. + + This method raises hou.KeyframeValueNotSet if the value has not been set + or the value is tied. + """ + return 0.0 + + def isValueTied(self): + """ + isValueTied(self) -> bool + + Returns True if the value entering the keyframe has not been set. + """ + return True + + def isValueUsed(self): return True + def useValue(self): return + def setSlope(self, slope): + """ + setSlope(self, slope) + + Sets the slope leaving the keyframe. + """ + + def slope(self): + """ + slope(self) -> double + + Returns the slope leaving the keyframe. + + This method raises hou.KeyframeValueNotSet if the slope has not been + set. + """ + return 0.0 + + def isSlopeSet(self): + """ + isSlopeSet(self) -> bool + + Returns True if the slope entering or leaving the keyframe has been set. + """ + return True + + def isSlopeUsed(self): return True + def useSlope(self): return + def isSlopeAuto(self): + """ + isSlopeAuto(self) -> bool + + Returns True if the slope leaving the keyframe is set to automatic. + """ + return True + + def setSlopeAuto(self, on): + """ + setSlopeAuto(self, on) + + Sets the slope leaving the keyframe to automatic. + """ + + def setInSlope(self, in_slope): + """ + setInSlope(self, in_slope) + + Sets the slope entering the keyframe. Sets the slope leaving the + keyframe, if not already set. Unties the slope. + """ + + def unsetInSlope(self): + """ + unsetInSlope(self) + + Unsets the slope entering the keyframe and untie the slope. + """ + + def inSlope(self): + """ + inSlope(self) -> double + + Returns the slope entering the keyframe. + + This method raises hou.KeyframeValueNotSet if the slope has not been set + or the slope is tied. + """ + return 0.0 + + def isSlopeTied(self): + """ + isSlopeTied(self) -> bool + + Returns True if the slope entering the keyframe has not been set. + """ + return True + + def isInSlopeAuto(self): + """ + isInSlopeAuto(self) -> bool + + Returns True if the slope entering the keyframe is set to automatic. + """ + return True + + def setInSlopeAuto(self, on): + """ + setInSlopeAuto(self, on) + + Sets the slope entering the keyframe to automatic. + """ + + def setAccel(self, accel): + """ + setAccel(self, accel) + + Sets the acceleration leaving the keyframe. + """ + + def accel(self): + """ + accel(self) -> double + + Returns the acceleration leaving the keyframe. + + This function raises hou.KeyframeValueNotSet if the acceleration has not + been set. + """ + return 0.0 + + def isAccelSet(self): + """ + isAccelSet(self) -> bool + + Returns True if the acceleration entering or leaving the keyframe has + been set. + """ + return True + + def isAccelUsed(self): return True + def useAccel(self): return + def setInAccel(self, in_accel): + """ + setInAccel(self, in_accel) + + Sets the acceleration entering the keyframe. Sets the acceleration + leaving the keyframe, if not already set. Unties the acceleration. + """ + + def unsetInAccel(self): + """ + unsetInAccel(self) + + Unsets the acceleration entering the keyframe and untie the + acceleration. + """ + + def inAccel(self): + """ + inAccel(self) -> double + + Returns the acceleration entering the keyframe. + + This method raises hou.KeyframeValueNotSet if the acceleration has not + been set or it is tied. + """ + return 0.0 + + def isAccelTied(self): + """ + isAccelTied(self) -> bool + + Returns True if the acceleration entering the keyframe has not been set. + """ + return True + + def interpretAccelAsRatio(self, on): + """ + interpretAccelAsRatio(self, on) + + Sets whether Houdini should interpret the acceleration values entering + and leaving the keyframe as a single ratio. When set to True, the + ratio of the in-acceleration to out-acceleration is always maintained. + If, for example, the in-acceleration is made to be twice as large using + the Animation Editor, then the out-acceleration will automatically be + adjusted to be twice as large as well. This is the default behavior + for Houdini keyframes. + """ + + def isAccelInterpretedAsRatio(self): + """ + isAccelInterpretedAsRatio(self) -> bool + + Returns True if the acceleration values entering and leaving the + keyframe are interpreted as a ratio by Houdini. + """ + return True + +class LabelParmTemplate(ParmTemplate): + """ + hou.LabelParmTemplate + + Describes a label parameter. Unlike most other parameters, labels do + not store parameter values. + + + """ + + def __init__(self, name, label, column_labels=(), is_hidden=False, + is_label_hidden=False, join_with_next=False, help=None, tags={}): + """ + __init__(self, name, label, column_labels=(), is_hidden=False, + is_label_hidden=False, join_with_next=False, help=None, tags={}) + + Create a new LabelParmTemplate instance. + + name + See hou.ParmTemplate.name for more information. + + label + See hou.ParmTemplate.label for more information. + + column_labels + See the setColumnLabels method for more information. + + is_hidden + See hou.ParmTemplate.isHidden for more information. + + is_label_hidden + See hou.ParmTemplate.isLabelHidden for more information. + + join_with_next + See hou.ParmTemplate.joinsWithNext for more information. + + help + See hou.ParmTemplate.help for more information. + + tags + See hou.ParmTemplate.tags for more information. + + Note that the number of components in a label parm template corresponds + to the number of column labels. + """ + def columnLabels(self): + """ + columnLabels() -> tuple of str + + Return the tuple of strings of column labels. Normally, label parm + templates do not have any column labels. However, they may have these + extra labels that are displayed in addition to the main label. + + Note that the number of components in a label parm template corresponds + to the number of column labels. + """ + return ('',) + + def setColumnLabels(self,column_labels): + """ + setColumnLabels(column_labels) + + Set the column labels to a sequence of strings. + + The parameter editor in the always has at least + one column label, so if you supply an empty sequence there will be one + column label that is an empty string. + + See the columnLabels method for more information. + """ + +class Matrix2(object): + + def __init__(self, values):pass + def isAlmostEqual(self, matrix2, tolerance=0.00001): return True + def at(self): return + def asTuple(self): return (0,) + def asTupleOfTuples(self): return ((0,),(0,)) + def setAt(self): return + def setTo(self): return + def setToIdentity(self): return + def setToZero(self): return + def __add__(self): return + def __sub__(self): return + def __mul__(self): return + def preMult(self): return + def transposed(self): return + def inverted(self): return + def determinant(self): return + def _asVoidPointer(self): return + +class Matrix3(object): + """ + hou.Matrix3 + + A 3x3 matrix of floating point values. + + 3x3 matrices are typically used in Houdini to represent a 3D rotation + (with a possible scale). Most places in Houdini use hou.Matrix4, which + can store generation 3D transformations (including translations). + + Note that you can construct a general transformation Matrix4 from a + Matrix3 by writing hou.Matrix4(matrix3). + + """ + + def __init__(self, values ): + """ + __init__(self, values) + + Return a new Matrix3. You can pass no parameters (the result will + contain all zeros), a float (the result's diagonal values will contain + that float and the rest is all zeros), a sequence of 9 floats, or a + sequence of sequences of 3 floats. + + >>> hou.Matrix3() + + + >>> hou.Matrix3(1) + + + >>> hou.Matrix3((0, 1, 2, 3, 4, 5, 6, 7, 8)) + + + >>> hou.Matrix3(((0, 1, 2), (3, 4, 5), (6, 7, 8))) + + + Note that Houdini's matrices are stored in row-major order, so the + matrix's contents are grouped by row. + + REPLACES + matrix function """ + def isAlmostEqual(self, matrix3, tolerance=0.00001): + """ + isAlmostEqual(self, matrix3, tolerance=0.00001) -> bool + + Returns whether this matrix is equal to another, within a tolerance. + """ + return _hou.Matrix3_isAlmostEqual(*args) + def at(self, row, col): + """ + at(self, row, col) -> double + + Return the value of the matrix at the given row and column. + + Raises IndexError if the row or column are not between 0 and 2, + inclusive. Note that negative indices will not index from the end. + """ + return 0.0 + + def asTuple(self): + """ + asTuple(self) -> tuple of float + + Return the contents of the matrix as a tuple of 9 floats. + """ + return (0.0,) + + def asTupleOfTuples(self): + """ + asTupleOfTuples(self) -> tuple of tuple of float + + Return the contents of the matrix as a tuple of tuples of 3 floats. + """ + return ((0.0,),) + + def setAt(self, row, col, value): + """ + setAt(self, row, col, value) + + Set the value of the matrix at the given row and column. + + Raises IndexError if the row or column are not between 0 and 2, + inclusive. Note that negative indices will not index from the end. + """ + + def setTo(self, tuple): + """ + setTo(self, tuple) + + Set this matrix's contents. The sequence may contain either 9 floats or + 3 sequences, each with 3 floats. + + See hou.Matrix3.__init__ for examples of suitable parameter values. + """ + + def setToIdentity(self): + """ + setToIdentity(self) + + Set this matrix to the multiplicative identity, having 1's in the + diagonal. + + The matrix will contain the values [[1, 0, 0], [0, 1, 0], [0, 0, 1]]. + Note that you can construct a new matrix with these values using + hou.Matrix3(1). + """ + + def setToZero(self): + """ + setToZero(self) + + Set this matrix to contain all zeros. + + Note that you can construct a new matrix with all zeros with + hou.Matrix3(). + """ + + def __add__(self, matrix3): + """ + __add__(self, matrix3) -> hou.Matrix3 + + Add two matrices by adding corresponding entries together and return a + new matrix. This method lets you write m1 + m2, where m1 and m2 are + Matrix3 objects. + """ + return Matrix3() + + def __sub__(self, matrix3): + """ + __sub__(self, matrix3) -> hou.Matrix3 + + Subtract another matrix from this one, subtracting corresponding + entries, and return a new matrix. This method lets you write m1 - m2, + where m1 and m2 are Matrix3 objects. + """ + return Matrix3() + + def __mul__(self, matrix3_or_scalar): + """ + __mul__(self, matrix3_or_scalar) -> hou.Matrix3 + + Multiply this matrix by another matrix or by a scalar, returning a new + matrix. This method lets you write m1 * m2, where m1 and m2 are Matrix3 + objects, or m1 * s, where s is a float. + + See Wikipedia's matrix multiplication page for details on how each + element in the result is computed. Also see hou.Matrix4. + """ + return Matrix3() + + def preMult(self, matrix3): + """ + preMult(self, matrix3) -> hou.Matrix3 + + Returns matrix3 * self. Note that __mul__ returns self * matrix3, which + is a different result because matrix multiplication is not commutative. + """ + return Matrix3() + + def transposed(self): + """ + transposed(self) -> hou.Matrix3 + + Return the transpose of this matrix. The result is such that self.at(i, + j) == self.transposed().at(j, i) for 0 <= i,j <= 2. + + See Wikipedia's transpose page for more information. + """ + return Matrix3() + + def inverted(self): + """ + inverted(self) -> hou.Matrix3 + + Return the inverse of this matrix. + + Raises hou.OperationFailed if the matrix is not invertible. Otherwise, + (self * self.inverted()).isAlmostEqual(hou.Matrix3(1)) is True. + + See Wikipedia's invertible matrix page for more information. + """ + return Matrix3() + + def determinant(self): + """ + determinant(self) -> double + + Return the determinant of the matrix. + + See Wikipedia's determinant page. + """ + return 0.0 + + def extractRotates(self, rotate_order="xyz"): + """ + extractRotates(self, rotate_order="xyz") -> hou.Vector3 + + Return a Vector3 of Euler angles, in degrees, representing the rotation + component of this matrix. Rotating about the coordinate axes in the + specified order by these amounts will yield the rotation contained in + this matrix. + + rotate_order + A string containing a permutation of the letters x, y, and z that + determines the order in which rotations are performed about the + coordinate axes. + + Raises hou.OperationFailed if the matrix does not represent a valid + rotation matrix (e.g. it is singular) or the rotate order is not a + permutation of the string 'xyz'. + + See also hou.Matrix4.explode and hou.Matrix4.extractRotates. + """ + return Vector3() + + def _asVoidPointer(self): return + +class Matrix4(object): + """ + hou.Matrix4 + + A 4x4 matrix of floating point values. + + 4x4 matrices are typically used in Houdini to represent a 3D + transformation (e.g. some combination of rotation, scaling, shearing, + and translation). A single matrix compactly represents a + transformation, and is much easier to deal with than multiple translate, + rotate, scale, shear, transformation order, and rotation order values. + + Note that Houdini's matrices are stored in row-major format, and vectors + that are multiplied with matrices are treated as row vectors. So, if p + is a hou.Vector4 representing a point and M is a Matrix4, you write p*M, + *not* M*p. Similarly, p*M1*M2 will first transform p by M1, and then + transform it by M2. + + + Most mathematical notations treat vectors and points as column vectors + instead of row vectors. They will often use A*B*C (or simply ABC) to + refer to a combined transform that first applies C's transform, then + B's, and then applies A's. However, the convention is different in + Houdini. To represent the equivalent matrix expression in Houdini, you + need to concatenate the transforms in the reverse order. So, you would + instead write C'*B'*A', where C', B', A' are the transpose of C, B, A + respectively. + + You can multiply Vector3s or Vector4s by Matrix4s. If you multiply a + Vector3, it is the same as multiplying a Vector4 where the fourth + component is 1 (see hou.Vector3.__mul__). + + To transform a normal (as opposed to a point or vector), you need to + multiply by the inverse transpose of the matrix. For example, suppose: + + p + is a hou.Vector3 object representing a position (or a hou.Vector4 + with v[4]==1) + + v + is a hou.Vector4 object representing a vector (a direction with a + length but no fixed location in space), with v[3]==0 + + n + is a hou.Vector4 object representing a normal, with v[3]==0 + + m + is a Matrix4 object representing a transform matrix + + Then you would write: + + p * m # to transform the point + v * m # to transform the vector + n * m.inverted().transposed() # to transform the normal + # (note that m.inverted().transposed() is mathematically equivalent to m.transposed().inverted()) + + Here is a concrete example: + + >>> m = hou.hmath.buildTranslate((1, 1, 2)) + >>> m + + >>> p = hou.Vector3(1, 2, 3) + >>> p * m + + + Both VEX and the UT_DMatrix4 class in the Houdini Development Kit (HDK) + also store matrices in row-major format. + + + """ + + def __init__(self, values): + """ + __init__(self, values) + + Return a new Matrix4. You can pass no parameters (the result will + contain all zeros), a float (the result's diagonal values will contain + that float and the rest is all zeros), a sequence of 16 floats, a + sequence of sequences of 4 floats, or a hou.Matrix3. + + >>> hou.Matrix4() + + + >>> hou.Matrix4(1) + + + >>> hou.Matrix4((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)) + + + >>> hou.Matrix4(((0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15))) + + + >>> matrix3 = hou.Matrix3((0, 1, 2, 3, 4, 5, 6, 7, 8)) + >>> matrix3 + + >>> hou.Matrix4(matrix3) + + + Note that Houdini's matrices are stored in row-major order, so the + matrix's contents are grouped by row. + + REPLACES + matrix function """ + def isAlmostEqual(self, matrix4, tolerance=0.00001): + """ + isAlmostEqual(self, matrix4, tolerance=0.00001) -> bool + + Return whether this matrix is equal to another, within a tolerance. + """ + return True + + def at(self, row, col): + """ + at(self, row, col) -> float + + Return the value of the matrix at the given row and column. + + Raises IndexError if the row or column are not between 0 and 3, + inclusive. Note that negative indices will not index from the end. + """ + return 0.0 + + def asTuple(self): + """ + asTuple(self) -> tuple of float + + Return the contents of the matrix as a tuple of 16 floats. + """ + return (0.0,) + + def asTupleOfTuples(self): + """ + asTupleOfTuples(self) -> tuple of tuple of float + + Return the contents of the matrix as a tuple of tuples of 4 floats. + """ + return ((0.0,),) + + def setAt(self, row, col, value): + """ + setAt(self, row, col, value) + + Set the value of the matrix at the given row and column. + + Raises IndexError if the row or column are not between 0 and 3, + inclusive. Note that negative indices will not index from the end. + """ + + def setTo(self, sequence): + """ + setTo(self, sequence) + + Set this matrix's contents. The sequence may contain either 16 floats + or 4 sequences, each with 4 floats. + + See hou.Matrix4.__init__ for examples of suitable parameter values. + """ + + def setToIdentity(self): + """ + setToIdentity(self) + + Set this matrix to the multiplicative identity, having 1's in the + diagonal. + + The matrix will contain the values [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, + 1, 0], [0, 0, 0, 1]]. Note that you can construct a new matrix with + these values using hou.hmath.identityTransform or hou.Matrix4(1). + + REPLACES + identity function """ + + def setToZero(self): + """ + setToZero(self) + + Set this matrix to contain all zeros. + + Note that you can construct a new matrix with all zeros with + hou.Matrix4(). + + REPLACES + mzero function """ + + def __add__(self, matrix4): + """ + __add__(self, matrix4) -> hou.Matrix4 + + Add two matrices by adding corresponding entries together and return a + new matrix. This method lets you write m1 + m2, where m1 and m2 are + Matrix4 objects. + """ + return Matrix4() + + def __sub__(self, matrix4): + """ + __sub__(self, matrix4) -> hou.Matrix4 + + Subtract another matrix from this one, subtracting corresponding + entries, and return a new matrix. This method lets you write m1 - m2, + where m1 and m2 are Matrix4 objects. + """ + return Matrix4() + + def __mul__(self, matrix4_or_scalar): + """ + __mul__(self, matrix4_or_scalar) -> hou.Matrix4 + + Multiply this matrix by another matrix or by a scalar, returning a new + matrix. This method lets you write m1 * m2, where m1 and m2 are Matrix4 + objects, or m1 * s, where s is a float. + + If m1 and m2 are transformation matrices and v is a vector, v * m1 * m2 + will transform v by m1, and then transform it by m2. This ordering + occurs because Houdini's Matrices are stored in row-major format, and is + opposite from the ordering used in traditional mathematical notation. + Note that m1 * v is not a valid expression in Houdini + + See the Matrix4 class documentation and hou.Vector3.__mul__ for more + information. See Wikipedia's matrix multiplication page for details on + how each element in the result is computed. + """ + return Matrix4() + + def preMult(self): + """ + preMult(self, matrix4) -> hou.Matrix4 + + Returns matrix4 * self. Note that __mul__ returns self * matrix4, which + is a different result because matrix multiplication is not commutative. + """ + return Matrix4() + + def transposed(self): + """ + transposed(self) -> hou.Matrix4 + + Return the transpose of this matrix. The result is such that self.at(i, + j) == self.transposed().at(j, i) for 0 <= i,j <= 3. + + See Wikipedia's transpose page for more information. + + REPLACES + transpose function """ + return Matrix4() + + def inverted(self): + """ + inverted(self) -> hou.Matrix4 + + Return the inverse of this matrix. + + Raises hou.OperationFailed if the matrix is not invertible. Otherwise, + (self * self.inverted()).isAlmostEqual(hou.hmath.identityTransform()) is + True. + + See Wikipedia's invertible matrix page for more information. + + REPLACES + invert function """ + return Matrix4() + + def determinant(self): + """ + determinant(self) -> float + + Return the determinant of the matrix. + + See Wikipedia's determinant page. + + REPLACES + determinant function """ + return 0.0 + + def explode(self, transform_order='srt', rotate_order='xyz', + pivot=hou.Vector3()): + """ + explode(self, transform_order='srt', rotate_order='xyz', + pivot=hou.Vector3()) -> dict of str to hou.Vector3 + + Return a dictionary with keys 'rotate', 'scale', 'translate', and + 'shear' whose values are hou.Vector3 objects. When applied in the + specified order, the corresponding rotations, scales (and shears), and + translations will give this matrix. + + The rotation is returned as a set of Euler angles, in degrees. See + Wikipedia's Euler angles page for more information. + + transform_order + A string containing a permutation of the letters s, r, and t. The + rotate, scale, and translate results are dependent on the order in + which you perform those operations, and this string specifies that + order. + + For example, imagine a transformation where you first translate in x + by one unit, then you rotate in z by 45 degrees. With a transform + order of 'trs' (translate, rotate, scale), the translate component + is (1, 0, 0). However, this same transformation could be + constructed, for example, by first scaling, then rotating, and then + translating. For this transformation order, the translate component + would be (1.0 / math.sqrt(2), 1.0 / math.sqrt(2), 0). + + rotate_order + A string containing a permutation of the letters x, y, and z that + determines the order in which rotations are performed about the + coordinate axes. + + pivot + A Vector3 containing a position about which rotations and scales are + performed. By default, this parameter is set to the origin. + + Raises hou.OperationFailed if the matrix does not represent a valid + transform matrix (e.g. it is singular), the transform order is not a + permutation of the string 'srt', or the rotate order is not a + permutation of the string 'xyz'. + + See hou.hmath.buildRotateAboutAxis for an example of how to convert + Euler angles into an axis and rotation. + + See hou.ObjNode.setParmTransform for an example. This method is the + inverse of hou.hmath.buildTransform. See also the other functions in + hou.hmath that build transformation matrices. + + REPLACES + explodematrix function """ + return {'':Vector3(),} + + def extractTranslates(self, transform_order='srt'): + """ + extractTranslates(self, transform_order='srt') -> hou.Vector3 + + A shortcut for self.explode(transform_order)['translate']. See + hou.Matrix4.explode for more information. + + >>> matrix = hou.hmath.buildTranslate(1, 0, 0) * hou.hmath.buildRotate(0, 0, 45) + >>> matrix.extractTranslates('trs') + + >>> matrix.extractTranslates('srt') + + + REPLACES + vtorigin function """ + return Vector3() + + def extractRotates(self, transform_order='srt', rotate_order='xyz', + pivot=Vector3()): + """ + extractRotates(self, transform_order='srt', rotate_order='xyz', + pivot=hou.Vector3()) -> hou.Vector3 + + A shortcut for self.explode(transform_order, rotate_order, + pivot)['rotate']. See hou.Matrix4.explode for more information. + + REPLACES + vrorigin function """ + return Vector3() + + def extractScales(self, transform_order='srt', pivot=hou.Vector3()): + """ + extractScales(self, transform_order='srt', pivot=hou.Vector3()) -> + hou.Vector3 + + A shortcut for self.explode(transform_order, rotate_order, + pivot)['scale']. See hou.Matrix4.explode for more information. + """ + return Vector3() + + def extractShears(self, transform_order='srt', pivot=hou.Vector3()): + """ + extractShears(self, transform_order='srt', pivot=hou.Vector3()) -> + hou.Vector3 + + A shortcut for self.explode(transform_order, rotate_order, + pivot)['shear']. See hou.Matrix4.explode for more information. + """ + return Vector3() + + def extractRotationMatrix3(self): + """ + extractRotationMatrix3(self)` -> hou.Matrix3 + + Extracts the 3x3 rotation matrix from this matrix, assuming it is a + transformation matrix. If it fails to extract the rotation, for example + if scaling is zero on one axis, it returns the identity matrix instead. + """ + return Matrix3() + + def _asVoidPointer(self): return + +class MenuParmTemplate(ParmTemplate): + """ + hou.MenuParmTemplate + + Describes a menu parameter containing evaluating to integer values. Note + that StringParmTemplates may also have menus. + + REPLACES + * opmenu + + + """ + + def __init__(self, name, label, menu_items, menu_labels=(), default_value=0, + icon_names=(), item_generator_script='', + item_generator_script_language=None, disable_when=None, + menu_type=hou.menuType.Normal, is_hidden=False, is_label_hidden=False, + join_with_next=False, help=None, script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}, + default_expression="", + default_expression_language=hou.scriptLanguage.Hscript): + """ + __init__(self, name, label, menu_items, menu_labels=(), default_value=0, + icon_names=(), item_generator_script='', + item_generator_script_language=None, disable_when=None, + menu_type=hou.menuType.Normal, is_hidden=False, is_label_hidden=False, + join_with_next=False, help=None, script_callback=None, + script_callback_language=hou.scriptLanguage.Hscript, tags={}, + default_expression="", + default_expression_language=hou.scriptLanguage.Hscript) + + name + See hou.ParmTemplate.name for more information. + + label + See hou.ParmTemplate.label for more information. + + menu_items + See the menuItems method for more information. + + menu_labels + See the menuLabels method for more information. + + If this parameter is not given, it defaults to the value of the + menu_items parameter. + + default_value + See the defaultValue method for more information. + + icon_names + See the iconNames method for more information. + + If this parameter is an empty tuple, the menu will not contain + icons. + + item_generator_script + See the itemGeneratorScript method for more information. + + item_generator_script_language + See the itemGeneratorScriptLanguage method for more information. If + this parameter is None it defaults to hou.scriptLanguage.Python. + + menu_type + See the menuType method for more information. + + disable_when + See hou.ParmTemplate.disableWhen for more information. + + is_hidden + See hou.ParmTemplate.isHidden for more information. + + is_label_hidden + See hou.ParmTemplate.isLabelHidden for more information. + + join_with_next + See hou.ParmTemplate.joinsWithNext for more information. + + help + See hou.ParmTemplate.help for more information. + + script_callback + See hou.ParmTemplate.scriptCallback for more information. + + script_callback_language + See hou.ParmTemplate.scriptCallbackLanguage for more information. + + tags + See hou.ParmTemplate.tags for more information. + + default_expression + See the defaultExpression method for more information. + + default_expression_language + See the defaultExpressionLanguage method for more information. + + Note that MenuParmTemplates have only one component. + """ + def defaultValue(self): + """ + defaultValue(self) -> int + + Return the index of the default menu item. + + See also the defaultValueAsString method. + """ + return 0 + + def defaultValueAsString(self): return '' + def setDefaultValue(self, default_value): + """ + setDefaultValue(self, default_value) + + Set the index of the default menu item. + + Note that if this index is out of range, it will be adjusted. + """ + + def defaultExpression(self): + """ + defaultExpression(self) -> string + + Return the expression, which when evaluated, returns the index of the + default menu item. + + The default expression takes precendence over the default value. If + the default expression is not set (i.e. an empty string), then the + default value is used instead. + + Note that the default expression language is needed to interpret the + meaning of the default expression. + """ + return '' + + def setDefaultExpression(self, default_expression): + """ + setDefaultExpression(self, default_expression) + + Set the default expression, which when evaluated, returns the index of + the default menu item. + + If default_expression is the empty string, then the default expression + is unset. + """ + + def defaultExpressionLanguage(self): + """ + defaultExpressionLanguage(self) -> tuple of hou.scriptLanguage + + Return the default expression language. + + The default expression language only applies if the default expression + is set. If the default expression is not set, then the expression + language is set to hou.scriptLanguage.Hscript. + """ + return (scriptLanguage,) + + def setDefaultExpressionLanguage(self, default_expression_language): + """ + setDefaultExpressionLanguage(self, default_expression_language) + + Set the default expression language. + + See the defaultExpressionLanguage method for more information. + """ + + def menuItems(self): + """ + menuItems(self) -> tuple of str + + Return the tuple of internal menu names. + + These internal menu names are not displayed in the UI, but they can be + passed to hou.Parm.set and will be returned by hou.Parm.evalAsString + for menu parameters. + """ + return ('',) + + def setMenuItems(self, menu_items): + """ + setMenuItems(self, menu_items) + + Set the internal menu names to the given sequence of strings. + + See the menuItems method for more information. + + If the new number of menu items is less than the old number, the menu + labels will be shortened and the default value will be modified if it is + out of range. + """ + + def menuLabels(self): + """ + menuLabels(self) -> tuple of str + + Return the tuple of menu labels displayed in the UI. + """ + return ('',) + + def setMenuLabels(self, menu_labels): + """ + setMenuLabels(self, menu_labels) + + Set the menu labels displayed in the UI to the given sequence of + strings. + + If the number of menu labels is less than the number of menu items, + Houdini uses the internal menu item names for the missing labels. If + the number of labels is more than the number of menu items, Houdini + discards the extra labels. + + If you want to change both the menu items and menu labels, be sure to + change the menu items first. + """ + + def iconNames(self): + """ + iconNames(self) -> tuple of str + + Return the tuple of icons corresponding to the menu items. If there are + no icons, returns a tuple of empty strings. + """ + return ('',) + + def setIconNames(self, icon_names): + """ + setIconNames(self, icon_names) + + Set the icon names to the given sequence of strings. + """ + + def itemGeneratorScript(self): + """ + itemGeneratorScriptLanguage(self) -> hou.scriptLanguage enum value + + Return the programming language for the script that generates menu + items. + """ + return scriptLanguage() + + def setItemGeneratorScript(self,item_generator_script): + """ + setItemGeneratorScript(self, item_generator_script) + + Set the script used to generate menu items. + + See the itemGeneratorScript method for more information. + """ + + def itemGeneratorScriptLanguage(self): return + def setItemGeneratorScriptLanguage(self, language): + """ + setItemGeneratorScriptLanguage(self, language) + + Set the script language used to generate menu items to a + hou.scriptLanguage enum value. + + See the itemGeneratorScriptLanguage method for more information. + """ + + def menuType(self): + """ + menuType(self) -> hou.menuType enum value + + Return the type of menu. Note that some menu types only apply to string + parameters with menus, so the meaningful menu types for + MenuParmTemplates are hou.menuType.Normal (for standard menus) and + hou.menuType.Mini for menus that only display a dropdown arrow. See + hou.menuType for more information. + """ + return menuType() + + def setMenuType(self, menu_type): + """ + setMenuType(self, menu_type) + + Set the type of menu to a hou.menuType enum value. + + See the menuType method for more information. + """ + +class NetworkEditor(PathBasedPaneTab): + """ + hou.NetworkEditor + + REPLACES + * neteditor + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def autoPlaceNodes(self): + """ + autoPlaceNodes(self) -> bool + """ + return True + + def autoScrollNodes(self): return True + def listMode(self): + """ + listMode(self) -> bool + """ + return True + + def setListMode(self, list_mode): + """ + setListMode(self, list_mode) + """ + + def selectPosition(self, input_node=None, output_index=0, output_node=None, + input_index=0): + """ + selectPosition(self, input_node=None, output_index=0, output_node=None, + input_index=0) -> Vector2 + """ + return Vector2() + + def cursorPosition(self): return Vector2() + def homeToSelection(self): + """ + homeToSelection(self) + + Centers the nodes within the network editor to show the current + selection. + """ + + def frameSelection(self): + """ + frameSelection(self) + + Centers the nodes within the network editor to show the current + selection and zooms to its extents. + """ + + def insertIntoUnderlyingConnections(self): return + def autoAddToNetbox(self): return + def modifyPositionForNode(self, vector2, node): + """ + modifyPositionForNode(self, vector2, node) -> Vector2 + + A service method that offsets the position of the node, if necessary, + for the node's midpoint to truly be located at the input position. This + is necessary to properly position VOP nodes when given initial + coordinates. + """ + return Vector2() + +class Bundle(object): + """ + hou.NodeBundle + + A named set of nodes whose contents can be from different networks. A + bundle's contents may be fixed or may be determined from a pattern, and + the contents may be filtered by node type. + + Unlike node groups, the nodes in a bundle may be from different node + networks. For example, the same bundle may contain /obj/geo1 and + /obj/subnet1/geo2. Node groups are primarily used to organize and + display very large networks, while node bundles are normally used to + track which objects are lit by a light, which objects are visible in a + scene, etc. + + There are two types of node bundles: regular and smart. You can add and + remove individual nodes to and from a regular bundle. The nodes in a + smart bundle, on the other hand, are determined from a pattern stored in + the bundle. As nodes matching the pattern are created or deleted in + Houdini, the contents of the bundle will update automatically. You can + use hou.NodeBundle.pattern to determine if the bundle is a smart bundle + or a regular one. + + When a node matches the pattern in a smart bundle, that node and its + children will be added to the bundle. For example, if the pattern in + "/obj/*" and /obj/box_object1 is a geometry object, all the nodes + inside /obj/box_object1 will be added to the bundle, recursively. + Carets (^) in the pattern can be used to remove nodes; for example, + "/obj/* ^/obj/geo1" will match everything in /obj except for + /obj/geo1. + + A bundle may also have a filter to specify what types of nodes may be in + the bundle. See hou.nodeTypeFilter for the possible filters. If you + try to add a node to a regular bundle but the node does not match the + filter, Houdini will fail to add the node. For smart bundles, the + filter is applied after doing any pattern matching. For example, if the + pattern is "/obj/*" and the filter is hou.nodeTypeFilter.Obj, the + bundle will contain only the objects in /obj, without any SOPs, etc. + inside them. Because the pattern is applied recursively, however, any + objects inside object subnets will also be in the bundle. + + To specify a bundle in a node parameter that expects a list of nodes, + prefix the bundle name with @. For example, you can enter @bundle1 in + the light mask parameter of an object so it is lit by the nodes inside + the bundle named bundle1. + + You can view and edit node bundles in Houdini's Bundle List pane. Use + hou.nodeBundle_ and hou.nodeBundles to access existing node bundles, and + hou.addNodeBundle to create a new bundle. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def destroy(self): + """ + destroy(self) + + Remove this bundle. + + REPLACES + opbrm command """ + + def name(self): + """ + name(self) -> str + + Return the name of the bundle. + + REPLACES + opbls command """ + return '' + + def setName(self, name): + """ + setName(self, name) + + Change the name of the bundle. + + Raises hou.OperationFailed if the name contains non-alphanumeric + characters other than _, or if a bundle with that name already exists. + + REPLACES + opbname command """ + + def filter(self): + """ + filter(self) -> hou.nodeTypeFilter enum value + + Return the bundle's filter. For smart bundles, the filter is applied + after matching nodes to the pattern, and nodes whose types do not match + the filter are removed from the bundle. + + See hou.nodeTypeFilter for the possible filters. + hou.nodeTypeFilter.NoFilter is a special value to indicate that there is + no filtering. + + See the class documentation for more information about filtering. + + REPLACES + opbls command """ + return nodeTypeFilter() + + def setFilter(self, node_type_filter): + """ + setFilter(self, node_type_filter) + + Set this bundle's filter to a hou.nodeTypeFilter enumerated value. Use + hou.nodeTypeFilter.NoFilter to clear the filter. + + See hou.NodeBundle.filter and the class documentation for more + information. + """ + + def pattern(self): + """ + pattern(self) -> str or None + + Return None if this bundle is a regular bundle, or a string pattern if + the bundle is a smart bundle. + + See the class documentation for more information on smart bundles. Note + that if a node matches the pattern, all its subchildren will be in the + bundle, as long as they match the filter. For example, if the pattern + is "/obj/*" and the filter is hou.nodeTypeFilter.NoFilter, the bundle + will contain all nodes under /obj, recursively. + + REPLACES + opbls command """ + return '' + + def setPattern(self, pattern_or_none): + """ + setPattern(self, pattern_or_none) + + Change the pattern of this bundle. + + Setting the pattern to None changes the bundle into a regular bundle. + In this case, the bundle's contents are unchanged, but Houdini will no + longer do pattern matching to determine the bundle's contents. + + If the pattern is a string, the bundle becomes a smart bundle and its + contents immediately change to match the pattern. The bundle's contents + will update as nodes are created and deleted in Houdini. + + See hou.NodeBundle.pattern and the class documentation for more + information. + + REPLACES + opbop command """ + + def nodes(self): + """ + nodes(self) -> tuple of hou.Node + + Return a tuple of the nodes in this bundle. + + REPLACES + opbls command + opblist function """ + return (Node(),) + + def containsNode(self, node): + """ + containsNode(self, node) -> bool + + Return True if the node is in the bundle and False otherwise. node must + be a hou.Node object. + + This method is a shortcut for node in bundle.nodes(). For bundles with + many nodes, this method will be slightly faster. + + REPLACES + opexist function """ + return True + + def addNode(self, node): + """ + addNode(self, node) + + Add a node to the bundle. + + Raises hou.OperationFailed if this bundle is a smart bundle, since the + contents of smart bundles are automatically determined by their pattern. + + REPLACES + opbop command """ + + def removeNode(self, node): + """ + removeNode(self, node) + + Remove a node from the bundle. + + Raises hou.OperationFailed if this bundle is a smart bundle, since the + contents of smart bundles are automatically determined by their pattern. + + REPLACES + opbop command """ + + def clear(self): + """ + clear(self) + + Remove all nodes from the bundle. + + Raises hou.OperationFailed if this bundle is a smart bundle, since the + contents of smart bundles are automatically determined by their pattern. + + REPLACES + opbop command """ + + def isSelected(self): + """ + isSelected(self) -> bool + + Return True if the bundle is selected in the bundle list pane and False + otherwise. + + REPLACES + opbls command """ + return True + + def setSelected(self, on, clear_all_selected=false): + """ + setSelected(self, on, clear_all_selected=false) + + Select this bundle in the bundle list pane. If clear_all_selected is + True, only this bundle will remain selected. Otherwise, this bundle + will be added to the existing selection. + """ + +class NodeConnection(object): + """ + hou.NodeConnection + + Represents a connection (wire) between two Nodes. + + OVERVIEW + You can get a list of NodeConnection objects from a hou.Node instance + using hou.Node.inputConnections and hou.Node.outputConnections. + + + It is probably easier to use the hou.Node..inputs and hou.Node.outputs + methods (which return the endpoints of a node's connections) to traverse + the network, rather than dealing with the connections themselves. + + This object is "read-only". To create or edit connections, use methods + on the node, such as hou.Node.setNamedInput, hou.Node.setInput, + hou.Node.setFirstInput, hou.Node.setNextInput, hou.Node.createInputNode, + and hou.Node.createOutputNode. + + You can get a list of NodeConnection objects from a hou.Node + instance using hou.Node.inputConnections and + hou.Node.outputConnections. + + + It is probably easier to use the hou.Node..inputs and + hou.Node.outputs methods (which return the endpoints of a node's + connections) to traverse the network, rather than dealing with the + connections themselves. + + This object is "read-only". To create or edit connections, use + methods on the node, such as hou.Node.setNamedInput, + hou.Node.setInput, hou.Node.setFirstInput, hou.Node.setNextInput, + hou.Node.createInputNode, and hou.Node.createOutputNode. + + + INPUT AND OUTPUT MEANING + Somewhat confusingly, the hou.NodeConnection.outputNode and + hou.NodeConnection.inputNode are named in relation to the _nodes_, *not* + the "input" and "output" ends of the _connector_. + + + So, outputNode() returns the node whose _output_ is this connector. In + the diagram, outputNode() on the highlighted connection would return + node "A". inputNode() returns the node whose input is this connector. + In the diagram, inputNode() on the highlighted connection would return + node "C". + + Somewhat confusingly, the hou.NodeConnection.outputNode and + hou.NodeConnection.inputNode are named in relation to the _nodes_, + *not* the "input" and "output" ends of the _connector_. + + + So, outputNode() returns the node whose _output_ is this connector. + In the diagram, outputNode() on the highlighted connection would + return node "A". inputNode() returns the node whose input is this + connector. In the diagram, inputNode() on the highlighted connection + would return node "C". + + + CONNECTION INDEXES + Some nodes have multiple inputs and/or multiple outputs. For example, + most VOPs have several inputs and outputs. The Split DOP has multiple + outputs. + + A node with a multi-input, such as the Merge SOP, has multiple + "inputs" for each connection, even though in the network editor it is + drawn with one "connection point" at the top. + + Inputs and outputs are always addressed by their position (index). + + + Some nodes have multiple inputs and/or multiple outputs. For + example, most VOPs have several inputs and outputs. The Split DOP + has multiple outputs. + + A node with a multi-input, such as the Merge SOP, has multiple + "inputs" for each connection, even though in the network editor it + is drawn with one "connection point" at the top. + + Inputs and outputs are always addressed by their position (index). + + + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def inputNode(self): + """ + inputNode(self) -> hou.Node + + Return the node on the input side of this connection. This is the node + that the connection comes from, in the direction of data flow. + """ + return Node() + + def outputNode(self): + """ + outputNode(self) -> hou.Node + + Return the node on the output side of this connection. This is the node + that the connection goes to, in the direction of data flow. + """ + return Node() + + def inputIndex(self): + """ + inputIndex(self) -> int + + Returns the index of the input connection on the node that the output + side of this connections connects to. + + See the class documentation for more information. + """ + return 0 + + def outputIndex(self): + """ + outputIndex(self) -> int + + Returns the index of the output connection on the node that the input + side of this connections connects to. + + See the class documentation for more information. + """ + return 0 + + def inputName(self): + """ + inputName(self) -> str + + Returns the name of the input connection on the node that the output + side of this connections connects to. + """ + return '' + + def outputName(self): + """ + outputName(self) -> str + + Returns the name of the output connection on the node that the input + side of this connections connects to. + """ + return '' + + def subnetIndirectInput(self): + """ + subnetIndirectInput(self) -> hou.SubnetIndirectInput + + If this connection has a subnet indirect input connected to it instead + of a node, return the corresponding object. Otherwise, return None. + See hou.SubnetIndirectInput for information on subnet indirect inputs. + """ + return SubnetIndirectInput() + +class NodeTypeCategory(object): + """ + hou.NodeTypeCategory + + Represents a category of node types, such as surface nodes (SOPs) or + particle nodes (POPs). + + Use hou.nodeTypeCategories to get a dict of node type category names to + NodeTypeCategory objects. You can use hou.objNodeTypeCategory, + hou.sopNodeTypeCategory, etc. to directly access a particular node type + category. + + See also hou.NodeType and hou.Node. + + # Get the names of all the node type categories. + >>> hou.nodeTypeCategories().keys() + ['Shop', 'Cop2', 'CopNet', 'Particle', 'ChopNet', 'Object', 'Driver', 'Pop', + 'Chop', 'Sop', 'Manager', 'Vop', 'Director', 'Dop', 'VopNet'] + + RELATED + * hou.nodeTypeCategories + * hou.objNodeTypeCategory + * hou.sopNodeTypeCategory + * hou.popNodeTypeCategory + * hou.dopNodeTypeCategory + * hou.cop2NodeTypeCategory + * hou.shopNodeTypeCategory_ + * hou.vopNodeTypeCategory + * hou.ropNodeTypeCategory + * hou.chopNodeTypeCategory + * hou.popNetNodeTypeCategory + * hou.cop2NetNodeTypeCategory + * hou.vopNetNodeTypeCategory + * hou.chopNetNodeTypeCategory + * hou.managerNodeTypeCategory + * hou.rootNodeTypeCategory + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def name(self): + """ + name(self) -> str + + Returns the name of this node type category. + + REPLACES + optype command + optypeinfo function """ + return '' + + def typeName(self): return '' + def nodeTypes(self): + """ + nodeTypes(self) -> dict of str to hou.NodeType + + Return a dict mapping node type names to node types in this category. + + For example, if this node type category is SOPs, the keys in the + dictionary would be "box", "sphere", "polyextrude", "subdivide", + etc. + + Note that the node types in this category may not all be instances of + the same class. For example, most node types in the SOP node type + category are instances of hou.SopNodeType, but some, like SHOP networks, + CHOP networks, etc. are not. + + # Access the box SOP's node type. + hou.sopNodeTypeCategory().nodeTypes()['box'] + + def findNodeTypes(node_type_category, pattern): + '''Return a list of node types in a particular node type category + whose names match a pattern.''' + import fnmatch + + return [node_type + for node_type_name, node_type in node_type_category.nodeTypes().items() + if fnmatch.fnmatch(node_type_name, pattern)] + + See also hou.nodeType_. + + REPLACES + opadd command + otglob command """ + return (NodeType(),) + + def viewerStates(self, viewer_type): + """ + viewerStates(self, viewer_type) -> tuple of hou.ViewerState + """ + return (ViewerState(),) + + def loadDSO(self, dso_path): + """ + loadDSO(self, dso_path) + + Loads the HDK custom operator identified by the given file path for this + node type category. It will use the HOUDINI_DSO_PATH environment + variable to find it if necessary. + """ + + def _asVoidPointer(self): return + +class OrboltURLHandler(object): + + def __init__(self): raise AttributeError, "No constructor defined" + def updateProgressBar(self): return + def closeSplashScreen(self): return + +class PackedPrim(Prim): + """ + hou.HOM_PackedPrim + + A packed primitive. + + See packed primitives for more information. + + To set contents of the packed primitive, use the + hou.Prim.setIntrinsicValue method: + + prim = myGeometry.createPacked("PackedDisk") + prim.setIntrinsicValue("unexpandedfilename", "defgeo.bgeo") + + To get the list of available "intrinsic attributes" you can set: + + * View a packed primitive of the type you want in the geometry + spreadsheet and turn on display of intrinsic attributes. + + _or_ + + * In a Houdini tools command line, type ginfo -IP to see a list of all + intrinsc attributes on all packed primitive types. + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def transform(self): + """ + transform(self) -> hou.Matrix3 + + Returns the local 3x3 transform associated with this primitive. The + transform doesn't include the local point transform or any transforms + inside the primitive (for example, transforms inside an Alembic file). + """ + return Matrix3() + + def fullTransform(self): return + def setTransform(self, matrix4): + """ + setTransform(self, m4) + + Sets this primitive's local transform. This sets the local 3x3 transform + _and_ the translation of the point. This does not affect any transforms + inside the primitive (for example, transforms inside an Alembic file). + + m4 + A hou.Matrix4 object containing the full transform. + """ + + def vertex(self, index): + """ + vertex(self, index) -> hou.Vertex + + A shortcut for self.vertices()[index]. You probably don't need to call + this method. + + This method supports negative indices to index from the end, just like + self.vertices()[index] would. Also, like Python's indexing operator, it + will raise IndexError when the index is out of range. + """ + return Vertex() + +class Parm(object): + """ + hou.Parm + + A parameter in a node. Each parameter has a unique name within its node + and exists inside a parameter tuple. + + REPLACES + * chadd + * chalias + * chautoscope + * chkey + * chkeyget + * chkeyls + * chlock + * chrefit + * chreverse + * chrm + * chround + * chscope + * chstretch + * opparm + * opscript + * ch + * chf + * chs + * chsraw + * cht + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def node(self): + """ + node(self) -> hou.Node + + Returns the node on which this parameter exists. + """ + return Node() + + def tuple(self): + """ + tuple(self) -> hou.ParmTuple + + Returns the hou.ParmTuple associated with this parameter. + + For example, calling this method on the Parm object for the translation + parameter "tx", would return a ParmTuple that contains Parm objects + for the three translation parameters "tx", "ty" and "tz". If no + tuple is associated with the parameter, then the parameter itself is + returned in a tuple of size 1. + """ + return ParmTuple() + + def parmTemplate(self): + """ + parmTemplate(self) -> hou.ParmTemplate + + Returns the template for this parameter. + """ + return ParmTemplate() + + def name(self): + """ + name(self) -> str + + Returns this parameter's name. + """ + return '' + + def path(self): + """ + path(self) -> str + + Returns the full path to this parameter. + """ + return '' + + def description(self): + """ + description(self) -> str + + Returns this parameter's label. + """ + return '' + + def componentIndex(self): + """ + componentIndex(self) -> int + + Returns the component index of this parameter. + + For example, the translation parameter along the x-axis, "tx", would + return a component index of 0, while the translation parameter along the + y-axis, "ty" would return a component index of 1. + """ + return 0 + + def menuLabels(self): + """ + menuLabels(self) -> tuple of str + + Returns a list of labels for all possible menu items (for a menu + parameter). Raises hou.OperationFailed if this parameter is not a menu. + """ + return ('',) + + def menuItems(self): + """ + menuItems(self) -> tuple of str + + Returns a list of all possible menu items (for a menu parameter). Raises + hou.OperationFailed if this parameter is not a menu. + """ + return ('',) + + def pressButton(self): + """ + pressButton(self) + + Emulates clicking a button parameter to trigger its callback script. + Raises hou.OperationFailed if the callback script could not be run. + """ + + def setPending(self, value): + """ + setPending(self, value) + + Sets the parameter value at the current frame and marks it as pending if + the parameter is keyed. + + Raises hou.TypeError if the type of value does not match this + parameter's type. Raises hou.PermissionError if this parameter is not + writable. + """ + + def set(self, value, language=None): + """ + set(self, value, language=None) + + Sets the parameter value at the current frame. + + If this parm currently contains a channel reference to another + parameter, this method will follow channel references and change the + value of the referenced parameter. If this is not the desired behavior, + first delete the channel reference with deleteAllKeyframes. + + Pass in a hou.Ramp object, as the parameter value, to set the value of + a ramp parameter. The ramp object's type needs to match the target + ramp's type. + + Raises hou.TypeError if the type of value does not match the type of + this parameter. Raises hou.PermissionError if this parameter is not + writable. + + See also hou.Node.setParms. + """ + + def revertToDefaults(self): + """ + revertToDefaults(self) + + Change the value back to the default(s). See also the + revertToAndRestoreFactoryDefaults() method. + """ + + def revertToAndRestorePermanentDefaults(self): + """ + revertToAndRestorePermanentDefaults(self) + + Changes the value back to the default that ships with Houdini, and + restores that default. + + See also the revertToDefaults() method, and + hou.ParmTuple.revertToAndRestorePermanentDefaults + """ + + def hasTemporaryDefaults(self): + """ + hasTemporaryDefaults(self) -> bool + + Returns whether a default has been explicitly set on the parameter. + + See also the revertToDefaults() and + revertToAndRestorePermanentDefaults()methods. + """ + return True + + def isAtDefault(self, compare_temporary_defaults=True, + compare_expressions=False): + """ + isAtDefault(self, compare_temporary_defaults=True, + compare_expressions=False) -> bool + + Returns whether the parameter is currently at its default. + + compare_temporary_defaults + When is True, isDefault also checks + against any temporary defaults a user may have set. The value of + must be either True or False. + + compare_expressions + When is True, isDefault compares the actual + expression when a parameter has a default factory expression. The + value of must be either True or False. + + See also the revertToDefaults() and + revertToAndRestorePermanentDefaults()methods. + """ + return True + + def setExpression(self, expression, language=None, replace_expression=True): + """ + setExpression(self, expression, language=None, replace_expression=True) + + Sets this parameter's expression. + + expression + A string containing the expression that will go inside the + parameter. + + language + Either a hou.exprLanguage enumeration value or None. + + If language is None and the parameter does not already contain an + expression, the language will be the node's expression language. + (See hou.Node.expressionLanguage.) Otherwise, if language is None + and the parameter already has an expression, the expression language + will not change. + + replace_expression + This parameter only has effect if the parameter already contains + keyframes. If it is True, Houdini will replace the keyframe before + the current time with one containing the new expression. Otherwise, + it will always add a keyframe at the current time. Note that this + behavior matches what happens when you edit an expression from + Houdini's parameter dialog. + + Unlike hou.Parm.set, this method does not follow channel references. + That is, if this parameter is referencing another parameter and you call + setExpression(), it change the channel reference expression into the + specified expression. + + If the parameter does not already contain any keyframes, this method is + roughly equivalent to setting a keyframe at frame 1, where the + keyframe's expression and language are the ones specified. + + This method can be approximately implemented as follows: + + def setExpression(self, expression, language=None, replace_expression=None) + if self.template().type() == hou.parmTemplateType.String: + k = hou.StringKeyframe() + else: + k = hou.Keyframe() + + k.setExpression(expression, language) + + if len(self.keyframes()): + if replace_expression: + k.setTime(self.effectiveKeyframeAtFrame(hou.frame()).time()) + else: + k.setTime(hou.time()) + else + k.setTime(0.0) + + self.setKeyframe(k) + + See also the expression, expressionLanguage, and setKeyframe methods, + hou.Node.expressionLanguage, and hou.Node.setExpressions. + """ + + def expression(self): + """ + expression(self) -> str + + Returns this parameter's expression. + + For example, a parameter might contain the Python expression "frame() * + 2". In this case [Hom:hou.Parm#eval] at frame 2 would return the value + 4, while calling expression() would return the string "frame() * 2". + + If the parameter does not contain an expression, this method will raise + hou.OperationFailed. Also, if the parameter contains more than one + keyframe then it could contain multiple different expressions, so it + also raises hou.OperationFailed in that case. + + This method is roughly equivalent to... + parm.keyframes()[0].expression() + + + See also the setExpression(), expressionLanguage(), keyframes(), and + eval() methods. + """ + return '' + + def expressionLanguage(self): + """ + expressionLanguage(self) -> hou.exprLanguage enum value + + Returns the parameter's expression's language. + + If the parameter does not contain an expression, this method will raise + hou.OperationFailed. Also, if the parameter contains more than one + keyframe then it could contain multiple different expressions, so it + also raises hou.OperationFailed in that case. + + To change the expression language, use hou.Parm.setExpression and + explicitly specify the language: parm.setExpression(parm.expression(), + language). + + This method is roughly equivalent to... + + parm.keyframes()[0].expressionLanguage() + + See also the expression(), setExpression(), keyframes(), and + setExpressionLanguage() methods. + """ + return exprLanguage() + + def setKeyframe(self,keyframe): + """ + setKeyframe(self, keyframe) + + Sets a keyframe on this parameter. + + Raises hou.TypeError if keyframe is not of type hou.BaseKeyframe. Raises + hou.PermissionError if this parameter is not writable. + """ + + def keyframes(self): + """ + keyframes(self) -> tuple of hou.BaseKeyframe + + Returns the keyframes on this parameter. + """ + return (BaseKeyframe(),) + + def evalAsFloat(self): + """ + evalAsFloat(self) -> float + + Evaluates this parameter at the current frame and returns the result as + a float. + + Raises hou.TypeError if the value cannot be converted to a float. + """ + return 0.0 + + def evalAsFloatAtFrame(self, frame): + """ + evalAsFloatAtFrame(self, frame) -> float + + Evaluates this parameter at a certain frame and returns the result as a + float. + + Raises hou.TypeError if the value cannot be converted to a float. + """ + return 0.0 + + def evalAsInt(self): + """ + evalAsInt(self) -> int + + Evalutes this parameter at the current frame and returns the result as + an integer. + + Raises hou.TypeError if the value cannot be converted to an integer. + """ + return 0 + + def evalAsIntAtFrame(self, frame): + """ + evalAsIntAtFrame(self, frame) -> int + + Evaluates this parameter at a certain frame and returns the result as an + integer. + + Raises hou.TypeError if the value cannot be converted to an integer. + """ + return 0 + + def evalAsString(self, frame): + """ + evalAsRampAtFrame(self, frame) -> str + + Evalutes this parameter at a certain frame and returns the result as a + ramp. + + Raises hou.TypeError if the parameter is not a ramp. + + REPLACES + opramp command """ + return '' + + def evalAsStringAtFrame(self, frame): + """ + evalAsStringAtFrame(self, frame) -> str + + Evaluates this parameter at a certain frame and returns the result as a + string. + + If you want the string contents of the parameter before variable + expansion and expression evaluation then call hou.Parm.unexpandedString. + + Raises hou.TypeError if the value cannot be converted to a string. + """ + return '' + + def evalAsRamp(self): return Ramp() + def evalAsRampAtFrame(self, frame): return Ramp() + def unexpandedString(self): + """ + unexpandedString(self) -> str + + Returns the contents of the parameter before dollar sign and back-tick + expansion. + + Examples of unexpanded strings would be "image$F.pic", + "$HIP/split.otl", or "chs('../font1/text')". If you were to call + eval() on them, Houdini would perform variable expansion and back-tick + expression evaluation, so you would get back something like + "image1.pic" instead of "image$F.pic". + + Because only string parameters will attempt to do dollar sign and string + expansion, this method will raise hou.OperationFailed if called from a + non-string parameter. + + Suppose a string parameter contains keyframes. In this situation, + Houdini will not attempt to do string expansion on the parameter's + value, so calling this method will raise hou.OperationFailed. Instead of + calling this method, you can call expression() to access the first + Keyframe's expression. If there are multiple keyframes, you can call + keyframes() to get a list of hou.StringKeyframe objects and call + expression() on those objects to retrieve the expression. + """ + return '' + + def deleteKeyframeAtFrame(self, frame): return + def deleteAllKeyframes(self): + """ + deleteAllKeyframes(self) + + Removes all keyframes from this parameter. + + This has no effect if there are no keyframes to delete. The value of the + parameter after all keyframes are removed will be the one it evaluated + to at the current frame. + + This function will raise a hou.ObjectWasDeleted exception if it is + invoked on a parameter that does not exist in Houdini. + + This function will raise a hou.PermissionError exception if writing to + the specified parameter is impossible. + + See also hou.ParmTuple.deleteAllKeyframes. + """ + + def getReferencedParm(self): + """ + getReferencedParm(self) -> hou.Parm + + Returns the referenced parameter. If no parameter is referenced, returns + this parameter. + """ + return Parm() + + def parmsReferencingThis(self): + """ + parmsReferencingThis(self) -> tuple of hou.Parm + + Return a tuple of all the parameters in the scene that have channel + references to this parameter. + """ + return (Parm(),) + + def isLocked(self): + """ + isLocked(self) -> bool + + Returns whether this parameter is locked (uneditable). + """ + return True + + def lock(self, on): + """ + lock(self, on) + + Locks (lock(True)) or unlocks (lock(False)) this parameter (this is, + makes the value uneditable). + + Raises hou.PermissionError if this parameter is part of a locked digital + asset. + """ + + def isAutoscoped(self): + """ + isAutoscoped(self) -> bool + + Returns whether this parameter's autoscope property is on. + """ + return True + + def setAutoscope(self, on): + """ + setAutoscope(self, on) + + Changes the autoscope property of the parameter. If this property is on, + this parameter is automatically scoped when the object is selected. + """ + + def alias(self): + """ + alias(self) -> str + + Returns the parameter's channel alias name. Returns an empty string if + no such name exists. + """ + return '' + + def setAlias(self, alias_name): + """ + setAlias(self, alias_name) + + Gives the parameter another name by which it can be referenced in + channels. You can pass in an empty string to remove an existing alias + name. + """ + + def isSpare(self): + """ + isSpare(self) -> bool + + Returns whether this parameter is a "spare" (user-defined) parameter. + """ + return True + + def isTimeDependent(self): + """ + isTimeDependent(self) -> bool + + Returns whether this parameter is _time dependent_, that is, its value + changes depending on the point on the timeline at which it's evaluated. + For example the parameter has an expression containing the $F (current + frame number) variable. + """ + return True + + def isMultiParmInstance(self): + """ + isMultiParmInstance(self) -> bool + + Return whether this parameter is an instance of a multi parm. For + example, the pt0x, pt1x, pt2x, etc. parameters in an add SOP are + instances of a multiparm. + """ + return True + + def multiParmInstances(self): + """ + multiParmInstances(self) -> tuple of hou.Parm + + If this parameter corresponds to the number of instances for a + multiparm, return all the parameters corresponding to all instances of + this multiparm. + + Returns an empty tuple if this parameter is not for a multiparm. + """ + return Parm() + + def insertMultiParmInstance(self, index): + """ + insertMultiParmInstance(self, index) + + Insert a new multi parm instance before the given index. To append a new + multi parm instance, set the index to be the current number of + instances. The current number can be queried by calling evalAsInt on the + this parameter. + """ + + def removeMultiParmInstance(self, index): + """ + removeMultiParmInstance(self, index) + + Removes the multi parm instance at the given index. + """ + + def containingFolders(self): + """ + containingFolders(self) -> tuple of str + + Returns a tuple of strings corresponding to the names of the folders + containing this parameter. + + For example, if this parameter is in the Shading folder and the Shading + folder is inside the Render folder, this method will return ("Render", + "Shading"). + + Returns an empty tuple if this parameter is not inside a folder. + + Note that calling this method on many parameters may be slow. For a + faster alternative, see hou.Node.parmsInFolder. + + See also the containingFolderSetParmTuples method, and + hou.Node.parmTuplesInFolder. + """ + return ('',) + + def containingFolderIndices(self): + """ + containingFolderIndices(self) -> tuple of int + + Return a tuple of indices corresponding to the folders containing this + parameter. Each index refers to a folder in the corresponding folder + set parameter. + + This method can be implemented as follows: + def containingFolderIndices(self): + return tuple( + list(folder_set_parm_tuple.parmTemplate().folderNames()).index( + folder_name) + for folder_set_parm_tuple, folder_name in zip( + parm.containingFolderSetParmTuples(), parm.containingFolders())) + + + This example makes a parameter visible in the parameter pane by opening + all the folders containing it. + def makeParmVisible(parm): + for folder_set_parm_tuple, folder_index in zip( + parm.containingFolderSetParmTuples(), + parm.containingFolderIndices()): + folder_set_parm_tuple[0].set(folder_index) + """ + return (0,) + + def containingFolderSetParmTuples(self): + """ + containingFolderSetParmTuples(self) -> tuple of hou.ParmTuple + + Return a tuple of ParmTuples corresponding to the folders containing + this parameter. + + For example, if this parameter is in the Shading folder and the Shading + folder is inside the Render folder, this method will return a tuple + containing the Render parm tuple and the Shading parm tuple. Any parm + tuples returned will be folder sets. + + If this parameter is not inside a folder, an empty tuple is returned. + + See also the containingFolders() method, and hou.Node.parmsInFolder and + hou.Node.parmTuplesInFolder. + """ + return (ParmTuple(),) + + def asCode(self, brief=False, save_values=True, save_keyframes=True, + save_keys_in_frames=False, save_flag_values=True, save_aliases=True, + function_name=None): + """ + asCode(self, brief=False, save_values=True, save_keyframes=True, + save_keys_in_frames=False, save_flag_values=True, save_aliases=True, + function_name=None) -> str + + Returns a script of Python statements that can be executed to set the + parameter tuple's values, flags and other properties. To run the script, + use either Python's exec or execfile functions. + + brief + When is True, the output script omits commands for setting + values and flags that are set to the factory defaults. The script + also omits keyframe commands that set unused values, slopes and + accelerations. The value of must be either True or False. + + save_values + When is True, asCode outputs commands for setting the + parameter tuple's values. The value of must be + either True or False. + + save_keyframes + When is True, asCode outputs commands for creating + the parameter tuple's keyframes (if any). The value of + must be either True or False. + + save_keys_in_frames + When is True, asCode outputs commands for + setting channel and key times in samples (frames) instead of + seconds. This parameter has no effect if is set to + False. The value of must be either True or + False. + + save_flag_values + When is True, asCode outputs commands for setting + the parameter tuple's flag values. The value of + must be either True or False. + + save_aliases + When is True, asCode outputs commands for setting the + parameter tuple's channel aliases. The value of must + be either True or False. + + function_name + If is specified, then the output script is wrapped + in a Python function definition with the given name. + must be a non-zero length string consisting of only alphanumeric + and underscore characters. Any invalid characters are internally + converted to underscores. + + The wrapper function takes in a single argument which must be a + reference to an existing node parameter tuple. For symmetry, the + function also returns the parameter tuple reference. + + Here is an example of saving the output to a file and then loading it + back into Houdini: + # Get a reference to the target parameter tuple. + pt = hou.parmTuple("/obj/geo1/t") + + # Execute asCode and write the output script to file. + script = pt.asCode() + f = open("set_parm_tuple_properties.py", "w") + f.write(script) + f.close() + + # Execute the script. This will set the values, flag values + # and other properties on /obj/geo1's t parameter tuple. It will + # also store a reference to the t parameter tuple into a variable + # named 'hou_parm_tuple'. + execfile("set_parm_tuple_properties.py") + + + Here is an example of saving the output into a function and then + calling it in Houdini: + # Get a reference to the target parameter tuple. + node = hou.parmTuple("/obj/geo1/t") + + # Execute asCode and write the function definition to file. + func = p.asCode(function_name="setParmTupleProperties") + f = open("parmtuplelib.py", "w") + f.write(func) + f.close() + + # Call the function definition to set the properties on another + # parameter tuple. + import parmtuplelib + hou_parm_tuple = parmtuplelib.setParmTupleProperties(node.parm("t")) + """ + return '' + + def createClip(self, parent_node, name, create_new, apply_immediately, + current_value_only): + """ + createClip(self, parent_node, name, create_new, apply_immediately, + current_value_only) -> hou.ChopNode + + Creates a Channel CHOP representing this parameter. The Channel CHOP is + created with the given name as a child of the given parent node. The + parent_node is typically created via + hou.Node.findOrCreateMotionEffectsNetwork. + + create_new + Always create a new Channel CHOP. If set to False, then if a Channel + CHOP already exists with the same name, it will be re-used. If the + parameter already exists on the Channel CHOP, the older parameter + will be removed first. + + apply_immediately + If set to True, then the export flag on the Channel CHOP will be + set. + + current_value_only + If set to True, then only the current value of the parameter will be + stored. + + See also hou.Node.findOrCreateMotionEffectsNetwork. + """ + return ChopNode() + + def overrideTrack(self): + """ + overrideTrack(self) -> hou.Track or None + + Returns the CHOP track overriding this parameter, if any. + """ + return Track() + + def copyToParmClipboard(self): + """ + copyToParmClipboard(self) + + Copies this to the parameter clipboard. See also + hou.parmClipboardContents. + """ + + def isDisabled(self): return True + def disable(self): return + def isHidden(self): return True + def hide(self): return + def eval(self): + """ + eval(self) -> int, float, or str + + Evaluates this parameter at the current frame and returns the result. + See also the evalAtFrame and evalAtTime methods. + """ + return + + def evalAtFrame(self, frame): + """ + evalAtFrame(self, frame) -> int, float, or str + + Evalute this parameter at a given frame and return the result as an + integer, float or string. + + See also evalAtTime. + """ + return + + def evalAtTime(self, time): + """ + evalAtTime(self, time) -> int, float, or str + + Evalute this parameter at a given time and return the result as an + integer, float or string. + + See also evalAtFrame. + """ + return + +class ParmTuple(object): + """ + hou.ParmTuple + + A tuple of one or more node parameters. Each parameter tuple has a + unique name within its node. + + The ParmTuple class behaves like a Python sequence, so you can index + into it using square brackets, iterate over it, call len on it, etc. + The elements inside the parameter tuple are hou.Parm objects. + + A parameter tuple's name may only contain letters, numbers, and + underscores. For example, objects contain a parameter tuple named "t" + that contains three integer parameters. The names of the parameters + inside the tuple are determined from the parameter tuple's name and its + naming scheme. For example, the "t" parameter uses the XYZW naming + scheme, so the three parameters inside it are named "tx", "ty", and + "tz". Note that if the parameter tuple only contains one parameter, + the tuple and the parameter inside it may have the same name. + + In addition to a name, a parameter tuple also has a label that is + displayed to the user in the parameter dialog. For example, the "t" + parameter's label is "Translate". The label may contain spaces and + punctuation characters. + + Each parameter in a tuple stores a value. Different instances of parm + tuples in different nodes will store their own set of parameter values. + The value in a parameter may be animated, in which case the parameter + evaluates to a different result depending on the current time on the + playbar. See hou.Keyframe for more information about animated + parameters. + + Each hou.NodeType has a set of parameter tuple descriptions associated + with it, and each instance of a hou.Node has a corresponding set of + parameter tuple instances. The parameter tuples store specific values + that are saved with the node. The descriptions of the parameter tuples, + however, are represented by a hou.ParmTemplate. A parameter template + describes the type, default values, ranges, etc. of a parameter tuple. + + See also hou.parmTuple_ and hou.Node.parmTuple. + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def node(self): + """ + node(self) -> hou.Node + + Return the node containing this parameter tuple. + """ + return Node() + + def parmTemplate(self): + """ + parmTemplate(self) -> hou.ParmTemplate + + Return this parameter tuple's template. + + Note that a folder parameter will have a hou.FolderSetParmTemplate + template and a multiparm parameter will have a hou.FolderParmTemplate + template. + """ + return ParmTemplate() + + def name(self): + """ + name(self) -> str + + Return the name of this parameter tuple. Note that the parameter + tuple's name and its naming scheme determine the names of the parameters + inside it. + + >>> node = hou.node("/obj").createNode("geo") + >>> node.parmTuple("t").parmTemplate().namingScheme() + parmNamingScheme.XYZW + >>> [parm.name() for parm in node.parmTuple("t")] + ['tx', 'ty', 'tz'] + + >>> parm_tuple = node.parent().createNode("cam").parmTuple("dcolor") + >>> parm_tuple.parmTemplate().namingScheme() + parmNamingScheme.RGBA + >>> [parm.name() for parm in parm_tuple] + ['dcolorr', 'dcolorg', 'dcolorb'] + + REPLACES + opparm command """ + return '' + + def description(self): + """ + description(self) -> str + + Return this parameter tuple's label that is displayed in the parameter + dialog. + + REPLACES + opparm command """ + return '' + + def set(self, values): + """ + set(self, values) + + Sets the value of a parameter in the tuple at the current frame. + + values + A sequence of floats or strings, corresponding to the components of + this parameter tuple. + + For example, the parameter tuple for "translation" contains Parm + objects for translation along each of the axes, "tx", "ty" and + "tz". If set is called with following tuple of floats, (2.5, 4.0, + 5.5), then the parameter "tx" with be set to 2.5, "ty" will be set + to 4.0 and "tz" will be set to 5.5. + + If this parm tuple currently contains a channel reference to another + parameter, this method will follow channel references and change the + value of the referenced parameter. If this is not the desired behavior, + first delete the channel reference with deleteAllKeyframes. + + Raises hou.InvalidSize if values has a different length than this + parameter tuple. Raises hou.PermissionError if any of the parameters in + this parameter tuple are not writable. + + REPLACES + opparm command """ + + def setPending(self, values): + """ + setPending(self, values) + + Sets the value of a parameter in the tuple at the current frame and + marks it as pending if the parameter is keyed. + + values + A sequence of floats or strings, corresponding to the components of + this parameter tuple. + + For example, the parameter tuple for "translation" contains Parm + objects for translation along each of the axes, "tx", "ty" and + "tz". If set is called with following tuple of floats, (2.5, 4.0, + 5.5), then the parameter "tx" with be set to 2.5, "ty" will be set + to 4.0 and "tz" will be set to 5.5. + + Raises hou.InvalidSize if values has a different length than this + parameter tuple. Raises hou.PermissionError if any of the parameters in + this parameter tuple are not writable. + + REPLACES + opparm command """ + + def revertToDefaults(self): + """ + revertToDefaults(self) + + Changes the value back to the default(s). See also the + revertToAndRestoreFactoryDefaults() method. + """ + + def revertToAndRestorePermanentDefaults(self): + """ + revertToAndRestorePermanentDefaults(self) + + Changes the value back to the defaults that ship with Houdini, and + restore those defaults. + + See also the revertToDefaults() method. + """ + + def isAtDefault(self, compare_temporary_defaults=True, + compare_expressions=False): + """ + isAtDefault(self, compare_temporary_defaults=True, + compare_expressions=False) -> bool + + Returns whether the parameter tuple is currently at its defaults. + + compare_temporary_defaults + When is True, isDefault also checks + against any temporary defaults a user may have set. The value of + must be either True or False. + + compare_expressions + When is True, isDefault compares the actual + expression when a parameter has a default factory expression. The + value of must be either True or False. + + See also the revertToDefaults() and + revertToAndRestorePermanentDefaults()methods. + """ + return True + + def evalAsFloats(self): + """ + evalAsFloats(self) -> tuple of float + + Evaluates this parameter tuple at the current frame and returns the + result as a tuple of floats. + + Raises hou.TypeError if a value cannot be converted to a float. + """ + return (0.0,) + + def evalAsFloatsAtFrame(self, frame): + """ + evalAsFloatsAtFrame(self, frame) -> tuple of float + + Evaluates this parameter tuple at a certain frame and returns the result + as a tuple of floats. + + Raises hou.TypeError if a value cannot be converted to a float. + """ + return (0.0,) + + def evalAsInts(self): + """ + evalAsInts(self) -> tuple of int + + Evaluates this parameter tuple at the current frame and returns the + result as a tuple of integers. + + Raises hou.TypeError if a value cannot be converted to an integer. + """ + return (0,) + + def evalAsIntsAtFrame(self, frame): + """ + evalAsIntsAtFrame(self, frame) -> tuple of int + + Evaluates this parameter tuple at a certain frame and returns the result + as a tuple of integers. + + Raises hou.TypeError if a value cannot be converted to an integer. + """ + return (0,) + + def evalAsStrings(self): + """ + evalAsStrings(self) -> tuple of str + + Evaluates this parameter tuple at the current frame and returns the + result as a tuple of strings. + + Raises hou.TypeError if a value cannot be converted to a string. + """ + return ('',) + + def evalAsStringsAtFrame(self, frame): + """ + evalAsStringsAtFrame(self, frame) -> tuple of str + + Evaluates the parameter tuple at a frame and returns the result as a + tuple of strings. + + Raises hou.TypeError if a value cannot be converted to a string. + """ + return ('',) + + def evalAsRamps(self): + """ + evalAsRamps(self) -> hou.Ramp + + Evaluates this parameter tuple at the current frame and returns the + result as a tuple containing a hou.Ramp object. + + Raises hou.TypeError if this is not a ramp parameter. + """ + return Ramp() + + def evalAsRampsAtFrame(self, frame): + """ + evalAsRampsAtFrame(self, frame) -> hou.Ramp + + Evaluates this parameter tuple at a certain frame and returns the result + as a tuple containing a hou.Ramp object. + + Raises hou.TypeError if this is not a ramp parameter. + """ + return Ramp() + + def lock(self, bool_values): + """ + lock(self, bool_values) + + Lock or unlock all the parameters in this tuple. Houdini displays + locked parameters as disabled and does not let you change their values. + + bool_values + A sequence of True or False values, where each value corresponds to + a component of this parameter. Where an element of bool_values is + True, that component will be locked (uneditable), and where an + element is False, the corresponding component will be unlocked + (editable). + + For example, the parameter tuple for "translation" contains Parm + objects for translation along each of the axes, "tx", "ty" and + "tz". If lock is called with the following tuple of boolean values, + (True, True, False), then the parameter "tx" and "ty" will be locked + and made non-editable, while "tz" will be unlocked and made editable. + + Raises hou.InvalidSize if bool_values has a different length than this + parameter tuple. Raises hou.PermissionError if any of the parameters in + this parameter tuple are not writable. + + REPLACES + chlock command """ + + def setAutoscope(self, bool_values): + """ + setAutoscope(self, bool_values) + + Changes the autoscope property of components of this parameter tuple. + + bool_values + A sequence of True or False values, where each value corresponds to + a component of this parameter. Where an element of bool_values is + True, that component will be autoscope. + + For example, the parameter tuple for "translation" contains Parm + objects for translation along each of the axes, "tx", "ty" and + "tz". If setAutoscope is called with the following tuple of boolean + values, (True, True, False), then the parameter "tx" and "ty" will + be automatically scoped, while "tz" will not. + + Raises hou.InvalidSize if values has a different length than this + parameter tuple. Raises hou.PermissionError if any of the parameters in + this parameter tuple are not writable. + + REPLACES + chautoscope command """ + + def isSpare(self): + """ + isSpare(self) -> bool + + Returns whether the parameter is a "spare" (user-defined) parameter. + """ + return True + + def isMultiParmInstance(self): + """ + isMultiParmInstance(self) -> bool + + Return whether this parameter is an instance of a multi parm. For + example, the pt0, pt1, pt2, etc. parameter tuples in an add SOP are + instances of a multiparm. + """ + return True + + def deleteAllKeyframes(self): + """ + deleteAllKeyframes(self) + + Remove all the keyframes from this parameter tuple. + + This method be approximately implemented as follows: + def deleteAllKeyframes(self): + for parm in self: + parm.deleteAllKeyframes() + + + See also hou.Parm.deleteAllKeyframes. + """ + + def __getitem__(self): + """ + __getitem__(self, index) -> hou.Parm + + Return the Parm object for the specified component of this parameter + tuple. Negative indices will index from the end. + + This method makes instances of this class appear like a tuple, and lets + you iterate over the parms in a ParmTuple. + + Raises IndexError if the index is not valid. + + >>> parm_tuple = hou.node("/obj").createNode("geo").parmTuple("t") + >>> for parm in parm_tuple: + ... print parm.name(), + tx ty tz + >>> tuple(parm_tuple) + (, , ) + """ + return Parm() + + def __len__(self): + """ + __len__(self) -> int + + Return the number of hou.Parms in this parameter tuple. + """ + return 0 + + def createClip(self, parent_node, name, create_new, apply_immediately, + current_value_only): + """ + createClip(self, parent_node, name, create_new, apply_immediately, + current_value_only) -> hou.ChopNode + + Creates a Channel CHOP representing this parameter. The Channel CHOP is + created with the given name as a child of the given parent node. The + parent_node is typically created via + hou.Node.findOrCreateMotionEffectsNetwork. + + create_new + Always create a new Channel CHOP. If set to False, then if a Channel + CHOP already exists with the same name, it will be re-used. If the + parameter already exists on the Channel CHOP, the older parameter + will be removed first. + + apply_immediately + If set to True, then the export flag on the Channel CHOP will be + set. + + current_value_only + If set to True, then only the current value of the parameter will be + stored. + + See also hou.Node.findOrCreateMotionEffectsNetwork. + """ + return ChopNode() + + def copyToParmClipboard(self): + """ + copyToParmClipboard(self) + + Copies this to the parameter clipboard. See also + hou.parmClipboardContents. + """ + + def _asVoidPointer(self): return + def asCode(self, brief=False, save_values=True, save_keyframes=True, save_keys_in_frames=False, save_flag_values=True, save_aliases=True, function_name=None): + """ +brief + +Returns a script of Python statements that can be executed to set the parameter tuple’s values, flags and other properties. +To run the script, use either Python’s exec or execfile functions. + + +save_values +When brief is True, the output script omits commands for setting values and flags that are set to the factory defaults. +The script also omits keyframe commands that set unused values, slopes and accelerations. The value of brief must be either True or False. + + +save_keyframes +When save_values is True, asCode outputs commands for setting the parameter tuple’s values. The value of save_values + must be either True or False. + + +save_keys_in_frames +When save_keyframes is True, asCode outputs commands for creating the parameter tuple’s keyframes +(if any). The value of save_keyframes must be either True or False. + + +save_flag_values +When save_keys_in_frames is True, asCode outputs commands for setting channel and key times in samples (frames) instead +of seconds. This parameter has no effect if save_keyframes is set to False. The value of save_keys_in_frames must be either True or False. + + +save_aliases +When save_flag_values is True, asCode outputs commands for setting the parameter tuple’s flag values. +The value of save_flag_values must be either True or False. + + +function_name +When save_aliases is True, asCode outputs commands for setting the parameter tuple’s channel aliases. The value of +save_aliases must be either True or False. + + +If function_name is specified, then the output script is wrapped in a Python function definition with the given name. +function_name must be a non-zero length string consisting of only alphanumeric and underscore characters. Any invalid +characters are internally converted to underscores. + + +The wrapper function takes in a single argument which must be a reference to an existing node parameter tuple. +For symmetry, the function also returns the parameter tuple reference. + """ + return + def help(self): return + def helpUrl(self): return + def isDisabled(self): + """ + isDisabled(self) -> bool + + Returns the disable state of the parameter tuple, ignoring the lock + state. This can be used to read the result of a disable-when + conditional. + """ + return True + + def disable(self, on): + """ + disable(self, on) + + Sets the UI disable state of this parameter tuple in its node. This is + not the same as locking a parameter, as the underlying value can still + be modified. It's closer to what a disable-when conditional does, when + a parameter is disabled automatically by it. + """ + + def isHidden(self): + """ + isHidden(self) -> bool + + Returns the hidden state of the parameter tuple. This can be used to + read the result of a hide-when conditional. + """ + return True + + def hide(self, on): + """ + hide(self, on) + + Sets the UI hidden state of this parameter tuple in its node. Calling + this method is equivalent to changing the Invisible checkbox on the + Edit Parameter Interface dialog, or hiding the parameter with a hide- + when conditional. + + To hide a folder, use hou.Node.setParmTemplateGroup. This method cannot + be used to hide a folder because a parm tuple corresponds to a set of + folders, not an individual folder. + + To change the visibility of all new instances of the node type defined + by a digital asset, use hou.HDADefinition.setParmTemplateGroup as in the + following example: + + def showParmTupleInDefinition(parm_tuple, visible): + '''parm_tuple is a hou.ParmTuple on an instance of the digital asset.''' + definition = parm_tuple.node().type().definition() + parm_template_group = definition.parmTemplateGroup() + parm_template = parm_template_group.find(parm_tuple.name()) + parm_template.hide(not visible) + parm_template_group.replace(parm_tuple.name(), parm_template) + definition.setParmTemplateGroup(parm_template_group) + """ + + def eval(self): + """ + eval(self) -> tuple of int, float, str, or hou.Ramp + + Evalute this parameter tuple at the current frame and returns the result + as a tuple of integers, floats or strings, or a hou.Ramp object, + depending on the type of the parameter. + + See also the evalAtFrame and evalAtTime methods. + + REPLACES + chramp function + ch function + chs function """ + return + + def evalAtFrame(self): + """ + evalAtFrame(self, frame) -> tuple of int, float, str, or hou.Ramp + + Evalute the parameter tuple at a given frame and return the result as a + tuple of integers, floats, strings, or a Ramp object, depending on the + type of the parameter. + + See also evalAtTime. + """ + return + + def evalAtTime(self): + """ + evalAtTime(self, time) -> tuple of int, float, str, or hou.Ramp + + Evalute the parameter tuple at a given time and return the result as a + tuple of integers, floats, strings, or a Ramp object, depending on the + type of the parameter. + + See also evalAtFrame. + """ + return + +class perfMon(object): + """ + hou.perfMon + + Module containing performance monitor related functions. + + RELATED + * hou.PerfMonProfile + * hou.PerfMonEvent + * hou.PerfMonRecordOptions + * Performance monitor pane + + + """ + + def __init__(self): raise AttributeError, "No constructor defined" + def startProfile(title, options=None): + """ + startProfile(title, options=None) -> hou.PerfMonProfile + + Create a new profile and start it so that it can record events. When + the profile is stopped, it will generate statistics for the events that + it recorded. + + options + A hou.PerfMonRecordOptions object that specifies the types of + Houdini events and statistics to record. If None is passed in or if + the options argument is not specified, then the profile will record + all events and statistics. + """ + return PerfMonProfile() + + def loadProfile(file_path): + """ + loadProfile(file_path) -> hou.PerfMonProfile + + Load a profile from disk and return the loaded profile. + + Raises hou.OperationFailed if file_path points to a file that does not + exist or is not a valid Houdini performance monitor profile file. + """ + return PerfMonProfile() + + def startTimedEvent(description, auto_nest_events=True): + """ + startTimedEvent(description, auto_nest_events=True) -> hou.PerfMonEvent + + This method is deprecated in favor of startEvent. + """ + return PerfMonEvent() + + def startEvent(description, auto_nest_events=True): + """ + startEvent(description, auto_nest_events=True) -> hou.PerfMonEvent + + Create a generic event and start it. When the event is stopped, it will + be logged by the performance monitor and added to any profiles that are + recording script or memory statistics. + + Use this function to time and measure memory growth in generic scripts, + functions or code blocks. + + Return the new event. + + description + The description of the event that you are starting. For example, + this can be a function name or a script name or a description of a + code block. + + auto_nest_events + If set to True, the event will automatically 'nest' other events + that are started and stopped while this event is running. When the + event is stopped, it will decrement the times and memory of its + nested events from its total time and memory. That way, the event's + total time and memory will reflect the work performed in the event + itself and not in any of its nested events. + + Raises hou.OperationFailed if description is an empty string. + """ + return PerfMonEvent() + + def startTimedCookEvent(description, node): + """ + startTimedCookEvent(description, node) -> hou.PerfMonEvent + + This method is deprecated in favor of startCookEvent. + """ + return PerfMonEvent() + + def startCookEvent(description, node): + """ + startCookEvent(description, node) -> hou.PerfMonEvent + + Create an event that is related to node cooking and start it. When the + event is stopped, it will be logged by the performance monitor and added + to any profiles that are recording cook or memory statistics. + + Use this function to time code blocks and measure memory growth in the + Code section of Python operators. + + Return the cook event. + + description + The description of the event that you are timing. For example, this + can be a function name or a description of a code block. + + node + The node that the timed event applies to. This must be a hou.Node + object. When calling startCookEvent() from within the Code section + of a Python operator, set node to the current node (i.e. hou.pwd()). + + Raises hou.OperationFailed if description is an empty string or if node + does not exist. + """ + return PerfMonEvent() + + def isRecording(self): + """ + isRecording() -> bool + + Return True if the performance monitor is recording Houdini events. + """ + return True + +class PerfMonEvent(object): + """ + hou.PerfMonEvent + + Represents an event that is recorded by the performance monitor and used + to generate time and memory growth statistics for profiles. + + Note that all methods in this class may raise an hou.OperationFailed + exception if the event was not actually recorded in the Performance + Monitor. This can happen if hou.perfMon.startEvent or + hou.perfMon.startCookEvent was called when the Performance Monitor was + not recording. + + + The stopTime(), memory() and time() methods have been removed. Memory + and time values are now returned by the stop() method. + + RELATED + * hou.perfMon + * hou.PerfMonProfile + * hou.PerfMonRecordOptions + * Performance monitor pane + + + """ + def __init__(self): raise AttributeError, "No constructor defined" + def id(self): + """ + id(self) -> int + + Return the event's unique identifier which is used internally by the + performance monitor. + + This method is deprecated. + """ + return 0 + + def name(self): + """ + name(self) -> str + + Return the event name. + + This method is deprecated. + """ + return '' + + def object(self): + """ + object(self) -> str + + Return the object that the event applies to. Return None if the event + is not associated with an object. + """ + return '' + + def isAutoNestEnabled(self): + """ + isAutoNestEnabled(self) -> bool + + Return True if the event will automatically 'nest' other events that are + started and stopped while this event is running. When the event is + stopped, it will decrement the times and memory of its nested events + from its total time and memory. That way, the event's total time and + memory will reflect the work performed in the event itself and not in + any of its nested events. + """ + return True + + def stop(self): + """ + stop(self) + + Stop the event timer and return a 2-tuple, (