@data-client/core 0.14.19 → 0.14.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +5 -8
- package/dist/index.umd.min.js +1 -1
- package/legacy/controller/Controller.js +4 -5
- package/legacy/controller/actions/createFetch.js +2 -3
- package/legacy/controller/ensurePojo.js +2 -3
- package/legacy/manager/DevtoolsManager.js +6 -10
- package/legacy/manager/NetworkManager.js +4 -6
- package/legacy/manager/PollingSubscription.js +3 -6
- package/legacy/manager/SubscriptionManager.js +3 -4
- package/legacy/state/GCPolicy.js +5 -7
- package/lib/manager/DevtoolsManager.js +3 -7
- package/lib/manager/NetworkManager.js +2 -3
- package/lib/state/GCPolicy.js +5 -7
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var normalizr = require('@data-client/normalizr');
|
|
4
|
-
var _pushInstanceProperty = require('core-js-pure/stable/instance/push.js');
|
|
5
4
|
|
|
6
5
|
function expireReducer(state, action) {
|
|
7
6
|
const meta = {
|
|
@@ -551,10 +550,9 @@ class GCPolicy {
|
|
|
551
550
|
const entityCount = instanceCount.get(path.pk);
|
|
552
551
|
if (entityCount !== undefined) {
|
|
553
552
|
if (entityCount <= 1) {
|
|
554
|
-
var _context;
|
|
555
553
|
instanceCount.delete(path.pk);
|
|
556
554
|
// queue for cleanup
|
|
557
|
-
|
|
555
|
+
this.entitiesQ.push(path);
|
|
558
556
|
} else {
|
|
559
557
|
instanceCount.set(path.pk, entityCount - 1);
|
|
560
558
|
}
|
|
@@ -582,7 +580,7 @@ class GCPolicy {
|
|
|
582
580
|
date: 0,
|
|
583
581
|
expiresAt: 0
|
|
584
582
|
}) < now) {
|
|
585
|
-
|
|
583
|
+
endpoints.push(key);
|
|
586
584
|
} else {
|
|
587
585
|
nextEndpointsQ.add(key);
|
|
588
586
|
}
|
|
@@ -596,9 +594,9 @@ class GCPolicy {
|
|
|
596
594
|
date: 0,
|
|
597
595
|
expiresAt: 0
|
|
598
596
|
}) < now) {
|
|
599
|
-
|
|
597
|
+
entities.push(path);
|
|
600
598
|
} else {
|
|
601
|
-
|
|
599
|
+
nextEntitiesQ.push(path);
|
|
602
600
|
}
|
|
603
601
|
}
|
|
604
602
|
this.entitiesQ = nextEntitiesQ;
|
|
@@ -1725,12 +1723,11 @@ class DevToolsManager {
|
|
|
1725
1723
|
if (this.started) {
|
|
1726
1724
|
this.devTools.send(action, state);
|
|
1727
1725
|
} else {
|
|
1728
|
-
var _context;
|
|
1729
1726
|
// avoid this getting too big in case this is long running
|
|
1730
1727
|
// we cut in half so we aren't constantly reallocating
|
|
1731
1728
|
if (this.actions.length > this.maxBufferLength) this.actions = this.actions.slice(this.maxBufferLength / 2);
|
|
1732
1729
|
// queue actions
|
|
1733
|
-
|
|
1730
|
+
this.actions.push([action, state]);
|
|
1734
1731
|
}
|
|
1735
1732
|
}
|
|
1736
1733
|
|
package/dist/index.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).RDC=t.RDC||{},t.RDC.Core={}))}(this,(function(t){"use strict";var e,n,r,i,o,s,u,c,a="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function l(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function f(){return n?e:(n=1,e=function(t){try{return!!t()}catch(t){return!0}})}function h(){return i?r:(i=1,r=!f()((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})))}function d(){if(s)return o;s=1;var t=h(),e=Function.prototype,n=e.call,r=t&&e.bind.bind(n,n);return o=t?r:function(t){return function(){return n.apply(t,arguments)}},o}function p(){return c?u:(c=1,u=d()({}.isPrototypeOf))}var y,v,g,m,b,w,E,S,A,O,k={};function x(){if(v)return y;v=1;var t=function(t){return t&&t.Math===Math&&t};return y=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof a&&a)||t("object"==typeof y&&y)||function(){return this}()||Function("return this")()}function I(){if(m)return g;m=1;var t=h(),e=Function.prototype,n=e.apply,r=e.call;return g="object"==typeof Reflect&&Reflect.apply||(t?r.bind(n):function(){return r.apply(n,arguments)}),g}function j(){if(w)return b;w=1;var t=d(),e=t({}.toString),n=t("".slice);return b=function(t){return n(e(t),8,-1)}}function L(){if(S)return E;S=1;var t=j(),e=d();return E=function(n){if("Function"===t(n))return e(n)}}function C(){if(O)return A;O=1;var t="object"==typeof document&&document.all;return A=void 0===t&&void 0!==t?function(e){return"function"==typeof e||e===t}:function(t){return"function"==typeof t}}var P,R,T,M,_={};function D(){return R?P:(R=1,P=!f()((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})))}function q(){if(M)return T;M=1;var t=h(),e=Function.prototype.call;return T=t?e.bind(e):function(){return e.apply(e,arguments)},T}var N,z,K,F,B,U,H,Q,V,Y,J,$,W,X,G,Z,tt,et,nt,rt,it,ot,st,ut,ct,at,lt,ft,ht,dt,pt,yt,vt,gt,mt,bt={};function wt(){if(N)return bt;N=1;var t={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,n=e&&!t.call({1:2},1);return bt.f=n?function(t){var n=e(this,t);return!!n&&n.enumerable}:t,bt}function Et(){return K?z:(K=1,z=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}})}function St(){if(B)return F;B=1;var t=d(),e=f(),n=j(),r=Object,i=t("".split);return F=e((function(){return!r("z").propertyIsEnumerable(0)}))?function(t){return"String"===n(t)?i(t,""):r(t)}:r}function At(){return H?U:(H=1,U=function(t){return null==t})}function Ot(){if(V)return Q;V=1;var t=At(),e=TypeError;return Q=function(n){if(t(n))throw new e("Can't call method on "+n);return n}}function kt(){if(J)return Y;J=1;var t=St(),e=Ot();return Y=function(n){return t(e(n))}}function xt(){if(W)return $;W=1;var t=C();return $=function(e){return"object"==typeof e?null!==e:t(e)}}function It(){return G?X:(G=1,X={})}function jt(){if(tt)return Z;tt=1;var t=It(),e=x(),n=C(),r=function(t){return n(t)?t:void 0};return Z=function(n,i){return arguments.length<2?r(t[n])||r(e[n]):t[n]&&t[n][i]||e[n]&&e[n][i]},Z}function Lt(){if(nt)return et;nt=1;var t=x().navigator,e=t&&t.userAgent;return et=e?String(e):""}function Ct(){if(it)return rt;it=1;var t,e,n=x(),r=Lt(),i=n.process,o=n.Deno,s=i&&i.versions||o&&o.version,u=s&&s.v8;return u&&(e=(t=u.split("."))[0]>0&&t[0]<4?1:+(t[0]+t[1])),!e&&r&&(!(t=r.match(/Edge\/(\d+)/))||t[1]>=74)&&(t=r.match(/Chrome\/(\d+)/))&&(e=+t[1]),rt=e}function Pt(){if(st)return ot;st=1;var t=Ct(),e=f(),n=x().String;return ot=!!Object.getOwnPropertySymbols&&!e((function(){var e=Symbol("symbol detection");return!n(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&t&&t<41}))}function Rt(){return ct?ut:(ct=1,ut=Pt()&&!Symbol.sham&&"symbol"==typeof Symbol.iterator)}function Tt(){if(lt)return at;lt=1;var t=jt(),e=C(),n=p(),r=Object;return at=Rt()?function(t){return"symbol"==typeof t}:function(i){var o=t("Symbol");return e(o)&&n(o.prototype,r(i))}}function Mt(){if(ht)return ft;ht=1;var t=String;return ft=function(e){try{return t(e)}catch(t){return"Object"}}}function _t(){if(pt)return dt;pt=1;var t=C(),e=Mt(),n=TypeError;return dt=function(r){if(t(r))return r;throw new n(e(r)+" is not a function")}}function Dt(){if(vt)return yt;vt=1;var t=_t(),e=At();return yt=function(n,r){var i=n[r];return e(i)?void 0:t(i)}}function qt(){if(mt)return gt;mt=1;var t=q(),e=C(),n=xt(),r=TypeError;return gt=function(i,o){var s,u;if("string"===o&&e(s=i.toString)&&!n(u=t(s,i)))return u;if(e(s=i.valueOf)&&!n(u=t(s,i)))return u;if("string"!==o&&e(s=i.toString)&&!n(u=t(s,i)))return u;throw new r("Can't convert object to primitive value")}}var Nt,zt,Kt,Ft,Bt,Ut,Ht,Qt,Vt,Yt,Jt,$t,Wt,Xt,Gt,Zt,te,ee,ne,re,ie,oe,se,ue,ce,ae,le,fe,he={exports:{}};function de(){return zt?Nt:(zt=1,Nt=!0)}function pe(){if(Ft)return Kt;Ft=1;var t=x(),e=Object.defineProperty;return Kt=function(n,r){try{e(t,n,{value:r,configurable:!0,writable:!0})}catch(e){t[n]=r}return r}}function ye(){if(Bt)return he.exports;Bt=1;var t=de(),e=x(),n=pe(),r="__core-js_shared__",i=he.exports=e[r]||n(r,{});return(i.versions||(i.versions=[])).push({version:"3.40.0",mode:t?"pure":"global",copyright:"© 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.40.0/LICENSE",source:"https://github.com/zloirock/core-js"}),he.exports}function ve(){if(Ht)return Ut;Ht=1;var t=ye();return Ut=function(e,n){return t[e]||(t[e]=n||{})}}function ge(){if(Vt)return Qt;Vt=1;var t=Ot(),e=Object;return Qt=function(n){return e(t(n))}}function me(){if(Jt)return Yt;Jt=1;var t=d(),e=ge(),n=t({}.hasOwnProperty);return Yt=Object.hasOwn||function(t,r){return n(e(t),r)}}function be(){if(Wt)return $t;Wt=1;var t=d(),e=0,n=Math.random(),r=t(1..toString);return $t=function(t){return"Symbol("+(void 0===t?"":t)+")_"+r(++e+n,36)}}function we(){if(Gt)return Xt;Gt=1;var t=x(),e=ve(),n=me(),r=be(),i=Pt(),o=Rt(),s=t.Symbol,u=e("wks"),c=o?s.for||s:s&&s.withoutSetter||r;return Xt=function(t){return n(u,t)||(u[t]=i&&n(s,t)?s[t]:c("Symbol."+t)),u[t]}}function Ee(){if(te)return Zt;te=1;var t=q(),e=xt(),n=Tt(),r=Dt(),i=qt(),o=TypeError,s=we()("toPrimitive");return Zt=function(u,c){if(!e(u)||n(u))return u;var a,l=r(u,s);if(l){if(void 0===c&&(c="default"),a=t(l,u,c),!e(a)||n(a))return a;throw new o("Can't convert object to primitive value")}return void 0===c&&(c="number"),i(u,c)}}function Se(){if(ne)return ee;ne=1;var t=Ee(),e=Tt();return ee=function(n){var r=t(n,"string");return e(r)?r:r+""}}function Ae(){if(ie)return re;ie=1;var t=x(),e=xt(),n=t.document,r=e(n)&&e(n.createElement);return re=function(t){return r?n.createElement(t):{}}}function Oe(){if(se)return oe;se=1;var t=D(),e=f(),n=Ae();return oe=!t&&!e((function(){return 7!==Object.defineProperty(n("div"),"a",{get:function(){return 7}}).a}))}function ke(){if(ue)return _;ue=1;var t=D(),e=q(),n=wt(),r=Et(),i=kt(),o=Se(),s=me(),u=Oe(),c=Object.getOwnPropertyDescriptor;return _.f=t?c:function(t,a){if(t=i(t),a=o(a),u)try{return c(t,a)}catch(t){}if(s(t,a))return r(!e(n.f,t,a),t[a])},_}function xe(){if(ae)return ce;ae=1;var t=f(),e=C(),n=/#|\.prototype\./,r=function(n,r){var c=o[i(n)];return c===u||c!==s&&(e(r)?t(r):!!r)},i=r.normalize=function(t){return String(t).replace(n,".").toLowerCase()},o=r.data={},s=r.NATIVE="N",u=r.POLYFILL="P";return ce=r}function Ie(){if(fe)return le;fe=1;var t=L(),e=_t(),n=h(),r=t(t.bind);return le=function(t,i){return e(t),void 0===i?t:n?r(t,i):function(){return t.apply(i,arguments)}},le}var je,Le,Ce,Pe,Re,Te,Me,_e,De,qe,Ne,ze,Ke,Fe,Be,Ue,He,Qe,Ve,Ye,Je,$e,We,Xe,Ge,Ze,tn,en,nn,rn,on,sn,un,cn,an={};function ln(){return Le?je:(Le=1,je=D()&&f()((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})))}function fn(){if(Pe)return Ce;Pe=1;var t=xt(),e=String,n=TypeError;return Ce=function(r){if(t(r))return r;throw new n(e(r)+" is not an object")}}function hn(){if(Re)return an;Re=1;var t=D(),e=Oe(),n=ln(),r=fn(),i=Se(),o=TypeError,s=Object.defineProperty,u=Object.getOwnPropertyDescriptor,c="enumerable",a="configurable",l="writable";return an.f=t?n?function(t,e,n){if(r(t),e=i(e),r(n),"function"==typeof t&&"prototype"===e&&"value"in n&&l in n&&!n[l]){var o=u(t,e);o&&o[l]&&(t[e]=n.value,n={configurable:a in n?n[a]:o[a],enumerable:c in n?n[c]:o[c],writable:!1})}return s(t,e,n)}:s:function(t,n,u){if(r(t),n=i(n),r(u),e)try{return s(t,n,u)}catch(t){}if("get"in u||"set"in u)throw new o("Accessors not supported");return"value"in u&&(t[n]=u.value),t},an}function dn(){if(Me)return Te;Me=1;var t=D(),e=hn(),n=Et();return Te=t?function(t,r,i){return e.f(t,r,n(1,i))}:function(t,e,n){return t[e]=n,t}}function pn(){if(De)return _e;De=1;var t=x(),e=I(),n=L(),r=C(),i=ke().f,o=xe(),s=It(),u=Ie(),c=dn(),a=me(),l=function(t){var n=function n(r,i,o){if(this instanceof n){switch(arguments.length){case 0:return new t;case 1:return new t(r);case 2:return new t(r,i)}return new t(r,i,o)}return e(t,this,arguments)};return n.prototype=t.prototype,n};return _e=function(e,f){var h,d,p,y,v,g,m,b,w,E=e.target,S=e.global,A=e.stat,O=e.proto,k=S?t:A?t[E]:t[E]&&t[E].prototype,x=S?s:s[E]||c(s,E,{})[E],I=x.prototype;for(y in f)d=!(h=o(S?y:E+(A?".":"#")+y,e.forced))&&k&&a(k,y),g=x[y],d&&(m=e.dontCallGetSet?(w=i(k,y))&&w.value:k[y]),v=d&&m?m:f[y],(h||O||typeof g!=typeof v)&&(b=e.bind&&d?u(v,t):e.wrap&&d?l(v):O&&r(v)?n(v):v,(e.sham||v&&v.sham||g&&g.sham)&&c(b,"sham",!0),c(x,y,b),O&&(a(s,p=E+"Prototype")||c(s,p,{}),c(s[p],y,v),e.real&&I&&(h||!I[y])&&c(I,y,v)))}}function yn(){if(Ne)return qe;Ne=1;var t=Math.ceil,e=Math.floor;return qe=Math.trunc||function(n){var r=+n;return(r>0?e:t)(r)}}function vn(){if(Ke)return ze;Ke=1;var t=yn();return ze=function(e){var n=+e;return n!=n||0===n?0:t(n)}}function gn(){if(Be)return Fe;Be=1;var t=vn(),e=Math.min;return Fe=function(n){var r=t(n);return r>0?e(r,9007199254740991):0}}function mn(){if(He)return Ue;He=1;var t=gn();return Ue=function(e){return t(e.length)}}function bn(){if(Ve)return Qe;Ve=1;var t=_t(),e=ge(),n=St(),r=mn(),i=TypeError,o="Reduce of empty array with no initial value",s=function(s){return function(u,c,a,l){var f=e(u),h=n(f),d=r(f);if(t(c),0===d&&a<2)throw new i(o);var p=s?d-1:0,y=s?-1:1;if(a<2)for(;;){if(p in h){l=h[p],p+=y;break}if(p+=y,s?p<0:d<=p)throw new i(o)}for(;s?p>=0:d>p;p+=y)p in h&&(l=c(l,h[p],p,f));return l}};return Qe={left:s(!1),right:s(!0)}}function wn(){if(Je)return Ye;Je=1;var t=f();return Ye=function(e,n){var r=[][e];return!!r&&t((function(){r.call(null,n||function(){return 1},1)}))}}function En(){if(We)return $e;We=1;var t=x(),e=Lt(),n=j(),r=function(t){return e.slice(0,t.length)===t};return $e=r("Bun/")?"BUN":r("Cloudflare-Workers")?"CLOUDFLARE":r("Deno/")?"DENO":r("Node.js/")?"NODE":t.Bun&&"string"==typeof Bun.version?"BUN":t.Deno&&"object"==typeof Deno.version?"DENO":"process"===n(t.process)?"NODE":t.window&&t.document?"BROWSER":"REST"}function Sn(){return Ge?Xe:(Ge=1,Xe="NODE"===En())}function An(){if(en)return tn;en=1;var t=x(),e=It();return tn=function(n,r){var i=e[n+"Prototype"],o=i&&i[r];if(o)return o;var s=t[n],u=s&&s.prototype;return u&&u[r]}}function On(){return rn?nn:(rn=1,function(){if(Ze)return k;Ze=1;var t=pn(),e=bn().left,n=wn(),r=Ct();t({target:"Array",proto:!0,forced:!Sn()&&r>79&&r<83||!n("reduce")},{reduce:function(t){var n=arguments.length;return e(this,t,n,n>1?arguments[1]:void 0)}})}(),nn=An()("Array","reduce"))}function kn(){if(sn)return on;sn=1;var t=p(),e=On(),n=Array.prototype;return on=function(r){var i=r.reduce;return r===n||t(n,r)&&i===n.reduce?e:i}}function xn(){return cn?un:(cn=1,un=kn())}var In=l(xn());const jn=Symbol("INVALID");function Ln(t){return!("function"!=typeof t.hasOwnProperty||!(Object.hasOwnProperty.call(t,"__ownerID")||t._map&&Object.hasOwnProperty.call(t._map,"__ownerID")))}function Cn(t){return Ln(t)?({key:e,pk:n})=>t.getIn([e,n]):({key:e,pk:n})=>{var r;return null==(r=t[e])?void 0:r[n]}}class Pn{constructor(){this.localCache={}}getEntity(t,e,n,r){const i=e.key;i in this.localCache||(this.localCache[i]=Object.create(null));const o=this.localCache[i];return o[t]||r(o),o[t]}getResults(t,e,n){return{data:n(),paths:[]}}}const Rn={};function Tn(t){return null!==t&&void 0!==t.pk}const Mn=t=>t[0],_n=t=>void 0!==t&&"symbol"!=typeof t,Dn=(t,e,n,r,i,o,s,u,c)=>{t=Mn(t);const a=(t=>Array.isArray(t)?t:Object.keys(t).map((e=>t[e])))(e);return a.map(((e,s)=>o(t,e,n,r,i)))},qn=(t,e,n,r)=>(t=Mn(t),e.map?e.map((e=>r(t,e))).filter(_n):e);function Nn(t,e,n,r,i){}function zn(){return zn=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},zn.apply(null,arguments)}const Kn=(t,e,n,r,i,o,s,u,c)=>{const a=zn({},e);return Object.keys(t).forEach((n=>{const r=t[n],s=o(r,e[n],e,n,i);void 0===s?delete a[n]:a[n]=s})),a},Fn=(t,e,n,r)=>{if(Ln(e))return function(t,e,n,r){var i;let o=!1;const s=In(i=Object.keys(t)).call(i,((e,n)=>{const i=`${n}`,s=r(t[i],e.get(i));return"symbol"==typeof s&&(o=!0),e.has(i)?e.set(i,s):e}),e);return o?jn:s}(t,e,0,r);const i=zn({},e);let o=!1;return Object.keys(t).forEach((e=>{const n=r(t[e],i[e]);void 0!==i[e]&&(i[e]=n),"symbol"==typeof n&&(o=!0)})),o?jn:i};function Bn(t,e,n,r,i){const o={};for(const s of Object.keys(t))o[s]=n(t[s],e,r,i);return o}function Un(t,e,n,r,i,o){const s=i[r]=Ln(t)?e.createIfValid(t.toObject()):e.createIfValid(t);void 0===s?i[r]=jn:"function"==typeof e.denormalize&&(i[r]=e.denormalize(s,o,n))}const Hn=(t,e,n)=>{function r(i,o){if(!i)return o;if(null==o)return o;if("function"==typeof i.denormalize)return Tn(i)?function(t,e,n,r,i,o){const s="object"==typeof e?e:i({key:t.key,pk:e});if("symbol"==typeof s&&"function"==typeof t.denormalize)return t.denormalize(s,n,r);if(void 0===s&&"object"!=typeof e&&""!==e&&"undefined"!==e)return o.getEntity(e,t,Rn,(t=>{t[e]=void 0}));if("object"!=typeof s||null===s)return s;let u="object"!=typeof e?e:t.pk(Ln(s)?s.toJS():s,void 0,void 0,n);return void 0===u||""===u||"undefined"===u?function(t){const e={};return t(e),e[""]}((e=>Un(s,t,r,"",e,n))):("string"!=typeof u&&(u=`${u}`),o.getEntity(u,t,s,(e=>Un(s,t,r,u,e,n))))}(i,o,n,r,t,e):i.denormalize(o,n,r);if("function"==typeof i)return i(o);if("object"==typeof i){return(Array.isArray(i)?qn:Fn)(i,o,n,r)}return o}return(t,n)=>{const i=Object(n)===n&&Object(t)===t;return e.getResults(n,i,(()=>r(t,n)))}};class Qn{constructor(){this.next=new WeakMap,this.nextPath=void 0}get(t,e){let n=this.next.get(t);if(!n)return Vn;for(;n.nextPath;){var r;const t=null!=(r=e(n.nextPath))?r:Rn;if(n=n.next.get(t),!n)return Vn}return[n.value,n.journey]}set(t,e){if(t.length<1)throw new Jn;let n=this;for(const{entity:e,path:r}of t){let t=n.next.get(e);t||(t=new Yn,n.next.set(null!=e?e:Rn,t)),n.nextPath=r,n=t}n.nextPath=void 0,n.value=e,n.journey=t.map((t=>t.path))}}const Vn=[void 0,void 0];class Yn{constructor(){this.next=new WeakMap,this.value=void 0,this.journey=[],this.nextPath=void 0}}class Jn extends Error{constructor(...t){super(...t),this.message="Keys must include at least one member"}}var $n,Wn,Xn,Gn,Zn,tr,er,nr,rr,ir={};function or(){if(Wn)return $n;Wn=1;var t=vn(),e=Math.max,n=Math.min;return $n=function(r,i){var o=t(r);return o<0?e(o+i,0):n(o,i)},$n}function sr(){if(Gn)return Xn;Gn=1;var t=kt(),e=or(),n=mn(),r=function(r){return function(i,o,s){var u=t(i),c=n(u);if(0===c)return!r&&-1;var a,l=e(s,c);if(r&&o!=o){for(;c>l;)if((a=u[l++])!=a)return!0}else for(;c>l;l++)if((r||l in u)&&u[l]===o)return r||l||0;return!r&&-1}};return Xn={includes:r(!0),indexOf:r(!1)}}function ur(){return tr?Zn:(tr=1,Zn=function(){})}function cr(){return rr?nr:(rr=1,function(){if(er)return ir;er=1;var t=pn(),e=sr().includes,n=f(),r=ur();t({target:"Array",proto:!0,forced:n((function(){return!Array(1).includes()}))},{includes:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),r("includes")}(),nr=An()("Array","includes"))}var ar,lr,fr,hr,dr,pr,yr,vr,gr,mr,br,wr,Er,Sr,Ar,Or,kr,xr,Ir,jr={};function Lr(){if(lr)return ar;lr=1;var t=xt(),e=j(),n=we()("match");return ar=function(r){var i;return t(r)&&(void 0!==(i=r[n])?!!i:"RegExp"===e(r))}}function Cr(){if(hr)return fr;hr=1;var t=Lr(),e=TypeError;return fr=function(n){if(t(n))throw new e("The method doesn't accept regular expressions");return n}}function Pr(){if(pr)return dr;pr=1;var t={};return t[we()("toStringTag")]="z",dr="[object z]"===String(t)}function Rr(){if(vr)return yr;vr=1;var t=Pr(),e=C(),n=j(),r=we()("toStringTag"),i=Object,o="Arguments"===n(function(){return arguments}());return yr=t?n:function(t){var s,u,c;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(u=function(t,e){try{return t[e]}catch(t){}}(s=i(t),r))?u:o?n(s):"Object"===(c=n(s))&&e(s.callee)?"Arguments":c}}function Tr(){if(mr)return gr;mr=1;var t=Rr(),e=String;return gr=function(n){if("Symbol"===t(n))throw new TypeError("Cannot convert a Symbol value to a string");return e(n)}}function Mr(){if(wr)return br;wr=1;var t=we()("match");return br=function(e){var n=/./;try{"/./"[e](n)}catch(r){try{return n[t]=!1,"/./"[e](n)}catch(t){}}return!1}}function _r(){return Ar?Sr:(Ar=1,function(){if(Er)return jr;Er=1;var t=pn(),e=d(),n=Cr(),r=Ot(),i=Tr(),o=Mr(),s=e("".indexOf);t({target:"String",proto:!0,forced:!o("includes")},{includes:function(t){return!!~s(i(r(this)),i(n(t)),arguments.length>1?arguments[1]:void 0)}})}(),Sr=An()("String","includes"))}function Dr(){if(kr)return Or;kr=1;var t=p(),e=cr(),n=_r(),r=Array.prototype,i=String.prototype;return Or=function(o){var s=o.includes;return o===r||t(r,o)&&s===r.includes?e:"string"==typeof o||o===i||t(i,o)&&s===i.includes?n:s}}function qr(){return Ir?xr:(Ir=1,xr=Dr())}var Nr=l(qr());const zr=(t,e,n,r,i,o)=>(s,u,c)=>{const a=s.key;a in t||(t[a]={},n[a]=zn({},n[a]),i[a]=zn({},i[a]));const l=t[a][c];if(l)t[a][c]=s.merge(l,u);else{const e=n[a][c];let r;e&&(r=i[a][c])?(t[a][c]=s.mergeWithStore(r,o,e,u),i[a][c]=s.mergeMetaWithStore(r,o,e,u)):(t[a][c]=u,i[a][c]=o)}s.indexes&&(a in e||(e[a]={},r[a]=zn({},r[a])),function(t,e,n,r,i,o){for(const s of e){s in n||(r[s]=n[s]={});const e=n[s];o[t]&&delete e[o[t][s]],o&&o[t]&&o[t][s]!==i[s]&&(e[o[t][s]]=jn),s in i&&(e[i[s]]=t)}}(c,s.indexes,e[a],r[a],t[a][c],n[a])),n[a][c]=t[a][c]};var Kr,Fr,Br,Ur,Hr,Qr,Vr,Yr,Jr,$r,Wr,Xr,Gr,Zr={};function ti(){if(Fr)return Kr;Fr=1;var t=j();return Kr=Array.isArray||function(e){return"Array"===t(e)}}function ei(){if(Ur)return Br;Ur=1;var t=D(),e=ti(),n=TypeError,r=Object.getOwnPropertyDescriptor,i=t&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();return Br=i?function(t,i){if(e(t)&&!r(t,"length").writable)throw new n("Cannot set read only .length");return t.length=i}:function(t,e){return t.length=e}}function ni(){if(Qr)return Hr;Qr=1;var t=TypeError;return Hr=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}}function ri(){return Jr?Yr:(Jr=1,function(){if(Vr)return Zr;Vr=1;var t=pn(),e=ge(),n=mn(),r=ei(),i=ni();t({target:"Array",proto:!0,arity:1,forced:f()((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(t){return t instanceof TypeError}}()},{push:function(t){var o=e(this),s=n(o),u=arguments.length;i(s+u);for(var c=0;c<u;c++)o[s]=arguments[c],s++;return r(o,s),s}})}(),Yr=An()("Array","push"))}function ii(){if(Wr)return $r;Wr=1;var t=p(),e=ri(),n=Array.prototype;return $r=function(r){var i=r.push;return r===n||t(n,r)&&i===n.push?e:i}}function oi(){return Gr?Xr:(Gr=1,Xr=ii())}var si=l(oi());const ui=(t,e)=>{const n=function(){const t={};return function(e,n,r){var i;return e in t||(t[e]={}),n in t[e]||(t[e][n]=[]),!!t[e][n].some((t=>t===r))||(si(i=t[e][n]).call(i,r),!1)}}(),r=(i,o,s,u,c)=>{if(!o||!i)return o;if(i.normalize&&"function"==typeof i.normalize)return"object"!=typeof o?i.pk?`${o}`:o:i.normalize(o,s,u,c,r,t,e,n);if("object"!=typeof o||"object"!=typeof i)return o;return(Array.isArray(i)?Dn:Kn)(i,o,s,u,c,r)};return r};var ci,ai,li,fi,hi,di,pi,yi,vi,gi={};function mi(){if(ai)return ci;ai=1;var t=Mt(),e=TypeError;return ci=function(n,r){if(!delete n[r])throw new e("Cannot delete property "+t(r)+" of "+t(n))}}function bi(){return hi?fi:(hi=1,function(){if(li)return gi;li=1;var t=pn(),e=ge(),n=mn(),r=ei(),i=mi(),o=ni();t({target:"Array",proto:!0,arity:1,forced:1!==[].unshift(0)||!function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(t){return t instanceof TypeError}}()},{unshift:function(t){var s=e(this),u=n(s),c=arguments.length;if(c){o(u+c);for(var a=u;a--;){var l=a+c;a in s?s[l]=s[a]:i(s,l)}for(var f=0;f<c;f++)s[f]=arguments[f]}return r(s,u+c)}})}(),fi=An()("Array","unshift"))}function wi(){if(pi)return di;pi=1;var t=p(),e=bi(),n=Array.prototype;return di=function(r){var i=r.unshift;return r===n||t(n,r)&&i===n.unshift?e:i}}function Ei(){return vi?yi:(vi=1,yi=wi())}var Si=l(Ei());class Ai{constructor(t,e,n){this.dependencies=[],this.cycleCache={},this.cycleIndex=-1,this.localCache={},this._getEntity=t,this.getCache=Oi(e),this.resultCache=n}getEntity(t,e,n,r){const i=e.key,{localCacheKey:o,cycleCacheKey:s}=this.getCacheKey(i);if(o[t]){var u;if(t in s)this.cycleIndex=s[t];else si(u=this.dependencies).call(u,{entity:n,path:{key:i,pk:t}})}else{const u=this.getCache(t,e),[l,f]=u.get(n,this._getEntity);var c;if(f)return o[t]=l.value,si(c=this.dependencies).call(c,...l.dependencies),l.value;{var a;const e=this.dependencies.length;s[t]=e,si(a=this.dependencies).call(a,{entity:n,path:{key:i,pk:t}}),r(o),delete s[t];const c=this.dependencies.slice(-1===this.cycleIndex?e:this.cycleIndex),l={dependencies:c,value:o[t]};u.set(c,l),this.cycleIndex===e&&(this.cycleIndex=-1)}}return o[t]}getCacheKey(t){t in this.localCache||(this.localCache[t]=Object.create(null)),t in this.cycleCache||(this.cycleCache[t]=Object.create(null));return{localCacheKey:this.localCache[t],cycleCacheKey:this.cycleCache[t]}}getResults(t,e,n){if(!e)return{data:n(),paths:this.paths()};let[r,i]=this.resultCache.get(t,this._getEntity);var o;void 0===i?(r=n(),i=this.paths(),Si(o=this.dependencies).call(o,{entity:t,path:{key:"",pk:""}}),this.resultCache.set(this.dependencies,r)):i.shift();return{data:r,paths:i}}paths(){return this.dependencies.map((t=>t.path))}}const Oi=t=>(e,n)=>{var r;const i=n.key,o=null!=(r=n.cacheWith)?r:n;i in t||(t[i]=Object.create(null));const s=t[i];s[e]||(s[e]=new WeakMap);let u=s[e].get(o);return u||(u=new Qn,s[e].set(o,u)),u};function ki(t,e,n,r){if(function(t){return!!t&&"function"==typeof t.queryKey}(t))return t.queryKey(e,ki,n,r);if("object"==typeof t&&t){return(Array.isArray(t)?Nn:Bn)(t,e,ki,n,r)}return t}function xi(t){return void 0!==t&&(!(t&&"object"==typeof t&&!Array.isArray(t))||Object.values(t).every(xi))}class Ii{constructor(){this.entities={},this.endpoints=new Qn,this.queryKeys={}}denormalize(t,e,n,r=[]){if(void 0===t)return{data:e,paths:[]};if(void 0===e)return{data:void 0,paths:[]};const i=Cn(n);return Hn(i,new Ai(i,this.entities,this.endpoints),r)(t,e)}query(t,e,n,r,i=JSON.stringify(e)){const o=this.buildQueryKey(t,e,n,r,i);if(!o)return;const{data:s}=this.denormalize(t,o,n,e);return"symbol"==typeof s?void 0:s}buildQueryKey(t,e,n,r,i=JSON.stringify(e)){if("object"!=typeof t&&"function"!=typeof t.queryKey||!t)return t;this.queryKeys[i]||(this.queryKeys[i]=new Qn);const o=this.queryKeys[i],s=Li(n),u=function(t){const e=Ln(t);return e?(e,n,r)=>{var i;return null==(i=t.getIn([e,n]))||null==i.toJS?void 0:i.toJS()}:(e,n,r)=>t[e]?t[e][n]:{}}(r);let[c,a]=o.get(t,function(t,e){return n=>3===n.length?e(...n):t(...n)}(s,u));if(!a){const n=[{path:[""],entity:t}];c=ki(t,e,ji(s,n),ji(u,n)),o.set(n,c)}return c}}function ji(t,e){return(...n)=>{const r=t(...n);return si(e).call(e,{path:n,entity:r}),r}}function Li(t){return Ln(t)?(...e)=>{var n;return null==(n=t.getIn(e))||null==n.toJS?void 0:n.toJS()}:(e,n)=>{var r;return n?null==(r=t[e])?void 0:r[n]:t[e]}}const Ci=(t,e,n=[],{entities:r,indexes:i,entityMeta:o}=Pi,s={fetchedAt:0,date:Date.now(),expiresAt:1/0})=>{if(null==t)return{result:e,entities:r,indexes:i,entityMeta:o};const u=function(t){var e;return Nr(e=["object","function"]).call(e,typeof t)?"object":typeof t}(t);if(null===e||typeof e!==u&&(void 0===t.key||void 0!==t.pk||"string"!=typeof e))throw new Error(`Unexpected input given to normalize. Expected type to be "${u}", found "${null===e?"null":typeof e}".`);const c={result:"",entities:zn({},r),indexes:zn({},i),entityMeta:zn({},o)},a=zr({},{},c.entities,c.indexes,c.entityMeta,s),l=ui(a,Li(r));return c.result=l(t,e,e,void 0,n),c};const Pi={entities:{},indexes:{},entityMeta:{}};var Ri={Invalid:1,InvalidIfStale:2,Valid:3};function Ti(t,e){const n=Date.now();return{fetchedAt:null!=e?e:n,date:n,expiresAt:n+t}}const Mi="rdc/fetch",_i="rdc/set",Di="rdc/setresponse",qi="rdc/optimistic",Ni="rdc/reset",zi="rdc/subscribe",Ki="rdc/unsubscribe",Fi="rdc/invalidate",Bi="rdc/invalidateall",Ui="rdc/expireall",Hi="rdc/gc",Qi=Mi,Vi=_i,Yi=Di,Ji=qi,$i=Ni,Wi=zi,Xi=Ki,Gi=Fi,Zi=Bi,to=Ui,eo=Hi;var no=Object.freeze({__proto__:null,EXPIREALL:Ui,EXPIREALL_TYPE:to,FETCH:Mi,FETCH_TYPE:Qi,GC:Hi,GC_TYPE:eo,INVALIDATE:Fi,INVALIDATEALL:Bi,INVALIDATEALL_TYPE:Zi,INVALIDATE_TYPE:Gi,OPTIMISTIC:qi,OPTIMISTIC_TYPE:Ji,RESET:Ni,RESET_TYPE:$i,SET:_i,SET_RESPONSE:Di,SET_RESPONSE_TYPE:Yi,SET_TYPE:Vi,SUBSCRIBE:zi,SUBSCRIBE_TYPE:Wi,UNSUBSCRIBE:Ki,UNSUBSCRIBE_TYPE:Xi});function ro(t,e,n){var r;return{type:qi,key:t.key(...e),args:e,endpoint:t,meta:Ti(null!=(r=t.dataExpiryLength)?r:6e4,n)}}class io extends Error{}function oo(t,e,n){return"AbortError"===n.name?zn({},t,{optimistic:so(t,e)}):zn({},t,{meta:zn({},t.meta,{[e.key]:{date:e.meta.date,fetchedAt:e.meta.fetchedAt,expiresAt:e.meta.expiresAt,error:n,errorPolicy:null==e.endpoint.errorPolicy?void 0:e.endpoint.errorPolicy(n)}}),optimistic:so(t,e)})}function so(t,e){return t.optimistic.filter((t=>t.key!==e.key||(t.type===qi?t.meta.fetchedAt!==e.meta.fetchedAt:t.meta.date>e.meta.date)))}const uo={entities:{},endpoints:{},indexes:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var co=Object.freeze({__proto__:null,INVALID:jn,MemoCache:Ii,initialState:uo});function ao(t,{args:e}){return{type:zi,key:t.key(...e),args:e,endpoint:t}}function lo(t,{args:e}){return{type:Ki,key:t.key(...e),args:e,endpoint:t}}const fo="undefined"!=typeof FormData?t=>t instanceof FormData?Object.fromEntries(t.entries()):t:t=>t;function ho(t,{args:e,fetchedAt:n,response:r,error:i=!1}){var o,s;const u=i?null!=(o=t.errorExpiryLength)?o:1e3:null!=(s=t.dataExpiryLength)?s:6e4;return{type:Di,key:t.key(...e),response:r,args:e.map(fo),endpoint:t,meta:Ti(u,n),error:i}}function po(t,{args:e,fetchedAt:n,value:r}){return{type:_i,value:r,args:e.map(fo),schema:t,meta:Ti(6e4,n)}}function yo(){return{type:Ni,date:Date.now()}}function vo(t){return{type:Bi,testKey:t}}function go(t,{args:e}){return{type:Fi,key:t.key(...e)}}function mo(t,{args:e}){let n=0,r=0;const i=new Promise(((t,e)=>{[n,r]=[t,e]})),o={fetchedAt:Date.now(),resolve:n,reject:r,promise:i};return{type:Mi,key:t.key(...e),args:e,endpoint:t,meta:o}}function bo(t){return{type:Ui,testKey:t}}var wo=Object.freeze({__proto__:null,createExpireAll:bo,createFetch:mo,createInvalidate:go,createInvalidateAll:vo,createMeta:Ti,createOptimistic:ro,createReset:yo,createSet:po,createSetResponse:ho,createSubscription:ao,createUnsubscription:lo});class Eo{init(){}cleanup(){}createCountRef(){return()=>()=>{}}}function So(t,e){return t.meta[e]}const Ao=t=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},Oo=()=>uo;class ko{constructor({dispatch:t=Ao,getState:e=Oo,memo:n=new Ii,gcPolicy:r=new Eo}={}){this.fetch=(t,...e)=>{const n=mo(t,{args:e});return this.dispatch(n),t.schema?n.meta.promise.then((n=>function(t,e,n,r=[]){return void 0===t||void 0===e?e:Hn(Cn(n),new Pn,r)(t,e).data}(t.schema,n,{},e))):n.meta.promise},this.fetchIfStale=(t,...e)=>{const{data:n,expiresAt:r,expiryStatus:i}=this.getResponse(t,...e,this.getState());return i!==Ri.Invalid&&Date.now()<=r?n:this.fetch(t,...e)},this.invalidate=(t,...e)=>null!==e[0]?this.dispatch(go(t,{args:e})):Promise.resolve(),this.invalidateAll=t=>this.dispatch(vo((e=>t.testKey(e)))),this.expireAll=t=>this.dispatch(bo((e=>t.testKey(e)))),this.resetEntireStore=()=>this.dispatch(yo()),this.setResponse=(t,...e)=>{const n=e[e.length-1],r=ho(t,{args:e.slice(0,e.length-1),response:n});return this.dispatch(r)},this.setError=(t,...e)=>{const n=e[e.length-1],r=ho(t,{args:e.slice(0,e.length-1),response:n,error:!0});return this.dispatch(r)},this.resolve=(t,e)=>this.dispatch(ho(t,e)),this.subscribe=(t,...e)=>null!==e[0]?this.dispatch(ao(t,{args:e})):Promise.resolve(),this.unsubscribe=(t,...e)=>null!==e[0]?this.dispatch(lo(t,{args:e})):Promise.resolve(),this.snapshot=(t,e)=>new Io(this,t,e),this._dispatch=t,this.getState=e,this.memo=n,this.gcPolicy=r}set dispatch(t){this._dispatch=t}get dispatch(){return this._dispatch}bindMiddleware({dispatch:t,getState:e}){this._dispatch=t,this.getState=e}set(t,...e){const n=e[e.length-1],r=po(t,{args:e.slice(0,e.length-1),value:n});return this.dispatch(r)}getError(t,...e){if(null===e[0])return;const n=e[e.length-1],r=e.slice(0,e.length-1),i=t.key(...r),o=So(n,i);return void 0===n.endpoints[i]||"soft"!==(null==o?void 0:o.errorPolicy)?null==o?void 0:o.error:void 0}getResponse(t,...e){return this.getResponseMeta(t,...e)}getResponseMeta(t,...e){const n=e[e.length-1],r=e.slice(0,e.length-1).map(fo),i=1!==r.length||null!==r[0],o=i?t.key(...r):"",s=i?n.endpoints[o]:void 0,u=t.schema,c=So(n,o);let a=null==c?void 0:c.expiresAt;const l=void 0===s&&void 0!==u,f=l?this.memo.buildQueryKey(u,r,n.entities,n.indexes,o):s;if(!i)return{data:f,expiryStatus:Ri.Valid,expiresAt:1/0,countRef:()=>()=>{}};let h=!1;if(l)h=!xi(f);else if(!u||!xo(u))return{data:s,expiryStatus:null!=c&&c.invalidated?Ri.Invalid:s&&!t.invalidIfStale?Ri.Valid:Ri.InvalidIfStale,expiresAt:a||0,countRef:this.gcPolicy.createCountRef({key:o})};const{data:d,paths:p}=this.memo.denormalize(u,f,n.entities,r);return!a&&h&&(a=1),this.getSchemaResponse(d,o,p,n.entityMeta,a,t.invalidIfStale||h,c)}get(t,...e){const n=e[e.length-1],r=e.slice(0,e.length-1).map(fo);return this.memo.query(t,r,n.entities,n.indexes)}getQueryMeta(t,...e){const n=e[e.length-1],r=e.slice(0,e.length-1).map(fo),i=this.memo.buildQueryKey(t,r,n.entities,n.indexes,JSON.stringify(r));if(!i)return{data:void 0,countRef:()=>()=>{}};const{data:o,paths:s}=this.memo.denormalize(t,i,n.entities,r);return{data:"symbol"==typeof o?void 0:o,countRef:this.gcPolicy.createCountRef({paths:s})}}getSchemaResponse(t,e,n,r,i,o,s={}){const u="symbol"==typeof t;i||(i=function(t,e){let n=1/0;for(const{pk:i,key:o}of t){var r;const t=null==(r=e[o])||null==(r=r[i])?void 0:r.expiresAt;t<n&&(n=t)}return n}(n,r));return{data:t,expiryStatus:null!=s&&s.invalidated||u&&(null==s||!s.error)?Ri.Invalid:u||o?Ri.InvalidIfStale:Ri.Valid,expiresAt:i,countRef:this.gcPolicy.createCountRef({key:e,paths:n})}}}function xo(t){if(Tn(t))return!0;if(Array.isArray(t))return 0!==t.length&&xo(t[0]);if(t&&("object"==typeof t||"function"==typeof t)){const e="schema"in t?t.schema:t;return"function"==typeof e?xo(e):Object.values(e).some((t=>xo(t)))}return!1}class Io{constructor(t,e,n=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=Io.abort,this.state=e,this.controller=t,this.fetchedAt=n}getResponse(t,...e){return this.controller.getResponse(t,...e,this.state)}getResponseMeta(t,...e){return this.controller.getResponseMeta(t,...e,this.state)}getError(t,...e){return this.controller.getError(t,...e,this.state)}get(t,...e){return this.controller.get(t,...e,this.state)}getQueryMeta(t,...e){return this.controller.getQueryMeta(t,...e,this.state)}}Io.abort=new io;class jo extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class Lo{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(t){addEventListener("online",t)}removeOnlineListener(t){removeEventListener("online",t)}addOfflineListener(t){addEventListener("offline",t)}removeOfflineListener(t){removeEventListener("offline",t)}}class Co{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let Po;Po="undefined"!=typeof navigator&&"function"==typeof addEventListener?Lo:Co;var Ro=Po;let To={};class Mo{constructor(t,e){this.started=!1,this.actions=[],this.maxBufferLength=100,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(zn({},To,t)),null!=t&&t.maxAge&&(this.maxBufferLength=2*t.maxAge),e&&(this.skipLogging=e)}handleAction(t,e){this.started?this.devTools.send(t,e):(this.actions.length>this.maxBufferLength&&(this.actions=this.actions.slice(this.maxBufferLength/2)),this.actions.push([t,e]))}init(t){}cleanup(){}}Mo.prototype.middleware=()=>t=>e=>t(e);t.Controller=ko,t.DefaultConnectionListener=Ro,t.DevToolsManager=Mo,t.ExpiryStatus=Ri,t.GCPolicy=class{constructor({intervalMS:t=3e5,expiryMultiplier:e=2,expiresAt:n}={}){this.endpointCount=new Map,this.entityCount=new Map,this.endpointsQ=new Set,this.entitiesQ=[],n&&(this.expiresAt=n.bind(this)),this.options={intervalMS:t,expiryMultiplier:e}}init(t){this.controller=t,this.intervalId=setInterval((()=>{this.idleCallback((()=>this.runSweep()),{timeout:1e3})}),this.options.intervalMS)}cleanup(){clearInterval(this.intervalId)}createCountRef({key:t,paths:e=[]}){return()=>{var n;return t&&this.endpointCount.set(t,(null!=(n=this.endpointCount.get(t))?n:0)+1),e.forEach((t=>{var e;this.entityCount.has(t.key)||this.entityCount.set(t.key,new Map);const n=this.entityCount.get(t.key);n.set(t.pk,(null!=(e=n.get(t.pk))?e:0)+1)})),()=>{if(t){const e=this.endpointCount.get(t);void 0!==e&&(e<=1?(this.endpointCount.delete(t),this.endpointsQ.add(t)):this.endpointCount.set(t,e-1))}e.forEach((t=>{if(!this.entityCount.has(t.key))return;const e=this.entityCount.get(t.key),n=e.get(t.pk);void 0!==n&&(n<=1?(e.delete(t.pk),this.entitiesQ.push(t)):e.set(t.pk,n-1))}))}}}expiresAt({fetchedAt:t,expiresAt:e}){return Math.max((e-t)*this.options.expiryMultiplier,12e4)+t}runSweep(){const t=this.controller.getState(),e=[],n=[],r=Date.now(),i=new Set;for(const e of this.endpointsQ){var o;!this.endpointCount.has(e)&&this.expiresAt(null!=(o=t.meta[e])?o:{fetchedAt:0,date:0,expiresAt:0})<r?n.push(e):i.add(e)}this.endpointsQ=i;const s=[];for(const n of this.entitiesQ){var u,c,a;(null==(u=this.entityCount.get(n.key))||!u.has(n.pk))&&this.expiresAt(null!=(c=null==(a=t.entityMeta[n.key])?void 0:a[n.pk])?c:{fetchedAt:0,date:0,expiresAt:0})<r?e.push(n):s.push(n)}this.entitiesQ=s,(e.length||n.length)&&this.controller.dispatch({type:Hi,entities:e,endpoints:n})}idleCallback(t,e){"function"==typeof requestIdleCallback?requestIdleCallback(t,e):t()}},t.ImmortalGCPolicy=Eo,t.LogoutManager=class{constructor({handleLogout:t,shouldLogout:e}={}){this.middleware=t=>e=>async n=>{await e(n),n.type===Di&&n.error&&this.shouldLogout(n.response)&&this.handleLogout(t)},t&&(this.handleLogout=t),e&&(this.shouldLogout=e)}cleanup(){}shouldLogout(t){return 401===t.status}handleLogout(t){t.resetEntireStore()}},t.NetworkManager=class{constructor({dataExpiryLength:t=6e4,errorExpiryLength:e=1e3}={}){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new ko,this.middleware=t=>(this.controller=t,e=>n=>{switch(n.type){case Mi:return this.handleFetch(n),void 0!==n.endpoint.getOptimisticResponse&&n.endpoint.sideEffect?e(n):Promise.resolve();case Di:return e(n).then((()=>{if(n.key in this.fetched){var e;const r=null==(e=t.getState().meta[n.key])?void 0:e.error;r?this.handleSet(ho(n.endpoint,{args:n.args,response:r,fetchedAt:n.meta.fetchedAt,error:!0})):this.handleSet(n)}}));case Ni:{const t=zn({},this.rejectors);return this.clearAll(),e(n).then((()=>{for(const e in t)t[e](new jo)}))}default:return e(n)}}),this.dataExpiryLength=t,this.errorExpiryLength=e}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}skipLogging(t){return t.type===Mi&&t.key in this.fetched}allSettled(){const t=Object.values(this.fetched);if(t.length)return Promise.allSettled(t)}clearAll(){for(const t in this.rejectors)this.clear(t)}clear(t){this.fetched[t].catch((()=>{})),delete this.resolvers[t],delete this.rejectors[t],delete this.fetched[t],delete this.fetchedAt[t]}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(t){const{resolve:e,reject:n,fetchedAt:r}=t.meta,i=!t.endpoint.sideEffect,o=()=>{let o=t.endpoint(...t.args);return i||(o=(t=>t.then((t=>(e(t),t))).catch((t=>{throw n(t),t})))(o)),o=o.then((e=>{let n=this.getLastReset();return r>=n&&this.controller.resolve(t.endpoint,{args:t.args,response:e,fetchedAt:r}),e})).catch((e=>{const n=this.getLastReset();throw r>=n&&this.controller.resolve(t.endpoint,{args:t.args,response:e,fetchedAt:r,error:!0}),e})),o};return i?this.throttle(t.key,o,r).then((t=>e(t))).catch((t=>n(t))):o().catch((()=>{}))}handleSet(t){if(t.key in this.fetched){let e;e=t.error?this.rejectors[t.key]:this.resolvers[t.key],e(t.response),this.clear(t.key)}}throttle(t,e,n){const r=this.getLastReset();return t in this.fetched&&this.fetchedAt[t]>r||(this.fetched[t]=new Promise(((e,n)=>{this.resolvers[t]=e,this.rejectors[t]=n})),this.fetchedAt[t]=n,this.idleCallback((()=>{e().catch((()=>null))}),{timeout:500})),this.fetched[t]}idleCallback(t,e){t()}},t.PollingSubscription=class{constructor(t,e,n){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const t=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-t+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===t.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=t.endpoint,this.frequency=t.endpoint.pollFrequency,this.args=t.args,this.key=t.key,this.frequencyHistogram.set(this.frequency,1),this.controller=e,this.connectionListener=n||new Ro,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(t){void 0!==t&&(this.frequencyHistogram.has(t)?this.frequencyHistogram.set(t,this.frequencyHistogram.get(t)+1):(this.frequencyHistogram.set(t,1),t<this.frequency&&(this.frequency=t,this.run())))}remove(t){if(void 0===t)return!1;if(this.frequencyHistogram.has(t)&&(this.frequencyHistogram.set(t,this.frequencyHistogram.get(t)-1),this.frequencyHistogram.get(t)<1)){if(this.frequencyHistogram.delete(t),0===this.frequencyHistogram.size)return this.cleanup(),!0;t<=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 t=this.endpoint,e=function(...e){return t.call(this,...e)};Object.assign(e,this.endpoint),e.dataExpiryLength=this.frequency/2,e.errorExpiryLength=this.frequency/10,e.errorPolicy=()=>"soft",e.key=()=>this.key,this.controller.fetch(e,...this.args).catch((()=>null))}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 t,e;return null!=(t=null==(e=this.controller.getState().meta[this.key])?void 0:e.date)?t:0}},t.ResetError=jo,t.SubscriptionManager=class{constructor(t){this.subscriptions={},this.controller=new ko,this.middleware=t=>(this.controller=t,t=>e=>{switch(e.type){case zi:try{this.handleSubscribe(e)}catch(t){console.error(t)}return Promise.resolve();case Ki:return this.handleUnsubscribe(e),Promise.resolve();default:return t(e)}}),this.Subscription=t}cleanup(){for(const t in this.subscriptions)this.subscriptions[t].cleanup()}handleSubscribe(t){const e=t.key;if(e in this.subscriptions){const n=t.endpoint.pollFrequency;this.subscriptions[e].add(n)}else this.subscriptions[e]=new this.Subscription(t,this.controller)}handleUnsubscribe(t){const e=t.key;if(e in this.subscriptions){const n=t.endpoint.pollFrequency;this.subscriptions[e].remove(n)&&delete this.subscriptions[e]}}},t.__INTERNAL__=co,t.actionTypes=no,t.actions=wo,t.applyManager=function(t,e){return t.map(((t,n)=>(t.middleware||(t.middleware=null==t.getMiddleware?void 0:t.getMiddleware()),r=>(0===n&&e.bindMiddleware(r),t.middleware(e)))))},t.createReducer=function(t){return function(e,n){switch(e||(e=uo),n.type){case Hi:return n.entities.forEach((({key:t,pk:n})=>{var r,i;null==(r=e.entities[t])||delete r[n],null==(i=e.entityMeta[t])||delete i[n]})),n.endpoints.forEach((t=>{delete e.endpoints[t],delete e.meta[t]})),e;case Mi:return function(t,e){if(e.endpoint.getOptimisticResponse&&e.endpoint.sideEffect){const n=ro(e.endpoint,e.args,e.meta.fetchedAt);return zn({},t,{optimistic:[...t.optimistic,n]})}return t}(e,n);case qi:case Di:return function(t,e,n){if(e.error)return oo(t,e,e.response);try{var r;let i;if(e.type===qi){if(!e.endpoint.getOptimisticResponse)return t;try{i=e.endpoint.getOptimisticResponse.call(e.endpoint,n.snapshot(t,e.meta.fetchedAt),...e.args)}catch(e){if(e.constructor===io)return t;throw e}}else i=e.response;const{result:o,entities:s,indexes:u,entityMeta:c}=Ci(e.endpoint.schema,i,e.args,t,e.meta),a=zn({},t.endpoints,{[e.key]:o});try{if(e.endpoint.update){const t=e.endpoint.update(o,...e.args);Object.keys(t).forEach((e=>{a[e]=t[e](a[e])}))}}catch(t){console.error(`The following error occured during Endpoint.update() for ${e.key}`),console.error(t)}return{entities:s,endpoints:a,indexes:u,meta:zn({},t.meta,{[e.key]:{date:e.meta.date,fetchedAt:e.meta.fetchedAt,expiresAt:e.meta.expiresAt,prevExpiresAt:null==(r=t.meta[e.key])?void 0:r.expiresAt}}),entityMeta:c,optimistic:so(t,e),lastReset:t.lastReset}}catch(n){return"object"==typeof n&&(n.message=`Error processing ${e.key}\n\nFull Schema: ${JSON.stringify(e.endpoint.schema,void 0,2)}\n\nError:\n${n.message}`,"response"in e&&(n.response=e.response),n.status=400),oo(t,e,n)}}(e,n,t);case _i:return function(t,e,n){let r;if("function"==typeof e.value){const i=n.get(e.schema,...e.args,t);if(void 0===i)return t;r=e.value(i)}else r=e.value;try{const{entities:n,indexes:i,entityMeta:o}=Ci(e.schema,r,e.args,t,e.meta);return{entities:n,endpoints:t.endpoints,indexes:i,meta:t.meta,entityMeta:o,optimistic:t.optimistic,lastReset:t.lastReset}}catch(e){return t}}(e,n,t);case Bi:case Fi:return function(t,e){const n=zn({},t.endpoints),r=zn({},t.meta),i=t=>{delete n[t];const e=zn({},r[t],{expiresAt:0,invalidated:!0});delete e.error,r[t]=e};return e.type===Fi?i(e.key):Object.keys(n).forEach((t=>{e.testKey(t)&&i(t)})),zn({},t,{endpoints:n,meta:r})}(e,n);case Ui:return function(t,e){const n=zn({},t.meta);return Object.keys(n).forEach((t=>{e.testKey(t)&&(n[t]=zn({},n[t],{expiresAt:1}))})),zn({},t,{meta:n})}(e,n);case Ni:return zn({},uo,{lastReset:n.date});default:return e}}},t.initManager=function(t,e,n){return()=>(t.forEach((t=>{null==t.init||t.init(n)})),e.gcPolicy.init(e),()=>{t.forEach((t=>{t.cleanup()})),e.gcPolicy.cleanup()})},t.initialState=uo}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}))}(this,(function(e){"use strict";const t=Symbol("INVALID");function n(e){return!("function"!=typeof e.hasOwnProperty||!(Object.hasOwnProperty.call(e,"__ownerID")||e._map&&Object.hasOwnProperty.call(e._map,"__ownerID")))}function i(e){return n(e)?({key:t,pk:n})=>e.getIn([t,n]):({key:t,pk:n})=>{var i;return null==(i=e[t])?void 0:i[n]}}class s{constructor(){this.localCache={}}getEntity(e,t,n,i){const s=t.key;s in this.localCache||(this.localCache[s]=Object.create(null));const r=this.localCache[s];return r[e]||i(r),r[e]}getResults(e,t,n){return{data:n(),paths:[]}}}const r={};function o(e){return null!==e&&void 0!==e.pk}const a=e=>e[0],c=e=>void 0!==e&&"symbol"!=typeof e,l=(e,t,n,i,s,r,o,c,l)=>{e=a(e);const h=(e=>Array.isArray(e)?e:Object.keys(e).map((t=>e[t])))(t);return h.map(((t,o)=>r(e,t,n,i,s)))},h=(e,t,n,i)=>(e=a(e),t.map?t.map((t=>i(e,t))).filter(c):t);function u(e,t,n,i,s){}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},d.apply(null,arguments)}const p=(e,t,n,i,s,r,o,a,c)=>{const l=d({},t);return Object.keys(e).forEach((n=>{const i=e[n],o=r(i,t[n],t,n,s);void 0===o?delete l[n]:l[n]=o})),l},f=(e,i,s,r)=>{if(n(i))return function(e,n,i,s){let r=!1;const o=Object.keys(e).reduce(((t,n)=>{const i=`${n}`,o=s(e[i],t.get(i));return"symbol"==typeof o&&(r=!0),t.has(i)?t.set(i,o):t}),n);return r?t:o}(e,i,0,r);const o=d({},i);let a=!1;return Object.keys(e).forEach((t=>{const n=r(e[t],o[t]);void 0!==o[t]&&(o[t]=n),"symbol"==typeof n&&(a=!0)})),a?t:o};function y(e,t,n,i,s){const r={};for(const o of Object.keys(e))r[o]=n(e[o],t,i,s);return r}function g(e,i,s,r,o,a){const c=o[r]=n(e)?i.createIfValid(e.toObject()):i.createIfValid(e);void 0===c?o[r]=t:"function"==typeof i.denormalize&&(o[r]=i.denormalize(c,a,s))}const m=(e,t,i)=>{function s(a,c){if(!a)return c;if(null==c)return c;if("function"==typeof a.denormalize)return o(a)?function(e,t,i,s,o,a){const c="object"==typeof t?t:o({key:e.key,pk:t});if("symbol"==typeof c&&"function"==typeof e.denormalize)return e.denormalize(c,i,s);if(void 0===c&&"object"!=typeof t&&""!==t&&"undefined"!==t)return a.getEntity(t,e,r,(e=>{e[t]=void 0}));if("object"!=typeof c||null===c)return c;let l="object"!=typeof t?t:e.pk(n(c)?c.toJS():c,void 0,void 0,i);return void 0===l||""===l||"undefined"===l?function(e){const t={};return e(t),t[""]}((t=>g(c,e,s,"",t,i))):("string"!=typeof l&&(l=`${l}`),a.getEntity(l,e,c,(t=>g(c,e,s,l,t,i))))}(a,c,i,s,e,t):a.denormalize(c,i,s);if("function"==typeof a)return a(c);if("object"==typeof a){return(Array.isArray(a)?h:f)(a,c,i,s)}return c}return(e,n)=>{const i=Object(n)===n&&Object(e)===e;return t.getResults(n,i,(()=>s(e,n)))}};class v{constructor(){this.next=new WeakMap,this.nextPath=void 0}get(e,t){let n=this.next.get(e);if(!n)return b;for(;n.nextPath;){var i;const e=null!=(i=t(n.nextPath))?i:r;if(n=n.next.get(e),!n)return b}return[n.value,n.journey]}set(e,t){if(e.length<1)throw new k;let n=this;for(const{entity:t,path:i}of e){let e=n.next.get(t);e||(e=new E,n.next.set(null!=t?t:r,e)),n.nextPath=i,n=e}n.nextPath=void 0,n.value=t,n.journey=e.map((e=>e.path))}}const b=[void 0,void 0];class E{constructor(){this.next=new WeakMap,this.value=void 0,this.journey=[],this.nextPath=void 0}}class k extends Error{constructor(...e){super(...e),this.message="Keys must include at least one member"}}const I=(e,n,i,s,r,o)=>(a,c,l)=>{const h=a.key;h in e||(e[h]={},i[h]=d({},i[h]),r[h]=d({},r[h]));const u=e[h][l];if(u)e[h][l]=a.merge(u,c);else{const t=i[h][l];let n;t&&(n=r[h][l])?(e[h][l]=a.mergeWithStore(n,o,t,c),r[h][l]=a.mergeMetaWithStore(n,o,t,c)):(e[h][l]=c,r[h][l]=o)}a.indexes&&(h in n||(n[h]={},s[h]=d({},s[h])),function(e,n,i,s,r,o){for(const a of n){a in i||(s[a]=i[a]={});const n=i[a];o[e]&&delete n[o[e][a]],o&&o[e]&&o[e][a]!==r[a]&&(n[o[e][a]]=t),a in r&&(n[r[a]]=e)}}(l,a.indexes,n[h],s[h],e[h][l],i[h])),i[h][l]=e[h][l]};class x{constructor(e,t,n){this.dependencies=[],this.cycleCache={},this.cycleIndex=-1,this.localCache={},this._getEntity=e,this.getCache=A(t),this.resultCache=n}getEntity(e,t,n,i){const s=t.key,{localCacheKey:r,cycleCacheKey:o}=this.getCacheKey(s);if(r[e])e in o?this.cycleIndex=o[e]:this.dependencies.push({entity:n,path:{key:s,pk:e}});else{const a=this.getCache(e,t),[c,l]=a.get(n,this._getEntity);if(l)return r[e]=c.value,this.dependencies.push(...c.dependencies),c.value;{const t=this.dependencies.length;o[e]=t,this.dependencies.push({entity:n,path:{key:s,pk:e}}),i(r),delete o[e];const c=this.dependencies.slice(-1===this.cycleIndex?t:this.cycleIndex),l={dependencies:c,value:r[e]};a.set(c,l),this.cycleIndex===t&&(this.cycleIndex=-1)}}return r[e]}getCacheKey(e){e in this.localCache||(this.localCache[e]=Object.create(null)),e in this.cycleCache||(this.cycleCache[e]=Object.create(null));return{localCacheKey:this.localCache[e],cycleCacheKey:this.cycleCache[e]}}getResults(e,t,n){if(!t)return{data:n(),paths:this.paths()};let[i,s]=this.resultCache.get(e,this._getEntity);return void 0===s?(i=n(),s=this.paths(),this.dependencies.unshift({entity:e,path:{key:"",pk:""}}),this.resultCache.set(this.dependencies,i)):s.shift(),{data:i,paths:s}}paths(){return this.dependencies.map((e=>e.path))}}const A=e=>(t,n)=>{var i;const s=n.key,r=null!=(i=n.cacheWith)?i:n;s in e||(e[s]=Object.create(null));const o=e[s];o[t]||(o[t]=new WeakMap);let a=o[t].get(r);return a||(a=new v,o[t].set(r,a)),a};function S(e,t,n,i){if(function(e){return!!e&&"function"==typeof e.queryKey}(e))return e.queryKey(t,S,n,i);if("object"==typeof e&&e){return(Array.isArray(e)?u:y)(e,t,S,n,i)}return e}function L(e){return void 0!==e&&(!(e&&"object"==typeof e&&!Array.isArray(e))||Object.values(e).every(L))}class w{constructor(){this.entities={},this.endpoints=new v,this.queryKeys={}}denormalize(e,t,n,s=[]){if(void 0===e)return{data:t,paths:[]};if(void 0===t)return{data:void 0,paths:[]};const r=i(n);return m(r,new x(r,this.entities,this.endpoints),s)(e,t)}query(e,t,n,i,s=JSON.stringify(t)){const r=this.buildQueryKey(e,t,n,i,s);if(!r)return;const{data:o}=this.denormalize(e,r,n,t);return"symbol"==typeof o?void 0:o}buildQueryKey(e,t,i,s,r=JSON.stringify(t)){if("object"!=typeof e&&"function"!=typeof e.queryKey||!e)return e;this.queryKeys[r]||(this.queryKeys[r]=new v);const o=this.queryKeys[r],a=C(i),c=function(e){const t=n(e);return t?(t,n,i)=>{var s;return null==(s=e.getIn([t,n]))||null==s.toJS?void 0:s.toJS()}:(t,n,i)=>e[t]?e[t][n]:{}}(s);let[l,h]=o.get(e,function(e,t){return n=>3===n.length?t(...n):e(...n)}(a,c));if(!h){const n=[{path:[""],entity:e}];l=S(e,t,O(a,n),O(c,n)),o.set(n,l)}return l}}function O(e,t){return(...n)=>{const i=e(...n);return t.push({path:n,entity:i}),i}}function C(e){return n(e)?(...t)=>{var n;return null==(n=e.getIn(t))||null==n.toJS?void 0:n.toJS()}:(t,n)=>{var i;return n?null==(i=e[t])?void 0:i[n]:e[t]}}const R=(e,t,n=[],{entities:i,indexes:s,entityMeta:r}=j,o={fetchedAt:0,date:Date.now(),expiresAt:1/0})=>{if(null==e)return{result:t,entities:i,indexes:s,entityMeta:r};const a=function(e){return["object","function"].includes(typeof e)?"object":typeof e}(e);if(null===t||typeof t!==a&&(void 0===e.key||void 0!==e.pk||"string"!=typeof t))throw new Error(`Unexpected input given to normalize. Expected type to be "${a}", found "${null===t?"null":typeof t}".`);const c={result:"",entities:d({},i),indexes:d({},s),entityMeta:d({},r)},h=((e,t)=>{const n=function(){const e={};return function(t,n,i){return t in e||(e[t]={}),n in e[t]||(e[t][n]=[]),!!e[t][n].some((e=>e===i))||(e[t][n].push(i),!1)}}(),i=(s,r,o,a,c)=>r&&s?s.normalize&&"function"==typeof s.normalize?"object"!=typeof r?s.pk?`${r}`:r:s.normalize(r,o,a,c,i,e,t,n):"object"!=typeof r||"object"!=typeof s?r:(Array.isArray(s)?l:p)(s,r,o,a,c,i):r;return i})(I({},{},c.entities,c.indexes,c.entityMeta,o),C(i));return c.result=h(e,t,t,void 0,n),c};const j={entities:{},indexes:{},entityMeta:{}};var _={Invalid:1,InvalidIfStale:2,Valid:3};function M(e,t){const n=Date.now();return{fetchedAt:null!=t?t:n,date:n,expiresAt:n+e}}const P="rdc/fetch",T="rdc/set",q="rdc/setresponse",D="rdc/optimistic",K="rdc/reset",N="rdc/subscribe",z="rdc/unsubscribe",H="rdc/invalidate",Q="rdc/invalidateall",F="rdc/expireall",V="rdc/gc",B=P,U=T,Y=q,J=D,$=K,W=N,X=z,G=H,Z=Q,ee=F,te=V;var ne=Object.freeze({__proto__:null,EXPIREALL:F,EXPIREALL_TYPE:ee,FETCH:P,FETCH_TYPE:B,GC:V,GC_TYPE:te,INVALIDATE:H,INVALIDATEALL:Q,INVALIDATEALL_TYPE:Z,INVALIDATE_TYPE:G,OPTIMISTIC:D,OPTIMISTIC_TYPE:J,RESET:K,RESET_TYPE:$,SET:T,SET_RESPONSE:q,SET_RESPONSE_TYPE:Y,SET_TYPE:U,SUBSCRIBE:N,SUBSCRIBE_TYPE:W,UNSUBSCRIBE:z,UNSUBSCRIBE_TYPE:X});function ie(e,t,n){var i;return{type:D,key:e.key(...t),args:t,endpoint:e,meta:M(null!=(i=e.dataExpiryLength)?i:6e4,n)}}class se extends Error{}function re(e,t,n){return"AbortError"===n.name?d({},e,{optimistic:oe(e,t)}):d({},e,{meta:d({},e.meta,{[t.key]:{date:t.meta.date,fetchedAt:t.meta.fetchedAt,expiresAt:t.meta.expiresAt,error:n,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(n)}}),optimistic:oe(e,t)})}function oe(e,t){return e.optimistic.filter((e=>e.key!==t.key||(e.type===D?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}const ae={entities:{},endpoints:{},indexes:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var ce=Object.freeze({__proto__:null,INVALID:t,MemoCache:w,initialState:ae});function le(e,{args:t}){return{type:N,key:e.key(...t),args:t,endpoint:e}}function he(e,{args:t}){return{type:z,key:e.key(...t),args:t,endpoint:e}}const ue="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function de(e,{args:t,fetchedAt:n,response:i,error:s=!1}){var r,o;const a=s?null!=(r=e.errorExpiryLength)?r:1e3:null!=(o=e.dataExpiryLength)?o:6e4;return{type:q,key:e.key(...t),response:i,args:t.map(ue),endpoint:e,meta:M(a,n),error:s}}function pe(e,{args:t,fetchedAt:n,value:i}){return{type:T,value:i,args:t.map(ue),schema:e,meta:M(6e4,n)}}function fe(){return{type:K,date:Date.now()}}function ye(e){return{type:Q,testKey:e}}function ge(e,{args:t}){return{type:H,key:e.key(...t)}}function me(e,{args:t}){let n=0,i=0;const s=new Promise(((e,t)=>{[n,i]=[e,t]})),r={fetchedAt:Date.now(),resolve:n,reject:i,promise:s};return{type:P,key:e.key(...t),args:t,endpoint:e,meta:r}}function ve(e){return{type:F,testKey:e}}var be=Object.freeze({__proto__:null,createExpireAll:ve,createFetch:me,createInvalidate:ge,createInvalidateAll:ye,createMeta:M,createOptimistic:ie,createReset:fe,createSet:pe,createSetResponse:de,createSubscription:le,createUnsubscription:he});class Ee{init(){}cleanup(){}createCountRef(){return()=>()=>{}}}function ke(e,t){return e.meta[t]}const Ie=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},xe=()=>ae;class Ae{constructor({dispatch:e=Ie,getState:t=xe,memo:n=new w,gcPolicy:r=new Ee}={}){this.fetch=(e,...t)=>{const n=me(e,{args:t});return this.dispatch(n),e.schema?n.meta.promise.then((n=>function(e,t,n,r=[]){return void 0===e||void 0===t?t:m(i(n),new s,r)(e,t).data}(e.schema,n,{},t))):n.meta.promise},this.fetchIfStale=(e,...t)=>{const{data:n,expiresAt:i,expiryStatus:s}=this.getResponse(e,...t,this.getState());return s!==_.Invalid&&Date.now()<=i?n:this.fetch(e,...t)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(ge(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch(ye((t=>e.testKey(t)))),this.expireAll=e=>this.dispatch(ve((t=>e.testKey(t)))),this.resetEntireStore=()=>this.dispatch(fe()),this.setResponse=(e,...t)=>{const n=t[t.length-1],i=de(e,{args:t.slice(0,t.length-1),response:n});return this.dispatch(i)},this.setError=(e,...t)=>{const n=t[t.length-1],i=de(e,{args:t.slice(0,t.length-1),response:n,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(de(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(le(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(he(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new Le(this,e,t),this._dispatch=e,this.getState=t,this.memo=n,this.gcPolicy=r}set dispatch(e){this._dispatch=e}get dispatch(){return this._dispatch}bindMiddleware({dispatch:e,getState:t}){this._dispatch=e,this.getState=t}set(e,...t){const n=t[t.length-1],i=pe(e,{args:t.slice(0,t.length-1),value:n});return this.dispatch(i)}getError(e,...t){if(null===t[0])return;const n=t[t.length-1],i=t.slice(0,t.length-1),s=e.key(...i),r=ke(n,s);return void 0===n.endpoints[s]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0}getResponse(e,...t){return this.getResponseMeta(e,...t)}getResponseMeta(e,...t){const n=t[t.length-1],i=t.slice(0,t.length-1).map(ue),s=1!==i.length||null!==i[0],r=s?e.key(...i):"",o=s?n.endpoints[r]:void 0,a=e.schema,c=ke(n,r);let l=null==c?void 0:c.expiresAt;const h=void 0===o&&void 0!==a,u=h?this.memo.buildQueryKey(a,i,n.entities,n.indexes,r):o;if(!s)return{data:u,expiryStatus:_.Valid,expiresAt:1/0,countRef:()=>()=>{}};let d=!1;if(h)d=!L(u);else if(!a||!Se(a))return{data:o,expiryStatus:null!=c&&c.invalidated?_.Invalid:o&&!e.invalidIfStale?_.Valid:_.InvalidIfStale,expiresAt:l||0,countRef:this.gcPolicy.createCountRef({key:r})};const{data:p,paths:f}=this.memo.denormalize(a,u,n.entities,i);return!l&&d&&(l=1),this.getSchemaResponse(p,r,f,n.entityMeta,l,e.invalidIfStale||d,c)}get(e,...t){const n=t[t.length-1],i=t.slice(0,t.length-1).map(ue);return this.memo.query(e,i,n.entities,n.indexes)}getQueryMeta(e,...t){const n=t[t.length-1],i=t.slice(0,t.length-1).map(ue),s=this.memo.buildQueryKey(e,i,n.entities,n.indexes,JSON.stringify(i));if(!s)return{data:void 0,countRef:()=>()=>{}};const{data:r,paths:o}=this.memo.denormalize(e,s,n.entities,i);return{data:"symbol"==typeof r?void 0:r,countRef:this.gcPolicy.createCountRef({paths:o})}}getSchemaResponse(e,t,n,i,s,r,o={}){const a="symbol"==typeof e;s||(s=function(e,t){let n=1/0;for(const{pk:s,key:r}of e){var i;const e=null==(i=t[r])||null==(i=i[s])?void 0:i.expiresAt;e<n&&(n=e)}return n}(n,i));return{data:e,expiryStatus:null!=o&&o.invalidated||a&&(null==o||!o.error)?_.Invalid:a||r?_.InvalidIfStale:_.Valid,expiresAt:s,countRef:this.gcPolicy.createCountRef({key:t,paths:n})}}}function Se(e){if(o(e))return!0;if(Array.isArray(e))return 0!==e.length&&Se(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?Se(t):Object.values(t).some((e=>Se(e)))}return!1}class Le{constructor(e,t,n=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=Le.abort,this.state=t,this.controller=e,this.fetchedAt=n}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}getResponseMeta(e,...t){return this.controller.getResponseMeta(e,...t,this.state)}getError(e,...t){return this.controller.getError(e,...t,this.state)}get(e,...t){return this.controller.get(e,...t,this.state)}getQueryMeta(e,...t){return this.controller.getQueryMeta(e,...t,this.state)}}Le.abort=new se;class we extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class Oe{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 Ce{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let Re;Re="undefined"!=typeof navigator&&"function"==typeof addEventListener?Oe:Ce;var je=Re;let _e={};class Me{constructor(e,t){this.started=!1,this.actions=[],this.maxBufferLength=100,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(d({},_e,e)),null!=e&&e.maxAge&&(this.maxBufferLength=2*e.maxAge),t&&(this.skipLogging=t)}handleAction(e,t){this.started?this.devTools.send(e,t):(this.actions.length>this.maxBufferLength&&(this.actions=this.actions.slice(this.maxBufferLength/2)),this.actions.push([e,t]))}init(e){}cleanup(){}}Me.prototype.middleware=()=>e=>t=>e(t);e.Controller=Ae,e.DefaultConnectionListener=je,e.DevToolsManager=Me,e.ExpiryStatus=_,e.GCPolicy=class{constructor({intervalMS:e=3e5,expiryMultiplier:t=2,expiresAt:n}={}){this.endpointCount=new Map,this.entityCount=new Map,this.endpointsQ=new Set,this.entitiesQ=[],n&&(this.expiresAt=n.bind(this)),this.options={intervalMS:e,expiryMultiplier:t}}init(e){this.controller=e,this.intervalId=setInterval((()=>{this.idleCallback((()=>this.runSweep()),{timeout:1e3})}),this.options.intervalMS)}cleanup(){clearInterval(this.intervalId)}createCountRef({key:e,paths:t=[]}){return()=>{var n;return e&&this.endpointCount.set(e,(null!=(n=this.endpointCount.get(e))?n:0)+1),t.forEach((e=>{var t;this.entityCount.has(e.key)||this.entityCount.set(e.key,new Map);const n=this.entityCount.get(e.key);n.set(e.pk,(null!=(t=n.get(e.pk))?t:0)+1)})),()=>{if(e){const t=this.endpointCount.get(e);void 0!==t&&(t<=1?(this.endpointCount.delete(e),this.endpointsQ.add(e)):this.endpointCount.set(e,t-1))}t.forEach((e=>{if(!this.entityCount.has(e.key))return;const t=this.entityCount.get(e.key),n=t.get(e.pk);void 0!==n&&(n<=1?(t.delete(e.pk),this.entitiesQ.push(e)):t.set(e.pk,n-1))}))}}}expiresAt({fetchedAt:e,expiresAt:t}){return Math.max((t-e)*this.options.expiryMultiplier,12e4)+e}runSweep(){const e=this.controller.getState(),t=[],n=[],i=Date.now(),s=new Set;for(const t of this.endpointsQ){var r;!this.endpointCount.has(t)&&this.expiresAt(null!=(r=e.meta[t])?r:{fetchedAt:0,date:0,expiresAt:0})<i?n.push(t):s.add(t)}this.endpointsQ=s;const o=[];for(const n of this.entitiesQ){var a,c,l;(null==(a=this.entityCount.get(n.key))||!a.has(n.pk))&&this.expiresAt(null!=(c=null==(l=e.entityMeta[n.key])?void 0:l[n.pk])?c:{fetchedAt:0,date:0,expiresAt:0})<i?t.push(n):o.push(n)}this.entitiesQ=o,(t.length||n.length)&&this.controller.dispatch({type:V,entities:t,endpoints:n})}idleCallback(e,t){"function"==typeof requestIdleCallback?requestIdleCallback(e,t):e()}},e.ImmortalGCPolicy=Ee,e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){this.middleware=e=>t=>async n=>{await t(n),n.type===q&&n.error&&this.shouldLogout(n.response)&&this.handleLogout(e)},e&&(this.handleLogout=e),t&&(this.shouldLogout=t)}cleanup(){}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor({dataExpiryLength:e=6e4,errorExpiryLength:t=1e3}={}){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new Ae,this.middleware=e=>(this.controller=e,t=>n=>{switch(n.type){case P:return this.handleFetch(n),void 0!==n.endpoint.getOptimisticResponse&&n.endpoint.sideEffect?t(n):Promise.resolve();case q:return t(n).then((()=>{if(n.key in this.fetched){var t;const i=null==(t=e.getState().meta[n.key])?void 0:t.error;i?this.handleSet(de(n.endpoint,{args:n.args,response:i,fetchedAt:n.meta.fetchedAt,error:!0})):this.handleSet(n)}}));case K:{const e=d({},this.rejectors);return this.clearAll(),t(n).then((()=>{for(const t in e)e[t](new we)}))}default:return t(n)}}),this.dataExpiryLength=e,this.errorExpiryLength=t}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}skipLogging(e){return e.type===P&&e.key in this.fetched}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(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const{resolve:t,reject:n,fetchedAt:i}=e.meta,s=!e.endpoint.sideEffect,r=()=>{let r=e.endpoint(...e.args);return s||(r=(e=>e.then((e=>(t(e),e))).catch((e=>{throw n(e),e})))(r)),r=r.then((t=>{let n=this.getLastReset();return i>=n&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i}),t})).catch((t=>{const n=this.getLastReset();throw i>=n&&this.controller.resolve(e.endpoint,{args:e.args,response:t,fetchedAt:i,error:!0}),t})),r};return s?this.throttle(e.key,r,i).then((e=>t(e))).catch((e=>n(e))):r().catch((()=>{}))}handleSet(e){if(e.key in this.fetched){let t;t=e.error?this.rejectors[e.key]:this.resolvers[e.key],t(e.response),this.clear(e.key)}}throttle(e,t,n){const i=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>i||(this.fetched[e]=new Promise(((t,n)=>{this.resolvers[e]=t,this.rejectors[e]=n})),this.fetchedAt[e]=n,this.idleCallback((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}idleCallback(e,t){e()}},e.PollingSubscription=class{constructor(e,t,n){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===e.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=e.endpoint,this.frequency=e.endpoint.pollFrequency,this.args=e.args,this.key=e.key,this.frequencyHistogram.set(this.frequency,1),this.controller=t,this.connectionListener=n||new je,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.endpoint,t=function(...t){return e.call(this,...t)};Object.assign(t,this.endpoint),t.dataExpiryLength=this.frequency/2,t.errorExpiryLength=this.frequency/10,t.errorPolicy=()=>"soft",t.key=()=>this.key,this.controller.fetch(t,...this.args).catch((()=>null))}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.controller.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=we,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new Ae,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case N:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case z:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}}),this.Subscription=e}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.key;if(t in this.subscriptions){const n=e.endpoint.pollFrequency;this.subscriptions[t].add(n)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.key;if(t in this.subscriptions){const n=e.endpoint.pollFrequency;this.subscriptions[t].remove(n)&&delete this.subscriptions[t]}}},e.__INTERNAL__=ce,e.actionTypes=ne,e.actions=be,e.applyManager=function(e,t){return e.map(((e,n)=>(e.middleware||(e.middleware=null==e.getMiddleware?void 0:e.getMiddleware()),i=>(0===n&&t.bindMiddleware(i),e.middleware(t)))))},e.createReducer=function(e){return function(t,n){switch(t||(t=ae),n.type){case V:return n.entities.forEach((({key:e,pk:n})=>{var i,s;null==(i=t.entities[e])||delete i[n],null==(s=t.entityMeta[e])||delete s[n]})),n.endpoints.forEach((e=>{delete t.endpoints[e],delete t.meta[e]})),t;case P:return function(e,t){if(t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect){const n=ie(t.endpoint,t.args,t.meta.fetchedAt);return d({},e,{optimistic:[...e.optimistic,n]})}return e}(t,n);case D:case q:return function(e,t,n){if(t.error)return re(e,t,t.response);try{var i;let s;if(t.type===D){if(!t.endpoint.getOptimisticResponse)return e;try{s=t.endpoint.getOptimisticResponse.call(t.endpoint,n.snapshot(e,t.meta.fetchedAt),...t.args)}catch(t){if(t.constructor===se)return e;throw t}}else s=t.response;const{result:r,entities:o,indexes:a,entityMeta:c}=R(t.endpoint.schema,s,t.args,e,t.meta),l=d({},e.endpoints,{[t.key]:r});try{if(t.endpoint.update){const e=t.endpoint.update(r,...t.args);Object.keys(e).forEach((t=>{l[t]=e[t](l[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${t.key}`),console.error(e)}return{entities:o,endpoints:l,indexes:a,meta:d({},e.meta,{[t.key]:{date:t.meta.date,fetchedAt:t.meta.fetchedAt,expiresAt:t.meta.expiresAt,prevExpiresAt:null==(i=e.meta[t.key])?void 0:i.expiresAt}}),entityMeta:c,optimistic:oe(e,t),lastReset:e.lastReset}}catch(n){return"object"==typeof n&&(n.message=`Error processing ${t.key}\n\nFull Schema: ${JSON.stringify(t.endpoint.schema,void 0,2)}\n\nError:\n${n.message}`,"response"in t&&(n.response=t.response),n.status=400),re(e,t,n)}}(t,n,e);case T:return function(e,t,n){let i;if("function"==typeof t.value){const s=n.get(t.schema,...t.args,e);if(void 0===s)return e;i=t.value(s)}else i=t.value;try{const{entities:n,indexes:s,entityMeta:r}=R(t.schema,i,t.args,e,t.meta);return{entities:n,endpoints:e.endpoints,indexes:s,meta:e.meta,entityMeta:r,optimistic:e.optimistic,lastReset:e.lastReset}}catch(t){return e}}(t,n,e);case Q:case H:return function(e,t){const n=d({},e.endpoints),i=d({},e.meta),s=e=>{delete n[e];const t=d({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===H?s(t.key):Object.keys(n).forEach((e=>{t.testKey(e)&&s(e)})),d({},e,{endpoints:n,meta:i})}(t,n);case F:return function(e,t){const n=d({},e.meta);return Object.keys(n).forEach((e=>{t.testKey(e)&&(n[e]=d({},n[e],{expiresAt:1}))})),d({},e,{meta:n})}(t,n);case K:return d({},ae,{lastReset:n.date});default:return t}}},e.initManager=function(e,t,n){return()=>(e.forEach((e=>{null==e.init||e.init(n)})),t.gcPolicy.init(t),()=>{e.forEach((e=>{e.cleanup()})),t.gcPolicy.cleanup()})},e.initialState=ae}));
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _Promise from "core-js-pure/stable/promise/index.js";
|
|
2
1
|
import { ExpiryStatus, MemoCache, isEntity, denormalize, validateQueryKey } from '@data-client/normalizr';
|
|
3
2
|
import AbortOptimistic from './AbortOptimistic.js';
|
|
4
3
|
import { createUnsubscription, createSubscription } from './actions/createSubscription.js';
|
|
@@ -83,7 +82,7 @@ export default class Controller {
|
|
|
83
82
|
*/
|
|
84
83
|
this.invalidate = (endpoint, ...args) => args[0] !== null ? this.dispatch(createInvalidate(endpoint, {
|
|
85
84
|
args: args
|
|
86
|
-
})) :
|
|
85
|
+
})) : Promise.resolve();
|
|
87
86
|
/**
|
|
88
87
|
* Forces refetching and suspense on useSuspense on all matching endpoint result keys.
|
|
89
88
|
* @see https://dataclient.io/docs/api/Controller#invalidateAll
|
|
@@ -139,14 +138,14 @@ export default class Controller {
|
|
|
139
138
|
*/
|
|
140
139
|
this.subscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createSubscription(endpoint, {
|
|
141
140
|
args: args
|
|
142
|
-
})) :
|
|
141
|
+
})) : Promise.resolve();
|
|
143
142
|
/**
|
|
144
143
|
* Marks completion of subscription to a given Endpoint.
|
|
145
144
|
* @see https://dataclient.io/docs/api/Controller#unsubscribe
|
|
146
145
|
*/
|
|
147
146
|
this.unsubscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createUnsubscription(endpoint, {
|
|
148
147
|
args: args
|
|
149
|
-
})) :
|
|
148
|
+
})) : Promise.resolve();
|
|
150
149
|
/*************** More ***************/
|
|
151
150
|
/* TODO:
|
|
152
151
|
abort = <E extends EndpointInterface>(
|
|
@@ -424,4 +423,4 @@ class Snapshot {
|
|
|
424
423
|
}
|
|
425
424
|
}
|
|
426
425
|
Snapshot.abort = new AbortOptimistic();
|
|
427
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiLCJNZW1vQ2FjaGUiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwidmFsaWRhdGVRdWVyeUtleSIsIkFib3J0T3B0aW1pc3RpYyIsImNyZWF0ZVVuc3Vic2NyaXB0aW9uIiwiY3JlYXRlU3Vic2NyaXB0aW9uIiwiY3JlYXRlRXhwaXJlQWxsIiwiY3JlYXRlRmV0Y2giLCJjcmVhdGVJbnZhbGlkYXRlIiwiY3JlYXRlSW52YWxpZGF0ZUFsbCIsImNyZWF0ZVJlc2V0IiwiY3JlYXRlU2V0IiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbnN1cmVQb2pvIiwiSW1tb3J0YWxHQ1BvbGljeSIsImluaXRpYWxTdGF0ZSIsInNlbGVjdE1ldGEiLCJ1bnNldERpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJ1bnNldFN0YXRlIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsIm1lbW8iLCJnY1BvbGljeSIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwic2NoZW1hIiwibWV0YSIsInByb21pc2UiLCJ0aGVuIiwiaW5wdXQiLCJmZXRjaElmU3RhbGUiLCJkYXRhIiwiZXhwaXJlc0F0IiwiZXhwaXJ5U3RhdHVzIiwiZ2V0UmVzcG9uc2UiLCJJbnZhbGlkIiwiRGF0ZSIsIm5vdyIsImludmFsaWRhdGUiLCJfUHJvbWlzZSIsInJlc29sdmUiLCJpbnZhbGlkYXRlQWxsIiwib3B0aW9ucyIsImtleSIsInRlc3RLZXkiLCJleHBpcmVBbGwiLCJyZXNldEVudGlyZVN0b3JlIiwic2V0UmVzcG9uc2UiLCJyZXN0IiwicmVzcG9uc2UiLCJsZW5ndGgiLCJzbGljZSIsInNldEVycm9yIiwiZXJyb3IiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsInNuYXBzaG90Iiwic3RhdGUiLCJmZXRjaGVkQXQiLCJTbmFwc2hvdCIsIl9kaXNwYXRjaCIsImJpbmRNaWRkbGV3YXJlIiwic2V0IiwidmFsdWUiLCJnZXRFcnJvciIsImVuZHBvaW50cyIsInVuZGVmaW5lZCIsImVycm9yUG9saWN5IiwiZ2V0UmVzcG9uc2VNZXRhIiwibWFwIiwiaXNBY3RpdmUiLCJjYWNoZUVuZHBvaW50cyIsInNob3VsZFF1ZXJ5IiwiYnVpbGRRdWVyeUtleSIsImVudGl0aWVzIiwiaW5kZXhlcyIsIlZhbGlkIiwiSW5maW5pdHkiLCJjb3VudFJlZiIsImlzSW52YWxpZCIsInNjaGVtYUhhc0VudGl0eSIsImludmFsaWRhdGVkIiwiaW52YWxpZElmU3RhbGUiLCJJbnZhbGlkSWZTdGFsZSIsImNyZWF0ZUNvdW50UmVmIiwicGF0aHMiLCJnZXRTY2hlbWFSZXNwb25zZSIsImVudGl0eU1ldGEiLCJnZXQiLCJxdWVyeSIsImdldFF1ZXJ5TWV0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbnZhbGlkRGVub3JtYWxpemUiLCJlbnRpdHlFeHBpcmVzQXQiLCJwayIsIl9lbnRpdHlNZXRhJGtleSIsImVudGl0eUV4cGlyeSIsIkFycmF5IiwiaXNBcnJheSIsIm5lc3RlZFNjaGVtYSIsIk9iamVjdCIsInZhbHVlcyIsInNvbWUiLCJ4IiwiY29udHJvbGxlciIsImFib3J0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVycm9yVHlwZXMsXG4gIFNuYXBzaG90SW50ZXJmYWNlLFxuICBTY2hlbWEsXG4gIERlbm9ybWFsaXplLFxuICBRdWVyeWFibGUsXG4gIFNjaGVtYUFyZ3MsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHtcbiAgRXhwaXJ5U3RhdHVzLFxuICBFbmRwb2ludEludGVyZmFjZSxcbiAgRmV0Y2hGdW5jdGlvbixcbiAgUmVzb2x2ZVR5cGUsXG4gIERlbm9ybWFsaXplTnVsbGFibGUsXG4gIEVudGl0eVBhdGgsXG4gIE1lbW9DYWNoZSxcbiAgaXNFbnRpdHksXG4gIGRlbm9ybWFsaXplLFxuICB2YWxpZGF0ZVF1ZXJ5S2V5LFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IEFib3J0T3B0aW1pc3RpYyBmcm9tICcuL0Fib3J0T3B0aW1pc3RpYy5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVVbnN1YnNjcmlwdGlvbixcbiAgY3JlYXRlU3Vic2NyaXB0aW9uLFxufSBmcm9tICcuL2FjdGlvbnMvY3JlYXRlU3Vic2NyaXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUV4cGlyZUFsbCxcbiAgY3JlYXRlRmV0Y2gsXG4gIGNyZWF0ZUludmFsaWRhdGUsXG4gIGNyZWF0ZUludmFsaWRhdGVBbGwsXG4gIGNyZWF0ZVJlc2V0LFxuICBjcmVhdGVTZXQsXG4gIGNyZWF0ZVNldFJlc3BvbnNlLFxufSBmcm9tICcuL2FjdGlvbnMvaW5kZXguanMnO1xuaW1wb3J0IGVuc3VyZVBvam8gZnJvbSAnLi9lbnN1cmVQb2pvLmpzJztcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgUmVkdXhNaWRkbGV3YXJlQVBJIH0gZnJvbSAnLi4vbWFuYWdlci9hcHBseU1hbmFnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBHQ0ludGVyZmFjZSB9IGZyb20gJy4uL3N0YXRlL0dDUG9saWN5LmpzJztcbmltcG9ydCB7IEltbW9ydGFsR0NQb2xpY3kgfSBmcm9tICcuLi9zdGF0ZS9HQ1BvbGljeS5qcyc7XG5pbXBvcnQgeyBpbml0aWFsU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9yZWR1Y2VyL2NyZWF0ZVJlZHVjZXIuanMnO1xuaW1wb3J0IHNlbGVjdE1ldGEgZnJvbSAnLi4vc3RhdGUvc2VsZWN0TWV0YS5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblR5cGVzLCBEaXNwYXRjaCwgU3RhdGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIEdlbmVyaWNEaXNwYXRjaCA9ICh2YWx1ZTogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IHR5cGUgRGF0YUNsaWVudERpc3BhdGNoID0gKHZhbHVlOiBBY3Rpb25UeXBlcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBDb250cm9sbGVyQ29uc3RydWN0b3JQcm9wczxcbiAgRCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IERhdGFDbGllbnREaXNwYXRjaCxcbj4ge1xuICBkaXNwYXRjaD86IEQ7XG4gIGdldFN0YXRlPzogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIG1lbW8/OiBQaWNrPE1lbW9DYWNoZSwgJ2Rlbm9ybWFsaXplJyB8ICdxdWVyeScgfCAnYnVpbGRRdWVyeUtleSc+O1xuICBnY1BvbGljeT86IEdDSW50ZXJmYWNlO1xufVxuXG5jb25zdCB1bnNldERpc3BhdGNoID0gKGFjdGlvbjogdW5rbm93bik6IFByb21pc2U8dm9pZD4gPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYERpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuIGAgK1xuICAgICAgYE90aGVyIG1pZGRsZXdhcmUgd291bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhpcyBkaXNwYXRjaC5gLFxuICApO1xufTtcbmNvbnN0IHVuc2V0U3RhdGUgPSAoKTogU3RhdGU8dW5rbm93bj4gPT4ge1xuICAvLyBUaGlzIGlzIG9ubHkgdGhlIHZhbHVlIHVudGlsIGl0IGlzIHNldCBieSB0aGUgRGF0YVByb3ZpZGVyXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiBpbml0aWFsU3RhdGU7XG59O1xuXG4vKipcbiAqIEltcGVyYXRpdmUgY29udHJvbCBvZiBSZWFjdGl2ZSBEYXRhIENsaWVudCBzdG9yZVxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sbGVyPFxuICAvLyBOT1RFOiBXZSB0ZW1wbGF0ZSBvbiBlbnRpcmUgZGlzcGF0Y2gsIHNvIHdlIGNhbiBiZSBjb250cmF2YXJpYW50IG9uIEFjdGlvblR5cGVzXG4gIEQgZXh0ZW5kcyBHZW5lcmljRGlzcGF0Y2ggPSBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4+IHtcbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uIHRvIFJlYWN0aXZlIERhdGEgQ2xpZW50IHJlZHVjZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZGlzcGF0Y2hcbiAgICovXG4gIGRlY2xhcmUgcHJvdGVjdGVkIF9kaXNwYXRjaDogRDtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhdGVzdCBzdGF0ZSBzbmFwc2hvdCB0aGF0IGlzIGZ1bGx5IGNvbW1pdHRlZC5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBpbXBlcmF0aXZlIHVzZS1jYXNlcyBsaWtlIGV2ZW50IGhhbmRsZXJzLlxuICAgKiBUaGlzIHNob3VsZCAqbm90KiBiZSB1c2VkIHRvIHJlbmRlcjsgaW5zdGVhZCB1c2VTdXNwZW5zZSgpIG9yIHVzZUNhY2hlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRTdGF0ZVxuICAgKi9cbiAgZGVjbGFyZSBnZXRTdGF0ZTogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIC8qKlxuICAgKiBTaW5nbGV0b24gdG8gbWFpbnRhaW4gcmVmZXJlbnRpYWwgZXF1YWxpdHkgYmV0d2VlbiBjYWxsc1xuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBtZW1vOiBQaWNrPFxuICAgIE1lbW9DYWNoZSxcbiAgICAnZGVub3JtYWxpemUnIHwgJ3F1ZXJ5JyB8ICdidWlsZFF1ZXJ5S2V5J1xuICA+O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGdhcmJhZ2UgY29sbGVjdGlvblxuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBnY1BvbGljeTogR0NJbnRlcmZhY2U7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGRpc3BhdGNoID0gdW5zZXREaXNwYXRjaCBhcyBhbnksXG4gICAgZ2V0U3RhdGUgPSB1bnNldFN0YXRlLFxuICAgIG1lbW8gPSBuZXcgTWVtb0NhY2hlKCksXG4gICAgZ2NQb2xpY3kgPSBuZXcgSW1tb3J0YWxHQ1BvbGljeSgpLFxuICB9OiBDb250cm9sbGVyQ29uc3RydWN0b3JQcm9wczxEPiA9IHt9KSB7XG4gICAgdGhpcy5fZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gICAgdGhpcy5tZW1vID0gbWVtbztcbiAgICB0aGlzLmdjUG9saWN5ID0gZ2NQb2xpY3k7XG4gIH1cblxuICAvLyBUT0RPOiBkcm9wIHdoZW4gZHJvcCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nICgwLjE0IGFuZCBiZWxvdylcbiAgc2V0IGRpc3BhdGNoKGRpc3BhdGNoOiBEKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aGlzLl9kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICB9XG5cbiAgLy8gVE9ETzogZHJvcCB3aGVuIGRyb3Agc3VwcG9ydCBmb3IgZGVzdHJ1Y3R1cmluZyAoMC4xNCBhbmQgYmVsb3cpXG4gIGdldCBkaXNwYXRjaCgpOiBEIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2g7XG4gIH1cblxuICBiaW5kTWlkZGxld2FyZSh7XG4gICAgZGlzcGF0Y2gsXG4gICAgZ2V0U3RhdGUsXG4gIH06IHtcbiAgICBkaXNwYXRjaDogRDtcbiAgICBnZXRTdGF0ZTogUmVkdXhNaWRkbGV3YXJlQVBJWydnZXRTdGF0ZSddO1xuICB9KSB7XG4gICAgdGhpcy5fZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqIEFjdGlvbiBEaXNwYXRjaGVycyAqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGVuZHBvaW50IHdpdGggZ2l2ZW4gYXJncywgdXBkYXRpbmcgdGhlIFJlYWN0aXZlIERhdGEgQ2xpZW50IGNhY2hlIHdpdGggdGhlIHJlc3BvbnNlIG9yIGVycm9yIHVwb24gY29tcGxldGlvbi5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNmZXRjaFxuICAgKi9cbiAgZmV0Y2ggPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IEVbJ3NjaGVtYSddIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbCA/IFJldHVyblR5cGU8RT5cbiAgOiBQcm9taXNlPERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPj4gPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZUZldGNoKGVuZHBvaW50LCB7XG4gICAgICBhcmdzLFxuICAgIH0pO1xuICAgIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcblxuICAgIGlmIChlbmRwb2ludC5zY2hlbWEpIHtcbiAgICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlLnRoZW4oaW5wdXQgPT5cbiAgICAgICAgZGVub3JtYWxpemUoZW5kcG9pbnQuc2NoZW1hLCBpbnB1dCwge30sIGFyZ3MpLFxuICAgICAgKSBhcyBhbnk7XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlIGFzIGFueTtcbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2hlcyBvbmx5IGlmIGVuZHBvaW50IGlzIGNvbnNpZGVyZWQgJ3N0YWxlJzsgb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZmV0Y2hJZlN0YWxlXG4gICAqL1xuICBmZXRjaElmU3RhbGUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IEVbJ3NjaGVtYSddIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbCA/IFJldHVyblR5cGU8RT4gfCBSZXNvbHZlVHlwZTxFPlxuICA6IFByb21pc2U8RGVub3JtYWxpemU8RVsnc2NoZW1hJ10+PiB8IERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPiA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBleHBpcmVzQXQsIGV4cGlyeVN0YXR1cyB9ID0gdGhpcy5nZXRSZXNwb25zZShcbiAgICAgIGVuZHBvaW50LFxuICAgICAgLi4uYXJncyxcbiAgICAgIHRoaXMuZ2V0U3RhdGUoKSxcbiAgICApO1xuICAgIGlmIChleHBpcnlTdGF0dXMgIT09IEV4cGlyeVN0YXR1cy5JbnZhbGlkICYmIERhdGUubm93KCkgPD0gZXhwaXJlc0F0KVxuICAgICAgcmV0dXJuIGRhdGEgYXMgYW55O1xuICAgIHJldHVybiB0aGlzLmZldGNoKGVuZHBvaW50LCAuLi5hcmdzKTtcbiAgfTtcblxuICAvKipcbiAgICogRm9yY2VzIHJlZmV0Y2hpbmcgYW5kIHN1c3BlbnNlIG9uIHVzZVN1c3BlbnNlIHdpdGggdGhlIHNhbWUgRW5kcG9pbnQgYW5kIHBhcmFtZXRlcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZVxuICAgKi9cbiAgaW52YWxpZGF0ZSA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICBjcmVhdGVJbnZhbGlkYXRlKGVuZHBvaW50LCB7XG4gICAgICAgICAgYXJnczogYXJncyBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugb24gYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ludmFsaWRhdGVBbGxcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW52YWxpZGF0aW9uIGlzIGNvbW1pdGVkLlxuICAgKi9cbiAgaW52YWxpZGF0ZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlSW52YWxpZGF0ZUFsbCgoa2V5OiBzdHJpbmcpID0+IG9wdGlvbnMudGVzdEtleShrZXkpKSk7XG5cbiAgLyoqXG4gICAqIFNldHMgYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzIHRvIGJlIFNUQUxFLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2V4cGlyZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBleHBpcnkgaXMgY29tbWl0ZWQuICpOT1QqIGZldGNoIHByb21pc2VcbiAgICovXG4gIGV4cGlyZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlRXhwaXJlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBlbnRpcmUgUmVhY3RpdmUgRGF0YSBDbGllbnQgY2FjaGUuIEFsbCBpbmZsaWdodCByZXF1ZXN0cyB3aWxsIG5vdCByZXNvbHZlLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc2V0RW50aXJlU3RvcmVcbiAgICovXG4gIHJlc2V0RW50aXJlU3RvcmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlc2V0KCkpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHZhbHVlIGZvciB0aGUgUXVlcnlhYmxlIGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldFxuICAgKi9cbiAgc2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uU2NoZW1hQXJnczxTPiwgKHByZXZpb3VzVmFsdWU6IERlbm9ybWFsaXplPFM+KSA9PiB7fV1cbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCB7fV1cbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbHVlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZVNldChzY2hlbWEsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBTY2hlbWFBcmdzPFM+LFxuICAgICAgdmFsdWUsXG4gICAgfSk7XG4gICAgLy8gVE9ETzogcmVqZWN0IHdpdGggZXJyb3IgaWYgdGhpcyBmYWlscyBpbiByZWR1Y2VyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJlc3BvbnNlIGZvciB0aGUgRW5kcG9pbnQgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0UmVzcG9uc2VcbiAgICovXG4gIHNldFJlc3BvbnNlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgYW55XVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT4gPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0cyBhbiBlcnJvciByZXNwb25zZSBmb3IgdGhlIEVuZHBvaW50IGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldEVycm9yXG4gICAqL1xuICBzZXRFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIEVycm9yXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogRXJyb3IgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBpbmZsaWdodCBmZXRjaC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNyZXNvbHZlXG4gICAqL1xuICByZXNvbHZlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICBtZXRhOlxuICAgICAgfCB7XG4gICAgICAgICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgICAgICAgIHJlc3BvbnNlOiBFcnJvcjtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcjogdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgICAgICAgIHJlc3BvbnNlOiBhbnk7XG4gICAgICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICAgICAgZXJyb3I/OiBmYWxzZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goY3JlYXRlU2V0UmVzcG9uc2UoZW5kcG9pbnQsIG1ldGEgYXMgYW55KSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcmtzIGEgbmV3IHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3N1YnNjcmliZVxuICAgKi9cbiAgc3Vic2NyaWJlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZTxcbiAgICAgIEZldGNoRnVuY3Rpb24sXG4gICAgICBTY2hlbWEgfCB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQgfCBmYWxzZVxuICAgID4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsID9cbiAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgIGNyZWF0ZVN1YnNjcmlwdGlvbihlbmRwb2ludCwge1xuICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAvKipcbiAgICogTWFya3MgY29tcGxldGlvbiBvZiBzdWJzY3JpcHRpb24gdG8gYSBnaXZlbiBFbmRwb2ludC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciN1bnN1YnNjcmliZVxuICAgKi9cbiAgdW5zdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGwgP1xuICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgY3JlYXRlVW5zdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICBhcmdzOiBhcmdzIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqKioqKioqKioqKioqKiBNb3JlICoqKioqKioqKioqKioqKi9cblxuICAvKiBUT0RPOlxuICBhYm9ydCA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiBQcm9taXNlPHZvaWQ+XG4gICovXG5cbiAgLyoqXG4gICAqIEdldHMgYSBzbmFwc2hvdCAoaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90KVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NuYXBzaG90XG4gICAqL1xuICBzbmFwc2hvdCA9IChzdGF0ZTogU3RhdGU8dW5rbm93bj4sIGZldGNoZWRBdD86IG51bWJlcik6IFNuYXBzaG90PHVua25vd24+ID0+IHtcbiAgICByZXR1cm4gbmV3IFNuYXBzaG90KHRoaXMsIHN0YXRlLCBmZXRjaGVkQXQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlcnJvciwgaWYgYW55LCBmb3IgYSBnaXZlbiBlbmRwb2ludC4gUmV0dXJucyB1bmRlZmluZWQgZm9yIG5vIGVycm9ycy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRFcnJvclxuICAgKi9cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OlxuICAgICAgfCByZWFkb25seSBbbnVsbCwgU3RhdGU8dW5rbm93bj5dXG4gICAgICB8IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBTdGF0ZTx1bmtub3duPl1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcjxFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+PihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OlxuICAgICAgfCByZWFkb25seSBbbnVsbCwgU3RhdGU8dW5rbm93bj5dXG4gICAgICB8IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0RXJyb3IoXG4gICAgZW5kcG9pbnQ6IEVuZHBvaW50SW50ZXJmYWNlLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi51bmtub3duW10sIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocmVzdFswXSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKTtcbiAgICBjb25zdCBrZXkgPSBlbmRwb2ludC5rZXkoLi4uYXJncyk7XG5cbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBjb25zdCBlcnJvciA9IHN0YXRlLmVuZHBvaW50c1trZXldO1xuXG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQgJiYgbWV0YT8uZXJyb3JQb2xpY3kgPT09ICdzb2Z0JykgcmV0dXJuO1xuXG4gICAgcmV0dXJuIG1ldGE/LmVycm9yIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFJlc3BvbnNlXG4gICAqL1xuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgY291bnRSZWY6ICgpID0+ICgpID0+IHZvaWQ7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi4ocmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXSksXG4gICAgICBTdGF0ZTx1bmtub3duPixcbiAgICBdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZShcbiAgICBlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLnVua25vd25bXSwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiB1bmtub3duO1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9IHtcbiAgICAvLyBUT0RPOiBicmVha2luZzogb25seSByZXR1cm4gZGF0YVxuICAgIHJldHVybiB0aGlzLmdldFJlc3BvbnNlTWV0YShlbmRwb2ludCwgLi4ucmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgKGdsb2JhbGx5IHJlZmVyZW50aWFsbHkgc3RhYmxlKSByZXNwb25zZSBmb3IgYSBnaXZlbiBlbmRwb2ludC9hcmdzIHBhaXIgZnJvbSBzdGF0ZSBnaXZlbi5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRSZXNwb25zZU1ldGFcbiAgICovXG4gIGdldFJlc3BvbnNlTWV0YTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgY291bnRSZWY6ICgpID0+ICgpID0+IHZvaWQ7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2VNZXRhPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5JyB8ICdzY2hlbWEnIHwgJ2ludmFsaWRJZlN0YWxlJz4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgW1xuICAgICAgLi4uKHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF0pLFxuICAgICAgU3RhdGU8dW5rbm93bj4sXG4gICAgXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgY291bnRSZWY6ICgpID0+ICgpID0+IHZvaWQ7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2VNZXRhKFxuICAgIGVuZHBvaW50OiBFbmRwb2ludEludGVyZmFjZSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4udW5rbm93bltdLCBTdGF0ZTx1bmtub3duPl1cbiAgKToge1xuICAgIGRhdGE6IHVua25vd247XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgY291bnRSZWY6ICgpID0+ICgpID0+IHZvaWQ7XG4gIH0ge1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3RcbiAgICAgIC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpXG4gICAgICAvLyBoYW5kbGUgRm9ybURhdGFcbiAgICAgIC5tYXAoZW5zdXJlUG9qbyk7XG4gICAgY29uc3QgaXNBY3RpdmUgPSBhcmdzLmxlbmd0aCAhPT0gMSB8fCBhcmdzWzBdICE9PSBudWxsO1xuICAgIGNvbnN0IGtleSA9IGlzQWN0aXZlID8gZW5kcG9pbnQua2V5KC4uLmFyZ3MpIDogJyc7XG4gICAgY29uc3QgY2FjaGVFbmRwb2ludHMgPSBpc0FjdGl2ZSA/IHN0YXRlLmVuZHBvaW50c1trZXldIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNjaGVtYSA9IGVuZHBvaW50LnNjaGVtYTtcbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBsZXQgZXhwaXJlc0F0ID0gbWV0YT8uZXhwaXJlc0F0O1xuICAgIC8vIGlmIHdlIGhhdmUgbm8gZW5kcG9pbnQgZW50cnksIGFuZCBvdXIgZW5kcG9pbnQgaGFzIGEgc2NoZW1hIC0gdHJ5IHF1ZXJ5aW5nIHRoZSBzdG9yZVxuICAgIGNvbnN0IHNob3VsZFF1ZXJ5ID0gY2FjaGVFbmRwb2ludHMgPT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGlucHV0ID1cbiAgICAgIHNob3VsZFF1ZXJ5ID9cbiAgICAgICAgLy8gbm90aGluZyBpbiBlbmRwb2ludHMgY2FjaGUsIHNvIHRyeSBxdWVyeWluZyBpZiB3ZSBoYXZlIGEgc2NoZW1hIHRvIGRvIHNvXG4gICAgICAgIHRoaXMubWVtby5idWlsZFF1ZXJ5S2V5KFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBhcmdzLFxuICAgICAgICAgIHN0YXRlLmVudGl0aWVzIGFzIGFueSxcbiAgICAgICAgICBzdGF0ZS5pbmRleGVzLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgKVxuICAgICAgOiBjYWNoZUVuZHBvaW50cztcblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIC8vIHdoZW4gbm90IGFjdGl2ZSBzaW1wbHkgcmV0dXJuIHRoZSBxdWVyeSBpbnB1dCB3aXRob3V0IGRlbm9ybWFsaXppbmdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGlucHV0IGFzIGFueSxcbiAgICAgICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXMuVmFsaWQsXG4gICAgICAgIGV4cGlyZXNBdDogSW5maW5pdHksXG4gICAgICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBpc0ludmFsaWQgPSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkUXVlcnkpIHtcbiAgICAgIGlzSW52YWxpZCA9ICF2YWxpZGF0ZVF1ZXJ5S2V5KGlucHV0KTtcbiAgICAgIC8vIGVuZHBvaW50IHdpdGhvdXQgZW50aXRpZXNcbiAgICB9IGVsc2UgaWYgKCFzY2hlbWEgfHwgIXNjaGVtYUhhc0VudGl0eShzY2hlbWEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjYWNoZUVuZHBvaW50cyxcbiAgICAgICAgZXhwaXJ5U3RhdHVzOlxuICAgICAgICAgIG1ldGE/LmludmFsaWRhdGVkID8gRXhwaXJ5U3RhdHVzLkludmFsaWRcbiAgICAgICAgICA6IGNhY2hlRW5kcG9pbnRzICYmICFlbmRwb2ludC5pbnZhbGlkSWZTdGFsZSA/IEV4cGlyeVN0YXR1cy5WYWxpZFxuICAgICAgICAgIDogRXhwaXJ5U3RhdHVzLkludmFsaWRJZlN0YWxlLFxuICAgICAgICBleHBpcmVzQXQ6IGV4cGlyZXNBdCB8fCAwLFxuICAgICAgICBjb3VudFJlZjogdGhpcy5nY1BvbGljeS5jcmVhdGVDb3VudFJlZih7IGtleSB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gc2Vjb25kIGFyZ3VtZW50IGlzIGZhbHNlIGlmIGFueSBlbnRpdGllcyBhcmUgbWlzc2luZ1xuXG4gICAgY29uc3QgeyBkYXRhLCBwYXRocyB9ID0gdGhpcy5tZW1vLmRlbm9ybWFsaXplKFxuICAgICAgc2NoZW1hLFxuICAgICAgaW5wdXQsXG4gICAgICBzdGF0ZS5lbnRpdGllcyxcbiAgICAgIGFyZ3MsXG4gICAgKSBhcyB7IGRhdGE6IGFueTsgcGF0aHM6IEVudGl0eVBhdGhbXSB9O1xuXG4gICAgLy8gbm90ZTogaXNJbnZhbGlkIGNhbiBvbmx5IGJlIHRydWUgaWYgc2hvdWxkUXVlcnkgaXMgdHJ1ZVxuICAgIGlmICghZXhwaXJlc0F0ICYmIGlzSW52YWxpZCkgZXhwaXJlc0F0ID0gMTtcblxuICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVJlc3BvbnNlKFxuICAgICAgZGF0YSxcbiAgICAgIGtleSxcbiAgICAgIHBhdGhzLFxuICAgICAgc3RhdGUuZW50aXR5TWV0YSxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICAgIGVuZHBvaW50LmludmFsaWRJZlN0YWxlIHx8IGlzSW52YWxpZCxcbiAgICAgIG1ldGEsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBzdG9yZSBmb3IgYSBRdWVyYWJsZSBzY2hlbWFcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRcbiAgICovXG4gIGdldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgW1xuICAgICAgLi4uU2NoZW1hQXJnczxTPixcbiAgICAgIFBpY2s8U3RhdGU8dW5rbm93bj4sICdlbnRpdGllcycgfCAnZW50aXR5TWV0YSc+LFxuICAgIF1cbiAgKTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8YW55PjtcbiAgICAvLyB0aGlzIGlzIHR5cGVzY3JpcHQgZ2VuZXJpY3MgYnJlYWtpbmdcbiAgICBjb25zdCBhcmdzOiBhbnkgPSByZXN0XG4gICAgICAuc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKVxuICAgICAgLm1hcChlbnN1cmVQb2pvKSBhcyBTY2hlbWFBcmdzPFM+O1xuXG4gICAgcmV0dXJuIHRoaXMubWVtby5xdWVyeShzY2hlbWEsIGFyZ3MsIHN0YXRlLmVudGl0aWVzIGFzIGFueSwgc3RhdGUuaW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyB0aGUgc3RvcmUgZm9yIGEgUXVlcmFibGUgc2NoZW1hOyBwcm92aWRpbmcgcmVsYXRlZCBtZXRhZGF0YVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFF1ZXJ5TWV0YVxuICAgKi9cbiAgZ2V0UXVlcnlNZXRhPFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi5TY2hlbWFBcmdzPFM+LFxuICAgICAgUGljazxTdGF0ZTx1bmtub3duPiwgJ2VudGl0aWVzJyB8ICdlbnRpdHlNZXRhJz4sXG4gICAgXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZDtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8YW55PjtcbiAgICAvLyB0aGlzIGlzIHR5cGVzY3JpcHQgZ2VuZXJpY3MgYnJlYWtpbmdcbiAgICBjb25zdCBhcmdzOiBhbnkgPSByZXN0XG4gICAgICAuc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKVxuICAgICAgLm1hcChlbnN1cmVQb2pvKSBhcyBTY2hlbWFBcmdzPFM+O1xuXG4gICAgLy8gVE9ETzogYnJlYWtpbmc6IFN3aXRjaCBiYWNrIHRvIHRoaXMubWVtby5xdWVyeShzY2hlbWEsIGFyZ3MsIHN0YXRlLmVudGl0aWVzIGFzIGFueSwgc3RhdGUuaW5kZXhlcykgdG8gZG9cbiAgICAvLyB0aGlzIGxvZ2ljXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLm1lbW8uYnVpbGRRdWVyeUtleShcbiAgICAgIHNjaGVtYSxcbiAgICAgIGFyZ3MsXG4gICAgICBzdGF0ZS5lbnRpdGllcyBhcyBhbnksXG4gICAgICBzdGF0ZS5pbmRleGVzLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoYXJncyksXG4gICAgKTtcblxuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHVuZGVmaW5lZCwgY291bnRSZWY6ICgpID0+ICgpID0+IHVuZGVmaW5lZCB9O1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0YSwgcGF0aHMgfSA9IHRoaXMubWVtby5kZW5vcm1hbGl6ZShcbiAgICAgIHNjaGVtYSxcbiAgICAgIGlucHV0LFxuICAgICAgc3RhdGUuZW50aXRpZXMsXG4gICAgICBhcmdzLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHR5cGVvZiBkYXRhID09PSAnc3ltYm9sJyA/IHVuZGVmaW5lZCA6IChkYXRhIGFzIGFueSksXG4gICAgICBjb3VudFJlZjogdGhpcy5nY1BvbGljeS5jcmVhdGVDb3VudFJlZih7IHBhdGhzIH0pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNjaGVtYVJlc3BvbnNlPFQ+KFxuICAgIGRhdGE6IFQsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcGF0aHM6IEVudGl0eVBhdGhbXSxcbiAgICBlbnRpdHlNZXRhOiBTdGF0ZTx1bmtub3duPlsnZW50aXR5TWV0YSddLFxuICAgIGV4cGlyZXNBdDogbnVtYmVyLFxuICAgIGludmFsaWRJZlN0YWxlOiBib29sZWFuLFxuICAgIG1ldGE6IHsgZXJyb3I/OiB1bmtub3duOyBpbnZhbGlkYXRlZD86IHVua25vd24gfSA9IHt9LFxuICApOiB7XG4gICAgZGF0YTogVDtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgY29uc3QgaW52YWxpZERlbm9ybWFsaXplID0gdHlwZW9mIGRhdGEgPT09ICdzeW1ib2wnO1xuXG4gICAgLy8gZmFsbGJhY2sgdG8gZW50aXR5IGV4cGlyeSB0aW1lXG4gICAgaWYgKCFleHBpcmVzQXQpIHtcbiAgICAgIGV4cGlyZXNBdCA9IGVudGl0eUV4cGlyZXNBdChwYXRocywgZW50aXR5TWV0YSk7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvY29uY2VwdHMvZXhwaXJ5LXBvbGljeSNleHBpcnktc3RhdHVzXG4gICAgLy8gd2UgZG9uJ3QgdHJhY2sgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFsZSBvciBmcmVzaCBiZWNhdXNlIHRoYXQgaXMgdGllZCB0byB0cmlnZ2VyaW5nXG4gICAgLy8gY29uZGl0aW9uc1xuICAgIGNvbnN0IGV4cGlyeVN0YXR1cyA9XG4gICAgICBtZXRhPy5pbnZhbGlkYXRlZCB8fCAoaW52YWxpZERlbm9ybWFsaXplICYmICFtZXRhPy5lcnJvcikgP1xuICAgICAgICBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgOiBpbnZhbGlkRGVub3JtYWxpemUgfHwgaW52YWxpZElmU3RhbGUgPyBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGVcbiAgICAgIDogRXhwaXJ5U3RhdHVzLlZhbGlkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBleHBpcnlTdGF0dXMsXG4gICAgICBleHBpcmVzQXQsXG4gICAgICBjb3VudFJlZjogdGhpcy5nY1BvbGljeS5jcmVhdGVDb3VudFJlZih7IGtleSwgcGF0aHMgfSksXG4gICAgfTtcbiAgfVxufVxuXG4vLyBiZW5jaG1hcms6IGh0dHBzOi8vd3d3Lm1lYXN1cmV0aGF0Lm5ldC9CZW5jaG1hcmtzL1Nob3cvMjQ2OTEvMC9taW4tcmVkdWNlci12cy1pbXBlcmF0aXZlLXdpdGgtcGF0aHNcbi8vIGVhcmxpZXN0IGV4cGlyeSBkaWN0YXRlcyBhZ2VcbmZ1bmN0aW9uIGVudGl0eUV4cGlyZXNBdChcbiAgcGF0aHM6IEVudGl0eVBhdGhbXSxcbiAgZW50aXR5TWV0YToge1xuICAgIHJlYWRvbmx5IFtlbnRpdHlLZXk6IHN0cmluZ106IHtcbiAgICAgIHJlYWRvbmx5IFtwazogc3RyaW5nXToge1xuICAgICAgICByZWFkb25seSBkYXRlOiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgICByZWFkb25seSBmZXRjaGVkQXQ6IG51bWJlcjsgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIERhdGFQcm92aWRlclxuICAgICAgfTtcbiAgICB9O1xuICB9LFxuKSB7XG4gIGxldCBleHBpcmVzQXQgPSBJbmZpbml0eTtcbiAgZm9yIChjb25zdCB7IHBrLCBrZXkgfSBvZiBwYXRocykge1xuICAgIGNvbnN0IGVudGl0eUV4cGlyeSA9IGVudGl0eU1ldGFba2V5XT8uW3BrXT8uZXhwaXJlc0F0O1xuICAgIC8vIGV4cGlyZXNBdCB3aWxsIGFsd2F5cyByZXNvbHZlIHRvIGZhbHNlIHdpdGggYW55IGNvbXBhcmlzb25cbiAgICBpZiAoZW50aXR5RXhwaXJ5IDwgZXhwaXJlc0F0KSBleHBpcmVzQXQgPSBlbnRpdHlFeHBpcnk7XG4gIH1cbiAgcmV0dXJuIGV4cGlyZXNBdDtcbn1cblxuLyoqIERldGVybWluZSB3aGV0aGVyIHRoZSBzY2hlbWEgaGFzIGFueSBlbnRpdGllcy5cbiAqXG4gKiBXaXRob3V0IGVudGl0aWVzLCBkZW5vcm1hbGl6YXRpb24gaXMgbm90IG5lZWRlZCwgYW5kIHJlc3VsdHMgc2hvdWxkIG5vdCBiZSBxdWVyaWVkLlxuICovXG5mdW5jdGlvbiBzY2hlbWFIYXNFbnRpdHkoc2NoZW1hOiBTY2hlbWEpOiBib29sZWFuIHtcbiAgaWYgKGlzRW50aXR5KHNjaGVtYSkpIHJldHVybiB0cnVlO1xuICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgIHJldHVybiBzY2hlbWEubGVuZ3RoICE9PSAwICYmIHNjaGVtYUhhc0VudGl0eShzY2hlbWFbMF0pO1xuICBpZiAoc2NoZW1hICYmICh0eXBlb2Ygc2NoZW1hID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygc2NoZW1hID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNvbnN0IG5lc3RlZFNjaGVtYSA9XG4gICAgICAnc2NoZW1hJyBpbiBzY2hlbWEgPyAoc2NoZW1hLnNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCBTY2hlbWE+KSA6IHNjaGVtYTtcbiAgICBpZiAodHlwZW9mIG5lc3RlZFNjaGVtYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHNjaGVtYUhhc0VudGl0eShuZXN0ZWRTY2hlbWEpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhuZXN0ZWRTY2hlbWEpLnNvbWUoeCA9PiBzY2hlbWFIYXNFbnRpdHkoeCkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IHR5cGUgeyBFcnJvclR5cGVzIH07XG5cbmNsYXNzIFNuYXBzaG90PFQgPSB1bmtub3duPiBpbXBsZW1lbnRzIFNuYXBzaG90SW50ZXJmYWNlIHtcbiAgc3RhdGljIHJlYWRvbmx5IGFib3J0ID0gbmV3IEFib3J0T3B0aW1pc3RpYygpO1xuXG4gIHByaXZhdGUgc3RhdGU6IFN0YXRlPFQ+O1xuICBwcml2YXRlIGNvbnRyb2xsZXI6IENvbnRyb2xsZXI7XG4gIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyO1xuICByZWFkb25seSBhYm9ydCA9IFNuYXBzaG90LmFib3J0O1xuXG4gIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsIHN0YXRlOiBTdGF0ZTxUPiwgZmV0Y2hlZEF0ID0gMCkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIHRoaXMuZmV0Y2hlZEF0ID0gZmV0Y2hlZEF0O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKiBEYXRhIEFjY2VzcyAqKioqKioqKioqKioqKiovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRSZXNwb25zZSAqL1xuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFtudWxsXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5JyB8ICdzY2hlbWEnIHwgJ2ludmFsaWRJZlN0YWxlJz4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRSZXNwb25zZShlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QjZ2V0UmVzcG9uc2VNZXRhICovXG4gIGdldFJlc3BvbnNlTWV0YTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFtudWxsXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2VNZXRhPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRSZXNwb25zZU1ldGEoZW5kcG9pbnQsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG5cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldEVycm9yICovXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknPj4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRFcnJvcihlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVkIG1lbW9pemVkIHZhbHVlIGZvciBhbnkgUXVlcmFibGUgc2NoZW1hXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFxuICAgKi9cbiAgZ2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5hcmdzOiBTY2hlbWFBcmdzPFM+XG4gICk6IERlbm9ybWFsaXplTnVsbGFibGU8Uz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0KHNjaGVtYSwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyB0aGUgc3RvcmUgZm9yIGEgUXVlcmFibGUgc2NoZW1hOyBwcm92aWRpbmcgcmVsYXRlZCBtZXRhZGF0YVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRRdWVyeU1ldGFcbiAgICovXG4gIGdldFF1ZXJ5TWV0YTxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4uYXJnczogU2NoZW1hQXJnczxTPlxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZDtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRRdWVyeU1ldGEoc2NoZW1hLCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBUUEsU0FDRUEsWUFBWSxFQU1aQyxTQUFTLEVBQ1RDLFFBQVEsRUFDUkMsV0FBVyxFQUNYQyxnQkFBZ0IsUUFDWCx3QkFBd0I7QUFFL0IsT0FBT0MsZUFBZSxNQUFNLHNCQUFzQjtBQUNsRCxTQUNFQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixRQUNiLGlDQUFpQztBQUN4QyxTQUNFQyxlQUFlLEVBQ2ZDLFdBQVcsRUFDWEMsZ0JBQWdCLEVBQ2hCQyxtQkFBbUIsRUFDbkJDLFdBQVcsRUFDWEMsU0FBUyxFQUNUQyxpQkFBaUIsUUFDWixvQkFBb0I7QUFDM0IsT0FBT0MsVUFBVSxNQUFNLGlCQUFpQjtBQUl4QyxTQUFTQyxnQkFBZ0IsUUFBUSxzQkFBc0I7QUFDdkQsU0FBU0MsWUFBWSxRQUFRLG1DQUFtQztBQUNoRSxPQUFPQyxVQUFVLE1BQU0sd0JBQXdCO0FBZS9DLE1BQU1DLGFBQWEsR0FBSUMsTUFBZSxJQUFvQjtFQUN4RCxNQUFNLElBQUlDLEtBQUssQ0FDYixpRUFBaUUsR0FDL0QseURBQ0osQ0FBQztBQUNILENBQUM7QUFDRCxNQUFNQyxVQUFVLEdBQUdBLENBQUEsS0FBc0I7RUFDdkM7RUFDQTtFQUNBLE9BQU9MLFlBQVk7QUFDckIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTU0sVUFBVSxDQUc3QjtFQUNBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0VBRUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQU1FO0FBQ0Y7QUFDQTs7RUFHRUMsV0FBV0EsQ0FBQztJQUNWQyxRQUFRLEdBQUdOLGFBQW9CO0lBQy9CTyxR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
|
|
426
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiLCJNZW1vQ2FjaGUiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwidmFsaWRhdGVRdWVyeUtleSIsIkFib3J0T3B0aW1pc3RpYyIsImNyZWF0ZVVuc3Vic2NyaXB0aW9uIiwiY3JlYXRlU3Vic2NyaXB0aW9uIiwiY3JlYXRlRXhwaXJlQWxsIiwiY3JlYXRlRmV0Y2giLCJjcmVhdGVJbnZhbGlkYXRlIiwiY3JlYXRlSW52YWxpZGF0ZUFsbCIsImNyZWF0ZVJlc2V0IiwiY3JlYXRlU2V0IiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbnN1cmVQb2pvIiwiSW1tb3J0YWxHQ1BvbGljeSIsImluaXRpYWxTdGF0ZSIsInNlbGVjdE1ldGEiLCJ1bnNldERpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJ1bnNldFN0YXRlIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsIm1lbW8iLCJnY1BvbGljeSIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwic2NoZW1hIiwibWV0YSIsInByb21pc2UiLCJ0aGVuIiwiaW5wdXQiLCJmZXRjaElmU3RhbGUiLCJkYXRhIiwiZXhwaXJlc0F0IiwiZXhwaXJ5U3RhdHVzIiwiZ2V0UmVzcG9uc2UiLCJJbnZhbGlkIiwiRGF0ZSIsIm5vdyIsImludmFsaWRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImludmFsaWRhdGVBbGwiLCJvcHRpb25zIiwia2V5IiwidGVzdEtleSIsImV4cGlyZUFsbCIsInJlc2V0RW50aXJlU3RvcmUiLCJzZXRSZXNwb25zZSIsInJlc3QiLCJyZXNwb25zZSIsImxlbmd0aCIsInNsaWNlIiwic2V0RXJyb3IiLCJlcnJvciIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwic25hcHNob3QiLCJzdGF0ZSIsImZldGNoZWRBdCIsIlNuYXBzaG90IiwiX2Rpc3BhdGNoIiwiYmluZE1pZGRsZXdhcmUiLCJzZXQiLCJ2YWx1ZSIsImdldEVycm9yIiwiZW5kcG9pbnRzIiwidW5kZWZpbmVkIiwiZXJyb3JQb2xpY3kiLCJnZXRSZXNwb25zZU1ldGEiLCJtYXAiLCJpc0FjdGl2ZSIsImNhY2hlRW5kcG9pbnRzIiwic2hvdWxkUXVlcnkiLCJidWlsZFF1ZXJ5S2V5IiwiZW50aXRpZXMiLCJpbmRleGVzIiwiVmFsaWQiLCJJbmZpbml0eSIsImNvdW50UmVmIiwiaXNJbnZhbGlkIiwic2NoZW1hSGFzRW50aXR5IiwiaW52YWxpZGF0ZWQiLCJpbnZhbGlkSWZTdGFsZSIsIkludmFsaWRJZlN0YWxlIiwiY3JlYXRlQ291bnRSZWYiLCJwYXRocyIsImdldFNjaGVtYVJlc3BvbnNlIiwiZW50aXR5TWV0YSIsImdldCIsInF1ZXJ5IiwiZ2V0UXVlcnlNZXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImludmFsaWREZW5vcm1hbGl6ZSIsImVudGl0eUV4cGlyZXNBdCIsInBrIiwiX2VudGl0eU1ldGEka2V5IiwiZW50aXR5RXhwaXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwibmVzdGVkU2NoZW1hIiwiT2JqZWN0IiwidmFsdWVzIiwic29tZSIsIngiLCJjb250cm9sbGVyIiwiYWJvcnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9Db250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRXJyb3JUeXBlcyxcbiAgU25hcHNob3RJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRGVub3JtYWxpemUsXG4gIFF1ZXJ5YWJsZSxcbiAgU2NoZW1hQXJncyxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5pbXBvcnQge1xuICBFeHBpcnlTdGF0dXMsXG4gIEVuZHBvaW50SW50ZXJmYWNlLFxuICBGZXRjaEZ1bmN0aW9uLFxuICBSZXNvbHZlVHlwZSxcbiAgRGVub3JtYWxpemVOdWxsYWJsZSxcbiAgRW50aXR5UGF0aCxcbiAgTWVtb0NhY2hlLFxuICBpc0VudGl0eSxcbiAgZGVub3JtYWxpemUsXG4gIHZhbGlkYXRlUXVlcnlLZXksXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgQWJvcnRPcHRpbWlzdGljIGZyb20gJy4vQWJvcnRPcHRpbWlzdGljLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVVuc3Vic2NyaXB0aW9uLFxuICBjcmVhdGVTdWJzY3JpcHRpb24sXG59IGZyb20gJy4vYWN0aW9ucy9jcmVhdGVTdWJzY3JpcHRpb24uanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlRXhwaXJlQWxsLFxuICBjcmVhdGVGZXRjaCxcbiAgY3JlYXRlSW52YWxpZGF0ZSxcbiAgY3JlYXRlSW52YWxpZGF0ZUFsbCxcbiAgY3JlYXRlUmVzZXQsXG4gIGNyZWF0ZVNldCxcbiAgY3JlYXRlU2V0UmVzcG9uc2UsXG59IGZyb20gJy4vYWN0aW9ucy9pbmRleC5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuL2Vuc3VyZVBvam8uanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBSZWR1eE1pZGRsZXdhcmVBUEkgfSBmcm9tICcuLi9tYW5hZ2VyL2FwcGx5TWFuYWdlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEdDSW50ZXJmYWNlIH0gZnJvbSAnLi4vc3RhdGUvR0NQb2xpY3kuanMnO1xuaW1wb3J0IHsgSW1tb3J0YWxHQ1BvbGljeSB9IGZyb20gJy4uL3N0YXRlL0dDUG9saWN5LmpzJztcbmltcG9ydCB7IGluaXRpYWxTdGF0ZSB9IGZyb20gJy4uL3N0YXRlL3JlZHVjZXIvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgc2VsZWN0TWV0YSBmcm9tICcuLi9zdGF0ZS9zZWxlY3RNZXRhLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uVHlwZXMsIERpc3BhdGNoLCBTdGF0ZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgR2VuZXJpY0Rpc3BhdGNoID0gKHZhbHVlOiBhbnkpID0+IFByb21pc2U8dm9pZD47XG5leHBvcnQgdHlwZSBEYXRhQ2xpZW50RGlzcGF0Y2ggPSAodmFsdWU6IEFjdGlvblR5cGVzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xsZXJDb25zdHJ1Y3RvclByb3BzPFxuICBEIGV4dGVuZHMgR2VuZXJpY0Rpc3BhdGNoID0gRGF0YUNsaWVudERpc3BhdGNoLFxuPiB7XG4gIGRpc3BhdGNoPzogRDtcbiAgZ2V0U3RhdGU/OiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgbWVtbz86IFBpY2s8TWVtb0NhY2hlLCAnZGVub3JtYWxpemUnIHwgJ3F1ZXJ5JyB8ICdidWlsZFF1ZXJ5S2V5Jz47XG4gIGdjUG9saWN5PzogR0NJbnRlcmZhY2U7XG59XG5cbmNvbnN0IHVuc2V0RGlzcGF0Y2ggPSAoYWN0aW9uOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRGlzcGF0Y2hpbmcgd2hpbGUgY29uc3RydWN0aW5nIHlvdXIgbWlkZGxld2FyZSBpcyBub3QgYWxsb3dlZC4gYCArXG4gICAgICBgT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLmAsXG4gICk7XG59O1xuY29uc3QgdW5zZXRTdGF0ZSA9ICgpOiBTdGF0ZTx1bmtub3duPiA9PiB7XG4gIC8vIFRoaXMgaXMgb25seSB0aGUgdmFsdWUgdW50aWwgaXQgaXMgc2V0IGJ5IHRoZSBEYXRhUHJvdmlkZXJcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5cbi8qKlxuICogSW1wZXJhdGl2ZSBjb250cm9sIG9mIFJlYWN0aXZlIERhdGEgQ2xpZW50IHN0b3JlXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xsZXI8XG4gIC8vIE5PVEU6IFdlIHRlbXBsYXRlIG9uIGVudGlyZSBkaXNwYXRjaCwgc28gd2UgY2FuIGJlIGNvbnRyYXZhcmlhbnQgb24gQWN0aW9uVHlwZXNcbiAgRCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IERhdGFDbGllbnREaXNwYXRjaCxcbj4ge1xuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24gdG8gUmVhY3RpdmUgRGF0YSBDbGllbnQgcmVkdWNlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNkaXNwYXRjaFxuICAgKi9cbiAgZGVjbGFyZSBwcm90ZWN0ZWQgX2Rpc3BhdGNoOiBEO1xuICAvKipcbiAgICogR2V0cyB0aGUgbGF0ZXN0IHN0YXRlIHNuYXBzaG90IHRoYXQgaXMgZnVsbHkgY29tbWl0dGVkLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGltcGVyYXRpdmUgdXNlLWNhc2VzIGxpa2UgZXZlbnQgaGFuZGxlcnMuXG4gICAqIFRoaXMgc2hvdWxkICpub3QqIGJlIHVzZWQgdG8gcmVuZGVyOyBpbnN0ZWFkIHVzZVN1c3BlbnNlKCkgb3IgdXNlQ2FjaGUoKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFN0YXRlXG4gICAqL1xuICBkZWNsYXJlIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIFNpbmdsZXRvbiB0byBtYWludGFpbiByZWZlcmVudGlhbCBlcXVhbGl0eSBiZXR3ZWVuIGNhbGxzXG4gICAqL1xuICBkZWNsYXJlIHJlYWRvbmx5IG1lbW86IFBpY2s8XG4gICAgTWVtb0NhY2hlLFxuICAgICdkZW5vcm1hbGl6ZScgfCAncXVlcnknIHwgJ2J1aWxkUXVlcnlLZXknXG4gID47XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZ2FyYmFnZSBjb2xsZWN0aW9uXG4gICAqL1xuICBkZWNsYXJlIHJlYWRvbmx5IGdjUG9saWN5OiBHQ0ludGVyZmFjZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZGlzcGF0Y2ggPSB1bnNldERpc3BhdGNoIGFzIGFueSxcbiAgICBnZXRTdGF0ZSA9IHVuc2V0U3RhdGUsXG4gICAgbWVtbyA9IG5ldyBNZW1vQ2FjaGUoKSxcbiAgICBnY1BvbGljeSA9IG5ldyBJbW1vcnRhbEdDUG9saWN5KCksXG4gIH06IENvbnRyb2xsZXJDb25zdHJ1Y3RvclByb3BzPEQ+ID0ge30pIHtcbiAgICB0aGlzLl9kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgIHRoaXMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbiAgICB0aGlzLm1lbW8gPSBtZW1vO1xuICAgIHRoaXMuZ2NQb2xpY3kgPSBnY1BvbGljeTtcbiAgfVxuXG4gIC8vIFRPRE86IGRyb3Agd2hlbiBkcm9wIHN1cHBvcnQgZm9yIGRlc3RydWN0dXJpbmcgKDAuMTQgYW5kIGJlbG93KVxuICBzZXQgZGlzcGF0Y2goZGlzcGF0Y2g6IEQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRoaXMuX2Rpc3BhdGNoID0gZGlzcGF0Y2g7XG4gIH1cblxuICAvLyBUT0RPOiBkcm9wIHdoZW4gZHJvcCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nICgwLjE0IGFuZCBiZWxvdylcbiAgZ2V0IGRpc3BhdGNoKCk6IEQge1xuICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaDtcbiAgfVxuXG4gIGJpbmRNaWRkbGV3YXJlKHtcbiAgICBkaXNwYXRjaCxcbiAgICBnZXRTdGF0ZSxcbiAgfToge1xuICAgIGRpc3BhdGNoOiBEO1xuICAgIGdldFN0YXRlOiBSZWR1eE1pZGRsZXdhcmVBUElbJ2dldFN0YXRlJ107XG4gIH0pIHtcbiAgICB0aGlzLl9kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgIHRoaXMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKiogQWN0aW9uIERpc3BhdGNoZXJzICoqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgZW5kcG9pbnQgd2l0aCBnaXZlbiBhcmdzLCB1cGRhdGluZyB0aGUgUmVhY3RpdmUgRGF0YSBDbGllbnQgY2FjaGUgd2l0aCB0aGUgcmVzcG9uc2Ugb3IgZXJyb3IgdXBvbiBjb21wbGV0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ZldGNoXG4gICAqL1xuICBmZXRjaCA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogRVsnc2NoZW1hJ10gZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsID8gUmV0dXJuVHlwZTxFPlxuICA6IFByb21pc2U8RGVub3JtYWxpemU8RVsnc2NoZW1hJ10+PiA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlRmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3MsXG4gICAgfSk7XG4gICAgdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuXG4gICAgaWYgKGVuZHBvaW50LnNjaGVtYSkge1xuICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLnByb21pc2UudGhlbihpbnB1dCA9PlxuICAgICAgICBkZW5vcm1hbGl6ZShlbmRwb2ludC5zY2hlbWEsIGlucHV0LCB7fSwgYXJncyksXG4gICAgICApIGFzIGFueTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbi5tZXRhLnByb21pc2UgYXMgYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIG9ubHkgaWYgZW5kcG9pbnQgaXMgY29uc2lkZXJlZCAnc3RhbGUnOyBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWRcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNmZXRjaElmU3RhbGVcbiAgICovXG4gIGZldGNoSWZTdGFsZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogRVsnc2NoZW1hJ10gZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsID8gUmV0dXJuVHlwZTxFPiB8IFJlc29sdmVUeXBlPEU+XG4gIDogUHJvbWlzZTxEZW5vcm1hbGl6ZTxFWydzY2hlbWEnXT4+IHwgRGVub3JtYWxpemU8RVsnc2NoZW1hJ10+ID0+IHtcbiAgICBjb25zdCB7IGRhdGEsIGV4cGlyZXNBdCwgZXhwaXJ5U3RhdHVzIH0gPSB0aGlzLmdldFJlc3BvbnNlKFxuICAgICAgZW5kcG9pbnQsXG4gICAgICAuLi5hcmdzLFxuICAgICAgdGhpcy5nZXRTdGF0ZSgpLFxuICAgICk7XG4gICAgaWYgKGV4cGlyeVN0YXR1cyAhPT0gRXhwaXJ5U3RhdHVzLkludmFsaWQgJiYgRGF0ZS5ub3coKSA8PSBleHBpcmVzQXQpXG4gICAgICByZXR1cm4gZGF0YSBhcyBhbnk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goZW5kcG9pbnQsIC4uLmFyZ3MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugd2l0aCB0aGUgc2FtZSBFbmRwb2ludCBhbmQgcGFyYW1ldGVycy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNpbnZhbGlkYXRlXG4gICAqL1xuICBpbnZhbGlkYXRlID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsID9cbiAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgIGNyZWF0ZUludmFsaWRhdGUoZW5kcG9pbnQsIHtcbiAgICAgICAgICBhcmdzOiBhcmdzIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqXG4gICAqIEZvcmNlcyByZWZldGNoaW5nIGFuZCBzdXNwZW5zZSBvbiB1c2VTdXNwZW5zZSBvbiBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbnZhbGlkYXRpb24gaXMgY29tbWl0ZWQuXG4gICAqL1xuICBpbnZhbGlkYXRlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVJbnZhbGlkYXRlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogU2V0cyBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMgdG8gYmUgU1RBTEUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZXhwaXJlQWxsXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV4cGlyeSBpcyBjb21taXRlZC4gKk5PVCogZmV0Y2ggcHJvbWlzZVxuICAgKi9cbiAgZXhwaXJlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVFeHBpcmVBbGwoKGtleTogc3RyaW5nKSA9PiBvcHRpb25zLnRlc3RLZXkoa2V5KSkpO1xuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVudGlyZSBSZWFjdGl2ZSBEYXRhIENsaWVudCBjYWNoZS4gQWxsIGluZmxpZ2h0IHJlcXVlc3RzIHdpbGwgbm90IHJlc29sdmUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjcmVzZXRFbnRpcmVTdG9yZVxuICAgKi9cbiAgcmVzZXRFbnRpcmVTdG9yZSA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuZGlzcGF0Y2goY3JlYXRlUmVzZXQoKSk7XG5cbiAgLyoqXG4gICAqIFNldHMgdmFsdWUgZm9yIHRoZSBRdWVyeWFibGUgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0XG4gICAqL1xuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCAocHJldmlvdXNWYWx1ZTogRGVub3JtYWxpemU8Uz4pID0+IHt9XVxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIHNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlNjaGVtYUFyZ3M8Uz4sIHt9XVxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIHNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlNjaGVtYUFyZ3M8Uz4sIGFueV1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmFsdWUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0KHNjaGVtYSwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFNjaGVtYUFyZ3M8Uz4sXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgICAvLyBUT0RPOiByZWplY3Qgd2l0aCBlcnJvciBpZiB0aGlzIGZhaWxzIGluIHJlZHVjZXJcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcmVzcG9uc2UgZm9yIHRoZSBFbmRwb2ludCBhbmQgYXJncy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzZXRSZXNwb25zZVxuICAgKi9cbiAgc2V0UmVzcG9uc2UgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNvbHZlVHlwZTxFPiA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGVycm9yIHJlc3BvbnNlIGZvciB0aGUgRW5kcG9pbnQgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0RXJyb3JcbiAgICovXG4gIHNldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgRXJyb3JdXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBFcnJvciA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuIGluZmxpZ2h0IGZldGNoLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc29sdmVcbiAgICovXG4gIHJlc29sdmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIG1ldGE6XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IEVycm9yO1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICAgIGVycm9yOiB0cnVlO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IGFueTtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcj86IGZhbHNlIHwgdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwgbWV0YSBhcyBhbnkpKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFya3MgYSBuZXcgc3Vic2NyaXB0aW9uIHRvIGEgZ2l2ZW4gRW5kcG9pbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc3Vic2NyaWJlXG4gICAqL1xuICBzdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGwgP1xuICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgY3JlYXRlU3Vic2NyaXB0aW9uKGVuZHBvaW50LCB7XG4gICAgICAgICAgYXJnczogYXJncyBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wbGV0aW9uIG9mIHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Vuc3Vic2NyaWJlXG4gICAqL1xuICB1bnN1YnNjcmliZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U8XG4gICAgICBGZXRjaEZ1bmN0aW9uLFxuICAgICAgU2NoZW1hIHwgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkIHwgZmFsc2VcbiAgICA+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICBjcmVhdGVVbnN1YnNjcmlwdGlvbihlbmRwb2ludCwge1xuICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAvKioqKioqKioqKioqKioqIE1vcmUgKioqKioqKioqKioqKioqL1xuXG4gIC8qIFRPRE86XG4gIGFib3J0ID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IFByb21pc2U8dm9pZD5cbiAgKi9cblxuICAvKipcbiAgICogR2V0cyBhIHNuYXBzaG90IChodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc25hcHNob3RcbiAgICovXG4gIHNuYXBzaG90ID0gKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgZmV0Y2hlZEF0PzogbnVtYmVyKTogU25hcHNob3Q8dW5rbm93bj4gPT4ge1xuICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcywgc3RhdGUsIGZldGNoZWRBdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVycm9yLCBpZiBhbnksIGZvciBhIGdpdmVuIGVuZHBvaW50LiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm8gZXJyb3JzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldEVycm9yXG4gICAqL1xuICBnZXRFcnJvcjxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+LCBTdGF0ZTx1bmtub3duPl1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcihcbiAgICBlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLnVua25vd25bXSwgU3RhdGU8dW5rbm93bj5dXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQge1xuICAgIGlmIChyZXN0WzBdID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGtleSA9IGVuZHBvaW50LmtleSguLi5hcmdzKTtcblxuICAgIGNvbnN0IG1ldGEgPSBzZWxlY3RNZXRhKHN0YXRlLCBrZXkpO1xuICAgIGNvbnN0IGVycm9yID0gc3RhdGUuZW5kcG9pbnRzW2tleV07XG5cbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIChnbG9iYWxseSByZWZlcmVudGlhbGx5IHN0YWJsZSkgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQvYXJncyBwYWlyIGZyb20gc3RhdGUgZ2l2ZW4uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UmVzcG9uc2VcbiAgICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDpcbiAgICAgIHwgcmVhZG9ubHkgW251bGwsIFN0YXRlPHVua25vd24+XVxuICAgICAgfCByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFtcbiAgICAgIC4uLihyZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdKSxcbiAgICAgIFN0YXRlPHVua25vd24+LFxuICAgIF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlKFxuICAgIGVuZHBvaW50OiBFbmRwb2ludEludGVyZmFjZSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4udW5rbm93bltdLCBTdGF0ZTx1bmtub3duPl1cbiAgKToge1xuICAgIGRhdGE6IHVua25vd247XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgY291bnRSZWY6ICgpID0+ICgpID0+IHZvaWQ7XG4gIH0ge1xuICAgIC8vIFRPRE86IGJyZWFraW5nOiBvbmx5IHJldHVybiBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzcG9uc2VNZXRhKGVuZHBvaW50LCAuLi5yZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFJlc3BvbnNlTWV0YVxuICAgKi9cbiAgZ2V0UmVzcG9uc2VNZXRhPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDpcbiAgICAgIHwgcmVhZG9ubHkgW251bGwsIFN0YXRlPHVua25vd24+XVxuICAgICAgfCByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi4ocmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXSksXG4gICAgICBTdGF0ZTx1bmtub3duPixcbiAgICBdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGEoXG4gICAgZW5kcG9pbnQ6IEVuZHBvaW50SW50ZXJmYWNlLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi51bmtub3duW10sIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogdW5rbm93bjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdFxuICAgICAgLnNsaWNlKDAsIHJlc3QubGVuZ3RoIC0gMSlcbiAgICAgIC8vIGhhbmRsZSBGb3JtRGF0YVxuICAgICAgLm1hcChlbnN1cmVQb2pvKTtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGFyZ3MubGVuZ3RoICE9PSAxIHx8IGFyZ3NbMF0gIT09IG51bGw7XG4gICAgY29uc3Qga2V5ID0gaXNBY3RpdmUgPyBlbmRwb2ludC5rZXkoLi4uYXJncykgOiAnJztcbiAgICBjb25zdCBjYWNoZUVuZHBvaW50cyA9IGlzQWN0aXZlID8gc3RhdGUuZW5kcG9pbnRzW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2NoZW1hID0gZW5kcG9pbnQuc2NoZW1hO1xuICAgIGNvbnN0IG1ldGEgPSBzZWxlY3RNZXRhKHN0YXRlLCBrZXkpO1xuICAgIGxldCBleHBpcmVzQXQgPSBtZXRhPy5leHBpcmVzQXQ7XG4gICAgLy8gaWYgd2UgaGF2ZSBubyBlbmRwb2ludCBlbnRyeSwgYW5kIG91ciBlbmRwb2ludCBoYXMgYSBzY2hlbWEgLSB0cnkgcXVlcnlpbmcgdGhlIHN0b3JlXG4gICAgY29uc3Qgc2hvdWxkUXVlcnkgPSBjYWNoZUVuZHBvaW50cyA9PT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgaW5wdXQgPVxuICAgICAgc2hvdWxkUXVlcnkgP1xuICAgICAgICAvLyBub3RoaW5nIGluIGVuZHBvaW50cyBjYWNoZSwgc28gdHJ5IHF1ZXJ5aW5nIGlmIHdlIGhhdmUgYSBzY2hlbWEgdG8gZG8gc29cbiAgICAgICAgdGhpcy5tZW1vLmJ1aWxkUXVlcnlLZXkoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgc3RhdGUuZW50aXRpZXMgYXMgYW55LFxuICAgICAgICAgIHN0YXRlLmluZGV4ZXMsXG4gICAgICAgICAga2V5LFxuICAgICAgICApXG4gICAgICA6IGNhY2hlRW5kcG9pbnRzO1xuXG4gICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgLy8gd2hlbiBub3QgYWN0aXZlIHNpbXBseSByZXR1cm4gdGhlIHF1ZXJ5IGlucHV0IHdpdGhvdXQgZGVub3JtYWxpemluZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogaW5wdXQgYXMgYW55LFxuICAgICAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cy5WYWxpZCxcbiAgICAgICAgZXhwaXJlc0F0OiBJbmZpbml0eSxcbiAgICAgICAgY291bnRSZWY6ICgpID0+ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGlzSW52YWxpZCA9IGZhbHNlO1xuICAgIGlmIChzaG91bGRRdWVyeSkge1xuICAgICAgaXNJbnZhbGlkID0gIXZhbGlkYXRlUXVlcnlLZXkoaW5wdXQpO1xuICAgICAgLy8gZW5kcG9pbnQgd2l0aG91dCBlbnRpdGllc1xuICAgIH0gZWxzZSBpZiAoIXNjaGVtYSB8fCAhc2NoZW1hSGFzRW50aXR5KHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGNhY2hlRW5kcG9pbnRzLFxuICAgICAgICBleHBpcnlTdGF0dXM6XG4gICAgICAgICAgbWV0YT8uaW52YWxpZGF0ZWQgPyBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgICAgIDogY2FjaGVFbmRwb2ludHMgJiYgIWVuZHBvaW50LmludmFsaWRJZlN0YWxlID8gRXhwaXJ5U3RhdHVzLlZhbGlkXG4gICAgICAgICAgOiBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGUsXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0IHx8IDAsXG4gICAgICAgIGNvdW50UmVmOiB0aGlzLmdjUG9saWN5LmNyZWF0ZUNvdW50UmVmKHsga2V5IH0pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBzZWNvbmQgYXJndW1lbnQgaXMgZmFsc2UgaWYgYW55IGVudGl0aWVzIGFyZSBtaXNzaW5nXG5cbiAgICBjb25zdCB7IGRhdGEsIHBhdGhzIH0gPSB0aGlzLm1lbW8uZGVub3JtYWxpemUoXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnB1dCxcbiAgICAgIHN0YXRlLmVudGl0aWVzLFxuICAgICAgYXJncyxcbiAgICApIGFzIHsgZGF0YTogYW55OyBwYXRoczogRW50aXR5UGF0aFtdIH07XG5cbiAgICAvLyBub3RlOiBpc0ludmFsaWQgY2FuIG9ubHkgYmUgdHJ1ZSBpZiBzaG91bGRRdWVyeSBpcyB0cnVlXG4gICAgaWYgKCFleHBpcmVzQXQgJiYgaXNJbnZhbGlkKSBleHBpcmVzQXQgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hUmVzcG9uc2UoXG4gICAgICBkYXRhLFxuICAgICAga2V5LFxuICAgICAgcGF0aHMsXG4gICAgICBzdGF0ZS5lbnRpdHlNZXRhLFxuICAgICAgZXhwaXJlc0F0LFxuICAgICAgZW5kcG9pbnQuaW52YWxpZElmU3RhbGUgfHwgaXNJbnZhbGlkLFxuICAgICAgbWV0YSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXJpZXMgdGhlIHN0b3JlIGZvciBhIFF1ZXJhYmxlIHNjaGVtYVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFxuICAgKi9cbiAgZ2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi5TY2hlbWFBcmdzPFM+LFxuICAgICAgUGljazxTdGF0ZTx1bmtub3duPiwgJ2VudGl0aWVzJyB8ICdlbnRpdHlNZXRhJz4sXG4gICAgXVxuICApOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXSBhcyBTdGF0ZTxhbnk+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3RcbiAgICAgIC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpXG4gICAgICAubWFwKGVuc3VyZVBvam8pIGFzIFNjaGVtYUFyZ3M8Uz47XG5cbiAgICByZXR1cm4gdGhpcy5tZW1vLnF1ZXJ5KHNjaGVtYSwgYXJncywgc3RhdGUuZW50aXRpZXMgYXMgYW55LCBzdGF0ZS5pbmRleGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBzdG9yZSBmb3IgYSBRdWVyYWJsZSBzY2hlbWE7IHByb3ZpZGluZyByZWxhdGVkIG1ldGFkYXRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UXVlcnlNZXRhXG4gICAqL1xuICBnZXRRdWVyeU1ldGE8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFtcbiAgICAgIC4uLlNjaGVtYUFyZ3M8Uz4sXG4gICAgICBQaWNrPFN0YXRlPHVua25vd24+LCAnZW50aXRpZXMnIHwgJ2VudGl0eU1ldGEnPixcbiAgICBdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9IHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXSBhcyBTdGF0ZTxhbnk+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3RcbiAgICAgIC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpXG4gICAgICAubWFwKGVuc3VyZVBvam8pIGFzIFNjaGVtYUFyZ3M8Uz47XG5cbiAgICAvLyBUT0RPOiBicmVha2luZzogU3dpdGNoIGJhY2sgdG8gdGhpcy5tZW1vLnF1ZXJ5KHNjaGVtYSwgYXJncywgc3RhdGUuZW50aXRpZXMgYXMgYW55LCBzdGF0ZS5pbmRleGVzKSB0byBkb1xuICAgIC8vIHRoaXMgbG9naWNcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMubWVtby5idWlsZFF1ZXJ5S2V5KFxuICAgICAgc2NoZW1hLFxuICAgICAgYXJncyxcbiAgICAgIHN0YXRlLmVudGl0aWVzIGFzIGFueSxcbiAgICAgIHN0YXRlLmluZGV4ZXMsXG4gICAgICBKU09OLnN0cmluZ2lmeShhcmdzKSxcbiAgICApO1xuXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuIHsgZGF0YTogdW5kZWZpbmVkLCBjb3VudFJlZjogKCkgPT4gKCkgPT4gdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYXRhLCBwYXRocyB9ID0gdGhpcy5tZW1vLmRlbm9ybWFsaXplKFxuICAgICAgc2NoZW1hLFxuICAgICAgaW5wdXQsXG4gICAgICBzdGF0ZS5lbnRpdGllcyxcbiAgICAgIGFyZ3MsXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogdHlwZW9mIGRhdGEgPT09ICdzeW1ib2wnID8gdW5kZWZpbmVkIDogKGRhdGEgYXMgYW55KSxcbiAgICAgIGNvdW50UmVmOiB0aGlzLmdjUG9saWN5LmNyZWF0ZUNvdW50UmVmKHsgcGF0aHMgfSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NoZW1hUmVzcG9uc2U8VD4oXG4gICAgZGF0YTogVCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBwYXRoczogRW50aXR5UGF0aFtdLFxuICAgIGVudGl0eU1ldGE6IFN0YXRlPHVua25vd24+WydlbnRpdHlNZXRhJ10sXG4gICAgZXhwaXJlc0F0OiBudW1iZXIsXG4gICAgaW52YWxpZElmU3RhbGU6IGJvb2xlYW4sXG4gICAgbWV0YTogeyBlcnJvcj86IHVua25vd247IGludmFsaWRhdGVkPzogdW5rbm93biB9ID0ge30sXG4gICk6IHtcbiAgICBkYXRhOiBUO1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9IHtcbiAgICBjb25zdCBpbnZhbGlkRGVub3JtYWxpemUgPSB0eXBlb2YgZGF0YSA9PT0gJ3N5bWJvbCc7XG5cbiAgICAvLyBmYWxsYmFjayB0byBlbnRpdHkgZXhwaXJ5IHRpbWVcbiAgICBpZiAoIWV4cGlyZXNBdCkge1xuICAgICAgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJlc0F0KHBhdGhzLCBlbnRpdHlNZXRhKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9jb25jZXB0cy9leHBpcnktcG9saWN5I2V4cGlyeS1zdGF0dXNcbiAgICAvLyB3ZSBkb24ndCB0cmFjayB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YWxlIG9yIGZyZXNoIGJlY2F1c2UgdGhhdCBpcyB0aWVkIHRvIHRyaWdnZXJpbmdcbiAgICAvLyBjb25kaXRpb25zXG4gICAgY29uc3QgZXhwaXJ5U3RhdHVzID1cbiAgICAgIG1ldGE/LmludmFsaWRhdGVkIHx8IChpbnZhbGlkRGVub3JtYWxpemUgJiYgIW1ldGE/LmVycm9yKSA/XG4gICAgICAgIEV4cGlyeVN0YXR1cy5JbnZhbGlkXG4gICAgICA6IGludmFsaWREZW5vcm1hbGl6ZSB8fCBpbnZhbGlkSWZTdGFsZSA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZVxuICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGV4cGlyeVN0YXR1cyxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICAgIGNvdW50UmVmOiB0aGlzLmdjUG9saWN5LmNyZWF0ZUNvdW50UmVmKHsga2V5LCBwYXRocyB9KSxcbiAgICB9O1xuICB9XG59XG5cbi8vIGJlbmNobWFyazogaHR0cHM6Ly93d3cubWVhc3VyZXRoYXQubmV0L0JlbmNobWFya3MvU2hvdy8yNDY5MS8wL21pbi1yZWR1Y2VyLXZzLWltcGVyYXRpdmUtd2l0aC1wYXRoc1xuLy8gZWFybGllc3QgZXhwaXJ5IGRpY3RhdGVzIGFnZVxuZnVuY3Rpb24gZW50aXR5RXhwaXJlc0F0KFxuICBwYXRoczogRW50aXR5UGF0aFtdLFxuICBlbnRpdHlNZXRhOiB7XG4gICAgcmVhZG9ubHkgW2VudGl0eUtleTogc3RyaW5nXToge1xuICAgICAgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiB7XG4gICAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyOyAvLyBUaGlzIGlzIG9ubHkgdGhlIHZhbHVlIHVudGlsIGl0IGlzIHNldCBieSB0aGUgRGF0YVByb3ZpZGVyXG4gICAgICB9O1xuICAgIH07XG4gIH0sXG4pIHtcbiAgbGV0IGV4cGlyZXNBdCA9IEluZmluaXR5O1xuICBmb3IgKGNvbnN0IHsgcGssIGtleSB9IG9mIHBhdGhzKSB7XG4gICAgY29uc3QgZW50aXR5RXhwaXJ5ID0gZW50aXR5TWV0YVtrZXldPy5bcGtdPy5leHBpcmVzQXQ7XG4gICAgLy8gZXhwaXJlc0F0IHdpbGwgYWx3YXlzIHJlc29sdmUgdG8gZmFsc2Ugd2l0aCBhbnkgY29tcGFyaXNvblxuICAgIGlmIChlbnRpdHlFeHBpcnkgPCBleHBpcmVzQXQpIGV4cGlyZXNBdCA9IGVudGl0eUV4cGlyeTtcbiAgfVxuICByZXR1cm4gZXhwaXJlc0F0O1xufVxuXG4vKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNjaGVtYSBoYXMgYW55IGVudGl0aWVzLlxuICpcbiAqIFdpdGhvdXQgZW50aXRpZXMsIGRlbm9ybWFsaXphdGlvbiBpcyBub3QgbmVlZGVkLCBhbmQgcmVzdWx0cyBzaG91bGQgbm90IGJlIHF1ZXJpZWQuXG4gKi9cbmZ1bmN0aW9uIHNjaGVtYUhhc0VudGl0eShzY2hlbWE6IFNjaGVtYSk6IGJvb2xlYW4ge1xuICBpZiAoaXNFbnRpdHkoc2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgcmV0dXJuIHNjaGVtYS5sZW5ndGggIT09IDAgJiYgc2NoZW1hSGFzRW50aXR5KHNjaGVtYVswXSk7XG4gIGlmIChzY2hlbWEgJiYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY29uc3QgbmVzdGVkU2NoZW1hID1cbiAgICAgICdzY2hlbWEnIGluIHNjaGVtYSA/IChzY2hlbWEuc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIFNjaGVtYT4pIDogc2NoZW1hO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkU2NoZW1hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NoZW1hSGFzRW50aXR5KG5lc3RlZFNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG5lc3RlZFNjaGVtYSkuc29tZSh4ID0+IHNjaGVtYUhhc0VudGl0eSh4KSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSB7IEVycm9yVHlwZXMgfTtcblxuY2xhc3MgU25hcHNob3Q8VCA9IHVua25vd24+IGltcGxlbWVudHMgU25hcHNob3RJbnRlcmZhY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgYWJvcnQgPSBuZXcgQWJvcnRPcHRpbWlzdGljKCk7XG5cbiAgcHJpdmF0ZSBzdGF0ZTogU3RhdGU8VD47XG4gIHByaXZhdGUgY29udHJvbGxlcjogQ29udHJvbGxlcjtcbiAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFib3J0ID0gU25hcHNob3QuYWJvcnQ7XG5cbiAgY29uc3RydWN0b3IoY29udHJvbGxlcjogQ29udHJvbGxlciwgc3RhdGU6IFN0YXRlPFQ+LCBmZXRjaGVkQXQgPSAwKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgdGhpcy5mZXRjaGVkQXQgPSBmZXRjaGVkQXQ7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqIERhdGEgQWNjZXNzICoqKioqKioqKioqKioqKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFJlc3BvbnNlICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRSZXNwb25zZU1ldGEgKi9cbiAgZ2V0UmVzcG9uc2VNZXRhPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlTWV0YTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlTWV0YTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlTWV0YShlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QjZ2V0RXJyb3IgKi9cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcjxFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+PihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknPj4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEVycm9yKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZWQgbWVtb2l6ZWQgdmFsdWUgZm9yIGFueSBRdWVyYWJsZSBzY2hlbWFcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QjZ2V0XG4gICAqL1xuICBnZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLmFyZ3M6IFNjaGVtYUFyZ3M8Uz5cbiAgKTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXQoc2NoZW1hLCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBzdG9yZSBmb3IgYSBRdWVyYWJsZSBzY2hlbWE7IHByb3ZpZGluZyByZWxhdGVkIG1ldGFkYXRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFF1ZXJ5TWV0YVxuICAgKi9cbiAgZ2V0UXVlcnlNZXRhPFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5hcmdzOiBTY2hlbWFBcmdzPFM+XG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFF1ZXJ5TWV0YShzY2hlbWEsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQVFBLFNBQ0VBLFlBQVksRUFNWkMsU0FBUyxFQUNUQyxRQUFRLEVBQ1JDLFdBQVcsRUFDWEMsZ0JBQWdCLFFBQ1gsd0JBQXdCO0FBRS9CLE9BQU9DLGVBQWUsTUFBTSxzQkFBc0I7QUFDbEQsU0FDRUMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsUUFDYixpQ0FBaUM7QUFDeEMsU0FDRUMsZUFBZSxFQUNmQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsbUJBQW1CLEVBQ25CQyxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsaUJBQWlCLFFBQ1osb0JBQW9CO0FBQzNCLE9BQU9DLFVBQVUsTUFBTSxpQkFBaUI7QUFJeEMsU0FBU0MsZ0JBQWdCLFFBQVEsc0JBQXNCO0FBQ3ZELFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsT0FBT0MsVUFBVSxNQUFNLHdCQUF3QjtBQWUvQyxNQUFNQyxhQUFhLEdBQUlDLE1BQWUsSUFBb0I7RUFDeEQsTUFBTSxJQUFJQyxLQUFLLENBQ2IsaUVBQWlFLEdBQy9ELHlEQUNKLENBQUM7QUFDSCxDQUFDO0FBQ0QsTUFBTUMsVUFBVSxHQUFHQSxDQUFBLEtBQXNCO0VBQ3ZDO0VBQ0E7RUFDQSxPQUFPTCxZQUFZO0FBQ3JCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU1NLFVBQVUsQ0FHN0I7RUFDQTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztFQUVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFNRTtBQUNGO0FBQ0E7O0VBR0VDLFdBQVdBLENBQUM7SUFDVkMsUUFBUSxHQUFHTixhQUFvQjtJQUMvQk8sUUFB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
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _Promise from "core-js-pure/stable/promise/index.js";
|
|
2
1
|
import { FETCH } from '../../actionTypes.js';
|
|
3
2
|
/**
|
|
4
3
|
* Requesting a fetch to begin
|
|
@@ -8,7 +7,7 @@ export function createFetch(endpoint, {
|
|
|
8
7
|
}) {
|
|
9
8
|
let resolve = 0;
|
|
10
9
|
let reject = 0;
|
|
11
|
-
const promise = new
|
|
10
|
+
const promise = new Promise((a, b) => {
|
|
12
11
|
[resolve, reject] = [a, b];
|
|
13
12
|
});
|
|
14
13
|
const meta = {
|
|
@@ -25,4 +24,4 @@ export function createFetch(endpoint, {
|
|
|
25
24
|
meta
|
|
26
25
|
};
|
|
27
26
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSCIsImNyZWF0ZUZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2UiLCJQcm9taXNlIiwiYSIsImIiLCJtZXRhIiwiZmV0Y2hlZEF0IiwiRGF0ZSIsIm5vdyIsInR5cGUiLCJrZXkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlci9hY3Rpb25zL2NyZWF0ZUZldGNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UsIE5JIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IEZFVENIIH0gZnJvbSAnLi4vLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBGZXRjaEFjdGlvbiwgRmV0Y2hNZXRhIH0gZnJvbSAnLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXF1ZXN0aW5nIGEgZmV0Y2ggdG8gYmVnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZldGNoPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IEZldGNoQWN0aW9uPEU+IHtcbiAgbGV0IHJlc29sdmU6ICh2YWx1ZT86IGFueSB8IFByb21pc2VMaWtlPGFueT4pID0+IHZvaWQgPSAwIGFzIGFueTtcbiAgbGV0IHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCA9IDAgYXMgYW55O1xuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoYSwgYikgPT4ge1xuICAgIFtyZXNvbHZlLCByZWplY3RdID0gW2EsIGJdO1xuICB9KTtcbiAgY29uc3QgbWV0YTogRmV0Y2hNZXRhID0ge1xuICAgIGZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICByZXNvbHZlLFxuICAgIHJlamVjdCxcbiAgICBwcm9taXNlLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogRkVUQ0gsXG4gICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gICAgYXJncyxcbiAgICBlbmRwb2ludCxcbiAgICBtZXRhLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxLQUFLLFFBQVEsc0JBQXNCO0FBSTVDO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsV0FBV0EsQ0FHekJDLFFBQVcsRUFDWDtFQUFFQztBQUE0QyxDQUFDLEVBQy9CO0VBQ2hCLElBQUlDLE9BQWlELEdBQUcsQ0FBUTtFQUNoRSxJQUFJQyxNQUE4QixHQUFHLENBQVE7RUFDN0MsTUFBTUMsT0FBTyxHQUFHLElBQUlDLE9BQU8sQ0FBTSxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBSztJQUN6QyxDQUFDTCxPQUFPLEVBQUVDLE1BQU0sQ0FBQyxHQUFHLENBQUNHLENBQUMsRUFBRUMsQ0FBQyxDQUFDO0VBQzVCLENBQUMsQ0FBQztFQUNGLE1BQU1DLElBQWUsR0FBRztJQUN0QkMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCVCxPQUFPO0lBQ1BDLE1BQU07SUFDTkM7RUFDRixDQUFDO0VBRUQsT0FBTztJQUNMUSxJQUFJLEVBQUVkLEtBQUs7SUFDWGUsR0FBRyxFQUFFYixRQUFRLENBQUNhLEdBQUcsQ0FBQyxHQUFHWixJQUFJLENBQUM7SUFDMUJBLElBQUk7SUFDSkQsUUFBUTtJQUNSUTtFQUNGLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import _Object$fromEntries from "core-js-pure/stable/object/from-entries.js";
|
|
2
1
|
export const ensurePojo =
|
|
3
2
|
// FormData doesn't exist in node
|
|
4
3
|
/* istanbul ignore else we don't run coverage when we test node*/
|
|
5
|
-
typeof FormData !== 'undefined' ? body => body instanceof FormData ?
|
|
4
|
+
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */body => body;
|
|
6
5
|
export default ensurePojo;
|
|
7
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVQb2pvIiwiRm9ybURhdGEiLCJib2R5IiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvZW5zdXJlUG9qby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZW5zdXJlUG9qbyA9XG4gIC8vIEZvcm1EYXRhIGRvZXNuJ3QgZXhpc3QgaW4gbm9kZVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSB3ZSBkb24ndCBydW4gY292ZXJhZ2Ugd2hlbiB3ZSB0ZXN0IG5vZGUqL1xuICB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID9cbiAgICAoYm9keTogYW55KSA9PlxuICAgICAgYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhID9cbiAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKChib2R5IGFzIGFueSkuZW50cmllcygpKVxuICAgICAgOiBib2R5XG4gIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gKGJvZHk6IGFueSkgPT4gYm9keTtcbmV4cG9ydCBkZWZhdWx0IGVuc3VyZVBvam87XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsVUFBVTtBQUNyQjtBQUNBO0FBQ0EsT0FBT0MsUUFBUSxLQUFLLFdBQVcsR0FDNUJDLElBQVMsSUFDUkEsSUFBSSxZQUFZRCxRQUFRLEdBQ3RCRSxNQUFNLENBQUNDLFdBQVcsQ0FBRUYsSUFBSSxDQUFTRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQzNDSCxJQUFJLEdBQ1IsMEJBQTRCQSxJQUFTLElBQUtBLElBQUk7QUFDbEQsZUFBZUYsVUFBVSIsImlnbm9yZUxpc3QiOltdfQ==
|