@prisma/studio-core 0.0.0-dev.202511141157 → 0.0.0-dev.202511152033

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.
Files changed (39) hide show
  1. package/dist/chunk-4ML6JJCH.js +10 -0
  2. package/dist/chunk-MEAZKIQ2.js +10 -0
  3. package/dist/data/accelerate/index.d.cts +1 -1
  4. package/dist/data/accelerate/index.d.ts +1 -1
  5. package/dist/data/bff/index.d.cts +1 -1
  6. package/dist/data/bff/index.d.ts +1 -1
  7. package/dist/data/index.d.cts +1 -1
  8. package/dist/data/index.d.ts +1 -1
  9. package/dist/data/node-sqlite/index.cjs +2 -2
  10. package/dist/data/node-sqlite/index.d.cts +1 -1
  11. package/dist/data/node-sqlite/index.d.ts +1 -1
  12. package/dist/data/node-sqlite/index.js +1 -1
  13. package/dist/data/pglite/index.cjs +2 -2
  14. package/dist/data/pglite/index.d.cts +1 -1
  15. package/dist/data/pglite/index.d.ts +1 -1
  16. package/dist/data/pglite/index.js +1 -1
  17. package/dist/data/postgres-core/index.cjs +2 -2
  18. package/dist/data/postgres-core/index.d.cts +10 -7
  19. package/dist/data/postgres-core/index.d.ts +10 -7
  20. package/dist/data/postgres-core/index.js +1 -1
  21. package/dist/data/postgresjs/index.cjs +2 -2
  22. package/dist/data/postgresjs/index.d.cts +1 -1
  23. package/dist/data/postgresjs/index.d.ts +1 -1
  24. package/dist/data/postgresjs/index.js +1 -1
  25. package/dist/data/ppg/index.d.cts +1 -1
  26. package/dist/data/ppg/index.d.ts +1 -1
  27. package/dist/data/sqlite-core/index.cjs +2 -2
  28. package/dist/data/sqlite-core/index.d.cts +13 -6
  29. package/dist/data/sqlite-core/index.d.ts +13 -6
  30. package/dist/data/sqlite-core/index.js +1 -1
  31. package/dist/{index-CVwmrqt5.d.cts → index-QHiosBWl.d.cts} +1 -1
  32. package/dist/{index-CVwmrqt5.d.ts → index-QHiosBWl.d.ts} +1 -1
  33. package/dist/metafile-cjs.json +1 -1
  34. package/dist/metafile-esm.json +1 -1
  35. package/dist/ui/index.d.cts +1 -1
  36. package/dist/ui/index.d.ts +1 -1
  37. package/package.json +21 -2
  38. package/dist/chunk-HK4HH34Z.js +0 -10
  39. package/dist/chunk-T6RNFB7W.js +0 -10
