CINXE.COM
Embody: Automate Externalization | Derivative
<!DOCTYPE html> <html lang="en" dir="ltr" prefix="og: http://ogp.me/ns# content: http://purl.org/rss/1.0/modules/content/ dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ rdfs: http://www.w3.org/2000/01/rdf-schema# sioc: http://rdfs.org/sioc/ns# sioct: http://rdfs.org/sioc/types# skos: http://www.w3.org/2004/02/skos/core# xsd: http://www.w3.org/2001/XMLSchema#"> <head> <link rel="profile" href="http://www.w3.org/1999/xhtml/vocab" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!--[if IE]><![endif]--> <link rel="dns-prefetch" href="//www.google-analytics.com" /> <link rel="preconnect" href="//www.google-analytics.com" /> <link rel="dns-prefetch" href="//stats.g.doubleclick.net" /> <link rel="preconnect" href="//stats.g.doubleclick.net" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"09021bd6f0",applicationID:"119330051"};;/*! For license information please see nr-loader-rum-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>g,gD:()=>h,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function g(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function h(e,t){if(!e)throw new Error(f);var r=g(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.274.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=g(n),c=h(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=m()[s[e]];p&&p.push([f,e,r,a]);return a},get:v,listeners:h,context:g,buffer:function(e,t){const r=m();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!m()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=h(e).concat(t)}function h(e){return n[e]||[]}function v(t){return d[t]=d[t]||e(f,t)}function m(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log";n.K7.logging},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),g=r(384),p=r(6344);const h=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],v=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),b=r(2614),y=r(993);var w=r(2646),A=r(3434);function R(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,A.YM)(i),a=new w.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function E(){const e=(0,g.pV)();h.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const x={};function _(e,t,g=!1){t||(0,c.Ak)(e,"api");const h={};var w=s.ee.get(e),A=w.get("tracer");x[e]=b.g.OFF,w.on(p.G4.REPLAY_RUNNING,(t=>{x[e]=t}));var E="api-",_=E+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),j(E,n,!0,o||null===r?"session":void 0)(t,r)}function T(){}h.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),function(e,t,r={},i=y.p_.INFO){(0,a.p)(f.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,a.p)(y.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(w,e,t,r)},h.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),R(w,e,t,{customAttributes:r,level:i})},v.forEach((e=>{h[e]=j(E,e,!0,"api")})),h.addPageAction=j(E,"addPageAction",!0,n.K7.genericEvents),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,j(E,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},h.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},h.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},h.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},h[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},h[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},h.interaction=function(e){return(new T).get("object"==typeof e?e:{})};const S=T.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),g||(0,a.p)(_+"tracer",[(0,m.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,m.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,m.t)()],r)}}}};function j(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[(0,m.t)(),...arguments],r?null:this,i,w),r?void 0:this}}function k(){r.e(296).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{S[e]=j(_,e,void 0,g?n.K7.softNav:n.K7.spa)})),h.setCurrentRouteName=g?j(_,"routeName",void 0,n.K7.softNav):j(E,"routeName",!0,n.K7.spa),h.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,m.t)(),!1,r,!!x[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>k()),!0):k(),h}var N=r(9417),T=r(8122);const S={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},j={};var k=r(5284);const I=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function P(e,t={},r,n){let{init:a,info:c,loader_config:u,runtime:l={},exposed:f=!0}=t;l.loaderType=r;const p=(0,g.pV)();c||(a=p.init,c=p.info,u=p.loader_config),(0,N.xN)(e.agentIdentifier,a||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");j[e]=(0,T.a)(t,S);const r=(0,g.nY)(e);r&&(r.loader_config=j[e])}(e.agentIdentifier,u||{}),c.jsAttributes??={},d.bv&&(c.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,c);const h=(0,N.D0)(e.agentIdentifier),v=[c.beacon,c.errorBeacon];O||(h.proxy.assets&&(I(h.proxy.assets),v.push(h.proxy.assets)),h.proxy.beacon&&v.push(h.proxy.beacon),E(),(0,g.US)("activatedFeatures",k.B),e.runSoftNavOverSpa&&=!0===h.soft_navigations.enabled&&h.feature_flags.includes("soft_nav")),l.denyList=[...h.ajax.deny_list||[],...h.ajax.block_internal?v:[]],l.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,l),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=_(e.agentIdentifier,n,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=f),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"nr-rum-1.274.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={296:"sha512-gkYkZDAwQ9PwaDXs2YM+rNIdRej1Ac1mupWobRJ8eahQcXz6/sunGZCKklrzi5kWxhOGRZr2tn0rEKuLTXzfAA=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={840:0,374:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),h=i(384);const v=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function m(e){return!!(0,h.dV)().o.MO&&v(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(v(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(296).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return m(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class A extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var R=i(9908),E=i(2843),x=i(3878),_=i(782),N=i(1863);class T extends y{static featureName=_.T;constructor(e,t=!0){super(e,_.T,t),p.RI&&((0,E.u)((()=>(0,R.p)("docHidden",[(0,N.t)()],void 0,_.T,this.ee)),!0),(0,x.sp)("pagehide",(()=>(0,R.p)("winPagehide",[(0,N.t)()],void 0,_.T,this.ee))),this.importAggregator(e))}}var S=i(3969);class j extends y{static featureName=S.TZ;constructor(e,t=!0){super(e,S.TZ,t),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,h.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(A),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,h.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[A,T,j],loaderType:"lite"})})()})();</script> <meta about="/tags/performance-application" typeof="skos:Concept" property="rdfs:label skos:prefLabel" content="Performance Application" /> <link rel="shortcut icon" href="https://derivative.ca/sites/all/themes/derivative2017/favicon.ico" type="image/vnd.microsoft.icon" /> <meta name="description" content="As TouchDesigner projects grow in complexity, managing and collaborating on them can become increasingly challenging. One of the primary hurdles is the monolithic .toe file format, which encapsulates the entire project in a single binary file. While convenient for small projects, this approach poses significant limitations for version control and collaborative workflows. Enter" /> <meta name="keywords" content="component, tox, externalize, externalization, scripts, UI, manager, organization, project organization" /> <link rel="image_src" href="https://derivative-devforum-backups.s3.us-east-2.amazonaws.com/static/manifest512.png" /> <meta name="generator" content="Drupal 7 (https://www.drupal.org)" /> <link rel="canonical" href="https://derivative.ca/community-post/asset/embody-automate-externalization/70497" /> <link rel="shortlink" href="https://derivative.ca/node/70497" /> <meta property="og:site_name" content="Derivative" /> <meta property="og:type" content="article" /> <meta property="og:url" content="https://derivative.ca/community-post/asset/embody-automate-externalization/70497" /> <meta property="og:title" content="Embody: Automate Externalization" /> <meta property="og:description" content="As TouchDesigner projects grow in complexity, managing and collaborating on them can become increasingly challenging. One of the primary hurdles is the monolithic .toe file format, which encapsulates the entire project in a single binary file. While convenient for small projects, this approach poses significant limitations for version control and collaborative workflows. Enter Embody鈥攁 powerful tool designed to automate the externalization of components and scripts in TouchDesigner, streamlining your workflow and enhancing collaboration." /> <meta property="og:updated_time" content="2024-10-20T08:30:38-04:00" /> <meta property="og:image" content="https://derivative.ca/sites/default/files/styles/og_image/public/field/image/screenshot2.jpg" /> <meta property="og:image:type" content="image/jpeg" /> <meta property="og:image:secure_url" content="https://derivative-devforum-backups.s3.us-east-2.amazonaws.com/static/manifest512.png" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta property="article:author" content="https://www.facebook.com/dylanroscover" /> <meta property="article:tag" content="component" /> <meta property="article:tag" content="tox" /> <meta property="article:tag" content="externalize" /> <meta property="article:tag" content="externalization" /> <meta property="article:tag" content="scripts" /> <meta property="article:tag" content="UI" /> <meta property="article:tag" content="manager" /> <meta property="article:tag" content="organization" /> <meta property="article:tag" content="project organization" /> <meta property="article:published_time" content="2024-10-18T14:00:40-04:00" /> <meta property="article:modified_time" content="2024-10-20T08:30:38-04:00" /> <meta itemprop="name" content="Embody: Automate Externalization" /> <meta itemprop="description" content="As TouchDesigner projects grow in complexity, managing and collaborating on them can become increasingly challenging. One of the primary hurdles is the monolithic .toe file format, which encapsulates the entire project in a single binary file. While convenient for small projects, this approach poses significant limitations for version control and collaborative workflows. Enter Embody鈥攁 powerful tool designed to automate the externalization of components and scripts in TouchDesigner, streamlining your workflow and enhancing collaboration." /> <title>Embody: Automate Externalization | Derivative</title> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__9cWqptSUNYq5YedfIwh33VxtugFVWjDdEsblT8GhLKI__quUjyhSfbEukHj8a0hYvzm9VTmPALmSZvA0xfM_Oxzo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__umS_7iB8OLqD-AIc28jz7stMtgRnPBrMHXbg802aJVI__42_FYiRnR5OQaV2U3Sr9cY21EIjnMGdJsPXMEFLQPCo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__T7twZATSz9YDtA4CEs3XoRq-lmvsWC1-9rzLrGpoWuY__jYMOyCwkeeWX4KvLeu7GhjzHVkW5HDKp2hWWBDkyRSE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__h3o5SsIeYDjeYwWuITpy06v8c6WOBFF_caVfOD5h1f0__ZsLGPx-kmWjlNCh4cPgAj41gw9yYOn00M7G5ddPHXyU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__e3GI6WYIorn4GgDovKROICmgCalUEGUxXa6BAN_x15c__xuWYXUTjyghfXbZeOb7naFNx-DXu39CgrIPpmWyZanQ__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__Irf_gwb-Pq8mHOWu1TP1HcgM0-G_n2aM6hh2T7HrP9w__wq2cMTqH2xzpUaajNK-ntVjmRA-Umb0bp3Uq5h5tINo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__JYcid99Dh1MsM1THpjKWy47KqpsDB4PXynpoWHDem4Y__471xsXpLPlEbqMPjU6spfxWd0YORHhAibok4rb_-0fY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__kg7S0dNHB51gTPALGAOAOThnISlBjTi_y7Sso2n2qOg__BTWp3W9drSse25DdWVDqOTveyoc3yVq9LWdACeGI4Aw__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__tqIxnlnU0Bh0Gt7-nJnf2DRtVQeTvgNc_6dtDjT-duM__z2rU7fZTDjjCGnKFEzXmazWHGwx24Jku9Y5h1G9Exng__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__K8R0FVWF0gKju1B8h9vC5S2yU4FJ5AZbgBzm0rhrpkc__Lf77875HmDgWXlnw7h4mr4mZ7tYhxCC_kbLRCdDA4dk__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__XTN3wnKEfUHYyRdXdw0jmHnzYJSJIFt7-CwN0OXywgU__gA6_ws_9qa4vpd-XZcPj1P1kD248PDfOpzGW48piTTE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__OyUNCcm0pzFxmVPYJ3JvI5TUiAoDARos5c4b3xqdAvU__XjCwnLChLPuJ4Q_xva9z2IRXtXmv1MGS3JoOvYtJyx0__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__vl5p-vm_LgZkqJ6rMgayC5ZepiCcbAzgKcsUY7bKgVc__OfEmzeElbttcCQ7UIoCtH9xAb06atbwrl10eXPTNzLE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__XEflqfFnBJdRX4lOgu7ukxEXvKtdC7LJQxdKtfeaRSk__39-M3V13QtXdXnJIFcqRXxNOH7O0DEAQwAhW2MWdxtY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__2nmGSuuQxj_U7XTUt2xK3L_uOiI8LHdTW3lYFmO3xOY__wNTjsCVaNUtW_xprV2prfu5CjND7JX5FfC9Ze4uXxg8__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__WXbUgQkEDqAzBSpe8KJnXLX-0wb8Jpn4x5DHn96CkKk__lWAnp5Wbp0FAk1C_53CgvupgjctL1wGmT9bQH-lmFb8__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__xi81ZFFbLe7OT9HZyl9hLKmKk4nwzr1wH46mOmDjDUk__ZPcMDjra5fE20CWLF53yfluDpyT8tbIfsdBBO63Mk1I__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__Pq59485DVDHvSuDFisvJhcZqQST88l-Fp67fJdjVhl0__O-_GJqywnCNjtB9B1G8FQg8hIHFx3o94l9oizjpfqxw__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__A4nWcEt2qXbYnCh8TbImL_OY7ybaQqcUsqpteHdTsZg__PyvgPoxDvNeSiJIAwb21USXn9kQ-1eFBQHwCa0CXjtE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__aDmsXnS9nDtiIjKhJr6DO2QDd9zuPAzCTzNVj41P1OE__miA14pYz5B1nyM1nXUhC1I4rwelBrBxEdntPfvodDHs__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__wbOLwwT4ggEIYTDBVV6imZqW9XqOK61pJiE2wL9cWZk__DRK3ioou7Skzy3BGUXOLcEhQGmaNb7In3Q2FZXDHAjc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__AANeiFOKBX4OJG4wr7z9PRp5CV_TdnSoh7dDBBg7JVo__xvuN6n3RHn_sSNn6ysoEThbqLl2GFLJVxejEXF_3MyU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__3u4yW5medfqMiN3ojzK0HNc607zQKSIKq35kQ1V70bY__Lw-p7AKX98HUkEcJJaHVNpVm6mShGUXXGVT49uFWrxg__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <!-- HTML5 element support for IE6-8 --> <!--[if lt IE 9]> <script src="https://cdn.jsdelivr.net/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> <![endif]--> <script type="text/javascript" src="/sites/default/files/advagg_js/js__GGZYAFV0PjdzQz9f7_sae2X6RB71T2IdTQ2iXDY_YzQ__pSJpfoX1hTB7CZe3KSLXW9a_rycYrbOoybY4RVB4XnU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__ZyeOaiFuDejQQbhUV7yg7atYZnj4WLfH77o0scv4068__jeShjS1-sEwOx4dbB-NSBsCnxWfNslS1Nkgx4CZngGA__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__d8YFQ13JpfVF56BRJwLrqD_KtZUvRRj0RsEVDiGDTz4__b7VB3alskoA84lukUN1eBgtjmRLB2FZjoMM_8oo5xpE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__RPyYfJ4hDepGgZWtp1VbdI9yRaaKhnupkp97kCqBx00___VKZphQ1g0R1q7NLg3c5j8TW51VAlZJ6OKVG4z51ylM__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__iOipSAIF1_CaPdSLQHns7vi2cq1ouQNDyYbFlVsz4g0__-uaS-kYWu4pXHWRYqGhY35qqwJvOshK48djBLHhrVvo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__v6Ydsa-oLVsCbWBUPEs_rmv-EgYK35mJXlwzszDg2io__NcbPgl6yce1cPkJcub1SVldKst10pVo0nN36XtkHZn8__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__6__IQ9wfCOnkxxh3-xBv65bwhmZoNtcwHNnhprahFvw__JiTknG935-WORDUVnvwp_OgAgDnyJVjXiT5MkO5L2LY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__OXJtpT2qiwXmfJjZkFvsqPZLv32HtZxKQx02FTw1fC0__1ka0o3LhIWopQcwAuO0wndkDQ3wKYhmcVSF1n-bGjGs__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__fdqK4tm1oyivD09FchKnTWP1zfrPsa_6A-3y1zmu-yg__aaOBAszt4FitCp_SFvfyh6_QWODaO8f4A2c1T-GO5As__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__bFOh74rblCNfeAqBWGqF603OXHEBWOI8xUWm9gk-Mnw__WRsh3RAG-_KLWXWdUSL4k-yHTn1vu2dbvluPCCmj_wc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js___jCO6jjlyBQMmFHUmvP_NSVy0hA13AhQtRDOhuK0c2I__mHl-1Yoe5tzA6N5zJ2UiSBDCA3KINLCiVLTFydNHc1g__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__2bzbrE24coPm5uj_fnejfHFhxP4MnERSax237TPs4fw__xUQRNikeM1o2gO7zLzoZfpxNU6-SwDqDl87Wmnq5Q0M__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__xhAAtfYpatnaolQln2dAxiO-Olrkj_jcdZVGXoDqMM4__2bYsKd2u06uYEKPT2l4xKZYQiMbo1w1s1LDiUp-kmho__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__CajjMgHTE1PwscR_Jluzv5MrC9NzoWq9mLHWtwesgIo__mrArwSTL6Ys68_y7Bl6G-QfcTe_19aanxfiq3UfUwwQ__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__UB69oxPLMBmbz4b3jEENdISvapD9LZ87bFrqNhcpks4__zUM1n6eCAkL3_yAAxw7ntL4cyqUeGytp3qhh_ysxf_M__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js___NGCdu7rYCr6cF2Wxmds5GIh39sMll_jBgW6RT5XF6E__JSb7-gLqxD0cMKrlszcZ3N45nBVLrlpnwyT_sewwHtk__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__fDZsF5a1RiJQd_onypqDjQiDGdw1cpdzm8E6T1xD2GI__S9icZkbVWJBSelCZUCxTMLdUXXcOfzCvIZP1TSbP8wc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__yX7zWDMGkJfI-jBOBj0KlfktW_CDoNWNdq_AfFqn7LM__jS9RV2UqMEg6Fsy_NpcVlliI_ZUcKOQ-kw1fODxrczU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__0XOr23_EKRbzs9mLhdghfqrCFnXnGcF8nofn5LTILvo__N1PATp9aCLwlI4qITXqUy4-Bw5aD0OxGn-SqDsZujqA__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__ZN1xq7EL5wnAUDUfheBq9wpBnvVD94Bu10ZpR9jnDxc__mULqY-1fv9p6OELSA36cq9PkyqHeupEMgk-HNMKHNlo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__-TcCuty2z9TPO2Ss8jRxdh_txCyngrnqO_eXNMbwNx8__jESXDck0iVc7x1d3aictzl2HhIXKNaOtQeOPdLFucW4__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__OOBeaxfDBlQtrDaHEWcs3ioZX1ruV4PYVsSB1ATMHuM__IbAz8sCskEzznmyxLQDk4-QJ1B7kNIQvJp2hWBVTmJc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- (function(i,s,o,r){i["GoogleAnalyticsObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date()})(window,document,"script","ga");ga("create", "UA-3123499-3", {"cookieDomain":"auto"});ga("set", "anonymizeIp", true);ga("send", "pageview"); //--><!]]> </script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__RvLVKOnTdQO4VBlh8z2t4GJAwCACZ-707Dk1YziIbCw__JoU2pGtFZeW8LW33wp5ibt4-t2X5DVrPOqeTZvgfPiY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js" defer="defer" async="async"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__CatNlADxEL8WaEfvd8WIe2rb9dPaxaVyFcHAdySUEhI__CV6GhNv1LxRnpR3KrZg4OLABfvoaoW6OHSfJGgPkGmg__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- window.a2a_config=window.a2a_config||{};window.da2a={done:false,html_done:false,script_ready:false,script_load:function(){var a=document.createElement('script'),s=document.getElementsByTagName('script')[0];a.type='text/javascript';a.async=true;a.src='https://static.addtoany.com/menu/page.js';s.parentNode.insertBefore(a,s);da2a.script_load=function(){};},script_onready:function(){da2a.script_ready=true;if(da2a.html_done)da2a.init();},init:function(){for(var i=0,el,target,targets=da2a.targets,length=targets.length;i<length;i++){el=document.getElementById('da2a_'+(i+1));target=targets[i];a2a_config.linkname=target.title;a2a_config.linkurl=target.url;if(el){a2a.init('page',{target:el});el.id='';}da2a.done=true;}da2a.targets=[];}};(function ($){Drupal.behaviors.addToAny = {attach: function (context, settings) {if (context !== document && window.da2a) {if(da2a.script_ready)a2a.init_all();da2a.script_load();}}}})(jQuery);a2a_config.callbacks=a2a_config.callbacks||[];a2a_config.callbacks.push({ready:da2a.script_onready});a2a_config.overlays=a2a_config.overlays||[];a2a_config.templates=a2a_config.templates||{};var a2a_config = a2a_config || {}; a2a_config.icon_color = "#000"; //--><!]]> </script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__qhRAdo9g0mABsjt3ESN3o2BR6J8vxs8FBa7B0KLmZLQ__W8qR7SvL7GhKTKP9BqyHw2UdWQKFNkU_0vvPgwhztKk__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- jQuery.extend(Drupal.settings,{"basePath":"\/","pathPrefix":"","setHasJsCookie":1,"ajaxPageState":{"theme":"derivative2017","theme_token":"1c0VzAgX9LnekbavjTwmHRe0d2yvzMoP3Q1b5KiEG08","jquery_version":"2.1","css":{"modules\/system\/system.base.css":1,"misc\/ui\/jquery.ui.core.css":1,"misc\/ui\/jquery.ui.theme.css":1,"sites\/all\/modules\/contrib\/colorbox_node\/colorbox_node.css":1,"modules\/field\/theme\/field.css":1,"modules\/node\/node.css":1,"sites\/all\/modules\/contrib\/workflow\/workflow_admin_ui\/workflow_admin_ui.css":1,"sites\/all\/modules\/contrib\/extlink\/extlink.css":1,"sites\/all\/modules\/contrib\/views\/css\/views.css":1,"sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.css":1,"sites\/all\/modules\/contrib\/media\/modules\/media_wysiwyg\/css\/media_wysiwyg.base.css":1,"sites\/all\/modules\/contrib\/colorbox\/styles\/default\/colorbox_style.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/contrib\/geshifilter\/geshifilter.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/modal.css":1,"sites\/all\/modules\/contrib\/modal_forms\/css\/modal_forms_popup.css":1,"sites\/all\/libraries\/jgrowl\/jquery.jgrowl.min.css":1,"sites\/all\/modules\/contrib\/nicemessages\/css\/nicemessages_positions.css":1,"sites\/all\/modules\/contrib\/nicemessages\/css\/nicemessages_jgrowl.css":1,"sites\/all\/modules\/contrib\/nicemessages\/css\/shadows.css":1,"sites\/all\/modules\/contrib\/panels\/css\/panels.css":1,"sites\/all\/modules\/custom\/derivative_ckeditor\/derivative_ckeditor.css":1,"sites\/all\/modules\/contrib\/addtoany\/addtoany.css":1,"sites\/all\/libraries\/fontawesome\/css\/font-awesome.css":1,"sites\/all\/libraries\/superfish\/css\/superfish.css":1,"sites\/all\/libraries\/superfish\/css\/superfish-vertical.css":1,"sites\/all\/libraries\/superfish\/css\/superfish-smallscreen.css":1,"sites\/all\/themes\/derivative2017\/css\/style.css":1},"js":{"modules\/statistics\/statistics.js":1,"sites\/all\/themes\/bootstrap\/js\/bootstrap.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/jquery\/2.1\/jquery.min.js":1,"misc\/jquery-extend-3.4.0.js":1,"misc\/jquery-html-prefilter-3.5.0-backport.js":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"sites\/all\/modules\/contrib\/equalheights\/jquery.equalheights.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.core.min.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.effect.min.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/external\/jquery.cookie.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/jquery.form\/4\/jquery.form.min.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.effect-slide.min.js":1,"misc\/form-single-submit.js":1,"misc\/states.js":1,"misc\/ajax.js":1,"sites\/all\/modules\/contrib\/jquery_update\/js\/jquery_update.js":1,"sites\/all\/modules\/contrib\/equalheights\/equalheights.js":1,"sites\/all\/modules\/contrib\/extlink\/extlink.js":1,"sites\/all\/modules\/contrib\/authcache\/authcache.js":1,"sites\/all\/libraries\/colorbox\/jquery.colorbox-min.js":1,"sites\/all\/modules\/contrib\/colorbox\/js\/colorbox.js":1,"sites\/all\/modules\/contrib\/colorbox\/styles\/default\/colorbox_style.js":1,"sites\/all\/modules\/contrib\/colorbox\/js\/colorbox_load.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/_progress.js":1,"sites\/all\/modules\/contrib\/ctools\/js\/modal.js":1,"sites\/all\/modules\/contrib\/modal_forms\/js\/modal_forms_popup.js":1,"sites\/all\/libraries\/jgrowl\/jquery.jgrowl.min.js":1,"sites\/all\/modules\/contrib\/nicemessages\/js\/nicemessages.js":1,"sites\/all\/modules\/contrib\/better_exposed_filters\/better_exposed_filters.js":1,"misc\/autocomplete.js":1,"sites\/all\/modules\/sandbox\/search_api_live_results\/js\/search_api_live_results.js":1,"sites\/all\/modules\/contrib\/ctools\/js\/auto-submit.js":1,"sites\/all\/modules\/custom\/derivative_search\/js\/derivative_search.js":1,"sites\/all\/libraries\/imagesloaded\/jquery.imagesloaded.min.js":1,"sites\/all\/modules\/contrib\/google_analytics\/googleanalytics.js":1,"sites\/default\/files\/advagg_relocate\/https-www.google-analytics.com-analytics.js":1,"sites\/all\/modules\/contrib\/authcache\/modules\/authcache_menu\/authcache_menu.js":1,"sites\/all\/modules\/contrib\/field_group\/field_group.js":1,"misc\/form.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/_collapse.js":1,"sites\/all\/modules\/contrib\/colorbox_node\/colorbox_node.js":1,"sites\/all\/libraries\/superfish\/sftouchscreen.js":1,"sites\/all\/libraries\/superfish\/jquery.hoverIntent.minified.js":1,"sites\/all\/libraries\/superfish\/sfsmallscreen.js":1,"sites\/all\/libraries\/superfish\/supposition.js":1,"sites\/all\/libraries\/superfish\/superfish.js":1,"sites\/all\/libraries\/superfish\/supersubs.js":1,"sites\/all\/modules\/contrib\/superfish\/superfish.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/affix.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/alert.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/button.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/carousel.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/collapse.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/dropdown.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/modal.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/tooltip.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/popover.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/scrollspy.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/tab.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/transition.js":1,"sites\/all\/themes\/derivative2017\/vendor\/uikit\/js\/uikit.min.js":1,"sites\/all\/themes\/derivative2017\/js\/jquery.matchHeight.js":1,"sites\/all\/themes\/derivative2017\/js\/jquery.uniform.standalone.js":1,"sites\/all\/themes\/derivative2017\/js\/jquery.details.min.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative.filters.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative.magic-line.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative-discrourse-comments.js":1,"sites\/all\/themes\/derivative2017\/js\/frontSlideshow.js":1,"sites\/all\/themes\/derivative2017\/js\/gridListToggle.js":1,"sites\/all\/themes\/derivative2017\/js\/header-search-block.js":1,"sites\/all\/themes\/derivative2017\/js\/node-teaser.js":1,"sites\/all\/themes\/derivative2017\/js\/scrollAnimation.js":1,"sites\/all\/themes\/derivative2017\/js\/site-status.js":1,"sites\/all\/themes\/derivative2017\/js\/svgReplace.js":1,"sites\/all\/themes\/derivative2017\/js\/ctools-modal.js":1,"sites\/all\/themes\/derivative2017\/js\/licenses-page.js":1,"sites\/all\/themes\/derivative2017\/js\/features_img_credits.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative-fixedScroll.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative-releases-archive.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/states.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/autocomplete.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/ajax.js":1}},"authcache":{"q":"node\/70497","cp":{"path":"\/","domain":".derivative.ca","secure":true},"cl":23.14814814814815},"colorbox":{"opacity":"0.85","current":"{current} of {total}","previous":"\u00ab Prev","next":"Next \u00bb","close":"Close","maxWidth":"98%","maxHeight":"98%","fixed":true,"mobiledetect":false,"mobiledevicewidth":"480px"},"CToolsModal":{"loadingText":"Loading...","closeText":"Close Window","closeImage":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/ctools\/images\/icon-close-window.png\u0022 alt=\u0022Close window\u0022 title=\u0022Close window\u0022 \/\u003E","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/ctools\/images\/throbber.gif\u0022 alt=\u0022Loading\u0022 title=\u0022Loading...\u0022 \/\u003E"},"modal-popup-small":{"modalSize":{"type":"fixed","width":300,"height":300},"modalOptions":{"opacity":1,"background-color":"#000"},"animation":"fadeIn","modalTheme":"ModalFormsPopup","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/modal_forms\/images\/loading_animation.gif\u0022 alt=\u0022Loading...\u0022 title=\u0022Loading\u0022 \/\u003E","closeText":"Close"},"modal-popup-medium":{"modalSize":{"type":"fixed","width":550,"height":450},"modalOptions":{"opacity":1,"background-color":"#000"},"animation":"fadeIn","modalTheme":"ModalFormsPopup","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/modal_forms\/images\/loading_animation.gif\u0022 alt=\u0022Loading...\u0022 title=\u0022Loading\u0022 \/\u003E","closeText":"Close"},"modal-popup-large":{"modalSize":{"type":"scale","width":1,"height":1},"modalOptions":{"opacity":1,"background-color":"#000"},"animation":"fadeIn","modalTheme":"ModalFormsPopup","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/modal_forms\/images\/loading_animation.gif\u0022 alt=\u0022Loading...\u0022 title=\u0022Loading\u0022 \/\u003E","closeText":"Close"},"better_exposed_filters":{"datepicker":false,"slider":false,"settings":[],"autosubmit":false,"views":{"share_and_stats":{"displays":{"block_mobile":{"filters":[]},"block":{"filters":[]}}},"related_stories":{"displays":{"block_2":{"filters":[]},"block":{"filters":[]}}},"node_left_sidebar":{"displays":{"post":{"filters":[]}}}}},"search_api_live_results":{"min_length":3,"auto_hide":true,"view_all":true},"derivativeSearch":{"forum_url":"https:\/\/forum.derivative.ca\/search"},"urlIsAjaxTrusted":{"\/global-search":true},"equalHeightsModule":{"classes":[{"selector":".front .feature-inner-wrapper .views-field-title","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":"#block-bean-experimental-build .top .field-name-field-bean-text, #block-bean-archive-build .top .field-name-field-bean-text","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":".front .feature-inner-wrapper .views-field-body","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":".front .feature-inner-wrapper .views-field-field-feature-icon","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":".not-front:not(.page-node-20) .paragraphs-item-two-blocks-with-delimeter .field-item .field-name-field-text-area","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"}],"imagesloaded_ie8":1},"extlink":{"extTarget":"_blank","extTargetNoOverride":1,"extClass":0,"extLabel":"(link is external)","extImgClass":0,"extSubdomains":1,"extExclude":"","extInclude":"","extCssExclude":"","extCssExplicit":"","extAlert":0,"extAlertText":"This link will take you to an external web site.","mailtoClass":0,"mailtoLabel":"(link sends e-mail)"},"googleanalytics":{"trackOutbound":1,"trackMailto":1,"trackDownload":1,"trackDownloadExtensions":"7z|aac|arc|arj|asf|asx|avi|bin|csv|doc(x|m)?|dot(x|m)?|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt(x|m)?|pot(x|m)?|pps(x|m)?|ppam|sld(x|m)?|thmx|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls(x|m|b)?|xlt(x|m)|xlam|xml|z|zip","trackColorbox":1},"superfish":[{"id":"1","sf":{"animation":{"opacity":"show","height":"show"},"speed":"fast"},"plugins":{"touchscreen":{"disableHover":true,"mode":"window_width","breakpointUnit":"px"},"smallscreen":{"mode":"window_width","breakpointUnit":"px","title":"Mobile Main menu"}}},{"id":"2","sf":{"animation":{"opacity":"show","height":"show"},"speed":"fast"},"plugins":{"smallscreen":{"mode":"window_width","breakpointUnit":"px","title":"Main menu"},"supposition":true,"supersubs":true}}],"statistics":{"data":{"nid":"70497"},"url":"\/modules\/statistics\/statistics.php"},"field_group":{"div":"full"},"states":{"#group-assets-details":{"visible":[[{"select[name^=\u0022field_post_category\u0022]":{"value":24}},"or",{"select[name^=\u0022field_post_category\u0022]":{"value":23}}]]}},"colorbox_node":{"width":"80%","height":"80%"},"bootstrap":{"anchorsFix":"0","anchorsSmoothScrolling":"0","formHasError":1,"popoverEnabled":1,"popoverOptions":{"animation":1,"html":0,"placement":"right","selector":"","trigger":"click","triggerAutoclose":1,"title":"","content":"","delay":0,"container":"body"},"tooltipEnabled":1,"tooltipOptions":{"animation":1,"html":0,"placement":"auto left","selector":"","trigger":"hover focus","delay":0,"container":"body"}}}); //--><!]]> </script> </head> <body class="html not-front not-logged-in no-sidebars page-node page-node- page-node-70497 node-type-project"> <div id="skip-link"> <a href="#main-content" class="element-invisible element-focusable">Skip to main content</a> </div> <style> @media screen and (max-width: 767px) { #user-info-xs { border-top: 1px solid #cccbcb; } #user-info-xs .share-and-stats.visible-xs-block { display: inline-block!important; width: 60%; padding-top: 20px; padding-left: 30px; padding-bottom: 0px; border-top: none; } #user-info-xs .full-node-page { top: 30px; display: inline-block; } } </style> <div id="mobile-menu" class="uk-offcanvas"> <div class="mobile-menu-close"> <a class="mobile-menu-toggle-close">Close</a> </div> <div class="uk-offcanvas-bar uk-offcanvas-bar-flip"> <div class="region region-mobile-menu"> <section id="block-superfish-1" class="block block-superfish clearfix"> <ul id="superfish-1" class="menu sf-menu sf-menu-mobile-main-menu sf-vertical sf-style-none sf-total-items-4 sf-parent-items-2 sf-single-items-2"><li id="menu-893-1" class="first odd sf-item-1 sf-depth-1 sf-no-children"><a href="/" title="" class="sf-depth-1">Home</a></li><li id="menu-894-1" class="middle even sf-item-2 sf-depth-1 sf-total-children-5 sf-parent-children-0 sf-single-children-6 menuparent"><a href="/product" title="" class="sf-depth-1 sf-depth-1 menuparent">TouchDesigner</a><ul><li id="menu-894-1" class="first odd sf-item-1 sf-depth-1 sf-clone-parent sf-no-children"><a href="/product" title="" class="sf-depth-1">TouchDesigner</a></li><li id="menu-896-1" class="middle even sf-item-2 sf-depth-2 sf-clone-parent sf-no-children"><a href="/feature/vr-support/12" title="" class="sf-depth-2">Features</a></li><li id="menu-7351-1" class="middle odd sf-item-3 sf-depth-2 sf-clone-parent sf-no-children"><a href="/showcase" title="" class="sf-depth-2">Showcase</a></li><li id="menu-7352-1" class="middle even sf-item-4 sf-depth-2 sf-clone-parent sf-no-children"><a href="/community" title="" class="sf-depth-2">Community</a></li><li id="menu-7353-1" class="last odd sf-item-5 sf-depth-2 sf-clone-parent sf-no-children"><a href="/job-board" title="" class="sf-depth-2">Job Board</a></li><li id="menu-7354-1" class="middle even sf-item-6 sf-depth-2 sf-clone-parent sf-no-children"><a href="/about-derivative" title="" class="sf-depth-2">About Derivative</a></li></ul></li><li id="menu-7350-1" class="middle odd sf-item-3 sf-depth-1 sf-clone-parent sf-total-children-7 sf-parent-children-0 sf-single-children-8 menuparent"><a href="/learn" title="" class="sf-depth-1 sf-depth-1 menuparent">Learn</a><ul><li id="menu-7350-1" class="first odd sf-item-1 sf-depth-1 sf-clone-parent sf-no-children"><a href="/learn" title="" class="sf-depth-1">Learn</a></li><li id="menu-7355-1" class="middle even sf-item-2 sf-depth-2 sf-clone-parent sf-no-children"><a href="/UserGuide/Main_Page" title="" class="sf-depth-2">User Guide</a></li><li id="menu-336990-1" class="middle odd sf-item-3 sf-depth-2 sf-clone-parent sf-no-children"><a href="https://learn.derivative.ca/" title="" class="sf-depth-2">Curriculum</a></li><li id="menu-167777-1" class="middle even sf-item-4 sf-depth-2 sf-clone-parent sf-no-children"><a href="https://forum.derivative.ca" title="" class="sf-depth-2">Forum</a></li><li id="menu-7356-1" class="middle odd sf-item-5 sf-depth-2 sf-clone-parent sf-no-children"><a href="/tutorials" title="" class="sf-depth-2">Tutorials</a></li><li id="menu-7358-1" class="middle even sf-item-6 sf-depth-2 sf-clone-parent sf-no-children"><a href="/workshops-events" title="" class="sf-depth-2">Workshops & Events</a></li><li id="menu-7359-1" class="last odd sf-item-7 sf-depth-2 sf-clone-parent sf-no-children"><a href="/resources" title="" class="sf-depth-2">Resources</a></li><li id="menu-7360-1" class="middle even sf-item-8 sf-depth-2 sf-clone-parent sf-no-children"><a href="/support-service" title="" class="sf-depth-2">Support</a></li></ul></li><li id="menu-899-1" class="last even sf-item-4 sf-depth-1 sf-clone-parent sf-no-children"><a href="/download" title="" class="sf-depth-1">Get It Now</a></li></ul> </section> <section id="block-menu-menu-privacy-policy" class="block block-menu clearfix"> <h2 class="block-title">Privacy policy</h2> <ul class="menu nav"><li class="first leaf"><a href="/terms-use" title="">Terms of use</a></li> <li class="last leaf"><a href="/privacy" title="">Privacy</a></li> </ul> </section> <section id="block-bean-mobile-follow-us" class="block block-bean col-xs-12 clearfix"> <h2 class="block-title">Follow us</h2> <div class="entity entity-bean bean-social-icons clearfix" about="/block/mobile-follow-us" typeof=""> <div class="content"> <div class="field field-name-field-social-links field-type-link-field field-label-hidden"> <div class="field-items"> <div class=" field-item even"> <a href="https://www.instagram.com/touchdesigner/" title="https://www.instagram.com/touchdesigner/" target="_blank"><i class="fa fa-instagram fa-fw"></i></a> <a href="https://www.instagram.com/touchdesigner/" title="https://www.instagram.com/touchdesigner/" target="_blank">https://www.instagram.com/touchdesigner/</a> </div> <div class=" field-item odd"> <a href="https://www.facebook.com/TouchDesigner" title="https://www.facebook.com/TouchDesigner" target="_blank"><i class="fa fa-facebook fa-fw"></i></a> <a href="https://www.facebook.com/TouchDesigner" title="https://www.facebook.com/TouchDesigner" target="_blank">https://www.facebook.com/TouchDesigner</a> </div> <div class=" field-item even"> <a href="https://twitter.com/1null1" title="https://twitter.com/1null1" target="_blank"><i class="fa fa-twitter fa-fw"></i></a> <a href="https://twitter.com/1null1" title="https://twitter.com/1null1" target="_blank">https://twitter.com/1null1</a> </div> <div class=" field-item odd"> <a href="https://www.youtube.com/TouchDesignerOfficial" title="https://www.youtube.com/TouchDesignerOfficial" target="_blank"><i class="fa fa-youtube fa-fw"></i></a> <a href="https://www.youtube.com/TouchDesignerOfficial" title="https://www.youtube.com/TouchDesignerOfficial" target="_blank">https://www.youtube.com/TouchDesignerOfficial</a> </div> </div> </div> </div> </div> </section> </div> </div> </div> <div id="wrapper-page"> <header id="navbar" role="banner" class="navbar navbar-default"> <div class="container-fluid"> <div class="row"> <a href="javascript:;" class="off-canvas-toggle icon-toggle col-xs-1" data-uk-offcanvas="{target:'#mobile-menu'}"> <i class="fa fa-navicon"></i> </a> <div class="navbar-header col-xs-6 col-md-2 col-lg-2"> <a class="logo navbar-btn pull-left" href="/" title="Home"> <img class="svg-img" src="https://derivative.ca/sites/all/themes/derivative2017/logo.svg" onerror="this.src='https://derivative.ca/sites/all/themes/derivative2017/logo.png'" alt="Home"/> </a> </div> <div class="navigation-wrapper col-md-6 col-lg-6"> <div class="region region-navigation col-md-12"> <section id="block-superfish-2" class="block block-superfish hidden-xs hidden-sm clearfix"> <ul id="superfish-2" class="menu sf-menu sf-main-menu sf-horizontal sf-style-none sf-total-items-2 sf-parent-items-2 sf-single-items-0"><li id="menu-519-2" class="active-trail first odd sf-item-1 sf-depth-1 sf-total-children-5 sf-parent-children-0 sf-single-children-5 menuparent"><a href="/showcase" title="" class="sf-depth-1 menuparent">TouchDesigner</a><ul><li id="menu-521-2" class="first odd sf-item-1 sf-depth-2 sf-no-children"><a href="/feature/application-building" class="sf-depth-2">Features</a></li><li id="menu-4446-2" class="middle even sf-item-2 sf-depth-2 sf-no-children"><a href="/showcase" title="" class="sf-depth-2">Showcase</a></li><li id="menu-4093-2" class="active-trail middle odd sf-item-3 sf-depth-2 sf-no-children"><a href="/community" title="" class="sf-depth-2">Community</a></li><li id="menu-525-2" class="middle even sf-item-4 sf-depth-2 sf-no-children"><a href="/job-board" title="" class="sf-depth-2">Job board</a></li><li id="menu-4447-2" class="last odd sf-item-5 sf-depth-2 sf-no-children"><a href="/about-derivative" class="sf-depth-2">About Derivative</a></li></ul></li><li id="menu-520-2" class="last even sf-item-2 sf-depth-1 sf-total-children-7 sf-parent-children-0 sf-single-children-7 menuparent"><a href="/learn" class="sf-depth-1 menuparent">Learn</a><ul><li id="menu-1058-2" class="first odd sf-item-1 sf-depth-2 sf-no-children"><a href="/UserGuide/Main_Page" title="" class="sf-depth-2">User Guide</a></li><li id="menu-336989-2" class="middle even sf-item-2 sf-depth-2 sf-no-children"><a href="https://learn.derivative.ca/" title="" class="sf-depth-2">Curriculum</a></li><li id="menu-53420-2" class="middle odd sf-item-3 sf-depth-2 sf-no-children"><a href="https://forum.derivative.ca" title="" class="sf-depth-2">Forum</a></li><li id="menu-5147-2" class="middle even sf-item-4 sf-depth-2 sf-no-children"><a href="/tutorials" title="" class="sf-depth-2">Tutorials</a></li><li id="menu-1060-2" class="middle odd sf-item-5 sf-depth-2 sf-no-children"><a href="/workshops-events" title="" class="sf-depth-2">Workshops & Events</a></li><li id="menu-1061-2" class="middle even sf-item-6 sf-depth-2 sf-no-children"><a href="/resources" title="" class="sf-depth-2">Resources</a></li><li id="menu-1062-2" class="last odd sf-item-7 sf-depth-2 sf-no-children"><a href="/support-service" class="sf-depth-2">Support</a></li></ul></li></ul> </section> <section id="block-views-exp-global-search-page" class="block block-views no-padding global-search clearfix"> <form class="ctools-auto-submit-full-form" action="/global-search" method="get" id="views-exposed-form-global-search-page" accept-charset="UTF-8"><div><div class="views-exposed-form"> <div class="views-exposed-widgets clearfix"> <div id="edit-query-wrapper" class="views-exposed-widget views-widget-filter-search_api_views_fulltext"> <div class="views-widget"> <input type="text" id="edit-query" name="query" value="" size="30" maxlength="128" class="form-text form-autocomplete live-results-search-textfield" /><input type="hidden" id="edit-query-autocomplete" value="https://derivative.ca/search_api_live_results/search_api_views_global_search" disabled="disabled" class="live-result-autocomplete" /> </div> </div> <div id="edit-filter-by-wrapper" class="views-exposed-widget views-widget-filter-composite_views_filter"> <label for="edit-filter-by"> Filter by </label> <div class="views-widget"> <div class="form-item form-item-filter-by form-type-select form-group"><div class="bef-select-as-links"><div class="form-item"><div class="form-item form-item-edit-filter-by-all form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=All">All</a></div><div class="form-item form-item-edit-filter-by-wiki form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=wiki">User Guide</a></div><div class="form-item form-item-edit-filter-by-forum form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=forum">Forum</a></div><div class="form-item form-item-edit-filter-by-tutorials form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=tutorials">Tutorials</a></div><div class="form-item form-item-edit-filter-by-event-workshop form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=event_workshop">Events & Workshops</a></div><div class="form-item form-item-edit-filter-by-features form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=features">Features</a></div><div class="form-item form-item-edit-filter-by-community form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=community">Community</a></div><div class="form-item form-item-edit-filter-by-showcase form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=showcase">Showcase</a></div><div class="form-item form-item-edit-filter-by-resources form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=resources">Resources</a></div></div><select class="form-control form-select" style="display: none;" id="edit-filter-by" name="filter_by"><option value="All">All</option><option value="wiki">User Guide</option><option value="forum">Forum</option><option value="tutorials">Tutorials</option><option value="event_workshop">Events & Workshops</option><option value="features">Features</option><option value="community">Community</option><option value="showcase">Showcase</option><option value="resources">Resources</option></select></div></div> </div> </div> <div class="views-exposed-widget views-submit-button"> <button class="btn btn-primary form-submit" type="submit" id="edit-submit-global-search" name="" value="<span class="icon-dv-search"></span>"><span class="icon-dv-search"></span></button> </div> </div> </div> </div></form> </section> </div> </div> <div class="account-menu pull-right col-xs-offset-1 col-xs-4 col-md-offset-0 col-md-4 col-lg-4"> <div class="region region-user-profile"> <section id="block-derivative-users-du-account-menu-guest" class="block block-derivative-users clearfix"> <div class="my-account"> <a href="/user/login" class="user-has-no-icon"> <i class="icon-dv-account"> </i>My account </a> </div> </section> </div> <div class="search-link"> <a href="#"> <i class="icon-dv-search"> </i>Search </a> <div class="search-box"></div> </div> <div class="cart-icon"> <a href="/cart"> <i class="icon-dv-cart"> </i>Cart </a> </div> <div class="get-now pull-right hidden-xs hidden-sm"> <div class="get-it-btn"> <div class="btn-background"></div> <a href="/download"><span>Get it now</span></a> </div> </div> <div class="get-now-icon pull-right visible-xs-flex visible-sm-flex"> <a href="/download"> <i class="icon-dv-download"> </i>Get it now </a> </div> </div> </div> </div> </header> <div class="main-container container-fluid"> <header role="banner" id="page-header"> <div class="row"> </div> </header> <!-- /#page-header --> <div class="row title"> <div class="container-fluid"> <div class="highlighted jumbotron hidden-xs"> <div class="region region-highlighted"> <section id="block-views-share-and-stats-block" class="block block-views clearfix"> <div class="view view-share-and-stats view-id-share_and_stats view-display-id-block view-dom-id-885e18be2794f327ea4cad891c9fb603"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last row"> <div class="share-buttons col-sm-7 col-lg-8 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-addtoany-link"><span class="views-label views-label-addtoany-link col-sm-offset-4 col-md-offset-6">Share</span><span class="field-content"><span class="a2a_kit a2a_kit_size_32 a2a_target addtoany_list" id="da2a_2"> <a class="a2a_button_twitter" href="https://twitter.com/"></a> <a class="a2a_button_facebook" href="https://facebook.com/"></a> <a class="a2a_button_email"></a> </span> </span></div> </div> <div class="node-stats col-xs-12 col-sm-5 col-lg-4 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-created col-sm-6"><span class="views-label views-label-created">Posted on: </span><span class="field-content">Oct 18th 2024</span></div> <div class="comment-views-wrapper col-xs-8 col-sm-6 no-padding views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-nothing"><span class="field-content"><div class="comment-count plural comment-count-[field_discourse_topic_id]" rel-topic-id="[field_discourse_topic_id]"> <span>Comments</span></div></span></div> <div class="views-field views-field-totalcount"><span class="field-content">154 views</span></div> </div> </div> </div> </div> </div> </section> </div> </div> <ol class="breadcrumb"><li><a href="/">Home</a></li> <li class="active">Embody: Automate Externalization</li> </ol> <a id="main-content"></a> <ul class="action-links"></ul> </div> </div> <div class="row main"> <div class="container-fluid"> <aside class="author-info-wrapper hidden-xs col-sm-3 col-md-2 no-padding"> <div class="view view-node-left-sidebar view-id-node_left_sidebar view-display-id-post view-dom-id-efce633a529209114d011bb60a3d687a"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last"> <div class="outer-wrapper views-fieldset" data-module="views_fieldsets"> <div class="instructor views-fieldset" data-module="views_fieldsets"> <div class="user-avatar views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-user-picture"><div class="field-content"> <div class="field-user-picture"> <a href="/user/66299/profile"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/boomheadshot.jpg" width="200" height="200" alt=" boomheadshot.jpg" title="Dylan Roscover" /></a> </div> </div></div> </div> <div class="user-info views-fieldset" data-module="views_fieldsets"> <div class="user-account views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-name"><span class="field-content"><a href="/user/66299/profile">dylanroscover</a></span></div> </div> <div class="views-field views-field-field-bio"><div class="field-content">computer man https://www.youtube.com/watch?v=i1IqqlW1U4k</div></div> </div> <div class="social-links views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-github-link"><div class="field-content"> <div class="author-social author-github"> <div class="btn-background"></div> <a href="https://github.com/dylanroscover"> <i class="fa fa-github" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-youtube-link"><div class="field-content"> </div></div> <div class="views-field views-field-field-facebook-link"><div class="field-content"> <div class="author-social author-facebook"> <div class="btn-background"></div> <a href="https://www.facebook.com/dylanroscover"> <i class="fa fa-facebook" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-instagram-link"><div class="field-content"> <div class="author-social author-instagram"> <div class="btn-background"></div> <a href="https://instagram.com/dylanroscover"> <i class="fa fa-instagram" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-vimeo-link"><div class="field-content"> <div class="author-social author-vimeo"> <div class="btn-background"></div> <a href="https://vimeo.com/theexperiential"> <i class="fa fa-vimeo" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-company-url"><div class="field-content"> <script src="https://kit.fontawesome.com/6680ac97e1.js" crossorigin="anonymous"></script> <div class="author-social author-company"> <div class="btn-background"></div> <a href="https://tec.design"> <i class="fas fa-globe" aria-hidden="true"></i> </a> </div> </div></div> </div> </div> </div> </div> </div> </div> </aside> <section class="col-sm-9 col-md-10"> <div id="user-info-xs"> <div class="share-and-stats visible-xs-block"> <div class="region region-mobile-share"> <section id="block-views-share-and-stats-block-mobile" class="block block-views clearfix"> <div class="view view-share-and-stats view-id-share_and_stats view-display-id-block_mobile view-dom-id-fed1ae09df11f2dfffe4e8b39047b5b0"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last row"> <div class="share-buttons views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-addtoany-link"><span class="field-content"><span class="a2a_kit a2a_kit_size_32 a2a_target addtoany_list" id="da2a_1"> <a class="a2a_button_twitter" href="https://twitter.com/"></a> <a class="a2a_button_facebook" href="https://facebook.com/"></a> <a class="a2a_button_email"></a> </span> <script type="text/javascript"> <!--//--><![CDATA[//><!-- if(window.da2a)da2a.script_load(); //--><!]]> </script></span></div> </div> </div> </div> </div> </section> </div> </div> <div class="full-node-page node-type post asset" style="display: inline-block"> <span class="node-type-title">Asset</span> </div> </div> <h1 class="page-header"> Embody: Automate Externalization <span class="expirience-level"></span> </h1> <div class="region-content-wrapper col-sm-offset-1 col-md-offset-2"> <div class="region region-content"> <section id="block-system-main" class="block block-system clearfix"> <article id="node-70497" class="node node-project node-promoted clearfix" about="/community-post/asset/embody-automate-externalization/70497" typeof="sioc:Item foaf:Document"> <header> <span property="dc:title" content="Embody: Automate Externalization" class="rdf-meta element-hidden"></span> <div class="share-and-stats visible-xs-block"> <!-- add left side bar here to show user info for all community post types--> <div class="view view-node-left-sidebar view-id-node_left_sidebar view-display-id-post view-dom-id-bd755d4594acf3d2d97e5c4127f0c35e"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last"> <div class="outer-wrapper views-fieldset" data-module="views_fieldsets"> <div class="instructor views-fieldset" data-module="views_fieldsets"> <div class="user-avatar views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-user-picture"><div class="field-content"> <div class="field-user-picture"> <a href="/user/66299/profile"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/boomheadshot.jpg" width="200" height="200" alt=" boomheadshot.jpg" title="Dylan Roscover" /></a> </div> </div></div> </div> <div class="user-info views-fieldset" data-module="views_fieldsets"> <div class="user-account views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-name"><span class="field-content"><a href="/user/66299/profile">dylanroscover</a></span></div> </div> <div class="views-field views-field-field-bio"><div class="field-content">computer man https://www.youtube.com/watch?v=i1IqqlW1U4k</div></div> </div> <div class="social-links views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-github-link"><div class="field-content"> <div class="author-social author-github"> <div class="btn-background"></div> <a href="https://github.com/dylanroscover"> <i class="fa fa-github" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-youtube-link"><div class="field-content"> </div></div> <div class="views-field views-field-field-facebook-link"><div class="field-content"> <div class="author-social author-facebook"> <div class="btn-background"></div> <a href="https://www.facebook.com/dylanroscover"> <i class="fa fa-facebook" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-instagram-link"><div class="field-content"> <div class="author-social author-instagram"> <div class="btn-background"></div> <a href="https://instagram.com/dylanroscover"> <i class="fa fa-instagram" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-vimeo-link"><div class="field-content"> <div class="author-social author-vimeo"> <div class="btn-background"></div> <a href="https://vimeo.com/theexperiential"> <i class="fa fa-vimeo" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-company-url"><div class="field-content"> <script src="https://kit.fontawesome.com/6680ac97e1.js" crossorigin="anonymous"></script> <div class="author-social author-company"> <div class="btn-background"></div> <a href="https://tec.design"> <i class="fas fa-globe" aria-hidden="true"></i> </a> </div> </div></div> </div> </div> </div> </div> </div> </div> <div class="view view-share-and-stats view-id-share_and_stats view-display-id-block view-dom-id-8330f563b6d373eca2dcae80590247ab"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last row"> <div class="share-buttons col-sm-7 col-lg-8 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-addtoany-link"><span class="views-label views-label-addtoany-link col-sm-offset-4 col-md-offset-6">Share</span><span class="field-content"><span class="a2a_kit a2a_kit_size_32 a2a_target addtoany_list" id="da2a_3"> <a class="a2a_button_twitter" href="https://twitter.com/"></a> <a class="a2a_button_facebook" href="https://facebook.com/"></a> <a class="a2a_button_email"></a> </span> </span></div> </div> <div class="node-stats col-xs-12 col-sm-5 col-lg-4 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-created col-sm-6"><span class="views-label views-label-created">Posted on: </span><span class="field-content">Oct 18th 2024</span></div> <div class="comment-views-wrapper col-xs-8 col-sm-6 no-padding views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-nothing"><span class="field-content"><div class="comment-count plural comment-count-[field_discourse_topic_id]" rel-topic-id="[field_discourse_topic_id]"> <span>Comments</span></div></span></div> <div class="views-field views-field-totalcount"><span class="field-content">154 views</span></div> </div> </div> </div> </div> </div> </div> </header> <div class="anchor"><a class="asset-anchor" href="#">Asset Downloads</a></div> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><p>As TouchDesigner projects grow in complexity, managing and collaborating on them can become increasingly challenging. One of the primary hurdles is the monolithic <strong>.toe</strong> file format, which encapsulates the entire project in a single binary file. While convenient for small projects, this approach poses significant limitations for version control and collaborative workflows. Enter <strong>Embody</strong>鈥攁 powerful tool designed to automate the externalization of components and scripts in TouchDesigner, streamlining your workflow and enhancing collaboration.</p> <div class="embedded-video-wrapper" data-id="923" id="videoEmbedWrapper_923"> <div data-id="923" id="videoEmbedContainer_923"> <div class="videoEmbed" data-id="923" style="position:relative;"><iframe allowfullscreen="" data-id="923" frameborder="0" height="349" mozallowfullscreen="" src="https://www.youtube.com/embed/lR3adD3Cw5s" webkitallowfullscreen="" width="560"></iframe></div> <div id="videoEmbedUrl_923" style="display: none;">https://youtu.be/lR3adD3Cw5s</div> <div data-embed-flag="false" id="videoEmbedFlag_923" style="display:none;">聽</div> <div id="videoEmbedCaption_923" style="display: none;">聽</div> </div> </div> <div class="dc-class-style text-bundle"> <div class="embedded-video-wrapper" data-id="929" id="videoEmbedWrapper_929"> <div data-id="929" id="videoEmbedContainer_929"> <div id="videoEmbedUrl_929" style="display: none;">https://youtu.be/l</div> </div> </div> </div> <h3 class="dc-class-style h3-format"><strong>The Challenge with TouchDesigner Projects</strong></h3> <p>TouchDesigner stores projects in a <strong>.toe</strong> (TOuch Environment) file, a binary format that bundles all project components. This setup, while straightforward, makes it difficult to:</p> <ul> <li><strong>Collaborate Efficiently</strong>: Merging changes from multiple collaborators is cumbersome with binary files.</li> <li><strong>Version Control</strong>: Tracking changes and maintaining version history is challenging without text-based files.</li> <li><strong>Manage Large Projects</strong>: As projects scale, navigating and editing within a single file becomes inefficient.</li> </ul> <p>Developers often resort to manually externalizing components by saving them as <strong>.tox</strong> files or exporting scripts and data as <strong>.py</strong>, <strong>.glsl</strong>, or <strong>.json</strong> files. However, this manual process is repetitive, error-prone, and hard to manage, especially in large networks.</p> <h3 class="dc-class-style h3-format">聽</h3> <h3 class="dc-class-style h3-format"><strong>What is Embody?</strong></h3> <p><strong>Embody</strong> is a TouchDesigner extension that automates the externalization of <strong>COMP</strong> and <strong>DAT</strong> operators. By tagging the operators you wish to externalize, Embody handles the creation, maintenance, and updating of external files, supporting a variety of formats such as <strong>.tox</strong>, <strong>.py</strong>, <strong>.json</strong>, <strong>.xml</strong>, <strong>.html</strong>, <strong>.glsl</strong>, and more.</p> <p>聽</p> <h3 class="dc-class-style h3-format"><strong>Key Features</strong></h3> <ul> <li><strong>Automated Externalization</strong>: No more manual saving of components and scripts. Embody does it all for you upon saving your project or updating Embody.</li> <li><strong>Tag-Based System</strong>: Easily tag operators for externalization using simple keyboard shortcuts.</li> <li><strong>Folder Structure Mirroring</strong>: Externalized files are saved in a folder structure that mirrors your project network, keeping your files organized.</li> <li><strong>Support for Various File Formats</strong>: Beyond <strong>.tox</strong> files, Embody supports externalizing scripts and data in multiple formats, including Python, GLSL, JSON, and more.</li> <li><strong>Synchronization</strong>: Ensures that your external files are always up-to-date with your project.</li> <li><strong>Manager UI</strong>: Provides an interface to view and manage all your externalized operators, check their status, and update them as needed.</li> <li><strong>Reset Functionality</strong>: Allows you to disable Embody and remove externalizations when needed.</li> <li><strong>Multi-Platform Support</strong>: Developed and tested on both Windows and macOS.</li> </ul> <div class="media-element-container media-live_results_search"><div id="file-516214" class="file file-image file-image-jpeg"> <div class="content"> <figure><a title="Embody Manager UI" class="colorbox" href="https://derivative.ca/sites/default/files/styles/content_colorbox/public/field/image/screenshot2.jpg"><img alt="Embody Manager UI" title="Embody Manager UI" class="media-element file-live-results-search img-responsive" data-delta="1" typeof="foaf:Image" src="https://derivative.ca/sites/default/files/field/image/screenshot2.jpg" width="1525" height="751" /></a><figcaption> Embody Manager UI</figcaption></figure> </div> </div> </div> <h3 class="dc-class-style h3-format"><strong>Getting Started with Embody</strong></h3> <p><strong>1. Download and Add Embody</strong></p> <ul> <li>Visit the <a href="https://github.com/dylanroscover/Embody"><span>Embody</span><span> GitHub</span><span> Repository</span></a>.</li> <li>Navigate to the <strong>/release</strong> folder and download the latest <strong>Embody.tox</strong> file.</li> <li>Open your TouchDesigner project and drag-and-drop the <strong>Embody.tox</strong> file into your network.</li> </ul> <p><strong>2. Initialize Embody</strong></p> <ul> <li>Upon adding Embody, you'll be prompted to <strong>re-initialize</strong> or <strong>keep the last saved state</strong>.</li> <li>For new projects, select <strong>re-initialize</strong>.</li> <li>Embody will place all externalizations within your project folder. You can customize this storage location in Embody's <strong>Folder </strong>parameter.</li> </ul> <p><strong>3. Tag Operators for Externalization</strong></p> <ul> <li>Select the operator you wish to externalize.</li> <li>Press the <strong>left control key twice</strong> (<strong>LCTRL + LCTRL</strong>) to add the externalization tag.</li> <li>Embody supports tagging for: <ul> <li><strong>COMPs</strong>: All except <strong>engine</strong>, <strong>time</strong>, and <strong>annotate</strong> COMPs.</li> <li><strong>DATs</strong>: <strong>Text DAT</strong>, <strong>Table DAT</strong>, <strong>Execute DAT</strong>, and various other execute DATs.</li> </ul> </li> <li>Supported file formats include <strong>.tox</strong>, <strong>.py</strong>, <strong>.json</strong>, <strong>.xml</strong>, <strong>.html</strong>, <strong>.glsl</strong>, and more.</li> </ul> <p><strong>4. Enable and Update Externalizations</strong></p> <ul> <li>Press <strong>Ctrl/Cmd + Shift + U</strong> or click the <strong>Enable/Update</strong> button in Embody.</li> <li>Embody externalizes tagged operators, creating a folder structure that mirrors your project network.</li> <li>For example, externalizing <strong>base2</strong> within <strong>base1</strong> results in the path: {project folder}/base1/base2.tox.</li> </ul> <p>聽</p> <h3 class="dc-class-style h3-format"><strong>Workflow with Embody</strong></h3> <ul> <li><strong>Automatic Updates</strong>: When you save your project (<strong>Ctrl/Cmd + S</strong>), Embody automatically updates any modified (dirty) components.</li> <li><strong>Selective Updates</strong>: Press <strong>Ctrl/Cmd + Shift + U</strong> to update only dirty components without saving the entire project.</li> <li><strong>Manager UI</strong>: Press <strong>Ctrl/Cmd + Shift + E</strong> to open the Embody Manager UI, where you can view all externalized operators, their status, and update them as needed.</li> <li><strong>Resetting Embody</strong>: If you need to reset or disable Embody, you can pulse the <strong>Disable</strong> button. This action will remove externalizations and clear external references.</li> </ul> <p>聽</p> <h3 class="dc-class-style h3-format"><strong>Benefits of Using Embody</strong></h3> <ul> <li><strong>Enhanced Collaboration</strong>: With components and scripts externalized into text-based files, integrating with version control systems like Git becomes seamless.</li> <li><strong>Improved Project Organization</strong>: External files are neatly organized in a folder structure that mirrors your project, making navigation and management easier.</li> <li><strong>Time Savings</strong>: Automating the externalization process reduces repetitive tasks, allowing you to focus on developing your project.</li> <li><strong>Flexibility</strong>: Easily share and reuse components across different projects.</li> </ul> <p>聽</p> <h3 class="dc-class-style h3-format"><strong>Keyboard Shortcuts and Tips</strong></h3> <ul> <li><strong>Ctrl/Cmd + Shift + E</strong>: Open the Embody Manager UI.</li> <li><strong>LCTRL + LCTRL (both Windows and macOS)</strong>: Tag the selected operator for externalization.</li> <li><strong>Ctrl/Cmd + Shift + U</strong>: Enable or update externalizations.</li> <li><strong>Customize Externalization Folder</strong>: Change the default externalizations folder in Embody's parameters to suit your project's needs.</li> <li><strong>Monitor Externalizations</strong>: Use the Manager UI to keep track of which components are externalized and their current status.</li> </ul> <p>聽</p> <h3 class="dc-class-style h3-format"><strong>Advanced Features</strong></h3> <ul> <li><strong>Full Project Externalization</strong>: Embody can externalize your entire project automatically, excluding system components, clones, and replicants.</li> <li><strong>Handling Renamed Components</strong>: Embody detects when components are deleted, renamed or moved and updates the external files accordingly.</li> <li><strong>Conflict Resolution</strong>: The tool checks for duplicate external file paths and helps you resolve conflicts.</li> <li><strong>Custom Tags and Formats</strong>: Define custom tags for different operator types and specify the file formats for externalization.</li> </ul> <p>聽</p> <h3 class="dc-class-style h3-format"><strong>Contributors and Acknowledgments</strong></h3> <p>Embody is a collaborative effort that has evolved thanks to the contributions of several developers:</p> <ul> <li><strong>Original Developer</strong>: Tim Franklin</li> <li><strong>Refactored By</strong>: Dylan Roscover</li> <li><strong>Inspiration and Guidance From</strong>: Elburz Sorkhabi, Matthew Ragan, and Wieland Hilker</li> </ul> <p>Their combined expertise has resulted in a tool that significantly enhances the TouchDesigner development experience.</p> <h3 class="dc-class-style h3-format">聽</h3> <h3 class="dc-class-style h3-format"><strong>Conclusion</strong></h3> <p>Embody addresses a critical need in the TouchDesigner community by simplifying the externalization process. Whether you're a solo developer looking to keep your projects organized or part of a team that requires efficient collaboration tools, Embody offers a robust solution.</p> <p>By automating the tedious aspects of externalization, you can focus on what matters most鈥攃reating engaging and innovative visual experiences with TouchDesigner.</p> </div> </div> </div> <div id="assets" class="fieldset-assets"><h3><span>Asset Downloads</span></h3><div class="field field-name-field-asset-link field-type-link-field field-label-hidden"> <div class="field-items"> <div class=" field-item even"> <a href="https://github.com/dylanroscover/Embody" target="_blank">GitHub</a> </div> </div> </div> </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-above"> <div class="field-label">Tags </div> <div class="field-items"> <div class="field-item even"><a href="/tags/component" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">component</a></div> <div class="field-item odd"><a href="/tags/tox" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">tox</a></div> <div class="field-item even"><a href="/tags/externalize" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">externalize</a></div> <div class="field-item odd"><a href="/tags/externalization" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">externalization</a></div> <div class="field-item even"><a href="/tags/scripts" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">scripts</a></div> <div class="field-item odd"><a href="/tags/ui" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">UI</a></div> <div class="field-item even"><a href="/tags/manager" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">manager</a></div> <div class="field-item odd"><a href="/tags/organization" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">organization</a></div> <div class="field-item even"><a href="/tags/project-organization" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">project organization</a></div> </div> </div> <ul class="links list-inline"><li class="statistics_counter first last"><span>154 reads</span></li> </ul> </footer> </article> </section> </div> </div> <div class="region region-below-content"> <section id="block-derivative-content-derivative-comments-block" class="block block-derivative-content clearfix"> <div class="comments-wrapper col-sm-12 post-comment-responsive"> <h2 class="comments-title">Comments</h2> <div id="discourse-comments"></div> <script type="text/javascript"> window.DiscourseEmbed = { discourseUrl: "https://forum.derivative.ca/", topicId: 548530}; (function() { var d = document.createElement("script"); d.type = "text/javascript"; d.async = true; d.src = window.DiscourseEmbed.discourseUrl + "javascripts/embed.js"; (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(d); })(); </script> </div> </section> <section id="block-views-related-stories-block-2" class="block block-views clearfix"> <h2 class="block-title">Related Posts</h2> <div class="view view-related-stories view-id-related_stories view-display-id-block_2 row view-dom-id-b2ed180e85ec7ee5fa04f1378f1a9a7e"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first col-md-4 col-sm-4 col-xs-12"> <article id="node-60750" class="node node-project node-promoted node-teaser clearfix" about="/community-post/touchdesigner-new-zealand-oliver-ellmers-and-puck-murphy/60750" typeof="sioc:Item foaf:Document"> <header> <div class="field field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item even"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/project_teaser_small/public/field/body-images/screen_shot_2013-12-19_at_5.58.58_pm.png" width="440" height="440" alt=" screen_shot_2013-12-19_at_5.58.58_pm.png" /></div> </div> </div> </header> <div class="node-content clearfix"><div class="node-content-inner"> <div class="inner-top-wrapper"> <div class="node-type post company-post"> Company Post </div> <div class="show-only-list"> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><p>We were very pleased to learn of 2 TouchDesigner projects produced by individuals collaborating from opposite sides of New Zealand's North Island.</p></div> </div> </div> </div> <h2><a href="/community-post/touchdesigner-new-zealand-oliver-ellmers-and-puck-murphy/60750">TouchDesigner in New Zealand with Oliver Ellmers and Puck Murphy</a></h2> <span property="dc:title" content="TouchDesigner in New Zealand with Oliver Ellmers and Puck Murphy" class="rdf-meta element-hidden"></span> </div> <div class="inner-bottom-wrapper clearfix"> <div class="read-more"><a href="/community-post/touchdesigner-new-zealand-oliver-ellmers-and-puck-murphy/60750">Read more</a> </div> <div class="row submitted-wrapper"> <div class="submitted col-xs-5 col-sm-6 pull-right no-padding"> <div class="avatar"> <div class="user-picture"> <div class="avatar image-style-200x200_user_page" data-uid="58216" data-username="isabelle" data-image-style="200x200_user_page"><a href="/user/58216/profile" title="View user profile."><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt="isabelle's picture" title="isabelle's picture" /></a></div> </div> </div> <div class="author"> <span rel="sioc:has_creator"><a href="/user/58216/profile" title="View user profile." class="username" xml:lang="" about="/users/isabelle" typeof="sioc:UserAccount" property="foaf:name" datatype="">isabelle</a></span> <div class="date">Jan 12th 2014</div> </div> </div> </div> <div class="type-list-view-only hide-mobile node-type post company-post"> Company Post </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-hidden"> <div class="field-items"> <div class="field-item even"><div id="taxonomy-term-205" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/activation">Activation</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-168" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/interactive">Interactive</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-104" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/installation">Installation</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-162" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/maxmsp">Max/MSP</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-215" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/data">Data</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-175" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/prototype">Prototype</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-45" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/ui">UI</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-38" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/glsl">GLSL</a></h2> <div class="content"> </div> </div> </div> </div> </div> </footer> </div> </div></div> </article> </div> <div class="views-row views-row-2 views-row-even col-md-4 col-sm-4 col-xs-12"> <article id="node-60749" class="node node-project node-promoted node-teaser clearfix" about="/community-post/lichtpfads-moving-light-performance/60749" typeof="sioc:Item foaf:Document"> <header> <div class="field field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item even"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/project_teaser_small/public/field/body-images/licht.pfad8_1200.jpg" width="440" height="440" alt=" licht.pfad8_1200.jpg" /></div> </div> </div> </header> <div class="node-content clearfix"><div class="node-content-inner"> <div class="inner-top-wrapper"> <div class="node-type post company-post"> Company Post </div> <div class="show-only-list"> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><p>Stanislav Glasov came through with this, his words, "rough" (we don't find it so) video documentation in time for our review of Week01 2014.</p></div> </div> </div> </div> <h2><a href="/community-post/lichtpfads-moving-light-performance/60749">Licht.Pfad's Moving Light Performance</a></h2> <span property="dc:title" content="Licht.Pfad's Moving Light Performance" class="rdf-meta element-hidden"></span> </div> <div class="inner-bottom-wrapper clearfix"> <div class="read-more"><a href="/community-post/lichtpfads-moving-light-performance/60749">Read more</a> </div> <div class="row submitted-wrapper"> <div class="submitted col-xs-5 col-sm-6 pull-right no-padding"> <div class="avatar"> <div class="user-picture"> <div class="avatar image-style-200x200_user_page" data-uid="58216" data-username="isabelle" data-image-style="200x200_user_page"><a href="/user/58216/profile" title="View user profile."><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt="isabelle's picture" title="isabelle's picture" /></a></div> </div> </div> <div class="author"> <span rel="sioc:has_creator"><a href="/user/58216/profile" title="View user profile." class="username" xml:lang="" about="/users/isabelle" typeof="sioc:UserAccount" property="foaf:name" datatype="">isabelle</a></span> <div class="date">Jan 13th 2014</div> </div> </div> </div> <div class="type-list-view-only hide-mobile node-type post company-post"> Company Post </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-hidden"> <div class="field-items"> <div class="field-item even"><div id="taxonomy-term-179" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/performance">Performance</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-163" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/audio-visual">Audio-Visual</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-104" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/installation">Installation</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-152" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/light-installation">Light Installation</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-226" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/lighting-design">Lighting Design</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-164" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/performance-application">Performance Application</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-201" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/houdini">Houdini</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-165" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/vj">VJ</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-96" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/dmx">DMX</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-45" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/ui">UI</a></h2> <div class="content"> </div> </div> </div> </div> </div> </footer> </div> </div></div> </article> </div> <div class="views-row views-row-3 views-row-odd views-row-last col-md-4 col-sm-4 col-xs-12"> <article id="node-60733" class="node node-project node-promoted node-teaser clearfix" about="/community-post/touchdown-super-bowl-xlviii-eye-vapor-and-v-squared-labs/60733" typeof="sioc:Item foaf:Document"> <header> <div class="field field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item even"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/project_teaser_small/public/field/body-images/dsc00017_1920.jpg" width="440" height="440" alt=" dsc00017_1920.jpg" /></div> </div> </div> </header> <div class="node-content clearfix"><div class="node-content-inner"> <div class="inner-top-wrapper"> <div class="node-type post company-post"> Company Post </div> <div class="show-only-list"> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><p>TouchDesigner made a significant showing at Super Bowl XLVIII last week, instrumental in the making of at least four different events that we know of. There are a couple we're not free to promote yet but in the interim here is some fine work from Eye Vapor and V Squared Labs.</p></div> </div> </div> </div> <h2><a href="/community-post/touchdown-super-bowl-xlviii-eye-vapor-and-v-squared-labs/60733">TouchDown at Super Bowl XLVIII with Eye Vapor and V Squared Labs</a></h2> <span property="dc:title" content="TouchDown at Super Bowl XLVIII with Eye Vapor and V Squared Labs" class="rdf-meta element-hidden"></span> </div> <div class="inner-bottom-wrapper clearfix"> <div class="read-more"><a href="/community-post/touchdown-super-bowl-xlviii-eye-vapor-and-v-squared-labs/60733">Read more</a> </div> <div class="row submitted-wrapper"> <div class="submitted col-xs-5 col-sm-6 pull-right no-padding"> <div class="avatar"> <div class="user-picture"> <div class="avatar image-style-200x200_user_page" data-uid="58216" data-username="isabelle" data-image-style="200x200_user_page"><a href="/user/58216/profile" title="View user profile."><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt="isabelle's picture" title="isabelle's picture" /></a></div> </div> </div> <div class="author"> <span rel="sioc:has_creator"><a href="/user/58216/profile" title="View user profile." class="username" xml:lang="" about="/users/isabelle" typeof="sioc:UserAccount" property="foaf:name" datatype="">isabelle</a></span> <div class="date">Jul 23rd 2014</div> </div> </div> </div> <div class="type-list-view-only hide-mobile node-type post company-post"> Company Post </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-hidden"> <div class="field-items"> <div class="field-item even"><div id="taxonomy-term-80" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/dome">Dome</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-197" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/large-scale">Large-Scale</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-73" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/event">Event</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-45" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/ui">UI</a></h2> <div class="content"> </div> </div> </div> <div class="field-item even"><div id="taxonomy-term-164" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/performance-application">Performance Application</a></h2> <div class="content"> </div> </div> </div> </div> </div> </footer> </div> </div></div> </article> </div> </div> </div> </section> </div> </section> </div> </div> </div> </div> <footer class="footer"> <div class="inner container-fluid"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-4 no-padding footer-long-first"> <div class="region region-footer1"> <section id="block-block-1" class="block block-block clearfix"> <h2 class="block-title">Newsletter</h2> <p>Stay up to date with our Newsletter.</p> <p><a href="/derivative-newsletter/subscription"><span>Sign up here</span></a></p> </section> </div> </div> <div class="col-xs-12 col-sm-12 col-md-offset-1 col-md-7 col-lg-offset-2 col-lg-6 no-only-padding footer-long-last"> <div class="col-xs-12 col-sm-5 col-md-5 col-xl-4 desktop"> <div class="region region-footer2"> <section id="block-menu-menu-footer-menu" class="block block-menu clearfix"> <ul class="menu nav"><li class="first leaf"><a href="/support-service">Support service</a></li> <li class="leaf"><a href="/contact-us">Contact Us</a></li> <li class="leaf"><a href="/privacy">Privacy</a></li> <li class="last leaf"><a href="/terms-use">Terms of use</a></li> </ul> </section> </div> </div> <div class="col-xs-12 col-sm-4 col-md-4 col-xl-4 desktop"> <div class="region region-footer3"> <section id="block-bean-social-icons-footer" class="block block-bean clearfix"> <div class="entity entity-bean bean-social-icons clearfix" about="/block/social-icons-footer" typeof=""> <div class="content"> <div class="field field-name-field-social-links field-type-link-field field-label-hidden"> <div class="field-items"> <div class=" field-item even"> <a href="https://www.youtube.com/TouchDesignerOfficial" title="YouTube" target="_blank"><i class="fa fa-youtube fa-fw"></i></a> <a href="https://www.youtube.com/TouchDesignerOfficial" title="YouTube" target="_blank">YouTube</a> </div> <div class=" field-item odd"> <a href="https://www.facebook.com/TouchDesigner" title="Facebook" target="_blank"><i class="fa fa-facebook fa-fw"></i></a> <a href="https://www.facebook.com/TouchDesigner" title="Facebook" target="_blank">Facebook</a> </div> <div class=" field-item even"> <a href="https://twitter.com/1null1" title="Twitter" target="_blank"><i class="fa fa-twitter fa-fw"></i></a> <a href="https://twitter.com/1null1" title="Twitter" target="_blank">Twitter</a> </div> <div class=" field-item odd"> <a href="https://www.instagram.com/TouchDesigner/" title="Instagram" target="_blank"><i class="fa fa-instagram fa-fw"></i></a> <a href="https://www.instagram.com/TouchDesigner/" title="Instagram" target="_blank">Instagram</a> </div> </div> </div> </div> </div> </section> </div> </div> <div class="col-xs-12 col-sm-3 col-md-3 col-xl-4 desktop"> <div class="footer-logo-wrapper"> <a class="logo" href="/" title="Home"> <img class="svg-img" src="https://derivative.ca/sites/all/themes/derivative2017/logo.svg" onerror="this.src='https://derivative.ca/sites/all/themes/derivative2017/logo.png'" alt="Home"/> </a> </div> </div> </div> </div> </div> </footer> <script type="text/javascript" src="/sites/default/files/advagg_js/js__QERVh_Fzf6p9iHQYCmUr1O2jFHk11e-Q95akflX9HwI__JSeQmfvtfZjPwtnI4bIh5Z2ePRm2PQCEu653byvDXfU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- da2a.targets=[ {title:"Embody: Automate Externalization",url:"https:\/\/derivative.ca\/community-post\/asset\/embody-automate-externalization\/70497"}, {title:"Embody: Automate Externalization",url:"https:\/\/derivative.ca\/community-post\/asset\/embody-automate-externalization\/70497"}]; da2a.html_done=true;if(da2a.script_ready&&!da2a.done)da2a.init();da2a.script_load(); //--><!]]> </script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__i11V-7AETPhfL9YzRpXBpECwVkYyQ_ahu2eHxES_mK0__S79mhsO6q7fWONLNt9XSEZx-JmiQeAEtuPkuVxIEjpY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"09021bd6f0","applicationID":"119330051","transactionName":"ZlBRbBZWXkUCAk0LXV8aclsQXl9YTA9WBlduRVJfAWhGXwYW","queueTime":0,"applicationTime":649,"atts":"ShdSGl5MTUs=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html>