@rest-hooks/core
Advanced tools
Comparing version 4.4.1 to 4.4.2
@@ -203,3 +203,3 @@ 'use strict'; | ||
let receiveAction; | ||
if (getOptimisticResponse && action.endpoint) { | ||
if (getOptimisticResponse && action.endpoint && action.endpoint.sideEffect) { | ||
receiveAction = createOptimistic(action.endpoint, { | ||
@@ -918,3 +918,3 @@ args: action.meta.args, | ||
// render - so we need to stop 'readonly' fetches which can be triggered in render | ||
if (action.meta.optimisticResponse !== undefined || ((_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse) !== undefined) { | ||
if (action.meta.optimisticResponse !== undefined || ((_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse) !== undefined && action.endpoint.sideEffect) { | ||
return next(action); | ||
@@ -921,0 +921,0 @@ } |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@rest-hooks/normalizr")):"function"==typeof define&&define.amd?define(["exports","@rest-hooks/normalizr"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).restHookCore={},e.normalizr)}(this,(function(e,t){"use strict";var s="function"==typeof requestIdleCallback?requestIdleCallback:e=>setTimeout(e,0);const r="rest-hooks/fetch",i="rest-hooks/receive",n=i,a="rest-hooks/optimistic",o="rest-hooks/reset",c="rest-hooks/subscribe",l="rest-hook/unsubscribe",h="rest-hooks/invalidate",d="rest-hooks/invalidateall",u="rest-hooks/gc";var p=Object.freeze({__proto__:null,FETCH_TYPE:r,RECEIVE_TYPE:i,SET_TYPE:n,OPTIMISTIC_TYPE:a,RESET_TYPE:o,SUBSCRIBE_TYPE:c,UNSUBSCRIBE_TYPE:l,INVALIDATE_TYPE:h,INVALIDATEALL_TYPE:d,GC_TYPE:u});function m(e,{schema:t,key:s,args:r,updaters:n,fetchedAt:a=0,update:o,dataExpiryLength:c}){const l=Date.now(),h={schema:t,key:s,args:r,date:l,fetchedAt:a,expiresAt:l+c};return h.updaters=n,h.update=o,{type:i,payload:e,meta:h}}function f(e,{schema:t,key:s,options:r,errorExpiryLength:n=6e4,fetchedAt:a=0}){const o=Date.now();return{type:i,payload:e,meta:{schema:t,key:s,date:o,fetchedAt:a,expiresAt:o+n,errorPolicy:null==r?void 0:r.errorPolicy},error:!0}}var y=Object.freeze({__proto__:null,createFetch:function(e,{params:t,body:s,throttle:i,updateParams:n}){const{schema:a,type:o,getFetchKey:c,options:l}=e,h=c(t);let d=0,u=0;const p=new Promise(((e,t)=>{[d,u]=[e,t]})),m={schema:a,type:o,args:[t,s],key:h,throttle:i,options:l,resolve:d,reject:u,promise:p,createdAt:Date.now()};return e.update&&(m.update=e.update),n&&(m.update=e=>{const t={};return n.forEach((([s,r,i])=>{t[s.getFetchKey(r)]=t=>i(e,t)})),t}),null!=l&&l.optimisticUpdate&&(m.optimisticResponse=l.optimisticUpdate(t,s)),{type:r,payload:()=>e.fetch(t,s),meta:m}},createReceive:m,createReceiveError:f});function g(e,t){var s;const r=t.meta.optimisticResponse;let i;if((null==(s=t.endpoint)?void 0:s.getOptimisticResponse)&&t.endpoint)i=function(e,{args:t,fetchedAt:s}){var r;const i=null!=(r=e.dataExpiryLength)?r:6e4,n=Date.now(),o={args:t,fetchedAt:s,date:n,expiresAt:n+i,schema:e.schema,key:e.key(...t)};return e.update&&(o.update=e.update),e.errorPolicy&&(o.errorPolicy=e.errorPolicy),{type:a,endpoint:e,meta:o}}(t.endpoint,{args:t.meta.args,fetchedAt:"number"!=typeof t.meta.createdAt?t.meta.createdAt.getTime():t.meta.createdAt});else{if(!r)return e;i=m(r,Object.assign({},t.meta,{dataExpiryLength:1/0}))}return Object.assign({},e,{optimistic:[...e.optimistic,i]})}function v(e,s,r){if(s.error)return E(e,s,s.payload);try{var i;let o;if(s.type===a){if(!s.endpoint.getOptimisticResponse)return e;try{o=s.endpoint.getOptimisticResponse.call(s.endpoint,r.snapshot(e,s.meta.fetchedAt),...s.meta.args)}catch(t){var n;if("AbortOptimistic"===(null==(n=t.constructor)?void 0:n.name))return e;throw t}}else o=s.payload;const{result:c,entities:l,indexes:h,entityMeta:d}=t.normalize(o,s.meta.schema,s.meta.args,e.entities,e.indexes,e.entityMeta,Object.assign({fetchedAt:s.meta.date},s.meta));let u=Object.assign({},e.results,{[s.meta.key]:c});try{if("updaters"in s.meta&&s.meta.updaters&&(u=function(e,t,s){return Object.assign({},e,Object.fromEntries(Object.entries(s).map((([s,r])=>[s,r(t,e[s])]))))}(u,c,s.meta.updaters)),s.meta.update){const e=s.meta.update(c,...s.meta.args||[]);Object.keys(e).forEach((t=>{u[t]=e[t](u[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.meta.key}`),console.error(e)}return{entities:l,indexes:h,results:u,entityMeta:d,meta:Object.assign({},e.meta,{[s.meta.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(i=e.meta[s.meta.key])?void 0:i.expiresAt}}),optimistic:b(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.meta.key}\n\nFull Schema: ${JSON.stringify(s.meta.schema,void 0,2)}\n\nError:\n${t.message}`,"payload"in s&&(t.payload=s.payload),t.status=400),E(e,s,t)}}function E(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:b(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.meta.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.meta.errorPolicy?void 0:t.meta.errorPolicy(s)}}),optimistic:b(e,t)})}function b(e,t){return e.optimistic.filter((e=>e.meta.key!==t.meta.key||(e.type===a?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function L(e){return function(t,s){var i;switch(t||(t=k),s.type){case u:return s.entities.forEach((([e,s])=>{var r,i;null==(r=t.entities[e])||delete r[s],null==(i=t.entityMeta[e])||delete i[s]})),s.results.forEach((e=>{delete t.results[e],delete t.meta[e]})),t;case r:return g(t,s);case a:case n:return v(t,s,e);case d:case h:return function(e,t){const s=Object.assign({},e.results),r=Object.assign({},e.meta),i=e=>{delete s[e];const t=Object.assign({},r[e],{expiresAt:0,invalidated:!0});delete t.error,r[e]=t};return t.type===h?i(t.meta.key):Object.keys(s).forEach((e=>{t.testKey(e)&&i(e)})),Object.assign({},e,{results:s,meta:r})}(t,s);case o:return Object.assign({},k,{lastReset:null!=(i=s.date)?i:Date.now()});default:return t}}}const k={entities:{},indexes:{},results:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var O=Object.freeze({__proto__:null,inferResults:t.inferResults,DELETED:t.DELETED,RIC:s,initialState:k});function A(e,{args:t,fetchedAt:s,response:r,error:i=!1}){var a,o;const c=i?null!=(a=e.errorExpiryLength)?a:1e3:null!=(o=e.dataExpiryLength)?o:6e4,l=Date.now(),h={args:t,fetchedAt:null!=s?s:l,date:l,expiresAt:l+c,schema:e.schema,key:e.key(...t)};e.update&&(h.update=e.update),e.errorPolicy&&(h.errorPolicy=e.errorPolicy);const d={type:n,payload:r,endpoint:e,meta:h};return i&&(d.error=!0),d}function w(e,t){return e.meta[t]}const S=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},I=()=>k;class x{constructor({dispatch:e=S,getState:s=I,globalCache:r={entities:{},results:{}}}={}){this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:h,meta:{key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch({type:d,testKey:t=>e.testKey(t)}),this.resetEntireStore=()=>this.dispatch({type:o,date:Date.now()}),this.setResponse=(e,...t)=>{const s=t[t.length-1],r=A(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(r)},this.receive=(e,...t)=>this.setResponse(e,...t),this.setError=(e,...t)=>{const s=t[t.length-1],r=A(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(r)},this.receiveError=(e,...t)=>this.setError(e,...t),this.resolve=(e,t)=>this.dispatch(A(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:c,endpoint:e,meta:{args:t,key:e.key(...t),fetch:()=>e(...t),schema:e.schema,options:e}}}(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:l,endpoint:e,meta:{args:t,key:e.key(...t),options:e}}}(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new R(this,e,t),this.getError=(e,...t)=>{if(null===t[0])return;const s=t[t.length-1],r=t.slice(0,t.length-1),i=e.key(...r),n=w(s,i);return void 0===s.results[i]||"soft"!==(null==n?void 0:n.errorPolicy)?null==n?void 0:n.error:void 0},this.getResponse=(e,...s)=>{const r=s[s.length-1],i=s.slice(0,s.length-1),n=1!==i.length||null!==i[0],a=n?e.key(...i):"",o=n?r.results[a]:void 0,c=e.schema,l=w(r,a);let h,d=null==l?void 0:l.expiresAt,u=!1;if(void 0===o&&void 0!==e.schema?(h=t.inferResults(e.schema,i,r.indexes,r.entities),u=!t.validateInference(h),!d&&u&&(d=1)):h=o,!n)return{data:h,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};if(!e.schema||!j(e.schema))return{data:h,expiryStatus:null!=l&&l.invalidated?t.ExpiryStatus.Invalid:o&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:d||0};this.globalCache.results[a]||(this.globalCache.results[a]=new t.WeakEntityMap);const{data:p,paths:m}=t.denormalizeCached(h,c,r.entities,this.globalCache.entities,this.globalCache.results[a],i),f="symbol"==typeof p;d||(d=function(e,t){let s=1/0;for(const{pk:n,key:a}of e){var r,i;const e=null==(r=t[a])||null==(i=r[n])?void 0:i.expiresAt;e<s&&(s=e)}return s}(m,r.entityMeta));return{data:p,expiryStatus:null!=l&&l.invalidated||f&&(null==l||!l.error)?t.ExpiryStatus.Invalid:f||e.invalidIfStale||u?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:d}},this.dispatch=e,this.getState=s,this.globalCache=r}}function j(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&j(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?j(t):Object.values(t).some((e=>j(e)))}return!1}class R{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.getResponse=(e,...t)=>this.controller.getResponse(e,...t,this.state),this.getError=(e,...t)=>this.controller.getError(e,...t,this.state),this.state=t,this.controller=e,this.fetchedAt=s}}function T(e,{args:t}){const s=e.key(...t);let i=0,n=0;const a=new Promise(((e,t)=>{[i,n]=[e,t]})),o={schema:e.schema,type:e.sideEffect?"mutate":"read",args:t,key:s,throttle:!e.sideEffect,options:e,resolve:i,reject:n,promise:a,createdAt:Date.now()};return e.update&&(o.update=e.update),e.optimisticUpdate&&(o.optimisticResponse=e.optimisticUpdate(...t)),{type:r,payload:()=>e(...t),meta:o,endpoint:e}}class _ extends x{constructor(...e){super(...e),this.fetch=(e,...t)=>{const s=T(e,{args:t});return this.dispatch(s),s.meta.promise}}}class P extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}var q=L(new _);var D=Object.freeze({__proto__:null});class M{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class C{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let H;H="undefined"!=typeof navigator&&"function"==typeof addEventListener?M:C;var F,U=H;const z="undefined"!=typeof Intl,N={name:`Rest Hooks: ${null==(F=globalThis.document)?void 0:F.title}`,autoPause:!0,serialize:{options:void 0,replacer:z?(e,t)=>"number"==typeof t&&"string"==typeof e&&isFinite(t)&&("date"===e||e.endsWith("At"))?Intl.DateTimeFormat("en-US",{hour:"numeric",minute:"numeric",second:"numeric",fractionalSecondDigits:3}).format(t):t:void 0}};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=_,e.DefaultConnectionListener=U,e.DevToolsManager=class{constructor(e,t){this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},N,{config:e})),this.devTools?this.middleware=e=>{const s=L(e);return r=>i=>{const n=r(i);return n.then((()=>{if(null!=t&&t(i))return;const r=e.getState();this.devTools.send(i,r.optimistic.reduce(s,r),void 0,"REST_HOOKS")})),n}}:this.middleware=()=>e=>t=>e(t)}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===n&&s.error&&this.shouldLogout(s.payload)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor(e=6e4,t=1e3){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.getState=()=>k,this.controller=new _,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=({dispatch:e,getState:t,controller:s})=>(this.getState=t,this.controller=s,t=>i=>{var a;switch(i.type){case r:return this.handleFetch(i,e,s),void 0!==i.meta.optimisticResponse||void 0!==(null==(a=i.endpoint)?void 0:a.getOptimisticResponse)?t(i):Promise.resolve();case n:return t(i).then((()=>{if(i.meta.key in this.fetched){var e;const t=null==(e=s.getState().meta[i.meta.key])?void 0:e.error;t?this.handleReceive(f(t,i.meta)):this.handleReceive(i)}}));case o:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(i).then((()=>{for(const t in e)e[t](new P)}))}default:return t(i)}})}skipLogging(e){return e.type===r&&e.meta.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){if(this.cleanupDate)return this.cleanupDate;const e=this.controller.getState().lastReset;return e instanceof Date?e.valueOf():"number"!=typeof e?-1/0:e}handleFetch(e,t,s){const r=e.payload,{key:i,throttle:n,resolve:a,reject:o}=e.meta,c="number"!=typeof e.meta.createdAt?e.meta.createdAt.getTime():e.meta.createdAt,l=()=>{let t=r();const s=e=>e.then((e=>(a(e),e))).catch((e=>{throw o(e),e}));return!n&&e.endpoint&&(t=s(t)),t=t.then((t=>{let s=this.getLastReset();var r,i;c>=s&&(e.endpoint&&this.controller?this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:c}):this.controller.dispatch(m(t,Object.assign({},e.meta,{fetchedAt:c,dataExpiryLength:null!=(r=null==(i=e.meta.options)?void 0:i.dataExpiryLength)?r:this.dataExpiryLength}))));return t})).catch((t=>{const s=this.getLastReset();var r,i;c>=s&&(e.endpoint&&this.controller?this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:c,error:!0}):this.controller.dispatch(f(t,Object.assign({},e.meta,{errorExpiryLength:null!=(r=null==(i=e.meta.options)?void 0:i.errorExpiryLength)?r:this.errorExpiryLength,fetchedAt:c}))));throw t})),n||e.endpoint||(t=s(t)),t};return n?this.throttle(i,l,c).then((e=>a(e))).catch((e=>o(e))):l().catch((()=>{}))}handleReceive(e){if(e.meta.key in this.fetched){let t;t=e.error?this.rejectors[e.meta.key]:this.resolvers[e.meta.key],t(e.payload),this.clear(e.meta.key)}}getMiddleware(){return this.middleware}throttle(e,t,r){const i=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>i||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=r,s((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}},e.PollingSubscription=class{constructor({key:e,schema:t,fetch:s,frequency:r,getState:i},n,a){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===r)throw new Error("frequency needed for polling subscription");this.schema=t,this.fetch=s,this.frequency=r,this.key=e,this.frequencyHistogram.set(this.frequency,1),this.dispatch=n,this.getState=i,this.connectionListener=a||new U,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=()=>this.fetch();e.schema=this.schema,e.key=()=>this.key,e.dataExpiryLength=this.frequency/2,e.errorExpiryLength=this.frequency/10,e.errorPolicy=()=>"soft";const t=T(e,{args:[]});t.meta.promise.catch((e=>null)),this.dispatch(t)}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=P,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.Subscription=e,this.middleware=({dispatch:e,getState:t})=>s=>r=>{switch(r.type){case c:try{this.handleSubscribe(r,e,t)}catch(e){console.error(e)}return Promise.resolve();case l:return this.handleUnsubscribe(r,e),Promise.resolve();default:return s(r)}}}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e,t,s){let r;if(e.endpoint){const{endpoint:t}=e,{args:i}=e.meta;r={schema:t.schema,fetch:()=>t(...i),frequency:t.pollFrequency,key:t.key(...i),getState:s}}else{var i;r={key:e.meta.key,frequency:null==(i=e.meta.options)?void 0:i.pollFrequency,schema:e.meta.schema,fetch:e.meta.fetch,getState:s}}r.key in this.subscriptions?this.subscriptions[r.key].add(r.frequency):this.subscriptions[r.key]=new this.Subscription(r,t)}handleUnsubscribe(e,t){var s;const r=e.meta.key,i=null==(s=e.meta.options)?void 0:s.pollFrequency;if(r in this.subscriptions){this.subscriptions[r].remove(i)&&delete this.subscriptions[r]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=O,e.actionTypes=p,e.applyManager=function(e,t){return e.map((e=>{const s=e.getMiddleware();return({dispatch:e,getState:r})=>{t.dispatch=e,t.getState=r;const i=Object.create(t,{controller:{value:t}});return s(i)}}))},e.createFetch=T,e.createReceive=A,e.createReducer=L,e.initialState=k,e.legacyActions=y,e.newActions=D,e.reducer=q,Object.defineProperty(e,"__esModule",{value:!0})})); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@rest-hooks/normalizr")):"function"==typeof define&&define.amd?define(["exports","@rest-hooks/normalizr"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).restHookCore={},e.normalizr)}(this,(function(e,t){"use strict";var s="function"==typeof requestIdleCallback?requestIdleCallback:e=>setTimeout(e,0);const r="rest-hooks/fetch",i="rest-hooks/receive",n=i,a="rest-hooks/optimistic",o="rest-hooks/reset",c="rest-hooks/subscribe",l="rest-hook/unsubscribe",h="rest-hooks/invalidate",d="rest-hooks/invalidateall",u="rest-hooks/gc";var p=Object.freeze({__proto__:null,FETCH_TYPE:r,RECEIVE_TYPE:i,SET_TYPE:n,OPTIMISTIC_TYPE:a,RESET_TYPE:o,SUBSCRIBE_TYPE:c,UNSUBSCRIBE_TYPE:l,INVALIDATE_TYPE:h,INVALIDATEALL_TYPE:d,GC_TYPE:u});function m(e,{schema:t,key:s,args:r,updaters:n,fetchedAt:a=0,update:o,dataExpiryLength:c}){const l=Date.now(),h={schema:t,key:s,args:r,date:l,fetchedAt:a,expiresAt:l+c};return h.updaters=n,h.update=o,{type:i,payload:e,meta:h}}function f(e,{schema:t,key:s,options:r,errorExpiryLength:n=6e4,fetchedAt:a=0}){const o=Date.now();return{type:i,payload:e,meta:{schema:t,key:s,date:o,fetchedAt:a,expiresAt:o+n,errorPolicy:null==r?void 0:r.errorPolicy},error:!0}}var y=Object.freeze({__proto__:null,createFetch:function(e,{params:t,body:s,throttle:i,updateParams:n}){const{schema:a,type:o,getFetchKey:c,options:l}=e,h=c(t);let d=0,u=0;const p=new Promise(((e,t)=>{[d,u]=[e,t]})),m={schema:a,type:o,args:[t,s],key:h,throttle:i,options:l,resolve:d,reject:u,promise:p,createdAt:Date.now()};return e.update&&(m.update=e.update),n&&(m.update=e=>{const t={};return n.forEach((([s,r,i])=>{t[s.getFetchKey(r)]=t=>i(e,t)})),t}),null!=l&&l.optimisticUpdate&&(m.optimisticResponse=l.optimisticUpdate(t,s)),{type:r,payload:()=>e.fetch(t,s),meta:m}},createReceive:m,createReceiveError:f});function g(e,t){var s;const r=t.meta.optimisticResponse;let i;if((null==(s=t.endpoint)?void 0:s.getOptimisticResponse)&&t.endpoint&&t.endpoint.sideEffect)i=function(e,{args:t,fetchedAt:s}){var r;const i=null!=(r=e.dataExpiryLength)?r:6e4,n=Date.now(),o={args:t,fetchedAt:s,date:n,expiresAt:n+i,schema:e.schema,key:e.key(...t)};return e.update&&(o.update=e.update),e.errorPolicy&&(o.errorPolicy=e.errorPolicy),{type:a,endpoint:e,meta:o}}(t.endpoint,{args:t.meta.args,fetchedAt:"number"!=typeof t.meta.createdAt?t.meta.createdAt.getTime():t.meta.createdAt});else{if(!r)return e;i=m(r,Object.assign({},t.meta,{dataExpiryLength:1/0}))}return Object.assign({},e,{optimistic:[...e.optimistic,i]})}function v(e,s,r){if(s.error)return E(e,s,s.payload);try{var i;let o;if(s.type===a){if(!s.endpoint.getOptimisticResponse)return e;try{o=s.endpoint.getOptimisticResponse.call(s.endpoint,r.snapshot(e,s.meta.fetchedAt),...s.meta.args)}catch(t){var n;if("AbortOptimistic"===(null==(n=t.constructor)?void 0:n.name))return e;throw t}}else o=s.payload;const{result:c,entities:l,indexes:h,entityMeta:d}=t.normalize(o,s.meta.schema,s.meta.args,e.entities,e.indexes,e.entityMeta,Object.assign({fetchedAt:s.meta.date},s.meta));let u=Object.assign({},e.results,{[s.meta.key]:c});try{if("updaters"in s.meta&&s.meta.updaters&&(u=function(e,t,s){return Object.assign({},e,Object.fromEntries(Object.entries(s).map((([s,r])=>[s,r(t,e[s])]))))}(u,c,s.meta.updaters)),s.meta.update){const e=s.meta.update(c,...s.meta.args||[]);Object.keys(e).forEach((t=>{u[t]=e[t](u[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.meta.key}`),console.error(e)}return{entities:l,indexes:h,results:u,entityMeta:d,meta:Object.assign({},e.meta,{[s.meta.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(i=e.meta[s.meta.key])?void 0:i.expiresAt}}),optimistic:b(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.meta.key}\n\nFull Schema: ${JSON.stringify(s.meta.schema,void 0,2)}\n\nError:\n${t.message}`,"payload"in s&&(t.payload=s.payload),t.status=400),E(e,s,t)}}function E(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:b(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.meta.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.meta.errorPolicy?void 0:t.meta.errorPolicy(s)}}),optimistic:b(e,t)})}function b(e,t){return e.optimistic.filter((e=>e.meta.key!==t.meta.key||(e.type===a?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function L(e){return function(t,s){var i;switch(t||(t=k),s.type){case u:return s.entities.forEach((([e,s])=>{var r,i;null==(r=t.entities[e])||delete r[s],null==(i=t.entityMeta[e])||delete i[s]})),s.results.forEach((e=>{delete t.results[e],delete t.meta[e]})),t;case r:return g(t,s);case a:case n:return v(t,s,e);case d:case h:return function(e,t){const s=Object.assign({},e.results),r=Object.assign({},e.meta),i=e=>{delete s[e];const t=Object.assign({},r[e],{expiresAt:0,invalidated:!0});delete t.error,r[e]=t};return t.type===h?i(t.meta.key):Object.keys(s).forEach((e=>{t.testKey(e)&&i(e)})),Object.assign({},e,{results:s,meta:r})}(t,s);case o:return Object.assign({},k,{lastReset:null!=(i=s.date)?i:Date.now()});default:return t}}}const k={entities:{},indexes:{},results:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var O=Object.freeze({__proto__:null,inferResults:t.inferResults,DELETED:t.DELETED,RIC:s,initialState:k});function A(e,{args:t,fetchedAt:s,response:r,error:i=!1}){var a,o;const c=i?null!=(a=e.errorExpiryLength)?a:1e3:null!=(o=e.dataExpiryLength)?o:6e4,l=Date.now(),h={args:t,fetchedAt:null!=s?s:l,date:l,expiresAt:l+c,schema:e.schema,key:e.key(...t)};e.update&&(h.update=e.update),e.errorPolicy&&(h.errorPolicy=e.errorPolicy);const d={type:n,payload:r,endpoint:e,meta:h};return i&&(d.error=!0),d}function w(e,t){return e.meta[t]}const S=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},I=()=>k;class x{constructor({dispatch:e=S,getState:s=I,globalCache:r={entities:{},results:{}}}={}){this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:h,meta:{key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch({type:d,testKey:t=>e.testKey(t)}),this.resetEntireStore=()=>this.dispatch({type:o,date:Date.now()}),this.setResponse=(e,...t)=>{const s=t[t.length-1],r=A(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(r)},this.receive=(e,...t)=>this.setResponse(e,...t),this.setError=(e,...t)=>{const s=t[t.length-1],r=A(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(r)},this.receiveError=(e,...t)=>this.setError(e,...t),this.resolve=(e,t)=>this.dispatch(A(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:c,endpoint:e,meta:{args:t,key:e.key(...t),fetch:()=>e(...t),schema:e.schema,options:e}}}(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:l,endpoint:e,meta:{args:t,key:e.key(...t),options:e}}}(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new R(this,e,t),this.getError=(e,...t)=>{if(null===t[0])return;const s=t[t.length-1],r=t.slice(0,t.length-1),i=e.key(...r),n=w(s,i);return void 0===s.results[i]||"soft"!==(null==n?void 0:n.errorPolicy)?null==n?void 0:n.error:void 0},this.getResponse=(e,...s)=>{const r=s[s.length-1],i=s.slice(0,s.length-1),n=1!==i.length||null!==i[0],a=n?e.key(...i):"",o=n?r.results[a]:void 0,c=e.schema,l=w(r,a);let h,d=null==l?void 0:l.expiresAt,u=!1;if(void 0===o&&void 0!==e.schema?(h=t.inferResults(e.schema,i,r.indexes,r.entities),u=!t.validateInference(h),!d&&u&&(d=1)):h=o,!n)return{data:h,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};if(!e.schema||!j(e.schema))return{data:h,expiryStatus:null!=l&&l.invalidated?t.ExpiryStatus.Invalid:o&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:d||0};this.globalCache.results[a]||(this.globalCache.results[a]=new t.WeakEntityMap);const{data:p,paths:m}=t.denormalizeCached(h,c,r.entities,this.globalCache.entities,this.globalCache.results[a],i),f="symbol"==typeof p;d||(d=function(e,t){let s=1/0;for(const{pk:n,key:a}of e){var r,i;const e=null==(r=t[a])||null==(i=r[n])?void 0:i.expiresAt;e<s&&(s=e)}return s}(m,r.entityMeta));return{data:p,expiryStatus:null!=l&&l.invalidated||f&&(null==l||!l.error)?t.ExpiryStatus.Invalid:f||e.invalidIfStale||u?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:d}},this.dispatch=e,this.getState=s,this.globalCache=r}}function j(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&j(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?j(t):Object.values(t).some((e=>j(e)))}return!1}class R{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.getResponse=(e,...t)=>this.controller.getResponse(e,...t,this.state),this.getError=(e,...t)=>this.controller.getError(e,...t,this.state),this.state=t,this.controller=e,this.fetchedAt=s}}function T(e,{args:t}){const s=e.key(...t);let i=0,n=0;const a=new Promise(((e,t)=>{[i,n]=[e,t]})),o={schema:e.schema,type:e.sideEffect?"mutate":"read",args:t,key:s,throttle:!e.sideEffect,options:e,resolve:i,reject:n,promise:a,createdAt:Date.now()};return e.update&&(o.update=e.update),e.optimisticUpdate&&(o.optimisticResponse=e.optimisticUpdate(...t)),{type:r,payload:()=>e(...t),meta:o,endpoint:e}}class _ extends x{constructor(...e){super(...e),this.fetch=(e,...t)=>{const s=T(e,{args:t});return this.dispatch(s),s.meta.promise}}}class P extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}var q=L(new _);var D=Object.freeze({__proto__:null});class M{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class C{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let H;H="undefined"!=typeof navigator&&"function"==typeof addEventListener?M:C;var F,U=H;const z="undefined"!=typeof Intl,N={name:`Rest Hooks: ${null==(F=globalThis.document)?void 0:F.title}`,autoPause:!0,serialize:{options:void 0,replacer:z?(e,t)=>"number"==typeof t&&"string"==typeof e&&isFinite(t)&&("date"===e||e.endsWith("At"))?Intl.DateTimeFormat("en-US",{hour:"numeric",minute:"numeric",second:"numeric",fractionalSecondDigits:3}).format(t):t:void 0}};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=_,e.DefaultConnectionListener=U,e.DevToolsManager=class{constructor(e,t){this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},N,{config:e})),this.devTools?this.middleware=e=>{const s=L(e);return r=>i=>{const n=r(i);return n.then((()=>{if(null!=t&&t(i))return;const r=e.getState();this.devTools.send(i,r.optimistic.reduce(s,r),void 0,"REST_HOOKS")})),n}}:this.middleware=()=>e=>t=>e(t)}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===n&&s.error&&this.shouldLogout(s.payload)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor(e=6e4,t=1e3){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.getState=()=>k,this.controller=new _,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=({dispatch:e,getState:t,controller:s})=>(this.getState=t,this.controller=s,t=>i=>{var a;switch(i.type){case r:return this.handleFetch(i,e,s),void 0!==i.meta.optimisticResponse||void 0!==(null==(a=i.endpoint)?void 0:a.getOptimisticResponse)&&i.endpoint.sideEffect?t(i):Promise.resolve();case n:return t(i).then((()=>{if(i.meta.key in this.fetched){var e;const t=null==(e=s.getState().meta[i.meta.key])?void 0:e.error;t?this.handleReceive(f(t,i.meta)):this.handleReceive(i)}}));case o:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(i).then((()=>{for(const t in e)e[t](new P)}))}default:return t(i)}})}skipLogging(e){return e.type===r&&e.meta.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){if(this.cleanupDate)return this.cleanupDate;const e=this.controller.getState().lastReset;return e instanceof Date?e.valueOf():"number"!=typeof e?-1/0:e}handleFetch(e,t,s){const r=e.payload,{key:i,throttle:n,resolve:a,reject:o}=e.meta,c="number"!=typeof e.meta.createdAt?e.meta.createdAt.getTime():e.meta.createdAt,l=()=>{let t=r();const s=e=>e.then((e=>(a(e),e))).catch((e=>{throw o(e),e}));return!n&&e.endpoint&&(t=s(t)),t=t.then((t=>{let s=this.getLastReset();var r,i;c>=s&&(e.endpoint&&this.controller?this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:c}):this.controller.dispatch(m(t,Object.assign({},e.meta,{fetchedAt:c,dataExpiryLength:null!=(r=null==(i=e.meta.options)?void 0:i.dataExpiryLength)?r:this.dataExpiryLength}))));return t})).catch((t=>{const s=this.getLastReset();var r,i;c>=s&&(e.endpoint&&this.controller?this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:c,error:!0}):this.controller.dispatch(f(t,Object.assign({},e.meta,{errorExpiryLength:null!=(r=null==(i=e.meta.options)?void 0:i.errorExpiryLength)?r:this.errorExpiryLength,fetchedAt:c}))));throw t})),n||e.endpoint||(t=s(t)),t};return n?this.throttle(i,l,c).then((e=>a(e))).catch((e=>o(e))):l().catch((()=>{}))}handleReceive(e){if(e.meta.key in this.fetched){let t;t=e.error?this.rejectors[e.meta.key]:this.resolvers[e.meta.key],t(e.payload),this.clear(e.meta.key)}}getMiddleware(){return this.middleware}throttle(e,t,r){const i=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>i||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=r,s((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}},e.PollingSubscription=class{constructor({key:e,schema:t,fetch:s,frequency:r,getState:i},n,a){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===r)throw new Error("frequency needed for polling subscription");this.schema=t,this.fetch=s,this.frequency=r,this.key=e,this.frequencyHistogram.set(this.frequency,1),this.dispatch=n,this.getState=i,this.connectionListener=a||new U,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=()=>this.fetch();e.schema=this.schema,e.key=()=>this.key,e.dataExpiryLength=this.frequency/2,e.errorExpiryLength=this.frequency/10,e.errorPolicy=()=>"soft";const t=T(e,{args:[]});t.meta.promise.catch((e=>null)),this.dispatch(t)}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=P,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.Subscription=e,this.middleware=({dispatch:e,getState:t})=>s=>r=>{switch(r.type){case c:try{this.handleSubscribe(r,e,t)}catch(e){console.error(e)}return Promise.resolve();case l:return this.handleUnsubscribe(r,e),Promise.resolve();default:return s(r)}}}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e,t,s){let r;if(e.endpoint){const{endpoint:t}=e,{args:i}=e.meta;r={schema:t.schema,fetch:()=>t(...i),frequency:t.pollFrequency,key:t.key(...i),getState:s}}else{var i;r={key:e.meta.key,frequency:null==(i=e.meta.options)?void 0:i.pollFrequency,schema:e.meta.schema,fetch:e.meta.fetch,getState:s}}r.key in this.subscriptions?this.subscriptions[r.key].add(r.frequency):this.subscriptions[r.key]=new this.Subscription(r,t)}handleUnsubscribe(e,t){var s;const r=e.meta.key,i=null==(s=e.meta.options)?void 0:s.pollFrequency;if(r in this.subscriptions){this.subscriptions[r].remove(i)&&delete this.subscriptions[r]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=O,e.actionTypes=p,e.applyManager=function(e,t){return e.map((e=>{const s=e.getMiddleware();return({dispatch:e,getState:r})=>{t.dispatch=e,t.getState=r;const i=Object.create(t,{controller:{value:t}});return s(i)}}))},e.createFetch=T,e.createReceive=A,e.createReducer=L,e.initialState=k,e.legacyActions=y,e.newActions=D,e.reducer=q,Object.defineProperty(e,"__esModule",{value:!0})})); |
@@ -47,3 +47,3 @@ import { SET_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js'; | ||
// render - so we need to stop 'readonly' fetches which can be triggered in render | ||
if (action.meta.optimisticResponse !== undefined || ((_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse) !== undefined) { | ||
if (action.meta.optimisticResponse !== undefined || ((_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse) !== undefined && action.endpoint.sideEffect) { | ||
return next(action); | ||
@@ -292,2 +292,2 @@ } | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRVRfVFlQRSIsIkZFVENIX1RZUEUiLCJSRVNFVF9UWVBFIiwiQ29udHJvbGxlciIsImluaXRpYWxTdGF0ZSIsImNyZWF0ZVJlY2VpdmUiLCJjcmVhdGVSZWNlaXZlRXJyb3IiLCJSSUMiLCJSZXNldEVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJOZXR3b3JrTWFuYWdlciIsImRhdGFFeHBpcnlMZW5ndGgiLCJlcnJvckV4cGlyeUxlbmd0aCIsImZldGNoZWQiLCJPYmplY3QiLCJjcmVhdGUiLCJyZXNvbHZlcnMiLCJyZWplY3RvcnMiLCJmZXRjaGVkQXQiLCJnZXRTdGF0ZSIsImNvbnRyb2xsZXIiLCJtaWRkbGV3YXJlIiwiZGlzcGF0Y2giLCJuZXh0IiwiYWN0aW9uIiwiX2FjdGlvbiRlbmRwb2ludCIsInR5cGUiLCJoYW5kbGVGZXRjaCIsIm1ldGEiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJ1bmRlZmluZWQiLCJlbmRwb2ludCIsImdldE9wdGltaXN0aWNSZXNwb25zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImtleSIsIl9jb250cm9sbGVyJGdldFN0YXRlJCIsImVycm9yIiwiaGFuZGxlUmVjZWl2ZSIsImFzc2lnbiIsImNsZWFyQWxsIiwiayIsInNraXBMb2dnaW5nIiwiaW5pdCIsImNsZWFudXBEYXRlIiwiY2xlYW51cCIsIkRhdGUiLCJub3ciLCJhbGxTZXR0bGVkIiwiZmV0Y2hlcyIsInZhbHVlcyIsImxlbmd0aCIsImNsZWFyIiwiY2F0Y2giLCJnZXRMYXN0UmVzZXQiLCJsYXN0UmVzZXQiLCJ2YWx1ZU9mIiwiSW5maW5pdHkiLCJmZXRjaCIsInBheWxvYWQiLCJ0aHJvdHRsZSIsInJlamVjdCIsImNyZWF0ZWRBdCIsImdldFRpbWUiLCJkZWZlcmVkRmV0Y2giLCJwcm9taXNlIiwicmVzb2x2ZVByb21pc2UiLCJkYXRhIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiaXNOYU4iLCJjb25zb2xlIiwiYXJncyIsInJlc3BvbnNlIiwiX2FjdGlvbiRtZXRhJG9wdGlvbnMkIiwiX2FjdGlvbiRtZXRhJG9wdGlvbnMiLCJvcHRpb25zIiwiX2FjdGlvbiRtZXRhJG9wdGlvbnMkMiIsIl9hY3Rpb24kbWV0YSRvcHRpb25zMiIsInByb21pc2VIYW5kbGVyIiwiZ2V0TWlkZGxld2FyZSIsInRpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFuYWdlci9OZXR3b3JrTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTRVRfVFlQRSwgRkVUQ0hfVFlQRSwgUkVTRVRfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCBDb250cm9sbGVyIGZyb20gJy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBpbml0aWFsU3RhdGUgfSBmcm9tICcuLi9pbnRlcm5hbC5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVSZWNlaXZlLFxuICBjcmVhdGVSZWNlaXZlRXJyb3IsXG59IGZyb20gJy4uL3N0YXRlL2xlZ2FjeS1hY3Rpb25zL2luZGV4LmpzJztcbmltcG9ydCBSSUMgZnJvbSAnLi4vc3RhdGUvUklDLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRmV0Y2hBY3Rpb24sXG4gIFJlY2VpdmVBY3Rpb24sXG4gIE1hbmFnZXIsXG4gIEFjdGlvblR5cGVzLFxuICBNaWRkbGV3YXJlQVBJLFxuICBNaWRkbGV3YXJlLFxuICBTdGF0ZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgUmVzZXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZSA9ICdSZXNldEVycm9yJztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignQWJvcnRlZCBkdWUgdG8gUkVTRVQnKTtcbiAgfVxufVxuXG4vKiogSGFuZGxlcyBhbGwgYXN5bmMgbmV0d29yayBkaXNwYXRjaGVzXG4gKlxuICogRGVkdXBlcyBjb25jdXJyZW50IHJlcXVlc3RzIGJ5IGtlZXBpbmcgdHJhY2sgb2YgYWxsIGZldGNoZXMgaW4gZmxpZ2h0XG4gKiBhbmQgcmV0dXJuaW5nIGV4aXN0aW5nIHByb21pc2VzIGZvciByZXF1ZXN0cyBhbHJlYWR5IGluIGZsaWdodC5cbiAqXG4gKiBJbnRlcmZhY2VzIHdpdGggc3RvcmUgdmlhIGEgcmVkdXgtY29tcGF0aWJsZSBtaWRkbGV3YXJlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvTmV0d29ya01hbmFnZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01hbmFnZXIgaW1wbGVtZW50cyBNYW5hZ2VyIHtcbiAgcHJvdGVjdGVkIGZldGNoZWQ6IHsgW2s6IHN0cmluZ106IFByb21pc2U8YW55PiB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcHJvdGVjdGVkIHJlc29sdmVyczogeyBbazogc3RyaW5nXTogKHZhbHVlPzogYW55KSA9PiB2b2lkIH0gPSB7fTtcbiAgcHJvdGVjdGVkIHJlamVjdG9yczogeyBbazogc3RyaW5nXTogKHZhbHVlPzogYW55KSA9PiB2b2lkIH0gPSB7fTtcbiAgcHJvdGVjdGVkIGZldGNoZWRBdDogeyBbazogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgZGVjbGFyZSByZWFkb25seSBkYXRhRXhwaXJ5TGVuZ3RoOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgZXJyb3JFeHBpcnlMZW5ndGg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgbWlkZGxld2FyZTogTWlkZGxld2FyZTtcbiAgcHJvdGVjdGVkIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPiA9ICgpID0+IGluaXRpYWxTdGF0ZTtcbiAgcHJvdGVjdGVkIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICBkZWNsYXJlIGNsZWFudXBEYXRlPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGFFeHBpcnlMZW5ndGggPSA2MDAwMCwgZXJyb3JFeHBpcnlMZW5ndGggPSAxMDAwKSB7XG4gICAgdGhpcy5kYXRhRXhwaXJ5TGVuZ3RoID0gZGF0YUV4cGlyeUxlbmd0aDtcbiAgICB0aGlzLmVycm9yRXhwaXJ5TGVuZ3RoID0gZXJyb3JFeHBpcnlMZW5ndGg7XG5cbiAgICB0aGlzLm1pZGRsZXdhcmUgPSA8QyBleHRlbmRzIE1pZGRsZXdhcmVBUEk+KHtcbiAgICAgIGRpc3BhdGNoLFxuICAgICAgZ2V0U3RhdGUsXG4gICAgICBjb250cm9sbGVyLFxuICAgIH06IEMpID0+IHtcbiAgICAgIHRoaXMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbiAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgICByZXR1cm4gKG5leHQ6IENbJ2Rpc3BhdGNoJ10pOiBDWydkaXNwYXRjaCddID0+XG4gICAgICAgIChhY3Rpb24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZFVENIX1RZUEU6XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmV0Y2goYWN0aW9uLCBkaXNwYXRjaCwgY29udHJvbGxlcik7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSB0aGF0IGNhdXNlcyBhbnkgc3RhdGUgY2hhbmdlXG4gICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGludGVyY2VwdCBvdGhlciBmZXRjaGVzIGFzIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciByZWR1Y2VycyBkdXJpbmdcbiAgICAgICAgICAgICAgLy8gcmVuZGVyIC0gc28gd2UgbmVlZCB0byBzdG9wICdyZWFkb25seScgZmV0Y2hlcyB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHJlbmRlclxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYWN0aW9uLm1ldGEub3B0aW1pc3RpY1Jlc3BvbnNlICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBhY3Rpb24uZW5kcG9pbnQ/LmdldE9wdGltaXN0aWNSZXNwb25zZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgY2FzZSBTRVRfVFlQRTpcbiAgICAgICAgICAgICAgLy8gb25seSByZWNlaXZlIGFmdGVyIG5ldyBzdGF0ZSBpcyBjb21wdXRlZFxuICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ubWV0YS5rZXkgaW4gdGhpcy5mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAvLyBOb3RlOiBtZXRhICptdXN0KiBiZSBzZXQgYnkgcmVkdWNlciBzbyB0aGlzIHNob3VsZCBiZSBzYWZlXG4gICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0U3RhdGUoKS5tZXRhW2FjdGlvbi5tZXRhLmtleV0/LmVycm9yO1xuICAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyBlcnJvcnMgcmVzdWx0IGluIHN0YXRlIG1ldGEgaGF2aW5nIGVycm9yLCBzbyB3ZSBzaG91bGQgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdXNlIG9ubHkgbmV3IGFjdGlvbiB0eXBlc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlY2VpdmUoY3JlYXRlUmVjZWl2ZUVycm9yKGVycm9yLCBhY3Rpb24ubWV0YSkpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWNlaXZlKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgUkVTRVRfVFlQRToge1xuICAgICAgICAgICAgICBjb25zdCByZWplY3RvcnMgPSB7IC4uLnRoaXMucmVqZWN0b3JzIH07XG5cbiAgICAgICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGNvdWxkIGJlIGV4dGVybmFsIGxpc3RlbmVycyB0byB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgY29tbWl0IHNvIG91ciBvd24gcmVqZWN0b3Iga25vd3Mgbm90IHRvIGRpc3BhdGNoIGFuIGVycm9yIGJhc2VkIG9uIHRoaXNcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gcmVqZWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgICByZWplY3RvcnNba10obmV3IFJlc2V0RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG4gIH1cblxuICAvKiogVXNlZCBieSBEZXZ0b29sc01hbmFnZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gbG9nIGFuIGFjdGlvbiAqL1xuICBza2lwTG9nZ2luZyhhY3Rpb246IEFjdGlvblR5cGVzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gYWN0aW9uLnR5cGUgPT09IEZFVENIX1RZUEUgJiYgYWN0aW9uLm1ldGEua2V5IGluIHRoaXMuZmV0Y2hlZDtcbiAgfVxuXG4gIC8qKiBPbiBtb3VudCAqL1xuICBpbml0KCkge1xuICAgIGRlbGV0ZSB0aGlzLmNsZWFudXBEYXRlO1xuICB9XG5cbiAgLyoqIEVuc3VyZXMgYWxsIHByb21pc2VzIGFyZSBjb21wbGV0ZWQgYnkgcmVqZWN0aW5nIHJlbWFpbmluZy4gKi9cbiAgY2xlYW51cCgpIHtcbiAgICAvLyBlbnN1cmUgbm8gZGlzcGF0Y2hlcyBhZnRlciB1bm1vdW50XG4gICAgLy8gdGhpcyBtdXN0IGJlIHJldmVyc2libGUgKGRvbmUgaW4gaW5pdCkgc28gdXNlRWZmZWN0KCkgcmVtYWlucyBzeW1tZXRyaWNcbiAgICB0aGlzLmNsZWFudXBEYXRlID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIGFsbFNldHRsZWQoKSB7XG4gICAgY29uc3QgZmV0Y2hlcyA9IE9iamVjdC52YWx1ZXModGhpcy5mZXRjaGVkKTtcbiAgICBpZiAoZmV0Y2hlcy5sZW5ndGgpIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoZmV0Y2hlcyk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHByb21pc2Ugc3RhdGUgKi9cbiAgcHJvdGVjdGVkIGNsZWFyQWxsKCkge1xuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLnJlamVjdG9ycykge1xuICAgICAgdGhpcy5jbGVhcihrKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2xlYXIgcHJvbWlzZSBzdGF0ZSBmb3IgYSBnaXZlbiBrZXkgKi9cbiAgcHJvdGVjdGVkIGNsZWFyKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5mZXRjaGVkW2tleV0uY2F0Y2goKCkgPT4ge30pO1xuICAgIGRlbGV0ZSB0aGlzLnJlc29sdmVyc1trZXldO1xuICAgIGRlbGV0ZSB0aGlzLnJlamVjdG9yc1trZXldO1xuICAgIGRlbGV0ZSB0aGlzLmZldGNoZWRba2V5XTtcbiAgICBkZWxldGUgdGhpcy5mZXRjaGVkQXRba2V5XTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMYXN0UmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuY2xlYW51cERhdGUpIHJldHVybiB0aGlzLmNsZWFudXBEYXRlO1xuICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuY29udHJvbGxlci5nZXRTdGF0ZSgpLmxhc3RSZXNldDtcbiAgICBpZiAobGFzdFJlc2V0IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGxhc3RSZXNldC52YWx1ZU9mKCk7XG4gICAgaWYgKHR5cGVvZiBsYXN0UmVzZXQgIT09ICdudW1iZXInKSByZXR1cm4gLUluZmluaXR5O1xuICAgIHJldHVybiBsYXN0UmVzZXQ7XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gbWlkZGxld2FyZSBpbnRlcmNlcHRzICdyZXN0LWhvb2tzL2ZldGNoJyBhY3Rpb24uXG4gICAqXG4gICAqIFdpbGwgdGhlbiBzdGFydCBhIHByb21pc2UgZm9yIGEga2V5IGFuZCBwb3RlbnRpYWxseSBzdGFydCB0aGUgbmV0d29ya1xuICAgKiBmZXRjaC5cbiAgICpcbiAgICogVXNlcyB0aHJvdHRsZSBvbmx5IHdoZW4gaW5zdHJ1Y3RlZCBieSBhY3Rpb24gbWV0YS4gVGhpcyBpcyB2YWx1YWJsZVxuICAgKiBmb3IgZW5zdXJlcyBtdXRhdGlvbiByZXF1ZXN0cyBhbHdheXMgZ28gdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVGZXRjaChcbiAgICBhY3Rpb246IEZldGNoQWN0aW9uLFxuICAgIGRpc3BhdGNoOiAoYWN0aW9uOiBhbnkpID0+IFByb21pc2U8dm9pZD4sXG4gICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgKSB7XG4gICAgY29uc3QgZmV0Y2ggPSBhY3Rpb24ucGF5bG9hZDtcbiAgICBjb25zdCB7IGtleSwgdGhyb3R0bGUsIHJlc29sdmUsIHJlamVjdCB9ID0gYWN0aW9uLm1ldGE7XG4gICAgLy8gVE9ETyhicmVha2luZyk6IHJlbW92ZSBzdXBwb3J0IGZvciBEYXRlIHR5cGUgaW4gJ1JlY2VpdmUnIGFjdGlvblxuICAgIGNvbnN0IGNyZWF0ZWRBdCA9XG4gICAgICB0eXBlb2YgYWN0aW9uLm1ldGEuY3JlYXRlZEF0ICE9PSAnbnVtYmVyJ1xuICAgICAgICA/IGFjdGlvbi5tZXRhLmNyZWF0ZWRBdC5nZXRUaW1lKClcbiAgICAgICAgOiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQ7XG5cbiAgICBjb25zdCBkZWZlcmVkRmV0Y2ggPSAoKSA9PiB7XG4gICAgICBsZXQgcHJvbWlzZSA9IGZldGNoKCk7XG4gICAgICBjb25zdCByZXNvbHZlUHJvbWlzZSA9IChcbiAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QgfCBudWxsPixcbiAgICAgICkgPT5cbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgIC8vIHNjaGVkdWxlIG5vbi10aHJvdHRsZWQgcmVzb2x1dGlvbnMgaW4gYSBtaWNyb3Rhc2sgYmVmb3JlIHJlY2VpdmVcbiAgICAgIC8vIHRoaXMgZW5hYmxlcyB1c2VycyBhd2FpdGluZyB0aGVpciBmZXRjaCB0byB0cmlnZ2VyIGFueSByZWFjdCB1cGRhdGVzIG5lZWRlZCB0byBkZWFsXG4gICAgICAvLyB3aXRoIHVwY29taW5nIGNoYW5nZXMgYmVjYXVzZSBvZiB0aGUgZmV0Y2ggKGZvciBpbnN0YW5jZSBhdm9pZGluZyBzdXNwZW5zZSBpZiBzb21ldGhpbmcgaXMgZGVsZXRlZClcbiAgICAgIGlmICghdGhyb3R0bGUgJiYgYWN0aW9uLmVuZHBvaW50KSB7XG4gICAgICAgIHByb21pc2UgPSByZXNvbHZlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIHByb21pc2UgPSBwcm9taXNlXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIGxldCBsYXN0UmVzZXQgPSB0aGlzLmdldExhc3RSZXNldCgpO1xuXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc05hTihsYXN0UmVzZXQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnc3RhdGUubGFzdFJlc2V0IGlzIE5hTi4gT25seSBwb3NpdGl2ZSB0aW1lc3RhbXBzIGFyZSB2YWxpZC4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxhc3RSZXNldCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZG9uJ3QgdXBkYXRlIHN0YXRlIHdpdGggcHJvbWlzZXMgc3RhcnRlZCBiZWZvcmUgbGFzdCBjbGVhclxuICAgICAgICAgIGlmIChjcmVhdGVkQXQgPj0gbGFzdFJlc2V0KSB7XG4gICAgICAgICAgICAvLyB3ZSBzdGlsbCBjaGVjayBmb3IgY29udHJvbGxlciBpbiBjYXNlIHNvbWVvbmUgZGlkbid0IGhhdmUgdHlwZSBwcm90ZWN0aW9uIHNpbmNlIHRoaXMgZGlkbid0IGFsd2F5cyBleGlzdFxuICAgICAgICAgICAgaWYgKGFjdGlvbi5lbmRwb2ludCAmJiB0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlc29sdmUoYWN0aW9uLmVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgYXJnczogYWN0aW9uLm1ldGEuYXJncyBhcyBhbnksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGRhdGEsXG4gICAgICAgICAgICAgICAgZmV0Y2hlZEF0OiBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVE9ETyhicmVha2luZyk6IGlzIHRoaXMgYnJhbmNoIHN0aWxsIHBvc3NpYmxlPyByZW1vdmUgaW4gbmV4dCBtYWpvciB1cGRhdGVcbiAgICAgICAgICAgICAgLy8gZG9lcyB0aGlzIHRocm93IGlmIHRoZSByZWR1Y2VyIGZhaWxzPyAtIG5vIGJlY2F1c2UgcmVkdWNlciBpcyB3cmFwcGVkIGluIHRyeS9jYXRjaFxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgY3JlYXRlUmVjZWl2ZShkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAuLi5hY3Rpb24ubWV0YSxcbiAgICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgICAgZGF0YUV4cGlyeUxlbmd0aDpcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm1ldGEub3B0aW9ucz8uZGF0YUV4cGlyeUxlbmd0aCA/P1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFFeHBpcnlMZW5ndGgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuZ2V0TGFzdFJlc2V0KCk7XG4gICAgICAgICAgLy8gZG9uJ3QgdXBkYXRlIHN0YXRlIHdpdGggcHJvbWlzZXMgc3RhcnRlZCBiZWZvcmUgbGFzdCBjbGVhclxuICAgICAgICAgIGlmIChjcmVhdGVkQXQgPj0gbGFzdFJlc2V0KSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmVuZHBvaW50ICYmIHRoaXMuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIucmVzb2x2ZShhY3Rpb24uZW5kcG9pbnQsIHtcbiAgICAgICAgICAgICAgICBhcmdzOiBhY3Rpb24ubWV0YS5hcmdzIGFzIGFueSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogZXJyb3IsXG4gICAgICAgICAgICAgICAgZmV0Y2hlZEF0OiBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZVJlY2VpdmVFcnJvcihlcnJvciwge1xuICAgICAgICAgICAgICAgICAgLi4uYWN0aW9uLm1ldGEsXG4gICAgICAgICAgICAgICAgICBlcnJvckV4cGlyeUxlbmd0aDpcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm1ldGEub3B0aW9ucz8uZXJyb3JFeHBpcnlMZW5ndGggPz9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckV4cGlyeUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICAvLyBsZWdhY3kgYmVoYXZpb3Igc2NoZWR1bGVzIHJlc29sdXRpb24gYWZ0ZXIgZGlzcGF0Y2hcbiAgICAgIGlmICghdGhyb3R0bGUgJiYgIWFjdGlvbi5lbmRwb2ludCkge1xuICAgICAgICBwcm9taXNlID0gcmVzb2x2ZVByb21pc2UocHJvbWlzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgaWYgKHRocm90dGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy50aHJvdHRsZShrZXksIGRlZmVyZWRGZXRjaCwgY3JlYXRlZEF0KVxuICAgICAgICAudGhlbihkYXRhID0+IHJlc29sdmUoZGF0YSkpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlZmVyZWRGZXRjaCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gbWlkZGxld2FyZSBpbnRlcmNlcHRzIGEgcmVjZWl2ZSBhY3Rpb24uXG4gICAqXG4gICAqIFdpbGwgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhc3NvY2lhdGVkIHdpdGggcmVjZWl2ZSBrZXkuXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlUmVjZWl2ZShhY3Rpb246IFJlY2VpdmVBY3Rpb24pIHtcbiAgICAvLyB0aGlzIGNhbiBzdGlsbCB0dXJuIG91dCB0byBiZSB1bnRydWUgc2luY2UgdGhpcyBpcyBhc3luY1xuICAgIGlmIChhY3Rpb24ubWV0YS5rZXkgaW4gdGhpcy5mZXRjaGVkKSB7XG4gICAgICBsZXQgcHJvbWlzZUhhbmRsZXI6ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcbiAgICAgIGlmIChhY3Rpb24uZXJyb3IpIHtcbiAgICAgICAgcHJvbWlzZUhhbmRsZXIgPSB0aGlzLnJlamVjdG9yc1thY3Rpb24ubWV0YS5rZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZUhhbmRsZXIgPSB0aGlzLnJlc29sdmVyc1thY3Rpb24ubWV0YS5rZXldO1xuICAgICAgfVxuICAgICAgcHJvbWlzZUhhbmRsZXIoYWN0aW9uLnBheWxvYWQpO1xuICAgICAgLy8gc2luY2Ugd2UncmUgcmVzb2x2ZWQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGlzIHByb21pc2VcbiAgICAgIHRoaXMuY2xlYXIoYWN0aW9uLm1ldGEua2V5KTtcbiAgICB9XG4gIH1cblxuICAvKiogQXR0YWNoZXMgTmV0d29ya01hbmFnZXIgdG8gc3RvcmVcbiAgICpcbiAgICogSW50ZXJjZXB0cyAncmVzdC1ob29rcy9mZXRjaCcgYWN0aW9ucyB0byBzdGFydCByZXF1ZXN0cy5cbiAgICpcbiAgICogUmVzb2x2ZS9yZWplY3RzIGEgcmVxdWVzdCB3aGVuIG1hdGNoaW5nICdyZXN0LWhvb2tzL3JlY2VpdmUnIGV2ZW50XG4gICAqIGlzIHNlZW4uXG4gICAqL1xuICBnZXRNaWRkbGV3YXJlKCkge1xuICAgIHJldHVybiB0aGlzLm1pZGRsZXdhcmU7XG4gIH1cblxuICAvKiogRW5zdXJlcyBvbmx5IG9uZSByZXF1ZXN0IGZvciBhIGdpdmVuIGtleSBpcyBpbiBmbGlnaHQgYXQgYW55IHRpbWVcbiAgICpcbiAgICogVXNlcyBrZXkgdG8gZWl0aGVyIHJldHJpZXZlIGluLWZsaWdodCBwcm9taXNlLCBvciBpZiBub3RcbiAgICogY3JlYXRlIGEgbmV3IHByb21pc2UgYW5kIGNhbGwgZmV0Y2guXG4gICAqXG4gICAqIE5vdGU6IFRoZSBuZXcgcHJvbWlzZSBpcyBub3QgYWN0dWFsbHkgdGllZCB0byBmZXRjaCBhdCBhbGwsXG4gICAqIGJ1dCBpcyByZXNvbHZlZCB3aGVuIHRoZSBleHBlY3RlZCAncmVjaWV2ZScgYWN0aW9uIGlzIHByb2Nlc3NlZC5cbiAgICogVGhpcyBlbnN1cmVzIHByb21pc2VzIGFyZSByZXNvbHZlZCBvbmx5IG9uY2UgdGhlaXIgZGF0YSBpcyBwcm9jZXNzZWRcbiAgICogYnkgdGhlIHJlZHVjZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgdGhyb3R0bGUoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZmV0Y2g6ICgpID0+IFByb21pc2U8YW55PixcbiAgICBjcmVhdGVkQXQ6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc3QgbGFzdFJlc2V0ID0gdGhpcy5nZXRMYXN0UmVzZXQoKTtcbiAgICAvLyB3ZSdyZSBhbHJlYWR5IGZldGNoaW5nIHNvIHJldXNlIHRoZSBwcm9taXNlXG4gICAgLy8gZmV0Y2hlcyBhZnRlciByZXNldCBkbyBub3QgY291bnRcbiAgICBpZiAoa2V5IGluIHRoaXMuZmV0Y2hlZCAmJiB0aGlzLmZldGNoZWRBdFtrZXldID4gbGFzdFJlc2V0KSB7XG4gICAgICByZXR1cm4gdGhpcy5mZXRjaGVkW2tleV07XG4gICAgfVxuXG4gICAgdGhpcy5mZXRjaGVkW2tleV0gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVyc1trZXldID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMucmVqZWN0b3JzW2tleV0gPSByZWplY3Q7XG4gICAgfSk7XG4gICAgdGhpcy5mZXRjaGVkQXRba2V5XSA9IGNyZWF0ZWRBdDtcblxuICAgIC8vIHNpbmNlIG91ciByZWFsIHByb21pc2UgaXMgcmVzb2x2ZWQgdmlhIHRoZSB3cmFwUmVkdWNlcigpLFxuICAgIC8vIHdlIHNob3VsZCBqdXN0IHN0b3AgYWxsIGVycm9ycyBoZXJlLlxuICAgIC8vIFRPRE86IGRlY291cGxlIHRoaXMgZnJvbSB1c2VGZXRjaGVyKCkgKHRoYXQncyB3aGF0J3MgZGlzcGF0Y2hpbmcgdGhlIGVycm9yIHRoZSByZXNvbHZlcyBpbiBoZXJlKVxuICAgIFJJQyhcbiAgICAgICgpID0+IHtcbiAgICAgICAgZmV0Y2goKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgIH0sXG4gICAgICB7IHRpbWVvdXQ6IDUwMCB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5mZXRjaGVkW2tleV07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsUUFBUSxtQkFBbUI7QUFDcEUsT0FBT0MsVUFBVSxNQUFNLDZCQUE2QjtBQUNwRCxTQUFTQyxZQUFZLFFBQVEsZ0JBQWdCO0FBQzdDLFNBQ0VDLGFBQWEsRUFDYkMsa0JBQWtCLFFBQ2Isa0NBQWtDO0FBQ3pDLE9BQU9DLEdBQUcsTUFBTSxpQkFBaUI7QUFXakMsT0FBTyxNQUFNQyxVQUFVLFNBQVNDLEtBQUssQ0FBQztFQUdwQ0MsV0FBV0EsQ0FBQSxFQUFHO0lBQ1osS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQUMsS0FIaENDLElBQUksR0FBRyxZQUFZO0VBSW5CO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFB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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRVRfVFlQRSIsIkZFVENIX1RZUEUiLCJSRVNFVF9UWVBFIiwiQ29udHJvbGxlciIsImluaXRpYWxTdGF0ZSIsImNyZWF0ZVJlY2VpdmUiLCJjcmVhdGVSZWNlaXZlRXJyb3IiLCJSSUMiLCJSZXNldEVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJOZXR3b3JrTWFuYWdlciIsImRhdGFFeHBpcnlMZW5ndGgiLCJlcnJvckV4cGlyeUxlbmd0aCIsImZldGNoZWQiLCJPYmplY3QiLCJjcmVhdGUiLCJyZXNvbHZlcnMiLCJyZWplY3RvcnMiLCJmZXRjaGVkQXQiLCJnZXRTdGF0ZSIsImNvbnRyb2xsZXIiLCJtaWRkbGV3YXJlIiwiZGlzcGF0Y2giLCJuZXh0IiwiYWN0aW9uIiwiX2FjdGlvbiRlbmRwb2ludCIsInR5cGUiLCJoYW5kbGVGZXRjaCIsIm1ldGEiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJ1bmRlZmluZWQiLCJlbmRwb2ludCIsImdldE9wdGltaXN0aWNSZXNwb25zZSIsInNpZGVFZmZlY3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJrZXkiLCJfY29udHJvbGxlciRnZXRTdGF0ZSQiLCJlcnJvciIsImhhbmRsZVJlY2VpdmUiLCJhc3NpZ24iLCJjbGVhckFsbCIsImsiLCJza2lwTG9nZ2luZyIsImluaXQiLCJjbGVhbnVwRGF0ZSIsImNsZWFudXAiLCJEYXRlIiwibm93IiwiYWxsU2V0dGxlZCIsImZldGNoZXMiLCJ2YWx1ZXMiLCJsZW5ndGgiLCJjbGVhciIsImNhdGNoIiwiZ2V0TGFzdFJlc2V0IiwibGFzdFJlc2V0IiwidmFsdWVPZiIsIkluZmluaXR5IiwiZmV0Y2giLCJwYXlsb2FkIiwidGhyb3R0bGUiLCJyZWplY3QiLCJjcmVhdGVkQXQiLCJnZXRUaW1lIiwiZGVmZXJlZEZldGNoIiwicHJvbWlzZSIsInJlc29sdmVQcm9taXNlIiwiZGF0YSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImlzTmFOIiwiY29uc29sZSIsImFyZ3MiLCJyZXNwb25zZSIsIl9hY3Rpb24kbWV0YSRvcHRpb25zJCIsIl9hY3Rpb24kbWV0YSRvcHRpb25zIiwib3B0aW9ucyIsIl9hY3Rpb24kbWV0YSRvcHRpb25zJDIiLCJfYWN0aW9uJG1ldGEkb3B0aW9uczIiLCJwcm9taXNlSGFuZGxlciIsImdldE1pZGRsZXdhcmUiLCJ0aW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hbmFnZXIvTmV0d29ya01hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0VUX1RZUEUsIEZFVENIX1RZUEUsIFJFU0VUX1RZUEUgfSBmcm9tICcuLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tICcuLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi4vaW50ZXJuYWwuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlUmVjZWl2ZSxcbiAgY3JlYXRlUmVjZWl2ZUVycm9yLFxufSBmcm9tICcuLi9zdGF0ZS9sZWdhY3ktYWN0aW9ucy9pbmRleC5qcyc7XG5pbXBvcnQgUklDIGZyb20gJy4uL3N0YXRlL1JJQy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZldGNoQWN0aW9uLFxuICBSZWNlaXZlQWN0aW9uLFxuICBNYW5hZ2VyLFxuICBBY3Rpb25UeXBlcyxcbiAgTWlkZGxld2FyZUFQSSxcbiAgTWlkZGxld2FyZSxcbiAgU3RhdGUsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIFJlc2V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG5hbWUgPSAnUmVzZXRFcnJvcic7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0Fib3J0ZWQgZHVlIHRvIFJFU0VUJyk7XG4gIH1cbn1cblxuLyoqIEhhbmRsZXMgYWxsIGFzeW5jIG5ldHdvcmsgZGlzcGF0Y2hlc1xuICpcbiAqIERlZHVwZXMgY29uY3VycmVudCByZXF1ZXN0cyBieSBrZWVwaW5nIHRyYWNrIG9mIGFsbCBmZXRjaGVzIGluIGZsaWdodFxuICogYW5kIHJldHVybmluZyBleGlzdGluZyBwcm9taXNlcyBmb3IgcmVxdWVzdHMgYWxyZWFkeSBpbiBmbGlnaHQuXG4gKlxuICogSW50ZXJmYWNlcyB3aXRoIHN0b3JlIHZpYSBhIHJlZHV4LWNvbXBhdGlibGUgbWlkZGxld2FyZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL05ldHdvcmtNYW5hZ2VyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNYW5hZ2VyIGltcGxlbWVudHMgTWFuYWdlciB7XG4gIHByb3RlY3RlZCBmZXRjaGVkOiB7IFtrOiBzdHJpbmddOiBQcm9taXNlPGFueT4gfSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHByb3RlY3RlZCByZXNvbHZlcnM6IHsgW2s6IHN0cmluZ106ICh2YWx1ZT86IGFueSkgPT4gdm9pZCB9ID0ge307XG4gIHByb3RlY3RlZCByZWplY3RvcnM6IHsgW2s6IHN0cmluZ106ICh2YWx1ZT86IGFueSkgPT4gdm9pZCB9ID0ge307XG4gIHByb3RlY3RlZCBmZXRjaGVkQXQ6IHsgW2s6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIGRlY2xhcmUgcmVhZG9ubHkgZGF0YUV4cGlyeUxlbmd0aDogbnVtYmVyO1xuICBkZWNsYXJlIHJlYWRvbmx5IGVycm9yRXhwaXJ5TGVuZ3RoOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkZWNsYXJlIG1pZGRsZXdhcmU6IE1pZGRsZXdhcmU7XG4gIHByb3RlY3RlZCBnZXRTdGF0ZTogKCkgPT4gU3RhdGU8dW5rbm93bj4gPSAoKSA9PiBpbml0aWFsU3RhdGU7XG4gIHByb3RlY3RlZCBjb250cm9sbGVyOiBDb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgZGVjbGFyZSBjbGVhbnVwRGF0ZT86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkYXRhRXhwaXJ5TGVuZ3RoID0gNjAwMDAsIGVycm9yRXhwaXJ5TGVuZ3RoID0gMTAwMCkge1xuICAgIHRoaXMuZGF0YUV4cGlyeUxlbmd0aCA9IGRhdGFFeHBpcnlMZW5ndGg7XG4gICAgdGhpcy5lcnJvckV4cGlyeUxlbmd0aCA9IGVycm9yRXhwaXJ5TGVuZ3RoO1xuXG4gICAgdGhpcy5taWRkbGV3YXJlID0gPEMgZXh0ZW5kcyBNaWRkbGV3YXJlQVBJPih7XG4gICAgICBkaXNwYXRjaCxcbiAgICAgIGdldFN0YXRlLFxuICAgICAgY29udHJvbGxlcixcbiAgICB9OiBDKSA9PiB7XG4gICAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgICAgcmV0dXJuIChuZXh0OiBDWydkaXNwYXRjaCddKTogQ1snZGlzcGF0Y2gnXSA9PlxuICAgICAgICAoYWN0aW9uKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGRVRDSF9UWVBFOlxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZldGNoKGFjdGlvbiwgZGlzcGF0Y2gsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGNhc2UgdGhhdCBjYXVzZXMgYW55IHN0YXRlIGNoYW5nZVxuICAgICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBpbnRlcmNlcHQgb3RoZXIgZmV0Y2hlcyBhcyB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgcmVkdWNlcnMgZHVyaW5nXG4gICAgICAgICAgICAgIC8vIHJlbmRlciAtIHNvIHdlIG5lZWQgdG8gc3RvcCAncmVhZG9ubHknIGZldGNoZXMgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiByZW5kZXJcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGltaXN0aWNSZXNwb25zZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgKGFjdGlvbi5lbmRwb2ludD8uZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgIGFjdGlvbi5lbmRwb2ludC5zaWRlRWZmZWN0KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIGNhc2UgU0VUX1RZUEU6XG4gICAgICAgICAgICAgIC8vIG9ubHkgcmVjZWl2ZSBhZnRlciBuZXcgc3RhdGUgaXMgY29tcHV0ZWRcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLm1ldGEua2V5IGluIHRoaXMuZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgLy8gTm90ZTogbWV0YSAqbXVzdCogYmUgc2V0IGJ5IHJlZHVjZXIgc28gdGhpcyBzaG91bGQgYmUgc2FmZVxuICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmdldFN0YXRlKCkubWV0YVthY3Rpb24ubWV0YS5rZXldPy5lcnJvcjtcbiAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcgZXJyb3JzIHJlc3VsdCBpbiBzdGF0ZSBtZXRhIGhhdmluZyBlcnJvciwgc28gd2Ugc2hvdWxkIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBvbmx5IG5ldyBhY3Rpb24gdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWNlaXZlKGNyZWF0ZVJlY2VpdmVFcnJvcihlcnJvciwgYWN0aW9uLm1ldGEpKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjZWl2ZShhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFJFU0VUX1RZUEU6IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVqZWN0b3JzID0geyAuLi50aGlzLnJlamVjdG9ycyB9O1xuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGwoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBjb3VsZCBiZSBleHRlcm5hbCBsaXN0ZW5lcnMgdG8gdGhlIHByb21pc2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzIG11c3QgaGFwcGVuIGFmdGVyIGNvbW1pdCBzbyBvdXIgb3duIHJlamVjdG9yIGtub3dzIG5vdCB0byBkaXNwYXRjaCBhbiBlcnJvciBiYXNlZCBvbiB0aGlzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIGluIHJlamVjdG9ycykge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0b3JzW2tdKG5ldyBSZXNldEVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIFVzZWQgYnkgRGV2dG9vbHNNYW5hZ2VyIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGxvZyBhbiBhY3Rpb24gKi9cbiAgc2tpcExvZ2dpbmcoYWN0aW9uOiBBY3Rpb25UeXBlcykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGFjdGlvbi50eXBlID09PSBGRVRDSF9UWVBFICYmIGFjdGlvbi5tZXRhLmtleSBpbiB0aGlzLmZldGNoZWQ7XG4gIH1cblxuICAvKiogT24gbW91bnQgKi9cbiAgaW5pdCgpIHtcbiAgICBkZWxldGUgdGhpcy5jbGVhbnVwRGF0ZTtcbiAgfVxuXG4gIC8qKiBFbnN1cmVzIGFsbCBwcm9taXNlcyBhcmUgY29tcGxldGVkIGJ5IHJlamVjdGluZyByZW1haW5pbmcuICovXG4gIGNsZWFudXAoKSB7XG4gICAgLy8gZW5zdXJlIG5vIGRpc3BhdGNoZXMgYWZ0ZXIgdW5tb3VudFxuICAgIC8vIHRoaXMgbXVzdCBiZSByZXZlcnNpYmxlIChkb25lIGluIGluaXQpIHNvIHVzZUVmZmVjdCgpIHJlbWFpbnMgc3ltbWV0cmljXG4gICAgdGhpcy5jbGVhbnVwRGF0ZSA9IERhdGUubm93KCk7XG4gIH1cblxuICBhbGxTZXR0bGVkKCkge1xuICAgIGNvbnN0IGZldGNoZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmV0Y2hlZCk7XG4gICAgaWYgKGZldGNoZXMubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGZldGNoZXMpO1xuICB9XG5cbiAgLyoqIENsZWFyIGFsbCBwcm9taXNlIHN0YXRlICovXG4gIHByb3RlY3RlZCBjbGVhckFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5yZWplY3RvcnMpIHtcbiAgICAgIHRoaXMuY2xlYXIoayk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsZWFyIHByb21pc2Ugc3RhdGUgZm9yIGEgZ2l2ZW4ga2V5ICovXG4gIHByb3RlY3RlZCBjbGVhcihrZXk6IHN0cmluZykge1xuICAgIHRoaXMuZmV0Y2hlZFtrZXldLmNhdGNoKCgpID0+IHt9KTtcbiAgICBkZWxldGUgdGhpcy5yZXNvbHZlcnNba2V5XTtcbiAgICBkZWxldGUgdGhpcy5yZWplY3RvcnNba2V5XTtcbiAgICBkZWxldGUgdGhpcy5mZXRjaGVkW2tleV07XG4gICAgZGVsZXRlIHRoaXMuZmV0Y2hlZEF0W2tleV07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGFzdFJlc2V0KCkge1xuICAgIGlmICh0aGlzLmNsZWFudXBEYXRlKSByZXR1cm4gdGhpcy5jbGVhbnVwRGF0ZTtcbiAgICBjb25zdCBsYXN0UmVzZXQgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0U3RhdGUoKS5sYXN0UmVzZXQ7XG4gICAgaWYgKGxhc3RSZXNldCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBsYXN0UmVzZXQudmFsdWVPZigpO1xuICAgIGlmICh0eXBlb2YgbGFzdFJlc2V0ICE9PSAnbnVtYmVyJykgcmV0dXJuIC1JbmZpbml0eTtcbiAgICByZXR1cm4gbGFzdFJlc2V0O1xuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIG1pZGRsZXdhcmUgaW50ZXJjZXB0cyAncmVzdC1ob29rcy9mZXRjaCcgYWN0aW9uLlxuICAgKlxuICAgKiBXaWxsIHRoZW4gc3RhcnQgYSBwcm9taXNlIGZvciBhIGtleSBhbmQgcG90ZW50aWFsbHkgc3RhcnQgdGhlIG5ldHdvcmtcbiAgICogZmV0Y2guXG4gICAqXG4gICAqIFVzZXMgdGhyb3R0bGUgb25seSB3aGVuIGluc3RydWN0ZWQgYnkgYWN0aW9uIG1ldGEuIFRoaXMgaXMgdmFsdWFibGVcbiAgICogZm9yIGVuc3VyZXMgbXV0YXRpb24gcmVxdWVzdHMgYWx3YXlzIGdvIHRocm91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlRmV0Y2goXG4gICAgYWN0aW9uOiBGZXRjaEFjdGlvbixcbiAgICBkaXNwYXRjaDogKGFjdGlvbjogYW55KSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICkge1xuICAgIGNvbnN0IGZldGNoID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgY29uc3QgeyBrZXksIHRocm90dGxlLCByZXNvbHZlLCByZWplY3QgfSA9IGFjdGlvbi5tZXRhO1xuICAgIC8vIFRPRE8oYnJlYWtpbmcpOiByZW1vdmUgc3VwcG9ydCBmb3IgRGF0ZSB0eXBlIGluICdSZWNlaXZlJyBhY3Rpb25cbiAgICBjb25zdCBjcmVhdGVkQXQgPVxuICAgICAgdHlwZW9mIGFjdGlvbi5tZXRhLmNyZWF0ZWRBdCAhPT0gJ251bWJlcidcbiAgICAgICAgPyBhY3Rpb24ubWV0YS5jcmVhdGVkQXQuZ2V0VGltZSgpXG4gICAgICAgIDogYWN0aW9uLm1ldGEuY3JlYXRlZEF0O1xuXG4gICAgY29uc3QgZGVmZXJlZEZldGNoID0gKCkgPT4ge1xuICAgICAgbGV0IHByb21pc2UgPSBmZXRjaCgpO1xuICAgICAgY29uc3QgcmVzb2x2ZVByb21pc2UgPSAoXG4gICAgICAgIHByb21pc2U6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0IHwgbnVsbD4sXG4gICAgICApID0+XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAvLyBzY2hlZHVsZSBub24tdGhyb3R0bGVkIHJlc29sdXRpb25zIGluIGEgbWljcm90YXNrIGJlZm9yZSByZWNlaXZlXG4gICAgICAvLyB0aGlzIGVuYWJsZXMgdXNlcnMgYXdhaXRpbmcgdGhlaXIgZmV0Y2ggdG8gdHJpZ2dlciBhbnkgcmVhY3QgdXBkYXRlcyBuZWVkZWQgdG8gZGVhbFxuICAgICAgLy8gd2l0aCB1cGNvbWluZyBjaGFuZ2VzIGJlY2F1c2Ugb2YgdGhlIGZldGNoIChmb3IgaW5zdGFuY2UgYXZvaWRpbmcgc3VzcGVuc2UgaWYgc29tZXRoaW5nIGlzIGRlbGV0ZWQpXG4gICAgICBpZiAoIXRocm90dGxlICYmIGFjdGlvbi5lbmRwb2ludCkge1xuICAgICAgICBwcm9taXNlID0gcmVzb2x2ZVByb21pc2UocHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBwcm9taXNlID0gcHJvbWlzZVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBsZXQgbGFzdFJlc2V0ID0gdGhpcy5nZXRMYXN0UmVzZXQoKTtcblxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNOYU4obGFzdFJlc2V0KSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ3N0YXRlLmxhc3RSZXNldCBpcyBOYU4uIE9ubHkgcG9zaXRpdmUgdGltZXN0YW1wcyBhcmUgdmFsaWQuJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsYXN0UmVzZXQgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSBzdGF0ZSB3aXRoIHByb21pc2VzIHN0YXJ0ZWQgYmVmb3JlIGxhc3QgY2xlYXJcbiAgICAgICAgICBpZiAoY3JlYXRlZEF0ID49IGxhc3RSZXNldCkge1xuICAgICAgICAgICAgLy8gd2Ugc3RpbGwgY2hlY2sgZm9yIGNvbnRyb2xsZXIgaW4gY2FzZSBzb21lb25lIGRpZG4ndCBoYXZlIHR5cGUgcHJvdGVjdGlvbiBzaW5jZSB0aGlzIGRpZG4ndCBhbHdheXMgZXhpc3RcbiAgICAgICAgICAgIGlmIChhY3Rpb24uZW5kcG9pbnQgJiYgdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5yZXNvbHZlKGFjdGlvbi5lbmRwb2ludCwge1xuICAgICAgICAgICAgICAgIGFyZ3M6IGFjdGlvbi5tZXRhLmFyZ3MgYXMgYW55LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8oYnJlYWtpbmcpOiBpcyB0aGlzIGJyYW5jaCBzdGlsbCBwb3NzaWJsZT8gcmVtb3ZlIGluIG5leHQgbWFqb3IgdXBkYXRlXG4gICAgICAgICAgICAgIC8vIGRvZXMgdGhpcyB0aHJvdyBpZiB0aGUgcmVkdWNlciBmYWlscz8gLSBubyBiZWNhdXNlIHJlZHVjZXIgaXMgd3JhcHBlZCBpbiB0cnkvY2F0Y2hcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZVJlY2VpdmUoZGF0YSwge1xuICAgICAgICAgICAgICAgICAgLi4uYWN0aW9uLm1ldGEsXG4gICAgICAgICAgICAgICAgICBmZXRjaGVkQXQ6IGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICAgIGRhdGFFeHBpcnlMZW5ndGg6XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGlvbnM/LmRhdGFFeHBpcnlMZW5ndGggPz9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRXhwaXJ5TGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zdCBsYXN0UmVzZXQgPSB0aGlzLmdldExhc3RSZXNldCgpO1xuICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSBzdGF0ZSB3aXRoIHByb21pc2VzIHN0YXJ0ZWQgYmVmb3JlIGxhc3QgY2xlYXJcbiAgICAgICAgICBpZiAoY3JlYXRlZEF0ID49IGxhc3RSZXNldCkge1xuICAgICAgICAgICAgaWYgKGFjdGlvbi5lbmRwb2ludCAmJiB0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlc29sdmUoYWN0aW9uLmVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgYXJnczogYWN0aW9uLm1ldGEuYXJncyBhcyBhbnksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGVycm9yLFxuICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBjcmVhdGVSZWNlaXZlRXJyb3IoZXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgIC4uLmFjdGlvbi5tZXRhLFxuICAgICAgICAgICAgICAgICAgZXJyb3JFeHBpcnlMZW5ndGg6XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGlvbnM/LmVycm9yRXhwaXJ5TGVuZ3RoID8/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JFeHBpcnlMZW5ndGgsXG4gICAgICAgICAgICAgICAgICBmZXRjaGVkQXQ6IGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgLy8gbGVnYWN5IGJlaGF2aW9yIHNjaGVkdWxlcyByZXNvbHV0aW9uIGFmdGVyIGRpc3BhdGNoXG4gICAgICBpZiAoIXRocm90dGxlICYmICFhY3Rpb24uZW5kcG9pbnQpIHtcbiAgICAgICAgcHJvbWlzZSA9IHJlc29sdmVQcm9taXNlKHByb21pc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGlmICh0aHJvdHRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGhyb3R0bGUoa2V5LCBkZWZlcmVkRmV0Y2gsIGNyZWF0ZWRBdClcbiAgICAgICAgLnRoZW4oZGF0YSA9PiByZXNvbHZlKGRhdGEpKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWZlcmVkRmV0Y2goKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIG1pZGRsZXdhcmUgaW50ZXJjZXB0cyBhIHJlY2VpdmUgYWN0aW9uLlxuICAgKlxuICAgKiBXaWxsIHJlc29sdmUgdGhlIHByb21pc2UgYXNzb2NpYXRlZCB3aXRoIHJlY2VpdmUga2V5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZVJlY2VpdmUoYWN0aW9uOiBSZWNlaXZlQWN0aW9uKSB7XG4gICAgLy8gdGhpcyBjYW4gc3RpbGwgdHVybiBvdXQgdG8gYmUgdW50cnVlIHNpbmNlIHRoaXMgaXMgYXN5bmNcbiAgICBpZiAoYWN0aW9uLm1ldGEua2V5IGluIHRoaXMuZmV0Y2hlZCkge1xuICAgICAgbGV0IHByb21pc2VIYW5kbGVyOiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XG4gICAgICBpZiAoYWN0aW9uLmVycm9yKSB7XG4gICAgICAgIHByb21pc2VIYW5kbGVyID0gdGhpcy5yZWplY3RvcnNbYWN0aW9uLm1ldGEua2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb21pc2VIYW5kbGVyID0gdGhpcy5yZXNvbHZlcnNbYWN0aW9uLm1ldGEua2V5XTtcbiAgICAgIH1cbiAgICAgIHByb21pc2VIYW5kbGVyKGFjdGlvbi5wYXlsb2FkKTtcbiAgICAgIC8vIHNpbmNlIHdlJ3JlIHJlc29sdmVkIHdlIG5vIGxvbmdlciBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBwcm9taXNlXG4gICAgICB0aGlzLmNsZWFyKGFjdGlvbi5tZXRhLmtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEF0dGFjaGVzIE5ldHdvcmtNYW5hZ2VyIHRvIHN0b3JlXG4gICAqXG4gICAqIEludGVyY2VwdHMgJ3Jlc3QtaG9va3MvZmV0Y2gnIGFjdGlvbnMgdG8gc3RhcnQgcmVxdWVzdHMuXG4gICAqXG4gICAqIFJlc29sdmUvcmVqZWN0cyBhIHJlcXVlc3Qgd2hlbiBtYXRjaGluZyAncmVzdC1ob29rcy9yZWNlaXZlJyBldmVudFxuICAgKiBpcyBzZWVuLlxuICAgKi9cbiAgZ2V0TWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5taWRkbGV3YXJlO1xuICB9XG5cbiAgLyoqIEVuc3VyZXMgb25seSBvbmUgcmVxdWVzdCBmb3IgYSBnaXZlbiBrZXkgaXMgaW4gZmxpZ2h0IGF0IGFueSB0aW1lXG4gICAqXG4gICAqIFVzZXMga2V5IHRvIGVpdGhlciByZXRyaWV2ZSBpbi1mbGlnaHQgcHJvbWlzZSwgb3IgaWYgbm90XG4gICAqIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGFuZCBjYWxsIGZldGNoLlxuICAgKlxuICAgKiBOb3RlOiBUaGUgbmV3IHByb21pc2UgaXMgbm90IGFjdHVhbGx5IHRpZWQgdG8gZmV0Y2ggYXQgYWxsLFxuICAgKiBidXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgZXhwZWN0ZWQgJ3JlY2lldmUnIGFjdGlvbiBpcyBwcm9jZXNzZWQuXG4gICAqIFRoaXMgZW5zdXJlcyBwcm9taXNlcyBhcmUgcmVzb2x2ZWQgb25seSBvbmNlIHRoZWlyIGRhdGEgaXMgcHJvY2Vzc2VkXG4gICAqIGJ5IHRoZSByZWR1Y2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRocm90dGxlKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZldGNoOiAoKSA9PiBQcm9taXNlPGFueT4sXG4gICAgY3JlYXRlZEF0OiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuZ2V0TGFzdFJlc2V0KCk7XG4gICAgLy8gd2UncmUgYWxyZWFkeSBmZXRjaGluZyBzbyByZXVzZSB0aGUgcHJvbWlzZVxuICAgIC8vIGZldGNoZXMgYWZ0ZXIgcmVzZXQgZG8gbm90IGNvdW50XG4gICAgaWYgKGtleSBpbiB0aGlzLmZldGNoZWQgJiYgdGhpcy5mZXRjaGVkQXRba2V5XSA+IGxhc3RSZXNldCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hlZFtrZXldO1xuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hlZFtrZXldID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlcnNba2V5XSA9IHJlc29sdmU7XG4gICAgICB0aGlzLnJlamVjdG9yc1trZXldID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHRoaXMuZmV0Y2hlZEF0W2tleV0gPSBjcmVhdGVkQXQ7XG5cbiAgICAvLyBzaW5jZSBvdXIgcmVhbCBwcm9taXNlIGlzIHJlc29sdmVkIHZpYSB0aGUgd3JhcFJlZHVjZXIoKSxcbiAgICAvLyB3ZSBzaG91bGQganVzdCBzdG9wIGFsbCBlcnJvcnMgaGVyZS5cbiAgICAvLyBUT0RPOiBkZWNvdXBsZSB0aGlzIGZyb20gdXNlRmV0Y2hlcigpICh0aGF0J3Mgd2hhdCdzIGRpc3BhdGNoaW5nIHRoZSBlcnJvciB0aGUgcmVzb2x2ZXMgaW4gaGVyZSlcbiAgICBSSUMoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGZldGNoKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICB9LFxuICAgICAgeyB0aW1lb3V0OiA1MDAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hlZFtrZXldO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLFFBQVEsbUJBQW1CO0FBQ3BFLE9BQU9DLFVBQVUsTUFBTSw2QkFBNkI7QUFDcEQsU0FBU0MsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUNFQyxhQUFhLEVBQ2JDLGtCQUFrQixRQUNiLGtDQUFrQztBQUN6QyxPQUFPQyxHQUFHLE1BQU0saUJBQWlCO0FBV2pDLE9BQU8sTUFBTUMsVUFBVSxTQUFTQyxLQUFLLENBQUM7RUFHcENDLFdBQVdBLENBQUEsRUFBRztJQUNaLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztJQUFDLEtBSGhDQyxJQUFJLEdBQUcsWUFBWTtF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 |
@@ -8,3 +8,3 @@ import createOptimistic from '../../controller/createOptimistic.js'; | ||
let receiveAction; | ||
if (getOptimisticResponse && action.endpoint) { | ||
if (getOptimisticResponse && action.endpoint && action.endpoint.sideEffect) { | ||
receiveAction = createOptimistic(action.endpoint, { | ||
@@ -33,2 +33,2 @@ args: action.meta.args, | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVPcHRpbWlzdGljIiwiY3JlYXRlUmVjZWl2ZSIsImxlZ2FjeUNyZWF0ZVJlY2VpdmUiLCJmZXRjaFJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsIl9hY3Rpb24kZW5kcG9pbnQiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJtZXRhIiwiZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIiwiZW5kcG9pbnQiLCJyZWNlaXZlQWN0aW9uIiwiYXJncyIsImZldGNoZWRBdCIsImNyZWF0ZWRBdCIsImdldFRpbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJkYXRhRXhwaXJ5TGVuZ3RoIiwiSW5maW5pdHkiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwid2FybiIsIm9wdGltaXN0aWMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhdGUvcmVkdWNlci9mZXRjaFJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZU9wdGltaXN0aWMgZnJvbSAnLi4vLi4vY29udHJvbGxlci9jcmVhdGVPcHRpbWlzdGljLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgUmVjZWl2ZUFjdGlvbixcbiAgT3B0aW1pc3RpY0FjdGlvbixcbiAgRmV0Y2hBY3Rpb24sXG59IGZyb20gJy4uLy4uL3ByZXZpb3VzQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmVjZWl2ZSBhcyBsZWdhY3lDcmVhdGVSZWNlaXZlIH0gZnJvbSAnLi4vbGVnYWN5LWFjdGlvbnMvaW5kZXguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hSZWR1Y2VyKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgYWN0aW9uOiBGZXRjaEFjdGlvbikge1xuICBjb25zdCBvcHRpbWlzdGljUmVzcG9uc2UgPSBhY3Rpb24ubWV0YS5vcHRpbWlzdGljUmVzcG9uc2U7XG4gIGNvbnN0IGdldE9wdGltaXN0aWNSZXNwb25zZSA9IGFjdGlvbi5lbmRwb2ludD8uZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlO1xuICBsZXQgcmVjZWl2ZUFjdGlvbjogUmVjZWl2ZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb247XG5cbiAgaWYgKGdldE9wdGltaXN0aWNSZXNwb25zZSAmJiBhY3Rpb24uZW5kcG9pbnQpIHtcbiAgICByZWNlaXZlQWN0aW9uID0gY3JlYXRlT3B0aW1pc3RpYyhhY3Rpb24uZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IGFjdGlvbi5tZXRhLmFyZ3MgYXMgcmVhZG9ubHkgYW55W10sXG4gICAgICBmZXRjaGVkQXQ6XG4gICAgICAgIHR5cGVvZiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQgIT09ICdudW1iZXInXG4gICAgICAgICAgPyBhY3Rpb24ubWV0YS5jcmVhdGVkQXQuZ2V0VGltZSgpXG4gICAgICAgICAgOiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQsXG4gICAgfSkgYXMgYW55O1xuICB9IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyBlbHNlIGlmIChvcHRpbWlzdGljUmVzcG9uc2UpIHtcbiAgICAvLyBUT0RPKGJyZWFraW5nKTogdGhpcyBpcyBubyBsb25nZXIgdXNlZCwgcmVtb3ZlIHRoaXMgYnJhbmNoXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZWNlaXZlQWN0aW9uID0gbGVnYWN5Q3JlYXRlUmVjZWl2ZShvcHRpbWlzdGljUmVzcG9uc2UsIHtcbiAgICAgIC4uLmFjdGlvbi5tZXRhLFxuICAgICAgZGF0YUV4cGlyeUxlbmd0aDogSW5maW5pdHksXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgJ2ZldGNoJyBhY3Rpb24gcmVhY2hlcyB0aGUgcmVkdWNlciB0aGVyZSBhcmUgbm8gbWlkZGxld2FyZXMgaW5zdGFsbGVkIHRvIGhhbmRsZSBpdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0ZldGNoIGFwcGVhcnMgdW5oYW5kbGVkIC0geW91IGFyZSBsaWtlbHkgbWlzc2luZyB0aGUgTmV0d29ya01hbmFnZXIgbWlkZGxld2FyZScsXG4gICAgICApO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnU2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvZ3VpZGVzL3JlZHV4I2luZGV4dHN4IGZvciBob29raW5nIHVwIHJlZHV4JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgb3B0aW1pc3RpYzogWy4uLnN0YXRlLm9wdGltaXN0aWMsIHJlY2VpdmVBY3Rpb25dLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsTUFBTSxzQ0FBc0M7QUFPbkUsU0FBU0MsYUFBYSxJQUFJQyxtQkFBbUIsUUFBUSw0QkFBNEI7QUFFakYsT0FBTyxTQUFTQyxZQUFZQSxDQUFDQyxLQUFxQixFQUFFQyxNQUFtQixFQUFFO0VBQUEsSUFBQUMsZ0JBQUE7RUFDdkUsTUFBTUMsa0JBQWtCLEdBQUdGLE1BQU0sQ0FBQ0csSUFBSSxDQUFDRCxrQkFBa0I7RUFDekQsTUFBTUUscUJBQXFCLElBQUFILGdCQUFBLEdBQUdELE1BQU0sQ0FBQ0ssUUFBUSxxQkFBZkosZ0JBQUEsQ0FBaUJHLHFCQUFxQjtFQUNwRSxJQUFJRSxhQUErQztFQUVuRCxJQUFJRixxQkFBcUIsSUFBSUosTUFBTSxDQUFDSyxRQUFRLEVBQUU7SUFDNUNDLGFBQWEsR0FBR1gsZ0JBQWdCLENBQUNLLE1BQU0sQ0FBQ0ssUUFBUSxFQUFFO01BQ2hERSxJQUFJLEVBQUVQLE1BQU0sQ0FBQ0csSUFBSSxDQUFDSSxJQUFzQjtNQUN4Q0MsU0FBUyxFQUNQLE9BQU9SLE1BQU0sQ0FBQ0csSUFBSSxDQUFDTSxTQUFTLEtBQUssUUFBUSxHQUNyQ1QsTUFBTSxDQUFDRyxJQUFJLENBQUNNLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsR0FDL0JWLE1BQU0sQ0FBQ0csSUFBSSxDQUFDTTtJQUNwQixDQUFDLENBQVE7RUFDWCxDQUFDLENBQUMsNkJBQThCLElBQUlQLGtCQUFrQixFQUFFO0lBQ3REO0lBQ0E7SUFDQUksYUFBYSxHQUFHVCxtQkFBbUIsQ0FBQ0ssa0JBQWtCLEVBQUFTLE1BQUEsQ0FBQUMsTUFBQSxLQUNqRFosTUFBTSxDQUFDRyxJQUFJO01BQ2RVLGdCQUFnQixFQUFFQztJQUFRLEVBQzNCLENBQUM7RUFDSixDQUFDLE1BQU07SUFDTDtJQUNBO0lBQ0EsSUFBSUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLEVBQUU7TUFDekNDLE9BQU8sQ0FBQ0MsSUFBSSxDQUNWLGdGQUNGLENBQUM7TUFDREQsT0FBTyxDQUFDQyxJQUFJLENBQ1YsMEVBQ0YsQ0FBQztJQUNIO0lBRUEsT0FBT3BCLEtBQUs7RUFDZDtFQUNBLE9BQUFZLE1BQUEsQ0FBQUMsTUFBQSxLQUNLYixLQUFLO0lBQ1JxQixVQUFVLEVBQUUsQ0FBQyxHQUFHckIsS0FBSyxDQUFDcUIsVUFBVSxFQUFFZCxhQUFhO0VBQUM7QUFFcEQifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVPcHRpbWlzdGljIiwiY3JlYXRlUmVjZWl2ZSIsImxlZ2FjeUNyZWF0ZVJlY2VpdmUiLCJmZXRjaFJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsIl9hY3Rpb24kZW5kcG9pbnQiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJtZXRhIiwiZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIiwiZW5kcG9pbnQiLCJyZWNlaXZlQWN0aW9uIiwic2lkZUVmZmVjdCIsImFyZ3MiLCJmZXRjaGVkQXQiLCJjcmVhdGVkQXQiLCJnZXRUaW1lIiwiT2JqZWN0IiwiYXNzaWduIiwiZGF0YUV4cGlyeUxlbmd0aCIsIkluZmluaXR5IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iLCJvcHRpbWlzdGljIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL3JlZHVjZXIvZmV0Y2hSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVPcHRpbWlzdGljIGZyb20gJy4uLy4uL2NvbnRyb2xsZXIvY3JlYXRlT3B0aW1pc3RpYy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJlY2VpdmVBY3Rpb24sXG4gIE9wdGltaXN0aWNBY3Rpb24sXG4gIEZldGNoQWN0aW9uLFxufSBmcm9tICcuLi8uLi9wcmV2aW91c0FjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVJlY2VpdmUgYXMgbGVnYWN5Q3JlYXRlUmVjZWl2ZSB9IGZyb20gJy4uL2xlZ2FjeS1hY3Rpb25zL2luZGV4LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoUmVkdWNlcihzdGF0ZTogU3RhdGU8dW5rbm93bj4sIGFjdGlvbjogRmV0Y2hBY3Rpb24pIHtcbiAgY29uc3Qgb3B0aW1pc3RpY1Jlc3BvbnNlID0gYWN0aW9uLm1ldGEub3B0aW1pc3RpY1Jlc3BvbnNlO1xuICBjb25zdCBnZXRPcHRpbWlzdGljUmVzcG9uc2UgPSBhY3Rpb24uZW5kcG9pbnQ/LmdldE9wdGltaXN0aWNSZXNwb25zZTtcbiAgbGV0IHJlY2VpdmVBY3Rpb246IFJlY2VpdmVBY3Rpb24gfCBPcHRpbWlzdGljQWN0aW9uO1xuXG4gIGlmIChnZXRPcHRpbWlzdGljUmVzcG9uc2UgJiYgYWN0aW9uLmVuZHBvaW50ICYmIGFjdGlvbi5lbmRwb2ludC5zaWRlRWZmZWN0KSB7XG4gICAgcmVjZWl2ZUFjdGlvbiA9IGNyZWF0ZU9wdGltaXN0aWMoYWN0aW9uLmVuZHBvaW50LCB7XG4gICAgICBhcmdzOiBhY3Rpb24ubWV0YS5hcmdzIGFzIHJlYWRvbmx5IGFueVtdLFxuICAgICAgZmV0Y2hlZEF0OlxuICAgICAgICB0eXBlb2YgYWN0aW9uLm1ldGEuY3JlYXRlZEF0ICE9PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYWN0aW9uLm1ldGEuY3JlYXRlZEF0LmdldFRpbWUoKVxuICAgICAgICAgIDogYWN0aW9uLm1ldGEuY3JlYXRlZEF0LFxuICAgIH0pIGFzIGFueTtcbiAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gZWxzZSBpZiAob3B0aW1pc3RpY1Jlc3BvbnNlKSB7XG4gICAgLy8gVE9ETyhicmVha2luZyk6IHRoaXMgaXMgbm8gbG9uZ2VyIHVzZWQsIHJlbW92ZSB0aGlzIGJyYW5jaFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmVjZWl2ZUFjdGlvbiA9IGxlZ2FjeUNyZWF0ZVJlY2VpdmUob3B0aW1pc3RpY1Jlc3BvbnNlLCB7XG4gICAgICAuLi5hY3Rpb24ubWV0YSxcbiAgICAgIGRhdGFFeHBpcnlMZW5ndGg6IEluZmluaXR5LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIElmICdmZXRjaCcgYWN0aW9uIHJlYWNoZXMgdGhlIHJlZHVjZXIgdGhlcmUgYXJlIG5vIG1pZGRsZXdhcmVzIGluc3RhbGxlZCB0byBoYW5kbGUgaXRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdGZXRjaCBhcHBlYXJzIHVuaGFuZGxlZCAtIHlvdSBhcmUgbGlrZWx5IG1pc3NpbmcgdGhlIE5ldHdvcmtNYW5hZ2VyIG1pZGRsZXdhcmUnLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2d1aWRlcy9yZWR1eCNpbmRleHRzeCBmb3IgaG9va2luZyB1cCByZWR1eCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG9wdGltaXN0aWM6IFsuLi5zdGF0ZS5vcHRpbWlzdGljLCByZWNlaXZlQWN0aW9uXSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsZ0JBQWdCLE1BQU0sc0NBQXNDO0FBT25FLFNBQVNDLGFBQWEsSUFBSUMsbUJBQW1CLFFBQVEsNEJBQTRCO0FBRWpGLE9BQU8sU0FBU0MsWUFBWUEsQ0FBQ0MsS0FBcUIsRUFBRUMsTUFBbUIsRUFBRTtFQUFBLElBQUFDLGdCQUFBO0VBQ3ZFLE1BQU1DLGtCQUFrQixHQUFHRixNQUFNLENBQUNHLElBQUksQ0FBQ0Qsa0JBQWtCO0VBQ3pELE1BQU1FLHFCQUFxQixJQUFBSCxnQkFBQSxHQUFHRCxNQUFNLENBQUNLLFFBQVEscUJBQWZKLGdCQUFBLENBQWlCRyxxQkFBcUI7RUFDcEUsSUFBSUUsYUFBK0M7RUFFbkQsSUFBSUYscUJBQXFCLElBQUlKLE1BQU0sQ0FBQ0ssUUFBUSxJQUFJTCxNQUFNLENBQUNLLFFBQVEsQ0FBQ0UsVUFBVSxFQUFFO0lBQzFFRCxhQUFhLEdBQUdYLGdCQUFnQixDQUFDSyxNQUFNLENBQUNLLFFBQVEsRUFBRTtNQUNoREcsSUFBSSxFQUFFUixNQUFNLENBQUNHLElBQUksQ0FBQ0ssSUFBc0I7TUFDeENDLFNBQVMsRUFDUCxPQUFPVCxNQUFNLENBQUNHLElBQUksQ0FBQ08sU0FBUyxLQUFLLFFBQVEsR0FDckNWLE1BQU0sQ0FBQ0csSUFBSSxDQUFDTyxTQUFTLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEdBQy9CWCxNQUFNLENBQUNHLElBQUksQ0FBQ087SUFDcEIsQ0FBQyxDQUFRO0VBQ1gsQ0FBQyxDQUFDLDZCQUE4QixJQUFJUixrQkFBa0IsRUFBRTtJQUN0RDtJQUNBO0lBQ0FJLGFBQWEsR0FBR1QsbUJBQW1CLENBQUNLLGtCQUFrQixFQUFBVSxNQUFBLENBQUFDLE1BQUEsS0FDakRiLE1BQU0sQ0FBQ0csSUFBSTtNQUNkVyxnQkFBZ0IsRUFBRUM7SUFBUSxFQUMzQixDQUFDO0VBQ0osQ0FBQyxNQUFNO0lBQ0w7SUFDQTtJQUNBLElBQUlDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLEtBQUssWUFBWSxFQUFFO01BQ3pDQyxPQUFPLENBQUNDLElBQUksQ0FDVixnRkFDRixDQUFDO01BQ0RELE9BQU8sQ0FBQ0MsSUFBSSxDQUNWLDBFQUNGLENBQUM7SUFDSDtJQUVBLE9BQU9yQixLQUFLO0VBQ2Q7RUFDQSxPQUFBYSxNQUFBLENBQUFDLE1BQUEsS0FDS2QsS0FBSztJQUNSc0IsVUFBVSxFQUFFLENBQUMsR0FBR3RCLEtBQUssQ0FBQ3NCLFVBQVUsRUFBRWYsYUFBYTtFQUFDO0FBRXBEIn0= |
@@ -47,3 +47,3 @@ import { SET_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js'; | ||
// render - so we need to stop 'readonly' fetches which can be triggered in render | ||
if (action.meta.optimisticResponse !== undefined || ((_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse) !== undefined) { | ||
if (action.meta.optimisticResponse !== undefined || ((_action$endpoint = action.endpoint) == null ? void 0 : _action$endpoint.getOptimisticResponse) !== undefined && action.endpoint.sideEffect) { | ||
return next(action); | ||
@@ -296,2 +296,2 @@ } | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRVRfVFlQRSIsIkZFVENIX1RZUEUiLCJSRVNFVF9UWVBFIiwiQ29udHJvbGxlciIsImluaXRpYWxTdGF0ZSIsImNyZWF0ZVJlY2VpdmUiLCJjcmVhdGVSZWNlaXZlRXJyb3IiLCJSSUMiLCJSZXNldEVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJOZXR3b3JrTWFuYWdlciIsImRhdGFFeHBpcnlMZW5ndGgiLCJlcnJvckV4cGlyeUxlbmd0aCIsImZldGNoZWQiLCJPYmplY3QiLCJjcmVhdGUiLCJyZXNvbHZlcnMiLCJyZWplY3RvcnMiLCJmZXRjaGVkQXQiLCJnZXRTdGF0ZSIsImNvbnRyb2xsZXIiLCJtaWRkbGV3YXJlIiwiZGlzcGF0Y2giLCJuZXh0IiwiYWN0aW9uIiwiX2FjdGlvbiRlbmRwb2ludCIsInR5cGUiLCJoYW5kbGVGZXRjaCIsIm1ldGEiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJ1bmRlZmluZWQiLCJlbmRwb2ludCIsImdldE9wdGltaXN0aWNSZXNwb25zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImtleSIsIl9jb250cm9sbGVyJGdldFN0YXRlJCIsImVycm9yIiwiaGFuZGxlUmVjZWl2ZSIsImNsZWFyQWxsIiwiayIsInNraXBMb2dnaW5nIiwiaW5pdCIsImNsZWFudXBEYXRlIiwiY2xlYW51cCIsIkRhdGUiLCJub3ciLCJhbGxTZXR0bGVkIiwiZmV0Y2hlcyIsInZhbHVlcyIsImxlbmd0aCIsImNsZWFyIiwiY2F0Y2giLCJnZXRMYXN0UmVzZXQiLCJsYXN0UmVzZXQiLCJ2YWx1ZU9mIiwiSW5maW5pdHkiLCJmZXRjaCIsInBheWxvYWQiLCJ0aHJvdHRsZSIsInJlamVjdCIsImNyZWF0ZWRBdCIsImdldFRpbWUiLCJkZWZlcmVkRmV0Y2giLCJwcm9taXNlIiwicmVzb2x2ZVByb21pc2UiLCJkYXRhIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiaXNOYU4iLCJjb25zb2xlIiwiYXJncyIsInJlc3BvbnNlIiwiX2FjdGlvbiRtZXRhJG9wdGlvbnMkIiwiX2FjdGlvbiRtZXRhJG9wdGlvbnMiLCJvcHRpb25zIiwiX2FjdGlvbiRtZXRhJG9wdGlvbnMkMiIsIl9hY3Rpb24kbWV0YSRvcHRpb25zMiIsInByb21pc2VIYW5kbGVyIiwiZ2V0TWlkZGxld2FyZSIsInRpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFuYWdlci9OZXR3b3JrTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTRVRfVFlQRSwgRkVUQ0hfVFlQRSwgUkVTRVRfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCBDb250cm9sbGVyIGZyb20gJy4uL2NvbnRyb2xsZXIvQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBpbml0aWFsU3RhdGUgfSBmcm9tICcuLi9pbnRlcm5hbC5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVSZWNlaXZlLFxuICBjcmVhdGVSZWNlaXZlRXJyb3IsXG59IGZyb20gJy4uL3N0YXRlL2xlZ2FjeS1hY3Rpb25zL2luZGV4LmpzJztcbmltcG9ydCBSSUMgZnJvbSAnLi4vc3RhdGUvUklDLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRmV0Y2hBY3Rpb24sXG4gIFJlY2VpdmVBY3Rpb24sXG4gIE1hbmFnZXIsXG4gIEFjdGlvblR5cGVzLFxuICBNaWRkbGV3YXJlQVBJLFxuICBNaWRkbGV3YXJlLFxuICBTdGF0ZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgUmVzZXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgbmFtZSA9ICdSZXNldEVycm9yJztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignQWJvcnRlZCBkdWUgdG8gUkVTRVQnKTtcbiAgfVxufVxuXG4vKiogSGFuZGxlcyBhbGwgYXN5bmMgbmV0d29yayBkaXNwYXRjaGVzXG4gKlxuICogRGVkdXBlcyBjb25jdXJyZW50IHJlcXVlc3RzIGJ5IGtlZXBpbmcgdHJhY2sgb2YgYWxsIGZldGNoZXMgaW4gZmxpZ2h0XG4gKiBhbmQgcmV0dXJuaW5nIGV4aXN0aW5nIHByb21pc2VzIGZvciByZXF1ZXN0cyBhbHJlYWR5IGluIGZsaWdodC5cbiAqXG4gKiBJbnRlcmZhY2VzIHdpdGggc3RvcmUgdmlhIGEgcmVkdXgtY29tcGF0aWJsZSBtaWRkbGV3YXJlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvTmV0d29ya01hbmFnZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01hbmFnZXIgaW1wbGVtZW50cyBNYW5hZ2VyIHtcbiAgcHJvdGVjdGVkIGZldGNoZWQ6IHsgW2s6IHN0cmluZ106IFByb21pc2U8YW55PiB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcHJvdGVjdGVkIHJlc29sdmVyczogeyBbazogc3RyaW5nXTogKHZhbHVlPzogYW55KSA9PiB2b2lkIH0gPSB7fTtcbiAgcHJvdGVjdGVkIHJlamVjdG9yczogeyBbazogc3RyaW5nXTogKHZhbHVlPzogYW55KSA9PiB2b2lkIH0gPSB7fTtcbiAgcHJvdGVjdGVkIGZldGNoZWRBdDogeyBbazogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgZGVjbGFyZSByZWFkb25seSBkYXRhRXhwaXJ5TGVuZ3RoOiBudW1iZXI7XG4gIGRlY2xhcmUgcmVhZG9ubHkgZXJyb3JFeHBpcnlMZW5ndGg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGRlY2xhcmUgbWlkZGxld2FyZTogTWlkZGxld2FyZTtcbiAgcHJvdGVjdGVkIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPiA9ICgpID0+IGluaXRpYWxTdGF0ZTtcbiAgcHJvdGVjdGVkIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICBkZWNsYXJlIGNsZWFudXBEYXRlPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGFFeHBpcnlMZW5ndGggPSA2MDAwMCwgZXJyb3JFeHBpcnlMZW5ndGggPSAxMDAwKSB7XG4gICAgdGhpcy5kYXRhRXhwaXJ5TGVuZ3RoID0gZGF0YUV4cGlyeUxlbmd0aDtcbiAgICB0aGlzLmVycm9yRXhwaXJ5TGVuZ3RoID0gZXJyb3JFeHBpcnlMZW5ndGg7XG5cbiAgICB0aGlzLm1pZGRsZXdhcmUgPSA8QyBleHRlbmRzIE1pZGRsZXdhcmVBUEk+KHtcbiAgICAgIGRpc3BhdGNoLFxuICAgICAgZ2V0U3RhdGUsXG4gICAgICBjb250cm9sbGVyLFxuICAgIH06IEMpID0+IHtcbiAgICAgIHRoaXMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbiAgICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgICByZXR1cm4gKG5leHQ6IENbJ2Rpc3BhdGNoJ10pOiBDWydkaXNwYXRjaCddID0+XG4gICAgICAgIChhY3Rpb24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZFVENIX1RZUEU6XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmV0Y2goYWN0aW9uLCBkaXNwYXRjaCwgY29udHJvbGxlcik7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSB0aGF0IGNhdXNlcyBhbnkgc3RhdGUgY2hhbmdlXG4gICAgICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGludGVyY2VwdCBvdGhlciBmZXRjaGVzIGFzIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciByZWR1Y2VycyBkdXJpbmdcbiAgICAgICAgICAgICAgLy8gcmVuZGVyIC0gc28gd2UgbmVlZCB0byBzdG9wICdyZWFkb25seScgZmV0Y2hlcyB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIGluIHJlbmRlclxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYWN0aW9uLm1ldGEub3B0aW1pc3RpY1Jlc3BvbnNlICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICBhY3Rpb24uZW5kcG9pbnQ/LmdldE9wdGltaXN0aWNSZXNwb25zZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgY2FzZSBTRVRfVFlQRTpcbiAgICAgICAgICAgICAgLy8gb25seSByZWNlaXZlIGFmdGVyIG5ldyBzdGF0ZSBpcyBjb21wdXRlZFxuICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24ubWV0YS5rZXkgaW4gdGhpcy5mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAvLyBOb3RlOiBtZXRhICptdXN0KiBiZSBzZXQgYnkgcmVkdWNlciBzbyB0aGlzIHNob3VsZCBiZSBzYWZlXG4gICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0U3RhdGUoKS5tZXRhW2FjdGlvbi5tZXRhLmtleV0/LmVycm9yO1xuICAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyBlcnJvcnMgcmVzdWx0IGluIHN0YXRlIG1ldGEgaGF2aW5nIGVycm9yLCBzbyB3ZSBzaG91bGQgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdXNlIG9ubHkgbmV3IGFjdGlvbiB0eXBlc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlY2VpdmUoY3JlYXRlUmVjZWl2ZUVycm9yKGVycm9yLCBhY3Rpb24ubWV0YSkpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWNlaXZlKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgUkVTRVRfVFlQRToge1xuICAgICAgICAgICAgICBjb25zdCByZWplY3RvcnMgPSB7IC4uLnRoaXMucmVqZWN0b3JzIH07XG5cbiAgICAgICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRoZXJlIGNvdWxkIGJlIGV4dGVybmFsIGxpc3RlbmVycyB0byB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgY29tbWl0IHNvIG91ciBvd24gcmVqZWN0b3Iga25vd3Mgbm90IHRvIGRpc3BhdGNoIGFuIGVycm9yIGJhc2VkIG9uIHRoaXNcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gcmVqZWN0b3JzKSB7XG4gICAgICAgICAgICAgICAgICByZWplY3RvcnNba10obmV3IFJlc2V0RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG4gIH1cblxuICAvKiogVXNlZCBieSBEZXZ0b29sc01hbmFnZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gbG9nIGFuIGFjdGlvbiAqL1xuICBza2lwTG9nZ2luZyhhY3Rpb246IEFjdGlvblR5cGVzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gYWN0aW9uLnR5cGUgPT09IEZFVENIX1RZUEUgJiYgYWN0aW9uLm1ldGEua2V5IGluIHRoaXMuZmV0Y2hlZDtcbiAgfVxuXG4gIC8qKiBPbiBtb3VudCAqL1xuICBpbml0KCkge1xuICAgIGRlbGV0ZSB0aGlzLmNsZWFudXBEYXRlO1xuICB9XG5cbiAgLyoqIEVuc3VyZXMgYWxsIHByb21pc2VzIGFyZSBjb21wbGV0ZWQgYnkgcmVqZWN0aW5nIHJlbWFpbmluZy4gKi9cbiAgY2xlYW51cCgpIHtcbiAgICAvLyBlbnN1cmUgbm8gZGlzcGF0Y2hlcyBhZnRlciB1bm1vdW50XG4gICAgLy8gdGhpcyBtdXN0IGJlIHJldmVyc2libGUgKGRvbmUgaW4gaW5pdCkgc28gdXNlRWZmZWN0KCkgcmVtYWlucyBzeW1tZXRyaWNcbiAgICB0aGlzLmNsZWFudXBEYXRlID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIGFsbFNldHRsZWQoKSB7XG4gICAgY29uc3QgZmV0Y2hlcyA9IE9iamVjdC52YWx1ZXModGhpcy5mZXRjaGVkKTtcbiAgICBpZiAoZmV0Y2hlcy5sZW5ndGgpIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoZmV0Y2hlcyk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHByb21pc2Ugc3RhdGUgKi9cbiAgcHJvdGVjdGVkIGNsZWFyQWxsKCkge1xuICAgIGZvciAoY29uc3QgayBpbiB0aGlzLnJlamVjdG9ycykge1xuICAgICAgdGhpcy5jbGVhcihrKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2xlYXIgcHJvbWlzZSBzdGF0ZSBmb3IgYSBnaXZlbiBrZXkgKi9cbiAgcHJvdGVjdGVkIGNsZWFyKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5mZXRjaGVkW2tleV0uY2F0Y2goKCkgPT4ge30pO1xuICAgIGRlbGV0ZSB0aGlzLnJlc29sdmVyc1trZXldO1xuICAgIGRlbGV0ZSB0aGlzLnJlamVjdG9yc1trZXldO1xuICAgIGRlbGV0ZSB0aGlzLmZldGNoZWRba2V5XTtcbiAgICBkZWxldGUgdGhpcy5mZXRjaGVkQXRba2V5XTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMYXN0UmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuY2xlYW51cERhdGUpIHJldHVybiB0aGlzLmNsZWFudXBEYXRlO1xuICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuY29udHJvbGxlci5nZXRTdGF0ZSgpLmxhc3RSZXNldDtcbiAgICBpZiAobGFzdFJlc2V0IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGxhc3RSZXNldC52YWx1ZU9mKCk7XG4gICAgaWYgKHR5cGVvZiBsYXN0UmVzZXQgIT09ICdudW1iZXInKSByZXR1cm4gLUluZmluaXR5O1xuICAgIHJldHVybiBsYXN0UmVzZXQ7XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gbWlkZGxld2FyZSBpbnRlcmNlcHRzICdyZXN0LWhvb2tzL2ZldGNoJyBhY3Rpb24uXG4gICAqXG4gICAqIFdpbGwgdGhlbiBzdGFydCBhIHByb21pc2UgZm9yIGEga2V5IGFuZCBwb3RlbnRpYWxseSBzdGFydCB0aGUgbmV0d29ya1xuICAgKiBmZXRjaC5cbiAgICpcbiAgICogVXNlcyB0aHJvdHRsZSBvbmx5IHdoZW4gaW5zdHJ1Y3RlZCBieSBhY3Rpb24gbWV0YS4gVGhpcyBpcyB2YWx1YWJsZVxuICAgKiBmb3IgZW5zdXJlcyBtdXRhdGlvbiByZXF1ZXN0cyBhbHdheXMgZ28gdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVGZXRjaChcbiAgICBhY3Rpb246IEZldGNoQWN0aW9uLFxuICAgIGRpc3BhdGNoOiAoYWN0aW9uOiBhbnkpID0+IFByb21pc2U8dm9pZD4sXG4gICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgKSB7XG4gICAgY29uc3QgZmV0Y2ggPSBhY3Rpb24ucGF5bG9hZDtcbiAgICBjb25zdCB7IGtleSwgdGhyb3R0bGUsIHJlc29sdmUsIHJlamVjdCB9ID0gYWN0aW9uLm1ldGE7XG4gICAgLy8gVE9ETyhicmVha2luZyk6IHJlbW92ZSBzdXBwb3J0IGZvciBEYXRlIHR5cGUgaW4gJ1JlY2VpdmUnIGFjdGlvblxuICAgIGNvbnN0IGNyZWF0ZWRBdCA9XG4gICAgICB0eXBlb2YgYWN0aW9uLm1ldGEuY3JlYXRlZEF0ICE9PSAnbnVtYmVyJ1xuICAgICAgICA/IGFjdGlvbi5tZXRhLmNyZWF0ZWRBdC5nZXRUaW1lKClcbiAgICAgICAgOiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQ7XG5cbiAgICBjb25zdCBkZWZlcmVkRmV0Y2ggPSAoKSA9PiB7XG4gICAgICBsZXQgcHJvbWlzZSA9IGZldGNoKCk7XG4gICAgICBjb25zdCByZXNvbHZlUHJvbWlzZSA9IChcbiAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QgfCBudWxsPixcbiAgICAgICkgPT5cbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KTtcbiAgICAgIC8vIHNjaGVkdWxlIG5vbi10aHJvdHRsZWQgcmVzb2x1dGlvbnMgaW4gYSBtaWNyb3Rhc2sgYmVmb3JlIHJlY2VpdmVcbiAgICAgIC8vIHRoaXMgZW5hYmxlcyB1c2VycyBhd2FpdGluZyB0aGVpciBmZXRjaCB0byB0cmlnZ2VyIGFueSByZWFjdCB1cGRhdGVzIG5lZWRlZCB0byBkZWFsXG4gICAgICAvLyB3aXRoIHVwY29taW5nIGNoYW5nZXMgYmVjYXVzZSBvZiB0aGUgZmV0Y2ggKGZvciBpbnN0YW5jZSBhdm9pZGluZyBzdXNwZW5zZSBpZiBzb21ldGhpbmcgaXMgZGVsZXRlZClcbiAgICAgIGlmICghdGhyb3R0bGUgJiYgYWN0aW9uLmVuZHBvaW50KSB7XG4gICAgICAgIHByb21pc2UgPSByZXNvbHZlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIHByb21pc2UgPSBwcm9taXNlXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIGxldCBsYXN0UmVzZXQgPSB0aGlzLmdldExhc3RSZXNldCgpO1xuXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc05hTihsYXN0UmVzZXQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnc3RhdGUubGFzdFJlc2V0IGlzIE5hTi4gT25seSBwb3NpdGl2ZSB0aW1lc3RhbXBzIGFyZSB2YWxpZC4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxhc3RSZXNldCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZG9uJ3QgdXBkYXRlIHN0YXRlIHdpdGggcHJvbWlzZXMgc3RhcnRlZCBiZWZvcmUgbGFzdCBjbGVhclxuICAgICAgICAgIGlmIChjcmVhdGVkQXQgPj0gbGFzdFJlc2V0KSB7XG4gICAgICAgICAgICAvLyB3ZSBzdGlsbCBjaGVjayBmb3IgY29udHJvbGxlciBpbiBjYXNlIHNvbWVvbmUgZGlkbid0IGhhdmUgdHlwZSBwcm90ZWN0aW9uIHNpbmNlIHRoaXMgZGlkbid0IGFsd2F5cyBleGlzdFxuICAgICAgICAgICAgaWYgKGFjdGlvbi5lbmRwb2ludCAmJiB0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlc29sdmUoYWN0aW9uLmVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgYXJnczogYWN0aW9uLm1ldGEuYXJncyBhcyBhbnksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGRhdGEsXG4gICAgICAgICAgICAgICAgZmV0Y2hlZEF0OiBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVE9ETyhicmVha2luZyk6IGlzIHRoaXMgYnJhbmNoIHN0aWxsIHBvc3NpYmxlPyByZW1vdmUgaW4gbmV4dCBtYWpvciB1cGRhdGVcbiAgICAgICAgICAgICAgLy8gZG9lcyB0aGlzIHRocm93IGlmIHRoZSByZWR1Y2VyIGZhaWxzPyAtIG5vIGJlY2F1c2UgcmVkdWNlciBpcyB3cmFwcGVkIGluIHRyeS9jYXRjaFxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgY3JlYXRlUmVjZWl2ZShkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAuLi5hY3Rpb24ubWV0YSxcbiAgICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgICAgZGF0YUV4cGlyeUxlbmd0aDpcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm1ldGEub3B0aW9ucz8uZGF0YUV4cGlyeUxlbmd0aCA/P1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFFeHBpcnlMZW5ndGgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuZ2V0TGFzdFJlc2V0KCk7XG4gICAgICAgICAgLy8gZG9uJ3QgdXBkYXRlIHN0YXRlIHdpdGggcHJvbWlzZXMgc3RhcnRlZCBiZWZvcmUgbGFzdCBjbGVhclxuICAgICAgICAgIGlmIChjcmVhdGVkQXQgPj0gbGFzdFJlc2V0KSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmVuZHBvaW50ICYmIHRoaXMuY29udHJvbGxlcikge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIucmVzb2x2ZShhY3Rpb24uZW5kcG9pbnQsIHtcbiAgICAgICAgICAgICAgICBhcmdzOiBhY3Rpb24ubWV0YS5hcmdzIGFzIGFueSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogZXJyb3IsXG4gICAgICAgICAgICAgICAgZmV0Y2hlZEF0OiBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZVJlY2VpdmVFcnJvcihlcnJvciwge1xuICAgICAgICAgICAgICAgICAgLi4uYWN0aW9uLm1ldGEsXG4gICAgICAgICAgICAgICAgICBlcnJvckV4cGlyeUxlbmd0aDpcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm1ldGEub3B0aW9ucz8uZXJyb3JFeHBpcnlMZW5ndGggPz9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckV4cGlyeUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICAvLyBsZWdhY3kgYmVoYXZpb3Igc2NoZWR1bGVzIHJlc29sdXRpb24gYWZ0ZXIgZGlzcGF0Y2hcbiAgICAgIGlmICghdGhyb3R0bGUgJiYgIWFjdGlvbi5lbmRwb2ludCkge1xuICAgICAgICBwcm9taXNlID0gcmVzb2x2ZVByb21pc2UocHJvbWlzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgaWYgKHRocm90dGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy50aHJvdHRsZShrZXksIGRlZmVyZWRGZXRjaCwgY3JlYXRlZEF0KVxuICAgICAgICAudGhlbihkYXRhID0+IHJlc29sdmUoZGF0YSkpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlZmVyZWRGZXRjaCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gbWlkZGxld2FyZSBpbnRlcmNlcHRzIGEgcmVjZWl2ZSBhY3Rpb24uXG4gICAqXG4gICAqIFdpbGwgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhc3NvY2lhdGVkIHdpdGggcmVjZWl2ZSBrZXkuXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlUmVjZWl2ZShhY3Rpb246IFJlY2VpdmVBY3Rpb24pIHtcbiAgICAvLyB0aGlzIGNhbiBzdGlsbCB0dXJuIG91dCB0byBiZSB1bnRydWUgc2luY2UgdGhpcyBpcyBhc3luY1xuICAgIGlmIChhY3Rpb24ubWV0YS5rZXkgaW4gdGhpcy5mZXRjaGVkKSB7XG4gICAgICBsZXQgcHJvbWlzZUhhbmRsZXI6ICh2YWx1ZT86IGFueSkgPT4gdm9pZDtcbiAgICAgIGlmIChhY3Rpb24uZXJyb3IpIHtcbiAgICAgICAgcHJvbWlzZUhhbmRsZXIgPSB0aGlzLnJlamVjdG9yc1thY3Rpb24ubWV0YS5rZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZUhhbmRsZXIgPSB0aGlzLnJlc29sdmVyc1thY3Rpb24ubWV0YS5rZXldO1xuICAgICAgfVxuICAgICAgcHJvbWlzZUhhbmRsZXIoYWN0aW9uLnBheWxvYWQpO1xuICAgICAgLy8gc2luY2Ugd2UncmUgcmVzb2x2ZWQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGlzIHByb21pc2VcbiAgICAgIHRoaXMuY2xlYXIoYWN0aW9uLm1ldGEua2V5KTtcbiAgICB9XG4gIH1cblxuICAvKiogQXR0YWNoZXMgTmV0d29ya01hbmFnZXIgdG8gc3RvcmVcbiAgICpcbiAgICogSW50ZXJjZXB0cyAncmVzdC1ob29rcy9mZXRjaCcgYWN0aW9ucyB0byBzdGFydCByZXF1ZXN0cy5cbiAgICpcbiAgICogUmVzb2x2ZS9yZWplY3RzIGEgcmVxdWVzdCB3aGVuIG1hdGNoaW5nICdyZXN0LWhvb2tzL3JlY2VpdmUnIGV2ZW50XG4gICAqIGlzIHNlZW4uXG4gICAqL1xuICBnZXRNaWRkbGV3YXJlKCkge1xuICAgIHJldHVybiB0aGlzLm1pZGRsZXdhcmU7XG4gIH1cblxuICAvKiogRW5zdXJlcyBvbmx5IG9uZSByZXF1ZXN0IGZvciBhIGdpdmVuIGtleSBpcyBpbiBmbGlnaHQgYXQgYW55IHRpbWVcbiAgICpcbiAgICogVXNlcyBrZXkgdG8gZWl0aGVyIHJldHJpZXZlIGluLWZsaWdodCBwcm9taXNlLCBvciBpZiBub3RcbiAgICogY3JlYXRlIGEgbmV3IHByb21pc2UgYW5kIGNhbGwgZmV0Y2guXG4gICAqXG4gICAqIE5vdGU6IFRoZSBuZXcgcHJvbWlzZSBpcyBub3QgYWN0dWFsbHkgdGllZCB0byBmZXRjaCBhdCBhbGwsXG4gICAqIGJ1dCBpcyByZXNvbHZlZCB3aGVuIHRoZSBleHBlY3RlZCAncmVjaWV2ZScgYWN0aW9uIGlzIHByb2Nlc3NlZC5cbiAgICogVGhpcyBlbnN1cmVzIHByb21pc2VzIGFyZSByZXNvbHZlZCBvbmx5IG9uY2UgdGhlaXIgZGF0YSBpcyBwcm9jZXNzZWRcbiAgICogYnkgdGhlIHJlZHVjZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgdGhyb3R0bGUoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZmV0Y2g6ICgpID0+IFByb21pc2U8YW55PixcbiAgICBjcmVhdGVkQXQ6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc3QgbGFzdFJlc2V0ID0gdGhpcy5nZXRMYXN0UmVzZXQoKTtcbiAgICAvLyB3ZSdyZSBhbHJlYWR5IGZldGNoaW5nIHNvIHJldXNlIHRoZSBwcm9taXNlXG4gICAgLy8gZmV0Y2hlcyBhZnRlciByZXNldCBkbyBub3QgY291bnRcbiAgICBpZiAoa2V5IGluIHRoaXMuZmV0Y2hlZCAmJiB0aGlzLmZldGNoZWRBdFtrZXldID4gbGFzdFJlc2V0KSB7XG4gICAgICByZXR1cm4gdGhpcy5mZXRjaGVkW2tleV07XG4gICAgfVxuXG4gICAgdGhpcy5mZXRjaGVkW2tleV0gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVyc1trZXldID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMucmVqZWN0b3JzW2tleV0gPSByZWplY3Q7XG4gICAgfSk7XG4gICAgdGhpcy5mZXRjaGVkQXRba2V5XSA9IGNyZWF0ZWRBdDtcblxuICAgIC8vIHNpbmNlIG91ciByZWFsIHByb21pc2UgaXMgcmVzb2x2ZWQgdmlhIHRoZSB3cmFwUmVkdWNlcigpLFxuICAgIC8vIHdlIHNob3VsZCBqdXN0IHN0b3AgYWxsIGVycm9ycyBoZXJlLlxuICAgIC8vIFRPRE86IGRlY291cGxlIHRoaXMgZnJvbSB1c2VGZXRjaGVyKCkgKHRoYXQncyB3aGF0J3MgZGlzcGF0Y2hpbmcgdGhlIGVycm9yIHRoZSByZXNvbHZlcyBpbiBoZXJlKVxuICAgIFJJQyhcbiAgICAgICgpID0+IHtcbiAgICAgICAgZmV0Y2goKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgIH0sXG4gICAgICB7IHRpbWVvdXQ6IDUwMCB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5mZXRjaGVkW2tleV07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsUUFBUSxtQkFBbUI7QUFDcEUsT0FBT0MsVUFBVSxNQUFNLDZCQUE2QjtBQUNwRCxTQUFTQyxZQUFZLFFBQVEsZ0JBQWdCO0FBQzdDLFNBQ0VDLGFBQWEsRUFDYkMsa0JBQWtCLFFBQ2Isa0NBQWtDO0FBQ3pDLE9BQU9DLEdBQUcsTUFBTSxpQkFBaUI7QUFXakMsT0FBTyxNQUFNQyxVQUFVLFNBQVNDLEtBQUssQ0FBQztFQUdwQ0MsV0FBV0EsQ0FBQSxFQUFHO0lBQ1osS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQUMsS0FIaENDLElBQUksR0FBRyxZQUFZO0VBSW5CO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNQyxjQUFjLENBQW9CO0VBWXJERixXQUFXQSxDQUFDRyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUVDLGlCQUFpQixHQUFHLElBQUksRUFBRTtJQUFBLEtBWHREQyxPQUFPLEdBQWtDQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFBQSxLQUM1REMsU0FBUyxHQUEyQyxDQUFDLENBQUM7SUFBQSxLQUN0REMsU0FBUyxHQUEyQyxDQUFDLENBQUM7SUFBQSxLQUN0REMsU0FBUyxHQUE0QixDQUFDLENBQUM7SUFBQSxLQUl2Q0MsUUFBUSxHQUF5QixNQUFNakIsWUFBWTtJQUFBLEtBQ25Ea0IsVUFBVSxHQUFlLElBQUluQixVQUFVLENBQUMsQ0FBQztJQUlqRCxJQUFJLENBQUNVLGdCQUFnQixHQUFHQSxnQkFBZ0I7SUFDeEMsSUFBSSxDQUFDQyxpQkFBaUIsR0FBR0EsaUJBQWlCO0lBRTFDLElBQUksQ0FBQ1MsVUFBVSxHQUFHLENBQTBCO01BQzFDQyxRQUFRO01BQ1JILFFBQVE7TUFDUkM7SUFDQyxDQUFDLEtBQUs7TUFDUCxJQUFJLENBQUNELFFBQVEsR0FBR0EsUUFBUTtNQUN4QixJQUFJLENBQUNDLFVBQVUsR0FBR0EsVUFBVTtNQUM1QixPQUFRRyxJQUFtQixJQUN4QkMsTUFBTSxJQUFvQjtRQUFBLElBQUFDLGdCQUFBO1FBQ3pCLFFBQVFELE1BQU0sQ0FBQ0UsSUFBSTtVQUNqQixLQUFLM0IsVUFBVTtZQUNiLElBQUksQ0FBQzRCLFdBQVcsQ0FBQ0gsTUFBTSxFQUFFRixRQUFRLEVBQUVGLFVBQVUsQ0FBQztZQUM5QztZQUNBO1lBQ0E7WUFDQSxJQUNFSSxNQUFNLENBQUNJLElBQUksQ0FBQ0Msa0JBQWtCLEtBQUtDLFNBQVMsSUFDNUMsRUFBQUwsZ0JBQUEsR0FBQUQsTUFBTSxDQUFDTyxRQUFRLHFCQUFmTixnQkFBQSxDQUFpQk8scUJBQXFCLE1BQUtGLFNBQVMsRUFDcEQ7Y0FDQSxPQUFPUCxJQUFJLENBQUNDLE1BQU0sQ0FBQztZQUNyQjtZQUNBLE9BQU9TLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7VUFDMUIsS0FBS3BDLFFBQVE7WUFDWDtZQUNBLE9BQU95QixJQUFJLENBQUNDLE1BQU0sQ0FBQyxDQUFDVyxJQUFJLENBQUMsTUFBTTtjQUM3QixJQUFJWCxNQUFNLENBQUNJLElBQUksQ0FBQ1EsR0FBRyxJQUFJLElBQUksQ0FBQ3ZCLE9BQU8sRUFBRTtnQkFBQSxJQUFBd0IscUJBQUE7Z0JBQ25DO2dCQUNBLE1BQU1DLEtBQUssSUFBQUQscUJBQUEsR0FDVGpCLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLENBQUMsQ0FBQ1MsSUFBSSxDQUFDSixNQUFNLENBQUNJLElBQUksQ0FBQ1EsR0FBRyxDQUFDLHFCQUEzQ0MscUJBQUEsQ0FBNkNDLEtBQUs7Z0JBQ3BEO2dCQUNBLElBQUlBLEtBQUssRUFBRTtrQkFDVDtrQkFDQSxJQUFJLENBQUNDLGFBQWEsQ0FBQ25DLGtCQUFrQixDQUFDa0MsS0FBSyxFQUFFZCxNQUFNLENBQUNJLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxDQUFDLE1BQU07a0JBQ0wsSUFBSSxDQUFDVyxhQUFhLENBQUNmLE1BQU0sQ0FBQztnQkFDNUI7Y0FDRjtZQUNGLENBQUMsQ0FBQztVQUNKLEtBQUt4QixVQUFVO1lBQUU7Y0FDZixNQUFNaUIsU0FBUyxHQUFHO2dCQUFFLEdBQUcsSUFBSSxDQUFDQTtjQUFVLENBQUM7Y0FFdkMsSUFBSSxDQUFDdUIsUUFBUSxDQUFDLENBQUM7Y0FDZixPQUFPakIsSUFBSSxDQUFDQyxNQUFNLENBQUMsQ0FBQ1csSUFBSSxDQUFDLE1BQU07Z0JBQzdCO2dCQUNBO2dCQUNBLEtBQUssTUFBTU0sQ0FBQyxJQUFJeEIsU0FBUyxFQUFFO2tCQUN6QkEsU0FBUyxDQUFDd0IsQ0FBQyxDQUFDLENBQUMsSUFBSW5DLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDO2NBQ0YsQ0FBQyxDQUFDO1lBQ0o7VUFDQTtZQUNFLE9BQU9pQixJQUFJLENBQUNDLE1BQU0sQ0FBQztRQUN2QjtNQUNGLENBQUM7SUFDTCxDQUFDO0VBQ0g7O0VBRUE7RUFDQWtCLFdBQVdBLENBQUNsQixNQUFtQixFQUFFO0lBQy9CO0lBQ0EsT0FBT0EsTUFBTSxDQUFDRSxJQUFJLEtBQUszQixVQUFVLElBQUl5QixNQUFNLENBQUNJLElBQUksQ0FBQ1EsR0FBRyxJQUFJLElBQUksQ0FBQ3ZCLE9BQU87RUFDdEU7O0VBRUE7RUFDQThCLElBQUlBLENBQUEsRUFBRztJQUNMLE9BQU8sSUFBSSxDQUFDQyxXQUFXO0VBQ3pCOztFQUVBO0VBQ0FDLE9BQU9BLENBQUEsRUFBRztJQUNSO0lBQ0E7SUFDQSxJQUFJLENBQUNELFdBQVcsR0FBR0UsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztFQUMvQjtFQUVBQyxVQUFVQSxDQUFBLEVBQUc7SUFDWCxNQUFNQyxPQUFPLEdBQUduQyxNQUFNLENBQUNvQyxNQUFNLENBQUMsSUFBSSxDQUFDckMsT0FBTyxDQUFDO0lBQzNDLElBQUlvQyxPQUFPLENBQUNFLE1BQU0sRUFBRSxPQUFPbEIsT0FBTyxDQUFDZSxVQUFVLENBQUNDLE9BQU8sQ0FBQztFQUN4RDs7RUFFQTtFQUNVVCxRQUFRQSxDQUFBLEVBQUc7SUFDbkIsS0FBSyxNQUFNQyxDQUFDLElBQUksSUFBSSxDQUFDeEIsU0FBUyxFQUFFO01BQzlCLElBQUksQ0FBQ21DLEtBQUssQ0FBQ1gsQ0FBQyxDQUFDO0lBQ2Y7RUFDRjs7RUFFQTtFQUNVVyxLQUFLQSxDQUFDaEIsR0FBVyxFQUFFO0lBQzNCLElBQUksQ0FBQ3ZCLE9BQU8sQ0FBQ3VCLEdBQUcsQ0FBQyxDQUFDaUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDakMsT0FBTyxJQUFJLENBQUNyQyxTQUFTLENBQUNvQixHQUFHLENBQUM7SUFDMUIsT0FBTyxJQUFJLENBQUNuQixTQUFTLENBQUNtQixHQUFHLENBQUM7SUFDMUIsT0FBTyxJQUFJLENBQUN2QixPQUFPLENBQUN1QixHQUFHLENBQUM7SUFDeEIsT0FBTyxJQUFJLENBQUNsQixTQUFTLENBQUNrQixHQUFHLENBQUM7RUFDNUI7RUFFVWtCLFlBQVlBLENBQUEsRUFBRztJQUN2QixJQUFJLElBQUksQ0FBQ1YsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDQSxXQUFXO0lBQzdDLE1BQU1XLFNBQVMsR0FBRyxJQUFJLENBQUNuQyxVQUFVLENBQUNELFFBQVEsQ0FBQyxDQUFDLENBQUNvQyxTQUFTO0lBQ3RELElBQUlBLFNBQVMsWUFBWVQsSUFBSSxFQUFFLE9BQU9TLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7SUFDekQsSUFBSSxPQUFPRCxTQUFTLEtBQUssUUFBUSxFQUFFLE9BQU8sQ0FBQ0UsUUFBUTtJQUNuRCxPQUFPRixTQUFTO0VBQ2xCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDWTVCLFdBQVdBLENBQ25CSCxNQUFtQixFQUNuQkYsUUFBd0MsRUFDeENGLFVBQXNCLEVBQ3RCO0lBQ0EsTUFBTXNDLEtBQUssR0FBR2xDLE1BQU0sQ0FBQ21DLE9BQU87SUFDNUIsTUFBTTtNQUFFdkIsR0FBRztNQUFFd0IsUUFBUTtNQUFFMUIsT0FBTztNQUFFMkI7SUFBTyxDQUFDLEdBQUdyQyxNQUFNLENBQUNJLElBQUk7SUFDdEQ7SUFDQSxNQUFNa0MsU0FBUyxHQUNiLE9BQU90QyxNQUFNLENBQUNJLElBQUksQ0FBQ2tDLFNBQVMsS0FBSyxRQUFRLEdBQ3JDdEMsTUFBTSxDQUFDSSxJQUFJLENBQUNrQyxTQUFTLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEdBQy9CdkMsTUFBTSxDQUFDSSxJQUFJLENBQUNrQyxTQUFTO0lBRTNCLE1BQU1FLFlBQVksR0FBR0EsQ0FBQSxLQUFNO01BQ3pCLElBQUlDLE9BQU8sR0FBR1AsS0FBSyxDQUFDLENBQUM7TUFDckIsTUFBTVEsY0FBYyxHQUNsQkQsT0FBaUQsSUFFakRBLE9BQU8sQ0FDSjlCLElBQUksQ0FBQ2dDLElBQUksSUFBSTtRQUNaakMsT0FBTyxDQUFDaUMsSUFBSSxDQUFDO1FBQ2IsT0FBT0EsSUFBSTtNQUNiLENBQUMsQ0FBQyxDQUNEZCxLQUFLLENBQUNmLEtBQUssSUFBSTtRQUNkdUIsTUFBTSxDQUFDdkIsS0FBSyxDQUFDO1FBQ2IsTUFBTUEsS0FBSztNQUNiLENBQUMsQ0FBQztNQUNOO01BQ0E7TUFDQTtNQUNBLElBQUksQ0FBQ3NCLFFBQVEsSUFBSXBDLE1BQU0sQ0FBQ08sUUFBUSxFQUFFO1FBQ2hDa0MsT0FBTyxHQUFHQyxjQUFjLENBQUNELE9BQU8sQ0FBQztNQUNuQztNQUNBQSxPQUFPLEdBQUdBLE9BQU8sQ0FDZDlCLElBQUksQ0FBQ2dDLElBQUksSUFBSTtRQUNaLElBQUlaLFNBQVMsR0FBRyxJQUFJLENBQUNELFlBQVksQ0FBQyxDQUFDOztRQUVuQztRQUNBLElBQUljLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLEtBQUssWUFBWSxJQUFJQyxLQUFLLENBQUNoQixTQUFTLENBQUMsRUFBRTtVQUM3RGlCLE9BQU8sQ0FBQ2xDLEtBQUssQ0FDWCw2REFDRixDQUFDO1VBQ0RpQixTQUFTLEdBQUcsQ0FBQztRQUNmOztRQUVBO1FBQ0EsSUFBSU8sU0FBUyxJQUFJUCxTQUFTLEVBQUU7VUFDMUI7VUFDQSxJQUFJL0IsTUFBTSxDQUFDTyxRQUFRLElBQUksSUFBSSxDQUFDWCxVQUFVLEVBQUU7WUFDdEMsSUFBSSxDQUFDQSxVQUFVLENBQUNjLE9BQU8sQ0FBQ1YsTUFBTSxDQUFDTyxRQUFRLEVBQUU7Y0FDdkMwQyxJQUFJLEVBQUVqRCxNQUFNLENBQUNJLElBQUksQ0FBQzZDLElBQVc7Y0FDN0JDLFFBQVEsRUFBRVAsSUFBSTtjQUNkakQsU0FBUyxFQUFFNEM7WUFDYixDQUFDLENBQUM7VUFDSixDQUFDLE1BQU07WUFBQSxJQUFBYSxxQkFBQSxFQUFBQyxvQkFBQTtZQUNMO1lBQ0E7WUFDQSxJQUFJLENBQUN4RCxVQUFVLENBQUNFLFFBQVEsQ0FDdEJuQixhQUFhLENBQUNnRSxJQUFJLEVBQUU7Y0FDbEIsR0FBRzNDLE1BQU0sQ0FBQ0ksSUFBSTtjQUNkVixTQUFTLEVBQUU0QyxTQUFTO2NBQ3BCbkQsZ0JBQWdCLEdBQUFnRSxxQkFBQSxJQUFBQyxvQkFBQSxHQUNkcEQsTUFBTSxDQUFDSSxJQUFJLENBQUNpRCxPQUFPLHFCQUFuQkQsb0JBQUEsQ0FBcUJqRSxnQkFBZ0IsWUFBQWdFLHFCQUFBLEdBQ3JDLElBQUksQ0FBQ2hFO1lBQ1QsQ0FBQyxDQUNILENBQUM7VUFDSDtRQUNGO1FBQ0EsT0FBT3dELElBQUk7TUFDYixDQUFDLENBQUMsQ0FDRGQsS0FBSyxDQUFDZixLQUFLLElBQUk7UUFDZCxNQUFNaUIsU0FBUyxHQUFHLElBQUksQ0FBQ0QsWUFBWSxDQUFDLENBQUM7UUFDckM7UUFDQSxJQUFJUSxTQUFTLElBQUlQLFNBQVMsRUFBRTtVQUMxQixJQUFJL0IsTUFBTSxDQUFDTyxRQUFRLElBQUksSUFBSSxDQUFDWCxVQUFVLEVBQUU7WUFDdEMsSUFBSSxDQUFDQSxVQUFVLENBQUNjLE9BQU8sQ0FBQ1YsTUFBTSxDQUFDTyxRQUFRLEVBQUU7Y0FDdkMwQyxJQUFJLEVBQUVqRCxNQUFNLENBQUNJLElBQUksQ0FBQzZDLElBQVc7Y0FDN0JDLFFBQVEsRUFBRXBDLEtBQUs7Y0FDZnBCLFNBQVMsRUFBRTRDLFNBQVM7Y0FDcEJ4QixLQUFLLEVBQUU7WUFDVCxDQUFDLENBQUM7VUFDSixDQUFDLE1BQU07WUFBQSxJQUFBd0Msc0JBQUEsRUFBQUMscUJBQUE7WUFDTCxJQUFJLENBQUMzRCxVQUFVLENBQUNFLFFBQVEsQ0FDdEJsQixrQkFBa0IsQ0FBQ2tDLEtBQUssRUFBRTtjQUN4QixHQUFHZCxNQUFNLENBQUNJLElBQUk7Y0FDZGhCLGlCQUFpQixHQUFBa0Usc0JBQUEsSUFBQUMscUJBQUEsR0FDZnZELE1BQU0sQ0FBQ0ksSUFBSSxDQUFDaUQsT0FBTyxxQkFBbkJFLHFCQUFBLENBQXFCbkUsaUJBQWlCLFlBQUFrRSxzQkFBQSxHQUN0QyxJQUFJLENBQUNsRSxpQkFBaUI7Y0FDeEJNLFNBQVMsRUFBRTRDO1lBQ2IsQ0FBQyxDQUNILENBQUM7VUFDSDtRQUNGO1FBQ0EsTUFBTXhCLEtBQUs7TUFDYixDQUFDLENBQUM7TUFDSjtNQUNBLElBQUksQ0FBQ3NCLFFBQVEsSUFBSSxDQUFDcEMsTUFBTSxDQUFDTyxRQUFRLEVBQUU7UUFDakNrQyxPQUFPLEdBQUdDLGNBQWMsQ0FBQ0QsT0FBTyxDQUFDO01BQ25DO01BQ0EsT0FBT0EsT0FBTztJQUNoQixDQUFDO0lBRUQsSUFBSUwsUUFBUSxFQUFFO01BQ1osT0FBTyxJQUFJLENBQUNBLFFBQVEsQ0FBQ3hCLEdBQUcsRUFBRTRCLFlBQVksRUFBRUYsU0FBUyxDQUFDLENBQy9DM0IsSUFBSSxDQUFDZ0MsSUFBSSxJQUFJakMsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLENBQUMsQ0FDM0JkLEtBQUssQ0FBQ2YsS0FBSyxJQUFJdUIsTUFBTSxDQUFDdkIsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQyxNQUFNO01BQ0wsT0FBTzBCLFlBQVksQ0FBQyxDQUFDLENBQUNYLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDO0VBQ0Y7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7RUFDWWQsYUFBYUEsQ0FBQ2YsTUFBcUIsRUFBRTtJQUM3QztJQUNBLElBQUlBLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDUSxHQUFHLElBQUksSUFBSSxDQUFDdkIsT0FBTyxFQUFFO01BQ25DLElBQUltRSxjQUFxQztNQUN6QyxJQUFJeEQsTUFBTSxDQUFDYyxLQUFLLEVBQUU7UUFDaEIwQyxjQUFjLEdBQUcsSUFBSSxDQUFDL0QsU0FBUyxDQUFDTyxNQUFNLENBQUNJLElBQUksQ0FBQ1EsR0FBRyxDQUFDO01BQ2xELENBQUMsTUFBTTtRQUNMNEMsY0FBYyxHQUFHLElBQUksQ0FBQ2hFLFNBQVMsQ0FBQ1EsTUFBTSxDQUFDSSxJQUFJLENBQUNRLEdBQUcsQ0FBQztNQUNsRDtNQUNBNEMsY0FBYyxDQUFDeEQsTUFBTSxDQUFDbUMsT0FBTyxDQUFDO01BQzlCO01BQ0EsSUFBSSxDQUFDUCxLQUFLLENBQUM1QixNQUFNLENBQUNJLElBQUksQ0FBQ1EsR0FBRyxDQUFDO0lBQzdCO0VBQ0Y7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRTZDLGFBQWFBLENBQUEsRUFBRztJQUNkLE9BQU8sSUFBSSxDQUFDNUQsVUFBVTtFQUN4Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNZdUMsUUFBUUEsQ0FDaEJ4QixHQUFXLEVBQ1hzQixLQUF5QixFQUN6QkksU0FBaUIsRUFDakI7SUFDQSxNQUFNUCxTQUFTLEdBQUcsSUFBSSxDQUFDRCxZQUFZLENBQUMsQ0FBQztJQUNyQztJQUNBO0lBQ0EsSUFBSWxCLEdBQUcsSUFBSSxJQUFJLENBQUN2QixPQUFPLElBQUksSUFBSSxDQUFDSyxTQUFTLENBQUNrQixHQUFHLENBQUMsR0FBR21CLFNBQVMsRUFBRTtNQUMxRCxPQUFPLElBQUksQ0FBQzFDLE9BQU8sQ0FBQ3VCLEdBQUcsQ0FBQztJQUMxQjtJQUVBLElBQUksQ0FBQ3ZCLE9BQU8sQ0FBQ3VCLEdBQUcsQ0FBQyxHQUFHLElBQUlILE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUUyQixNQUFNLEtBQUs7TUFDbkQsSUFBSSxDQUFDN0MsU0FBUyxDQUFDb0IsR0FBRyxDQUFDLEdBQUdGLE9BQU87TUFDN0IsSUFBSSxDQUFDakIsU0FBUyxDQUFDbUIsR0FBRyxDQUFDLEdBQUd5QixNQUFNO0lBQzlCLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQzNDLFNBQVMsQ0FBQ2tCLEdBQUcsQ0FBQyxHQUFHMEIsU0FBUzs7SUFFL0I7SUFDQTtJQUNBO0lBQ0F6RCxHQUFHLENBQ0QsTUFBTTtNQUNKcUQsS0FBSyxDQUFDLENBQUMsQ0FBQ0wsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO0lBQzNCLENBQUMsRUFDRDtNQUFFNkIsT0FBTyxFQUFFO0lBQUksQ0FDakIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDckUsT0FBTyxDQUFDdUIsR0FBRyxDQUFDO0VBQzFCO0FBQ0YifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRVRfVFlQRSIsIkZFVENIX1RZUEUiLCJSRVNFVF9UWVBFIiwiQ29udHJvbGxlciIsImluaXRpYWxTdGF0ZSIsImNyZWF0ZVJlY2VpdmUiLCJjcmVhdGVSZWNlaXZlRXJyb3IiLCJSSUMiLCJSZXNldEVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJOZXR3b3JrTWFuYWdlciIsImRhdGFFeHBpcnlMZW5ndGgiLCJlcnJvckV4cGlyeUxlbmd0aCIsImZldGNoZWQiLCJPYmplY3QiLCJjcmVhdGUiLCJyZXNvbHZlcnMiLCJyZWplY3RvcnMiLCJmZXRjaGVkQXQiLCJnZXRTdGF0ZSIsImNvbnRyb2xsZXIiLCJtaWRkbGV3YXJlIiwiZGlzcGF0Y2giLCJuZXh0IiwiYWN0aW9uIiwiX2FjdGlvbiRlbmRwb2ludCIsInR5cGUiLCJoYW5kbGVGZXRjaCIsIm1ldGEiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJ1bmRlZmluZWQiLCJlbmRwb2ludCIsImdldE9wdGltaXN0aWNSZXNwb25zZSIsInNpZGVFZmZlY3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJrZXkiLCJfY29udHJvbGxlciRnZXRTdGF0ZSQiLCJlcnJvciIsImhhbmRsZVJlY2VpdmUiLCJjbGVhckFsbCIsImsiLCJza2lwTG9nZ2luZyIsImluaXQiLCJjbGVhbnVwRGF0ZSIsImNsZWFudXAiLCJEYXRlIiwibm93IiwiYWxsU2V0dGxlZCIsImZldGNoZXMiLCJ2YWx1ZXMiLCJsZW5ndGgiLCJjbGVhciIsImNhdGNoIiwiZ2V0TGFzdFJlc2V0IiwibGFzdFJlc2V0IiwidmFsdWVPZiIsIkluZmluaXR5IiwiZmV0Y2giLCJwYXlsb2FkIiwidGhyb3R0bGUiLCJyZWplY3QiLCJjcmVhdGVkQXQiLCJnZXRUaW1lIiwiZGVmZXJlZEZldGNoIiwicHJvbWlzZSIsInJlc29sdmVQcm9taXNlIiwiZGF0YSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImlzTmFOIiwiY29uc29sZSIsImFyZ3MiLCJyZXNwb25zZSIsIl9hY3Rpb24kbWV0YSRvcHRpb25zJCIsIl9hY3Rpb24kbWV0YSRvcHRpb25zIiwib3B0aW9ucyIsIl9hY3Rpb24kbWV0YSRvcHRpb25zJDIiLCJfYWN0aW9uJG1ldGEkb3B0aW9uczIiLCJwcm9taXNlSGFuZGxlciIsImdldE1pZGRsZXdhcmUiLCJ0aW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hbmFnZXIvTmV0d29ya01hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0VUX1RZUEUsIEZFVENIX1RZUEUsIFJFU0VUX1RZUEUgfSBmcm9tICcuLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tICcuLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi4vaW50ZXJuYWwuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlUmVjZWl2ZSxcbiAgY3JlYXRlUmVjZWl2ZUVycm9yLFxufSBmcm9tICcuLi9zdGF0ZS9sZWdhY3ktYWN0aW9ucy9pbmRleC5qcyc7XG5pbXBvcnQgUklDIGZyb20gJy4uL3N0YXRlL1JJQy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZldGNoQWN0aW9uLFxuICBSZWNlaXZlQWN0aW9uLFxuICBNYW5hZ2VyLFxuICBBY3Rpb25UeXBlcyxcbiAgTWlkZGxld2FyZUFQSSxcbiAgTWlkZGxld2FyZSxcbiAgU3RhdGUsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIFJlc2V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG5hbWUgPSAnUmVzZXRFcnJvcic7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0Fib3J0ZWQgZHVlIHRvIFJFU0VUJyk7XG4gIH1cbn1cblxuLyoqIEhhbmRsZXMgYWxsIGFzeW5jIG5ldHdvcmsgZGlzcGF0Y2hlc1xuICpcbiAqIERlZHVwZXMgY29uY3VycmVudCByZXF1ZXN0cyBieSBrZWVwaW5nIHRyYWNrIG9mIGFsbCBmZXRjaGVzIGluIGZsaWdodFxuICogYW5kIHJldHVybmluZyBleGlzdGluZyBwcm9taXNlcyBmb3IgcmVxdWVzdHMgYWxyZWFkeSBpbiBmbGlnaHQuXG4gKlxuICogSW50ZXJmYWNlcyB3aXRoIHN0b3JlIHZpYSBhIHJlZHV4LWNvbXBhdGlibGUgbWlkZGxld2FyZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL05ldHdvcmtNYW5hZ2VyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNYW5hZ2VyIGltcGxlbWVudHMgTWFuYWdlciB7XG4gIHByb3RlY3RlZCBmZXRjaGVkOiB7IFtrOiBzdHJpbmddOiBQcm9taXNlPGFueT4gfSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHByb3RlY3RlZCByZXNvbHZlcnM6IHsgW2s6IHN0cmluZ106ICh2YWx1ZT86IGFueSkgPT4gdm9pZCB9ID0ge307XG4gIHByb3RlY3RlZCByZWplY3RvcnM6IHsgW2s6IHN0cmluZ106ICh2YWx1ZT86IGFueSkgPT4gdm9pZCB9ID0ge307XG4gIHByb3RlY3RlZCBmZXRjaGVkQXQ6IHsgW2s6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIGRlY2xhcmUgcmVhZG9ubHkgZGF0YUV4cGlyeUxlbmd0aDogbnVtYmVyO1xuICBkZWNsYXJlIHJlYWRvbmx5IGVycm9yRXhwaXJ5TGVuZ3RoOiBudW1iZXI7XG4gIHByb3RlY3RlZCBkZWNsYXJlIG1pZGRsZXdhcmU6IE1pZGRsZXdhcmU7XG4gIHByb3RlY3RlZCBnZXRTdGF0ZTogKCkgPT4gU3RhdGU8dW5rbm93bj4gPSAoKSA9PiBpbml0aWFsU3RhdGU7XG4gIHByb3RlY3RlZCBjb250cm9sbGVyOiBDb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgZGVjbGFyZSBjbGVhbnVwRGF0ZT86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkYXRhRXhwaXJ5TGVuZ3RoID0gNjAwMDAsIGVycm9yRXhwaXJ5TGVuZ3RoID0gMTAwMCkge1xuICAgIHRoaXMuZGF0YUV4cGlyeUxlbmd0aCA9IGRhdGFFeHBpcnlMZW5ndGg7XG4gICAgdGhpcy5lcnJvckV4cGlyeUxlbmd0aCA9IGVycm9yRXhwaXJ5TGVuZ3RoO1xuXG4gICAgdGhpcy5taWRkbGV3YXJlID0gPEMgZXh0ZW5kcyBNaWRkbGV3YXJlQVBJPih7XG4gICAgICBkaXNwYXRjaCxcbiAgICAgIGdldFN0YXRlLFxuICAgICAgY29udHJvbGxlcixcbiAgICB9OiBDKSA9PiB7XG4gICAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgICAgcmV0dXJuIChuZXh0OiBDWydkaXNwYXRjaCddKTogQ1snZGlzcGF0Y2gnXSA9PlxuICAgICAgICAoYWN0aW9uKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGRVRDSF9UWVBFOlxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZldGNoKGFjdGlvbiwgZGlzcGF0Y2gsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGNhc2UgdGhhdCBjYXVzZXMgYW55IHN0YXRlIGNoYW5nZVxuICAgICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBpbnRlcmNlcHQgb3RoZXIgZmV0Y2hlcyBhcyB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgcmVkdWNlcnMgZHVyaW5nXG4gICAgICAgICAgICAgIC8vIHJlbmRlciAtIHNvIHdlIG5lZWQgdG8gc3RvcCAncmVhZG9ubHknIGZldGNoZXMgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCBpbiByZW5kZXJcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGltaXN0aWNSZXNwb25zZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgKGFjdGlvbi5lbmRwb2ludD8uZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgIGFjdGlvbi5lbmRwb2ludC5zaWRlRWZmZWN0KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIGNhc2UgU0VUX1RZUEU6XG4gICAgICAgICAgICAgIC8vIG9ubHkgcmVjZWl2ZSBhZnRlciBuZXcgc3RhdGUgaXMgY29tcHV0ZWRcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLm1ldGEua2V5IGluIHRoaXMuZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgLy8gTm90ZTogbWV0YSAqbXVzdCogYmUgc2V0IGJ5IHJlZHVjZXIgc28gdGhpcyBzaG91bGQgYmUgc2FmZVxuICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmdldFN0YXRlKCkubWV0YVthY3Rpb24ubWV0YS5rZXldPy5lcnJvcjtcbiAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcgZXJyb3JzIHJlc3VsdCBpbiBzdGF0ZSBtZXRhIGhhdmluZyBlcnJvciwgc28gd2Ugc2hvdWxkIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBvbmx5IG5ldyBhY3Rpb24gdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWNlaXZlKGNyZWF0ZVJlY2VpdmVFcnJvcihlcnJvciwgYWN0aW9uLm1ldGEpKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVjZWl2ZShhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFJFU0VUX1RZUEU6IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVqZWN0b3JzID0geyAuLi50aGlzLnJlamVjdG9ycyB9O1xuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGwoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGVyZSBjb3VsZCBiZSBleHRlcm5hbCBsaXN0ZW5lcnMgdG8gdGhlIHByb21pc2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzIG11c3QgaGFwcGVuIGFmdGVyIGNvbW1pdCBzbyBvdXIgb3duIHJlamVjdG9yIGtub3dzIG5vdCB0byBkaXNwYXRjaCBhbiBlcnJvciBiYXNlZCBvbiB0aGlzXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIGluIHJlamVjdG9ycykge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0b3JzW2tdKG5ldyBSZXNldEVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIFVzZWQgYnkgRGV2dG9vbHNNYW5hZ2VyIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGxvZyBhbiBhY3Rpb24gKi9cbiAgc2tpcExvZ2dpbmcoYWN0aW9uOiBBY3Rpb25UeXBlcykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGFjdGlvbi50eXBlID09PSBGRVRDSF9UWVBFICYmIGFjdGlvbi5tZXRhLmtleSBpbiB0aGlzLmZldGNoZWQ7XG4gIH1cblxuICAvKiogT24gbW91bnQgKi9cbiAgaW5pdCgpIHtcbiAgICBkZWxldGUgdGhpcy5jbGVhbnVwRGF0ZTtcbiAgfVxuXG4gIC8qKiBFbnN1cmVzIGFsbCBwcm9taXNlcyBhcmUgY29tcGxldGVkIGJ5IHJlamVjdGluZyByZW1haW5pbmcuICovXG4gIGNsZWFudXAoKSB7XG4gICAgLy8gZW5zdXJlIG5vIGRpc3BhdGNoZXMgYWZ0ZXIgdW5tb3VudFxuICAgIC8vIHRoaXMgbXVzdCBiZSByZXZlcnNpYmxlIChkb25lIGluIGluaXQpIHNvIHVzZUVmZmVjdCgpIHJlbWFpbnMgc3ltbWV0cmljXG4gICAgdGhpcy5jbGVhbnVwRGF0ZSA9IERhdGUubm93KCk7XG4gIH1cblxuICBhbGxTZXR0bGVkKCkge1xuICAgIGNvbnN0IGZldGNoZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuZmV0Y2hlZCk7XG4gICAgaWYgKGZldGNoZXMubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGZldGNoZXMpO1xuICB9XG5cbiAgLyoqIENsZWFyIGFsbCBwcm9taXNlIHN0YXRlICovXG4gIHByb3RlY3RlZCBjbGVhckFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGsgaW4gdGhpcy5yZWplY3RvcnMpIHtcbiAgICAgIHRoaXMuY2xlYXIoayk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsZWFyIHByb21pc2Ugc3RhdGUgZm9yIGEgZ2l2ZW4ga2V5ICovXG4gIHByb3RlY3RlZCBjbGVhcihrZXk6IHN0cmluZykge1xuICAgIHRoaXMuZmV0Y2hlZFtrZXldLmNhdGNoKCgpID0+IHt9KTtcbiAgICBkZWxldGUgdGhpcy5yZXNvbHZlcnNba2V5XTtcbiAgICBkZWxldGUgdGhpcy5yZWplY3RvcnNba2V5XTtcbiAgICBkZWxldGUgdGhpcy5mZXRjaGVkW2tleV07XG4gICAgZGVsZXRlIHRoaXMuZmV0Y2hlZEF0W2tleV07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGFzdFJlc2V0KCkge1xuICAgIGlmICh0aGlzLmNsZWFudXBEYXRlKSByZXR1cm4gdGhpcy5jbGVhbnVwRGF0ZTtcbiAgICBjb25zdCBsYXN0UmVzZXQgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0U3RhdGUoKS5sYXN0UmVzZXQ7XG4gICAgaWYgKGxhc3RSZXNldCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBsYXN0UmVzZXQudmFsdWVPZigpO1xuICAgIGlmICh0eXBlb2YgbGFzdFJlc2V0ICE9PSAnbnVtYmVyJykgcmV0dXJuIC1JbmZpbml0eTtcbiAgICByZXR1cm4gbGFzdFJlc2V0O1xuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIG1pZGRsZXdhcmUgaW50ZXJjZXB0cyAncmVzdC1ob29rcy9mZXRjaCcgYWN0aW9uLlxuICAgKlxuICAgKiBXaWxsIHRoZW4gc3RhcnQgYSBwcm9taXNlIGZvciBhIGtleSBhbmQgcG90ZW50aWFsbHkgc3RhcnQgdGhlIG5ldHdvcmtcbiAgICogZmV0Y2guXG4gICAqXG4gICAqIFVzZXMgdGhyb3R0bGUgb25seSB3aGVuIGluc3RydWN0ZWQgYnkgYWN0aW9uIG1ldGEuIFRoaXMgaXMgdmFsdWFibGVcbiAgICogZm9yIGVuc3VyZXMgbXV0YXRpb24gcmVxdWVzdHMgYWx3YXlzIGdvIHRocm91Z2guXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlRmV0Y2goXG4gICAgYWN0aW9uOiBGZXRjaEFjdGlvbixcbiAgICBkaXNwYXRjaDogKGFjdGlvbjogYW55KSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICkge1xuICAgIGNvbnN0IGZldGNoID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgY29uc3QgeyBrZXksIHRocm90dGxlLCByZXNvbHZlLCByZWplY3QgfSA9IGFjdGlvbi5tZXRhO1xuICAgIC8vIFRPRE8oYnJlYWtpbmcpOiByZW1vdmUgc3VwcG9ydCBmb3IgRGF0ZSB0eXBlIGluICdSZWNlaXZlJyBhY3Rpb25cbiAgICBjb25zdCBjcmVhdGVkQXQgPVxuICAgICAgdHlwZW9mIGFjdGlvbi5tZXRhLmNyZWF0ZWRBdCAhPT0gJ251bWJlcidcbiAgICAgICAgPyBhY3Rpb24ubWV0YS5jcmVhdGVkQXQuZ2V0VGltZSgpXG4gICAgICAgIDogYWN0aW9uLm1ldGEuY3JlYXRlZEF0O1xuXG4gICAgY29uc3QgZGVmZXJlZEZldGNoID0gKCkgPT4ge1xuICAgICAgbGV0IHByb21pc2UgPSBmZXRjaCgpO1xuICAgICAgY29uc3QgcmVzb2x2ZVByb21pc2UgPSAoXG4gICAgICAgIHByb21pc2U6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0IHwgbnVsbD4sXG4gICAgICApID0+XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAvLyBzY2hlZHVsZSBub24tdGhyb3R0bGVkIHJlc29sdXRpb25zIGluIGEgbWljcm90YXNrIGJlZm9yZSByZWNlaXZlXG4gICAgICAvLyB0aGlzIGVuYWJsZXMgdXNlcnMgYXdhaXRpbmcgdGhlaXIgZmV0Y2ggdG8gdHJpZ2dlciBhbnkgcmVhY3QgdXBkYXRlcyBuZWVkZWQgdG8gZGVhbFxuICAgICAgLy8gd2l0aCB1cGNvbWluZyBjaGFuZ2VzIGJlY2F1c2Ugb2YgdGhlIGZldGNoIChmb3IgaW5zdGFuY2UgYXZvaWRpbmcgc3VzcGVuc2UgaWYgc29tZXRoaW5nIGlzIGRlbGV0ZWQpXG4gICAgICBpZiAoIXRocm90dGxlICYmIGFjdGlvbi5lbmRwb2ludCkge1xuICAgICAgICBwcm9taXNlID0gcmVzb2x2ZVByb21pc2UocHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBwcm9taXNlID0gcHJvbWlzZVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBsZXQgbGFzdFJlc2V0ID0gdGhpcy5nZXRMYXN0UmVzZXQoKTtcblxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNOYU4obGFzdFJlc2V0KSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ3N0YXRlLmxhc3RSZXNldCBpcyBOYU4uIE9ubHkgcG9zaXRpdmUgdGltZXN0YW1wcyBhcmUgdmFsaWQuJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsYXN0UmVzZXQgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSBzdGF0ZSB3aXRoIHByb21pc2VzIHN0YXJ0ZWQgYmVmb3JlIGxhc3QgY2xlYXJcbiAgICAgICAgICBpZiAoY3JlYXRlZEF0ID49IGxhc3RSZXNldCkge1xuICAgICAgICAgICAgLy8gd2Ugc3RpbGwgY2hlY2sgZm9yIGNvbnRyb2xsZXIgaW4gY2FzZSBzb21lb25lIGRpZG4ndCBoYXZlIHR5cGUgcHJvdGVjdGlvbiBzaW5jZSB0aGlzIGRpZG4ndCBhbHdheXMgZXhpc3RcbiAgICAgICAgICAgIGlmIChhY3Rpb24uZW5kcG9pbnQgJiYgdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5yZXNvbHZlKGFjdGlvbi5lbmRwb2ludCwge1xuICAgICAgICAgICAgICAgIGFyZ3M6IGFjdGlvbi5tZXRhLmFyZ3MgYXMgYW55LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRPRE8oYnJlYWtpbmcpOiBpcyB0aGlzIGJyYW5jaCBzdGlsbCBwb3NzaWJsZT8gcmVtb3ZlIGluIG5leHQgbWFqb3IgdXBkYXRlXG4gICAgICAgICAgICAgIC8vIGRvZXMgdGhpcyB0aHJvdyBpZiB0aGUgcmVkdWNlciBmYWlscz8gLSBubyBiZWNhdXNlIHJlZHVjZXIgaXMgd3JhcHBlZCBpbiB0cnkvY2F0Y2hcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZVJlY2VpdmUoZGF0YSwge1xuICAgICAgICAgICAgICAgICAgLi4uYWN0aW9uLm1ldGEsXG4gICAgICAgICAgICAgICAgICBmZXRjaGVkQXQ6IGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICAgIGRhdGFFeHBpcnlMZW5ndGg6XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGlvbnM/LmRhdGFFeHBpcnlMZW5ndGggPz9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRXhwaXJ5TGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zdCBsYXN0UmVzZXQgPSB0aGlzLmdldExhc3RSZXNldCgpO1xuICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSBzdGF0ZSB3aXRoIHByb21pc2VzIHN0YXJ0ZWQgYmVmb3JlIGxhc3QgY2xlYXJcbiAgICAgICAgICBpZiAoY3JlYXRlZEF0ID49IGxhc3RSZXNldCkge1xuICAgICAgICAgICAgaWYgKGFjdGlvbi5lbmRwb2ludCAmJiB0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlc29sdmUoYWN0aW9uLmVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgYXJnczogYWN0aW9uLm1ldGEuYXJncyBhcyBhbnksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IGVycm9yLFxuICAgICAgICAgICAgICAgIGZldGNoZWRBdDogY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBjcmVhdGVSZWNlaXZlRXJyb3IoZXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgIC4uLmFjdGlvbi5tZXRhLFxuICAgICAgICAgICAgICAgICAgZXJyb3JFeHBpcnlMZW5ndGg6XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5tZXRhLm9wdGlvbnM/LmVycm9yRXhwaXJ5TGVuZ3RoID8/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JFeHBpcnlMZW5ndGgsXG4gICAgICAgICAgICAgICAgICBmZXRjaGVkQXQ6IGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgLy8gbGVnYWN5IGJlaGF2aW9yIHNjaGVkdWxlcyByZXNvbHV0aW9uIGFmdGVyIGRpc3BhdGNoXG4gICAgICBpZiAoIXRocm90dGxlICYmICFhY3Rpb24uZW5kcG9pbnQpIHtcbiAgICAgICAgcHJvbWlzZSA9IHJlc29sdmVQcm9taXNlKHByb21pc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGlmICh0aHJvdHRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGhyb3R0bGUoa2V5LCBkZWZlcmVkRmV0Y2gsIGNyZWF0ZWRBdClcbiAgICAgICAgLnRoZW4oZGF0YSA9PiByZXNvbHZlKGRhdGEpKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWZlcmVkRmV0Y2goKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIG1pZGRsZXdhcmUgaW50ZXJjZXB0cyBhIHJlY2VpdmUgYWN0aW9uLlxuICAgKlxuICAgKiBXaWxsIHJlc29sdmUgdGhlIHByb21pc2UgYXNzb2NpYXRlZCB3aXRoIHJlY2VpdmUga2V5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZVJlY2VpdmUoYWN0aW9uOiBSZWNlaXZlQWN0aW9uKSB7XG4gICAgLy8gdGhpcyBjYW4gc3RpbGwgdHVybiBvdXQgdG8gYmUgdW50cnVlIHNpbmNlIHRoaXMgaXMgYXN5bmNcbiAgICBpZiAoYWN0aW9uLm1ldGEua2V5IGluIHRoaXMuZmV0Y2hlZCkge1xuICAgICAgbGV0IHByb21pc2VIYW5kbGVyOiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XG4gICAgICBpZiAoYWN0aW9uLmVycm9yKSB7XG4gICAgICAgIHByb21pc2VIYW5kbGVyID0gdGhpcy5yZWplY3RvcnNbYWN0aW9uLm1ldGEua2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb21pc2VIYW5kbGVyID0gdGhpcy5yZXNvbHZlcnNbYWN0aW9uLm1ldGEua2V5XTtcbiAgICAgIH1cbiAgICAgIHByb21pc2VIYW5kbGVyKGFjdGlvbi5wYXlsb2FkKTtcbiAgICAgIC8vIHNpbmNlIHdlJ3JlIHJlc29sdmVkIHdlIG5vIGxvbmdlciBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBwcm9taXNlXG4gICAgICB0aGlzLmNsZWFyKGFjdGlvbi5tZXRhLmtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEF0dGFjaGVzIE5ldHdvcmtNYW5hZ2VyIHRvIHN0b3JlXG4gICAqXG4gICAqIEludGVyY2VwdHMgJ3Jlc3QtaG9va3MvZmV0Y2gnIGFjdGlvbnMgdG8gc3RhcnQgcmVxdWVzdHMuXG4gICAqXG4gICAqIFJlc29sdmUvcmVqZWN0cyBhIHJlcXVlc3Qgd2hlbiBtYXRjaGluZyAncmVzdC1ob29rcy9yZWNlaXZlJyBldmVudFxuICAgKiBpcyBzZWVuLlxuICAgKi9cbiAgZ2V0TWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5taWRkbGV3YXJlO1xuICB9XG5cbiAgLyoqIEVuc3VyZXMgb25seSBvbmUgcmVxdWVzdCBmb3IgYSBnaXZlbiBrZXkgaXMgaW4gZmxpZ2h0IGF0IGFueSB0aW1lXG4gICAqXG4gICAqIFVzZXMga2V5IHRvIGVpdGhlciByZXRyaWV2ZSBpbi1mbGlnaHQgcHJvbWlzZSwgb3IgaWYgbm90XG4gICAqIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGFuZCBjYWxsIGZldGNoLlxuICAgKlxuICAgKiBOb3RlOiBUaGUgbmV3IHByb21pc2UgaXMgbm90IGFjdHVhbGx5IHRpZWQgdG8gZmV0Y2ggYXQgYWxsLFxuICAgKiBidXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgZXhwZWN0ZWQgJ3JlY2lldmUnIGFjdGlvbiBpcyBwcm9jZXNzZWQuXG4gICAqIFRoaXMgZW5zdXJlcyBwcm9taXNlcyBhcmUgcmVzb2x2ZWQgb25seSBvbmNlIHRoZWlyIGRhdGEgaXMgcHJvY2Vzc2VkXG4gICAqIGJ5IHRoZSByZWR1Y2VyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRocm90dGxlKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZldGNoOiAoKSA9PiBQcm9taXNlPGFueT4sXG4gICAgY3JlYXRlZEF0OiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IGxhc3RSZXNldCA9IHRoaXMuZ2V0TGFzdFJlc2V0KCk7XG4gICAgLy8gd2UncmUgYWxyZWFkeSBmZXRjaGluZyBzbyByZXVzZSB0aGUgcHJvbWlzZVxuICAgIC8vIGZldGNoZXMgYWZ0ZXIgcmVzZXQgZG8gbm90IGNvdW50XG4gICAgaWYgKGtleSBpbiB0aGlzLmZldGNoZWQgJiYgdGhpcy5mZXRjaGVkQXRba2V5XSA+IGxhc3RSZXNldCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hlZFtrZXldO1xuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hlZFtrZXldID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlcnNba2V5XSA9IHJlc29sdmU7XG4gICAgICB0aGlzLnJlamVjdG9yc1trZXldID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHRoaXMuZmV0Y2hlZEF0W2tleV0gPSBjcmVhdGVkQXQ7XG5cbiAgICAvLyBzaW5jZSBvdXIgcmVhbCBwcm9taXNlIGlzIHJlc29sdmVkIHZpYSB0aGUgd3JhcFJlZHVjZXIoKSxcbiAgICAvLyB3ZSBzaG91bGQganVzdCBzdG9wIGFsbCBlcnJvcnMgaGVyZS5cbiAgICAvLyBUT0RPOiBkZWNvdXBsZSB0aGlzIGZyb20gdXNlRmV0Y2hlcigpICh0aGF0J3Mgd2hhdCdzIGRpc3BhdGNoaW5nIHRoZSBlcnJvciB0aGUgcmVzb2x2ZXMgaW4gaGVyZSlcbiAgICBSSUMoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGZldGNoKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICB9LFxuICAgICAgeyB0aW1lb3V0OiA1MDAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hlZFtrZXldO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLFFBQVEsbUJBQW1CO0FBQ3BFLE9BQU9DLFVBQVUsTUFBTSw2QkFBNkI7QUFDcEQsU0FBU0MsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUNFQyxhQUFhLEVBQ2JDLGtCQUFrQixRQUNiLGtDQUFrQztBQUN6QyxPQUFPQyxHQUFHLE1BQU0saUJBQWlCO0FBV2pDLE9BQU8sTUFBTUMsVUFBVSxTQUFTQyxLQUFLLENBQUM7RUFHcENDLFdBQVdBLENBQUEsRUFBRztJQUNaLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztJQUFDLEtBSGhDQyxJQUFJLEdBQUcsWUFBWTtFQUluQjtBQUNG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 |
@@ -8,3 +8,3 @@ import createOptimistic from '../../controller/createOptimistic.js'; | ||
let receiveAction; | ||
if (getOptimisticResponse && action.endpoint) { | ||
if (getOptimisticResponse && action.endpoint && action.endpoint.sideEffect) { | ||
receiveAction = createOptimistic(action.endpoint, { | ||
@@ -35,2 +35,2 @@ args: action.meta.args, | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVPcHRpbWlzdGljIiwiY3JlYXRlUmVjZWl2ZSIsImxlZ2FjeUNyZWF0ZVJlY2VpdmUiLCJmZXRjaFJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsIl9hY3Rpb24kZW5kcG9pbnQiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJtZXRhIiwiZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIiwiZW5kcG9pbnQiLCJyZWNlaXZlQWN0aW9uIiwiYXJncyIsImZldGNoZWRBdCIsImNyZWF0ZWRBdCIsImdldFRpbWUiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwiSW5maW5pdHkiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwid2FybiIsIm9wdGltaXN0aWMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhdGUvcmVkdWNlci9mZXRjaFJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZU9wdGltaXN0aWMgZnJvbSAnLi4vLi4vY29udHJvbGxlci9jcmVhdGVPcHRpbWlzdGljLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgUmVjZWl2ZUFjdGlvbixcbiAgT3B0aW1pc3RpY0FjdGlvbixcbiAgRmV0Y2hBY3Rpb24sXG59IGZyb20gJy4uLy4uL3ByZXZpb3VzQWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlUmVjZWl2ZSBhcyBsZWdhY3lDcmVhdGVSZWNlaXZlIH0gZnJvbSAnLi4vbGVnYWN5LWFjdGlvbnMvaW5kZXguanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hSZWR1Y2VyKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgYWN0aW9uOiBGZXRjaEFjdGlvbikge1xuICBjb25zdCBvcHRpbWlzdGljUmVzcG9uc2UgPSBhY3Rpb24ubWV0YS5vcHRpbWlzdGljUmVzcG9uc2U7XG4gIGNvbnN0IGdldE9wdGltaXN0aWNSZXNwb25zZSA9IGFjdGlvbi5lbmRwb2ludD8uZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlO1xuICBsZXQgcmVjZWl2ZUFjdGlvbjogUmVjZWl2ZUFjdGlvbiB8IE9wdGltaXN0aWNBY3Rpb247XG5cbiAgaWYgKGdldE9wdGltaXN0aWNSZXNwb25zZSAmJiBhY3Rpb24uZW5kcG9pbnQpIHtcbiAgICByZWNlaXZlQWN0aW9uID0gY3JlYXRlT3B0aW1pc3RpYyhhY3Rpb24uZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IGFjdGlvbi5tZXRhLmFyZ3MgYXMgcmVhZG9ubHkgYW55W10sXG4gICAgICBmZXRjaGVkQXQ6XG4gICAgICAgIHR5cGVvZiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQgIT09ICdudW1iZXInXG4gICAgICAgICAgPyBhY3Rpb24ubWV0YS5jcmVhdGVkQXQuZ2V0VGltZSgpXG4gICAgICAgICAgOiBhY3Rpb24ubWV0YS5jcmVhdGVkQXQsXG4gICAgfSkgYXMgYW55O1xuICB9IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyBlbHNlIGlmIChvcHRpbWlzdGljUmVzcG9uc2UpIHtcbiAgICAvLyBUT0RPKGJyZWFraW5nKTogdGhpcyBpcyBubyBsb25nZXIgdXNlZCwgcmVtb3ZlIHRoaXMgYnJhbmNoXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZWNlaXZlQWN0aW9uID0gbGVnYWN5Q3JlYXRlUmVjZWl2ZShvcHRpbWlzdGljUmVzcG9uc2UsIHtcbiAgICAgIC4uLmFjdGlvbi5tZXRhLFxuICAgICAgZGF0YUV4cGlyeUxlbmd0aDogSW5maW5pdHksXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgJ2ZldGNoJyBhY3Rpb24gcmVhY2hlcyB0aGUgcmVkdWNlciB0aGVyZSBhcmUgbm8gbWlkZGxld2FyZXMgaW5zdGFsbGVkIHRvIGhhbmRsZSBpdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0ZldGNoIGFwcGVhcnMgdW5oYW5kbGVkIC0geW91IGFyZSBsaWtlbHkgbWlzc2luZyB0aGUgTmV0d29ya01hbmFnZXIgbWlkZGxld2FyZScsXG4gICAgICApO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnU2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvZ3VpZGVzL3JlZHV4I2luZGV4dHN4IGZvciBob29raW5nIHVwIHJlZHV4JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgb3B0aW1pc3RpYzogWy4uLnN0YXRlLm9wdGltaXN0aWMsIHJlY2VpdmVBY3Rpb25dLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsTUFBTSxzQ0FBc0M7QUFPbkUsU0FBU0MsYUFBYSxJQUFJQyxtQkFBbUIsUUFBUSw0QkFBNEI7QUFFakYsT0FBTyxTQUFTQyxZQUFZQSxDQUFDQyxLQUFxQixFQUFFQyxNQUFtQixFQUFFO0VBQUEsSUFBQUMsZ0JBQUE7RUFDdkUsTUFBTUMsa0JBQWtCLEdBQUdGLE1BQU0sQ0FBQ0csSUFBSSxDQUFDRCxrQkFBa0I7RUFDekQsTUFBTUUscUJBQXFCLElBQUFILGdCQUFBLEdBQUdELE1BQU0sQ0FBQ0ssUUFBUSxxQkFBZkosZ0JBQUEsQ0FBaUJHLHFCQUFxQjtFQUNwRSxJQUFJRSxhQUErQztFQUVuRCxJQUFJRixxQkFBcUIsSUFBSUosTUFBTSxDQUFDSyxRQUFRLEVBQUU7SUFDNUNDLGFBQWEsR0FBR1gsZ0JBQWdCLENBQUNLLE1BQU0sQ0FBQ0ssUUFBUSxFQUFFO01BQ2hERSxJQUFJLEVBQUVQLE1BQU0sQ0FBQ0csSUFBSSxDQUFDSSxJQUFzQjtNQUN4Q0MsU0FBUyxFQUNQLE9BQU9SLE1BQU0sQ0FBQ0csSUFBSSxDQUFDTSxTQUFTLEtBQUssUUFBUSxHQUNyQ1QsTUFBTSxDQUFDRyxJQUFJLENBQUNNLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsR0FDL0JWLE1BQU0sQ0FBQ0csSUFBSSxDQUFDTTtJQUNwQixDQUFDLENBQVE7RUFDWCxDQUFDLENBQUMsNkJBQThCLElBQUlQLGtCQUFrQixFQUFFO0lBQ3REO0lBQ0E7SUFDQUksYUFBYSxHQUFHVCxtQkFBbUIsQ0FBQ0ssa0JBQWtCLEVBQUU7TUFDdEQsR0FBR0YsTUFBTSxDQUFDRyxJQUFJO01BQ2RRLGdCQUFnQixFQUFFQztJQUNwQixDQUFDLENBQUM7RUFDSixDQUFDLE1BQU07SUFDTDtJQUNBO0lBQ0EsSUFBSUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLEVBQUU7TUFDekNDLE9BQU8sQ0FBQ0MsSUFBSSxDQUNWLGdGQUNGLENBQUM7TUFDREQsT0FBTyxDQUFDQyxJQUFJLENBQ1YsMEVBQ0YsQ0FBQztJQUNIO0lBRUEsT0FBT2xCLEtBQUs7RUFDZDtFQUNBLE9BQU87SUFDTCxHQUFHQSxLQUFLO0lBQ1JtQixVQUFVLEVBQUUsQ0FBQyxHQUFHbkIsS0FBSyxDQUFDbUIsVUFBVSxFQUFFWixhQUFhO0VBQ2pELENBQUM7QUFDSCJ9 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVPcHRpbWlzdGljIiwiY3JlYXRlUmVjZWl2ZSIsImxlZ2FjeUNyZWF0ZVJlY2VpdmUiLCJmZXRjaFJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsIl9hY3Rpb24kZW5kcG9pbnQiLCJvcHRpbWlzdGljUmVzcG9uc2UiLCJtZXRhIiwiZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIiwiZW5kcG9pbnQiLCJyZWNlaXZlQWN0aW9uIiwic2lkZUVmZmVjdCIsImFyZ3MiLCJmZXRjaGVkQXQiLCJjcmVhdGVkQXQiLCJnZXRUaW1lIiwiZGF0YUV4cGlyeUxlbmd0aCIsIkluZmluaXR5IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iLCJvcHRpbWlzdGljIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL3JlZHVjZXIvZmV0Y2hSZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVPcHRpbWlzdGljIGZyb20gJy4uLy4uL2NvbnRyb2xsZXIvY3JlYXRlT3B0aW1pc3RpYy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJlY2VpdmVBY3Rpb24sXG4gIE9wdGltaXN0aWNBY3Rpb24sXG4gIEZldGNoQWN0aW9uLFxufSBmcm9tICcuLi8uLi9wcmV2aW91c0FjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVJlY2VpdmUgYXMgbGVnYWN5Q3JlYXRlUmVjZWl2ZSB9IGZyb20gJy4uL2xlZ2FjeS1hY3Rpb25zL2luZGV4LmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoUmVkdWNlcihzdGF0ZTogU3RhdGU8dW5rbm93bj4sIGFjdGlvbjogRmV0Y2hBY3Rpb24pIHtcbiAgY29uc3Qgb3B0aW1pc3RpY1Jlc3BvbnNlID0gYWN0aW9uLm1ldGEub3B0aW1pc3RpY1Jlc3BvbnNlO1xuICBjb25zdCBnZXRPcHRpbWlzdGljUmVzcG9uc2UgPSBhY3Rpb24uZW5kcG9pbnQ/LmdldE9wdGltaXN0aWNSZXNwb25zZTtcbiAgbGV0IHJlY2VpdmVBY3Rpb246IFJlY2VpdmVBY3Rpb24gfCBPcHRpbWlzdGljQWN0aW9uO1xuXG4gIGlmIChnZXRPcHRpbWlzdGljUmVzcG9uc2UgJiYgYWN0aW9uLmVuZHBvaW50ICYmIGFjdGlvbi5lbmRwb2ludC5zaWRlRWZmZWN0KSB7XG4gICAgcmVjZWl2ZUFjdGlvbiA9IGNyZWF0ZU9wdGltaXN0aWMoYWN0aW9uLmVuZHBvaW50LCB7XG4gICAgICBhcmdzOiBhY3Rpb24ubWV0YS5hcmdzIGFzIHJlYWRvbmx5IGFueVtdLFxuICAgICAgZmV0Y2hlZEF0OlxuICAgICAgICB0eXBlb2YgYWN0aW9uLm1ldGEuY3JlYXRlZEF0ICE9PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYWN0aW9uLm1ldGEuY3JlYXRlZEF0LmdldFRpbWUoKVxuICAgICAgICAgIDogYWN0aW9uLm1ldGEuY3JlYXRlZEF0LFxuICAgIH0pIGFzIGFueTtcbiAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gZWxzZSBpZiAob3B0aW1pc3RpY1Jlc3BvbnNlKSB7XG4gICAgLy8gVE9ETyhicmVha2luZyk6IHRoaXMgaXMgbm8gbG9uZ2VyIHVzZWQsIHJlbW92ZSB0aGlzIGJyYW5jaFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmVjZWl2ZUFjdGlvbiA9IGxlZ2FjeUNyZWF0ZVJlY2VpdmUob3B0aW1pc3RpY1Jlc3BvbnNlLCB7XG4gICAgICAuLi5hY3Rpb24ubWV0YSxcbiAgICAgIGRhdGFFeHBpcnlMZW5ndGg6IEluZmluaXR5LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIElmICdmZXRjaCcgYWN0aW9uIHJlYWNoZXMgdGhlIHJlZHVjZXIgdGhlcmUgYXJlIG5vIG1pZGRsZXdhcmVzIGluc3RhbGxlZCB0byBoYW5kbGUgaXRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdGZXRjaCBhcHBlYXJzIHVuaGFuZGxlZCAtIHlvdSBhcmUgbGlrZWx5IG1pc3NpbmcgdGhlIE5ldHdvcmtNYW5hZ2VyIG1pZGRsZXdhcmUnLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2d1aWRlcy9yZWR1eCNpbmRleHRzeCBmb3IgaG9va2luZyB1cCByZWR1eCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG9wdGltaXN0aWM6IFsuLi5zdGF0ZS5vcHRpbWlzdGljLCByZWNlaXZlQWN0aW9uXSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsZ0JBQWdCLE1BQU0sc0NBQXNDO0FBT25FLFNBQVNDLGFBQWEsSUFBSUMsbUJBQW1CLFFBQVEsNEJBQTRCO0FBRWpGLE9BQU8sU0FBU0MsWUFBWUEsQ0FBQ0MsS0FBcUIsRUFBRUMsTUFBbUIsRUFBRTtFQUFBLElBQUFDLGdCQUFBO0VBQ3ZFLE1BQU1DLGtCQUFrQixHQUFHRixNQUFNLENBQUNHLElBQUksQ0FBQ0Qsa0JBQWtCO0VBQ3pELE1BQU1FLHFCQUFxQixJQUFBSCxnQkFBQSxHQUFHRCxNQUFNLENBQUNLLFFBQVEscUJBQWZKLGdCQUFBLENBQWlCRyxxQkFBcUI7RUFDcEUsSUFBSUUsYUFBK0M7RUFFbkQsSUFBSUYscUJBQXFCLElBQUlKLE1BQU0sQ0FBQ0ssUUFBUSxJQUFJTCxNQUFNLENBQUNLLFFBQVEsQ0FBQ0UsVUFBVSxFQUFFO0lBQzFFRCxhQUFhLEdBQUdYLGdCQUFnQixDQUFDSyxNQUFNLENBQUNLLFFBQVEsRUFBRTtNQUNoREcsSUFBSSxFQUFFUixNQUFNLENBQUNHLElBQUksQ0FBQ0ssSUFBc0I7TUFDeENDLFNBQVMsRUFDUCxPQUFPVCxNQUFNLENBQUNHLElBQUksQ0FBQ08sU0FBUyxLQUFLLFFBQVEsR0FDckNWLE1BQU0sQ0FBQ0csSUFBSSxDQUFDTyxTQUFTLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEdBQy9CWCxNQUFNLENBQUNHLElBQUksQ0FBQ087SUFDcEIsQ0FBQyxDQUFRO0VBQ1gsQ0FBQyxDQUFDLDZCQUE4QixJQUFJUixrQkFBa0IsRUFBRTtJQUN0RDtJQUNBO0lBQ0FJLGFBQWEsR0FBR1QsbUJBQW1CLENBQUNLLGtCQUFrQixFQUFFO01BQ3RELEdBQUdGLE1BQU0sQ0FBQ0csSUFBSTtNQUNkUyxnQkFBZ0IsRUFBRUM7SUFDcEIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxNQUFNO0lBQ0w7SUFDQTtJQUNBLElBQUlDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLEtBQUssWUFBWSxFQUFFO01BQ3pDQyxPQUFPLENBQUNDLElBQUksQ0FDVixnRkFDRixDQUFDO01BQ0RELE9BQU8sQ0FBQ0MsSUFBSSxDQUNWLDBFQUNGLENBQUM7SUFDSDtJQUVBLE9BQU9uQixLQUFLO0VBQ2Q7RUFDQSxPQUFPO0lBQ0wsR0FBR0EsS0FBSztJQUNSb0IsVUFBVSxFQUFFLENBQUMsR0FBR3BCLEtBQUssQ0FBQ29CLFVBQVUsRUFBRWIsYUFBYTtFQUNqRCxDQUFDO0FBQ0gifQ== |
{ | ||
"name": "@rest-hooks/core", | ||
"version": "4.4.1", | ||
"version": "4.4.2", | ||
"description": "Normalized Asynchronous data framework. Protocol and View agnostic.", | ||
@@ -125,4 +125,4 @@ "sideEffects": false, | ||
"@anansi/browserslist-config": "^1.4.2", | ||
"@types/node": "^18.15.10" | ||
"@types/node": "^20.0.0" | ||
} | ||
} |
@@ -69,3 +69,4 @@ import { SET_TYPE, FETCH_TYPE, RESET_TYPE } from '../actionTypes.js'; | ||
action.meta.optimisticResponse !== undefined || | ||
action.endpoint?.getOptimisticResponse !== undefined | ||
(action.endpoint?.getOptimisticResponse !== undefined && | ||
action.endpoint.sideEffect) | ||
) { | ||
@@ -72,0 +73,0 @@ return next(action); |
@@ -15,3 +15,3 @@ import createOptimistic from '../../controller/createOptimistic.js'; | ||
if (getOptimisticResponse && action.endpoint) { | ||
if (getOptimisticResponse && action.endpoint && action.endpoint.sideEffect) { | ||
receiveAction = createOptimistic(action.endpoint, { | ||
@@ -18,0 +18,0 @@ args: action.meta.args as readonly any[], |
Sorry, the diff of this file is not supported yet
1080123
14333