@monerium/sdk-react-provider 0.3.0 → 1.0.0
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/README.md +29 -20
- package/dist/index.d.ts +317 -172
- package/dist/index.js +22 -15
- package/dist/index.mjs +4 -4
- package/package.json +3 -4
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createContext, useState, useEffect, useCallback, useContext } from 'react';
|
|
2
2
|
import { useQueryClient, useQuery, useMutation } from '@tanstack/react-query';
|
|
3
|
-
import { MoneriumClient } from '@monerium/sdk';
|
|
3
|
+
import { MoneriumClient, parseChain } from '@monerium/sdk';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var b=createContext(null);var H=({children:e,clientId:r,redirectUri:n,environment:o="sandbox",refreshToken:i,onRefreshTokenUpdate:a,debug:u=!1})=>{let t=useQueryClient(),[s]=useState(()=>new MoneriumClient({environment:o,clientId:r,redirectUri:n,debug:u})),[f,w]=useState(!1),[v,E]=useState(null),[k,q]=useState(!0);useEffect(()=>((async()=>{if(s)try{w(await s.getAccess());}catch(h){console.error("Failed to get access:",h);}finally{q(!1),s?.bearerProfile&&a?.(s.bearerProfile.refresh_token);}})(),()=>{s&&s.disconnect();}),[]),useEffect(()=>{i&&!f&&!k&&(async()=>{if(s)try{w(await s.getAccess(i));}catch(h){console.error("Failed to get access:",h);}finally{s?.bearerProfile&&a?.(s.bearerProfile.refresh_token);}})();},[i]);let I=useCallback(async m=>{try{s&&await s.authorize(m);}catch(h){console.error("Error during authorization:",h),E(h);}},[s]),z=async()=>{try{s&&await s.revokeAccess();}catch(m){console.error("Error during revoking access:",m),E(m);}finally{t.clear(),w(!1);}};return jsx(b.Provider,{value:{sdk:s,authorize:I,isAuthorized:f,isLoading:k,error:v,disconnect:async()=>s?.disconnect(),revokeAccess:async()=>z()},children:e})};var d={getAll:["monerium"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getAddress:e=>["monerium","address",[e]],getAddresses:e=>["monerium","addresses",...e?[e]:[]],getBalances:(e,r,n)=>["monerium","balances",e,r,...n?[...n]:[]],getIban:e=>["monerium","iban",e],getIbans:e=>["monerium","ibans",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],submitProfileDetails:["monerium","submit-profile-details"],moveIban:["monerium","move-iban"],requestIban:["monerium","request-iban"],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"]};function c(){let e=useContext(b);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function l(){let e=useContext(b);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function Ee({profile:e,query:r}={}){let{isAuthorized:n}=l(),o=c(),{data:i}=D(),a=e||i?.profiles?.[0]?.id;return useQuery({...r,queryKey:d.getProfile(a),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");if(!a)throw new Error("Profile Id is required");return o.getProfile(a)},enabled:!!(o&&n&&a&&(r?.enabled??!0))})}function D({query:e}={}){let{isAuthorized:r}=l(),n=c();return useQuery({...e,queryKey:d.getProfiles,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getProfiles()},enabled:!!(n&&r&&(e?.enabled??!0))})}function ke({query:e}={}){let r=c(),{isAuthorized:n}=l();return useQuery({...e,queryKey:d.getTokens,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.getTokens()},enabled:!!(r&&n&&(e?.enabled??!0))})}function Pe({address:e,query:r={}}){let n=c(),{isAuthorized:o}=l();return useQuery({...r,queryKey:d.getAddress(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Address is required");return n.getAddress(e)},enabled:!!(n&&o&&e&&(r?.enabled??!0))})}function Oe({profile:e,chain:r,query:n={}}={}){let o=c(),{isAuthorized:i}=l();return useQuery({...n,queryKey:d.getAddresses({profile:e,chain:r?parseChain(r):void 0}),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return o.getAddresses({profile:e,chain:r})},enabled:!!(o&&i&&(n?.enabled??!0))})}function Se({address:e,chain:r,currencies:n,query:o}){let i=c(),{isAuthorized:a}=l();return useQuery({...o,queryKey:d.getBalances(e,parseChain(r),n),staleTime:1e3*60*5,queryFn:async()=>{if(!i)throw new Error("No SDK instance available");if(!a)throw new Error("User not authorized");return i.getBalances(e,r,n)},enabled:!!(i&&a&&(o?.enabled??!0))})}function ve({iban:e,query:r}){let n=c(),{isAuthorized:o}=l();return useQuery({...r,queryKey:d.getIban(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.getIban(e)},enabled:!!(n&&o&&e&&(r?.enabled??!0))})}function qe({profile:e,chain:r,query:n={}}={}){let o=c(),{isAuthorized:i}=l();return useQuery({...n,queryKey:d.getIbans({profile:e,chain:r}),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return o.getIbans({profile:e,chain:r})},enabled:!!(o&&i&&(n?.enabled??!0))})}function Ie({orderId:e,query:r={}}){let n=c(),{isAuthorized:o}=l();return useQuery({...r,queryKey:d.getOrder(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return n.getOrder(e)},enabled:!!(n&&o&&e&&(r.enabled??!0))})}function ze({query:e={},...r}={}){let n=c(),{isAuthorized:o}=l();return useQuery({...e,queryKey:d.getOrders(r),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.getOrders(r)},enabled:!!(n&&o&&(e.enabled??!0))})}function Ke({profile:e,mutation:r={}}){let n=c(),{isAuthorized:o}=l(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.submitProfileDetails,mutationFn:async t=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.submitProfileDetails(e,t)},onSuccess(t,s,f){i.invalidateQueries({queryKey:d.getProfile(e)}),r?.onSuccess?.(t,s,f);},onError(t,s,f){throw r?.onError?.(t,s,f),t}});return {submitProfileDetails:a,...u}}function Ce({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),{mutateAsync:o,...i}=useMutation({...e,mutationKey:d.requestIban,mutationFn:async({address:a,chain:u,emailNotifications:t})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.requestIban({address:a,chain:u,emailNotifications:t})},onSuccess(a,u,t){e?.onSuccess?.(a,u,t);},onError(a,u,t){throw e?.onError?.(a,u,t),a}});return {requestIban:o,...i}}function xe({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),o=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.moveIban,mutationFn:async({iban:u,address:t,chain:s})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.moveIban(u,{address:t,chain:s})},onSuccess(u,t,s){o.invalidateQueries({queryKey:d.getIban(t.iban)}),o.invalidateQueries({queryKey:d.getIbans()}),o.invalidateQueries({queryKey:d.getAddress(t.address)}),e?.onSuccess?.(u,t,s);},onError(u,t,s){throw e?.onError?.(u,t,s),u}});return {moveIban:i,...a}}function Ne({supportingDocument:e,mutation:r}={}){let n=c(),{isAuthorized:o}=l(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.placeOrder,mutationFn:async t=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");let s;if(parseInt(t.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");s=(await n.uploadSupportingDocument(e)).id;}let f={...t,documentId:s};return n.placeOrder(f)},onSuccess(t,s,f){i.invalidateQueries({queryKey:d.getOrders()}),i.invalidateQueries({queryKey:d.getBalances(t.address,t.chain)}),r?.onSuccess?.(t,s,f);},onError(t,s,f){throw r?.onError?.(t,s,f),t}});return {placeOrder:a,...u}}function Re({mutation:e}={}){let r=c(),{isAuthorized:n}=l(),o=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.linkAddress,mutationFn:async u=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.linkAddress(u)},onSuccess(u,t,s){o.invalidateQueries({queryKey:d.getAddresses()}),t.profile&&o.invalidateQueries({queryKey:d.getProfile(t.profile)}),e?.onSuccess?.(u,t,s);},onError(u,t,s){throw e?.onError?.(u,t,s),u}});return {linkAddress:i,...a}}var Me=({state:e,profile:r,onMessage:n,onError:o})=>{let i=c();return useEffect(()=>(i&&i.subscribeOrderNotifications({filter:{state:e,profile:r},onMessage:n,onError:o}),()=>{i&&i?.unsubscribeOrderNotifications({state:e,profile:r});}),[i,r,e]),()=>i?.unsubscribeOrderNotifications({state:e,profile:r})};
|
|
7
7
|
|
|
8
|
-
export {
|
|
8
|
+
export { b as MoneriumContext, H as MoneriumProvider, d as keys, Pe as useAddress, Oe as useAddresses, l as useAuth, Se as useBalances, ve as useIBAN, qe as useIBANs, Re as useLinkAddress, xe as useMoveIban, Ie as useOrder, ze as useOrders, Ne as usePlaceOrder, Ee as useProfile, D as useProfiles, Ce as useRequestIban, Ke as useSubmitProfileDetails, Me as useSubscribeOrderNotification, ke as useTokens };
|
|
9
9
|
//# sourceMappingURL=index.mjs.map
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJsIiwicmVkaXJlY3RVcmkiLCJlbnZpcm9ubWVudCIsInF1ZXJ5Q2xpZW50IiwidXNlUXVlcnlDbGllbnQiLCJzZGsiLCJzZXRTZGsiLCJ1c2VTdGF0ZSIsImlzQXV0aG9yaXplZCIsInNldElzQXV0aG9yaXplZCIsImVycm9yIiwic2V0RXJyb3IiLCJsb2FkaW5nQXV0aCIsInNldExvYWRpbmdBdXRoIiwidXNlRWZmZWN0Iiwic2RrSW5zdGFuY2UiLCJNb25lcml1bUNsaWVudCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwicmV2b2tlQWNjZXNzIiwianN4Iiwia2V5cyIsInByb2ZpbGVJZCIsIm9yZGVySWQiLCJmaWx0ZXIiLCJ1c2VTZGsiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsInVzZUF1dGgiLCJ1c2VBdXRoQ29udGV4dCIsInF1ZXJ5IiwiZGF0YSIsInJlc3QiLCJ1c2VRdWVyeSIsInVzZVByb2ZpbGUiLCJhdXRoQ29udGV4dCIsInByb2ZpbGVJZFRvVXNlIiwidXNlUHJvZmlsZXMiLCJ1c2VUb2tlbnMiLCJ1c2VCYWxhbmNlcyIsInVzZU9yZGVyIiwidXNlT3JkZXJzIiwiZmlsdGVycyIsInVzZVBsYWNlT3JkZXIiLCJzdXBwb3J0aW5nRG9jdW1lbnQiLCJtdXRhdGlvbiIsIm11dGF0ZUFzeW5jIiwidXNlTXV0YXRpb24iLCJib2R5IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJ2YXJpYWJsZXMiLCJ2YXJzIiwidXNlTGlua0FkZHJlc3MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBSU8sSUFBTUEsQ0FBa0JDLENBQUFB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LENBQzVCLFFBQVVvQixDQUFBQSxDQUFBQSxDQUFLLFVBQVdDLENBQUFBLENBQVMsQ0FDckMsQ0FBQyxFQUVEdUIsQ0FBVSxFQUFBLFNBQUEsR0FBWWQsQ0FBTW9CLENBQUFBLENBQUFBLENBQVd6QixDQUFPLEVBQ2hELENBQUEsQ0FDQSxPQUFRbEIsQ0FBQUEsQ0FBQUEsQ0FBTzRDLEVBQU0xQixDQUFTLENBQUEsQ0FFNUIsTUFBQW1CLENBQUFBLEVBQVUsT0FBVXJDLEdBQUFBLENBQUFBLENBQU80QyxDQUFNMUIsQ0FBQUEsQ0FBTyxFQUNsQ2xCLENBQ1IsQ0FDRixDQUFDLENBQUEsQ0FDRCxPQUFPLENBQ0wsV0FBQSxDQUFhc0MsQ0FDYixDQUFBLEdBQUdkLENBQ0wsQ0FDRiIsImZpbGUiOiJpbmRleC5tanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTZGtJbnN0YW5jZSwgVXNlQXV0aFJldHVybiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTW9uZXJpdW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgKFVzZUF1dGhSZXR1cm4gJiBTZGtJbnN0YW5jZSkgfCBudWxsXG4+KG51bGwpO1xuIiwiaW1wb3J0IHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IHsgTW9uZXJpdW1DbGllbnQgfSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IEF1dGhvcml6ZVBhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFBsYWNlIHRoaXMgcHJvdmlkZXIgYXQgdGhlIHJvb3Qgb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAqIEBncm91cCBQcm92aWRlclxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5jaGlsZHJlbiAtIFJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHBhcmFtcy5jbGllbnRJZCAtIE1vbmVyaXVtIGF1dGggZmxvdyBjbGllbnQgaWQuXG4gKiBAcGFyYW0gcGFyYW1zLnJlZGlyZWN0VXJpIC0gTW9uZXJpdW0gYXV0aCBmbG93IHJlZGlyZWN0IHVybC5cbiAqIEBwYXJhbSBwYXJhbXMuZW52aXJvbm1lbnQgLSBNb25lcml1bSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBNb25lcml1bVByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsaWVudElkLFxuICByZWRpcmVjdFVybCxcbiAgcmVkaXJlY3RVcmksXG4gIGVudmlyb25tZW50ID0gJ3NhbmRib3gnLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICByZWRpcmVjdFVyaTogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIHJlZGlyZWN0VXJpICovXG4gIHJlZGlyZWN0VXJsPzogc3RyaW5nO1xuICBlbnZpcm9ubWVudD86ICdzYW5kYm94JyB8ICdwcm9kdWN0aW9uJztcbn0pID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IFtzZGssIHNldFNka10gPSB1c2VTdGF0ZTxNb25lcml1bUNsaWVudD4oKTtcbiAgY29uc3QgW2lzQXV0aG9yaXplZCwgc2V0SXNBdXRob3JpemVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IHVua25vd24gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2xvYWRpbmdBdXRoLCBzZXRMb2FkaW5nQXV0aF0gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBTREtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZGtJbnN0YW5jZSA9IG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG4gICAgICBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0VXJpOiByZWRpcmVjdFVyaSB8fCByZWRpcmVjdFVybCxcbiAgICB9KTtcbiAgICBzZXRTZGsoc2RrSW5zdGFuY2UpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbc2RrXSk7XG5cbiAgY29uc3QgYXV0aG9yaXplID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBhcmFtcz86IEF1dGhvcml6ZVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNkaykge1xuICAgICAgICAgIGF3YWl0IHNkay5hdXRob3JpemUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBhdXRob3JpemF0aW9uOicsIGVycik7XG4gICAgICAgIHNldEVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2RrXVxuICApO1xuXG4gIGNvbnN0IHJldm9rZUFjY2VzcyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBhd2FpdCBzZGsucmV2b2tlQWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcmV2b2tpbmcgYWNjZXNzOicsIGVycik7XG4gICAgICBzZXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyeUNsaWVudC5jbGVhcigpO1xuICAgICAgc2V0SXNBdXRob3JpemVkKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8TW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBzZGssXG4gICAgICAgIGF1dGhvcml6ZSxcbiAgICAgICAgaXNBdXRob3JpemVkLFxuICAgICAgICBpc0xvYWRpbmc6IGxvYWRpbmdBdXRoLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZGlzY29ubmVjdDogYXN5bmMgKCkgPT4gc2RrPy5kaXNjb25uZWN0KCksXG4gICAgICAgIHJldm9rZUFjY2VzczogYXN5bmMgKCkgPT4gcmV2b2tlQWNjZXNzKCksXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L01vbmVyaXVtQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBdXRoQ29udGV4dCxcbiAgQmFsYW5jZXMsXG4gIExpbmtBZGRyZXNzLFxuICBMaW5rZWRBZGRyZXNzLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyU3RhdGUsXG4gIFByb2ZpbGUsXG4gIFRva2VuLFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7XG4gIE11dGF0aW9uT3B0aW9ucyxcbiAgTXV0YXRpb25SZXN1bHQsXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlSZXN1bHQsXG4gIFVzZUF1dGhSZXR1cm4sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogUXVlcnkga2V5c1xuICogKi9cbmV4cG9ydCBjb25zdCBrZXlzID0ge1xuICBnZXRBbGw6IFsnbW9uZXJpdW0nXSxcbiAgZ2V0QXV0aENvbnRleHQ6IFsnbW9uZXJpdW0nLCAnYXV0aC1jb250ZXh0J10sXG4gIGdldFByb2ZpbGU6IChwcm9maWxlSWQ6IHN0cmluZykgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ3Byb2ZpbGUnLFxuICAgIC4uLihwcm9maWxlSWQgPyBbcHJvZmlsZUlkXSA6IFtdKSxcbiAgXSxcbiAgZ2V0UHJvZmlsZXM6IFsnbW9uZXJpdW0nLCAncHJvZmlsZXMnXSxcbiAgZ2V0QmFsYW5jZXM6IChwcm9maWxlSWQ/OiBzdHJpbmcpID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAgLi4uKHByb2ZpbGVJZCA/IFtwcm9maWxlSWRdIDogW10pLFxuICBdLFxuICBnZXRUb2tlbnM6IFsnbW9uZXJpdW0nLCAndG9rZW5zJ10sXG4gIGdldE9yZGVyOiAob3JkZXJJZDogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ29yZGVyJywgb3JkZXJJZF0sXG4gIGdldE9yZGVyczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdvcmRlcnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgcGxhY2VPcmRlcjogWydtb25lcml1bScsICdwbGFjZS1vcmRlciddLFxuICBsaW5rQWRkcmVzczogWydtb25lcml1bScsICdsaW5rLWFkZHJlc3MnXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHsgYXV0aG9yaXplLCBpc0F1dGhvcml6ZWQsIGlzTG9hZGluZywgZXJyb3IgfSA9IHVzZUF1dGgoKTtcbiAqXG4gKiBhdXRob3JpemUoKTsgLy8gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKlxuICogLy8gVG8gb3B0LWluIHRvIGF1dG9tYXRlZCB3YWxsZXQgbGlua2luZywgcGFzcyB0aGUgYWRkcmVzcywgc2lnbmF0dXJlIGFuZCBjaGFpbi5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW4gfSkuXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7VXNlQXV0aFJldHVybn1cbiAqIC0gYGF1dGhvcml6ZWAgIC0gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiAtIGBpc0F1dGhvcml6ZWRgIC0gV2hldGhlciB0aGUgdXNlciBpcyBhdXRob3JpemVkLlxuICogLSBgaXNMb2FkaW5nYCAtIFdoZXRoZXIgdGhlIGF1dGggZmxvdyBpcyBsb2FkaW5nLlxuICogLSBgZXJyb3JgIC0gRXJyb3IgbWVzc2FnZSBpZiB0aGUgYXV0aCBmbG93IGZhaWxzLlxuICogLSBgZGlzY29ubmVjdGAgLSBEaXNjb25uZWN0IHRoZSB1c2VyLlxuICogLSBgcmV2b2tlQWNjZXNzYCAtIFJldm9rZSB0aGUgdXNlcidzIGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dGgoKTogVXNlQXV0aFJldHVybiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUF1dGggbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE1vbmVyaXVtUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzQXV0aG9yaXplZDogY29udGV4dC5pc0F1dGhvcml6ZWQsXG4gICAgYXV0aG9yaXplOiBjb250ZXh0LmF1dGhvcml6ZSxcbiAgICBpc0xvYWRpbmc6IGNvbnRleHQuaXNMb2FkaW5nLFxuICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgIGRpc2Nvbm5lY3Q6IGNvbnRleHQuZGlzY29ubmVjdCxcbiAgICByZXZva2VBY2Nlc3M6IGNvbnRleHQucmV2b2tlQWNjZXNzLFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IHRoZSBhdXRoZW50aWNhdGlvbiBjb250ZXh0LlxuICogQGdyb3VwIEhvb2tzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxBdXRoQ29udGV4dD59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBhdXRoQ29udGV4dCwgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQXV0aENvbnRleHQoKTtcbiAqIGBgYFxuICpcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL2F1dGgtY29udGV4dClcbiAqXG4gKiBbQXV0aENvbnRleHQgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL0F1dGhDb250ZXh0Lm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aENvbnRleHQoe1xuICBxdWVyeSxcbn06IHtcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QXV0aENvbnRleHQ+O1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J2F1dGhDb250ZXh0JywgQXV0aENvbnRleHQ+IHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QXV0aENvbnRleHQsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QXV0aENvbnRleHQoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBhdXRoQ29udGV4dDogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IHNpbmdsZSBwcm9maWxlXG4gKiBJZiBubyBgcHJvZmlsZUlkYCBpcyBwcm92aWRlZCwgdGhlIGRlZmF1bHQgcHJvZmlsZSBpcyB1c2VkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5wcm9maWxlSWRdIFRoZSBpZCBvZiB0aGUgcHJvZmlsZS5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPFByb2ZpbGU+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcHJvZmlsZSwgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlUHJvZmlsZSgpO1xuICogYGBgXG5cbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUpXG4gKlxuICogW1Byb2ZpbGUgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL1Byb2ZpbGUubWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9maWxlKHtcbiAgcHJvZmlsZUlkLFxuICBxdWVyeSxcbn06IHtcbiAgcHJvZmlsZUlkPzogc3RyaW5nO1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlPjtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdwcm9maWxlJywgUHJvZmlsZT4ge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBhdXRoQ29udGV4dCB9ID0gdXNlQXV0aENvbnRleHQoKTtcblxuICBjb25zdCBwcm9maWxlSWRUb1VzZSA9IHByb2ZpbGVJZCB8fCAoYXV0aENvbnRleHQ/LmRlZmF1bHRQcm9maWxlIGFzIHN0cmluZyk7XG5cbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlSWRUb1VzZSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghcHJvZmlsZUlkVG9Vc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZShwcm9maWxlSWRUb1VzZSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKFxuICAgICAgc2RrICYmIGlzQXV0aG9yaXplZCAmJiBwcm9maWxlSWRUb1VzZSAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqICMgR2V0IHByb2ZpbGVzXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8UHJvZmlsZVtdPn0gW3BhcmFtcy5xdWVyeV0ge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHByb2ZpbGVzLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlcygpO1xuICogYGBgXG5cbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGVzKVxuICpcbiAqIFtQcm9maWxlIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9Qcm9maWxlLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZXMoe1xuICBxdWVyeSxcbn06IHtcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8UHJvZmlsZVtdPjtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdwcm9maWxlcycsIFByb2ZpbGVbXT4ge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlcyxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRQcm9maWxlcygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHByb2ZpbGVzOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqICMgR2V0IHRva2Vuc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPFRva2VuW10+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgdG9rZW5zLCAvLyB1c2VRdWVyeSdzIGBkYXRhYCBwcm9wZXJ0eVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VUb2tlbnMoKTtcbiAqIGBgYFxuXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi90b2tlbnMpXG4gKlxuICogW1Rva2VuIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9Ub2tlbi5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2Vucyh7XG4gIHF1ZXJ5LFxufTogeyBxdWVyeT86IFF1ZXJ5T3B0aW9uczxUb2tlbltdPiB9ID0ge30pOiBRdWVyeVJlc3VsdDwndG9rZW5zJywgVG9rZW5bXT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0VG9rZW5zLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFRva2VucygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuczogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IGJhbGFuY2VzXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXNbXT59IFtwYXJhbXMucHJvZmlsZUlkXSBGZXRjaCBiYWxhbmNlcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXNbXT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgYmFsYW5jZXMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUJhbGFuY2VzKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUtYmFsYW5jZXMpXG4gKlxuICogW0JhbGFuY2VzIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9CYWxhbmNlcy5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgcHJvZmlsZUlkLFxuICBxdWVyeSxcbn06IHtcbiAgcHJvZmlsZUlkPzogc3RyaW5nO1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlc1tdPjtcbn0gPSB7fSk6IFF1ZXJ5UmVzdWx0PCdiYWxhbmNlcycsIEJhbGFuY2VzW10+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgY29uc3QgeyBkYXRhLCAuLi5yZXN0IH0gPSB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMocHJvZmlsZUlkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhwcm9maWxlSWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGJhbGFuY2VzOiBkYXRhLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG5cbi8qKlxuICogIyBHZXQgc2luZ2xlIG9yZGVyXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMub3JkZXJJZCBUaGUgaWQgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8T3JkZXI+fSBbcGFyYW1zLnF1ZXJ5XSB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfVxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBvcmRlciwgLy8gdXNlUXVlcnkncyBgZGF0YWAgcHJvcGVydHlcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZVxuICogW0FQSSBEb2N1bWVudGF0aW9uXShodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vb3JkZXIpXG4gKlxuICogW09yZGVyIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9PcmRlci5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgb3JkZXJJZDogc3RyaW5nO1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KTogUXVlcnlSZXN1bHQ8J29yZGVyJywgT3JkZXI+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBvcmRlcjogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgR2V0IG9yZGVyc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmFkZHJlc3NdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5tZW1vXSBGaWx0ZXIgYnkgdGhlIHBheW1lbnQgbWVtby9yZWZlcmVuY2UuLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5zdGF0ZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy50eEhhc2hdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiB0cmFuc2FjdGlvbiBoYXNoLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8T3JkZXJbXT59IFtwYXJhbXMucXVlcnldIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBvcmRlcnMsIC8vIHVzZVF1ZXJ5J3MgYGRhdGFgIHByb3BlcnR5XG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZU9yZGVycygpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnMpXG4gKlxuICogW09yZGVyIGludGVyZmFjZV0oaHR0cHM6Ly9naXRodWIuY29tL21vbmVyaXVtL2pzLW1vbm9yZXBvL2Jsb2IvbWFpbi9wYWNrYWdlcy9zZGsvZG9jcy9nZW5lcmF0ZWQvaW50ZXJmYWNlcy9PcmRlci5tZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVycyh7XG4gIHF1ZXJ5ID0ge30sXG4gIC4uLmZpbHRlcnNcbn06IHtcbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJbXT47XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHR4SGFzaD86IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgc3RhdGU/OiBPcmRlclN0YXRlO1xufSA9IHt9KTogUXVlcnlSZXN1bHQ8J29yZGVycycsIE9yZGVyW10+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHsgZGF0YSwgLi4ucmVzdCB9ID0gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVycyhmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVycyhmaWx0ZXJzKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnkuZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG9yZGVyczogZGF0YSxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqICMgUGxhY2UgYW4gb3JkZXIuXG4gKiBXaGVuIHRoZSBvcmRlciBoYXMgYmVlbiBwbGFjZWQsIHRoZSBvcmRlcnMgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBJZiB0aGUgb3JkZXIgYW1vdW50IGlzIGFib3ZlIDE1MDAwLCBhIHN1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtLm11dGF0aW9uIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBwbGFjZU9yZGVyLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VQbGFjZU9yZGVyKCk7XG4gKiBgYGBcbiAqIEBzZWVcbiAqIFtBUEkgRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Bvc3Qtb3JkZXJzKVxuICpcbiAqIFtOZXdPcmRlciB0eXBlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC90eXBlLWFsaWFzZXMvTmV3T3JkZXIubWQpXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBsYWNlT3JkZXIoe1xuICBzdXBwb3J0aW5nRG9jdW1lbnQsXG4gIG11dGF0aW9uLFxufToge1xuICBzdXBwb3J0aW5nRG9jdW1lbnQ/OiBGaWxlO1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxPcmRlciwgRXJyb3IsIE5ld09yZGVyPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdwbGFjZU9yZGVyJywgT3JkZXIsIEVycm9yLCBOZXdPcmRlcj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5wbGFjZU9yZGVyLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBOZXdPcmRlcikgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBkb2N1bWVudElkO1xuICAgICAgaWYgKHBhcnNlSW50KGJvZHkuYW1vdW50KSA+IDE1MDAwKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGluZ0RvY3VtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1N1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQgZm9yIG9yZGVycyBhYm92ZSAxNTAwMCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRG9jdW1lbnQgPVxuICAgICAgICAgIGF3YWl0IHNkay51cGxvYWRTdXBwb3J0aW5nRG9jdW1lbnQoc3VwcG9ydGluZ0RvY3VtZW50KTtcbiAgICAgICAgZG9jdW1lbnRJZCA9IHVwbG9hZGVkRG9jdW1lbnQuaWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0JvZHkgPSB7XG4gICAgICAgIC4uLmJvZHksXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvY3VtZW50SWQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc2RrLnBsYWNlT3JkZXIobmV3Qm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKCksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHBsYWNlT3JkZXI6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqICMgQWRkIGFkZHJlc3MgdG8gcHJvZmlsZS5cbiAqIFdoZW4gdGhlIGFkZHJlc3MgaGFzIGJlZW4gbGlua2VkLCB0aGUgcmVsZXZhbnQgcHJvZmlsZSBxdWVyeSB3aWxsIGJlIGludmFsaWRhdGVkIGFuZCByZS1mZXRjaGVkLlxuICpcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge0ZpbGV9IHBhcmFtLnByb2ZpbGVJZCBXaGljaCBwcm9maWxlIHRvIGxpbmsgdGhlIGFkZHJlc3MuXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0ubXV0YXRpb24ge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc31cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGxpbmtBZGRyZXNzLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VMaW5rQWRkcmVzcygpO1xuICogYGBgXG4gKiBAc2VlXG4gKiBbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcylcbiAqXG4gKiBbTGlua0FkZHJlc3MgaW50ZXJmYWNlXShodHRwczovL2dpdGh1Yi5jb20vbW9uZXJpdW0vanMtbW9ub3JlcG8vYmxvYi9tYWluL3BhY2thZ2VzL3Nkay9kb2NzL2dlbmVyYXRlZC9pbnRlcmZhY2VzL0xpbmtBZGRyZXNzLm1kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTGlua0FkZHJlc3Moe1xuICBwcm9maWxlSWQsXG4gIG11dGF0aW9uLFxufToge1xuICBwcm9maWxlSWQ6IHN0cmluZztcbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0pOiBNdXRhdGlvblJlc3VsdDwnbGlua0FkZHJlc3MnLCBMaW5rZWRBZGRyZXNzLCBFcnJvciwgTGlua0FkZHJlc3M+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubGlua0FkZHJlc3MsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IExpbmtBZGRyZXNzKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5saW5rQWRkcmVzcyhwcm9maWxlSWQsIGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZUlkKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbGlua0FkZHJlc3M6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4iXX0=
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwicmV2b2tlQWNjZXNzIiwianN4Iiwia2V5cyIsInByb2ZpbGUiLCJhZGRyZXNzIiwiZmlsdGVyIiwiY2hhaW4iLCJjdXJyZW5jaWVzIiwiaWJhbiIsIm9yZGVySWQiLCJ1c2VTZGsiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsInVzZUF1dGgiLCJ1c2VQcm9maWxlIiwicXVlcnkiLCJkYXRhIiwidXNlUHJvZmlsZXMiLCJwcm9maWxlVG9Vc2UiLCJ1c2VRdWVyeSIsInVzZVRva2VucyIsInVzZUFkZHJlc3MiLCJ1c2VBZGRyZXNzZXMiLCJwYXJzZUNoYWluIiwidXNlQmFsYW5jZXMiLCJ1c2VJQkFOIiwidXNlSUJBTnMiLCJ1c2VPcmRlciIsInVzZU9yZGVycyIsImZpbHRlcnMiLCJ1c2VTdWJtaXRQcm9maWxlRGV0YWlscyIsIm11dGF0aW9uIiwibXV0YXRlQXN5bmMiLCJyZXN0IiwidXNlTXV0YXRpb24iLCJib2R5IiwidmFyaWFibGVzIiwidmFycyIsInVzZVJlcXVlc3RJYmFuIiwiZW1haWxOb3RpZmljYXRpb25zIiwidXNlTW92ZUliYW4iLCJ1c2VQbGFjZU9yZGVyIiwic3VwcG9ydGluZ0RvY3VtZW50IiwiZG9jdW1lbnRJZCIsIm5ld0JvZHkiLCJ1c2VMaW5rQWRkcmVzcyIsInVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uIiwic3RhdGUiLCJvbk1lc3NhZ2UiLCJvbkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7OztBQUlPLElBQU1BLENBQWtCQyxDQUFBQSxhQUFBQSxDQUU3QixJQUFJLEVDWUMsSUFBTUMsRUFBbUIsQ0FBQyxDQUMvQixRQUFBQyxDQUFBQSxDQUFBQSxDQUNBLFFBQUFDLENBQUFBLENBQUFBLENBQ0EsV0FBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxXQUFBQyxDQUFBQSxDQUFBQSxDQUFjLFNBQ2QsQ0FBQSxZQUFBLENBQUFDLENBQ0EsQ0FBQSxvQkFBQSxDQUFBQyxFQUNBLEtBQUFDLENBQUFBLENBQUFBLENBQVEsQ0FDVixDQUFBLENBQUEsR0FVTSxDQUNKLElBQU1DLENBQWNDLENBQUFBLGNBQUFBLEVBRWQsQ0FBQSxDQUFDQyxDQUFHLENBQUEsQ0FBSUMsUUFBUyxDQUFBLElBRWQsSUFBSUMsY0FBZSxDQUFBLENBQ3hCLFdBQUFSLENBQUFBLENBQUFBLENBQ0EsUUFBQUYsQ0FBQUEsQ0FBQUEsQ0FDQSxXQUFBQyxDQUFBQSxDQUFBQSxDQUNBLEtBQU9JLENBQUFBLENBQ1QsQ0FBQyxDQUNGLENBRUssQ0FBQSxDQUFDTSxFQUFjQyxDQUFlLENBQUEsQ0FBSUgsUUFBa0IsQ0FBQSxDQUFBLENBQUssQ0FDekQsQ0FBQSxDQUFDSSxDQUFPQyxDQUFBQSxDQUFRLENBQUlMLENBQUFBLFFBQUFBLENBQWlDLElBQUksQ0FBQSxDQUN6RCxDQUFDTSxDQUFBQSxDQUFhQyxDQUFjLENBQUlQLENBQUFBLFFBQUFBLENBQVMsQ0FBSSxDQUFBLENBQUEsQ0FFbkRRLFNBQVUsQ0FBQSxLQUFBLENBQ1EsU0FBWSxDQUMxQixHQUFJVCxDQUFBQSxDQUNGLEdBQUksQ0FDRkksQ0FB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IH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTZGtJbnN0YW5jZSwgVXNlQXV0aFJldHVybiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTW9uZXJpdW1Db250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgKFVzZUF1dGhSZXR1cm4gJiBTZGtJbnN0YW5jZSkgfCBudWxsXG4+KG51bGwpO1xuIiwiaW1wb3J0IHsgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IHsgTW9uZXJpdW1DbGllbnQgfSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IEF1dGhvcml6ZVBhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFdyYXAgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHRoZSBNb25lcml1bSBwcm92aWRlci5cbiAqIEBncm91cCBQcm92aWRlclxuICogQHBhcmFtIHBhcmFtc1xuICogQHBhcmFtIHBhcmFtcy5jaGlsZHJlbiAtIFJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHBhcmFtcy5jbGllbnRJZCAtIE1vbmVyaXVtIGF1dGggZmxvdyBjbGllbnQgaWQuXG4gKiBAcGFyYW0gcGFyYW1zLnJlZGlyZWN0VXJpIC0gTW9uZXJpdW0gYXV0aCBmbG93IHJlZGlyZWN0IHVybC5cbiAqIEBwYXJhbSBwYXJhbXMuZW52aXJvbm1lbnQgLSBNb25lcml1bSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBNb25lcml1bVByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGNsaWVudElkLFxuICByZWRpcmVjdFVyaSxcbiAgZW52aXJvbm1lbnQgPSAnc2FuZGJveCcsXG4gIHJlZnJlc2hUb2tlbixcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGUsXG4gIGRlYnVnID0gZmFsc2UsXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgcmVkaXJlY3RVcmkgKi9cbiAgcmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50PzogJ3NhbmRib3gnIHwgJ3Byb2R1Y3Rpb24nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIG9uUmVmcmVzaFRva2VuVXBkYXRlPzogKHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGRlYnVnPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IFtzZGtdID0gdXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIEluaXRpYWxpemUgdGhlIFNES1xuICAgIHJldHVybiBuZXcgTW9uZXJpdW1DbGllbnQoe1xuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0VXJpLFxuICAgICAgZGVidWc6IGRlYnVnLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBbaXNBdXRob3JpemVkLCBzZXRJc0F1dGhvcml6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPEVycm9yIHwgdW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbbG9hZGluZ0F1dGgsIHNldExvYWRpbmdBdXRoXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29ubmVjdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRJc0F1dGhvcml6ZWQoYXdhaXQgc2RrLmdldEFjY2VzcygpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGFjY2VzczonLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0TG9hZGluZ0F1dGgoZmFsc2UpO1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbm5lY3QoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHNkay5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKHJlZnJlc2hUb2tlbikpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoc2RrPy5iZWFyZXJQcm9maWxlKSB7XG4gICAgICAgICAgICBvblJlZnJlc2hUb2tlblVwZGF0ZT8uKHNkay5iZWFyZXJQcm9maWxlLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlZnJlc2hUb2tlbiAmJiAhaXNBdXRob3JpemVkICYmICFsb2FkaW5nQXV0aCkge1xuICAgICAgcmVjb25uZWN0KCk7XG4gICAgfVxuICB9LCBbcmVmcmVzaFRva2VuXSk7XG5cbiAgY29uc3QgYXV0aG9yaXplID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBhcmFtcz86IEF1dGhvcml6ZVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNkaykge1xuICAgICAgICAgIGF3YWl0IHNkay5hdXRob3JpemUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBhdXRob3JpemF0aW9uOicsIGVycik7XG4gICAgICAgIHNldEVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2RrXVxuICApO1xuXG4gIGNvbnN0IHJldm9rZUFjY2VzcyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBhd2FpdCBzZGsucmV2b2tlQWNjZXNzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcmV2b2tpbmcgYWNjZXNzOicsIGVycik7XG4gICAgICBzZXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyeUNsaWVudC5jbGVhcigpO1xuICAgICAgc2V0SXNBdXRob3JpemVkKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8TW9uZXJpdW1Db250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBzZGssXG4gICAgICAgIGF1dGhvcml6ZSxcbiAgICAgICAgaXNBdXRob3JpemVkLFxuICAgICAgICBpc0xvYWRpbmc6IGxvYWRpbmdBdXRoLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgZGlzY29ubmVjdDogYXN5bmMgKCkgPT4gc2RrPy5kaXNjb25uZWN0KCksXG4gICAgICAgIHJldm9rZUFjY2VzczogYXN5bmMgKCkgPT4gcmV2b2tlQWNjZXNzKCksXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L01vbmVyaXVtQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnksIHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcblxuaW1wb3J0IE1vbmVyaXVtQ2xpZW50LCB7XG4gIEFkZHJlc3MsXG4gIEFkZHJlc3Nlc1Jlc3BvbnNlLFxuICBCYWxhbmNlcyxcbiAgQ2hhaW4sXG4gIENoYWluSWQsXG4gIEN1cnJlbmN5LFxuICBDdXJyZW5jeUNvZGUsXG4gIElCQU4sXG4gIElCQU5zUmVzcG9uc2UsXG4gIExpbmtBZGRyZXNzLFxuICBMaW5rZWRBZGRyZXNzLFxuICBNb3ZlSWJhblBheWxvYWQsXG4gIE5ld09yZGVyLFxuICBPcmRlcixcbiAgT3JkZXJzUmVzcG9uc2UsXG4gIE9yZGVyU3RhdGUsXG4gIHBhcnNlQ2hhaW4sXG4gIFByb2ZpbGUsXG4gIFByb2ZpbGVQZXJtaXNzaW9ucyxcbiAgUHJvZmlsZXNSZXNwb25zZSxcbiAgUmVxdWVzdEliYW5QYXlsb2FkLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkLFxuICBUb2tlbixcbn0gZnJvbSAnQG1vbmVyaXVtL3Nkayc7XG5cbmltcG9ydCB7IE1vbmVyaXVtQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge1xuICBNdXRhdGlvbk9wdGlvbnMsXG4gIE11dGF0aW9uUmVzdWx0LFxuICBRdWVyeU9wdGlvbnMsXG4gIFVzZUF1dGhSZXR1cm4sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogUXVlcnkga2V5cyBmb3IgUmVhY3QgcXVlcnlcbiAqICovXG5leHBvcnQgY29uc3Qga2V5cyA9IHtcbiAgZ2V0QWxsOiBbJ21vbmVyaXVtJ10sXG4gIGdldFByb2ZpbGU6IChwcm9maWxlOiBzdHJpbmcpID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdwcm9maWxlJyxcbiAgICAuLi4ocHJvZmlsZSA/IFtwcm9maWxlXSA6IFtdKSxcbiAgXSxcbiAgZ2V0UHJvZmlsZXM6IFsnbW9uZXJpdW0nLCAncHJvZmlsZXMnXSxcbiAgZ2V0QWRkcmVzczogKGFkZHJlc3M6IHN0cmluZykgPT4gWydtb25lcml1bScsICdhZGRyZXNzJywgW2FkZHJlc3NdXSxcbiAgZ2V0QWRkcmVzc2VzOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ2FkZHJlc3NlcycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBnZXRCYWxhbmNlczogKFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBjaGFpbjogQ2hhaW4sXG4gICAgY3VycmVuY2llcz86IEN1cnJlbmN5Q29kZSB8IEN1cnJlbmN5Q29kZVtdXG4gICkgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ2JhbGFuY2VzJyxcbiAgICBhZGRyZXNzLFxuICAgIGNoYWluLFxuICAgIC4uLihjdXJyZW5jaWVzID8gWy4uLmN1cnJlbmNpZXNdIDogW10pLFxuICBdLFxuICBnZXRJYmFuOiAoaWJhbjogc3RyaW5nKSA9PiBbJ21vbmVyaXVtJywgJ2liYW4nLCBpYmFuXSxcbiAgZ2V0SWJhbnM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnaWJhbnMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0VG9rZW5zOiBbJ21vbmVyaXVtJywgJ3Rva2VucyddLFxuICBnZXRPcmRlcjogKG9yZGVySWQ6IHN0cmluZykgPT4gWydtb25lcml1bScsICdvcmRlcicsIG9yZGVySWRdLFxuICBnZXRPcmRlcnM6IChmaWx0ZXI/OiB1bmtub3duKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAnb3JkZXJzJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIHN1Ym1pdFByb2ZpbGVEZXRhaWxzOiBbJ21vbmVyaXVtJywgJ3N1Ym1pdC1wcm9maWxlLWRldGFpbHMnXSxcbiAgbW92ZUliYW46IFsnbW9uZXJpdW0nLCAnbW92ZS1pYmFuJ10sXG4gIHJlcXVlc3RJYmFuOiBbJ21vbmVyaXVtJywgJ3JlcXVlc3QtaWJhbiddLFxuICBwbGFjZU9yZGVyOiBbJ21vbmVyaXVtJywgJ3BsYWNlLW9yZGVyJ10sXG4gIGxpbmtBZGRyZXNzOiBbJ21vbmVyaXVtJywgJ2xpbmstYWRkcmVzcyddLFxufTtcblxuLyoqIEludGVybmFsIGhvb2sgdG8gdXNlIFNESyAqL1xuZnVuY3Rpb24gdXNlU2RrKCk6IE1vbmVyaXVtQ2xpZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2RrIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ/LnNkaztcbn1cblxuLyoqXG4gKiAjIFJlZGlyZWN0IHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBdXRoZW50aWNhdGlvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7IGF1dGhvcml6ZSwgaXNBdXRob3JpemVkLCBpc0xvYWRpbmcsIGVycm9yIH0gPSB1c2VBdXRoKCk7XG4gKlxuICogYXV0aG9yaXplKCk7IC8vIFJlZGlyZWN0cyB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICpcbiAqIC8vIE9wdC1pbiB0byBhdXRvbWF0ZWQgd2FsbGV0IGxpbmtpbmcgd2l0aCB0aGVzZSBwYXJhbWV0ZXJzLlxuICogYXV0aG9yaXplKHsgYWRkcmVzcywgc2lnbmF0dXJlLCBjaGFpbiB9KS5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIHtVc2VBdXRoUmV0dXJufVxuICogLSBgYXV0aG9yaXplYCAgLSBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqIC0gYGlzQXV0aG9yaXplZGAgLSBXaGV0aGVyIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQuXG4gKiAtIGBpc0xvYWRpbmdgIC0gV2hldGhlciB0aGUgYXV0aCBmbG93IGlzIGxvYWRpbmcuXG4gKiAtIGBlcnJvcmAgLSBFcnJvciBtZXNzYWdlIGlmIHRoZSBhdXRoIGZsb3cgZmFpbHMuXG4gKiAtIGBkaXNjb25uZWN0YCAtIERpc2Nvbm5lY3QgdGhlIHVzZXIuXG4gKiAtIGByZXZva2VBY2Nlc3NgIC0gUmV2b2tlIHRoZSB1c2VyJ3MgYWNjZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0aCgpOiBVc2VBdXRoUmV0dXJuIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTW9uZXJpdW1Db250ZXh0KTtcblxuICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaXNBdXRob3JpemVkOiBjb250ZXh0LmlzQXV0aG9yaXplZCxcbiAgICBhdXRob3JpemU6IGNvbnRleHQuYXV0aG9yaXplLFxuICAgIGlzTG9hZGluZzogY29udGV4dC5pc0xvYWRpbmcsXG4gICAgZXJyb3I6IGNvbnRleHQuZXJyb3IsXG4gICAgZGlzY29ubmVjdDogY29udGV4dC5kaXNjb25uZWN0LFxuICAgIHJldm9rZUFjY2VzczogY29udGV4dC5yZXZva2VBY2Nlc3MsXG4gIH07XG59XG5cbi8qKlxuICogSWYgbm8gYHByb2ZpbGVgIGlkIGlzIHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBwcm9maWxlIGlzIHVzZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YVxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlKCk7XG4gKiBgYGBcblxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Byb2ZpbGUgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGUoe1xuICBwcm9maWxlLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgcHJvZmlsZSAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8UHJvZmlsZT47XG59ID0ge30pIHtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBkYXRhIH0gPSB1c2VQcm9maWxlcygpO1xuXG4gIGNvbnN0IHByb2ZpbGVUb1VzZSA9IHByb2ZpbGUgfHwgKGRhdGE/LnByb2ZpbGVzPy5bMF0/LmlkIGFzIHN0cmluZyk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHByb2ZpbGVUb1VzZSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICghcHJvZmlsZVRvVXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvZmlsZSBJZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIHByb2ZpbGVUb1VzZSAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogIyBHZXQgcHJvZmlsZXNcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VQcm9maWxlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2ZpbGVzKHtcbiAgcXVlcnksXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlc1Jlc3BvbnNlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGVzLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFByb2ZpbGVzKCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VUb2tlbnMoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vdG9rZW5zIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbnMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFRva2VuW10+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFRva2VucyxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRUb2tlbnMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBZGRyZXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgXG5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQWRkcmVzcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9hZGRyZXNzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzKHtcbiAgYWRkcmVzcyxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgYWRkcmVzcy4gKi9cbiAgYWRkcmVzczogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QWRkcmVzcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyhhZGRyZXNzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzcyhhZGRyZXNzKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICBzZGsgJiYgaXNBdXRob3JpemVkICYmIGFkZHJlc3MgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpXG4gICAgKSxcbiAgfSk7XG59XG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gcHJvZmlsZSBpZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmNoYWluXSBGaWx0ZXIgYmFzZWQgb24gY2hhaW4gLSBDVVJSRU5UTFkgUkVUVVJOUyBBTiBFUlJPUi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQWRkcmVzc2VzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWRkcmVzc2VzKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QWRkcmVzc2VzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzZXMoe1xuICAgICAgcHJvZmlsZSxcbiAgICAgIGNoYWluOiBjaGFpbiA/IHBhcnNlQ2hhaW4oY2hhaW4pIDogdW5kZWZpbmVkLFxuICAgIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldEFkZHJlc3Nlcyh7IHByb2ZpbGUsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBiYWxhbmNlIGZvciBhIGFuIGFkZHJlc3Mgb24gYSBnaXZlIGNoYWluXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBBZGRyZXNzZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzPn0gcGFyYW1zLmFkZHJlc3MgVGhlIGFkZHJlc3MgdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuY2hhaW4gVGhlIGNoYWluIHRvIGZldGNoIHRoZSBiYWxhbmNlIGZvci5cbiAqIEBwYXJhbSB7UXVlcnlPcHRpb25zPEJhbGFuY2VzPn0gW3BhcmFtcy5jdXJyZW5jaWVzXSBPbmUgb3IgbWFueTogYGV1cmAsIGB1c2RgLCBgZ2JwYCwgYGlza2BcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlQmFsYW5jZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYmFsYW5jZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYWxhbmNlcyh7XG4gIGFkZHJlc3MsXG4gIGNoYWluLFxuICBjdXJyZW5jaWVzLFxuICBxdWVyeSxcbn06IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjaGFpbjogQ2hhaW4gfCBDaGFpbklkO1xuICBjdXJyZW5jaWVzPzogQ3VycmVuY3kgfCBDdXJyZW5jeVtdO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8QmFsYW5jZXM+O1xufSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEJhbGFuY2VzKGFkZHJlc3MsIHBhcnNlQ2hhaW4oY2hhaW4pLCBjdXJyZW5jaWVzKSxcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDUsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QmFsYW5jZXMoYWRkcmVzcywgY2hhaW4sIGN1cnJlbmNpZXMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9pYmFuIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJQkFOKHtcbiAgaWJhbixcbiAgcXVlcnksXG59OiB7XG4gIC8qKiBGZXRjaCBhIHNwZWNpZmljIElCQU4gKi9cbiAgaWJhbjogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbihpYmFuKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldEliYW4oaWJhbik7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgaWJhbiAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VJQkFOcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW5zIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJQkFOcyh7XG4gIHByb2ZpbGUsXG4gIGNoYWluLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgcHJvZmlsZS4gKi9cbiAgcHJvZmlsZT86IHN0cmluZztcbiAgLyoqIEZldGNoIElCQU5zIGZvciBhIHNwZWNpZmljIGNoYWluLiAqL1xuICBjaGFpbj86IENoYWluIHwgQ2hhaW5JZDtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPElCQU5zUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldEliYW5zKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZU9yZGVyKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPcmRlcih7XG4gIG9yZGVySWQsXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiAgVGhlIGlkIG9mIHRoZSBvcmRlci4gKi9cbiAgb3JkZXJJZDogc3RyaW5nO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXI+O1xufSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcihvcmRlcklkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFvcmRlcklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT3JkZXIgaWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcihvcmRlcklkKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBvcmRlcklkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLmFkZHJlc3NdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5tZW1vXSBGaWx0ZXIgYnkgdGhlIHBheW1lbnQgbWVtby9yZWZlcmVuY2UuLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5zdGF0ZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy50eEhhc2hdIEZpbHRlciBiYXNlZCBvbiB0aGUgYmxvY2tjaGFpbiB0cmFuc2FjdGlvbiBoYXNoLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXJzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9vcmRlcnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVycyh7XG4gIHF1ZXJ5ID0ge30sXG4gIC4uLmZpbHRlcnNcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPE9yZGVyc1Jlc3BvbnNlPjtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdHhIYXNoPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0T3JkZXJzKGZpbHRlcnMpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeS5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogU3VibWl0IHRoZSByZXF1aXJlZCBjb21wbGlhbmNlIGluZm9ybWF0aW9uIHRvIG9uYm9hcmQgdGhlIGN1c3RvbWVyLlxuICpcbiAqIE5vdGUgdGhhdCB5b3Ugd29uJ3QgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHByb2ZpbGUgXCJraW5kXCIgZnJvbSBwZXJzb25hbCB0byBjb3Jwb3JhdGUgb3IgdmljZSB2ZXJzYSBvbmNlIHRoZSBwcm9maWxlIGhhcyBiZWVuIGFwcHJvdmVkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtLnByb2ZpbGUgVGhlIGlkIG9mIHRoZSBwcm9maWxlIHRvIHN1Ym1pdCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHN1Ym1pdFByb2ZpbGVEZXRhaWxzLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VTdWJtaXRQcm9maWxlRGV0YWlscygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvcHJvZmlsZXMvb3BlcmF0aW9uL3Byb2ZpbGUtZGV0YWlscyB8IEFQSSBEb2N1bWVudGF0aW9ufX1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU3VibWl0UHJvZmlsZURldGFpbHMoe1xuICBwcm9maWxlLFxuICBtdXRhdGlvbiA9IHt9LFxufToge1xuICBwcm9maWxlOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWRcbiAgPjtcbn0pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ3N1Ym1pdFByb2ZpbGVEZXRhaWxzJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWRcbj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5zdWJtaXRQcm9maWxlRGV0YWlscyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogU3VibWl0UHJvZmlsZURldGFpbHNQYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLnN1Ym1pdFByb2ZpbGVEZXRhaWxzKHByb2ZpbGUsIGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZSksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHN1Ym1pdFByb2ZpbGVEZXRhaWxzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBDcmVhdGUgYW4gSUJBTiBmb3IgYSBzcGVjaWZpZWQgYWRkcmVzcyBhbmQgY2hhaW4uXG4gKiBBbGwgaW5jb21pbmcgRVVSIHBheW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZSByb3V0ZWQgdG8gdGhlIGxpbmtlZCBhZGRyZXNzIG9uIHRoYXQgY2hhaW4uXG4gKiBBbnkgbGlua2VkIGFkZHJlc3MgY2FuIHVzZSB0aGlzIElCQU4gZm9yIG91dGdvaW5nIHBheW1lbnRzLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcmVxdWVzdEliYW4sIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVJlcXVlc3RJYmFuKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vcmVxdWVzdC1pYmFuIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXF1ZXN0SWJhbih7XG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxSZXNwb25zZVN0YXR1cywgRXJyb3IsIFJlcXVlc3RJYmFuUGF5bG9hZD47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ3JlcXVlc3RJYmFuJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBSZXF1ZXN0SWJhblBheWxvYWRcbj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMucmVxdWVzdEliYW4sXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBjaGFpbixcbiAgICAgIGVtYWlsTm90aWZpY2F0aW9ucyxcbiAgICB9OiBSZXF1ZXN0SWJhblBheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsucmVxdWVzdEliYW4oeyBhZGRyZXNzLCBjaGFpbiwgZW1haWxOb3RpZmljYXRpb25zIH0pO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdEliYW46IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIE1vdmUgYW4gZXhpc3RpbmcgSUJBTiB0byBhIHNwZWNpZmllZCBhZGRyZXNzIGFuIGNoYWluLlxuICogQWxsIGluY29taW5nIEVVUiBwYXltZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcm91dGVkIHRvIHRoZSBhZGRyZXNzIG9uIHRoYXQgY2hhaW4uXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBtb3ZlSWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlTW92ZUliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MvdjIjdGFnL2liYW5zL29wZXJhdGlvbi9tb3ZlLWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTW92ZUliYW4oe1xuICBtdXRhdGlvbiA9IHt9LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8XG4gICAgUmVzcG9uc2VTdGF0dXMsXG4gICAgRXJyb3IsXG4gICAgTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfVxuICA+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8XG4gICdtb3ZlSWJhbicsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBFcnJvcixcbiAgTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfVxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLm1vdmVJYmFuLFxuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBpYmFuLFxuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgIH06IE1vdmVJYmFuUGF5bG9hZCAmIHsgaWJhbjogc3RyaW5nIH0pID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsubW92ZUliYW4oaWJhbiwgeyBhZGRyZXNzLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKHZhcmlhYmxlcy5pYmFuKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucygpLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3ModmFyaWFibGVzLmFkZHJlc3MpLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBtb3ZlSWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogV2hlbiB0aGUgb3JkZXIgaGFzIGJlZW4gcGxhY2VkLCB0aGUgb3JkZXJzIHF1ZXJ5IHdpbGwgYmUgaW52YWxpZGF0ZWQgYW5kIHJlLWZldGNoZWQuXG4gKlxuICogSWYgdGhlIG9yZGVyIGFtb3VudCBpcyBhYm92ZSAxNTAwMCwgYSBzdXBwb3J0aW5nIGRvY3VtZW50IGlzIHJlcXVpcmVkLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0gcGFyYW1cbiAqIEBwYXJhbSB7RmlsZX0gcGFyYW0uc3VwcG9ydGluZ0RvY3VtZW50IFN1cHBvcnRpbmcgZG9jdW1lbnQgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHBsYWNlT3JkZXIsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVBsYWNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL3Bvc3Qtb3JkZXJzfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUGxhY2VPcmRlcih7XG4gIHN1cHBvcnRpbmdEb2N1bWVudCxcbiAgbXV0YXRpb24sXG59OiB7XG4gIHN1cHBvcnRpbmdEb2N1bWVudD86IEZpbGU7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxPcmRlciwgRXJyb3IsIE5ld09yZGVyPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdwbGFjZU9yZGVyJywgT3JkZXIsIEVycm9yLCBOZXdPcmRlcj4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5wbGFjZU9yZGVyLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBOZXdPcmRlcikgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBkb2N1bWVudElkO1xuICAgICAgaWYgKHBhcnNlSW50KGJvZHkuYW1vdW50KSA+IDE1MDAwKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGluZ0RvY3VtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1N1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQgZm9yIG9yZGVycyBhYm92ZSAxNTAwMCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRG9jdW1lbnQgPVxuICAgICAgICAgIGF3YWl0IHNkay51cGxvYWRTdXBwb3J0aW5nRG9jdW1lbnQoc3VwcG9ydGluZ0RvY3VtZW50KTtcbiAgICAgICAgZG9jdW1lbnRJZCA9IHVwbG9hZGVkRG9jdW1lbnQuaWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0JvZHkgPSB7XG4gICAgICAgIC4uLmJvZHksXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvY3VtZW50SWQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc2RrLnBsYWNlT3JkZXIobmV3Qm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0T3JkZXJzKCksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoZGF0YS5hZGRyZXNzLCBkYXRhLmNoYWluKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcGxhY2VPcmRlcjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogIyBBZGQgYWRkcmVzcyB0byBwcm9maWxlLlxuICpcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGxpbmtBZGRyZXNzLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VMaW5rQWRkcmVzcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZS1hZGRyZXNzZXMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTGlua0FkZHJlc3Moe1xuICBtdXRhdGlvbixcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDwnbGlua0FkZHJlc3MnLCBMaW5rZWRBZGRyZXNzLCBFcnJvciwgTGlua0FkZHJlc3M+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubGlua0FkZHJlc3MsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IExpbmtBZGRyZXNzKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5saW5rQWRkcmVzcyhib2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzZXMoKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHZhcmlhYmxlcy5wcm9maWxlKSB7XG4gICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICBxdWVyeUtleToga2V5cy5nZXRQcm9maWxlKHZhcmlhYmxlcy5wcm9maWxlKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsaW5rQWRkcmVzczogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBUEkgY29uc3VtZXJzIGhhdmUgdGhlIG9wdGlvbiB0byBzdWJzY3JpYmUgdG8gYSBXZWJTb2NrZXQgZm9yIHJlYWwtdGltZSBvcmRlciBub3RpZmljYXRpb25zLiBUaGlzIFdlYlNvY2tldCBjb21wbGllcyB3aXRoIHRoZSBzdGFuZGFyZCBXZWJTb2NrZXQgUHJvdG9jb2wsIGFsbG93aW5nIHRoZSB1c2Ugb2Ygc3RhbmRhcmQgV2ViU29ja2V0IGxpYnJhcmllcyBmb3Igc3Vic2NyaXB0aW9uLlxuICpcbiAqIFRoZSBXZWJTb2NrZXQgZW1pdHMgYW4gZXZlbnQgd2hlbiBhIG9yZGVyIGNoYW5nZXMgc3RhdGU6XG4gKlxuICogYHBsYWNlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBub3QgeWV0IHByb2Nlc3NlZC5cbiAqXG4gKiBgcGVuZGluZ2A6IFRoZSBvcmRlciBpcyBhd2FpdGluZyBmdWxmaWxsbWVudCAoZS5nLiwgcmV2aWV3LCBtaW50aW5nL2J1cm5pbmcgdG9rZW5zLCBvciBzZW5kaW5nL3JlY2VpdmluZyBTRVBBIHBheW1lbnQpLlxuICpcbiAqIGBwcm9jZXNzZWRgOiBUaGUgb3JkZXIgaGFzIGJlZW4gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBgcmVqZWN0ZWRgOiBUaGUgb3JkZXIgd2FzIHJlamVjdGVkLCBwb3NzaWJseSBkdWUgdG8gY29tcGxpYW5jZSByZWFzb25zIG9yIGluc3VmZmljaWVudCBmdW5kcy5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IE9yZGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtPcmRlclN0YXRlfSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgcHJvZmlsZSBpZCBvZiB0aGUgb3JkZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMub25NZXNzYWdlIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgb3JkZXIgbm90aWZpY2F0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3BhcmFtcy5vbkVycm9yXSBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGVycm9yIG5vdGlmaWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIHN0YXRlLFxuICogICAgcHJvZmlsZSxcbiAqICAgIG9uTWVzc2FnZSxcbiAqICAgIG9uRXJyb3JcbiAqIH0gPSB1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MSNvcGVyYXRpb24vb3JkZXJzLW5vdGlmaWNhdGlvbnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBVbnN1YnNjcmliZSBmcm9tIG9yZGVyIG5vdGlmaWNhdGlvbnMuXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uID0gKHtcbiAgc3RhdGUsXG4gIHByb2ZpbGUsXG4gIG9uTWVzc2FnZSxcbiAgb25FcnJvcixcbn06IHtcbiAgc3RhdGU/OiBPcmRlclN0YXRlO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBvbk1lc3NhZ2U6IChvcmRlcjogT3JkZXIpID0+IHZvaWQ7XG4gIG9uRXJyb3I/OiAoKGVycjogRXZlbnQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufSkgPT4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZGspIHtcbiAgICAgIHNkay5zdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbnMoe1xuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgcHJvZmlsZTogcHJvZmlsZSxcbiAgICAgICAgfSxcbiAgICAgICAgb25NZXNzYWdlOiBvbk1lc3NhZ2UsXG4gICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGluIGRldmVsb3BtZW50IG1vZGUsIFJlYWN0IFN0cmljdCBtb2RlIHdpbGwgY2F1c2UgdGhpc1xuICAgICAgICogY2xlYW51cCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdHdpY2Ugb24gY2xpZW50IHNpZGUgcm91dGUgY2hhbmdlcy5cbiAgICAgICAqIFNvIGEgc29ja2V0IHdpbGwgYmUgaW1tZWRpYXRlbHkgY2xvc2VkIGFuZCBvcGVuZWQgYWdhaW4uXG4gICAgICAgKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAgKi9cbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbc2RrLCBwcm9maWxlLCBzdGF0ZV0pO1xuXG4gIHJldHVybiAoKSA9PlxuICAgIHNkaz8udW5zdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbnMoeyBzdGF0ZTogc3RhdGUsIHByb2ZpbGU6IHByb2ZpbGUgfSk7XG59O1xuXG4vKiogRXhwb3J0IHR5cGVzIGZvciBkb2N1bWVudGF0aW9uICovXG5leHBvcnQgdHlwZSB7XG4gIEFkZHJlc3MsXG4gIEJhbGFuY2VzLFxuICBJQkFOLFxuICBNb3ZlSWJhblBheWxvYWQsXG4gIExpbmtBZGRyZXNzLFxuICBQcm9maWxlLFxuICBQcm9maWxlUGVybWlzc2lvbnMsXG4gIFRva2VuLFxuICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQsXG4gIE5ld09yZGVyLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgT3JkZXIsXG59O1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monerium/sdk-react-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "React provider for the Monerium SDK.",
|
|
6
6
|
"repository": {
|
|
@@ -43,9 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "tsup",
|
|
46
|
-
"dev": "tsup --watch --onSuccess 'pnpm type-map
|
|
47
|
-
"
|
|
48
|
-
"docs:watch": "typedoc --watch",
|
|
46
|
+
"dev": "tsup --watch --onSuccess 'pnpm type-map'",
|
|
47
|
+
"typedoc": "typedoc",
|
|
49
48
|
"lint": "eslint . --fix",
|
|
50
49
|
"pub:pre": "pnpm publish --no-git-checks --dry-run",
|
|
51
50
|
"test": "jest",
|