@@ -0,0 +1,10 @@
1
+ import * as ___react___ from 'react';
2
+ import * as ___react_dom___ from 'react-dom';
3
+
4
+ function require(mod) {
5
+ if (mod === 'react') return ___react___;
6
+ if (mod === 'react-dom') return ___react_dom___;
7
+ throw new Error(`Unknown module ${mod}`);
8
+ }
9
+ import{a as c}from"./chunk-OTK4ZF2W.js";import{i as g,l as D,m as E,n as q,o as I,p as _,q as R,s as w,t as S}from"./chunk-WHLVNWIR.js";import{e as u}from"./chunk-GDQBQ7MK.js";u();u();u();var B={bool:{group:"boolean"},boolean:{group:"boolean"},bytea:{group:"string"},char:{group:"string"},citext:{group:"string"},date:{group:"datetime"},interval:{group:"string"},name:{group:"string"},varchar:{group:"string"},text:{group:"string"},time:{group:"time"},timestamp:{group:"datetime"},timestamptz:{group:"datetime"},"timestamp without time zone":{group:"datetime"},"timestamp with time zone":{group:"datetime"},timetz:{group:"time"},"time without time zone":{group:"time"},"time with time zone":{group:"datetime"},uuid:{group:"raw"},int2:{group:"numeric"},int4:{group:"numeric"},int8:{group:"numeric"},smallint:{group:"numeric"},integer:{group:"numeric"},bigint:{group:"numeric"},decimal:{group:"numeric"},numeric:{group:"numeric"},real:{group:"numeric"},float4:{group:"numeric"},float8:{group:"numeric"},"double precision":{group:"numeric"},json:{group:"json"},jsonb:{group:"json"}};u();u();function y(a){return q({...a,Adapter:E,QueryCompiler:D})}function z(a,l){let{table:r,rows:t}=a,{name:o,schema:e,columns:n}=r,s=y(l),p=Object.keys(n);return _(s.withSchema(e).insertInto(o).values(w("insert",t,n)).returning(p))}function j(a,l){let{pageIndex:r,pageSize:t,sortOrder:o,table:{name:e,schema:n,columns:s},filter:p={kind:"FilterGroup",after:"and",filters:[]}}=a,i=y(l),d=S(p.filters,s),h=i.withSchema(n).selectFrom(e).where(d).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),g.lit(0)),"text").as("value"));return _(i.with("count",()=>h).withSchema(n).selectFrom([e,"count"]).where(d).select(g.ref("count.value").as("__ps_count__")).select(Object.keys(s)).$call(m=>o.reduce((k,b)=>k.orderBy(b.column,b.direction),m)).limit(t).offset(g.lit(BigInt(r)*BigInt(t))))}function ae(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function O(a,l){let{changes:r,row:t,table:{columns:o,name:e,schema:n}}=a,s=y(l),p=Object.keys(o);return _(s.withSchema(n).updateTable(e).set(w("update",r,o)).$call(R([t],o)).returning(p).returning(i=>i.cast(i.fn("floor",[i(i.fn("extract",[g`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")))}function P(a,l){let{rows:r,table:{columns:t,name:o,schema:e}}=a,n=y(l);return _(n.withSchema(e).deleteFrom(o).$call(R(r,t)).returning(Object.keys(t)).returning(s=>s.cast(s.fn("floor",[s(s.fn("extract",[g`epoch from now()`]),"*",1e6)]),"text").as("__ps_deleted_at__")))}u();u();function F(a){return g`(select coalesce(json_agg(agg), '[]') from ${a} as agg)`}var L="r",U="v",G=[L,U];function C(a){return _(y(a).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(M).where("cls.relkind","in",G).select(l=>["ns.nspname as schema","cls.relname as name",F(l.selectFrom("pg_catalog.pg_attribute as att").innerJoin("pg_catalog.pg_type as typ","typ.oid","att.atttypid").innerJoin("pg_catalog.pg_namespace as tns","tns.oid","typ.typnamespace").leftJoin("pg_catalog.pg_constraint as pk_con",r=>r.on("pk_con.contype","=","p").onRef("pk_con.conrelid","=","cls.oid").on(t=>t("att.attnum","=",t.fn.any("pk_con.conkey")))).leftJoin("pg_catalog.pg_constraint as fk_con",r=>r.on("fk_con.contype","=","f").onRef("fk_con.conrelid","=","cls.oid").on(t=>t("att.attnum","=",t.fn.any("fk_con.conkey")))).leftJoin("pg_catalog.pg_class as fk_cls","fk_cls.oid","fk_con.confrelid").leftJoin("pg_catalog.pg_namespace as fk_ns","fk_ns.oid","fk_cls.relnamespace").leftJoin("pg_catalog.pg_attribute as fk_att",r=>r.onRef("fk_att.attrelid","=","fk_cls.oid").on(t=>t("fk_att.attnum","=",t.fn.any("fk_con.confkey")))).whereRef("att.attrelid","=","cls.oid").where("att.attnum",">=",0).where("att.attisdropped","!=",!0).select(["att.attname as name","typ.typname as datatype","tns.nspname as datatype_schema","fk_ns.nspname as foreign_key_schema","fk_cls.relname as foreign_key_table","fk_att.attname as foreign_key_column"]).select(r=>[r("pk_con.conkey","is not",null).$castTo().as("pk"),r("att.attgenerated","!=","").$castTo().as("computed"),r("att.attnotnull","!=",!0).$castTo().as("nullable"),r.fn.coalesce(r.selectFrom("pg_catalog.pg_enum as enm").whereRef("enm.enumtypid","=","typ.oid").select(t=>t.fn.jsonAgg(t.ref("enm.enumlabel")).as("o")),g`'[]'`).as("options")])).as("columns")]))}function J(){return[{schema:"zoo",name:"animals",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"users",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"deleted_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"role",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name_role",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!0,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"composite_pk",columns:[{name:"id",datatype:"uuid",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]}]}function K(){let a=y();return _(a.selectNoFrom(a.fn("current_setting",[g.lit("timezone")]).as("timezone")))}function N(){return[{timezone:"UTC"}]}function M(a){return a.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function he(a){let{executor:l,...r}=a;return{defaultSchema:"public",async introspect(t){try{let o=C(r),e=K(),[[n,s],[p,i]]=await Promise.all([l.execute(o,t),l.execute(e,t)]);if(n)return c({error:n,query:o});if(p)return c({error:p,query:e});let d=i[0]?.timezone;return d?[null,$({query:o,tables:s,timezone:d})]:c({error:new Error("Timezone not found"),query:e})}catch(o){return c({error:o})}},async query(t,o){try{let e=j(t,r),[n,s]=await l.execute(e,o);return n?c({error:n,query:e}):[null,{filteredRowCount:s[0]?.__ps_count__||"0",rows:s,query:e}]}catch(e){return c({error:e})}},async insert(t,o){try{let e=z(t,r),[n,s]=await l.execute(e,o);return n?c({error:n,query:e}):[null,{rows:s,query:e}]}catch(e){return c({error:e})}},async update(t,o){try{let e=O(t,r),[n,s]=await l.execute(e,o);if(n)return c({error:n,query:e});let[p]=s;return p?[null,{row:p,query:e}]:c({error:new Error("Update failed"),query:e})}catch(e){return c({error:e})}},async delete(t,o){try{let e=P(t,r),[n]=await l.execute(e,o);return n?c({error:n,query:e}):[null,{...t,query:e}]}catch(e){return c({error:e})}}}}function $(a){let{tables:l,timezone:r,query:t}=a;return l.reduce((o,e)=>{let{schemas:n}=o,{columns:s,name:p,schema:i}=e,d=s.reduce((h,m)=>{let{datatype:k,datatype_schema:b,name:T,options:x,nullable:v}=m,A=k.startsWith("_"),Q=A?k.slice(1):k;return{...h,[T]:{datatype:{...B[Q]||{group:x.length>0?"enum":"raw"},isArray:A,isNative:b==="pg_catalog",name:A?`${Q}[]`:Q,options:x,schema:b},isComputed:m.computed,isInPrimaryKey:m.pk,name:T,nullable:v,schema:i,table:p,fkSchema:m.foreign_key_schema,fkTable:m.foreign_key_table,fkColumn:m.foreign_key_column}}},{});return n[i]===void 0&&(n[i]={name:i,tables:{}}),n[i].tables[p]={columns:d,name:p,schema:i},o},{schemas:{public:{tables:{},name:"public"}},timezone:r,filterOperators:W,query:t})}var W=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function Ae(){let a=J(),[{timezone:l}]=N();return $({tables:a,timezone:l,query:{parameters:[],sql:"<mocked>"}})}u();function Te(){return I("select pg_backend_pid() as pid")}function xe(a){return{parameters:[a],sql:"select pg_cancel_backend($1);"}}export{z as a,j as b,ae as c,O as d,P as e,C as f,J as g,K as h,N as i,he as j,Ae as k,Te as l,xe as m};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2luZGV4LnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9hZGFwdGVyLnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9kYXRhdHlwZS50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvZG1sLnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9idWlsZGVyLnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9wb3N0Z3Jlcy5qcyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvdXRpbGl0eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEgfSBmcm9tIFwiLi9kYXRhdHlwZVwiO1xuaW1wb3J0IHsgZ2V0RGVsZXRlUXVlcnksIGdldEluc2VydFF1ZXJ5LCBnZXRTZWxlY3RRdWVyeSwgZ2V0VXBkYXRlUXVlcnkgfSBmcm9tIFwiLi9kbWxcIjtcbmltcG9ydCB7IGdldFRhYmxlc1F1ZXJ5LCBnZXRUaW1lem9uZVF1ZXJ5LCBtb2NrVGFibGVzUXVlcnksIG1vY2tUaW1lem9uZVF1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBQb3N0Z3Jlc0FkYXB0ZXJSZXF1aXJlbWVudHMgPSBBZGFwdGVyUmVxdWlyZW1lbnRzO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9zdGdyZXNBZGFwdGVyKHJlcXVpcmVtZW50czogUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBcInB1YmxpY1wiLFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkob3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCB0aW1lem9uZVF1ZXJ5ID0gZ2V0VGltZXpvbmVRdWVyeSgpO1xuXG4gICAgICAgIGNvbnN0IFtbdGFibGVzRXJyb3IsIHRhYmxlc10sIFt0aW1lem9uZUVycm9yLCB0aW1lem9uZXNdXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRpbWV6b25lUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXpvbmVFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGltZXpvbmVFcnJvciwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lem9uZSA9IHRpbWV6b25lc1swXT8udGltZXpvbmU7XG5cbiAgICAgICAgaWYgKCF0aW1lem9uZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVGltZXpvbmUgbm90IGZvdW5kXCIpLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgY3JlYXRlSW50cm9zcGVjdGlvbih7IHF1ZXJ5OiB0YWJsZXNRdWVyeSwgdGFibGVzLCB0aW1lem9uZSB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcXVlcnkoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgZmlsdGVyZWRSb3dDb3VudDogcmVzdWx0c1swXT8uX19wc19jb3VudF9fIHx8IFwiMFwiLCByb3dzOiByZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBwcm9wZXJseVxuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCBbZXJyb3IsIHJvd3NdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3dzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcmVzdWx0c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3Jvd10gPSByZXN1bHRzO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgLy8gVE9ETzogY3VzdG9tIGVycm9yP1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVXBkYXRlIGZhaWxlZFwiKSwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93LCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXREZWxldGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgLy8gVE9ETzogdXNlIHJlc3VsdHMgdG9vLlxuICAgICAgICBjb25zdCBbZXJyb3JdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyAuLi5kZXRhaWxzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW50cm9zcGVjdGlvbihhcmdzOiB7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgcXVlcnk6IFF1ZXJ5O1xufSk6IEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IHtcbiAgY29uc3QgeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeSB9ID0gYXJncztcblxuICByZXR1cm4gdGFibGVzLnJlZHVjZShcbiAgICAocmVzdWx0LCByb3cpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hcyB9ID0gcmVzdWx0O1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9ID0gcm93O1xuXG4gICAgICBjb25zdCBjb2x1bW5zUmVjb3JkID0gY29sdW1ucy5yZWR1Y2UoXG4gICAgICAgIChjb2x1bW5zLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBkYXRhdHlwZV9zY2hlbWEsIG5hbWU6IGNvbHVtbk5hbWUsIG9wdGlvbnMsIG51bGxhYmxlIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICBjb25zdCBpc0FycmF5ID0gZGF0YXR5cGUuc3RhcnRzV2l0aChcIl9cIik7XG4gICAgICAgICAgY29uc3Qgc3RyaXBwZWREYXRhVHlwZSA9IGlzQXJyYXkgPyBkYXRhdHlwZS5zbGljZSgxKSA6IGRhdGF0eXBlO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgICAgICBbY29sdW1uTmFtZV06IHtcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IHtcbiAgICAgICAgICAgICAgICAuLi4oUE9TVEdSRVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBW3N0cmlwcGVkRGF0YVR5cGVdIHx8IHtcbiAgICAgICAgICAgICAgICAgIGdyb3VwOiBvcHRpb25zLmxlbmd0aCA+IDAgPyBcImVudW1cIiA6IFwicmF3XCIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaXNBcnJheSxcbiAgICAgICAgICAgICAgICBpc05hdGl2ZTogZGF0YXR5cGVfc2NoZW1hID09PSBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBpc0FycmF5ID8gYCR7c3RyaXBwZWREYXRhVHlwZX1bXWAgOiBzdHJpcHBlZERhdGFUeXBlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiBkYXRhdHlwZV9zY2hlbWEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6IGNvbHVtbi5jb21wdXRlZCxcbiAgICAgICAgICAgICAgaXNJblByaW1hcnlLZXk6IGNvbHVtbi5wayxcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgbnVsbGFibGUsXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgZmtTY2hlbWE6IGNvbHVtbi5mb3JlaWduX2tleV9zY2hlbWEsXG4gICAgICAgICAgICAgIGZrVGFibGU6IGNvbHVtbi5mb3JlaWduX2tleV90YWJsZSxcbiAgICAgICAgICAgICAgZmtDb2x1bW46IGNvbHVtbi5mb3JlaWduX2tleV9jb2x1bW4sXG4gICAgICAgICAgICB9IGFzIGNvbnN0IHNhdGlzZmllcyBDb2x1bW4sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAge30gYXMgVGFibGVbXCJjb2x1bW5zXCJdLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNjaGVtYXNbc2NoZW1hXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjaGVtYXNbc2NoZW1hXSA9IHtcbiAgICAgICAgICBuYW1lOiBzY2hlbWEsXG4gICAgICAgICAgdGFibGVzOiB7fSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc2NoZW1hc1tzY2hlbWFdLnRhYmxlc1t0YWJsZU5hbWVdID0ge1xuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zUmVjb3JkLFxuICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICB7XG4gICAgICBzY2hlbWFzOiB7IHB1YmxpYzogeyB0YWJsZXM6IHt9LCBuYW1lOiBcInB1YmxpY1wiIH0gfSxcbiAgICAgIHRpbWV6b25lLFxuICAgICAgZmlsdGVyT3BlcmF0b3JzLFxuICAgICAgcXVlcnksXG4gICAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQgYXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gICk7XG59XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuICBcImlsaWtlXCIsXG4gIFwibm90IGlsaWtlXCIsXG5dIHNhdGlzZmllcyBGaWx0ZXJPcGVyYXRvcltdO1xuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ludHJvc3BlY3QoKSB7XG4gIGNvbnN0IHRhYmxlcyA9IG1vY2tUYWJsZXNRdWVyeSgpO1xuICBjb25zdCBbeyB0aW1lem9uZSB9XSA9IG1vY2tUaW1lem9uZVF1ZXJ5KCk7XG4gIGNvbnN0IHF1ZXJ5ID0geyBwYXJhbWV0ZXJzOiBbXSwgc3FsOiBcIjxtb2NrZWQ+XCIgfSBhcyBRdWVyeTtcblxuICByZXR1cm4gY3JlYXRlSW50cm9zcGVjdGlvbih7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5IH0pIGFzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCwgbm8gbmVlZCBnbyBvdmVyYm9hcmQuXG4gICAgc2NoZW1hczoge1xuICAgICAgW0sgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJzY2hlbWFcIl1dOiB7XG4gICAgICAgIG5hbWU6IEs7XG4gICAgICAgIHRhYmxlczoge1xuICAgICAgICAgIFtUIGluICh0eXBlb2YgdGFibGVzKVtudW1iZXJdW1wibmFtZVwiXV06IFRhYmxlO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuICAgIHRpbWV6b25lOiB0eXBlb2YgdGltZXpvbmU7XG4gICAgZmlsdGVyT3BlcmF0b3JzOiBGaWx0ZXJPcGVyYXRvcltdO1xuICAgIHF1ZXJ5OiBRdWVyeTtcbiAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ7XG59XG4iLCAiaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgY29uc3QgUE9TVEdSRVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBOiBSZWNvcmQ8c3RyaW5nLCBQaWNrPERhdGFUeXBlLCBcImdyb3VwXCI+PiA9IHtcbiAgYm9vbDoge1xuICAgIGdyb3VwOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIGdyb3VwOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgYnl0ZWE6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaXRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLyoqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0J1xuICAgKi9cbiAgZGF0ZToge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBAZXhhbXBsZSAnMSBkYXkgMiBob3VycydcbiAgICovXG4gIGludGVydmFsOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG5hbWU6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdmFyY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lIHdpdGhvdXQgdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzE0OjMwOjAwJ1xuICAgKi9cbiAgdGltZToge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwJ1xuICAgKi9cbiAgdGltZXN0YW1wOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwKzAwJ1xuICAgKi9cbiAgdGltZXN0YW1wdHo6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1lc3RhbXBgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCdcbiAgICovXG4gIFwidGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1lc3RhbXB0emAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwKzAwJ1xuICAgKi9cbiAgXCJ0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lIHdpdGggdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzE0OjMwOjAwKzAwOjAwJ1xuICAgKi9cbiAgdGltZXR6OiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzE0OjMwOjAwJ1xuICAgKi9cbiAgXCJ0aW1lIHdpdGhvdXQgdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWV0emAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwKzAwJ1xuICAgKi9cbiAgXCJ0aW1lIHdpdGggdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICB1dWlkOiB7XG4gICAgLy8gVE9ETzogcG9zc2libHkgY2hhbmdlIHRvIGFub3RoZXIgZ3JvdXAgbGF0ZXIuXG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIC8vIE51bWVyaWMgdHlwZXNcbiAgaW50Mjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50NDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50ODoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgc21hbGxpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludGVnZXI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGJpZ2ludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZGVjaW1hbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgbnVtZXJpYzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgcmVhbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZmxvYXQ0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBmbG9hdDg6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIFwiZG91YmxlIHByZWNpc2lvblwiOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBqc29uOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxuICBqc29uYjoge1xuICAgIGdyb3VwOiBcImpzb25cIixcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgdHlwZSBJbmZlclJlc3VsdCwgdHlwZSBSZWZlcmVuY2VFeHByZXNzaW9uLCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHsgQWRhcHRlckRlbGV0ZURldGFpbHMsIEFkYXB0ZXJJbnNlcnREZXRhaWxzLCBBZGFwdGVyUXVlcnlEZXRhaWxzLCBBZGFwdGVyVXBkYXRlRGV0YWlscyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQge1xuICBhcHBseUluZmVycmVkUm93RmlsdGVycyxcbiAgYXBwbHlUcmFuc2Zvcm1hdGlvbnMsXG4gIHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cyxcbiAgY29tcGlsZSxcbiAgZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbixcbn0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZyB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBnZXRQb3N0Z3JlU1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB0eXBlIHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG4vKipcbiAqIEluc2VydHMgb25lIG9yIG1vcmUgcm93cyBpbnRvIGEgdGFibGUgYW5kIHJldHVybnMgdGhlIGluc2VydGVkIHJvd3MgYWxvbmcgd2l0aCB0aGVpciBgY3RpZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3QgeyB0YWJsZSwgcm93cyB9ID0gZGV0YWlscztcbiAgY29uc3QgeyBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSwgY29sdW1ucyB9ID0gdGFibGU7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoXCJpbnNlcnRcIiwgcm93cywgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGNvbHMpLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHNlbGVjdHMgYWxsIGNvbHVtbnMgZnJvbSBhIHRhYmxlLCBhbG9uZyB3aXRoIGFuIHVuYm91bmQgcm93IGNvdW50IGFzIGBfX3BzX2NvdW50X19gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICBzb3J0T3JkZXIsXG4gICAgdGFibGU6IHsgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEsIGNvbHVtbnMgfSxcbiAgICBmaWx0ZXIgPSB7IGtpbmQ6IFwiRmlsdGVyR3JvdXBcIiwgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IGNvdW50UXVlcnkgPSBidWlsZGVyXG4gICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoXCJ2YWx1ZVwiKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoXCJjb3VudFwiLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnNlbGVjdEZyb20oW3RhYmxlTmFtZSwgXCJjb3VudFwiXSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBzcWxcbiAgICAgICAgICAucmVmPEJpZ0ludFN0cmluZz4oXG4gICAgICAgICAgICBcImNvdW50LnZhbHVlXCIgc2F0aXNmaWVzIFJlZmVyZW5jZUV4cHJlc3Npb248eyBjb3VudDogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSwgXCJjb3VudFwiPixcbiAgICAgICAgICApXG4gICAgICAgICAgLmFzKFwiX19wc19jb3VudF9fXCIpLFxuICAgICAgKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC4kY2FsbCgocWIpID0+IHNvcnRPcmRlci5yZWR1Y2UoKHFiLCBpdGVtKSA9PiBxYi5vcmRlckJ5KGl0ZW0uY29sdW1uLCBpdGVtLmRpcmVjdGlvbiksIHFiKSlcbiAgICAgIC5saW1pdChwYWdlU2l6ZSlcbiAgICAgIC8vIHdlJ3JlIGluamVjdGluZyB0aGUgb2Zmc2V0IHZhbHVlIGhlcmUgdG8gYXZvaWQgc2VyaWFsaXphdGlvbiBjb21wbGV4aXR5IChgYmlnaW50YCBpcyBhIG5vLWdvIGZvciBgSlNPTi5zdHJpbmdpZnlgKS5cbiAgICAgIC5vZmZzZXQoc3FsLmxpdChCaWdJbnQocGFnZUluZGV4KSAqIEJpZ0ludChwYWdlU2l6ZSkpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tTZWxlY3RRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjE6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMSxcbiAgICAgIG5hbWU6IFwiSm9obiBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcImFkbWluXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSm9ubiBEb2UgLSBhZG1pblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIwOjU2OjEyLjM0NVpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDIsXG4gICAgICBuYW1lOiBcIkphbmUgRG9lXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgICAgcm9sZTogXCJwb3dlcnVzZXJcIixcbiAgICAgIG5hbWVfcm9sZTogXCJKYW5lIERvZSAtIHBvd2VydXNlclwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCB1cGRhdGVzIGEgZ2l2ZW4gcm93IGluIGEgdGFibGUgd2l0aCBnaXZlbiBjaGFuZ2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBjaGFuZ2VzLFxuICAgIHJvdyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnVwZGF0ZVRhYmxlKHRhYmxlTmFtZSlcbiAgICAgIC5zZXQoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoXCJ1cGRhdGVcIiwgY2hhbmdlcywgY29sdW1ucykpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhjb2xzKVxuICAgICAgLnJldHVybmluZygoZWIpID0+XG4gICAgICAgIGViXG4gICAgICAgICAgLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbihcImZsb29yXCIsIFtlYihlYi5mbihcImV4dHJhY3RcIiwgW3NxbGBlcG9jaCBmcm9tIG5vdygpYF0pLCBcIipcIiwgMV8wMDBfMDAwKV0pLCBcInRleHRcIilcbiAgICAgICAgICAuYXMoXCJfX3BzX3VwZGF0ZWRfYXRfX1wiKSxcbiAgICAgICksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgZGVsZXRlcyBhIGdpdmVuIHNldCBvZiByb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLmRlbGV0ZUZyb20odGFibGVOYW1lKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKHJvd3MsIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoKGViKSA9PlxuICAgICAgICBlYlxuICAgICAgICAgIC5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4oXCJmbG9vclwiLCBbZWIoZWIuZm4oXCJleHRyYWN0XCIsIFtzcWxgZXBvY2ggZnJvbSBub3coKWBdKSwgXCIqXCIsIDFfMDAwXzAwMCldKSwgXCJ0ZXh0XCIpXG4gICAgICAgICAgLmFzKFwiX19wc19kZWxldGVkX2F0X19cIiksXG4gICAgICApLFxuICApO1xufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBQb3N0Z3Jlc0FkYXB0ZXIsIFBvc3RncmVzUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyKHsgLi4ucmVxdWlyZW1lbnRzLCBBZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXIsIFF1ZXJ5Q29tcGlsZXI6IFBvc3RncmVzUXVlcnlDb21waWxlciB9KTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIFNlbGVjdFF1ZXJ5QnVpbGRlciwgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gXCJreXNlbHkvaGVscGVycy9wb3N0Z3Jlc1wiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IGdldFBvc3RncmVTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuXG5jb25zdCBSRUdVTEFSX1RBQkxFX0tJTkQgPSBcInJcIjtcbmNvbnN0IFZJRVdfVEFCTEVfS0lORCA9IFwidlwiO1xuY29uc3QgVEFCTEVfS0lORFMgPSBbUkVHVUxBUl9UQUJMRV9LSU5ELCBWSUVXX1RBQkxFX0tJTkRdIGFzIGNvbnN0O1xudHlwZSBUYWJsZUtpbmQgPSAodHlwZW9mIFRBQkxFX0tJTkRTKVtudW1iZXJdO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKiogY29sdW1ucyAqL1xuICBcInBnX2NhdGFsb2cucGdfYXR0cmlidXRlXCI6IHtcbiAgICAvKiogY29sdW1uIG9yZGVyIG51bWJlciBpbiBpdHMgdGFibGUgKi9cbiAgICBhdHRudW06IG51bWJlcjtcbiAgICAvKiogdGFibGUvdmlldyBpZGVudGlmaWVyICovXG4gICAgYXR0cmVsaWQ6IHN0cmluZztcbiAgICAvKiogY29sdW1uIG5hbWUgKi9cbiAgICBhdHRuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHdhcyB0aGUgY29sdW1uIGRyb3BwZWQuIGRyb3BwZWQgY29sdW1ucyBtaWdodCBub3QgYmUgMTAwJSByZW1vdmVkIGltbWVkaWF0ZWx5LiAqL1xuICAgIGF0dGlzZHJvcHBlZDogYm9vbGVhbjtcbiAgICAvKiogY29sdW1uIGRhdGF0eXBlIGlkZW50aWZpZXIgKi9cbiAgICBhdHR0eXBpZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIGdlbmVyYXRpb24gZmxhZyBmb3IgY29tcHV0ZWQgY29sdW1uczpcbiAgICAgKiAnJyAoZW1wdHkpIGZvciByZWd1bGFyIGNvbHVtbnMsXG4gICAgICogJ3MnIGZvciBTVE9SRUQgZ2VuZXJhdGVkIGNvbHVtbnMgKFBvc3RncmVzIEdFTkVSQVRFRCBBTFdBWVMgQVMpLlxuICAgICAqL1xuICAgIGF0dGdlbmVyYXRlZDogXCJcIiB8IFwic1wiO1xuICAgIC8qKiBOT1QgTlVMTCBjb25zdHJhaW50OiB0cnVlIGlmIHRoZSBjb2x1bW4gaGFzIGEgTk9UIE5VTEwgY29uc3RyYWludCAqL1xuICAgIGF0dG5vdG51bGw6IGJvb2xlYW47XG4gIH07XG4gIC8qKiByZXNvdXJjZXMsIGUuZy4gdGFibGVzLCBzZXF1ZW5jZXMsIGV0Yy4gKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2NsYXNzXCI6IHtcbiAgICAvKiogcmVzb3VyY2UgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgICAvKiogcmVzb3VyY2UgbmFtZSAqL1xuICAgIHJlbG5hbWU6IHN0cmluZztcbiAgICAvKiogc2NoZW1hIGlkICovXG4gICAgcmVsbmFtZXNwYWNlOiBudW1iZXI7XG4gICAgLyoqIHJlc291cmNlIGtpbmQ6IHJlZ3VsYXIgdGFibGUsIHZpZXcgKi9cbiAgICByZWxraW5kOiBUYWJsZUtpbmQ7XG4gIH07XG4gIC8qKiBlbnVtIHR5cGVzJyB2YWx1ZXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2VudW1cIjoge1xuICAgIC8qKiBlbnVtIHZhbHVlICovXG4gICAgZW51bWxhYmVsOiBzdHJpbmc7XG4gICAgLyoqIGVudW0ncyB0eXBlIGlkICovXG4gICAgZW51bXR5cGlkOiBudW1iZXI7XG4gIH07XG4gIC8qKiBzY2hlbWFzICovXG4gIFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2VcIjoge1xuICAgIC8qKiBzY2hlbWEgbmFtZSAqL1xuICAgIG5zcG5hbWU6IHN0cmluZztcbiAgICAvKiogc2NoZW1hIGlkICovXG4gICAgb2lkOiBudW1iZXI7XG4gIH07XG4gIC8qKiBkYXRhdHlwZXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX3R5cGVcIjoge1xuICAgIC8qKiB0eXBlIGlkICovXG4gICAgb2lkOiBudW1iZXI7XG4gICAgLyoqIHR5cGUgbmFtZSAqL1xuICAgIHR5cG5hbWU6IHN0cmluZztcbiAgICAvKiogdHlwZSdzIHNjaGVtYSAoYWthIG5hbWVzcGFjZSkgaWQgKi9cbiAgICB0eXBuYW1lc3BhY2U6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiB0eXBlJ3Mga2luZFxuICAgICAqXG4gICAgICogJ2UnIC0gZW51bSB0eXBlXG4gICAgICovXG4gICAgdHlwdHlwZTogXCJlXCIgfCAoc3RyaW5nICYge30pO1xuICB9O1xuICAvKiogY29uc3RyYWludHMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnRcIjoge1xuICAgIC8qKiByZWxhdGlvbiAodGFibGUpIGlkIHdoaWNoIHRoaXMgY29uc3RyYWludCB3YXMgY3JlYXRlZCBmb3IgKi9cbiAgICBjb25yZWxpZDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIGNvbnN0cmFpbnQgdHlwZS5cbiAgICAgKlxuICAgICAqIGAncCdgIC0gcHJpbWFyeSBrZXkgY29uc3RyYWludC5cbiAgICAgKiBgJ2YnYCAtIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgY29udHlwZTogXCJwXCIgfCBcImZcIiB8IChzdHJpbmcgJiB7fSk7XG4gICAgLyoqXG4gICAgICogYW4gb3JkZXJlZCBhcnJheSBvZiBjb2x1bW5zIGluY2x1ZGVkIGluIHRoZSBjb25zdHJhaW50LlxuICAgICAqXG4gICAgICogdGhlIGNvbHVtbnMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZWlyIG9yZGluYWwgbnVtYmVyIChgYXR0bnVtYCkgaW4gdGhlaXIgcmVsYXRpb24gKHRhYmxlKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIGAnezEsM30nYCAtIGEgY29uc3RyYWludCB3aXRoIDIgY29sdW1ucywgdGhlIDFzdCAmIDNyZCBpbiB0aGVpciB0YWJsZS5cbiAgICAgKi9cbiAgICBjb25rZXk6IG51bWJlcltdO1xuICAgIC8qKiBpZiBhIGZvcmVpZ24ga2V5LCB0aGUgcmVmZXJlbmNlZCB0YWJsZSAqL1xuICAgIGNvbmZyZWxpZDogbnVtYmVyO1xuICAgIC8qKiBpZiBhIGZvcmVpZ24ga2V5LCB0aGUgcmVmZXJlbmNlZCBjb2x1bW5zICovXG4gICAgY29uZmtleTogbnVtYmVyW107XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBtZXRhZGF0YSBmb3IgYWxsIHVzZXItZGVmaW5lZCB0YWJsZXMgYW5kIHZpZXdzIGluIHRoZSBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19jbGFzcyBhcyBjbHNcIilcbiAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyBuc1wiLCBcImNscy5yZWxuYW1lc3BhY2VcIiwgXCJucy5vaWRcIilcbiAgICAgIC4kY2FsbChleGNsdWRlU3lzdGVtVGFibGVzKVxuICAgICAgLy8gcmVndWxhciB0YWJsZXMgb3Igdmlld3NcbiAgICAgIC53aGVyZShcImNscy5yZWxraW5kXCIsIFwiaW5cIiwgVEFCTEVfS0lORFMpXG4gICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICBcIm5zLm5zcG5hbWUgYXMgc2NoZW1hXCIsXG4gICAgICAgIFwiY2xzLnJlbG5hbWUgYXMgbmFtZVwiLFxuICAgICAgICBqc29uQXJyYXlGcm9tKFxuICAgICAgICAgIGViXG4gICAgICAgICAgICAuc2VsZWN0RnJvbShcInBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGFzIGF0dFwiKVxuICAgICAgICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfdHlwZSBhcyB0eXBcIiwgXCJ0eXAub2lkXCIsIFwiYXR0LmF0dHR5cGlkXCIpXG4gICAgICAgICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgYXMgdG5zXCIsIFwidG5zLm9pZFwiLCBcInR5cC50eXBuYW1lc3BhY2VcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY29uc3RyYWludCBhcyBwa19jb25cIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vbihcInBrX2Nvbi5jb250eXBlXCIsIFwiPVwiLCBcInBcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJwa19jb24uY29ucmVsaWRcIiwgXCI9XCIsIFwiY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC5vbigoZWIpID0+IGViKFwiYXR0LmF0dG51bVwiLCBcIj1cIiwgZWIuZm4uYW55KFwicGtfY29uLmNvbmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGFzIGZrX2NvblwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uKFwiZmtfY29uLmNvbnR5cGVcIiwgXCI9XCIsIFwiZlwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcImZrX2Nvbi5jb25yZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLm9uKChlYikgPT4gZWIoXCJhdHQuYXR0bnVtXCIsIFwiPVwiLCBlYi5mbi5hbnkoXCJma19jb24uY29ua2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NsYXNzIGFzIGZrX2Nsc1wiLCBcImZrX2Nscy5vaWRcIiwgXCJma19jb24uY29uZnJlbGlkXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyBma19uc1wiLCBcImZrX25zLm9pZFwiLCBcImZrX2Nscy5yZWxuYW1lc3BhY2VcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGFzIGZrX2F0dFwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwiZmtfYXR0LmF0dHJlbGlkXCIsIFwiPVwiLCBcImZrX2Nscy5vaWRcIilcbiAgICAgICAgICAgICAgICAvLyBVc2UgYSBjYWxsYmFjayBmb3IgdGhlIC5vbigpIGNvbmRpdGlvbiB0byBlbnN1cmUgY29ycmVjdCBjb250ZXh0IGZvciB0eXBlc1xuICAgICAgICAgICAgICAgIC5vbigob25fZWIpID0+IG9uX2ViKFwiZmtfYXR0LmF0dG51bVwiLCBcIj1cIiwgb25fZWIuZm4uYW55KFwiZmtfY29uLmNvbmZrZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC53aGVyZVJlZihcImF0dC5hdHRyZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAvLyBleGNsdWRlIHN5c3RlbSBjb2x1bW5zXG4gICAgICAgICAgICAud2hlcmUoXCJhdHQuYXR0bnVtXCIsIFwiPj1cIiwgMClcbiAgICAgICAgICAgIC53aGVyZShcImF0dC5hdHRpc2Ryb3BwZWRcIiwgXCIhPVwiLCB0cnVlKVxuICAgICAgICAgICAgLnNlbGVjdChbXG4gICAgICAgICAgICAgIFwiYXR0LmF0dG5hbWUgYXMgbmFtZVwiLFxuICAgICAgICAgICAgICBcInR5cC50eXBuYW1lIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwidG5zLm5zcG5hbWUgYXMgZGF0YXR5cGVfc2NoZW1hXCIsXG4gICAgICAgICAgICAgIFwiZmtfbnMubnNwbmFtZSBhcyBmb3JlaWduX2tleV9zY2hlbWFcIixcbiAgICAgICAgICAgICAgXCJma19jbHMucmVsbmFtZSBhcyBmb3JlaWduX2tleV90YWJsZVwiLFxuICAgICAgICAgICAgICBcImZrX2F0dC5hdHRuYW1lIGFzIGZvcmVpZ25fa2V5X2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgICAgICAgIGViKFwicGtfY29uLmNvbmtleVwiLCBcImlzIG5vdFwiLCBudWxsKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJwa1wiKSxcbiAgICAgICAgICAgICAgZWIoXCJhdHQuYXR0Z2VuZXJhdGVkXCIsIFwiIT1cIiwgXCJcIikuJGNhc3RUbzxib29sZWFuPigpLmFzKFwiY29tcHV0ZWRcIiksXG4gICAgICAgICAgICAgIGViKFwiYXR0LmF0dG5vdG51bGxcIiwgXCIhPVwiLCB0cnVlKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJudWxsYWJsZVwiKSxcbiAgICAgICAgICAgICAgZWIuZm5cbiAgICAgICAgICAgICAgICAuY29hbGVzY2UoXG4gICAgICAgICAgICAgICAgICBlYlxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0RnJvbShcInBnX2NhdGFsb2cucGdfZW51bSBhcyBlbm1cIilcbiAgICAgICAgICAgICAgICAgICAgLndoZXJlUmVmKFwiZW5tLmVudW10eXBpZFwiLCBcIj1cIiwgXCJ0eXAub2lkXCIpXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBlYi5mbi5qc29uQWdnKGViLnJlZihcImVubS5lbnVtbGFiZWxcIikpLmFzKFwib1wiKSksXG4gICAgICAgICAgICAgICAgICBzcWw8c3RyaW5nW10+YCdbXSdgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXMoXCJvcHRpb25zXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgXSksXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGFibGVzUXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgc2NoZW1hOiBcInpvb1wiLFxuICAgICAgbmFtZTogXCJhbmltYWxzXCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50NFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IHRydWUsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYTogXCJwdWJsaWNcIixcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnQ0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGVsZXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhclwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhclwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lX3JvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IHRydWUsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NoZW1hOiBcInB1YmxpY1wiLFxuICAgICAgbmFtZTogXCJjb21wb3NpdGVfcGtcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ1dWlkXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgdGltZXpvbmUgc2V0dGluZyBvZiB0aGUgUG9zdGdyZVNRTCBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWV6b25lUXVlcnkoKSB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcigpO1xuXG4gIHJldHVybiBjb21waWxlKGJ1aWxkZXIuc2VsZWN0Tm9Gcm9tKGJ1aWxkZXIuZm48c3RyaW5nPihcImN1cnJlbnRfc2V0dGluZ1wiLCBbc3FsLmxpdChcInRpbWV6b25lXCIpXSkuYXMoXCJ0aW1lem9uZVwiKSkpO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RpbWV6b25lUXVlcnkoKSB7XG4gIHJldHVybiBbeyB0aW1lem9uZTogXCJVVENcIiB9XSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRpbWV6b25lUXVlcnk+O1xufVxuXG4vKipcbiAqIFdlIGRvbid0IHdhbnQgUG9zdGdyZVNRTCBpbnRlcm5hbHMgaW4gaW50cm9zcGVjdGlvbiByZXN1bHRzLiBUbyBiZSB1c2VkIGluIGAkY2FsbGAuXG4gKi9cbmZ1bmN0aW9uIGV4Y2x1ZGVTeXN0ZW1UYWJsZXM8XG4gIFQgZXh0ZW5kcyBTZWxlY3RRdWVyeUJ1aWxkZXI8XG4gICAgRGF0YWJhc2UgJiB7IG5zOiBEYXRhYmFzZVtcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlXCJdOyBjbHM6IERhdGFiYXNlW1wicGdfY2F0YWxvZy5wZ19jbGFzc1wiXSB9LFxuICAgIFwibnNcIiB8IFwiY2xzXCIsXG4gICAgb2JqZWN0XG4gID4sXG4+KHFiOiBUKTogVCB7XG4gIHJldHVybiBxYi53aGVyZShgbnMubnNwbmFtZWAsIGAhfmAsIGBecGdfYCkud2hlcmUoYG5zLm5zcG5hbWVgLCBgIT1gLCBgaW5mb3JtYXRpb25fc2NoZW1hYCkgYXMgbmV2ZXI7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3Bvc3RncmVzLmQudHNcIiAvPlxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnLi4vcmF3LWJ1aWxkZXIvc3FsLmpzJztcbi8qKlxuICogQSBwb3N0Z3JlcyBoZWxwZXIgZm9yIGFnZ3JlZ2F0aW5nIGEgc3VicXVlcnkgKG9yIG90aGVyIGV4cHJlc3Npb24pIGludG8gYSBKU09OQiBhcnJheS5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiA8IS0tIHNpdGVFeGFtcGxlKFwic2VsZWN0XCIsIFwiTmVzdGVkIGFycmF5XCIsIDExMCkgLS0+XG4gKlxuICogV2hpbGUga3lzZWx5IGlzIG5vdCBhbiBPUk0gYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgY29uY2VwdCBvZiByZWxhdGlvbnMsIHdlIGRvIHByb3ZpZGVcbiAqIGhlbHBlcnMgZm9yIGZldGNoaW5nIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgaW4gYSBzaW5nbGUgcXVlcnkuIEluIHRoaXMgZXhhbXBsZSB3ZVxuICogdXNlIHRoZSBganNvbkFycmF5RnJvbWAgaGVscGVyIHRvIGZldGNoIHBlcnNvbidzIHBldHMgYWxvbmcgd2l0aCB0aGUgcGVyc29uJ3MgaWQuXG4gKlxuICogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBoZWxwZXJzIHVuZGVyIHRoZSBga3lzZWx5L2hlbHBlcnNgIGZvbGRlciwgaW5jbHVkaW5nXG4gKiBganNvbkFycmF5RnJvbWAsIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrIHdpdGggdGhpcmQgcGFydHkgZGlhbGVjdHMuIEluIG9yZGVyIGZvclxuICogdGhlbSB0byB3b3JrLCB0aGUgZGlhbGVjdCBtdXN0IGF1dG9tYXRpY2FsbHkgcGFyc2UgdGhlIGBqc29uYCBkYXRhIHR5cGUgaW50b1xuICogSmF2YVNjcmlwdCBKU09OIHZhbHVlcyBsaWtlIG9iamVjdHMgYW5kIGFycmF5cy4gU29tZSBkaWFsZWN0cyBtaWdodCBzaW1wbHkgcmV0dXJuXG4gKiB0aGUgZGF0YSBhcyBhIEpTT04gc3RyaW5nLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW4gYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gXG4gKiB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkFycmF5RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLm9yZGVyQnkoJ3BldC5uYW1lJylcbiAqICAgICApLmFzKCdwZXRzJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QgY29hbGVzY2UoanNvbl9hZ2coYWdnKSwgJ1tdJykgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgb3JkZXIgYnkgXCJwZXRcIi5cIm5hbWVcIlxuICogICApIGFzIGFnZ1xuICogKSBhcyBcInBldHNcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY29hbGVzY2UoanNvbl9hZ2coYWdnKSwgJ1tdJykgZnJvbSAke2V4cHJ9IGFzIGFnZylgO1xufVxuLyoqXG4gKiBBIHBvc3RncmVzIGhlbHBlciBmb3IgdHVybmluZyBhIHN1YnF1ZXJ5IChvciBvdGhlciBleHByZXNzaW9uKSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKlxuICogVGhlIHN1YnF1ZXJ5IG11c3Qgb25seSByZXR1cm4gb25lIHJvdy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiA8IS0tIHNpdGVFeGFtcGxlKFwic2VsZWN0XCIsIFwiTmVzdGVkIG9iamVjdFwiLCAxMjApIC0tPlxuICpcbiAqIFdoaWxlIGt5c2VseSBpcyBub3QgYW4gT1JNIGFuZCBpdCBkb2Vzbid0IGhhdmUgdGhlIGNvbmNlcHQgb2YgcmVsYXRpb25zLCB3ZSBkbyBwcm92aWRlXG4gKiBoZWxwZXJzIGZvciBmZXRjaGluZyBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzIGluIGEgc2luZ2xlIHF1ZXJ5LiBJbiB0aGlzIGV4YW1wbGUgd2VcbiAqIHVzZSB0aGUgYGpzb25PYmplY3RGcm9tYCBoZWxwZXIgdG8gZmV0Y2ggcGVyc29uJ3MgZmF2b3JpdGUgcGV0IGFsb25nIHdpdGggdGhlIHBlcnNvbidzIGlkLlxuICpcbiAqIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgaGVscGVycyB1bmRlciB0aGUgYGt5c2VseS9oZWxwZXJzYCBmb2xkZXIsIGluY2x1ZGluZ1xuICogYGpzb25PYmplY3RGcm9tYCwgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCB0aGlyZC1wYXJ0eSBkaWFsZWN0cy4gSW4gb3JkZXIgZm9yXG4gKiB0aGVtIHRvIHdvcmssIHRoZSBkaWFsZWN0IG11c3QgYXV0b21hdGljYWxseSBwYXJzZSB0aGUgYGpzb25gIGRhdGEgdHlwZSBpbnRvXG4gKiBKYXZhU2NyaXB0IEpTT04gdmFsdWVzIGxpa2Ugb2JqZWN0cyBhbmQgYXJyYXlzLiBTb21lIGRpYWxlY3RzIG1pZ2h0IHNpbXBseSByZXR1cm5cbiAqIHRoZSBkYXRhIGFzIGEgSlNPTiBzdHJpbmcuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpbiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmBcbiAqIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbk9iamVjdEZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC53aGVyZSgncGV0LmlzX2Zhdm9yaXRlJywgJz0nLCB0cnVlKVxuICogICAgICkuYXMoJ2Zhdm9yaXRlX3BldCcpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IHRvX2pzb24ob2JqKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBhbmQgXCJwZXRcIi5cImlzX2Zhdm9yaXRlXCIgPSAkMVxuICogICApIGFzIG9ialxuICogKSBhcyBcImZhdm9yaXRlX3BldFwiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbk9iamVjdEZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgdG9fanNvbihvYmopIGZyb20gJHtleHByfSBhcyBvYmopYDtcbn1cbi8qKlxuICogVGhlIFBvc3RncmVTUUwgYGpzb25fYnVpbGRfb2JqZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgUG9zdGdyZXNEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBQb3N0Z3JlU1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBvYmplY3RzLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW5cbiAqIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYCB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHsganNvbkJ1aWxkT2JqZWN0IH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQnVpbGRPYmplY3Qoe1xuICogICAgICAgZmlyc3Q6IGViLnJlZignZmlyc3RfbmFtZScpLFxuICogICAgICAgbGFzdDogZWIucmVmKCdsYXN0X25hbWUnKSxcbiAqICAgICAgIGZ1bGw6IHNxbDxzdHJpbmc+YGZpcnN0X25hbWUgfHxcdTAwQTAnICcgfHwgbGFzdF9uYW1lYFxuICogICAgIH0pLmFzKCduYW1lJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ubmFtZS5maXJzdFxuICogcmVzdWx0WzBdPy5uYW1lLmxhc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5mdWxsXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCBqc29uX2J1aWxkX29iamVjdChcbiAqICAgJ2ZpcnN0JywgZmlyc3RfbmFtZSxcbiAqICAgJ2xhc3QnLCBsYXN0X25hbWUsXG4gKiAgICdmdWxsJywgZmlyc3RfbmFtZSB8fCAnICcgfHwgbGFzdF9uYW1lXG4gKiApIGFzIFwibmFtZVwiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkJ1aWxkT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBzcWwgYGpzb25fYnVpbGRfb2JqZWN0KCR7c3FsLmpvaW4oT2JqZWN0LmtleXMob2JqKS5mbGF0TWFwKChrKSA9PiBbc3FsLmxpdChrKSwgb2JqW2tdXSkpfSlgO1xufVxuLyoqXG4gKiBUaGUgUG9zdGdyZVNRTCBgbWVyZ2VfYWN0aW9uYCBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluIGEgYHJldHVybmluZ2AgY2xhdXNlIHRvIGdldCB0aGUgYWN0aW9uIHRoYXQgd2FzXG4gKiBwZXJmb3JtZWQgaW4gYSBgbWVyZ2VJbnRvYCBxdWVyeS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgb25lIG9mIHRoZSBmb2xsb3dpbmdcbiAqIHN0cmluZ3M6IGAnSU5TRVJUJ2AsIGAnVVBEQVRFJ2AsIG9yIGAnREVMRVRFJ2AuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG1lcmdlQWN0aW9uIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLm1lcmdlSW50bygncGVyc29uIGFzIHAnKVxuICogICAudXNpbmcoJ3BlcnNvbl9iYWNrdXAgYXMgcGInLCAncC5pZCcsICdwYi5pZCcpXG4gKiAgIC53aGVuTWF0Y2hlZCgpXG4gKiAgIC50aGVuVXBkYXRlU2V0KCh7IHJlZiB9KSA9PiAoe1xuICogICAgIGZpcnN0X25hbWU6IHJlZigncGIuZmlyc3RfbmFtZScpLFxuICogICAgIHVwZGF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLiRjYXN0VG88c3RyaW5nIHwgbnVsbD4oKSxcbiAqICAgfSkpXG4gKiAgIC53aGVuTm90TWF0Y2hlZCgpXG4gKiAgIC50aGVuSW5zZXJ0VmFsdWVzKCh7IHJlZn0pID0+ICh7XG4gKiAgICAgaWQ6IHJlZigncGIuaWQnKSxcbiAqICAgICBmaXJzdF9uYW1lOiByZWYoJ3BiLmZpcnN0X25hbWUnKSxcbiAqICAgICBjcmVhdGVkX2F0OiByZWYoJ3BiLnVwZGF0ZWRfYXQnKSxcbiAqICAgICB1cGRhdGVkX2F0OiByZWYoJ3BiLnVwZGF0ZWRfYXQnKS4kY2FzdFRvPHN0cmluZyB8IG51bGw+KCksXG4gKiAgIH0pKVxuICogICAucmV0dXJuaW5nKFttZXJnZUFjdGlvbigpLmFzKCdhY3Rpb24nKSwgJ3AuaWQnLCAncC51cGRhdGVkX2F0J10pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0uYWN0aW9uXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBtZXJnZSBpbnRvIFwicGVyc29uXCIgYXMgXCJwXCJcbiAqIHVzaW5nIFwicGVyc29uX2JhY2t1cFwiIGFzIFwicGJcIiBvbiBcInBcIi5cImlkXCIgPSBcInBiXCIuXCJpZFwiXG4gKiB3aGVuIG1hdGNoZWQgdGhlbiB1cGRhdGUgc2V0XG4gKiAgIFwiZmlyc3RfbmFtZVwiID0gXCJwYlwiLlwiZmlyc3RfbmFtZVwiLFxuICogICBcInVwZGF0ZWRfYXRcIiA9IFwicGJcIi5cInVwZGF0ZWRfYXRcIjo6dGV4dFxuICogd2hlbiBub3QgbWF0Y2hlZCB0aGVuIGluc2VydCB2YWx1ZXMgKFwiaWRcIiwgXCJmaXJzdF9uYW1lXCIsIFwiY3JlYXRlZF9hdFwiLCBcInVwZGF0ZWRfYXRcIilcbiAqIHZhbHVlcyAoXCJwYlwiLlwiaWRcIiwgXCJwYlwiLlwiZmlyc3RfbmFtZVwiLCBcInBiXCIuXCJ1cGRhdGVkX2F0XCIsIFwicGJcIi5cInVwZGF0ZWRfYXRcIilcbiAqIHJldHVybmluZyBtZXJnZV9hY3Rpb24oKSBhcyBcImFjdGlvblwiLCBcInBcIi5cImlkXCIsIFwicFwiLlwidXBkYXRlZF9hdFwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQWN0aW9uKCkge1xuICAgIHJldHVybiBzcWwgYG1lcmdlX2FjdGlvbigpYDtcbn1cbiIsICJpbXBvcnQgeyBhc1F1ZXJ5LCB0eXBlIFF1ZXJ5IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQSURRdWVyeSgpOiBRdWVyeTx7IHBpZDogdW5rbm93biB9PiB7XG4gIHJldHVybiBhc1F1ZXJ5KFwic2VsZWN0IHBnX2JhY2tlbmRfcGlkKCkgYXMgcGlkXCIpO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FuY2VsUXVlcnkocGlkOiB7fSk6IFF1ZXJ5PHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJzOiBbcGlkXSxcbiAgICBzcWw6IFwic2VsZWN0IHBnX2NhbmNlbF9iYWNrZW5kKCQxKTtcIixcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7O2dMQUFBQSxJQ0FBQyxJQ0FBQyxJQUVPLElBQU1DLEVBQTZFLENBQ3hGLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsTUFBTyxDQUNMLE1BQU8sUUFDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsRUFDQSxPQUFRLENBQ04sTUFBTyxRQUNULEVBSUEsS0FBTSxDQUNKLE1BQU8sVUFDVCxFQUlBLFNBQVUsQ0FDUixNQUFPLFFBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxRQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sUUFDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsRUFNQSxLQUFNLENBQ0osTUFBTyxNQUNULEVBTUEsVUFBVyxDQUNULE1BQU8sVUFDVCxFQU1BLFlBQWEsQ0FDWCxNQUFPLFVBQ1QsRUFNQSw4QkFBK0IsQ0FDN0IsTUFBTyxVQUNULEVBTUEsMkJBQTRCLENBQzFCLE1BQU8sVUFDVCxFQU1BLE9BQVEsQ0FDTixNQUFPLE1BQ1QsRUFNQSx5QkFBMEIsQ0FDeEIsTUFBTyxNQUNULEVBTUEsc0JBQXVCLENBQ3JCLE1BQU8sVUFDVCxFQUNBLEtBQU0sQ0FFSixNQUFPLEtBQ1QsRUFFQSxLQUFNLENBQ0osTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxTQUFVLENBQ1IsTUFBTyxTQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLE9BQVEsQ0FDTixNQUFPLFNBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFNBQ1QsRUFDQSxPQUFRLENBQ04sTUFBTyxTQUNULEVBQ0EsT0FBUSxDQUNOLE1BQU8sU0FDVCxFQUNBLG1CQUFvQixDQUNsQixNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxNQUNULEVBQ0EsTUFBTyxDQUNMLE1BQU8sTUFDVCxDQUNGLEVDdEpBQyxJQ0FBQyxJQUtPLFNBQVNDLEVBQ2RDLEVBQ2tCLENBQ2xCLE9BQU9DLEVBQVcsQ0FBRSxHQUFHRCxFQUFjLFFBQVNFLEVBQWlCLGNBQWVDLENBQXNCLENBQUMsQ0FDdkcsQ0RRTyxTQUFTQyxFQUNkQyxFQUNBQyxFQUNBLENBQ0EsR0FBTSxDQUFFLE1BQUFDLEVBQU8sS0FBQUMsQ0FBSyxFQUFJSCxFQUNsQixDQUFFLEtBQU1JLEVBQVcsT0FBQUMsRUFBUSxRQUFBQyxDQUFRLEVBQUlKLEVBRXZDSyxFQUFVQyxFQUE4RFAsQ0FBWSxFQUNwRlEsRUFBTyxPQUFPLEtBQUtILENBQU8sRUFFaEMsT0FBT0ksRUFDTEgsRUFDRyxXQUFXRixDQUFNLEVBQ2pCLFdBQVdELENBQVMsRUFDcEIsT0FBT08sRUFBcUIsU0FBVVIsRUFBTUcsQ0FBTyxDQUFDLEVBQ3BELFVBQVVHLENBQUksQ0FDbkIsQ0FDRixDQUtPLFNBQVNHLEVBQ2RaLEVBQ0FDLEVBQ0EsQ0FDQSxHQUFNLENBQ0osVUFBQVksRUFDQSxTQUFBQyxFQUNBLFVBQUFDLEVBQ0EsTUFBTyxDQUFFLEtBQU1YLEVBQVcsT0FBQUMsRUFBUSxRQUFBQyxDQUFRLEVBQzFDLE9BQUFVLEVBQVMsQ0FBRSxLQUFNLGNBQWUsTUFBTyxNQUFPLFFBQVMsQ0FBQyxDQUFFLENBQzVELEVBQUloQixFQUVFTyxFQUFVQyxFQUE4RFAsQ0FBWSxFQUVwRmdCLEVBQW1CQyxFQUEwQkYsRUFBTyxRQUFTVixDQUFPLEVBRXBFYSxFQUFhWixFQUNoQixXQUFXRixDQUFNLEVBQ2pCLFdBQVdELENBQVMsRUFDcEIsTUFBTWEsQ0FBZ0IsRUFDdEIsT0FBUUcsR0FBT0EsRUFBRyxLQUFtQkEsRUFBRyxHQUFHLFNBQVNBLEVBQUcsR0FBRyxTQUFTLEVBQUdDLEVBQUksSUFBSSxDQUFDLENBQUMsRUFBRyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFFekcsT0FBT1gsRUFDTEgsRUFDRyxLQUFLLFFBQVMsSUFBTVksQ0FBVSxFQUM5QixXQUFXZCxDQUFNLEVBQ2pCLFdBQVcsQ0FBQ0QsRUFBVyxPQUFPLENBQUMsRUFFL0IsTUFBTWEsQ0FBZ0IsRUFDdEIsT0FDQ0ksRUFDRyxJQUNDLGFBQ0YsRUFDQyxHQUFHLGNBQWMsQ0FDdEIsRUFDQyxPQUFPLE9BQU8sS0FBS2YsQ0FBTyxDQUFDLEVBQzNCLE1BQU9nQixHQUFPUCxFQUFVLE9BQU8sQ0FBQ08sRUFBSUMsSUFBU0QsRUFBRyxRQUFRQyxFQUFLLE9BQVFBLEVBQUssU0FBUyxFQUFHRCxDQUFFLENBQUMsRUFDekYsTUFBTVIsQ0FBUSxFQUVkLE9BQU9PLEVBQUksSUFBSSxPQUFPUixDQUFTLEVBQUksT0FBT0MsQ0FBUSxDQUFDLENBQUMsQ0FDekQsQ0FDRixDQUtPLFNBQVNVLElBQWtCLENBQ2hDLE1BQU8sQ0FDTCxDQUNFLFdBQVksSUFBSSxLQUFLLDBCQUEwQixFQUMvQyxXQUFZLEtBQ1osR0FBSSxFQUNKLEtBQU0sV0FDTixhQUFjLElBQ2QsS0FBTSxRQUNOLFVBQVcsa0JBQ2IsRUFDQSxDQUNFLFdBQVksSUFBSSxLQUFLLDBCQUEwQixFQUMvQyxXQUFZLEtBQ1osR0FBSSxFQUNKLEtBQU0sV0FDTixhQUFjLElBQ2QsS0FBTSxZQUNOLFVBQVcsc0JBQ2IsQ0FDRixDQUlGLENBS08sU0FBU0MsRUFDZHpCLEVBQ0FDLEVBQ0EsQ0FDQSxHQUFNLENBQ0osUUFBQXlCLEVBQ0EsSUFBQUMsRUFDQSxNQUFPLENBQUUsUUFBQXJCLEVBQVMsS0FBTUYsRUFBVyxPQUFBQyxDQUFPLENBQzVDLEVBQUlMLEVBRUVPLEVBQVVDLEVBQThEUCxDQUFZLEVBQ3BGUSxFQUFPLE9BQU8sS0FBS0gsQ0FBTyxFQUVoQyxPQUFPSSxFQUNMSCxFQUNHLFdBQVdGLENBQU0sRUFDakIsWUFBWUQsQ0FBUyxFQUNyQixJQUFJTyxFQUFxQixTQUFVZSxFQUFTcEIsQ0FBTyxDQUFDLEVBQ3BELE1BQU1zQixFQUF3QixDQUFDRCxDQUFHLEVBQUdyQixDQUFPLENBQUMsRUFDN0MsVUFBVUcsQ0FBSSxFQUNkLFVBQVdXLEdBQ1ZBLEVBQ0csS0FBbUJBLEVBQUcsR0FBRyxRQUFTLENBQUNBLEVBQUdBLEVBQUcsR0FBRyxVQUFXLENBQUNDLG1CQUFxQixDQUFDLEVBQUcsSUFBSyxHQUFTLENBQUMsQ0FBQyxFQUFHLE1BQU0sRUFDMUcsR0FBRyxtQkFBbUIsQ0FDM0IsQ0FDSixDQUNGLENBS08sU0FBU1EsRUFDZDdCLEVBQ0FDLEVBQ0EsQ0FDQSxHQUFNLENBQ0osS0FBQUUsRUFDQSxNQUFPLENBQUUsUUFBQUcsRUFBUyxLQUFNRixFQUFXLE9BQUFDLENBQU8sQ0FDNUMsRUFBSUwsRUFFRU8sRUFBVUMsRUFBOERQLENBQVksRUFFMUYsT0FBT1MsRUFDTEgsRUFDRyxXQUFXRixDQUFNLEVBQ2pCLFdBQVdELENBQVMsRUFDcEIsTUFBTXdCLEVBQXdCekIsRUFBTUcsQ0FBTyxDQUFDLEVBQzVDLFVBQVUsT0FBTyxLQUFLQSxDQUFPLENBQUMsRUFDOUIsVUFBV2MsR0FDVkEsRUFDRyxLQUFtQkEsRUFBRyxHQUFHLFFBQVMsQ0FBQ0EsRUFBR0EsRUFBRyxHQUFHLFVBQVcsQ0FBQ0MsbUJBQXFCLENBQUMsRUFBRyxJQUFLLEdBQVMsQ0FBQyxDQUFDLEVBQUcsTUFBTSxFQUMxRyxHQUFHLG1CQUFtQixDQUMzQixDQUNKLENBQ0YsQ0V6S0FTLElDQUFDLElBbURPLFNBQVNDLEVBQWNDLEVBQU0sQ0FDaEMsT0FBT0MsK0NBQWtERCxDQUFJLFVBQ2pFLENEL0NBLElBQU1FLEVBQXFCLElBQ3JCQyxFQUFrQixJQUNsQkMsRUFBYyxDQUFDRixFQUFvQkMsQ0FBZSxFQThGakQsU0FBU0UsRUFBZUMsRUFBdUUsQ0FDcEcsT0FBT0MsRUFDTEMsRUFBK0JGLENBQVksRUFDeEMsV0FBVyw0QkFBNEIsRUFDdkMsVUFBVSxnQ0FBaUMsbUJBQW9CLFFBQVEsRUFDdkUsTUFBTUcsQ0FBbUIsRUFFekIsTUFBTSxjQUFlLEtBQU1MLENBQVcsRUFDdEMsT0FBUU0sR0FBTyxDQUNkLHVCQUNBLHNCQUNBQyxFQUNFRCxFQUNHLFdBQVcsZ0NBQWdDLEVBQzNDLFVBQVUsNEJBQTZCLFVBQVcsY0FBYyxFQUNoRSxVQUFVLGlDQUFrQyxVQUFXLGtCQUFrQixFQUN6RSxTQUFTLHFDQUF1Q0UsR0FDL0NBLEVBQ0csR0FBRyxpQkFBa0IsSUFBSyxHQUFHLEVBQzdCLE1BQU0sa0JBQW1CLElBQUssU0FBUyxFQUN2QyxHQUFJRixHQUFPQSxFQUFHLGFBQWMsSUFBS0EsRUFBRyxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsQ0FDakUsRUFDQyxTQUFTLHFDQUF1Q0UsR0FDL0NBLEVBQ0csR0FBRyxpQkFBa0IsSUFBSyxHQUFHLEVBQzdCLE1BQU0sa0JBQW1CLElBQUssU0FBUyxFQUN2QyxHQUFJRixHQUFPQSxFQUFHLGFBQWMsSUFBS0EsRUFBRyxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsQ0FDakUsRUFDQyxTQUFTLGdDQUFpQyxhQUFjLGtCQUFrQixFQUMxRSxTQUFTLG1DQUFvQyxZQUFhLHFCQUFxQixFQUMvRSxTQUFTLG9DQUFzQ0UsR0FDOUNBLEVBQ0csTUFBTSxrQkFBbUIsSUFBSyxZQUFZLEVBRTFDLEdBQUlDLEdBQVVBLEVBQU0sZ0JBQWlCLElBQUtBLEVBQU0sR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FDOUUsRUFDQyxTQUFTLGVBQWdCLElBQUssU0FBUyxFQUV2QyxNQUFNLGFBQWMsS0FBTSxDQUFDLEVBQzNCLE1BQU0sbUJBQW9CLEtBQU0sRUFBSSxFQUNwQyxPQUFPLENBQ04sc0JBQ0EsMEJBQ0EsaUNBQ0Esc0NBQ0Esc0NBQ0Esc0NBQ0YsQ0FBQyxFQUNBLE9BQVFILEdBQU8sQ0FDZEEsRUFBRyxnQkFBaUIsU0FBVSxJQUFJLEVBQUUsUUFBaUIsRUFBRSxHQUFHLElBQUksRUFDOURBLEVBQUcsbUJBQW9CLEtBQU0sRUFBRSxFQUFFLFFBQWlCLEVBQUUsR0FBRyxVQUFVLEVBQ2pFQSxFQUFHLGlCQUFrQixLQUFNLEVBQUksRUFBRSxRQUFpQixFQUFFLEdBQUcsVUFBVSxFQUNqRUEsRUFBRyxHQUNBLFNBQ0NBLEVBQ0csV0FBVywyQkFBMkIsRUFDdEMsU0FBUyxnQkFBaUIsSUFBSyxTQUFTLEVBQ3hDLE9BQVFBLEdBQU9BLEVBQUcsR0FBRyxRQUFRQSxFQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFDaEVJLE9BQ0YsRUFDQyxHQUFHLFNBQVMsQ0FDakIsQ0FBQyxDQUNMLEVBQUUsR0FBRyxTQUFTLENBQ2hCLENBQUMsQ0FDTCxDQUNGLENBS08sU0FBU0MsR0FBa0IsQ0FDaEMsTUFBTyxDQUNMLENBQ0UsT0FBUSxNQUNSLEtBQU0sVUFDTixRQUFTLENBQ1AsQ0FDRSxLQUFNLEtBQ04sU0FBVSxPQUNWLGdCQUFpQixhQUNqQixHQUFJLEdBQ0osU0FBVSxHQUNWLFFBQVMsQ0FBQyxFQUNWLFNBQVUsR0FDVixtQkFBb0IsS0FDcEIsa0JBQW1CLEtBQ25CLG1CQUFvQixJQUN0QixFQUNBLENBQ0UsS0FBTSxPQUNOLFNBQVUsT0FDVixnQkFBaUIsYUFDakIsR0FBSSxHQUNKLFNBQVUsR0FDVixRQUFTLENBQUMsRUFDVixTQUFVLEdBQ1YsbUJBQW9CLEtBQ3BCLGtCQUFtQixLQUNuQixtQkFBb0IsSUFDdEIsQ0FDRixDQUNGLEVBQ0EsQ0FDRSxPQUFRLFNBQ1IsS0FBTSxRQUNOLFFBQVMsQ0FDUCxDQUNFLEtBQU0sS0FDTixTQUFVLE9BQ1YsZ0JBQWlCLGFBQ2pCLEdBQUksR0FDSixTQUFVLEdBQ1YsUUFBUyxDQUFDLEVBQ1YsU0FBVSxHQUNWLG1CQUFvQixLQUNwQixrQkFBbUIsS0FDbkIsbUJBQW9CLElBQ3RCLEVBQ0EsQ0FDRSxLQUFNLGFBQ04sU0FBVSxZQUNWLGdCQUFpQixhQUNqQixHQUFJLEdBQ0osU0FBVSxHQUNWLFFBQVMsQ0FBQyxFQUNWLFNBQVUsR0FDVixtQkFBb0IsS0FDcEIsa0JBQW1CLEtBQ25CLG1CQUFvQixJQUN0QixFQUNBLENBQ0UsS0FBTSxhQUNOLFNBQVUsWUFDVixnQkFBaUIsYUFDakIsR0FBSSxHQUNKLFNBQVUsR0FDVixRQUFTLENBQUMsRUFDVixTQUFVLEdBQ1YsbUJBQW9CLEtBQ3BCLGtCQUFtQixLQUNuQixtQkFBb0IsSUFDdEIsRUFDQSxDQUNFLEtBQU0sT0FDTixTQUFVLFVBQ1YsZ0JBQWlCLGFBQ2pCLEdBQUksR0FDSixTQUFVLEdBQ1YsUUFBUyxDQUFDLEVBQ1YsU0FBVSxHQUNWLG1CQUFvQixLQUNwQixrQkFBbUIsS0FDbkIsbUJBQW9CLElBQ3RCLEVBQ0EsQ0FDRSxLQUFNLE9BQ04sU0FBVSxVQUNWLGdCQUFpQixhQUNqQixHQUFJLEdBQ0osU0FBVSxHQUNWLFFBQVMsQ0FBQyxFQUNWLFNBQVUsR0FDVixtQkFBb0IsS0FDcEIsa0JBQW1CLEtBQ25CLG1CQUFvQixJQUN0QixFQUNBLENBQ0UsS0FBTSxZQUNOLFNBQVUsT0FDVixnQkFBaUIsYUFDakIsR0FBSSxHQUNKLFNBQVUsR0FDVixRQUFTLENBQUMsRUFDVixTQUFVLEdBQ1YsbUJBQW9CLEtBQ3BCLGtCQUFtQixLQUNuQixtQkFBb0IsSUFDdEIsQ0FDRixDQUNGLEVBQ0EsQ0FDRSxPQUFRLFNBQ1IsS0FBTSxlQUNOLFFBQVMsQ0FDUCxDQUNFLEtBQU0sS0FDTixTQUFVLE9BQ1YsZ0JBQWlCLGFBQ2pCLEdBQUksR0FDSixTQUFVLEdBQ1YsUUFBUyxDQUFDLEVBQ1YsU0FBVSxHQUNWLG1CQUFvQixLQUNwQixrQkFBbUIsS0FDbkIsbUJBQW9CLElBQ3RCLEVBQ0EsQ0FDRSxLQUFNLE9BQ04sU0FBVSxPQUNWLGdCQUFpQixhQUNqQixHQUFJLEdBQ0osU0FBVSxHQUNWLFFBQVMsQ0FBQyxFQUNWLFNBQVUsR0FDVixtQkFBb0IsS0FDcEIsa0JBQW1CLEtBQ25CLG1CQUFvQixJQUN0QixFQUNBLENBQ0UsS0FBTSxhQUNOLFNBQVUsWUFDVixnQkFBaUIsYUFDakIsR0FBSSxHQUNKLFNBQVUsR0FDVixRQUFTLENBQUMsRUFDVixTQUFVLEdBQ1YsbUJBQW9CLEtBQ3BCLGtCQUFtQixLQUNuQixtQkFBb0IsSUFDdEIsQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUtPLFNBQVNDLEdBQW1CLENBQ2pDLElBQU1DLEVBQVVULEVBQXFCLEVBRXJDLE9BQU9ELEVBQVFVLEVBQVEsYUFBYUEsRUFBUSxHQUFXLGtCQUFtQixDQUFDSCxFQUFJLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQ2xILENBS08sU0FBU0ksR0FBb0IsQ0FDbEMsTUFBTyxDQUFDLENBQUUsU0FBVSxLQUFNLENBQUMsQ0FDN0IsQ0FLQSxTQUFTVCxFQU1QVSxFQUFVLENBQ1YsT0FBT0EsRUFBRyxNQUFNLGFBQWMsS0FBTSxNQUFNLEVBQUUsTUFBTSxhQUFjLEtBQU0sb0JBQW9CLENBQzVGLENKNVVPLFNBQVNDLEdBQXNCQyxFQUFvRCxDQUN4RixHQUFNLENBQUUsU0FBQUMsRUFBVSxHQUFHQyxDQUFrQixFQUFJRixFQUUzQyxNQUFPLENBQ0wsY0FBZSxTQUVmLE1BQU0sV0FBV0csRUFBaUUsQ0FDaEYsR0FBSSxDQUNGLElBQU1DLEVBQWNDLEVBQWVILENBQWlCLEVBQzlDSSxFQUFnQkMsRUFBaUIsRUFFakMsQ0FBQyxDQUFDQyxFQUFhQyxDQUFNLEVBQUcsQ0FBQ0MsRUFBZUMsQ0FBUyxDQUFDLEVBQUksTUFBTSxRQUFRLElBQUksQ0FDNUVWLEVBQVMsUUFBUUcsRUFBYUQsQ0FBTyxFQUNyQ0YsRUFBUyxRQUFRSyxFQUFlSCxDQUFPLENBQ3pDLENBQUMsRUFFRCxHQUFJSyxFQUNGLE9BQU9JLEVBQW1CLENBQUUsTUFBT0osRUFBYSxNQUFPSixDQUFZLENBQUMsRUFHdEUsR0FBSU0sRUFDRixPQUFPRSxFQUFtQixDQUFFLE1BQU9GLEVBQWUsTUFBT0osQ0FBYyxDQUFDLEVBRzFFLElBQU1PLEVBQVdGLEVBQVUsQ0FBQyxHQUFHLFNBRS9CLE9BQUtFLEVBSUUsQ0FBQyxLQUFNQyxFQUFvQixDQUFFLE1BQU9WLEVBQWEsT0FBQUssRUFBUSxTQUFBSSxDQUFTLENBQUMsQ0FBQyxFQUhsRUQsRUFBbUIsQ0FBRSxNQUFPLElBQUksTUFBTSxvQkFBb0IsRUFBRyxNQUFPTixDQUFjLENBQUMsQ0FJOUYsT0FBU1MsRUFBZ0IsQ0FFdkIsT0FBT0gsRUFBbUIsQ0FBRSxNQUFPRyxDQUFlLENBQUMsQ0FDckQsQ0FDRixFQUVBLE1BQU0sTUFBTUMsRUFBU2IsRUFBNEQsQ0FDL0UsR0FBSSxDQUNGLElBQU1jLEVBQVFDLEVBQWVGLEVBQVNkLENBQWlCLEVBRWpELENBQUNhLEVBQU9JLENBQU8sRUFBSSxNQUFNbEIsRUFBUyxRQUFRZ0IsRUFBT2QsQ0FBTyxFQUU5RCxPQUFJWSxFQUNLSCxFQUFtQixDQUFFLE1BQUFHLEVBQU8sTUFBQUUsQ0FBTSxDQUFDLEVBR3JDLENBQUMsS0FBTSxDQUFFLGlCQUFrQkUsRUFBUSxDQUFDLEdBQUcsY0FBZ0IsSUFBSyxLQUFNQSxFQUFTLE1BQUFGLENBQU0sQ0FBQyxDQUMzRixPQUFTRixFQUFnQixDQUV2QixPQUFPSCxFQUFtQixDQUFFLE1BQU9HLENBQWUsQ0FBQyxDQUNyRCxDQUNGLEVBRUEsTUFBTSxPQUFPQyxFQUFTYixFQUE2RCxDQUNqRixHQUFJLENBQ0YsSUFBTWMsRUFBUUcsRUFBZUosRUFBU2QsQ0FBaUIsRUFDakQsQ0FBQ2EsRUFBT00sQ0FBSSxFQUFJLE1BQU1wQixFQUFTLFFBQVFnQixFQUFPZCxDQUFPLEVBRTNELE9BQUlZLEVBQ0tILEVBQW1CLENBQUUsTUFBQUcsRUFBTyxNQUFBRSxDQUFNLENBQUMsRUFHckMsQ0FBQyxLQUFNLENBQUUsS0FBQUksRUFBTSxNQUFBSixDQUFNLENBQUMsQ0FDL0IsT0FBU0YsRUFBZ0IsQ0FDdkIsT0FBT0gsRUFBbUIsQ0FBRSxNQUFPRyxDQUFlLENBQUMsQ0FDckQsQ0FDRixFQUVBLE1BQU0sT0FBT0MsRUFBU2IsRUFBNkQsQ0FDakYsR0FBSSxDQUNGLElBQU1jLEVBQVFLLEVBQWVOLEVBQVNkLENBQWlCLEVBQ2pELENBQUNhLEVBQU9JLENBQU8sRUFBSSxNQUFNbEIsRUFBUyxRQUFRZ0IsRUFBT2QsQ0FBTyxFQUU5RCxHQUFJWSxFQUNGLE9BQU9ILEVBQW1CLENBQUUsTUFBQUcsRUFBTyxNQUFBRSxDQUFNLENBQUMsRUFHNUMsR0FBTSxDQUFDTSxDQUFHLEVBQUlKLEVBRWQsT0FBS0ksRUFLRSxDQUFDLEtBQU0sQ0FBRSxJQUFBQSxFQUFLLE1BQUFOLENBQU0sQ0FBQyxFQUhuQkwsRUFBbUIsQ0FBRSxNQUFPLElBQUksTUFBTSxlQUFlLEVBQUcsTUFBQUssQ0FBTSxDQUFDLENBSTFFLE9BQVNGLEVBQWdCLENBQ3ZCLE9BQU9ILEVBQW1CLENBQUUsTUFBT0csQ0FBZSxDQUFDLENBQ3JELENBQ0YsRUFFQSxNQUFNLE9BQU9DLEVBQVNiLEVBQTZELENBQ2pGLEdBQUksQ0FDRixJQUFNYyxFQUFRTyxFQUFlUixFQUFTZCxDQUFpQixFQUdqRCxDQUFDYSxDQUFLLEVBQUksTUFBTWQsRUFBUyxRQUFRZ0IsRUFBT2QsQ0FBTyxFQUVyRCxPQUFJWSxFQUNLSCxFQUFtQixDQUFFLE1BQUFHLEVBQU8sTUFBQUUsQ0FBTSxDQUFDLEVBR3JDLENBQUMsS0FBTSxDQUFFLEdBQUdELEVBQVMsTUFBQUMsQ0FBTSxDQUFDLENBQ3JDLE9BQVNGLEVBQWdCLENBQ3ZCLE9BQU9ILEVBQW1CLENBQUUsTUFBT0csQ0FBZSxDQUFDLENBQ3JELENBQ0YsQ0FDRixDQUNGLENBRUEsU0FBU0QsRUFBb0JXLEVBSUQsQ0FDMUIsR0FBTSxDQUFFLE9BQUFoQixFQUFRLFNBQUFJLEVBQVUsTUFBQUksQ0FBTSxFQUFJUSxFQUVwQyxPQUFPaEIsRUFBTyxPQUNaLENBQUNpQixFQUFRSCxJQUFRLENBQ2YsR0FBTSxDQUFFLFFBQUFJLENBQVEsRUFBSUQsRUFDZCxDQUFFLFFBQUFFLEVBQVMsS0FBTUMsRUFBVyxPQUFBQyxDQUFPLEVBQUlQLEVBRXZDUSxFQUFnQkgsRUFBUSxPQUM1QixDQUFDQSxFQUFTSSxJQUFXLENBQ25CLEdBQU0sQ0FBRSxTQUFBQyxFQUFVLGdCQUFBQyxFQUFpQixLQUFNQyxFQUFZLFFBQUFoQyxFQUFTLFNBQUFpQyxDQUFTLEVBQUlKLEVBRXJFSyxFQUFVSixFQUFTLFdBQVcsR0FBRyxFQUNqQ0ssRUFBbUJELEVBQVVKLEVBQVMsTUFBTSxDQUFDLEVBQUlBLEVBRXZELE1BQU8sQ0FDTCxHQUFHTCxFQUNILENBQUNPLENBQVUsRUFBRyxDQUNaLFNBQVUsQ0FDUixHQUFJSSxFQUFrQ0QsQ0FBZ0IsR0FBSyxDQUN6RCxNQUFPbkMsRUFBUSxPQUFTLEVBQUksT0FBUyxLQUN2QyxFQUNBLFFBQUFrQyxFQUNBLFNBQVVILElBQW9CLGFBQzlCLEtBQU1HLEVBQVUsR0FBR0MsQ0FBZ0IsS0FBT0EsRUFDMUMsUUFBQW5DLEVBQ0EsT0FBUStCLENBQ1YsRUFDQSxXQUFZRixFQUFPLFNBQ25CLGVBQWdCQSxFQUFPLEdBQ3ZCLEtBQU1HLEVBQ04sU0FBQUMsRUFDQSxPQUFBTixFQUNBLE1BQU9ELEVBQ1AsU0FBVUcsRUFBTyxtQkFDakIsUUFBU0EsRUFBTyxrQkFDaEIsU0FBVUEsRUFBTyxrQkFDbkIsQ0FDRixDQUNGLEVBQ0EsQ0FBQyxDQUNILEVBRUEsT0FBSUwsRUFBUUcsQ0FBTSxJQUFNLFNBQ3RCSCxFQUFRRyxDQUFNLEVBQUksQ0FDaEIsS0FBTUEsRUFDTixPQUFRLENBQUMsQ0FDWCxHQUdGSCxFQUFRRyxDQUFNLEVBQUUsT0FBT0QsQ0FBUyxFQUFJLENBQ2xDLFFBQVNFLEVBQ1QsS0FBTUYsRUFDTixPQUFBQyxDQUNGLEVBRU9KLENBQ1QsRUFDQSxDQUNFLFFBQVMsQ0FBRSxPQUFRLENBQUUsT0FBUSxDQUFDLEVBQUcsS0FBTSxRQUFTLENBQUUsRUFDbEQsU0FBQWIsRUFDQSxnQkFBQTJCLEVBQ0EsTUFBQXZCLENBQ0YsQ0FDRixDQUNGLENBRUEsSUFBTXVCLEVBQWtCLENBQ3RCLElBQ0EsS0FDQSxJQUNBLEtBQ0EsSUFDQSxLQUNBLEtBQ0EsU0FDQSxPQUNBLFdBQ0EsUUFDQSxXQUNGLEVBS08sU0FBU0MsSUFBaUIsQ0FDL0IsSUFBTWhDLEVBQVNpQyxFQUFnQixFQUN6QixDQUFDLENBQUUsU0FBQTdCLENBQVMsQ0FBQyxFQUFJOEIsRUFBa0IsRUFHekMsT0FBTzdCLEVBQW9CLENBQUUsT0FBQUwsRUFBUSxTQUFBSSxFQUFVLE1BRmpDLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSyxVQUFXLENBRUssQ0FBQyxDQWN4RCxDTWhQQStCLElBRU8sU0FBU0MsSUFBdUMsQ0FDckQsT0FBT0MsRUFBUSxnQ0FBZ0MsQ0FDakQsQ0FHTyxTQUFTQyxHQUFlQyxFQUF5QixDQUN0RCxNQUFPLENBQ0wsV0FBWSxDQUFDQSxDQUFHLEVBQ2hCLElBQUssK0JBQ1AsQ0FDRiIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiUG9zdGdyZXNBZGFwdGVyIiwgIlBvc3RncmVzUXVlcnlDb21waWxlciIsICJnZXRJbnNlcnRRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJ0YWJsZSIsICJyb3dzIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1ucyIsICJidWlsZGVyIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImNvbHMiLCAiY29tcGlsZSIsICJhcHBseVRyYW5zZm9ybWF0aW9ucyIsICJnZXRTZWxlY3RRdWVyeSIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImZpbHRlciIsICJmaWx0ZXJFeHByZXNzaW9uIiwgImdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24iLCAiY291bnRRdWVyeSIsICJlYiIsICJzcWwiLCAicWIiLCAiaXRlbSIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0VXBkYXRlUXVlcnkiLCAiY2hhbmdlcyIsICJyb3ciLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJSRUdVTEFSX1RBQkxFX0tJTkQiLCAiVklFV19UQUJMRV9LSU5EIiwgIlRBQkxFX0tJTkRTIiwgImdldFRhYmxlc1F1ZXJ5IiwgInJlcXVpcmVtZW50cyIsICJjb21waWxlIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImV4Y2x1ZGVTeXN0ZW1UYWJsZXMiLCAiZWIiLCAianNvbkFycmF5RnJvbSIsICJqYiIsICJvbl9lYiIsICJzcWwiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJtb2NrVGltZXpvbmVRdWVyeSIsICJxYiIsICJjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgIm9wdGlvbnMiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGltZXpvbmVRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJ0aW1lem9uZUVycm9yIiwgInRpbWV6b25lcyIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJlcnJvciIsICJkZXRhaWxzIiwgInF1ZXJ5IiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJnZXRVcGRhdGVRdWVyeSIsICJyb3ciLCAiZ2V0RGVsZXRlUXVlcnkiLCAiYXJncyIsICJyZXN1bHQiLCAic2NoZW1hcyIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1uc1JlY29yZCIsICJjb2x1bW4iLCAiZGF0YXR5cGUiLCAiZGF0YXR5cGVfc2NoZW1hIiwgImNvbHVtbk5hbWUiLCAibnVsbGFibGUiLCAiaXNBcnJheSIsICJzdHJpcHBlZERhdGFUeXBlIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAibW9ja0ludHJvc3BlY3QiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldFBJRFF1ZXJ5IiwgImFzUXVlcnkiLCAiZ2V0Q2FuY2VsUXVlcnkiLCAicGlkIl0KfQo=
@@ -0,0 +1,10 @@
1
+ import * as ___react___ from 'react';
2
+ import * as ___react_dom___ from 'react-dom';
3
+
4
+ function require(mod) {
5
+ if (mod === 'react') return ___react___;
6
+ if (mod === 'react-dom') return ___react_dom___;
7
+ throw new Error(`Unknown module ${mod}`);
8
+ }
9
+ import{a as c}from"./chunk-OTK4ZF2W.js";import{a as w,b as q,c as B,d as k,e as R,f as L,g as I,h as T,i as u,j as O,k as j,n as S,p as _,q as D,t as N}from"./chunk-WHLVNWIR.js";import{e as l}from"./chunk-GDQBQ7MK.js";l();l();l();var C={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function F(t){if(!t)return"BLOB";let e=t.toUpperCase();return e.includes("INT")?"INTEGER":e.includes("TEXT")||e.includes("CHAR")||e.includes("CLOB")?"TEXT":e.includes("BLOB")?"BLOB":e.includes("REAL")||e.includes("FLOA")||e.includes("DOUB")?"REAL":"NUMERIC"}l();l();function g(t){return S({...t,Adapter:j,QueryCompiler:O})}function M(t,e){let{filter:a={after:"and",filters:[],kind:"FilterGroup"},pageIndex:r,pageSize:o,sortOrder:n,table:{columns:i,name:f}}=t,b=g(e),d=N(a.filters,i),m=b.selectFrom(f).where(d).select(s=>s.cast(s.fn.coalesce(s.fn.countAll(),u.lit(0)),"text").as("value"));return _(b.with("count",()=>m).selectFrom([f,"count"]).where(d).select(u.ref("count.value").as("__ps_count__")).select(Object.keys(i)).$call(s=>n.reduce((A,y)=>A.orderBy(y.column,y.direction),s)).limit(o).offset(u.lit(BigInt(r)*BigInt(o))))}function oe(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function P(t,e){let{rows:a,table:{columns:r,name:o}}=t,n=g(e);return _(n.deleteFrom(o).$call(D(a,r)).returning(Object.keys(r)).returning(Y().as("__ps_deleted_at__")))}function Y(){let t=T();return t.cast(t.cast(u`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}l();l();l();function U(t,e){let a=[];for(let{selection:r}of t.selections??[])if(R.is(r)&&k.is(r.column))a.push(h(r.column.column.name),Q(e,r.column.column.name));else if(k.is(r))a.push(h(r.column.name),Q(e,r.column.name));else if(q.is(r)&&w.is(r.alias))a.push(h(r.alias.name),Q(e,r.alias.name));else throw new Error("can't extract column names from the select query node");return a}function h(t){return new I(L.createImmediate(t))}function Q(t,e){return new I(R.create(k.create(e),B.create(t)))}function v(t){return u`(select coalesce(json_group_array(json_object(${u.join($(t.toOperationNode(),"agg"))})), '[]') from ${t} as agg)`}function $(t,e){try{return U(t,e)}catch{throw new Error("SQLite jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.")}}function X(t){return _(g(t).selectFrom(T().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",e=>e.onRef("ss.type","=","tl.type").onRef("ss.name","=","tl.name")).where("tl.type","in",["table","view"]).where("tl.schema","=","main").where("tl.name","not like","sqlite_%").select(["tl.name","ss.sql"]).select(e=>[v(e.selectFrom(e.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(e.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.name","txi.type as datatype","fkl.table as foreign_key_table","fkl.to as foreign_key_column"]).select(a=>[a("txi.hidden","in",[2,3]).as("computed"),a("txi.notnull","!=",0).as("nullable"),a("txi.pk","!=",0).as("pk")])).as("columns")]),{transformations:{columns:"json-parse"}})}function J(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",pk:1,computed:0,nullable:0,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"TEXT",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null}]},{name:"users",sql:"CREATE TABLE users (id UUID PRIMARY KEY, created_at TIMESTAMP, deleted_at TIMESTAMP, role varchar, name varchar, name_role text);",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"deleted_at",datatype:"TIMESTAMP",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"role",datatype:"varchar",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"varchar",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"name_role",datatype:"text",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null}]},{name:"composite_pk",sql:"CREATE TABLE composite_pk (id UUID, name TEXT, created_at timestamp, PRIMARY KEY (id, name));",columns:[{name:"id",datatype:"UUID",pk:1,computed:0,nullable:0,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"TEXT",pk:1,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",pk:0,computed:0,nullable:1,foreign_key_table:null,foreign_key_column:null}]}]}var E="main",G=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Le(t){let{executor:e,...a}=t;return{defaultSchema:E,async delete(r,o){try{let n=P(r,a),[i]=await e.execute(n,o);return i?c({error:i,query:n}):[null,{...r,query:n}]}catch(n){return c({error:n})}},insert(r,o){throw new Error("Method not implemented.")},async introspect(r){try{let o=X(t),[n,i]=await e.execute(o,r);return n?c({error:n,query:o}):[null,K({query:o,tables:i})]}catch(o){return c({error:o})}},async query(r,o){try{let n=M(r,a),[i,f]=await e.execute(n,o);return i?c({error:i,query:n}):[null,{filteredRowCount:f[0]?.__ps_count__||"0",rows:f,query:n}]}catch(n){return c({error:n})}},update(r,o){throw new Error("Method not implemented.")}}}function K(t){let{tables:e,query:a}=t;return{filterOperators:G,query:a,schemas:e.reduce((r,o)=>{let{columns:n,name:i,sql:f}=o,b=n.reduce((d,m)=>{let{datatype:s,foreign_key_column:A,name:y}=m,x=F(s);return d[y]={datatype:{...C[x],affinity:x,isArray:!1,isNative:!0,name:s,options:[],schema:E},fkColumn:A,fkSchema:A?E:null,fkTable:m.foreign_key_table,isComputed:!!m.computed,isInPrimaryKey:!!m.pk,name:y,nullable:!!m.nullable,schema:E,table:i},d},{});return r.main.tables[i]={columns:b,name:i,schema:"main"},r},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function Oe(){let t={parameters:[],sql:"<mocked>"},e=J();return K({query:t,tables:e})}export{M as a,oe as b,P as c,X as d,J as e,Le as f,Oe as g};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL2pzb24tb2JqZWN0LWFyZ3MuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgQWRhcHRlckRlbGV0ZVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyRXJyb3IsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSwgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRTZWxlY3RRdWVyeSB9IGZyb20gXCIuL2RtbFwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgU1FMSXRlQWRhcHRlclJlcXVpcmVtZW50cyA9IEFkYXB0ZXJSZXF1aXJlbWVudHM7XG5cbmNvbnN0IHNjaGVtYSA9IFwibWFpblwiO1xuXG5jb25zdCBmaWx0ZXJPcGVyYXRvcnMgPSBbXG4gIFwiPVwiLFxuICBcIiE9XCIsXG4gIFwiPlwiLFxuICBcIj49XCIsXG4gIFwiPFwiLFxuICBcIjw9XCIsXG4gIFwiaXNcIixcbiAgXCJpcyBub3RcIixcbiAgXCJsaWtlXCIsXG4gIFwibm90IGxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTUUxpdGVBZGFwdGVyKHJlcXVpcmVtZW50czogU1FMSXRlQWRhcHRlclJlcXVpcmVtZW50cyk6IEFkYXB0ZXIge1xuICBjb25zdCB7IGV4ZWN1dG9yLCAuLi5vdGhlclJlcXVpcmVtZW50cyB9ID0gcmVxdWlyZW1lbnRzO1xuXG4gIHJldHVybiB7XG4gICAgZGVmYXVsdFNjaGVtYTogc2NoZW1hLFxuXG4gICAgYXN5bmMgZGVsZXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICAvLyBUT0RPOiB1c2UgcmVzdWx0cyB0b28uXG4gICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IC4uLmRldGFpbHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5zZXJ0KF9kZXRhaWxzLCBfb3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfSxcblxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW3RhYmxlc0Vycm9yLCB0YWJsZXNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgcXVlcnk6IHRhYmxlc1F1ZXJ5LCB0YWJsZXMgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcXVlcnkoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgZmlsdGVyZWRSb3dDb3VudDogcmVzdWx0c1swXT8uX19wc19jb3VudF9fIHx8IFwiMFwiLCByb3dzOiByZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBwcm9wZXJseVxuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGUoX2RldGFpbHMsIF9vcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHtcbiAgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xuICBxdWVyeTogUXVlcnk7XG59KTogQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBjb25zdCB7IHRhYmxlcywgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyT3BlcmF0b3JzLFxuICAgIHF1ZXJ5OiB0YWJsZXNRdWVyeSxcbiAgICBzY2hlbWFzOiB0YWJsZXMucmVkdWNlKFxuICAgICAgKHNjaGVtYXMsIHRhYmxlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzcWw6IF9zcWwgfSA9IHRhYmxlO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSBgc3FsYCB0byBnZXQgZWFjaCBjb2x1bW4ncyBkZWZpbml0aW9uLlxuICAgICAgICAvLyB3ZSBjYW4gdXNlIGl0IHRvIGZpbmQgZW51bXMgb3IgYXV0byBpbmNyZW1lbnQgd2hlbiBub3QgaW50ZWdlciBwcmltYXJ5IGtleS5cblxuICAgICAgICBjb25zdCBjb2x1bW5zUmVjb3JkID0gY29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgKGNvbHVtbnMsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhdHlwZSwgZm9yZWlnbl9rZXlfY29sdW1uLCBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgIGNvbnN0IGFmZmluaXR5ID0gZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkoZGF0YXR5cGUpO1xuXG4gICAgICAgICAgICBjb2x1bW5zW2NvbHVtbk5hbWVdID0ge1xuICAgICAgICAgICAgICBkYXRhdHlwZToge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHdvcnRoIGV4cGxvcmluZyBzdGlsbCB2aWJpbmcgd2l0aCB0aGUgZGVjbGFyZWQgZGF0YSB0eXBlIGZvciBzdHVmZiBsaWtlIGRhdGVzIGluIHRoZSBmdXR1cmUuXG4gICAgICAgICAgICAgICAgLi4uU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBW2FmZmluaXR5XSxcbiAgICAgICAgICAgICAgICBhZmZpbml0eSxcbiAgICAgICAgICAgICAgICBpc0FycmF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc05hdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBkYXRhdHlwZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZrQ29sdW1uOiBmb3JlaWduX2tleV9jb2x1bW4sXG4gICAgICAgICAgICAgIGZrU2NoZW1hOiBmb3JlaWduX2tleV9jb2x1bW4gPyBzY2hlbWEgOiBudWxsLFxuICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZm9yZWlnbl9rZXlfdGFibGUsXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6IEJvb2xlYW4oY29sdW1uLmNvbXB1dGVkKSxcbiAgICAgICAgICAgICAgaXNJblByaW1hcnlLZXk6IEJvb2xlYW4oY29sdW1uLnBrKSxcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgbnVsbGFibGU6IEJvb2xlYW4oY29sdW1uLm51bGxhYmxlKSxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICAgICk7XG5cbiAgICAgICAgc2NoZW1hcy5tYWluIS50YWJsZXNbdGFibGVOYW1lXSA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zUmVjb3JkLFxuICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgICBzY2hlbWE6IFwibWFpblwiLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzY2hlbWFzO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWFpbjogeyB0YWJsZXM6IHt9LCBuYW1lOiBcIm1haW5cIiB9LFxuICAgICAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHRbXCJzY2hlbWFzXCJdIGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0W1wic2NoZW1hc1wiXSxcbiAgICApLFxuICAgIHRpbWV6b25lOiBcIlVUQ1wiLFxuICB9O1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ludHJvc3BlY3QoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0geyBwYXJhbWV0ZXJzOiBbXSwgc3FsOiBcIjxtb2NrZWQ+XCIgfSBhcyBRdWVyeTtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeSwgdGFibGVzIH0pIGFzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCwgbm8gbmVlZCBnbyBvdmVyYm9hcmQuXG4gICAgc2NoZW1hczoge1xuICAgICAgbWFpbjoge1xuICAgICAgICBuYW1lOiBcIm1haW5cIjtcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHN0cmluZztcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU1FMaXRlQWZmaW5pdHkgPSBcIkJMT0JcIiB8IFwiSU5URUdFUlwiIHwgXCJOVUxMXCIgfCBcIk5VTUVSSUNcIiB8IFwiUkVBTFwiIHwgXCJURVhUXCI7XG5cbmV4cG9ydCBjb25zdCBTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEE6IFJlY29yZDxTUUxpdGVBZmZpbml0eSwgUGljazxEYXRhVHlwZSwgXCJncm91cFwiPj4gPSB7XG4gIEJMT0I6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgSU5URUdFUjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgTlVMTDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBOVU1FUklDOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBSRUFMOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBURVhUOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG59O1xuXG4vKipcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9kYXRhdHlwZTMuaHRtbCNkZXRlcm1pbmF0aW9uX29mX2NvbHVtbl9hZmZpbml0eVxuICpcbiAqIERPIE5PVCBDSEFOR0UgVEhFIE9SREVSIE9GIFRIRSBDSEVDS1MgSU4gVEhJUyBGVU5DVElPTiFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkFmZmluaXR5KGRlY2xhcmVkRGF0YVR5cGU6IHN0cmluZyB8IG51bGwpOiBTUUxpdGVBZmZpbml0eSB7XG4gIGlmICghZGVjbGFyZWREYXRhVHlwZSkge1xuICAgIHJldHVybiBcIkJMT0JcIjtcbiAgfVxuXG4gIGNvbnN0IHVwcGVyVHlwZSA9IGRlY2xhcmVkRGF0YVR5cGUudG9VcHBlckNhc2UoKTtcblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiSU5UXCIpKSB7XG4gICAgcmV0dXJuIFwiSU5URUdFUlwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIlRFWFRcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0hBUlwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJDTE9CXCIpKSB7XG4gICAgcmV0dXJuIFwiVEVYVFwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIkJMT0JcIikpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBpZiAodXBwZXJUeXBlLmluY2x1ZGVzKFwiUkVBTFwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJGTE9BXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkRPVUJcIikpIHtcbiAgICByZXR1cm4gXCJSRUFMXCI7XG4gIH1cblxuICByZXR1cm4gXCJOVU1FUklDXCI7XG59XG4iLCAiaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIHR5cGUgSW5mZXJSZXN1bHQsIHR5cGUgUmVmZXJlbmNlRXhwcmVzc2lvbiwgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJEZWxldGVEZXRhaWxzLCBBZGFwdGVyUXVlcnlEZXRhaWxzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLCB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldFNRTGl0ZUJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5pbXBvcnQgeyBtb2NrVGFibGVzUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc2VsZWN0cyBhbGwgY29sdW1ucyBmcm9tIGEgdGFibGUgd2l0aCBhbiB1bmJvdW5kIHJvdyBjb3VudCBhcyBgX19wc19jb3VudF9fYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXIgPSB7IGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSwga2luZDogXCJGaWx0ZXJHcm91cFwiIH0sXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IGZpbHRlckV4cHJlc3Npb24gPSBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKGZpbHRlci5maWx0ZXJzLCBjb2x1bW5zKTtcblxuICBjb25zdCBjb3VudFF1ZXJ5ID0gYnVpbGRlclxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoXCJ2YWx1ZVwiKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoXCJjb3VudFwiLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20oW3RhYmxlTmFtZSwgXCJjb3VudFwiXSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBzcWxcbiAgICAgICAgICAucmVmPEJpZ0ludFN0cmluZz4oXG4gICAgICAgICAgICBcImNvdW50LnZhbHVlXCIgc2F0aXNmaWVzIFJlZmVyZW5jZUV4cHJlc3Npb248eyBjb3VudDogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSwgXCJjb3VudFwiPixcbiAgICAgICAgICApXG4gICAgICAgICAgLmFzKFwiX19wc19jb3VudF9fXCIpLFxuICAgICAgKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC4kY2FsbCgocWIpID0+IHNvcnRPcmRlci5yZWR1Y2UoKHFiLCBpdGVtKSA9PiBxYi5vcmRlckJ5KGl0ZW0uY29sdW1uLCBpdGVtLmRpcmVjdGlvbiksIHFiKSlcbiAgICAgIC5saW1pdChwYWdlU2l6ZSlcbiAgICAgIC8vIHdlJ3JlIGluamVjdGluZyB0aGUgb2Zmc2V0IHZhbHVlIGhlcmUgdG8gYXZvaWQgc2VyaWFsaXphdGlvbiBjb21wbGV4aXR5IChgYmlnaW50YCBpcyBhIG5vLWdvIGZvciBgSlNPTi5zdHJpbmdpZnlgKS5cbiAgICAgIC5vZmZzZXQoc3FsLmxpdChCaWdJbnQocGFnZUluZGV4KSAqIEJpZ0ludChwYWdlU2l6ZSkpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tTZWxlY3RRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjE6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMSxcbiAgICAgIG5hbWU6IFwiSm9obiBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcImFkbWluXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSm9ubiBEb2UgLSBhZG1pblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIwOjU2OjEyLjM0NVpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDIsXG4gICAgICBuYW1lOiBcIkphbmUgRG9lXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgICAgcm9sZTogXCJwb3dlcnVzZXJcIixcbiAgICAgIG5hbWVfcm9sZTogXCJKYW5lIERvZSAtIHBvd2VydXNlclwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gc2V0IG9mIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuZGVsZXRlRnJvbSh0YWJsZU5hbWUpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX2RlbGV0ZWRfYXRfX1wiKSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKSB7XG4gIGNvbnN0IGViID0gZXhwcmVzc2lvbkJ1aWxkZXIoKTtcblxuICByZXR1cm4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmNhc3Qoc3FsYChqdWxpYW5kYXkoJ25vdycpIC0gMjQ0MDU4Ny41KSAqIDg2NDAwMDAwLjBgLCBcImludGVnZXJcIiksIFwidGV4dFwiKTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIEt5c2VseSwgU3FsaXRlQWRhcHRlciwgU3FsaXRlUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0U1FMaXRlQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXI8RGF0YWJhc2U+KHtcbiAgICAuLi5yZXF1aXJlbWVudHMsXG4gICAgQWRhcHRlcjogU3FsaXRlQWRhcHRlcixcbiAgICBRdWVyeUNvbXBpbGVyOiBTcWxpdGVRdWVyeUNvbXBpbGVyLFxuICB9KTtcbn1cbiIsICIvKipcbiAqIFNRTGl0ZSBpbnRyb3NwZWN0aW9uIHF1ZXJpZXMgdG8gYmUgdXNlZCBieSB0aGUgU1FMaXRlIGFkYXB0ZXIncyBpbnRyb3NwZWN0IG1ldGhvZC5cbiAqIEBtb2R1bGUgc3FsaXRlLWNvcmUvaW50cm9zcGVjdGlvblxuICpcbiAqIFJlZmVyZW5jZXM6XG4gKiBodHRwczovL3NxbGl0ZS5vcmcvcHJhZ21hLmh0bWxcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9zY2hlbWF0YWIuaHRtbFxuICovXG5cbmltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gXCJreXNlbHkvaGVscGVycy9zcWxpdGVcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCB0eXBlIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRTUUxpdGVCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKiogdGhlIG1haW4gc3lzdGVtIHRhYmxlICovXG4gIHNxbGl0ZV9zY2hlbWE6IHtcbiAgICAvKiogb2JqZWN0IG5hbWUgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHBhZ2UgbnVtYmVyIGluIHJvb3QgaW5kZXggd2hlbiBvYmplY3QgaXMgYSB0YWJsZS4gKi9cbiAgICByb290cGFnZTogbnVtYmVyO1xuICAgIC8qKiBzcWwgc3RhdGVtZW50IHRoYXQgY2FuIHJlY3JlYXRlIHRoZSBvYmplY3QuIG51bGwgd2hlbiBpbnRlcm5hbCBpbmRleCBvYmplY3QuICovXG4gICAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiByZWxhdGVkIHRhYmxlL3ZpZXcgbmFtZSB3aGVuIG9iamVjdCBpcyBhbiBpbmRleC90cmlnZ2VyLiAqL1xuICAgIHRibF9uYW1lOiBzdHJpbmc7XG4gICAgLyoqIG9iamVjdCB0eXBlICovXG4gICAgdHlwZTogXCJpbmRleFwiIHwgXCJ0YWJsZVwiIHwgXCJ0cmlnZ2VyXCIgfCBcInZpZXdcIjtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV90YWJsZV9saXN0KHRhYmxlTmFtZT8pYC5cbiAqL1xuaW50ZXJmYWNlIFByYWdtYVRhYmxlTGlzdCB7XG4gIC8qKiBvYmplY3QgbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBzY2hlbWEgbmFtZSAqL1xuICBzY2hlbWE6IFwibWFpblwiIHwgXCJ0ZW1wXCI7XG4gIC8qKiBvYmplY3QgdHlwZSAqL1xuICB0eXBlOiBcInNoYWRvd1wiIHwgXCJ0YWJsZVwiIHwgXCJ2aWV3XCIgfCBcInZpcnR1YWxcIjtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV90YWJsZV94aW5mbyh0YWJsZU5hbWUpYC5cbiAqL1xuaW50ZXJmYWNlIFByYWdtYVRhYmxlWEluZm8ge1xuICAvKiogXCJyYW5rIHdpdGhpbiBjdXJyZW50IHJlc3VsdCBzZXRcIiAqL1xuICBjaWQ6IG51bWJlcjtcbiAgLyoqIGRlZmF1bHQgdmFsdWUgKi9cbiAgZGZsdF92YWx1ZTogdW5rbm93bjtcbiAgLyoqIDAgLSBub3JtYWwsIDEgLSBoaWRkZW4sIDItMyAtIGR5bmFtaWMvc3RvcmVkIGdlbmVyYXRlZCAqL1xuICBoaWRkZW46IDAgfCAxIHwgMiB8IDM7XG4gIC8qKiBjb2x1bW4gbmFtZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiB3aGV0aGVyIHRoZSBjb2x1bW4gY2FuIGJlIG51bGwgKi9cbiAgbm90bnVsbDogMCB8IDE7XG4gIC8qKiAwIGlmIG5vdCBwYXJ0IG9mIHRoZSBwcmltYXJ5IGtleSwgb3RoZXJ3aXNlIHRoZSAxLWJhc2VkIG9yZGluYWwgbnVtYmVyIG9mIHRoZSBjb2x1bW4gaW4gdGhlIHByaW1hcnkga2V5ICovXG4gIHBrOiBudW1iZXI7XG4gIC8qKiBkYXRhIHR5cGUgKi9cbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX2ZvcmVpZ25fa2V5X2xpc3QodGFibGVOYW1lKWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFGb3JlaWduS2V5TGlzdCB7XG4gIC8qKiBjb2x1bW4gbmFtZSAqL1xuICBmcm9tOiBzdHJpbmc7XG4gIC8qKiBvcmRpbmFsIG51bWJlciBvZiBjb2x1bW4gd2l0aGluIHRoZSBmb3JlaWduIGtleSAqL1xuICBzZXE6IG51bWJlcjtcbiAgLyoqIGZvcmVpZ24gdGFibGUgbmFtZSAqL1xuICB0YWJsZTogc3RyaW5nO1xuICAvKiogY29sdW1uIG5hbWUgaW4gdGhlIGZvcmVpZ24gdGFibGUgKi9cbiAgdG86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgZ2V0U1FMaXRlQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oZXhwcmVzc2lvbkJ1aWxkZXIoKS5mbjxQcmFnbWFUYWJsZUxpc3Q+KFwicHJhZ21hX3RhYmxlX2xpc3RcIiwgW10pLmFzKFwidGxcIikpXG4gICAgICAubGVmdEpvaW4oXCJzcWxpdGVfc2NoZW1hIGFzIHNzXCIsIChqYikgPT4gamIub25SZWYoXCJzcy50eXBlXCIsIFwiPVwiLCBcInRsLnR5cGVcIikub25SZWYoXCJzcy5uYW1lXCIsIFwiPVwiLCBcInRsLm5hbWVcIikpXG4gICAgICAud2hlcmUoXCJ0bC50eXBlXCIsIFwiaW5cIiwgW1widGFibGVcIiwgXCJ2aWV3XCJdKVxuICAgICAgLy8gZXhjbHVkZSB0ZW1wb3JhcnkgdGFibGVzL3ZpZXdzXG4gICAgICAud2hlcmUoXCJ0bC5zY2hlbWFcIiwgXCI9XCIsIFwibWFpblwiKVxuICAgICAgLy8gZXhjbHVkZSBzeXN0ZW0gdGFibGVzL3ZpZXdzXG4gICAgICAud2hlcmUoXCJ0bC5uYW1lXCIsIFwibm90IGxpa2VcIiwgXCJzcWxpdGVfJVwiKVxuICAgICAgLnNlbGVjdChbXCJ0bC5uYW1lXCIsIFwic3Muc3FsXCJdKVxuICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAganNvbkFycmF5RnJvbShcbiAgICAgICAgICBlYlxuICAgICAgICAgICAgLnNlbGVjdEZyb20oZWIuZm48UHJhZ21hVGFibGVYSW5mbz4oXCJwcmFnbWFfdGFibGVfeGluZm9cIiwgW1widGwubmFtZVwiXSkuYXMoXCJ0eGlcIikpXG4gICAgICAgICAgICAubGVmdEpvaW4oXG4gICAgICAgICAgICAgIGViLmZuPFByYWdtYUZvcmVpZ25LZXlMaXN0PihcInByYWdtYV9mb3JlaWduX2tleV9saXN0XCIsIFtcInRsLm5hbWVcIl0pLmFzKFwiZmtsXCIpLFxuICAgICAgICAgICAgICBcImZrbC5mcm9tXCIsXG4gICAgICAgICAgICAgIFwidHhpLm5hbWVcIixcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgaGlkZGVuIGNvbHVtbnNcbiAgICAgICAgICAgIC53aGVyZShcInR4aS5oaWRkZW5cIiwgXCIhPVwiLCAxKVxuICAgICAgICAgICAgLnNlbGVjdChbXG4gICAgICAgICAgICAgIFwidHhpLm5hbWVcIixcbiAgICAgICAgICAgICAgXCJ0eGkudHlwZSBhcyBkYXRhdHlwZVwiLFxuICAgICAgICAgICAgICBcImZrbC50YWJsZSBhcyBmb3JlaWduX2tleV90YWJsZVwiLFxuICAgICAgICAgICAgICBcImZrbC50byBhcyBmb3JlaWduX2tleV9jb2x1bW5cIixcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICAgICAgICBlYihcInR4aS5oaWRkZW5cIiwgXCJpblwiLCBbMiwgM10pLmFzKFwiY29tcHV0ZWRcIiksXG4gICAgICAgICAgICAgIGViKFwidHhpLm5vdG51bGxcIiwgXCIhPVwiLCAwKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgICBlYihcInR4aS5wa1wiLCBcIiE9XCIsIDApLmFzKFwicGtcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICBdKSxcbiAgICB7IHRyYW5zZm9ybWF0aW9uczogeyBjb2x1bW5zOiBcImpzb24tcGFyc2VcIiB9IH0sXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGFibGVzUXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogXCJhbmltYWxzXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIGFuaW1hbHMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVYVCk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiSU5URUdFUlwiLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSB1c2VycyAoaWQgVVVJRCBQUklNQVJZIEtFWSwgY3JlYXRlZF9hdCBUSU1FU1RBTVAsIGRlbGV0ZWRfYXQgVElNRVNUQU1QLCByb2xlIHZhcmNoYXIsIG5hbWUgdmFyY2hhciwgbmFtZV9yb2xlIHRleHQpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlVVSURcIixcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJUSU1FU1RBTVBcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRlbGV0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJUSU1FU1RBTVBcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhclwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZV9yb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbXBvc2l0ZV9wa1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSBjb21wb3NpdGVfcGsgKGlkIFVVSUQsIG5hbWUgVEVYVCwgY3JlYXRlZF9hdCB0aW1lc3RhbXAsIFBSSU1BUlkgS0VZIChpZCwgbmFtZSkpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlVVSURcIixcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJURVhUXCIsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zcWxpdGUuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuaW1wb3J0IHsgZ2V0SnNvbk9iamVjdEFyZ3MgfSBmcm9tICcuLi91dGlsL2pzb24tb2JqZWN0LWFyZ3MuanMnO1xuLyoqXG4gKiBBIFNRTGl0ZSBoZWxwZXIgZm9yIGFnZ3JlZ2F0aW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gYXJyYXkuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25BcnJheUZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC5vcmRlckJ5KCdwZXQubmFtZScpXG4gKiAgICAgKS5hcygncGV0cycpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0ucGV0X2lkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBjb2FsZXNjZShqc29uX2dyb3VwX2FycmF5KGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBcImFnZ1wiLlwicGV0X2lkXCIsXG4gKiAgICAgJ25hbWUnLCBcImFnZ1wiLlwibmFtZVwiXG4gKiAgICkpLCAnW10nKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBvcmRlciBieSBcInBldFwiLlwibmFtZVwiXG4gKiAgICkgYXMgXCJhZ2dcIlxuICogKSBhcyBcInBldHNcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY29hbGVzY2UoanNvbl9ncm91cF9hcnJheShqc29uX29iamVjdCgke3NxbC5qb2luKGdldFNxbGl0ZUpzb25PYmplY3RBcmdzKGV4cHIudG9PcGVyYXRpb25Ob2RlKCksICdhZ2cnKSl9KSksICdbXScpIGZyb20gJHtleHByfSBhcyBhZ2cpYDtcbn1cbi8qKlxuICogQSBTUUxpdGUgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9zcWxpdGUnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5wZXRfaWRcbiAqIHJlc3VsdFswXT8uZmF2b3JpdGVfcGV0Py5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBcIm9ialwiLlwicGV0X2lkXCIsXG4gKiAgICAgJ25hbWUnLCBcIm9ialwiLlwibmFtZVwiXG4gKiAgICkgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgYW5kIFwicGV0XCIuXCJpc19mYXZvcml0ZVwiID0gP1xuICogICApIGFzIG9ialxuICogKSBhcyBcImZhdm9yaXRlX3BldFwiXG4gKiBmcm9tIFwicGVyc29uXCI7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ29iaicpKX0pIGZyb20gJHtleHByfSBhcyBvYmopYDtcbn1cbi8qKlxuICogVGhlIFNRTGl0ZSBganNvbl9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIG9ubHkgd29ya3MgY29ycmVjdGx5IGlmIHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYC5cbiAqIE90aGVyd2lzZSB0aGUgbmVzdGVkIHNlbGVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBhcyBKU09OIHN0cmluZ3MuXG4gKlxuICogVGhlIHBsdWdpbiBjYW4gYmUgaW5zdGFsbGVkIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHsgS3lzZWx5LCBQYXJzZUpTT05SZXN1bHRzUGx1Z2luLCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKVxuICogICB9KSxcbiAqICAgcGx1Z2luczogW25ldyBQYXJzZUpTT05SZXN1bHRzUGx1Z2luKCldXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB7IGpzb25CdWlsZE9iamVjdCB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogc3FsPHN0cmluZz5gZmlyc3RfbmFtZSB8fFx1MDBBMCcgJyB8fCBsYXN0X25hbWVgXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwganNvbl9vYmplY3QoXG4gKiAgICdmaXJzdCcsIGZpcnN0X25hbWUsXG4gKiAgICdsYXN0JywgbGFzdF9uYW1lLFxuICogICAnZnVsbCcsIFwiZmlyc3RfbmFtZVwiIHx8ICcgJyB8fCBcImxhc3RfbmFtZVwiXG4gKiApIGFzIFwibmFtZVwiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkJ1aWxkT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBzcWwgYGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oT2JqZWN0LmtleXMob2JqKS5mbGF0TWFwKChrKSA9PiBbc3FsLmxpdChrKSwgb2JqW2tdXSkpfSlgO1xufVxuZnVuY3Rpb24gZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0SnNvbk9iamVjdEFyZ3Mobm9kZSwgdGFibGUpO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU1FMaXRlIGpzb25BcnJheUZyb20gYW5kIGpzb25PYmplY3RGcm9tIGZ1bmN0aW9ucyBjYW4gb25seSBoYW5kbGUgZXhwbGljaXQgc2VsZWN0aW9ucyBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIGpzb25fb2JqZWN0IGZ1bmN0aW9uLiBzZWxlY3RBbGwoKSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc3VicXVlcnkuJyk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9qc29uLW9iamVjdC1hcmdzLmQudHNcIiAvPlxuaW1wb3J0IHsgRXhwcmVzc2lvbldyYXBwZXIgfSBmcm9tICcuLi9leHByZXNzaW9uL2V4cHJlc3Npb24td3JhcHBlci5qcyc7XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IENvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2VOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmVmZXJlbmNlLW5vZGUuanMnO1xuaW1wb3J0IHsgVGFibGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS92YWx1ZS1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHsgc2VsZWN0aW9uOiBzIH0gb2Ygbm9kZS5zZWxlY3Rpb25zID8/IFtdKSB7XG4gICAgICAgIGlmIChSZWZlcmVuY2VOb2RlLmlzKHMpICYmIENvbHVtbk5vZGUuaXMocy5jb2x1bW4pKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goY29sTmFtZShzLmNvbHVtbi5jb2x1bW4ubmFtZSksIGNvbFJlZih0YWJsZSwgcy5jb2x1bW4uY29sdW1uLm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChDb2x1bW5Ob2RlLmlzKHMpKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goY29sTmFtZShzLmNvbHVtbi5uYW1lKSwgY29sUmVmKHRhYmxlLCBzLmNvbHVtbi5uYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQWxpYXNOb2RlLmlzKHMpICYmIElkZW50aWZpZXJOb2RlLmlzKHMuYWxpYXMpKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goY29sTmFtZShzLmFsaWFzLm5hbWUpLCBjb2xSZWYodGFibGUsIHMuYWxpYXMubmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBleHRyYWN0IGNvbHVtbiBuYW1lcyBmcm9tIHRoZSBzZWxlY3QgcXVlcnkgbm9kZWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuZnVuY3Rpb24gY29sTmFtZShjb2wpIHtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUoY29sKSk7XG59XG5mdW5jdGlvbiBjb2xSZWYodGFibGUsIGNvbCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoUmVmZXJlbmNlTm9kZS5jcmVhdGUoQ29sdW1uTm9kZS5jcmVhdGUoY29sKSwgVGFibGVOb2RlLmNyZWF0ZSh0YWJsZSkpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OzBOQUFBQSxJQ0FBQyxJQ0FBQyxJQUlPLElBQU1DLEVBQStFLENBQzFGLEtBQU0sQ0FDSixNQUFPLEtBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sS0FDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFNBQ1QsRUFDQSxLQUFNLENBQ0osTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sUUFDVCxDQUNG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QUFNSCxFQUNOLFFBQVMsQ0FBQyxFQUNWLE9BQUE3QixDQUNGLEVBQ0EsU0FBVThCLEVBQ1YsU0FBVUEsRUFBcUI5QixFQUFTLEtBQ3hDLFFBQVM0QixFQUFPLGtCQUNoQixXQUFZLEVBQVFBLEVBQU8sU0FDM0IsZUFBZ0IsRUFBUUEsRUFBTyxHQUMvQixLQUFNRyxFQUNOLFNBQVUsRUFBUUgsRUFBTyxTQUN6QixPQUFBNUIsRUFDQSxNQUFPeUIsQ0FDVCxFQUVPRCxDQUNULEVBQ0EsQ0FBQyxDQUNILEVBRUEsT0FBQUYsRUFBUSxLQUFNLE9BQU9HLENBQVMsRUFBSSxDQUNoQyxRQUFTRSxFQUNULEtBQU1GLEVBQ04sT0FBUSxNQUNWLEVBRU9ILENBQ1QsRUFDQSxDQUNFLEtBQU0sQ0FBRSxPQUFRLENBQUMsRUFBRyxLQUFNLE1BQU8sQ0FDbkMsQ0FDRixFQUNBLFNBQVUsS0FDWixDQUNGLENBS08sU0FBU2EsSUFBaUIsQ0FDL0IsSUFBTTNCLEVBQVEsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFLLFVBQVcsRUFDMUNTLEVBQVNtQixFQUFnQixFQUUvQixPQUFPbEIsRUFBb0IsQ0FBRSxNQUFBVixFQUFPLE9BQUFTLENBQU8sQ0FBQyxDQWM5QyIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEEiLCAiZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkiLCAiZGVjbGFyZWREYXRhVHlwZSIsICJ1cHBlclR5cGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJTcWxpdGVBZGFwdGVyIiwgIlNxbGl0ZVF1ZXJ5Q29tcGlsZXIiLCAiZ2V0U2VsZWN0UXVlcnkiLCAiZGV0YWlscyIsICJyZXF1aXJlbWVudHMiLCAiZmlsdGVyIiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0T3JkZXIiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAiYnVpbGRlciIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJjb21waWxlIiwgInFiIiwgIml0ZW0iLCAibW9ja1NlbGVjdFF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgInJvd3MiLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcyIsICJleHByZXNzaW9uQnVpbGRlciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRKc29uT2JqZWN0QXJncyIsICJub2RlIiwgInRhYmxlIiwgImFyZ3MiLCAicyIsICJSZWZlcmVuY2VOb2RlIiwgIkNvbHVtbk5vZGUiLCAiY29sTmFtZSIsICJjb2xSZWYiLCAiQWxpYXNOb2RlIiwgIklkZW50aWZpZXJOb2RlIiwgImNvbCIsICJFeHByZXNzaW9uV3JhcHBlciIsICJWYWx1ZU5vZGUiLCAiVGFibGVOb2RlIiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImpiIiwgImViIiwgImpzb25BcnJheUZyb20iLCAibW9ja1RhYmxlc1F1ZXJ5IiwgInNjaGVtYSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAiY3JlYXRlU1FMaXRlQWRhcHRlciIsICJyZXF1aXJlbWVudHMiLCAiZXhlY3V0b3IiLCAib3RoZXJSZXF1aXJlbWVudHMiLCAiZGV0YWlscyIsICJvcHRpb25zIiwgInF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgImVycm9yIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJfZGV0YWlscyIsICJfb3B0aW9ucyIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgImFyZ3MiLCAic2NoZW1hcyIsICJ0YWJsZSIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJfc3FsIiwgImNvbHVtbnNSZWNvcmQiLCAiY29sdW1uIiwgImRhdGF0eXBlIiwgImZvcmVpZ25fa2V5X2NvbHVtbiIsICJjb2x1bW5OYW1lIiwgImFmZmluaXR5IiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiXQp9Cg==
@@ -1,4 +1,4 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CVwmrqt5.cjs';
1
+ import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-QHiosBWl.cjs';
2
2
  import 'kysely';
3
3
 
4
4
  declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
@@ -1,4 +1,4 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CVwmrqt5.js';
1
+ import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-QHiosBWl.js';
2
2
  import 'kysely';
3
3
 
4
4
  declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
@@ -1,4 +1,4 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CVwmrqt5.cjs';
1
+ import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-QHiosBWl.cjs';
2
2
  import 'kysely';
3
3
 
4
4
  interface StudioBFFClientProps {
@@ -1,4 +1,4 @@
1
- import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CVwmrqt5.js';
1
+ import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-QHiosBWl.js';
2
2
  import 'kysely';
3
3
 
4
4
  interface StudioBFFClientProps {
@@ -1,2 +1,2 @@
1
- export { H as AbortError, A as Adapter, k as AdapterBaseOptions, i as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, f as AdapterError, g as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, e as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, d as AdapterRequirements, h as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-CVwmrqt5.cjs';
1
+ export { H as AbortError, A as Adapter, k as AdapterBaseOptions, f as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, g as AdapterError, h as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, e as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, d as AdapterRequirements, i as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-QHiosBWl.cjs';
2
2
  import 'kysely';
@@ -1,2 +1,2 @@
1
- export { H as AbortError, A as Adapter, k as AdapterBaseOptions, i as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, f as AdapterError, g as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, e as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, d as AdapterRequirements, h as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-CVwmrqt5.js';
1
+ export { H as AbortError, A as Adapter, k as AdapterBaseOptions, f as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, g as AdapterError, h as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, e as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, d as AdapterRequirements, i as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-QHiosBWl.js';
2
2
  import 'kysely';