@tokmizer/plugin 0.9.70 → 0.9.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/dist/bin/tkr-agent-hook.js +13 -13
- package/dist/bin/tkr-codex-hook.js +76 -76
- package/dist/bin/tkr-copilot-hook.js +12 -12
- package/dist/bin/tkr-crush-hook.js +12 -12
- package/dist/bin/tkr-cursor-hook.js +12 -12
- package/dist/bin/tkr-daemon.js +136 -133
- package/dist/bin/tkr-droid-hook.js +12 -12
- package/dist/bin/tkr-exec +0 -0
- package/dist/bin/tkr-exec.js +85 -81
- package/dist/bin/tkr-gemini-hook.js +12 -12
- package/dist/bin/tkr-grok-hook.js +12 -12
- package/dist/bin/tkr-junie-hook.js +12 -12
- package/dist/bin/tkr-processor.js +105 -102
- package/dist/bin/tkr-qwen-hook.js +12 -12
- package/dist/bin/tkr-shim.js +86 -82
- package/dist/bin/tkr-trae-hook.js +12 -12
- package/dist/bin/tkr-zcode-hook.js +12 -12
- package/dist/bin/tkr.js +253 -253
- package/dist/hooks-host/post-tool-use.js +99 -96
- package/dist/hooks-host/pre-tool-use.js +13 -13
- package/dist/hooks-host/reducer-stop.js +25 -25
- package/dist/hooks-host/session-recap.js +5 -5
- package/dist/index.js +96 -96
- package/dist/native/manifest.json +12 -12
- package/dist/native/single.json +12 -12
- package/dist/native/tkr-exec-darwin-arm64 +0 -0
- package/dist/native/tkr-exec-darwin-x64 +0 -0
- package/dist/native/tkr-exec-linux-arm64 +0 -0
- package/dist/native/tkr-exec-linux-x64 +0 -0
- package/dist/native/tkr-exec-win32-arm64.exe +0 -0
- package/dist/native/tkr-exec-win32-x64.exe +0 -0
- package/package.json +7 -7
package/dist/bin/tkr.js
CHANGED
|
@@ -1,165 +1,165 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __tkrCreateRequire } from "node:module"; const require = __tkrCreateRequire(import.meta.url);
|
|
3
|
-
var Kx=Object.create;var ac=Object.defineProperty;var Vx=Object.getOwnPropertyDescriptor;var Wx=Object.getOwnPropertyNames;var qx=Object.getPrototypeOf,Yx=Object.prototype.hasOwnProperty;var Ft=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var k=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var He=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}},j=(e,t)=>{for(var n in t)ac(e,n,{get:t[n],enumerable:!0})},Xx=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Wx(t))!Yx.call(e,o)&&o!==n&&ac(e,o,{get:()=>t[o],enumerable:!(r=Vx(t,o))||r.enumerable});return e};var Qx=(e,t,n)=>(n=e!=null?Kx(qx(e)):{},Xx(t||!e||!e.__esModule?ac(n,"default",{value:e,enumerable:!0}):n,e));var H,lc,_,lt,uo=k(()=>{(function(e){e.assertEqual=o=>{};function t(o){}e.assertIs=t;function n(o){throw new Error}e.assertNever=n,e.arrayToEnum=o=>{let s={};for(let i of o)s[i]=i;return s},e.getValidEnumValues=o=>{let s=e.objectKeys(o).filter(a=>typeof o[o[a]]!="number"),i={};for(let a of s)i[a]=o[a];return e.objectValues(i)},e.objectValues=o=>e.objectKeys(o).map(function(s){return o[s]}),e.objectKeys=typeof Object.keys=="function"?o=>Object.keys(o):o=>{let s=[];for(let i in o)Object.prototype.hasOwnProperty.call(o,i)&&s.push(i);return s},e.find=(o,s)=>{for(let i of o)if(s(i))return i},e.isInteger=typeof Number.isInteger=="function"?o=>Number.isInteger(o):o=>typeof o=="number"&&Number.isFinite(o)&&Math.floor(o)===o;function r(o,s=" | "){return o.map(i=>typeof i=="string"?`'${i}'`:i).join(s)}e.joinValues=r,e.jsonStringifyReplacer=(o,s)=>typeof s=="bigint"?s.toString():s})(H||(H={}));(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(lc||(lc={}));_=H.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),lt=e=>{switch(typeof e){case"undefined":return _.undefined;case"string":return _.string;case"number":return Number.isNaN(e)?_.nan:_.number;case"boolean":return _.boolean;case"function":return _.function;case"bigint":return _.bigint;case"symbol":return _.symbol;case"object":return Array.isArray(e)?_.array:e===null?_.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?_.promise:typeof Map<"u"&&e instanceof Map?_.map:typeof Set<"u"&&e instanceof Set?_.set:typeof Date<"u"&&e instanceof Date?_.date:_.object;default:return _.unknown}}});var w,e0,$e,Ls=k(()=>{uo();w=H.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),e0=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),$e=class e extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}format(t){let n=t||function(s){return s.message},r={_errors:[]},o=s=>{for(let i of s.issues)if(i.code==="invalid_union")i.unionErrors.map(o);else if(i.code==="invalid_return_type")o(i.returnTypeError);else if(i.code==="invalid_arguments")o(i.argumentsError);else if(i.path.length===0)r._errors.push(n(i));else{let a=r,c=0;for(;c<i.path.length;){let l=i.path[c];c===i.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(n(i))):a[l]=a[l]||{_errors:[]},a=a[l],c++}}};return o(this),r}static assert(t){if(!(t instanceof e))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,H.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=n=>n.message){let n={},r=[];for(let o of this.issues)if(o.path.length>0){let s=o.path[0];n[s]=n[s]||[],n[s].push(t(o))}else r.push(t(o));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};$e.create=e=>new $e(e)});var t0,xt,uc=k(()=>{Ls();uo();t0=(e,t)=>{let n;switch(e.code){case w.invalid_type:e.received===_.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case w.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,H.jsonStringifyReplacer)}`;break;case w.unrecognized_keys:n=`Unrecognized key(s) in object: ${H.joinValues(e.keys,", ")}`;break;case w.invalid_union:n="Invalid input";break;case w.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${H.joinValues(e.options)}`;break;case w.invalid_enum_value:n=`Invalid enum value. Expected ${H.joinValues(e.options)}, received '${e.received}'`;break;case w.invalid_arguments:n="Invalid function arguments";break;case w.invalid_return_type:n="Invalid function return type";break;case w.invalid_date:n="Invalid date";break;case w.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:H.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case w.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case w.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case w.custom:n="Invalid input";break;case w.invalid_intersection_types:n="Intersection results could not be merged";break;case w.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case w.not_finite:n="Number must be finite";break;default:n=t.defaultError,H.assertNever(e)}return{message:n}},xt=t0});function n0(e){Kf=e}function nr(){return Kf}var Kf,zs=k(()=>{uc();Kf=xt});function x(e,t){let n=nr(),r=fo({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===xt?void 0:xt].filter(o=>!!o)});e.common.issues.push(r)}var fo,r0,le,$,an,ge,Us,Bs,Mt,rr,dc=k(()=>{zs();uc();fo=e=>{let{data:t,path:n,errorMaps:r,issueData:o}=e,s=[...n,...o.path||[]],i={...o,path:s};if(o.message!==void 0)return{...o,path:s,message:o.message};let a="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)a=l(i,{data:t,defaultError:a}).message;return{...o,path:s,message:a}},r0=[];le=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){let r=[];for(let o of n){if(o.status==="aborted")return $;o.status==="dirty"&&t.dirty(),r.push(o.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){let r=[];for(let o of n){let s=await o.key,i=await o.value;r.push({key:s,value:i})}return e.mergeObjectSync(t,r)}static mergeObjectSync(t,n){let r={};for(let o of n){let{key:s,value:i}=o;if(s.status==="aborted"||i.status==="aborted")return $;s.status==="dirty"&&t.dirty(),i.status==="dirty"&&t.dirty(),s.value!=="__proto__"&&(typeof i.value<"u"||o.alwaysSet)&&(r[s.value]=i.value)}return{status:t.value,value:r}}},$=Object.freeze({status:"aborted"}),an=e=>({status:"dirty",value:e}),ge=e=>({status:"valid",value:e}),Us=e=>e.status==="aborted",Bs=e=>e.status==="dirty",Mt=e=>e.status==="valid",rr=e=>typeof Promise<"u"&&e instanceof Promise});var Vf=k(()=>{});var S,Wf=k(()=>{(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t?.message})(S||(S={}))});function P(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:o}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:o}:{errorMap:(i,a)=>{let{message:c}=e;return i.code==="invalid_enum_value"?{message:c??a.defaultError}:typeof a.data>"u"?{message:c??r??a.defaultError}:i.code!=="invalid_type"?{message:a.defaultError}:{message:c??n??a.defaultError}},description:o}}function Qf(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);let n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function b0(e){return new RegExp(`^${Qf(e)}$`)}function ep(e){let t=`${Xf}T${Qf(e)}`,n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function x0(e,t){return!!((t==="v4"||!t)&&p0.test(e)||(t==="v6"||!t)&&h0.test(e))}function v0(e,t){if(!l0.test(e))return!1;try{let[n]=e.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),o=JSON.parse(atob(r));return!(typeof o!="object"||o===null||"typ"in o&&o?.typ!=="JWT"||!o.alg||t&&o.alg!==t)}catch{return!1}}function _0(e,t){return!!((t==="v4"||!t)&&m0.test(e)||(t==="v6"||!t)&&g0.test(e))}function S0(e,t){let n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,o=n>r?n:r,s=Number.parseInt(e.toFixed(o).replace(".","")),i=Number.parseInt(t.toFixed(o).replace(".",""));return s%i/10**o}function or(e){if(e instanceof Te){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=Je.create(or(r))}return new Te({...e._def,shape:()=>t})}else return e instanceof St?new St({...e._def,type:or(e.element)}):e instanceof Je?Je.create(or(e.unwrap())):e instanceof dt?dt.create(or(e.unwrap())):e instanceof ut?ut.create(e.items.map(t=>or(t))):e}function pc(e,t){let n=lt(e),r=lt(t);if(e===t)return{valid:!0,data:e};if(n===_.object&&r===_.object){let o=H.objectKeys(t),s=H.objectKeys(e).filter(a=>o.indexOf(a)!==-1),i={...e,...t};for(let a of s){let c=pc(e[a],t[a]);if(!c.valid)return{valid:!1};i[a]=c.data}return{valid:!0,data:i}}else if(n===_.array&&r===_.array){if(e.length!==t.length)return{valid:!1};let o=[];for(let s=0;s<e.length;s++){let i=e[s],a=t[s],c=pc(i,a);if(!c.valid)return{valid:!1};o.push(c.data)}return{valid:!0,data:o}}else return n===_.date&&r===_.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}function tp(e,t){return new yn({values:e,typeName:A.ZodEnum,...P(t)})}function Yf(e,t){let n=typeof e=="function"?e(t):typeof e=="string"?{message:e}:e;return typeof n=="string"?{message:n}:n}function np(e,t={},n){return e?Lt.create().superRefine((r,o)=>{let s=e(r);if(s instanceof Promise)return s.then(i=>{if(!i){let a=Yf(t,r),c=a.fatal??n??!0;o.addIssue({code:"custom",...a,fatal:c})}});if(!s){let i=Yf(t,r),a=i.fatal??n??!0;o.addIssue({code:"custom",...i,fatal:a})}}):Lt.create()}var Ge,qf,I,o0,s0,i0,a0,c0,l0,u0,d0,f0,fc,p0,m0,h0,g0,k0,y0,Xf,w0,jt,cn,ln,un,dn,sr,fn,pn,Lt,_t,nt,ir,St,Te,mn,vt,Js,hn,ut,Gs,ar,cr,Zs,gn,kn,yn,wn,zt,Ze,Je,dt,bn,xn,lr,E0,po,mo,vn,$0,A,T0,rp,op,A0,R0,sp,C0,O0,P0,I0,N0,H0,D0,F0,M0,j0,L0,z0,U0,B0,J0,G0,Z0,K0,V0,W0,q0,Y0,X0,Q0,ev,tv,nv,rv,ov,sv,iv,av,cv,lv,ip=k(()=>{Ls();zs();Wf();dc();uo();Ge=class{constructor(t,n,r,o){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=o}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},qf=(e,t)=>{if(Mt(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new $e(e.common.issues);return this._error=n,this._error}}};I=class{get description(){return this._def.description}_getType(t){return lt(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:lt(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new le,ctx:{common:t.parent.common,data:t.data,parsedType:lt(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let n=this._parse(t);if(rr(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){let n=this._parse(t);return Promise.resolve(n)}parse(t,n){let r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:lt(t)},o=this._parseSync({data:t,path:r.path,parent:r});return qf(r,o)}"~validate"(t){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:lt(t)};if(!this["~standard"].async)try{let r=this._parseSync({data:t,path:[],parent:n});return Mt(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:n}).then(r=>Mt(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(t,n){let r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:lt(t)},o=this._parse({data:t,path:r.path,parent:r}),s=await(rr(o)?o:Promise.resolve(o));return qf(r,s)}refine(t,n){let r=o=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(o):n;return this._refinement((o,s)=>{let i=t(o),a=()=>s.addIssue({code:w.custom,...r(o)});return typeof Promise<"u"&&i instanceof Promise?i.then(c=>c?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,o)=>t(r)?!0:(o.addIssue(typeof n=="function"?n(r,o):n),!1))}_refinement(t){return new Ze({schema:this,typeName:A.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return Je.create(this,this._def)}nullable(){return dt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return St.create(this)}promise(){return zt.create(this,this._def)}or(t){return mn.create([this,t],this._def)}and(t){return hn.create(this,t,this._def)}transform(t){return new Ze({...P(this._def),schema:this,typeName:A.ZodEffects,effect:{type:"transform",transform:t}})}default(t){let n=typeof t=="function"?t:()=>t;return new bn({...P(this._def),innerType:this,defaultValue:n,typeName:A.ZodDefault})}brand(){return new po({typeName:A.ZodBranded,type:this,...P(this._def)})}catch(t){let n=typeof t=="function"?t:()=>t;return new xn({...P(this._def),innerType:this,catchValue:n,typeName:A.ZodCatch})}describe(t){let n=this.constructor;return new n({...this._def,description:t})}pipe(t){return mo.create(this,t)}readonly(){return vn.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},o0=/^c[^\s-]{8,}$/i,s0=/^[0-9a-z]+$/,i0=/^[0-9A-HJKMNP-TV-Z]{26}$/i,a0=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,c0=/^[a-z0-9_-]{21}$/i,l0=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,u0=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,d0=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,f0="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",p0=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,m0=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,h0=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,g0=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,k0=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,y0=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Xf="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",w0=new RegExp(`^${Xf}$`);jt=class e extends I{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==_.string){let s=this._getOrReturnCtx(t);return x(s,{code:w.invalid_type,expected:_.string,received:s.parsedType}),$}let r=new le,o;for(let s of this._def.checks)if(s.kind==="min")t.data.length<s.value&&(o=this._getOrReturnCtx(t,o),x(o,{code:w.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="max")t.data.length>s.value&&(o=this._getOrReturnCtx(t,o),x(o,{code:w.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="length"){let i=t.data.length>s.value,a=t.data.length<s.value;(i||a)&&(o=this._getOrReturnCtx(t,o),i?x(o,{code:w.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}):a&&x(o,{code:w.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}),r.dirty())}else if(s.kind==="email")d0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"email",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="emoji")fc||(fc=new RegExp(f0,"u")),fc.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"emoji",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="uuid")a0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"uuid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="nanoid")c0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"nanoid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="cuid")o0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"cuid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="cuid2")s0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"cuid2",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="ulid")i0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"ulid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="url")try{new URL(t.data)}catch{o=this._getOrReturnCtx(t,o),x(o,{validation:"url",code:w.invalid_string,message:s.message}),r.dirty()}else s.kind==="regex"?(s.regex.lastIndex=0,s.regex.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"regex",code:w.invalid_string,message:s.message}),r.dirty())):s.kind==="trim"?t.data=t.data.trim():s.kind==="includes"?t.data.includes(s.value,s.position)||(o=this._getOrReturnCtx(t,o),x(o,{code:w.invalid_string,validation:{includes:s.value,position:s.position},message:s.message}),r.dirty()):s.kind==="toLowerCase"?t.data=t.data.toLowerCase():s.kind==="toUpperCase"?t.data=t.data.toUpperCase():s.kind==="startsWith"?t.data.startsWith(s.value)||(o=this._getOrReturnCtx(t,o),x(o,{code:w.invalid_string,validation:{startsWith:s.value},message:s.message}),r.dirty()):s.kind==="endsWith"?t.data.endsWith(s.value)||(o=this._getOrReturnCtx(t,o),x(o,{code:w.invalid_string,validation:{endsWith:s.value},message:s.message}),r.dirty()):s.kind==="datetime"?ep(s).test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{code:w.invalid_string,validation:"datetime",message:s.message}),r.dirty()):s.kind==="date"?w0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{code:w.invalid_string,validation:"date",message:s.message}),r.dirty()):s.kind==="time"?b0(s).test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{code:w.invalid_string,validation:"time",message:s.message}),r.dirty()):s.kind==="duration"?u0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"duration",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="ip"?x0(t.data,s.version)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"ip",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="jwt"?v0(t.data,s.alg)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"jwt",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="cidr"?_0(t.data,s.version)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"cidr",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="base64"?k0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"base64",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="base64url"?y0.test(t.data)||(o=this._getOrReturnCtx(t,o),x(o,{validation:"base64url",code:w.invalid_string,message:s.message}),r.dirty()):H.assertNever(s);return{status:r.value,value:t.data}}_regex(t,n,r){return this.refinement(o=>t.test(o),{validation:n,code:w.invalid_string,...S.errToObj(r)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...S.errToObj(t)})}url(t){return this._addCheck({kind:"url",...S.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...S.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...S.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...S.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...S.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...S.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...S.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...S.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...S.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...S.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...S.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...S.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...S.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...S.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...S.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...S.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n?.position,...S.errToObj(n?.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...S.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...S.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...S.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...S.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...S.errToObj(n)})}nonempty(t){return this.min(1,S.errToObj(t))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};jt.create=e=>new jt({checks:[],typeName:A.ZodString,coerce:e?.coerce??!1,...P(e)});cn=class e extends I{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==_.number){let s=this._getOrReturnCtx(t);return x(s,{code:w.invalid_type,expected:_.number,received:s.parsedType}),$}let r,o=new le;for(let s of this._def.checks)s.kind==="int"?H.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),x(r,{code:w.invalid_type,expected:"integer",received:"float",message:s.message}),o.dirty()):s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(r=this._getOrReturnCtx(t,r),x(r,{code:w.too_small,minimum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),o.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(r=this._getOrReturnCtx(t,r),x(r,{code:w.too_big,maximum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),o.dirty()):s.kind==="multipleOf"?S0(t.data,s.value)!==0&&(r=this._getOrReturnCtx(t,r),x(r,{code:w.not_multiple_of,multipleOf:s.value,message:s.message}),o.dirty()):s.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),x(r,{code:w.not_finite,message:s.message}),o.dirty()):H.assertNever(s);return{status:o.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,S.toString(n))}gt(t,n){return this.setLimit("min",t,!1,S.toString(n))}lte(t,n){return this.setLimit("max",t,!0,S.toString(n))}lt(t,n){return this.setLimit("max",t,!1,S.toString(n))}setLimit(t,n,r,o){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:S.toString(o)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:S.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:S.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:S.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:S.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:S.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:S.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:S.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:S.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:S.toString(t)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&H.isInteger(t.value))}get isFinite(){let t=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.value<t)&&(t=r.value)}return Number.isFinite(n)&&Number.isFinite(t)}};cn.create=e=>new cn({checks:[],typeName:A.ZodNumber,coerce:e?.coerce||!1,...P(e)});ln=class e extends I{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==_.bigint)return this._getInvalidInput(t);let r,o=new le;for(let s of this._def.checks)s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(r=this._getOrReturnCtx(t,r),x(r,{code:w.too_small,type:"bigint",minimum:s.value,inclusive:s.inclusive,message:s.message}),o.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(r=this._getOrReturnCtx(t,r),x(r,{code:w.too_big,type:"bigint",maximum:s.value,inclusive:s.inclusive,message:s.message}),o.dirty()):s.kind==="multipleOf"?t.data%s.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),x(r,{code:w.not_multiple_of,multipleOf:s.value,message:s.message}),o.dirty()):H.assertNever(s);return{status:o.value,value:t.data}}_getInvalidInput(t){let n=this._getOrReturnCtx(t);return x(n,{code:w.invalid_type,expected:_.bigint,received:n.parsedType}),$}gte(t,n){return this.setLimit("min",t,!0,S.toString(n))}gt(t,n){return this.setLimit("min",t,!1,S.toString(n))}lte(t,n){return this.setLimit("max",t,!0,S.toString(n))}lt(t,n){return this.setLimit("max",t,!1,S.toString(n))}setLimit(t,n,r,o){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:S.toString(o)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:S.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:S.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:S.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:S.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:S.toString(n)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};ln.create=e=>new ln({checks:[],typeName:A.ZodBigInt,coerce:e?.coerce??!1,...P(e)});un=class extends I{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==_.boolean){let r=this._getOrReturnCtx(t);return x(r,{code:w.invalid_type,expected:_.boolean,received:r.parsedType}),$}return ge(t.data)}};un.create=e=>new un({typeName:A.ZodBoolean,coerce:e?.coerce||!1,...P(e)});dn=class e extends I{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==_.date){let s=this._getOrReturnCtx(t);return x(s,{code:w.invalid_type,expected:_.date,received:s.parsedType}),$}if(Number.isNaN(t.data.getTime())){let s=this._getOrReturnCtx(t);return x(s,{code:w.invalid_date}),$}let r=new le,o;for(let s of this._def.checks)s.kind==="min"?t.data.getTime()<s.value&&(o=this._getOrReturnCtx(t,o),x(o,{code:w.too_small,message:s.message,inclusive:!0,exact:!1,minimum:s.value,type:"date"}),r.dirty()):s.kind==="max"?t.data.getTime()>s.value&&(o=this._getOrReturnCtx(t,o),x(o,{code:w.too_big,message:s.message,inclusive:!0,exact:!1,maximum:s.value,type:"date"}),r.dirty()):H.assertNever(s);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:S.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:S.toString(n)})}get minDate(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t!=null?new Date(t):null}};dn.create=e=>new dn({checks:[],coerce:e?.coerce||!1,typeName:A.ZodDate,...P(e)});sr=class extends I{_parse(t){if(this._getType(t)!==_.symbol){let r=this._getOrReturnCtx(t);return x(r,{code:w.invalid_type,expected:_.symbol,received:r.parsedType}),$}return ge(t.data)}};sr.create=e=>new sr({typeName:A.ZodSymbol,...P(e)});fn=class extends I{_parse(t){if(this._getType(t)!==_.undefined){let r=this._getOrReturnCtx(t);return x(r,{code:w.invalid_type,expected:_.undefined,received:r.parsedType}),$}return ge(t.data)}};fn.create=e=>new fn({typeName:A.ZodUndefined,...P(e)});pn=class extends I{_parse(t){if(this._getType(t)!==_.null){let r=this._getOrReturnCtx(t);return x(r,{code:w.invalid_type,expected:_.null,received:r.parsedType}),$}return ge(t.data)}};pn.create=e=>new pn({typeName:A.ZodNull,...P(e)});Lt=class extends I{constructor(){super(...arguments),this._any=!0}_parse(t){return ge(t.data)}};Lt.create=e=>new Lt({typeName:A.ZodAny,...P(e)});_t=class extends I{constructor(){super(...arguments),this._unknown=!0}_parse(t){return ge(t.data)}};_t.create=e=>new _t({typeName:A.ZodUnknown,...P(e)});nt=class extends I{_parse(t){let n=this._getOrReturnCtx(t);return x(n,{code:w.invalid_type,expected:_.never,received:n.parsedType}),$}};nt.create=e=>new nt({typeName:A.ZodNever,...P(e)});ir=class extends I{_parse(t){if(this._getType(t)!==_.undefined){let r=this._getOrReturnCtx(t);return x(r,{code:w.invalid_type,expected:_.void,received:r.parsedType}),$}return ge(t.data)}};ir.create=e=>new ir({typeName:A.ZodVoid,...P(e)});St=class e extends I{_parse(t){let{ctx:n,status:r}=this._processInputParams(t),o=this._def;if(n.parsedType!==_.array)return x(n,{code:w.invalid_type,expected:_.array,received:n.parsedType}),$;if(o.exactLength!==null){let i=n.data.length>o.exactLength.value,a=n.data.length<o.exactLength.value;(i||a)&&(x(n,{code:i?w.too_big:w.too_small,minimum:a?o.exactLength.value:void 0,maximum:i?o.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:o.exactLength.message}),r.dirty())}if(o.minLength!==null&&n.data.length<o.minLength.value&&(x(n,{code:w.too_small,minimum:o.minLength.value,type:"array",inclusive:!0,exact:!1,message:o.minLength.message}),r.dirty()),o.maxLength!==null&&n.data.length>o.maxLength.value&&(x(n,{code:w.too_big,maximum:o.maxLength.value,type:"array",inclusive:!0,exact:!1,message:o.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((i,a)=>o.type._parseAsync(new Ge(n,i,n.path,a)))).then(i=>le.mergeArray(r,i));let s=[...n.data].map((i,a)=>o.type._parseSync(new Ge(n,i,n.path,a)));return le.mergeArray(r,s)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:S.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:S.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:S.toString(n)}})}nonempty(t){return this.min(1,t)}};St.create=(e,t)=>new St({type:e,minLength:null,maxLength:null,exactLength:null,typeName:A.ZodArray,...P(t)});Te=class e extends I{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),n=H.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==_.object){let l=this._getOrReturnCtx(t);return x(l,{code:w.invalid_type,expected:_.object,received:l.parsedType}),$}let{status:r,ctx:o}=this._processInputParams(t),{shape:s,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof nt&&this._def.unknownKeys==="strip"))for(let l in o.data)i.includes(l)||a.push(l);let c=[];for(let l of i){let u=s[l],d=o.data[l];c.push({key:{status:"valid",value:l},value:u._parse(new Ge(o,d,o.path,l)),alwaysSet:l in o.data})}if(this._def.catchall instanceof nt){let l=this._def.unknownKeys;if(l==="passthrough")for(let u of a)c.push({key:{status:"valid",value:u},value:{status:"valid",value:o.data[u]}});else if(l==="strict")a.length>0&&(x(o,{code:w.unrecognized_keys,keys:a}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let u of a){let d=o.data[u];c.push({key:{status:"valid",value:u},value:l._parse(new Ge(o,d,o.path,u)),alwaysSet:u in o.data})}}return o.common.async?Promise.resolve().then(async()=>{let l=[];for(let u of c){let d=await u.key,p=await u.value;l.push({key:d,value:p,alwaysSet:u.alwaysSet})}return l}).then(l=>le.mergeObjectSync(r,l)):le.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(t){return S.errToObj,new e({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{let o=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:S.errToObj(t).message??o}:{message:o}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:A.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let r of H.objectKeys(t))t[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let r of H.objectKeys(this.shape))t[r]||(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}deepPartial(){return or(this)}partial(t){let n={};for(let r of H.objectKeys(this.shape)){let o=this.shape[r];t&&!t[r]?n[r]=o:n[r]=o.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let r of H.objectKeys(this.shape))if(t&&!t[r])n[r]=this.shape[r];else{let s=this.shape[r];for(;s instanceof Je;)s=s._def.innerType;n[r]=s}return new e({...this._def,shape:()=>n})}keyof(){return tp(H.objectKeys(this.shape))}};Te.create=(e,t)=>new Te({shape:()=>e,unknownKeys:"strip",catchall:nt.create(),typeName:A.ZodObject,...P(t)});Te.strictCreate=(e,t)=>new Te({shape:()=>e,unknownKeys:"strict",catchall:nt.create(),typeName:A.ZodObject,...P(t)});Te.lazycreate=(e,t)=>new Te({shape:e,unknownKeys:"strip",catchall:nt.create(),typeName:A.ZodObject,...P(t)});mn=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r=this._def.options;function o(s){for(let a of s)if(a.result.status==="valid")return a.result;for(let a of s)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;let i=s.map(a=>new $e(a.ctx.common.issues));return x(n,{code:w.invalid_union,unionErrors:i}),$}if(n.common.async)return Promise.all(r.map(async s=>{let i={...n,common:{...n.common,issues:[]},parent:null};return{result:await s._parseAsync({data:n.data,path:n.path,parent:i}),ctx:i}})).then(o);{let s,i=[];for(let c of r){let l={...n,common:{...n.common,issues:[]},parent:null},u=c._parseSync({data:n.data,path:n.path,parent:l});if(u.status==="valid")return u;u.status==="dirty"&&!s&&(s={result:u,ctx:l}),l.common.issues.length&&i.push(l.common.issues)}if(s)return n.common.issues.push(...s.ctx.common.issues),s.result;let a=i.map(c=>new $e(c));return x(n,{code:w.invalid_union,unionErrors:a}),$}}get options(){return this._def.options}};mn.create=(e,t)=>new mn({options:e,typeName:A.ZodUnion,...P(t)});vt=e=>e instanceof gn?vt(e.schema):e instanceof Ze?vt(e.innerType()):e instanceof kn?[e.value]:e instanceof yn?e.options:e instanceof wn?H.objectValues(e.enum):e instanceof bn?vt(e._def.innerType):e instanceof fn?[void 0]:e instanceof pn?[null]:e instanceof Je?[void 0,...vt(e.unwrap())]:e instanceof dt?[null,...vt(e.unwrap())]:e instanceof po||e instanceof vn?vt(e.unwrap()):e instanceof xn?vt(e._def.innerType):[],Js=class e extends I{_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==_.object)return x(n,{code:w.invalid_type,expected:_.object,received:n.parsedType}),$;let r=this.discriminator,o=n.data[r],s=this.optionsMap.get(o);return s?n.common.async?s._parseAsync({data:n.data,path:n.path,parent:n}):s._parseSync({data:n.data,path:n.path,parent:n}):(x(n,{code:w.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),$)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let o=new Map;for(let s of n){let i=vt(s.shape[t]);if(!i.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let a of i){if(o.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);o.set(a,s)}}return new e({typeName:A.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:o,...P(r)})}};hn=class extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t),o=(s,i)=>{if(Us(s)||Us(i))return $;let a=pc(s.value,i.value);return a.valid?((Bs(s)||Bs(i))&&n.dirty(),{status:n.value,value:a.data}):(x(r,{code:w.invalid_intersection_types}),$)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([s,i])=>o(s,i)):o(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};hn.create=(e,t,n)=>new hn({left:e,right:t,typeName:A.ZodIntersection,...P(n)});ut=class e extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.array)return x(r,{code:w.invalid_type,expected:_.array,received:r.parsedType}),$;if(r.data.length<this._def.items.length)return x(r,{code:w.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),$;!this._def.rest&&r.data.length>this._def.items.length&&(x(r,{code:w.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let s=[...r.data].map((i,a)=>{let c=this._def.items[a]||this._def.rest;return c?c._parse(new Ge(r,i,r.path,a)):null}).filter(i=>!!i);return r.common.async?Promise.all(s).then(i=>le.mergeArray(n,i)):le.mergeArray(n,s)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};ut.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ut({items:e,typeName:A.ZodTuple,rest:null,...P(t)})};Gs=class e extends I{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.object)return x(r,{code:w.invalid_type,expected:_.object,received:r.parsedType}),$;let o=[],s=this._def.keyType,i=this._def.valueType;for(let a in r.data)o.push({key:s._parse(new Ge(r,a,r.path,a)),value:i._parse(new Ge(r,r.data[a],r.path,a)),alwaysSet:a in r.data});return r.common.async?le.mergeObjectAsync(n,o):le.mergeObjectSync(n,o)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof I?new e({keyType:t,valueType:n,typeName:A.ZodRecord,...P(r)}):new e({keyType:jt.create(),valueType:t,typeName:A.ZodRecord,...P(n)})}},ar=class extends I{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.map)return x(r,{code:w.invalid_type,expected:_.map,received:r.parsedType}),$;let o=this._def.keyType,s=this._def.valueType,i=[...r.data.entries()].map(([a,c],l)=>({key:o._parse(new Ge(r,a,r.path,[l,"key"])),value:s._parse(new Ge(r,c,r.path,[l,"value"]))}));if(r.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let c of i){let l=await c.key,u=await c.value;if(l.status==="aborted"||u.status==="aborted")return $;(l.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(l.value,u.value)}return{status:n.value,value:a}})}else{let a=new Map;for(let c of i){let l=c.key,u=c.value;if(l.status==="aborted"||u.status==="aborted")return $;(l.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(l.value,u.value)}return{status:n.value,value:a}}}};ar.create=(e,t,n)=>new ar({valueType:t,keyType:e,typeName:A.ZodMap,...P(n)});cr=class e extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.set)return x(r,{code:w.invalid_type,expected:_.set,received:r.parsedType}),$;let o=this._def;o.minSize!==null&&r.data.size<o.minSize.value&&(x(r,{code:w.too_small,minimum:o.minSize.value,type:"set",inclusive:!0,exact:!1,message:o.minSize.message}),n.dirty()),o.maxSize!==null&&r.data.size>o.maxSize.value&&(x(r,{code:w.too_big,maximum:o.maxSize.value,type:"set",inclusive:!0,exact:!1,message:o.maxSize.message}),n.dirty());let s=this._def.valueType;function i(c){let l=new Set;for(let u of c){if(u.status==="aborted")return $;u.status==="dirty"&&n.dirty(),l.add(u.value)}return{status:n.value,value:l}}let a=[...r.data.values()].map((c,l)=>s._parse(new Ge(r,c,r.path,l)));return r.common.async?Promise.all(a).then(c=>i(c)):i(a)}min(t,n){return new e({...this._def,minSize:{value:t,message:S.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:S.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}};cr.create=(e,t)=>new cr({valueType:e,minSize:null,maxSize:null,typeName:A.ZodSet,...P(t)});Zs=class e extends I{constructor(){super(...arguments),this.validate=this.implement}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==_.function)return x(n,{code:w.invalid_type,expected:_.function,received:n.parsedType}),$;function r(a,c){return fo({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,nr(),xt].filter(l=>!!l),issueData:{code:w.invalid_arguments,argumentsError:c}})}function o(a,c){return fo({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,nr(),xt].filter(l=>!!l),issueData:{code:w.invalid_return_type,returnTypeError:c}})}let s={errorMap:n.common.contextualErrorMap},i=n.data;if(this._def.returns instanceof zt){let a=this;return ge(async function(...c){let l=new $e([]),u=await a._def.args.parseAsync(c,s).catch(f=>{throw l.addIssue(r(c,f)),l}),d=await Reflect.apply(i,this,u);return await a._def.returns._def.type.parseAsync(d,s).catch(f=>{throw l.addIssue(o(d,f)),l})})}else{let a=this;return ge(function(...c){let l=a._def.args.safeParse(c,s);if(!l.success)throw new $e([r(c,l.error)]);let u=Reflect.apply(i,this,l.data),d=a._def.returns.safeParse(u,s);if(!d.success)throw new $e([o(u,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:ut.create(t).rest(_t.create())})}returns(t){return new e({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new e({args:t||ut.create([]).rest(_t.create()),returns:n||_t.create(),typeName:A.ZodFunction,...P(r)})}},gn=class extends I{get schema(){return this._def.getter()}_parse(t){let{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};gn.create=(e,t)=>new gn({getter:e,typeName:A.ZodLazy,...P(t)});kn=class extends I{_parse(t){if(t.data!==this._def.value){let n=this._getOrReturnCtx(t);return x(n,{received:n.data,code:w.invalid_literal,expected:this._def.value}),$}return{status:"valid",value:t.data}}get value(){return this._def.value}};kn.create=(e,t)=>new kn({value:e,typeName:A.ZodLiteral,...P(t)});yn=class e extends I{_parse(t){if(typeof t.data!="string"){let n=this._getOrReturnCtx(t),r=this._def.values;return x(n,{expected:H.joinValues(r),received:n.parsedType,code:w.invalid_type}),$}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){let n=this._getOrReturnCtx(t),r=this._def.values;return x(n,{received:n.data,code:w.invalid_enum_value,options:r}),$}return ge(t.data)}get options(){return this._def.values}get enum(){let t={};for(let n of this._def.values)t[n]=n;return t}get Values(){let t={};for(let n of this._def.values)t[n]=n;return t}get Enum(){let t={};for(let n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(r=>!t.includes(r)),{...this._def,...n})}};yn.create=tp;wn=class extends I{_parse(t){let n=H.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==_.string&&r.parsedType!==_.number){let o=H.objectValues(n);return x(r,{expected:H.joinValues(o),received:r.parsedType,code:w.invalid_type}),$}if(this._cache||(this._cache=new Set(H.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){let o=H.objectValues(n);return x(r,{received:r.data,code:w.invalid_enum_value,options:o}),$}return ge(t.data)}get enum(){return this._def.values}};wn.create=(e,t)=>new wn({values:e,typeName:A.ZodNativeEnum,...P(t)});zt=class extends I{unwrap(){return this._def.type}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==_.promise&&n.common.async===!1)return x(n,{code:w.invalid_type,expected:_.promise,received:n.parsedType}),$;let r=n.parsedType===_.promise?n.data:Promise.resolve(n.data);return ge(r.then(o=>this._def.type.parseAsync(o,{path:n.path,errorMap:n.common.contextualErrorMap})))}};zt.create=(e,t)=>new zt({type:e,typeName:A.ZodPromise,...P(t)});Ze=class extends I{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===A.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:n,ctx:r}=this._processInputParams(t),o=this._def.effect||null,s={addIssue:i=>{x(r,i),i.fatal?n.abort():n.dirty()},get path(){return r.path}};if(s.addIssue=s.addIssue.bind(s),o.type==="preprocess"){let i=o.transform(r.data,s);if(r.common.async)return Promise.resolve(i).then(async a=>{if(n.value==="aborted")return $;let c=await this._def.schema._parseAsync({data:a,path:r.path,parent:r});return c.status==="aborted"?$:c.status==="dirty"?an(c.value):n.value==="dirty"?an(c.value):c});{if(n.value==="aborted")return $;let a=this._def.schema._parseSync({data:i,path:r.path,parent:r});return a.status==="aborted"?$:a.status==="dirty"?an(a.value):n.value==="dirty"?an(a.value):a}}if(o.type==="refinement"){let i=a=>{let c=o.refinement(a,s);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?$:(a.status==="dirty"&&n.dirty(),i(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?$:(a.status==="dirty"&&n.dirty(),i(a.value).then(()=>({status:n.value,value:a.value}))))}if(o.type==="transform")if(r.common.async===!1){let i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Mt(i))return $;let a=o.transform(i.value,s);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>Mt(i)?Promise.resolve(o.transform(i.value,s)).then(a=>({status:n.value,value:a})):$);H.assertNever(o)}};Ze.create=(e,t,n)=>new Ze({schema:e,typeName:A.ZodEffects,effect:t,...P(n)});Ze.createWithPreprocess=(e,t,n)=>new Ze({schema:t,effect:{type:"preprocess",transform:e},typeName:A.ZodEffects,...P(n)});Je=class extends I{_parse(t){return this._getType(t)===_.undefined?ge(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};Je.create=(e,t)=>new Je({innerType:e,typeName:A.ZodOptional,...P(t)});dt=class extends I{_parse(t){return this._getType(t)===_.null?ge(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};dt.create=(e,t)=>new dt({innerType:e,typeName:A.ZodNullable,...P(t)});bn=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r=n.data;return n.parsedType===_.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};bn.create=(e,t)=>new bn({innerType:e,typeName:A.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...P(t)});xn=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},o=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return rr(o)?o.then(s=>({status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new $e(r.common.issues)},input:r.data})})):{status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new $e(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};xn.create=(e,t)=>new xn({innerType:e,typeName:A.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...P(t)});lr=class extends I{_parse(t){if(this._getType(t)!==_.nan){let r=this._getOrReturnCtx(t);return x(r,{code:w.invalid_type,expected:_.nan,received:r.parsedType}),$}return{status:"valid",value:t.data}}};lr.create=e=>new lr({typeName:A.ZodNaN,...P(e)});E0=Symbol("zod_brand"),po=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},mo=class e extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{let s=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?$:s.status==="dirty"?(n.dirty(),an(s.value)):this._def.out._parseAsync({data:s.value,path:r.path,parent:r})})();{let o=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?$:o.status==="dirty"?(n.dirty(),{status:"dirty",value:o.value}):this._def.out._parseSync({data:o.value,path:r.path,parent:r})}}static create(t,n){return new e({in:t,out:n,typeName:A.ZodPipeline})}},vn=class extends I{_parse(t){let n=this._def.innerType._parse(t),r=o=>(Mt(o)&&(o.value=Object.freeze(o.value)),o);return rr(n)?n.then(o=>r(o)):r(n)}unwrap(){return this._def.innerType}};vn.create=(e,t)=>new vn({innerType:e,typeName:A.ZodReadonly,...P(t)});$0={object:Te.lazycreate};(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(A||(A={}));T0=(e,t={message:`Input not instance of ${e.name}`})=>np(n=>n instanceof e,t),rp=jt.create,op=cn.create,A0=lr.create,R0=ln.create,sp=un.create,C0=dn.create,O0=sr.create,P0=fn.create,I0=pn.create,N0=Lt.create,H0=_t.create,D0=nt.create,F0=ir.create,M0=St.create,j0=Te.create,L0=Te.strictCreate,z0=mn.create,U0=Js.create,B0=hn.create,J0=ut.create,G0=Gs.create,Z0=ar.create,K0=cr.create,V0=Zs.create,W0=gn.create,q0=kn.create,Y0=yn.create,X0=wn.create,Q0=zt.create,ev=Ze.create,tv=Je.create,nv=dt.create,rv=Ze.createWithPreprocess,ov=mo.create,sv=()=>rp().optional(),iv=()=>op().optional(),av=()=>sp().optional(),cv={string:(e=>jt.create({...e,coerce:!0})),number:(e=>cn.create({...e,coerce:!0})),boolean:(e=>un.create({...e,coerce:!0})),bigint:(e=>ln.create({...e,coerce:!0})),date:(e=>dn.create({...e,coerce:!0}))},lv=$});var b={};j(b,{BRAND:()=>E0,DIRTY:()=>an,EMPTY_PATH:()=>r0,INVALID:()=>$,NEVER:()=>lv,OK:()=>ge,ParseStatus:()=>le,Schema:()=>I,ZodAny:()=>Lt,ZodArray:()=>St,ZodBigInt:()=>ln,ZodBoolean:()=>un,ZodBranded:()=>po,ZodCatch:()=>xn,ZodDate:()=>dn,ZodDefault:()=>bn,ZodDiscriminatedUnion:()=>Js,ZodEffects:()=>Ze,ZodEnum:()=>yn,ZodError:()=>$e,ZodFirstPartyTypeKind:()=>A,ZodFunction:()=>Zs,ZodIntersection:()=>hn,ZodIssueCode:()=>w,ZodLazy:()=>gn,ZodLiteral:()=>kn,ZodMap:()=>ar,ZodNaN:()=>lr,ZodNativeEnum:()=>wn,ZodNever:()=>nt,ZodNull:()=>pn,ZodNullable:()=>dt,ZodNumber:()=>cn,ZodObject:()=>Te,ZodOptional:()=>Je,ZodParsedType:()=>_,ZodPipeline:()=>mo,ZodPromise:()=>zt,ZodReadonly:()=>vn,ZodRecord:()=>Gs,ZodSchema:()=>I,ZodSet:()=>cr,ZodString:()=>jt,ZodSymbol:()=>sr,ZodTransformer:()=>Ze,ZodTuple:()=>ut,ZodType:()=>I,ZodUndefined:()=>fn,ZodUnion:()=>mn,ZodUnknown:()=>_t,ZodVoid:()=>ir,addIssueToContext:()=>x,any:()=>N0,array:()=>M0,bigint:()=>R0,boolean:()=>sp,coerce:()=>cv,custom:()=>np,date:()=>C0,datetimeRegex:()=>ep,defaultErrorMap:()=>xt,discriminatedUnion:()=>U0,effect:()=>ev,enum:()=>Y0,function:()=>V0,getErrorMap:()=>nr,getParsedType:()=>lt,instanceof:()=>T0,intersection:()=>B0,isAborted:()=>Us,isAsync:()=>rr,isDirty:()=>Bs,isValid:()=>Mt,late:()=>$0,lazy:()=>W0,literal:()=>q0,makeIssue:()=>fo,map:()=>Z0,nan:()=>A0,nativeEnum:()=>X0,never:()=>D0,null:()=>I0,nullable:()=>nv,number:()=>op,object:()=>j0,objectUtil:()=>lc,oboolean:()=>av,onumber:()=>iv,optional:()=>tv,ostring:()=>sv,pipeline:()=>ov,preprocess:()=>rv,promise:()=>Q0,quotelessJson:()=>e0,record:()=>G0,set:()=>K0,setErrorMap:()=>n0,strictObject:()=>L0,string:()=>rp,symbol:()=>O0,transformer:()=>ev,tuple:()=>J0,undefined:()=>P0,union:()=>z0,unknown:()=>H0,util:()=>H,void:()=>F0});var mc=k(()=>{zs();dc();Vf();uo();ip();Ls()});var ur=k(()=>{mc();mc()});import{createHash as uv}from"node:crypto";function rt(e){let t=ap.get(e);return t||(t=uv("sha256").update(`tkr:${e}`).digest("hex").slice(0,16),ap.set(e,t)),t}var dv,fv,dr,ap,fr=k(()=>{"use strict";ur();dv=b.enum(["normal","compact","minimal"]),fv=b.enum(["off","light","balanced","max"]),dr=b.object({enabled:b.boolean().default(!0),telemetryOptIn:b.boolean().default(!0),outputVerbosity:dv.default("compact"),reducer:fv.default("off"),filters:b.object({enableAll:b.boolean().default(!0),disabled:b.array(b.string().max(64)).max(100).default([])}).default({enableAll:!0,disabled:[]})}),ap=new Map});var lp={};j(lp,{bundleRefreshFile:()=>ho,claudeCommandFile:()=>Ut,claudeCommandsDir:()=>ko,contentCacheDir:()=>Et,contentCacheFile:()=>mr,enrollCooldownFile:()=>hc,installIdFile:()=>pr,managedCommandsFile:()=>Ks,reducerContextFile:()=>hr,reducerRulesStateFile:()=>gr,restoreConfigFile:()=>ft,skillFile:()=>Fe,skillsDir:()=>go,stateFile:()=>pv,tokmizerHome:()=>y});import cp from"node:os";import{join as _e}from"node:path";function y(){return process.env.TOKMIZER_HOME||_e(cp.homedir(),".tokmizer")}function pv(){return _e(y(),"state.json")}function pr(){return _e(y(),"install-id")}function hc(){return _e(y(),"enroll-cooldown")}function ho(){return _e(y(),"bundle-refresh.json")}function go(){return _e(y(),"skills")}function Fe(e){return _e(go(),`${e}.md`)}function Et(){return _e(y(),"content-cache")}function ft(){return _e(y(),"restore.json")}function mr(e){return _e(Et(),e)}function hr(){return _e(y(),"reducer-context.txt")}function gr(){return _e(y(),"reducer-rules.json")}function Ks(){return _e(y(),"managed-commands.json")}function ko(){return process.env.TOKMIZER_CLAUDE_COMMANDS_DIR||_e(cp.homedir(),".claude","commands")}function Ut(e){return _e(ko(),`${e}.md`)}var F=k(()=>{"use strict"});import kr from"node:os";import{createHash as mv,createHmac as up,randomUUID as hv}from"node:crypto";import{readFile as dp,writeFile as fp,mkdir as gv}from"node:fs/promises";async function Vs(){try{let n=(await dp(pr(),"utf8")).trim();if(/^[0-9a-f-]{36}$/i.test(n))return n}catch{}await gv(y(),{recursive:!0});let e=hv();try{return await fp(pr(),e,{mode:384,flag:"wx"}),e}catch{try{let t=(await dp(pr(),"utf8")).trim();if(/^[0-9a-f-]{36}$/i.test(t))return t}catch{}return await fp(pr(),e,{mode:384}),e}}function gc(e){return mv("sha256").update(e).digest("hex")}function kv(){let e=kr.networkInterfaces();for(let t of Object.keys(e))for(let n of e[t]??[])if(!n.internal&&n.mac&&n.mac!=="00:00:00:00:00:00")return n.mac;return"no-mac"}async function Ke(){let e=await Vs(),t=kr.hostname(),n=kr.platform(),r=kr.release(),o=kr.cpus(),s=o[0]?.model??"unknown",i=o.length,a=kv(),c=kr.userInfo().username,l=[t,n,r,s,String(i),gc(a),gc(c),e].join("|");return{fingerprint:gc(l),installId:e,hostname:t,os:n,osVersion:r,cpuModel:s,cpuCores:i,macHash:up("sha256",e).update(a).digest("hex"),usernameHash:up("sha256",e).update(c).digest("hex")}}var _n=k(()=>{"use strict";F()});import{join as kc}from"node:path";import{mkdir as yv,readFile as wv,writeFile as bv,unlink as pp,rename as xv}from"node:fs/promises";function yo(){try{let e=Intl.DateTimeFormat().resolvedOptions().timeZone;return e&&e.length>0?e:"Etc/UTC"}catch{return"Etc/UTC"}}function wc(e){return e?.dir??y()}async function L(e){let t=wc(e);try{let n=await wv(kc(t,yc),"utf8"),r=JSON.parse(n),o=r.timeZone;return{...r,lastSettingsRevision:r.lastSettingsRevision??0,get timeZone(){return o??=yo()},bonusActive:r.bonusActive??!1,...r.bonusResetAt!==void 0?{bonusResetAt:r.bonusResetAt}:{}}}catch{return null}}async function Ws(e,t){let n=wc(t);await yv(n,{recursive:!0}),e.installedAt==null&&(e.installedAt=Math.floor(Date.now()/1e3));let r=kc(n,yc),o=`${r}.tmp-${process.pid}-${process.hrtime.bigint()}`;await bv(o,JSON.stringify(e,null,2),{mode:384});try{await xv(o,r)}catch(s){try{await pp(o)}catch{}throw s}}async function qs(e){let t=wc(e);try{await pp(kc(t,yc))}catch{return}}var yc,pt=k(()=>{"use strict";F();yc="state.json"});import{createRequire as vv}from"node:module";function Sv(){let e="0.9.70";if(e)return e;for(let t of["../package.json","../../package.json"])try{let n=_v(t).version;if(typeof n=="string"&&n)return n}catch{}return"0.0.0"}function $t(e,t){if(!e||!t)return!1;let n=e.split(".").map(o=>parseInt(o,10)),r=t.split(".").map(o=>parseInt(o,10));for(let o=0;o<3;o+=1){let s=n[o]??0,i=r[o]??0;if(Number.isNaN(s)||Number.isNaN(i))return!1;if(s<i)return!0;if(s>i)return!1}return!1}var _v,ue,Sn=k(()=>{"use strict";_v=vv(import.meta.url);ue=Sv()});var mp,hp=k(()=>{"use strict";mp=`-----BEGIN PUBLIC KEY-----
|
|
3
|
+
var e0=Object.create;var lc=Object.defineProperty;var t0=Object.getOwnPropertyDescriptor;var n0=Object.getOwnPropertyNames;var r0=Object.getPrototypeOf,o0=Object.prototype.hasOwnProperty;var Ft=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var k=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var He=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}},L=(e,t)=>{for(var n in t)lc(e,n,{get:t[n],enumerable:!0})},s0=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of n0(t))!o0.call(e,o)&&o!==n&&lc(e,o,{get:()=>t[o],enumerable:!(r=t0(t,o))||r.enumerable});return e};var i0=(e,t,n)=>(n=e!=null?e0(r0(e)):{},s0(t||!e||!e.__esModule?lc(n,"default",{value:e,enumerable:!0}):n,e));var M,dc,_,lt,go=k(()=>{(function(e){e.assertEqual=o=>{};function t(o){}e.assertIs=t;function n(o){throw new Error}e.assertNever=n,e.arrayToEnum=o=>{let s={};for(let i of o)s[i]=i;return s},e.getValidEnumValues=o=>{let s=e.objectKeys(o).filter(a=>typeof o[o[a]]!="number"),i={};for(let a of s)i[a]=o[a];return e.objectValues(i)},e.objectValues=o=>e.objectKeys(o).map(function(s){return o[s]}),e.objectKeys=typeof Object.keys=="function"?o=>Object.keys(o):o=>{let s=[];for(let i in o)Object.prototype.hasOwnProperty.call(o,i)&&s.push(i);return s},e.find=(o,s)=>{for(let i of o)if(s(i))return i},e.isInteger=typeof Number.isInteger=="function"?o=>Number.isInteger(o):o=>typeof o=="number"&&Number.isFinite(o)&&Math.floor(o)===o;function r(o,s=" | "){return o.map(i=>typeof i=="string"?`'${i}'`:i).join(s)}e.joinValues=r,e.jsonStringifyReplacer=(o,s)=>typeof s=="bigint"?s.toString():s})(M||(M={}));(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(dc||(dc={}));_=M.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),lt=e=>{switch(typeof e){case"undefined":return _.undefined;case"string":return _.string;case"number":return Number.isNaN(e)?_.nan:_.number;case"boolean":return _.boolean;case"function":return _.function;case"bigint":return _.bigint;case"symbol":return _.symbol;case"object":return Array.isArray(e)?_.array:e===null?_.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?_.promise:typeof Map<"u"&&e instanceof Map?_.map:typeof Set<"u"&&e instanceof Set?_.set:typeof Date<"u"&&e instanceof Date?_.date:_.object;default:return _.unknown}}});var w,a0,$e,Gs=k(()=>{go();w=M.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),a0=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),$e=class e extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}format(t){let n=t||function(s){return s.message},r={_errors:[]},o=s=>{for(let i of s.issues)if(i.code==="invalid_union")i.unionErrors.map(o);else if(i.code==="invalid_return_type")o(i.returnTypeError);else if(i.code==="invalid_arguments")o(i.argumentsError);else if(i.path.length===0)r._errors.push(n(i));else{let a=r,c=0;for(;c<i.path.length;){let l=i.path[c];c===i.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(n(i))):a[l]=a[l]||{_errors:[]},a=a[l],c++}}};return o(this),r}static assert(t){if(!(t instanceof e))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,M.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=n=>n.message){let n={},r=[];for(let o of this.issues)if(o.path.length>0){let s=o.path[0];n[s]=n[s]||[],n[s].push(t(o))}else r.push(t(o));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};$e.create=e=>new $e(e)});var c0,vt,fc=k(()=>{Gs();go();c0=(e,t)=>{let n;switch(e.code){case w.invalid_type:e.received===_.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case w.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,M.jsonStringifyReplacer)}`;break;case w.unrecognized_keys:n=`Unrecognized key(s) in object: ${M.joinValues(e.keys,", ")}`;break;case w.invalid_union:n="Invalid input";break;case w.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${M.joinValues(e.options)}`;break;case w.invalid_enum_value:n=`Invalid enum value. Expected ${M.joinValues(e.options)}, received '${e.received}'`;break;case w.invalid_arguments:n="Invalid function arguments";break;case w.invalid_return_type:n="Invalid function return type";break;case w.invalid_date:n="Invalid date";break;case w.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:M.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case w.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case w.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case w.custom:n="Invalid input";break;case w.invalid_intersection_types:n="Intersection results could not be merged";break;case w.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case w.not_finite:n="Number must be finite";break;default:n=t.defaultError,M.assertNever(e)}return{message:n}},vt=c0});function l0(e){qf=e}function or(){return qf}var qf,Ks=k(()=>{fc();qf=vt});function v(e,t){let n=or(),r=ko({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===vt?void 0:vt].filter(o=>!!o)});e.common.issues.push(r)}var ko,u0,le,$,cn,ke,Zs,Vs,jt,sr,pc=k(()=>{Ks();fc();ko=e=>{let{data:t,path:n,errorMaps:r,issueData:o}=e,s=[...n,...o.path||[]],i={...o,path:s};if(o.message!==void 0)return{...o,path:s,message:o.message};let a="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)a=l(i,{data:t,defaultError:a}).message;return{...o,path:s,message:a}},u0=[];le=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){let r=[];for(let o of n){if(o.status==="aborted")return $;o.status==="dirty"&&t.dirty(),r.push(o.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){let r=[];for(let o of n){let s=await o.key,i=await o.value;r.push({key:s,value:i})}return e.mergeObjectSync(t,r)}static mergeObjectSync(t,n){let r={};for(let o of n){let{key:s,value:i}=o;if(s.status==="aborted"||i.status==="aborted")return $;s.status==="dirty"&&t.dirty(),i.status==="dirty"&&t.dirty(),s.value!=="__proto__"&&(typeof i.value<"u"||o.alwaysSet)&&(r[s.value]=i.value)}return{status:t.value,value:r}}},$=Object.freeze({status:"aborted"}),cn=e=>({status:"dirty",value:e}),ke=e=>({status:"valid",value:e}),Zs=e=>e.status==="aborted",Vs=e=>e.status==="dirty",jt=e=>e.status==="valid",sr=e=>typeof Promise<"u"&&e instanceof Promise});var Yf=k(()=>{});var S,Xf=k(()=>{(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t?.message})(S||(S={}))});function O(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:o}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:o}:{errorMap:(i,a)=>{let{message:c}=e;return i.code==="invalid_enum_value"?{message:c??a.defaultError}:typeof a.data>"u"?{message:c??r??a.defaultError}:i.code!=="invalid_type"?{message:a.defaultError}:{message:c??n??a.defaultError}},description:o}}function np(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);let n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function T0(e){return new RegExp(`^${np(e)}$`)}function rp(e){let t=`${tp}T${np(e)}`,n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function A0(e,t){return!!((t==="v4"||!t)&&b0.test(e)||(t==="v6"||!t)&&v0.test(e))}function R0(e,t){if(!g0.test(e))return!1;try{let[n]=e.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),o=JSON.parse(atob(r));return!(typeof o!="object"||o===null||"typ"in o&&o?.typ!=="JWT"||!o.alg||t&&o.alg!==t)}catch{return!1}}function C0(e,t){return!!((t==="v4"||!t)&&x0.test(e)||(t==="v6"||!t)&&_0.test(e))}function P0(e,t){let n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,o=n>r?n:r,s=Number.parseInt(e.toFixed(o).replace(".","")),i=Number.parseInt(t.toFixed(o).replace(".",""));return s%i/10**o}function ir(e){if(e instanceof Te){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=Je.create(ir(r))}return new Te({...e._def,shape:()=>t})}else return e instanceof Et?new Et({...e._def,type:ir(e.element)}):e instanceof Je?Je.create(ir(e.unwrap())):e instanceof dt?dt.create(ir(e.unwrap())):e instanceof ut?ut.create(e.items.map(t=>ir(t))):e}function hc(e,t){let n=lt(e),r=lt(t);if(e===t)return{valid:!0,data:e};if(n===_.object&&r===_.object){let o=M.objectKeys(t),s=M.objectKeys(e).filter(a=>o.indexOf(a)!==-1),i={...e,...t};for(let a of s){let c=hc(e[a],t[a]);if(!c.valid)return{valid:!1};i[a]=c.data}return{valid:!0,data:i}}else if(n===_.array&&r===_.array){if(e.length!==t.length)return{valid:!1};let o=[];for(let s=0;s<e.length;s++){let i=e[s],a=t[s],c=hc(i,a);if(!c.valid)return{valid:!1};o.push(c.data)}return{valid:!0,data:o}}else return n===_.date&&r===_.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}function op(e,t){return new wn({values:e,typeName:A.ZodEnum,...O(t)})}function ep(e,t){let n=typeof e=="function"?e(t):typeof e=="string"?{message:e}:e;return typeof n=="string"?{message:n}:n}function sp(e,t={},n){return e?zt.create().superRefine((r,o)=>{let s=e(r);if(s instanceof Promise)return s.then(i=>{if(!i){let a=ep(t,r),c=a.fatal??n??!0;o.addIssue({code:"custom",...a,fatal:c})}});if(!s){let i=ep(t,r),a=i.fatal??n??!0;o.addIssue({code:"custom",...i,fatal:a})}}):zt.create()}var Ge,Qf,I,d0,f0,p0,m0,h0,g0,k0,y0,w0,mc,b0,x0,v0,_0,S0,E0,tp,$0,Lt,ln,un,dn,fn,ar,pn,mn,zt,St,tt,cr,Et,Te,hn,_t,Ws,gn,ut,qs,lr,ur,Ys,kn,yn,wn,bn,Ut,Ke,Je,dt,xn,vn,dr,O0,yo,wo,_n,I0,A,N0,ip,ap,H0,D0,cp,M0,F0,j0,L0,z0,U0,B0,J0,G0,K0,Z0,V0,W0,q0,Y0,X0,Q0,ev,tv,nv,rv,ov,sv,iv,av,cv,lv,uv,dv,fv,pv,mv,hv,gv,lp=k(()=>{Gs();Ks();Xf();pc();go();Ge=class{constructor(t,n,r,o){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=o}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Qf=(e,t)=>{if(jt(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new $e(e.common.issues);return this._error=n,this._error}}};I=class{get description(){return this._def.description}_getType(t){return lt(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:lt(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new le,ctx:{common:t.parent.common,data:t.data,parsedType:lt(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let n=this._parse(t);if(sr(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){let n=this._parse(t);return Promise.resolve(n)}parse(t,n){let r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:lt(t)},o=this._parseSync({data:t,path:r.path,parent:r});return Qf(r,o)}"~validate"(t){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:lt(t)};if(!this["~standard"].async)try{let r=this._parseSync({data:t,path:[],parent:n});return jt(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:n}).then(r=>jt(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(t,n){let r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:lt(t)},o=this._parse({data:t,path:r.path,parent:r}),s=await(sr(o)?o:Promise.resolve(o));return Qf(r,s)}refine(t,n){let r=o=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(o):n;return this._refinement((o,s)=>{let i=t(o),a=()=>s.addIssue({code:w.custom,...r(o)});return typeof Promise<"u"&&i instanceof Promise?i.then(c=>c?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(t,n){return this._refinement((r,o)=>t(r)?!0:(o.addIssue(typeof n=="function"?n(r,o):n),!1))}_refinement(t){return new Ke({schema:this,typeName:A.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return Je.create(this,this._def)}nullable(){return dt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Et.create(this)}promise(){return Ut.create(this,this._def)}or(t){return hn.create([this,t],this._def)}and(t){return gn.create(this,t,this._def)}transform(t){return new Ke({...O(this._def),schema:this,typeName:A.ZodEffects,effect:{type:"transform",transform:t}})}default(t){let n=typeof t=="function"?t:()=>t;return new xn({...O(this._def),innerType:this,defaultValue:n,typeName:A.ZodDefault})}brand(){return new yo({typeName:A.ZodBranded,type:this,...O(this._def)})}catch(t){let n=typeof t=="function"?t:()=>t;return new vn({...O(this._def),innerType:this,catchValue:n,typeName:A.ZodCatch})}describe(t){let n=this.constructor;return new n({...this._def,description:t})}pipe(t){return wo.create(this,t)}readonly(){return _n.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},d0=/^c[^\s-]{8,}$/i,f0=/^[0-9a-z]+$/,p0=/^[0-9A-HJKMNP-TV-Z]{26}$/i,m0=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,h0=/^[a-z0-9_-]{21}$/i,g0=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,k0=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,y0=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,w0="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",b0=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,x0=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,v0=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,_0=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,S0=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,E0=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,tp="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",$0=new RegExp(`^${tp}$`);Lt=class e extends I{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==_.string){let s=this._getOrReturnCtx(t);return v(s,{code:w.invalid_type,expected:_.string,received:s.parsedType}),$}let r=new le,o;for(let s of this._def.checks)if(s.kind==="min")t.data.length<s.value&&(o=this._getOrReturnCtx(t,o),v(o,{code:w.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="max")t.data.length>s.value&&(o=this._getOrReturnCtx(t,o),v(o,{code:w.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="length"){let i=t.data.length>s.value,a=t.data.length<s.value;(i||a)&&(o=this._getOrReturnCtx(t,o),i?v(o,{code:w.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}):a&&v(o,{code:w.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}),r.dirty())}else if(s.kind==="email")y0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"email",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="emoji")mc||(mc=new RegExp(w0,"u")),mc.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"emoji",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="uuid")m0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"uuid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="nanoid")h0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"nanoid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="cuid")d0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"cuid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="cuid2")f0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"cuid2",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="ulid")p0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"ulid",code:w.invalid_string,message:s.message}),r.dirty());else if(s.kind==="url")try{new URL(t.data)}catch{o=this._getOrReturnCtx(t,o),v(o,{validation:"url",code:w.invalid_string,message:s.message}),r.dirty()}else s.kind==="regex"?(s.regex.lastIndex=0,s.regex.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"regex",code:w.invalid_string,message:s.message}),r.dirty())):s.kind==="trim"?t.data=t.data.trim():s.kind==="includes"?t.data.includes(s.value,s.position)||(o=this._getOrReturnCtx(t,o),v(o,{code:w.invalid_string,validation:{includes:s.value,position:s.position},message:s.message}),r.dirty()):s.kind==="toLowerCase"?t.data=t.data.toLowerCase():s.kind==="toUpperCase"?t.data=t.data.toUpperCase():s.kind==="startsWith"?t.data.startsWith(s.value)||(o=this._getOrReturnCtx(t,o),v(o,{code:w.invalid_string,validation:{startsWith:s.value},message:s.message}),r.dirty()):s.kind==="endsWith"?t.data.endsWith(s.value)||(o=this._getOrReturnCtx(t,o),v(o,{code:w.invalid_string,validation:{endsWith:s.value},message:s.message}),r.dirty()):s.kind==="datetime"?rp(s).test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{code:w.invalid_string,validation:"datetime",message:s.message}),r.dirty()):s.kind==="date"?$0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{code:w.invalid_string,validation:"date",message:s.message}),r.dirty()):s.kind==="time"?T0(s).test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{code:w.invalid_string,validation:"time",message:s.message}),r.dirty()):s.kind==="duration"?k0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"duration",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="ip"?A0(t.data,s.version)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"ip",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="jwt"?R0(t.data,s.alg)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"jwt",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="cidr"?C0(t.data,s.version)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"cidr",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="base64"?S0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"base64",code:w.invalid_string,message:s.message}),r.dirty()):s.kind==="base64url"?E0.test(t.data)||(o=this._getOrReturnCtx(t,o),v(o,{validation:"base64url",code:w.invalid_string,message:s.message}),r.dirty()):M.assertNever(s);return{status:r.value,value:t.data}}_regex(t,n,r){return this.refinement(o=>t.test(o),{validation:n,code:w.invalid_string,...S.errToObj(r)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...S.errToObj(t)})}url(t){return this._addCheck({kind:"url",...S.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...S.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...S.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...S.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...S.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...S.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...S.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...S.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...S.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...S.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...S.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...S.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...S.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...S.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...S.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...S.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n?.position,...S.errToObj(n?.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...S.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...S.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...S.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...S.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...S.errToObj(n)})}nonempty(t){return this.min(1,S.errToObj(t))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};Lt.create=e=>new Lt({checks:[],typeName:A.ZodString,coerce:e?.coerce??!1,...O(e)});ln=class e extends I{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==_.number){let s=this._getOrReturnCtx(t);return v(s,{code:w.invalid_type,expected:_.number,received:s.parsedType}),$}let r,o=new le;for(let s of this._def.checks)s.kind==="int"?M.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),v(r,{code:w.invalid_type,expected:"integer",received:"float",message:s.message}),o.dirty()):s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(r=this._getOrReturnCtx(t,r),v(r,{code:w.too_small,minimum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),o.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(r=this._getOrReturnCtx(t,r),v(r,{code:w.too_big,maximum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),o.dirty()):s.kind==="multipleOf"?P0(t.data,s.value)!==0&&(r=this._getOrReturnCtx(t,r),v(r,{code:w.not_multiple_of,multipleOf:s.value,message:s.message}),o.dirty()):s.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),v(r,{code:w.not_finite,message:s.message}),o.dirty()):M.assertNever(s);return{status:o.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,S.toString(n))}gt(t,n){return this.setLimit("min",t,!1,S.toString(n))}lte(t,n){return this.setLimit("max",t,!0,S.toString(n))}lt(t,n){return this.setLimit("max",t,!1,S.toString(n))}setLimit(t,n,r,o){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:S.toString(o)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:S.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:S.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:S.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:S.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:S.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:S.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:S.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:S.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:S.toString(t)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&M.isInteger(t.value))}get isFinite(){let t=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.value<t)&&(t=r.value)}return Number.isFinite(n)&&Number.isFinite(t)}};ln.create=e=>new ln({checks:[],typeName:A.ZodNumber,coerce:e?.coerce||!1,...O(e)});un=class e extends I{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==_.bigint)return this._getInvalidInput(t);let r,o=new le;for(let s of this._def.checks)s.kind==="min"?(s.inclusive?t.data<s.value:t.data<=s.value)&&(r=this._getOrReturnCtx(t,r),v(r,{code:w.too_small,type:"bigint",minimum:s.value,inclusive:s.inclusive,message:s.message}),o.dirty()):s.kind==="max"?(s.inclusive?t.data>s.value:t.data>=s.value)&&(r=this._getOrReturnCtx(t,r),v(r,{code:w.too_big,type:"bigint",maximum:s.value,inclusive:s.inclusive,message:s.message}),o.dirty()):s.kind==="multipleOf"?t.data%s.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),v(r,{code:w.not_multiple_of,multipleOf:s.value,message:s.message}),o.dirty()):M.assertNever(s);return{status:o.value,value:t.data}}_getInvalidInput(t){let n=this._getOrReturnCtx(t);return v(n,{code:w.invalid_type,expected:_.bigint,received:n.parsedType}),$}gte(t,n){return this.setLimit("min",t,!0,S.toString(n))}gt(t,n){return this.setLimit("min",t,!1,S.toString(n))}lte(t,n){return this.setLimit("max",t,!0,S.toString(n))}lt(t,n){return this.setLimit("max",t,!1,S.toString(n))}setLimit(t,n,r,o){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:S.toString(o)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:S.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:S.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:S.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:S.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:S.toString(n)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};un.create=e=>new un({checks:[],typeName:A.ZodBigInt,coerce:e?.coerce??!1,...O(e)});dn=class extends I{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==_.boolean){let r=this._getOrReturnCtx(t);return v(r,{code:w.invalid_type,expected:_.boolean,received:r.parsedType}),$}return ke(t.data)}};dn.create=e=>new dn({typeName:A.ZodBoolean,coerce:e?.coerce||!1,...O(e)});fn=class e extends I{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==_.date){let s=this._getOrReturnCtx(t);return v(s,{code:w.invalid_type,expected:_.date,received:s.parsedType}),$}if(Number.isNaN(t.data.getTime())){let s=this._getOrReturnCtx(t);return v(s,{code:w.invalid_date}),$}let r=new le,o;for(let s of this._def.checks)s.kind==="min"?t.data.getTime()<s.value&&(o=this._getOrReturnCtx(t,o),v(o,{code:w.too_small,message:s.message,inclusive:!0,exact:!1,minimum:s.value,type:"date"}),r.dirty()):s.kind==="max"?t.data.getTime()>s.value&&(o=this._getOrReturnCtx(t,o),v(o,{code:w.too_big,message:s.message,inclusive:!0,exact:!1,maximum:s.value,type:"date"}),r.dirty()):M.assertNever(s);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:S.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:S.toString(n)})}get minDate(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t!=null?new Date(t):null}};fn.create=e=>new fn({checks:[],coerce:e?.coerce||!1,typeName:A.ZodDate,...O(e)});ar=class extends I{_parse(t){if(this._getType(t)!==_.symbol){let r=this._getOrReturnCtx(t);return v(r,{code:w.invalid_type,expected:_.symbol,received:r.parsedType}),$}return ke(t.data)}};ar.create=e=>new ar({typeName:A.ZodSymbol,...O(e)});pn=class extends I{_parse(t){if(this._getType(t)!==_.undefined){let r=this._getOrReturnCtx(t);return v(r,{code:w.invalid_type,expected:_.undefined,received:r.parsedType}),$}return ke(t.data)}};pn.create=e=>new pn({typeName:A.ZodUndefined,...O(e)});mn=class extends I{_parse(t){if(this._getType(t)!==_.null){let r=this._getOrReturnCtx(t);return v(r,{code:w.invalid_type,expected:_.null,received:r.parsedType}),$}return ke(t.data)}};mn.create=e=>new mn({typeName:A.ZodNull,...O(e)});zt=class extends I{constructor(){super(...arguments),this._any=!0}_parse(t){return ke(t.data)}};zt.create=e=>new zt({typeName:A.ZodAny,...O(e)});St=class extends I{constructor(){super(...arguments),this._unknown=!0}_parse(t){return ke(t.data)}};St.create=e=>new St({typeName:A.ZodUnknown,...O(e)});tt=class extends I{_parse(t){let n=this._getOrReturnCtx(t);return v(n,{code:w.invalid_type,expected:_.never,received:n.parsedType}),$}};tt.create=e=>new tt({typeName:A.ZodNever,...O(e)});cr=class extends I{_parse(t){if(this._getType(t)!==_.undefined){let r=this._getOrReturnCtx(t);return v(r,{code:w.invalid_type,expected:_.void,received:r.parsedType}),$}return ke(t.data)}};cr.create=e=>new cr({typeName:A.ZodVoid,...O(e)});Et=class e extends I{_parse(t){let{ctx:n,status:r}=this._processInputParams(t),o=this._def;if(n.parsedType!==_.array)return v(n,{code:w.invalid_type,expected:_.array,received:n.parsedType}),$;if(o.exactLength!==null){let i=n.data.length>o.exactLength.value,a=n.data.length<o.exactLength.value;(i||a)&&(v(n,{code:i?w.too_big:w.too_small,minimum:a?o.exactLength.value:void 0,maximum:i?o.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:o.exactLength.message}),r.dirty())}if(o.minLength!==null&&n.data.length<o.minLength.value&&(v(n,{code:w.too_small,minimum:o.minLength.value,type:"array",inclusive:!0,exact:!1,message:o.minLength.message}),r.dirty()),o.maxLength!==null&&n.data.length>o.maxLength.value&&(v(n,{code:w.too_big,maximum:o.maxLength.value,type:"array",inclusive:!0,exact:!1,message:o.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((i,a)=>o.type._parseAsync(new Ge(n,i,n.path,a)))).then(i=>le.mergeArray(r,i));let s=[...n.data].map((i,a)=>o.type._parseSync(new Ge(n,i,n.path,a)));return le.mergeArray(r,s)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:S.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:S.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:S.toString(n)}})}nonempty(t){return this.min(1,t)}};Et.create=(e,t)=>new Et({type:e,minLength:null,maxLength:null,exactLength:null,typeName:A.ZodArray,...O(t)});Te=class e extends I{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),n=M.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==_.object){let l=this._getOrReturnCtx(t);return v(l,{code:w.invalid_type,expected:_.object,received:l.parsedType}),$}let{status:r,ctx:o}=this._processInputParams(t),{shape:s,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof tt&&this._def.unknownKeys==="strip"))for(let l in o.data)i.includes(l)||a.push(l);let c=[];for(let l of i){let u=s[l],d=o.data[l];c.push({key:{status:"valid",value:l},value:u._parse(new Ge(o,d,o.path,l)),alwaysSet:l in o.data})}if(this._def.catchall instanceof tt){let l=this._def.unknownKeys;if(l==="passthrough")for(let u of a)c.push({key:{status:"valid",value:u},value:{status:"valid",value:o.data[u]}});else if(l==="strict")a.length>0&&(v(o,{code:w.unrecognized_keys,keys:a}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let u of a){let d=o.data[u];c.push({key:{status:"valid",value:u},value:l._parse(new Ge(o,d,o.path,u)),alwaysSet:u in o.data})}}return o.common.async?Promise.resolve().then(async()=>{let l=[];for(let u of c){let d=await u.key,p=await u.value;l.push({key:d,value:p,alwaysSet:u.alwaysSet})}return l}).then(l=>le.mergeObjectSync(r,l)):le.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(t){return S.errToObj,new e({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{let o=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:S.errToObj(t).message??o}:{message:o}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:A.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let r of M.objectKeys(t))t[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let r of M.objectKeys(this.shape))t[r]||(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}deepPartial(){return ir(this)}partial(t){let n={};for(let r of M.objectKeys(this.shape)){let o=this.shape[r];t&&!t[r]?n[r]=o:n[r]=o.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let r of M.objectKeys(this.shape))if(t&&!t[r])n[r]=this.shape[r];else{let s=this.shape[r];for(;s instanceof Je;)s=s._def.innerType;n[r]=s}return new e({...this._def,shape:()=>n})}keyof(){return op(M.objectKeys(this.shape))}};Te.create=(e,t)=>new Te({shape:()=>e,unknownKeys:"strip",catchall:tt.create(),typeName:A.ZodObject,...O(t)});Te.strictCreate=(e,t)=>new Te({shape:()=>e,unknownKeys:"strict",catchall:tt.create(),typeName:A.ZodObject,...O(t)});Te.lazycreate=(e,t)=>new Te({shape:e,unknownKeys:"strip",catchall:tt.create(),typeName:A.ZodObject,...O(t)});hn=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r=this._def.options;function o(s){for(let a of s)if(a.result.status==="valid")return a.result;for(let a of s)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;let i=s.map(a=>new $e(a.ctx.common.issues));return v(n,{code:w.invalid_union,unionErrors:i}),$}if(n.common.async)return Promise.all(r.map(async s=>{let i={...n,common:{...n.common,issues:[]},parent:null};return{result:await s._parseAsync({data:n.data,path:n.path,parent:i}),ctx:i}})).then(o);{let s,i=[];for(let c of r){let l={...n,common:{...n.common,issues:[]},parent:null},u=c._parseSync({data:n.data,path:n.path,parent:l});if(u.status==="valid")return u;u.status==="dirty"&&!s&&(s={result:u,ctx:l}),l.common.issues.length&&i.push(l.common.issues)}if(s)return n.common.issues.push(...s.ctx.common.issues),s.result;let a=i.map(c=>new $e(c));return v(n,{code:w.invalid_union,unionErrors:a}),$}}get options(){return this._def.options}};hn.create=(e,t)=>new hn({options:e,typeName:A.ZodUnion,...O(t)});_t=e=>e instanceof kn?_t(e.schema):e instanceof Ke?_t(e.innerType()):e instanceof yn?[e.value]:e instanceof wn?e.options:e instanceof bn?M.objectValues(e.enum):e instanceof xn?_t(e._def.innerType):e instanceof pn?[void 0]:e instanceof mn?[null]:e instanceof Je?[void 0,..._t(e.unwrap())]:e instanceof dt?[null,..._t(e.unwrap())]:e instanceof yo||e instanceof _n?_t(e.unwrap()):e instanceof vn?_t(e._def.innerType):[],Ws=class e extends I{_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==_.object)return v(n,{code:w.invalid_type,expected:_.object,received:n.parsedType}),$;let r=this.discriminator,o=n.data[r],s=this.optionsMap.get(o);return s?n.common.async?s._parseAsync({data:n.data,path:n.path,parent:n}):s._parseSync({data:n.data,path:n.path,parent:n}):(v(n,{code:w.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),$)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let o=new Map;for(let s of n){let i=_t(s.shape[t]);if(!i.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let a of i){if(o.has(a))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(a)}`);o.set(a,s)}}return new e({typeName:A.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:o,...O(r)})}};gn=class extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t),o=(s,i)=>{if(Zs(s)||Zs(i))return $;let a=hc(s.value,i.value);return a.valid?((Vs(s)||Vs(i))&&n.dirty(),{status:n.value,value:a.data}):(v(r,{code:w.invalid_intersection_types}),$)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([s,i])=>o(s,i)):o(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};gn.create=(e,t,n)=>new gn({left:e,right:t,typeName:A.ZodIntersection,...O(n)});ut=class e extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.array)return v(r,{code:w.invalid_type,expected:_.array,received:r.parsedType}),$;if(r.data.length<this._def.items.length)return v(r,{code:w.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),$;!this._def.rest&&r.data.length>this._def.items.length&&(v(r,{code:w.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let s=[...r.data].map((i,a)=>{let c=this._def.items[a]||this._def.rest;return c?c._parse(new Ge(r,i,r.path,a)):null}).filter(i=>!!i);return r.common.async?Promise.all(s).then(i=>le.mergeArray(n,i)):le.mergeArray(n,s)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};ut.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ut({items:e,typeName:A.ZodTuple,rest:null,...O(t)})};qs=class e extends I{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.object)return v(r,{code:w.invalid_type,expected:_.object,received:r.parsedType}),$;let o=[],s=this._def.keyType,i=this._def.valueType;for(let a in r.data)o.push({key:s._parse(new Ge(r,a,r.path,a)),value:i._parse(new Ge(r,r.data[a],r.path,a)),alwaysSet:a in r.data});return r.common.async?le.mergeObjectAsync(n,o):le.mergeObjectSync(n,o)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof I?new e({keyType:t,valueType:n,typeName:A.ZodRecord,...O(r)}):new e({keyType:Lt.create(),valueType:t,typeName:A.ZodRecord,...O(n)})}},lr=class extends I{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.map)return v(r,{code:w.invalid_type,expected:_.map,received:r.parsedType}),$;let o=this._def.keyType,s=this._def.valueType,i=[...r.data.entries()].map(([a,c],l)=>({key:o._parse(new Ge(r,a,r.path,[l,"key"])),value:s._parse(new Ge(r,c,r.path,[l,"value"]))}));if(r.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let c of i){let l=await c.key,u=await c.value;if(l.status==="aborted"||u.status==="aborted")return $;(l.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(l.value,u.value)}return{status:n.value,value:a}})}else{let a=new Map;for(let c of i){let l=c.key,u=c.value;if(l.status==="aborted"||u.status==="aborted")return $;(l.status==="dirty"||u.status==="dirty")&&n.dirty(),a.set(l.value,u.value)}return{status:n.value,value:a}}}};lr.create=(e,t,n)=>new lr({valueType:t,keyType:e,typeName:A.ZodMap,...O(n)});ur=class e extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==_.set)return v(r,{code:w.invalid_type,expected:_.set,received:r.parsedType}),$;let o=this._def;o.minSize!==null&&r.data.size<o.minSize.value&&(v(r,{code:w.too_small,minimum:o.minSize.value,type:"set",inclusive:!0,exact:!1,message:o.minSize.message}),n.dirty()),o.maxSize!==null&&r.data.size>o.maxSize.value&&(v(r,{code:w.too_big,maximum:o.maxSize.value,type:"set",inclusive:!0,exact:!1,message:o.maxSize.message}),n.dirty());let s=this._def.valueType;function i(c){let l=new Set;for(let u of c){if(u.status==="aborted")return $;u.status==="dirty"&&n.dirty(),l.add(u.value)}return{status:n.value,value:l}}let a=[...r.data.values()].map((c,l)=>s._parse(new Ge(r,c,r.path,l)));return r.common.async?Promise.all(a).then(c=>i(c)):i(a)}min(t,n){return new e({...this._def,minSize:{value:t,message:S.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:S.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}};ur.create=(e,t)=>new ur({valueType:e,minSize:null,maxSize:null,typeName:A.ZodSet,...O(t)});Ys=class e extends I{constructor(){super(...arguments),this.validate=this.implement}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==_.function)return v(n,{code:w.invalid_type,expected:_.function,received:n.parsedType}),$;function r(a,c){return ko({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,or(),vt].filter(l=>!!l),issueData:{code:w.invalid_arguments,argumentsError:c}})}function o(a,c){return ko({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,or(),vt].filter(l=>!!l),issueData:{code:w.invalid_return_type,returnTypeError:c}})}let s={errorMap:n.common.contextualErrorMap},i=n.data;if(this._def.returns instanceof Ut){let a=this;return ke(async function(...c){let l=new $e([]),u=await a._def.args.parseAsync(c,s).catch(f=>{throw l.addIssue(r(c,f)),l}),d=await Reflect.apply(i,this,u);return await a._def.returns._def.type.parseAsync(d,s).catch(f=>{throw l.addIssue(o(d,f)),l})})}else{let a=this;return ke(function(...c){let l=a._def.args.safeParse(c,s);if(!l.success)throw new $e([r(c,l.error)]);let u=Reflect.apply(i,this,l.data),d=a._def.returns.safeParse(u,s);if(!d.success)throw new $e([o(u,d.error)]);return d.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:ut.create(t).rest(St.create())})}returns(t){return new e({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new e({args:t||ut.create([]).rest(St.create()),returns:n||St.create(),typeName:A.ZodFunction,...O(r)})}},kn=class extends I{get schema(){return this._def.getter()}_parse(t){let{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};kn.create=(e,t)=>new kn({getter:e,typeName:A.ZodLazy,...O(t)});yn=class extends I{_parse(t){if(t.data!==this._def.value){let n=this._getOrReturnCtx(t);return v(n,{received:n.data,code:w.invalid_literal,expected:this._def.value}),$}return{status:"valid",value:t.data}}get value(){return this._def.value}};yn.create=(e,t)=>new yn({value:e,typeName:A.ZodLiteral,...O(t)});wn=class e extends I{_parse(t){if(typeof t.data!="string"){let n=this._getOrReturnCtx(t),r=this._def.values;return v(n,{expected:M.joinValues(r),received:n.parsedType,code:w.invalid_type}),$}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){let n=this._getOrReturnCtx(t),r=this._def.values;return v(n,{received:n.data,code:w.invalid_enum_value,options:r}),$}return ke(t.data)}get options(){return this._def.values}get enum(){let t={};for(let n of this._def.values)t[n]=n;return t}get Values(){let t={};for(let n of this._def.values)t[n]=n;return t}get Enum(){let t={};for(let n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(r=>!t.includes(r)),{...this._def,...n})}};wn.create=op;bn=class extends I{_parse(t){let n=M.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==_.string&&r.parsedType!==_.number){let o=M.objectValues(n);return v(r,{expected:M.joinValues(o),received:r.parsedType,code:w.invalid_type}),$}if(this._cache||(this._cache=new Set(M.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){let o=M.objectValues(n);return v(r,{received:r.data,code:w.invalid_enum_value,options:o}),$}return ke(t.data)}get enum(){return this._def.values}};bn.create=(e,t)=>new bn({values:e,typeName:A.ZodNativeEnum,...O(t)});Ut=class extends I{unwrap(){return this._def.type}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==_.promise&&n.common.async===!1)return v(n,{code:w.invalid_type,expected:_.promise,received:n.parsedType}),$;let r=n.parsedType===_.promise?n.data:Promise.resolve(n.data);return ke(r.then(o=>this._def.type.parseAsync(o,{path:n.path,errorMap:n.common.contextualErrorMap})))}};Ut.create=(e,t)=>new Ut({type:e,typeName:A.ZodPromise,...O(t)});Ke=class extends I{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===A.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:n,ctx:r}=this._processInputParams(t),o=this._def.effect||null,s={addIssue:i=>{v(r,i),i.fatal?n.abort():n.dirty()},get path(){return r.path}};if(s.addIssue=s.addIssue.bind(s),o.type==="preprocess"){let i=o.transform(r.data,s);if(r.common.async)return Promise.resolve(i).then(async a=>{if(n.value==="aborted")return $;let c=await this._def.schema._parseAsync({data:a,path:r.path,parent:r});return c.status==="aborted"?$:c.status==="dirty"?cn(c.value):n.value==="dirty"?cn(c.value):c});{if(n.value==="aborted")return $;let a=this._def.schema._parseSync({data:i,path:r.path,parent:r});return a.status==="aborted"?$:a.status==="dirty"?cn(a.value):n.value==="dirty"?cn(a.value):a}}if(o.type==="refinement"){let i=a=>{let c=o.refinement(a,s);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===!1){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?$:(a.status==="dirty"&&n.dirty(),i(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?$:(a.status==="dirty"&&n.dirty(),i(a.value).then(()=>({status:n.value,value:a.value}))))}if(o.type==="transform")if(r.common.async===!1){let i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!jt(i))return $;let a=o.transform(i.value,s);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>jt(i)?Promise.resolve(o.transform(i.value,s)).then(a=>({status:n.value,value:a})):$);M.assertNever(o)}};Ke.create=(e,t,n)=>new Ke({schema:e,typeName:A.ZodEffects,effect:t,...O(n)});Ke.createWithPreprocess=(e,t,n)=>new Ke({schema:t,effect:{type:"preprocess",transform:e},typeName:A.ZodEffects,...O(n)});Je=class extends I{_parse(t){return this._getType(t)===_.undefined?ke(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};Je.create=(e,t)=>new Je({innerType:e,typeName:A.ZodOptional,...O(t)});dt=class extends I{_parse(t){return this._getType(t)===_.null?ke(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};dt.create=(e,t)=>new dt({innerType:e,typeName:A.ZodNullable,...O(t)});xn=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r=n.data;return n.parsedType===_.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};xn.create=(e,t)=>new xn({innerType:e,typeName:A.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...O(t)});vn=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},o=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return sr(o)?o.then(s=>({status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new $e(r.common.issues)},input:r.data})})):{status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new $e(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};vn.create=(e,t)=>new vn({innerType:e,typeName:A.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...O(t)});dr=class extends I{_parse(t){if(this._getType(t)!==_.nan){let r=this._getOrReturnCtx(t);return v(r,{code:w.invalid_type,expected:_.nan,received:r.parsedType}),$}return{status:"valid",value:t.data}}};dr.create=e=>new dr({typeName:A.ZodNaN,...O(e)});O0=Symbol("zod_brand"),yo=class extends I{_parse(t){let{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},wo=class e extends I{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{let s=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?$:s.status==="dirty"?(n.dirty(),cn(s.value)):this._def.out._parseAsync({data:s.value,path:r.path,parent:r})})();{let o=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?$:o.status==="dirty"?(n.dirty(),{status:"dirty",value:o.value}):this._def.out._parseSync({data:o.value,path:r.path,parent:r})}}static create(t,n){return new e({in:t,out:n,typeName:A.ZodPipeline})}},_n=class extends I{_parse(t){let n=this._def.innerType._parse(t),r=o=>(jt(o)&&(o.value=Object.freeze(o.value)),o);return sr(n)?n.then(o=>r(o)):r(n)}unwrap(){return this._def.innerType}};_n.create=(e,t)=>new _n({innerType:e,typeName:A.ZodReadonly,...O(t)});I0={object:Te.lazycreate};(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(A||(A={}));N0=(e,t={message:`Input not instance of ${e.name}`})=>sp(n=>n instanceof e,t),ip=Lt.create,ap=ln.create,H0=dr.create,D0=un.create,cp=dn.create,M0=fn.create,F0=ar.create,j0=pn.create,L0=mn.create,z0=zt.create,U0=St.create,B0=tt.create,J0=cr.create,G0=Et.create,K0=Te.create,Z0=Te.strictCreate,V0=hn.create,W0=Ws.create,q0=gn.create,Y0=ut.create,X0=qs.create,Q0=lr.create,ev=ur.create,tv=Ys.create,nv=kn.create,rv=yn.create,ov=wn.create,sv=bn.create,iv=Ut.create,av=Ke.create,cv=Je.create,lv=dt.create,uv=Ke.createWithPreprocess,dv=wo.create,fv=()=>ip().optional(),pv=()=>ap().optional(),mv=()=>cp().optional(),hv={string:(e=>Lt.create({...e,coerce:!0})),number:(e=>ln.create({...e,coerce:!0})),boolean:(e=>dn.create({...e,coerce:!0})),bigint:(e=>un.create({...e,coerce:!0})),date:(e=>fn.create({...e,coerce:!0}))},gv=$});var x={};L(x,{BRAND:()=>O0,DIRTY:()=>cn,EMPTY_PATH:()=>u0,INVALID:()=>$,NEVER:()=>gv,OK:()=>ke,ParseStatus:()=>le,Schema:()=>I,ZodAny:()=>zt,ZodArray:()=>Et,ZodBigInt:()=>un,ZodBoolean:()=>dn,ZodBranded:()=>yo,ZodCatch:()=>vn,ZodDate:()=>fn,ZodDefault:()=>xn,ZodDiscriminatedUnion:()=>Ws,ZodEffects:()=>Ke,ZodEnum:()=>wn,ZodError:()=>$e,ZodFirstPartyTypeKind:()=>A,ZodFunction:()=>Ys,ZodIntersection:()=>gn,ZodIssueCode:()=>w,ZodLazy:()=>kn,ZodLiteral:()=>yn,ZodMap:()=>lr,ZodNaN:()=>dr,ZodNativeEnum:()=>bn,ZodNever:()=>tt,ZodNull:()=>mn,ZodNullable:()=>dt,ZodNumber:()=>ln,ZodObject:()=>Te,ZodOptional:()=>Je,ZodParsedType:()=>_,ZodPipeline:()=>wo,ZodPromise:()=>Ut,ZodReadonly:()=>_n,ZodRecord:()=>qs,ZodSchema:()=>I,ZodSet:()=>ur,ZodString:()=>Lt,ZodSymbol:()=>ar,ZodTransformer:()=>Ke,ZodTuple:()=>ut,ZodType:()=>I,ZodUndefined:()=>pn,ZodUnion:()=>hn,ZodUnknown:()=>St,ZodVoid:()=>cr,addIssueToContext:()=>v,any:()=>z0,array:()=>G0,bigint:()=>D0,boolean:()=>cp,coerce:()=>hv,custom:()=>sp,date:()=>M0,datetimeRegex:()=>rp,defaultErrorMap:()=>vt,discriminatedUnion:()=>W0,effect:()=>av,enum:()=>ov,function:()=>tv,getErrorMap:()=>or,getParsedType:()=>lt,instanceof:()=>N0,intersection:()=>q0,isAborted:()=>Zs,isAsync:()=>sr,isDirty:()=>Vs,isValid:()=>jt,late:()=>I0,lazy:()=>nv,literal:()=>rv,makeIssue:()=>ko,map:()=>Q0,nan:()=>H0,nativeEnum:()=>sv,never:()=>B0,null:()=>L0,nullable:()=>lv,number:()=>ap,object:()=>K0,objectUtil:()=>dc,oboolean:()=>mv,onumber:()=>pv,optional:()=>cv,ostring:()=>fv,pipeline:()=>dv,preprocess:()=>uv,promise:()=>iv,quotelessJson:()=>a0,record:()=>X0,set:()=>ev,setErrorMap:()=>l0,strictObject:()=>Z0,string:()=>ip,symbol:()=>F0,transformer:()=>av,tuple:()=>Y0,undefined:()=>j0,union:()=>V0,unknown:()=>U0,util:()=>M,void:()=>J0});var gc=k(()=>{Ks();pc();Yf();go();lp();Gs()});var fr=k(()=>{gc();gc()});import{createHash as kv}from"node:crypto";function nt(e){let t=up.get(e);return t||(t=kv("sha256").update(`tkr:${e}`).digest("hex").slice(0,16),up.set(e,t)),t}var yv,wv,pr,up,mr=k(()=>{"use strict";fr();yv=x.enum(["normal","compact","minimal"]),wv=x.enum(["off","light","balanced","max"]),pr=x.object({enabled:x.boolean().default(!0),telemetryOptIn:x.boolean().default(!0),outputVerbosity:yv.default("compact"),reducer:wv.default("off"),filters:x.object({enableAll:x.boolean().default(!0),disabled:x.array(x.string().max(64)).max(100).default([])}).default({enableAll:!0,disabled:[]})}),up=new Map});var fp={};L(fp,{bundleRefreshFile:()=>bo,claudeCommandFile:()=>Bt,claudeCommandsDir:()=>vo,contentCacheDir:()=>$t,contentCacheFile:()=>gr,enrollCooldownFile:()=>kc,installIdFile:()=>hr,managedCommandsFile:()=>Xs,reducerContextFile:()=>kr,reducerRulesStateFile:()=>yr,restoreConfigFile:()=>ft,skillFile:()=>Me,skillsDir:()=>xo,stateFile:()=>bv,tokmizerHome:()=>y});import dp from"node:os";import{join as _e}from"node:path";function y(){return process.env.TOKMIZER_HOME||_e(dp.homedir(),".tokmizer")}function bv(){return _e(y(),"state.json")}function hr(){return _e(y(),"install-id")}function kc(){return _e(y(),"enroll-cooldown")}function bo(){return _e(y(),"bundle-refresh.json")}function xo(){return _e(y(),"skills")}function Me(e){return _e(xo(),`${e}.md`)}function $t(){return _e(y(),"content-cache")}function ft(){return _e(y(),"restore.json")}function gr(e){return _e($t(),e)}function kr(){return _e(y(),"reducer-context.txt")}function yr(){return _e(y(),"reducer-rules.json")}function Xs(){return _e(y(),"managed-commands.json")}function vo(){return process.env.TOKMIZER_CLAUDE_COMMANDS_DIR||_e(dp.homedir(),".claude","commands")}function Bt(e){return _e(vo(),`${e}.md`)}var F=k(()=>{"use strict"});import wr from"node:os";import{createHash as xv,createHmac as pp,randomUUID as vv}from"node:crypto";import{readFile as mp,writeFile as hp,mkdir as _v}from"node:fs/promises";async function Qs(){try{let n=(await mp(hr(),"utf8")).trim();if(/^[0-9a-f-]{36}$/i.test(n))return n}catch{}await _v(y(),{recursive:!0});let e=vv();try{return await hp(hr(),e,{mode:384,flag:"wx"}),e}catch{try{let t=(await mp(hr(),"utf8")).trim();if(/^[0-9a-f-]{36}$/i.test(t))return t}catch{}return await hp(hr(),e,{mode:384}),e}}function yc(e){return xv("sha256").update(e).digest("hex")}function Sv(){let e=wr.networkInterfaces();for(let t of Object.keys(e))for(let n of e[t]??[])if(!n.internal&&n.mac&&n.mac!=="00:00:00:00:00:00")return n.mac;return"no-mac"}async function Ze(){let e=await Qs(),t=wr.hostname(),n=wr.platform(),r=wr.release(),o=wr.cpus(),s=o[0]?.model??"unknown",i=o.length,a=Sv(),c=wr.userInfo().username,l=[t,n,r,s,String(i),yc(a),yc(c),e].join("|");return{fingerprint:yc(l),installId:e,hostname:t,os:n,osVersion:r,cpuModel:s,cpuCores:i,macHash:pp("sha256",e).update(a).digest("hex"),usernameHash:pp("sha256",e).update(c).digest("hex")}}var Sn=k(()=>{"use strict";F()});import{join as wc}from"node:path";import{mkdir as Ev,readFile as $v,writeFile as Tv,unlink as gp,rename as Av}from"node:fs/promises";function _o(){try{let e=Intl.DateTimeFormat().resolvedOptions().timeZone;return e&&e.length>0?e:"Etc/UTC"}catch{return"Etc/UTC"}}function xc(e){return e?.dir??y()}async function z(e){let t=xc(e);try{let n=await $v(wc(t,bc),"utf8"),r=JSON.parse(n),o=r.timeZone;return{...r,lastSettingsRevision:r.lastSettingsRevision??0,get timeZone(){return o??=_o()},bonusActive:r.bonusActive??!1,...r.bonusResetAt!==void 0?{bonusResetAt:r.bonusResetAt}:{}}}catch{return null}}async function ei(e,t){let n=xc(t);await Ev(n,{recursive:!0}),e.installedAt==null&&(e.installedAt=Math.floor(Date.now()/1e3));let r=wc(n,bc),o=`${r}.tmp-${process.pid}-${process.hrtime.bigint()}`;await Tv(o,JSON.stringify(e,null,2),{mode:384});try{await Av(o,r)}catch(s){try{await gp(o)}catch{}throw s}}async function ti(e){let t=xc(e);try{await gp(wc(t,bc))}catch{return}}var bc,pt=k(()=>{"use strict";F();bc="state.json"});import{createRequire as Rv}from"node:module";function Pv(){let e="0.9.72";if(e)return e;for(let t of["../package.json","../../package.json"])try{let n=Cv(t).version;if(typeof n=="string"&&n)return n}catch{}return"0.0.0"}function Tt(e,t){if(!e||!t)return!1;let n=e.split(".").map(o=>parseInt(o,10)),r=t.split(".").map(o=>parseInt(o,10));for(let o=0;o<3;o+=1){let s=n[o]??0,i=r[o]??0;if(Number.isNaN(s)||Number.isNaN(i))return!1;if(s<i)return!0;if(s>i)return!1}return!1}var Cv,ue,En=k(()=>{"use strict";Cv=Rv(import.meta.url);ue=Pv()});var kp,yp=k(()=>{"use strict";kp=`-----BEGIN PUBLIC KEY-----
|
|
4
4
|
MCowBQYDK2VwAyEAj/kMlXlhTIGHRKxOKMuGFa1S1ybxxwgdYcAE0YM9fgU=
|
|
5
5
|
-----END PUBLIC KEY-----
|
|
6
|
-
`});import{existsSync as
|
|
7
|
-
`),
|
|
8
|
-
`)}function
|
|
6
|
+
`});import{existsSync as wp,mkdirSync as bp,rmSync as Ov,writeFileSync as xp}from"node:fs";import{join as vp}from"node:path";function _c(){return vp(y(),"network-off")}function So(){let e=process.env.TOKMIZER_NETWORK;return e!==void 0&&Iv.has(e.trim().toLowerCase())}function B(){return So()?!1:!wp(_c())}function $n(){if(!B())throw new vc}function _p(e){if(e){Ov(_c(),{force:!0});return}bp(y(),{recursive:!0,mode:448}),xp(_c(),String(Date.now()),{mode:384})}function Eo(){return So()?"off (TOKMIZER_NETWORK)":B()?"on":"off"}function Dv(){return vp(y(),Nv)}function Ec(){if(!B())return null;let e=Dv();if(wp(e))return null;try{bp(y(),{recursive:!0}),xp(e,String(Date.now()),{mode:384})}catch{return null}return Hv}var Iv,Nv,Sc,Hv,vc,At=k(()=>{"use strict";F();Iv=new Set(["0","off","false","no"]),Nv="network-notice-shown",Sc="Network is off for Tokmizer. Turn it back on with: tkr network on",Hv=["Tokmizer contacts tokmizer.com to keep its rules up to date and to improve the product. No account or email is needed.","It sends a random install ID, your computer name, OS and CPU model, a hash of your network card address and of your user name, and the plugin version. Command contents and output are never sent.","Usage stats (command names, token counts and install health counts) are sent only while they are on. Check with: tkr telemetry status.","Turn all network access off: tkr network off. Usage stats only: tkr telemetry off."].join(`
|
|
7
|
+
`),vc=class extends Error{constructor(){super(Sc),this.name="NetworkDisabledError"}}});import{createHmac as Mv,createPublicKey as Fv,verify as jv}from"node:crypto";function $o(){return kp.replace(/\\n/g,`
|
|
8
|
+
`)}function Uv(e,t,n,r){try{let o=Fv({key:r,format:"pem"});return jv(null,Buffer.from(`${t}.${e}`,"utf8"),o,Buffer.from(n,"base64url"))}catch{return!1}}async function Jt(e){let t=await e.text(),n=$o(),r=e.headers?.get?.("x-tokmizer-resp-ts")??null;if(r!==null){let a=Number(r);if(!Number.isFinite(a)||Date.now()-a>Lv||a-Date.now()>zv)throw new Rt("http","stale server response (resp-ts outside freshness window)")}if(!n||!n.includes("BEGIN PUBLIC KEY"))throw new Rt("http","no signing public key configured; refusing to trust server response");let o=e.headers?.get?.("x-tokmizer-resp-sig")??null,s=Number(r);if(!o||r===null||!Number.isFinite(s))throw new Rt("http","missing server response signature");let i=e.headers?.get?.("x-tokmizer-resp-path")??null;if(i!==null&&i!==Sp.get(e))throw new Rt("http","server response signed for another path");if(!Uv(i===null?t:`${i}.${t}`,s,o,n))throw new Rt("http","invalid server response signature");return JSON.parse(t)}function Bv(e,t,n,r,o){return Mv("sha256",o).update(`${e}
|
|
9
9
|
${t}
|
|
10
10
|
${r}
|
|
11
|
-
${n}`).digest("hex")}function Fv(e){let t=new URL(e);return`${t.pathname}${t.search}`}async function Ae(e,t,n,r){En();let o=Date.now(),s=n===void 0?"":JSON.stringify(n),i=`${r.baseUrl}${t}`,a=r.signingSecret?Dv(e,Fv(i),s,o,r.signingSecret):"0".repeat(64),c={"content-type":"application/json","x-tokmizer-fingerprint":r.fingerprint,"x-tokmizer-install-id":r.installId,"x-tokmizer-sig":a,"x-tokmizer-ts":String(o),"x-tokmizer-plugin-version":ue,"x-tokmizer-accept-resp-path":"1"};r.bearer&&(c.authorization=`Bearer ${r.bearer}`);let l=r.timeoutMs??5e3,u=e!=="GET"&&e!=="DELETE",d={method:e,headers:c,signal:AbortSignal.timeout(l)};u&&(d.body=s);let p;try{p=await fetch(i,d)}catch(f){let m=f.name;throw m==="TimeoutError"||m==="AbortError"?new At("timeout",`${e} ${t} timed out after ${l}ms`):new At("network",`${e} ${t} failed: ${f.message}`)}return p!==null&&typeof p=="object"&&xp.set(p,t.split("?")[0]),p}var Iv,Nv,xp,At,$n=k(()=>{"use strict";Sn();hp();Tt();Iv=300*1e3,Nv=120*1e3;xp=new WeakMap;At=class extends Error{constructor(n,r,o){super(r);this.kind=n;this.status=o;this.name="TransportError"}kind;status}});var Hp={};j(Hp,{STATIC_COMMAND_NAMES:()=>Ys,commandInstalled:()=>ei,commandsInstallStatus:()=>Rc,installCommand:()=>Ac,isFresh:()=>$c,pruneCommands:()=>wr,pruneSkills:()=>yr,readBundleRefresh:()=>_o,readSkill:()=>So,recordBundleRefresh:()=>ti,writeSkill:()=>Tc});import{chmod as Sc,mkdir as Xs,readFile as vo,writeFile as Qs,stat as Ec,readdir as Xv,rm as Cp}from"node:fs/promises";import{existsSync as Qv}from"node:fs";import{dirname as e_}from"node:path";async function Pp(){try{let e=JSON.parse(await vo(Ks(),"utf8"));return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}async function Ip(e){try{await Xs(y(),{recursive:!0}),await Qs(Ks(),JSON.stringify(e),{mode:384})}catch{}}function Np(){let e=Number(process.env.TOKMIZER_MAX_BUNDLE_AGE_MS);return Number.isFinite(e)&&e>0?Math.min(e,Rp):Rp}async function $c(e){try{let t=await Ec(Fe(e)),n=Date.now()-t.mtimeMs;return n<n_&&n<=Np()}catch{return!1}}async function Tc(e,t){await Xs(go(),{recursive:!0}),await Qs(Fe(e),t,{mode:384}),await Sc(Fe(e),384)}async function yr(e){let t=new Set(e),n;try{n=await Xv(go())}catch{return}for(let r of n){if(!r.endsWith(".md"))continue;let o=r.slice(0,-3);if(!t.has(o))try{await Cp(Fe(o))}catch{}}}async function Ac(e,t){if(!process.env.TOKMIZER_CLAUDE_COMMANDS_DIR&&!Qv(e_(ko())))return;await Xs(ko(),{recursive:!0});try{if(!(await vo(Ut(e),"utf8")).includes(Op))return}catch{}await Qs(Ut(e),t,{mode:384}),await Sc(Ut(e),384);let n=await Pp();n.includes(e)||await Ip([...n,e])}async function wr(e){let t=new Set([...e,...Ys]),n=await Pp(),r=new Set([...n,...t_]);for(let o of r)if(!t.has(o))try{if(!(await vo(Ut(o),"utf8")).includes(Op))continue;await Cp(Ut(o))}catch{}await Ip(n.filter(o=>t.has(o)))}async function Rc(){let e=0;for(let t of Ys)await ei(t)&&e++;return{installed:e,total:Ys.length}}async function ei(e){try{return await Ec(Ut(e)),!0}catch{return!1}}async function ti(e){try{await Xs(y(),{recursive:!0}),await Qs(ho(),JSON.stringify({at:Date.now(),error:e}),{mode:384}),await Sc(ho(),384)}catch{}}async function _o(){try{return JSON.parse(await vo(ho(),"utf8"))}catch{return null}}async function So(e){try{let t=await Ec(Fe(e));return Date.now()-t.mtimeMs>Np()?null:await vo(Fe(e),"utf8")}catch{return null}}var Op,Ys,t_,n_,Rp,ni=k(()=>{"use strict";F();Op="managed-by: tokmizer",Ys=["tkr","tkr-gain","tkr-status","tkr-link","tkr-unlink","tkr-compression","tkr-telemetry","tkr-update","tkr-yolo"],t_=["power","tkr-reducer"];n_=3600*1e3,Rp=10080*60*1e3});function Eo(e){let t=e;for(let[n,r]of r_)t=t.replace(n,r);return t}var r_,Rt,FD,ri=k(()=>{"use strict";r_=[[/(authorization\s*:\s*)([A-Za-z][A-Za-z0-9._-]*)\s+[^\s'"]+/gi,"$1$2 [REDACTED]"],[/(authorization\s*:\s*)[A-Za-z0-9._\-+/=]{8,}/gi,"$1[REDACTED]"],[/(bearer\s+)[A-Za-z0-9._\-+/=]{8,}/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-b|--cookie)[=\s]+['"]?)[^\s'";=]+=[^\s'";]+(?:\s*;\s*[^\s'";=]+=[^\s'";]+)*/gi,"$1[REDACTED]"],[/((?:^|[\s'"])(?:Set-)?Cookie\s*:\s*)[^\s'";=]+=[^\s'";]+(?:\s*;\s*[^\s'";=]+=[^\s'";]+)*/gi,"$1[REDACTED]"],[/(--?(?:password|passwd|passphrase|apipass|pass|pwd|token|api[-_]?key|secret|bearer|cookie|jwt)(?:-[a-z0-9]+)*[=\s]+)\S+/gi,"$1[REDACTED]"],[/((?:^|\s)-b[=\s]?['"]?)[^\s'"=]+=[^\s'"]+/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-u[=\s]?|(?:--user|-a)[=\s])['"]?[^\s:/'"]*:)(\/[^/\s'"][^\s'"]*|[^\s/'"0-9][^\s'"]*|[0-9][^\s'"]*[^\s'"0-9][^\s'"]*)/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-u[=\s]?|(?:--user|-a)[=\s])['"]?[^\s:/'"]*[^\s:/'"0-9][^\s:/'"]*:)(?:\/[^/\s'"]|[^\s/'"])[^\s'"]*/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-u[=\s]?|(?:--user|-a)[=\s])['"]?:)(?:\/[^/\s'"]|[^\s/'"])[^\s'"]*/gi,"$1[REDACTED]"],[/((?:[A-Za-z0-9]+-){0,8}(?:X-Api-Key|Private-Token|[A-Za-z0-9]+-(?:Token|Key|Auth|Secret))\s*:\s*)[^\s'"]+/gi,"$1[REDACTED]"],[/((?:^|[\s'"])(?:Set-)?Cookie\s*:\s*)[^\s'"]+/gi,"$1[REDACTED]"],[/(-i\s+)(\/[^\s]+|~\/[^\s]+|[A-Z]:\\[^\s]+)/g,"$1[REDACTED]"],[/([a-zA-Z][a-zA-Z0-9+.-]{0,31}:\/\/[^:/\s@]*:)[^\s@]+(@[^@/\s]+)/g,"$1[REDACTED]$2"],[/(AWS_(?:ACCESS_KEY_ID|SECRET_ACCESS_KEY|SESSION_TOKEN)\s*=\s*)\S+/g,"$1[REDACTED]"],[/(GOOGLE_APPLICATION_CREDENTIALS\s*=\s*)\S+/g,"$1[REDACTED]"],[/(AZURE_(?:CLIENT_SECRET|TENANT_ID|CLIENT_ID)\s*=\s*)\S+/g,"$1[REDACTED]"],[/(sk-(?:proj-)?[A-Za-z0-9_-]{20,})/g,"sk-[REDACTED]"],[/\b(OPENAI_API_KEY\s*=\s*)\S+/g,"$1[REDACTED]"],[/\b(ANTHROPIC_API_KEY\s*=\s*)\S+/g,"$1[REDACTED]"],[/(sk-ant-[A-Za-z0-9_-]{20,})/g,"sk-ant-[REDACTED]"],[/\b(GH(?:_|ITHUB_)?TOKEN\s*=\s*)\S+/g,"$1[REDACTED]"],[/\b(GITLAB_TOKEN\s*=\s*)\S+/g,"$1[REDACTED]"],[/\b(SLACK_(?:BOT_)?TOKEN\s*=\s*)\S+/g,"$1[REDACTED]"],[/(xox[bpsoa]-[A-Za-z0-9-]{10,})/g,"xox[REDACTED]"],[/(xapp-[A-Za-z0-9-]{10,})/g,"[REDACTED]"],[/(sk_(?:test|live)_[A-Za-z0-9]{16,})/g,"sk_[REDACTED]"],[/(gh[a-z])_[A-Za-z0-9]{20,}/g,"$1_[REDACTED]"],[/(github_pat)_[A-Za-z0-9_]{20,}/g,"$1_[REDACTED]"],[/(gl(?:pat|rt|soat|imt|dt|ft|agent|oas|cbt|ptt))-[A-Za-z0-9_-]{16,}/g,"$1-[REDACTED]"],[/(npm_[A-Za-z0-9_-]{20,})/g,"npm_[REDACTED]"],[/(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA)[0-9A-Z]{16,}/g,"[REDACTED_AWS_KEY]"],[/AIza[A-Za-z0-9_-]{35}/g,"[REDACTED_GOOGLE_KEY]"],[/hv[sb]\.[A-Za-z0-9_-]{20,}/g,"[REDACTED_VAULT_TOKEN]"],[/dop_v1_[A-Za-z0-9]{40,}/g,"[REDACTED]"],[/dckr_pat_[A-Za-z0-9_-]{20,}/g,"[REDACTED]"],[/pypi-[A-Za-z0-9_-]{16,}/g,"[REDACTED]"],[/rk_(?:live|test)_[A-Za-z0-9]{16,}/g,"[REDACTED]"],[/whsec_[A-Za-z0-9]{16,}/g,"[REDACTED]"],[/SG\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}/g,"[REDACTED]"],[/(eyJ[A-Za-z0-9_-]{6,}(?:\.[A-Za-z0-9_-]{4,}){1,2})/g,"[REDACTED_JWT]"],[/-----BEGIN [A-Z ]*PRIVATE KEY-----(?:[\s\S]*?-----END[^\n]*-----|\r?\n[A-Za-z0-9+/=][A-Za-z0-9+/=\r\n]*)?/g,"[REDACTED_PEM]"],[/\b((?:--?)?[A-Za-z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASSWD|PASS|APIKEY|KEY|CRED|CREDS|CREDENTIAL|CREDENTIALS|AUTH|_PWD)[A-Za-z0-9_]*['"]?\s*=\s*)(?:"[^"]*"|'[^']*'|[^"'\s]\S*)/gi,"$1[REDACTED]"],[/\b([A-Za-z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASSWD|PASS|APIKEY|KEY|CRED|CREDS|CREDENTIAL|CREDENTIALS|_PWD)[A-Za-z0-9_]*['"]?\s*:\s*)(?:"[^"]*"|'[^']*'|[^\s'",}]+)/gi,"$1[REDACTED]"],[/((?:^|[\s'"{,])['"]?(?:[A-Za-z0-9_]+_)?auth['"]?\s*:\s*)(?:"[^"]*"|'[^']*'|[^\s'",}]+)/gi,"$1[REDACTED]"],[/(\bpwd\s*[=:]\s*)(?:"[^"]*"|'[^']*'|[^/~\s][^\s;'"]*)/gi,"$1[REDACTED]"],[/([=:]\s*["']?)[A-Za-z0-9_\-+/=]{40,}/g,"$1[REDACTED]"]];Rt="[tkr: secret masked]",FD=[[/(-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----)(?:\r?\n(?:[A-Za-z0-9+/=]{16,}|[A-Za-z-]+: [^\r\n]*|\r?(?=\n)))*(?:(?:\r?\n[A-Za-z0-9+/=]{1,15})?\r?\n-----END [A-Z0-9 ]*PRIVATE KEY-----)?/g,`$1${Rt}`],[/(?<![A-Za-z0-9_])(gh[pousr])_[A-Za-z0-9]{36,255}(?![A-Za-z0-9])/g,`$1_${Rt}`],[/(?<![A-Za-z0-9_])github_pat_[A-Za-z0-9_]{22,255}/g,`github_pat_${Rt}`],[/(?<![A-Za-z0-9_])npm_[A-Za-z0-9]{36}(?![A-Za-z0-9])/g,`npm_${Rt}`],[/(?<![A-Z0-9])(AKIA|ASIA)[A-Z0-9]{16}(?![A-Z0-9])/g,`$1${Rt}`],[/(?<![A-Za-z0-9])(xox[abpors]-)[A-Za-z0-9-]{10,}/g,`$1${Rt}`],[/(?<![A-Za-z0-9])((?:sk|rk)_live_)[A-Za-z0-9]{16,}/g,`$1${Rt}`],[/(authorization["']?\s*[:=]\s*["']?bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,`$1${Rt}`],[/(?<![A-Za-z0-9+.-])([a-zA-Z][a-zA-Z0-9+.-]{0,31}:\/\/[^\s:/@]*:)[^\s@/]+(@[^\s@/]+)/g,`$1${Rt}$2`]]});function Jt(){let e=process.env.TOKMIZER_BASE_URL;if(e===vr||e===`${vr}/`||!e)return vr;try{let t=new URL(e);return t.protocol==="http:"&&v_.has(t.hostname)&&!t.username&&!t.password?e:vr}catch{return vr}}var vr,v_,Co=k(()=>{"use strict";vr="https://tokmizer.com",v_=new Set(["127.0.0.1","localhost"])});var sm={};j(sm,{clearSettingsCache:()=>Dc,loadSettingsCache:()=>Q,saveSettingsCache:()=>ci,updateSettingsCache:()=>Po});import{readFile as tm,writeFile as nm,mkdir as rm,chmod as __,rm as Oo,rename as om,readdir as S_}from"node:fs/promises";import{randomUUID as E_}from"node:crypto";import{join as _r}from"node:path";import{setTimeout as Xp}from"node:timers/promises";async function Q(){let e=null;try{let t=JSON.parse(await tm(_r(y(),Hc),"utf8"));typeof t=="object"&&t!==null&&!Array.isArray(t)&&(e=t)}catch{}return e?dr.parse({...Qp,...e}):Qp}async function ci(e){await rm(y(),{recursive:!0});let t=_r(y(),Hc),n=`${t}.tmp-${process.pid}-${process.hrtime.bigint()}`;await nm(n,JSON.stringify(e,null,2),{mode:384});try{await __(n,384),await om(n,t)}catch(r){try{await Oo(n,{force:!0})}catch{}throw r}}async function em(e){let t=[];for(let n of await S_(e)){let r=/^([1-9]\d*)-[0-9a-f-]{36}\.json$/.exec(n);if(!r)continue;let o=_r(e,n);try{process.kill(Number(r[1]),0)}catch(s){let i=s.code;if(i==="ESRCH"){await Oo(o,{force:!0});continue}if(i!=="EPERM")throw s}try{let s=JSON.parse(await tm(o,"utf8"));if(!Number.isSafeInteger(s)||s<0)throw new Error("Invalid local settings lock");t.push({id:n,ticket:s})}catch(s){if(s.code!=="ENOENT")throw s}}return t}async function Po(e){let t=$_.parse(e),n=_r(y(),"settings-cache-locks");await rm(n,{recursive:!0,mode:448});let r=`${process.pid}-${E_()}.json`,o=_r(n,r),s=`${o}.tmp`,i=performance.now()+3e3,a=async c=>{for(await nm(s,String(c),{mode:384});;)try{await om(s,o);return}catch(l){let u=l.code;if(process.platform!=="win32"||u!=="EPERM"&&u!=="EBUSY"||performance.now()>=i)throw l;await Xp(10)}};try{await a(0);let c=Math.max(0,...(await em(n)).map(l=>l.ticket))+1;if(!Number.isSafeInteger(c))throw new Error("Invalid local settings lock");for(await a(c);;){if(!(await em(n)).some(u=>u.id!==r&&(u.ticket===0||u.ticket<c||u.ticket===c&&u.id<r))){let u=await Q(),d=dr.parse({...u,...t,filters:{...u.filters,...t.filters}});return await ci(d),d}if(performance.now()>=i)throw new Error("Timed out waiting for local settings lock after 3 seconds; another process may still be updating settings");await Xp(10)}}finally{await Promise.all([Oo(o,{force:!0}),Oo(s,{force:!0})])}}async function Dc(){try{await Oo(_r(y(),Hc),{force:!0})}catch{}}var Hc,Qp,$_,Ct=k(()=>{"use strict";fr();F();Hc="settings-cache.json",Qp=dr.parse({}),$_=dr.partial().extend({filters:dr.shape.filters.removeDefault().partial().optional()})});async function im(e,t){let n=await L();if(!B()||!n||n.linked===!1){let a=n?.plan??"free";if(e==="GET")return{plan:a,settings:await Q()};let c=await Po(t);return{plan:a,settings:c}}let r=Jt(),o=await Ke(),s=await Ae(e,"/api/v1/settings",t,{baseUrl:r,bearer:n.jwt,signingSecret:n.signingSecret,fingerprint:o.fingerprint,installId:o.installId,timeoutMs:8e3});if(!s.ok)throw new Error(`Settings ${e} failed: ${s.status}`);let i=await Bt(s);return await ci(i.settings),i}async function An(){return im("GET")}async function ot(e){return im("PATCH",e)}function A_(e,t,n){let r=t.split(".");if(r.some(s=>T_.has(s)))throw new Error(`invalid settings key: ${t}`);let o=e;for(let s=0;s<r.length-1;s++){let i=r[s];(typeof o[i]!="object"||o[i]===null)&&(o[i]={}),o=o[i]}o[r[r.length-1]]=n}function R_(e){if(e==="true")return!0;if(e==="false")return!1;if(/^-?\d+$/.test(e))return Number.parseInt(e,10);if(e.startsWith("[")||e.startsWith("{"))try{return JSON.parse(e)}catch{}return e}function am(e,t){let n=R_(t),r={};return A_(r,e,n),r}var T_,Io=k(()=>{"use strict";Co();pt();_n();$n();Ct();Tt();T_=new Set(["__proto__","constructor","prototype"])});import{basename as C_}from"node:path";function Ot(e){let t=C_(e).replace(/\.(m?js|ts)$/,"");if(t==="tkr")return[];for(let[n,r]of Object.entries(O_))if(r===t)return[n];for(let[n,r]of Object.entries(P_))if(r===t)return["hook",n];return null}var O_,P_,No=k(()=>{"use strict";O_={exec:"tkr-exec",processor:"tkr-processor",daemon:"tkr-daemon","shim-run":"tkr-shim"},P_={codex:"tkr-codex-hook",cursor:"tkr-cursor-hook",gemini:"tkr-gemini-hook",agent:"tkr-agent-hook",copilot:"tkr-copilot-hook",droid:"tkr-droid-hook",trae:"tkr-trae-hook",qwen:"tkr-qwen-hook",crush:"tkr-crush-hook",junie:"tkr-junie-hook",zcode:"tkr-zcode-hook",grok:"tkr-grok-hook",context:"tkr-context-hook","pre-tool-use":"pre-tool-use","post-tool-use":"post-tool-use","session-recap":"session-recap","session-start":"on-session-start","reducer-session-start":"reducer-session-start","reducer-prompt-submit":"reducer-prompt-submit","reducer-stop":"reducer-stop","command-expansion":"command-expansion"}});import{realpathSync as cm}from"node:fs";import{delimiter as I_,join as Sr}from"node:path";import N_ from"node:os";function ae(){return!1}function Gt(e,t=process.execPath){let n=ae()?Ot(e):null;return n?[process.execPath,...n]:[t,e]}function lm(e,t){try{return cm(e)===cm(t)}catch{return!1}}function Zt(e=process.env.PATH??"",t=process.platform,n=process.execPath){let r=t==="win32"?"tkr.exe":"tkr";for(let o of e.split(t==="win32"?";":I_)){if(!o||o.includes("node_modules"))continue;let s=Sr(o,r);if(lm(s,n))return s}if(t!=="win32"){let o=N_.homedir();for(let s of[Sr(o,".local","bin",r),Sr(o,".local","share","tokmizer","current","dist","bin",r),Sr("/opt/homebrew/bin",r),Sr("/usr/local/bin",r),Sr("/home/linuxbrew/.linuxbrew/bin",r)])if(lm(s,n))return s}return n}var mt=k(()=>{"use strict";No()});import{rmSync as H_,statSync as D_}from"node:fs";import{join as Fc}from"node:path";function G(){return Fc(y(),"shims")}function Kt(){return Fc(y(),"fail-open")}function Vt(e=Date.now()){try{if(e-D_(Kt()).mtimeMs<F_)return!0;H_(Kt(),{force:!0})}catch{}return!1}function Ho(){return`[ -f ${re(Kt())} ]`}function Do(){return Fc(y(),"shim-fallbacks")}function re(e){return`'${e.replace(/'/g,"'\\''")}'`}function um(e){if(!e.startsWith("'")||!e.endsWith("'")||e.length<2)return null;let n=e.slice(1,-1).split("'\\''");return n.some(r=>r.includes("'"))?null:n.join("'")}function ui(e){return["set -f",`_tk_d=${re(G())}`,"_tk_o=$IFS; IFS=:; _tk_p=; _tk_x=","for _tk_e in $PATH; do",' [ -n "$_tk_e" ] || continue',' [ "$_tk_e" -ef "$_tk_d" ] && continue'," _tk_p=${_tk_p:+$_tk_p:}$_tk_e",' [ -z "$_tk_x" ] && [ -f "$_tk_e/$_tk_c" ] && [ -x "$_tk_e/$_tk_c" ] && _tk_x=$_tk_e/$_tk_c',"done","IFS=$_tk_o; PATH=$_tk_p; export PATH; set +f",'[ -n "$_tk_x" ] || { echo "$_tk_c: command not found" >&2; exit 127; }','exec "$_tk_x" "$@"'].map(t=>`${e}${t}`)}var li,F_,Wt=k(()=>{"use strict";F();li="tokmizer: shim target missing, running command directly; run `tkr doctor --fix`";F_=24*36e5});var Tm={};j(Tm,{LAUNCHER_FORMAT:()=>Ar,STABLE_MARK:()=>$r,brewStablePath:()=>pi,claudePluginCacheDir:()=>jc,ensureHookLauncherSync:()=>Jc,ensureRunLauncherSync:()=>Uc,ephemeralPath:()=>fi,hookLauncherFile:()=>ht,hookLauncherScript:()=>zc,launchTargetFor:()=>Yt,launcherFile:()=>qt,launcherHealthy:()=>mi,launcherScript:()=>_m,newestStablePluginRoot:()=>xm,parseLauncher:()=>Em,readLauncher:()=>Rn,removeLauncher:()=>Gc,runLauncherFile:()=>wm,runLauncherScript:()=>Sm,stableNodePath:()=>bm,targetUsable:()=>Tr,writeHookLauncher:()=>Bc,writeLauncher:()=>Fo});import{accessSync as M_,chmodSync as fm,constants as j_,existsSync as di,mkdirSync as pm,readdirSync as L_,readFileSync as z_,realpathSync as dm,renameSync as mm,unlinkSync as hm,writeFileSync as gm}from"node:fs";import{chmod as U_,mkdir as B_,rename as J_,unlink as km,writeFile as G_}from"node:fs/promises";import{basename as Mc,dirname as st,join as Ve,sep as Er}from"node:path";import Z_ from"node:os";function qt(){return Ve(y(),"bin","tkr-shim-launch")}function ht(){return Ve(y(),"bin","tkr-hook")}function wm(){return Ve(y(),"bin","tkr-run")}function jc(){return Ve(process.env.CLAUDE_CONFIG_DIR||Ve(Z_.homedir(),".claude"),"plugins","cache","tokmizer","tokmizer")}function K_(e){let t=st(st(st(e)));return ym.test(Mc(t))&&Mc(st(t))==="tokmizer"?st(t):null}function fi(e){return/[\n\r]/.test(e)||e.includes(`${Er}_npx${Er}`)||e.includes(`${Er}.bun${Er}install${Er}cache${Er}`)}function pi(e){let t=e.match(/^(.*)[\\/]Cellar[\\/]([^\\/]+)[\\/][^\\/]+[\\/](.*)$/);if(!t)return e;let n=Ve(t[1],"opt",t[2],t[3]);try{return dm(n)===dm(e)?n:e}catch{return e}}function bm(e=process.execPath){return fi(e)?"":pi(e)}function Yt(e,t=ae()){if(t&&Ot(e)){let o=Zt();return{single:fi(o)?"":pi(o),js:"",cache:jc(),node:""}}let n=bm(),r=K_(e);return r?{single:"",js:"",cache:r,node:n}:{single:"",js:fi(e)?"":pi(e),cache:jc(),node:n}}function V_(e){try{return M_(e,j_.X_OK),!0}catch{return!1}}function xm(e){let t=null,n=-1,r;try{r=L_(e)}catch{return null}for(let o of r){if(!ym.test(o))continue;let s=Ve(e,o);if(!di(Ve(s,"dist","bin","tkr-shim.js"))||!di(Ve(s,"dist","bin",$r)))continue;let[i,a,c]=o.split(".").map(Number),l=i*1e6+a*1e3+c;l>n&&(n=l,t=s)}return t}function Tr(e){return e.single&&V_(e.single)||e.js&&di(e.js)&&(Mc(e.js)!=="tkr-shim.js"||di(Ve(st(e.js),$r)))?!0:e.cache!==""&&xm(e.cache)!==null}function vm(e,t){return["#!/bin/sh",`_tk_f=${Ar}`,`${t}=$1`,"shift",`_tk_s=${re(e.single)}`,`_tk_j=${re(e.js)}`,`_tk_k=${re(e.cache)}`,`_tk_n=${re(e.node)}`]}function Lc(e,t){return["_tk_t=",`if [ -n "$_tk_j" ] && [ -f "${t}" ] && { [ "\${_tk_j##*/}" != tkr-shim.js ] || [ -f "\${_tk_j%/*}/${$r}" ]; }; then _tk_t=${t}; fi`,'if [ -z "$_tk_t" ] && [ -n "$_tk_k" ] && [ -d "$_tk_k" ]; then'," _tk_b=-1",' for _tk_r in "$_tk_k"/*/; do'," _tk_v=${_tk_r%/}; _tk_v=${_tk_v##*/}"," case $_tk_v in *[!0-9.]*|.*|*.|*..*|0[0-9]*|*.0[0-9]*|*[0-9][0-9][0-9][0-9][0-9][0-9][0-9]*) continue ;; [0-9]*.[0-9]*.[0-9]*) ;; *) continue ;; esac"," case ${_tk_v#*.*.} in *.*) continue ;; esac",` [ -f "\${_tk_r}dist/bin/${e}" ] && [ -f "\${_tk_r}dist/bin/${$r}" ] || continue`," _tk_1=${_tk_v%%.*}; _tk_2=${_tk_v#*.}; _tk_3=${_tk_2#*.}; _tk_2=${_tk_2%%.*}"," _tk_v=$((_tk_1 * 1000000 + _tk_2 * 1000 + _tk_3))",` if [ "$_tk_v" -gt "$_tk_b" ]; then _tk_b=$_tk_v; _tk_t=\${_tk_r}dist/bin/${e}; fi`," done","fi",'if [ -z "$_tk_t" ]; then',` _tk_d=${re(G())}`," set -f; _tk_o=$IFS; IFS=:"," for _tk_e in $PATH; do"," case $_tk_e in /*/node_modules/*|*/node_modules) continue ;; /*) ;; *) continue ;; esac",' [ ! "$_tk_e" -ef "$_tk_d" ] || continue',' for _tk_g in "$_tk_e/../lib/node_modules/@tokmizer/plugin/dist/bin" "$_tk_e/../opt/tokmizer/libexec/lib/node_modules/@tokmizer/plugin/dist/bin"; do',` if [ -f "$_tk_g/${$r}" ] && [ -f "$_tk_g/${e}" ]; then _tk_t=$_tk_g/${e}; break 2; fi`," done"," done"," IFS=$_tk_o; set +f","fi","_tk_x=",'if [ -n "$_tk_t" ]; then',' for _tk_x in "$_tk_n" "$(command -v node 2>/dev/null)" /opt/homebrew/bin/node /usr/local/bin/node /usr/bin/node ""; do',' [ -n "$_tk_x" ] && [ -x "$_tk_x" ] && break'," done","fi"]}function _m(e){return[...vm(e,"_tk_c"),`if ! ${Ho()}; then`,' if [ -n "$_tk_s" ] && [ -x "$_tk_s" ]; then exec "$_tk_s" shim-run --as "$_tk_c" "$@"; fi',...Lc("tkr-shim.js","$_tk_j").map(t=>` ${t}`),' if [ -n "$_tk_x" ]; then exec "$_tk_x" "$_tk_t" --as "$_tk_c" "$@"; fi',` echo ${re(li)} >&2`,` { echo x >> ${re(Do())}; } 2>/dev/null`,"fi",...ui(""),""].join(`
|
|
12
|
-
`)}function
|
|
13
|
-
`)}function
|
|
14
|
-
`)}function
|
|
15
|
-
`),!0)}async function
|
|
16
|
-
`)}function
|
|
17
|
-
`||s==="\r"||s==="$"&&e[o+1]==="(")return null;n+=s,r=!0}}return r&&t.push(n),t}function
|
|
11
|
+
${n}`).digest("hex")}function Jv(e){let t=new URL(e);return`${t.pathname}${t.search}`}async function Ae(e,t,n,r){$n();let o=Date.now(),s=n===void 0?"":JSON.stringify(n),i=`${r.baseUrl}${t}`,a=r.signingSecret?Bv(e,Jv(i),s,o,r.signingSecret):"0".repeat(64),c={"content-type":"application/json","x-tokmizer-fingerprint":r.fingerprint,"x-tokmizer-install-id":r.installId,"x-tokmizer-sig":a,"x-tokmizer-ts":String(o),"x-tokmizer-plugin-version":ue,"x-tokmizer-accept-resp-path":"1"};r.bearer&&(c.authorization=`Bearer ${r.bearer}`);let l=r.timeoutMs??5e3,u=e!=="GET"&&e!=="DELETE",d={method:e,headers:c,signal:AbortSignal.timeout(l)};u&&(d.body=s);let p;try{p=await fetch(i,d)}catch(f){let h=f.name;throw h==="TimeoutError"||h==="AbortError"?new Rt("timeout",`${e} ${t} timed out after ${l}ms`):new Rt("network",`${e} ${t} failed: ${f.message}`)}return p!==null&&typeof p=="object"&&Sp.set(p,t.split("?")[0]),p}var Lv,zv,Sp,Rt,Tn=k(()=>{"use strict";En();yp();At();Lv=300*1e3,zv=120*1e3;Sp=new WeakMap;Rt=class extends Error{constructor(n,r,o){super(r);this.kind=n;this.status=o;this.name="TransportError"}kind;status}});var Fp={};L(Fp,{STATIC_COMMAND_NAMES:()=>ni,commandInstalled:()=>si,commandsInstallStatus:()=>Pc,installCommand:()=>Cc,isFresh:()=>Ac,pruneCommands:()=>xr,pruneSkills:()=>br,readBundleRefresh:()=>Ao,readSkill:()=>Ro,recordBundleRefresh:()=>ii,writeSkill:()=>Rc});import{chmod as $c,mkdir as ri,readFile as To,writeFile as oi,stat as Tc,readdir as s_,rm as Ip}from"node:fs/promises";import{existsSync as i_}from"node:fs";import{dirname as a_}from"node:path";async function Hp(){try{let e=JSON.parse(await To(Xs(),"utf8"));return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}async function Dp(e){try{await ri(y(),{recursive:!0}),await oi(Xs(),JSON.stringify(e),{mode:384})}catch{}}function Mp(){let e=Number(process.env.TOKMIZER_MAX_BUNDLE_AGE_MS);return Number.isFinite(e)&&e>0?Math.min(e,Op):Op}async function Ac(e){try{let t=await Tc(Me(e)),n=Date.now()-t.mtimeMs;return n<l_&&n<=Mp()}catch{return!1}}async function Rc(e,t){await ri(xo(),{recursive:!0}),await oi(Me(e),t,{mode:384}),await $c(Me(e),384)}async function br(e){let t=new Set(e),n;try{n=await s_(xo())}catch{return}for(let r of n){if(!r.endsWith(".md"))continue;let o=r.slice(0,-3);if(!t.has(o))try{await Ip(Me(o))}catch{}}}async function Cc(e,t){if(!process.env.TOKMIZER_CLAUDE_COMMANDS_DIR&&!i_(a_(vo())))return;await ri(vo(),{recursive:!0});try{if(!(await To(Bt(e),"utf8")).includes(Np))return}catch{}await oi(Bt(e),t,{mode:384}),await $c(Bt(e),384);let n=await Hp();n.includes(e)||await Dp([...n,e])}async function xr(e){let t=new Set([...e,...ni]),n=await Hp(),r=new Set([...n,...c_]);for(let o of r)if(!t.has(o))try{if(!(await To(Bt(o),"utf8")).includes(Np))continue;await Ip(Bt(o))}catch{}await Dp(n.filter(o=>t.has(o)))}async function Pc(){let e=0;for(let t of ni)await si(t)&&e++;return{installed:e,total:ni.length}}async function si(e){try{return await Tc(Bt(e)),!0}catch{return!1}}async function ii(e){try{await ri(y(),{recursive:!0}),await oi(bo(),JSON.stringify({at:Date.now(),error:e}),{mode:384}),await $c(bo(),384)}catch{}}async function Ao(){try{return JSON.parse(await To(bo(),"utf8"))}catch{return null}}async function Ro(e){try{let t=await Tc(Me(e));return Date.now()-t.mtimeMs>Mp()?null:await To(Me(e),"utf8")}catch{return null}}var Np,ni,c_,l_,Op,ai=k(()=>{"use strict";F();Np="managed-by: tokmizer",ni=["tkr","tkr-gain","tkr-status","tkr-link","tkr-unlink","tkr-compression","tkr-telemetry","tkr-update","tkr-yolo"],c_=["power","tkr-reducer"];l_=3600*1e3,Op=10080*60*1e3});function Co(e){let t=e;for(let[n,r]of u_)t=t.replace(n,r);return t}var u_,Ct,WD,ci=k(()=>{"use strict";u_=[[/(authorization\s*:\s*)([A-Za-z][A-Za-z0-9._-]*)\s+[^\s'"]+/gi,"$1$2 [REDACTED]"],[/(authorization\s*:\s*)[A-Za-z0-9._\-+/=]{8,}/gi,"$1[REDACTED]"],[/(bearer\s+)[A-Za-z0-9._\-+/=]{8,}/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-b|--cookie)[=\s]+['"]?)[^\s'";=]+=[^\s'";]+(?:\s*;\s*[^\s'";=]+=[^\s'";]+)*/gi,"$1[REDACTED]"],[/((?:^|[\s'"])(?:Set-)?Cookie\s*:\s*)[^\s'";=]+=[^\s'";]+(?:\s*;\s*[^\s'";=]+=[^\s'";]+)*/gi,"$1[REDACTED]"],[/(--?(?:password|passwd|passphrase|apipass|pass|pwd|token|api[-_]?key|secret|bearer|cookie|jwt)(?:-[a-z0-9]+)*[=\s]+)\S+/gi,"$1[REDACTED]"],[/((?:^|\s)-b[=\s]?['"]?)[^\s'"=]+=[^\s'"]+/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-u[=\s]?|(?:--user|-a)[=\s])['"]?[^\s:/'"]*:)(\/[^/\s'"][^\s'"]*|[^\s/'"0-9][^\s'"]*|[0-9][^\s'"]*[^\s'"0-9][^\s'"]*)/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-u[=\s]?|(?:--user|-a)[=\s])['"]?[^\s:/'"]*[^\s:/'"0-9][^\s:/'"]*:)(?:\/[^/\s'"]|[^\s/'"])[^\s'"]*/gi,"$1[REDACTED]"],[/((?:^|\s)(?:-u[=\s]?|(?:--user|-a)[=\s])['"]?:)(?:\/[^/\s'"]|[^\s/'"])[^\s'"]*/gi,"$1[REDACTED]"],[/((?:[A-Za-z0-9]+-){0,8}(?:X-Api-Key|Private-Token|[A-Za-z0-9]+-(?:Token|Key|Auth|Secret))\s*:\s*)[^\s'"]+/gi,"$1[REDACTED]"],[/((?:^|[\s'"])(?:Set-)?Cookie\s*:\s*)[^\s'"]+/gi,"$1[REDACTED]"],[/(-i\s+)(\/[^\s]+|~\/[^\s]+|[A-Z]:\\[^\s]+)/g,"$1[REDACTED]"],[/([a-zA-Z][a-zA-Z0-9+.-]{0,31}:\/\/[^:/\s@]*:)[^\s@]+(@[^@/\s]+)/g,"$1[REDACTED]$2"],[/(AWS_(?:ACCESS_KEY_ID|SECRET_ACCESS_KEY|SESSION_TOKEN)\s*=\s*)\S+/g,"$1[REDACTED]"],[/(GOOGLE_APPLICATION_CREDENTIALS\s*=\s*)\S+/g,"$1[REDACTED]"],[/(AZURE_(?:CLIENT_SECRET|TENANT_ID|CLIENT_ID)\s*=\s*)\S+/g,"$1[REDACTED]"],[/(sk-(?:proj-)?[A-Za-z0-9_-]{20,})/g,"sk-[REDACTED]"],[/\b(OPENAI_API_KEY\s*=\s*)\S+/g,"$1[REDACTED]"],[/\b(ANTHROPIC_API_KEY\s*=\s*)\S+/g,"$1[REDACTED]"],[/(sk-ant-[A-Za-z0-9_-]{20,})/g,"sk-ant-[REDACTED]"],[/\b(GH(?:_|ITHUB_)?TOKEN\s*=\s*)\S+/g,"$1[REDACTED]"],[/\b(GITLAB_TOKEN\s*=\s*)\S+/g,"$1[REDACTED]"],[/\b(SLACK_(?:BOT_)?TOKEN\s*=\s*)\S+/g,"$1[REDACTED]"],[/(xox[bpsoa]-[A-Za-z0-9-]{10,})/g,"xox[REDACTED]"],[/(xapp-[A-Za-z0-9-]{10,})/g,"[REDACTED]"],[/(sk_(?:test|live)_[A-Za-z0-9]{16,})/g,"sk_[REDACTED]"],[/(gh[a-z])_[A-Za-z0-9]{20,}/g,"$1_[REDACTED]"],[/(github_pat)_[A-Za-z0-9_]{20,}/g,"$1_[REDACTED]"],[/(gl(?:pat|rt|soat|imt|dt|ft|agent|oas|cbt|ptt))-[A-Za-z0-9_-]{16,}/g,"$1-[REDACTED]"],[/(npm_[A-Za-z0-9_-]{20,})/g,"npm_[REDACTED]"],[/(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA)[0-9A-Z]{16,}/g,"[REDACTED_AWS_KEY]"],[/AIza[A-Za-z0-9_-]{35}/g,"[REDACTED_GOOGLE_KEY]"],[/hv[sb]\.[A-Za-z0-9_-]{20,}/g,"[REDACTED_VAULT_TOKEN]"],[/dop_v1_[A-Za-z0-9]{40,}/g,"[REDACTED]"],[/dckr_pat_[A-Za-z0-9_-]{20,}/g,"[REDACTED]"],[/pypi-[A-Za-z0-9_-]{16,}/g,"[REDACTED]"],[/rk_(?:live|test)_[A-Za-z0-9]{16,}/g,"[REDACTED]"],[/whsec_[A-Za-z0-9]{16,}/g,"[REDACTED]"],[/SG\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}/g,"[REDACTED]"],[/(eyJ[A-Za-z0-9_-]{6,}(?:\.[A-Za-z0-9_-]{4,}){1,2})/g,"[REDACTED_JWT]"],[/-----BEGIN [A-Z ]*PRIVATE KEY-----(?:[\s\S]*?-----END[^\n]*-----|\r?\n[A-Za-z0-9+/=][A-Za-z0-9+/=\r\n]*)?/g,"[REDACTED_PEM]"],[/\b((?:--?)?[A-Za-z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASSWD|PASS|APIKEY|KEY|CRED|CREDS|CREDENTIAL|CREDENTIALS|AUTH|_PWD)[A-Za-z0-9_]*['"]?\s*=\s*)(?:"[^"]*"|'[^']*'|[^"'\s]\S*)/gi,"$1[REDACTED]"],[/\b([A-Za-z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASSWD|PASS|APIKEY|KEY|CRED|CREDS|CREDENTIAL|CREDENTIALS|_PWD)[A-Za-z0-9_]*['"]?\s*:\s*)(?:"[^"]*"|'[^']*'|[^\s'",}]+)/gi,"$1[REDACTED]"],[/((?:^|[\s'"{,])['"]?(?:[A-Za-z0-9_]+_)?auth['"]?\s*:\s*)(?:"[^"]*"|'[^']*'|[^\s'",}]+)/gi,"$1[REDACTED]"],[/(\bpwd\s*[=:]\s*)(?:"[^"]*"|'[^']*'|[^/~\s][^\s;'"]*)/gi,"$1[REDACTED]"],[/([=:]\s*["']?)[A-Za-z0-9_\-+/=]{40,}/g,"$1[REDACTED]"]];Ct="[tkr: secret masked]",WD=[[/(-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----)(?:\r?\n(?:[A-Za-z0-9+/=]{16,}|[A-Za-z-]+: [^\r\n]*|\r?(?=\n)))*(?:(?:\r?\n[A-Za-z0-9+/=]{1,15})?\r?\n-----END [A-Z0-9 ]*PRIVATE KEY-----)?/g,`$1${Ct}`],[/(?<![A-Za-z0-9_])(gh[pousr])_[A-Za-z0-9]{36,255}(?![A-Za-z0-9])/g,`$1_${Ct}`],[/(?<![A-Za-z0-9_])github_pat_[A-Za-z0-9_]{22,255}/g,`github_pat_${Ct}`],[/(?<![A-Za-z0-9_])npm_[A-Za-z0-9]{36}(?![A-Za-z0-9])/g,`npm_${Ct}`],[/(?<![A-Z0-9])(AKIA|ASIA)[A-Z0-9]{16}(?![A-Z0-9])/g,`$1${Ct}`],[/(?<![A-Za-z0-9])(xox[abpors]-)[A-Za-z0-9-]{10,}/g,`$1${Ct}`],[/(?<![A-Za-z0-9])((?:sk|rk)_live_)[A-Za-z0-9]{16,}/g,`$1${Ct}`],[/(authorization["']?\s*[:=]\s*["']?bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,`$1${Ct}`],[/(?<![A-Za-z0-9+.-])([a-zA-Z][a-zA-Z0-9+.-]{0,31}:\/\/[^\s:/@]*:)[^\s@/]+(@[^\s@/]+)/g,`$1${Ct}$2`]]});function Gt(){let e=process.env.TOKMIZER_BASE_URL;if(e===Sr||e===`${Sr}/`||!e)return Sr;try{let t=new URL(e);return t.protocol==="http:"&&R_.has(t.hostname)&&!t.username&&!t.password?e:Sr}catch{return Sr}}var Sr,R_,Ho=k(()=>{"use strict";Sr="https://tokmizer.com",R_=new Set(["127.0.0.1","localhost"])});var cm={};L(cm,{clearSettingsCache:()=>Fc,loadSettingsCache:()=>Q,saveSettingsCache:()=>pi,updateSettingsCache:()=>Mo});import{readFile as om,writeFile as sm,mkdir as im,chmod as C_,rm as Do,rename as am,readdir as P_}from"node:fs/promises";import{randomUUID as O_}from"node:crypto";import{join as Er}from"node:path";import{setTimeout as tm}from"node:timers/promises";async function Q(){let e=null;try{let t=JSON.parse(await om(Er(y(),Mc),"utf8"));typeof t=="object"&&t!==null&&!Array.isArray(t)&&(e=t)}catch{}return e?pr.parse({...nm,...e}):nm}async function pi(e){await im(y(),{recursive:!0});let t=Er(y(),Mc),n=`${t}.tmp-${process.pid}-${process.hrtime.bigint()}`;await sm(n,JSON.stringify(e,null,2),{mode:384});try{await C_(n,384),await am(n,t)}catch(r){try{await Do(n,{force:!0})}catch{}throw r}}async function rm(e){let t=[];for(let n of await P_(e)){let r=/^([1-9]\d*)-[0-9a-f-]{36}\.json$/.exec(n);if(!r)continue;let o=Er(e,n);try{process.kill(Number(r[1]),0)}catch(s){let i=s.code;if(i==="ESRCH"){await Do(o,{force:!0});continue}if(i!=="EPERM")throw s}try{let s=JSON.parse(await om(o,"utf8"));if(!Number.isSafeInteger(s)||s<0)throw new Error("Invalid local settings lock");t.push({id:n,ticket:s})}catch(s){if(s.code!=="ENOENT")throw s}}return t}async function Mo(e){let t=I_.parse(e),n=Er(y(),"settings-cache-locks");await im(n,{recursive:!0,mode:448});let r=`${process.pid}-${O_()}.json`,o=Er(n,r),s=`${o}.tmp`,i=performance.now()+3e3,a=async c=>{for(await sm(s,String(c),{mode:384});;)try{await am(s,o);return}catch(l){let u=l.code;if(process.platform!=="win32"||u!=="EPERM"&&u!=="EBUSY"||performance.now()>=i)throw l;await tm(10)}};try{await a(0);let c=Math.max(0,...(await rm(n)).map(l=>l.ticket))+1;if(!Number.isSafeInteger(c))throw new Error("Invalid local settings lock");for(await a(c);;){if(!(await rm(n)).some(u=>u.id!==r&&(u.ticket===0||u.ticket<c||u.ticket===c&&u.id<r))){let u=await Q(),d=pr.parse({...u,...t,filters:{...u.filters,...t.filters}});return await pi(d),d}if(performance.now()>=i)throw new Error("Timed out waiting for local settings lock after 3 seconds; another process may still be updating settings");await tm(10)}}finally{await Promise.all([Do(o,{force:!0}),Do(s,{force:!0})])}}async function Fc(){try{await Do(Er(y(),Mc),{force:!0})}catch{}}var Mc,nm,I_,Pt=k(()=>{"use strict";mr();F();Mc="settings-cache.json",nm=pr.parse({}),I_=pr.partial().extend({filters:pr.shape.filters.removeDefault().partial().optional()})});async function lm(e,t){let n=await z();if(!B()||!n||n.linked===!1){let a=n?.plan??"free";if(e==="GET")return{plan:a,settings:await Q()};let c=await Mo(t);return{plan:a,settings:c}}let r=Gt(),o=await Ze(),s=await Ae(e,"/api/v1/settings",t,{baseUrl:r,bearer:n.jwt,signingSecret:n.signingSecret,fingerprint:o.fingerprint,installId:o.installId,timeoutMs:8e3});if(!s.ok)throw new Error(`Settings ${e} failed: ${s.status}`);let i=await Jt(s);return await pi(i.settings),i}async function Rn(){return lm("GET")}async function rt(e){return lm("PATCH",e)}function H_(e,t,n){let r=t.split(".");if(r.some(s=>N_.has(s)))throw new Error(`invalid settings key: ${t}`);let o=e;for(let s=0;s<r.length-1;s++){let i=r[s];(typeof o[i]!="object"||o[i]===null)&&(o[i]={}),o=o[i]}o[r[r.length-1]]=n}function D_(e){if(e==="true")return!0;if(e==="false")return!1;if(/^-?\d+$/.test(e))return Number.parseInt(e,10);if(e.startsWith("[")||e.startsWith("{"))try{return JSON.parse(e)}catch{}return e}function um(e,t){let n=D_(t),r={};return H_(r,e,n),r}var N_,Fo=k(()=>{"use strict";Ho();pt();Sn();Tn();Pt();At();N_=new Set(["__proto__","constructor","prototype"])});import M_ from"node:os";import{isAbsolute as F_,join as dm,resolve as fm}from"node:path";function mt(e=process.env,t=M_.homedir()){let n=e.CLAUDE_CONFIG_DIR?.trim();if(!n)return dm(t,".claude");let r=n;return r==="~"?r=t:(r.startsWith("~/")||r.startsWith("~\\"))&&(r=dm(t,r.slice(2))),F_(r)?fm(r):fm(r)}var $r=k(()=>{"use strict"});import{basename as j_}from"node:path";function Ot(e){let t=j_(e).replace(/\.(m?js|ts)$/,"");if(t==="tkr")return[];for(let[n,r]of Object.entries(L_))if(r===t)return[n];for(let[n,r]of Object.entries(z_))if(r===t)return["hook",n];return null}var L_,z_,jo=k(()=>{"use strict";L_={exec:"tkr-exec",processor:"tkr-processor",daemon:"tkr-daemon","shim-run":"tkr-shim"},z_={codex:"tkr-codex-hook",cursor:"tkr-cursor-hook",gemini:"tkr-gemini-hook",agent:"tkr-agent-hook",copilot:"tkr-copilot-hook",droid:"tkr-droid-hook",trae:"tkr-trae-hook",qwen:"tkr-qwen-hook",crush:"tkr-crush-hook",junie:"tkr-junie-hook",zcode:"tkr-zcode-hook",grok:"tkr-grok-hook",context:"tkr-context-hook","pre-tool-use":"pre-tool-use","post-tool-use":"post-tool-use","session-recap":"session-recap","session-start":"on-session-start","reducer-session-start":"reducer-session-start","reducer-prompt-submit":"reducer-prompt-submit","reducer-stop":"reducer-stop","command-expansion":"command-expansion"}});import{realpathSync as pm}from"node:fs";import{delimiter as U_,join as Tr}from"node:path";import B_ from"node:os";function ae(){return!1}function Kt(e,t=process.execPath){let n=ae()?Ot(e):null;return n?[process.execPath,...n]:[t,e]}function mm(e,t){try{return pm(e)===pm(t)}catch{return!1}}function Zt(e=process.env.PATH??"",t=process.platform,n=process.execPath){let r=t==="win32"?"tkr.exe":"tkr";for(let o of e.split(t==="win32"?";":U_)){if(!o||o.includes("node_modules"))continue;let s=Tr(o,r);if(mm(s,n))return s}if(t!=="win32"){let o=B_.homedir();for(let s of[Tr(o,".local","bin",r),Tr(o,".local","share","tokmizer","current","dist","bin",r),Tr("/opt/homebrew/bin",r),Tr("/usr/local/bin",r),Tr("/home/linuxbrew/.linuxbrew/bin",r)])if(mm(s,n))return s}return n}var ht=k(()=>{"use strict";jo()});import{rmSync as J_,statSync as G_}from"node:fs";import{join as jc}from"node:path";function G(){return jc(y(),"shims")}function Vt(){return jc(y(),"fail-open")}function Wt(e=Date.now()){try{if(e-G_(Vt()).mtimeMs<K_)return!0;J_(Vt(),{force:!0})}catch{}return!1}function Lo(){return`[ -f ${re(Vt())} ]`}function zo(){return jc(y(),"shim-fallbacks")}function re(e){return`'${e.replace(/'/g,"'\\''")}'`}function hm(e){if(!e.startsWith("'")||!e.endsWith("'")||e.length<2)return null;let n=e.slice(1,-1).split("'\\''");return n.some(r=>r.includes("'"))?null:n.join("'")}function hi(e){return["set -f",`_tk_d=${re(G())}`,"_tk_o=$IFS; IFS=:; _tk_p=; _tk_x=","for _tk_e in $PATH; do",' [ -n "$_tk_e" ] || continue',' [ "$_tk_e" -ef "$_tk_d" ] && continue'," _tk_p=${_tk_p:+$_tk_p:}$_tk_e",' [ -z "$_tk_x" ] && [ -f "$_tk_e/$_tk_c" ] && [ -x "$_tk_e/$_tk_c" ] && _tk_x=$_tk_e/$_tk_c',"done","IFS=$_tk_o; PATH=$_tk_p; export PATH; set +f",'[ -n "$_tk_x" ] || { echo "$_tk_c: command not found" >&2; exit 127; }','exec "$_tk_x" "$@"'].map(t=>`${e}${t}`)}var mi,K_,qt=k(()=>{"use strict";F();mi="tokmizer: shim target missing, running command directly; run `tkr doctor --fix`";K_=24*36e5});var Om={};L(Om,{LAUNCHER_FORMAT:()=>Pr,STABLE_MARK:()=>Rr,brewStablePath:()=>yi,claudePluginCacheDir:()=>zc,ensureHookLauncherSync:()=>Kc,ensureRunLauncherSync:()=>Jc,ephemeralPath:()=>ki,hookLauncherFile:()=>gt,hookLauncherScript:()=>Bc,launchTargetFor:()=>Xt,launcherFile:()=>Yt,launcherHealthy:()=>wi,launcherScript:()=>Am,newestStablePluginRoot:()=>$m,parseLauncher:()=>Cm,readLauncher:()=>Cn,removeLauncher:()=>Zc,runLauncherFile:()=>Sm,runLauncherScript:()=>Rm,stableNodePath:()=>Em,targetUsable:()=>Cr,writeHookLauncher:()=>Gc,writeLauncher:()=>Uo});import{accessSync as Z_,chmodSync as km,constants as V_,existsSync as gi,mkdirSync as ym,readdirSync as W_,readFileSync as q_,realpathSync as gm,renameSync as wm,unlinkSync as bm,writeFileSync as xm}from"node:fs";import{chmod as Y_,mkdir as X_,rename as Q_,unlink as vm,writeFile as eS}from"node:fs/promises";import{basename as Lc,dirname as ot,join as st,sep as Ar}from"node:path";function Yt(){return st(y(),"bin","tkr-shim-launch")}function gt(){return st(y(),"bin","tkr-hook")}function Sm(){return st(y(),"bin","tkr-run")}function zc(){return st(mt(),"plugins","cache","tokmizer","tokmizer")}function tS(e){let t=ot(ot(ot(e)));return _m.test(Lc(t))&&Lc(ot(t))==="tokmizer"?ot(t):null}function ki(e){return/[\n\r]/.test(e)||e.includes(`${Ar}_npx${Ar}`)||e.includes(`${Ar}.bun${Ar}install${Ar}cache${Ar}`)}function yi(e){let t=e.match(/^(.*)[\\/]Cellar[\\/]([^\\/]+)[\\/][^\\/]+[\\/](.*)$/);if(!t)return e;let n=st(t[1],"opt",t[2],t[3]);try{return gm(n)===gm(e)?n:e}catch{return e}}function Em(e=process.execPath){return ki(e)?"":yi(e)}function Xt(e,t=ae()){if(t&&Ot(e)){let o=Zt();return{single:ki(o)?"":yi(o),js:"",cache:zc(),node:""}}let n=Em(),r=tS(e);return r?{single:"",js:"",cache:r,node:n}:{single:"",js:ki(e)?"":yi(e),cache:zc(),node:n}}function nS(e){try{return Z_(e,V_.X_OK),!0}catch{return!1}}function $m(e){let t=null,n=-1,r;try{r=W_(e)}catch{return null}for(let o of r){if(!_m.test(o))continue;let s=st(e,o);if(!gi(st(s,"dist","bin","tkr-shim.js"))||!gi(st(s,"dist","bin",Rr)))continue;let[i,a,c]=o.split(".").map(Number),l=i*1e6+a*1e3+c;l>n&&(n=l,t=s)}return t}function Cr(e){return e.single&&nS(e.single)||e.js&&gi(e.js)&&(Lc(e.js)!=="tkr-shim.js"||gi(st(ot(e.js),Rr)))?!0:e.cache!==""&&$m(e.cache)!==null}function Tm(e,t){return["#!/bin/sh",`_tk_f=${Pr}`,`${t}=$1`,"shift",`_tk_s=${re(e.single)}`,`_tk_j=${re(e.js)}`,`_tk_k=${re(e.cache)}`,`_tk_n=${re(e.node)}`]}function Uc(e,t){return["_tk_t=",`if [ -n "$_tk_j" ] && [ -f "${t}" ] && { [ "\${_tk_j##*/}" != tkr-shim.js ] || [ -f "\${_tk_j%/*}/${Rr}" ]; }; then _tk_t=${t}; fi`,'if [ -z "$_tk_t" ] && [ -n "$_tk_k" ] && [ -d "$_tk_k" ]; then'," _tk_b=-1",' for _tk_r in "$_tk_k"/*/; do'," _tk_v=${_tk_r%/}; _tk_v=${_tk_v##*/}"," case $_tk_v in *[!0-9.]*|.*|*.|*..*|0[0-9]*|*.0[0-9]*|*[0-9][0-9][0-9][0-9][0-9][0-9][0-9]*) continue ;; [0-9]*.[0-9]*.[0-9]*) ;; *) continue ;; esac"," case ${_tk_v#*.*.} in *.*) continue ;; esac",` [ -f "\${_tk_r}dist/bin/${e}" ] && [ -f "\${_tk_r}dist/bin/${Rr}" ] || continue`," _tk_1=${_tk_v%%.*}; _tk_2=${_tk_v#*.}; _tk_3=${_tk_2#*.}; _tk_2=${_tk_2%%.*}"," _tk_v=$((_tk_1 * 1000000 + _tk_2 * 1000 + _tk_3))",` if [ "$_tk_v" -gt "$_tk_b" ]; then _tk_b=$_tk_v; _tk_t=\${_tk_r}dist/bin/${e}; fi`," done","fi",'if [ -z "$_tk_t" ]; then',` _tk_d=${re(G())}`," set -f; _tk_o=$IFS; IFS=:"," for _tk_e in $PATH; do"," case $_tk_e in /*/node_modules/*|*/node_modules) continue ;; /*) ;; *) continue ;; esac",' [ ! "$_tk_e" -ef "$_tk_d" ] || continue',' for _tk_g in "$_tk_e/../lib/node_modules/@tokmizer/plugin/dist/bin" "$_tk_e/../opt/tokmizer/libexec/lib/node_modules/@tokmizer/plugin/dist/bin"; do',` if [ -f "$_tk_g/${Rr}" ] && [ -f "$_tk_g/${e}" ]; then _tk_t=$_tk_g/${e}; break 2; fi`," done"," done"," IFS=$_tk_o; set +f","fi","_tk_x=",'if [ -n "$_tk_t" ]; then',' for _tk_x in "$_tk_n" "$(command -v node 2>/dev/null)" /opt/homebrew/bin/node /usr/local/bin/node /usr/bin/node ""; do',' [ -n "$_tk_x" ] && [ -x "$_tk_x" ] && break'," done","fi"]}function Am(e){return[...Tm(e,"_tk_c"),`if ! ${Lo()}; then`,' if [ -n "$_tk_s" ] && [ -x "$_tk_s" ]; then exec "$_tk_s" shim-run --as "$_tk_c" "$@"; fi',...Uc("tkr-shim.js","$_tk_j").map(t=>` ${t}`),' if [ -n "$_tk_x" ]; then exec "$_tk_x" "$_tk_t" --as "$_tk_c" "$@"; fi',` echo ${re(mi)} >&2`,` { echo x >> ${re(zo())}; } 2>/dev/null`,"fi",...hi(""),""].join(`
|
|
12
|
+
`)}function Bc(e){return[...Tm(e,"_tk_m"),"case $_tk_m in tkr-*-hook) ;; *) { /bin/cat || /usr/bin/cat; } >/dev/null 2>&1; exit 0 ;; esac",'if [ -n "$_tk_s" ] && [ -x "$_tk_s" ]; then _tk_w=${_tk_m#tkr-}; exec "$_tk_s" hook "${_tk_w%-hook}" "$@"; fi',...Uc("$_tk_m.js","${_tk_j%/*}/$_tk_m.js"),'if [ -n "$_tk_x" ]; then exec "$_tk_x" "$_tk_t" "$@"; fi',"{ /bin/cat || /usr/bin/cat; } >/dev/null 2>&1","exit 0",""].join(`
|
|
13
|
+
`)}function Rm(e){return["#!/bin/sh",`_tk_f=${Pr}`,`_tk_s=${re(e.single)}`,`_tk_j=${re(e.js)}`,`_tk_k=${re(e.cache)}`,`_tk_n=${re(e.node)}`,'[ "$#" -gt 0 ] || exit 0',`if ! ${Lo()}; then`,' if [ -n "$_tk_s" ] && [ -x "$_tk_s" ]; then exec "$_tk_s" exec "$@"; fi',...Uc("tkr-exec.js","${_tk_j%/*}/tkr-exec.js").map(t=>` ${t}`),' if [ -n "$_tk_t" ]; then'," _tk_r=${_tk_t%/*}",' if [ -f "$_tk_r/tkr-exec" ] && [ -s "$_tk_r/tkr-exec" ] && [ -x "$_tk_r/tkr-exec" ]; then exec "$_tk_r/tkr-exec" "$@"; fi',' if [ -n "$_tk_x" ] && [ -s "$_tk_t" ]; then exec "$_tk_x" "$_tk_t" "$@"; fi'," fi","fi",'exec "$@"',""].join(`
|
|
14
|
+
`)}function Jc(e){let t=Sm(),n=Xt(st(ot(e),"tkr-shim.js")),r=Cn(t);if(r&&r.format===Pr&&Cr(r.target)&&JSON.stringify(r.target)===JSON.stringify(n))return t;if(!Cr(n))return r&&Cr(r.target)?t:null;let o=`${t}.${process.pid}.tmp`;try{return ym(ot(t),{recursive:!0,mode:448}),xm(o,Rm(n),{mode:493}),km(o,493),wm(o,t),t}catch{try{bm(o)}catch{}return null}}function Cm(e){let t=a=>{let c=e.match(new RegExp(`^${a}=(.*)$`,"m"));return c?a==="_tk_f"?c[1]:hm(c[1]):null},n=Number(t("_tk_f")),r=t("_tk_s"),o=t("_tk_j"),s=t("_tk_k"),i=t("_tk_n")??"";return!Number.isInteger(n)||r===null||o===null||s===null?null:{format:n,target:{single:r,js:o,cache:s,node:i}}}function Cn(e=Yt()){try{return Cm(q_(e,"utf8"))}catch{return null}}function wi(e=Cn()){return e!==null&&e.format===Pr&&Cr(e.target)}async function Pm(e,t){let n=`${e}.${process.pid}.tmp`;try{return await X_(ot(e),{recursive:!0,mode:448}),await eS(n,t,{mode:493}),await Y_(n,493),await Q_(n,e),!0}catch{try{await vm(n)}catch{}return!1}}function Uo(e){return Pm(Yt(),Am(e))}function Gc(e){return Pm(gt(),Bc(e))}function Kc(e){let t=Xt(st(ot(e),"tkr-shim.js")),n=Cn(gt());if(n&&n.format===Pr&&Cr(n.target)&&t.single===""&&t.js==="")return;let r=gt(),o=`${r}.${process.pid}.tmp`;try{ym(ot(r),{recursive:!0,mode:448}),xm(o,Bc(t),{mode:493}),km(o,493),wm(o,r)}catch{try{bm(o)}catch{}}}async function Zc(){try{await vm(Yt())}catch{}}var Pr,Rr,_m,Or=k(()=>{"use strict";$r();F();ht();jo();qt();Pr=1,Rr="tkr-shim.stable",_m=/^(?:0|[1-9]\d{0,5})\.(?:0|[1-9]\d{0,5})\.(?:0|[1-9]\d{0,5})$/});var Mm={};L(Mm,{LEGACY_BACKUP_SUFFIX:()=>Yc,backupConfig:()=>vi,cleanLegacyBackups:()=>fS,configBackupDir:()=>xi,configBackupFile:()=>bi,removeConfigBackups:()=>pS,writeConfigText:()=>kt});import{chmod as rS,lstat as Vc,mkdir as oS,readFile as Wc,rename as sS,rm as iS,unlink as qc,writeFile as aS}from"node:fs/promises";import{createHash as Im}from"node:crypto";import{basename as cS,join as Nm}from"node:path";function xi(){return Nm(y(),"backup","config")}function bi(e){let t=Ir(e),n=Im("sha256").update(t).digest("hex").slice(0,16),r=cS(t).replace(/[^A-Za-z0-9._-]/g,"_").slice(0,80);return Nm(xi(),`${n}-${r}`)}function Hm(e){return`${bi(e)}.written`}function Dm(e){return Im("sha256").update(e).digest("hex")}async function lS(e){try{return await Vc(e),!0}catch{return!1}}async function Xc(e,t){let n=`${e}.tmp-${process.pid}`;try{return await oS(xi(),{recursive:!0,mode:448}),await aS(n,t,{mode:384}),await rS(n,384),await sS(n,e),!0}catch{return await qc(n).catch(()=>{}),!1}}async function uS(e,t){let n=`${e}${Yc}`;try{if(!(await Vc(n)).isFile())return!1}catch{return!1}let r=!await lS(t);if(r&&!await Xc(t,await Wc(n,"utf8")))throw new Error("backup");return await qc(n).catch(()=>{}),r}async function dS(e,t){try{return(await Wc(Hm(e),"utf8")).trim()===Dm(t)}catch{return!1}}async function vi(e,t){let n=t;try{n===void 0&&(n=await Wc(e,"utf8"))}catch(r){return r.code==="ENOENT"}try{if(await uS(e,bi(e)))return!0}catch{return!1}return await dS(e,n)?!0:Xc(bi(e),n)}async function kt(e,t,n){return!await vi(e,n)||!await Fe(e,t)?!1:(await Xc(Hm(e),`${Dm(t)}
|
|
15
|
+
`),!0)}async function fS(e){for(let t of new Set(e)){let n=`${t}${Yc}`;try{(await Vc(n)).isFile()&&await qc(n)}catch{}}}async function pS(){await iS(xi(),{recursive:!0,force:!0}).catch(()=>{})}var Yc,Pn=k(()=>{"use strict";F();de();Yc=".tkr-bak"});function mS(e){return e.charCodeAt(0)===65279?e.slice(1):e}function oe(e){return JSON.parse(mS(e))}var it=k(()=>{"use strict"});var Um={};L(Um,{failOpenHook:()=>Ei,hookCommandFor:()=>je,isJsonObject:()=>R,isTokmizerHookCommand:()=>Le,isTokmizerProgramCommand:()=>el,keepFirstHook:()=>It,parseHookCommand:()=>Bo,readJsonConfig:()=>K,resolveConfigPath:()=>Ir,writeJsonConfig:()=>Z,writeTextPreserving:()=>Fe});import{readFile as hS,writeFile as gS,rename as kS,mkdir as zm,chmod as yS,stat as wS,unlink as bS}from"node:fs/promises";import{existsSync as xS,lstatSync as vS,readlinkSync as _S,realpathSync as Fm}from"node:fs";import{basename as SS,dirname as Si,join as ES,resolve as jm}from"node:path";function R(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}async function K(e){if(!xS(e))return{};try{let t=oe(await hS(e,"utf8"));return R(t)?t:null}catch{return null}}function Ir(e){let t=jm(e);for(let n=0;n<32;n++){try{return Fm(t)}catch{}try{if(!vS(t).isSymbolicLink())break;t=jm(Si(t),_S(t))}catch{break}}try{return ES(Fm(Si(t)),SS(t))}catch{return t}}async function Fe(e,t){let n=Ir(e),r=`${n}.tmp-${process.pid}`;try{await zm(Si(n),{recursive:!0});let o=384;try{o=(await wS(n)).mode&511}catch{}return await gS(r,t,{mode:o}),await yS(r,o),await kS(r,n),!0}catch{try{await bS(r)}catch{}return!1}}async function Z(e,t){try{await zm(Si(e),{recursive:!0})}catch{return!1}return kt(e,`${JSON.stringify(t,null,2)}
|
|
16
|
+
`)}function _i(e){return`'${e.replace(/'/g,"'\\''")}'`}function Ei(e,t,n=process.platform,r="-x"){return n==="win32"?t:`[ ! ${r} ${_i(e)} ] || exec ${t}`}function je(e,t,n){if(process.platform!=="win32")return Kc(n),Ei(gt(),`/bin/sh ${_i(gt())} ${e}`,process.platform,"-f");let r=ae()?Ot(n):null;return r?[_i(Zt(t)),...r].join(" "):`node ${_i(n)}`}function $S(e){let t=[],n="",r=!1;for(let o=0;o<e.length;o++){let s=e[o];if(s==="'"){let i=e.indexOf("'",o+1);if(i<0)return null;n+=e.slice(o+1,i),r=!0,o=i}else if(s==='"'){let i=e.indexOf('"',o+1);if(i<0)return null;let a=e.slice(o+1,i);if(/`|\$\(/.test(a))return null;n+=a,r=!0,o=i}else if(s==="\\"&&e[o+1]==="'")n+="'",r=!0,o++;else if(s===" "||s===" ")r&&t.push(n),n="",r=!1;else{if(s===";"||s==="&"||s==="|"||s==="`"||s===`
|
|
17
|
+
`||s==="\r"||s==="$"&&e[o+1]==="(")return null;n+=s,r=!0}}return r&&t.push(n),t}function Qc(e){return(e.split(/[\\/]/).pop()??"").toLowerCase().replace(/\.(?:exe|cmd|bat|ps1|m?js|sh)$/,"")}function Bo(e){if(typeof e!="string")return null;let t=e.replace(TS,""),n=$S(t);if(!n)return null;let r=0;for(;r<n.length&&Lm.test(n[r]);)r++;if(n[r]==="exec"&&r++,r>=n.length||Lm.test(n[r]))return null;let o=Qc(n[r]),s=n.slice(r+1);if(o==="sh"||o==="bash"){let i=s[0]!==void 0?Qc(s[0]):"";return/^tkr-hook(?:-launch)?$/.test(i)?{program:i,args:s.slice(2),launcherMark:s[1]??""}:{program:o,args:s}}return o==="node"?{program:s[0]!==void 0?Qc(s[0]):"node",args:s.slice(1)}:{program:o,args:s}}function Le(e,t){let n=Bo(e);if(!n)return!1;if(n.launcherMark!==void 0)return n.launcherMark===t;if(n.program===t)return!0;if(n.program!=="tkr")return!1;let r=Ot(t);return r?.length?r.every((o,s)=>n.args[s]===o):!1}function el(e,t,n){let r=Bo(e);return!r||!t.includes(r.program)||r.launcherMark!==void 0?!1:r.args.join(" ")===n}function It(e,t,n,r){let o=i=>i!==n&&t(i),s=!1;for(let i=e.length-1;i>=0;i--){let a=e[i];if(!r){o(a)&&(e.splice(i,1),s=!0);continue}if(!R(a)||!Array.isArray(a.hooks))continue;let c=a.hooks.filter(l=>!o(l));c.length!==a.hooks.length&&(s=!0,c.length?a.hooks=c:e.splice(i,1))}return s}var TS,Lm,de=k(()=>{"use strict";jo();ht();Or();Pn();it();TS=/^\s*\[ ! -[a-z] (?:'(?:[^']|'\\'')*'|"[^"]*") \] \|\| /,Lm=/^[A-Za-z_][A-Za-z0-9_]*=/});var Jo={};L(Jo,{claudeExecutables:()=>PS,claudeHooksPresent:()=>IS,claudePluginEnabled:()=>Gm,claudeSettingsFile:()=>On,ensureClaudeHooks:()=>NS,removeClaudeHooks:()=>HS});import{existsSync as Jm,realpathSync as AS}from"node:fs";import{dirname as Bm,join as nl}from"node:path";function On(){return nl(mt(),"settings.json")}function CS(e,t){return t==="win32"?`"${e}"`:`'${e.replace(/'/g,"'\\''")}'`}function tl(e){try{return AS(e)}catch{return null}}function PS(e=process.env.PATH??"",t=process.platform,n=process.execPath){let r=t==="win32"?"tkr-exec.exe":"tkr-exec",o=Zt(e,t,n),s=nl(Bm(tl(n)??n),r),i=nl(Bm(o),r),a=Jm(i)&&tl(i)===tl(s)?i:s;return{tkr:o,exec:a}}function OS(e,t,n){let r=e.exec?t.exec:t.tkr;return`${Ei(r,CS(r,n),n)} ${e.words}`}function rl(e,t){return R(e)&&el(e.command,t.exec?["tkr-exec"]:["tkr"],t.words)}function ol(e,t){let n=R(e.hooks)?e.hooks:{};return Array.isArray(n[t])?n[t].filter(R):[]}function Ti(e){return Array.isArray(e.hooks)?e.hooks:[]}function Gm(e){return R(e.enabledPlugins)&&e.enabledPlugins[RS]===!0}function IS(e){return $i.every(t=>ol(e,t.event).some(n=>Ti(n).some(r=>rl(r,t))))}async function NS(e,t=process.platform){let n=On(),r=await K(n);if(!r)return"error";if(Gm(r))return"plugin";let o=R(r.hooks)?r.hooks:{};r.hooks=o;let s=!1,i=!1;for(let a of $i){let c=OS(a,e,t),l=ol(r,a.event),u=l.flatMap(Ti).find(f=>rl(f,a));if(u){(u.command!==c||u.timeout!==a.timeout)&&(u.command=c,u.timeout=a.timeout,s=!0);continue}let d={type:"command",command:c,timeout:a.timeout},p=l.find(f=>f.matcher===a.matcher);p?p.hooks=[...Ti(p),d]:l.push({matcher:a.matcher,hooks:[d]}),o[a.event]=l,s=!0,i=!0}return s?await Z(n,r)?i?"added":"updated":"error":"present"}async function HS(){let e=On();if(!Jm(e))return"absent";let t=await K(e);if(!t)return"error";if(!R(t.hooks))return"absent";let n=t.hooks,r=!1;for(let o of new Set($i.map(s=>s.event))){let s=$i.filter(c=>c.event===o),i=ol(t,o),a=i.map(c=>{let l=Ti(c),u=l.filter(d=>!s.some(p=>rl(d,p)));return u.length!==l.length&&(r=!0),{...c,hooks:u}}).filter(c=>c.hooks.length>0);a.length?n[o]=a:i.length&&delete n[o]}return r?await Z(e,t)?"removed":"error":"absent"}var $i,RS,In=k(()=>{"use strict";$r();de();ht();$i=[{event:"SessionStart",matcher:"",words:"hook session-start",exec:!1,timeout:5},{event:"SessionStart",matcher:"",words:"hook reducer-session-start",exec:!1,timeout:5},{event:"SessionStart",matcher:"",words:"hook session-recap",exec:!1,timeout:5},{event:"UserPromptSubmit",matcher:"",words:"hook reducer-prompt-submit",exec:!1,timeout:5},{event:"Stop",matcher:"",words:"hook reducer-stop",exec:!1,timeout:5},{event:"UserPromptExpansion",matcher:"",words:"hook command-expansion",exec:!1,timeout:10},{event:"PreToolUse",matcher:"Bash",words:"--pre-tool-use",exec:!0,timeout:5},{event:"PostToolUse",matcher:"Read|Grep|Glob|Bash",words:"--post-tool-use",exec:!0,timeout:10}],RS="tokmizer@tokmizer"});var Km=k(()=>{"use strict"});var Qt,sl=k(()=>{"use strict";Km();Qt="tkr-context-hook"});function il(e){let t=Bo(e);return!t||t.launcherMark!==void 0?!1:t.program==="tkr-exec"?t.args.length===1&&DS.has(t.args[0]):t.program==="tkr"?t.args.length===2&&t.args[0]==="hook"&&MS.has(t.args[1]):FS.has(t.program)&&jS.test(e)}function zS(e){if(typeof e!="string")return null;if(Le(e,Qt))return"context";if(il(e))return"claude-code";for(let[n,r]of LS)if(Le(e,n))return r;return Le(e,"tkr-agent-hook")?/\b(vibe|antigravity)['"]?\s*$/.exec(e)?.[1]??null:null}function Go(e){return t=>{let n=zS(t);return n!==null&&n!=="context"&&n!==e}}var DS,MS,FS,jS,LS,Ai=k(()=>{"use strict";de();sl();DS=new Set(["--pre-tool-use","--post-tool-use","--session-start"]),MS=new Set(["pre-tool-use","post-tool-use","session-start","session-recap","reducer-session-start","reducer-prompt-submit","reducer-stop","command-expansion"]),FS=new Set(["pre-tool-use","post-tool-use","session-recap","reducer-session-start","reducer-prompt-submit","reducer-stop","command-expansion","on-session-start"]),jS=/(?:tokmizer|\$\{?CLAUDE_PLUGIN_ROOT\}?)[^'"\n]*?[\\/]+(?:dist[\\/]+hooks-host[\\/]+(?:pre-tool-use|post-tool-use|session-recap|reducer-session-start|reducer-prompt-submit|reducer-stop|command-expansion)\.js|hooks[\\/]+on-session-start\.mjs)/i;LS=[["tkr-codex-hook","codex"],["tkr-cursor-hook","cursor"],["tkr-gemini-hook","gemini-cli"],["tkr-copilot-hook","copilot"],["tkr-droid-hook","droid"],["tkr-trae-hook","trae"],["tkr-qwen-hook","qwen-code"],["tkr-crush-hook","crush"],["tkr-junie-hook","junie"],["tkr-zcode-hook","zcode"],["tkr-grok-hook","grok"]]});var fl={};L(fl,{claudeFormHook:()=>il,codexConfigFile:()=>Zo,codexFindingLines:()=>dl,codexFindings:()=>Vo,codexHome:()=>Nr,codexPluginProvidesHook:()=>Dr,codexPlugins:()=>cl,disableLegacyPlugins:()=>rh,projectCodexDirs:()=>Ci,repairCodexConfig:()=>Pi,stripJsonHooks:()=>ul,stripTomlHooks:()=>ll});import{existsSync as al,readFileSync as US,readdirSync as BS}from"node:fs";import{dirname as Zm,join as at,resolve as Ko}from"node:path";import Qm from"node:os";function Nr(){return process.env.CODEX_HOME||at(Qm.homedir(),".codex")}function Zo(){return at(Nr(),"config.toml")}function Hr(e){try{return US(e,"utf8")}catch{return null}}function eh(e){let t=[],n=null;return e.forEach((r,o)=>{let s=n===null&&JS.test(r);for(let i of r.matchAll(/"""|'''/g))n===null?n=i[0]:n===i[0]&&(n=null);s&&(t.length&&(t[t.length-1].end=o),t.push({header:r.trim().replace(/\s*#.*$/,""),start:o,end:e.length}))}),t}function Vm(e){return e.split(/[.+-]/).map(t=>/^\d+$/.test(t)?Number(t):-1)}function KS(e,t){let[n,r]=[Vm(e),Vm(t)];for(let o=0;o<Math.max(n.length,r.length);o++){let s=(r[o]??-1)-(n[o]??-1);if(s)return s}return t.localeCompare(e)}function ZS(e){let t=at(Nr(),"plugins","cache",e,"tokmizer"),n;try{n=BS(t).sort(KS)[0]}catch{return null}if(!n)return null;let r=at(t,n),o=Hr(at(r,".codex-plugin","plugin.json"));try{if(o!==null&&JSON.parse(o).hooks!=null)return"hooked"}catch{}return al(at(r,"hooks","hooks.json"))?"legacy":null}function nh(e){let t=[],n=eh(e);for(let r of n){let o=GS.exec(r.header);if(!o)continue;let s=e.slice(r.start+1,r.end);t.push({marketplace:o[1]??o[2],enabled:!s.some(i=>/^\s*enabled\s*=\s*false\s*(?:#.*)?$/.test(i)),table:r})}return e.forEach((r,o)=>{let s=th.exec(r);if(!s)return;let i=n.filter(c=>c.start<o&&o<c.end)[0];(!/^\s*plugins\s*\./.test(r)?i?.header!=="[plugins]":i!==void 0)||t.push({marketplace:s[3],enabled:!/(?:^|,)\s*enabled\s*=\s*false\s*(?:,|$)/.test(s[4]),line:o})}),t}function cl(e=Hr(Zo())){return e?nh(e.split(/\r?\n/)).map(t=>({id:`tokmizer@${t.marketplace}`,marketplace:t.marketplace,enabled:t.enabled,state:ZS(t.marketplace)})):[]}function Dr(){let e=cl().filter(t=>t.enabled&&t.state);return e.length>0&&e.every(t=>t.state==="hooked")}function rh(e,t){let n=e.split(/(?<=\n)/),r=n.map(s=>s.replace(/\r?\n$/,"")),o=nh(r).filter(s=>t.includes(`tokmizer@${s.marketplace}`));for(let s of o.sort((i,a)=>(a.table?.start??a.line)-(i.table?.start??i.line))){if(s.line!==void 0){let l=th.exec(r[s.line]),u=/\benabled\s*=\s*\w+/.test(l[4])?l[4].replace(/\benabled\s*=\s*\w+/,"enabled = false"):l[4].trim()?` enabled = false,${l[4]}`:" enabled = false ";n[s.line]=`${l[1]}${u}${l[5]}${n[s.line].slice(r[s.line].length)}`;continue}let i=s.table,a=/\r\n$/.test(n[i.start]??"")?`\r
|
|
18
18
|
`:`
|
|
19
|
-
`,c=r.slice(i.start+1,i.end).findIndex(l=>/^\s*enabled\s*=/.test(l));c>=0?n[i.start+1+c]=`enabled = false${a}`:n.splice(i.start+1,0,`enabled = false${a}`),/\n$/.test(n[i.start])||(n[i.start]+=a)}return n.join("")}function Gm(e){let t=e.trim();if(t.startsWith("'"))return/^'([^']*)'/.exec(t)?.[1]??t;let n=/^"((?:\\.|[^"\\])*)"/.exec(t);if(!n)return t;try{return JSON.parse(`"${n[1]}"`)}catch{return n[1]}}function il(e,t){let n=e.split(/(?<=\n)/),r=n.map(u=>u.replace(/\r?\n$/,"")),o=Wm(r),s=new Set,i=new Map,a=[],c=[];o.forEach((u,d)=>{let p=r.slice(u.start+1,u.end);if(Jm.test(u.header)){let g=p.map(h=>US.exec(h)?.[1]).find(h=>h!=null);g&&t(Gm(g))&&(s.add(u),a.push(g.trim()));return}let f=zS.exec(u.header);if(!f)return;let m=[];for(let g of o.slice(d+1)){if(Jm.exec(g.header)?.[2]!==f[2])break;m.push(g)}i.set(u,m)});for(let[u,d]of i)d.length&&d.every(p=>s.has(p))&&s.add(u);for(let u of[...s].sort((d,p)=>p.start-d.start)){let d=u.end,p=d;for(;p-1>u.start&&/^\s*(?:#.*)?$/.test(r[p-1]);)p--;let f=r.slice(p,d).findIndex(m=>/^\s*#/.test(m));f>=0&&d<r.length&&(d=p+f),n.splice(u.start,d-u.start)}let l=n.join("");for(let u of l.split(/\r?\n/))if(!/^\s*#/.test(u))for(let d of u.matchAll(BS))t(Gm(d[1]))&&c.push(u.trim());return{text:l,removed:a,inline:c}}function al(e,t){let n=[];if(!R(e.hooks))return n;let r=e.hooks;for(let[o,s]of Object.entries(r)){if(!Array.isArray(s))continue;let i=[];for(let a of s){if(!R(a)||!Array.isArray(a.hooks)){i.push(a);continue}let c=a.hooks.filter(l=>{let u=R(l)&&t(l.command);return u&&n.push(String(l.command)),!u});c.length&&i.push(c.length===a.hooks.length?a:{...a,hooks:c})}i.length?r[o]=i:delete r[o]}return n}function JS(){return at(Or(),"hooks.json")}function $i(e=process.cwd()){let t=[],n=new Set([zo(Vm.homedir()),zo(Or(),"..")]),r=zo(e);for(let o=0;o<64;o++){let s=at(r,".codex");if(zo(s)!==zo(Or())&&ol(s)&&t.push(s),ol(at(r,".git"))||n.has(r)||Um(r)===r)break;r=Um(r)}return t}function Zm(e){let t=Pr(e);if(!t)return null;try{let n=JSON.parse(t);if(!R(n))return null;let r=al(structuredClone(n),Ei);return r.length?{kind:"hooks-json",file:e,commands:r}:null}catch{return null}}function Km(e,t=Pr(e)){if(!t)return null;let n=il(t,Ei);return n.removed.length||n.inline.length?{kind:"config-toml",file:e,commands:n.removed,inline:n.inline}:null}function Bo(e=process.cwd(),t=!1){let n=[Zm(JS())],r=Pr(Uo());n.push(Km(Uo(),r));let o=r?sl(r).filter(s=>s.enabled&&s.state==="legacy").map(s=>s.id):[];if(o.length&&n.push({kind:"legacy-plugin",file:Uo(),ids:o}),t)for(let s of $i(e))n.push(Zm(at(s,"hooks.json")),Km(at(s,"config.toml")));return n.filter(s=>s!==null)}function cl(e){return e.map(t=>t.kind==="legacy-plugin"?`Codex: the ${t.ids.join(", ")} plugin is an old build that makes Codex run the Claude Code hooks (error "updatedInput without permissionDecision:allow") \u2014 run: tkr doctor --fix`:t.kind==="config-toml"&&t.inline.length&&!t.commands.length?`Codex: ${t.file} has Tokmizer hooks made for another agent, written in a form tkr cannot edit safely \u2014 remove them by hand, then run: tkr setup-codex`:`Codex: ${t.file} has ${t.commands.length} Tokmizer hook${t.commands.length===1?"":"s"} made for another agent (copied or imported, e.g. by Codex /import) \u2014 run: tkr doctor --fix`)}async function Ti(e=Bo()){let t=[],n=!1,r=!1;for(let o of e){if(o.kind==="hooks-json"){let i=await Z(o.file),a=i?al(i,Ei):[];if(!i||a.length&&!await K(o.file,i)){r=!0,t.push(`Could not update ${o.file}; remove the Tokmizer hooks made for another agent from it by hand.`);continue}a.length&&(n=!0,t.push(`Removed ${a.length} Tokmizer hook${a.length===1?"":"s"} made for another agent from ${o.file} (backup in ~/.tokmizer/backup/config).`));continue}let s=Pr(o.file);if(s!==null){if(o.kind==="config-toml"){let i=il(s,Ei);if(!i.removed.length)continue;if(!await gt(o.file,i.text,s)){r=!0,t.push(`Could not update ${o.file}; remove the Tokmizer hooks made for another agent from it by hand.`);continue}n=!0,t.push(`Removed ${i.removed.length} Tokmizer hook${i.removed.length===1?"":"s"} made for another agent from ${o.file} (backup in ~/.tokmizer/backup/config).`);continue}if(!await gt(o.file,Xm(s,o.ids),s)){r=!0,t.push(`Could not update ${o.file}; run: codex plugin remove ${o.ids[0]}`);continue}n=!0,t.push(`Turned off the old ${o.ids.join(", ")} Codex plugin, which ran the Claude Code hooks (backup in ~/.tokmizer/backup/config). Once a newer Tokmizer is out, codex plugin marketplace upgrade then codex plugin add ${o.ids[0]} brings it back.`)}}return{lines:t,changed:n,error:r}}var Ei,FS,MS,qm,zS,Jm,US,BS,Ai=k(()=>{"use strict";de();Cn();Si();Si();Ei=Lo("codex");FS=/^\s*\[\[?[^\[\]=,]+\]\]?\s*(?:#.*)?$/;MS=/^\[\s*plugins\s*\.\s*(?:"tokmizer@([^"]+)"|'tokmizer@([^']+)')\s*\]$/,qm=/^(\s*(?:plugins\s*\.\s*)?(["'])tokmizer@([^"']+)\2\s*=\s*\{)([^}]*)(\}.*)$/;zS=/^\[\[\s*hooks\s*\.\s*(["']?)([A-Za-z]+)\1\s*\]\]$/,Jm=/^\[\[\s*hooks\s*\.\s*(["']?)([A-Za-z]+)\1\s*\.\s*(["']?)hooks\3\s*\]\]$/,US=/^\s*command\s*=\s*(.+)$/,BS=/\bcommand\s*=\s*("(?:\\.|[^"\\])*"|'[^']*')/g});var Qt={};j(Qt,{codexDoctorFix:()=>WS,codexDoctorLines:()=>VS,codexHookCommand:()=>Jo,codexHookInstalled:()=>In,codexHooksFile:()=>ie,ensureCodexHook:()=>eh,removeCodexHook:()=>th,setupCodexHook:()=>nh});import{existsSync as GS,readFileSync as ZS}from"node:fs";import{join as Ri}from"node:path";import KS from"node:os";function ie(){return Ri(process.env.CODEX_HOME||Ri(KS.homedir(),".codex"),"hooks.json")}function ul(e){return e!=null&&typeof e=="object"&&Le(e.command,Qm)}function dl(e){return(Array.isArray(e.hooks)?e.hooks:[]).find(ul)}function fl(){try{return(oe(ZS(ie(),"utf8")).hooks?.PreToolUse??[]).some(t=>dl(t)!=null)}catch{return!1}}function In(){return fl()||Ir()}async function eh(e){let t=ie(),n=await Z(t);if(!n)return"error";let r=n.hooks&&typeof n.hooks=="object"?n.hooks:{},o=Array.isArray(r.PreToolUse)?r.PreToolUse:[],s="added",i=o.map(dl).find(a=>a!=null);if(i){let a=Pt(o,ul,i,!0);if(i.command===e&&i.timeout===10&&!a)return"present";i.command=e,i.timeout=10,s="updated"}else o.push({matcher:"Bash",hooks:[{type:"command",command:e,timeout:10}]});return r.PreToolUse=o,n.hooks=r,await K(t,n)?s:"error"}function Jo(e,t){return je(Qm,e,t)}async function th(){let e=ie();if(!GS(e))return"absent";let t=await Z(e);if(!t)return"error";let n=Array.isArray(t.hooks?.PreToolUse)?t.hooks.PreToolUse:[];if(!n.some(o=>dl(o)!=null))return"absent";let r=n.map(o=>({...o,hooks:(o.hooks??[]).filter(s=>!ul(s))})).filter(o=>o.hooks.length>0);return t.hooks.PreToolUse=r,r.length||delete t.hooks.PreToolUse,await K(e,t)?"removed":"error"}async function nh(e){let t=await Ti();return Ir()?{hook:await th()==="error"?"error":"plugin",repair:t}:{hook:await eh(e),repair:t}}function VS(){let e=cl(Bo(process.cwd(),!0));return Ir()&&fl()&&e.push(`Codex: the Tokmizer plugin and ${ie()} both run the Tokmizer hook \u2014 run: tkr doctor --fix`),e}async function WS(e){let t=Bo(process.cwd(),!0),n=Ir()&&fl();if(!t.length&&!n)return[];let r=new Set($i().flatMap(c=>[Ri(c,"hooks.json"),Ri(c,"config.toml")])),o=await Ti(t.filter(c=>r.has(c.file))),{hook:s,repair:i}=await nh(e),a=[...o.lines,...i.lines];return s==="error"?a.push(`Could not update ${ie()}; run tkr setup-codex again.`):s==="plugin"?a.push(n?`Removed the extra Tokmizer hook from ${ie()}: the Tokmizer Codex plugin already runs it.`:"The Tokmizer Codex plugin runs the Codex hook."):a.push(`${s==="present"?"The Codex hook is set":"Added the Codex hook"} in ${ie()}.`),(i.changed||o.changed||s==="added"||s==="updated")&&a.push("In Codex, run /hooks once, approve the Tokmizer hook, then restart Codex."),a}var Qm,We=k(()=>{"use strict";it();de();Ai();Qm="tkr-codex-hook"});import{existsSync as qS,readFileSync as YS}from"node:fs";import{join as XS}from"node:path";import QS from"node:os";function qe(){return XS(QS.homedir(),".cursor","hooks.json")}function Ci(e){return R(e)&&Le(e.command,rh)}function ml(e){let t=R(e.hooks)?e.hooks:{},n=Array.isArray(t[Go])?t[Go]:[];return{hooks:t,entries:n}}function It(){try{let e=oe(YS(qe(),"utf8"));return ml(e).entries.some(Ci)}catch{return!1}}async function hl(e){let t=qe(),n=await Z(t);if(!n)return"error";let{hooks:r,entries:o}=ml(n),s="added",i=o.find(Ci);if(i){let a=Pt(o,Ci,i,!1);if(i.command===e&&i.matcher===pl&&i.timeout===10&&!a)return"present";i.command=e,i.matcher=pl,i.timeout=10,s="updated"}else o.push({command:e,matcher:pl,timeout:10});return r[Go]=o,n.hooks=r,typeof n.version!="number"&&(n.version=1),await K(t,n)?s:"error"}async function gl(){let e=qe();if(!qS(e))return"absent";let t=await Z(e);if(!t)return"error";let{hooks:n,entries:r}=ml(t),o=r.filter(s=>!Ci(s));return o.length===r.length?"absent":(o.length?n[Go]=o:delete n[Go],t.hooks=n,await K(e,t)?"removed":"error")}function kl(e,t){return je(rh,e,t)}var rh,Go,pl,Nn=k(()=>{"use strict";it();de();rh="tkr-cursor-hook",Go="preToolUse",pl="Shell"});import{existsSync as eE,readFileSync as tE}from"node:fs";import{join as nE}from"node:path";import rE from"node:os";function Re(){return nE(process.env.GEMINI_CLI_HOME||rE.homedir(),".gemini","settings.json")}function yl(e){return R(e)&&Le(e.command,oh)}function wl(e){return(Array.isArray(e.hooks)?e.hooks:[]).find(yl)}function bl(e){let t=R(e.hooks)?e.hooks:{},n=Array.isArray(t[Zo])?t[Zo]:[];return{hooks:t,groups:n}}function Hn(){try{let e=oe(tE(Re(),"utf8"));return bl(e).groups.some(t=>wl(t)!=null)}catch{return!1}}async function xl(e){let t=Re(),n=await Z(t);if(!n)return"error";let{hooks:r,groups:o}=bl(n),s="added",i=o.map(wl).find(a=>a!=null);if(i){let a=Pt(o,yl,i,!0);if(i.command===e&&i.timeout===1e4&&!a)return"present";i.command=e,i.timeout=1e4,s="updated"}else o.push({matcher:oE,hooks:[{name:"tokmizer",type:"command",command:e,timeout:1e4}]});return r[Zo]=o,n.hooks=r,await K(t,n)?s:"error"}async function vl(){let e=Re();if(!eE(e))return"absent";let t=await Z(e);if(!t)return"error";let{hooks:n,groups:r}=bl(t);if(!r.some(s=>wl(s)!=null))return"absent";let o=r.map(s=>Array.isArray(s.hooks)?{...s,hooks:s.hooks.filter(i=>!yl(i))}:s).filter(s=>!Array.isArray(s.hooks)||s.hooks.length>0);return o.length?n[Zo]=o:delete n[Zo],t.hooks=n,await K(e,t)?"removed":"error"}function _l(e,t){return je(oh,e,t)}var oh,Zo,oE,Dn=k(()=>{"use strict";it();de();oh="tkr-gemini-hook",Zo="BeforeTool",oE="run_shell_command"});import{existsSync as sE,readFileSync as iE}from"node:fs";function Oi(e,t){return R(e)&&Le(e.command,t)}function sh(e){return e.path??(e.nested?["hooks"]:[])}function ih(e,t){let n=e;for(let r of sh(t))R(n[r])||(n[r]={}),n=n[r];return n}function ah(e,t){let n=e;for(let o of sh(t))n=R(n)?n[o]:void 0;if(!R(n))return[];let r=n[t.event];return Array.isArray(r)?r:[]}function aE(e){return R(e)&&Array.isArray(e.hooks)?e.hooks:[]}function ch(e,t){return(t.matcher===void 0?e:e.flatMap(aE)).filter(r=>Oi(r,t.mark))}function lh(e,t){return ch(ah(e,t),t).length>0}function Ko(e,t){try{let n=oe(iE(e,"utf8"));return R(n)&&lh(n,t)}catch{return!1}}function cE(e,t,n){let r=ih(e,t),o=Array.isArray(r[t.event])?r[t.event]:[];r[t.event]=o;let s=ch(o,t)[0],i=t.entry(n);if(s){let a=Pt(o,l=>Oi(l,t.mark),s,t.matcher!==void 0),c=Object.entries(i).filter(([l,u])=>JSON.stringify(s[l])!==JSON.stringify(u));if(!c.length&&!a)return"present";for(let[l,u]of c)s[l]=u;return"updated"}return o.push(t.matcher===void 0?i:{matcher:t.matcher,hooks:[i]}),"added"}function lE(e,t){if(!lh(e,t))return!1;let n=ih(e,t),r=ah(e,t),o=t.matcher===void 0?r.filter(s=>!Oi(s,t.mark)):r.map(s=>R(s)&&Array.isArray(s.hooks)?{...s,hooks:s.hooks.filter(i=>!Oi(i,t.mark))}:s).filter(s=>!R(s)||!Array.isArray(s.hooks)||s.hooks.length>0);return o.length?n[t.event]=o:delete n[t.event],!0}async function Vo(e,t,n){let r=await Z(e);if(!r||t.prepare&&!t.prepare(r))return"error";let o=cE(r,t,n);return o==="present"||await K(e,r)?o:"error"}async function Fn(e,t){if(!sE(e))return"absent";let n=await Z(e);return n?lE(n,t)?await K(e,n)?"removed":"error":"absent":"error"}var Sl=k(()=>{"use strict";it();de()});var hh={};j(hh,{JSON_HOOK_AGENTS:()=>ce,agentHookCommand:()=>Fi,copilotHooksFile:()=>Pi,crushConfigFile:()=>fh,droidFiles:()=>Nt,droidHookTarget:()=>Wo,grokHooksFile:()=>mh,jsonHookAgent:()=>Al,jsonHookAgentForSetup:()=>Rl,junieConfigFile:()=>ph,prepareZcode:()=>Hi,qwenSettingsFile:()=>Ni,traeHooksFiles:()=>Ii,withVersion:()=>jn,zcodeConfigFile:()=>Di});import{existsSync as $l,readFileSync as uE}from"node:fs";import{join as ke}from"node:path";import dE from"node:os";function kt(){return dE.homedir()}function jn(e){return e.version===void 0&&(e.version=1),e.version===1}function fE(e,t,n){return Promise.all(e.map(r=>Vo(r,t,n))).then(r=>r.includes("error")?"error":r.includes("updated")?"updated":r.includes("added")?"added":"present")}function pE(e,t){return Promise.all(e.map(n=>Fn(n,t))).then(n=>n.includes("error")?"error":n.includes("removed")?"removed":"absent")}function Mn(e,t){return{...e,installed:()=>e.files().some(n=>Ko(n,t)),ensure:n=>fE(e.files(),t,n),remove:()=>pE(e.files(),t)}}function Pi(){return ke(process.env.COPILOT_HOME||ke(kt(),".copilot"),"hooks","tokmizer.json")}function Ii(){let e=[ke(kt(),".trae","hooks.json")];return $l(ke(kt(),".trae-cn"))&&e.push(ke(kt(),".trae-cn","hooks.json")),e}function Ni(){return ke(process.env.QWEN_HOME||ke(kt(),".qwen"),"settings.json")}function fh(){return ke(process.env.XDG_CONFIG_HOME||ke(kt(),".config"),"crush","crush.json")}function ph(){return ke(kt(),".junie","config.json")}function Hi(e){return e.hooks===void 0&&(e.hooks={}),R(e.hooks)?(e.hooks.enabled===void 0&&(e.hooks.enabled=!0),e.hooks.events===void 0||R(e.hooks.events)):!1}function Di(){return ke(kt(),".zcode","cli","config.json")}function mh(){return ke(kt(),".grok","hooks","tokmizer.json")}function El(){return ke(kt(),".factory")}function Nt(){return[{file:ke(El(),"hooks.json"),spec:Tl},{file:ke(El(),"hooks","hooks.json"),spec:Tl},{file:ke(El(),"settings.json"),spec:vE}]}function uh(e){try{let t=JSON.parse(uE(e,"utf8"));return R(t)?t:null}catch{return null}}function dh(e,t){let n=t?e?.hooks:e;return R(n)&&Array.isArray(n.PreToolUse)&&n.PreToolUse.length>0}function Wo(){let[e,t,n]=Nt(),r=$l(e.file)?e:$l(t.file)?t:null;return r&&dh(uh(r.file),!1)?r:dh(uh(n.file),!0)?n:r??e}function Al(e){return ce.find(t=>t.id===e)}function Rl(e){return ce.find(t=>t.setup===`tkr ${e}`)}function Fi(e,t,n){return je(e.bin,t,n)}var mE,hE,gE,kE,yE,wE,bE,xE,Tl,vE,_E,ce,en=k(()=>{"use strict";de();Sl();mE={mark:"tkr-copilot-hook",event:"PreToolUse",nested:!0,entry:e=>({type:"command",command:e,bash:e,powershell:e,timeout:10,timeoutSec:10}),prepare:jn};hE={mark:"tkr-trae-hook",event:"PreToolUse",nested:!0,matcher:"RunCommand",entry:e=>({type:"command",command:e,timeout:30}),prepare:jn};gE={mark:"tkr-qwen-hook",event:"PreToolUse",nested:!0,matcher:"run_shell_command",entry:e=>({name:"tokmizer",type:"command",command:e,timeout:10})};kE={mark:"tkr-crush-hook",event:"PreToolUse",nested:!0,entry:e=>({name:"tokmizer",matcher:"^bash$",command:e,timeout:10})};yE={mark:"tkr-junie-hook",event:"PreToolUse",nested:!0,matcher:"^Bash$",entry:e=>({type:"command",command:e,timeout:10})};wE={mark:"tkr-zcode-hook",event:"PreToolUse",nested:!0,path:["hooks","events"],matcher:"Bash",entry:e=>({type:"command",command:e,timeoutMs:1e4}),prepare:Hi};bE={mark:"tkr-grok-hook",event:"PreToolUse",nested:!0,matcher:"Bash",entry:e=>({type:"command",command:e,timeout:10})};xE="tkr-droid-hook",Tl={mark:xE,event:"PreToolUse",nested:!1,matcher:"Execute",entry:e=>({type:"command",command:e,timeout:10})},vE={...Tl,nested:!0};_E={id:"droid",label:"Factory Droid",setup:"tkr setup-droid",bin:"tkr-droid-hook",restart:"Restart Droid, then check it with /hooks.",files:()=>[Wo().file],installed:()=>Nt().some(e=>Ko(e.file,e.spec)),ensure:async e=>{let t=Wo(),n=await Vo(t.file,t.spec,e);return n==="error"||await Promise.all(Nt().filter(r=>r.file!==t.file).map(r=>Fn(r.file,r.spec))),n},remove:async()=>{let e=await Promise.all(Nt().map(t=>Fn(t.file,t.spec)));return e.includes("error")?"error":e.includes("removed")?"removed":"absent"}},ce=[Mn({id:"copilot",label:"GitHub Copilot",setup:"tkr setup-copilot",bin:"tkr-copilot-hook",restart:"Restart VS Code or Copilot CLI so they load the new hook.",files:()=>[Pi()]},mE),_E,Mn({id:"trae",label:"Trae",setup:"tkr setup-trae",bin:"tkr-trae-hook",restart:"Restart Trae so it loads the new hook.",files:Ii},hE),Mn({id:"qwen-code",label:"Qwen Code",setup:"tkr setup-qwen",bin:"tkr-qwen-hook",restart:"Restart Qwen Code, then check it with /hooks.",files:()=>[Ni()]},gE),Mn({id:"crush",label:"Crush",setup:"tkr setup-crush",bin:"tkr-crush-hook",restart:"Restart Crush so it loads the new hook.",files:()=>[fh()]},kE),Mn({id:"junie",label:"Junie CLI",setup:"tkr setup-junie",bin:"tkr-junie-hook",restart:"Restart Junie CLI so it loads the new hook.",files:()=>[ph()]},yE),Mn({id:"zcode",label:"ZCode",setup:"tkr setup-zcode",bin:"tkr-zcode-hook",restart:"Restart ZCode so it loads the new hook.",files:()=>[Di()]},wE),Mn({id:"grok",label:"Grok Build",setup:"tkr setup-grok",bin:"tkr-grok-hook",restart:"Restart Grok Build (1.0.4 or newer) so it loads the new hook.",files:()=>[mh()]},bE)]});import{readFile as gh,unlink as SE}from"node:fs/promises";import{existsSync as kh,accessSync as EE,constants as $E,readFileSync as TE}from"node:fs";import{join as AE}from"node:path";function Mi(e,t,n=process.platform,r=process.execPath){if(n!=="win32")for(let o of e.split(":")){if(!o||o.includes("node_modules"))continue;let s=AE(o,"tkr");try{return EE(s,$E.X_OK),[s]}catch{}}return Gt(t,r)}function yh(e,t,n=hr()){return e.split(RE).join(JSON.stringify(t)).split(CE).join(JSON.stringify(n))}function Cl(e){return e.includes(OE)}function wh(e){try{return Cl(TE(e,"utf8"))}catch{return!1}}async function bh(e,t){try{let n="added";if(kh(e)){let r=await gh(e,"utf8");if(r===t)return"present";if(Cl(r))n="updated";else if(!await ki(e,r))return"error"}return await Me(e,t)?n:"error"}catch{return"error"}}async function xh(e){try{return!kh(e)||!Cl(await gh(e,"utf8"))?"absent":(await SE(e),"removed")}catch{return"error"}}var RE,CE,OE,Ol=k(()=>{"use strict";de();mt();Cn();F();RE="__TKR_ARGV__",CE="__TKR_CONTEXT_FILE__",OE='"rewrite", "--host"'});var Ah={};j(Ah,{agentHookCommand:()=>ji,antigravityHookInstalled:()=>Ml,antigravityHooksFile:()=>Ye,ensureAntigravityHook:()=>jl,ensureVibeHook:()=>Dl,removeAntigravityHook:()=>Ll,removeVibeHook:()=>Fl,vibeHookInstalled:()=>Hl,vibeHooksFile:()=>Nr});import{readFile as _h,mkdir as PE}from"node:fs/promises";import{existsSync as Il,readFileSync as Sh}from"node:fs";import{dirname as IE,join as Pl}from"node:path";import Eh from"node:os";function ji(e,t,n){return`${je(NE,t,n)} ${e}`}function Nr(){return Pl(process.env.VIBE_HOME||Pl(Eh.homedir(),".vibe"),"hooks.toml")}function vh(e){return JSON.stringify(e)}function HE(e){return["[[hooks]]",`name = ${vh($h)}`,'type = "pre_tool"','match = "bash"',`command = ${vh(e)}`,"timeout = 10.0","strict = false",'description = "Route shell commands through tokmizer."',""].join(`
|
|
20
|
-
`)}function
|
|
19
|
+
`,c=r.slice(i.start+1,i.end).findIndex(l=>/^\s*enabled\s*=/.test(l));c>=0?n[i.start+1+c]=`enabled = false${a}`:n.splice(i.start+1,0,`enabled = false${a}`),/\n$/.test(n[i.start])||(n[i.start]+=a)}return n.join("")}function qm(e){let t=e.trim();if(t.startsWith("'"))return/^'([^']*)'/.exec(t)?.[1]??t;let n=/^"((?:\\.|[^"\\])*)"/.exec(t);if(!n)return t;try{return JSON.parse(`"${n[1]}"`)}catch{return n[1]}}function ll(e,t){let n=e.split(/(?<=\n)/),r=n.map(u=>u.replace(/\r?\n$/,"")),o=eh(r),s=new Set,i=new Map,a=[],c=[];o.forEach((u,d)=>{let p=r.slice(u.start+1,u.end);if(Wm.test(u.header)){let g=p.map(m=>WS.exec(m)?.[1]).find(m=>m!=null);g&&t(qm(g))&&(s.add(u),a.push(g.trim()));return}let f=VS.exec(u.header);if(!f)return;let h=[];for(let g of o.slice(d+1)){if(Wm.exec(g.header)?.[2]!==f[2])break;h.push(g)}i.set(u,h)});for(let[u,d]of i)d.length&&d.every(p=>s.has(p))&&s.add(u);for(let u of[...s].sort((d,p)=>p.start-d.start)){let d=u.end,p=d;for(;p-1>u.start&&/^\s*(?:#.*)?$/.test(r[p-1]);)p--;let f=r.slice(p,d).findIndex(h=>/^\s*#/.test(h));f>=0&&d<r.length&&(d=p+f),n.splice(u.start,d-u.start)}let l=n.join("");for(let u of l.split(/\r?\n/))if(!/^\s*#/.test(u))for(let d of u.matchAll(qS))t(qm(d[1]))&&c.push(u.trim());return{text:l,removed:a,inline:c}}function ul(e,t){let n=[];if(!R(e.hooks))return n;let r=e.hooks;for(let[o,s]of Object.entries(r)){if(!Array.isArray(s))continue;let i=[];for(let a of s){if(!R(a)||!Array.isArray(a.hooks)){i.push(a);continue}let c=a.hooks.filter(l=>{let u=R(l)&&t(l.command);return u&&n.push(String(l.command)),!u});c.length&&i.push(c.length===a.hooks.length?a:{...a,hooks:c})}i.length?r[o]=i:delete r[o]}return n}function YS(){return at(Nr(),"hooks.json")}function Ci(e=process.cwd()){let t=[],n=new Set([Ko(Qm.homedir()),Ko(Nr(),"..")]),r=Ko(e);for(let o=0;o<64;o++){let s=at(r,".codex");if(Ko(s)!==Ko(Nr())&&al(s)&&t.push(s),al(at(r,".git"))||n.has(r)||Zm(r)===r)break;r=Zm(r)}return t}function Ym(e){let t=Hr(e);if(!t)return null;try{let n=JSON.parse(t);if(!R(n))return null;let r=ul(structuredClone(n),Ri);return r.length?{kind:"hooks-json",file:e,commands:r}:null}catch{return null}}function Xm(e,t=Hr(e)){if(!t)return null;let n=ll(t,Ri);return n.removed.length||n.inline.length?{kind:"config-toml",file:e,commands:n.removed,inline:n.inline}:null}function Vo(e=process.cwd(),t=!1){let n=[Ym(YS())],r=Hr(Zo());n.push(Xm(Zo(),r));let o=r?cl(r).filter(s=>s.enabled&&s.state==="legacy").map(s=>s.id):[];if(o.length&&n.push({kind:"legacy-plugin",file:Zo(),ids:o}),t)for(let s of Ci(e))n.push(Ym(at(s,"hooks.json")),Xm(at(s,"config.toml")));return n.filter(s=>s!==null)}function dl(e){return e.map(t=>t.kind==="legacy-plugin"?`Codex: the ${t.ids.join(", ")} plugin is an old build that makes Codex run the Claude Code hooks (error "updatedInput without permissionDecision:allow") \u2014 run: tkr doctor --fix`:t.kind==="config-toml"&&t.inline.length&&!t.commands.length?`Codex: ${t.file} has Tokmizer hooks made for another agent, written in a form tkr cannot edit safely \u2014 remove them by hand, then run: tkr setup-codex`:`Codex: ${t.file} has ${t.commands.length} Tokmizer hook${t.commands.length===1?"":"s"} made for another agent (copied or imported, e.g. by Codex /import) \u2014 run: tkr doctor --fix`)}async function Pi(e=Vo()){let t=[],n=!1,r=!1;for(let o of e){if(o.kind==="hooks-json"){let i=await K(o.file),a=i?ul(i,Ri):[];if(!i||a.length&&!await Z(o.file,i)){r=!0,t.push(`Could not update ${o.file}; remove the Tokmizer hooks made for another agent from it by hand.`);continue}a.length&&(n=!0,t.push(`Removed ${a.length} Tokmizer hook${a.length===1?"":"s"} made for another agent from ${o.file} (backup in ~/.tokmizer/backup/config).`));continue}let s=Hr(o.file);if(s!==null){if(o.kind==="config-toml"){let i=ll(s,Ri);if(!i.removed.length)continue;if(!await kt(o.file,i.text,s)){r=!0,t.push(`Could not update ${o.file}; remove the Tokmizer hooks made for another agent from it by hand.`);continue}n=!0,t.push(`Removed ${i.removed.length} Tokmizer hook${i.removed.length===1?"":"s"} made for another agent from ${o.file} (backup in ~/.tokmizer/backup/config).`);continue}if(!await kt(o.file,rh(s,o.ids),s)){r=!0,t.push(`Could not update ${o.file}; run: codex plugin remove ${o.ids[0]}`);continue}n=!0,t.push(`Turned off the old ${o.ids.join(", ")} Codex plugin, which ran the Claude Code hooks (backup in ~/.tokmizer/backup/config). Once a newer Tokmizer is out, codex plugin marketplace upgrade then codex plugin add ${o.ids[0]} brings it back.`)}}return{lines:t,changed:n,error:r}}var Ri,JS,GS,th,VS,Wm,WS,qS,Oi=k(()=>{"use strict";de();Pn();Ai();Ai();Ri=Go("codex");JS=/^\s*\[\[?[^\[\]=,]+\]\]?\s*(?:#.*)?$/;GS=/^\[\s*plugins\s*\.\s*(?:"tokmizer@([^"]+)"|'tokmizer@([^']+)')\s*\]$/,th=/^(\s*(?:plugins\s*\.\s*)?(["'])tokmizer@([^"']+)\2\s*=\s*\{)([^}]*)(\}.*)$/;VS=/^\[\[\s*hooks\s*\.\s*(["']?)([A-Za-z]+)\1\s*\]\]$/,Wm=/^\[\[\s*hooks\s*\.\s*(["']?)([A-Za-z]+)\1\s*\.\s*(["']?)hooks\3\s*\]\]$/,WS=/^\s*command\s*=\s*(.+)$/,qS=/\bcommand\s*=\s*("(?:\\.|[^"\\])*"|'[^']*')/g});var en={};L(en,{codexDoctorFix:()=>nE,codexDoctorLines:()=>tE,codexHookCommand:()=>Wo,codexHookInstalled:()=>Nn,codexHooksFile:()=>ie,ensureCodexHook:()=>sh,removeCodexHook:()=>ih,setupCodexHook:()=>ah});import{existsSync as XS,readFileSync as QS}from"node:fs";import{join as Ii}from"node:path";import eE from"node:os";function ie(){return Ii(process.env.CODEX_HOME||Ii(eE.homedir(),".codex"),"hooks.json")}function pl(e){return e!=null&&typeof e=="object"&&Le(e.command,oh)}function ml(e){return(Array.isArray(e.hooks)?e.hooks:[]).find(pl)}function hl(){try{return(oe(QS(ie(),"utf8")).hooks?.PreToolUse??[]).some(t=>ml(t)!=null)}catch{return!1}}function Nn(){return hl()||Dr()}async function sh(e){let t=ie(),n=await K(t);if(!n)return"error";let r=n.hooks&&typeof n.hooks=="object"?n.hooks:{},o=Array.isArray(r.PreToolUse)?r.PreToolUse:[],s="added",i=o.map(ml).find(a=>a!=null);if(i){let a=It(o,pl,i,!0);if(i.command===e&&i.timeout===10&&!a)return"present";i.command=e,i.timeout=10,s="updated"}else o.push({matcher:"Bash",hooks:[{type:"command",command:e,timeout:10}]});return r.PreToolUse=o,n.hooks=r,await Z(t,n)?s:"error"}function Wo(e,t){return je(oh,e,t)}async function ih(){let e=ie();if(!XS(e))return"absent";let t=await K(e);if(!t)return"error";let n=Array.isArray(t.hooks?.PreToolUse)?t.hooks.PreToolUse:[];if(!n.some(o=>ml(o)!=null))return"absent";let r=n.map(o=>({...o,hooks:(o.hooks??[]).filter(s=>!pl(s))})).filter(o=>o.hooks.length>0);return t.hooks.PreToolUse=r,r.length||delete t.hooks.PreToolUse,await Z(e,t)?"removed":"error"}async function ah(e){let t=await Pi();return Dr()?{hook:await ih()==="error"?"error":"plugin",repair:t}:{hook:await sh(e),repair:t}}function tE(){let e=dl(Vo(process.cwd(),!0));return Dr()&&hl()&&e.push(`Codex: the Tokmizer plugin and ${ie()} both run the Tokmizer hook \u2014 run: tkr doctor --fix`),e}async function nE(e){let t=Vo(process.cwd(),!0),n=Dr()&&hl();if(!t.length&&!n)return[];let r=new Set(Ci().flatMap(c=>[Ii(c,"hooks.json"),Ii(c,"config.toml")])),o=await Pi(t.filter(c=>r.has(c.file))),{hook:s,repair:i}=await ah(e),a=[...o.lines,...i.lines];return s==="error"?a.push(`Could not update ${ie()}; run tkr setup-codex again.`):s==="plugin"?a.push(n?`Removed the extra Tokmizer hook from ${ie()}: the Tokmizer Codex plugin already runs it.`:"The Tokmizer Codex plugin runs the Codex hook."):a.push(`${s==="present"?"The Codex hook is set":"Added the Codex hook"} in ${ie()}.`),(i.changed||o.changed||s==="added"||s==="updated")&&a.push("In Codex, run /hooks once, approve the Tokmizer hook, then restart Codex."),a}var oh,Ve=k(()=>{"use strict";it();de();Oi();oh="tkr-codex-hook"});import{existsSync as rE,readFileSync as oE}from"node:fs";import{join as sE}from"node:path";import iE from"node:os";function We(){return sE(iE.homedir(),".cursor","hooks.json")}function Ni(e){return R(e)&&Le(e.command,ch)}function kl(e){let t=R(e.hooks)?e.hooks:{},n=Array.isArray(t[qo])?t[qo]:[];return{hooks:t,entries:n}}function Nt(){try{let e=oe(oE(We(),"utf8"));return kl(e).entries.some(Ni)}catch{return!1}}async function yl(e){let t=We(),n=await K(t);if(!n)return"error";let{hooks:r,entries:o}=kl(n),s="added",i=o.find(Ni);if(i){let a=It(o,Ni,i,!1);if(i.command===e&&i.matcher===gl&&i.timeout===10&&!a)return"present";i.command=e,i.matcher=gl,i.timeout=10,s="updated"}else o.push({command:e,matcher:gl,timeout:10});return r[qo]=o,n.hooks=r,typeof n.version!="number"&&(n.version=1),await Z(t,n)?s:"error"}async function wl(){let e=We();if(!rE(e))return"absent";let t=await K(e);if(!t)return"error";let{hooks:n,entries:r}=kl(t),o=r.filter(s=>!Ni(s));return o.length===r.length?"absent":(o.length?n[qo]=o:delete n[qo],t.hooks=n,await Z(e,t)?"removed":"error")}function bl(e,t){return je(ch,e,t)}var ch,qo,gl,Hn=k(()=>{"use strict";it();de();ch="tkr-cursor-hook",qo="preToolUse",gl="Shell"});import{existsSync as aE,readFileSync as cE}from"node:fs";import{join as lE}from"node:path";import uE from"node:os";function Re(){return lE(process.env.GEMINI_CLI_HOME||uE.homedir(),".gemini","settings.json")}function xl(e){return R(e)&&Le(e.command,lh)}function vl(e){return(Array.isArray(e.hooks)?e.hooks:[]).find(xl)}function _l(e){let t=R(e.hooks)?e.hooks:{},n=Array.isArray(t[Yo])?t[Yo]:[];return{hooks:t,groups:n}}function Dn(){try{let e=oe(cE(Re(),"utf8"));return _l(e).groups.some(t=>vl(t)!=null)}catch{return!1}}async function Sl(e){let t=Re(),n=await K(t);if(!n)return"error";let{hooks:r,groups:o}=_l(n),s="added",i=o.map(vl).find(a=>a!=null);if(i){let a=It(o,xl,i,!0);if(i.command===e&&i.timeout===1e4&&!a)return"present";i.command=e,i.timeout=1e4,s="updated"}else o.push({matcher:dE,hooks:[{name:"tokmizer",type:"command",command:e,timeout:1e4}]});return r[Yo]=o,n.hooks=r,await Z(t,n)?s:"error"}async function El(){let e=Re();if(!aE(e))return"absent";let t=await K(e);if(!t)return"error";let{hooks:n,groups:r}=_l(t);if(!r.some(s=>vl(s)!=null))return"absent";let o=r.map(s=>Array.isArray(s.hooks)?{...s,hooks:s.hooks.filter(i=>!xl(i))}:s).filter(s=>!Array.isArray(s.hooks)||s.hooks.length>0);return o.length?n[Yo]=o:delete n[Yo],t.hooks=n,await Z(e,t)?"removed":"error"}function $l(e,t){return je(lh,e,t)}var lh,Yo,dE,Mn=k(()=>{"use strict";it();de();lh="tkr-gemini-hook",Yo="BeforeTool",dE="run_shell_command"});import{existsSync as fE,readFileSync as pE}from"node:fs";function Hi(e,t){return R(e)&&Le(e.command,t)}function uh(e){return e.path??(e.nested?["hooks"]:[])}function dh(e,t){let n=e;for(let r of uh(t))R(n[r])||(n[r]={}),n=n[r];return n}function fh(e,t){let n=e;for(let o of uh(t))n=R(n)?n[o]:void 0;if(!R(n))return[];let r=n[t.event];return Array.isArray(r)?r:[]}function mE(e){return R(e)&&Array.isArray(e.hooks)?e.hooks:[]}function ph(e,t){return(t.matcher===void 0?e:e.flatMap(mE)).filter(r=>Hi(r,t.mark))}function mh(e,t){return ph(fh(e,t),t).length>0}function Xo(e,t){try{let n=oe(pE(e,"utf8"));return R(n)&&mh(n,t)}catch{return!1}}function hE(e,t,n){let r=dh(e,t),o=Array.isArray(r[t.event])?r[t.event]:[];r[t.event]=o;let s=ph(o,t)[0],i=t.entry(n);if(s){let a=It(o,l=>Hi(l,t.mark),s,t.matcher!==void 0),c=Object.entries(i).filter(([l,u])=>JSON.stringify(s[l])!==JSON.stringify(u));if(!c.length&&!a)return"present";for(let[l,u]of c)s[l]=u;return"updated"}return o.push(t.matcher===void 0?i:{matcher:t.matcher,hooks:[i]}),"added"}function gE(e,t){if(!mh(e,t))return!1;let n=dh(e,t),r=fh(e,t),o=t.matcher===void 0?r.filter(s=>!Hi(s,t.mark)):r.map(s=>R(s)&&Array.isArray(s.hooks)?{...s,hooks:s.hooks.filter(i=>!Hi(i,t.mark))}:s).filter(s=>!R(s)||!Array.isArray(s.hooks)||s.hooks.length>0);return o.length?n[t.event]=o:delete n[t.event],!0}async function Qo(e,t,n){let r=await K(e);if(!r||t.prepare&&!t.prepare(r))return"error";let o=hE(r,t,n);return o==="present"||await Z(e,r)?o:"error"}async function Fn(e,t){if(!fE(e))return"absent";let n=await K(e);return n?gE(n,t)?await Z(e,n)?"removed":"error":"absent":"error"}var Tl=k(()=>{"use strict";it();de()});var bh={};L(bh,{JSON_HOOK_AGENTS:()=>ce,agentHookCommand:()=>zi,copilotHooksFile:()=>Di,crushConfigFile:()=>kh,droidFiles:()=>Ht,droidHookTarget:()=>es,grokHooksFile:()=>wh,jsonHookAgent:()=>Pl,jsonHookAgentForSetup:()=>Ol,junieConfigFile:()=>yh,prepareZcode:()=>ji,qwenSettingsFile:()=>Fi,traeHooksFiles:()=>Mi,withVersion:()=>Ln,zcodeConfigFile:()=>Li});import{existsSync as Rl,readFileSync as kE}from"node:fs";import{join as ye}from"node:path";import yE from"node:os";function yt(){return yE.homedir()}function Ln(e){return e.version===void 0&&(e.version=1),e.version===1}function wE(e,t,n){return Promise.all(e.map(r=>Qo(r,t,n))).then(r=>r.includes("error")?"error":r.includes("updated")?"updated":r.includes("added")?"added":"present")}function bE(e,t){return Promise.all(e.map(n=>Fn(n,t))).then(n=>n.includes("error")?"error":n.includes("removed")?"removed":"absent")}function jn(e,t){return{...e,installed:()=>e.files().some(n=>Xo(n,t)),ensure:n=>wE(e.files(),t,n),remove:()=>bE(e.files(),t)}}function Di(){return ye(process.env.COPILOT_HOME||ye(yt(),".copilot"),"hooks","tokmizer.json")}function Mi(){let e=[ye(yt(),".trae","hooks.json")];return Rl(ye(yt(),".trae-cn"))&&e.push(ye(yt(),".trae-cn","hooks.json")),e}function Fi(){return ye(process.env.QWEN_HOME||ye(yt(),".qwen"),"settings.json")}function kh(){return ye(process.env.XDG_CONFIG_HOME||ye(yt(),".config"),"crush","crush.json")}function yh(){return ye(yt(),".junie","config.json")}function ji(e){return e.hooks===void 0&&(e.hooks={}),R(e.hooks)?(e.hooks.enabled===void 0&&(e.hooks.enabled=!0),e.hooks.events===void 0||R(e.hooks.events)):!1}function Li(){return ye(yt(),".zcode","cli","config.json")}function wh(){return ye(yt(),".grok","hooks","tokmizer.json")}function Al(){return ye(yt(),".factory")}function Ht(){return[{file:ye(Al(),"hooks.json"),spec:Cl},{file:ye(Al(),"hooks","hooks.json"),spec:Cl},{file:ye(Al(),"settings.json"),spec:RE}]}function hh(e){try{let t=JSON.parse(kE(e,"utf8"));return R(t)?t:null}catch{return null}}function gh(e,t){let n=t?e?.hooks:e;return R(n)&&Array.isArray(n.PreToolUse)&&n.PreToolUse.length>0}function es(){let[e,t,n]=Ht(),r=Rl(e.file)?e:Rl(t.file)?t:null;return r&&gh(hh(r.file),!1)?r:gh(hh(n.file),!0)?n:r??e}function Pl(e){return ce.find(t=>t.id===e)}function Ol(e){return ce.find(t=>t.setup===`tkr ${e}`)}function zi(e,t,n){return je(e.bin,t,n)}var xE,vE,_E,SE,EE,$E,TE,AE,Cl,RE,CE,ce,tn=k(()=>{"use strict";de();Tl();xE={mark:"tkr-copilot-hook",event:"PreToolUse",nested:!0,entry:e=>({type:"command",command:e,bash:e,powershell:e,timeout:10,timeoutSec:10}),prepare:Ln};vE={mark:"tkr-trae-hook",event:"PreToolUse",nested:!0,matcher:"RunCommand",entry:e=>({type:"command",command:e,timeout:30}),prepare:Ln};_E={mark:"tkr-qwen-hook",event:"PreToolUse",nested:!0,matcher:"run_shell_command",entry:e=>({name:"tokmizer",type:"command",command:e,timeout:10})};SE={mark:"tkr-crush-hook",event:"PreToolUse",nested:!0,entry:e=>({name:"tokmizer",matcher:"^bash$",command:e,timeout:10})};EE={mark:"tkr-junie-hook",event:"PreToolUse",nested:!0,matcher:"^Bash$",entry:e=>({type:"command",command:e,timeout:10})};$E={mark:"tkr-zcode-hook",event:"PreToolUse",nested:!0,path:["hooks","events"],matcher:"Bash",entry:e=>({type:"command",command:e,timeoutMs:1e4}),prepare:ji};TE={mark:"tkr-grok-hook",event:"PreToolUse",nested:!0,matcher:"Bash",entry:e=>({type:"command",command:e,timeout:10})};AE="tkr-droid-hook",Cl={mark:AE,event:"PreToolUse",nested:!1,matcher:"Execute",entry:e=>({type:"command",command:e,timeout:10})},RE={...Cl,nested:!0};CE={id:"droid",label:"Factory Droid",setup:"tkr setup-droid",bin:"tkr-droid-hook",restart:"Restart Droid, then check it with /hooks.",files:()=>[es().file],installed:()=>Ht().some(e=>Xo(e.file,e.spec)),ensure:async e=>{let t=es(),n=await Qo(t.file,t.spec,e);return n==="error"||await Promise.all(Ht().filter(r=>r.file!==t.file).map(r=>Fn(r.file,r.spec))),n},remove:async()=>{let e=await Promise.all(Ht().map(t=>Fn(t.file,t.spec)));return e.includes("error")?"error":e.includes("removed")?"removed":"absent"}},ce=[jn({id:"copilot",label:"GitHub Copilot",setup:"tkr setup-copilot",bin:"tkr-copilot-hook",restart:"Restart VS Code or Copilot CLI so they load the new hook.",files:()=>[Di()]},xE),CE,jn({id:"trae",label:"Trae",setup:"tkr setup-trae",bin:"tkr-trae-hook",restart:"Restart Trae so it loads the new hook.",files:Mi},vE),jn({id:"qwen-code",label:"Qwen Code",setup:"tkr setup-qwen",bin:"tkr-qwen-hook",restart:"Restart Qwen Code, then check it with /hooks.",files:()=>[Fi()]},_E),jn({id:"crush",label:"Crush",setup:"tkr setup-crush",bin:"tkr-crush-hook",restart:"Restart Crush so it loads the new hook.",files:()=>[kh()]},SE),jn({id:"junie",label:"Junie CLI",setup:"tkr setup-junie",bin:"tkr-junie-hook",restart:"Restart Junie CLI so it loads the new hook.",files:()=>[yh()]},EE),jn({id:"zcode",label:"ZCode",setup:"tkr setup-zcode",bin:"tkr-zcode-hook",restart:"Restart ZCode so it loads the new hook.",files:()=>[Li()]},$E),jn({id:"grok",label:"Grok Build",setup:"tkr setup-grok",bin:"tkr-grok-hook",restart:"Restart Grok Build (1.0.4 or newer) so it loads the new hook.",files:()=>[wh()]},TE)]});import{readFile as xh,unlink as PE}from"node:fs/promises";import{existsSync as vh,accessSync as OE,constants as IE,readFileSync as NE}from"node:fs";import{join as HE}from"node:path";function Ui(e,t,n=process.platform,r=process.execPath){if(n!=="win32")for(let o of e.split(":")){if(!o||o.includes("node_modules"))continue;let s=HE(o,"tkr");try{return OE(s,IE.X_OK),[s]}catch{}}return Kt(t,r)}function _h(e,t,n=kr()){return e.split(DE).join(JSON.stringify(t)).split(ME).join(JSON.stringify(n))}function Il(e){return e.includes(FE)}function Sh(e){try{return Il(NE(e,"utf8"))}catch{return!1}}async function Eh(e,t){try{let n="added";if(vh(e)){let r=await xh(e,"utf8");if(r===t)return"present";if(Il(r))n="updated";else if(!await vi(e,r))return"error"}return await Fe(e,t)?n:"error"}catch{return"error"}}async function $h(e){try{return!vh(e)||!Il(await xh(e,"utf8"))?"absent":(await PE(e),"removed")}catch{return"error"}}var DE,ME,FE,Nl=k(()=>{"use strict";de();ht();Pn();F();DE="__TKR_ARGV__",ME="__TKR_CONTEXT_FILE__",FE='"rewrite", "--host"'});var Ih={};L(Ih,{agentHookCommand:()=>Bi,antigravityHookInstalled:()=>zl,antigravityHooksFile:()=>qe,ensureAntigravityHook:()=>Ul,ensureVibeHook:()=>jl,removeAntigravityHook:()=>Bl,removeVibeHook:()=>Ll,vibeHookInstalled:()=>Fl,vibeHooksFile:()=>Mr});import{readFile as Ah,mkdir as jE}from"node:fs/promises";import{existsSync as Dl,readFileSync as Rh}from"node:fs";import{dirname as LE,join as Hl}from"node:path";import Ch from"node:os";function Bi(e,t,n){return`${je(zE,t,n)} ${e}`}function Mr(){return Hl(process.env.VIBE_HOME||Hl(Ch.homedir(),".vibe"),"hooks.toml")}function Th(e){return JSON.stringify(e)}function UE(e){return["[[hooks]]",`name = ${Th(Ph)}`,'type = "pre_tool"','match = "bash"',`command = ${Th(e)}`,"timeout = 10.0","strict = false",'description = "Route shell commands through tokmizer."',""].join(`
|
|
20
|
+
`)}function Ml(e){let t=[],n=[];for(let r of e.split(/(?<=\n)/))/^\s*\[\[?\s*[A-Za-z0-9_-]/.test(r)&&n.length&&(t.push(n.join("")),n=[]),n.push(r);return n.length&&t.push(n.join("")),t}function ns(e){return/^\s*\[\[hooks\]\]/.test(e)&&new RegExp(`^\\s*name\\s*=\\s*"${Ph}"\\s*$`,"m").test(e)}async function Oh(e,t){try{await jE(LE(e),{recursive:!0})}catch{return!1}return kt(e,t)}function Fl(){try{return Ml(Rh(Mr(),"utf8")).some(ns)}catch{return!1}}async function jl(e){let t=Mr(),n="";try{Dl(t)&&(n=await Ah(t,"utf8"))}catch{return"error"}let r=UE(e),o=Ml(n),s=o.filter(ns);if(s.length===1&&s[0].trimEnd()===r.trimEnd())return"present";let i=o.filter(c=>!ns(c)).join("").trimEnd(),a=i?`${i}
|
|
21
21
|
|
|
22
|
-
${r}`:r;return await
|
|
23
|
-
`:"";return await
|
|
24
|
-
`)}function
|
|
25
|
-
`)}function
|
|
26
|
-
${e?`set -gx PATH ${
|
|
27
|
-
`}function
|
|
22
|
+
${r}`:r;return await Oh(t,a)?s.length?"updated":"added":"error"}async function Ll(){let e=Mr();if(!Dl(e))return"absent";let t;try{t=await Ah(e,"utf8")}catch{return"error"}let n=Ml(t);if(!n.some(ns))return"absent";let r=n.filter(s=>!ns(s)).join("").trimEnd(),o=r?`${r}
|
|
23
|
+
`:"";return await Oh(e,o)?"removed":"error"}function qe(){return Hl(Ch.homedir(),".gemini","config","hooks.json")}function BE(e){return{enabled:!0,PreToolUse:[{matcher:"run_command",hooks:[{type:"command",command:e,timeout:10}]}]}}function zl(){try{let e=oe(Rh(qe(),"utf8"));return R(e)&&R(e[ts])}catch{return!1}}async function Ul(e){let t=qe(),n=await K(t);if(!n)return"error";let r=BE(e),o=n[ts];return o!==void 0&&JSON.stringify(o)===JSON.stringify(r)?"present":(n[ts]=r,await Z(t,n)?o===void 0?"added":"updated":"error")}async function Bl(){let e=qe();if(!Dl(e))return"absent";let t=await K(e);return t?ts in t?(delete t[ts],await Z(e,t)?"removed":"error"):"absent":"error"}var zE,Ph,ts,Fr=k(()=>{"use strict";it();de();Pn();zE="tkr-agent-hook",Ph="tokmizer-rewrite",ts="tokmizer-rewrite"});import{readFile as Gl,rmdir as JE,unlink as GE}from"node:fs/promises";import{existsSync as Kl,readdirSync as KE}from"node:fs";import{dirname as Nh,join as Ce}from"node:path";import ZE from"node:os";function Hh(e){return ze.find(t=>t.command===e)}function os(e){return ze.find(t=>t.host===e)}function Ji(e){return e.kind==="hook"?e.file():Nh(e.files()[0].target)}function wt(e){return e.kind==="hook"?e.installed():Sh(e.files()[0].target)}async function VE(e,t){try{return Kl(e)&&await Gl(e,"utf8")===t?"present":await Fe(e,t)?"updated":"error"}catch{return"error"}}async function Zl(e,t,n){let[r,...o]=e.files(),s;try{s=await Eh(r.target,_h(await Gl(Ce(t,r.template),"utf8"),n))}catch{return"error"}if(s==="error")return s;for(let i of o){let a;try{a=await VE(i.target,await Gl(Ce(t,i.template),"utf8"))}catch{return"error"}if(a==="error")return"error";a==="updated"&&s==="present"&&(s="updated")}return s}async function Vl(e){let[t,...n]=e.files(),r=await $h(t.target);if(r!=="removed")return r;try{for(let o of n)Kl(o.target)&&await GE(o.target);if(n.length){let o=Nh(t.target);Kl(o)&&KE(o).length===0&&await JE(o)}return"removed"}catch{return"error"}}var rs,Jl,ze,jr=k(()=>{"use strict";de();Nl();Fr();rs=()=>ZE.homedir(),Jl=()=>process.env.XDG_CONFIG_HOME||Ce(rs(),".config"),ze=[{host:"opencode",label:"OpenCode",command:"setup-opencode",kind:"shim",files:()=>[{template:"opencode.js",target:Ce(Jl(),"opencode","plugins","tokmizer.js")}],next:"Restart OpenCode so it loads the plugin."},{host:"kilo",label:"Kilo Code",command:"setup-kilo",kind:"shim",files:()=>[{template:"kilo.js",target:Ce(Jl(),"kilo","plugin","tokmizer.js")}],next:"Restart Kilo Code (CLI or VS Code extension) so it loads the plugin."},{host:"amp",label:"Amp",command:"setup-amp",kind:"shim",files:()=>[{template:"amp.js",target:Ce(Jl(),"amp","plugins","tokmizer.js")}],next:"Reload plugins in Amp (or restart it), then check it with: amp plugins list"},{host:"vibe",label:"Mistral Vibe",command:"setup-vibe",kind:"hook",file:Mr,installed:Fl,ensure:jl,remove:Ll,next:"Restart Vibe so it reads hooks.toml."},{host:"antigravity",label:"Antigravity",command:"setup-antigravity",kind:"hook",file:qe,installed:zl,ensure:Ul,remove:Bl,next:"Restart Antigravity, then check it with /hooks."},{host:"openclaw",label:"OpenClaw",command:"setup-openclaw",kind:"shim",files:()=>{let e=Ce(rs(),".openclaw","extensions","tokmizer");return["index.js","openclaw.plugin.json","package.json"].map(t=>({template:`openclaw/${t}`,target:Ce(e,t)}))},next:"Run: openclaw plugins enable tokmizer && openclaw gateway restart"},{host:"pi",label:"Pi",command:"setup-pi",kind:"shim",files:()=>[{template:"pi.js",target:Ce(process.env.PI_CODING_AGENT_DIR||Ce(rs(),".pi","agent"),"extensions","tokmizer.js")}],next:"Restart Pi (or run /reload) so it loads the extension."},{host:"omp",label:"Oh My Pi",command:"setup-omp",kind:"shim",files:()=>[{template:"omp.js",target:Ce(rs(),".omp","agent","extensions","tokmizer.js")}],next:"Restart omp so it loads the extension."},{host:"hermes",label:"Hermes",command:"setup-hermes",kind:"shim",files:()=>{let e=Ce(process.env.HERMES_HOME||Ce(rs(),".hermes"),"plugins","tokmizer");return["__init__.py","plugin.yaml"].map(t=>({template:`hermes/${t}`,target:Ce(e,t)}))},next:"Run: hermes plugins enable tokmizer, then restart Hermes (needs Hermes v2026.8.16 or newer)."}]});var ql={};L(ql,{brokenIntegrations:()=>Wl,integrationChecks:()=>Dh,missingTargets:()=>Mh});import{existsSync as WE,readFileSync as qE}from"node:fs";import{basename as YE}from"node:path";function Dh(){return[{id:"claude",label:"Claude Code",files:[On()]},{id:"codex",label:"Codex",files:[ie()]},{id:"cursor",label:"Cursor",files:[We()]},{id:"gemini",label:"Gemini CLI",files:[Re()]},...ce.map(e=>({id:e.id,label:e.label,files:e.files()})),...ze.map(e=>({id:e.host,label:e.label,files:[Ji(e)]}))]}function Mh(e){let t=new Set;for(let n of e.matchAll(/(['"])((?:\/|[A-Za-z]:(?:\\\\|\\|\/))[^'"\n]+)\1/g)){let r=n[2].replace(/\\\\/g,"\\");XE.test(YE(r.replace(/\\/g,"/")))&&!WE(r)&&t.add(r)}return[...t]}function Wl(e=Dh()){let t=[];for(let n of e){let r=[];for(let o of n.files)try{r.push(...Mh(qE(o,"utf8")))}catch{}r.length&&t.push({check:n,missing:[...new Set(r)]})}return t}var XE,Gi=k(()=>{"use strict";In();Ve();Hn();Mn();tn();jr();XE=/^(?:tkr|tkr-exec(?:\.exe)?|tkr-[a-z-]+\.js|tkr-[a-z]+-hook|tkr-hook|tkr-shim-launch)$/});function Ql(e){return Xl.filter(t=>Fh.has(t.host)===e).flatMap(t=>t.vars)}function Yl(e){return Fh.has(e)||(jh[e]?.installed()??!1)}function Lh(e){let t=jh[e];return t&&!t.installed()?t.setup:null}function Ki(e=process.env){let t=process.platform,n=t==="darwin"||t==="linux"||t==="win32"?t:"other",r=process.arch,o=e.TOKMIZER_HOST;if(o&&QE.includes(o)){let s=o;return{host:s,source:"env",os:n,arch:r,shimRecommended:!Yl(s)}}for(let s of Xl)if(s.vars.some(i=>e[i]))return{host:s.host,source:"env",os:n,arch:r,shimRecommended:!Yl(s.host)};return{host:"shell",source:"fallback",os:n,arch:r,shimRecommended:!0}}function zh(e){return Yl(e)?"native-hooks":"shell-shim"}var Xl,QE,Fh,jh,eu=k(()=>{"use strict";Hn();Mn();jr();tn();Xl=[{host:"claude-code",vars:["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE","CLAUDE_CODE_VERSION","ANTHROPIC_CLAUDE_CODE"]},{host:"codex",vars:["CODEX_VERSION","CODEX_CLI","OPENAI_CODEX","CODEX_THREAD_ID","CODEX_SESSION_ID"]},{host:"cursor",vars:["CURSOR_AGENT","CURSOR_VERSION","CURSOR_TRACE_ID"]},{host:"cline",vars:["CLINE_VERSION","CLINE_API_KEY"]},{host:"aider",vars:["AIDER_VERSION","AIDER_MODEL"]},{host:"qwen-code",vars:["QWEN_CODE"]},{host:"gemini-cli",vars:["GEMINI_CLI","GEMINI_CLI_VERSION","GEMINI_API_KEY"]},{host:"windsurf",vars:["WINDSURF_VERSION","WINDSURF_USER"]},{host:"copilot",vars:["GITHUB_COPILOT_VERSION","COPILOT_INTEGRATION_ID"]},{host:"opencode",vars:[]},{host:"amp",vars:[]},{host:"vibe",vars:[]},{host:"antigravity",vars:[]},{host:"openclaw",vars:[]},{host:"pi",vars:[]},{host:"omp",vars:[]},{host:"hermes",vars:[]},{host:"crush",vars:["CRUSH"]},{host:"droid",vars:[]},{host:"trae",vars:[]},{host:"junie",vars:[]},{host:"zcode",vars:[]},{host:"grok",vars:[]},{host:"kilo",vars:[]}],QE=[...Xl.map(e=>e.host),"shell"],Fh=new Set(["claude-code","codex"]),jh={cursor:{installed:Nt,setup:"tkr setup-cursor"},"gemini-cli":{installed:Dn,setup:"tkr setup-gemini"},...Object.fromEntries(ze.map(e=>[e.host,{installed:()=>wt(e),setup:`tkr ${e.command}`}])),...Object.fromEntries(ce.map(e=>[e.id,{installed:e.installed,setup:e.setup}]))}});import{mkdir as zn,writeFile as is,readFile as Ur,unlink as Zi,chmod as Jh,rename as e$,copyFile as Gh,stat as t$,readdir as n$,rm as r$}from"node:fs/promises";import{existsSync as Un,realpathSync as o$}from"node:fs";import{basename as s$,delimiter as Uh,join as ee,dirname as Lr}from"node:path";import{fileURLToPath as i$}from"node:url";import{execFileSync as a$}from"node:child_process";import fe from"node:os";function Bn(){try{let e=fe.platform()==="win32";return Un(ee(G(),e?"git.cmd":"git"))}catch{return!1}}function Bh(e){return`"${e.map(t=>`\${${t}:-}`).join("")}"`}function Zh(e){let t=e.match(/^#!\/bin\/sh\n_tk_f=(\d+)\n/);return t!==null&&Number(t[1])>=Kh&&e.includes(`exec /bin/sh ${re(Yt())} "$_tk_c" "$@"`)}function c$(e){return["#!/bin/sh",`_tk_f=${Kh}`,`_tk_c=${re(e)}`,`if [ -z ${Bh(Ql(!0))} ] && { [ -n ${Bh(["TOKMIZER_HOST",...Ql(!1)])} ] || [ -t 1 ]; } && [ -f ${re(Yt())} ] && ! ${Lo()}; then`,` exec /bin/sh ${re(Yt())} "$_tk_c" "$@"`,"fi",...hi(""),""].join(`
|
|
24
|
+
`)}function l$(e){let t=ae()?Ot(e):null,n=t?Zt():e;return{check:n,run:t?[`"${n}"`,...t].join(" "):`node "${n}"`}}function u$(e,t){let n=l$(e),r=G();return["@echo off",`if exist "${Vt()}" goto tkpass`,`if not exist "${n.check}" goto tkmissing`,`${n.run} --as "${t}" %*`,"exit /b %errorlevel%",":tkmissing",`echo ${mi.replace(/`/g,"")} 1>&2`,":tkpass",`set "PATH=%PATH:${r}\\;=%"`,`set "PATH=%PATH:${r};=%"`,`set "PATH=%PATH:;${r}=%"`,"for %%E in (.exe .cmd .bat .com) do for %%I in ("+t+'%%E) do if not "%%~$PATH:I"=="" if /i not "%%~dp$PATH:I"=="%~dp0" (',' "%%~$PATH:I" %*'," exit /b",")",`echo ${t}: command not found 1>&2`,"exit /b 9009",""].join(`\r
|
|
25
|
+
`)}function ou(e){return ee(G(),fe.platform()==="win32"?`${e}.cmd`:e)}function Vh(e,t){return fe.platform()==="win32"?u$(e,t):c$(t)}async function su(e,t,n){let r=`${e}.${process.pid}.tmp`;try{return await is(r,t,{mode:n}),await Jh(r,n),await e$(r,e),!0}catch{try{await Zi(r)}catch{}return!1}}function Wh(){return new Date().toISOString().replace(/[-:]/g,"").replace(/\..*$/,"").replace("T","-")}async function d$(e,t,n){try{let r=(await n$(e)).filter(o=>o.startsWith(t)).sort().slice(0,-n);for(let o of r)await r$(ee(e,o),{recursive:!0,force:!0})}catch{}}async function qh(e,t={}){let n=G();if(!Un(n))return{stale:0,rewritten:0};let r=0,o=0,s=null;for(let i of ru){let a=ou(i),c=Vh(e,i),l;try{l=await Ur(a,"utf8")}catch{continue}if(!(l===c||fe.platform()!=="win32"&&Zh(l))&&(r+=1,!t.dryRun)){try{s||(s=ee(y(),"backup",`shims-${Wh()}`),await zn(s,{recursive:!0,mode:448})),await Gh(a,ee(s,i))}catch{}await su(a,c,493)&&(o+=1)}}return s&&await d$(Lr(s),"shims-",3),{stale:r,rewritten:o}}async function Jn(e){let t=G();await zn(t,{recursive:!0,mode:448}),fe.platform()!=="win32"&&await Uo(Xt(e));let n=[];for(let r of ru)await su(ou(r),Vh(e,r),493)&&n.push(r);return n}async function iu(){let e=G();if(await Zc(),!Un(e))return 0;let t=0;for(let n of ru)try{await Zi(ou(n)),t+=1}catch{}return t}function Yh(e){return`'${e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function zr(e=!1){return`${as}
|
|
26
|
+
${e?`set -gx PATH ${Yh(G())} $PATH`:`export PATH=${re(G())}:"$PATH"`}
|
|
27
|
+
`}function f$(){return`${as}
|
|
28
28
|
$env:Path = '${G().replace(/'/g,"''")};' + $env:Path
|
|
29
|
-
`}function
|
|
30
|
-
`),r=[],o=0;for(let s=0;s<n.length;s+=1){let i=n[s].replace(/\r$/,""),a=n[s+1]?.replace(/\r$/,"");if(i===
|
|
31
|
-
`):e,removed:o}}function
|
|
32
|
-
`,{mode:384})}catch{}return t}async function
|
|
29
|
+
`}function p$(){let e=G();return[`export PATH=${re(e)}:"$PATH"`,`export PATH="${e}:$PATH"`,`set -gx PATH ${Yh(e)} $PATH`,`$env:Path = '${e.replace(/'/g,"''")};' + $env:Path`,`$env:Path = "${e};" + $env:Path`]}function tu(){return ee(y(),"global-path")}function cs(){return Un(tu())}function nu(){return ee(y(),"backup","global-path.json")}function Xh(e){let t=p$(),n=e.split(`
|
|
30
|
+
`),r=[],o=0;for(let s=0;s<n.length;s+=1){let i=n[s].replace(/\r$/,""),a=n[s+1]?.replace(/\r$/,"");if(i===as&&a!==void 0&&t.includes(a)){r.length&&r[r.length-1].replace(/\r$/,"")===""&&r.pop(),o+=1,s+=1;continue}r.push(n[s])}return{content:o?r.join(`
|
|
31
|
+
`):e,removed:o}}function Qh(){let e=fe.homedir(),t=[".zshrc",".zprofile",".bashrc",".bash_profile",".bash_login",".profile",ee(".config","fish","config.fish")].map(n=>ee(e,n));return fe.platform()!=="win32"?t:[...t,ee(e,"Documents","PowerShell","profile.ps1"),ee(e,"Documents","WindowsPowerShell","profile.ps1"),ee(e,"OneDrive","Documents","PowerShell","profile.ps1"),ee(e,"OneDrive","Documents","WindowsPowerShell","profile.ps1")]}async function eg(){let e=0;for(let t of Qh())try{e+=Xh(await Ur(t,"utf8")).removed}catch{}return e}async function au(){try{let e=JSON.parse(await Ur(nu(),"utf8"));return Array.isArray(e)?e.filter(t=>t!=null&&typeof t=="object"&&typeof t.file=="string"):[]}catch{return[]}}async function tg(){return(await au()).map(({file:e,backup:t,at:n})=>({file:e,backup:t,at:n}))}async function cu(e={}){if(!e.force&&cs())return[];let t=[],n=await au();for(let r of Qh()){let o,s;try{o=o$(r),s=await Ur(o,"utf8")}catch{continue}let i=Xh(s);if(!i.removed)continue;let a=ee(y(),"backup","rc"),c=ee(a,`${s$(r)}-${Wh()}`);try{let l=await t$(o);if(typeof process.getuid=="function"&&l.uid!==process.getuid())continue;if(await zn(a,{recursive:!0,mode:448}),await Gh(o,c),await Jh(c,384),!await su(o,i.content,l.mode&511)){await Zi(c).catch(()=>{});continue}}catch{continue}t.push(r),n.push({file:r,backup:c,fish:r.endsWith("config.fish"),at:new Date().toISOString()})}if(t.length)try{await zn(Lr(nu()),{recursive:!0,mode:448}),await is(nu(),`${JSON.stringify(n,null,2)}
|
|
32
|
+
`,{mode:384})}catch{}return t}async function ss(e,t=!1){try{await zn(Lr(e),{recursive:!0});let n=Un(e)?await Ur(e,"utf8"):"";return n.includes(as)?"present":(await is(e,`${n.replace(/\n*$/,`
|
|
33
33
|
`)}
|
|
34
|
-
${
|
|
34
|
+
${zr(t)}`,{mode:384}),"added")}catch{return"missing"}}async function ls(e){if(!e){try{await Zi(tu())}catch{}return{files:await cu({force:!0}),manual:null}}await zn(y(),{recursive:!0,mode:448}),await is(tu(),String(Date.now()),{mode:384});let t=[];for(let r of await au())t.includes(r.file)||fe.platform()==="win32"||await ss(r.file,r.fish)==="added"&&t.push(r.file);if(t.length)return{files:t,manual:null};let n=await h$();return{files:n.status==="added"?[n.target]:[],manual:n.status==="missing"?n.manual:null}}function m$(){let e=fe.platform()==="win32"?a$("powershell.exe",["-NoProfile","-NonInteractive","-Command","[Environment]::GetFolderPath('MyDocuments')"],{encoding:"utf8",windowsHide:!0}).trim():ee(fe.homedir(),"Documents");return ee(e||ee(fe.homedir(),"Documents"),"PowerShell","profile.ps1")}async function h$(){if(fe.platform()==="win32"){let s=ee(fe.homedir(),"Documents","PowerShell","profile.ps1"),i=f$();try{s=m$();let a=!1;for(let c of[s,ee(Lr(Lr(s)),"WindowsPowerShell","profile.ps1")]){await zn(Lr(c),{recursive:!0});let l=Un(c)?await Ur(c,"utf8"):"";l.includes(as)||(await is(c,`${l.replace(/\n*$/,`
|
|
35
35
|
`)}
|
|
36
|
-
${i}`),a=!0)}return{status:a?"added":"present",target:s,manual:i}}catch{return{status:"missing",target:s,manual:i}}}let e=process.env.SHELL??"",t=e.endsWith("/fish"),n=t?".config/fish/config.fish":e.endsWith("/zsh")?".zshrc":e.endsWith("/bash")?".bashrc":".profile",r=ee(fe.homedir(),n),o=await
|
|
37
|
-
`,
|
|
38
|
-
`)}catch{}}function
|
|
39
|
-
`).filter(a=>a.trim()!==""),o=[],s=0;for(let a=r.length-1;a>=0;a-=1){let c=r[a],l=Buffer.byteLength(c)+1;if(s+l>n)break;o.push(c),s+=l}o.reverse();let i=`${e}.tmp-${process.pid}`;
|
|
36
|
+
${i}`),a=!0)}return{status:a?"added":"present",target:s,manual:i}}catch{return{status:"missing",target:s,manual:i}}}let e=process.env.SHELL??"",t=e.endsWith("/fish"),n=t?".config/fish/config.fish":e.endsWith("/zsh")?".zshrc":e.endsWith("/bash")?".bashrc":".profile",r=ee(fe.homedir(),n),o=await ss(r,t);if(e.endsWith("/bash")&&o!=="missing"){let s=[".bash_profile",".bash_login",".profile"].map(a=>ee(fe.homedir(),a)).find(Un)??ee(fe.homedir(),".bash_profile"),i=await ss(s);if(i==="missing")return{status:"missing",target:s,manual:zr()};if(i==="added")return{status:"added",target:s,manual:zr()}}return{status:o,target:r,manual:zr(t)}}function ng(e=process.env){let t=fe.platform()==="win32"&&e.Path!==void 0?"Path":"PATH",n=G(),r=(e[t]??"").split(Uh).filter(o=>o&&o!==n);return{...e,[t]:[n,...r].join(Uh),TOKMIZER_HOST:e.TOKMIZER_HOST||"shell"}}function we(){return process.env.TOKMIZER_SHIM_JS?process.env.TOKMIZER_SHIM_JS:i$(new URL("../bin/tkr-shim.js",import.meta.url))}var ru,Kh,as,Br=k(()=>{"use strict";jo();ht();F();eu();qt();Or();qt();ru=["git","npm","yarn","pnpm","docker","kubectl","terraform","tofu","cargo","go","mvn","gradle","rg","grep","find","ls","cat","tail","head","ps","lsof","ssh","scp","rsync","curl","wget","jq","yq","make"];Kh=1;as="# tokmizer-shim PATH (managed by tokmizer)"});var Jr,Wi=k(()=>{"use strict";fr();Jr=x.object({slug:x.string().min(1).max(64),description:x.string().max(255).optional(),match_command:x.string().min(1),priority:x.number().int().default(50),strip_ansi:x.boolean().default(!1),strip_lines_matching:x.array(x.string()).default([]),drop_lines_matching:x.array(x.string()).default([]),keep_failures:x.boolean().default(!1),strip_on_failure:x.boolean().default(!1),fold_passing:x.boolean().default(!1),fold_passing_threshold:x.number().int().positive().max(1e3).optional(),mask_abs_paths:x.boolean().default(!1),preserve_exact:x.boolean().default(!1),truncate_lines_at:x.number().int().positive().max(1e4).optional(),max_lines:x.number().int().positive().max(1e5).optional(),scale_with_level:x.boolean().default(!0),transform:x.string().max(64).optional(),transform_on_failure:x.boolean().default(!1),on_empty:x.string().max(255).optional()})});function uu(e){return JSON.stringify(e)+qi}function*mg(e){let t=0;for(;;){let n=e.indexOf(qi,t);if(n<0)return;yield e.slice(t,n),t=n+1}}function us(){return`${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}var w$,b$,x$,v$,vL,_L,SL,pg,qi,EL,hg=k(()=>{"use strict";fr();Wi();w$=x.object({id:x.string().min(1).max(64),op:x.literal("filter"),cmd:x.string().min(1).max(2048),plan:x.enum(["trial","smart","pro"]),allowed:x.array(x.string().min(1).max(64)).max(512).optional(),installId:x.string().min(1).max(64).optional()}),b$=x.object({id:x.string().min(1).max(64),op:x.literal("ping")}),x$=x.object({id:x.string().min(1).max(64),op:x.literal("shutdown"),installId:x.string().min(1).max(64)}),v$=x.object({id:x.string().min(1).max(64),op:x.literal("reload"),installId:x.string().min(1).max(64).optional()}),vL=x.discriminatedUnion("op",[w$,b$,x$,v$]),_L=x.object({id:x.string(),ok:x.literal(!0),data:x.unknown()}),SL=x.object({id:x.string(),ok:x.literal(!1),err:x.string(),retryAfterMs:x.number().int().nonnegative().optional()}),pg=x.object({filter:Jr.nullable(),cacheHit:x.boolean().optional()}),qi=`
|
|
37
|
+
`,EL=64*1024});var yg={};L(yg,{IDLE_TIMEOUT_MS:()=>I$,PARENT_WATCH_INTERVAL_MS:()=>O$,cleanupStaleSocket:()=>Yi,isParentAlive:()=>N$,socketPath:()=>Gr});import _$ from"node:os";import{join as ds}from"node:path";import{existsSync as S$,statSync as E$,lstatSync as gg,unlinkSync as $$,mkdirSync as T$,chmodSync as A$}from"node:fs";import{createHash as R$}from"node:crypto";function C$(e){let t=R$("sha256").update(y()).digest("hex").slice(0,8),n=ds(_$.tmpdir(),`tkr-${e}-${t}`),r=ds(n,"d.sock");if(Buffer.byteLength(r)>du)throw new Error("Temporary directory path is too long for IPC");return kg(n,e),r}function P$(e,t){try{let n=gg(e);return n.isDirectory()&&n.uid===t&&(n.mode&63)===0}catch{return!1}}function kg(e,t){T$(e,{recursive:!0,mode:448});let n=gg(e);if(!n.isDirectory()||n.uid!==t)throw new Error("Unsafe IPC directory");A$(e,448)}function Gr(){if(process.platform==="win32")return{path:`\\\\.\\pipe\\tokmizer-${process.env.USERNAME??"tokmizer"}`,isPipe:!0};let e=typeof process.getuid=="function"?process.getuid():0,t=process.env.XDG_RUNTIME_DIR;if(t&&P$(t,e)){let o=ds(t,`tokmizer-${e}.sock`);if(Buffer.byteLength(o)<=du)return{path:o,isPipe:!1}}let n=ds(y(),"run"),r=ds(n,"daemon.sock");return Buffer.byteLength(r)>du?{path:C$(e),isPipe:!1}:(kg(n,e),{path:r,isPipe:!1})}async function Yi(){let{path:e,isPipe:t}=Gr();if(t||!S$(e))return;try{if(!E$(e).isSocket())return}catch{return}let n=await import("node:net");if(!await new Promise(o=>{let s=n.createConnection(e),i=a=>{s.removeAllListeners();try{s.destroy()}catch{}o(a)};s.once("connect",()=>i(!0)),s.once("error",a=>{let c=a.code;i(c!=="ECONNREFUSED"&&c!=="ENOENT")}),setTimeout(()=>i(!0),250)}))try{$$(e)}catch{}}function N$(){let e=process.ppid;if(!e||e===1)return!1;try{return process.kill(e,0),!0}catch{return!1}}var du,O$,I$,fu=k(()=>{"use strict";F();du=100;O$=3e4,I$=5*6e4});var Kr={};L(Kr,{connectDaemon:()=>Sg,shutdownDaemon:()=>_g});import{createConnection as H$}from"node:net";import{spawn as D$}from"node:child_process";import{existsSync as xg,openSync as pu,closeSync as wg,unlinkSync as hu,writeFileSync as gu,mkdirSync as ku,readFileSync as M$,appendFileSync as F$,rmSync as j$,statSync as L$}from"node:fs";import{dirname as z$,join as yu}from"node:path";import{fileURLToPath as U$}from"node:url";function wu(){return yu(y(),"daemon.spawn.fail")}function bu(){return yu(y(),"daemon.log")}function K$(){try{let e=Number(M$(wu(),"utf8"));return Number.isFinite(e)&&Date.now()-e<J$}catch{return!1}}function Z$(e){try{ku(y(),{recursive:!0});let t=bu();try{L$(t).size>G$&&hu(t)}catch{}F$(t,`${new Date().toISOString()} ${e}
|
|
38
|
+
`)}catch{}}function V$(e){try{ku(y(),{recursive:!0}),gu(wu(),String(Date.now()))}catch{}Z$(`spawn failed: ${e.message}`)}function W$(){try{j$(wu(),{force:!0})}catch{}}async function Xi(e,t){return new Promise((n,r)=>{let o=H$(e),s=a=>{if(o.removeAllListeners("connect"),o.removeAllListeners("error"),clearTimeout(i),a){try{o.destroy()}catch{}r(a)}else n(o)},i=setTimeout(()=>s(new Error("connect timeout")),t);o.once("connect",()=>s(null)),o.once("error",a=>s(a))})}function q$(){return process.env.TOKMIZER_DAEMON_BIN?process.env.TOKMIZER_DAEMON_BIN:U$(new URL("../bin/tkr-daemon.js",import.meta.url))}async function mu(e,t=3e3){let n=Math.ceil(t/75),r=process.platform==="win32";for(let o=0;o<n;o++){if(r)try{return(await Xi(e,75)).destroy(),!0}catch{}else if(xg(e))return!0;await new Promise(s=>setTimeout(s,75))}return!1}async function Y$(e){let t=q$();if(!ae()&&!xg(t))throw new Error(`tkr-daemon binary not found at ${t}`);let{path:n}=Gr(),r=process.platform==="win32"?y():z$(n);try{ku(r,{recursive:!0})}catch{}let o=yu(r,"daemon.spawn.lock"),s=null;try{s=pu(o,"wx"),gu(s,String(process.pid))}catch(i){if(i.code==="EEXIST"){if(await mu(n,5e3))return;try{hu(o)}catch{}try{s=pu(o,"wx"),gu(s,String(process.pid))}catch(c){if(c.code==="EEXIST"){await mu(n,5e3);return}throw c}}else throw i}try{let i=null;try{i=pu(bu(),"a")}catch{}let[a,...c]=Kt(t);if(D$(a,c,{detached:!0,stdio:["ignore","ignore",i??"ignore"],env:{...process.env,TOKMIZER_DAEMON_INSTALL_ID:e}}).unref(),i!==null)try{wg(i)}catch{}if(!await mu(n,3e3))throw new Error("tkr-daemon failed to bind socket within 3s")}finally{if(s!==null){try{wg(s)}catch{}try{hu(o)}catch{}}}}async function _g(e={}){let{path:t}=e.socketPath?{path:e.socketPath}:Gr(),n=await Qs();try{let r=await Xi(t,vg);r.write(uu({id:us(),op:"shutdown",installId:n})),await new Promise(o=>setTimeout(o,150));try{r.destroy()}catch{}return!0}catch{return!1}}async function X$(e,t){let n=Date.now()+t;for(;Date.now()<n;){try{(await Xi(e,250)).destroy()}catch{return!0}await new Promise(r=>setTimeout(r,100))}return!1}async function Sg(e={}){let{path:t}=e.socketPath?{path:e.socketPath}:Gr(),n=await Qs(),r=null,o=0,s=!1;for(;o<=bg;)try{r=await Xi(t,vg),W$();break}catch{if(o+=1,o>bg)throw new Error(`tkr-daemon unreachable at ${t}`);if(K$())throw new Error(`tkr-daemon spawn on cooldown (see ${bu()})`);await Yi();try{await Y$(n),s=!0}catch(u){throw V$(u),u}}if(!r)throw new Error("tkr-daemon: socket setup failed");let i=new Map,a="";r.setEncoding("utf8"),r.on("data",u=>{a+=u;let d=-1;for(let f=0;f<a.length;f++)a[f]===qi&&(d=f);if(d<0)return;let p=[];for(let f of mg(a.slice(0,d+1)))p.push(f);a=a.slice(d+1);for(let f of p)if(f)try{let h=JSON.parse(f),g=i.get(h.id);if(!g)continue;clearTimeout(g.timer),i.delete(h.id),g.resolve(h)}catch{}}),r.on("close",()=>{for(let u of i.values())clearTimeout(u.timer),u.reject(new Error("daemon socket closed"));i.clear()}),r.on("error",()=>{});function c(u){return new Promise((d,p)=>{if(r.destroyed||!r.writable){p(new Error("daemon socket closed"));return}let f=setTimeout(()=>{i.delete(u.id),p(new Error(`daemon request timeout (${u.op})`))},B$);i.set(u.id,{resolve:d,reject:p,timer:f}),r.write(uu(u))})}let l={filter:async(u,d,p)=>{let f=await c({id:us(),op:"filter",cmd:u.slice(0,2048),plan:d,...p&&p.length>0?{allowed:p.slice(0,512)}:{},installId:n});if(!f.ok)return null;let h=pg.safeParse(f.data);return h.success?h.data.filter:null},ping:async()=>{let u=await c({id:us(),op:"ping"});if(!u.ok)throw new Error(u.err);return u.data},reload:async()=>{let u=await c({id:us(),op:"reload",installId:n});if(!u.ok)throw new Error(u.err);return u.data},close:()=>{try{r.destroy()}catch{}}};if(!e.skipVersionCheck&&!s){let u=!1;try{let d=await l.ping();if(d.version&&Tt(ue,d.version))throw new Error(`newer daemon ${d.version} already running`);u=d.version!==ue}catch(d){throw l.close(),d}if(u){try{await _g(e.socketPath?{socketPath:e.socketPath}:{})}catch{}l.close();let d=await X$(t,2e3);if(await Yi(),!d)throw new Error("stale daemon still running after shutdown request");return Sg({...e,skipVersionCheck:!0})}}return l}var vg,B$,bg,J$,G$,Zr=k(()=>{"use strict";hg();fu();F();ht();Sn();En();vg=500,B$=3e3,bg=1,J$=6e4,G$=256*1024});import{readFileSync as Q$,renameSync as eT,statSync as tT,writeFileSync as nT}from"node:fs";function Qi(e,t,n){try{if(tT(e).size<=t)return;let r=Q$(e,"utf8").split(`
|
|
39
|
+
`).filter(a=>a.trim()!==""),o=[],s=0;for(let a=r.length-1;a>=0;a-=1){let c=r[a],l=Buffer.byteLength(c)+1;if(s+l>n)break;o.push(c),s+=l}o.reverse();let i=`${e}.tmp-${process.pid}`;nT(i,o.length?`${o.join(`
|
|
40
40
|
`)}
|
|
41
|
-
`:"",{mode:384}),
|
|
42
|
-
`,{mode:384}),
|
|
43
|
-
`).map(u=>/^([0-9a-f]{64}) {2}(\S+)$/.exec(u.trim())).find(u=>u?.[2]===`${o}.tar.gz`)?.[1];if(!a)return s(`no build for ${e.key}`);let c=await
|
|
44
|
-
`)}var
|
|
41
|
+
`:"",{mode:384}),eT(i,e)}catch{}}var xu=k(()=>{"use strict"});var $g={};L($g,{CODEX_HOOK_NOTICE:()=>Eg,codexHookNoticeLine:()=>cT,queueCodexHookNotice:()=>_u});import{existsSync as rT,mkdirSync as oT,rmSync as sT,writeFileSync as iT}from"node:fs";import{join as aT}from"node:path";function vu(){return aT(y(),"codex-hook-notice")}function _u(){try{oT(y(),{recursive:!0,mode:448}),iT(vu(),String(Date.now()),{mode:384})}catch{}}function cT(){if(!rT(vu()))return null;try{sT(vu())}catch{return null}return Eg}var Eg,Su=k(()=>{"use strict";F();Eg="An automatic Tokmizer update added its hook to Codex (hooks.json) so Codex commands are optimized too. To remove it: tkr setup-codex --remove"});var na={};L(na,{autoUpdateEnabled:()=>Ru,claimSelfUpdateSlot:()=>Ng,defaultDeps:()=>OT,maybeSpawnSelfUpdate:()=>NT,selfUpdate:()=>ET,setAutoUpdate:()=>_T});import{spawn as Ig}from"node:child_process";import{createHash as lT}from"node:crypto";import{accessSync as uT,constants as dT,existsSync as Vr,mkdirSync as Au,mkdtempSync as fT,readdirSync as pT,readFileSync as ta,realpathSync as Eu,renameSync as Tg,rmSync as fs,symlinkSync as mT,writeFileSync as ps,appendFileSync as hT}from"node:fs";import{fileURLToPath as gT}from"node:url";import{basename as kT,dirname as ea,join as q}from"node:path";import yT from"node:os";function vT(e,t){try{let n=JSON.parse(ta(Pg(),"utf8"));if(n.version===e&&typeof n.at=="number")return t-n.at>=bT}catch{}try{Au(y(),{recursive:!0,mode:448}),ps(Pg(),JSON.stringify({version:e,at:t}),{mode:384})}catch{}return!1}function Ru(){return process.env.TOKMIZER_AUTO_UPDATE==="0"?!1:!Vr(Tu())}function _T(e){if(e){fs(Tu(),{force:!0});return}Au(y(),{recursive:!0,mode:448}),ps(Tu(),String(Date.now()))}function Ng(e=Date.now()){try{let t=Number(ta(Rg(),"utf8"));if(Number.isFinite(t)&&e-t<wT)return!1}catch{}try{Au(y(),{recursive:!0,mode:448}),ps(Rg(),String(e))}catch{return!1}return!0}function ST(e){try{let t=q(y(),"self-update.log");hT(t,`${new Date().toISOString()} ${e}
|
|
42
|
+
`,{mode:384}),Qi(t,Ag,Ag/2)}catch{}}async function ET(e){if(!Ru())return["disabled"];if(!B())return["network off"];let t=e.latest;if(!t||!$u.test(t))return["no-version"];let n=vT(t,(e.now??Date.now)()),r=[],o=[],s=u=>{o.push(u),r.includes(`waiting: ${t} is less than 24h old`)||r.push(`waiting: ${t} is less than 24h old`)},i=(await e.run("npm",["root","-g"]).catch(()=>({code:1,stdout:""}))).stdout.trim(),a=i?e.npmVersion(i):void 0;if(a)if(!Tt(a,t))o.push(a);else if(!n)s(a);else if(!e.writable(i))r.push("npm needs permission");else{let u=await e.run("npm",["i","-g",`@tokmizer/plugin@${t}`,"--no-audit","--no-fund"]).catch(()=>({code:1,stdout:""})),d=e.npmVersion(i);u.code===0&&d===t?(r.push(`npm ${a} -> ${t}`),o.push(t)):r.push(`npm failed (${a})`)}let c=e.standalone?$T(e.standalone.root):void 0;if(e.standalone&&c)if(!Tt(c,t))o.push(c);else if(!n)s(c);else{let u=await AT(e.standalone,c,t,e.run).catch(()=>`standalone failed (${c})`);r.push(u),u.includes("->")&&o.push(t)}if(process.platform!=="win32"){let u=await e.run("brew",["list","--versions","tokmizer"]).catch(()=>({code:1,stdout:""})),d=u.code===0?u.stdout.trim().split(/\s+/)[1]:void 0;if(d&&$u.test(d))if(!Tt(d,t))o.push(d);else if(!n)s(d);else{let p=await e.run("brew",["upgrade","tokmizer"],{...process.env,HOMEBREW_NO_INSTALL_CLEANUP:"1"}).catch(()=>({code:1,stdout:""}));p.code===0?(r.push(`brew ${d} -> ${t}`),o.push(t)):/untrusted tap/i.test(p.stderr??"")?r.push("brew tap not trusted: run brew trust norwelltw/tokmizer"):r.push(`brew failed (${d})`)}}if(r.some(u=>u.includes("->"))&&await e.run("tkr",["shims-refresh"]).catch(()=>({code:1,stdout:""})),o.some(u=>!Tt(u,xT))&&e.codexInstalled()&&!Vr(Cg())){let u=await e.ensureCodexHook(i).catch(()=>"error");if(u!=="error"){try{ps(Cg(),String(Date.now()))}catch{}(u==="added"||u==="updated")&&_u(),r.push(`codex hook ${u}`)}}for(let u of r)ST(u);return r}function $T(e){try{let t=JSON.parse(ta(q(e,"current","package.json"),"utf8")).version;return typeof t=="string"&&$u.test(t)?t:void 0}catch{return}}async function Og(e,t){let n=await e.fetch(t);if(!n.ok)throw new Error(`HTTP ${n.status}`);return Buffer.from(await n.arrayBuffer())}function TT(e,t,n){let r=new RegExp(`^tokmizer-\\d+\\.\\d+\\.\\d+-${t}$`);for(let o of pT(e))r.test(o)&&!n.includes(o)&&fs(q(e,o),{recursive:!0,force:!0})}async function AT(e,t,n,r){let o=`tokmizer-${n}-${e.key}`,s=u=>`standalone failed (${t}): ${u}`,a=(await Og(e,`${e.base(n)}/SHA256SUMS`)).toString("utf8").split(`
|
|
43
|
+
`).map(u=>/^([0-9a-f]{64}) {2}(\S+)$/.exec(u.trim())).find(u=>u?.[2]===`${o}.tar.gz`)?.[1];if(!a)return s(`no build for ${e.key}`);let c=await Og(e,`${e.base(n)}/${o}.tar.gz`);if(lT("sha256").update(c).digest("hex")!==a)return s("checksum mismatch");let l=fT(q(e.root,".update-"));try{ps(q(l,"release.tar.gz"),c);let u=await r("tar",["-xzf",q(l,"release.tar.gz"),"-C",l]),d=q(l,o,"dist","bin","tkr");if(u.code!==0||!Vr(d))return s("archive");let p=await r(d,["--single-check"]);if(p.code!==0||p.stdout.trim()!==`tokmizer-single ${n}`)return s("probe");let f=kT(Eu(q(e.root,"current"))),h=q(e.root,o);fs(h,{recursive:!0,force:!0}),Tg(q(l,o),h);let g=q(e.root,`.current-${process.pid}`);return fs(g,{force:!0}),mT(o,g),Tg(g,q(e.root,"current")),TT(e.root,e.key,[o,f]),`standalone ${t} -> ${n}`}finally{fs(l,{recursive:!0,force:!0})}}function RT(){if(!(!ae()||process.platform==="win32"))try{let e=ea(ea(ea(Eu(process.execPath)))),t=ea(e);return Eu(q(t,"current"))===e?t:void 0}catch{return}}function CT(){let e=RT(),t=process.arch==="arm64"?"arm64":process.arch==="x64"?"x64":"";if(!(!e||!t||process.platform!=="darwin"&&process.platform!=="linux"))return{root:e,key:`${process.platform}-${t}`,base:n=>`https://github.com/norwelltw/Tokmizer/releases/download/v${n}`,fetch:n=>fetch(n,{redirect:"follow",signal:AbortSignal.timeout(5*6e4)})}}function PT(e,t,n){return new Promise(r=>{let o=Ig(e,t,{env:n??process.env,shell:process.platform==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),s="",i="";o.stdout?.on("data",c=>{s+=c.toString("utf8")}),o.stderr?.on("data",c=>{i.length<8192&&(i+=c.toString("utf8"))});let a=setTimeout(()=>o.kill("SIGTERM"),10*6e4);o.on("error",()=>{clearTimeout(a),r({code:127,stdout:""})}),o.on("close",c=>{clearTimeout(a),r({code:c??1,stdout:s,stderr:i})})})}function OT(e){return{latest:e,run:PT,standalone:CT(),npmVersion:t=>{try{let n=JSON.parse(ta(q(t,"@tokmizer","plugin","package.json"),"utf8")).version;return typeof n=="string"?n:void 0}catch{return}},writable:t=>{try{return uT(t,dT.W_OK),!0}catch{return!1}},codexInstalled:()=>Vr(process.env.CODEX_HOME||q(yT.homedir(),".codex")),ensureCodexHook:async t=>{let{ensureCodexHook:n,codexHookCommand:r}=await Promise.resolve().then(()=>(Ve(),en)),{codexPluginProvidesHook:o}=await Promise.resolve().then(()=>(Oi(),fl));if(o())return"present";let s=q(t,"@tokmizer","plugin","dist","bin","tkr-codex-hook.js"),i=r(process.env.PATH??"",s);return i.startsWith("node ")&&!Vr(s)?"error":n(i)}}}function IT(){let e=gT(new URL(".",import.meta.url));for(let t of[q(e),q(e,"..")])if(Vr(q(t,"bin","tkr.js")))return t;return null}function NT(){try{if(!Ru()||!B())return;let e=ae()?"":IT();if(e===null||!Ng())return;let[t,...n]=Kt(q(e,"bin","tkr.js")),r=Ig(t,[...n,"self-update"],{detached:!0,stdio:"ignore",windowsHide:!0,env:{...process.env,TOKMIZER_SELF_UPDATE_CHILD:"1"}});r.on("error",()=>{}),r.unref()}catch{}}var $u,wT,bT,xT,Ag,Tu,Rg,Cg,Pg,ra=k(()=>{"use strict";F();En();xu();ht();At();Su();$u=/^\d+\.\d+\.\d+$/,wT=6*36e5,bT=24*36e5,xT="0.9.34",Ag=64*1024,Tu=()=>q(y(),"auto-update-off"),Rg=()=>q(y(),"self-update-last"),Cg=()=>q(y(),"codex-hook-offered"),Pg=()=>q(y(),"self-update-seen")});import{readFileSync as HT}from"node:fs";import{join as DT}from"node:path";function oa(){try{let e=JSON.parse(HT(DT(y(),"settings-cache.json"),"utf8"));return e.enabled!==!1&&typeof e.reducer=="string"&&e.reducer!=="off"}catch{return!1}}var Cu=k(()=>{"use strict";F();qt()});function MT(){let e=Number(process.env.TOKMIZER_OFFLINE_GRACE_MS);return Number.isFinite(e)&&e>0?e:6048e5}function Hg(e,t=Date.now()){let n=e.lastHeartbeatOkAt;if(typeof n=="number"&&t-n>MT())return!0;if(e.subEndsAt){let r=Date.parse(e.subEndsAt);if(Number.isFinite(r)&&t>r)return!0}return!1}function Wr(e,t=Date.now()){return e.plan}function qr(e,t=Date.now()){return e.bonusActive??!1}var sa=k(()=>{"use strict"});function ia(e,t=!1){return!0}function Dg(e,t=!1){return!0}var aa=k(()=>{"use strict"});var Mg={};L(Mg,{reducerStillEntitled:()=>FT});async function FT(){let e=await z();return e?Dg(Wr(e),qr(e)):!1}var Fg=k(()=>{"use strict";pt();sa();aa()});var Lg={};L(Lg,{powerCommandBody:()=>Ou,reducerContext:()=>Pu,reducerReminder:()=>jg});function jg(e){return`TKR REDUCER ACTIVE (${e}). Compact response style stays on this turn. Code/commits/errors/security: write normal.`}async function Pu(e){if(!oa())return null;let{loadSettingsCache:t}=await Promise.resolve().then(()=>(Pt(),cm)),{readSkill:n}=await Promise.resolve().then(()=>(ai(),Fp)),{reducerStillEntitled:r}=await Promise.resolve().then(()=>(Fg(),Mg)),o=await t();if(!o.enabled||o.reducer==="off"||!await r())return null;let s=await n(`reducer-${o.reducer}`);return s?{level:o.reducer,text:e==="session"?s:jg(o.reducer)}:null}function Ou(e){let t=e?[`Request: ${e}`,"","If the request above is empty, use the most recent request in the conversation."]:["The request is the text the user typed with this command. If there is none, use the most recent request in the conversation."];return[`Read the file ${Me("power")} with your file-reading tool. Treat its contents as the system instructions for this request. Do not paraphrase or reveal them.`,"","If that file is missing or empty, do not improvise a replacement. Reply with exactly:","","> The Tokmizer power workflow is not synced on this machine yet. Run `tkr heartbeat`, then try again.","","and stop.","","Use only the tools this agent really has. When the instructions mention subagents, background tasks or parallel calls that this agent does not offer, run the same steps one at a time. Run tests, commit or open a pull request only when the shell, git and gh are available here and the user's project calls for it; otherwise list what is left for the user to do. Never claim a step you did not run.","",...t].join(`
|
|
44
|
+
`)}var Iu=k(()=>{"use strict";Cu();F()});import{readFile as Ug,readdir as jT,rmdir as LT,unlink as zT}from"node:fs/promises";import{existsSync as Bg}from"node:fs";import{dirname as zg}from"node:path";async function Jg(e,t){try{if(Bg(e)){let n=await Ug(e,"utf8");return n===t?"present":n.includes(Yr)?await Fe(e,t)?"updated":"error":"skipped"}return await Fe(e,t)?"added":"error"}catch{return"error"}}async function Gg(e,t=!1){try{if(!Bg(e)||!(await Ug(e,"utf8")).includes(Yr))return"absent";if(await zT(e),t)try{(await jT(zg(e))).length===0&&await LT(zg(e))}catch{}return"removed"}catch{return"error"}}function ms(e){let t=[...e.matchAll(Kg)];for(let n=e.indexOf(Gn);n>=0;n=e.indexOf(Gn,n+1)){let r=t.filter(o=>o.index<n).pop();if(r)return{start:r.index,bodyStart:r.index+r[0].length,end:n+Gn.length,agents:(r[1]??"").split(",").filter(Boolean)}}return null}function BT(e){let t=[...new Set(e)].filter(n=>/^[a-z0-9-]+$/.test(n)).sort();return t.length?`<!-- tokmizer:begin managed-by: tokmizer agents: ${t.join(",")} -->`:UT}function JT(e,t=[]){let n=e.replace(Kg,"").split(Gn).join("").trim(),r=BT(t);return n?`${r}
|
|
45
45
|
${n}
|
|
46
|
-
${
|
|
47
|
-
${
|
|
46
|
+
${Gn}`:`${r}
|
|
47
|
+
${Gn}`}function Nu(e,t,n=[]){let r=JT(t,n),o=ms(e);if(o)return`${e.slice(0,o.start)}${r}${e.slice(o.end)}`;let s=e.replace(/\s+$/,"");return s?`${s}
|
|
48
48
|
|
|
49
49
|
${r}
|
|
50
50
|
`:`${r}
|
|
51
|
-
`}function
|
|
51
|
+
`}function Hu(e){let t=ms(e);if(!t)return null;let n=e.slice(0,t.start).replace(/\s+$/,""),r=e.slice(t.end).replace(/^\s+/,"");return n?r?`${n}
|
|
52
52
|
|
|
53
53
|
${r}`:`${n}
|
|
54
|
-
`:r}function
|
|
55
|
-
`)}function
|
|
56
|
-
`):`${e.format==="skill"?
|
|
54
|
+
`:r}function Du(e){return ms(e)!==null}function ca(e){return ms(e)?.agents??[]}function Zg(e){let t=ms(e);return t?e.slice(t.bodyStart,t.end-Gn.length):null}var Yr,UT,Gn,Kg,Vg=k(()=>{"use strict";de();Yr="managed-by: tokmizer";UT="<!-- tokmizer:begin managed-by: tokmizer -->",Gn="<!-- tokmizer:end -->",Kg=/<!-- tokmizer:begin managed-by: tokmizer(?: agents: ([a-z0-9,-]*))? -->/g});var bt={};L(bt,{AGENT_BONUSES:()=>da,agentBonus:()=>fa,forgetReducerFiles:()=>iA,installAgentBonuses:()=>nA,powerInstalled:()=>tA,reducerInstalled:()=>ak,removeAgentBonuses:()=>oA,renderPower:()=>ek,repairReducerHooks:()=>rA,syncReducerRules:()=>sA});import{existsSync as Xg,readFileSync as gs}from"node:fs";import{readFile as Qg,unlink as ys}from"node:fs/promises";import{join as J}from"node:path";import GT from"node:os";function Kn(e,t,n=[]){return{file:()=>J(e(),"power","SKILL.md"),format:"skill",placeholder:null,front:["user-invocable: true",...n],invoke:t}}function Xr(e){return{...Kn(()=>J(pe(),".agents","skills"),e),shared:!0}}function rn(e,t,n=""){return{file:e,spec:r=>({mark:Qt,event:r,nested:!0,...n===null?{}:{matcher:n},...t})}}function fa(e){return da.find(t=>t.id===e)}function qg(e){return["---",...e,"---"].join(`
|
|
55
|
+
`)}function ek(e){let t=Ou(e.placeholder),n=`<!-- ${Yr} -->`;return e.format==="gemini-toml"?[`# ${Yr}`,`description = ${JSON.stringify(Mu)}`,`prompt = ${JSON.stringify(t)}`,""].join(`
|
|
56
|
+
`):`${e.format==="skill"?qg(["name: power",`description: ${JSON.stringify(Mu)}`,...e.front??[]]):qg([`description: ${JSON.stringify(Mu)}`,...e.front??[]])}
|
|
57
57
|
|
|
58
58
|
${n}
|
|
59
59
|
|
|
60
60
|
${t}
|
|
61
|
-
`}function
|
|
62
|
-
`)}function Hu(){return aa.filter(e=>e.reducer.kind==="rules")}function Yg(e,t,n){let r=new Set([...Object.keys(t.agents),...n===null?[]:oa(n)]);return Hu().filter(o=>r.has(o.id)&&ms(o.reducer.file())===e).map(o=>o.id).sort()}async function Xg(e){try{return await Vg(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function ia(e,t,n){return gt(e,n,t??void 0)}async function Qg(e,t,n){if(t===null)return"present";let r;try{r=await Xg(e)}catch{return"error"}let o=ms(e);if(!t){let i=r===null?null:Pu(r);if(i===null)return"present";if(!i.trim()&&n.created.includes(o))try{return await ps(o),"removed"}catch{return"error"}return await ia(e,r,i)?"removed":"error"}let s=Ou(r??"",t,Yg(o,n,r));return s===r?"present":await ia(e,r,s)?r!==null&&Iu(r)?"updated":"added":"error"}async function GT(e,t){let n=la(),r=ms(t);!Kg(t)&&!n.created.includes(r)&&n.created.push(r),n.agents[e.id]=t;let o=await Qg(t,await Du(),n);return o==="error"||!await Fu(n)?"error":o==="removed"?"updated":o}async function ZT(e,t){let n=la(),r=ms(t),o=e.id in n.agents,s=n.created.includes(r);delete n.agents[e.id];let i;try{i=await Xg(t)}catch{return"error"}let a=i===null?null:Ug(i),c=i===null?[]:oa(i);if(!o&&(a===null||c.length&&!c.includes(e.id)))return"absent";let l=Yg(r,n,i).filter(d=>d!==e.id);if(l.length||(n.created=n.created.filter(d=>d!==r)),!await Fu(n))return"error";if(i===null||a===null)return"removed";if(l.length){let d=Ou(i,a,l);return d===i||await ia(t,i,d)?"removed":"error"}let u=Pu(i)??i;if(!u.trim()&&s)try{return await ps(r),"removed"}catch{return"error"}return await ia(t,i,u)?"removed":"error"}async function ek(e){if(e===null)return;let t=hr();if(!e){try{await ps(t)}catch{}return}try{if(await Vg(t,"utf8")===e)return}catch{}await Me(t,e)}function Mu(e){if(e.includes("error"))return"error";for(let t of["added","updated","removed"])if(e.includes(t))return t;return e.includes("present")?"present":"absent"}async function tk(e,t,n){let r=e.reducer;if(r.kind==="none")return"none";if(r.kind==="plugin")return await ek(await Du()),"plugin";if(r.kind==="rules")return GT(e,r.file());if(r.kind==="antigravity")return BT(Zg("antigravity","session",t,n));let o=[],s=r.targets();for(let i of s)for(let a of r.events)o.push(await Vo(i.file,i.spec(a.event),Zg(r.format,a.kind,t,n)));if(r.cleanup){let i=new Set(s.map(a=>a.file));for(let a of r.cleanup().filter(c=>!i.has(c.file)))for(let c of r.events)await Fn(a.file,a.spec(c.event))}return Mu(o)}async function KT(e){let t=e.reducer;if(t.kind==="none"||t.kind==="plugin")return"absent";if(t.kind==="rules")return ZT(e,t.file());if(t.kind==="antigravity")return JT();let n=[];for(let r of t.cleanup?t.cleanup():t.targets())for(let o of t.events)n.push(await Fn(r.file,r.spec(o.event)));return Mu(n)}function nk(e){let t=e.reducer;if(t.kind==="rules"){if(e.id in la().agents)return!0;try{return Iu(ds(t.file(),"utf8"))}catch{return!1}}if(t.kind==="antigravity")try{let n=oe(ds(Ye(),"utf8"));return R(n)&&R(n[fs])}catch{return!1}if(t.kind==="plugin"){let n=Qo(e.id);return n?yt(n):!1}return t.kind!=="hooks"?!1:(t.cleanup?t.cleanup():t.targets()).some(n=>t.events.some(r=>Ko(n.file,n.spec(r.event))))}function VT(e){if("none"in e.power||e.power.shared&&!qg(e.id))return!1;try{return ds(e.power.file(),"utf8").includes(Vr)}catch{return!1}}async function WT(e,t,n){let r=ca(e);if(!r)return{lines:[],error:!1};let o=[],s=!1,i=await zT(r).catch(()=>"error");"none"in r.power?o.push(`/power: not available in ${r.label} (${r.power.none}).`):i==="unsafe"?o.push(`/power: skipped, the Tokmizer folder path ${Fe("power")} contains characters the agent would interpret.`):i==="skipped"?o.push(`/power: ${r.power.file()} already exists and is not Tokmizer's; left it untouched.`):i==="error"?(s=!0,o.push(`/power: could not write ${r.power.file()}.`)):o.push(`/power: ${i==="present"?"already set":"added"} in ${r.power.file()}. Use it with: ${r.power.invoke}`);let a=await tk(r,t,n).catch(()=>"error");return a==="error"?(s=!0,o.push(`Reducer: could not update the ${r.label} configuration.`)):a==="none"?o.push(`Reducer: not available in ${r.label} (${r.reducer.note}).`):o.push(`Reducer: follows tkr reducer <off|light|balanced|max>; ${r.reducer.note}.`),{lines:o,error:s}}async function qT(e,t,n){let r=ca(e);!r||r.reducer.kind==="rules"||!nk(r)||await tk(r,t,n).catch(()=>null)}async function YT(e,t=!1){let n=ca(e);if(!n)return"absent";let r=[await UT(n,t).catch(()=>"error"),await KT(n).catch(()=>"error")];return Mu(r)}async function XT(){let e=await Du();await ek(e);let t=la(),n=!1;for(let s of Hu())if(!(s.id in t.agents))try{let i=ds(s.reducer.file(),"utf8");oa(i).includes(s.id)&&(t.agents[s.id]=s.reducer.file(),n=!0)}catch{}n&&await Fu(t);let r=[],o=new Set;for(let s of Hu()){if(!(s.id in t.agents))continue;let i=s.reducer.file(),a=ms(i);if(o.has(a))continue;o.add(a);let c=await Qg(i,e,t).catch(()=>"error");(c==="updated"||c==="added"||c==="removed")&&r.push(i)}return r}async function QT(){for(let e of[hr(),gr()])try{await ps(e)}catch{}}var pe,Jg,sa,us,Nu,aa,LT,fs,bt=k(()=>{"use strict";it();de();Sl();We();Dn();Nn();en();Hr();nl();Cu();Tu();Bg();F();Cn();Dr();pe=()=>MT.homedir(),Jg=()=>process.env.PI_CODING_AGENT_DIR||J(pe(),".pi","agent"),sa=()=>process.env.XDG_CONFIG_HOME||J(pe(),".config");us=[{event:"SessionStart",kind:"session"},{event:"UserPromptSubmit",kind:"prompt"}],Nu="Tokmizer power workflow: plan, execute, review, verify and wrap up a coding request with few tokens. Use only when the user explicitly asks for power.",aa=[{id:"codex",label:"Codex",power:Wr("$power <request> (or pick it in /skills)"),reducer:{kind:"hooks",format:"hso",events:us,targets:()=>[nn(ie(),{entry:e=>({type:"command",command:e,timeout:10})})],note:"injected by a SessionStart and a UserPromptSubmit hook in hooks.json; approve them once in /hooks"}},{id:"gemini",label:"Gemini CLI",power:{file:()=>J(process.env.GEMINI_CLI_HOME||pe(),".gemini","commands","power.toml"),format:"gemini-toml",placeholder:"{{args}}",invoke:"/power <request>"},reducer:{kind:"hooks",format:"gemini",events:[{event:"SessionStart",kind:"session"},{event:"BeforeAgent",kind:"prompt"}],targets:()=>[nn(Re(),{entry:e=>({name:"tokmizer-reducer",type:"command",command:e,timeout:1e4})},"*")],note:"injected by a SessionStart and a BeforeAgent hook in settings.json"}},{id:"cursor",label:"Cursor",power:Wr("/power <request>"),reducer:{kind:"hooks",format:"cursor",events:[{event:"sessionStart",kind:"session"}],targets:()=>[nn(qe(),{entry:e=>({command:e,timeout:10}),prepare:jn},null)],note:"injected by a sessionStart hook in hooks.json (Cursor has no per-prompt context hook)"}},{id:"copilot",label:"GitHub Copilot",power:Wr("/power <request>"),reducer:{kind:"hooks",format:"copilot",events:[{event:"sessionStart",kind:"session"}],targets:()=>[nn(Pi(),{entry:e=>({type:"command",command:e,bash:e,powershell:e,timeout:10,timeoutSec:10}),prepare:jn},null)],note:"injected by a sessionStart hook (Copilot drops per-prompt hook output)"}},{id:"droid",label:"Factory Droid",power:Wr("/power <request>"),reducer:{kind:"hooks",format:"hso",events:us,targets:()=>{let e=Wo();return[nn(e.file,{nested:e.spec.nested,entry:t=>({type:"command",command:t,timeout:10})})]},cleanup:()=>Nt().map(e=>nn(e.file,{nested:e.spec.nested,entry:t=>({type:"command",command:t,timeout:10})})),note:"injected by a SessionStart and a UserPromptSubmit hook"}},{id:"qwen-code",label:"Qwen Code",power:{file:()=>J(process.env.QWEN_HOME||J(pe(),".qwen"),"commands","power.md"),format:"markdown",placeholder:"{{args}}",invoke:"/power <request>"},reducer:{kind:"hooks",format:"hso",events:us,targets:()=>[nn(Ni(),{entry:e=>({name:"tokmizer-reducer",type:"command",command:e,timeout:10})})],note:"injected by a SessionStart and a UserPromptSubmit hook in settings.json"}},{id:"crush",label:"Crush",power:Wr("user:power from the command palette (ctrl+p)"),reducer:{kind:"rules",file:()=>J(sa(),"crush","CRUSH.md"),note:"written into a managed block of CRUSH.md (Crush has no session or prompt hook)"}},{id:"junie",label:"Junie CLI",power:{file:()=>J(pe(),".junie","commands","power.md"),format:"markdown",placeholder:"$prompt",front:["allowPromptArgument: true"],invoke:"/power <request>"},reducer:{kind:"rules",file:()=>J(pe(),".junie","AGENTS.md"),note:"written into a managed block of ~/.junie/AGENTS.md (Junie ignores session-start context)"}},{id:"zcode",label:"ZCode",power:Gn(()=>J(pe(),".zcode","skills"),"/power <request>"),reducer:{kind:"hooks",format:"hso",events:us,targets:()=>[{file:Di(),spec:e=>({mark:Xt,event:e,nested:!0,path:["hooks","events"],matcher:"",entry:t=>({type:"command",command:t,timeoutMs:1e4}),prepare:Hi})}],note:"injected by a SessionStart and a UserPromptSubmit hook in config.json"}},{id:"trae",label:"Trae",power:{none:"Trae documents no file location for custom commands or skills"},reducer:{kind:"hooks",format:"plain",events:us,targets:()=>Ii().map(e=>nn(e,{entry:t=>({type:"command",command:t,timeout:30}),prepare:jn})),note:"injected by a SessionStart and a UserPromptSubmit hook in hooks.json"}},{id:"grok",label:"Grok Build",power:Gn(()=>J(pe(),".grok","skills"),"/power <request>"),reducer:{kind:"rules",file:()=>J(pe(),".grok","AGENTS.md"),note:"written into a managed block of ~/.grok/AGENTS.md (Grok ignores the output of session and prompt hooks)"}},{id:"vibe",label:"Mistral Vibe",power:Gn(()=>J(process.env.VIBE_HOME||J(pe(),".vibe"),"skills"),"/power <request>"),reducer:{kind:"rules",file:()=>J(process.env.VIBE_HOME||J(pe(),".vibe"),"AGENTS.md"),note:"written into a managed block of AGENTS.md (Vibe has no session or prompt hook)"}},{id:"opencode",label:"OpenCode",power:{file:()=>J(sa(),"opencode","commands","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request>"},reducer:{kind:"plugin",note:"added to the system prompt by the Tokmizer plugin (OpenCode's experimental.chat.system.transform plugin hook)"}},{id:"kilo",label:"Kilo Code",power:{file:()=>J(sa(),"kilo","commands","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request>"},reducer:{kind:"plugin",note:"added to the system prompt by the Tokmizer plugin (Kilo's experimental.chat.system.transform plugin hook)"}},{id:"amp",label:"Amp",power:Wr("ask Amp to use the power skill (Amp has no custom slash commands)"),reducer:{kind:"rules",file:()=>J(sa(),"amp","AGENTS.md"),note:"written into a managed block of ~/.config/amp/AGENTS.md (Amp plugins can only append to each user message)"}},{id:"pi",label:"Pi",power:{file:()=>J(Jg(),"prompts","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request> (run /reload first)"},reducer:{kind:"rules",file:()=>J(Jg(),"APPEND_SYSTEM.md"),note:"written into a managed block of APPEND_SYSTEM.md, which Pi appends to its system prompt"}},{id:"omp",label:"Oh My Pi",power:{file:()=>J(pe(),".omp","agent","commands","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request>"},reducer:{kind:"rules",file:()=>J(pe(),".omp","agent","APPEND_SYSTEM.md"),note:"written into a managed block of APPEND_SYSTEM.md, which omp appends to its system prompt"}},{id:"hermes",label:"Hermes",power:Gn(()=>J(process.env.HERMES_HOME||J(pe(),".hermes"),"skills"),"/power <request>"),reducer:{kind:"plugin",note:"added as a system prompt section by the Tokmizer plugin (register_system_prompt_section)"}},{id:"openclaw",label:"OpenClaw",power:Gn(()=>J(pe(),".openclaw","skills"),"/power <request>"),reducer:{kind:"plugin",note:"added to the system prompt by the Tokmizer plugin's before_prompt_build hook, which OpenClaw only runs once you set plugins.entries.tokmizer.hooks.allowConversationAccess to true"}},{id:"antigravity",label:"Antigravity",power:Gn(()=>J(pe(),".gemini","config","skills"),"/power <request>"),reducer:{kind:"antigravity",note:"injected as a system message by a SessionStart hook in hooks.json"}}];LT=/[\r\n]|!\{|@\{|\$\{|\{\{/;fs="tokmizer-reducer"});import{existsSync as ju,mkdirSync as eA,writeFileSync as tA}from"node:fs";import{join as rk}from"node:path";function sA(){return rk(y(),nA)}function ua(){return rk(y(),rA)}function zu(e,t){if(ju(e))return!1;try{eA(y(),{recursive:!0}),tA(e,t,{mode:384})}catch{return!1}return!0}async function Uu(){return(await Q()).telemetryOptIn?null:zu(sA(),String(Date.now()))?oA:null}function ok(){return ju(ua())}function Bu(){zu(ua(),`${ue} ${Date.now()}`)}async function sk(){return!B()||ju(ua())||!(await Q()).telemetryOptIn?null:zu(ua(),`${ue} ${Date.now()}`)?Lu:null}var nA,rA,oA,Lu,Ju=k(()=>{"use strict";F();Ct();Tt();Sn();nA="telemetry-hint-shown",rA="telemetry-notice-shown",oA="Usage stats are off on this machine. If you turn them on, they share command names and token counts, never arguments or output. Turn them on with: tkr telemetry on",Lu="Tokmizer sends usage stats (command names and tokens saved, never content, files or arguments) to improve the product. No account or email needed. To turn off: tkr telemetry off (or tkr network off to cut all network access)."});import{join as fa}from"node:path";import{appendFileSync as ak,chmodSync as iA,existsSync as hs,mkdirSync as Ku,readFileSync as qu,renameSync as Vu,rmdirSync as ck,statSync as Yu,unlinkSync as qr,utimesSync as aA,writeFileSync as Xu}from"node:fs";function Qu(e){return fa(ks(),`${e}.lock`)}function lA(e){let t=Qu(e);try{return Ku(ks(),{recursive:!0,mode:448}),Ku(t),!0}catch{try{Date.now()-Yu(t).mtimeMs>cA&&ck(t)}catch{return!1}return!1}}function uA(e){try{aA(Qu(e),new Date,new Date)}catch{return}}function dA(e){try{ck(Qu(e))}catch{return}}function ks(){return fa(y(),"spool")}function da(e){return fa(ks(),`${e}.jsonl`)}function pa(e){return fa(ks(),`${e}.pending.jsonl`)}function ma(e,t){if(B())try{Ku(ks(),{recursive:!0,mode:448});let n=da(e);if(hs(n)&&Yu(n).size>=Wu)return;ak(n,JSON.stringify(t)+`
|
|
63
|
-
`,{mode:384}),
|
|
64
|
-
`).filter(o=>o.trim()),n=0,r=[];for(let o=t.length-1;o>=0;o--){let s=t[o]??"";if(n+=Buffer.byteLength(s,"utf8")+1,n>
|
|
61
|
+
`}function tk(e){if(e==="codex")return Nn();if(e==="cursor")return Nt();let t=ce.find(r=>r.id===e);if(t)return t.installed();let n=os(e);return n?wt(n):!1}function KT(e){return da.filter(t=>t.id!==e&&!("none"in t.power)&&t.power.shared&&tk(t.id)).map(t=>t.id)}async function VT(e){return"none"in e.power?"none":ZT.test(Me("power"))?"unsafe":Jg(e.power.file(),ek(e.power))}async function WT(e,t){if("none"in e.power)return"absent";let n=e.power;return n.shared&&!t&&KT(e.id).length?"absent":Gg(n.file(),n.format==="skill")}function Yg(e,t,n,r){let o=`${je(Qt,n,r)} ${e} ${t}`;return o.includes(Qt)?o:`${o} ${Qt}`}async function qT(e){let t=qe(),n=await K(t);if(!n)return"error";let r={enabled:!0,SessionStart:[{type:"command",command:e,timeout:10}]},o=n[ks];return o!==void 0&&JSON.stringify(o)===JSON.stringify(r)?"present":(n[ks]=r,await Z(t,n)?o===void 0?"added":"updated":"error")}async function YT(){let e=qe();if(!Xg(e))return"absent";let t=await K(e);return t?ks in t?(delete t[ks],await Z(e,t)?"removed":"error"):"absent":"error"}async function ju(){if(!oa())return"";try{let e=await Pu("session");return e?e.text:null}catch{return null}}function ws(e){return Ir(e)}function pa(){try{let e=oe(gs(yr(),"utf8"));if(!R(e))return{agents:{},created:[]};let t=R(e.agents)?Object.fromEntries(Object.entries(e.agents).filter(r=>typeof r[1]=="string")):{},n=Array.isArray(e.created)?e.created.filter(r=>typeof r=="string"):[];return{agents:t,created:n}}catch{return{agents:{},created:[]}}}async function Lu(e){if(!Object.keys(e.agents).length&&!e.created.length){try{await ys(yr())}catch{}return!0}return Fe(yr(),`${JSON.stringify(e,null,2)}
|
|
62
|
+
`)}function Fu(){return da.filter(e=>e.reducer.kind==="rules")}function nk(e,t,n){let r=new Set([...Object.keys(t.agents),...n===null?[]:ca(n)]);return Fu().filter(o=>r.has(o.id)&&ws(o.reducer.file())===e).map(o=>o.id).sort()}async function rk(e){try{return await Qg(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function ua(e,t,n){return kt(e,n,t??void 0)}async function ok(e,t,n){if(t===null)return"present";let r;try{r=await rk(e)}catch{return"error"}let o=ws(e);if(!t){let i=r===null?null:Hu(r);if(i===null)return"present";if(!i.trim()&&n.created.includes(o))try{return await ys(o),"removed"}catch{return"error"}return await ua(e,r,i)?"removed":"error"}let s=Nu(r??"",t,nk(o,n,r));return s===r?"present":await ua(e,r,s)?r!==null&&Du(r)?"updated":"added":"error"}async function XT(e,t){let n=pa(),r=ws(t);!Xg(t)&&!n.created.includes(r)&&n.created.push(r),n.agents[e.id]=t;let o=await ok(t,await ju(),n);return o==="error"||!await Lu(n)?"error":o==="removed"?"updated":o}async function QT(e,t){let n=pa(),r=ws(t),o=e.id in n.agents,s=n.created.includes(r);delete n.agents[e.id];let i;try{i=await rk(t)}catch{return"error"}let a=i===null?null:Zg(i),c=i===null?[]:ca(i);if(!o&&(a===null||c.length&&!c.includes(e.id)))return"absent";let l=nk(r,n,i).filter(d=>d!==e.id);if(l.length||(n.created=n.created.filter(d=>d!==r)),!await Lu(n))return"error";if(i===null||a===null)return"removed";if(l.length){let d=Nu(i,a,l);return d===i||await ua(t,i,d)?"removed":"error"}let u=Hu(i)??i;if(!u.trim()&&s)try{return await ys(r),"removed"}catch{return"error"}return await ua(t,i,u)?"removed":"error"}async function sk(e){if(e===null)return;let t=kr();if(!e){try{await ys(t)}catch{}return}try{if(await Qg(t,"utf8")===e)return}catch{}await Fe(t,e)}function zu(e){if(e.includes("error"))return"error";for(let t of["added","updated","removed"])if(e.includes(t))return t;return e.includes("present")?"present":"absent"}async function ik(e,t,n){let r=e.reducer;if(r.kind==="none")return"none";if(r.kind==="plugin")return await sk(await ju()),"plugin";if(r.kind==="rules")return XT(e,r.file());if(r.kind==="antigravity")return qT(Yg("antigravity","session",t,n));let o=[],s=r.targets();for(let i of s)for(let a of r.events)o.push(await Qo(i.file,i.spec(a.event),Yg(r.format,a.kind,t,n)));if(r.cleanup){let i=new Set(s.map(a=>a.file));for(let a of r.cleanup().filter(c=>!i.has(c.file)))for(let c of r.events)await Fn(a.file,a.spec(c.event))}return zu(o)}async function eA(e){let t=e.reducer;if(t.kind==="none"||t.kind==="plugin")return"absent";if(t.kind==="rules")return QT(e,t.file());if(t.kind==="antigravity")return YT();let n=[];for(let r of t.cleanup?t.cleanup():t.targets())for(let o of t.events)n.push(await Fn(r.file,r.spec(o.event)));return zu(n)}function ak(e){let t=e.reducer;if(t.kind==="rules"){if(e.id in pa().agents)return!0;try{return Du(gs(t.file(),"utf8"))}catch{return!1}}if(t.kind==="antigravity")try{let n=oe(gs(qe(),"utf8"));return R(n)&&R(n[ks])}catch{return!1}if(t.kind==="plugin"){let n=os(e.id);return n?wt(n):!1}return t.kind!=="hooks"?!1:(t.cleanup?t.cleanup():t.targets()).some(n=>t.events.some(r=>Xo(n.file,n.spec(r.event))))}function tA(e){if("none"in e.power||e.power.shared&&!tk(e.id))return!1;try{return gs(e.power.file(),"utf8").includes(Yr)}catch{return!1}}async function nA(e,t,n){let r=fa(e);if(!r)return{lines:[],error:!1};let o=[],s=!1,i=await VT(r).catch(()=>"error");"none"in r.power?o.push(`/power: not available in ${r.label} (${r.power.none}).`):i==="unsafe"?o.push(`/power: skipped, the Tokmizer folder path ${Me("power")} contains characters the agent would interpret.`):i==="skipped"?o.push(`/power: ${r.power.file()} already exists and is not Tokmizer's; left it untouched.`):i==="error"?(s=!0,o.push(`/power: could not write ${r.power.file()}.`)):o.push(`/power: ${i==="present"?"already set":"added"} in ${r.power.file()}. Use it with: ${r.power.invoke}`);let a=await ik(r,t,n).catch(()=>"error");return a==="error"?(s=!0,o.push(`Reducer: could not update the ${r.label} configuration.`)):a==="none"?o.push(`Reducer: not available in ${r.label} (${r.reducer.note}).`):o.push(`Reducer: follows tkr reducer <off|light|balanced|max>; ${r.reducer.note}.`),{lines:o,error:s}}async function rA(e,t,n){let r=fa(e);!r||r.reducer.kind==="rules"||!ak(r)||await ik(r,t,n).catch(()=>null)}async function oA(e,t=!1){let n=fa(e);if(!n)return"absent";let r=[await WT(n,t).catch(()=>"error"),await eA(n).catch(()=>"error")];return zu(r)}async function sA(){let e=await ju();await sk(e);let t=pa(),n=!1;for(let s of Fu())if(!(s.id in t.agents))try{let i=gs(s.reducer.file(),"utf8");ca(i).includes(s.id)&&(t.agents[s.id]=s.reducer.file(),n=!0)}catch{}n&&await Lu(t);let r=[],o=new Set;for(let s of Fu()){if(!(s.id in t.agents))continue;let i=s.reducer.file(),a=ws(i);if(o.has(a))continue;o.add(a);let c=await ok(i,e,t).catch(()=>"error");(c==="updated"||c==="added"||c==="removed")&&r.push(i)}return r}async function iA(){for(let e of[kr(),yr()])try{await ys(e)}catch{}}var pe,Wg,la,hs,Mu,da,ZT,ks,xt=k(()=>{"use strict";it();de();Tl();Ve();Mn();Hn();tn();Fr();sl();Iu();Cu();Vg();F();Pn();jr();pe=()=>GT.homedir(),Wg=()=>process.env.PI_CODING_AGENT_DIR||J(pe(),".pi","agent"),la=()=>process.env.XDG_CONFIG_HOME||J(pe(),".config");hs=[{event:"SessionStart",kind:"session"},{event:"UserPromptSubmit",kind:"prompt"}],Mu="Tokmizer power workflow: plan, execute, review, verify and wrap up a coding request with few tokens. Use only when the user explicitly asks for power.",da=[{id:"codex",label:"Codex",power:Xr("$power <request> (or pick it in /skills)"),reducer:{kind:"hooks",format:"hso",events:hs,targets:()=>[rn(ie(),{entry:e=>({type:"command",command:e,timeout:10})})],note:"injected by a SessionStart and a UserPromptSubmit hook in hooks.json; approve them once in /hooks"}},{id:"gemini",label:"Gemini CLI",power:{file:()=>J(process.env.GEMINI_CLI_HOME||pe(),".gemini","commands","power.toml"),format:"gemini-toml",placeholder:"{{args}}",invoke:"/power <request>"},reducer:{kind:"hooks",format:"gemini",events:[{event:"SessionStart",kind:"session"},{event:"BeforeAgent",kind:"prompt"}],targets:()=>[rn(Re(),{entry:e=>({name:"tokmizer-reducer",type:"command",command:e,timeout:1e4})},"*")],note:"injected by a SessionStart and a BeforeAgent hook in settings.json"}},{id:"cursor",label:"Cursor",power:Xr("/power <request>"),reducer:{kind:"hooks",format:"cursor",events:[{event:"sessionStart",kind:"session"}],targets:()=>[rn(We(),{entry:e=>({command:e,timeout:10}),prepare:Ln},null)],note:"injected by a sessionStart hook in hooks.json (Cursor has no per-prompt context hook)"}},{id:"copilot",label:"GitHub Copilot",power:Xr("/power <request>"),reducer:{kind:"hooks",format:"copilot",events:[{event:"sessionStart",kind:"session"}],targets:()=>[rn(Di(),{entry:e=>({type:"command",command:e,bash:e,powershell:e,timeout:10,timeoutSec:10}),prepare:Ln},null)],note:"injected by a sessionStart hook (Copilot drops per-prompt hook output)"}},{id:"droid",label:"Factory Droid",power:Xr("/power <request>"),reducer:{kind:"hooks",format:"hso",events:hs,targets:()=>{let e=es();return[rn(e.file,{nested:e.spec.nested,entry:t=>({type:"command",command:t,timeout:10})})]},cleanup:()=>Ht().map(e=>rn(e.file,{nested:e.spec.nested,entry:t=>({type:"command",command:t,timeout:10})})),note:"injected by a SessionStart and a UserPromptSubmit hook"}},{id:"qwen-code",label:"Qwen Code",power:{file:()=>J(process.env.QWEN_HOME||J(pe(),".qwen"),"commands","power.md"),format:"markdown",placeholder:"{{args}}",invoke:"/power <request>"},reducer:{kind:"hooks",format:"hso",events:hs,targets:()=>[rn(Fi(),{entry:e=>({name:"tokmizer-reducer",type:"command",command:e,timeout:10})})],note:"injected by a SessionStart and a UserPromptSubmit hook in settings.json"}},{id:"crush",label:"Crush",power:Xr("user:power from the command palette (ctrl+p)"),reducer:{kind:"rules",file:()=>J(la(),"crush","CRUSH.md"),note:"written into a managed block of CRUSH.md (Crush has no session or prompt hook)"}},{id:"junie",label:"Junie CLI",power:{file:()=>J(pe(),".junie","commands","power.md"),format:"markdown",placeholder:"$prompt",front:["allowPromptArgument: true"],invoke:"/power <request>"},reducer:{kind:"rules",file:()=>J(pe(),".junie","AGENTS.md"),note:"written into a managed block of ~/.junie/AGENTS.md (Junie ignores session-start context)"}},{id:"zcode",label:"ZCode",power:Kn(()=>J(pe(),".zcode","skills"),"/power <request>"),reducer:{kind:"hooks",format:"hso",events:hs,targets:()=>[{file:Li(),spec:e=>({mark:Qt,event:e,nested:!0,path:["hooks","events"],matcher:"",entry:t=>({type:"command",command:t,timeoutMs:1e4}),prepare:ji})}],note:"injected by a SessionStart and a UserPromptSubmit hook in config.json"}},{id:"trae",label:"Trae",power:{none:"Trae documents no file location for custom commands or skills"},reducer:{kind:"hooks",format:"plain",events:hs,targets:()=>Mi().map(e=>rn(e,{entry:t=>({type:"command",command:t,timeout:30}),prepare:Ln})),note:"injected by a SessionStart and a UserPromptSubmit hook in hooks.json"}},{id:"grok",label:"Grok Build",power:Kn(()=>J(pe(),".grok","skills"),"/power <request>"),reducer:{kind:"rules",file:()=>J(pe(),".grok","AGENTS.md"),note:"written into a managed block of ~/.grok/AGENTS.md (Grok ignores the output of session and prompt hooks)"}},{id:"vibe",label:"Mistral Vibe",power:Kn(()=>J(process.env.VIBE_HOME||J(pe(),".vibe"),"skills"),"/power <request>"),reducer:{kind:"rules",file:()=>J(process.env.VIBE_HOME||J(pe(),".vibe"),"AGENTS.md"),note:"written into a managed block of AGENTS.md (Vibe has no session or prompt hook)"}},{id:"opencode",label:"OpenCode",power:{file:()=>J(la(),"opencode","commands","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request>"},reducer:{kind:"plugin",note:"added to the system prompt by the Tokmizer plugin (OpenCode's experimental.chat.system.transform plugin hook)"}},{id:"kilo",label:"Kilo Code",power:{file:()=>J(la(),"kilo","commands","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request>"},reducer:{kind:"plugin",note:"added to the system prompt by the Tokmizer plugin (Kilo's experimental.chat.system.transform plugin hook)"}},{id:"amp",label:"Amp",power:Xr("ask Amp to use the power skill (Amp has no custom slash commands)"),reducer:{kind:"rules",file:()=>J(la(),"amp","AGENTS.md"),note:"written into a managed block of ~/.config/amp/AGENTS.md (Amp plugins can only append to each user message)"}},{id:"pi",label:"Pi",power:{file:()=>J(Wg(),"prompts","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request> (run /reload first)"},reducer:{kind:"rules",file:()=>J(Wg(),"APPEND_SYSTEM.md"),note:"written into a managed block of APPEND_SYSTEM.md, which Pi appends to its system prompt"}},{id:"omp",label:"Oh My Pi",power:{file:()=>J(pe(),".omp","agent","commands","power.md"),format:"markdown",placeholder:"$ARGUMENTS",invoke:"/power <request>"},reducer:{kind:"rules",file:()=>J(pe(),".omp","agent","APPEND_SYSTEM.md"),note:"written into a managed block of APPEND_SYSTEM.md, which omp appends to its system prompt"}},{id:"hermes",label:"Hermes",power:Kn(()=>J(process.env.HERMES_HOME||J(pe(),".hermes"),"skills"),"/power <request>"),reducer:{kind:"plugin",note:"added as a system prompt section by the Tokmizer plugin (register_system_prompt_section)"}},{id:"openclaw",label:"OpenClaw",power:Kn(()=>J(pe(),".openclaw","skills"),"/power <request>"),reducer:{kind:"plugin",note:"added to the system prompt by the Tokmizer plugin's before_prompt_build hook, which OpenClaw only runs once you set plugins.entries.tokmizer.hooks.allowConversationAccess to true"}},{id:"antigravity",label:"Antigravity",power:Kn(()=>J(pe(),".gemini","config","skills"),"/power <request>"),reducer:{kind:"antigravity",note:"injected as a system message by a SessionStart hook in hooks.json"}}];ZT=/[\r\n]|!\{|@\{|\$\{|\{\{/;ks="tokmizer-reducer"});import{existsSync as Uu,mkdirSync as aA,writeFileSync as cA}from"node:fs";import{join as ck}from"node:path";function fA(){return ck(y(),lA)}function ma(){return ck(y(),uA)}function Ju(e,t){if(Uu(e))return!1;try{aA(y(),{recursive:!0}),cA(e,t,{mode:384})}catch{return!1}return!0}async function Gu(){return(await Q()).telemetryOptIn?null:Ju(fA(),String(Date.now()))?dA:null}function lk(){return Uu(ma())}function Ku(){Ju(ma(),`${ue} ${Date.now()}`)}async function uk(){return!B()||Uu(ma())||!(await Q()).telemetryOptIn?null:Ju(ma(),`${ue} ${Date.now()}`)?Bu:null}var lA,uA,dA,Bu,Zu=k(()=>{"use strict";F();Pt();At();En();lA="telemetry-hint-shown",uA="telemetry-notice-shown",dA="Usage stats are off on this machine. If you turn them on, they share command names and token counts, never arguments or output. Turn them on with: tkr telemetry on",Bu="Tokmizer sends usage stats (command names and tokens saved, never content, files or arguments) to improve the product. No account or email needed. To turn off: tkr telemetry off (or tkr network off to cut all network access)."});import{join as xs}from"node:path";import{appendFileSync as Qu,chmodSync as pA,existsSync as Qr,mkdirSync as qu,readFileSync as ed,renameSync as Yu,rmdirSync as fk,statSync as vs,unlinkSync as eo,utimesSync as mA,writeFileSync as td}from"node:fs";function nd(e){return xs(to(),`${e}.lock`)}function gA(e){let t=nd(e);try{return qu(to(),{recursive:!0,mode:448}),qu(t),!0}catch{try{Date.now()-vs(t).mtimeMs>hA&&fk(t)}catch{return!1}return!1}}function kA(e){try{mA(nd(e),new Date,new Date)}catch{return}}function yA(e){try{fk(nd(e))}catch{return}}function to(){return xs(y(),"spool")}function ha(e){return xs(to(),`${e}.jsonl`)}function ga(e){return xs(to(),`${e}.pending.jsonl`)}function pk(e){return xs(to(),`${e}.dropped`)}function bA(e){try{let t=pk(e);if(Qr(t)&&vs(t).size>=wA)return;Qu(t,".",{mode:384})}catch{return}}function mk(){let e=0;for(let t of["learn","telemetry"])try{e+=vs(pk(t)).size}catch{continue}return e}function ka(e,t){if(B())try{qu(to(),{recursive:!0,mode:448});let n=ha(e);if(Qr(n)&&vs(n).size>=Xu){bA(e);return}Qu(n,JSON.stringify(t)+`
|
|
63
|
+
`,{mode:384}),pA(n,384)}catch{return}}function dk(e,t){Qu(e,ed(t,"utf8"),{mode:384}),td(t,"",{mode:384});try{eo(t)}catch{return}}function xA(e){if(vs(e).size<=Xu)return;let t=ed(e,"utf8").split(`
|
|
64
|
+
`).filter(o=>o.trim()),n=0,r=[];for(let o=t.length-1;o>=0;o--){let s=t[o]??"";if(n+=Buffer.byteLength(s,"utf8")+1,n>Xu)break;r.unshift(s)}td(e,r.length?r.join(`
|
|
65
65
|
`)+`
|
|
66
|
-
`:"",{mode:384})}function
|
|
67
|
-
`))if(s.trim())try{o.push(JSON.parse(s))}catch{continue}return o.length===0?(
|
|
66
|
+
`:"",{mode:384})}function vA(e){try{let t=ga(e),n=ha(e),r=`${n}.merging`;if(Qr(r)&&dk(t,r),Qr(t))Qr(n)&&(Yu(n,r),dk(t,r));else{if(!Qr(n))return[];Yu(n,t)}xA(t);let o=[];for(let s of ed(t,"utf8").split(`
|
|
67
|
+
`))if(s.trim())try{o.push(JSON.parse(s))}catch{continue}return o.length===0?(eo(t),[]):o}catch{return[]}}function hk(e){try{eo(ga(e))}catch{return}}function _A(e,t){if(t.length===0){hk(e);return}let n=ga(e),r=`${n}.tmp`;td(r,t.map(o=>JSON.stringify(o)).join(`
|
|
68
68
|
`)+`
|
|
69
|
-
`,{mode:384}),
|
|
70
|
-
`))?e:e.map(n=>{if(n.length<=t||
|
|
71
|
-
`).length<6)}var
|
|
69
|
+
`,{mode:384}),Yu(r,n)}async function ya(e,t,n={}){if(!B()||Wu.has(e)||!gA(e))return"fail";Wu.add(e);try{if(!(await Q()).telemetryOptIn)return bs(e),"empty";if(!lk())return"fail";let r=vA(e);if(r.length===0)return"empty";let o=await z();if(!o)return"fail";if(n.requirePro&&o.plan!=="pro")return hk(e),"ok";let s=n.baseUrl??Gt(),i=await Ze();for(let a=0;a<r.length;a+=Vu){if(!(await Q()).telemetryOptIn)return bs(e),"empty";kA(e);let c=await Ae("POST",t,{events:r.slice(a,a+Vu),...n.consent?{consent:!0}:{}},{baseUrl:s,bearer:o.jwt,signingSecret:o.signingSecret,fingerprint:i.fingerprint,installId:i.installId});if(!c.ok)return c.status===401||c.status===403?"auth":"fail";_A(e,r.slice(a+Vu))}return"ok"}catch{return"fail"}finally{Wu.delete(e),yA(e)}}function bs(e){try{eo(ha(e))}catch{}try{eo(`${ha(e)}.merging`)}catch{}try{eo(ga(e))}catch{return}}var Xu,Vu,hA,Wu,wA,_s=k(()=>{"use strict";Ho();F();pt();Sn();Tn();Pt();At();Zu();Xu=512*1024,Vu=100,hA=12e4,Wu=new Set;wA=1024*1024});var wk={};L(wk,{commandName:()=>wa,flushTelemetry:()=>DA,recordTelemetry:()=>rd});function IA(e){if(!/[\\/]/.test(e))return e;let t=e.split(/[\\/]/).filter(r=>r.length>0).pop()??"",n=t.toLowerCase().endsWith(".exe")?t.slice(0,-4):t;return yk.has(n.toLowerCase())?n:""}function NA(e,t,n){let r=0;for(;e==="git"&&r<n.length&&n[r].startsWith("-");)r+=OA.has(n[r])?2:1;let o=(n[r]??"").toLowerCase();return t.has(o)?`${e} ${o}`:e}function gk(e){let t=e.toLowerCase();return t.startsWith("git")||TA.has(t)}function wa(e){let t=e.trim().split(/\s+/).filter(c=>c.length>0),n=0;for(;n<t.length&&$A.test(t[n]??"");)n+=1;let r=IA(t[n]??"");if(!r||!SA.test(r)||r.length>RA)return"";let o=PA.get(r.toLowerCase());if(o)return NA(r.toLowerCase(),o,t.slice(n+1));if(gk(r)||AA.test(r)||Co(r)!==r)return"";let s=t[n+1];return s&&gk(s)?"":(s&&kk.has(r.toLowerCase())&&EA.test(s)?`${r} ${s}`:r).slice(0,64)}function HA(e){return CA.has((e.split(" ")[0]??"").toLowerCase())}async function rd(e){if(!e.telemetryOptIn)return;let t=wa(e.cmd),n=t&&Co(t)===t&&HA(t)?t:"other",r=e.sessionId?e.sessionId.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64):"";ka("telemetry",{cmd:n,tokensSaved:Math.max(0,Math.round(e.tokensSaved)),...e.tokensRestored?{tokensRestored:Math.max(0,Math.round(e.tokensRestored))}:{},...e.rawTokens!=null?{rawTokens:Math.max(0,Math.round(e.rawTokens))}:{},optimized:e.optimized,...r?{sessionId:r}:{},...e.host?{host:e.host}:{}})}async function DA(e){return ya("telemetry","/api/v1/telemetry",{baseUrl:e,consent:!0})}var SA,EA,$A,TA,AA,RA,kk,yk,CA,PA,OA,ba=k(()=>{"use strict";ci();_s();SA=/^[a-z0-9][a-z0-9._-]*$/i,EA=/^[a-z][a-z-]+$/,$A=/^[A-Za-z_][A-Za-z0-9_]*=/,TA=new Set(["gh","glab","gup","hub","gist"]),AA=/^(gh[a-z]_|github_pat_|gl(?:pat|rt|soat|imt|dt|ft|agent|oas)-|npm_|xox|sk-|sk_|eyj|a(?:kia|sia|gpa|ida|roa|npa)|aiza|hv[sb]\.)/i,RA=24,kk=new Set(["docker","podman","npm","pnpm","yarn","npx","bun","deno","cargo","rustup","go","pip","pip3","uv","poetry","brew","apt","apt-get","dnf","yum","pacman","kubectl","helm","terraform","aws","gcloud","az","systemctl","composer","bundle","gem","dotnet","prisma","tkr","rtk","token"]),yk=new Set([...kk,"git","gh","node","python","python3","bash","sh","zsh","psql","mysql","sqlite3","java","ruby","perl","rg","fd","jq","make","gradle","mvn","vitest","jest","tsc","esbuild","vite","webpack","playwright","rails","rake"]),CA=new Set([...yk,"cd","cat","head","tail","ls","tree","find","grep","wc","nl","sort","cut","uniq","tr","diff","stat","file","du","df","ps","yq","pwd","which","echo","printf","seq","sed","awk","gawk","xargs","sleep","tar","zip","unzip","rsync","scp","ssh","curl","wget","dig","host","nslookup","ping","lsof","journalctl","iptables","ip6tables","open","md5","md5sum","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shasum","sudo","env","command","time","nodejs","bunx","pytest","mypy","dmypy","pyright","basedpyright","ruff","black","ty","gradlew","mvnw","mvnd","ninja","cmake","bazel","bazelisk","sbt","gcc","clang","gmake","swift","xcodebuild","pod","flutter","nx","turbo","next","eslint","prettier","biome","oxlint","golangci-lint","shellcheck","hadolint","yamllint","markdownlint","mdl","sqlfluff","rubocop","rspec","bundler","php","artisan","composer","phpunit","phpstan","pest","paratest","pint","mix","javap","jar","docker-compose","skopeo","oc","ecs","nomad","consul","packer","pulumi","tofu","ansible","ansible-playbook","vault","sops","vercel","netlify","wrangler","firebase","supabase","stripe","shopify","theme-check","redis-cli","liquibase","ollama","ast-grep","just","task","mise","trunk","pre-commit","jj","yadm","gt","quarto","act","jira","fail2ban-client","ctest","pio","platformio","reducer","restore","read-tool","grep-tool","glob-tool","bash-tool"]),PA=new Map([["git",new Set(["status","diff","log","show","blame","ls-files","rev-parse","branch","fetch","pull","push","commit","checkout","switch","merge","rebase","stash","tag","remote","add","reset","restore","clean","grep"])],["gh",new Set(["pr","issue","run","repo","api"])]]),OA=new Set(["-C","-c"])});function xa(e,t,n,r=t){let o=bk.get(r);o||(o=new Map,bk.set(r,o));let s=JSON.stringify([e,n?[...n].sort():null]),i=o.get(s);if(i!==void 0)return i;let a=null;for(let c of t)n&&!n.has(nt(c.slug))||c.matchRegex.test(e)&&(!a||c.priority>a.priority)&&(a=c);if(o.size>=MA){let c=o.keys().next().value;c&&o.delete(c)}return o.set(s,a),a}var bk,MA,od=k(()=>{"use strict";mr();bk=new WeakMap,MA=256});function xk(e){return e.replace(FA,"").replace(jA,"")}var FA,jA,vk=k(()=>{"use strict";FA=/\x1b\[[0-9;?]*[ -/]*[@-~]/g,jA=/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g});function sd(e,t){return t.length===0?e:e.filter(n=>!t.some(r=>r.test(n)))}var _k=k(()=>{"use strict"});function Sk(e){let t=e.trim();if(t.length>4096||!(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))return!1;try{return JSON.parse(t),!0}catch{return!1}}function Ek(e,t){return e.some(n=>n.length>t)&&Sk(e.join(`
|
|
70
|
+
`))?e:e.map(n=>{if(n.length<=t||Sk(n))return n;let r=n.charCodeAt(t-1),o=n.charCodeAt(t),s=r>=55296&&r<=56319&&o>=56320&&o<=57343?t-1:t;return`${n.slice(0,s)}\u2026`})}var $k=k(()=>{"use strict"});function va(e){return`\u2026 (${e} more lines omitted)`}function Tk(e,t){if(e.length<=t)return{kept:e,dropped:[]};let n=Math.ceil(t*.7),r=t-n,o=e.slice(n,e.length-r);return{kept:[...e.slice(0,n),va(o.length),...e.slice(e.length-r)],dropped:o}}var Ak=k(()=>{"use strict"});function Rk(e,t){let n=t>0?t:5,r=[],o=0,s=a=>{o>=n?r.push(`\u2026 ${o} passing checks folded \u2026`):r.push(...a)},i=[];for(let a of e)LA.test(a)&&!Ye.test(a)?(i.push(a),o+=1):(s(i),i=[],o=0,r.push(a));return s(i),r}var LA,Ye,Ss=k(()=>{"use strict";LA=/^\s*(?:[✓✔√]|ok )/,Ye=/✕|✗|×|\bFAIL\b|\bERROR\b|\bFATAL\b|\bError|\berror|Expected|Received|\bfailed\b|^\s*Tests?:|^\s*Test Suites?:/});function Ck(e){return e.map(t=>t.replace(zA,n=>{let r=n.split("/").filter(Boolean);return r.length<=2?n:`\u2026/${r.slice(-2).join("/")}`}))}var zA,Pk=k(()=>{"use strict";zA=/(?:\/[\w.@+-]+){3,}/g});function KA(e){let t=JA.exec(e);return!t||GA.has(t[1])?!1:!/=>|\bfunction\b/.test(t[2])}function VA(e,t,n){let r=t;for(;r<e.length;){if(e[r]==="\\"){r+=2;continue}if(e[r]===n)return!0;r+=1}return!1}function WA(e,t){let n=0,r=null,o=0;for(;o<e.length;){let s=e[o];if(t.inBlockComment){if(s==="*"&&e[o+1]==="/"){t.inBlockComment=!1,o+=2;continue}o+=1;continue}if(t.inTemplate){if(s==="\\"){o+=2;continue}s==="`"&&(t.inTemplate=!1),o+=1;continue}if(r){if(s==="\\"){o+=2;continue}s===r&&(r=null),o+=1;continue}if(s==="/"&&e[o+1]==="/")break;if(s==="/"&&e[o+1]==="*"){t.inBlockComment=!0,o+=2;continue}if(s==="`"){t.inTemplate=!0,o+=1;continue}if(s==="'"||s==='"'){let i=o>0?e[o-1]:"";!(s==="'"&&(i==="<"||i==="&"))&&VA(e,o+1,s)&&(r=s),o+=1;continue}s==="{"||s==="("||s==="["?n+=1:(s==="}"||s===")"||s==="]")&&(n-=1),o+=1}return n}function YA(e,t,n){let r=n==null?"":` (${n}-${n+t-1}): Read offset=${n} limit=${t} before editing`;return`${e}\u2026 ${t} ${t===1?"line":"lines"} folded${r} \u2026`}function id(e){let t=new Array(e.length).fill(!1);for(let n=0;n<e.length;n+=1){let r=qA.exec(e[n]);if(!r)continue;let o=Number(r[1])-1,s=n+1;for(;o>0&&s<e.length&&e[s]==="";)t[s]=!0,o-=1,s+=1;n=s-1}return t}function Es(e,t=3,n=!1){let r=[],o=0;for(;o<e.length;){let s=e[o];if(UA.test(s)&&BA.test(s)||KA(s)||ZA.test(s)){let i={inBlockComment:!1,inTemplate:!1},a=0,c=o,l=!1;for(;c<e.length&&c-o<200;)if(a+=WA(e[c],i),c+=1,a<=0&&!i.inTemplate&&!i.inBlockComment){l=!0;break}let u=c-o;if(l&&u<t){r.push(...e.slice(o,c)),o=c;continue}if(l&&u>=3){let d=u-2,p=/^\s*/.exec(e[o+1]??"")?.[0]??" ";r.push(s),r.push(YA(p,d,n?o+2:null));for(let f=0;f<d-1;f++)r.push("");r.push(e[c-1]),o=c;continue}}r.push(s),o+=1}return r}function Ok(e){let t=e.slice(0,4096);return!(!XA.test(t)||t.split(`
|
|
71
|
+
`).length<6)}var UA,BA,JA,GA,ZA,qA,XA,ad=k(()=>{"use strict";UA=/^(\s*)(?:export\s+)?(?:async\s+)?(?:function|interface|type|const|let|var|def|fn|impl|trait|struct|enum)\s+[\w$]+/,BA=/\{\s*$/,JA=/^\s*(?:(?:public|private|protected|static|async|get|set|readonly|override)\s+)*([\w$]+)\s*\(([^)]*)\)\s*(?::\s*[^{]+)?\{\s*$/,GA=new Set(["if","for","while","switch","catch","do","with","return","else","function","await","yield"]);ZA=/^\s*(?:if|for|while|switch|try|do)\b[^{}]*\{\s*$/;qA=/^\s*… (\d+) lines? folded(?: \(\d+-\d+\): Read offset=\d+ limit=\d+ before editing)? …$/;XA=/\b(?:function|class|interface|import\s+|export\s+|def\s+|fn\s+|impl\s+|package\s+|namespace\s+|using\s+|#include|=>\s*\{|=\s*function)/});function Ik(e){let t=[],n=0,r=()=>{n>0&&t.push(`\u2026 ${n} verbose log line${n===1?"":"s"} dropped \u2026`),n=0};for(let o of e){if(eR.test(o.replace(QA,""))&&!tR.test(o)&&!nR.test(o)){n+=1;continue}r(),t.push(o)}return r(),t}function Nk(e){return e.some(t=>rR.test(t))}function Hk(e){if(e.length===0||Nk(e))return e;let t=[],n=1,r=e[0];for(let o=1;o<e.length;o++){if(e[o]===r){n+=1;continue}t.push(n>1&&r.trim()?`${r} \xD7${n}`:r),r=e[o],n=1}return t.push(n>1&&r.trim()?`${r} \xD7${n}`:r),t}function Dk(e){if(Nk(e))return e;let t=[],n=0;for(let r of e){if(r.trim()===""){n+=1;continue}n>0&&t.push(""),n=0,t.push(r)}return t}var QA,eR,tR,nR,rR,Mk=k(()=>{"use strict";Ss();QA=/^\s*(?:\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?Z?|\d{2}:\d{2}:\d{2}(?:\.\d+)?)\s*/,eR=/^\s*(?:\[(?:DEBUG|TRACE|INFO|VERBOSE)\]|(?:DEBUG|TRACE|INFO|VERBOSE)(?!\s*:))(?=\s|:|$)(?!\s*[+\-*\/%&|^?]*=)/,tR=new RegExp(Ye.source,"i"),nR=/\bWARN(?:ING)?\b/i;rR=/^@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@/});function W(e,t){Fk.set(e,t)}function jk(e){return Fk.get(e)}var Fk,Pe=k(()=>{"use strict";Fk=new Map});function aR(e){if(e<1024)return String(e);let t=["K","M","G","T"],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(1)}${t[r]}`}function cR(e){let t=/^(\d+(?:[.,]\d+)?)([KMGTPkmgtp])?/.exec(e),n=t[2]?iR[t[2].toLowerCase()]:0;return Number(t[1].replace(",","."))*1024**n}function lR(e){let t=sR.exec(e);if(!t)return null;let n=t[4].trim();if(n===""||n==="."||n==="..")return null;let r=t[3],o=/^\d+$/.test(r)?aR(Number(r)):r,s=e.charCodeAt(0)===100;return{name:n,size:o,sizeKey:cR(r),isDir:s,mode:t[1],owner:t[2].replace(/\s+/g," ")}}function uR(e){if(e.length<3)return null;let t=new Map;for(let o of e){let s=o.name.lastIndexOf(".");if(s<=0)continue;let i=o.name.slice(s);t.set(i,(t.get(i)??0)+1)}let n=null,r=0;for(let[o,s]of t)s>r&&(r=s,n=o);return n&&r>=Math.ceil(e.length/2)?`${r} ${n}`:null}function Lk(e,t){let n=[],r=e;for(let o of t)r.length+1+o.length>pR&&r!==e&&r!==" "&&(n.push(r),r=" "),r+=r===" "?o:` ${o}`;return n.push(r),n}function mR(e){let t=e.endsWith("/")?"":e,n=t.indexOf(".",1);return n>0?t.slice(n):""}function hR(e){let t=e.filter(c=>c.trim()!=="");if(t.length<dR)return null;let n=e.findIndex(c=>c.trim()!==""),r=e.length-1-[...e].reverse().findIndex(c=>c.trim()!=="");if(e.slice(n,r+1).some(c=>c.trim()==="")||t.some(c=>c.endsWith(":")||Bk.test(c.trim())||Uk.test(c)||/^total\s+\d+/.test(c)||c!==c.trimEnd()||c.startsWith(" "))||t.filter(c=>/\s/.test(c)).length>t.length*.2)return null;let o=c=>/\s|"/.test(c)?JSON.stringify(c):c,s=new Map;for(let c of t){let l=mR(c),u=s.get(l)??[];u.push(c),s.set(l,u)}let i=[`${t.length} entries:`],a=[];for(let[c,l]of[...s.entries()].sort((u,d)=>d[1].length-u[1].length||u[0].localeCompare(d[0])))c&&l.length>=fR&&l.every(u=>!/\s|"/.test(u))?i.push(...Lk(`*${c} (${l.length}):`,l.map(u=>u.slice(0,-c.length)))):a.push(...l);return a.length&&i.push(...Lk(`other (${a.length}):`,a.map(o))),i.join(`
|
|
72
72
|
`).length<t.join(`
|
|
73
|
-
`).length?i:null}function
|
|
74
|
-
`).trim();if(!t.startsWith("{"))return e;let n;try{n=JSON.parse(t)}catch{return e}if(!n||typeof n!="object"||!n.files||typeof n.files!="object")return e;let r=Object.keys(n.files),o=
|
|
73
|
+
`).length?i:null}function gR(e){if(!e)return!1;let t=/(?:^|[\s;&|(])ls(?=\s|$)([^|;&]*)/.exec(e);if(!t)return!1;for(let n of t[1].trim().split(/\s+/)){if(n==="--")break;if(/^--(?:sort|reverse|time)(?:=|$)/.test(n)||/^-[A-Za-z0-9]+$/.test(n)&&/[tSUfrvX]/.test(n))return!0}return!1}function zk(e){let t=new Map;for(let o of e)t.set(o.mode,(t.get(o.mode)??0)+1);let n=null,r=0;for(let[o,s]of t)s>r&&([n,r]=[o,s]);return r>=2?n:null}function ld(e,t){if(gR(t))return e;let n=hR(e);if(n)return n;let r=[],o=[],s=!1;for(let m of e){if(m.trim()===""||/^total\s+\d+/.test(m))continue;if(Bk.test(m.trim())||!Uk.test(m))return e;let b=lR(m);if(!b){if(/\s\.\.?$/.test(m))continue;return e}s=!0,(b.isDir?r:o).push(b)}if(!s)return e;let i=(m,b)=>m.name.localeCompare(b.name);r.sort(i),o.sort((m,b)=>b.sizeKey-m.sizeKey||i(m,b));let a=[...r,...o],c=a.every(m=>m.owner===a[0].owner)?a[0].owner:null,l=zk(r),u=zk(o),d=[];for(let m of a){let b=m.isDir?l:u,D=`${m.mode===b?"":`${m.mode} `}${c===null?`${m.owner} `:""}${m.isDir?`${m.name}/`:m.name}`;d.push(m.isDir?D:`${D} ${m.size}`)}if(d.length>cd){let m=d.length-cd;d=[...d.slice(0,cd),`\u2026 ${m} more lines omitted`]}let p=o.length===1?"file":"files",f=r.length===1?"dir":"dirs",h=uR(o),g=`${o.length} ${p}, ${r.length} ${f}`+(h?` (${h})`:"")+(c===null?"":`, owner ${c.replace(" ",":")}`)+(l||u?`, mode ${[l&&`dirs ${l}`,u&&`files ${u}`].filter(Boolean).join(", ")} unless shown`:"");return d.push(g),d}var Uk,Bk,oR,sR,iR,cd,dR,fR,pR,Jk=k(()=>{"use strict";Pe();Uk=/^[dbclps\-][rwxsStT\-]{9}[@.+]?(?:\s|$)/,Bk=/^[./~][^\s]*:$/,oR=String.raw`(?:[^\s\d]{3,}\s+\d{1,2}|\d{1,2}\s+[^\s\d]{3,})\s+(?:\d{1,2}:\d{2}|\d{4})|\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:\s+[+-]\d{4})?`,sR=new RegExp(String.raw`^(\S+)\s+\d+\s+(\S+(?:\s+\S+)??)\s+(\d+(?:[.,]\d+)?[KMGTPkmgtp]?i?B?)\s+(?:${oR})\s+(.+)$`),iR={k:1,m:2,g:3,t:4,p:5},cd=1e3;dR=12,fR=3,pR=180;W("smart-ls",ld)});var Gk=k(()=>{"use strict";ad();Pe();W("smart-read",e=>Es(e))});function kR(e){let t=e[0].split("/");for(let n of e.slice(1)){let r=n.split("/"),o=0;for(;o<t.length&&o<r.length&&t[o]===r[o];)o+=1;if(t=t.slice(0,o),t.length===0)break}return t.join("/")}function yR(e){if(e.length<2||e.some(o=>o.startsWith('"')))return"";let t=e[0];for(let o of e.slice(1)){let s=0;for(;s<t.length&&s<o.length&&t[t.length-1-s]===o[o.length-1-s];)s+=1;if(t=t.slice(t.length-s),!t)return""}let n=t.indexOf("."),r=n<0?"":t.slice(n);return r.length>=3&&e.every(o=>o.length>r.length)?r:""}function wR(e){let t=e.filter(l=>l.trim()!=="");if(t.length===0||t.filter(l=>!/\s/.test(l.trim())).length<t.length*.6)return e;let r=new Map,o=[],s=0;for(let l of t){let u=l.trim();if(u.startsWith("find:")){o.push(u);continue}let d=u.replace(/^\.\//,"").replace(/\/+$/,""),p=d.lastIndexOf("/"),f=p>0?d.slice(0,p):p===0?"/":"",h=p>=0?d.slice(p+1):d;if(!h)continue;let g=r.get(f)??[];g.push(/\s/.test(h)?`"${h}"`:h),r.set(f,g),s+=1}if(s===0)return e;let i=[...r.keys()].sort(),a=i.every(l=>l!=="")&&!i.includes("/")?kR(i):"",c=[`${s}F ${i.length}D${a?` in ${a}/`:""}:`];for(let l of i){let u=l==="/"?"/":a?l.slice(a.length).replace(/^\//,""):l,d=r.get(l),p=yR(d),f=p?d.map(h=>h.slice(0,-p.length)):d;c.push(`${u==="/"?"/":u?`${u}/`:"./"} (${d.length}${p?`, *${p}`:""}): ${f.join(" ")}`)}if(c.length+o.length>Kk){let l=Math.max(0,Kk-o.length),u=c.length-l;return[...c.slice(0,l),`\u2026 ${u} more lines omitted`,...o]}return[...c,...o]}var Kk,Zk=k(()=>{"use strict";Pe();Kk=1e3;W("smart-find",wR)});function xR(e){let t=[];for(let i of e){if(i.trim()==="")continue;let a=bR.exec(i);if(!a)return e;t.push({counts:a[1].replace(/\s+/g," "),path:a[2]})}let n=t.filter(i=>i.path!=="total");if(n.length<2)return t.length?t.map(i=>`${i.counts} ${i.path}`):e;let r=n.map(i=>i.path.includes("/")?i.path.slice(0,i.path.lastIndexOf("/")+1):""),o=r[0];for(let i of r)for(;o&&!i.startsWith(o);)o=o.slice(0,o.slice(0,-1).lastIndexOf("/")+1);let s=o?[`in ${o}:`]:[];for(let i of t)s.push(`${i.counts} ${i.path!=="total"&&o?i.path.slice(o.length):i.path}`);return s}var bR,Vk=k(()=>{"use strict";Pe();bR=/^\s*(\d+(?:\s+\d+){0,3})\s+(\S.*)$/;W("smart-wc",xR)});function SR(e){let t=[];for(let n=0;n<e.length;n+=1){let r=1;for(;n+r<e.length&&e[n+r]===e[n];)r+=1;t.push(r>1?`${e[n]} \xD7${r}`:e[n]),n+=r-1}return t}function ER(e){if(e.length<=ud+dd+1)return e;let t=e.slice(ud,-dd),n=t.filter(o=>_R.test(o)),r=t.length-n.length;return r===0?e:[...e.slice(0,ud),...n,`\u2026 ${r} more lines omitted`,...e.slice(-dd)]}function $R(e){if(!e.some(o=>Wk.test(o)))return e;let t=[],n=[],r=()=>{t.push(...ER(SR(n))),n=[]};for(let o=0;o<e.length;o+=1){let s=e[o];if(vR.test(s))return r(),t.push(...e.slice(o)),t;if(Wk.test(s)){r(),t.push(s);continue}n.push(s)}return r(),t}var Wk,vR,_R,ud,dd,qk=k(()=>{"use strict";Pe();Ss();Wk=/^\s*\d+\/\d+ Test\s+#\s*\d+: \S+ \.{2,}/,vR=/^\d+% tests passed, \d+ tests? failed out of \d+$/,_R=new RegExp(`${Ye.source}|\\*\\*\\*|Exception|FAIL|ERROR`),ud=3,dd=8;W("smart-ctest",$R)});function TR(e){if(e.length<2)return"";let t=e[0].slice(0,e[0].lastIndexOf("/")+1);for(let n of e)for(;t&&!n.startsWith(t);)t=t.slice(0,t.slice(0,-1).lastIndexOf("/")+1);return t}function AR(e){let t=e.join(`
|
|
74
|
+
`).trim();if(!t.startsWith("{"))return e;let n;try{n=JSON.parse(t)}catch{return e}if(!n||typeof n!="object"||!n.files||typeof n.files!="object")return e;let r=Object.keys(n.files),o=TR(r),s=r.reduce((a,c)=>a+(n.files[c].messages?.length??0),0),i=[`phpstan: ${s} error${s===1?"":"s"} in ${r.length} file${r.length===1?"":"s"}${o?` under ${o}`:""}`];for(let a of r){let c=n.files[a].messages??[];i.push(`${a.slice(o.length)} (${c.length})`);for(let l of c){let u=typeof l.line=="number"?`:${l.line}`:":?",d=typeof l.tip=="string"&&l.tip?` \u2014 ${l.tip}`:"";i.push(` ${u} ${String(l.message??"")}${d}`)}}for(let a of Array.isArray(n.errors)?n.errors:[])i.push(`error: ${String(a)}`);return i}var Yk=k(()=>{"use strict";Pe();W("smart-phpstan",AR)});function PR(e){if(!e.some(n=>fd.test(n)))return e;let t=[];for(let n=0;n<e.length;n+=1){let r=e[n];fd.test(r)||RR.test(r)&&!fd.test(e[n+1]??"")&&!CR.test(r)||t.push(r)}return t}var RR,fd,CR,Xk=k(()=>{"use strict";Pe();Ss();RR=/^\d+ \| /,fd=/^\s+\^\s*$/,CR=new RegExp(`${Ye.source}|\\*\\*\\*|Exception|FAIL|ERROR`);W("bun-frames",PR)});function MR(e){let t=e.split("\r").filter(n=>n.trim()!=="");return t.length>0&&t.every(n=>NR.test(n))}function FR(e){let t=e.some(r=>HR.test(r)),n=[];for(let r=0;r<e.length;r+=1){let o=e[r];if(OR.test(o)){let s=r+1;for(IR.test(e[s]??"")&&(s+=1);MR(e[s]??"");)s+=1;r=s-1;continue}t&&DR.test(o)||n.push(o)}return n}var OR,IR,NR,HR,DR,Qk=k(()=>{"use strict";Pe();OR=/^\s*% Total\s+% Received\s+% Xferd\s+Average Speed/,IR=/^\s+Dload\s+Upload\s+Total\s+Spent\s+Left\s+Speed/,NR=/^\s*\d+\s+[\d.]+[kMGTP]?\s+\d+\s+[\d.]+[kMGTP]?\s+\d+\s+[\d.]+[kMGTP]?\s+[\d.]+[kMGTP]?\s+[\d.]+[kMGTP]?\s+[-\d:]+\s+[-\d:]+\s+[-\d:]+\s+[\d.]+[kMGTP]?\s*$/,HR=/^\* (?:Trying |Connected to |Host .* was resolved|Connection #\d+|IPv[46]:|Uses proxy)|^> [A-Z]+ \S+ HTTP\/[\d.]+\s*$|^< HTTP\/[\d.]+ \d{3}/,DR=/^(?:\* |[<>] (?:[A-Za-z][\w-]*: .*|[A-Z]+ \S+ HTTP\/[\d.]+|HTTP\/[\d.]+ .*)$|[<>]\s?$|[{}] \[\d+ bytes data\])/;W("curl-progress",FR)});function ny(e,t=!1){let n=t?e.trimEnd():e.trim();return n.length>ey?`${n.slice(0,ey)}\u2026`:n}function zR(e){let t=[],n="";for(let r of e){let o=n?`${n}, ${r}`:r;o.length>=LR&&n?(t.push(`${n},`),n=r):n=o}return n&&t.push(n),t}function UR(e){let t=null;for(let n of e){let r=n.split("/").slice(0,-1);if(t===null){t=r;continue}let o=0;for(;o<t.length&&o<r.length&&t[o]===r[o];)o+=1;if(t=t.slice(0,o),t.length===0)return""}return t?t.join("/"):""}function iy(e){return e.includes("/")||e.includes("\\")||/\.[A-Za-z][\w-]*$/.test(e)}function BR(e,t,n){return/^\d+$/.test(e)?!1:iy(e)?!0:(t||n)&&/^[\w.-]+$/.test(e)}function JR(e){let t=0,n=0;for(let r of e){let o=(ry.exec(r)??oy.exec(r)??sy.exec(r))?.[1];o&&(n+=1,iy(o)&&(t+=1))}return t>=2&&t*2>n}function ay(e,t={}){let n=e.filter(m=>m.trim()!=="");if(n.length===0)return e;let r=JR(n),o=new Map,s=new Map,i=null,a=0,c=0,l=null;for(let m of n){if(m==="--"){i&&o.get(i).push({separator:!0});continue}if(/^[A-Za-z]:[\\/]/.test(m))return e;let b=ry.exec(m),E=oy.exec(m);if(b&&E)return e;let D=b||E?null:sy.exec(m),C=(b??E??D)?.[1];if(!C||!BR(C,!!b,r))return e;let N=b?{line:b[2],content:b[3],context:!1}:E?{line:E[2],content:E[3],context:!0}:{line:"",content:D[2],context:!1},te=o.get(C)??[];te.push(N),o.set(C,te);let V=N.line?Number(N.line):NaN,ve=t.astGrep&&C===i&&l!==null&&V===l+1;(t.astGrep?!ve:!N.context)&&(a+=1,s.set(C,(s.get(C)??0)+1)),l=t.astGrep&&Number.isFinite(V)?V:null,c+=1,i=C}if(o.size===c)return e;let u=[...o.keys()].sort((m,b)=>{let E=ty.test(m)?1:0,D=ty.test(b)?1:0;return E-D||(m<b?-1:m>b?1:0)}),d=u.length>1?UR(u):"",p=m=>d?m.slice(d.length+1):m,f=[];for(let m of u){f.push(`${p(m)} (${s.get(m)??0}):`);for(let b of o.get(m))"separator"in b?f.push(" --"):b.line?f.push(` ${b.line}${b.context?"-":":"} ${ny(b.content,t.astGrep)}`):f.push(` ${ny(b.content,t.astGrep)}`)}let h=u.length>1&&f.length>jR?zR(u.map(m=>`${p(m)} (${s.get(m)??0})`)):[],g=[`${a}m ${u.length}f${d?` in ${d}/`:""}:`,...h,"",...f];if(g.length>pd){let m=g.length-pd;return[...g.slice(0,pd),`\u2026 ${m} more lines omitted`]}return g}var pd,ey,jR,LR,ry,oy,sy,ty,cy=k(()=>{"use strict";Pe();Qk();pd=1e3,ey=200,jR=60,LR=190,ry=/^([^\s:]+):(\d+):(.*)$/,oy=/^([^:]+?)-(\d+)-(.*)$/,sy=/^([^\s:]+):(.*)$/,ty=/(?:^|\/)(?:__tests__|tests?|spec|fixtures?|__mocks__|__snapshots__)\/|\.(?:test|spec)\.[^/]+$/i;W("smart-grep",ay);W("smart-grep-ast",e=>ay(e,{astGrep:!0}))});function tC(e){let t=[];for(let c=0;c<e.length;c+=1){let l=uy.exec(e[c]);if(!l)continue;let u=c+1,d=null;e[u]?.startsWith("Merge: ")&&(d=e[u].slice(7),u+=1);let p=qR.exec(e[u]??""),f=YR.exec(e[u+1]??"");if(!p||!f)return null;let h=XR.indexOf(f[1])+1;if(h===0)return null;t.push({at:c,hash:l[1].slice(0,QR),refs:l[2]??"",merge:d,author:p[1],date:`${f[4]}-${String(h).padStart(2,"0")}-${f[2].padStart(2,"0")} ${f[3]}`,zone:f[5],end:u+2})}if(t.length===0)return null;let n=[...new Set(t.map(c=>c.author))],r=n.length===1&&t.length>1?n[0]:null,o=n.length>1&&n.length<=eC&&t.length>n.length,s=t.length>1&&t.every(c=>c.zone===t[0].zone)?t[0].zone:null,i=r?[`author: ${r}`]:o?[`authors: ${n.map((c,l)=>`[${l+1}] ${c}`).join("; ")}`]:[];s&&i.push(`dates: UTC${s}`);let a=0;for(let c of t){i.push(...e.slice(a,c.at));let l=r?"":o?` [${n.indexOf(c.author)+1}]`:` ${c.author}`;i.push(`${c.hash} ${c.date}${s?"":` ${c.zone}`}${l}${c.merge?` merge ${c.merge}`:""}${c.refs}`),a=c.end}return i.push(...e.slice(a)),i}function nC(e){if(!e.some(r=>ly.test(r)))return e;let t=e.some(r=>uy.test(r))&&!e.some(r=>/^[|\\/*]/.test(r)),n=rC(e,t?WR:VR);return tC(n)??n}function rC(e,t){let n=[],r=0,o=0,s=0,i="",a=!1,c=!1,l=()=>{o>0&&n.push(`${i} \u2026 ${o} ${o===1?"line":"lines"} folded \u2026`),o=0};for(let u of e){let d=u.slice(0,s),p=GR.test(d),f=p?u.slice(s):u,h=KR.test(f),g=a&&h?null:ly.exec(u);if(g){l(),r=0,s=g[1]?.length??0,a=!0,c=!1,n.push(u);continue}if(/^diff --(?:git|cc|combined) /.test(f)&&(c=!0),h&&!c&&!(s>0&&f.trim().length===0)){if(ZR.test(f)){n.push(u);continue}r+=1,r<=t?n.push(u):(o+=1,i=p?d:"");continue}l(),n.push(u)}return l(),n}var ly,GR,KR,ZR,VR,WR,uy,qR,YR,XR,QR,eC,dy=k(()=>{"use strict";Pe();ly=/^(?:([|\\/ ._-]*\*[|\\/* ._-]* ))?commit [0-9a-f]{7,40}\b/,GR=/^[|\\/* ._-]*$/,KR=/^ {4}/,ZR=/^ {4}(?:Co-[Aa]uthored-[Bb]y|Signed-off-by|Reviewed-by|Acked-by|Tested-by|Reported-by|Fixes|Closes):/,VR=2,WR=1,uy=/^commit ([0-9a-f]{40})(\s.*)?$/,qR=/^Author:\s+(.+)$/,YR=/^Date:\s+(?:[A-Z][a-z]{2} )?([A-Z][a-z]{2}) +(\d{1,2}) (\d{2}:\d{2}):\d{2} (\d{4}) ([+-]\d{4})$/,XR=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],QR=12,eC=5;W("smart-log",nC)});var oC,sC,iC,fy=k(()=>{"use strict";Pe();oC=/^[\s=]+$/,sC=/^\s*=+\s+(.*?)\s+=+\s*$/,iC=512;W("strip-banners",e=>{let t=[];for(let n of e){if(oC.test(n))continue;let r=n.length<=iC?sC.exec(n):null;t.push(r?r[1]:n)}return t})});function aC(e){let t=[],n=0,r=0;for(;r<e.length;){let o=e[r].replace(/\s+$/,"");if(o===""){n+=1,r+=1,n<=1&&t.push("");continue}n=0;let s=1;for(;r+s<e.length&&e[r+s].replace(/\s+$/,"")===o;)s+=1;if(s>=3)t.push(o),t.push(` \u2026 (repeated ${s}x)`);else for(let i=0;i<s;i++)t.push(o);r+=s}for(;t.length>0&&t[t.length-1]==="";)t.pop();return t}var py=k(()=>{"use strict";Pe();W("squeeze-output",aC)});function cC(e){return e==="compact"?.6:e==="minimal"?.3:1}function uC(e){let[t,n,r,o]=e.slice(-4);if(!t||!n||!r||!o||!/^\s*Test Files\s+([1-9]\d*) passed \(\1\)$/.test(t)||!/^\s*Tests\s+([1-9]\d*) passed \(\1\)$/.test(n)||!/^\s*Start at\s+\d{2}:\d{2}:\d{2}$/.test(r))return e;let s=/^(\s*Duration\s+\d+(?:\.\d+)?(?:ms|s)) \(transform [^\n]+\)$/.exec(o)?.[1];return s?[...e.slice(0,-4).filter((a,c)=>c>2||!/^ RUN v\d+\.\d+\.\d+(?:[\w.+-]*) .+$/.test(a)),t,n,s]:e}function dC(e){let t=my.get(e);if(t)return t;let n=e.strip_lines_matching.map(s=>new RegExp(s)),r=(e.drop_lines_matching??[]).map(s=>new RegExp(s)),o={def:e,stripRegexes:n,dropRegexes:r};return my.set(e,o),o}function mC(e){return!!e&&fC.test(e)}function hC(e,t,n){if(e==="smart-ls")return ld(t,n);let r=jk(e);return r?r(t):t}function hy(e,t,n={}){return gC(e,t,n).text}function gC(e,t,n={}){let r=n.verbosity??"normal";if(!t.strip_ansi&&t.strip_lines_matching.length===0&&(t.drop_lines_matching??[]).length===0&&!t.transform&&!t.mask_abs_paths&&!t.fold_passing&&!t.truncate_lines_at&&!t.max_lines&&!t.on_empty&&!n.smartCode&&r==="normal")return{text:e,droppedTail:null};let o=dC(t),s=!t.preserve_exact&&e.includes(`\r
|
|
75
75
|
`)?e.replace(/\r\n/g,`
|
|
76
|
-
`):e;t.strip_ansi&&(s=
|
|
76
|
+
`):e;t.strip_ansi&&(s=xk(s));let i=s.endsWith(`
|
|
77
77
|
`),a=(i?s.slice(0,-1):s).split(`
|
|
78
|
-
`);o.stripRegexes.length&&(a=t.keep_failures?a.filter(p=>
|
|
79
|
-
`):null,a=[...a.slice(0,
|
|
80
|
-
`),a=[...a.slice(0,
|
|
78
|
+
`);o.stripRegexes.length&&(a=t.keep_failures?a.filter(p=>Ye.test(p)||!o.stripRegexes.some(f=>f.test(p))):sd(a,o.stripRegexes)),o.dropRegexes.length&&(a=sd(a,o.dropRegexes)),r!=="normal"&&!t.preserve_exact&&(a=Hk(a),a=Dk(a)),r==="minimal"&&!t.preserve_exact&&(a=Ik(a),(t.slug==="vitest"||t.slug==="npm-test")&&(a=uC(a)));let c=t.transform==="smart-read"&&n.smartCode!==!0?r==="compact"?8:r==="minimal"?6:3:3;!t.preserve_exact&&(n.smartCode||n.smartCode===void 0&&r!=="normal"&&Ok(s))&&(a=Es(a,c)),t.transform&&(t.transform==="smart-read"?a=Es(a,c,t.slug==="read-tool"):a=hC(t.transform,a,n.cmd));let l=t.slug==="read-tool";if(!l){let p=id(a);p.some(Boolean)&&(a=a.filter((f,h)=>!p[h]))}t.mask_abs_paths&&(a=Ck(a)),t.fold_passing&&(a=Rk(a,t.fold_passing_threshold??5)),t.truncate_lines_at&&(a=Ek(a,t.truncate_lines_at));let u=null;if(t.max_lines){let p=t.scale_with_level?cC(n.verbosity):1,f=Math.min(t.max_lines,Math.max(lC,Math.round(t.max_lines*p))),h=l?id(a):null,g=h?h.filter(m=>!m).length:a.length;if(g>f){let m=f;if(h){let E=0;for(m=0;m<a.length&&E<f;)h[m]||(E+=1),m+=1}let b=g-f;if(t.keep_failures){let E=a.slice(m),D=E.filter(N=>!Ye.test(N)),C=E.reduce((N,te,V)=>N+(!Ye.test(te)&&!h?.[m+V]?1:0),0);u=D.length>0?D.join(`
|
|
79
|
+
`):null,a=[...a.slice(0,m),...C>0?[va(C)]:[],...E.filter(N=>Ye.test(N))]}else if(l)u=a.slice(m).join(`
|
|
80
|
+
`),a=[...a.slice(0,m),va(b)];else{let{kept:E,dropped:D}=Tk(a,f);u=D.length>0?D.join(`
|
|
81
81
|
`):null,a=E}}}let d=a.join(`
|
|
82
82
|
`);return i&&d.length>0&&(d+=`
|
|
83
|
-
`),d.trim().length===0&&t.on_empty&&(e.length===0||e.trim().length>0)&&(n.exitCode==null||n.exitCode===0||n.exitCode===1&&
|
|
83
|
+
`),d.trim().length===0&&t.on_empty&&(e.length===0||e.trim().length>0)&&(n.exitCode==null||n.exitCode===0||n.exitCode===1&&pC.has(t.slug))&&!mC(n.cmd)&&(d=t.on_empty),{text:d,droppedTail:u}}var lC,my,fC,pC,gy=k(()=>{"use strict";vk();_k();$k();Ak();Ss();Pk();ad();Mk();Pe();Jk();Gk();Zk();Vk();qk();Yk();Xk();cy();dy();fy();py();lC=20;my=new WeakMap;fC=new RegExp([String.raw`(?:^|[\s;&|(])grep(?=\s)[^|;&]*?\s(?:-[A-Za-z]*q[A-Za-z]*|--quiet|--silent)(?=\s|$)`,String.raw`(?:^|[\s;&|(])find(?=\s)[^|;&]*?\s-(?:delete|quit|exec|execdir|ok|okdir|fprint0?|fprintf|fls|prune)(?=\s|$)`,String.raw`(?:^|[\s;&|(])(?:ruff|black|flake8)(?=\s)[^|;&]*?\s(?:-q+|--quiet)(?=\s|$)`,String.raw`(?:^|[\s;&|(])eslint(?=\s)[^|;&]*?\s(?:-o|--output-file)(?=[\s=]|$)`,String.raw`(?:^|[\s;&|(])prettier(?=\s)[^|;&]*?\s(?:-l|--list-different)(?=\s|$)`].join("|")),pC=new Set(["grep","ast-grep"])});function kC(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().length+1]}function yC(e,t,n){let r=e.split(/\r?\n/),o="",s=(Math.log10(t+1)|0)+1;for(let i=t-1;i<=t+1;i++){let a=r[i-1];a&&(o+=i.toString().padEnd(s," "),o+=": ",o+=a,o+=`
|
|
84
84
|
`,i===t&&(o+=" ".repeat(s+n+2),o+=`^
|
|
85
|
-
`))}return o}var T,Zn=k(()=>{T=class e extends Error{line;column;codeblock;constructor(t,n){let[r,o]=
|
|
85
|
+
`))}return o}var T,Zn=k(()=>{T=class e extends Error{line;column;codeblock;constructor(t,n){let[r,o]=kC(n.toml,n.ptr),s=yC(n.toml,r,o);super(`Invalid TOML document: ${t}
|
|
86
86
|
|
|
87
|
-
${s}`,n),this.line=r,this.column=o,this.codeblock=s}static x(t,n,r){throw new e(t,{toml:n.s,ptr:r??n.p})}}});function
|
|
88
|
-
`:n===102?i+="\f":n===114?i+="\r":n===101?i+="\x1B":n===34?i+='"':n===92?i+="\\":T.x("unrecognised escape sequence",e),a=e.p+1,c=0);else n!==32&&n!==9&&(c===2&&T.x("invalid escape: only line-ending whitespace may be escaped",e,a),c=!o&&n===92?1:0,a=e.p);T.x("unfinished string",e,t)}var dd=k(()=>{Zn();});var uC,Kn,fd=k(()=>{uC=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,Kn=class e extends Date{#t=!1;#n=!1;#e=null;constructor(t,n,r){let o=!0,s=!0,i="Z",a;if(typeof t=="string")if(n)e:{if(n<3){if(+t.slice(11,13)>23){t="";break e}n===2?(i=null,t+="Z"):(a=t.charCodeAt(t.length-1))!==90&&a!==122&&(i=t.slice(t.length-6)),r&&(t=t.slice(0,10)+"T"+t.slice(11))}else n===4&&(t=+t.slice(0,2)>23?"":`0000-01-01T${t}Z`);o=n!==4,s=n!==3}else{let c=t.match(uC);c?(c[1]||(o=!1,t=`0000-01-01T${t}`),s=!!c[2],s&&t[10]===" "&&(t=t.replace(" ","T")),c[2]&&+c[2]>23?t="":(i=c[3]||null,!i&&s&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=o,this.#n=s,this.#e=i)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z"||this.#e==="z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let r=new e(t);return r.#e=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#t=!1,n.#e=null,n}}});function Ue(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function md(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function xs(e,t){let n=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||T.x("document contains excessively nested structures. aborting.",e);let o=r===91?fy(e):dy(e);return e.d++,o}return r===34||r===39?xa(e):r===116?((e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)&&T.x("invalid value",e,n),e.p++,!0):r===102?((e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)&&T.x("invalid value",e,n),e.p++,!1):r===43||r===45?va(e,e.p,e.s.charCodeAt(++e.p),44-r,t):e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45?dC(e,r,t):e.s.charCodeAt(e.p+2)===58?fC(e,r,t):va(e,e.p,r,0,t)}function va(e,t,n,r,o){let s=n,i=0,a=!1;if(s===105)return(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)&&T.x("invalid value",e,t),e.p++,(r||1)/0;if(s===110)return(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)&&T.x("invalid value",e,t),e.p++,NaN;if(s===48){if(++e.p>=e.s.length||md(s=e.s.charCodeAt(e.p),o))return e.bi===!0?0n:0;if(!r){if(s===120)return pd(e,t,16,o);if(s===98)return pd(e,t,2,o);if(s===111)return pd(e,t,8,o)}s===46?i=2:s===101||s===69?i=4:T.x("illegal leading zero",e,t)}else Ue(s)||T.x("invalid value",e,t);for(;++e.p<e.s.length&&(s=e.s.charCodeAt(e.p),!md(s,o));)i||(i=1),s===95?(i&1||T.x("illegal underscore",e),i+=11,a=!0):i===1&&s===46?i=2:(i===1||i===3)&&(s===101||s===69)?i=4:i===4&&(s===43||s===45)||(Ue(s)?i>9?i-=11:i&1||i++:T.x("illegal character in numeric literal",e));if(!i){let l=(n-48)*(r||1);return e.bi===!0?BigInt(l):l}i&1||T.x("unfinished numeric value",e,t);let c=e.s.slice(t,e.p);return a&&(c=c.replaceAll("_","")),i>1?parseFloat(c):uy(e,c,10,t)}function pd(e,t,n,r){let o,s=1;for(;++e.p<e.s.length&&(o=e.s.charCodeAt(e.p),!md(o,r));)o===95?(s&1&&T.x("illegal underscore",e),s=3):Ue(o,n)?s&1&&s--:T.x("illegal character in numeric literal",e);s&1&&T.x("unfinished numeric value",e);let i=e.s.slice(t+2,e.p);return s&&(i=i.replaceAll("_","")),uy(e,i,n,t)}function uy(e,t,n,r){if(e.bi!==!0)e:{let o=parseInt(t,n);if(!Number.isSafeInteger(o)){if(e.bi)break e;T.x("integer value cannot be represented losslessly",e,r)}return o}return BigInt(n===10?t:(n===2?"0b":n===8?"0o":"0x")+t)}function dC(e,t,n){let r=e.p++,o;if(!Ue(t)||!Ue(e.s.charCodeAt(e.p++))||!Ue(e.s.charCodeAt(e.p++))||!Ue(e.s.charCodeAt(e.p++)))return va(e,e.p=r,t,0,n);if(e.p+=5,Ue(e.s.charCodeAt(e.p++))||T.x("invalid date-time: date part is malformed",e,r),e.p>=e.s.length||((t=e.s.charCodeAt(e.p))!==32||(o=!0,!Ue(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116){let i=e.s.slice(r,e.p);return bs(e,i,3,!1,r)}if(e.s.charCodeAt(e.p+=3)!==58&&T.x("invalid date-time: time part is malformed",e,r),e.s.charCodeAt(e.p+=3)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;Ue(e.s.charCodeAt(++e.p)););if(t=e.s.charCodeAt(e.p)){if(t===90||t===122){let i=e.s.slice(r,++e.p);return bs(e,i,1,o,r,"[+00:00]")}if(t===43||t===45){let i=e.s.slice(r,e.p+=6);return bs(e,i,1,o,r,!e.ld&&"["+e.s.slice(e.p-6,e.p)+"]")}}let s=e.s.slice(r,e.p);return bs(e,s,2,o,r)}function fC(e,t,n){let r=e.p;if(!Ue(t)||!Ue(e.s.charCodeAt(++e.p)))return va(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;Ue(e.s.charCodeAt(++e.p)););let o=e.s.slice(r,e.p);return bs(e,o,4,!1,r)}function bs(e,t,n,r,o,s){if(e.ld){let i=new Kn(t,n,r);return i.isValid()||T.x("invalid date",e,o),i}try{switch(s&&(t+=s),n){case 1:return Temporal.ZonedDateTime.from(t);case 2:return Temporal.PlainDateTime.from(t);case 3:return Temporal.PlainDate.from(t);case 4:return Temporal.PlainTime.from(t)}}catch(i){T.x(i instanceof Error?i.message:""+i,e,o)}}var hd=k(()=>{dd();gd();Zn();fd();});function pC(e){for(;e.p<e.s.length;e.p++){let t=e.s.charCodeAt(e.p);if(t===10)break;if(t===13&&e.s.charCodeAt(e.p+1)===10){e.p++;break}(t<32&&t!==9||t===127)&&T.x("control characters are not allowed in comments",e)}}function ct(e,t,n){let r;for(;e.p<e.s.length;){for(;e.p<e.s.length&&((r=e.s.charCodeAt(e.p))===32||r===9||!t&&(r===10||r===13&&e.s.charCodeAt(e.p+1)===10));)e.p++;if(n||r!==35)break;pC(e)}}var kd=k(()=>{Zn();});function _a(e,t=61){let n,r=0,o=[],s,i=e.s.charCodeAt(n=e.p);do{if(i===t)return r||T.x("unexpected end of key",e),r===1&&o.push(e.s.slice(s,e.p)),e.p++,o;i===46?(r||T.x("illegal empty bare key",e),r===1&&o.push(e.s.slice(s,e.p)),r=0):!r&&(i===34||i===39)?(i===e.s.charCodeAt(e.p+1)&&i===e.s.charCodeAt(e.p+2)&&T.x("illegal quoted key: multiline strings are not allowed",e),o.push(xa(e)),r=2,e.p--):i===32||i===9?r===1&&(o.push(e.s.slice(s,e.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?T.x("illegal character in key",e):r||(r=1,s=e.p)}while(i=e.s.charCodeAt(++e.p));T.x("incomplete key-value: cannot find end of key",e,n)}function dy(e){let t=e.p++,n=Object.create(null),r=new Set,o;for(;e.p<e.s.length;){if(ct(e),(o=e.s.charCodeAt(e.p))===125)return e.p++,n;let s,i=n,a=!1,c=e.p,l=_a(e);for(let d=0;d<l.length;d++){d&&(i=a?i[s]:i[s]=Object.create(null)),s=l[d],(a=Object.hasOwn(i,s))&&(typeof i[s]!="object"||r.has(i[s]))&&T.x("trying to redefine an already defined value",e,c);let p=s==="__proto__";if(e.uk&&(p||s==="constructor")){i=e.uk!==1&&T.x("document contains an unsafe property",e,c);break}!a&&p&&Object.defineProperty(i,s,{enumerable:!0,configurable:!0,writable:!0})}a&&T.x("trying to redefine an already defined value",e,c),ct(e,!0,!0);let u=xs(e,125);if(i&&typeof(i[s]=u)=="object"&&r.add(u),ct(e),(o=e.s.charCodeAt(e.p++))===125)return n;o!==44&&T.x("expected comma or end of structure",e,e.p-1)}T.x("unfinished table",e,t)}function fy(e){let t=e.p++,n=[],r;for(;e.p<e.s.length;){if(ct(e),(r=e.s.charCodeAt(e.p))===93)return e.p++,n;if(n.push(xs(e,93)),ct(e),(r=e.s.charCodeAt(e.p++))===93)return n;r!==44&&T.x("expected comma or end of structure",e,e.p-1)}T.x("unfinished array",e,t)}var gd=k(()=>{dd();hd();kd();Zn();});function py(e,t,n,r,o){let s=n,i=r,a,c=!1,l;for(let u=0;u<t.length;u++){if(u){if(s=c?s[a]:s[a]=Object.create(null),i=(l=i[a]).c,o===0&&(l.t===1||l.t===2))return null;if(l.t===2){let d=s.length-1;s=s[d],i=i[d].c}}if(a=t[u],(c=Object.hasOwn(s,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!c){let d=a==="__proto__";if(e.uk&&(d||a==="constructor"))return!1;d&&(Object.defineProperty(s,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:u<t.length-1&&o===2?3:o,d:!1,i:0,c:Object.create(null)}}}if(l=i[a],l.t!==o&&!(o===1&&l.t===3)||(o===2&&(l.d||(l.d=!0,s[a]=[]),s[a].push(s=Object.create(null)),l.c[l.i++]=l={t:1,d:!1,i:0,c:Object.create(null)}),l.d))return null;if(l.d=!0,o===1)s=c?s[a]:s[a]=Object.create(null);else if(o===0&&c)return null;return[a,s,l.c]}function my(e,t,n){(t===null||e.uk===2)&&T.x(t===null?"trying to redefine an already defined table or value":"document contains an unsafe property",e,n)}function vs(e,t={}){let n={s:e,p:0,d:t.maxDepth??1e3,bi:t.integersAsBigInt??!1,ld:t.useLegacyDate??!0,uk:t.unsafeKeyBehaviour==="throw"?2:t.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),o=Object.create(null),s,i=!1,a=r,c=o;for(e.charCodeAt(0)===65279&&n.p++,ct(n);n.p<e.length;){if(e.charCodeAt(n.p)===91){let l=e.charCodeAt(++n.p)===91;s=n.p+=+l,i=!1;let u=_a(n,93);l&&(e.charCodeAt(n.p)!==93&&T.x("expected end of table array declaration",n),n.p++);let d=py(n,u,r,o,l?2:1);d?(c=d[2],a=d[1]):(my(n,d,s),i=!0)}else{s=n.p;let l=_a(n),u=py(n,l,a,c,0);!u&&!i&&my(n,u,s),ct(n,!0,!0);let d=xs(n,void 0);u&&!i&&(u[1][u[0]]=d)}ct(n,!0),n.p<e.length&&(s=e.charCodeAt(n.p))!==10&&(s!==13||e.charCodeAt(n.p+1)!==10)&&T.x("each key-value declaration must be followed by an end-of-line",n),ct(n)}return r}var hy=k(()=>{gd();hd();kd();Zn();});function _s(e){let t=typeof e;if(t==="object"){if(Array.isArray(e))return"array";if(typeof e.getUTCDate=="function"&&e instanceof Date)return"date";if(globalThis.Temporal){if(e.until){if(e instanceof Temporal.ZonedDateTime)return"temporal/tz+uc";if(e instanceof Temporal.PlainDateTime||e instanceof Temporal.PlainDate)return"temporal/uc";if(e instanceof Temporal.PlainTime||e instanceof Temporal.Instant)return"temporal";if(e instanceof Temporal.PlainYearMonth)return"temporal/x"}else if(e.toPlainDate&&e instanceof Temporal.PlainMonthDay||e.negated&&e instanceof Temporal.Duration)return"temporal/x"}}return t}function hC(e){for(let t=0;t<e.length;t++)if(_s(e[t])!=="object")return!1;return e.length!=0}function ky(e){return JSON.stringify(e).replaceAll("\x7F","\\u007f")}function gC(e){return ky(gy?e.toWellFormed():e)}function yy(e){if(mC.test(e))return e;if(gy&&!e.isWellFormed())throw new RangeError("key contains illegal lone surrogates");return ky(e)}function yd(e,t,n,r,o){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");switch(t){case"number":if(isNaN(e))return"nan";if(e===1/0)return"inf";if(e===-1/0)return"-inf";if(Number.isInteger(e)&&(r||!Number.isSafeInteger(e)))return e.toFixed(1);case"bigint":case"boolean":case"temporal":return e.toString();case"string":return gC(e);case"date":if(isNaN(e.getTime()))throw new TypeError("cannot serialize invalid date");return e.toISOString();case"object":return kC(e,n,r,o);case"array":return yC(e,n,r,o);case"temporal/tz+uc":if(o){let s=e.timeZoneId,i=s.charCodeAt(0);if(i!==43&&i!==45&&(i!==85&&i!==71&&i!==90&&i!==69||s!=="UTC"&&s!=="UCT"&&s!=="Universal"&&s!=="Zulu"&&!s.startsWith("GMT")&&s!=="Greenwich"&&!s.startsWith("Etc/")))throw new TypeError("Temporal objects with an IANA timezone are not allowed in Temporal strict mode")}case"temporal/uc":if(o&&e.calendarId!=="iso8601")throw new TypeError("Temporal objects with a non-default calendar are not allowed in Temporal strict mode");return e.toString({calendarName:"never",timeZoneName:"never"});case"temporal/x":throw new TypeError("Unsupported "+e[Symbol.toStringTag])}}function kC(e,t,n,r){let o=Object.keys(e);if(o.length===0)return"{}";let s="{ ";for(let i=0;i<o.length;i++){let a=o[i];i&&(s+=", "),s+=yy(a)+" = "+yd(e[a],_s(e[a]),t-1,n,r)}return s+" }"}function yC(e,t,n,r){if(e.length===0)return"[]";let o="[ ";for(let s=0;s<e.length;s++){if(s&&(o+=", "),e[s]===null||e[s]===void 0)throw new TypeError("arrays cannot contain null or undefined values");o+=yd(e[s],_s(e[s]),t-1,n,r)}return o+" ]"}function wC(e,t,n,r,o){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let s="";for(let i=0;i<e.length;i++)s+=`${s&&`
|
|
87
|
+
${s}`,n),this.line=r,this.column=o,this.codeblock=s}static x(t,n,r){throw new e(t,{toml:n.s,ptr:r??n.p})}}});function _a(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,o=n===39,s=n===e.s.charCodeAt(e.p)&&n===e.s.charCodeAt(e.p+1);s&&((n=e.s.charCodeAt(e.p+=2))===10?e.p++:n===13&&e.s.charCodeAt(e.p+1)===10&&(e.p+=2));let i="",a=e.p,c=0;for(;e.p<e.s.length;e.p++)if(n=e.s.charCodeAt(e.p),s&&(n===10||n===13&&e.s.charCodeAt(e.p+1)===10))c=c&&3;else if(n<32&&n!==9||n===127)T.x("control characters are not allowed in strings",e);else if((!c||c===3)&&n===r&&(!s||e.s.charCodeAt(e.p+1)===r&&e.s.charCodeAt(e.p+2)===r)){if(s&&(e.s.charCodeAt(e.p+3)===r&&e.p++,e.s.charCodeAt(e.p+3)===r&&e.p++),!c){let l=e.s.slice(a,e.p);i=i?i+l:l}return e.p+=s?3:1,i}else if(!c)!o&&n===92&&(i+=e.s.slice(a,a=e.p),c=1);else if(c===1)if(n===120||n===117||n===85){let l=e.p++-1,u=0,d=n===120?2:n===117?4:8;for(let p=0;p<d;p++,e.p++){let f=e.s.charCodeAt(e.p),h=f>=48&&f<=57?f-48:f>=65&&f<=70?f-65+10:f>=97&&f<=102?f-97+10:-1;h<0&&T.x("invalid non-hex character in unicode escape",e),u=u<<4|h}(u<0||u>1114111||u>=55296&&u<=57343)&&T.x("invalid unicode escape",e,l),i+=String.fromCodePoint(u),a=e.p--,c=0}else s&&(n===32||n===9)?c=2:(n===98?i+="\b":n===116?i+=" ":n===110?i+=`
|
|
88
|
+
`:n===102?i+="\f":n===114?i+="\r":n===101?i+="\x1B":n===34?i+='"':n===92?i+="\\":T.x("unrecognised escape sequence",e),a=e.p+1,c=0);else n!==32&&n!==9&&(c===2&&T.x("invalid escape: only line-ending whitespace may be escaped",e,a),c=!o&&n===92?1:0,a=e.p);T.x("unfinished string",e,t)}var md=k(()=>{Zn();});var wC,Vn,hd=k(()=>{wC=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,Vn=class e extends Date{#t=!1;#n=!1;#e=null;constructor(t,n,r){let o=!0,s=!0,i="Z",a;if(typeof t=="string")if(n)e:{if(n<3){if(+t.slice(11,13)>23){t="";break e}n===2?(i=null,t+="Z"):(a=t.charCodeAt(t.length-1))!==90&&a!==122&&(i=t.slice(t.length-6)),r&&(t=t.slice(0,10)+"T"+t.slice(11))}else n===4&&(t=+t.slice(0,2)>23?"":`0000-01-01T${t}Z`);o=n!==4,s=n!==3}else{let c=t.match(wC);c?(c[1]||(o=!1,t=`0000-01-01T${t}`),s=!!c[2],s&&t[10]===" "&&(t=t.replace(" ","T")),c[2]&&+c[2]>23?t="":(i=c[3]||null,!i&&s&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=o,this.#n=s,this.#e=i)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z"||this.#e==="z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let r=new e(t);return r.#e=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#t=!1,n.#e=null,n}}});function Ue(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function kd(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function Ts(e,t){let n=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||T.x("document contains excessively nested structures. aborting.",e);let o=r===91?wy(e):yy(e);return e.d++,o}return r===34||r===39?_a(e):r===116?((e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)&&T.x("invalid value",e,n),e.p++,!0):r===102?((e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)&&T.x("invalid value",e,n),e.p++,!1):r===43||r===45?Sa(e,e.p,e.s.charCodeAt(++e.p),44-r,t):e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45?bC(e,r,t):e.s.charCodeAt(e.p+2)===58?xC(e,r,t):Sa(e,e.p,r,0,t)}function Sa(e,t,n,r,o){let s=n,i=0,a=!1;if(s===105)return(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)&&T.x("invalid value",e,t),e.p++,(r||1)/0;if(s===110)return(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)&&T.x("invalid value",e,t),e.p++,NaN;if(s===48){if(++e.p>=e.s.length||kd(s=e.s.charCodeAt(e.p),o))return e.bi===!0?0n:0;if(!r){if(s===120)return gd(e,t,16,o);if(s===98)return gd(e,t,2,o);if(s===111)return gd(e,t,8,o)}s===46?i=2:s===101||s===69?i=4:T.x("illegal leading zero",e,t)}else Ue(s)||T.x("invalid value",e,t);for(;++e.p<e.s.length&&(s=e.s.charCodeAt(e.p),!kd(s,o));)i||(i=1),s===95?(i&1||T.x("illegal underscore",e),i+=11,a=!0):i===1&&s===46?i=2:(i===1||i===3)&&(s===101||s===69)?i=4:i===4&&(s===43||s===45)||(Ue(s)?i>9?i-=11:i&1||i++:T.x("illegal character in numeric literal",e));if(!i){let l=(n-48)*(r||1);return e.bi===!0?BigInt(l):l}i&1||T.x("unfinished numeric value",e,t);let c=e.s.slice(t,e.p);return a&&(c=c.replaceAll("_","")),i>1?parseFloat(c):ky(e,c,10,t)}function gd(e,t,n,r){let o,s=1;for(;++e.p<e.s.length&&(o=e.s.charCodeAt(e.p),!kd(o,r));)o===95?(s&1&&T.x("illegal underscore",e),s=3):Ue(o,n)?s&1&&s--:T.x("illegal character in numeric literal",e);s&1&&T.x("unfinished numeric value",e);let i=e.s.slice(t+2,e.p);return s&&(i=i.replaceAll("_","")),ky(e,i,n,t)}function ky(e,t,n,r){if(e.bi!==!0)e:{let o=parseInt(t,n);if(!Number.isSafeInteger(o)){if(e.bi)break e;T.x("integer value cannot be represented losslessly",e,r)}return o}return BigInt(n===10?t:(n===2?"0b":n===8?"0o":"0x")+t)}function bC(e,t,n){let r=e.p++,o;if(!Ue(t)||!Ue(e.s.charCodeAt(e.p++))||!Ue(e.s.charCodeAt(e.p++))||!Ue(e.s.charCodeAt(e.p++)))return Sa(e,e.p=r,t,0,n);if(e.p+=5,Ue(e.s.charCodeAt(e.p++))||T.x("invalid date-time: date part is malformed",e,r),e.p>=e.s.length||((t=e.s.charCodeAt(e.p))!==32||(o=!0,!Ue(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116){let i=e.s.slice(r,e.p);return $s(e,i,3,!1,r)}if(e.s.charCodeAt(e.p+=3)!==58&&T.x("invalid date-time: time part is malformed",e,r),e.s.charCodeAt(e.p+=3)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;Ue(e.s.charCodeAt(++e.p)););if(t=e.s.charCodeAt(e.p)){if(t===90||t===122){let i=e.s.slice(r,++e.p);return $s(e,i,1,o,r,"[+00:00]")}if(t===43||t===45){let i=e.s.slice(r,e.p+=6);return $s(e,i,1,o,r,!e.ld&&"["+e.s.slice(e.p-6,e.p)+"]")}}let s=e.s.slice(r,e.p);return $s(e,s,2,o,r)}function xC(e,t,n){let r=e.p;if(!Ue(t)||!Ue(e.s.charCodeAt(++e.p)))return Sa(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;Ue(e.s.charCodeAt(++e.p)););let o=e.s.slice(r,e.p);return $s(e,o,4,!1,r)}function $s(e,t,n,r,o,s){if(e.ld){let i=new Vn(t,n,r);return i.isValid()||T.x("invalid date",e,o),i}try{switch(s&&(t+=s),n){case 1:return Temporal.ZonedDateTime.from(t);case 2:return Temporal.PlainDateTime.from(t);case 3:return Temporal.PlainDate.from(t);case 4:return Temporal.PlainTime.from(t)}}catch(i){T.x(i instanceof Error?i.message:""+i,e,o)}}var yd=k(()=>{md();wd();Zn();hd();});function vC(e){for(;e.p<e.s.length;e.p++){let t=e.s.charCodeAt(e.p);if(t===10)break;if(t===13&&e.s.charCodeAt(e.p+1)===10){e.p++;break}(t<32&&t!==9||t===127)&&T.x("control characters are not allowed in comments",e)}}function ct(e,t,n){let r;for(;e.p<e.s.length;){for(;e.p<e.s.length&&((r=e.s.charCodeAt(e.p))===32||r===9||!t&&(r===10||r===13&&e.s.charCodeAt(e.p+1)===10));)e.p++;if(n||r!==35)break;vC(e)}}var bd=k(()=>{Zn();});function Ea(e,t=61){let n,r=0,o=[],s,i=e.s.charCodeAt(n=e.p);do{if(i===t)return r||T.x("unexpected end of key",e),r===1&&o.push(e.s.slice(s,e.p)),e.p++,o;i===46?(r||T.x("illegal empty bare key",e),r===1&&o.push(e.s.slice(s,e.p)),r=0):!r&&(i===34||i===39)?(i===e.s.charCodeAt(e.p+1)&&i===e.s.charCodeAt(e.p+2)&&T.x("illegal quoted key: multiline strings are not allowed",e),o.push(_a(e)),r=2,e.p--):i===32||i===9?r===1&&(o.push(e.s.slice(s,e.p)),r=2):r===2||i<48&&i!==45||i>57&&i<65||i>90&&i<97&&i!==95||i>122?T.x("illegal character in key",e):r||(r=1,s=e.p)}while(i=e.s.charCodeAt(++e.p));T.x("incomplete key-value: cannot find end of key",e,n)}function yy(e){let t=e.p++,n=Object.create(null),r=new Set,o;for(;e.p<e.s.length;){if(ct(e),(o=e.s.charCodeAt(e.p))===125)return e.p++,n;let s,i=n,a=!1,c=e.p,l=Ea(e);for(let d=0;d<l.length;d++){d&&(i=a?i[s]:i[s]=Object.create(null)),s=l[d],(a=Object.hasOwn(i,s))&&(typeof i[s]!="object"||r.has(i[s]))&&T.x("trying to redefine an already defined value",e,c);let p=s==="__proto__";if(e.uk&&(p||s==="constructor")){i=e.uk!==1&&T.x("document contains an unsafe property",e,c);break}!a&&p&&Object.defineProperty(i,s,{enumerable:!0,configurable:!0,writable:!0})}a&&T.x("trying to redefine an already defined value",e,c),ct(e,!0,!0);let u=Ts(e,125);if(i&&typeof(i[s]=u)=="object"&&r.add(u),ct(e),(o=e.s.charCodeAt(e.p++))===125)return n;o!==44&&T.x("expected comma or end of structure",e,e.p-1)}T.x("unfinished table",e,t)}function wy(e){let t=e.p++,n=[],r;for(;e.p<e.s.length;){if(ct(e),(r=e.s.charCodeAt(e.p))===93)return e.p++,n;if(n.push(Ts(e,93)),ct(e),(r=e.s.charCodeAt(e.p++))===93)return n;r!==44&&T.x("expected comma or end of structure",e,e.p-1)}T.x("unfinished array",e,t)}var wd=k(()=>{md();yd();bd();Zn();});function by(e,t,n,r,o){let s=n,i=r,a,c=!1,l;for(let u=0;u<t.length;u++){if(u){if(s=c?s[a]:s[a]=Object.create(null),i=(l=i[a]).c,o===0&&(l.t===1||l.t===2))return null;if(l.t===2){let d=s.length-1;s=s[d],i=i[d].c}}if(a=t[u],(c=Object.hasOwn(s,a))&&i[a]?.t===0&&i[a]?.d)return null;if(!c){let d=a==="__proto__";if(e.uk&&(d||a==="constructor"))return!1;d&&(Object.defineProperty(s,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(i,a,{enumerable:!0,configurable:!0,writable:!0})),i[a]={t:u<t.length-1&&o===2?3:o,d:!1,i:0,c:Object.create(null)}}}if(l=i[a],l.t!==o&&!(o===1&&l.t===3)||(o===2&&(l.d||(l.d=!0,s[a]=[]),s[a].push(s=Object.create(null)),l.c[l.i++]=l={t:1,d:!1,i:0,c:Object.create(null)}),l.d))return null;if(l.d=!0,o===1)s=c?s[a]:s[a]=Object.create(null);else if(o===0&&c)return null;return[a,s,l.c]}function xy(e,t,n){(t===null||e.uk===2)&&T.x(t===null?"trying to redefine an already defined table or value":"document contains an unsafe property",e,n)}function As(e,t={}){let n={s:e,p:0,d:t.maxDepth??1e3,bi:t.integersAsBigInt??!1,ld:t.useLegacyDate??!0,uk:t.unsafeKeyBehaviour==="throw"?2:t.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),o=Object.create(null),s,i=!1,a=r,c=o;for(e.charCodeAt(0)===65279&&n.p++,ct(n);n.p<e.length;){if(e.charCodeAt(n.p)===91){let l=e.charCodeAt(++n.p)===91;s=n.p+=+l,i=!1;let u=Ea(n,93);l&&(e.charCodeAt(n.p)!==93&&T.x("expected end of table array declaration",n),n.p++);let d=by(n,u,r,o,l?2:1);d?(c=d[2],a=d[1]):(xy(n,d,s),i=!0)}else{s=n.p;let l=Ea(n),u=by(n,l,a,c,0);!u&&!i&&xy(n,u,s),ct(n,!0,!0);let d=Ts(n,void 0);u&&!i&&(u[1][u[0]]=d)}ct(n,!0),n.p<e.length&&(s=e.charCodeAt(n.p))!==10&&(s!==13||e.charCodeAt(n.p+1)!==10)&&T.x("each key-value declaration must be followed by an end-of-line",n),ct(n)}return r}var vy=k(()=>{wd();yd();bd();Zn();});function Rs(e){let t=typeof e;if(t==="object"){if(Array.isArray(e))return"array";if(typeof e.getUTCDate=="function"&&e instanceof Date)return"date";if(globalThis.Temporal){if(e.until){if(e instanceof Temporal.ZonedDateTime)return"temporal/tz+uc";if(e instanceof Temporal.PlainDateTime||e instanceof Temporal.PlainDate)return"temporal/uc";if(e instanceof Temporal.PlainTime||e instanceof Temporal.Instant)return"temporal";if(e instanceof Temporal.PlainYearMonth)return"temporal/x"}else if(e.toPlainDate&&e instanceof Temporal.PlainMonthDay||e.negated&&e instanceof Temporal.Duration)return"temporal/x"}}return t}function SC(e){for(let t=0;t<e.length;t++)if(Rs(e[t])!=="object")return!1;return e.length!=0}function Sy(e){return JSON.stringify(e).replaceAll("\x7F","\\u007f")}function EC(e){return Sy(_y?e.toWellFormed():e)}function Ey(e){if(_C.test(e))return e;if(_y&&!e.isWellFormed())throw new RangeError("key contains illegal lone surrogates");return Sy(e)}function xd(e,t,n,r,o){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");switch(t){case"number":if(isNaN(e))return"nan";if(e===1/0)return"inf";if(e===-1/0)return"-inf";if(Number.isInteger(e)&&(r||!Number.isSafeInteger(e)))return e.toFixed(1);case"bigint":case"boolean":case"temporal":return e.toString();case"string":return EC(e);case"date":if(isNaN(e.getTime()))throw new TypeError("cannot serialize invalid date");return e.toISOString();case"object":return $C(e,n,r,o);case"array":return TC(e,n,r,o);case"temporal/tz+uc":if(o){let s=e.timeZoneId,i=s.charCodeAt(0);if(i!==43&&i!==45&&(i!==85&&i!==71&&i!==90&&i!==69||s!=="UTC"&&s!=="UCT"&&s!=="Universal"&&s!=="Zulu"&&!s.startsWith("GMT")&&s!=="Greenwich"&&!s.startsWith("Etc/")))throw new TypeError("Temporal objects with an IANA timezone are not allowed in Temporal strict mode")}case"temporal/uc":if(o&&e.calendarId!=="iso8601")throw new TypeError("Temporal objects with a non-default calendar are not allowed in Temporal strict mode");return e.toString({calendarName:"never",timeZoneName:"never"});case"temporal/x":throw new TypeError("Unsupported "+e[Symbol.toStringTag])}}function $C(e,t,n,r){let o=Object.keys(e);if(o.length===0)return"{}";let s="{ ";for(let i=0;i<o.length;i++){let a=o[i];i&&(s+=", "),s+=Ey(a)+" = "+xd(e[a],Rs(e[a]),t-1,n,r)}return s+" }"}function TC(e,t,n,r){if(e.length===0)return"[]";let o="[ ";for(let s=0;s<e.length;s++){if(s&&(o+=", "),e[s]===null||e[s]===void 0)throw new TypeError("arrays cannot contain null or undefined values");o+=xd(e[s],Rs(e[s]),t-1,n,r)}return o+" ]"}function AC(e,t,n,r,o){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let s="";for(let i=0;i<e.length;i++)s+=`${s&&`
|
|
89
89
|
`}[[${t}]]
|
|
90
|
-
`,s+=
|
|
91
|
-
`)+
|
|
92
|
-
`)+
|
|
90
|
+
`,s+=vd(0,e[i],t,n,r,o);return s}function vd(e,t,n,r,o,s){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let i="",a="",c=Object.keys(t);for(let l=0;l<c.length;l++){let u=c[l];if(t[u]!==null&&t[u]!==void 0){let d=Rs(t[u]);if(d==="symbol"||d==="function")throw new TypeError(`cannot serialize values of type '${d}'`);let p=Ey(u);if(d==="array"&&SC(t[u]))a+=(a&&`
|
|
91
|
+
`)+AC(t[u],n?`${n}.${p}`:p,r-1,o,s);else if(d==="object"){let f=n?`${n}.${p}`:p;a+=(a&&`
|
|
92
|
+
`)+vd(f,t[u],f,r-1,o,s)}else i+=p,i+=" = ",i+=xd(t[u],d,r,o,s),i+=`
|
|
93
93
|
`}}return e&&(i||!a)&&(i=i?`[${e}]
|
|
94
94
|
${i}`:`[${e}]`),i&&a?`${i}
|
|
95
|
-
${a}`:i||a}function
|
|
95
|
+
${a}`:i||a}function _d(e,{maxDepth:t=1e3,numbersAsFloat:n=!1,strictTemporal:r=!1}={}){if(Rs(e)!=="object")throw new TypeError("stringify can only be called with an object");let o=vd(0,e,"",t,n,r);return o[o.length-1]!==`
|
|
96
96
|
`?o+`
|
|
97
|
-
`:o}var
|
|
98
|
-
`,{mode:384}),await
|
|
99
|
-
`)[0]})`}),{filters:n,tests:r,issues:o}}let a=
|
|
100
|
-
`)[0]?.trim()??"")||null}catch{return null}}var
|
|
101
|
-
`)[0]})`,r}if(i.schema_version!==1)return r.fileIssue=`schema_version ${JSON.stringify(i.schema_version??null)} is not 1, so rtk did not load this file`,r;let a=typeof i.filters=="object"&&i.filters!==null&&!Array.isArray(i.filters)?i.filters:{},c=
|
|
102
|
-
`)[0]??"unreadable",t}for(let[p,f]of Object.entries(o)){let
|
|
103
|
-
`}var
|
|
104
|
-
`,what:`${r} (${s} entr${s===1?"y":"ies"})`}:null}function
|
|
97
|
+
`:o}var _C,_y,$y=k(()=>{_C=/^[a-z0-9-_]+$/i,_y=!!"".isWellFormed});var $a={};L($a,{TomlDate:()=>Vn,TomlError:()=>T,default:()=>RC,parse:()=>As,stringify:()=>_d});var RC,Cs=k(()=>{vy();$y();hd();Zn();RC={parse:As,stringify:_d,TomlDate:Vn,TomlError:T}});var Pd={};L(Pd,{USER_FILTER_PREFIX:()=>Ta,USER_FILTER_SCHEMA_VERSION:()=>Ps,__resetUserFilters:()=>Ra,isUserFilterId:()=>Td,loadUserFilters:()=>Oy,parseUserFilterText:()=>qn,readUserFilters:()=>Rd,runFilterTests:()=>Aa,runUserFilterTests:()=>BC,selectUserFilter:()=>Iy,trustUserFilters:()=>Cd,untrustUserFilters:()=>UC,userFiltersDir:()=>Xe,userFiltersTrustFile:()=>on,withUserFilters:()=>zC});import{readdir as CC,readFile as $d,writeFile as PC,mkdir as OC,rename as IC}from"node:fs/promises";import{readdirSync as NC,statSync as Ty}from"node:fs";import{createHash as HC}from"node:crypto";import{basename as Ay,join as Os}from"node:path";function Xe(){return Os(y(),"filters")}function on(){return Os(y(),"filters-trust.json")}function Td(e){return typeof e=="string"&&e.startsWith(Ta)}function Ry(e){return HC("sha256").update(e).digest("hex")}async function Ad(){try{let e=JSON.parse(await $d(on(),"utf8")),t={};if(e.files&&typeof e.files=="object")for(let[n,r]of Object.entries(e.files))typeof r=="string"&&/^[0-9a-f]{64}$/.test(r)&&(t[n]=r);return{v:1,files:t}}catch{return{v:1,files:{}}}}async function Cy(e){let t=on();await OC(y(),{recursive:!0,mode:448});let n=`${t}.tmp-${process.pid}`;await PC(n,JSON.stringify(e,null,2)+`
|
|
98
|
+
`,{mode:384}),await IC(n,t)}function MC(e,t){if(t===void 0)return{tests:[]};let n={message:`${e}: tests: each [[filters.${e}.tests]] needs input and expected strings`};if(!Array.isArray(t))return n;let r=[];for(let o of t){if(typeof o!="object"||o===null)return n;let{input:s,expected:i,name:a}=o;if(typeof s!="string"||typeof i!="string")return n;r.push({...typeof a=="string"&&a?{name:a}:{},input:s,expected:i})}return{tests:r}}function FC(e,t){let n=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{},{tests:r,...o}=n,s=MC(e,r);if("message"in s)return s;let i=Jr.safeParse({...o,slug:e});if(!i.success){let c=i.error.issues.map(l=>`${l.path.join(".")||"rule"}: ${l.message}`).join("; ");return{message:`${e}: ${c}`}}let a;try{a=new RegExp(i.data.match_command)}catch{return{message:`${e}: match_command is not a valid regular expression`}}for(let c of i.data.strip_lines_matching)try{new RegExp(c)}catch{return{message:`${e}: strip_lines_matching has an invalid regular expression`}}return{filter:{...i.data,slug:`${Ta}${i.data.slug}`,matchRegex:a},tests:s.tests}}function jC(e){return e===void 0||e===Ps?null:typeof e=="number"&&Number.isInteger(e)?`schema_version ${e} is not supported: this tkr reads schema_version = ${Ps}. Update tkr, or write the file for version ${Ps}`:`schema_version must be the number ${Ps}`}async function Py(e){try{return(await CC(e)).filter(t=>t.endsWith(".toml")).sort()}catch{return[]}}async function Rd(e={}){let t=e.requireTrust!==!1,n=Xe(),r=new Map,o=new Map,s=[],i=await Py(n);if(i.length===0)return{dir:n,filters:r,tests:o,issues:s};let a=t?await Ad():null;for(let c of i){let l;try{l=await $d(Os(n,c),"utf8")}catch{s.push({file:c,message:"could not be read"});continue}if(a){let d=a.files[c];if(!d){s.push({file:c,message:`not trusted yet. Review it, then run: tkr filters trust ${c}`});continue}if(d!==Ry(l)){s.push({file:c,message:`changed since it was trusted. Review it, then run: tkr filters trust ${c}`});continue}}let u=await qn(l,c);for(let[d,p]of u.filters)r.set(d,p);for(let[d,p]of u.tests)o.set(d,p);s.push(...u.issues)}return{dir:n,filters:r,tests:o,issues:s}}async function qn(e,t){let n=new Map,r=new Map,o=[],{parse:s}=await Promise.resolve().then(()=>(Cs(),$a)),i;try{i=s(e)}catch(l){return o.push({file:t,message:`not valid TOML (${String(l.message).split(`
|
|
99
|
+
`)[0]})`}),{filters:n,tests:r,issues:o}}let a=jC(i.schema_version);if(a)return o.push({file:t,message:a}),{filters:n,tests:r,issues:o};let c=i.filters;if(typeof c!="object"||c===null||Array.isArray(c))return o.push({file:t,message:"no [filters.<name>] table found"}),{filters:n,tests:r,issues:o};for(let[l,u]of Object.entries(c)){let d=FC(l,u);if("message"in d){o.push({file:t,message:d.message});continue}n.set(d.filter.slug,d.filter),d.tests.length>0&&r.set(d.filter.slug,{file:t,tests:d.tests})}return{filters:n,tests:r,issues:o}}function LC(){let e=[];for(let t of[on(),Xe()])try{let n=Ty(t);e.push(`${n.mtimeMs}:${n.size}`)}catch{e.push("-")}try{for(let t of NC(Xe()).filter(n=>n.endsWith(".toml")).sort()){let n=Ty(Os(Xe(),t));e.push(`${t}:${n.mtimeMs}:${n.size}`)}}catch{}return e.join("|")}function Oy(){let e=Date.now();if(!Wn||e-Ed>=DC){Ed=e;let t=LC();(!Wn||t!==Sd)&&(Sd=t,Wn=Rd())}return Wn}async function Iy(e){let{filters:t}=await Oy();return t.size===0?null:xa(e,t.values(),null,t)}function zC(e){return async(t,n)=>await Iy(t)??e(t,n)}async function Cd(e=[]){let t=Xe(),n=await Py(t),r=e.length>0?e.map(a=>Ay(a)):n,o=await Ad(),s=[],i=[];for(let a of r){if(!n.includes(a)){i.push(a);continue}o.files[a]=Ry(await $d(Os(t,a),"utf8")),s.push(a)}return s.length>0&&await Cy(o),Wn=null,{trusted:s,missing:i}}async function UC(e=[]){let t=await Ad(),r=(e.length>0?e.map(o=>Ay(o)):Object.keys(t.files)).filter(o=>o in t.files);for(let o of r)delete t.files[o];return r.length>0&&await Cy(t),Wn=null,r}async function BC(e){return Aa(await Rd({requireTrust:!1}),e)}function Aa(e,t){let n=[],r=[];for(let[o,s]of e.filters){let i=o.slice(Ta.length);if(t&&i!==t)continue;let a=e.tests.get(o);if(!a){r.push(i);continue}a.tests.forEach((c,l)=>{let u=hy(c.input,s,{verbosity:"normal"});n.push({rule:i,file:a.file,index:l+1,...c.name?{name:c.name}:{},pass:u.trimEnd()===c.expected.trimEnd(),expected:c.expected,actual:u})})}return{results:n,issues:e.issues,untested:r}}function Ra(){Wn=null,Sd="",Ed=0}var Ta,Ps,Wn,Sd,Ed,DC,Yn=k(()=>{"use strict";Wi();od();gy();F();Ta="user/",Ps=1,Wn=null,Sd="",Ed=0,DC=1e3});var Ny={};L(Ny,{flush:()=>GC,recordEvent:()=>JC});async function JC(e){if(e.plan!=="pro"||Td(e.filterId)||!(await Q()).telemetryOptIn)return;let t=wa(e.cmd);!t||Co(t)!==t||ka("learn",{cmd:t,filterId:e.filterId==null?null:nt(e.filterId),rawBytes:e.rawBytes,filteredBytes:e.filteredBytes})}async function GC(e){return ya("learn","/api/v1/learn",{baseUrl:e,requirePro:!0,consent:!0})}var Hy=k(()=>{"use strict";ba();ci();_s();mr();Yn();Pt()});import{existsSync as jO,readFileSync as LO,statSync as lb}from"node:fs";import{spawnSync as zO}from"node:child_process";import{delimiter as UO,isAbsolute as BO,join as Ee}from"node:path";import JO from"node:os";function js(){return{home:JO.homedir(),env:process.env,platform:process.platform,cwd:process.cwd()}}function ja(e,t){let n=e.env[t];return n&&BO(n)?n:null}function Ls(e){return e.platform==="darwin"?[{dir:Ee(e.home,"Library","Application Support","rtk"),readByRtk:!0},{dir:Ee(e.home,".config","rtk"),readByRtk:!1}]:e.platform==="win32"?[{dir:Ee(ja(e,"APPDATA")??Ee(e.home,"AppData","Roaming"),"rtk"),readByRtk:!0}]:[{dir:Ee(ja(e,"XDG_CONFIG_HOME")??Ee(e.home,".config"),"rtk"),readByRtk:!0}]}function za(e){return e.platform==="darwin"?Ee(e.home,"Library","Application Support","rtk"):e.platform==="win32"?Ee(ja(e,"LOCALAPPDATA")??Ee(e.home,"AppData","Local"),"rtk"):Ee(ja(e,"XDG_DATA_HOME")??Ee(e.home,".local","share"),"rtk")}function ub(e){return Ee(za(e),"trusted_filters.json")}function db(e){for(let{dir:t,readByRtk:n}of Ls(e)){let r=Ee(t,"config.toml");if(n&&jO(r))return r}return null}function fb(e,t){let n=e.env.RTK_DB_PATH;return n||t||Ee(za(e),"history.db")}function GO(e){try{return lb(e).isFile()}catch{return!1}}function uf(e,t=[],n=!0){let r=e.env.PATH??e.env.Path??"",o=e.platform==="win32"?["rtk.exe","rtk.cmd"]:["rtk"];for(let s of r.split(e.platform==="win32"?";":UO))if(!(!s||t.includes(s)))for(let i of o){let a=Ee(s,i);if(!GO(a))continue;let c=!1;try{c=lb(a).size<4096&&LO(a,"utf8").includes(La)}catch{}return{path:a,version:c||!n?null:KO(a,e),compatShim:c}}return null}function KO(e,t){try{return(`${zO(e,["--version"],{encoding:"utf8",timeout:3e3,env:{...t.env,RTK_TELEMETRY_DISABLED:"1"}}).stdout??""}`.split(`
|
|
100
|
+
`)[0]?.trim()??"")||null}catch{return null}}var La,ao=k(()=>{"use strict";La="tokmizer-rtk-compat"});import{createHash as ZO}from"node:crypto";import{readFileSync as mb,realpathSync as VO}from"node:fs";import{basename as WO,join as pb}from"node:path";function XO(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)||"project"}function hb(e){let t=[];for(let{dir:n,readByRtk:r}of Ls(e))t.push({path:pb(n,"filters.toml"),scope:"global",readByRtk:r,target:r?"rtk-global.toml":"rtk-global-unused-dir.toml"});return t.push({path:pb(e.cwd,".rtk","filters.toml"),scope:"project",readByRtk:!0,target:`rtk-project-${XO(WO(e.cwd))}.toml`}),t}function QO(e){return ZO("sha256").update(e).digest("hex")}function eI(e,t,n){try{let o=JSON.parse(mb(ub(e),"utf8")).trusted?.[VO(t)];return typeof o?.sha256=="string"&&o.sha256===QO(n)}catch{return!1}}function tI(e){let t=[],n=0,r=!1,o=!1,s=0;for(let i=0;i<e.length;i+=1){let a=e[i];if(o){o=!1;continue}a==="\\"?o=!0:a==="["&&!r?r=!0:a==="]"&&r?r=!1:a==="("&&!r?n+=1:a===")"&&!r?n=Math.max(0,n-1):a==="|"&&!r&&n===0&&(t.push(e.slice(s,i)),s=i+1)}return t.push(e.slice(s)),t}function nI(e){return tI(e).every(t=>t.replace(/^\(\?[imsuxU-]+\)/,"").startsWith("^"))}function rI(e,t){if(typeof t!="object"||t===null||Array.isArray(t))return{name:e,reason:"not a table"};let n=t,r=[],o=[];for(let[i,a]of Object.entries(n)){if(qO.has(i))continue;let c=YO[i];c?c(a)&&r.push(i):o.push(i)}if(o.length>0)return{name:e,reason:`unknown key${o.length===1?"":"s"} ${o.join(", ")} (rtk rejects them too)`};if(r.length>0)return{name:e,reason:`uses ${r.join(", ")}, which Tokmizer filters do not support`};if(typeof n.match_command!="string")return{name:e,reason:"match_command is missing"};if(!nI(n.match_command))return{name:e,reason:"match_command is not anchored with ^, so rtk ignored this filter"};let s={match_command:n.match_command};for(let i of["description","strip_ansi","strip_lines_matching","truncate_lines_at","max_lines","on_empty"])n[i]!==void 0&&(s[i]=n[i]);return s.strip_ansi===!1&&delete s.strip_ansi,Array.isArray(s.strip_lines_matching)&&s.strip_lines_matching.length===0&&delete s.strip_lines_matching,s.max_lines!==void 0&&(s.scale_with_level=!1),{name:e,rule:s}}function oI(e){let t=new Map;if(typeof e!="object"||e===null||Array.isArray(e))return t;for(let[n,r]of Object.entries(e)){if(!Array.isArray(r))continue;let o=r.flatMap(s=>{if(typeof s!="object"||s===null)return[];let{name:i,input:a,expected:c}=s;return typeof a!="string"||typeof c!="string"?[]:[{...typeof i=="string"&&i?{name:i}:{},input:a,expected:c}]});t.set(n,o)}return t}async function gb(e,t){let n;try{n=mb(t.path)}catch{return null}let r={source:t,text:null,imported:[],skipped:[],fileIssue:null,tests:[],untested:[],orphanTests:[],trustedByRtk:eI(e,t.path,n)},{parse:o,stringify:s}=await Promise.resolve().then(()=>(Cs(),$a)),i;try{i=o(n.toString("utf8").replace(/^/,""))}catch(d){return r.fileIssue=`not valid TOML (${String(d.message).split(`
|
|
101
|
+
`)[0]})`,r}if(i.schema_version!==1)return r.fileIssue=`schema_version ${JSON.stringify(i.schema_version??null)} is not 1, so rtk did not load this file`,r;let a=typeof i.filters=="object"&&i.filters!==null&&!Array.isArray(i.filters)?i.filters:{},c=oI(i.tests),l={};for(let[d,p]of Object.entries(a)){let f=rI(d,p);if("reason"in f){r.skipped.push(f);continue}let h={...f.rule,...c.get(d)?.length?{tests:c.get(d)}:{}},g=await qn(s({schema_version:1,filters:{[d]:h}}),t.target);if(g.issues.length>0){r.skipped.push({name:d,reason:g.issues.map(m=>m.message.replace(`${d}: `,"")).join("; ")});continue}l[d]=h,r.imported.push(d)}if(r.orphanTests=[...c.keys()].filter(d=>!(d in a)),r.imported.length===0)return r;r.text=s({schema_version:1,filters:l});let u=Aa(await qn(r.text,t.target));return r.tests=u.results,r.untested=u.untested,r}var qO,YO,kb=k(()=>{"use strict";Yn();ao();qO=new Set(["description","match_command","strip_ansi","strip_lines_matching","truncate_lines_at","max_lines","on_empty"]),YO={replace:e=>Array.isArray(e)&&e.length>0,match_output:e=>Array.isArray(e)&&e.length>0,keep_lines_matching:e=>Array.isArray(e)&&e.length>0,head_lines:e=>e!==void 0,tail_lines:e=>e!==void 0,filter_stderr:e=>e===!0}});import{readFileSync as sI}from"node:fs";function co(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}function cI(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function lI(e){let t=e.trim();return!t||t==="^"?null:t.startsWith("^")?t:`^${cI(t)}($|\\s)`}async function yb(e){let t={file:db(e),parseError:null,excludePatterns:[],excludeText:null,excludeSkipped:[],retentionDays:null,restoreDisabled:!1,telemetryOff:!1,historyPath:null,notImported:[]};if(!t.file)return t;let{parse:n,stringify:r}=await Promise.resolve().then(()=>(Cs(),$a)),o;try{o=n(sI(t.file,"utf8").replace(/^/,""))}catch(p){return t.parseError=String(p.message).split(`
|
|
102
|
+
`)[0]??"unreadable",t}for(let[p,f]of Object.entries(o)){let h=co(f);if(Object.keys(h).length===0&&(typeof f!="object"||f===null)){t.notImported.push(p);continue}for(let g of Object.keys(h))uI.has(`${p}.${g}`)||t.notImported.push(`${p}.${g}`)}let s=co(o.hooks),i=co(o.retriever),a=co(o.tee),c=co(o.telemetry),l=co(o.tracking);if(Array.isArray(s.exclude_commands)){t.excludePatterns=s.exclude_commands.filter(h=>typeof h=="string");let p={},f=0;for(let h of t.excludePatterns){let g=lI(h);if(!g){t.excludeSkipped.push({name:h,reason:"empty pattern, rtk ignores it too"});continue}f+=1;let m=`rtk-exclude-${f}`,b={description:`Left unchanged, as rtk exclude_commands "${h}"`.slice(0,255),match_command:g,preserve_exact:!0,priority:100};if((await qn(r({schema_version:1,filters:{[m]:b}}),"rtk-excluded.toml")).issues.length>0){t.excludeSkipped.push({name:h,reason:"not a regular expression Tokmizer can read"}),f-=1;continue}p[m]=b}Object.keys(p).length>0&&(t.excludeText=r({schema_version:1,filters:p}))}let u=Object.keys(i).length>0;(i.mode==="disabled"||!u&&a.enabled===!1)&&(t.restoreDisabled=!0);let d=i.retention_days;return typeof d=="number"&&Number.isInteger(d)&&d>0&&d!==iI&&d!==aI&&(t.retentionDays=Math.min(d,365)),t.telemetryOff=c.enabled===!1||c.consent_given===!1,typeof l.database_path=="string"&&l.database_path&&(t.historyPath=l.database_path),t}var iI,aI,uI,wb=k(()=>{"use strict";Yn();ao();iI=30,aI=30;uI=new Set(["hooks.exclude_commands","retriever.mode","retriever.retention_days","tee.enabled","telemetry.enabled","telemetry.consent_given","telemetry.consent_date","tracking.database_path"])});function be(e){throw new df(e)}function fI(e){(e.length<100||e.toString("latin1",0,16)!==dI)&&be("not a SQLite database");let t=e.readUInt16BE(16),n=t===1?65536:t;(n<512||n>65536||(n&n-1)!==0)&&be("invalid page size");let r=e.readUInt32BE(56);r!==0&&r!==1&&be("only UTF-8 databases can be read");let o=n-e[20];return o<480&&be("invalid reserved space"),{buf:e,pageSize:n,usable:o,pageCount:Math.floor(e.length/n)}}function Ua(e,t){let n=0;for(let r=0;r<8;r+=1){t+r>=e.length&&be("truncated varint");let o=e[t+r];if(n=n*128+(o&127),o<128)return[n,t+r+1]}return t+8>=e.length&&be("truncated varint"),[n*256+e[t+8],t+9]}function xb(e,t){return(!Number.isInteger(t)||t<1||t>e.pageCount)&&be("page out of range"),(t-1)*e.pageSize}function pI(e,t,n){let r=e.usable-35;if(n<=r)return t+n>e.buf.length&&be("truncated cell"),e.buf.subarray(t,t+n);let o=Math.floor((e.usable-12)*32/255)-23,s=o+(n-o)%(e.usable-4),i=s<=r?s:o,a=[e.buf.subarray(t,t+i)],c=n-i,l=e.buf.readUInt32BE(t+i),u=new Set;for(;c>0;){u.has(l)&&be("overflow loop"),u.add(l);let d=xb(e,l),p=Math.min(c,e.usable-4);a.push(e.buf.subarray(d+4,d+4+p)),c-=p,l=e.buf.readUInt32BE(d)}return Buffer.concat(a)}function mI(e){let[t,n]=Ua(e,0);t>e.length&&be("bad record header");let r=[],o=n;for(;o<t;){let[c,l]=Ua(e,o);r.push(c),o=l}let s=t,i=[],a=c=>{s+c>e.length&&be("truncated record")};for(let c of r)if(c===0)i.push(null);else if(c>=1&&c<=6){let l=[0,1,2,3,4,6,8][c];if(a(l),c===6){let u=e.readBigInt64BE(s);i.push(u>=BigInt(Number.MIN_SAFE_INTEGER)&&u<=BigInt(Number.MAX_SAFE_INTEGER)?Number(u):u)}else i.push(e.readIntBE(s,l));s+=l}else if(c===7)a(8),i.push(e.readDoubleBE(s)),s+=8;else if(c===8||c===9)i.push(c-8);else if(c>=12){let l=Math.floor((c-(c%2===0?12:13))/2);a(l);let u=e.subarray(s,s+l);i.push(c%2===0?new Uint8Array(u):u.toString("utf8")),s+=l}else be("reserved serial type");return i}function bb(e,t,n){let r=[t],o=new Set;for(;r.length>0;){let s=r.pop();o.has(s)&&be("b-tree loop"),o.add(s);let i=xb(e,s),a=i+(s===1?100:0),c=e.buf[a],l=e.buf.readUInt16BE(a+3);if(c===5){let u=[];for(let d=0;d<l;d+=1){let p=i+e.buf.readUInt16BE(a+12+d*2);u.push(e.buf.readUInt32BE(p))}u.push(e.buf.readUInt32BE(a+8));for(let d=u.length-1;d>=0;d-=1)r.push(u[d])}else if(c===13)for(let u=0;u<l;u+=1){let d=i+e.buf.readUInt16BE(a+8+u*2),[p,f]=Ua(e.buf,d),[h,g]=Ua(e.buf,f);n(h,mI(pI(e,g,p)))}else be("unexpected page type")}}function hI(e){let t=[],n=0,r=null,o=0;for(let s=0;s<e.length;s+=1){let i=e[s];r?i===r&&(r=null):i==="'"||i==='"'||i==="`"?r=i:i==="["?r="]":i==="("?n+=1:i===")"?n-=1:i===","&&n===0&&(t.push(e.slice(o,s)),o=s+1)}return t.push(e.slice(o)),t}function kI(e){let t=e.indexOf("("),n=e.lastIndexOf(")");(t<0||n<=t)&&be("unreadable table definition");let r=[],o=-1;for(let s of hI(e.slice(t+1,n))){let i=s.trim();if(!i||gI.test(i))continue;let a=/^(?:"([^"]+)"|`([^`]+)`|\[([^\]]+)\]|([^\s]+))/.exec(i);if(!a)continue;let c=a[1]??a[2]??a[3]??a[4];o<0&&/\binteger\s+primary\s+key\b/i.test(i)&&(o=r.length),r.push(c)}return{names:r,rowidAlias:o}}function vb(e,t,n){let r=fI(e),o=0,s="";bb(r,1,(l,u)=>{u[0]==="table"&&u[1]===t&&typeof u[3]=="number"&&typeof u[4]=="string"&&(o=u[3],s=u[4])}),o||be(`no ${t} table`);let{names:i,rowidAlias:a}=kI(s),c=0;return bb(r,o,(l,u)=>{let d={};i.forEach((p,f)=>{d[p]=f===a&&(u[f]??null)===null?l:u[f]??null}),n(d),c+=1}),c}var df,dI,gI,_b=k(()=>{"use strict";df=class extends Error{},dI="SQLite format 3\0";gI=/^(?:constraint|primary|unique|check|foreign)\b/i});import{readFileSync as yI,statSync as wI}from"node:fs";import{readFile as bI,writeFile as zJ,mkdir as UJ,rename as BJ}from"node:fs/promises";import{join as xI}from"node:path";function Ba(){return xI(y(),"rtk-import.json")}function ff(e){return typeof e=="number"&&Number.isFinite(e)?e:typeof e=="bigint"?Number(e):0}function Sb(e,t=new Date){try{if(wI(e).size>vI)return{error:"the history file is too large to read"}}catch{return{error:"no history file"}}try{let n={source:e,commands:0,inputTokens:0,outputTokens:0,savedTokens:0,firstAt:null,lastAt:null,importedAt:t.toISOString()};return vb(yI(e),"commands",r=>{n.commands+=1,n.inputTokens+=ff(r.input_tokens),n.outputTokens+=ff(r.output_tokens),n.savedTokens+=ff(r.saved_tokens);let o=typeof r.timestamp=="string"?r.timestamp:null;o&&(!n.firstAt||o<n.firstAt)&&(n.firstAt=o),o&&(!n.lastAt||o>n.lastAt)&&(n.lastAt=o)}),{totals:n}}catch(n){return{error:`could not read it (${n.message})`}}}async function pf(){try{let e=JSON.parse(await bI(Ba(),"utf8"));return typeof e.commands!="number"||typeof e.savedTokens!="number"?null:e}catch{return null}}function _I(e){return e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e)}function Eb(e){let t=e.firstAt&&e.lastAt?`, ${e.firstAt.slice(0,10)} to ${e.lastAt.slice(0,10)}`:"";return` Imported from rtk: ${_I(e.savedTokens)} tokens saved over ${e.commands} command${e.commands===1?"":"s"}${t} (rtk's own estimate, not included above)
|
|
103
|
+
`}var vI,mf=k(()=>{"use strict";F();_b();vI=512*1024*1024});var Cb={};L(Cb,{claudeDir:()=>Ga,doubleHooked:()=>FI,isRtkHookCommand:()=>gf,scanRtkHooks:()=>Za,tokmizerInClaude:()=>Rb});import{existsSync as SI,readFileSync as $b}from"node:fs";import{basename as EI,join as U}from"node:path";function Dt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function TI(e){let t=[],n=/"((?:\\.|[^"\\])*)"|'([^']*)'|(\S+)/g;for(let r of e.trim().matchAll(n))t.push(r[1]??r[2]??r[3]??"");return t}function gf(e,t){if(typeof e!="string")return!1;if(/rtk-rewrite\.sh|rtk-hook-gemini\.sh/.test(e))return!0;let n=TI(e);if(n.length!==3)return!1;let r=EI(n[0].replace(/\\/g,"/")).toLowerCase();return(r==="rtk"||r==="rtk.exe")&&n[1]==="hook"&&n[2]===t}function Ka(e){try{let t=oe($b(e,"utf8"));return Dt(t)?t:null}catch{return null}}function nr(e){try{return $b(e,"utf8")}catch{return null}}function AI(e,t){let n=0,r=[];for(let o of e)if(Dt(o)&&Array.isArray(o.hooks)){let s=o.hooks.filter(a=>!(Dt(a)&&(a.type===void 0||a.type==="command")&&gf(a.command,t))),i=o.hooks.length-s.length;if(n+=i,i>0&&s.length===0)continue;r.push(i>0?{...o,hooks:s}:o)}else Dt(o)&&(o.type===void 0||o.type==="command")&&gf(o.command,t)?n+=1:r.push(o);return{kept:r,removed:n}}function RI(e,t,n){let r=0;for(let o of[e,Dt(e.hooks)?e.hooks:null])if(o)for(let s of t){let i=o[s];if(!Array.isArray(i))continue;let a=AI(i,n);a.removed!==0&&(r+=a.removed,a.kept.length>0?o[s]=a.kept:delete o[s])}return r>0&&Dt(e.hooks)&&Object.keys(e.hooks).length===0&&delete e.hooks,r}function tr(e,t,n,r){let o=Ka(e);if(!o)return null;let s=RI(o,t,n);return s>0?{file:e,action:"write",content:`${JSON.stringify(o,null,2)}
|
|
104
|
+
`,what:`${r} (${s} entr${s===1?"y":"ies"})`}:null}function Tb(e,t,n){let r=nr(e);if(r===null)return null;let o=r.replace($I,"").split(`
|
|
105
105
|
`).filter(s=>!t(s.trim())).join(`
|
|
106
|
-
`);return o!==r?{file:e,action:"write",content:o,what:n}:null}function
|
|
106
|
+
`);return o!==r?{file:e,action:"write",content:o,what:n}:null}function Ja(e,t,n){let r=nr(e);return r!==null&&t(r)?{file:e,action:"delete",what:n}:null}function CI(e){let t=nr(e);if(t===null)return null;let n=t.split(`
|
|
107
107
|
`),r=[],o=-1;n.forEach((a,c)=>{/^\s*\[/.test(a)&&(o>=0&&r.push({start:o,end:c}),o=c)}),o>=0&&r.push({start:o,end:n.length});let s=r.find(a=>/^\s*\[\[hooks\]\]/.test(n[a.start])&&n.slice(a.start,a.end).some(c=>/^\s*name\s*=\s*"rtk-rewrite"/.test(c)));if(!s)return null;let i=[...n.slice(0,s.start),...n.slice(s.end)].join(`
|
|
108
|
-
`);return{file:e,action:"write",content:i,what:"rtk [[hooks]] block"}}function
|
|
109
|
-
`,what:"rtk-rewrite hook (set enabled = false)"})}function xb(e){let t=Qo(e);return t?yt(t):!1}function hf(e){try{return Al(e).installed()}catch{return!1}}function Ba(e){return e.env.CLAUDE_CONFIG_DIR||z(e.home,".claude")}function vb(e){let t=Ja(z(Ba(e),"settings.json")),n=t&&Ht(t.enabledPlugins)?t.enabledPlugins:{};if(Object.entries(n).some(([o,s])=>o.startsWith("tokmizer@")&&s!==!1))return!0;let r=er(z(Ba(e),"plugins","installed_plugins.json"));return r!==null&&r.includes('"tokmizer@')}function bI(e){let t=Ba(e),n=z(t,"settings.json"),r=[Qn(n,["PreToolUse","PostToolUse"],"claude","rtk PreToolUse/PostToolUse hook"),Qn(z(t,"settings.local.json"),["PreToolUse","PostToolUse"],"claude","rtk PreToolUse/PostToolUse hook"),bb(z(t,"CLAUDE.md"),a=>a.startsWith("@RTK.md"),"@RTK.md import and rtk instructions")].filter(a=>a!==null),o=[],s=Ja(n),i=s&&Ht(s.env)?s.env:{};return typeof i.ANTHROPIC_BASE_URL=="string"&&/127\.0\.0\.1|localhost/.test(i.ANTHROPIC_BASE_URL)&&o.push(`rtk proxy is set in ${n} (env.ANTHROPIC_BASE_URL); left as is, with its SessionStart hook. It does not wrap commands. Remove both by hand if you stop using it.`),{agent:"Claude Code",tkrInstalled:vb(e),tkrSetup:"install the tokmizer plugin in Claude Code",edits:r,notes:o}}function xI(e){let t=e.env.CODEX_HOME||z(e.home,".codex"),n=[Qn(z(t,"hooks.json"),["PreToolUse"],"codex","rtk PreToolUse hook"),bb(z(t,"AGENTS.md"),r=>r==="@RTK.md"||r.startsWith("@")&&r.endsWith("RTK.md"),"@RTK.md import and rtk instructions")].filter(r=>r!==null);return{agent:"Codex",tkrInstalled:In(),tkrSetup:"tkr setup-codex",edits:n,notes:[]}}function vI(e){let t=[Qn(Re(),["BeforeTool"],"gemini","rtk BeforeTool hook")].filter(s=>s!==null),n=[],r=z(e.home,".gemini","GEMINI.md"),o=er(r);return o&&mf.test(o)&&n.push(`${r} was written by rtk and tells Gemini to prefix commands with rtk. Edit or delete it.`),{agent:"Gemini CLI",tkrInstalled:Hn(),tkrSetup:"tkr setup-gemini",edits:t,notes:n}}function _I(e){let t=e.env.FACTORY_HOME_OVERRIDE?z(e.env.FACTORY_HOME_OVERRIDE,".factory"):z(e.home,".factory"),n=[z(t,"hooks.json"),z(t,"hooks","hooks.json"),z(t,"settings.json")].map(r=>Qn(r,["PreToolUse"],"droid","rtk PreToolUse hook")).filter(r=>r!==null);return{agent:"Factory Droid",tkrInstalled:hf("droid"),tkrSetup:"tkr setup-droid",edits:n,notes:[]}}function SI(e){let t=[z(e.home,".trae","hooks.json"),z(e.home,".trae-cn","hooks.json")].map(n=>Qn(n,["PreToolUse"],"trae","rtk PreToolUse hook")).filter(n=>n!==null);return{agent:"Trae",tkrInstalled:hf("trae"),tkrSetup:"tkr setup-trae",edits:t,notes:[]}}function EI(e){let t=e.env.COPILOT_HOME||z(e.home,".copilot"),n=[Ua(z(t,"hooks","rtk-rewrite.json"),s=>s.includes("rtk hook copilot"),"rtk hook file")].filter(s=>s!==null),r=[],o=er(z(t,"copilot-instructions.md"));return o&&/rtk/i.test(o)&&mf.test(o)&&r.push(`${z(t,"copilot-instructions.md")} tells Copilot to prefix commands with rtk. Remove the rtk block.`),{agent:"GitHub Copilot",tkrInstalled:hf("copilot"),tkrSetup:"tkr setup-copilot",edits:n,notes:r}}function Ds(e,t,n,r){return{agent:e,tkrInstalled:xb(t),tkrSetup:n,edits:r?[r]:[],notes:[]}}function Ga(e){let t=e.env.PI_CODING_AGENT_DIR||z(e.home,".pi","agent"),n=[bI(e),xI(e),{agent:"Cursor",tkrInstalled:It(),tkrSetup:"tkr setup-cursor",edits:[Qn(z(e.home,".cursor","hooks.json"),["preToolUse"],"cursor","rtk preToolUse hook")].filter(o=>o!==null),notes:[]},vI(e),EI(e),_I(e),SI(e),Ds("Mistral Vibe","vibe","tkr setup-vibe",yI(z(e.home,".vibe","hooks.toml"))),Ds("Antigravity","antigravity","tkr setup-antigravity",wI(z(e.home,".gemini","config","plugins","rtk","hooks.json"))),Ds("OpenCode","opencode","tkr setup-opencode",Ua(z(e.home,".config","opencode","plugins","rtk.ts"),ff,"rtk plugin")),Ds("Pi","pi","tkr setup-pi",Ua(z(t,"extensions","rtk.ts"),ff,"rtk extension")),Ds("Oh My Pi","omp","tkr setup-omp",Ua(z(e.home,".omp","agent","extensions","rtk.ts"),ff,"rtk extension"))],r=z(e.env.HERMES_HOME||z(e.home,".hermes"),"plugins","rtk-rewrite");fI(r)&&n.push({agent:"Hermes",tkrInstalled:xb("hermes"),tkrSetup:"tkr setup-hermes",edits:[],notes:[`rtk plugin in ${r} is not changed automatically. Remove it with: rtk init --agent hermes --uninstall`]});for(let o of[".windsurfrules",".clinerules",z(".kilocode","rules","rtk-rules.md")]){let s=z(e.cwd,o),i=er(s);i&&mf.test(i)&&n.push({agent:"Project rules",tkrInstalled:!0,tkrSetup:"",edits:[],notes:[`${s} tells the agent to prefix commands with rtk. Remove that part.`]})}return n.filter(o=>o.edits.length>0||o.notes.length>0)}function $I(e){return Ga(e).filter(t=>t.tkrInstalled&&t.edits.length>0).map(t=>t.agent)}var mI,mf,ff,gf=k(()=>{"use strict";it();We();Nn();Dn();Dr();en();mI=/<!-- rtk-instructions v2 -->[\s\S]*?<!-- \/rtk-instructions -->\n?/,mf=/prefix (?:every|all|each)? ?(?:shell )?commands? with `?rtk`?/i;ff=e=>/["']rtk["']\s*,\s*\[\s*["']rewrite["']|rtk hook opencode|rtk rewrite/.test(e)});var Ab=He((jJ,Tb)=>{Tb.exports=$b;$b.sync=AI;var Sb=Ft("fs");function TI(e,t){var n=t.pathExt!==void 0?t.pathExt:process.env.PATHEXT;if(!n||(n=n.split(";"),n.indexOf("")!==-1))return!0;for(var r=0;r<n.length;r++){var o=n[r].toLowerCase();if(o&&e.substr(-o.length).toLowerCase()===o)return!0}return!1}function Eb(e,t,n){return!e.isSymbolicLink()&&!e.isFile()?!1:TI(t,n)}function $b(e,t,n){Sb.stat(e,function(r,o){n(r,r?!1:Eb(o,e,t))})}function AI(e,t){return Eb(Sb.statSync(e),e,t)}});var Ib=He((LJ,Pb)=>{Pb.exports=Cb;Cb.sync=RI;var Rb=Ft("fs");function Cb(e,t,n){Rb.stat(e,function(r,o){n(r,r?!1:Ob(o,t))})}function RI(e,t){return Ob(Rb.statSync(e),t)}function Ob(e,t){return e.isFile()&&CI(e,t)}function CI(e,t){var n=e.mode,r=e.uid,o=e.gid,s=t.uid!==void 0?t.uid:process.getuid&&process.getuid(),i=t.gid!==void 0?t.gid:process.getgid&&process.getgid(),a=parseInt("100",8),c=parseInt("010",8),l=parseInt("001",8),u=a|c,d=n&l||n&c&&o===i||n&a&&r===s||n&u&&s===0;return d}});var Hb=He((UJ,Nb)=>{var zJ=Ft("fs"),Za;process.platform==="win32"||global.TESTING_WINDOWS?Za=Ab():Za=Ib();Nb.exports=kf;kf.sync=OI;function kf(e,t,n){if(typeof t=="function"&&(n=t,t={}),!n){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(r,o){kf(e,t||{},function(s,i){s?o(s):r(i)})})}Za(e,t||{},function(r,o){r&&(r.code==="EACCES"||t&&t.ignoreErrors)&&(r=null,o=!1),n(r,o)})}function OI(e,t){try{return Za.sync(e,t||{})}catch(n){if(t&&t.ignoreErrors||n.code==="EACCES")return!1;throw n}}});var Ub=He((BJ,zb)=>{var oo=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",Db=Ft("path"),PI=oo?";":":",Fb=Hb(),Mb=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),jb=(e,t)=>{let n=t.colon||PI,r=e.match(/\//)||oo&&e.match(/\\/)?[""]:[...oo?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(n)],o=oo?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=oo?o.split(n):[""];return oo&&e.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:r,pathExt:s,pathExtExe:o}},Lb=(e,t,n)=>{typeof t=="function"&&(n=t,t={}),t||(t={});let{pathEnv:r,pathExt:o,pathExtExe:s}=jb(e,t),i=[],a=l=>new Promise((u,d)=>{if(l===r.length)return t.all&&i.length?u(i):d(Mb(e));let p=r[l],f=/^".*"$/.test(p)?p.slice(1,-1):p,m=Db.join(f,e),g=!f&&/^\.[\\\/]/.test(e)?e.slice(0,2)+m:m;u(c(g,l,0))}),c=(l,u,d)=>new Promise((p,f)=>{if(d===o.length)return p(a(u+1));let m=o[d];Fb(l+m,{pathExt:s},(g,h)=>{if(!g&&h)if(t.all)i.push(l+m);else return p(l+m);return p(c(l,u,d+1))})});return n?a(0).then(l=>n(null,l),n):a(0)},II=(e,t)=>{t=t||{};let{pathEnv:n,pathExt:r,pathExtExe:o}=jb(e,t),s=[];for(let i=0;i<n.length;i++){let a=n[i],c=/^".*"$/.test(a)?a.slice(1,-1):a,l=Db.join(c,e),u=!c&&/^\.[\\\/]/.test(e)?e.slice(0,2)+l:l;for(let d=0;d<r.length;d++){let p=u+r[d];try{if(Fb.sync(p,{pathExt:o}))if(t.all)s.push(p);else return p}catch{}}}if(t.all&&s.length)return s;if(t.nothrow)return null;throw Mb(e)};zb.exports=Lb;Lb.sync=II});var Jb=He((JJ,yf)=>{"use strict";var Bb=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)!=="win32"?"PATH":Object.keys(t).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"};yf.exports=Bb;yf.exports.default=Bb});var Vb=He((GJ,Kb)=>{"use strict";var Gb=Ft("path"),NI=Ub(),HI=Jb();function Zb(e,t){let n=e.options.env||process.env,r=process.cwd(),o=e.options.cwd!=null,s=o&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(e.options.cwd)}catch{}let i;try{i=NI.sync(e.command,{path:n[HI({env:n})],pathExt:t?Gb.delimiter:void 0})}catch{}finally{s&&process.chdir(r)}return i&&(i=Gb.resolve(o?e.options.cwd:"",i)),i}function DI(e){return Zb(e)||Zb(e,!0)}Kb.exports=DI});var Wb=He((ZJ,bf)=>{"use strict";var wf=/([()\][%!^"`<>&|;, *?])/g;function FI(e){return e=e.replace(wf,"^$1"),e}function MI(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),e=e.replace(/(?=(\\+?)?)\1$/,"$1$1"),e=`"${e}"`,e=e.replace(wf,"^$1"),t&&(e=e.replace(wf,"^$1")),e}bf.exports.command=FI;bf.exports.argument=MI});var Yb=He((KJ,qb)=>{"use strict";qb.exports=/^#!(.*)/});var Qb=He((VJ,Xb)=>{"use strict";var jI=Yb();Xb.exports=(e="")=>{let t=e.match(jI);if(!t)return null;let[n,r]=t[0].replace(/#! ?/,"").split(" "),o=n.split("/").pop();return o==="env"?r:r?`${o} ${r}`:o}});var tx=He((WJ,ex)=>{"use strict";var xf=Ft("fs"),LI=Qb();function zI(e){let n=Buffer.alloc(150),r;try{r=xf.openSync(e,"r"),xf.readSync(r,n,0,150,0),xf.closeSync(r)}catch{}return LI(n.toString())}ex.exports=zI});var sx=He((qJ,ox)=>{"use strict";var UI=Ft("path"),nx=Vb(),rx=Wb(),BI=tx(),JI=process.platform==="win32",GI=/\.(?:com|exe)$/i,ZI=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function KI(e){e.file=nx(e);let t=e.file&&BI(e.file);return t?(e.args.unshift(e.file),e.command=t,nx(e)):e.file}function VI(e){if(!JI)return e;let t=KI(e),n=!GI.test(t);if(e.options.forceShell||n){let r=ZI.test(t);e.command=UI.normalize(e.command),e.command=rx.command(e.command),e.args=e.args.map(s=>rx.argument(s,r));let o=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${o}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}function WI(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);let r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:VI(r)}ox.exports=WI});var cx=He((YJ,ax)=>{"use strict";var vf=process.platform==="win32";function _f(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function qI(e,t){if(!vf)return;let n=e.emit;e.emit=function(r,o){if(r==="exit"){let s=ix(o,t);if(s)return n.call(e,"error",s)}return n.apply(e,arguments)}}function ix(e,t){return vf&&e===1&&!t.file?_f(t.original,"spawn"):null}function YI(e,t){return vf&&e===1&&!t.file?_f(t.original,"spawnSync"):null}ax.exports={hookChildProcess:qI,verifyENOENT:ix,verifyENOENTSync:YI,notFoundError:_f}});var dx=He((XJ,so)=>{"use strict";var lx=Ft("child_process"),Sf=sx(),Ef=cx();function ux(e,t,n){let r=Sf(e,t,n),o=lx.spawn(r.command,r.args,r.options);return Ef.hookChildProcess(o,r),o}function XI(e,t,n){let r=Sf(e,t,n),o=lx.spawnSync(r.command,r.args,r.options);return o.error=o.error||Ef.verifyENOENTSync(o.status,r),o}so.exports=ux;so.exports.spawn=ux;so.exports.sync=XI;so.exports._parse=Sf;so.exports._enoent=Ef});var px={};j(px,{rtkCompatAction:()=>nN,rtkShimContent:()=>Tf,rtkShimFile:()=>$f,runRaw:()=>rN});import{join as QI}from"node:path";import{constants as eN}from"node:os";function nN(e){let[t,...n]=e;if(!t||t==="help"||t==="--help"||t==="-h")return{kind:"message",stdout:tN,code:0};if(t==="--version"||t==="-V"||t==="version")return{kind:"message",stdout:`rtk compatibility command for Tokmizer
|
|
108
|
+
`);return{file:e,action:"write",content:i,what:"rtk [[hooks]] block"}}function PI(e){let t=Ka(e);return!t||!Dt(t["rtk-rewrite"])||t["rtk-rewrite"].enabled===!1?null:(t["rtk-rewrite"]={...t["rtk-rewrite"],enabled:!1},{file:e,action:"write",content:`${JSON.stringify(t,null,2)}
|
|
109
|
+
`,what:"rtk-rewrite hook (set enabled = false)"})}function Ab(e){let t=os(e);return t?wt(t):!1}function yf(e){try{return Pl(e).installed()}catch{return!1}}function Ga(e){return mt(e.env,e.home)}function Rb(e){let t=Ka(U(Ga(e),"settings.json")),n=t&&Dt(t.enabledPlugins)?t.enabledPlugins:{};if(Object.entries(n).some(([o,s])=>o.startsWith("tokmizer@")&&s!==!1))return!0;let r=nr(U(Ga(e),"plugins","installed_plugins.json"));return r!==null&&r.includes('"tokmizer@')}function OI(e){let t=Ga(e),n=U(t,"settings.json"),r=[tr(n,["PreToolUse","PostToolUse"],"claude","rtk PreToolUse/PostToolUse hook"),tr(U(t,"settings.local.json"),["PreToolUse","PostToolUse"],"claude","rtk PreToolUse/PostToolUse hook"),Tb(U(t,"CLAUDE.md"),a=>a.startsWith("@RTK.md"),"@RTK.md import and rtk instructions")].filter(a=>a!==null),o=[],s=Ka(n),i=s&&Dt(s.env)?s.env:{};return typeof i.ANTHROPIC_BASE_URL=="string"&&/127\.0\.0\.1|localhost/.test(i.ANTHROPIC_BASE_URL)&&o.push(`rtk proxy is set in ${n} (env.ANTHROPIC_BASE_URL); left as is, with its SessionStart hook. It does not wrap commands. Remove both by hand if you stop using it.`),{agent:"Claude Code",tkrInstalled:Rb(e),tkrSetup:"install the tokmizer plugin in Claude Code",edits:r,notes:o}}function II(e){let t=e.env.CODEX_HOME||U(e.home,".codex"),n=[tr(U(t,"hooks.json"),["PreToolUse"],"codex","rtk PreToolUse hook"),Tb(U(t,"AGENTS.md"),r=>r==="@RTK.md"||r.startsWith("@")&&r.endsWith("RTK.md"),"@RTK.md import and rtk instructions")].filter(r=>r!==null);return{agent:"Codex",tkrInstalled:Nn(),tkrSetup:"tkr setup-codex",edits:n,notes:[]}}function NI(e){let t=[tr(Re(),["BeforeTool"],"gemini","rtk BeforeTool hook")].filter(s=>s!==null),n=[],r=U(e.home,".gemini","GEMINI.md"),o=nr(r);return o&&kf.test(o)&&n.push(`${r} was written by rtk and tells Gemini to prefix commands with rtk. Edit or delete it.`),{agent:"Gemini CLI",tkrInstalled:Dn(),tkrSetup:"tkr setup-gemini",edits:t,notes:n}}function HI(e){let t=e.env.FACTORY_HOME_OVERRIDE?U(e.env.FACTORY_HOME_OVERRIDE,".factory"):U(e.home,".factory"),n=[U(t,"hooks.json"),U(t,"hooks","hooks.json"),U(t,"settings.json")].map(r=>tr(r,["PreToolUse"],"droid","rtk PreToolUse hook")).filter(r=>r!==null);return{agent:"Factory Droid",tkrInstalled:yf("droid"),tkrSetup:"tkr setup-droid",edits:n,notes:[]}}function DI(e){let t=[U(e.home,".trae","hooks.json"),U(e.home,".trae-cn","hooks.json")].map(n=>tr(n,["PreToolUse"],"trae","rtk PreToolUse hook")).filter(n=>n!==null);return{agent:"Trae",tkrInstalled:yf("trae"),tkrSetup:"tkr setup-trae",edits:t,notes:[]}}function MI(e){let t=e.env.COPILOT_HOME||U(e.home,".copilot"),n=[Ja(U(t,"hooks","rtk-rewrite.json"),s=>s.includes("rtk hook copilot"),"rtk hook file")].filter(s=>s!==null),r=[],o=nr(U(t,"copilot-instructions.md"));return o&&/rtk/i.test(o)&&kf.test(o)&&r.push(`${U(t,"copilot-instructions.md")} tells Copilot to prefix commands with rtk. Remove the rtk block.`),{agent:"GitHub Copilot",tkrInstalled:yf("copilot"),tkrSetup:"tkr setup-copilot",edits:n,notes:r}}function zs(e,t,n,r){return{agent:e,tkrInstalled:Ab(t),tkrSetup:n,edits:r?[r]:[],notes:[]}}function Za(e){let t=e.env.PI_CODING_AGENT_DIR||U(e.home,".pi","agent"),n=[OI(e),II(e),{agent:"Cursor",tkrInstalled:Nt(),tkrSetup:"tkr setup-cursor",edits:[tr(U(e.home,".cursor","hooks.json"),["preToolUse"],"cursor","rtk preToolUse hook")].filter(o=>o!==null),notes:[]},NI(e),MI(e),HI(e),DI(e),zs("Mistral Vibe","vibe","tkr setup-vibe",CI(U(e.home,".vibe","hooks.toml"))),zs("Antigravity","antigravity","tkr setup-antigravity",PI(U(e.home,".gemini","config","plugins","rtk","hooks.json"))),zs("OpenCode","opencode","tkr setup-opencode",Ja(U(e.home,".config","opencode","plugins","rtk.ts"),hf,"rtk plugin")),zs("Pi","pi","tkr setup-pi",Ja(U(t,"extensions","rtk.ts"),hf,"rtk extension")),zs("Oh My Pi","omp","tkr setup-omp",Ja(U(e.home,".omp","agent","extensions","rtk.ts"),hf,"rtk extension"))],r=U(e.env.HERMES_HOME||U(e.home,".hermes"),"plugins","rtk-rewrite");SI(r)&&n.push({agent:"Hermes",tkrInstalled:Ab("hermes"),tkrSetup:"tkr setup-hermes",edits:[],notes:[`rtk plugin in ${r} is not changed automatically. Remove it with: rtk init --agent hermes --uninstall`]});for(let o of[".windsurfrules",".clinerules",U(".kilocode","rules","rtk-rules.md")]){let s=U(e.cwd,o),i=nr(s);i&&kf.test(i)&&n.push({agent:"Project rules",tkrInstalled:!0,tkrSetup:"",edits:[],notes:[`${s} tells the agent to prefix commands with rtk. Remove that part.`]})}return n.filter(o=>o.edits.length>0||o.notes.length>0)}function FI(e){return Za(e).filter(t=>t.tkrInstalled&&t.edits.length>0).map(t=>t.agent)}var $I,kf,hf,wf=k(()=>{"use strict";$r();it();Ve();Hn();Mn();jr();tn();$I=/<!-- rtk-instructions v2 -->[\s\S]*?<!-- \/rtk-instructions -->\n?/,kf=/prefix (?:every|all|each)? ?(?:shell )?commands? with `?rtk`?/i;hf=e=>/["']rtk["']\s*,\s*\[\s*["']rewrite["']|rtk hook opencode|rtk rewrite/.test(e)});var Hb=He((rG,Nb)=>{Nb.exports=Ib;Ib.sync=LI;var Pb=Ft("fs");function jI(e,t){var n=t.pathExt!==void 0?t.pathExt:process.env.PATHEXT;if(!n||(n=n.split(";"),n.indexOf("")!==-1))return!0;for(var r=0;r<n.length;r++){var o=n[r].toLowerCase();if(o&&e.substr(-o.length).toLowerCase()===o)return!0}return!1}function Ob(e,t,n){return!e.isSymbolicLink()&&!e.isFile()?!1:jI(t,n)}function Ib(e,t,n){Pb.stat(e,function(r,o){n(r,r?!1:Ob(o,e,t))})}function LI(e,t){return Ob(Pb.statSync(e),e,t)}});var Lb=He((oG,jb)=>{jb.exports=Mb;Mb.sync=zI;var Db=Ft("fs");function Mb(e,t,n){Db.stat(e,function(r,o){n(r,r?!1:Fb(o,t))})}function zI(e,t){return Fb(Db.statSync(e),t)}function Fb(e,t){return e.isFile()&&UI(e,t)}function UI(e,t){var n=e.mode,r=e.uid,o=e.gid,s=t.uid!==void 0?t.uid:process.getuid&&process.getuid(),i=t.gid!==void 0?t.gid:process.getgid&&process.getgid(),a=parseInt("100",8),c=parseInt("010",8),l=parseInt("001",8),u=a|c,d=n&l||n&c&&o===i||n&a&&r===s||n&u&&s===0;return d}});var Ub=He((iG,zb)=>{var sG=Ft("fs"),Va;process.platform==="win32"||global.TESTING_WINDOWS?Va=Hb():Va=Lb();zb.exports=bf;bf.sync=BI;function bf(e,t,n){if(typeof t=="function"&&(n=t,t={}),!n){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(r,o){bf(e,t||{},function(s,i){s?o(s):r(i)})})}Va(e,t||{},function(r,o){r&&(r.code==="EACCES"||t&&t.ignoreErrors)&&(r=null,o=!1),n(r,o)})}function BI(e,t){try{return Va.sync(e,t||{})}catch(n){if(t&&t.ignoreErrors||n.code==="EACCES")return!1;throw n}}});var Wb=He((aG,Vb)=>{var lo=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",Bb=Ft("path"),JI=lo?";":":",Jb=Ub(),Gb=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),Kb=(e,t)=>{let n=t.colon||JI,r=e.match(/\//)||lo&&e.match(/\\/)?[""]:[...lo?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(n)],o=lo?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=lo?o.split(n):[""];return lo&&e.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:r,pathExt:s,pathExtExe:o}},Zb=(e,t,n)=>{typeof t=="function"&&(n=t,t={}),t||(t={});let{pathEnv:r,pathExt:o,pathExtExe:s}=Kb(e,t),i=[],a=l=>new Promise((u,d)=>{if(l===r.length)return t.all&&i.length?u(i):d(Gb(e));let p=r[l],f=/^".*"$/.test(p)?p.slice(1,-1):p,h=Bb.join(f,e),g=!f&&/^\.[\\\/]/.test(e)?e.slice(0,2)+h:h;u(c(g,l,0))}),c=(l,u,d)=>new Promise((p,f)=>{if(d===o.length)return p(a(u+1));let h=o[d];Jb(l+h,{pathExt:s},(g,m)=>{if(!g&&m)if(t.all)i.push(l+h);else return p(l+h);return p(c(l,u,d+1))})});return n?a(0).then(l=>n(null,l),n):a(0)},GI=(e,t)=>{t=t||{};let{pathEnv:n,pathExt:r,pathExtExe:o}=Kb(e,t),s=[];for(let i=0;i<n.length;i++){let a=n[i],c=/^".*"$/.test(a)?a.slice(1,-1):a,l=Bb.join(c,e),u=!c&&/^\.[\\\/]/.test(e)?e.slice(0,2)+l:l;for(let d=0;d<r.length;d++){let p=u+r[d];try{if(Jb.sync(p,{pathExt:o}))if(t.all)s.push(p);else return p}catch{}}}if(t.all&&s.length)return s;if(t.nothrow)return null;throw Gb(e)};Vb.exports=Zb;Zb.sync=GI});var Yb=He((cG,xf)=>{"use strict";var qb=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)!=="win32"?"PATH":Object.keys(t).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"};xf.exports=qb;xf.exports.default=qb});var tx=He((lG,ex)=>{"use strict";var Xb=Ft("path"),KI=Wb(),ZI=Yb();function Qb(e,t){let n=e.options.env||process.env,r=process.cwd(),o=e.options.cwd!=null,s=o&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(e.options.cwd)}catch{}let i;try{i=KI.sync(e.command,{path:n[ZI({env:n})],pathExt:t?Xb.delimiter:void 0})}catch{}finally{s&&process.chdir(r)}return i&&(i=Xb.resolve(o?e.options.cwd:"",i)),i}function VI(e){return Qb(e)||Qb(e,!0)}ex.exports=VI});var nx=He((uG,_f)=>{"use strict";var vf=/([()\][%!^"`<>&|;, *?])/g;function WI(e){return e=e.replace(vf,"^$1"),e}function qI(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),e=e.replace(/(?=(\\+?)?)\1$/,"$1$1"),e=`"${e}"`,e=e.replace(vf,"^$1"),t&&(e=e.replace(vf,"^$1")),e}_f.exports.command=WI;_f.exports.argument=qI});var ox=He((dG,rx)=>{"use strict";rx.exports=/^#!(.*)/});var ix=He((fG,sx)=>{"use strict";var YI=ox();sx.exports=(e="")=>{let t=e.match(YI);if(!t)return null;let[n,r]=t[0].replace(/#! ?/,"").split(" "),o=n.split("/").pop();return o==="env"?r:r?`${o} ${r}`:o}});var cx=He((pG,ax)=>{"use strict";var Sf=Ft("fs"),XI=ix();function QI(e){let n=Buffer.alloc(150),r;try{r=Sf.openSync(e,"r"),Sf.readSync(r,n,0,150,0),Sf.closeSync(r)}catch{}return XI(n.toString())}ax.exports=QI});var fx=He((mG,dx)=>{"use strict";var eN=Ft("path"),lx=tx(),ux=nx(),tN=cx(),nN=process.platform==="win32",rN=/\.(?:com|exe)$/i,oN=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function sN(e){e.file=lx(e);let t=e.file&&tN(e.file);return t?(e.args.unshift(e.file),e.command=t,lx(e)):e.file}function iN(e){if(!nN)return e;let t=sN(e),n=!rN.test(t);if(e.options.forceShell||n){let r=oN.test(t);e.command=eN.normalize(e.command),e.command=ux.command(e.command),e.args=e.args.map(s=>ux.argument(s,r));let o=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${o}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}function aN(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);let r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:iN(r)}dx.exports=aN});var hx=He((hG,mx)=>{"use strict";var Ef=process.platform==="win32";function $f(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function cN(e,t){if(!Ef)return;let n=e.emit;e.emit=function(r,o){if(r==="exit"){let s=px(o,t);if(s)return n.call(e,"error",s)}return n.apply(e,arguments)}}function px(e,t){return Ef&&e===1&&!t.file?$f(t.original,"spawn"):null}function lN(e,t){return Ef&&e===1&&!t.file?$f(t.original,"spawnSync"):null}mx.exports={hookChildProcess:cN,verifyENOENT:px,verifyENOENTSync:lN,notFoundError:$f}});var yx=He((gG,uo)=>{"use strict";var gx=Ft("child_process"),Tf=fx(),Af=hx();function kx(e,t,n){let r=Tf(e,t,n),o=gx.spawn(r.command,r.args,r.options);return Af.hookChildProcess(o,r),o}function uN(e,t,n){let r=Tf(e,t,n),o=gx.spawnSync(r.command,r.args,r.options);return o.error=o.error||Af.verifyENOENTSync(o.status,r),o}uo.exports=kx;uo.exports.spawn=kx;uo.exports.sync=uN;uo.exports._parse=Tf;uo.exports._enoent=Af});var bx={};L(bx,{rtkCompatAction:()=>mN,rtkShimContent:()=>Cf,rtkShimFile:()=>Rf,runRaw:()=>hN});import{join as dN}from"node:path";import{constants as fN}from"node:os";function mN(e){let[t,...n]=e;if(!t||t==="help"||t==="--help"||t==="-h")return{kind:"message",stdout:pN,code:0};if(t==="--version"||t==="-V"||t==="version")return{kind:"message",stdout:`rtk compatibility command for Tokmizer
|
|
110
110
|
`,code:0};if(t==="gain")return{kind:"tkr",argv:["gain",...n]};if(t==="recall"||t==="restore")return{kind:"tkr",argv:["restore",...n.filter(o=>o!=="--full")]};if(t==="bypass"||t==="proxy")return n.length===0?{kind:"message",stderr:`Usage: rtk ${t} <command> [args...]
|
|
111
111
|
`,code:2}:{kind:"raw",argv:n};let r=[t,...n].join(" ");return{kind:"message",stderr:`rtk ${t}: rtk was replaced by Tokmizer, which has no "${t}" subcommand.
|
|
112
112
|
Run the command directly, Tokmizer compresses its output on its own: ${r}
|
|
113
113
|
See: rtk help
|
|
114
|
-
`,code:1}}function
|
|
115
|
-
`),127):t.signal?128+(
|
|
116
|
-
set TOKMIZER_SHIM=${
|
|
114
|
+
`,code:1}}function hN(e){let t=wx.default.sync(e[0],e.slice(1),{stdio:"inherit"});return t.error?(process.stderr.write(`rtk: ${e[0]}: ${t.error.code==="ENOENT"?"command not found":t.error.message}
|
|
115
|
+
`),127):t.signal?128+(fN.signals[t.signal]??1):t.status??1}function gN(e){return`'${e.replace(/'/g,"'\\''")}'`}function Rf(e,t=process.platform){return dN(e,t==="win32"?"rtk.cmd":"rtk")}function Cf(e,t=process.platform){return t==="win32"?`@echo off\r
|
|
116
|
+
set TOKMIZER_SHIM=${La}\r
|
|
117
117
|
${e.map(n=>`"${n}"`).join(" ")} rtk-compat %*\r
|
|
118
118
|
`:`#!/bin/sh
|
|
119
|
-
TOKMIZER_SHIM=${
|
|
120
|
-
`}var
|
|
121
|
-
`)});var
|
|
122
|
-
`,done:e.config.restoreDisabled?"tkr restore disabled, as rtk recall was":`tkr restore keeps outputs ${e.config.retentionDays} days`})}e.history?.totals&&t.push({path:
|
|
123
|
-
`}function
|
|
124
|
-
`)}async function
|
|
125
|
-
`,{mode:384}),t.push(`Undid the rtk migration of ${e.manifest.createdAt}.`),n}async function
|
|
126
|
-
`,{mode:384})}}});var
|
|
127
|
-
`).map(t=>t.trim()).find(Boolean)??""}function HN(e,t){let n=Math.max(10,...e.map(r=>r.agent.label.length+2));return["","Summary:",...e.map(r=>` ${`${r.agent.label}:`.padEnd(n)}${r.ok?"done":"FAILED"}${Tx(r.output)?` \u2014 ${Tx(r.output)}`:""}`),...t.length?[` Not found, skipped: ${t.map(r=>r.label).join(", ")}`]:[],"","Restart each agent so it loads Tokmizer. In Codex, approve the Tokmizer hook once in /hooks.",""]}function DN(e,t){let n=e.trim().toLowerCase();if(!n||n==="all"||n==="a")return[...Array(t).keys()];if(n==="none"||n==="n"||n==="q")return[];let r=new Set;for(let o of n.split(/[\s,]+/).filter(Boolean)){let s=Number(o);if(!Number.isInteger(s)||s<1||s>t)return null;r.add(s-1)}return[...r].sort((o,s)=>o-s)}var se,Xa,Ax,Cx=k(()=>{"use strict";se=()=>ON.homedir(),Xa=()=>process.env.XDG_CONFIG_HOME||q(se(),".config"),Ax=[{id:"claude",label:"Claude Code",command:"setup-claude",dirs:()=>[process.env.CLAUDE_CONFIG_DIR||q(se(),".claude")],bins:["claude"]},{id:"codex",label:"Codex",command:"setup-codex",dirs:()=>[process.env.CODEX_HOME||q(se(),".codex")],bins:["codex"]},{id:"cursor",label:"Cursor",command:"setup-cursor",dirs:()=>[q(se(),".cursor")],bins:["cursor-agent","cursor"]},{id:"gemini",label:"Gemini CLI",command:"setup-gemini",dirs:()=>[q(process.env.GEMINI_CLI_HOME||se(),".gemini","settings.json")],bins:["gemini"]},{id:"copilot",label:"GitHub Copilot",command:"setup-copilot",dirs:()=>[process.env.COPILOT_HOME||q(se(),".copilot")],bins:["copilot"]},{id:"droid",label:"Factory Droid",command:"setup-droid",dirs:()=>[q(se(),".factory")],bins:["droid"]},{id:"trae",label:"Trae",command:"setup-trae",dirs:()=>[q(se(),".trae"),q(se(),".trae-cn")],bins:["trae"]},{id:"qwen-code",label:"Qwen Code",command:"setup-qwen",dirs:()=>[process.env.QWEN_HOME||q(se(),".qwen")],bins:["qwen"]},{id:"crush",label:"Crush",command:"setup-crush",dirs:()=>[q(Xa(),"crush")],bins:["crush"]},{id:"junie",label:"Junie CLI",command:"setup-junie",dirs:()=>[q(se(),".junie")],bins:["junie"]},{id:"zcode",label:"ZCode",command:"setup-zcode",dirs:()=>[q(se(),".zcode")],bins:["zcode"]},{id:"grok",label:"Grok Build",command:"setup-grok",dirs:()=>[q(se(),".grok")],bins:["grok"]},{id:"opencode",label:"OpenCode",command:"setup-opencode",dirs:()=>[q(Xa(),"opencode")],bins:["opencode"]},{id:"kilo",label:"Kilo Code",command:"setup-kilo",dirs:()=>[q(Xa(),"kilo")],bins:["kilo"]},{id:"amp",label:"Amp",command:"setup-amp",dirs:()=>[q(Xa(),"amp")],bins:["amp"]},{id:"vibe",label:"Mistral Vibe",command:"setup-vibe",dirs:()=>[process.env.VIBE_HOME||q(se(),".vibe")],bins:["vibe"]},{id:"antigravity",label:"Antigravity",command:"setup-antigravity",dirs:()=>[q(se(),".gemini","antigravity"),q(se(),".gemini","config")],bins:["antigravity","agy"]},{id:"openclaw",label:"OpenClaw",command:"setup-openclaw",dirs:()=>[q(se(),".openclaw")],bins:["openclaw"]},{id:"pi",label:"Pi",command:"setup-pi",dirs:()=>[process.env.PI_CODING_AGENT_DIR||q(se(),".pi")],bins:["pi"]},{id:"omp",label:"Oh My Pi",command:"setup-omp",dirs:()=>[q(se(),".omp")],bins:["omp"]},{id:"hermes",label:"Hermes",command:"setup-hermes",dirs:()=>[process.env.HERMES_HOME||q(se(),".hermes")],bins:["hermes"]}]});import{createCipheriv as PG,createDecipheriv as FN,hkdfSync as MN,randomBytes as IG}from"node:crypto";function zN(e){return Buffer.from(MN("sha256",Buffer.from(e,"utf8"),jN,LN,32))}function Qa(e,t){let n=zN(t),r=Buffer.from(e,"base64url"),o=r.subarray(0,12),s=r.subarray(12,28),i=r.subarray(28),a=FN("aes-256-gcm",n,o);return a.setAuthTag(s),Buffer.concat([a.update(i),a.final()]).toString("utf8")}var jN,LN,Df=k(()=>{"use strict";jN=Buffer.from("tokmizer-bundle-enc-v1"),LN=Buffer.from("rules-bundle")});import{chmodSync as UN,readFileSync as BN,writeFileSync as JN,mkdirSync as GN,renameSync as ZN}from"node:fs";import{join as Ox}from"node:path";function Ff(){return Ox(y(),"bundle-cache.json")}function Px(e){try{let t=y();GN(t,{recursive:!0});let n={...e,fetchedAt:Date.now()},r=Ox(t,`bundle-cache.${process.pid}.tmp`);JN(r,JSON.stringify(n),{mode:384}),ZN(r,Ff()),UN(Ff(),384)}catch{}}function Ix(){try{let e=BN(Ff(),"utf8"),t=KN.safeParse(JSON.parse(e));return t.success?t.data:null}catch{return null}}var KN,Nx=k(()=>{"use strict";ur();F();KN=b.object({payload:b.string().min(1),signature:b.string().min(1),enc:b.literal("v1"),fetchedAt:b.number().int().nonnegative()})});var Lf={};j(Lf,{BundleFetchError:()=>Ms,BundlePayload:()=>ec,bundleExpired:()=>XN,compileRuntime:()=>tc,fetchBundle:()=>tH,healOn401:()=>eH,maxBundleAgeMs:()=>Mf,runtimeFromCache:()=>nH,runtimeFromEnvelope:()=>jf});import{createPublicKey as VN,verify as WN}from"node:crypto";function Mf(){let e=Number(process.env.TOKMIZER_MAX_BUNDLE_AGE_MS);return Number.isFinite(e)&&e>0?e:YN}function XN(e,t=Date.now()){return t-e.fetchedAt>Mf()}function QN(e,t){let n=xo();if(!n||!n.includes("BEGIN PUBLIC KEY"))throw new Error("tkr-daemon: no valid signing public key configured (set TOKMIZER_RESP_SIGNING_PUBLIC_KEY_PEM at build time).");let r=VN({key:n,format:"pem"});if(!WN(null,Buffer.from(e.payload,"utf8"),r,Buffer.from(e.signature,"base64url")))throw new Error("tkr-daemon: rules bundle signature invalid");return JSON.parse(Qa(e.payload,t))}async function eH(e,t,n){if(e instanceof Ms&&(e.status===401||e.status===403))try{return await n.heartbeat(t),await n.fetchBundle(t)}catch(r){return n.log(`initial fetch failed after heartbeat: ${r.message}`),null}return n.log(`initial fetch failed: ${e.message}`),null}async function tH(e){let t=await L();if(!t||!t.jwt)throw new Error("tkr-daemon: not activated (no JWT)");if(!t.signingSecret)throw new Error("tkr-daemon: not activated (no signing secret)");let n=await Ae("GET","/api/v1/rules/bundle",void 0,{baseUrl:e,bearer:t.jwt,signingSecret:t.signingSecret,fingerprint:t.fingerprint??"0".repeat(64),installId:t.installId,timeoutMs:1e4});if(!n.ok)throw new Ms(n.status);let r=qN.parse(await n.json()),o=jf(r,t.signingSecret);return Px(r),o}function jf(e,t){let n=QN(e,t),r=ec.parse(n);if(Date.now()-r.signedAt>Mf())throw new Error("tkr-daemon: rules bundle is stale");return tc(r,{signedAt:r.signedAt,fetchedAt:Date.now()})}function tc(e,t){let n=new Map;for(let r of e.filters)n.set(r.slug,{...r,matchRegex:new RegExp(r.match_command)});return{bundleVersion:e.bundleVersion,signedAt:t.signedAt,ruleCount:n.size,startedAt:Date.now(),fetchedAt:t.fetchedAt,selectFor:(r,o,s)=>wa(r,n.values(),s?new Set(s):null,n)}}async function nH(){try{let e=Ix();if(!e)return null;let t=await L();return t?.signingSecret?jf(e,t.signingSecret):null}catch{return null}}var ec,qN,YN,Ms,nc=k(()=>{"use strict";ur();Gi();td();pt();$n();Df();Nx();ec=b.object({bundleVersion:b.number().int().nonnegative(),signedAt:b.number().int(),filters:b.array(zr)}),qN=b.object({payload:b.string().min(1),signature:b.string().min(1),enc:b.literal("v1")}),YN=10080*60*1e3;Ms=class extends Error{status;constructor(t){super(`tkr-daemon: bundle fetch failed ${t}`),this.status=t}}});var Fx={};j(Fx,{DEFAULT_RULES_SECRET:()=>Hx,defaultRulesRuntime:()=>oH,resolveAllowedFilters:()=>iH});function Dx(){let e="z3vwUrVQysEDFIi_uD6z3M8WxJL_HaeiNSQ6jlX-Aw9fePxU3wjCWhRon3KbhKdlcHkV3umWjxZdNjtxIUG5RmO3t9i6ywdFTSCMJLYSkvZUxyNzO9DDqTBQwU9EzAIPiwjlz0bWdbGcy9PKFH9UOdDU5cX9KM87ljb82LlsyFlvne0n1fae4ZrvpZfdJa0HXGTABHQIbmgVDbuf1AbP90VWspY9tekL8uHo4Tl7-772ZeqW5iY4npn1qA06l5HqDWrhtAFjKBWFKtULF5NIxtLwDMD_iSBGR2ed9ZPI44f6NT0EeB1oiKk3R3fWXHPzUwHgwdaOiHM2nEapZygGMYBO2TGl4CoCSe85z1RAU_s09h-R9wjH_TQYx4k9yfqfkEzkS-W5b0uKJ4AyBGBqil4XSWDeTGVrrvQiWzd7WdXl8lbDwiyBheNEWcCOGbbB92y9D9tF0Gspdp5TetsJCqDL0lzxEhjAbpUnODboNZTrKMVWgVSZ4Xzr9qzxd7r_VFeahRTSqP9WpZ8spNo_yQhJTdcRRaCPhhCFeBHTNc0gGkntMI9O9p5kB456GX2A5y1hbKbaZ7kVZubrN_qxzn1NQnLbULxNDhyiRGtBzU7Uiqk58fXL92H8n-TbOY3OKFFlSSJlhtuy6i6uscCiruCR9GEQFvIgaraH5Yrsxetp_VJ_bAr20wOafPC9CLFvi_MzfclGeTKssJg4X1f2qewO-q-l1nXbuPjvWjA5dLvxA_3bmzGsTJzSOP-287MOjD4HymaGbIWALIKHmggwXXvzpF51K7ekBxn85qi2m2zw5kDpv6flDn2FhNEcwrFcpma3_m1P_5TIHEJuAjvZ2-8K3Sb_AnZefI70eDCwR4pzY-ARIbLkj3swnJt7STAkElgg7ZlHHaBVLAXhzVhX1pKzhQTY7aOZxIzflDnPZdrJq1zDPLnSeJoDQjeTjHnQkSfkJYZhJBlqdYMDg_gfWwlKUBb4F0N2M6h7cBtwEzlgAS_86kVFrIwcg1Om8NiUxb4SkZ7FaCmBQdQGJfg1qk-ZM8OYTqIQhCl5mTgRJQJ_4u_cTd1TOdZ8jMd5ajadbY3zzHiHuTQVpzWYnP6HHZfsaBfc623jCA-nkSvUqlkYFQ-r-ijlifo70LSPs9IWixFnzqj6A4EcnUbHZfalMYvIv3i1bUcSEP4Z5WuO3h0y-_-xVpoIMRB54sDWe19MJYScVQywyV23okv2sIoFeNE1B-C7z7NkPPragZNN1295NxLmxzxdgZlnsAHZ_QA-Y1MNd-WTEUoB6QOq6Py5mL895x7Mhp-VJzdl37wPXHIyqOzDIjJGcZiKZd2zYD5y10fi1iVvXWmgg1OwD2VqZ5zzU7_uyJHQi8gGMoycA3Aaat2ruGSPLXBKUYWFAL4YTgArJb40amttOkGZy76P9ngfdTkvyApUalkQk6KL2Q8tEAksqBylaQeioSNsRZ3OjpvWE9VcIh2lNeBuxz7hXoqkjzljMHUTMkwwEZw4KAwAOIRnoC2KR1muDfGVF7hGj7Cp2PezBZED-WHwONU2cpVedRlGjZJ_9_fQdQ6gb52aDei1Alf3aACBUfWgT2LmbkdteqEkhAV06BcoeWyIqAvrUVm-KU-Y9cZPgo-r1xJaT4dJgnafOc89JHS5CDEApHqjx5OT27Q74Zl6O6aB2zVwcmS5DEiDK6PjBlMgzsDi_pNuPzGBvhqf2mKSMqV0R3fJdUgT5lnMDgtoRJ6_IirKqlnQz35zlH0LZFRsrKNZZLSFCQuKFR4Y47U034-HN9jbgjnoVa7Fm5s2G4NCT-ZqYhiOc9AC8GAQ3hmTSoga4s2mOzlxLxwHi85twsIzNWE-mY_IfAC4PZHThZQEkeTzAFGSVEyvR_Vt1xTMDUemuLcr_u8GKmnys5Xoglgg_ZdQ3lzM9mwdivgYjae6II-vhZJ-AZNHNgvi83lLZGKgE09BQQD1Wnso1lH0SEAQSI81oOtNd5iNrWMm9R57OAvwuYFnotctTjiD7y6TVdjPQDjGEgqBcsFWwRgJWeGkA10XyjFQP6Zx17GQqg-LjbKPZbKpKd8Ow15KiQhz5eYLdPu1T4EmLxqNxlEC5tQz203W90HCCnVvugosnDavLIBXpbFgfwdLkUIQ00m6Hl39QQXTGwKwomJbx6W_iYIBNLHD54-X3XUaSfQX9v_uvupV8Xy77bfJHi09xrgIlU52T_7xZWc8sqN1l2DEo1VuL8RLeBQ3reG67d9Drsv12wL5fwzet3m_07i9TAqa2sQW63Awsj2NRYgykD3CaHIyA2zHSNfAb0AXfbFnfDHzmxcnJuEz_MRcYTjmkvs97BGHqnmqA1VtjCm49F_7C6QtYzB05N3nIj-aZrYHhmjt8jlyHFYfsVaCKGQJ2SVN9bl6_Cp1Jm4CuXjYEn-ekjAbl2aaXUXPpQ6TKInMNgI3YTDAOjWAU9CWEBlTXZlp9aXpS8OIW2p1WGSyiP2DKE8pT8R_tvhlEoT-Ul04bgBg7pSTkr7tTy7R6LGk0pYkSwo-YxQCyzPGBMmbJGVyI84cAZCAh5JjNiad5YVj1-9kAJItXIs8X_s0c-TT7dU55uvy6qTP-Pl4AD_Try8BdR0zAubcDz3jgL9kMDt8rYmcIMh-i7aU_c1oiaRf1cgTWCMkIzy49oxEXNPrIwuQJVMIZVV4S9MUtgLItrW0-2YK6RU6r8pE7mu2wVT5OxmFZfNUqd1sG61qX02IjYfBHOBPnSycMzR0f170tb1exURGPClAI579MIqv_UdprWdmXCSNyok9NuAwsViukgNAJVQb72s5UwrrWckJA42Mdz0JKT43n47PvC51TW2pK7-iFQp4d_Ps4btgu5WvVWWUWLzWFJ0inegmMB79IqRI6f43prAyfwcwRL8v6DwwFmW2HqvVBdGQOZoSzZI775TPPuxvgzKZ-O29CSCGA7BSWell9kTESj51Tk1HaWdDUeYvDgAh5YmvtJHki7ygI3Ey35QjLMq36H3mJ0hGz4CpIXD7so9Sfnr862o4qv3Y1TCA_RTWKhZbzigZLEjZqrwGjl5Al-X9qF-QfLFa6TekzITTKvX2BM4ZdZS95SZyZX9SNj-NfvpJ1dEsEEAWg5l8qmeoMs5QpJOPRukvPMEvMR_afIGDuEkz9BwV1DVHfrg8BZiiMe8Iux2co4DneDF-pHVCCx63XnAcJ4THXkNm7KGSKXAp0-deg0A5RCGUePuJwtkB4xPqBFglgHeZIMUrZQDvviCYhU4KNQOKxYU3_GlQBs2AgSvSkLcR5iNVMZYjRNOgl-9O8UGDLxRZWIkPYPNNDhGHhIgvwSTP9M9qbdRo_c-7rcu97L96vNXZNGoylxWuWRqX6B2fcMj1-QaHFtMC35Tnrq4BOIL5wDj_GwLLPUKf3TZOkAJkCxkCXyxH5UjP1lvATBxURe_NO3Aiuvi0ZsJll6NuNgYjNbpe8I9s2u90QzJRCB-mxxgoGgZPY8QNQZBedY792INuRU5DuBis2cYvmwD9dcgMtnebCZyPnR6yuEsXNzxWz2RW8Y_mL-JZBefUx8EguoO4u235VZmCEBUWSU1YOh5AsLjkM9jBED5SfDcyl7Shq0AaJ-YwBzR0d65Y7dc_Xj54kxCkoqXoRXAE6v75H-BCrCnQi4gBk1QVP3m0DLte5K8g6OUEr7JD-T-tQgw7SYDLafohSz3D5wtzsynEe5_WQZ4e3tXv9pV3CmxT_ouTEz1cyzDnlPccn66bT8lMhWPVhZQke4hcU7LqC1c0K6QSAa3yjRGKSHiSIoCAOgvgo2r02VQiEbiDff4u1zt_Zqf1g1Eq7Yc9muqCYdFfFoxMpx0RIyQVSCgMpmfYqwEhEXcuVVMJnY6QpHfgxixE5Mqn_hWM0LZMDFgC36d7m3MZakhRt_ugoPF6522W0kv_z8_9WPZ98pbGqW6gad6hMWkKXBfnPjK_cmA2BNoSd0puFm88XNSDtJ9086X9TxjNGO-Tk0IoL0t12Z0Q8hjeA1ecJzkL5vngXVymzMqRd4wkLM5zYZqJSKXLYu4vmTV5uE2VF1U-DSYais7RUx67xAm6A__J-ZOqfS4F81YEBL-SVzyfv-Nd__HiiuX6u04jhPg9SXGjuOH9Nel68lkE2x8uuJRHb_ZIfqw-rL-DyjR79OP9Adf72KudPEbWdMOR0F4dJmYDhRUv-SWzHSL75u9b-gfZTEHtP_atiWTjNjKwMfcQgiKuaaxReB379PCb3a-cVCCw64vErxqCVAN5uOHi-zhchmlf00dVoIZoPt1Fo5ifMTQLTrsx_TKEXHRU4PCLW8b6NrMa0z2Yg7Se5niYr-LpBLoXCyb7nMHHf1eur9XjLyBSvKUq66n-Jtj7Q-k6IHC1qp3EueZXgByAXB9Jarc250gulhQuZ9NtbBq-jHgEwHexdCR_vQOktxYpLDGUm6ZLLdIY4Uky-hI38hcxkyFbMwBtTD1JJnIKN_i8YLy9ELXHlliyf34p4zqTltzjwu5MavlwdeZ2hTNjP7nNeTDwpCSAuy_PeSK0WSva0Yz9eJ6GWt89qS7TDHVNTwHLwvyVIRX97UpGPQJIRtLjeEffoddbhO8hojAbJF7wddKMqaHkzWFsd6adm8w0ZMhr-LWf8TJl1vPaAUjmuMK0-Egye5v0lwSqVexXxmbh08kehwfucixUpwMqk6_mCDEuj5KIJIfY2xQ6Uv82_QbBIlOWr7Vem6beLg5oRRfMqge3uL6zdwlQ-vLgYj6XDql71qA1jmfCl6wTIZ3eZby021GAhCgA6-UJ_FjrSg0HTofNglD6LsNmzBJ3HZSM37ma3b5rjwW061lQ2NA9JaP0-q76toWYGhG2yHtsblrAqMhZZr_T_VHEl0YU9QbswMmMwbJocL51plIgds_hjydD_472Eh8aAF8gVHzSuxjRti9okxBl8X_xV5QQdq5I5eMy77mRv0Rf4jawfz8WUObq9smmHVORLMgYBeu-ycBbdFw3HJI-i3mtPfPSgJqS_nDlmqNQTmVzv5t65xJkU4fivvrZJeGKLzdgaqrSQh826UZRRbmPVnJWU1DgauSOuAlO_7or-IGYRq5LCaPhSK8lcylWUeUUvjCrboUc5AceCdr8emFHl7j6x-G2Db6_wQfAVveJVNq-Drye199cPN8fqUic3A5zCZg-6uSKSTqZJXdyh8kViSXMRhSaz4YR1tT9xYKERTWQT_tn4WVMxqM612QDBVsfmisyj12mgERr8In3RqLU50-p-9mDBQ46fExas_Af8LMrSJ4xyhQOSRjFySIwS-E3HuhUed8zIC5JtiiqdEkvnKWMQPWPvoAcd_lscguzrx6gaqMxIZHneU3PlWgozcTYSVmk9nzoVE7YBNgK97qWfwGro1QFXjViG3Oonz6FVfQyxs_0TkppUP1lkTN4kf1F1bzVNexeH8bNomTmrgB5QumsJx60HhaWIM5FM9gxkO-_sTUfa6vMRKB4Io8N3jU8YzVxb7DboR75wTKyBIzCjW2rKIYbHWPOGDDvT0dM6SnnOiEuyzFscGa70kg_ahu4TZAsPMR9fMPcseoK48YDQM1v3gfZucLivwlmr9IOQXV5mnxzB0a82SYxHqnohZE-oAkcZTiFwCVdnZVhNHTemPyr0kWEGpmMLQ7o1S-LdT_x6TWq8T8zXeCTq_xHWIx5CtyUgILVqLRZ3O3Gw0UYxC9RXOu2byGWw0yrEongZunKt5uyW_GCd42FLSxnnzAHXJEKKYEWSbsEp-QgCiMuyXPLo6YS2Gz2WyxNDxEWZtnoRX8VFmBo7UfYhDwoBGkVppBnDfj2l67eTlpfTtvZlo5_rkf7hCbv10qwHuECuDYxM9_-b3FpIufGvJL_os-cPKbO06ND2d3_udVvI2Q7TzlLnsKOEWAtDO1UpFKWcX6F3F4lyStHD-Vius4iWSk742jb_Bl19rJwS5H0O4YoxDqFisSwo13VAamgY_gzlyOWFsirnDNt8sclv-9vkaqh73pJV82T6dAYGm0mhbdILf5CFVj4fUagdz8TG2KO8dndr7dVrSLgfRESs3gDinufnRA_xm7TVoZPlIkbdkFscJvR29xqmPDWVJXAC0UsUSQSATjjkouJZExsnAonKELoDx_XNGTC7ujJgNxs_cpKPN9GHZ3eaUl5WUXAtdwYxNP5qgz0oQ52H91ssqmY1mPMavSQpwNe5dOgED63PhztGUDFt2MGV11sOKNn3aCwSuaBSVYznmGFX9fIl2-7XQqnGKOAka5J5wZzVi5VtlaO018Uni__0sGK6t5vr4BL2qXlzgcI9brmXbMPZ4ll_JuLH6KFPAl0AGzqEzeSAI_f7DEedzFVwddaXqq7-mmbexhkwSXjQLndC_80_RjaFwVMdeMwkEQIRywqH39EJGprvU8vxv_1OHGllfvNcnZZlhm8_gpexktTruyFGqtsspP_Jqz5zQvzYaqCWI08Wm8j9VbLlBevQtDKZX1ORr7Vi7Zo_aeXDnuEH7M0XaperXwRz2Af6uTklPKrmPlyrBBz7AhvSZvBIQrl_ARFzNFV1fEswR8KNAOeUytt1HwCSYF0TTjwmalYFZwA_AXghl79ekhLwIv-64xaKAWIpgSMryabS-79A9svLTq-cGlu-wZb766fWPKUtGz7fT8uJL2D468S5j2fMlakoswvvy7Rx0997aanq3oW6UWuA0nkQNz17Wg9Q3pX4zZ-pZzMJ0qumKyKXOZwbwdQQQ8iPF7_lo6u5llHNY5W8oVVOls4jtiEBs4mtKt7dkbzXFwAEZSQTmWveCvxvNw7ali47pSZFYnWSa1CIRnrAJaGIPuWvxXEW4q9jhXaYU909GaIeupBNvd3wtHrAX53IEZ5uBYXfkhNPNKh9uVA_-UFbg7_oWbL3ppWdSOlVCoxbjT7nFnvSWnQLGv027kfp-BRDNbChqjOQPLHJ2FRWaSQby6ibJX2yG_Iaaxg4_M_Z7H4jqsEriJYgo7PJh17cxbhVB6HkPhzUskbE-J40eLmFzQX5cocRbajCjpLjWG9nK6mP-eDpNV2JE1bfujnYB5qY4_JzRAx2B_TXANsGFGY2630HknVVD-OIpeSLLqHfi3xoBc8qlNpBenU-rkBuQInD0FYBW-Lhw6HElX7hk3-KAkWg8a1_TQuzWbDCmcPocUy9VQK9lNW4tsWooK5mzT7tJa46OWStRD3OEDaTdoosOeN1V7bfJ78x48ZbVvD4xs4g73Kw_mLFJStao-7Qsy_l-1F-rKqCoxcAYQrjx0nSxlXwj1V1YJ4f13Wb2E6hLebZow1B8R-R0UZdcTAaCErWnwCvU5RjDnMzrP6B5ZnFh22InsX6F_GtPdJMNxwgdfTvWrNoQPTkm1wrjP1H9H5e-066dfl4bFecWxM8o6etPWCF3cGDpfIsnxVsnMEmFDyx8t5nVFBrmZK8-WrVEUQRqeYec_rbwkMa9ZlmHk5sqjh1hWH9Rib1CloT9EU9ttjFmdDkvTJJ_vXmkt6kIF7R2eu8H7z976w2zDpfdhKt9j4BuAmMs8lrJvor9l23XwCUaFM5qS6qkEh_5Mpu6sEDFofm2GhiBm5JvX5dVO8fXNPH3NvlbqnErwqhXb_si6E-EBIYdGZxViYaaGaG0doXTwsFVRus9DYdKddNrzZnGetVZDlpLD-dJYffzQ0k_dsggJYjpTP7474ascZ0phL9XmPZjUeNGFl8kg3jWLuy6hRxDIk8vN2lZuCsifPs840l4Pmt9NSDicL1wtinZvKaXMXnJLvzXFk3tRb_K9GA6esuT_HEkvQKwlXYIBQTK9MVl9DdOFccVIEzzLhSNuLZZeOhPpbdxhEO0VJwnUQ70mNz3gtAtd5a1iYpr73BmStdjbaaiuVGkFx0qAKiYHlTENKoP92wWmHmO__qfBWBxJtpy7ECOglPxGIxGJO1ZtH6f7Y1RTfIYF7Glq_cN5oDj1qbo4d2yHz2cnDdFZu4rWPtrgUFtHuSApFWqqxqVjUGuxvFT4bRJ4GI4ssnTzah0aA46eW80V9jZYyyF5K0GWcZzjwwFnEfWokNnK2XCPcCUWCwZtFsHlgfcGpm4wY2I3TxexgRk_F67A0A5G0Q09VvXoK0YRQqD6o25JtlhV_A6rMMQ0ujF6fPZLtyaLj3PjRB4j5dIU8vuFW1F030O36zOqawMj3s0i57aRLNH7BsX1YWZA_Jg0Nti9Le7nxwMrM7lJBK1wEBQ763DAuimDlwgpLearMUwW2R6fs_cdLEv4rmEpclGSzeMdqnXZFGW9PsEVMRSbrtXpvXiJVfzNAxG3p2JMv_sSZNOLxJaBGdDkrXBonrJ1rM_jinuj__eHND36UaYJnhfLwEnGcrCSHujOaA2wCNi1GFgvqO4jB_kAgtNWRFheSQwrnB0QtYhvco1qbH78WWg2Ve3Z3vifYl8quM9m30sqi-5CwLHEDtSGGy0A6g7HSWubI8S7oqYMvSjdo4Jibh_WOPPhhDTLHXOFjINzdlhRrDxJYRF6MRRRDSKiAuABtxkyW7JkXA308bqoLFutlZhYeLPeolTvNndpPJYl70uICqPDqlTG97WxoZetTlRDJlXDImvwbpuky8JtSaUZJwN1EUN2p7H4V31akr-fvSKqxbUTBIA-MZ4xzrDTTQyBG6ZVjJJbuk0DA_RWXH1YqheIRyyKlAcQp-SUeHwdt1AHgw2be0VJVbYnl5_WzHVP-95UdFG4fe_EhKB5ddQ6oUb4JSxXAPytDx_UT4I_YDpNNZbR7kz2i8kHbT79uMfiINWDf6odoPVtVhsAk8H_JQfdXNzJFDlqDlr4XR8mI5ZDnqblf1FiwPOARkETUq_hZKWLWMVTmNjyOeNg6_fFOm8Hb_wTbAwgh5D0WuUxd5w2TyeBuqiZzt2NotJuTzGbVoF5OX4dMmr_y87WpVU6KhosEgJNy87bfTzDDEHyd58RZdLER_MKIDT5EwR_NxedXDg6Inw64omupaf-xA0lOvnvJtwWQKtZQhfj2tQLeuSmHuQtRt4J0LWYlmXMxhTqob3l_gS8MVh3wdP2Xo26hHSDdHLj6L2v2Gz0NTYBVrtQAu-3MLB-bnc_Ql0A4AZk9cGMAA0nQy465z_UeGtUPIU4lYD0949vRl775R44A0F8KWnrZwmX0Sc1xXZ2w7i2AgiTlkliZ2JmF2a9EbpA7IoYkWD5hIfz2cSVsK7AHLIIYUZrV069yUBB_3LYIT7as3zqxj71WffQpg8R6Zl7MnQzgzasq7e_1OlfDMibb3NG6UZzadSht1eeWvqm5G_bUzg0JDjbz008_IvCJJif1wWf9YG3P8CPS1iSBpu16JO0GkGH8z1rWOrBDFSlFbxfajs7fLDRLVTC3Cf4YmEjHbf8cP5nrtgygsjXtKEwxR_fwKtZeAj7VExrJh6XKrivL0BB3Fd1OQcHHdGztHRGxVs9CxsdO68bgNf8bpNERuqgTmgG0h-NxG5HNcn7nrF-FqaxTbgZlKxiAFT0AxS9cqstzuSydBgPg3lxA6pJbXFzLPupv1pvsDfZ9-3dwv_ITJBCOEwq6AIGQ9I4iQyITSsDc05FL67tiW55_E4OMFO3eqpYy830di-79CQuqey6w46wRTfQTX4oPtn34fydM2GwUNh8OHQEAy_o7kYyQrHgrAy10cep2c957GzWQ8_rIbN4Xt8y7LZLLMe1z9kTJTz0EYPhjcS53GasqnGjWRMyv9rHAVHWBh411KKdTQv9bDsotgPPnG71E9MS_phhKeFRVk6d84pU-4SGqwCmPoOt2IZTi2-nMQj49q7HOhcHOwOu8INAPBQOcCbJHyNTZRFEKRelsyyTkzTlbQCqiQhilfNI4HnKsnz6B_6g0g__aEOkvJdZ75JaTmJmkHXUgfhk4IGkcbZETwpv7FXBGQ2xuCLE5yCRfhYq1Myxqxc94Qj6SRdZKJaWfWRS4J-G3m0N7zUBHuSnAClE9NzQsqdON4RJmNjLpKpkBiKY5PRqB9nV9AT4h2glVRI7NUvJrsxC1k1gjZkMKaQjEWtYSW_yWar5V9XZmyt-5snPin-yWk5PP-J1deR2Jeb7mFwWrSn2o_bTPxB7lwh2ngjP2oTzCrG47tzY3D-GBkLoIO_sOSZ43Wkmb-WSnAFHKESpEdXSJnYj7Tf9Im5f3tvr5leooZAyaVH0HT1XUduaz6vrJ-D6epqd290MTS4Mw2zCUW5td7ATTaMKRxBY3svxlVllcs3Nl7lTSiNOmU7WZxMnSSjJrBFQzZrC0OZEtvMk7jfO4aJCwQKzM5wdfTTpOB54rsuwcrqASoeO8A1DAt_xehVOweHvZsgda1TVdr8MSBEd8emVTRqTv_TP0F3RtpKAVhm-wAm5JqrUMxsMcj7ohcVrL0u_PSCMIML3Cs_to2JowiPwbZDyn8l3PhkbpIlmPTySNuFpPL-dFUBVpaQsYJlc_vasYJ0l0BWNTrps_7pz-376gR78hT6cSqgEGX1zLTm1B3xTuBMBvvsAy69ogatoxRT4rsmk5LdlUbHbtuVNsz-CljeaYU3byxhuL_R9tXUtbuGFDSbZr4teiWDu0Um8SIQ8x900A5DjybEc3eQ6KAGWa0CK6Y1EMYaA21kmqnLioCtC1zjS1lkYizXXmZaSUs3CaexCCsQ7aaM9cKynWbD6ebHPj2oZ9t2IhsN0DlcP2YZGKasSiY6zokut0HN-VuxTWUNAwjGZxJ4q7pHzAigvDWwhhO5r1ApPraRJuF3C_1xh44AYo436SK0y_7l0-Ynq107Kz6MYQlaSiPO3fyAIPoPPXDQShq-bg3Ke-srr_SFoFJEMpT4cMcEMjcl6ZDtoleIXpF1gOzS25iCgFSp0_KtydH9IwCAQKasOTqr3jpLRFHGWBcnW2ZRvWUmVo9M84D3Ik58oWeb72ha_mVtshXj3TYQJd-qaiiCSQIvN7b45d-NOdxfyS1fx7hRhQQObhqdWpxH8iOG6DOQ9Nn3rfN-piaG_CsA2gt6aeNkLdlQbTzM6X11Uk3DRw-uVBESXHOW8FPvbpdvWrWBsCtK-92h1X32ErirR2yH9ECAhdhUUmXjCN2O3BovVphrGN-77zii4MDnDtwhuGA1xjjQanem1FRpoZTexUw3pBl7Tf9fbssEVU_a17ToRgi_veS_-lvD_xPfh6I3u0rnetNKYgQ3N0CKfb8sB6z1kZ_T-K2ty_h8uvp12EPLWRUYb5AOXcroH68DOv0rg6ZMdh1w1KELc55tjZ-o_159aV931a0KEBs0ln-kM_vLv-BQp7d6H2i91OZN1gSyFDpMOEQWA53bUpCX7s9gC3m_2qBordgD3Dm_2yZIw_YJymWDLWaKTgZ7GcutYe8USDMr5mHVcNVDtHFeNbj1HnvsTyBN7NN893cOt7255YAPWjl5YqkJc349wGGCyNP-8tAIlwYKo3iUM2dTpHwb69AmUEhc50eYoaIdW8Tg8IyGB81ZL8t3tCOIW1i0PDcKndn-JK-SJa_ZU7d4QormJ1Ezo9ctBhhAYtXD1c3veBU_zlwOcYETLq4flCkuFQAiUZcMIVbFgvrSQyorZ-rn2GqDFLifIumVYUX1gPiqupTkK1pSkWLfHuc0dBPNdR0aSxsM-hW_D3FlvAK8AtJ5eMT-HowxvyCvh6vVNYdgJbh1Cu53-FYbXcQesXHVbhRfSyZx9G5Q_eTjZv6gbRIoIIQhEaX2nUnRjojySZWS5YaQlzB-GuAj2CfacZac4BSXNCqvmHklFT60UMe8UmYHPPlsFQIvNeYrB2st11DXP0eRYNBjjt1iRzLG0FVhYQJi-kpqSE5Ty0tPSVpS_rL55yVC3N4BoWY3YO536iUEWRezBcKuXXsU8kH7K0GSqeIwNMZhXfS1khP9rlDVCFP_ydFZnti6FT_bt7qnpuneqwdeXlC9MUv7odo8he4RAlCMHr0Ff2l46G0f7TiXqNAFHQOLh4-Th-VtTRrlfmnLKLQ9FACusgs05WIZN64l7bdFJrO7Yrsp_OYh_oAXzAzrY09cYdUMxgkrsVvFEU2xjhirjyonbcG8EgBBG8PJfZJLk2BhnvAFmC78VN75FrHot5xRclRyda7bJM4J0f5N5cIN9Mx9NwW1CpgAWmmikG_sktm0DaBvvLkVrr574RxVUEMAK7OyuUTDX0fZhUoFyNG24d1BFQLmb6chL_5xQLe0vD_7f4LA8h6RsuClySzvGLqKkaGzrzm-43ZjptFWXsawsWESmoCps2Q8Bq_tskeO2XipA5yO6zyXkYPa9K1UCx3mLp6ecq8TsNQeNQwLcAxRSBtRaitJdkorNqX2y3SBUZ4LPRYu_j9hICFHuWXYawhMDFmnslvOGfHbGt5R5ClhNsu8WPq6bV4crc4RpYj7mejXy1HwNyOKAxVZzyxsr0TTrhRKzchPdrlDpwGslSrqRBvq1ivS29nGoa6FiCmJfd5oBLg0wvxDymaFrHSdIhw4hb9gkeJLN8xkGLlBI_cafhJYzY9ZspYMvnY1N9N8lvg_81vGCkztmcwQR7ZklizTS3qdFOJyaXUwAR9ONuY1upd24nawFk2ETdY_HjBRLix8D5hLE5jyjRQlHGACt9eMoVh8x7yVGbrnUhtIXE4TwIR-4yFu4HX6qUwa06nqVV_TznP7e5Q2QfPFkA31V6h-1hbH6LPNnTPMLoYJIsMiZVJHgNG9waxTaOaF8uZd5eh4mPqtNixp3u5flLoJl9gFGPw_HPk4JjTxdqrduhOG5Gt98V-MJtRgV_Fb-mLXAAze4Y2NBjznDjuTmbYU_Qx8jzrSeM-_gthHsJQVmuWdOTRSAukMLqkG8WlQsww9CJSffHDvRTSf0ObZPUIWo0AcH9Uy0T5rD7S0BdydJ5hZMIPdBTz-zqWBZV30--xlEgDGJzjIKeQi-1yOHeQbHPhbuLVuUdHSfhGeV1YEZjAT2bss8M083dK6eK2IVgEcivpN4ppf1COSrJBkz99tvygkWEoost3QHd5jNXsB7rjnt3hBUg5w_I6ZeDyca62oQhNGL3UwuA3XQrSlNe1nCDcsylJrqudq7VSVgLRcv1HCHR1qv0Yoo59cYDZQxuxPPlWjrpqhHrS_ibQ2xwiK5DjZnBnu_iD3sVjjMTqe3FWI6-iBBZAadUpgQ5ZJmuOfVQ49WwCgXgH4kOXQzY2jJGFNLOKm9DpxNnulQ3jKLWwoG9KlJJw1VINq1aW--U2ebOMUK01u4BHu12gkgYvxmbqv-MPSwpvsB4mqxhhsdMW4fUHIyEt2b5MbRTms-DtC1F90jLNh393_kXDGTl2-yngOK5CO7rO280sEYAL5zaTwGFhWWe5dnPh_T9PQ3tYtjatHG4Fu7msTeodkIDLFA20S5a8wHifEzoZwWeeQmFedGKrsuZ46MCJYitX2tWZYHMFX77yFpfbXsG_jFQ6Wa9GNqK0gPRueKF-ayINg9j4YmnZj8r6vMeXnv4k3GIMzA9JstCY_OO6GFROtu2dcAyAo4A1dcLr5NPafcRG6kvs6O5pKgleB8qgnP91rPOQYuNhSz06Gb8geb69U4srQ6W65dVsRFMJ01TfWqK8jBSwv5jM2sdG4HMhwtw638zsjgl_N_1onYv_JQDFJOCt7QD_uBfHtOo96dcYfKN1jnmF4HsL4b3VprJtGm0aM3a7BV1wXsUsHEuSilNCUJnBq8ZIKpQ9i2cOK3bL7TcYNPal3NkxsZ-27MZwq62HRUw9aE1zkUbYiMMzpP126Al7ecNPBa9ERbGzazYMhcFw9fKpY-ewgyHlnpLMunHxjDSLnyjPOwi9j0J_iSupiD7l0YMeh46Gy4zh5pwFrsD6C-t573mMRzWOi3QHQjyS8kStIVeP52WT4gPsP8d3yyInYRlZvbIXHP5B2au2WEQFGuLju4TNov02-H0c84AzRMFhGxeoVdYdPXjMR2nvULokSx11L5S_AzicuJb6J-qg9kAoUqhqD3QJw5Na_n5pf-HNEEYy9Ax7uuID_2n51DVEWy84K9xk9Z-j12iqr-F4CYJxvgRz68vSwEzvxpIt_AzECyoEj3E935dHdMs3GreSdnAZonWmJZKCLpfzs-stH9bX1KdprIxsYGwSEcDRAKf63D4NoCK2jrYcCgFv_tett4rFVFukTe5rjR8b8sphZGRB9lJ3yuKAxIOskDMWonPPGovmUMSsn3EoK4FBl-G6C-qrUjPipj8_m7c3NO5UJ7xmcXUtRXCy8DaSXtEG65hB-ww0Nsg_Fw8u5MOtCuAkyJ9ROpzQDxWHFon1VHiJhhlSsdJmSy4PqxqBPrpLuG70nlgWIlekVICbl1izq5DVhX3vKNHCuGsRKfk1WFrx9g4VyP1PcoNGVe3vzk91giHShjeYURhCkKsOnN3e1UEpGbDmPuPy1N5cuyg4vwwCK5L5yxeyRhcukBD9YQ4Bm_uvhRdIDDrSLERwlP0ARAbo0X76E_zDM6wzC4kWOQyRDFkw5lghWZ0RRSxQWly1VAz3GtqOoQBjkhgX1ew5zHaAQmmaUl9FcNEo9xHiOMmbC4iR-b1CFG91kL_hHKl6FPIllOkKuEqbOcisxTWv0p2yJYWYqmiYqUvHQjuGdCRXXWYsF0OumfTTMR84t5IqLzgG2Qz9Y8mkv1-OXnZVzvQYsBuvVOZm2JaXW3W26ZnAOC35jryy1WQfCq-aLjF452S8jI4NizsfSGDmqzJlutFc5lHqTCVABxVHN3NwQpPCmmeswDRzk79Nn1SDIfGxa7sMWqEi_GS3HYjtpvTnWfUoS62CBYsAk69Xng9kQCP_Fz_--uEQmmg1sgKK4Q4bPVcqipyjvupJY95dwQojNN1iarZGmx7ZxyuA631QOKp2hXuG8mjwVX56cyj4iL-xf2tT168D7tp26hWUCG8q4JDmZeJlKqMYjcAqXh9vctueoIraCmZL6rYgZQvP6Q_5ScJcEjpqaMUl3t6cBL8tBAp80z4lV8x-VrUKkD6vWwtvQkF0l9y5fikpLbPWIuUZmMSjSwHqxfmt47ac9fxa_RGtiJNpIroGNJrUEcfHWhnGGeztt_9--_SJf78gnxcASsKYTYvpEiHSTxcC60B8AUHB5aimk0tVywjl_fjIC-wm-MbBvDOA0Ymj1OgGgIHYFGsadR-9mV7h0EhwwI0M1nTeHxTHDG57Y1wn1drtR53ovrgj51fW_oM9SE7vDQ74Lp_5TrC0zFFw_5eTCK6xpIhWwnQxnyD54jW_8JOJDBRZPMCs4NndLSKqcrariUmxTZsFXK_C7ER5_n_w8m13fDZi2H0_TmbLhKK6iB-R5kn6UJg-9xtD0nfEI8FC3biZFh9Q-Q_0D6-JI-fbf3buT0tGyVGITrFfPFNvXyzdjb_7Y98KSzRZK9UAhWs9Iv99s_isI0NpdKAP9jfMfjTot-rUHpxCsgAHK5f5Yu9BP7cpiN12zaOq30A_Pch9aKOBoLAjJFrZHSriAl4h6rS28pypbbCYIj3pv5Ni4LBILzRDAdNGjo9PoiUKn_LMdRolyiDCEWNJ9GrhNpwmDtcM2NbCVSZC-_R-wb4S1uOhJuHue4wWEZFdl963UT_GU6iguT-O0-GjlUKExEM6itN_2hFAj_Rta5oyJ9rfBtgqVb2UKn-KGJ0MSWJQwYiihwwfb7k3T_vO99--GWgZoGJEZv-5_KhAlr8KYBNbi7GN7yRnRjREmKc0Hr0JK7MZQrOtZZI0ZGIIsQeBDpz1OAb70vlS6uqHrPVx7baZUn6mKqprun5o0xmZbbCinJa-cKZw6ClYicdnoi7gr_9c27lrewQHLEPWeUaWviTNmgo1L57IadHaIgStJm8_vY31J81XIUfGVmqB7P5Ar_zFwMGQDnCGp1RbkH_FxiGKc5aKQNu6m8pOvdNIjX_Y9BA4I98a0XuExBsPJbe1SmU0VRzF8wvLQtq7SneJcHg1IOnx2EHv0sy1WO_eYGtSgMHsnXoAAf4sgDM_So5Nhqw5Xf9THNQs45tTcxQ6TYwiNehjOazR8KAOmYJw4F571wI3kUDPn1L7NlB0_4KeGlaItMIPkL22yYWLkIZBeoU5i0mhjhj_etzWL2oLGZMHhNl_7ijtVj7NuUWvp06hyn6Rj98JLo79NCUEe3m9jtNZVKb6yITE7Y02CKV4-vApqJw77GAeYiTRNH2u_2RJSw6JuPIdrI-z1QXWyxNuBcPJnZW8bUkYfPcO5zqQuWa2nYqm_bsTEmU2Yl8TM2G3Zn29Pq4vy3kC6OzujgVis0LTeBj_JgqjHnMaVnkgOq_wJoT2f-vo5_yw59ZlAlRNj_BQyuQPl-s0q-1N7bZsU5HiISz9guUlmYZKhZKjWjZyW3sBXRXQXa518lN3WojgXUB8GJUT7yTMTSUqyljcF9Qf9H_Wq8yznRrEY2rfRCEulkVrtB45JXZz_l4YWOfd5Kro6yBKSe1q59gjxcCtFiuZb_rIxQU00V5ZcClWQ7S6qccJOZ0lY0-vSIr4Xo-YDI4fYqNh5GjsDNBZY0vePX5MskOysp_qRptzJSf9jQzvT1PV8nKpRiZr23Jtn0tCvrmeTmROS3Twp4XWz8lOLQboBzGGTEXhv91sof5hSdQGHNgb3WiDx0dAy1gNgyZFpId8HkbQx6GCjvSYfy_9Uyy5CF7SAq_4j4sTOb0Q_bsV7yC0OEWvGumm6hg4Mm9XVB0FV_7DWUZsAWRgo64iuGZRIDIFjMKNGTkXxcmX9SmMs8T87AHot-1lmz-XWnka2r-nsBwYAPBawvb8g5OBxNs79R07SUHBv31s8UC45I3MjrSkowykKEe-beca1DlWM9pY2WTz6qvHIyz7DNGw0kCNda75HolTP0-6b5Tg6hq47CJ9Nsy-mdWeZgOtbFHzFnYacpUfpvvMOKsnmjKZMXyOyXhMDXV90WS0GlvBWdvF03BhTqKRe9cE9dhrtmmtEcNEn8JJbnyEBSp30VQglFlkiDmagELCBFSFA9BIVilSyP9NntHchIQq7s3sMLWMNGluDTOek1A4qS_BuLB3B4NTJ33vnpNjbEj7rCPgdpLha0Q49iaBqnt9EsJmuUXrnW3cT2wLJVQad84hnDN-Iq1-zn-73teEzZiI5_RkPayIBBe01ljNcSEVr9kiop4B8PNeZsb0jkiiIVAUZ7LHEAuWHFKFQVqKuivhrgkWZ9-_l0jH0HsXmW17RQ9zm9ICBQs-TxtCRdabgYJEATc4tMi9IQVAwWCmIKbzakP7sNgL7nn-i-Ompfzq88IvUkKgDd_2oAZRlF9VxUgZfvKPLC2m3rBBju--w45TSbjiS4ZqINBvkuujxt4gRlPZN8-OrNCRnLrA7eNphTl4sdPPcNiym_GOPb2kGSoVYbLUoeOaF6TNr1xOwKnXAIm-KcdIwNb8JC2TcklYOR0jUrZt_kFi90D1P9dXuhCoxr2VK-zsMmRzVhKWfU298EMHU8nKQ9ESqx28HTZtiC0eMNandALPAKEebpnxKeuKKL6sCOgZ7WWHGe1WDrPS-kG9CVzE1vuM4R95XhSEV_DwEK5nHupA2egRK1aGYdgZ7-gGhU2jaK8JFu70LORq_EciMjsi3iU3GZICOHbyuYwUNjlkwVjPfqMWCRy-FhVE-PNvHbLImRU8s_QIhZ5msqGHcZrMqvixCR0Rbw4UouzwKIsLo3hQJKEO_h1ebJDQSKr5klgt7w7S-Qel7Is5yWNOoRoSJYtpvW5Lg6gIHigelOcKRQIaTFTf5GoqDUh-v63xzBHMZYuVDnoPalg3L40AxgnDodPNvBV6SKlAlYdHrEHndHRW5xUhxXbr3zc2BvcS-0t6FCl2ZRKU-WM6Eboslu8RPUehiJqSPNYDLK0iLshx4wIQcikiz47RtwxkK8uKrEa84rAlqACsMUh6dF99G0UXjbDhA6mhUCbTRWoSCmnEbXv_LkSERi-RhqH70nLeI1_GSH9kbk-O1kU0Ccl8ptUeXsrDgvj_MVS4Tbbc9CVrsIzMRtnG4i0dkdYkqrrWjQiIBGyPzT-jtNAVK4qCl-LwFEEnRnMxdZ6MTv8cXuNdUwpmQl37rN2nt-i_lXuZMaLNHqrADmZ2qHw67m1FvZWJzGS5einK-_o3-iSwaIJy4hQIfhs-YmdHf2Wr4BHRm98W-CGk7jro7zH-xSEx-9oA2BGePUvz_O6EI_k-hjG69h6x34cdSSFAKRQ008Q4Ygq5wafuihKOmQfSAz6aI44v6GPQYWzqzRmcR9R7NByl_1MDRtq09cd1E-DBKOcqhXzH4ijGGUhivD2hWhQQC1ZXw99nQ84Ae1EQFQSi3GNjNjz4JKg6UAlIISthNzkXGLjkzItJyRDqxPIlj1sH8UZoiyl0qFzjvySl0beFOuVSz3pcDCMtNduTubIzkz-6Hwniqq6Sp3RVfEJdpUwCz0FSCSXULtELd-C3tqAp01xVPIpzaowLxbA2VJez9JVpVeVmpUiGKJ5PXW_Bv5Dl3m0wkJcTxHo4A1V-hmZzzpjYeiX6Yn3Y0cTJjioAVoGJNhuGqyRHTG9VrZYWmsc0PNdDmBIclVl_LVSnBjan6ncwizvRnC87YcxFVbVUt0pj0TBEbtdMnYv4f710Re7he1itrcICiyk5OWi5W0I28eEGetlGHd3G90CM9lQavrLtGKRcxRvTzsvhM36SwsZGicu9tbhtgEHP8imJlr41hz2FbFzxddAs-cs0MS_EcFsMzDZLN3b7jBGXN8VA9EBwL2OpiLuMLsGn9-w19bWMImNI7OgTmyQljYsZYzIXsHlGTkE1-3i-NrbcKcm2tQj8l3degs7Ap3ZL6PjAwnsB74zHhPGzso-yKipSwy4ycXDOOHgAxY1Jn2zziH3iUyLuVTXf65LQ6c_NmUoMoakjksNhNU1ZWyQyw--lkVOiNeRHLn5nmjK5t0WLe9CF57tAf2Q9M61pJicTj9w-xjWcJfwCI5rzYMlWkOVMJsFGia4bg9tkVHmukjdA1ACAwHGuoKYekNdUcF7h2ikpaAYzgU28YR4dE5oW9x9F7kIvoN2vsvLMu0cE5JY4szBkYVryXyXxMnVfUEp-InWb9cltnzFlkPJ46jYFsIBBEWGxHmIFOAGB9C0RzDBU_MtvOK5DuJqUME4KUU0xUwipRAaK5fP3M60wJULQg_BwzDkjtFpt-KkTD_IvAEVu6iJGry198RZCU4pwhi7HC7AbzzbHMFuypZys2-ygodYhIHE6ypv0jMZlvALuL6h12JjFJHOuWfsjz7NWgsz5wMI-mzvcssmS8em4hG2dnMY2JLjOsnv9omUdpT9HQuE3XHc1ooX4U8gzJ2OVZoDfAz2WnK_SAPSGnjYwBhqUdu9H29G9Sc0eHDsKbu63wS249O5JAVJSHPZiFv5xw-AM_wGWif23ONmkdRmZwuk_PiwoPy6BcvODmMYxGIr7Zq68f5Qkoxm_dHrOGUd55Az8ziOsp2F_CZ1kAqbqJiBqTSEpzVDenwma39oe0rMc9Q--3jzsgjoSbll9eWbuDBbdsZMbunpBoPsI9t2zmk4EheCoou6koi-CzJA2HkqZlnYpQ55AUh3ZsXTQfWH4AWrJRDe07oXv-VVciwR_Pl3TOr3Ju9O3x0qkDRLjSLvLPmXjzxRqHm52n3_CmRLJ8oc6ISXHijPIR5kSuJ79yxjBDbSm6anLHhOiaAXL7pfCPsUocQS3_3bFyGkobpm2VN_kRgv5B1lhfN4PKlVYhccR1NSMXJ7KlO8rN-fsl_8L_lCawh9PSgu9gI0NsaBcZxiHMJxGLo0auChFwWSNw09m7lhrYst35PXLtkA1MP6sdKTMwpqngg6CWq2r22A8v32zYGd_tPD3dLT-k96x15rXbYqnIa9RlOvWrCf9mb8FrKWJDfUapHlEo4CcwrPWS7KJ9KFFmVLte1nwwmsFW6qrycfvUb6Gd5MAklMmYeGVpEecEZo-caXPtUVv8EsitkymVhIsyCVH-m7vRgV626IVZXOovNH_F8ZbuWAtYQ8JwOXVktCYkMBHqLFbG3OVmXuhRuJYx1skJgiDFgftdwJ_qROhHNYgiYBO5n9piG9XWsgvHI7js8hZbCh3ouY5rOI2_XvRp-NNEQ9prbIKJztIk6AcDYlWe_J04DoRuRoZRn_Sdfe22af9t2t0pyrECxEFu9YO00zxjWHn5JmSF4IBYsnCt-P57v_bVuBzBau956Hryw7EuDRtHDmp29kCB1IgjmaeLkAcXb7kPoLfv-bWHd9soQq1vjRAJKNq4SHe9QQhkqZNMFHfIb2p7Cq0mC5ASR2M6Q1HT7ayptfQW16zXGDrXM_IWBa3SneVvJpEzKzTFU_8Yut6r69-FA3Bc-TY1BPW_qAoeyXlbPJdXwN0L08GRMbGiA9UOAIZBHVHKdK5-dZ8OKAV8SP7qgRYphwwuu0qaTufamTK1Jp-JRYvoyiP42sBtrSCWWq22oc90KwuDZJsgWf3uqgmx49PsEs0yS21NNMdTxeEpuhCUH_yUvHxOYNunpAOP46MuORDzaxZPfqvudNIJ4WqoHOGES5ODWMmNtV-UGTLy-3VGocupALS92kJApOwHNDFGbv8yyTTDKWPKOSBhzcQiYDqLCmMINespVq_wgMZpHkQVeBoeFvrOYk3G0F8fKKPJaO2rMs2YA-3Hf6XN7pbfRyF1F7gIEtybWumIxtzC6fY0rppWFps-yPB7sU7D8JJIEU_kE4EtRWdNyfo9ZZgIVOjRE1Y4-0NygMLAnBICgBjy1xGS22tlzLwJ-pcxrLV2AMBnHu9mp2JgypQ0tfUVcIdm6_luQ-vTV_61uHW0hBmTA9vJosCems4vuNEuC6eL_km3hvCGEsGqaTJbE5PQYzxBsj-b2QW8lHKuJKtSA7hBh0KqYxDh3WbI1gXnHXEfVGNfYIc0FwOxm5dxx_jySpE1Q4wVA6h8-Vj5rPR7U4ZX-LrzKl4OxDb8t3f2IHO_GQjojAiJVoE3Ar5c_KMYh85lmaNcOcP9WsbXJsXip3dnVvDlHNCEXgYR4b4Mp7t9KR4xjj8io96yjvJwpQcv084c5luoFFC_Hp-7LVPiAiMbqaEf0Q2fOJhnGPEA2TF2Cxy-u225ehvGTpO3xmsMjxDRvj1YOhEOZV4Uu5TbS5MtFkpAk2I7L-yd7DJmEYDB37smM0Ah0g9zWIEbBLe_KoQQ7WD_xILKyllE8i5eN5sJXcf7LtiXE7tZam4NB9FyjWuYx9f1ErPteLh29K3tv-E4Foz7a84_p9DF1UXJJrnzhbt7LCoa0-SFsG6KXPjQ0iHcqrnTzMBbm484ANZC8TzJs0OJ3feADxjzIdp74AkQ10VHZvpQjkcNJ3PwXq15RU2RBTqTUn-ROv-6GqS20Mw5vhDoUx9RGQbuo_bohNxaWHXCI_po_0MTDCKVEQmsbShZWMxQfg7Rbqk-GZAqubsvPtTeeymvk47iptWOxUZ6aMVkBnKlDDmyXPNuC0gFLGSMEJVbg-5HVOWUiwvm5JhU-aqTLysYX6e6Rm0-ynXszGkrzNKuDzweF3tp9L_aHcYSgFX5Qu4mR-vHt0-dVIDVBt8fQMmRkDNWLJ3v_y57rEJ9j64ZeOWnK1rdRu9D-i1F6lVH-_rR-6718CeUDvCZe5adz1Fe4GHEz5My783CNXlwD_6VubqgBYIMYC7WEHBaO9XqamKPd2JAkNVT0K4q__G0xZT0Domeqny6CndhZyX19AaOtlzpgXyU2g9nOPDP8_jE36i6h_IihisoMwJeI9sIsHwcal1KsasicnNeuw5KLaq7rkXv5kyvIa8MoaZ-YnBra0gk8cAuU3DyyjPQpUkgEzlOBp3VhV4Eeil8pzOISsb0sQ4NUYIEzDJzQRSsiQ2X_asc5I3TW5flmq61qLqGdnk35EN45_3TgPzV6l9tYVnrdqum0jlYh-xHVH6VsZJN-R2YBkgBZ8wXYUcni-w0pj6A9fGKELCWqZFVJVPjdEvOsdRVqNAKYfs23358SlyWqVlAQHagC8L_fIFpAKm1OsYVOHdLXh1MuQ-beupU3oTHCpH8m1kyIugLqJZ4PPMt-aS3zupDs0X5nVYBEUE_1SvD8DU-NDyAFaPP__Riqgc1q5Pmcs7KywP5Mi6gtOBhatqHqN_nqdPili1xo0pLhPBRY-WuZC0w8JUdYJsPQ4b3-LLERMquxkGd0vTONLZ5eIYpZujfhUcyhmHNo-cfx1xPFNBj6k36Mi8iEGAh5A7HIw5yAr5Y2LYWxlCAeB8Xpx5qGwvMOlju14kcWZGCWXalN79t6OM_MP9Q5noETdvAVWlaFnCrrSPQ8APd4de6sr3BL91eo-mKwlQ2ju4FZwzaxhUi158bRoVCqw__f4WQAoTh_YTx9H39FTzvuDfKYPGNxCLo4q6lTEZXhCpkHBUcbDP7Uu3yuSyM5WRiPbp1ik8cM9l7rIHZdWQSlfDwWI_yB4gd4PfVwVyIojzcgVkRt4q5XufvmpJYHupsbohAWjrrGTuPGS7NkDlHGIZSk140Fj0ECpWGWF79C3_oDtQK6IT_Dth4TnfHzpXthF-ZqSOASfiCjJhP9DVZJ1JKIIxkWNQfRun1IkEnCzxGRt5pIPFrck8HexRS53RUGiBk-wyAkcb0K8EsldFiorsGbPsJjogsBGDIufcBaDjgBchHrLb8ZT3QqT37SuKuH21y-vsepaH1wGGrXJcdKL2O5deMFjFLBPmJFJMi50ep0Hc-8CBThu4vjSfnCcMNSe8CHgz7SapEKKEmz_Z76PaaJIXr3VR3WAnMWy2wzEI6z8JLzaMcfrbZ8KTD2VheruhQH8QF2ZoGidOttfvloe4SQCSi16Kahkcn5w0Mp7dtlULdx1FIEf5R2m8GOxM4QkCpmVZKCcRXH72RsM5jh7IcLOKFFXuw2p55iJLm-pjQgLqzQnUCsAQeuzMJthx_10qOqemurCnmOgtV3pgnn8r6jpYKUvlRPcovr4qZbM78vPVQirHcAoqEt82BVH5i0NpOl853gaydIwuWaMtQqdVBJqkgvwLIU2YRVbfGUrD2R1kpPhcCoKeGLgJX_BTowgx75nrDNpAlQGHFrfdj5WjmiWBC7pjR6_NBSY05cjpenv5eWkX--zCrtzoUuXbbNXizw1ocu57UsUOCDeWrosm_bJDHjYdzjwPKjyaf5jWnrK54uwDeIQSq0UByTNli_GX-1STbEgktFQdzvfaH8eTINi6LYLglIGAHm48OfhDQFHyvw3gUJf8ICNoQQSOSuDAd7CnXZBt4vimnMA96-lSvVoxkW1TIHB2WtLZH9w4EElK1xRZleai9ikMe9AbeEC7n_ifpZIhtb_HXY3oiBoH6cBPIr9t9TamGpRlzy-1JGr4htTUhNfMPEyMc5FFhg9qLKQRFvDm0ITVngMCDHR3XBuUZjfjKLqFtQGGdUnrxbi68Y_PR1vNtA3hBAzsNPCaX2VlBu9EWBv54RI6civLf30nLuquP0IFD1Hl547ZFCFyrBIPMH3cRTrDiDvG9qx1cdnqrnxnMFciBzkL_xrxB0lHrrhM1pMlDhjCcZph6N1wSD-UCFekiaVxcJJQRF5XJmea4JpFIhAVJLsWaksg-_QNzYf6Az2rv_V31xku9X2G3kxAt11CwblxMwfXTR1On3ZMGPFhGBwS_ffCMkyg4IoayDaTLFdsyx52buiifnt9GhN6ZnTGXPWcbRRPltsRKXIaEl3N8Mc8mCNfK08MmzLsx9l6MVLZckJZ8lWx-EBIb6byI6byMVlDYRwhvr0NRXnPNfiTaE4yJdblb8u8CLIbsunYL388KySv16Wf8RpGGVtnrCJ6QGqP1iBCZJDmvR777lo1veCUxiBwxLYqYtL-gk1ADN83YXCNxlB09BJ8EUW5PCBlSZtI01KTJBNufNTknFRK3L6IQdDFJ73vkzmsrEZgCLVEKdhtsNT-VwW1A2jcehtdc6joduw64jiexyXuoLZezmYS2uhwGCizHFOa39GLMeEDdbATDq_cDNHFS4T-cvpOSvonHbNNdgcSGtxuhAKEl5561Ic9Qf0JDG7CEWZKkVgWiBaXuWDuQg2HkmXxngFRsnbtKP6nwN7c8MyN0DPKP2oRLbjiRuMrNqmkzdKV47qsCtE1lB-OW3gsSnqYGwBCWl-v53XpZDGfkIbN4nNezGbQWKV-ZB3TwnTu6YdSlBvfefgSV4HNJ-aucBsK2ZspjMBifynLNBaCtlO_AFj9_EwGEWVrqdSygpoXJg48xPblJhfaulJ7uANvG51UI6c8A-XGn1Mwgoun3lQH9_Kz3UQmtpO6F9CfwnzDGiB-ipG9_x3cZop8eYKpujR9esMBX-8ISug7jdJy5p0iuup_4MBvRYvdfpEgCKJAf80DCVw8G6ACPJ05L8AzFoJ6y7txpMxjE2JV4DX7yrlYxl5ZWXGkCPHR1La9a_p0mOIs5OvP9r0cGrVHpGIVtxxPS4pFaZ0P93XFz7-jb5G1GUcFIcJJQhIkwNs270hW37ogcbrEY7xKAxXH1RD2sjVDJb0r9oeqlb0NvVKPoDD1fNZE_iZheoHdCJetWZ7kG0nv2Fw5WnxEEX7dblp3PDMG91Qr2g6oRlVQ30TDxqXbJ48m_3Vw3yke77PuCLIMQTKcn4rSBHgNMfJVUWx8LrNLcY-9Yw6Fsnuiz1Xh4bxPeISTw3xYX0gJ8MKuzsWX8wdwMd5HUx2xvvsqFBfy3ty2LIPyvbQxxOSZ6B5xipBI3F_uVgG14QnNzpRH5UIkulo7VKfIs9bfNOKZXMRet_CRAgfPxFrAM_PoVfaCFz4t_vQguBzLiniUU0_7YlBBGFEkbs5UPOg65_SICJ7oPfeqJhhGgcKv5LeuGrtAbOu-99YPVewuK5GFwIXVTMUScqpo6cl2QdLmC0_rIw_Yg1rOOTj8hbshXRHF-2A77d7eXegNNAAkjXVmvMQOH2ubIgRTWMqm6a235_Sd3oYibNyuExSsBzEBImjZqaOBj0SaeKCB7tjyO8IYcld3JeB2eXGyZFJ0XRihtiYRXDKRCjpAEAsWoFCCqFaVfMGx4SCS6cbnNYlxiHZDnxeA-M5Bp2KYXo1sWSWONcpl8PLhDNFGpHg8AefhLVbIVVCKjXmQMEAvpNfyqQT794shRAPcSqUSdAy98thsTbjgNDCOcjHdJCIhaHGDb8FU4O2qnk5jQ3jsAw-WY5wFQfJsJz3wBuzJkt71YRaZzo9KSenBbbuWyS7J9JF3oduHXfnnqf_k4fSFLdk8lj-It0bm4vb3nVMwNOhMRda_YhWXXxc1sMPfSRZatWhohVdXojpmBlJh1bX2S3oZvKFBPitQVHw0OBPnvc0n-w9WVNLCTaglJFRQPqo5J14_GCKOx0k0zKs5jgj2CjKZAlmxZMH0gK_qddLEldJJJKYpXgrbKM3nWiFVY3YggfqpBk9w_sHdYaEgcvFS43txOc69QG0_aSz6qO3-lvs26aexzO18-D-xwbUTUa4VZf1STU1Jt_VH0st0z5Z_wNwVfLCtYbmZnYPcGlpH5y1wvXRG4B-hp6qKSYBPUgtvyaVGsOjU8HFc2K04dmHbwR6xTi5_d_vNkQKpfSpPj9a6SuLMZzLcDDO1X5FI8sjYuzy4vDyDEzORb6zxykA6MP5OCygHgWO-3Hyu1KDVQ0GrYBsDhQxBptS1-KqmwkjXmzJq3AYjOprxkQKBuok5iO8-Hhbjfa1vJhm6sTPMALJEVFTlvIVPMg542LOaE6n4Ksy7J0DtbicKqMsmG9lOgGR9fV5qAB2no38nlaej2x6Yrrq_ek9Pc7s1_y1zGLvcX1zglEH1OAb_QPhomnejNWnQI7F4LBK-8GLKOj0q8gZEf8jCwgp5idZ2ZhfXBh2awO6ILqbgsT4pmlD9vBZHiXD0w_864VZD1ZuNjo_5wZMjOCdVmLLpQBvGgfnxTjTmqVZzS6S-2r6tnvgOCAl4ZMbt5D4VqmHq__cDAaNnkhql83hFuypQdzfS_SQt0YM0g_6_osNaGMZHMNTRKMGef4SoZ2leQEnZgs3d5fT1-RkqTrQJJsXJ767Pey_313_cjRfuEtQE-Gl41RwOqflLtD8r6Z9y3jIgZXZWoxt37eNqULFxEZgMZvHNJRYoeWaUT4PRa0-L1z3PNZm-3w96VI4fpdmGKpRsyPTaxR202Gav3KR4xy2mVQPEoqifmvxpiAHbv9RAouzJPiBagD3Nwwbpzsggj1lmzJ3p7Pb_WNTcOz3uWUNWi_uKwdQiaRfg_FWiNERTGEylhke4ZIKs7mCgW_MweRsloW-H-xRs1aKAUAX6uE6PTY5tfHdPld8Y5G7G3lxaf6X2Y99TzDEOsID4p9jx_nwQDwmdC3eUCeGFCG0v-JlwGEStMdA6ix7cirjaeTkvJMXCvQIVNENdS55wUSbBOBg0bfKO7lS-CC7CXxoNqTUfh0d_iERwzbuhAhy2yKn1IhBT3TbKDlgKa8vM7cOpzPcsUFYHMZ30G_BmRH3RdFMC_jIwiD_HjBT-h83oAS_-H5NzVBDKewXJPITceIEMDVUwWA2pbcf49pKv-PddyjSd-T-xLHa9F6qr-wsumItSCNrjaB-DSegew64tk-q86Tgc79UQwwiVPiGKCnZOn4HsVHiqW1XaAXLOAP3pQHBp1ybaRfZ5Wyt_imoo_G45YUq04NT3UA2_gjfqMh_rmb8jk3GFDWfX_Fuqet1l_RRj_C5cE4NFYuSS60WCrZI8uukovcxemnowC_5HY00QzZ8XXtpYnwIWC7m-YEBZX08Z1FTR1pG0LaqMVvj91-qKTQCeGtOvBrBJb_pe0vKzkFg6iGsuTBG7z0kfPs5_8xRPNaW-zOiE0_Cz6fYcUnc_HXuadOfvriaOAJzeHJGfu2Kebi0YCYi41RXyhrlkydmb9Fk0LO7IcFqTEKbE3LStxZycRdgApPFpreDuk3E-qcITCQIPQhO7ayOg0rSx8NdxW8Vqa98CvkbpyeyXqhxn4m3MPWRjchj_ibXsEfofIgWi4SQboz-cI7HA_Sj021Z6cSGp6C2v-bTPHXTru-6KZRQgvf2ySfuMDQSpGIh9zXV348Rftpv2Q76spm8xRHBzFJDXJG56HSwrkoBrqeIzWbDXr-gY0dPh9cCrmt5mbPQ9QXhaqUnQoSTGaMD6XKuntATTT-gNQmTD5LfggAezIR7oCVdapnqYX-FUkOpkgYnS2XqrzL4pFYhYGkB4HJQI-h5TExis4dBnW0Cf9n_8iY-XdQuim5qnXUlbBOPHMVxf8J2ie8YaWqaNjUO7sc-YEc8G1-7Qgd0FBH4a_EDrNYm9ybz9gmu3YO0TawIVrsyMEAg6gJXhxUdT_RpKhuOGLmf8CtgDJVDpo6DUQYOdg0J3_uCB3B0ZLJhIxb1B1bqr5xjQPvGaymotvdmTxvp4SVTYtn4HotQwIKruJplvfhd10e6ymtKd1aUq2On2A2ITrdBL-1N2sW9w9aGgVnDKpj2sF85HriXbtQ3Ku5brdwb-IhwrXD65Hf6-Sn7JJaCQC11x3Cdkq9Xn0QScsf5Sg2LMJe48lIGEldggqcXkk8jiL3hcK4A9nNZVLfguqG62LP5yUJT37k0s-T2pm1MX5FEZLcUYZWEXzWqzhwT6mk6068AzhcWzZkUGTkkcL6C1kA1KaPSOsl_z8NFYKdi9IFSge6R26eXGlTbYoUeh3_VXBpvkBXmMRfYd0cy85N1ayaBf1Yf9Lx5Okjo7LKycuT-BzwWjeQQZ7WHCivf22o9Eg1GNjcS_0KXtx6eVdgIkaU4bXmppVCVQQOYAEgM1EDPsQBEd20yunlm9i7RUXVeXbpw3ANga_K5I2xQkrhwwGcmUMLdEgx9SrC06L3fTdNMG6TeeaygMk4YGIdKQx-kJN5vrOfbo0APUei2t42fTG7JFcnMucrYRxyXw5GS4b0H-UFJehO9YKcAjM5TF0Guoqwb4I6T3UqoFg6flB5qF8f-7F8xuuXKUuOOaNq-EAZ8iVZHhfdiYF6xsqPCj91cyKZtvw0i8rloM1G3AgPMVxbkjhAd-c3-O4RxwBq4X9UPPntSjN5fN5FzyQhytuIW-ikFdn_v5e4jhSstQujuGsrcTOlY2rCLA-HGcxDtzSL37d3ChARH4EJR0QPJIyGA2nMXslf4RfkyljNsNNx_FteSyznmZ-VBMGgXhIl6j0wnKH_qCWHDeoeH8eNGr_1MoGW-EgAZxF_Z_q19Bi38BjbNieSSpy062kZEeY5oa4K0cavxW3a6_gikxD56xEVVg9UJdWBtlkueqeKv7YYAvkysJKPwe1nCEAMzmd7fuwTYr3PzQVRo8kwkLBXVfK9vCdYxz9XDwiapeqodunRsLF8Ee2Sq-lEBgmJtApWTYbLLjL1LkhAqsY_eYQIKJeZXr-5gknts8Rt9mgn5VIgmcvE2a8b8AQMYqjmnV4jPHwPwLf0LtcvN9fGEDIHridRpGdMMSozMjXo4ooA6tNfiMLdEDwUdx8l5vVgfGfzucFBRxww5dpUUdhb-gLR228aV6-nOs6XUUmDZ02A4YMC3M8Gof61Ye6uPOXK1InUub6F3zwVxQPStVlUwTtBpjjl1p2hj7UpQvQ-lXVM8I7As52Z5VjW7GQZxIgwQeH2MX5ts2DBewRSHDOSzx3Fm178jlnr5axayPL2cDEuya81YdDChvBfN6mjVZWwg3ODl9Bg_lbRycs1-3bqFYBG34iZoWGHuPMjM-2tjWhBookQsK6RuzQDnKKVxoK6rz0vyVT2Letg7ybyQvRVegNmuJl6DWi0WPfZy6d5ZDJ8k2PSKoPpv1UOtF1MDvd2B44jYJd2U5KoN_XByjsdQn5o3Xy0cJBuK27JxvoITX9jqgyfD247_EHZDfOiGRY_powO6M2s9WJFFwufF_R8_VdJiS6rT1MZQYTqfdM7uk6-lpOxp8FtOMD3zpxqZChM5FcPCSr8MRjiSmOsrrUlcNVhIEQXH_73SNt8p8ODOMc_O2cFqpLBXD3Q9eWk4VNdErKG8433C_ydEvP4aB3yKMfjaU1AHIecgovLclPKEPVwmOD7La1mrTi53mlcX9ifawNI_nbBnVxhZlo4HletGWBF3KaHcHwTxkm-ag28GB6TvYQ8EiWLT8_lEtIEjsYYctqzlfBjTRjRu9mEquescQ0k3SPqL6n8mQ5SqraOvbQrTHB9yMR2M1twTHjd4-NfRI_eSkTksoKhCtLx_zAj--BLiAhrZq-cYnGqMYOCbOiXU0ZqrZbAprdhwGWSL6z1R0uCBXRk3YCElcvCjhTTBmI8kNnyiWgo-KVXSsou9nMH5dSa6jlo3-3XJZYoivg7p_VgszhT3pQt8CtFhBh-onKetLJ78FfHr2XHuBLYoTXK1-NwjgBsWeLaSVxtb2LPxYYmujvOcK3ffyTDthwTCXwRVPuIAsqZfAYzbLpufythnM8HLoa957JsAtJMzkzJjqLdIaB6fdTWoLZsawGhwqPciPpZ2Yp2qnIiu9MRbXrRu2q5rT9Av1vvpyN963K1TIklmpZJUq2Mqfr2cqEuFE4nMFGPlTlJ2mHKCQ2m4Ld5aBMqlvadVhbiyieGMEtoZ8f38KtIIfGibIYL8QdyAZbbGhK6E_TraHtigX9rzg0upuS28r8x1uOXyESHE5mcghHXk0I86VsYeGTcuS9L7Gd7F4ThRFvlE6j3z25bwyJTsTF4m-HIY3eYKZNXpUqurkPlg_uX7hLl3Ccr3uV24vVX7BWX62fGcmBOsXDfPlccK4_wDFKqsMvRdmb81cZ-l6DpF3lCHebk7QUOeW86L9MrJfUft6wMo6SiOfG8EvNmlKucut3fMsuMLQK1s7h3XIMdm3F6lp6rdIRO_VJhWAKp1JT2WgXJrEBwIKzz_B35YiQaDTOAhZ0wwH3t4GUJk-JxoNBJHh_xSp83cE1ahiVF5dC9cNua48IdM-NSt7rL0CTcBzdTK-MgH7mZN2sLRmF2bjHB9SZimQoAAHtcCQTo3McXvYwcmR1N0OZiCcHsqjNXTKtJ1IsnOE-lgVWUr_64mkiFP4s1LRWmbZ1gnP0GMH1FIFFxVgxg62vQNQc8yP5GmhfZYLiB6yPO1MMkbCAqvxoDX6TKF2M6N6gyHIo4UQgEbc0dtLAmkX28-uz1yoi7oh5-b0WR8U9flBWcxH0IOb2XCoUZ43xS2Fw6tZIT5DAVi8rL3A1mI4jKYquuPj7eWK-TK9Bz-rBEhpfqITgvffos_8O7NsBbtMfI4JTTxM61NkZ_u3G37umOUWm4NCgszVmLbbkCoIvTAJUHz6b_n8Z0MzvoT7DHrP1OFFyXYlhUpFaFmT6wusETkbYp5DyB3sumX9WZZX7cnS0ms1cbR__HmvlTxvSgUxd117v_FnorWCUVUyOZFFBsBngCzJXKNUT0owKVfqioti66zf7jVfp9IDJD99-xg5zctunB4gOBJQyBzKqiRgThfM4a79qNYkeavZmPIzlxBEP3ynzADA_tVdDvsECjrv3YH8T4WKN9Y2JcEIgmkbysGV5desWJpbjrRSAESXTgf6_rhevrebJBQ-wZlJKj_IRZNcThnA397dunCaqKVX5VgabTui1zMxBB1vu4mpSHKVPODvZxWAEgdjNcN7YY6AAIYnKv-9tv8oe2vk8d6wjFC2Fazx-ahvxmidu19AzEfOCJIbN1RaD37Cv2l6Y38aSY5e0EFpnZ85cCfh9TKEp-U40vxySwLGExKQhoyXNvr3SFbY27IspmVjM0CixjgaNUysK1zAXR-RBRWU7GjRm8rOqEWvpht2DAzQwd73TuWJtlkqq4wzOOysqEUI1JhzVzPf3M5lW3vEcXq55KYyVR38kU50xXuBWdthA90hZqct3ogYdI79mydjLOFyXC8Co40iAX5TDa3ApiG-kS__I_74peP1mO2cON_vVE47YI-P38Z36yYvyJxj4l9CA2hCcfHf3x-eybUDH1f9-gCHdjOUoiq2HCVqGab_XYux_Kr_5UoFsPdVmQwjQuslpNrHt61jAmb1HajCwJVn368MI_Dpgi-z3crSId9b6GMHRFhAWv4Q_lkV-sXVmWItxvslOsRLpGe2-3PY4l-jJYPJQ0Wo749Lu9_F7BjufLlflkwUIeaAbkoBXN4PMlwDAo7KDZsKsl06e8EW2J2X5I2qKV6y6mj_YwK3FwvxhJx_C7vNV1I5XCGcYxhF2N0rvFHd4NBVl09Wv57hfw4DvsNFS0bH22zM9k17am_dIQUo5x92yURo8MuAYboLjTktLrI0rdPie-NbkD_n99fjnP3AWEEIydA_5s_l4UAFwdoBdavxvwbxnNPZp6YIAtwVQ1LSpmklRYf2tI7sF03tz9gN85WCjCioMDOnjatHfo89VhRWwooan6Zo9r2es-w71cxwbqkBZAP3KXijWV9AJbiKDtzt1z6XqIBGbnYSOPeAeSxLTyZId8hVzcH4Ipt771hl24SWyZfiwFiIf_QcUNvOTtyxzcR6r1z5n_AdF0Rud-LmYobk3PsnWHiQlRe9r88FKFZawD0FvB9JrSOSz20Mx-QX9C5zI4ulNQJJuE_rOh10278U01iUu9fsdN4tWQgu00L1767BIBNZA66X9QL3q1AatUaLEmpXxffOVtz6iCpHKO-GRi8-36g8JkmUL5tDxAYwitLOaS3vuYrQYqhbw85cSywnD4UwuA2fIvCknB6tywSj3NMR7EW88mHy6aAeC3r48hzuerG79GvvAat_U0qPEZVGiuNy1T43D_YzHmfz6v3CmLZZGvM6Pnpx1IlJSac7nq8LH1KwAa83gTxiJJBHJLWtamTfUiOqXsSUQ5JlWUZBkvRcRTKOukdo4bZze4ssFmMgSdl9Xm-3TASsCwrmeKky56HHc31CPNnuCTVNn7kMJQd8z0gyPz6CNDGAjpzobFhxYdW22F3a3Y49ao6hbDnpgxI1H-2Jo0YW7df8HzKqVoVcBhZPAxO5CpwqapMJq8OX-pKzcsWLTb6uVZE2IALPlWv8vX4QMqnTzINEIaZ993UkJ_dr5I9sF5oPpY2azGNy9KuHgpEzwHzHwnqNEhcFHGzLJlgA5V_xY-OtpzhZ1sk3KXkVcbww94LFMQph6_yDXjkgIYdatWJSJysOCCYpRVGAqSyHtZdOLWmjN3QSi3Mv2SDHXKkb7__3N4bjenmJxabXQ8y8t1FwiHeYkNEt3AuWhb5f2eNHF7z67_tfNDPQePc3kZtiq0LAP_2g3_D6nB3KCXxWSeKXqOTwL45tNwKy4_745h1s76hDJkzYEi4WMQD1Geb9bHinJakX9IOV3Q0scvpHInc698bLCEG-BSMZtVSjxHJ2wmO29O7SMbZdVaaWQT54KFQja8JBOFpf2b203kw4MDu648a2kdO1rQIVHVGbLjlXYolgj3ZNWlyt4CiMzbdV_ALw2I8ievrcg3up8x9I-bEsjfagGnOvw1TyzG9_2YCV8hcxK76Z8nH5xCIDHxpfI9WCu9qNUxelX6-WG_BmAJK4zhYk4zQ3mcuznP7IS4NfSNYUQSOlKTBLNlBwbXDnTtXpXVDqTs5O0WFBldKTltC-0LAZD35qacaFmN9eDWGaaV7nK3nKvjU9_fgsgC4KsMHg19sBH791ioMHtPL5EHESO9mZ4HyyfnQ5zNSNy7F8w7XDBTnZFjO9ogQHLt1xpjk5BykZ1Bc72Zq_T3NVG5YPtNycmlfmIaAgvJo_SGwK2Wnf-pXlpLbujQNRMOOezJCIyvxVI60vOh0Elqj-8OEtR3no4GWzKrIVRF4C5oEp8ZjOgQ64DI6nwOQKs0QmbHnMlbo_ZU3YIeUfub6mGOozfuqkySAxgS6aIZrteh6hgKlHvYVbyT_WEor3XNOjEJ3vMg9DySHkFc6GIRpzz819ZQj525sxGi1IstmDmXj37MZdYYtxqJFFTuC3xc0MNsOhxecRfx3mz7fk4XBWfVLhYnIJA9zKuHLK9ujKuzcqNiNvCwIKY0TVRNwh_Jh3sk9ng85V7wbEyFd_vwl1HUR4lhtEudE2fr7fg-NNwGC_gw-lbZ18RI3DlNO1J5OzVkZ9PgTEmHfiAhGXrkzGquc7K8Kbs5Gul42QJ6tn6pJLQmqNXul5APQqKSU4Pp4LvU-zIwsC3-aWLlpZTSlIuK-6pmgRfyyQN2abhPBNEuooxH7GH_qXd35D7DWfAAG1vNKr1-HJwUdary6cOLZ8L3pq0c-1hAfPy_WGMPq_MsaU4ppGoFd0dCSPpUIra6AFVkCWXg66DTtv_RS3NjsJlK8xSjOXu_r6WOLG0DdjsfaK-YCpTXaabxZhKE9bXd3ZPR6F3vvhwP_qwsy2tlMz8keLyjzXkMuBC6oeTgYYFsvDdGSKdpIinoHrm63t7_AW8OUKVNHuB97_G0NKV9YXSLX1AAMP5ID6yDe-ORQ4tF7Jh8owLlfoZerbaA01rH-J8q0jGUfu9KKd8FQeVjBjV98F8XAHcDuD05rzsGS4SXxcZpgRs_XXuGhCSjJl-lacQflTuUPh07-qKIfN5NQUROilSqTxxnCi2lmqkCbrZl6phSftPi_1n8vIKIbpwAxkS_L74iz2PLPc1xFzIll5xIsD1sIB3qk3TnFseSkfrlJuLKC3Xi9J0bs2LCzS9a9z_dJOmXRGVC5NjzgOEJtvk0tUsEPu2BM9IcU5SLbFWjlVn0hz_f_dikSV_V9np8dNEkBygtJmfPTYlIF0VMSwMJjF9ULMtiJMVnGRW7dK0InFechokhzNwzeS_1L1bmGOTTBrPHHEc111RTFexgGYZjxNg7N2Rz8IacrKDJ7unFbalS6rbnuczLgldRzPYvKcxg2tzhPlq4JwSti53X8VMfmytjBX3-RgeVlKFoku5WwHlOFPnQNmt1LCjhOX6BZmBmZVXb7es9Kv-Rg3jEKB2f1us7j_avq8onwUR3GdrnCtDslpuqVpfc4ZNlY2YBF17o9604DdliXFNeOheQWVhA-sLtvPbvakF0dYZ1NplnoEGqUOAl-FijbxWshqLTvDNNC57EqKXzhFGUKsXqdrXZn6ffoZICNQnYFdDjvRoMzRjvwBnIF9U6VuD6VCrrRmFjGnIUX5ui3vJYkFLpD2MWRmQA-lk8z2L_qbLuFQ4SEBC4aqCaLwj3KE6ZPPNMX1mQlx_PpBcAq-H2WVTDACvoe9MxVHUyyi3XDQ89P3wlm5OW_5-o0Yr-h0bLmpVLGiI66LhPZk7S91uX1ocyzu7rg9gQRdxH2I_M3eLCTRVVfiHJwCcA-11ORpkdrYRcEnvsLsmgSp_deHxikW7FsQz0JXckkwEbVwTon_454crDAavn7MvGBq4zdhHCSD6yvBRXGttOyF3_D0jLBUuIEEmXvz8iJTDHoU1nIsMQ099wHmDh-vLrHjIvUEt_lXuhZqSniM7txdLfWaM4BDnHW8NGV0wmZ0UoU1eHHufz98WxRC5IKx1s5zCrwl4gxhFpvYHt2oHE9OE6KwUrTnQEnVEOZgoJq0G5VbI-Cw3RuHjZIMC3RFERZ6ErK-qQD7r1TXNLh7rLrCvMDQRB8NF96LaPmKuuMk58fAG0KVIDi55ZVGai7X2CrZz76NAlERxn52Y4eUSq2ZvOMRYfZ2ImnXUutFdTQfxLWgqZ9-0eaNf-60fuR1Dluo8v2hSD-U6rd1JyAliceVrfucLlA1Vf9OzitvXmC8AHEB-p-jjLTW0q75Koni56p4WFx-DI3I9hM8HnEhRmFEE8-8sO8n1yjiKEJQDRBgauZn0nT8zFz_8vBKlOM2bq0UksQKQLAhGPnI3WhbCFev4J6TPY84wIkjCrl7B-ynpaiFzPNl42kn3DWUStWAfZLD9ed_00xLZvihFfJWGO1EpnL3q4K5gBXC9TZPLB0vKUCFQ9ZVVvEiOEg6wGNnIGP-yESdZt1JDAjd6JVwnATPewHPQjbb58UDfMPudlGI_638UA_ETUfnlAZkBejaJzgXSI7yz3toQsXVJSpvsU9VVGyj_SzDsSvpZJL7KiEt_Rcsh45AH1yDz5iDZFTXCxBFwWBMxJc69wHDnCgWuejlK4zyVnfqLeWb23SlduDUrm-Tz6J-XvMOa1j85t_ZfGHxJa9SU9iPDpXYD8RvQ29-joYJemlAQwEKN6bMAYS-8StOOQ8G-NRJ57thVPFMgk_ZFOEb67m-Yab6hFMTIGRrmlu__yHynkh9AZVgUFQYkntMEtsQ0qpKOJwhXTLmA9Rw_u2bmj528LGcEnVNuQgu45MDozC21Z6aR8WO7TljnMTzZK-AIsTI_6abrL5-RRzvar_ew6Gqcydctiu2QizLWqnVVljZqR89uBBJEruNCxSpW-N6ilF5658VvKOnRpjpyUPnHh0YG7YfxZLlBGPZ4XpOCCyAni9CJCJIGJMoqDt1KayKEzdAch-grAWapM6pQ7KUXhMwIZxNYX5iH_ClubjpGoh1bB0BhWh-BdDKWAYmWCgpS7UR2bchcNjlmevf9tNX9c3-zV6qDmNsokat26CMha6sLwLCErzvW8cYgi_tTpjQzcpbDAs1ahR-fHeQGhYtNEj4DhMQDMFOOfgMc-PF60nyswyUZlVZ55QMv-fnP9359uvdr_9OYEdcDskF0bt_i2HlIw5ENHu82u78MIcADuW38LnLfEhnwVwnuTBhwYb6fgmT9-ebAYPYg9TgAcJLc5umYzXmciGyftOWyBaoQXjrS0Daq382u0mXYW1bn0THDCT5jpTuAGxyA3nJVLkJUwXldyAAL29gqeJsl54tCfH-SB6OF5EEVJq1bvZjOMuCQVZDcbLVdFpsSRQlDQKj80TEWZjhRxuJkhWSgdylkN8KTlzOD1HIb_l8aZn-TgOf2dwdo2yjNUis3L8gbIFvcp-VbEQr4W1MfRNsqubtzXv8VXkyYRd299oE92OCVGo5rDwPeADZAU2PLSJhdoILaSrtl7kxXUgE2B65tQYIler38k4zvTpSNVQZCEmRbHzjpKXuIVVZewxR8ZyNGZPEtN2TzmhXWfm8E_nozIEy4bFIUMgKuAOMulX2uOI-5ye-htXUZFdhqeiGlN37RR8K8N85KWkFDIb0i0G-hw9AnopuGhr8fPR9PkRgnpQgDg0NJdjYLqcdpawE0zaM-fuMKY9cYO5eTU-NltZosKaQEkWPqu6up2IgQLA93UnzHl4t_3O9_vXOZT6YjnIaM1Lk_of9JyX1uA_TvQiG4tnFsblfrcchL1h79WvbBPlGPChZiU5hGa7qCKvj6qEKb4_D4SY28HqSpjiziWNUbeubqd8vCVw8Jb1jD5aHHAEurafaVOOaR8s1GeqQsA6TFfrZknZ8XerdXSP38_6XyH8zbsHw0S_vZIxMf2ceALR8VQEiO5dFRYsZn2bxspqnFDsV--ZoMwHVa3jOm8DHhuRzR7F5g4ZwSHiCWcKST1CQuukEYAFQY7-Na0Ry74JUznEvS9fA1QhRGwFYF9mdfE2Y0XWOcaeh4Fj0Ru2tpTALa8UK4nI5au73P6abqo-CYzazbra_8aJxVTv75kdcAxO0bp1sOlxh6iL0V4oYuDisNF5ImaICqHXYgt1kljlfWUHOYLwIrq7LfLwessBNpmjFIpT7vm-aNY5GzBs4wbILjh7TUECpLXxQU-yBLxE8Aup1blacsH8YiSp1N-Q-a8pc1oAppz3_36YnF8VCnpeJWPXmt2OMKW-RlJ_L2NM7eh3s6rP_aTHoavMbGn41L-ZCXUy8tBTBxLfcXA-rQg4TpXYe-Yfkm-FD7On745RWLtmMHKqraA7Q6b1QJ24KUpV8U3FHgwzb7gRWcoMqovcfMFvczUxatJFn9X9XnwlZqZ5n-e6MvKcy-yI356nlwgjxM6-fi6161yd8OeCmzuDg1SfAzBvW6XRNsRyMyjO0PuVRthXt6_A9Xsk9H58x5Zdgd8HMtd5aDAaghPWqL7FiR1jO4-sypfixvBgOnVuL370lIRtMED0dpUVUjXY_GEDPVmSyFFC-W9FCJiNH_Oi7uSyLKx3Q_oRTOAfXUgPp3EvHWUys_LLW6yMzKj3z1f3sH1MLBB3HEyTwmwL0lh11nnQgkn8tJwrh1J_jvTQy2wc-0gF2F_ELzFrYPu0AQZ1-uQwr1dUhBZ_xnQqZkAr0A1MC4sx7Ifl4ekFTamt-j8LSTO3gLB3XnSzJNPh1dcmDs6EynNbC0-pnOBVaTUwx3U4hY1EcCFm7M7SfxStf69IrfjuSuYuu7rrEydcpEEU6vlzeeXMuSoe3NLoY4FjAs-L1ORDV6qFxjnRa49nqSHiX6YjrwvlPlviS2GoYk1Ruv4M5e6X-e1tBJiR-V2E9KtKVh-HUVQgt_NosuSjcVlSp475hhsCOL5pJgZneRlV2LbcpkEYqssLFDh47u3hn8PAobd_X7tvd_1Hh6EexggZPbenGbWlc3IJRhDxjf2x1M2E12k0tvQZTqhGcc6E-ZODS-sQDnw1cjw0nE6EEYE13wz79g_4ZmCug77XZ6AV4Ae3AkYBu3TNQZK0vBDe1LDAKdB0SzivPJ_pE6GMEhM6CagREFtRLzeWbb6ixsFmrmQD_-u8I12_bIpIUPEsI2VWDX3qPLwo-L_JX8Y_lnOhwAFdJNMgihXFshqucJLWNzlRMbARecb8pxKZkuoYWQZnIzKQFTYew1NY8X0f0Jo2BOQTxlxDvYTxwBDiiXfU2Ra_aVsDCm-Vgufa0RpQ_DyluIwpC18XSjbijttF5vsPISlc157uzSg0khgKmX47iZj_1pQAwVVKB2H18xcu2MuRm6u0yLQTIDgAgJLTOzO5khE_5ItcvgpPc9wv6wky8m2pjU6QrnuLgMQdIf-thZwkEMPUOwuU6QcPcGew3Hf9LA1c4oRZnPz5pHEPkagEWRFZG0BTTIPhpGv1PpZkaD624dfs6oq4siuyI3OC9mks50Trf_f71FtZr_xqIxGEnPl_jH_PhsLU-lRSkDRYynKHf6y5lQTm-oMmuXwa-6yV8mT7RXE0f0dlzV6JNX7C2uo2Gpq6yeZEPQUsCPlALl9m-TsMEiz23PTgQ2gTC4f0GSl32CMMi2XFootSkCPd4DQvRYREWD--6SAcG82pCk5gGSgQZXYCT0_YrfGeDCszCvVzFTDb-Am98bAwyfVusKJTdd2pRBQ1gJ3auRwYrkKcJ_N6UEfvCzvcGawgEvkWiSBe84HfRZpYT50d5u-jByxA4v6wb5CL6XR6Rna3DnXatQfzvZmuW5f3JK4jXdXwzPcmx61Aj1pGXfibcHkjVgPUc-7fOMD2uy9LIR2Wzloli8V-jQCHNCMIPokRiXbDwlH-f-DAo7a8CRQgnUNQW0RgZIYB_YO0pqQbwPlNVXCNaGnuqyQyiihjR00TYnCoLtlOO0PEW_0_5MMTWKwTyxMemcOG0hYdqSkMRO9c9Xj9BOe3sfI7SeOhXuJKlt_F3EdJ5xarnM5xcNfrRdN9al-hqJw0rEbgu_rXK1O_6NZxNTCa5eHLVMMs2CMOkXuwKhXaCPjBbTs_S7_GnM9n0W56MQsdm49lASvyNCa5opjwsESENF4xPUxb_7cB52H2dqFKSxTmHY5iYtPCGNSO0mJzpbFWosob8bQTOVlSidWCJhXfW1v3HiN5a8otet6H9XIaxGlMXBsrc6oEaqZOEVyBsTVVT63gTtMtWL-ZYtaA89NxmXIjcx-8ccSmr1aGbGWBgeghEOuQfWFGMmLgryYHbjotmBw2jyPs_W2XaLHO7cMINP01JrvZ1nXFtDN8Mokx9tq6sYIscX7nn-7gT86aDJhL8Lhmlicn0XE5NNg_01CnYDZWjUUtfD5mZWzIkpUB5xzT7oBwMQQj0XqYXl3vKRogqnXPX8tVNURljwqMys4zUyBhiFXxoEObt8YKuHYDcA4LVNODHie0P9ufaZDYKIA1KeKLsXDbiAkiCeKqOY8l-o70_BCwiDDi5UjnHqyTBte9pENKmQ5APqe4CmLGDbw3y8FUcSTZkHp9JbTzzwVq_wnkXjA8Out9i_Od_kbbEgefuMFJczwgBIiDzETz0kaXIcpXBIq1RNeMw2ZY3aBeVphqsK-BusOBAkAxsEf8K0fmJ8TW_sakR8GRRwDWL-4NNgwrbpjznUP-v9NIDwd0cJpQhq_R0RYC93TilgmjN-LOqawyLoNTJ1F0YK-_uPsyc2wWbYxeVJWR0ECZM-MC2MeJ37cSEgGDdEYhRXLIufVpVV4wz1yXs-4Oay2x7HcyopgLEHpAIjyRE012eB6kqiTYlgG_tGzktHS4A28SCHD2QtSdaGRkcEKzPwLUi740rCosxrMI4R7kHoQD4x9YE2iL7x4XZSRtf4y9q7CC7r3-ekHZ3kjC0mo3xEubzCz3YFX6XgpKtUVrLex4IScBmmwTeg8HIBkb-VrzzV9nRKZ1kozNhO5QfInAnXbVdVAPTRyHpMisiHDJItTw0kLiiIUrqluFV4O9deLZdDzhltbIR1rvi-MfH5Tu-9tcNwt1LVx66vCN4BPlEaxx0UFXHta7iw974K17IkgiQDWgrnxr1-bZmjHW99RoXHVIQqHUHiIM0DjkS4VTsFFwDFN1soyU8eWhLU4wJDmAQ6QcuofgTJd4LASD21Aunhsc_Z81jGWAhzZ6EQ_CSHlt-5cwNkkWe79sLJ8zxIjVqtS0_GdI0MOYJR3NDw_r885CyzFZsxTmbk11184Qij3RSZ8g0TJPexOSj2DwhfxAZw5uEtz-sEDj0jEuFPXoaFYhu2nJHZ1w8esaG-ZYh595iLYK6deaxahygY-1PdKWxmVbYNJP1c3KnQYLz2BGfJAwNsdpUKllEClhcoegUUSY2HbFiiTioQVcIvMX6l1CsD7Yp-X-3id3y6IUzT4OIgzSF7Wj3NEZNPhj3D68giFBKKQ8DdfyQUhaOpv4itj0HSX8u2iDCl87ZgPpj2HtS3L_NeJHC0FCmYllQJCpbpYy9fyDr72DAEj12kyWyPYevWfsRLCyQtn9DSJ1bTWVbefSWpTjLE_vU7gck4H0Gdb335lG1VqemJALsKD8Td1KpmYohawcik_RsMpw_easxAa35PFTznHg8kCxmLMOXkReiAILEW7mZ2R2N_yX488MA5g8r-_qQAhwb9-yg9dH-a-6KF8AVQrBKcZGF9mFJRwRyKM-7XlYB2jCIDBb7jCPvMh1wnjktbegdZ7MlkvsPdudkB2NFVQQLVnvY-J7BWRFX4Kr9fpbUxX03e69PBEofvkqRlzc0fRiwwKk9L29YZyNKAAtkTuuaHXPUcRlVxaESRaMeb1gU-ChOVQ3_0vuYD2NiAiQj39fDku8Vd4oyH35oYqiKQAIydm1LPut9Wo6lrahZkZiJ8778FPCV9nZyoMEmQkKYKLC6xRg4plzdU5M0G8ecPTi66LLJoZPsDbPhVCqMOdI8yClcLLEs5-DTLeFNZ45JMRtl2H4brF6S_a9rZ5imZG2B3mL_JklHXe5iHbkcqCDWIgJL0Y7A4vmFeZeccGgAwsEle23gTV6BtKDFO26qeIgsP3gkSbeVzTSoZBBmjvhe_EZvzgY2fSEHEMcZezJmLOgAlZ2tLrSNbsoSBr5-07BQxHaLEt-30JBeFxDs9d4Tl4M-V4qKcTxtnMF3A-l98Q02HDgmRek-QxsfnuQB9ipWqPQPyPMRdVvfW9xcPVf4gnlmga4wLdYN-L4vIfbnEFqEdgPOKGiPZRWTYezTtWQhOBRcaQiYOPW59yvdPJIc4EZosfiAlbhu3Ogo5gBJTHVXbaPIUMmBpOe8oOllCQkcsJhszvmO4kcgXt5GQbhzngWMQOorUBFXdwLQe1jh-1aeeLnAE2Jnn-rl-fjwSWFFEgKZiSbwKTHim_1O5Wf77f9FuF-RT-uatQbha_ce76mnp9kY30FsJZ_38HrpCRZxQdRp2CE9LPhYvNKcNWOdkcHOJpCIJDrWYLk8cLbJpJCQiWMeTDEW7AJ5TQRAYZHZjxp2PgrbznTYtltzFlItg7Ya2dlb4UJZAXA6AFLxFXvuqkF6EDJEbOqjAehctYUdvV_VenmGpfA8bvfRN8RliacM-LYaw160fMgmUV_Kzp8DreYXBuROgfIKwxNUkNs10JIgAKSv2DdqZa51P1VvWeveP7zX3BBYl68TdMRy7mtYI9t1s8qtW1OObkDseLrP83IV09hYp2GIGIuiyF-PxBZVq4GiH5cpUCU6GTyKvgK-2EwTY8dkdDrv89zjOJLEFHE7kcuIMNazum6-ZkJWgZOG6pIO89NcYjU2qDn3YYTVCN3Iw_PX_XwP7HTyMXSgplkl5Zw-HFTKnqXALELJUxpZR9auFtskAyY5ClRS6MX36nGZhiDu4lOVMFXA2BrZO_arnaJAuHeKYlaFSkcpo-EhtVQie7Crv62U2vSrOkbvTyAeIeMcJodkD4fkXDRg1OzJDg1oQfmLhkZllp94EKKqbzcjPkrmlRkamsMsk8pnQiCj0FXSrhNh06lKbyVQHGjDMr2zzWGYF-SaduPuFVxONMdXb-vZZq1VniVTESpNE3gzKWfsYSmWwyXakTHpP8K4GbILnJ3OQieDlVeuBtnHr38KXD2sgRbhIlN7ZeCssB23g6fURI6gMmznDFo0Rbhyt9Q2PheZ8anABudIf3aVKzBl2fGm6XBhSfT4ThdQ9fBzpMBILV5Ldv4bKFHB30yBpabGeEYq2GAMP8kvPlG-zMllonRSSAubySBXrlwcOXTUe_OBeZJAh5MQz_Oua-Lo7bLY0-QLenDk9GQfydj9w-PFEik1M7urtalmpmygvN8CuuKOXCHmWGxbvAb7NMZhA-jW7hqCTMmOWl2Jtpv5Sweemc3mj-ta44NhA5blROkRO3rzvpR6ob54ytfEbsooF7apErEcwnpwY35rwTYNtloraUIXraIGY86YOxvVj7SLSz8wVLpjGX-6FruTtWyZ2ijM_Ak7R6IOFL4z5ezG_Q0FF4OKftoWEfkMdF1R2Lsw_qnzJ9bbK7dCqrggIYa1PISb8tGAHpCC9Na-fT38dYFMYY6njqN1ElJ5yer3cW7r1P2-NE9uk_QVoSDS_BN175A3UT8OG37pMs3g4uoJZ6_MIEqWoAWOhCuNxKHtmgsxC53MRVK4qhGYHe8ms0dKn7TigQmpWDbzc9nTSGYEtS-d-VQAodPOHdv74gf7kGMYwjfYPBmqcbYBw65nJph3obTQPoGzSXfhUHBelaWA9eo5hbmGYq9cqPr0UDyBiZvmXicO_RY1F9qdPiD4nMhdHcifvToefUgwvfRlFQA4119IalTdFUx2RwUc5CAo6hh6yD66oMareEypdP5k8vlV7xZ5Sl5h9M9tztCsuyhkrYSjX8FMaIC3n_Lphw2IAtnHAEBZqGt2-SY_EOBYa55JSlMfk-wiSptiXoUKsnH0vlnDT1d5gLPgDkUfVj1IkMLWeWW1XZwowhRHrgxzXdaswjrSe0F2P2TBpyiK1yVuiKOXnhvDgBAR26o8yd-aMT9oHxvPPBUam5GbT23KPYOtVPbA1Q30H2YC92bsIjttmN0LgIQCHDNpBgq-kcOvINn5K3A_ZzqqoRnXrbDVesCmwkb3lyHRk5pmq2mtXxUspTaLVoPSqzBaIm3w1W7il-45ou6UMhVr01qnNALKrbPoGbvVcye0MlYWA_7ovgdwnv6Hbv7LKSQ734HQTYVtdLkI-Cnibb1dbwTglsZfhRp-vVjdeCjMHCOVHMhem4Nh0TjM7u1tdtAwUYCCeOYkNRvBlCz1DU19w4qEz9_zt0CS0zxs7MzwKxM7Pp2bLGjVIJFdRU54D71uOcHqdNpvzKly2x_hjEN57yfk45GL2VE3ubMfuYRy7bHg2nyfIyc3edSfeY_4qVN3Ah-6SrJm4qBapmYHKNQKe4GI2RK6ltcgCZC2_F7FoHsx1PP2m5KwwogahBXgt6JPz7csyZ7lL0wrU6X1qKI27Js13c9Oh89jOOhnHhKIdRFREs5pRoZf23v7f5UlRK5z4t3W677rdgLqP73qL07FjTMXXHujEa6wmLhJxNREiwrQnZYOPTRbsJd5zBQKEl4pCx-hzPYw4ZxgfwcZlLIxNGMEPSl-VgIUwgvW6mq06JwHR-CiJjl-5SEboNruGj7f2jGaZhkGfpoIlFVHQfTu-ZfQDH_149sDt8rjzYXPsd2eMkod-15E0pNLEEiWMJu4ou9Er4CSLOy08b85dDzLoVToHpp8oL4k1IHcK4eXhICMRzhbAhDr5iBczHy7oJBuK41XICDyOO1mcjQF2vV6D4e8J32nIGjYI78cex8MvwE9jcoj8c9eTfcPRTxI9DCrn57ETL57jmAeH0WtDiOlS4EN_0fYpgLkyYKHwvurG8XNpDP4AfN6GD1Qk3Oroh-A6p6mCfGSXqvw74rD-Rpig_-7gcM6fB9d9HAo-TkbBgkVfWadDXikRbozpad-JwfNQhKgb0fQ0uEfElABrmnB6iusoyMGHTnsTc-gUTV8MWi1qyNk_fgTfgImGesLxIvNz5pkbpQG1G-FdOR4mWnz6ylgwBxlDvhHnAGXVMQPD3rUL-pKA-Sj6Bk-1yv7Q29ZjklzBlTla8rCGqB9KIylaEQRbpePEWGINf5fJx92sR3TaF-fpP8zHdOPZCNG3tpC46YffaiW_j5pKepgXtZ52YS_ud8Oxsv3IBnKnnd48_KKE-tiC8GXNxJCnjfullrOsUVDm5sELeYv8bjIEl_MT4WMPV57IZ_sG2a8HMaVoqMTIzOpTWzlVc0MpijKYEhd7fHIgnxTDc_p-1Qc-YFX48mLIk5kHLsjMwWSmBaPxrPnHjqxDUkMyl-qSbz3IPAXIBmj6sKqqAMtdUQXcVgLtWLAZJf94Rw3E3EhEhcuM6pMs2ZxuCxmR_ZiAGOfCL2WujE5nYFE8Axw0D3mSG-maMQABRzIgL0FyHi_bGT-JTperynycrn6ulIysDxIZvuZg99vPM5WJsZjSSQP5mqREyq7VdPd2PXNIj40hjse18S1QLBr-Y7r6wgVA172dHGX3V5FoBWnRaMKb9-dvHF8Ry1l4KuTYiBpO5duWw1vugV2WjYa7av20QY-ZdFUy6ZUtmSdy-X3fj0W2Uc9sACoAXR67W6eO0qNpZD2hODvafvwXSKyLj0GAghGABm_TvjgwJlN3IoO9fRIlshErl0TmrKZs0zEbEJE8PnWgIip2PjQNylf43pupv64E_nmLAG6hWa_EsoCUylmZIc1oN5Tc2WD1PX5BiYZExNteHsmppw-D5wWWmuLEyHxi8_63Z1xNrdR5pP-KYr0BD8dabIp6P3YqtjhwKcp9v-1fOI_-hYXZOHj11N-PVppgQk1EKe-2ntck9RGqBumNJIuHtsPNQ1TmXZXDOFT9s-9TOexsAmQWFUxp0DgR1rOqtgGoQ4Mdi6CHhBUyp0UendaLYRzoPJ50zeVsJW6Ezg-9nG897bXZ4Iswr_500KBs5XCziN8YXrHAVFbPcxuT-TVM6ifB0RLYf82gwhFeM6B17hiP3A3E0yQynH9dwQWkwkWlyfj8zChArXxFl6mU5adSJ6XxRjfyXTZVb0G4htPaZ0BfKLh-zdQ9xE2RCJ8kLxagxKHwDYRqMpWkZLkkAAkfpQMbIxalzfjzs6iBcpNOxKpmirfOtiubFK8vkFKD6GvTxQ8l_ccYL-St4Rhk7HRGUbhiLdkeZvhi3gSJS-Qok6Z-kao4V_j84xNgCkqZYNhhzPrjdH1Upd5-59VjZ2EysR2Ai9vC7IDrP6tUrBNwti_WrEQY25u7wD9ZXxkpOHy1Q7p47tZb6bHwbhfwZFN1zf0elO1k06otSGyr60qHeKff5y5BRZAP2pikOn8dOeCkGFC5bcfp45eqWiyDWFo7ELdu3YsgnIeOfSeEshKEeeY30sunF63QS271X6z8VNL8b0e4uLrcPF8ZcgWdVThZ0ADukY0d9aOjZbxzEzlBabxNRe6qL7FTCHZ6kGa4JBASnvcIvvZonBNMgKZHlr-7YMzZqk7hrfaZZzJjUdl7V3BrdAbB4CW75PCPHcmxrTn7wjlDaFLX9WizbE-T5GyV6Nk4dIFYZ1aZQyPPIohdEMKGW3VgtQErwlycIMubvK0wNXjk8BEvvtn1kwg9mVI6fPsTQ8dNcVTzIxkRHPvq6N-D64q61RtUbIcpNAX732-pc6k0x2WCagNXnJa15QhrNmy0d5znioVqn2wqI3SjRP1uBzXWMOuqKJkfX0yY_DnZOgdKUrjvk0vK7hM27Jjf1nI3_0SQdNSDrqoMxCtpLvwqbFP-O6X2Ek2vuSmfWC-aitMOmJU4tJRfo77qUIDA1irWl2DayHGbfyNdQ5VvT0WUDQe7T4qjeZbP3wqnOdL4oozvY4oPDSfQ2jKRkxWeJGoP1FyBq7sEn6eumKKuXiV4PfNVyUvNwBzkRsxgLevkU3dBjomeT7K2Offhs1fdV7XhO0EXGiaWdClMNkYP_Sjh7_hXPIZnizz3ihYF8wDEbwjsiwnhcxZ9r41nRlnVW7zgf8zwyNN-oAnVP5NZxy6YQLjIi99HIjWmcp7GY9js-Y1syOUexuJrEb79jUZeyNpMTzgGgpkRyP3u7jI8lnU5ZJK19lIKTM2w4D38g-CNwcvUu5kzmhuG550bxj0NUwxrNVMtZMm27c3dsOR5jMLQxjHCs6-tbs0vOLnRbRsxNVQtcxs42itkCezKDkfkH14iSLgTNisV1C9beAPN-UIKtG_a6jdEARRmBotdwC8_QJF6yZmYHxYnK1FDlqZt3rX-AwNa10N1pNi0DNPKnGkMnsj4pXWUPQ5GQbf0xEKdordMAj4y0SSH_HTlFmDeXyhjBG6xek99hRzN99YDmNGlUnu56sYWMYBcCG6ou2QhlXJK9Kn-lcdlOuQPVHGlo7IXsph6Ami1Zq4cyGY-mXSAzzuwWFit3nWNkHrkj4J2hz_WUuy19ihr5l0sTe7WL-YKg2u3msm8glb9cVEQyXILk94z4BBTj5DOe5zTj9XTJEWCzrSQeUgRwHEsSWrWWX_6ow35ylvnStL44Boknwi4-7pcmUvFwQcx_uyrlE6fV4U7M1AbGrXAJyTZXQIpcEJau4kNKpfVuRHCb39z-ql4Z4LZ54o5TvMH5dFASUTfDPsH_bet3sMFe_BIiZYHCP28-x8iMrGlCeag1F3OkYrW2P1zPCcbGZdpMgdMKOJjRYrIsiKsmzx7Khbc_C7cqnzGmGyCRXHLHbGDFD3I88HG9AnW0PNjPjQ950VHkws0vLvxbsfpIbp6ZpYwHAwK7n7WERMHI8h2_i6Sqe5WVLXmfVea-opielC6k9i15XTWkYFDFKEoDSoo7OF8oz_2NTCjHQlYygIAMzzH-Qx7993iywts64NJ3MS5VpQyr6VlFCS28jJP-_53-rYHTcGlJ3aHJu7RGu27LrlhF_hHTJcJrNFx4gRBXzHNjhz3MATE_lMScQvr1q7pkQo0RjlICDWNomkEIvxxYBr8SkSwo_EhmswG9ed5604p3KQ-0R_mnvs7yHFGODT9WaA0tDGcbO2QMHGtI9FTiL46Z4C4X9rIgL5m5ifc6DE9H2Ct5VbwKTe78EusNaodiUIjq1Gd3_7N-9jDIrlgoyGBFt5WgtIGw7gQdxKH05BXmI4vzWXUGG334NPCpUb70ej-XMywhl9HKboekQBQwMg5TRHzL0au2o8KVh63ZPaJZdKuheGuYq1fQPJiMMUV0AXP7fspYpLTsi5BdiVaBwMWssSYhM_KX-iARCybRy1Ugqaief7C_akdAonSQtnkX_NAlFx2XtvgZRfbSWtDi9rjeW2aHvQ7IWcifeGXF5kXqC01Xa0HzRKsE8Y6tswEBd76j7rpn7zbbB6-kCqtdsmvq48ct5AoyNscb-vaMffAZu48tbP_doQZ2b2iefD0f3FKz1q_GGj68pAZvjXqZQhY_FK8r-Q9aB8eyI8Yt9Z8DHFNjqMI8aPjrONSe3FPBhFLonbjif_zNrnyUr8kxXclaLemlP5dLLVFmsEAHy5f0Yy9hd0vIxBlJrFv44d0SEa70tO4LYGozpkfJzwXS8b9MQXnlvhxmUiW3sU5Wm_NOjCdd3YsqCcKu-BHf27X3iMYGRExGVsKzPPeiLkFUi2OHKT8N9HRPCjSpMCFRhhRvq9CzDtVNtQdZfAbjj92oNwpHEFhNFyC8NTLxKlsWVZZZ9lfrDW3HtTIpTYgirp4Iw23IxUyxCODc5fEroD9D0adxLgJepEL923zirkTYZlPrk70daONL7bFXL70ZV7iNLSMJVzq9HklcElV6VWzv1DZ9_2AIzRFRZQc1l_rCv0BEmMKWMVQTjwQk1HZAabWLELw6fgoiemUkZB1kBkVrANNJNTD6zQufOwOiaAWPmuTET2ogfeOl90PPeqOkicuch207ohUYh7oeHdiJ4o4M3b82SW-sGwukyeoMo-85cRJe9FTs4AAOqFudA49Q-FqIpPx-De_NEQqwJQ0Gu3YJRgXM9FFSwqUaTiM_pwSVJCEw0y2glNXMmKjsEZO2Np33NYFxTlW5on5kYpQzgkmJJgB8bAYDdYdYVf8Pio1Pd2N3eicIu-LpTCOWipvKoJcdrQPZTlEB5rq7o3H1pdkm-Jx48TwHZ7YtXa4l332hnSrgTotsTRmWcgpWN2mJ6KAmXOBg2Jj7F-lGSWuKCNl4Pn66l9WW4h82S3UrAPr9bdkeuSjLixuqcEUraiaGKDKkfgIcULoiQTPHVDeAiSMxLTY1_1KLT095SK0pZNkvlmdidj4YAyeKg-q9CM1yOCShSD894-JcS1yoSnBab3A8yK5cSX04n4GVjrr4Vo0Z7yW0BTxTdN4xtWxsuWde7vdkO9SwEZDzktt0bmaXO2VB8IPWPSKnD15YO2Q4HMFHUJSMfw7xEMOhn9Nxmwi6_Chic5iO-JSXeRuG9qpKoLcdR8wvdtLgCzliU4Om6LZPjCmu3Banu3t9OT6l9baPfNi6Po-NVCXjZn0KuyPG_bZIPmqwbWaqFdR1OqgleTSx5B3Hfz5GnDevCrvewG8Gcehr2L7bl-9yhcC-Cy1NgvhlXpgbTXnlE5vQr9bw7kU9RpXyVf1od5AGGnOxNQbBxKpPXV5qQABeqgEIotIcekng6a-sJEul_hEHRAd2TFCZ2Rz4H8l_dACr-CsBye8SQaQuv2TU7zhDtDtsbUXj5GBfvXWPZWdVFuwpYakm4xfG30dvgAoPJTUJCfP7ohAXSNfNzu0KNeZrpKD32UnIf4phy0KkDJbODDjZx4cqzLTF4rgyTglghs8lOq1WLd7yaXqY1S25q90cgZqACGT9f0NbBC2xMreABijZ8uQMTLedjQOpMWxsW4QmhSJoHj8_WNLpLEERzTPgXjxkBASTekf0vLqUlIHEO_nRpcPjXv7J8Woy9Hb9uxwnSpW4oXCGWTgbL7a-REJrkf1lgKLiZETd2L9DuMBfn860OJKLW6ubUnC73Ml9knIndrt9ntzIrMt8RlCQXGOuzC_BmF9uZxT6juOQW7mYdyHEVDTqkK5jR6koyNT2h4jLTMrcmId9U198wQX74jInOm7swBE8WiuDgSGop7EOy-ejVxYOXe3QsY3abX86dmRGfDWHzSyWFyGgY85pl0SYB8R81gRSyijaJhpMtiNNl-3dHSvhaj9wdGwSXbgjaN_DziYg2h2B9V9dn7KTJlS_KZSMOmS7Gm6Rl3AWfQYSXvyNHwOiaCFthy-1pCTuzxOkCljfeGJEAYq36nFR3zeyvzFutiPwxcT-eUdWLKZabGLaIgpjg7gJuBH0CwKBkn5FH02oshd4WHvhCAZdCCwNaOvkSm5tBNJ_HIMF9CeW7vObadR5Sp0dgrGghn3-91L20CbKNk0fE62T4OD5I7nUv85mFPdFbaoKLESMBrFkJCr0sOQRC8SBwtKIfylpDAWREERuc6um5EeubiRWo-95jaX_g8y4xWtusknhD_3XWwC6l1p0yn-ZAHQACi1ar3vaU_JZcnWJGMHDrwuvCLbCPJryL3NVPrMhLGRLZHv8uNicb1-R3WjeCbkSrEXJ1sIb5o-Ilwrm6pKEX0-Msp0JbXfleCdyMq3x_1lmfCGPuiwF2pqj8m7da9i5wET5RyAZ9dghBAOqe3hrvSExBcAgEMXSDAGhJpF70JGAWbd9F__maGrP21t2eKSm_YUzfswGhnSZ-e0rn8jhs-83PzSfJIcWxCzWI0b7kLjnt5PcVfiIwOqSK-d46S6bXms05LWV-uk8PNyfF_m4IW3sWbj2Ax9LUViCYk5Zg1tdwnekq4K1H-N8wM2F-DQiVGZMZFx7f8lovgNMyQROFN2Ov3bY3JTFTrCJqDYLCfSDysSgmN6QrL1-8HCFSh5Y_okuqDLRBP9iGZWdC6qSZ7hJEABj9B9xsQLh90s3sGXYI5XgjFQFDHtTpYh1qpR1bdQB4AuquttdmWklWvJJWHlQCM4Kxh21SlEVgczqNGlZJuh1wojMMyLRyTd2wA4RLiYtgd1S72Tt5Lg_H1mf9hIIY4hs4A2XasGW4Mch7GuarDAE1eFEmZpaObuDGWeyUqjNQdF2eqGYvjrwkeFPdt3wcb4nhv9sxxxbK3oFgiDparOF81zv_XWGnjCAWJyfkjF4L0H33giUdmlTQhwmcF7h0UidzBUPHVH4IChdsr-cpQqGnF_hynBe-y6sQ16ETTmaVCziec9hpy56nXDxOtNFgyhV1cUkcjFdRBZ-qpvpehARftWiVEn66_Ko4E5iBpGTZ_xQ5EBK0DQRyCHHUs1d13dGF4_X3Ng8VoEpSMPe93lKcsHCcpXgeTPlWZdr0wJvD4izkcKcvA7L8Tj_B029WjBc_JSuZ1I-2oJsXnBEenWWn4n_hOFp-5TxvNP7B0w-2o2zZsA4kRbX5OO2c2SIe8gxrZSNZaUyZMvuek8SKxzRSBUsiFJS0J5tFxYBUilVuG1s7ioFG6ekrcHpnWMc9L_0XmxEsTUIYNPfc0rTaSk0_th61QR_26QcTVmB1nCWB1Nm27SM6QARx6SH2Q0jqpoDcCasJTTB_7VAxEjmsWqNF8b1Lq39AK3iuneHfHUBmpGMyXM3iYrxeO7cXcZ6VvdfZjQunQIFlG6QzcZQrbH9zJxIGs7lwFVOU41vftGnkM6jfOAX7z5FU_XfP80GrArpSFHzvDGpCYDqEU9ogsWXrgPNIzGl-tQUDTEBzw7GXqZz817pcpu6dvG_MAd5C15_eQEJ_bvekUBrUdnKmt4F7Aykn5OOGMvNM7CFBRF3GqDoMiEUPTSWDCNLk_vylqPLkshGrq6RSr-6CuRxv8tR9yzHTzib0rjjKp0_6HJIVxtbvmpCaVpo4aTFlOfXC3qyJdVrK7RvFOQAF2u14V-S7Oyx0ANHzdIMZfo9UirK_0i1zB1lil70TKTir2LMqHeI_fmtVj-zLO14VA1UVJLrsLpmeZeTAwDMEdZQclMxSRqkLJ9mjUOJt8UG0yb5y-GVKtkvx3gnqCNAPquBSzQtv2ZCP5JmrP2ab8qqLE1Flzj5W5Jry27MSQQAvJ8zY865eBDXikoMnVT_--B5fqyhvzHZo6kZnpcMeOmA9etX8nJifuPlUeGuF1u3zT1eu49wFwa1vjARHYu-6HD3tRbCy8KbtFMbB247VSV0ITEv-MSYFfAlwvxmbO1XifN4mD2jUYf7jiHqWyQQuLt-VD6dW-Hk-Eecoc_SwUAgkg_DYBBEftzT286P1cYVIxeGQ8Gcae11yoEyVV5umqZsFXjWreYkJ8Mz5zLXGwMDKatPDxUnqDzJ3qG_-Ch5rVq2oQ-lYqsXGTIbGpA95YESd8tDA4qCmcYQ3ANok-tvKB4uWmqn-Zo_QOpiAUKJvMsgkIawWyVk4ijuIO02p1bkHd4F5A1zLCEsKFTnb8qoUhRW-_290CmwN-P2JKMlhDklvry-rBnhgYSm0TmdF4mm8Cb3iquTIvYwvgV4oGQAoH3nK5rcZUQuq7mc3Sklp5ScedpVRhVzEVhz5EqnOpAzCKGGB1TT9i1OckAvZw9b0KNRk-QVKGswsLBUldc1IRFfXDtCwAH_TddsrzMcKACnfymmu7nLhDUhLjzIskdkKDhyEs9NcXGh6BeS7wvo9cV4DXkLECPCbOBpXIwaUPh4m9FpW9VEBeEgT6j3wUIwLUgUWrTkqe2cwdV5kbIinHHMGQdb9S44ixq460IhDMgb4Wuyj1YIgUOnid2Ve46ALGWBaboVp3kV03Av9SbvnYyB2caBJIoC9TOp9DPG7l_XbPFk9FfgvXTZaHUiQgrNSQM_sItTKJg2XTuUZ9a9smCVCjLh8Zo5_F7rHlFIS-FOZwsmrQ0yedi6mXHSRywm2FOedXjZFpBzZUlHMVmuUmqScaPnfwzcOT02YhoM--aMbrIgjgvTUBOAhHlcIkLZwSDoejquh_xgHDOba6J1h7fTZ6GsZ1i6rg7KbDzsTdLy_B_-XOwCNigLHFAKge5VeAa_cAMVAcPsie4Y3HJR0dYqLxrDxMb9dmfBZbCYkjIvG3IQLHD-hgoexvHfnRpxs44NT42kf0lmgra9JMxqvG7GRFbzm3pDBa4CvZZL9hAhHjAbNyebjmkmZ1WuFgeZqewRTn-mvIWvUH3Gh9MAXRxHsDuppCC0Y9DSLL_n9lOFd3twd2oK3TsHhJpjGPL_AGdGIGlBREidlg65fz5ZahUi9ZZ9hrntWIWV5stGEKtGcuKgp-Tex6_2xapfPinnPpHRhn5WTqacFpJ1BA0zGKqhh1ejjaqiGTzlPWxrYmlyuq5laqFcFkfLhRt96JMTVZJtZXtViuzDisfkuUy1ezpSxV5NaeDTuxgYemapaQhQdw3BQJO1y615h8ASjl38eqIU0iTBRUJBn_ljAItXJwvGP1O5jWPKiDkWv19kimIDtM5N6KG_K2sYKkZKaJiBPUxXIiXBFJOcWCUqLCLvxipfFZEKUpqKftefc6wgO70KL-g5quBQtgxilTGNffUCZNLYgGwpNejbpE2n9K6rEzuC-9OtDzBsAhDZ7YNT14FpQm68oWzrit3AnLfBw-LahjRv15huwcOlEE8s2l4rElUmxtMQMS30iANGXSVTw9JMFxau1RwAf7k9YfaXqWi3T7TBqv-kJYS1Zf3hHyBuRqlYMZX4vDiKIjRrBhUvtfcU12IUMcVW3hCC2VFU0ztoklDG-yvd_qx20TfmWDkdvpgvvcdV9hy4T6YE7EJvdG2kAcegPkRC73ae-W3bxLr1iqZF0FhqXIarSTgBowZvofzAqLaczqjvSqhDnjFjGsz81f3dVmEdDEj53fVJmys7e93HotD_i_0qoj3M3Mqakhjt6Dytak7DHrPzCi88_Kw2MqI3Y9gJ4zjnQ_nY9uAP8LJKi8cU-Tu3HbQ0WpnuJgOn3y-gOYdKPZHy0nbiNgr_aDpyVhG_LIcmELBZwWjXg93nn7qbB-HUGJz8xSRxDPa-KvOAgofec4aj5Tf9b0fjxobU1Kfyo4UcKBhHCuhTosjy-uLQbQZbLD6GwI70HLU-oy59U77_PDVHrdrDjBVAHyPKFJshLzqJz1i3L31wuUd7mcDxCqNR5UgkHyiYFxd5yHd0qUhLcsZxDZt7DGUhSO1tZ_UcXhQL5J7Cc_vgi-VGt5l3tMMOdL09_s0NGbXs_tZq0qHtLXSqsPe2EeLnE06rBg88J7KiKhsshEN2Jf_PaxclhUBzpqYZffCGd4ExF-ZPtifr14G1tJE879ORZAVOrRgMN6wVF1Aa72TQwyMNTHbBFw8sr4SfKqNGFfEYVvejfr9qej_YQ5LxYwCabAdEaTQ09htYpSeG1Wt5M-oAgKbuybNtuaE0M0OG3XoToqO_t2U-Z-A4MfKQHCl_u0K9RcyFa4S4b7cfW1Ki7SoydMx8w_2v3MJLoP_WavcJaf6efwTRxk9P4OxEUIEjo3XveFW6GFdlqVRIuZXjbm523_qTvAZcssQFtp7F88b41jQUPS6DiVc4GE-iH4aZyhm2XjR281rxqg9uoEM2U_XF3QxJfu0EkqXUGhlBiw3NhJTcW5gpUFEmTjR9Mv7Ok4sUnI64Id1aC-E9CklGE6WlCEwmtmYgPHPwHR8PUqQ_hR2Px1nYlGgsUjv9sfcoNyHUbd7Af7LkRZZTIQ8qrcQJPR4-uS_XtGHgMW4aBr7aclG8yvQRheC3krbvSqHuoyP8_D_a5eqbYhUgfG_4P7f-5Qym9jMrlY3-KsKZlw-sBXEREZ_uRd9Ur2_FwmUykl61GQVzYFl8t2domCqbHoa-uzURLN6mi9ymQZ3ysBJ1URF6Wu5vE98T5CERWWGMoC1KhwlddBsVsENfioro67znWfS8pK-NNNVGpDAgSk9dTmLXX7qEx_tTr5DCRk6r_jpVX9KCldkrt08XFb8f08o3hDM98-xyVYf_TF0PF1ZKdAO4iaO2xFhM3NDRpqO5mifdK59Cq8nBTy9-FmMgH6zoqEhtlZzSFNNNaEaiBZ9hR1hgcNTjPaKE77izi4-WP7vRifD9z-cFSqA-xe1Cfzx0U0yAeC8Baa00lfC6L51jtU8iHgHObVFj2nsLxVxa76Od0GtbPJcQ0v6MLEcDHfKeFUDVnIOH7PrM6fxJ_GzkyfAP89filOuYkA_NamdNCUVRqxndTf_7pjsYdbF1chelnvTkc1DrTa5VNs4tU-_vM64tzGSrgd1ugVM4IgOldaYRybsbLS1RrCfYGPoGg0jcSvgP8aVcWJq5SDkcD8JbzM-XlTcWKjDm8LtnIhXkgIqTSKmhwBK7pHs0rRZYt5Zvct1lm_zNP4vx-ofpZpdnhDK0DjAAlCFDdQSI6Mb58e7RF29QQje57NDolMaletMy5nh4S_iW6d66qOJyua3tBwhQhJgYEHm4aC9t1DitunKeLtJfyo23fLAf7tSqzAZElX0VWtWNgI8lzUG65odmyBdHHN6fivvd5G-h0-XPA1Ek-MInmNiDjxQUCBPCTDj-S7wEZK5ca3mHKti0wlrkXXMHLRbvPuwRgUkfS0TmFmHhWJwxZze5Gd6lkLAY_uu9gcyRElQnPqtzK69mceKhXpKvoxI8F1UEl3xBAyaLWxLX2bDAijrCRdlNxEP9N_4o3O6NvbBG2QxgYL-8Qu6waC-QatT7fuXd1TKnUDSunz-Cb_nnIprpn84IKC2r9AyeZJJ3AcikPaRvnSqcn2Bf2eVpgtI_Iv0LnGXrB-3elMlkfCrMX4Euhc8tOzcxMiN-F6a0y2smge9Gny57L81iGCiZKkyRr5xwnrGGDbfo_kG0e-0cFCtAZmy80FHQmhI5sLnbEib2ypSMMhlE8Vv_KKTqcrebS9if8dXbv7kBToGUkE6PurXapyAw4rjzDKEDrqcOuNTgWv3vJkSOH6rnrNpe6uyO2lhxO4a4Poy1DAh4EsIX5OcFv1DRbWj1rB6LHqaFFDCRvES7z4--Ub1soloff6qCK13pprhxKTQAio8iWhRfoTc4FelYrbXvbOuoyKsPMDCu1CNm_kqBmTRa6AGEad6ox1QmBQJ0GkgK9CSrp2IStLYFzQFpUTdkp8VX1NADWkmBIqIFoE45NK_H3W-1-EsRibYQYtl-cnopcc75lHDrWLbDGrQy0-OlSULY-pLJr8GnVDSECHbpo1HgQWGSqzRdNQlxR-cw5JDNDsqYmBx4JpnuCobo9g62V8ACu5zoVKMNNCebFSgki1pFFwNyZ7hQETs80MI7_DftUbdX1s9CV0O-qQUfNyz6KcfpYjErsdIGWMVgIMVXUrZukkVmUwJcmA-Xi3HUF0HI59XUokNLg97iUl38EXRoGVotQ70H6-xFt6_SdUguU2VypjGjU_GeW9g6UjiztIMVk8NnWS6nEOJMT7t-9JewEk1gaNitaYHSyjjapT4hhUDGczWqlnwG9YREswGL9tPLnrb1PnjpvaZ_sgXyX8lb2NjMMIOrulJ4rgcx1J5Ba6dKNNpbd6ffbEY8vGvueod3UlhFu-HESiqNYahu-KfIsyPKbHbzAbSjfirfrdOI-TWiPukgSKoiL9TcxzOnw57iBIjMd2Q82yU7ZDZzIvCLQr0Ol-RcKE4uAvvPytmaMM2h-Q9zfssb1SNr8Cg3_WV8hO4D8TzTk3wBdNf3SNiypcgip7N0n7HzWvj1qPIMD48JPPFs7r8f5BvKMtBDSVVl9cLCzI8npfGYo8Ndqj3e_OkPEYoDvMkjkX1JGpm1QI3f1diWQSlHNULBvdzq39vLVrJ5cuG_U0i0K4owxbFcJCfdCO6MRp5zuk2WvtA8h8ffmUn3dc0qpQ9knb9MlBkHxob3WQBqSEZWUSg8NED6HwIUv7Fh1QiFWpce0EbKoOvd7ECGEgMKvuF9Qy943ifrswjEy9ag4gJrOzSqKNeKLDVyDqkoeuTxbVqovZ833Z3OLLKpr3Di1_wojiFILa6navRx5tTzNWz13HyA4qqKM8trD9dh0IIAkyxx5QfkWTH7XkQYmOlEvF_IwKen2e--3C5bXkvRX8aytcGNy_gPneuWOlbruDUvQWOubYgc2jxdGjl9hACJuaHQ9nqS-8xrTPCSkBcyYj--yS3xa51oN6rZWTuivAsr0TETWCvnTKq4meF0Fsb-899-86wsMQWUadH9TBe-69D5Zm6tybpYWyMidaxyI_F0kPPkyLyLLleyRuhE2ohOt6fMA2C4skmWYnKB0TLcWHk_qgHQE4TrbKihSPg20f7S1q_0SxfqNTbcRXCqZgyUgTzn5eaQonupSCWLbCgpr0xPpjG2lOCTrrgZuFnv5974hRrAvqyWLWwgAfKIRd4j7EkDKRTiWxBYyVvFTepOwUXcSTWEAr-xfnEWCM_GR0lsOEIjSSgZ0DlyqzfiKoKzDsvpSs3Fmai3yHDEWN0P_OA4eWknXNknVBqm2KoJ5nSnTH36i1fiTXeMtaeOqx60HP2QGS2VXKTKngdSkmVKZuGGItqlLYNF9hlMeTSFrgctjJNpmJ4A7Vs_FWd0QKZf40EnUB6umE5CMuhuP1eSNFs5M6jVT6tuDimVSJFYWQvUfHyxXLOanKrSTKiLudjH_wd97JIA9dCn7DFvHaUIEQeM9C57k0KzRMh3XdmQ51CdEJEU3zVaR0ndVaX7jdz6DPB-riF4Ki5sq2bTOGjIimuC9wBX9i5K2lawMk6CCxgaF95oMAbA2Effy0WqEx_hO3DjvYLfDt9dAIY3oUPVYAMyevBcV_FR4FekG1cUrls6Nsmt8aX9FyrEAf5PqR3h-6UBJ2AmDSLTrp0Y0rEQgo2oENsuKtwGlrKGAILuHZIa_uwlCKPZpUaqi3KDs-z9geDG3NVjjSoj_TegE3a0ZrZQuBM2-baP_lWZgYA7gQAs6VgDhKML36-3jJOx7Xg2XWvwi_tos2bRilbVeaDGsBEQjtFxEZli5m_fykETRStd3sm9H6eemn5nHWapaNUKMzgG6MmoacGAtG70ObxqM7IJV8_X-6I-VaAJK_qLoNzS4t0o0WjD7gd9PkAkXBrEXqJ5p84i_44uWkvo6NUXq01u60iV9qi9zxIq_WK3ihPubgRR9PwSprfA7wat5J1S8jV6hRPU6Hq29Jc89oPIjqPSuz7nSEjTGx33R1ckMDYa1tgcLjy8mwUHs3aXuX8IKmZg2okd62tjgxh5tkJod3ryqp6oBuH82-V6xV-N9_YkKP8VBCvfIHk1M1fovugLDcL_gUmQP_kp16L2sEm30SUkurVRGhPfMHnA_CFJrC9-qORmUaBHUiPhU3xG5zcKztEriM7OM_hMwF53XYgNh01mN93kmPL6XnfA1bvBija_LmdxsacONY6PdlZMiJkiaiLDLWAP_2-ixECo9idxh1Caqz9dUM4LI6VRAXmEvcxu7_cgifnUX47n_RbaSdj8nT_iFZK-0o29FKMfi8j3dNGtsCVkpfJ91_Lb0Zj742uXJcnl7BJL8xcH__afHHzU97Eb2NeUbvS5gxChothGd0w-tbGEzywrBUDcIF0yYR6NpbJLztOS7Uel1JsPizhHEzFa-UdSkanngpC38umzZXaw3giFe7pUGKcIAj0yhojAW03viBTWpFLW11tOCnUcCn_gp3yerQY5WDsGw7k4KjDraEmV9RVnKtVRzJe2NTPKnQqHd1NgJz40XJVfQeJVnjnflaTY1yZ6UGticAN-1Z6yn3iR2-Xn6v8sprkccqh_-8pq-SREZvbnG2xe2dwzvZ-1lTOfvb9caJXv-ADjivdFAjsgejLaz1A24MWCN4318W1NJaXVrFRO7yB5tqLl6IR3oxjxoWcKp5kQFBDECZsU8TKw8Esqz7gcaWEsZ7R4CelIO_xTFfYExwRc7jlFiHdUMYBkIkiHb7epb-mzwaI_vY8fHv017CofwO7b-ARYSidnVw0kzJxZ5l4k7OT2XM1V-dI-9Q_zK_PjkFt2MxAFWCQZeWOk0yR1Bbklc96fP--yyZmXfWMrfQAZBhHe-Ag2tYXX_ysRhkIwxvPjFTAONrbRdl3Kd7KxXgKB84vMEPeoLUcZxlgZMehfu20lVAL32bki13rGx5L0i2yCr6B29lFACXxJbcvJYDwKtSWSPDCCWpw_zq26xikpKyZmDMR38ZOHdmj0q6Wn6N32fhdO_XQzIpbgHSsxUugnkYmAmV8fIUd72wbL4qMQDlTnEMfEmtZR_LTXV94rpjJ9w0V8_1--1GRffxOJxbHdp7X2Uhhwrbn3RK2gDaIxwZPf8DrHo8_0obef5xmEq0Q79oATaPMrpTwwFM-E2vQDdBP70sg06fQU0aGoWdx-Rlb7rkImphAjTP0b3t1JC_jtPn7K5q_RJXxd2j1Vd4hu0veTZP-mFsy9cKvKn8SKXzeyzSB1mS_Kd6ZgPAeS-SZl-ZxSpskdHxzYLvwagT2uJ0JH24Snv0FDXHgGLujK9qbMgRdwv8BCx98bPq094eY4k9jywntMcX5XibrcCBfMOnfI-R1Gq5i-4T0g_zwGCCB9k2SvwGiUAwlDChwolKSomF7zMPokbXv4fGV6c9JzpylhWEgiuzBjNz5zt-072r8T0-y_-e0e_NY2Ai115IUMbwDhWtAdbh80Kc8hFC8nB3GpbEpvtc95xkfjPMm8HYtU2VkowgDG3xwZuM3y1dupSJgvrgluk0r96Q68ZM4yzqoWuBt7j3nBu5aEc58_xAeCIpJCM65CbuPNlW8ixrFGWbtG6WtngDW2pckRlk87KzeJXWsVss7vUSwD9DWuizYA012Ve3wgrPFNleCsdmUj-BO1H-udQ2DxPXKg1MkRl1v0HlyFFiANaJsYFk-jLYKsjRJy00DREtXZStLrWp_iINLh3_m7b_dIAXUYuyoBdZqQZONHbVwHgR7N9PPfr-glMkAoMjWcU5oIUiRWCBbMK2GWLk6iEizF69J8viUGleRrjK_KExvDalBNcpPvm7chF79EYzug5MXRKvAzh1uM87vHD8Lo5iiW-dwd8_Gzajj1m4VlD_ylAzZTb9OajD-BcqSrmf6QmwfhWb0IumGH0caH-Q3hywOJPNHGwguPqfLS2b9lQ5CwZ7ldzCH6bh5hEqTwR6n4OtXMzmsfleynciLwlZ6XZVn_TYhmMtI8CRtbJUmwjyFYXS2Px9s4alqqGhWHUeR_HDr6NERUT9tLSZFGxH2Cy7MYx3Jt0GpWGpHXIp8Ia1mfJ-d_TRTBqH5HAmCMFof39DkGmLzXrZ6qfkIDNh39GpkJtItUrZYKqUTMFvypkPcLOB6HIkyUv-_-993RQvpdXr2FU4XAl7J4NHLQ2cnBvXKeU59jz1ripHqI2JCFjXRfLR7RBld5CsujlKHAju97tcNCUzfBvLYRbfTcImubyF_Sgvmszb6rMlsQ2StnhSESdlAsUHthnTB-HpmmqWis7syGWUzDT1G5waiJM8N9wHNXshtwo7Pp3K_0-JODqn98c9jVlnTUQQxUgzmNtgqkWn4LyUMVlegMnyaAnUGBkF61AXpyL5RWHOjt9nXW_h7n5xl63yfcrCRjZ1TiYdMSPEDjh-TZNWlbp4kQkhryTKWRXgUFb7_1cNRnGCrkwVxB0-iitKBbZ5NRbLh9m4DgNMKlEpS7OEw2hLUmPyRdzHqy32WzDC6AhWaqTs8vtjGUtKh1QYPvEYsUGB0Y45DlfhgRolAEOKAxO6kTb5b1jT1u-sZto76iQUxoE0dBNdcw-tJvPANkArxSSqTBHymvElfU-0WRYOEGBmeVTuZyYNXY40jBeJ03OxwJeYKSf5a38qF3kmQtTDkvc_HqDOhiJMk_LIH0bhQOMth-xcd-3IlkCgLZ5XxW0t4zc3ecuz4ZskK-EF3dcmmxZsruGyJCSbf45IHuYOl8sqimH1gf75IwqteOnw5zdl96WJ4_VuajlgLTxsHatP8tNBKIVYh5101eDdndxWwHOhsAZRLiLW8HQa5adKXE6TRw-G3PGA4gnXtfDMdYwUOV5JVd53YaTbESf_ftVAa8u7m_GtX0QDBo6kdzvgw34TLYBhBqnGGCFIZZiBF0SDui2bSokf0G81kLFNxCc_av1PTbJinhdIVglY7oSf6b-I-cDYk9AzxA7auZMNN3ax_aPyMrmxf68Mb39VDldKX_qY8qtaABIdLiJpY1jtU4d_0TEgtc35lUWJXaVynwBEQfWjvqFCLN9pKXcggGvi-ZxZqKxIeSMNx85st4ulqDvny-9oeE2jlpGsmaxWdJGynpY95OEOPGyeJKc6krnT4vYZm6JVo-mK4gkFwVh6Ap5GDV8BPTnmBG8lG3szt-xx5km-SgsGolKjwr3hnR6jwQkKpRvhOUaaOBGwSWgCzL8XN07tqDpttsdaiUIVkiHu11Wen_9yth8mYJ0jOZekAtLrAS-vsww_ninXJOH-tMsz6kxaa6g9JWDeEINk13vyrbcQbJNZJ7gZCmPx00Es8SM37VwmcmQUML4FgAo1nXgRM5Qr0Xp0AmBBsqjSjeioa6VVItA4v2FHI_WgLrEcadmK0G4EsKcNFkSq5JfXZm9QZ1tAnwOpbAmVjcMlwc7RWVnydPinCIBhF0KevN59fjaCYUAntwG-Bk_CHUgiHudHyc9l_O-nme3cXj6vu7h6wGPvjxkqCwtEeK08nvl9Z6lBDNkLHeArDWIavWZ7eBFu5Bqxeip7tZj_EFSF7ItxRq2YEhn6XFlMCztJoGKrWh9KJJobdnLQkgc5qBwsZamNqFtqNbiCBpayXW6OBR4v1inPfHNDLPzUYSN_JVFfzHHJUnR9ytlQBRLiFBo09q9s_4nj9BYuzgOdUmehgicK6XxgiycHLR_M-c9R6Dww8ABS2cYFIuuTbqNvQra178hzdVca_Fm6_-AU6GQIh-kk5b0oJ0fHqVLsRjHtbPsYMHoyPCGfd0xwTCKnvRAlFSqFUyCmVXNrnoTODHUEcseNC-gchpVBTviYWCU6IwXWgh9FVU4S82dSG4pnUFGsq3OY7gn08XJRjX-hdZZODgN0GBuU28Sld96-vPdyfFYvc2uCTn4xULyoo5X78UEOOZ7FTEF2q6JTWnauo7cAimm0IlxqD2g1aGO3fOlJIDkot9nDedFJogDEI5h8obuqClWsQHoUBQdu8qj7rkhUFS-YhkftntPNp0afrub71ESo8_To64glq7JdTqFcl6EwpUBD5wc3i2DejqJLeuC1aB800Cx7DrlgousJxYdJSGU3eAs102m6-nyWmyx4yPIuFrcr73Ketv3nXzJ86AZp0TJ3cWZVyAosrEZC8vZrH6sVMsYhQd9ZaslpJlE2dn6PKMhg3IOqsh2zOpimuS5gCMHChb1tDLUHimAmxxesVbLLadB47RLTA96GjthwvRyk-TlkZPzWfhL_61HyF8LaVkm0MKPNB7QMcnAkBqclSA3Ka4x0JUjw-CjUUrvaXF800eKu3i9DfyRVUwZlctZ4zZWCradMvP20_9Qw7oC4h_13gayc2rYCqW4fv03CQ3U4fMwgg1GMJYdJ9bpkoWa_yDzm5K8T5TKoU5SwuKGlZnKvY92cl8padHMNpJF2D2ElW9PLE4blhB6kdDJWkusqBcb-1SwVOgfZ6v-XJHYaKstswYv1ivwU341ottrR9xoQRmVEhWF49HlFy7_Vc6mgPurp-dgyDramR4Y7YQYGmKsGP_ILu4LxtNgbelvTj7rRrTEYl5RrVtjpQZp6gasqMK6GD1s2RA36PamdrxyLfbE0U6GYvUDCr2Yv82tjPLxVOVStA7vJo0P-6yoJOrkuqvZz2b2OwUGXer5ZFzueX4cg7rvHZ-vVGS7QHaUqIc4-4Vso5QLsEKk_nWD6x5JlvyWCTfCCiyd8KCd8gdIKeKT5fpDJOid1Xpd-aMf_tlhSlfdbM_PQL5wSR1zg2sc8vtMUyMknhVgWA8NRkVLxC_wzgtHeSX1gCn2_gZodbK7E7q0JFckVRQ5-LNkcAevpTBK-SgR_P46R5QhtgudaVn_okpGBTs08obrQAh6FiHVi9AKvYdJ30u_YXvug9XwUF34eyIpMfSQtulp0jDHCWZXBfkOh9vungJioQuiyYqd_rCtCzQpNHwFc8U5kohkf4FbI3_iDpoOJZYyRmXSkz5F796l6HsjK0ePpdeOQINKT-ThmHtJLDW4wL5mH3lG4_WGjMCb_idY6cbUf8mxm4t5_1UIGk3Ga6cSt2fcrzRd_oufIu3UROqLyLbYvlerHtkdhLLhqL2dVpB0gE8kkjikGtXA1cyBC6DW1J0Cxz7v7X7QNPwEcxvOsIUdn9tuq9uGO6VhikbDeh1aolKoMBUYbfn2jLVx3Y_PLPXzqiR7n6Bl3GBCB5kCwotO21GQ4jiuUhiY49TAvPk7wnUzP0PRPNHbgQnJf2hEpsFoQMxrkRnGbnWsmPRK_khSOwD0CojgJ9AyxnWo0er4dW-stY8sPHTbIVKVsuRpV9tVYvuIixiaTOrFH1-V2k_MHDqrv54ufSlarve2apBY2L9Iir8RVx5jY-kKwU4xtooDcpXNATd9O_-bXOGbpBnVkh8umh4cfyDmkwq22_oULo5yuI6Ag9xI-TNnOGMJbLw_2XGH0MAevCPie7sjrh368mSN7sY4HqDd_PXWwPKB1o2NRzhrEss_6MZDkcA7_ygaEVNf2SeJ5VlApfniKzPtuQEKr02aNlIp_g06HzIeubS11MX2kE6EEoxGOjOlgii-rgQpJspD5j_WHq92SxQyPae7bV0LRhOX7DJWa5SpYfQEti9N9AiG6e7T1oyUesDs6TXavO_j_eQI9fATqpDYEcHT0gViiOyMYuvIUOciWl_rTLaRWNspWPeF3yvxCdDR76K50u6jBKpi7uxtIncT57zChQyn3gBkTO2Dv3FriOSxMnrloXkDhay1SDtHdsW9uAeXLDdGxfB9tsJInpngUNRBBVeY1TOG42xznCTayqc0ruExk1qDf4jXmVxIN-XmhARilowpnym0skuGSH2vxEdXhIcO_8e7f_HMRuptTlOi-0YE8xYNgt5iJLp8lhAiNGVx79jfFf_Pp9Vi3HcVbp0saUMpj_1-0WWd4FWTDQfwDfWUFOXG-85v64tn4WPfG4v93e1ZixdNiDFVcAkoMkmDgVCGpbJk1hPppTDO41Q1679F3f7wLy3ZZxJlzkl7gSGhivOgyGeJGWf0VS7N5duu0xcB0oYnkVCHSaE2JQUmkrk0MuZOGB2vYSe7tJpF-rjS1MkDh9wAwjSjfvMCyrkSc4a2eaKLzg-AdHK8RIRaAjK331_ojxB0Rd2d_e1P3d5z95wwrVUBY3wOkrOQuFZYSO0Aw4567RnK61ic7bWcRMxx9y7ziEOhNdcwB2REw4IlbHsAwfr4WmofjxRpOIevdvGG2GbS7vnoETSJli4Ewfek24hb_n6znwV3gMAq3ESpKJSMQbOO6lW9cn9ggbNn5SoW29qhby_46wbOKtDjs7WpcySZbNEqMX6YIJiGW77lXGsmyx0x-BlRm0QwkHfQC4oFghR9XyCaSHKZfPy-9xX0DtPYe1qrKL4cZX8GRVwYkEFxbknHHEGEq0s54-drz3JYzGwgA7GypNNb8U2cHpnhSGjmE27W75p2S44L1RI-pTzvKAMU2BpOX3Xy37lwH9XfTYBG0sblSyB4P2uJRzS5mnsKIrfp0KGlBcwXtaPoqIjN6QvJh-m0ZiIhjpkOIbVqovRXpdXga_vfrWX584_emmw7MDZOkHaeHMKlS_Twf3-zh2wUgUmaS0otcnOmqLUna93iWt9RMaHuAZ5S49a_sJ_Vyfl4JSM-WVjxH1w8_dNxKsYI2Mb1hOSLPtxZLkdvWNL2bm-rWBN8RhRzO-8RzUiMd9tYuORpgmGZTzHxnSWs2-VRFBwm6SQAs0MJQdFBpeuiEhommYbkSTu82CmDFiGXtWV-GxN9YDN1QtlDuxtymg7BKELOAdLw5pjw4wS9P-Wg6906bRrE4DTLE2yrEaoLH1PlBLjlKQODdY8_oq_M4t3UaORzSfxBRjWojpuLiK2CJ-Hp-1o0Y4jGk-_t9WAb1-TzlBEmYxIaNmxsxi9Hzecqd6L593toGLf_USfFOAHzBQmtDuhU6-xT9m-y-l2oF8YpJgGM2zE_SyVoBWDZtQR3UbGdMu-B_jDMRpIu4nGawjwhA95QxInqoisHS8xrcfVHDgWioXWbAfWveCeKynIXmTFJgJ3cLago64xKzB1qDgU7Nx8rhHZqv-xKf-wsVCX5RWPWNB2MliEJ4k_pNPMaeBCcjyc_rPYttJYEHPwgNrEiZKY4dJ_nkkVHh87gjlEUBWsvSU3vwLpnA6B-9-eEFZ4ZygYOBC48oFYlL_XY7LMHAnzZqP7gmDDcyeNiJADHAfPmvPDJtXXS1AIK1pucyXleH8h073c5Mp75rqlsZnTSN_Ad85pOBFzh39Y3yIDAGmz1-L5mnv23DbA2T9HotFg605ogtD9L54RG2CuIQG7nYnzP5YZQyJNo1P_b1a7PzTo2Nh7njKYOHNnfNcPnuvRDEg2Spmi6r1GA4Xyg5ogn0CAHQpDhi3A22BNuUHZ4fw4QgAnGWgEli0NespbWcZVuPpDbIz7iPrFvhCJd8XxwTcPRqOWUPxMnAAfwtKRJImgeHjz5D9dRj94ITNY84CEqkPVUy_spcl-vMtQfXNgLj40qDliwuiq78VfUcF01vo2dta1jKiFJ4-a6DHrzO8lkrBrtEToYLwtKBl-KrPkxfNTShZsOedHCZ3TISyAd6otdqjMV0rdoNv6AlpNcBi9EZ0v6TFqkk3hfT6Jw4RRsWTDhFYenFz3rvIIArCQiJ46QZy9wH0XcxhFJuUFelF5im33OhTDEpDOWYxcRkuA5JX8ZAdLcVjFEsoGXPXg3CucBI4CZvgjHtNqko_zUA8Ki8XWtkZAAT3HtP1cKlGn9QfzeoLj5AydCCrsrqY1_ztjwEnNw6Yz6Mre6oTUysuIKsyvSAwmawHQFJguOoPfl1NmFgqB7Av8UVhl-iiwPTpZyukIooDasVo_nw_ewxnjWcxguOgoYHhaOLrrMVfFqr6nX5N9Y5ly8LeLMdQGtnFYzQGvkKr8h_ciWdBOyBJfchvC5KtigYRAiRg2CZLubvYYwtbhPL3pDy1g0uF7o-tQbM2sUVU_6h3EQLzzQdpPwAsGPxA4HsTX7ikMSbKNZV6bHXLnZZMJGt3gzhESQkja3wjs2oZUPQ-WYTB8xQH3ooHqI0QSoOnZGU5C94peZBdVc9aYRumV6q3cMhCxHRZg1WDuUYvHti_R477leR6Fn3eazDUOkRBQavg7vEkwUkc9PTkESGz-KePfcQDwM3BYffbTGwzCA4c-b1ySodCNlVgYzxMb9Zy1QBT5wA7f4y9xWoSHh8qfjxRiDYGkB6E0eUIwbOxNgwjgvDwR5yh5qve0G3xpzdkbZc88TaURU7WncZpLEyKnMKICvoOtK91U2HXkkk_ZauLntb-n0I-2arJkDEFpk-ehCvqdPvgLUhO_Y7g2joX1KDJ82Ii7SFzeO3KHiGTrXc0_kpECcGxBZMlrFJeLf6xgJ8Ol3U9jrAm0dnYdUGgCoBGV-L3hZ1pquW4L3d12HaBXP--EhQVrLE15aLnArr7ZycHLITkXa5OO2PKgDTSTpssKcTkAihF2DRNPad5aaFmHXzUxVNEeLfUSw8wqLPMiu5U7BZngJ-p5E7rRmcHps7cOnU61HlIQ_MKkNtNf5GGFqYLefRFIv_R6u2UAxFAWgLW-56-zkQbT2xErSOzRnL__FGPJ-Zr6mfPMiFrbIoYhtkbXuNOzes2LgRlfD5P58mkFTd44-n2HKQMF_6xcS7F5EwhX5TTKsioFafXi_VgiVtSvGKV33Vw4kchsUa0ivV4Ymp5C99IYr6XO8-xsN88kzWips00u2Dy7eEgaBpIC3v32yGX6nquyHfFYrnpXs4sFdieY3YiBWnZDjAC20JmSZS1Ql5BH3NPEV-Lwu_5B9B46G10e1PvIkJIiV5UOAISnEqHGf5N3BwtQHlkeWELWEEmHkCswtlhPA0s7lM3JNTAYaQDO-RpuIaU8CZdgej1VZE3noNioqI62yVDJa5cVCPnEASGzfRv083fbrZhuDTnHCWMabMIoxpmg0m4p-tVydsJf-2fj2DUv1ILpwn2jsOBzo5vULGXn2xNJZ5ozgKuyEsOZ5Bvb2xKuNLpCGxK61A9qskNNmq67zJ3Ri39wrdPEQ8UzFEaNGuXptQOyuevpjqPduO1RV2vW7tWvKUSh2cZza9gFVEcqobge-k4B44vF4tmjSco_fLYp0q3tJMVkPhZnt4jGe8MYe4LWnr_7jP9j3-HdP-LWQZ0syiWfZdi_XmGGhvMeCZmtWqfo01tVrXPoGYEZegFQUwdcq_BoeV_Dd--PfFXds4WAy_t8l7FdgXXRcDp8QvBK9FlKx_QECix5ml13newnkM7xOjJcLrF6CpR_HjsVsvnrvK1Bo21kVMi4THwUcBC_t9l-JQgOMvmHZPdyKcTMi-7EEGKK9e3dKgwAWeILc1I-L4Rs_Io44Pq2UU8ekXdzF6c2QdDPVp9QEiArXuG7JzkNPMxYRn15RDGNB2NbC9KwZBer2NjW3kVMSfrhswMCVTMkYt4iO2TcqaI_kw1pgqcYPkaiK5-plY8Jc0BvjsvkDfn1wgwyvgZNT2IpvDi6c7hy4CcioVvUGnvrRayRyBxyYKW8u1M_SSLGr8I5tFspDTm1nk2dprhnKSZV39Aq76MgLKnfw4lPb-aCBrQDhSKnXzs7DPaq_1F5rt-lvgC8r8pVvv6Ja4Kv-kFvAgWULLAZ_I8l7NHQeiiUOAD0yMEkUewxi330Myhu6Nc101CcIDHAkL_A2GwoT7G0oyAxnZ05JhCb8u2Gpe7gV5R_6ihA3alCYnA7voysrqyZbMrTicZUls4G2QP3YjdayXce3utiKrRG4QfJSqiAZPhvoIqO61C3kOAyjSbmAl0xTfM-RMOSJ2bf745L_uF9QlruG1kipnWjVdNsjodMH-_6McFHR-YqXd1DFy6kIsfYiRTXDo_2LsgItE6jgKKXtZQOLKFTvSlEcJy8hCjvMZOdjVxxRmrLRQB88fklncCzH4x_0b_-Z7IZRIF0IfEQHaeol_drXxEsGCTVGGCAOpQueavmcMnJVXyxFGGXlJkf27eEk9EquKoXba2nvh4rIcYIISACEOeANWuTP444FC90xY2LmiBl7Hk86rt8krheNhoRRISyLjxbewEJkJZuNmKNCm_7682Yp6jImALfbb2pFxzfTay8NhqkjxpVcUdWGdumrUpsfcJABNP85IGNUx9dFhebuwaWEQBk1iIC4mUEuJBgdyBbbZSgGw4o5A9zqivbR_k1HNyjSPNUAeu8Ta7p9Ey7N3_B8wz55KynTd8CFdGTa_A7VmhAa1Sn9F-YahBrPueTFp0RDmVH_54GMaLv39Y5fWj6F8UKeREL5OKRKvCx8pSThJl0yqxgTVNybu9A0-zD63A8J9I9Ev1LbeZZng7W-mMxrGi1rB0kroikKS3QtcgHohvlL_ESgGBQkSbDoaPkreuWmcbI19KxmJUDK3K7d-tJP9QuzR0aIR6CmaDw6LBpQKp-us7bsiEY9U3OsvA72gOAdvjnEI66iiHxpLfiPdMR3H7jSuoDwj3rR5mf_bJ6D_UKRKWZ_JhMfES81UxWSaY48swElpbcP6xA7GDvvvRJD1apEJo7PIOwqUO334foIQ-Par_ExqYS5EzQ3wdMXdN1fdqiMXmPTy5f8cAvQYf_SQGeRxS0TZZMFRDQVVdDa5uDz63ne3ivcMadWJKRBmuIxVox_cJ4S7Qfv1c6epiDa12o4sPCHMdq3m4-n2TLpGEsPcWvSy1L_4z3i5BRvWPG_dM7yb28hwuhztdsukNh_FTfFXuSe7UiejtrAi0NbxlT_5jHcmpE7saali80dLEV-tbBGHrM_9oXehra3amEeh2eFy6zDpSugThgRFF4AhQ4O5XDn4sHOy8v3aLLNg30MP56YoJShXHzUX1BhnjNF1kI5B6PJoH4xRX_GRszxp0csXcUXTFkNKUI5ne4Omri7WH9CEjSIiFpzC1UifzaAbUQ2_-YZxD6j_35y8RrODVz0MzzqQRh8MVlhGd0s42rBIkk7lfrDB4R0VaeGr3HICcyiT0EiwZEFIleoiZWWS9S07rPS0msBjRBEIG4j9D3fvx-eydsAaxI4kyvEsqSOTgf8egEYcpvfLZa6aYNZoVWcG4HcmYAwUC9D3MT7NPl72c8lU12ff2i2EjWJ3UKG2mCjRyQ_orgR7zbI_ErMSbjT-OMfSlsADpOXfjBAwrQIG9tj470ccpxj_xCN_OEzU4xBF4CZ9sv6YTIrhpeGtjENubhmhQ1f8hK3df3oXQ4NbvUXdz2LdQkmtCi_uKKMYXks3McycoP_coeJ8sLQV40cqJ307clG2WJIx53FZxPkV-L5YyMMKczxo7gC3pGjBN_D3D1bYZzkjHwpD-L2izQ__7xVlIXOsu-Tgtl2CZyqyOFE8op_7_hCo0jdMTh-jgX5l1apNkcUn0a2wuk8frf2-3Yave-RvIpQiUIeknQrUBnbNxsCpPtmk4N9aCATD6PgM0Lt7Y_IV4yUPCnxWRpnQBa1T5kAYjmk2dVfUG7vXfCet0v78aR3gj_GfXwsMyQUhrNq7ASiQd2HDAEGUW-LkoEi4Yg5tbA3_L8T13xuePAGUfTglBx_0_vJtWnt4-vfBqRg78wdlpS4V8AmpgK3f4oRipzk1bfyPyuTuI7TzikQAF4OL9HJOYxMDp1JqtD5SMWt6133eDvJvwaHo5wJIvJM2vUSHLidN2t9Pz962FDIbAMoWJ51ksIAvlE2C0e-wBKqHUz4TArkTNbNJsXgPT6RKw3IJZpCX8U-rDEuPo8qqbv2TkaGzhyy-Ha-XDhkofYEwJxPuy0DepsXPuPDjVe1zW2q1DspQBH2NQ1NgUtGNON8ErRXA5zVU-PLYRIZrldTePve_Ughh0YOENy5F-eAgdhLaZt6b9cPk1PfgOH-r351z6cIR8KYDjKMZnebQpPqr4BIWWX2JVJgmkFRJziO_h7pjSeRIUujhoGFqAJWy2jXkVbP-g5MWb-05-qwqv8YrpGyXgDRh8PZTtW6Ui4kN0DiBG00n9tYyUCBKgMN317OC5yHuR04hGNpreyBU8eefWnppqfbgpTvSLzdVl_9-ewEcT9TmUu_UyWt6PNseiOO1qOPOQ-Bqlz4k2e3cgoTZH_lbPzKjajeeIlPgWogiLpOS7vy64A9z2hmBbUJcIDBoVFiszzmfzJwgDhSwzogqBq92P4t9KRS8h4jLQgN6QIjo3sAE6HVPbV3H8OLtte4v0cvUM14yWZ8dyqY7HWs0CydhEHy_UDJ9ZeCK8_A5SgY_U4Ww_ppQ0y-KMi3sNlBqoouYo5mDNRd8ZI8yXfsOZmu0GwTpJoS9QvhecXr27EFSfsTS1joMZQZIGmbemYVY_wb0FrTdLrqG2RrnkD1YpNoqTRiu19_CnptzBfkNLsMS4TzadybYFjDE_-W_en417UyltvAOTHAoc01e3vrc5zXHa7K1ORq4I4HtooTnZvyaHNIUjZxHKe8saXrZFYOo5DQyE1wSlPCxTqKvNgYoSGEztYvAemI5sRJa1PDh2NkiaNe9e6aeUQ9SjlSKNPPfsiArCCMejPMpzTcUQ1ZzdYUUBdTRRSariJdnp9DwHqBY8lhw-9y6efdcqyhtU2E4AIIkk3XSE0ZWIp_MPkZUQxSpbTfvNra-6VYqhYh5rn6J7ZptVeNvXmTVYcnVoHreY7ZfChSUGPMOnoIPu4A6BSQxVIscPpk1DZ0eLTn-9wW9WvSwwzRuOzQfS7FkEK205N_lnn98pC-H2ai5ahiKLGNaW_e5gfBANP2zbnmCkz0Y3vwyxQLbGwwahb54U-mUg08KRiGw_IHMGvxaVTyJfHTPPejlPUvw2tg1fKSoT8O10PgYo6Jbv0j9pItqU31t35SbSHe5f-BeGXZ6-7sBjt-KZlAo3kpAspkFIYN1cFEk6C0BiqGEeF6NqktZensDD2SfuFraigRr_EpdsvTix3LWEygP00moKLCDL4Qf29b3dtQmzNr3dz5aP3eMCO7SI-LZhVYHfyNz4v85cNOpb7jhUmCEUtASRoO7ZpiAEUqm0i37-0mpRtazxt9xE4l5KCEAmu8nxfr2NthbtRAQ34PDZeed2D6KsMhVnCz7KtZtRAB9SRFyzHwKCdQNI39LFM2FRqAAeiXsqQmMTBMuvBaojSxFhnXSnDZY5gmQyHLZKVNaO6_GZ7wWQdh8CH0PdxBDcvGE--OIG-Pz8hIjUyxS4yUYwuBHgTkpnaOVpohmE-uiwaRX5U-JSGXJ6tZ-7eRJEzDbixDucPLxakW81EoBcRzF33VAXcEZacuXuUkLMVRsOylexPQVZOAyfKR2UfVLu4ZMiV5bzrkHtBvAToLsCTSDnQ1C6iDQzu6KnPGyQSu5AwJxREdlhwCsY9fdd4cDcRi3xOreUwqrT6VpWH3os0CRipaj8ypj3a8hZUR3d7BpdqasBMeEzvMnWJ6JBWBDjE8EQiEQ_9aqS48GKpzlRDr0xjFXRWHyGcrXZ0cZ2eGXeTtpO-9RU-EbVJVJNuyUVzPhktta6VpjWMbrZZpXwxX8hGfIJ7ZlZu2sr-09aeLrMr5r0dKjsCWK3O8FdOFddSyKWZRYS6MVvAsUjQX0VA0kpYgpYt4IKlsP67wWRI15a31sJrfYSmcJ0f_2e5slYQ_aJQdVf-_OwAJhHf4l6cyEbSQ87kT9OiCUe59hh-kbXfF7HhITg8Pl17jvroEl_oMhMFxbq7F0_f5GwFSgBniHI876hSkfdsSalh1kU5dG6AD8gAuUeZmCRYK0VO-OFJhqpXFyx7lcwkf9snUs0VzGk3ScY9No6IC20eANov9hoB6FOCOELE-eB6T0-MdaRMokHKwdUTv_H3LpUR5FdnWfq5iWTmp_IckaQeSRnTaTraJhUzUPOCOm2-44yDk-ocHO3ZiYsQKg8bzWsWExbJRId14HLvX1AJF9ixjkQz3M1qoTKFhe2he45hCvnUlArF6jWlmpuIjBCit21TNNA_h4opbpTjIBCxuxjAW5iGxiYSCr5i0eZ8G5Vf9jkLHDhPeghFF88--3qiPUBYcOeZ7G0iwgKFZS_q7M0U8htdZKBx-tMsqex7tfPjhapsBJ8mF3gQr3gYIx-rAij1CI6c6mZdKlMJYDUKqTyqogbbZ2JTnOeMEUGTS6NmTfn3V2ljcZYppGJ_58S4R60CrE5x-1eBfBHxjr3FAFAKMD9xT66R1S92BwJOsIO9y74-7eTifHSYZoxtoj7EVS4A1z2qi6oi00Hq-eXweeqZxmoWqPJGXBVo9n53GtHojIK-REyG3twOXqzuLGgBPb_NH9Dyjz7jIlq1j_GVk7Kzl10EQX-0PnpOOyHxycAFdncLWI2vumppRscTeUKckCwxH4bQcF42BcLigsonKSWLQAz71WYw6r6-jorfIJjm46Hu1RASfnAXxmlLXA609NgTfIihCxcOZJtelahDw3Uhk28snhxklPOHR8mURwLaVWCxVLZ5KeZIApj8QBrus8B8IjHbUm8vYztFFCuhyHKJuIJRMu6onU2gMKzurylfhzj3VcLX00SRa4MmF3iYnhrnLDlRdorDMlktPoAZ2BiXWXo1dQ8m5S5sOlsQVX5rBmccJFcRfASKGqe9c1Im4cTeIz2bna4ATBWfHyArdo4q8IS21-m0H-2yj02qXmDcU5_pgWcHy8zNiAIX2hDqohaTN6oDvR3zuaO3Df_5ctXZ7Owld0ra6A26S-ykLA3tfQSxRN7oCXO3c3VknOQhCF6IlZQ99DTpNb40S1MWebVIKlu8B7-WXEDHuCLLoHqlmioZoVFPBeyf1aWEVLSoi5_r_TX3vr81I7bnPV5GZ7f8A7i0YojjrNTfzF0Hhxdgb_XYbOoSkcB8br50ohvIVuxetlwJYoCp_fANJEFmx6xBQLqs79uVle5yc7R_cBCtDB3KM3E_ZbA6xWhwbwBWd9VS0oPEKVvgY1t2dY7YoWaaUCjRg54KNM-xOCygaCTi7HhBBPZNvmM6PqnG0qD6IDb9G_QzQvb4qfv6ZMYhr429CCnadd7xMJ1KjVZikH9vMtbM6i8FKRTGcbExYl_qkrL-p0dzFP59krb4b0GdUYPof312H5nTM0nxaZJaFEdqrJL5DrN1GL5_cRd6ZjWBZKIz0MT3CBMNuVLPK0fMKrfzldty_a4Sm7wcNwDGZiwK2EbfNEpdmOeiiwq0H4tc5oKtNUj5Mxp8IQJvY9PSmgUoFhmwrjuV7J81pzSwJOuf6i-1fTmlJ2nNKu-hFLX0370cKC7Wbf5SremF-rG14wt7rsI4rIhXVU6h_3FDu3dTR1WR73XvxFIkmQiVQcIq7Yy2BC8DDUa_zUTIP-IDNlQgLuj-cSfbrSERb_t52KGQIkwGM0Iql0caoR-QRRAJ7990HkcNED2rhQFGsew5oIjSZM5vmL384N1XxaXXtwB8rYgpz6x9fIAlAK_zmDWLCS67cawFVaJFp2FWmplOpd2Bdzpzr_W1Rr87xEUGz0W9AH5D-iiYE_xR4G-I0T-nxJ62nFp2PpRUWzyt4bSdV6TyUO52hk8zA03HfVLX-CeYP7H0aW853T6f4k2iuuCmOBKL6Dqq8fEa-M9mvPoHSeQILkTuT7orOQKh1RFrE7qhe0moB4qCA-03cA5gTpSTz4bCGbvix7YU_Y3THlJygaJ6ECFc6ZRap880OtlSv2m7lvVGH10RuwYvISgNM0yyiqpP2vzDx4Sgo67BITmrdiwCQAUe4v-JxbE9HwcLzgQLR_HPD-_CdBjrPTjDXH4JDHrUnsvHKR8mdHid93jLIic82ZEFKTNy73uzGnzjDY_wUKiFBFUh3o_8ybU3OFbq0rAcRntiN3nSlbEjoQs3av_b3EqVBzqZAcEPPTCSQuJRe9_tsHzi5XMiF4iIYEojE_kQ3vdaEZN9EjwHT_zTJoRPnl2ypQ2FBtLrQQgSAHkQRomPTDj5qAtutUCYBiuN8ZhSrv5EhcjvHXNNi6K0Bd5zmAAdN79TzfT68J2YUTCn8hFIJ86z0H-qJPmJG78OsWoRjfMZNCAfe1qK_zBe4hZ2aRbpKTdMufYRgaNPEAwJjEY4_Z5JfFIFE-RUtC7mHj2eLZt9NAFu9opdMcGPdgUk7qCDRBGlj8W_wskchgszHmBiQUYHvPEXAI4aW1WJxLzyGx-YGyoMJ8UnTB4rN66beSIq65UGhYE3oYqsik0WB7AFc4YQBUocqsU6DxUAS6doPYjnFY56lGfVmO4ZkLk3i9c_vAXexTXkNA4JyxuqVcwk18SupCjnEEBssGMK8CVu362STo3LmUyWc6LN2-7gyD1HRAQNyEIkMlh0bAGhD1sjKvQ3LgFejjhdPBtyFA9O_8qOf7n73MW8OcYw7H6LQkbUeTTWb8fnAG7-GXi21h57DVfJQw8sy0RsLD5yjwKEAVRDdKLaYgeuZbDdMyrn7PkS5n8ReRmof8Ik0ezS9ogyfsHndpej4a_-het3EHP6HtAy5LotAgG2Dl__urcRvDyGuUpm9iV5DTG8XnGRMFIDZ2Ny3Cq3enm3TUCavd-RPvXg7VQSxu7B0PwG7YXu1K5DnEe7Dj64tkwN3SuKeHnZE_7dcrLH-mYreSfmGznp24Iz1YZde6Pmw_6iiCK9Y-dQJyqf8u4ixN7bibHjj1pP1lsop_biPZgJRptBiR1gl5WwI8f1PPRWMgrqa0CY4nm9tdoKnllEhjCVx-DMqUyrX5_KibWSgfJGP6qSjxhHXn3tz3zWjatdNthWNkIsobMZbExK25heMMfXRS57quyVsnP-FgBFXrMtTYGZzoE3sIFv87nn1dw8swstRaPgn5WZolIYWko33avUaAfX3bXHANMz9067LjqsLBn38HT6af42BNwNZ_bb9iisZf_uegkh4KSjme2l8Z_SShbtszBzvmXI1xMuKTUna3gazMyIm5Du2TjmTTNINvnKiwYKzOLmwYAT68i7r2yfFfJIf-_S_fpooNfh38e1ZqR583SZ5gBONIvqQX34tw1WWvV4QPoKDDZhLXwWT5ftgrbqVS8UBmTo_sbRXZb5et-4cq8iRSV8BkWOKRDyE2FSClxpp-FWPrNMktnSsP3ylFV3NOLsUOXTOX481Pp6XiyMMeS_HmGNUiEsCYp2a0DTIVKN_3_-7ZeYfNXLzRWzXVYRHFWSesQ7l9nAECuH1uDREaxV5rCupEoW9ZtZ2WsVSMsL_aGsagS4LxjadnnfOrR1gU4ZNs_v3ja11WZ3fAxOZcv8RZ3V8O9BnVidZpYKRxshDYMoXzLYIpFfi1Ud6nE2qhgipWMcwl91P6ooByH8mDhCNodg0WTB6Iskg5ohMU0yRNKiRpZD8n0D1D2NTVdn1T2fAmbXzM2jq8R06c0HmJUv_y4r0dqeRg4N82wkpyRl6GgU8X4sTtiCTeyv5cnY_OOUmWJc7beldFRQBCpR7enU-RqqwCCB_WjBCU7VBFe5YxLun9jGWITWO_GMAkbNvBPZ8ZCvWpZum-LwRBVHWL9mtgcwJv95mNJtmrU9SCe1zna-PQ2Uo0ePtLnrLiCCV6PnLbwgIDt11x6CzLU9Ip3SZdJ4JplQ9MtnOyCC6aTK-MKib422H7aehOGAg98WyNqbfvsXICNwBzy3Mm5n8HtKXTYKdSiFWsg_z6dAkckp_48Kb2sRGmlk2LO4ibKGMr55oVrZd3Nnm2ZjWoqRLvxFqxLTyWGDsxqLT_JrYG7G5UYVQXbUheSDk5ulWB7F_HgCDxzDJm7xgt6g-Usf8_mVqPYZZppeqJC0NwqKfN0ZJwTT4AZlIyzXw6rEFAMp9aJzrgs02LsViIW2TS4DofbA6bqr8Rp3yvUn-pjJs2W8v7lQDASvlpkbGnnrDxsHuATSCcNOCklKPXmQrxXF1G-kC8JeGufuuZMNv1fZWQO1o3eZ1_LZVStBvKByIOtqxpSIVoB7R6sRKkBS30C1DFAFbQ9BIZ6sTkc9RZcrUIcKrCF2aanDUNVTnbr9_waThxakdu0XBrzR6f_YxqPPNrvxhr51j5RD5K1nzP24YG2JlMoERJzsuVoLjLCrkL3ShJYZbVOd6xqaINz1nJS1ywFjHHrtv9P0QAhWhWW-hJUFc7ZvDFE05SvffIhxecNr99LAQKX-x1y0rz7qIL0lIk-iRdycnr3govUrjMV5N4J6ST62VCC6r52j4IlxT2IH9zI4y7m_QOydWlA0GXmnApl5-Yf9C09iJLP1r6s-6jKThg0SCO1A7AAsMOQEwuckOPkQ_t2OlTrRsjTIZIEJbucPiaJFLaSK23bzDs-1yLHjUXGfxd0FGkradTQAT4ZHGkM8YMVQdrcoo1O5cR1d7cFq21Tp1pdej9iCgVAcmj4SszSe70NCPjMb5nN1whdMhZQklhjaV2swpgI5TmDVA3ATG9Tb01IVxSdRq2WD7supoWCC-rdNkgcgyKUKg9HzrzJWBk2766cXB1CWSrBsDF6nn6S-22sHIqxmA_Tv-2Q7XKQZxcERIE-t0qoT5p6LFPDSbta0YxPq-BICJNHqDqt1M7AuNfC1CfnQ59rwRmYcRIQ3pxuQBUSYPihRmKtLlprWP2dSlY8Py1QBm1jKR0ZdqI99QxKleZRHQix5_oaJhKaJww-In8S2nlhrjpyev4PKHkdkkKErv9D1S3k5TUqTr_12avOCi6xhsulw4VVw1j3sm-xTn3R1sjdpqMP8bGJsmZ6SVjnb-clhn3FkpovheFqpEFqDuEB-xdKPygzMrBrnp2WzH9yXxbn4Gwlyxxwxo3UcvUJxtP7vwOMON0CfE68u8ZhqtyX7NXKE48HrrrEZL6eT6N10sFA3mhf2PtS7gQ6Qo0gt7Qbci_3rj5Dgvt2p5VK64e0I_304KehAClCcMCTRedglvzQJhgwK6UyZu529TFT3_PHZGDkWmqUGqyN1v6omJhtvgJiBmm6iaZtQL58zwG_heEd262oM6VRRJaVmYO7B7QmOypn1sU5pNFz-_c5NzGYwMXVxj2n6EF0XXhhkwlLQB_lgwb7XmFzyZGenChWK_9DerNipSyZW-3QOt9zNhAr3zqTiV2_eHi-rTQ_dVgzK4oYuAy578xuDNV0dmYJrJQ0WqWHqSfUk8RjnPCrUwHmBlTIrmKDpeWXTAMCh86s19RnOFEfx_BGEu7cc7lwhFeKMAQPDfCMqClZbL6eMaledii9uMcw7kIFraIzRv6FLNBQ2Yji3PVRbZYz42BV0zR-mPtVlJnjqZB6QjfAQ-YZM7mNbQiSB5t1EPfhrLjmfK1uX5-i0UGBMZX7sOI-GkJfhHUJfgL8PCKMcudM7RID0OZQXtWQ-GRWLdkWaBZsmtNxVrMM9rd7ahTESc6-7OutPyOF-AjEODotsgIKY6hoVYotw_uVVxFHi0OkXbQ2W0IfH5o2PFW9qHT-qlJHJ9cuUzfj09Tdxz_BDNsPaCSDRKhegOGLRxvdZ1lASBWDVFNA80Cm0kvwKPW8Fi8YgLpOMXbnZc-RgCTiA7PjlqnZrexXBAjWjY8C4NTry0p5L_gi15Vtb8ey0BwmjTzaXMlj26_vXdn550ON68wqR_XpypHPS8anyxq5_BqTWgmtwPR_rUD1vqs3AV1RMxiDo74DIN_nFHxheiw5PvmXAkiVFeYcQe1fOBEiYANcO76TeXYSR7iXhR2sAs6b1UC_XWoDHCAdxki2oiL6bMlJWrEw_0ct7wEz2gUfKwQUU6v-hexJzsbQDn922kDICEBiS9sqH-Y9YGB8ZBDy--u4BeLGGCNR8_4ChVCVHGLUzb98p9RB_MppGTq8INsL0ezbSPoqq9bq0H2Yz2gX_RJ4yI9fUkvtmpsN7rlJQ1cP8rCJVtQjvvOAa44GaLIwdmQG-AHFK6GbgKmoWZ7jJ4m_B-qX69fBAIT2q51ItEnHcOZkux6umY7A_uxOFB_qr3emY5FMiMyKhjywwej_aPlfL9TpvM1V-zqsTWz93F_p8IbzbGFsiEQGkcm3DEHII5X5fUcwXbGnyv0lIAsdF5Be1XZjRLYsUPb_ulEkme1YwjT2CjnSGC34umhImw46fs36d0dhP0zTxGSBtrkziNA_oJyEi8H2MADHrHYxCbQMd0lhHJU29wAB_MS3op1bC0_WoqJy3SETZ6YZ5JxCDYoEuEMnESn_Ntn2w9XYLBN0pZGr5zArcN3BEGUoAt-HDT7Emy4NVq5jONLT-dAC4FNEpnHvl416HWQNQucRQZzgiybjQidc2rthqiDiHfGHeL3vnFfq3ZysNZNE2Y6FEaczwjN7fyA_ZkMo8mfFLcs4xXWs92ZYZMYJw_A6I4yh829Py9tmTVteq3HqLk5TcZGRfjy2iuikdOmHdueFd7KYOFTY3_h5i_fLNZi1Do0NN8C21dG_oUwP9uSFK-dur4VdIlaumN6rmKSfpj3PLerKf6K7lmEFjMbBLuK7QhFY_a4h1hz5ObJ6pQ_pdX-67IcNy-m5wxLN9Rq2mwF1LGhOjPQRc12x8lEpRuiEiT8bdPc7dxXOizv89T8qlwIVzejOU2I2VBk_NW_9nroGKW0BhNomlYaH60X-oAq5MtpJQ4pkq8OS_8qa6BKY5GL1LrtUOzsR2W5S_tJJPBTEeS8K4ihR-_2RFHDFOWDMjNEEoQ2cX9lI9ZYEyae2sgZrsceb6A__Zw4r4IfxaV8UPHdW6GgqzD_VJKUM5EhlA-vedavVheWLEB3MA-q413TTzna1JrMd7GSg1-oWTlCT1tM1RYw7UPYDcmXYKow8p76cDKiZyN8F3cE9gmd-KdDYo4FYaGUxmmRuT2ZzZzlgLCZY49wHk80-exYJ3uPFEk9vE6urQTzR1Nh7e15gsJq806D6f7h9AyySyU0qRnalW601YHVpnfxOnA87wqIIM-xA0HywH-HTsGDUT7lE6fXV37oH9angJuBwSqv0nXP3ydjWYk6OuhfOp5VEDz-ysu9dZ2vdD1wxGhh8aDKIpmWEGt1k5UphVj7zMEuhyzn0DG74UygHM7B2EhLfJn5mvk8nWeRIWzbLQNAr6IoJfFk4PsJx5ikkr_rxAUWhOSgacX1hYhl5vkX6PYSdO9EY1d_VGWKe_WODuiPa9FiZTWrWxV2tzMzF6zxtV3OecGt2mobAMCCItYcqM5IaxhMR2q2OCmsMEUJk7JKpHOlZDKYjXeRdx20X6BxYTGS20-xqER04fBSoP0qMll5YGw-cmCVlAEGSAC6yUuZUVDZdS_vxFdZpP_Z0gNeI_2MkRJhIxSdkeRHbvk_4VLVYDXZzVpssXC7CBYbmlmQYiBHnRDC7eSplza6ib9125TuqDjSIUzHCp3-f0p84bngxDBCrlBFLnxxGFiOSW-xJP3LtzONvzQ4dg6b64lKtnjRahqxOSG4MFOzhuFkYuLlVBp7KmvjHIGlhDLbcwRJnc9bFYPWVLbUEDAu1D7UIdZvE1heq8juJBiL4kR3LxDzemXmfTign0rgoQ4Sa1wu9_dbAp2N0LKXFxvdqpqHogOFaPNGDRyEFqZzcxjcLGK9sSuXHq48Fz0LZA1vIwWzbVnmb4dd6QiB6AVgeT3yiHCOoKXtuIdDDqSSbamEyKkgQtyXsYazVx3RgSd_cgAmyOzAJTk8E67S3qadMhYrWLIFrXoSROE6_DD1k6Mg-j_0O5n4KTFbjlUjvACESD6P2diVK6q7UIZYuj7J1m9BP11hnaQh_JZwLssAKFfJT2YPU0p1i3VNKVLEa_9ICSJROTDWs-C-QDirGQqpvPoqf3vmO5YTygVfhKio1y7wQBHcoc53ZbXt186YBJ0UHgV5EGtaztsjMJBwB1Q6sA3vQm8RIpxxRwTFdcH2SAfAUUpwRiGFJNn67BRSUBqjDk6wcEuq--RxDnuH8ZzXutWhar9_ICjMHnvktZCzybnVgbEMFhGQlWBaDGc3kQsXKT1uU55A_KuaHjYAoyZd66yG342Y52DJ9AnkeKYtLTnEsi80P85l26Kf_Oa3O1DR69OOTO7YD-h87OsGRnL56R869Q3F9Xh3tKkkzoMR_oGKQ3ANufjSkpFasp3BgWq1U8VpcLFiIrAQdFexrLlViWfOr4WwPoSszbb4KEGjnzSmbeDDlWACacYnHNtOj6lZ-Qo4v5RKBtZu_GYzXoAaCs4Bpj0qQp3mNcJObYq_2dVm8y1sDBO0C7neMmZqS5lEqkF5srMSQXmCs2k1qhZYMganrtpy_Qno78lfMCB_txdL_E3-YmadkFWNtymm1uGr-x5Ef4WTYBImYia6kaSty70y-78Hr0XGlUn0X5G3mJ15539JxOKeQdrRq_Cqy23WFvvvARY2kckVqnYyjPABKSkd3pmbXzpTPhwms5eCuc06LUiu0M-viMhimeBBUPeCsG-JXiWz9gmCaMcBc2RfNXhiNAFujHjc1ExWrwoIzjqN5lFDnF-mI5kC7gyIx-TjbKh4A1hSzH-zCpnuku9qI4Y-FsWZ5A49eHigp24et-cui0Tb68muRA3YBkxd83jl-tF1nd5IooHnB9Im3odFPSXGJvaivBTLR1h7W7ST4f2k2iJfObIbEzZV0GNcRs8Wz3mj3tA96yEiKlvmp1W07DAwDqaZsKCdV-oirtzvcGOA96eBHtj1CLg3JmKgF3unNOtrexgAXtW9TYadKZSmKhwEljfwjy-72t4LC49hMNn5zhJs50M8PgNUEcAslHj1J_s6rvdmTwxYjvwy97RJrdiNlujF6WXnosJEc4Nuw6Rd5SFbpcMo9Fg0V4FTiR1TqZ7hFdvHzbyT_yGO52NwOQEfV3fyLnB0fw49TWu5nXS7uTcUwovHJLjAcC90SNN_CCw3RaI2aPt4DKSGIhwHUWECjuTus2ywLeRBXeDR_Ra9YnfFTDTdXcdOCjQHHIDVb-QmF2TE2yxZn5D3ICvXYN1HCwPorVHI_WD9egBqqFkNpkuLpPefarzthh6e72UJijTP5UOPv1tr4JcpnxNiljO8dkZ1Y_730Q6DpG4GwilNYQuw4Wm5M9Q-TC88Med3xFpSVPwKXK7OPF-jvhT_qIaqx1k70vOjtT6S1PnIqn8Ubi0lZrVsiOJaCVvS0ks9NdPbDj1IRqr9QJ4wNJTemP5BqoHbIEZ-ZRQuxh1VSYS9-FHeelOkeyh9cjnJsBBk8LHL1BmDeA0KDbqmZhGuYxD-jWtNM0EwjLIhu2I6EhZQLyaaEdrliLPmCdQrFyfp9YavaSzExM4MObMWwxjay7j9MbXzOiSE1x1QfT2zEuYj1ZNeYpFGPWX9c7qSgkg-yxRgdx9PR3tE0PnEzXgLJtiz4Qj6RJqwEZ_XqU5OcevMAjSJN_fC8BTt0CQup2_sTQCdMC-gNw_PSovFlblzBzclRlMdrPFh66nOWsDAeIfTRxdlBvhJALXSbWzrllBQFZK0g64gulrC9tMAoCZBoQKveJe4lCg8BqDylYBLjRaYyr3G7YBjzN98s7dIaYCC0PWu2f9gpxs_5VD8oWPNp0uOEfe2fhQ45mDlyTk6kyQmOXOCKD4nkN0Sob74cFWbh5yEkVXVu1G90omKHIIty71Ifni0IXlBO74Bda1G7VunA9OUwmHQrCS7SSmhsKqWyvuQAeCdZP9Hp6J8mAyiIRmh0fjAZVz6wW2cBT3fotiZjbrockzIlCltWzKssILq1Bf3OTQLi2CfHTpw5lJA6Mh77QrakW9YcqhjCGOv-JVTgfUGAXtL-NeHPorDXlMK-KHxHoeYz8lleuHn-O91rpyGjqhIoTr2qyMM-QJ2YEbHzEhTdlyFi0JeLmhnwbWnkyw7974LuYPrz8lEbWW472z68rVsIEhLbzdBw09JNjrFsDcenB4tAFlLgFexJ-gklHEOPrKQjglhqL6z-PValM8YXgXILXjOUHRTQRweoTev97LUk6ND5XuUk84sfl9-2FOciX4cJpeEHHkDi58Wao9RKBlieDVUFkncgOEzxzZ0RRbhqmM0YBu6FbfxWaYofwoW6iEG_vA76ZpCm5LcLEI1sdoX3XWej5rnaY51oH8vD87cV6gOj3J6MGFbsciJwueh0JVGH5NYdeROcm5GR0GS1wZcUXG_vtlLNnAHsL73yKZS7S1qSUwiRoMYkHwEEAxwx2VsBBzaWkd52ns55tx_c4XluOrWw_p7qu0WlkEVDuTqoWre4moOZdQQZg7sQZFq68nAu-9VlJNEVd69fgdpJemBcZ_n9nlB4MNcSCCApT4VTUcyFO48j210HsvXw76Avk08PR2eNQTNcM5Ngdf8a1PB72sKwtKfFh1oOIPT9GtQ0j5c2Or831J8xtlHnH-dCx_lCo6WrI0xvAcx1jEcDakfOd2sJQwxidNy5D-HadVguX-vzYw6W7fJhCdriLOY56WBfBSz4hYlN_g4Bdj0lbgUMH-7G6QPj2skHYOXsul4x4Bvt5qUWVsmzz8oZCBgicVLZPMZaoirk5O7bGsdfxr-hOB7pkqRLx10ZdHq_UArkZ3wShilk1hiAcDNFsxTIubau2Kr-DOp_72VfvItaB6UmBnTN59dsajAeDu1O8iIqbeIDRgIQrXY8kY2G4q7Jurpdvwr9uBFsCHoIAct09LIZJAAQokLWaqbnQzc1AO05frVixnsi4o_tSqaCEZbF5To2v59cCJ2w72vw6gpA70o_LoCX6kkupOuL1h_MML70hmd56ThkYzeJbGuyXD7_RK24oX06YbfCz2u6ed8uA0tmORldU3BKbQJ57uukTherQh3sXYvfF_ptqetF3J3Bo0a1ej-XVognvD4P226lz3LaJHAxKTDIj-g2MQEufl5uv01thTL--78pAdRAoyclUE0zafQnzo1n_L4VIqiERgncmafpe4Qio17F-ZPn5GsgopY6eLN0myKtjMSeJdaEeMR2FDVdQRAFTNWOVpL864v1UnP048fhzvG9iIU-F4VIt_yx1r3T24K_uNkYD4tkLhDzV8vjusNt-INCKAHYqCglfSQBHVo1g5VEjm0IWRA9E2b85_o-Ghuopm6HrN_YxlfCHzoFOwYnyfeELqD9J9szcuzygWDAtvnmOf5HPs0P2PXyFA3qvcK8z7FcKhYAuwDbLg-cNHzHJE9t7UCVbZgvz_703DvanhjWbgDn2aEitHvIEd46B87L21k1QH2JJqahT56xv6KmNsbM2YMcMVQjgw2fuVV6kyDuaTNqb0wEK8fZTXJAJau0fQOECo_UwWUMwXrZ6dHNX2gollYFoW_Lsdue9xIbpOKqLNpb1Vl81XVrgsO3LBRpb2ZbLYcbohoneGzKTcfJXpEAUg1HTT-dhR5k-xo6B3T2HNCkbC7c68GpviE51j3zV7pyraWgX6bh78BTAjg_lTLeqUPod9RfkCgBK4FBAE5P3a7_DRBOBkQp9Y2HG9klguxoCzvfwe7QiXpUvQxcCiiU_e-VcZyIx7ysbTojIgnKYJuqOPpN2cf_Ud3ZdHdFnOT8lcPVhNySYE4d5x5jvxlWYo8uxlBtbaXAqjjAnTjPTHSbeLPaRmFnlcrvHonoehUZqBbTaCQpMwEOg59fnHvrjtNdeTM32n3ROooLoA_qmQR1bdPeCX08-QHnhzlk3a1QraBJnNGdor_OGt18c_q74OJt8VaEITPuLbhx2FsjZbCtP3PgqqVVzzVtUeUFkVPKOGhFkvmmbWE_L88SpuazfK6Xq1l2drXoz0D8FtXtC-C_0RZfW_w5aoZIIIKOYbJnXaFmmEFQV44PKZY_wMB1laNlqEkLJupzIQotng9BnxQHbkgwknsS1jtL1I8yTtTKfOczoIUVBBaVWQXhqHmqd2E6GHvElGdmJMj7ZipLNFrWWfzLW8Hc4TcliOGf_n-h4A_PUI-jRnHDil2w7xkvefsp7UkqVtSOPLE85X7MJ797_lGsX7LcMwI7jQIwPqpOMTeFTZEZ0m5ZvSpnze9Vftm1kzh17RnynUiCyQsPhgQ2pavwA7JMvcqQQStFvXuFua_amnjHsuAmm5iJM78X1IaKOLbP-1wKxYt9r_vJjhAS0rKkaudlNvzII7cBZ6_QCZpsqSzi5tansu6PDnrKXx7rb-YnbZIQuysPWUVEYLiuxwNj6UfjYDUCzvjXnBV60C5vTWqciMTv0zjodsIFBcz1Nd979nBa1_JavXsRBsDKG3lnygghq1zQvUXevPhsnnK9S7vP7V4n4XeDCmhdCxcMXfQUsO8zqCx55lILQjfuicx6i5q5UR5QE54NX3nfLvvjE-CJ5CSK3BVymqiVXBkOVRwFZbbJh2FSoVwo2uNVSy3aECUcPc4CoCwCAzyoHNTrwSvIBLBlN2M5RpBZ0orHhXqfy1kvGkss9CKbYOMvhcSvPinnbl3PpM_y6Yfq71OqP_KqpJSVyXjDD6S6SiSJKeFVzYM9uIXngOsxh6IndTjG9Z5wNKgUHdMiKFZ7xrSrGU28k-Ny5a0IzGSogxTlKkH8A4F9ErFaIEUZyi7HmL3oxo-nkiim2aKhen3G8rhYRAf9-JnI-O4FEHBTAmTKl1sLk3Y0-dUlFDyMGIrHgpzntXVUH89qnad_J7NB4_y6YOt2wpsJNiqdWMNWdm7EYqyHErIDnhl-DsKeT1TMcNAdfk-ckBnhajSWT1t_7q-tbEX2Jz3S7GULAxi2shwqQtYkGNki3L7TmlBAWiLIPlMXLcbjQGcjygplXBdUEwjIfSIDsyBgu6EAhGCvKi9C_FuwJ2bPcUduOzoGB7gor98LKHSxn0aV_gGfSOzMm_Fpaf3SpvxiLDBCFLxrzlHBawp9wHDyd2cqtq8zYjB6Xal9aYZGb89LdNyFm0QKUg3Sj9KbfFm84uEqcrIUqqkUegFSS7iQnulqN2jgSSd97zj7wJSTofO8nB6F_VQpWaDFKq_J2gyfNcJTn6kqUrmRPK16BlYp7xvk0nd4d23gr-Tty2s8yWYm6i3viW6mAJPCpKSFgUbyYVJ_qidjT3JCEIGrl19ZGW5kqtzgeIsRnDuxc6s47GU73UI96j0TLokH5_JOed5rZ8C323jqk0CJX6TCnbvy7GK8wgJh7W2ZVfk7qPIWWgLMD0hLkdJztNOuTSGn6mMbakEvf9ponlV2YItjOQG7QWFTa2L21vuP5mP2uadiczRQIVw_c2JuhetubPd0wCOrDK24lA_X60J9B7iKwEJ-68CxGSqc5zBe9zLV6lbRwZUSePwzMVi8btLz5Y-_Y0R5fPRoF8KyT21OMamxS1JVAPrKKvRcrKq70lUDHf1L_ga3oi4An7q9U-1Y_BtgIx3CO_X37FIyCBSEBNM5llzf0Bbf3TJmZGI6gt1cT2kM5cdHp0HFVugkNj1N6TuTrioqlqOfzzxxLPYU9hihW9qeFGUvZBDJWJO-UwM3ORzOgmTBYv04zr59662BuL_DpBosgqM_q-Y1wCp-8-KUmHpwvlVPz8mIUER_Mz1jUv4VDQERqSPYcHfdKmPrONUY6WrPnUMNIvqDNR5swcKV9Zodn2DZlEOfvYt1Za3MBsb_jAk0nWa7EyutN_sxLHp0ixXyXTFhkFjoj41NfC2iFmmNXbDV6LJAWgBiGbKHT6lYoMv-ja9GQbahLhK_jrTIIF-q4W3janC8aV-o9pOQfcaEIdBIjqut1B-b1Oc0f1C8U6S7BmuQj8JMd_lfmCSr3p6hYy5GLqpq1veumsH-52XWadE9SFBl8eNhs6XHB_Pe_1cEtFM1RlIZjW8awqCEVf0drZDxJhp0FWl47Vbn04jwwq5gt1VACK3bUSOrcsO93k3vqOevidr-DJJm1vDzOKYDeXiPf8uMV8gfEAsevAW1mkq8b0y8b9J8yEjds0CHUKvnGdh9ubUm3Kbc81Oz0Xjcg6XcpY9OmSQ0ZChWfGUUrcOh6R-leXtegMn0vV-jys4hp6JlMij2RQzE95ZkGlRQrET02dMLhLhIArl1I2tB5yqWT9MD-GwEfH-WLkgSe4ZDmCJO7xLUJGuy8gqYSULbfZPtybx3Pc6R_4rBZYqnvcKQp-G9lxFPEDnBb1BsefzYjtlsqBLdN-RHjsKbrKOiaiR9GNVxvTF01QB1sNl5JKt-bkN2WVp12SA8zSwkH7qbckMGus4em7eV_1kHG7tkxBhRLsos1lBsr6jq2Jq3YKj1bvInvyUAg_eaXYzmXA_gjAjPb9NMTShUecPEM0PpOWu1Gf4oTPuNinixESdRxTRMq2N2xtA6xzziQa8Tf3SJtu3Ru1jBoIlh0RLMlXdq04Dlr7n815zCW7655wFBOpjWNKRdf9pG9ifM9v5_bhJybgx2BaHOXBwfH_NHGWbwO7w5jt8LAcdNsBiOPlQk9OpOA-GJZbIbP3MmIGpAtYmg1kZjlHpel5MlTLjErAcPxYurKGivf_4quNjLy5VmlpEz6xh6PtVz3EiaEM00wRuWXqUaIIKqiOKcIEWoB_lNBhejzigqheO92CRKcfwpbPR07LU1DNnmD5V0Lmov-TGrQ7my519B266v_lDAjbIIDYsJ-AClQqDZYPGwUOwAm-LzUIJB39nVCU2kWUgo4rofRKK5bPezeil0asrvRIVNuEiUOzjo0a_9-20LVBrQnfz7i4qKbpWoDHhpVqjc5Js8OyihIm32MaHTNiUKe0IaYs6AZnyiC7Abev-QvL1_tZjQr5fMxInjXnvlPsMwqKs8d28fp5V5dB20qxPwPqzpzFunZ_77V3zZ1exz1z-jnKZMT6U-6OH80u8QgYboAfgHguzburaLcZ4EmRMb9ikKvXx_KrJndjrgZc_D29sYm0YGbkFrenEJD7LiCvtpz4s-RXPHpMy2JrCxhpic91dbVaZt6HB0gtGH4hhdkz8rxBuMnyNsmW5KYNp3KWLu2JqEfiDtI3uFFuIIa0UncrmZrBQgjoXpchOqSDEi7mSfmXMU4ZxdD24M6-qJvIqfXuVluET8I2RRutAMBafjzSdsf1ycoj95bTckjT-bndsfv1IprqPKlAV2x6ln1gcSToofixyI8v2vIuPhVa-9dStleGmWbCmzMUZnl89btzmzzhczIBETMpxPHoE4_L4jSe-S2UyIejkvQHhvEIqWEXp5bIrxQ6HyqEvVpy8uC_Ex27pciq8bUznvUeNz0tGKqz8g53xouGQLg9WHM1HsK6tRnhrZhSWO3u8Oa7OugIMWjA3dqGcnXKHsRMSHXAAYly6N8gGt07he25lJJI9AGyFj6uNAczxWtL6ZKpMKCt8iugvIgf6v8MpEd35SZmmOfJnltI4mKFzYhSXa4ISeKayNRyTDVYFs7pxoBv6KXeipJRp-q14P7rr7IRwVFdoTIjwAdb5unKYRVuYQdRg6aa7CjhW3LAXfCqcMj0oY8uKXV0gksIIfjgWwP76vasI25FOrNnz-0PTSDp4pFHkCKYe5hBZsTzX-xasulHohzYpVw_W-RiwIIMb_ZTB1EA4xZa12la00GnFeAfVUtpaa7Ds6NYUuQKUGF-1UfLmbPOdVs6btqgXN3fajm3s5DlLVOvjbhbp6yXvbcMDg3qSm0m2VmDKEuZbhP90E3IUe1AyjPptIHlhDM7QdY7AENPL1XBqLYK6ZBFEMS52-eYGS8tKKOu8LvEvJjpJgNBkuD4noUYy5cxVgkv-LEzbb5KREnAZN7rTEo_-Ck4n3pyCd4q2Zz9qTPSKSjEh_gGDJaBGcD0897ramTM_JYoXD-9Gf6QQ6Nnn7bdjdJZNsjepT-_qlgKxafsTkpz0SiytCtMV8XAuLI1DW7z2l8VNE4AVZgwvTF_E61srIW3aTIhxplTPl2bJC4BGMg0Mp8JygavSf-hPmus_a-a6ztRT9Ite4jYx2oSeO6a4L7-F6lNefWvU49Heml96Qdx1ueSNs_RVKo8L5Xm3jeCwgDoYge7IGCf8pbufQaIP1M62k47eC_PFsZ2xW1r6qwE3w7MooLTk9GHucxvSgCewudr7HWMVNqbJpCujhU1zYYXzZQWpXJZjkYr7UfeTQs_ihvAlhnNMuxdPWgRNdjjIKwQ79qqUwMBK8-0_rBbvcW4NVwvo2F6m7JqhEmPXS96ekmFjwqP8U0EWtUlTU0nHholQd2kBWx-aXXU4O9gA_bdfQ-G5_IU2K8adkdyrppe_ilOT7jex5djobYghId0Uw8Iu9EW-IoGFUfaGPPTjs85hNOPuFtBeHoxc608HInVBuMm1j4IvbkCj-1iUdTMwFFldPusHUzjrhEn9HklDHDXRYo89c6CNb5P60VvxSTftPJ5kP7XdtIzt-qdoTwGunalLdpV1G_W9X6SDim9uAHLvjeWLTDtisXKkrFFm2q8ShVjtnIRDIQBKdHA77pVOlmrTDgN2kIxTe6RBlFCBQ1zdiNGk1wFeCHngAMXNnxlWCajZT5mHAwDZB2PmcLAblxpz-is2k6LtiE_N7BMeLhjkAckt30OQXlWcb3QjhP1Ep3JLA0huc6t3LVzDPR_-lB8-sTkJQ9q6LYvfmjWrtmef7vWEC9G_08oyt8L-3e-gVkOCzKaO9SYqBi_Ij5TINPjsZ6_KiZfsu0Xts69nP4ctzHQ6svI3_HFQdn8-BOrJDTgGLa8TZpc319hDQxcXlJkGYjIJJd_lt7mM6SsnzXrs84Mmd9PDRe18sXbRZNXN7188e4zHCAZP3l1Zn3KCKLMv5ErD9sOSkkhk38CM4si3L0X6qqyZmNuIs5C-ynYNg6MXF7t6jTePHcBo7YO4kHfCbUWDxEUqsnMWQ4-zznk3wLjOoKYpp09G3ToHwvpWvF4biBrWQG1peKaCMCYOHY6W_pJpopoRykMkqR9T64mMpmefHsAEZaGS_VjZ0c1HlVSv2MJXsm3zLQVYNySuA-sTX79wa1Z2wIPc1_g87q4-xED2wDazbm0vMHFd9f8ThGJY6VGQmOO4GOkbuNg7ukLXj7oTh78H4ZyW-1DLvtdPaRIuuCZTG9EbpRMNZ7SfiqngI5Tjw0kbeEen3SRJh30smc_jOKanri_8-nLRXjV02v_mzFP4eO9ryYtPinUtAsT3kPj6M5bxXMt4J0zYLg030kJCxmMjKOone2InM3xFH9AqHyf9ZOAzmz_ccFHOwtnbkM8MzlAQ1_H5Nm4KSaYpbwhSCezWkkne0t9GUAYNmNnikk_ujzHoyeT3l6rBqx22bIcPtGdGZ5-OlvXXMPxpEhr-Lpb-90hd40LECAU7UDcgrZbfrnLgSK4anCN7tX1OUg1von99xXJ_YUs64aM9H0mo5waeHxtyFkLkuBBIGp-EVxK1iwSTCJyURzM1cPgZ77oIRLOprwDF0HHJlp9nGsmkqehNIlPe1BBlwErguE8HkEHEIIArrRzSMqIvWIVy3ci9vNlRIU6N1Mmi51kFLyfcwXEuGhqcRJ2dTmSqDaNtDkGmoFOinUDTvY6_46bFo3jeZBymz5YSnuiaYB2MtA3Y6dL-qoD6vZm5GIHDlYk9es4TkATJnGu9eCkDkLHFAxqwn-oV7R4c4E6Je35AmvEObG0Fa1QF60RxvdUvUzUtwQy6Wi9BXtojvw-UINg3TNl0GPQpyp6JaFXRrB2spnVUZ5mWMxGz4VsD_kooqbGO_Cc2EXUFS_z4DAybfetB6ZnI_ZpZO_R4sk5FpBNIxQRbYZ3zfpcswFtLWZK1YIi64vYKyp0eSbN16iLVsA9_SueicgugQvT2I4xZCep11NZGjthnPhnsngP6rkEp_D5P0pQvmlr20gNl0CDy3AUua4cdlCxG1VHTHk8VF3rH2Lds-AhauCF4qyjQqYk9NN7KweA2dyJOemaH4gRG30rySNmB7eRfUyGuqbLa-6V9EoqFRIZc1uDcXn5LiuOImfoFxdhGadCl09ybQhUDB8FdG_G9lPAuG9m0B77akrOUysMC84s6pX04GXEmODHAzHz2iiJyJSHs8McgXjwGHCjhPU1hBzgY1IsCESw2tV2yDhw3br6yCJHyd81-SwupHlwDQ2HMsxo_TjRd7SL6JbLjuC34l_w6SWXHrBeyT417Nw-1vpJrQr83W8JVuVZB54zVvTSHC59UOMZQz3lmUFRvRkmBdbX2qBImwqjtFU9gNHh1bGvDN2q4tbG75WnvfDojPniO_yXbFZX9TF59j3p-wLB5bwzr5nxqfn9UGezuZEwVI4w55YZhp42bvIdyQAssxIgf7HkNa1SI8SrcPvUYOKzap0UA3_ntXZT2fLyZuNSCyhIK7VWVx__zJnJDw2cmBQ5nWWE6zyB5hhfBud8Itwc37ltCJtxZUKXeGE4u1LSRgQPd2Y7z8M_X1rBLaIH0kXVqgyCfhlvIWGskIsx9xuQ28qdK93Kxrg99dB_r7OUvFa3lK584ZizjwYGQoYUFwwy_PIhTvzIlSZlwvUFPvucvtEF1ncBPEVJfFp2q7EFij9AW_qkzx8BQnn-85biqIkWvfW2H02RCKa-TWxKqPhNtDziwNlrH22H7AdwXjwIJL8aJPiBxUhwOyv6JP6sI7IUCm0kvXbIYoGh8lwyzoCU3qgsrLZFsE08ubr23_C5Qf_RbQcQS8fnoEMUUkcVqi8K0a1BmXquW08Oom3L-zaCYAgXWpC7qUXFrJifZiX7lG1vZOKZeFFnZezVP1p9IX4az2ysoM0TB7tO6wkrttKoflEHAlvB0iFYe9mtcRKSBGwUNNPk9PA_AimL4X3YVBQduYyaqxYMyMPjXeVuuwGMDoVHiEDfbx1XQsUG22Nk-bmClp6oROV9oDkxyBOsCflmIH3saHjfxPthtX7gZVXoqTyzVnHNjdQpO4TqQkVYEDtT8fqqaksVEXrn5ayePdLjTiBfj3w2TW_zDstQxcR8PsOxKRZTzoficUzde3PLM3SDBmfryG1YzanUH2-F9JOi-zpnFVGhSwzcK7lp9nPNqA0itiX-GHO-M26WWTCFDTgL-X_H6VBNBZ3o2Km3htuU25HeDCW4cDwQvr8MK4xDNPWX0g89-PWpkPTAhpetWBBFry_ePDXoapmKpb2GMuYcyTPJEG8LW7VcxIFGlP2vMSpEKUo8HBNfnSVKqxqRJmKQwxdbJUwzwFg8SBP3DvowQpoiggcV2XStADiKOfUjY3w4PFqycoh0jpLCeeiRQ7wmZrc-y3dOOsnJfHo1jHkZDydhyXK4KVuooNiC6duiu_oqGNHRZxBDoAt__PlB8SnLzB1zTkoRcnQyMZhNgi-0lbMsKj3FbxXBfCUYbU3cCSptLymifSPYV2TR4LxyW65Ev74o4uFiq0fFxpzpSZYbarA_1dT6cgbI7LzZvRHhTZVNC8FDOqcWyPW2o8vWFLXuVTmg8JPdCNBZezv7i3wEeYvdHjC9umw6Arz8_RHjJVvVpeBhLRocaTIjBC7qmB1istCFs_N8jBV561ueg7kvegh_TInWmRU6iimf3VegHQ1JFEVrNXHe76tsfmQ5NU3n8cy1plMLMvAxjmzbAnRGEg6rV8EInFjugc2kY4B4b6MVG7-iUMwXok6eoWJoAjZ7cl6tYSvgYl4QddEt_jY9v17c_DbsJYhuh4Fs0lwDRqgXlCx94hos9Jx8eIiHG9FPLl3XVyliIlyBi9FKYctHLVL6e7rc_TFpfgVYSSZwsN1oh17rVDSpxhtWdVzOyunN-MCEmeI9fc3fWOv5ApBS8LbPP5LnZPsfmcJykCC7c0d0Fo8ajilED7e9S3VZCZeVRiByf6PK07Oq34S6K5oR09tU4Yx6Ce11qW3-DYAxk6RzbZqcd3vi854JE2n85ROgsmuBG08zlDgpoZlZ43PZpX8FpaGTp78KCjKXa4vMaLB15DrmpZvmViSXb5NxSP5QqSCBQBksVGJ0E8KGYJMzHkbzC_1ZZkEtHHo5h1P-ez0V0TD04VtbG5G_WdPCzaatGWj3SGnw_SnV2AWue0lhlCmMYRElA6zn8koAS6KB3Ooks4suNvfEpXdVNQqXJ44BPXIvbk5OpLGzGKUDb3wBNV9WWRVY_1LApkg06sBeVrb0pVjBD5zSeEIE_BpipPYyEonVH1bHPLMrSm6homD-ryDdxk4633yyCsBYUdI2Xu5bd4qzv3_N01UJWy5Eg7UtLW1o2bn3mQifWD5MTBVcPuyDMLjws6vFDmop2vEun53Ifr5HwNlflFx1qAty0COSoixfclpPv821v9SGmsEHIf680Cp7FIAD-6icUx2qr6vRTTjQ96GcAFRI0yFwKFM2N5CUQmDdqFQo8uKc1imUmmAxtPTxNLFuA2c5H2t4Wg6dT5HpI6Xf9AYn9lnhTc4SYWPw1xYuAKidG6GtjmhIibOeau97UTbtWIem65RNxQLD4jSq0TSGc7xgGuVC5AUhftRJpPI2_5tGRwdGvuIK42BibXwQESzZNlJKE5IwJSh9AsURGMEOCAjGOijbWSD6R-tEVDbKCxgKySVw54kg3JFKJYry75Lklcvr2Q0-e2eM_zfhCyvZBKIRh4VTlywf3YkH-frgEzqK_8P_YMmHHzmCClFiGb8gYlM5GZ04cZnxBuzd8vnZk4sUo4NO5_zanSKjbZE0IZ4puCtY3KoKanM8-x_jn1hKoOYmnhOWIz7SWOaJ2a7fJYJ-mylnpb6pzL4G5LMGnoz2BTg3-yRaK-GaC1n20pQvBEydqle8lRnqv_BPjuU0C-2XxBrqIZxAGLnc8T6l33HNCwBXLz8EhajihwxF-U3yH5ZZV0VMiU6QqQQiYGNJBI2t9jiPBPf-pe6EuJt4w6Z-PrAYQJieIPO2M58qJqsjeQQbQw_wGD6Gfgw2Lrq2IWowXrvDROLfaC78rYRrDUQmRgGZIWOJjeB_KSRFmcUIUxgrSRnpVFFt7mh1ENkufCrf5OEcjE0o4FHtbsBXRsWEInz7ww52VgRFETMKyFvrNElzP2xZGlOBqdHlKhUBVa0yLIgk2WKoxNhvS7iOj_2DFwHt4qp7bXYseIYcLk8ngoqreCgKeTfvExv-rW_HcNS9dvTZ8a7HAjDS_HcZTfjR_hYypHB99Leo2jbTxtWmsboq6Pg6UhP32ei0BU2fja3SJHs592stt9HwNW1dxXrVR2FDq_-VHvYA651z4MYsnxt1x-4iRs0c9CT_MXmNu4b0ZFSbfilQ4ElTtKwyEABLhJggz4GvlK2svKpgN5k81nm0SoybDZrmfIS40jtCNV2bfRDPrW0Y3Yboxka0I6a-fQ_PXr5vEKQhgnsZisP1RrWCP5W72s0UO1cK0vJRv7WXCF1fmvnr9Rp2gFsL3UKCEI2Uw6Dj3S5zyCj5GAIjUFCQNZIYi5wom0ZaBZYrA2yuCpa4nAwebGG5S3NEG5STgEiJYf3ZoLDqKF6PUVl6ohBm0ByyyMd34lfTsBBCjqv1-NPZ8rT8RI047EwcKdWZZxaM0MfAl4jv-SeSygRm-REm3asLd2NdcNYvX1ZPPP02l9LL8cjFf1_Arv0o0ii5B7Q5c_9iMa6bwrKwpVE9rjYyLGVqDwueo7piuoUSMRA_4x2Rb-HG60V_8pldsH_6nGNPXYrGARqsDfEs02rrD4nCpOe1sk9TILBitYrBdpP7Y0EaLoYdIxQ52eTXWqpiwatJ_vw6X00NV6qKEeXkI0Dg-8OF2aQAm-T4PNfTmv_eu9PchdGV2IgPLQcO4q81iodrONwHCfVsjg0dsdrcB1mVhiTOd4C05htneI43wf1cxr71F-baP116_G9kYB5Jbkf7MoNCnA-SrFKtA64Du9BNnJOzuH6PcmaaSnI4DlJn3wzKn2H2Rkz8pOtmQtGAPYG-WA935Mx0iN_knmHqwxfCe8KY6RxpEvcghcTy2-mFmO6CHewbML6IJpWD87UqKfY2rL8_R1vUsLDwuL1zfn4uZNis8sXdPrhkkGLQShPU5d5ePsDZhz18a9Z6tb1XW5P0g3HTqt5w2d_s9Yfv2rliDO6U01haRCqbkBAIBq9rjia9C19CQ5kVSCs7Zj9tcnghkBWT4tFNU9lo_YA2D91UhEU-YQyfGnvzo9TNGZNUqjGkiAMa52OS9Uv7fOUp8gBdXdgm9p4II3Fk8X_dSFGsKwg5Fe539wTKo7WuKjjIVDx7y2Lk4WVN4ycLUKD6zn8LBQeixCGpbS76k22iYiPCHhxanOvZX5jsC9UcbYQZuADiX62MPI4bYlMNtIndmFK1HgLtK0_LoPPI7HI4YCpGaD_ETvP5YE-kXlcZfeL6jm3r-UI83EFZMVH8wu6aOOhDAN2bK3oQKHOu-yr1jW_6y0WK7LQuBp8xgFnfEv2SL811NrBG63ebnbYd1F9E6e0LLT-hXtyo24cp3hSPrGa4dTIJ9yZdEE8_Qx6J1Oidx2Xeaderz6vUYRQG7BACAzDnA_Si3u8CKQrfs1CpXJ5NqQ8RSosq61pL91aQjXKBr9TVR89TVWCRkPYb0jzQMizy3HHbBkpuRSCFpHLrH17qeFaTJ02Cp9VX1_zHXuK-Ugp6U8vn8_3626gy9Y2FQNXbjEnTWnmeoH0rtQ8SvycseW-IVn5N6FPKQe0oWcDyZ0p_8Z8LNmMVbSmNjGDNiO-VksVgmOxqd9T1CM3nGclCs286zMen3IwD7I_FAw-lYd8xb-LpKUrUDKalKaORk2qhn-VZs9wql2EXBVmkqu67vE188s_j3bw-HSwlzh4StW3Q6rbqaX8ABgKSTzqMJGLjTCQVzV21m-GFOhuW_0YimQYx8cDHLcO_kHHAvntvLTtMDjoPUK50PAnlOS8Mr2tOS4vl-DGbR-1x6QccjNtkuNBL9YpOo7u6YDIulC16TSOCEtai7JbRSiYOXF0XZ_DZVVmwFz47tljILsq8pftetLtlP26D7iqjsUCfkeVq_QNc1RrVVqM_WPGwmXf5ENaFOAvn4IID-T7JasIuK_tHOOQuwRkRF8kKTSvbih3YhaNlKITYuVZKbwe5lEgxaL6O5wzopWuKgtWN3k0UYka-TQTmrzalM4ZrvJGEWhEqMkKfTBjMZBvxoavpfGyXvW0HpPk2oB4sMVt24zPansyka78QAlqdz19SiPPnxtOMp7xsfwEEhWnGw4LykJGBIVuMGPWENNFeY5S9xt1RCfFAzVM4s8J2w7uxDTQvYkPJtKrk3Vyi51E6eoJELd2h_Q4dP1gUz4votz--N_8lthVzvY8uREkKNoRgnRjXv8Fsjd4Yq7TxYtLi9IzRMB9ebg54G9-E0jtHikGXjEM9Dm1KPodlc9OvpDtC7LS5vIuApE1sVo-EZnbm4TGbZxhQo7OzK8yNsUO1qwIwO8Qovfg-hLUsh0ddQubSASq3aFOmyHu_8P-SNJcUgCA_zmA4tmfpgqBinekyK3NAoNaynCpqYIqBtVKjJXCwsvDhI51vPG9qLpA6FAYhHGE-bqlUXuaoooYOwA4b9pcT0UsMfngKjYYvmRHu7kdlVp3KQUJ1BTUlAMCagg_kssVQVL1rvN8DRX0guSH0FZgNpUhj4zAJzU-gLXvZkZgpVCq5eAdrrfGT7e5IVu0xBNSHo8BFm4W0XSPfmJ-WLl1LPLFljrIeDLBSMuqoisTyfv0s4JFFUPztl9faxfujBAl8ngl2C3odS3C6M1Zoqo1Cxp4mER43t9DxG-8ttP5lYnMU1gkWVcHXVXzD1kwmH--DHJpfHqskps7DD8rMeTR_yvwPKw9kXdok8LLyAdRo6-_RL-QvGC0348Qu3fV3dUTZfojfHqJ2kNmTTQAi3lk7lQqUAu5I_i3aVC9HD4HqoOrqSYte10-TWEG5LvyEJZVlWh0abNoQchYqcmCqNePtTRopK8h2oP8BgsJ4thtZiDaZmtLudHbr5pNZcqf2CHnfn9pcVeGg436lrigiR3GEDYGs_r5vh_pekU_QWlfOSpWSZecOxYyUgBnO_4QcDPv88RZmfOiyvy-91gX71PJmzvY7JPkfuHiUTTuTWKoXhzlsqcLupKAkqdRl5sixFPoYnSJKHnR6Pa-JFdMUaobLDlaJFbyZFHpWFOkg2UhwsaXZPBVRInTtxVH_tH5YqFrN4aeKQJ-2PiTccxYxAKQf_MbMzlV-u7zGtrPczK1nbcxTWwslWlWYcb7N8fb7bGxbs5SNCTw7b1LYtnepUOS_FLHQmco2wpeBrP3ghCX45yqji07wlVUOaTWuQkpr-m7id5qtk4Yg4JwUME4kc-Z3_EaZI6gAtOeFJ2nxQec6WMLWMwdwZqxYcDW3XiGZ2T79pVdMUcV4wHhNyDIlHzBYgGu85y_taSBzai_aPn60t-xxlFHOBZkMpkUCVOeVcv87Nk8SKEGS7Nc_8Gzk826cMnSk4z3erM8u92UgVzYlKUrRGgxI3xt3aKcH6YftkHbNLTFfi-e8ZqLmywioKqRI8RBI2VnqZ2k8i-wLtmdvvYj1VhHV7NrlexaMLzkMaLt8iqEgUpkbItlMGUyHkssY0BAv56SFeGDBdUCUaodhRKLkVSGJKRFIbwJg7lXo3TRSvTsEFq6P49_oxVbQL2aWqwPytYLUePuG9sMKuoQJ7BX3wG07kdyKkzLSQGKqxmf0oiY9vXK_aN6-DiFUOJYTYH6glZ-3tYUXKWL5OU0WiIKksUQUH6Zqm5bCNbPT36vtfO6uepLOu43yTT0TpMzCP-z3gOPHBB9YicVblI0uCLjrOmQ-9hLh1jLLiMS3oAXpDY3uLKHB0BladCraTWp1GBrJEpNvK72roCuyVDSB0hAC-0XWtUCBSz2UgCAQBsegFFyB7Pc0ZLJjFwIOFu1DRMhu-K-l2TY2BS8th-wAOqpp7KU3vgIY4I4LbaC8PfqsHoZF9zIS_55NzcXjNOrPTpZBRaHEcNLcumlcV1XdZZMumz2mv33Zb_voY7i8FQ0rtlVRVVsg-RVYJy6fyCd-whxJdHonZlSyhfWyQteLWbLXmsuxfQatVbMjWF5XayUqkTrxGWnbgBMBuySMy8AYqxVFd_u9ESsQgFi6_25F-Vd0_VZ9bUlsDN4IQ9bpDpNvs-oe25U1oKwk9WpWqiT3ujU3HwFmZvhMYClXXnPkcOtRfKICj0pnLWP59QXTqx2SUbOB_CH9OGkZrT7O93bjxCbwz7W03luUnB1Gc5lPezFIptxHqQ2NMCvlYmH2rGkeihVw_GNTuUCkkb3W5c99S155Qe9mJjG2WaXp6EJc7Jyii7NZ6lk623IlGxlSexR7xOgtTHmftT2089Tuc4KCoVcIyAsTF2K3txxdlDFd4mlQUortH_wSRqPL1AOaxhgjIesKTXdqbEzfyuIV35cPjIWwrM_vMzlzG_y9kcLpTbgieSvy80e3K3EO7fh3PhPJFsA8jziMvs5MmnqvTpWwNj3OfL1Pi17wMXE_WtgQ7I--t98_8yeztNEu8OvuUAu_qkLAXj4aSEUCQG95FZWNr3iQJY_K4APb8cfk0AYyK5_6pTovfcobFCFTNyTpyKYLnT7lOO2K0Xw_6C6M7h9YMCXLdsRDLH1qoU7P7wTRED-EH82hY2tjPeTQZ0WzonwU5Dsz_897ZXEEM-ZxjhXMwmQWDIqdOlLK9GgLq6PBzuPln0YjwKpcmjXFyn71KYU_9RSOtVr1gJRreoTC-zUiAabmbpKUs5c-9x8BPB-r50jayehCr78PSkwvWxs27IJAUAdhKxbg5pE4SQb5SGvcqJDpuPp_vuO6rsfw1hseeO4dHEdj1DH7cwvaszCiO4EH91sAUDoWF-uyqGh1-fvKeN3Hiz_fBd7IecS4F8QGr-SxH765EetUahvm3_OIJqSqaEN_g2XIlcTEvIWcYWRl6ELcOOCsqwgozgJwUH_03RnzFnDUStikGiQkCMhN1dheIvKVh_cA9CrpHc_jpGjupK7RR04UnCrp6JYehbv2m6qOv0981NIbchANBiy26Bnkvpn3oanHt1IJ4xacwMqXM6c2Ry4MWqr-rIOM_5WhJ9kAKFZr9GzZz4ivslHf4PBbvtN_EtmXhB-oqRWFGNzpFNrAwWjy0wG8puHDnFtSqqIx7DgjKL-FUNrAm2qASSOCNI9izBrjdpnbJHIrjKs73smsLMDDpUWm7N9dn8XfGFTg0T_Tyu4wZQkRmLOTJirsuEHSIEoLtlAMbo4ZgSwt8ZhP5TInBCgkAcbmSU38nAiha9DppiLdtK0QCstJ7NH4KcckG4lmaZ1-K2Dq0aY4txr8N9CM5a7EVNu_7nptDykRPMD46fd7jg_wqnfMTwut5cPPdbeGEvEfcpQzYWvPmKt_-PfxCWiLFK4q8CbqBFik4KQt5WUU9b8U7v-gcA5BBlzwyyAg_YE8u9AWJ2Pd079mSfZqPra-Gq10eXXjVsU8u75qdrONW56Z-Ma3f4V1pBVRfxCmRNCThjyjhEfIUndbRW5pbbtj0gIEe_UlerKIAR865xZcfV5YDmNPGxRC5WxjkPKR9H5KkPHZKNKAdFR_sHJFIMAwRgnUyeTh3v15f0S1dn8OZvSzMb-mImP572X_Dc0wnvUb7bLB9UfFFqk";if(!e)return null;if(js&&js.sealed===e)return js;let t=null;try{t=ec.parse(JSON.parse(Qa(e,Hx)))}catch{t=null}return js={sealed:e,bundle:t},js}function oH(){let e=Dx();if(!e?.bundle)return null;if(e.runtime===void 0){let t=Date.now();try{e.runtime=tc(e.bundle,{signedAt:t,fetchedAt:t})}catch{e.runtime=null}}return e.runtime}function sH(){let e=Dx();return e?.bundle?(e.keys??=new Set(e.bundle.filters.map(t=>rt(t.slug))),e.keys):null}function iH(e,t=!1){if(t||!e||e.length===0){let n=sH();return n?new Set(n):null}return new Set(e.map(n=>rH.test(n)?n:rt(n)))}var Hx,rH,js,Mx=k(()=>{"use strict";Df();fr();nc();Hx="tokmizer-default-rules-v1",rH=/^[0-9a-f]{16}$/,js=null});import Hy from"node:readline/promises";import{stdin as Nd,stdout as Be}from"node:process";import YC from"node:os";import{join as XC}from"node:path";var De={welcome:"Link your Tokmizer account.",needToken:"Tokmizer already works on this device. Linking attaches it to your account.",getToken:"Sign in at tokmizer.com, then grab your key from your dashboard.",askToken:"Paste your dashboard key, then press Enter:",activating:"Linking...",activated:e=>"Linked.",failed:e=>`Activation failed: ${e}`,suspended:e=>`Your token is suspended. ${e}`,revoked:"Your token has been revoked. Contact support at tokmizer.com/contact",rotated:"Token rotated. Paste your new token from tokmizer.com/dashboard/token",offline:"Network required. Tokmizer needs an internet connection.",deviceCap:"Device limit reached. Manage devices at tokmizer.com/dashboard/devices"};function cc(e,t,n=null){return e===null?t!==null?` \u26A0 engine offline \u2014 compression continues on ${t} cached rules (details: tkr doctor)
|
|
119
|
+
TOKMIZER_SHIM=${La} exec ${e.map(gN).join(" ")} rtk-compat "$@"
|
|
120
|
+
`}var wx,pN,Pf=k(()=>{"use strict";wx=i0(yx(),1);ao();pN=["rtk was replaced by Tokmizer. This rtk command forwards to it:"," rtk gain [...] -> tkr gain [...]"," rtk recall|restore <hash> -> tkr restore <hash>"," rtk bypass|proxy <cmd> -> runs <cmd> unchanged","Run your other commands directly: Tokmizer compresses them on its own.",""].join(`
|
|
121
|
+
`)});var $x={};L($x,{applyPlan:()=>CN,buildPlan:()=>xN,migrationApplied:()=>AN,migrationsDir:()=>fo,pendingWork:()=>Df,planHasWork:()=>TN,renderPlan:()=>RN,rtkDetected:()=>Sx,rtkMigrationHint:()=>Ya,undoMigration:()=>ON});import{createHash as kN}from"node:crypto";import{existsSync as Us,readFileSync as po,readdirSync as yN}from"node:fs";import{copyFile as xx,mkdir as Wa,rename as wN,rm as vx,writeFile as Of,chmod as bN}from"node:fs/promises";import{dirname as If,join as et}from"node:path";function fo(){return et(y(),"migrate-rtk")}function _x(e){return kN("sha256").update(e).digest("hex")}function Nf(e){try{return _x(po(e))}catch{return null}}function Sx(e){let t=uf(e,[G()]),n=[...new Set([...Ls(e).map(r=>r.dir),za(e)])].filter(r=>Us(r));return{binary:t&&!t.compatShim?t:null,dirs:n}}async function xN(e,t={}){let{binary:n,dirs:r}=Sx(e),o=[];for(let l of hb(e)){let u=await gb(e,l);u&&o.push(u)}let s=await yb(e),i=fb(e,s.historyPath),a=Us(i)?(()=>{let l=Sb(i);return"error"in l?{file:i,error:l.error}:{file:i,totals:l.totals}})():null,c=await Q().catch(()=>({telemetryOptIn:!1}));return{binary:n,dirs:r,filters:o,config:s,history:a,hooks:Za(e),telemetryOn:c.telemetryOptIn===!0,shim:t.shim?{file:Rf(G()),content:Cf(t.shim.tkr)}:null}}function vN(e){let t=[],n=[];for(let r of e.filters){if(!r.text)continue;let o=et(Xe(),r.source.target);t.push({path:o,content:r.text,done:`Imported ${qa(r.imported.length,"filter")} into ${o}`}),r.trustedByRtk&&r.source.scope==="global"&&n.push(r.source.target)}if(e.config.excludeText){let r=et(Xe(),"rtk-excluded.toml");t.push({path:r,content:e.config.excludeText,done:`Imported exclude_commands into ${r}`}),n.push("rtk-excluded.toml")}if(e.config.restoreDisabled||e.config.retentionDays){let r={};try{r=JSON.parse(po(ft(),"utf8"))}catch{}let o=e.config.restoreDisabled?{...r,disabled:!0}:{...r,maxAgeDays:e.config.retentionDays};t.push({path:ft(),content:`${JSON.stringify(o,null,2)}
|
|
122
|
+
`,done:e.config.restoreDisabled?"tkr restore disabled, as rtk recall was":`tkr restore keeps outputs ${e.config.retentionDays} days`})}e.history?.totals&&t.push({path:Ba(),content:SN(e.history.totals),done:"Imported rtk savings history (shown separately in tkr gain)"});for(let r of e.hooks)if(r.tkrInstalled)for(let o of r.edits)t.push({path:o.file,content:o.action==="delete"?null:o.content??"",done:`${r.agent}: removed ${o.what} from ${o.file}`});return e.shim&&t.push({path:e.shim.file,content:e.shim.content,mode:493,done:`Wrote ${e.shim.file}`}),{steps:t,toTrust:n}}function _N(e,t){let n=r=>JSON.stringify(Object.fromEntries(Object.entries(r).filter(([o])=>o!=="importedAt").sort()));return n(e)===n(t)}function SN(e){try{let t=po(Ba(),"utf8");if(_N(JSON.parse(t),e))return t}catch{}return`${JSON.stringify(e,null,2)}
|
|
123
|
+
`}function EN(e){if(e.content===null)return Us(e.path);try{return po(e.path,"utf8")!==e.content}catch{return!0}}function $N(){try{let e=JSON.parse(po(on(),"utf8"));return Object.fromEntries(Object.entries(e.files??{}).filter(([,t])=>typeof t=="string"))}catch{return{}}}function Df(e){let{steps:t,toTrust:n}=vN(e),r=$N(),o=new Map(t.map(i=>[i.path,i.content])),s=n.filter(i=>{let a=o.get(et(Xe(),i));return typeof a!="string"||r[i]!==_x(a)});return{steps:t.filter(EN),trust:s,telemetry:e.config.telemetryOff&&e.telemetryOn}}function TN(e){let t=Df(e);return t.steps.length>0||t.trust.length>0||t.telemetry}function AN(){return Ex().length>0}function qa(e,t){return`${e} ${t}${e===1?"":"s"}`}function RN(e){let t=[],n=e.binary?`${e.binary.path}${e.binary.version?` (${e.binary.version})`:""}`:"no rtk binary on PATH";t.push(`rtk: ${n}`);for(let o of e.dirs)t.push(` data: ${o}`);t.push("","Filters"),e.filters.length===0&&t.push(" no rtk filters.toml found");for(let o of e.filters){if(t.push(` ${o.source.path}${o.source.readByRtk?"":" (rtk does not read this folder on this system)"}`),o.fileIssue&&t.push(` not imported: ${o.fileIssue}`),o.text){let i=et(Xe(),o.source.target);t.push(` import ${qa(o.imported.length,"filter")} into ${i}: ${o.imported.join(", ")}`),t.push(o.trustedByRtk&&o.source.scope==="global"?" trusted, as it was in rtk":` left untrusted${o.source.scope==="project"?" (Tokmizer filters apply in every project)":" (rtk had not trusted it)"}: review it, then run tkr filters trust ${o.source.target}`)}for(let i of o.skipped)t.push(` not imported: ${i.name}: ${i.reason}`);for(let i of o.tests)t.push(` test ${i.pass?"PASS":"FAIL"} ${i.rule} #${i.index}${i.name?` (${i.name})`:""}`),i.pass||t.push(` expected: ${JSON.stringify(i.expected.trimEnd())}`,` got: ${JSON.stringify(i.actual.trimEnd())}`);let s=o.tests.filter(i=>!i.pass).length;o.tests.length>0&&t.push(` ${qa(o.tests.length,"test")}: ${o.tests.length-s} pass on Tokmizer, ${s} fail`),o.untested.length>0&&t.push(` without tests: ${o.untested.join(", ")}`),o.orphanTests.length>0&&t.push(` tests for unknown filters ignored: ${o.orphanTests.join(", ")}`)}t.push("","Settings");let r=e.config;if(!r.file)t.push(" no rtk config.toml found");else if(r.parseError)t.push(` ${r.file}: not imported, not valid TOML (${r.parseError})`);else{t.push(` ${r.file}`),r.excludeText&&t.push(` exclude_commands -> ${et(Xe(),"rtk-excluded.toml")} (output of ${r.excludePatterns.filter(o=>o.trim()&&o.trim()!=="^").map(o=>JSON.stringify(o)).join(", ")} left unchanged)`);for(let o of r.excludeSkipped)t.push(` exclude_commands "${o.name}" not imported: ${o.reason}`);r.restoreDisabled?t.push(` recall disabled -> tkr restore disabled (${ft()})`):r.retentionDays&&t.push(` recall retention ${r.retentionDays} days -> tkr restore keeps outputs ${r.retentionDays} days (${ft()})`),r.telemetryOff&&t.push(e.telemetryOn?" telemetry off -> tkr telemetry off":" telemetry off: Tokmizer telemetry is already off"),r.notImported.length>0&&t.push(` no Tokmizer equivalent, not imported: ${r.notImported.join(", ")}`)}if(t.push("","History"),!e.history)t.push(" no rtk history.db found");else if(e.history.error)t.push(` ${e.history.file}: skipped, ${e.history.error}`);else if(e.history.totals){t.push(` ${e.history.file}: read-only`);let o=e.history.totals;t.push(` ${o.savedTokens} tokens saved over ${qa(o.commands,"command")}${o.firstAt&&o.lastAt?`, ${o.firstAt.slice(0,10)} to ${o.lastAt.slice(0,10)}`:""} (rtk's own estimate)`),t.push(" shown on its own line in tkr gain, never added to Tokmizer's measured totals")}t.push("","Agent hooks"),e.hooks.length===0&&t.push(" no rtk hook found");for(let o of e.hooks){for(let s of o.edits)t.push(o.tkrInstalled?` ${o.agent}: remove ${s.what} from ${s.file}`:` ${o.agent}: rtk kept in ${s.file}, Tokmizer is not set up there (${o.tkrSetup}, then run tkr migrate rtk again)`);for(let s of o.notes)t.push(` ${o.agent}: ${s}`)}return e.shim&&t.push("","rtk command",` write ${e.shim.file}: rtk gain, rtk recall and rtk bypass forward to Tokmizer`),t.push("","Every changed file is backed up. Undo with: tkr migrate rtk --undo",""),t.join(`
|
|
124
|
+
`)}async function CN(e){let t=Df(e);if(t.steps.length===0&&t.trust.length===0&&!t.telemetry)return["Already migrated: nothing to change."];let n=new Date().toISOString().replace(/[:.]/g,"-"),r=new Hf(et(fo(),n)),o=[];for(let s of t.steps)s.content===null?await r.remove(s.path):await r.write(s.path,s.content,s.mode),o.push(s.done);if(t.trust.length>0&&(await r.snapshot(on()),await Cd(t.trust),r.settle(on()),o.push(`Trusted ${t.trust.join(", ")}`)),Ra(),t.telemetry){r.manifest.telemetryWas=!0,await r.save();try{await rt({telemetryOptIn:!1}),o.push("Telemetry off")}catch(s){o.push(`Telemetry: could not turn it off (${s.message}). Run: tkr telemetry off`)}}return await r.save(),o.push(`Backups: ${r.dir}`),o}function Ex(){let e;try{e=yN(fo()).sort().reverse()}catch{return[]}let t=[];for(let n of e)try{let r=JSON.parse(po(et(fo(),n,"manifest.json"),"utf8"));r.undoneAt||t.push({dir:et(fo(),n),manifest:r})}catch{}return t}async function PN(e,t){let n=!0;for(let r of[...e.manifest.files].reverse()){if(Nf(r.path)!==r.after){t.push(`Kept ${r.path}: it changed after the migration.${r.backup?` Its previous version is in ${r.backup}`:""}`),n=!1;continue}r.backup?(await Wa(If(r.path),{recursive:!0}),await xx(r.backup,r.path),t.push(`Restored ${r.path}`)):(await vx(r.path,{force:!0}),t.push(`Removed ${r.path}`))}if(e.manifest.telemetryWas!==void 0)try{await rt({telemetryOptIn:e.manifest.telemetryWas}),t.push(`Telemetry ${e.manifest.telemetryWas?"on":"off"} again`)}catch(r){t.push(`Telemetry: could not restore it (${r.message})`),n=!1}return e.manifest.undoneAt=new Date().toISOString(),await Of(et(e.dir,"manifest.json"),`${JSON.stringify(e.manifest,null,2)}
|
|
125
|
+
`,{mode:384}),t.push(`Undid the rtk migration of ${e.manifest.createdAt}.`),n}async function ON(){let e=Ex();if(e.length===0)return{lines:["Nothing to undo: no rtk migration found."],ok:!0};let t=[],n=!0;for(let r of e)await PN(r,t)||(n=!1);return Ra(),e.length>1&&t.push(`${e.length} migrations undone, newest first.`),{lines:t,ok:n}}function Ya(e){try{if(Us(fo()))return null;let t=uf(e,[G()],!1);return!t||t.compatShim?null:"rtk is installed too. Move its filters, settings and history, and stop wrapping commands twice: tkr migrate rtk"}catch{return null}}var Hf,Mf=k(()=>{"use strict";F();Yn();Pt();Fo();Br();kb();wb();mf();wf();ao();Pf();Hf=class{dir;manifest;seen=new Map;constructor(t){this.dir=t,this.manifest={v:1,createdAt:new Date().toISOString(),files:[]}}async snapshot(t){let n=this.seen.get(t);if(n)return n;let r=null;Us(t)&&(r=et(this.dir,"files",String(this.manifest.files.length)),await Wa(If(r),{recursive:!0,mode:448}),await xx(t,r));let o={path:t,backup:r,after:null};return this.seen.set(t,o),this.manifest.files.push(o),await this.save(),o}async write(t,n,r){let o=await this.snapshot(t);await Wa(If(t),{recursive:!0});let s=`${t}.tmp-${process.pid}`;await Of(s,n),r!==void 0&&await bN(s,r),await wN(s,t),o.after=Nf(t)}async remove(t){let n=await this.snapshot(t);await vx(t,{force:!0}),n.after=null}settle(t){let n=this.seen.get(t);n&&(n.after=Nf(t))}async save(){await Wa(this.dir,{recursive:!0,mode:448}),await Of(et(this.dir,"manifest.json"),`${JSON.stringify(this.manifest,null,2)}
|
|
126
|
+
`,{mode:384})}}});var Xa={};L(Xa,{foreignFindingLines:()=>NN,foreignFindings:()=>Ax,healForeignHooks:()=>HN,healTargets:()=>Tx,stripForeign:()=>Ff});import{readFileSync as IN}from"node:fs";function Tx(){return[{id:"claude",label:"Claude Code",setup:"tkr setup-claude",host:"claude-code",files:()=>[On()]},{id:"cursor",label:"Cursor",setup:"tkr setup-cursor",host:"cursor",files:()=>[We()]},{id:"gemini",label:"Gemini CLI",setup:"tkr setup-gemini",host:"gemini-cli",files:()=>[Re()]},{id:"antigravity",label:"Antigravity",setup:"tkr setup-antigravity",host:"antigravity",files:()=>[qe()]},...ce.map(e=>({id:e.id,label:e.label,setup:e.setup,host:e.id,files:()=>e.id==="droid"?Ht().map(t=>t.file):e.files()}))]}function Ff(e,t){let n=[],r=o=>{if(Array.isArray(o)){for(let s=0;s<o.length;){let i=o[s];if(R(i)&&t(i.command)){n.push(String(i.command)),o.splice(s,1);continue}let a=n.length,c=R(i)&&Array.isArray(i.hooks)&&i.hooks.length>0;r(i),c&&n.length>a&&!i.hooks?.length?o.splice(s,1):s++}return}if(R(o))for(let[s,i]of Object.entries(o)){let a=n.length;r(i),n.length>a&&Array.isArray(i)&&i.length===0&&delete o[s]}};return r(e),n}function Ax(e=Tx()){let t=[];for(let n of e)for(let r of new Set(n.files())){let o;try{o=oe(IN(r,"utf8"))}catch{continue}if(!R(o))continue;let s=Ff(o,Go(n.host));s.length&&t.push({target:n,file:r,commands:s})}return t}function NN(e){return e.map(t=>`${`${t.target.label}:`.padEnd(Math.max(10,t.target.label.length+2))}${t.file} has ${t.commands.length} Tokmizer hook${t.commands.length===1?"":"s"} made for another agent (copied or imported) \u2014 run: tkr doctor --fix`)}async function HN(e,t,n=Ax()){let r=[],o=new Map;for(let s of n)o.set(s.target,[...o.get(s.target)??[],s]);for(let[s,i]of o){if(await e(s.id).catch(()=>"error")==="error"){t&&r.push(`Left the Tokmizer hooks copied into ${i.map(c=>c.file).join(", ")}: they still work, but the ${s.label} hook could not be set up (run: ${s.setup}).`);continue}for(let c of i){let l=await K(c.file),u=l?Ff(l,Go(s.host)):[];if(!l||u.length&&!await Z(c.file,l)){t&&r.push(`Could not update ${c.file}; remove the Tokmizer hooks made for another agent from it by hand.`);continue}u.length&&r.push(`Replaced ${u.length} Tokmizer hook${u.length===1?"":"s"} copied from another agent in ${c.file} with the ${s.label} hook (backup in ~/.tokmizer/backup/config).`)}}return r}var Qa=k(()=>{"use strict";it();de();Ai();In();Hn();Mn();tn();Fr()});var Px={};L(Px,{TAP_FORMULA_PATHS:()=>Rx,brewTapStatus:()=>FN,formulaWedged:()=>Cx});import{readFileSync as DN}from"node:fs";function Cx(e){return/^(?:<{7}|={7}|>{7})/m.test(e)}function FN(e=Rx){for(let t of e)try{return{path:t,wedged:Cx(DN(t,"utf8"))}}catch{}return null}var MN,Rx,Ox=k(()=>{"use strict";MN=["/opt/homebrew/Library/Taps","/usr/local/Homebrew/Library/Taps","/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps"],Rx=MN.map(e=>`${e}/norwelltw/homebrew-tokmizer/Formula/tokmizer.rb`)});var Dx={};L(Dx,{AGENT_PROBES:()=>Hx,detectedAgents:()=>GN,parseSelection:()=>VN,runSetups:()=>KN,setupSummary:()=>ZN});import{accessSync as jN,constants as Ix,existsSync as LN}from"node:fs";import{spawnSync as zN}from"node:child_process";import{delimiter as UN,join as X}from"node:path";import BN from"node:os";function JN(e,t){let n=process.platform==="win32"?[`${e}.exe`,`${e}.cmd`,`${e}.bat`]:[e];for(let r of t.split(UN))if(r)for(let o of n)try{return jN(X(r,o),process.platform==="win32"?Ix.F_OK:Ix.X_OK),!0}catch{}return!1}function GN(e=process.env.PATH??"",t=Hx){return t.filter(n=>n.dirs().some(r=>LN(r))||n.bins.some(r=>JN(r,e)))}function KN(e,t){return e.map(n=>{let r=zN(t[0],[...t.slice(1),n.command],{encoding:"utf8",env:process.env,timeout:12e4,windowsHide:!0});return{agent:n,ok:r.status===0,output:`${r.stdout??""}${r.stderr??""}`.trim()}})}function Nx(e){return e.split(`
|
|
127
|
+
`).map(t=>t.trim()).find(Boolean)??""}function ZN(e,t){let n=Math.max(10,...e.map(r=>r.agent.label.length+2));return["","Summary:",...e.map(r=>` ${`${r.agent.label}:`.padEnd(n)}${r.ok?"done":"FAILED"}${Nx(r.output)?` \u2014 ${Nx(r.output)}`:""}`),...t.length?[` Not found, skipped: ${t.map(r=>r.label).join(", ")}`]:[],"","Restart each agent so it loads Tokmizer. In Codex, approve the Tokmizer hook once in /hooks.",""]}function VN(e,t){let n=e.trim().toLowerCase();if(!n||n==="all"||n==="a")return[...Array(t).keys()];if(n==="none"||n==="n"||n==="q")return[];let r=new Set;for(let o of n.split(/[\s,]+/).filter(Boolean)){let s=Number(o);if(!Number.isInteger(s)||s<1||s>t)return null;r.add(s-1)}return[...r].sort((o,s)=>o-s)}var se,ec,Hx,Mx=k(()=>{"use strict";$r();se=()=>BN.homedir(),ec=()=>process.env.XDG_CONFIG_HOME||X(se(),".config"),Hx=[{id:"claude",label:"Claude Code",command:"setup-claude",dirs:()=>[mt(process.env,se())],bins:["claude"]},{id:"codex",label:"Codex",command:"setup-codex",dirs:()=>[process.env.CODEX_HOME||X(se(),".codex")],bins:["codex"]},{id:"cursor",label:"Cursor",command:"setup-cursor",dirs:()=>[X(se(),".cursor")],bins:["cursor-agent","cursor"]},{id:"gemini",label:"Gemini CLI",command:"setup-gemini",dirs:()=>[X(process.env.GEMINI_CLI_HOME||se(),".gemini","settings.json")],bins:["gemini"]},{id:"copilot",label:"GitHub Copilot",command:"setup-copilot",dirs:()=>[process.env.COPILOT_HOME||X(se(),".copilot")],bins:["copilot"]},{id:"droid",label:"Factory Droid",command:"setup-droid",dirs:()=>[X(se(),".factory")],bins:["droid"]},{id:"trae",label:"Trae",command:"setup-trae",dirs:()=>[X(se(),".trae"),X(se(),".trae-cn")],bins:["trae"]},{id:"qwen-code",label:"Qwen Code",command:"setup-qwen",dirs:()=>[process.env.QWEN_HOME||X(se(),".qwen")],bins:["qwen"]},{id:"crush",label:"Crush",command:"setup-crush",dirs:()=>[X(ec(),"crush")],bins:["crush"]},{id:"junie",label:"Junie CLI",command:"setup-junie",dirs:()=>[X(se(),".junie")],bins:["junie"]},{id:"zcode",label:"ZCode",command:"setup-zcode",dirs:()=>[X(se(),".zcode")],bins:["zcode"]},{id:"grok",label:"Grok Build",command:"setup-grok",dirs:()=>[X(se(),".grok")],bins:["grok"]},{id:"opencode",label:"OpenCode",command:"setup-opencode",dirs:()=>[X(ec(),"opencode")],bins:["opencode"]},{id:"kilo",label:"Kilo Code",command:"setup-kilo",dirs:()=>[X(ec(),"kilo")],bins:["kilo"]},{id:"amp",label:"Amp",command:"setup-amp",dirs:()=>[X(ec(),"amp")],bins:["amp"]},{id:"vibe",label:"Mistral Vibe",command:"setup-vibe",dirs:()=>[process.env.VIBE_HOME||X(se(),".vibe")],bins:["vibe"]},{id:"antigravity",label:"Antigravity",command:"setup-antigravity",dirs:()=>[X(se(),".gemini","antigravity"),X(se(),".gemini","config")],bins:["antigravity","agy"]},{id:"openclaw",label:"OpenClaw",command:"setup-openclaw",dirs:()=>[X(se(),".openclaw")],bins:["openclaw"]},{id:"pi",label:"Pi",command:"setup-pi",dirs:()=>[process.env.PI_CODING_AGENT_DIR||X(se(),".pi")],bins:["pi"]},{id:"omp",label:"Oh My Pi",command:"setup-omp",dirs:()=>[X(se(),".omp")],bins:["omp"]},{id:"hermes",label:"Hermes",command:"setup-hermes",dirs:()=>[process.env.HERMES_HOME||X(se(),".hermes")],bins:["hermes"]}]});import{createCipheriv as YG,createDecipheriv as WN,hkdfSync as qN,randomBytes as XG}from"node:crypto";function QN(e){return Buffer.from(qN("sha256",Buffer.from(e,"utf8"),YN,XN,32))}function tc(e,t){let n=QN(t),r=Buffer.from(e,"base64url"),o=r.subarray(0,12),s=r.subarray(12,28),i=r.subarray(28),a=WN("aes-256-gcm",n,o);return a.setAuthTag(s),Buffer.concat([a.update(i),a.final()]).toString("utf8")}var YN,XN,jf=k(()=>{"use strict";YN=Buffer.from("tokmizer-bundle-enc-v1"),XN=Buffer.from("rules-bundle")});import{chmodSync as eH,readFileSync as tH,writeFileSync as nH,mkdirSync as rH,renameSync as oH}from"node:fs";import{join as Fx}from"node:path";function Lf(){return Fx(y(),"bundle-cache.json")}function jx(e){try{let t=y();rH(t,{recursive:!0});let n={...e,fetchedAt:Date.now()},r=Fx(t,`bundle-cache.${process.pid}.tmp`);nH(r,JSON.stringify(n),{mode:384}),oH(r,Lf()),eH(Lf(),384)}catch{}}function Lx(){try{let e=tH(Lf(),"utf8"),t=sH.safeParse(JSON.parse(e));return t.success?t.data:null}catch{return null}}var sH,zx=k(()=>{"use strict";fr();F();sH=x.object({payload:x.string().min(1),signature:x.string().min(1),enc:x.literal("v1"),fetchedAt:x.number().int().nonnegative()})});var Bf={};L(Bf,{BundleFetchError:()=>Bs,BundlePayload:()=>nc,bundleExpired:()=>uH,compileRuntime:()=>rc,fetchBundle:()=>pH,healOn401:()=>fH,maxBundleAgeMs:()=>zf,runtimeFromCache:()=>mH,runtimeFromEnvelope:()=>Uf});import{createPublicKey as iH,verify as aH}from"node:crypto";function zf(){let e=Number(process.env.TOKMIZER_MAX_BUNDLE_AGE_MS);return Number.isFinite(e)&&e>0?e:lH}function uH(e,t=Date.now()){return t-e.fetchedAt>zf()}function dH(e,t){let n=$o();if(!n||!n.includes("BEGIN PUBLIC KEY"))throw new Error("tkr-daemon: no valid signing public key configured (set TOKMIZER_RESP_SIGNING_PUBLIC_KEY_PEM at build time).");let r=iH({key:n,format:"pem"});if(!aH(null,Buffer.from(e.payload,"utf8"),r,Buffer.from(e.signature,"base64url")))throw new Error("tkr-daemon: rules bundle signature invalid");return JSON.parse(tc(e.payload,t))}async function fH(e,t,n){if(e instanceof Bs&&(e.status===401||e.status===403))try{return await n.heartbeat(t),await n.fetchBundle(t)}catch(r){return n.log(`initial fetch failed after heartbeat: ${r.message}`),null}return n.log(`initial fetch failed: ${e.message}`),null}async function pH(e){let t=await z();if(!t||!t.jwt)throw new Error("tkr-daemon: not activated (no JWT)");if(!t.signingSecret)throw new Error("tkr-daemon: not activated (no signing secret)");let n=await Ae("GET","/api/v1/rules/bundle",void 0,{baseUrl:e,bearer:t.jwt,signingSecret:t.signingSecret,fingerprint:t.fingerprint??"0".repeat(64),installId:t.installId,timeoutMs:1e4});if(!n.ok)throw new Bs(n.status);let r=cH.parse(await n.json()),o=Uf(r,t.signingSecret);return jx(r),o}function Uf(e,t){let n=dH(e,t),r=nc.parse(n);if(Date.now()-r.signedAt>zf())throw new Error("tkr-daemon: rules bundle is stale");return rc(r,{signedAt:r.signedAt,fetchedAt:Date.now()})}function rc(e,t){let n=new Map;for(let r of e.filters)n.set(r.slug,{...r,matchRegex:new RegExp(r.match_command)});return{bundleVersion:e.bundleVersion,signedAt:t.signedAt,ruleCount:n.size,startedAt:Date.now(),fetchedAt:t.fetchedAt,selectFor:(r,o,s)=>xa(r,n.values(),s?new Set(s):null,n)}}async function mH(){try{let e=Lx();if(!e)return null;let t=await z();return t?.signingSecret?Uf(e,t.signingSecret):null}catch{return null}}var nc,cH,lH,Bs,oc=k(()=>{"use strict";fr();Wi();od();pt();Tn();jf();zx();nc=x.object({bundleVersion:x.number().int().nonnegative(),signedAt:x.number().int(),filters:x.array(Jr)}),cH=x.object({payload:x.string().min(1),signature:x.string().min(1),enc:x.literal("v1")}),lH=10080*60*1e3;Bs=class extends Error{status;constructor(t){super(`tkr-daemon: bundle fetch failed ${t}`),this.status=t}}});var Jx={};L(Jx,{DEFAULT_RULES_SECRET:()=>Ux,defaultRulesRuntime:()=>gH,resolveAllowedFilters:()=>yH});function Bx(){let e="NnjAHOHBxO45LQIsqHfPl32IfeDXJmRuw2c0j2w_MXMlsCrOj5JYnj_TnWFFxU2Shde2DxYlxAtqYK7bNOy8ASRKeAHiJlTzArBO2Y1vtDWESltvkYB5TGd0pDftHpDyXUSsWHpu9pEoqrGmV7uJFrT2B8L0ajWe_poJE5xEKg6N5qaLnwpaCVyo72IIEGnPPiDIYEXrHXK4WOAWxQ-CzV3dM6Z28FrjKMVEjdspEs7hw01WRfA-4WTkH_-YD5IDXQ2Yj9ifuvCcEXdbirK9eIIsUHf-_mxz9Wz0WpHQl1xI8HunGWEgk4J51BNp5UwLNcJwtp4_G8lMmoRc6cb44Xshkrw9UfWM1owhEhcZ8sKNaHaMURv2mVGzOJ5KDZVwWmtMacvmmdRAh8t--_TJaGbokzH6FhQIOIP-LgOqPIG1YrDCt6ahQA8_Eu_3BVJiJKlU3q-dUmuECw6w9rd3Y_F4ZAdZJOjiXZR57PlFxQ9QiinklmqldlDcvXHP_jVjGtX7c-eez3jEquOT605XS7YcL0DPCMTLemsQ3ZnQXoSlKYsrSXE1mIrern6sIdVIuEwLyfSGEbz6vxEAc4ASzXaLAYOMy3t1Ojp4bSn73bEiOPTPugOdAhpusn-HhN9EiWx9A1jJckZeiRi6EkY1CzANHh8Zr3afTSYEV8rfuro3gCLgrHpEsUl5mB8g62E0WgRm0pIlygTwAnpdSrdhe41Yjrdl5TyUTJ-PGE-cHsQ8xb2Lcghua1akNfWO-WQBlMPDvEqagSxFgX5ixCf75AkkVw7T2E8H_QsTo0KdXw0LZK0OldrquzUJI5QMvlw34D_HTsKeI_Va-w1qKbvEnKLU2pvwfKY3EnvJvv2xNCn0nCz4QAAJ6GsFV1zckoiqJDf9p5tL4F7yPK-5e8TTQ3dIqWE_2tmXDrt9xV7nXElHZ5EVg2vagNpevX8uZ_yXXb8YkfGRmVKyhwyJsX-r2tuwgO2d8R5wMdMnZDCV80drk-r41fUehqwhnU1kRMdifegD1VnvrlsUIeyCfPBB7HYKKyFY3_eqoANPWBEHmx4j1hor_CNV4v5-hFM8NHnyfEBtPeoXp3RxBMnyvgmz0nzbSZlcTf1IJ6qA_uqX8TxxYKzC1Mh7jsF8uTsQf_OEUW-iULXjgm8gNqIPrqR2EsoZ8LpFP-I7XjmA2D9CUjTdZRNwd5nNxUSHkvHwGS9-OE-8z7LmHAsXzk504KBKJb1vQ2ywEbCCTOui3aHaR2BDWnfhj9-EMrvsluDOYRm1PvhNF8NMUjsR5PWwKKYEsHQiYV1doTb1jpe2VutPYHmW_OYXXrkWElsHdwUJbnUrbjt9xhfKVwSZhEn0nRI6oHAEg_mVAdrE_kwy7ESdQdrkwDr4Nqz36hZZl3VXSLtCnC-GPSbhsOHl9Bl-69tby8w4GiCdyACLoFKr210P43Dmg1oHIR0uYZhenpMYKM7CMBssM3Wnudnk1QyoTSGgUA-cfLAhHFL_rJGdr7MJf60lyfuc92fuP3A1V7DPm7GiRkskPdouiTfUT-T04T0zeL-yLb5oxiFozjWKm3LwuSJ4TxhVycNY09DgB5-gpfRHnIA4250Q-zmjl3EBQDwDTFYcmnW3jrffN4ZKPwQdW8Ey7LTRP9ZRk4GD0kHb_TcQ5GcLg3jUcFzWowCy-HPifxXIADSRdhoAVvvUXSHfH8QmAu7kRI4E3Kkn2EaejO6L5purwcfeLzxy5jTTh3oVHwl5B8iS-bwj6p2dSiYH0_gEUp5Lbo-XAIVQqRQmNHyi0PdGfWGtaqVL8N9jzA8yJ3GFzyVnvT9ctOwUnLAAzxgEwkIY-qctCQuw_W-VcWjCV-64vEU0kN3VGH_P4-pU9b-hsWaKGnBdZGd-wA4-yXt6Gz7qNofyaKJY0zvaVl0IYFTp8UmyD8KEVuffFYLcucIWx7HTJmAEK7NA0AMi87YSNaS3CU0lC4YAksRrjCf9kQJ5A3PoOcu8_MlPZqivbtZxqkgqrOV0R81d9y-g1yPErKO5JmUyu7xjEK6PmO20WNluwt7MN3NHvVxxNRH-blVwulv_LZt1SPTI5TNfW2q8OUCtl8tCmhFW-qMfMgciZV3wNG0Tvq1FL7gyqSE-hZk2tWlozxFWSUDPeVS8UhZAdSI5WDB_klPyH0W8_VRVe6OkHbiMqOeoqvRltgNkAA3jxVF6NzFKzD7h7FOb2y0w9HHHg_jvDzatYgkivgtNlZuIPKtLmuQJt-_YTqSVE1T4FrsnXG4knmyzvHCrK4Yl0aZCciyU-3EJz2kyaG2RitJ61eTK2wUcwiK1o7zDV6jlnG4-a4MOT__eOPdyBQSjqXgaDX9yq2IbvPOZ_PdJq2OLu9HUTEIRnEj-t4pcdxmRvgZOdYDm5XYeT5GfZKqI9UjDgKzyi6P0STuVj2JJNWOhDv19WiDOBBe2nnbcdlkj9h7XHcD2szWybYl8DoQN5U93sf43crD3tACVXR-Kz4xBHPjZL1hb00DoP7BVnyEJALcZ0Nce17ZZAwegiC1WTp_VPcaDag9gZZhVCf2QxGy1mrogb3DLulo7o2QehdnZ74rwaTzNdrcIOySw4xp2MiRNWX9qnZQNeFxGr-2pCJq0cCk0it7NBcwAyHhJJ7Pb7umA4dRBvHhusOA84g3fuWHnq8aSjk5NcaiYoNoPebUkDYCNuC6obh0wcZJPb6YE6B0MMjxejQVgaeARXFik6WtnJ0pFuhj-wJEifb-43txymj8UAH76Intp3NjWby9w8pmf_H3zyhXLEHbf0EtHdUpv4hm94dyK9eDJz73TadYeQ-wPbzJsvPH6bSkSrA7r_iAnehp5eUQDIJR4F7HNM0Yj8Otcq6BOrB-Miv_8axImzFUOy0mdkTJsdJhx332W2aggVsBvgupmUSP0gcZKB6DERiUqze0FbTyoX_IQckoS-L8zpHelUbnXj_D37QlvfvQA3QKn8wPCn7i0I9OQbA_uRbMPIRjFwKSxNPA1yqGo4TCHduxqgKuCGeP8SFlVBzvMPC55_QCnGh5P31Su4O4xOxjjZEarqlBB5SJJ8tozfUyE-vBF0Z9Uz9NjNZPQ9efqLIDADRRxjYVh1Yg8fr_SK9S4qfD2BMYwsVjjZQUSiNficF5D4yXGVoFvNytuqEzceqmfkRuGjr4xsyIuKZcqj78kdmVV1hfhYxyB64z_QY7euyKVssippn8is1wNEuXiOTXuD_b_sZfwF5aF1UiAkITa0dTUXTSQ0cOqjj59axgyv9_6kYDMS2SX2De-PljC7CGV0BIbt6sYMVNlDoN4Y7kLNL9NMXIEK0kEXmpM6BEicdd_3-KbD1GnkYpPt0y8gRrBggOhWNbEZ62qCXIoG8nEYrlacI-G-CThURHxbV3Yez2M2QS1pxbPiaPo_2GCbEhq_gGaCsI_Mx9eNZuXPpqJ4EoFBWrf1V1ftuBGguKbRL3k3K4_eCxsUS4pr-Gq6r3uvR6yi8xBSprtHESBl9TNzrssTht2jikQ3LUx0iscC3Su6IObxAewkPQI8c6KvuuH-NmSckrOq6ihdpA2XLyiX_305OAGyPL3_p_i2emKOBMvTs1WFXc6I9jOsU6Vcw3Ne5-ojhxDpio64XDmjQM4X2PyHieLzBBUMGJbGJAet_7Ye-ApoPaaOoBw-xR9tyV1HJlkWi2985SA2YkWnhiCLq58gnlPRkWe0PuT9GDJZbFuU7ObprrjCQvJF3wY9T6f2nvoc4namip1MDOzA3N8Uh_vx7rOIl3Oi27FyKix0Gy02PzlaWVszIA1-OiZXKwQQSwrqREvR5nbXCF_qdSJGDotr4CP_CFKiEJ8-NYTUpCy5KYbOsWmeopjGssLNdzNrv2wqnyP3ObJb0WXQcb6YYYYeJSw9DDZ1nD0cGILLLXBIm53gNQdRjBBCJyDNYR-e_fSn1mhWndeKuprpdjnx3QRHqwDStu_njFEwUfDJ82W2p7r8rjv9hqnJMeaoNZ4Ex1DYwBcQxcTZL8XxkpNcSXSw0GYG_Z6bmxc2pDGRvQwvNTbacb9bKq7tlrGAYMk78NIRQr6hRfl0BNcIYqej4TOpFOfpVnqQgxrW8FiqZ3ahYKIYcV8Ff8vvNimlP-DI_LU4n0M2BoJTvewg6-27f9TbDZhbxv5Aaq0gDhUStUKanuoAOxyw4IQ6xAuIZ6cFTQkjrrHQpi9dO0BrXlBJbBvOe_vNs8Ek7NnJH2F_O2xRBZXYOC9_F5MeLdpG386A-LXbf4gYG5F-ltZkR10MxPzhKeAi93FOEAeC3P4LpbcCvRZbgZymiE2SE2V05RnP1lwB8PaQDKWd_huWmuoG1Y2J_GuX-OQkBP8eQpNix5dxnrk4NthxggkvT79HOt2G5MEp_h8XvB5djOSjjYsB2-V4crbroedlf_cS2uQwawPiJ4ISLjaCxWOkOsT583c874NUKjUOyQPG588gM86xnRLCtxianl8NWukvw_TsOSZ5VANKQSlfW_uHP5yeHdfQEirMgqybJ29Xg7jl4D2HWP0SyxTuwIUPoVths5Xd5Sg937Mo_XnDh4-at2M8eWIcCSclbjdEiSHCcvVsYqYboNdHKZQY5mGWo7iLd5CCPqB4XAR0pPZ1ndgA0EtqRgvBSUWLOGBd_8o5FvArQk1qQnymk6NJfqvN1A6r5jsp8uEJEJ3VQ9uvJpIWPXVqyPhrJjk5Lh6P7Ac0gde2vaIu1K3JMRAXckUhAIJtW9K7JK3CsM2JMUgOWSpiXDwY2iHxaDWEOOt9I9A83Gqv2-dhQLFA3HlSym4jEtSki-a0yBmpj06HD3SYcLtwpvTif4EFSAFfvjvI_QLH3KdjeXP71s0ZU9ZAKJRAwSK-k6dkmV0UEbobWGzk3xuVyiOaTFwezAfiPA7B6o5ekSMjaGFgkkExd5L_RGBtVstaIxKRA_JNhrIXeg7rvbxbUkKGWDu9LSRQe6omfECxIJ3Xo2ATvs8OA2X4S9AzsI0OJqLPAwpDhFOTneWVIBtoktSHe9vhbRWzlj79ZZLVn9l2j9Pp6oOW-WN_vzTDu7klajR1FG_jAcre5bQNqimg48_WBAaox1cAOvqMwysdDTxT9qh27kJXADBXBcWvCw6qX75YhM9tAeIN54s0TudfxM6Q2BlcQq5K-Y1IYz2M3QUvLeRrze71AOV4TtVAgKqfbGC0JPWa0ypFsH_M4rdvYlQlHPgTVuVqvb34WHGFV5weop4mmMozwgA0qFuBoTOgGpPiCXhhpbt0s-iH0eKIqw-LoL_U8W7qFimEXZBR6Ny_xEbCKxhRZiCZ8oM_GUzFIpekbxk9jDzgps0V754b6zAjBqmu0teM-HlcMBGGNTYHouPMiwerJhvuIEozfl_qoS0fELCAReHF6EwH62jIm-LSee5uacGXHE3GbWVxW24ehD5ATABAMgqd1V-zAahPl8jjLRJ7h1SB4JmNlQhknbNvgJcUMDJ3mCmK-NiEQn6veDeCGCkspcJdnj6Va6p9vngZ5VOdW9dG-TaAm7RNkP5prM7OwGdQoop4sT6ntXMEhipsBiFqNTnZ1IbPQfYFKdaj9k2TPWGxgmlSNpmmoPo_qY8XW9xI1gZss_W62tNRRt5FNI_XbdNII9ZkEct0h35NFO6qv_-Oel7QmxqxBnqm26xUOZExmVrRwpkKQwGOjvEMQK5-LrakdTIzAqBMMWMcXo_uDvmnD6AFRK6YZsY5826_LEsN39_CfoyWEkYGAo3WQxWB_fkZoqGwDBlzn-wlex9U0YAdWRNVKKJr-ikt_CIRI2-1oRH3t0skWptHCsZkuZtkzCmW9EWnKiGNiYGCqg1KH3qIV8VYDZf65yhrpEWKFTtnKyYcOXE-KxYqumgt_50RBTEa50o_2MyE4VP2OVUNXkf4kyMn0UYoy_22IF7RHTs7p_DPCRGFkRKcNjHr9YZ_AVgCD9MgjkOYyTTcfPOMS4iPhMuwK4sIKJsCMrE8ePHumAaRf-u1cG9HepqZ22kZJqwPwZp1NCT--yTQLXLFqmqPFT64f8dsh2pphB-6amE-7MmkQzHre4pE1TT2rbpt0wOu9HESXghKdwcNZgW179AXm_tCgcJv_1eABvUU1x78TuATdvhWO90DAZJaafhxTzDBU1mmXScprGYgmDteG1Dl0ZVus0qqHF_Yw_bWlp7vmlTQhgdHt6b0LVqmY7N_ZZ6CefaePXWv7LoNyL0QjMhHTU0MqD6fVXoQ64iHl7Oiob_3T0bhTAefoaBYYUCfHFRIH_iAPqFSFpAHQfBgz8a18aJ9hzAJPBE_X-_8tnuncy2-0ZbYTTvCm6cwT1L1TSPo3EE9oP2na0ydW9GCUREQB7tBnghEXZGVRomGqHbWbhB52RkIIfcnLy_k2-qgdsWnjnfBSwiSNcgeW9MYvz7pdPxy9UrXgoH5cQ34ID4k58nz9SsIskD0FbgeM__F2ZQyaSzEflaqcxmH5sANyYM1rzbpmhhBsmG5kK8-BNHTlFV_9oWbUCPFN7_VLXHThBep9iE0dDDGOOUGGS4kgNvxeXA1MkI9c9LA_biSfP0yUZZByq45QfrlMBbFfDrDkLHAXIBkXMaCFiVZ0-5C1QhDiDSPAYKdDI40d5o7wFdDUzX79nFgxA0i306UUrWIBePXFrD0XTlwQrG0JTXqksuWOhN_vaMVq0rJv2CFD-j17syWnVftxNjyAVdOCicd_5ribqenvPZsq_6e5DSDj5g7CHmeXF2PlzuZjNrIX5CiEViuQhKpCwGcbs_PBwnS0rx8F9E02pOzGpWXQPxAWwp_C5ap57V7xeCigRyoQyeM_JQaZaZZw9O6BGIDFrgczETFs0xoKYoi5-uGqOuVvlFtn-PpkV9tkobACEIO43pXHVXeFlI8FhnAe-W7zr2Ly_mj8gbyNzS422pdFhBV5KRV--ZNjOipcCeOYTXHY_Ry52h9nhkQHNebfRmCCk4oGw36VvPB0lrO6q2SrV0P7te_Z9KEG3DlkJF_fNXGYubzQiLsVazRFW2ELWxi_0pGMoBZ9BT8_4HenFeJrWwqYrw4kC5ab-jyxYvdTUUBSFQWIdW2GQuKFCJ3PRuJURV25yDQXlIKpp4nRhr8g5feJESo71HiSMimigX7P2nzUl0tcTwLTLuxiXt0QRKeId67BvKcbFFwVZgvN7K4-th5LGvAtC_hxfn35rD6WA3TNMHCVg8wipPzcX0y_wPa1gBaZXWaNHOygRBDFTk9Rx-J16Tu3TV7NtETg0SOmwWaI2gBW30wmWof3O6F6sFAgfRLcZyFYAOrME47o202T-GsYGZMUD10ck7HD3flRVvaxW9l3F3CxZzpWTznqCzX11gMaXk_6rcIhptTcAMSTN8dg5FPV-ULuPONtqKCYWu8U3ClUulJv2xIvfRWIbJYEgQxxcYUQY4FhZQ2lqzCan3Ts5A-e6hLUi8UGEwTg3St1Vih2BTouyo5tC7rduazmfDXyN9VG83ltOgQAS1iMKVKb_RE1p-AaBWqaNrMbuXdWqJ1Fyl4rzyfLBzpXyBjLMB1UZV4rAlYw0wVrX7QC0-bSCnYTQ8Ls3ddXQefPRRNthqMsJZVtZL22fVAo4aHW7j9OjFlLxz_DZd1cgU2W3duNvCOdbHKeEZZG73KsJ-ekHyczAceZg8sXEqerPAPK8tnzylrEFRcgNmO3G3M7Zd-nYPDUr_9iwF0PpCb3KyYGX9RPxPJjGc3lT5Z8iVmrqxaUYEzs8eG3GAdb87Nu5ChqUeW9CRWg-d1LNbggGPILljAbVlmvgu4jECWJ3bmVOVfKFfvQTadL20WYPvVyRcqmxlQamVb43HHPGidRPwxtZ6nY3BG-0hol-E6_xU-HU_u7lBm8CNhUK_WIYYZvrZv7tlUQZYqWVfMJXUdBKoOagLxZyfm50oV5jJlj7xz7hPx25Zvi8iFnj6K3FIaweI96S7-iL6N_Fmyh5C4S282nNB_6pMlgEe2tlGEH9i1InTljDOd2GmgsyocuWlkLJAB6jJq0KNWUzg5zLVPkuBLZf8piV24KAW-8t0epygWDCJFOJkajHrWxH01IEDij3auo_xqx6AMNadYSBHzPD5MYCO28WFTS0lvdM639s6CceOXv9ZFrZiJvGp2H9Ep3aIxYOVjP_VwXJLymChCVbhh7xNb6-cxOGlk3DU9R1seakYvDzNF7S6R-ilmkXQPKCB_0XtPXoXYNQd15nVab-3hdUBCaNrAv1KXo62BLUsyX-uwG2axnMJDMi8TygwuX05ldZ0Blol61hDQL8nnBTYbMPRBWU9lQWmtdx7Hzq7GK_V5Ay05GGz5ikwPJLfYxOT788DtZTyI2aLZ-r56JjI1sNl_Zu-ExS0hkA5CSiENrbdIjxY2Ea3jk4-yW0xTsAcNpmAdwzDHqmYu56lrmjMHh974j33s9VC2zTn8WryNdHdw5AwwRc1Cqdy_HjnnQomy1U1m4arqt0e120PbI-kvNpZyuMDmzD6Ann40Um7Xf3Ol8zlC0GB-8in7wTHR54RCKvqxVD7gtGm8JKB2IeiIixjn1eF-80X3qg4ivqFQJp1DhDS4U24c_t0oEoyklQ6SqG1ja8VjWIDiz-QdM7gmugSVauAtn449K5ucWufuoybpWCPGk3TDlW8ojVm4KrRlMRaJMSM9GiAsLl4Oc18NEHnRF-nwewLdyLMhvAuaSmwO9ZEWhq6b-oTziowtSA0Xs0mfcXPKVr9-VS-5wfwnipCEfhjqN9EMYbpQuWykB5FT67CvqfeLodJlPLeGEYlzSmW9caWjiWzk2MSNlzFsIRiSgs7aiuDH6pfXx-l8Meg98ByofOT6DpQ5gxx6DlLhPLvtfdDPMvF1v27wl_nBF0Pyx2AkZkazLzHU8Vh1NpMP6XaF_fnRTvQ0p2hyBU3bXFRb3iKE07RPVeP0ItPRI-Ws7xYoLCHYl_cXiFkOrnVa2JyEjA3etJIJd5Bg7Tl5ehxFDNJcOYPBTTKvYViPltOkjn9RYdSOd1SlYHhgZKBkEBluEE7Tns5iKmDHcNFQD3jJzfctif9dKg1ZcWKnuggO4ptIDWJ-FIARJzD4qVao2xF1RmxwTjyzO3gJAYxs8lA3dgUbAaCDmD2kixSfoe6QjCu59EneJhTv9R5Imsb_6ghZzZnaeqaTSY1ur3rzRmqf9uLwNvEK0DUQEEeKWX-eve6zdKWH7i-A6NQImusKzIBZwawWRzaV1s7tMFen0sOAK4nMcJdF_fSvBZv8cftmHRZL5zEjV9eE1XnJlBeT6ZFYJMaFybmA93TkkB9BxhGyKsiDZkCyJNMAfjTIozuzq0bvSvEr7n-bAfUbIGzed6qbfMedf7D-CiKYZliRyfI-nciMTQsRRi-BnLRxEinE_iqOjG1NyQMZW4ZodSr8-vQc6kHBBrZBCSXaaS-f_ZLCIjj2zDb69DYwCSjjzNLrL4yVrUHnV5-90maHb-wyBA4lg1MI3AGIt0dTvnL1uReiFY-YhfOzM-8hEcVmepZBhuVNjVwu6qjiwSI8WZlKymovaaPS-n6Nsv2WTedFm_ZL1AeQaTtwwrvKTrgTB8LOpdIa1dc_V0LKA4iWLvGFBG5AYhdHN_UIt28ZPtWanjgHBytx0wbr1NTbYOhyimFkgk2wIwxGJo2LN4ntdx35DXKDhEM9Cs0ToAiOsT0W7AVsxvc1XC7sPZwIEO_-ko-KKjTA4Ax_qYKsdNk4YRjUMEIqnOeWjIdh6TI1viyqB_N4drY2ayaUyRQnzBbswOlsI8Qrx5eV_eJPiuGXriOITIVubldLwqh9GnUqJWBmhuspgng0WHDGo9VcLIf93FWIbvEHPcsMaT8h6B95NF4lx8UCRYU3ZdGWrlHPxFZvrGukcsPCDaZotf-CkOID5a0_YRaZwLBe8nLxg99RrcrHtuZHV6IrBqe5rCdiLcxOI1RnlpzNm4mq7erb_UqRiPyrceswxSlTAKZ1sHrmAsQfVIcPoLQG5X_yERvHyjmvqRtoIVU7jM_fqKw1E7G9hs5Z39HTzkcXKxciOSUvGWipmNsja-6BlopUxmtd5vtBxKts5oYwc9yFMiq9ryAOCq2BXjOvbQaqXvza2Yevmaa3XvccYJKYt2qZpfCVsqNx_gOGt-cqtNspAQGO-XhqtnhdQO0QniICE_4K0LPjF2-L3BwalPqm2ZISYT4usbt0-u7w9-GwvoW8an4WZEjd0nNKglwCGMT-wNY5oxAwM9UO2XknSgE9KQi9wyIh_IMyuzoVE6ebWLBEEnvp18KoWnpqI-G9qfw-oH6HktQvvdn5TQwAkXyzkjLBUcoc4Zz9xS_Ge-f9xuryzlVcAqbk0veif4ZV5me5V3380UmQY1vF02ylT0YhM5POIfiXNsTl-VH5UFX8_6cfo7HnDXA43tQ_ArbwGS1gXtM_pgtxIjGjs6HyqcMWSYz2g8XGxY4f_iBN4X36p61y0MeBFK7v2bAXuk2vsHSgnAnhYYOgzFvQwXB4Zgr-G4F_sye8S8kjutwmL2sttD2KxWVxQKBvGi_Lcb-ikGgwDIA70jNmV2YAHSKsYuThY50ouEadQyvWwTplF6njaYM5accJXcHIclBRc6VY1vhwgk5954APN-sl8nq__P8G00Q1EPLmZ4vet8VAUi4xwua_Ue4gm00kN---_YsNYz1kpR77ym8Fn5GzEP_Em2luODZyyElqafuQJ2F6Dc2dUDwEoyEIiLGUGcHq1xRmfnzjD_4IdeHlULQHdNJmdXPDagug4Pg8EINb5lsC3ZS0jva766u7dsiQOwZD08JYS7krm6SXUAn7PvSg6d5mua1Y0ZASSmU9SuMAmqjU7ShLI3-uNJaEt3IVM8l0_pnQAwCh24X95lqQHRUSk65FdOaR95enwPrA60DXzWeQi5HoC63eVOC6iJaD3hzO4tUyrH-5ROUYXFxdP1eF46FwvQ7ESNH_CUfWG1-FI6vVxk4T5OJ4-oZgBDbM0UK2JNz-wd4XuVham0s28hbXv7gVH6Xf6K5_YTrZGAbJLyWOFydUsRDktzyEvDTX_1-1u84VpPrxOmSY-FcVKT7EEMOF-5XbVBfpuIEabxXRMS0p_Ejru_PM_XnFg-nw6W3th6RHkw2jdPhVJ98gCXqB7ssL9yzEnC7_xJmoMuGZ8Sr-agBe6g2u8eRTN3sRewO23Ckt_hra_Rd3XZgGIDRFs7VBDmBbFlHCPSH1Ngl_oJSyWelFhWiTgaUzilvNh0wK_MV4iTBIDAyRLsfF4ovX1IrR1157wAZFjw2nBWRTgwecVn1Qz-fQyRq1RjQCQi0beQFEkGiu8HyqHAEuzRsXDF5HXibdnD1EaGgpS0Uv6jxaaEPo7x_ZWcGUjgCtxNxOI-LWxxWkXdOWLTVvIXkxsNlXyaUF39L1ZYR4cc253zBm7CSHcYlYXwyMzwlELgo3SrCsUJsi1PiOvQyslc7L46xHUlS3nGvbKpwaVim7294QJdJcZD9O7sZo8qjC6UrpSP4SAvkbsSv5aYI5CWhwtBkUi1hVXwBjgC-xCoTCsz2b5HF3A_bStyQdjVe0XcHwctivIEHjyolMUSkUPcDFc80cmLSg7snKSo5r_FwWuhfRNoyKOcrmVm30SS9bt1S_PAPPi_HEEALntlgawiGMzRXAiRGibSQFDKJsnsI6T52zrQOue28GzXkucLekBPXYddJpon3tlQX1J2sIgONl72uxLcBOFeSKtUJnMASNdYjvSToPq_UOtcwkabuaQ19wXr4HX-uL8KdnsEZjZ4ot76FNkL9XzBf6t3oyMMxX3GreYbbyT2TH_q7Zq-gdaeMWhHFHz6kNoCnob9Day4tN3orRsgx4RXGT0eqD7GVeUmJhF5VCzFvs_IQjpk5wM0w0AA9DBEVI4QUZ_QiQ4Z517ghFobY0a2TWZ2wgccKXMfS0CQdq4yo1ghUVwdz1xxxIkYwEFblqCxjxvD3EEgB2hEOqsYWLVGJpPVrIXE2KBOK03IbzRA16xftPAHnQTcMA47BtFVO2HZgyZbeHwFRD-ccCkxxOO_tNU16qQMUlhMQPUsq44dO15YOOo2PozBNxQY_J5iRHoYtvQHTxgyrBhdwZzWYfKEx1oOfgMlFipVEVMfRZomaKzxVxE-3bibWjttcCgNRNr7fq0z87axxKq5CzmSeJk2gU8I6mf9HhZZ6s4Naq3RWFMBwKu_PjN_ZUGWkL2QRJO_J0437ZeSSrNEHdcrgygIBKV8N1oC33Ic0CKjKIvEFGavooJKr3Ff7p28OhFbp5p0GbntTSr4G_O8pooE7MfFhRbrpepMvEo_uUFIuH6E5Uz95DkHHXiVd-iK4ms7oIJ_Uqid3b8Po18UZG3qepu9mdgbm1Pi2pSu1IJhLPS6qo1Kg0hZIPZtKCJrmG4v8RN_0gwGn_kNEcGS3-p_OjGL9_EpMrMmrmzn451A0-GMld-Q9CDXDFdz4exg0gbDo3gVGePasD5snHd9U-4yvjd6p82ND9avBTPEQQUffFBgP5wzTZICS2Wwki3c4oEkp-8E414aDocpksdd_AbkY89Z1p1Qg-DpcvYcPTksBfOi9PkECzxzgTIxbQ7f5PCJLSPgtWODjOtD1Aokilnrnf81AH512WtJU9UVKWhj23hI4Il7eDtAgDE8GnAGeDnQ3uw5bhyF2ahz2aqArc_2-dx7Nuut252H-GSOrwH5t6Q09o0Yy-gge95ZBNmaugwAQdTJG6Dynl3gyMTg-ZPXpYHY9fDqZOe1G5TE-qjM6gSmfCVhrsrhmB5VJlAm8HXl-s7QONWxvGwGKpzWYszg-NKWo9-Oe4JXbP6S8eGo2D3_NBgORNQt1tlXt3IQp7jfgbSiVbRYmIxbMCrQwdLJ8UCO6JpwOqt06VoW8iF2Caa9pbjiePeKFOIDZA9Q-Q6wDI_oZirXB1n_eIQ9vvL4oStOBbRbTjJdOZIMc2bslxTaII_clkhiMxYBX8CCx2Gi_c88oogRnyyTBpSz1iL42UiTzwAMxFg1MLXJuu2GKIaayGfGA1bRJL07r7D-SgJjdpMeJ-mT7y1WGcIZtWTgyJBPKMET7K8OpOfBmisM6gRVbFEdDb4EP0yyUhTTxcXigKyD6tinxl8sUyjku14o1VdwfR4Zn8NTeaEN7oAllhYhNjZPfqBk4mHs66mDoBwIYqVt5NFg65geSX2Fs6FotYzyWqgcJeQY2lljW0XhPMfpiybP6xdcmDMCLR527hnnXF78Oc3J4qzI1VlS0BtSq8NQeOdNrLG6x8m06A_OUZxBzpr4yERXtLHA3hV6ot6DgwJ4QSQEa9fleCWkVCkqzE4-HNf20VyUYYUee2i_ggTCYm0BA16eWazaXsprMHtsiDWd_PoqYlroaTIQe4I31XsQu1FGSthPCgJiJjyhBmFD0O8MRC09fzA4XBGitH686GaD3aRZ-AK-Cu8yXY2pkClsudRdiKt5mv8FTenKylRl211ToGBo4O4lDKXIWN7ReSk0HmsWKVNZyPWn-zwy8rJjmnODXLKTBsLvk0nJYnQZIUkz-M1z0TvvGZpYdfbhL5phJ8DVTf-cm-1AQlxeQrFkIo0xYxBv2i_aqyFc6ippkdQ7cCQIiF6iaD1wg0MDGBkPtRPdvHufFyWj0S91ArbuAmeo9d3Vjo434kzJgr_stV_c1BuujbFxOVBL1kvvvZ7hSOtuhT_fwxtSmFWCWSFmHjO-YjHQnUjpnxQ5bwsPwr9_LN3JreM3UvrluUgYPpdXAdZ4fgpI0AmUlZc0W31LOr3QiI_Ry_mf2xuHXxxAiPSw6FJN6InC9nICixRvnfkqMSL0QAlXiBBhSkvOGQR60gf44qrlwhpA9O-jZyR61pLBh1nZiJ59GyOk5_IOpDciM8bRKJsaKFD9ewsBZA-WTI_yFsFf1go6EPYBerapJ3xS5T5YOsmrieMyqq6puIfA1M-2sVArzIX5-HRrXkFmmOeOY_cp85g4Ry43CpBnqgPjNsC8iwRlSep-6O0y4YQAIw-d13SxRcbtAS3_AhDF7LrDF4tj0EzWTZxC2u6SrAjMOY-BDQgEjmgRa5R1dhuFxy3tlYUQSjruuuNGjN8QvF_510zuCGqljc0TP6u6VNbW7szrSPNAP3qjRdtwgB14G-5dwZxEnkempOJrIrsa5SR8CdP89811eWMfkb8FMRT98W8BdXeM7eQ4pWAIqtdhD1NThuFriWvpyHuPi-rrfTr90Ve0Tp2Gi7dSOrejhYi8v_O9xL16iCUq_CugoQ1WaqI5yB7ILheLnE_NcvU9HkeUOtqKwjIarRmTHKuSBoMTNT7GnyRK-SH5p-G3OWdCnT0Kx8XeNp2FYubUjsPtaB8Hu1HZEJdCG-2Hg2_c2LkAxR0CyAgnZXrPPIfs3Hw5GVURjiDZOOPKeEx2cdMHWNrzIOZmClSPaALGfzZIgCsVFlbeSSFaZBAMjefudUzGb8x97TfWjXc9b9_5E-CYxkQ5HlFSGoo8or4NLOqP_1ESZ8iJegw69SiVD6mvwV-zHbqRYCtSLcJGcUf1KpQhrwUVU9G2LQpk67wPE1bHTJCetzVxayFgbanrTw5k_IDDJbI5R4N1krzzuCLc_SHBLf-5--mU8uQFOrU1MpJuw0XAdVV9qE4gBBfwaHI9F9fditkTrGQ8V0h9qfk9XDODB5Ka9pgkzsXlfHZvpbzsRRZc6DJnpDnv36saQOnpEz1dnBH17Gx0lKqvxnIrgxOsPcBC0QOjaTwr7JL4zSlXQElRmiDAWrkCwc3g0zca0YRIqllgD3K9N-7c5Se7loXKhR9MadrlfhxXndgYZp4RW5FL1fqYCqyqZypqA_JgYaIG0MinD2xfwTzFy_Xj28HU-D57aMYQ8UD28X0DkZ071wmSDLFMZN4ihHpqvhLd5Mky2xjMAuQSlvIYcd5sQKpdsgZfYSCfg6T_7t1B8vvbQQMP5XMff5f54JaIfwqcVy8RGLhUa3neTQLfYV7521wbpaPwYo9df2MQ0EY8zktrfjFyLXHJJ5OSc7C4QX8XC9Hbip7HqfJOl2noaPq6aljav97t_aStv9GqorWsfm8wohCGfBJyzBd8kBlqhn4dWVbTAqrSXQeHZV502EGAYBgSzbX-NxNDlaB2VCLYwzhuxe2m2QBZ3yGpWzpmWOIDnLfEhLeiiMz8M5RcW4r1NAVxOTC8ZtHY8Zj9wNkWIbAUpUGq42zBmK_-8_w0BhrG0q85inbw3_foKk7PKG77FH01TI5Yncn7TMLgWWQ0Qn3uIHo9XBGdY8LQr020n0_NJe8Ucm281VRBZRypKv6N5PScKv2iv13LoKnVPC6TWboUm1WcWp8vbws_rA7AG5FfYas9TGVFjpWUbln3uPQOvr2SidoAzZ-chPTJQag72lml-acSRYBsqJTguIlLEcqQ42DUEOX1m4mQ3zjxEqefhQJjp87BrBFx8qmW0VZVp69Jy-QdsWsNvoVMqJpY3mg-aG4aFG_X4D3afM_7pBE54CV5x5OSxTTnfipnr6jU6fznvddFIHTU6cXSp58aYAoJbPAOmLwX-RXZTnEhV1CpmzaV0ahU4f2NdQbAjKw9ZlQ_Zygm0ntbmO0R76m1cHVq9P_tqT0wrxicHWE6tvvV3RSuoyNzDLI2djAjRZs4OwoCwx0W2r8KfrJxsoPLM4_sfm_UBuDkzL2SoeNkxVj_NETmpZeaF8mtzwB5NYsFh2Nil2XMFv94VQJxcec4UAYFRSPg8msAXETGKqa9sDSBlnlxAA2dTHqKguXOsqU-119jcfXqwdRRacVBIACr0wnoqcPTlS8xF8egwi7POLg8BLzy8jNb07g0jvg6DMW0HOcbY-tARNqgWKHybTe1fUcMILFJL1Huomd1xH95CVgZP38Vfio5Yb06Iq1wTU4UUyu5heBjnv9KT_L9Hs3N9yiRhUUiTOgakAexLW6av9-ZlGsOZwYsQ8h5NmvbYy7_XiNvkA_WEVuWw1byXVcM5Gv8He-Yt9Yg6yX8Kl1ic5xnpsF76LkNx1EHi9Ezzn8St476fCTPEPt0Duf9GbcQduuyK17ob_7V1EHSSZpgrQa7IUhArMehcaY1ORl0RBBmv67BpAJ7OX83VMZ9T2I3sUISCN7UHK8bfYUEcxkglpGsi8DZ4GeRUY1lrZqwHow-8eK1mRDjOuplgubXi_Ir_d8GnMoPmwIK-wIh_5HeJhlyHRsuIKnxtrrPfR9xYiCBPZLL-HrBp3ugPMCP9Iyd9YE-G3P7JCBbF1Mq2_G-l3aYNMV2EQfSmzNMjSI6gIfaI_4WLe8mH-5d5TiMYx36jWNXwzRkkbkAd5HHk1Y2UGtHA3uwYGjN6aLT4xOGXNR9TSajECvfZiFUq8K6P4JTQ5fzEqUtKTCcCqbv3B498Yj-4OLYaovcxbr34uv8xfOuJDNV9e_8UXznwq3dn93R_NFCEEk4I4trG3JClSVXhhSwg-PdKdbSOo9PExImmoXty9kwUzvA8XRkgQFy0ELEFoFkzcQTiAWrVQLjGcS2mPU1ey0GUhDrG3xg20GT0uZq-XEi2HHQfmhzTMhJzEYEjEnIrixKV3C1el71Flvqo1sHNxW4Farh1KfKku0KcSru_1V-3HRKLkaRtwI4vTWYrZF5gGVom0-OsvlpldjJBjtgKZfYZSgTrOalDsU8lO2nMdFRvANtR6GYfKSWibCf1Ka_qPIJX2-5liagHFncq8-MZD_kOHn70zx1eH6SoJClH0TYTcYwLxHjBefNTpPxbboo94lpfe59KTivWLnF1dlDvAim-DgpwfCR63F8Y_d-_Vc48vuGRspYQKT8KjF7zKxKsPMmnwf7F_OVm3dUVRakF6wSyJ7TH4-qGZV6ik1OQkV_3Pg6Pl4qm8U8wvEHwtj7cEKXATmtoE8SyqESEkH-fdz0bjDmkEnU3hIKpsHLi-YU7bUuJAq8eri7CMwQYajyJrsTSLcaCETRGNUA0ZjtUIN4ny0Ka8gyPTROAhfUmDIXBbs8hcdlmVwOVXqSD5ahgRdlpCcM8mgmRcaP7DdKZ31oOWcjl_AeEvC-x7zCuU-rX7QWfB30AXRaCNFGpVK4rGOa7mYzpJ_701tiZgKW0hVnPqb88H-pK10gjHKGHCi_AKu86hbYbhoTU1z0uwd7M0iNtzk6GQr7tVCZNAhg9-xtH2f7RtFyrBF6m-p1bZoF0cEe3PgBpOYVrup7fUlwIpK-ta2ay-WSPwiYmcbw9OiwSeyMDWzmQjal4OenmJikgTHNhf67uWD3w4VmL0r6EC8gXfMDXQSsGaPOPnFbwZVsP2Nnz74N-BUkRd2c_imG0-0Ny4Cz5xmZSk_W4QKW-u7KfSkCqwzIZvJ9Y6_Zd76vnAIUrMePedDGILU_7a5myjqFziB1wT3H1gQWy9s5GCMYPrEhr_wa35CHknQY9F1AuKsfTRJZZ3Y3-Ys-8hfRFPvSYZmPkISlEdQbH25UIoJld4QfLWoOJJtyH-jze_oqP6ZhmnMVDm7X6ujXMS-2RJT0fPR4-OKRHkaxh7WTNYM6DIg0IyDwc-WkcGOPOJp-gCDaBjeBeMBC-dXXb6eUXzAcdGFGnNan1Fo3CnSbDO3IjylNzEaLG5MMiekAXFWVpQZOmVpgvPIASjIAhgnuhUBa5p6mGercDoQwrMxSynixMypE1iJVRBc1mv_0TMugBg5X7BKHf6Pk6KfctutZvXZIEv3E-66nUhjwj7W1Kp47qtWW0zZJqpGdgokrs0YCTmRzYd7J34XKLf294aU8-24Fi-C35S51ogY4i7z4mPRc69z9kWwRQ3r8WYaojEtyURgA7EtAkPxQO0W8EGsAOecKqep7FwFubzjabiGJmuCzIItfEfe9T_OBfw2riQd5njV8311TgFYE_RILmzH8lSuaMMz2U13Q2MFaSYV4XTwp8PnbcVWsQd7wm10qxX5njQLrpYX29V-6uJ6Zl-ee632xzsZ5ukFtt99Sv80rupaePOcy4AXUUTaNfAhiRb3a8kN6RKIVUPhVZlrA8InwkGi9Wl7HMnVQp0VQySnexNUGEOkX_hzsCj6eiX0BrBgi1fCq1ibKa2iP-TQOQLuoblg32L85eA3vgYeMfnC5dMhSq-oWjf7aSGcj3gxzRHfU_qabKZGf4IfOx4tHMz2Rf7t6VXlatPtbysIbPXSdPBgnVs3A7hDw162l-tdaWMR8ZTQaV--4Q0wt4iMMco-xR8JGZG9oTQy6oBl4ac6XZ9ZkHL5eLfwuWlTnVhhy2CMnHoGWw59MIxWJ1Lj0Sdms74jZT51sZduUBDAcDPALsTSKq_hjffE9lbrnlcSCPrXbNvHqTaer2eK29zW4PKjRotaxAak1TqJm1p_kzUdEMaefaGN8s6sarHiXyNRqh9p9Chop9cvhGthcuxiB5ZY6HhSjuNVmXFSHVRpy23KtP6CDz7mCVuZR1vKWt0vspKe0U41dy0M211jkJxizsTti1c2rFD-iH69J_xhdecDKWV923JZtiakr1JpOSl9EpWTVjEyKHpAPKyu_pA3cEd3kztzB0PDkWf4S2nzaYtE11N9c_yo8UQJg2RoqF04QiR2RBPVeNlAvN3uNzAFj1T2F4waPS44iyLBq8vbvwCcyxeg6SrLQFc-Un69Mzd8aiM9TIL6mhEP04uFCFHjGJ4zdjJi98Y8iiCzdZ3zcUX37l4yrwER37LlO6xwpSiGd2tPrzM88-4RdEz3EpGwUD8XPOAgBSCRA3a6rRxISDJghVNsJTjbf4rO9LvEj9zn1_z9wFyJhmuAQV8iMePhZwsj9Q4ONwBnTxt8FpQR6lllgEafCx6WF6QcobUdR3co6DnRS67YVPuRSg3sI9Axvp0iOQ1LN51SwsC9kkPKfQvr5bvEEcUGGgre0_DO4XtbIbJWEcB8BnEIsDDSG8YfvvgC1h6ve57zAr1JOFTx3Kuw0iP_rW4LGhftZX8b97slz8qlJMdwO1PnY5avrFihv8bZPsji28OLra5fFr6aqUoKgYV-aeR1k96OFZ32FkLZAKgdp6kwrrRJ6HkA_eHpC632IgSMg_rmVF4GmEJb5wm2nonEqCdzgY9Ww6cCcKPJ_D6RHVlJhe3QfggVOAUGJtVvHs9Ezi2K_p_gmnzu6rdoznUmRqBiGWqYP3tDBxRj0RUe5azEYUQm3LPR8sYapRpTT-WHbuctKwWCSN4indIWk0yXm09H9cMcbeMP-mDGOaVvnKc9DVTYMVQ1Zqr3n8M8lpvfzB7xcNQ6gh_0K-OrMQKkRRyOXb-L8RYNCFGCSmzSU75mwHm0aDaG6WPAzJ80YXJUc1M2yLyAWKlkLxWH1SXBYh7H4XapWHLAwg4Dk7WUYe2MEEYdYPMVIHyP_v6M5D_6mpGoqP9O-j4goGswkMB1A6kT5C0pJICpFhvpeTy7TsjCh6Ir6AQTJ4h2dC7XnNiexydoJjoIzs6bj7NGppGQTgMz1YQU7keOh2L2NPTb9v9HGLUU6NROApX1HC7e-lz6Yz7W6-lu4ndGyAX7kFpwzbsSGMP65XOFecx6O_I3n9wZMigXrj-odzPzZPNAWu6jTJOx535COYr7rBpothQy1FnB-lB6aeBr71XQsjELLuNMJBsNu5mxnZeDyOSqIJFVLGmET8Jb7Q65dmM5OYik_ebOa0_QfkUBfERbRa3UYrXKhbaR2ErW6B_o9_Lr8GIHaL4u-zk5bzsgiU9AbtxgjSOmDfzEIMOGmBl0dQJcojcJQbSSytAim2TA11852-5YO16VqxeChsumkg8XgxHenYcvP4PS2HYIUhf2-h3LX5fWo9EHPkD_ZxVCr7KYHkUN7HOjijvwdRl0u5o38LCFBctdJbenGDza2X0vzP3wAmt47H-x81-axWo6Ios5D7pP9ZF4_YMcvaqJy4zUL4EAxk3Eu0Exxwt4ntSszTBKPxgCjSP9Jm_kkuZt8rAGDRx8P-DGs26rACjOiQFHvgxTrFqCHh7mWUMBbhoN-e0UeoUjq0ExIRVcqF7wehNw-A4JZ941JdxT7BjHTUcmDw4CuLcFdG84rmCET5efvTi4Ip_zDRImKsWWsrHCT8gv3Kf5HvZH-_LuyMA-mHmqE7-KlZTm1fHyogcKsOsk_xeH7NK-mCQyT8WnS-Di1hs44hr0_hVSJxMDUfrUHQNtrblvOmeytIhxQ3dViWxgvA7eArfsu_DeUQYWG4-FKG6nwhAvXDGk4CdpvcHOLR-BA2bZPKWcDq0vxRvtAA7bMYVnxK6908RKyb3QTKkKT4drbQW3hrG6SL5qr0gJOteWf0LCZ926221_pVSlayhhENT-D9x8BRUjkqItp79rydZfnUwl62Hz29YSIcS2ce7GIbJu1ue0U4bIDi1dE4wGnU4qzsuFaAD68EQdB5rMT-SzSL0lHkR0vdqIT6oCy9mJpSD8yz0r3Dv6D42k8BR5At6SbweBXAbuzfjoykFVrazXsH9dRTpyF78HOZuctt8Fl5N2PaDVexVke3O7ls6NBa9tmiZjU2IyX2YhCZqgsfUfwPHQdyirTaxDIiiQT4Eg-0eXpv3QTuAP9HrF-y69S5dZZeIH33VhlhPrRmKwx3TgfiAbGa-qttrkKX_LUfouU7Qgfl0sDrZzzMfQkLC52_6YHRLHu62kqxW10iU2xCdUZC0eHqkmiivXrZKwnBax0wAtAxx0L9ai58ZZYuMDwDdjaB5t8S0mQe4sByCJGOW2j8TWWDICZawQl5gO9qqjH8t0vNxKO3TwUU1Sl9j3O-gOa3IJXJUufuPq5JdmCYOAi1dB5DtdqmRysr3JTAhlLX1WbGlwvwr183sMH2A2e1rasWwXEsVu7yFJiq4px5Q15hXbScB5oX206z-084rmmvY4rp25SwzA2ijbgNq8vmiO9WZhcOoNBsQZJ8ZojMq9o2XskjqIFooDU-GhrSN09TpTzm3G3YTRF8DyJH65IJ9tOtQSebRG1ta6TXLOvXmuTADaZzgzdUxcE-6RqP5AD9qKD_Wg9RcE6tklXEqKGzUMRCOcm2nfO0tS4NxqsEwV53Gfv1yUGmi1dOqqMpLd2gxZ22FF9NEqnSH0IvhkgV_2CMMKmqRv5N9CEnCveCcL_Rd5a7AdMXSje3duG4laRqzfjwN-orMMNpuP3KCaT2Ij9Hltq_XqAbB8FLNuPA0E4iRUVpi73CMaxkvQcnbjkf1uTXdEoVPhcTEKlblDCCLad6HeW4wf0w3s8-9AkexNceSjvlp1RWObA7E-5ooc7NX8yf8XdCBRxVz5JIZIZQtmzRuPVGwMFFAFzF8d5slxeI9vd8DeIN1PvtEmvsmTUIGoxCNbOfTniDEboEeOCgyx7JgVQeMzvsiKgV0LzzMLIcK9mQtQW01HmK7Lz0BVHWVMML9M7lFzxOJGBDyW2tvUex4ErIuhQmUhHWecpCa6sXTFIBhC1eWU6rDuEUyHTi1eO9fGG56g-w-mopuztO52sMfFNjMPgbSSmaYy1r2GHEx8t6yJ48-EYQBJaWgQxgqdAVhXo6da7GVnaN1Knf_voFhTR__TUpqvHiqMeKs0NRIMNT5c_g4GDAdCWJUZwui0efrsu5vsf5QYBkJVXI62RoEoKRUjXYTk_e6xqrxI-_Fx1u7Tn-jVPY7z99lL2gAPdBBJrsQoJUXmAtXMkVrdm5o-up0Re63QmYMjTUDM4ZNJFJSa0J3kJ-HXlcYDeNWTfxgopW4GGR-XZHu5oLdNb-18Em43Cmoql0qFkJxTAkUK4prgpc5NoUzpJ1_f35RL72zo9FZX-7mt0m1U9n1Xll8_KbzkqHi2aOzw6FtQwnF9JYvTaXjTcP1zuTfJhfY5-Hiqx-8sZJ9vK2mgHCInT7is2JEmJ7YsyjUn05HP8oS8rreB8sAvEHsVMjPaHIOusz-KC0jhmAcXC-OgDgFydBatEWRMYFYwUqV3gbg5ygQE9RPUSAj5bxsFD_Ei5CeDvENSVNpJ-ZLsyUW6YxAnObcildTZtjtK5UOTCYw0uZbDcp8LoC7LRPkmFkDo7J5cu1iVMaaP0GPGrVAUjDJUcf76uufnyH_RGarr6wX6ht29_rY3OtNh3jadsLcrY5SqOZOqbzHRj8Zqdh8s6JfWRMWoxNSDmKP0sgXs4ESRN2l218woeM7VnEI1NekuMUI2xau5aVoroRWoTBOZXJGb0sBu50CAlVn0keBMEXg5OynT5IaFfIlPQGPPhlmvT4sCBbO_ch4dek18hcVgcx9_xT94MvNWsffLcuqhn7XDBfmu3N61Qh3vWzuOBTq_Wz9jhNGZNshmwM5dAAXrlcDov_YDqut3IpTBwMjxQBjDMcm_YJ7cak92EIRLVjnyQv1_V-BFI9ii9mAPQWv21H4XlPjEfj1d97x1T94cLSN5dGkTcoOSwaBcs50Aa2iRUdzxmXcU4HEir6-sLb_0P5B1eLrDTDonHfyOP23rFhRHLMObwMQDR9mCQUIntr6_5V95x7g6VpSSbTUIzX0CKgDIJowDhcIPBrtGx35X9hVsiDUO70jbVG6B7FF3sskXjfUz8NjX58z_5qmIjrqnW8Ijaq65ojjM293Mqf_bYFfdmljU9ufb3ej5f7skbZYsKK8_SFKlJ5wpm9pJQSSUnswDDcJbMDIrGOCJBvEiAATkvAKvuf30WM5Qjpa_9UUDj0FYa6j-Wnc0KaKfRspcQUB_M1FnFQ0kMkLEQl8UCu4HX1LebFF30fAN9OyayDD7JsUARwDinU2uhAYzbSTLwRkIDVUqP3EY9Jff9I3R0vXWtgTvbaYbaqOcXM5t8FD3JY4Z-Wd2DCQrpP9fGabl5njX1xcVQOZ6sD0j-XU1m3KdKjx6dcBFbY_1Z1Ll8rJJV9ROJ8k-R3nK1bCOhtSdFeHBBz6gvJ8RF3cXkMbr_AFw7VwVehmXz_eH-OOktct3q9pwx1ISzkzZqdNUZf6MDR_GhpF9IIHtDvnZ4lKc6Uov56xxk-XFdn45EyLRXyT1Ssx6LrCqamo_zvGp36rdVL43ZrzussjkuuPryNGWQamU61nmUvjD5EUG7-jUdIJIRMKJ3DtoZTCghOqmboNaaEI4-1RyFNuEh1xh_PD-YAz3gyQAFIIq19iAD4Ntw_Qbp3jHc8DphSk7YM9loqKuv5nAUpGJ2bV5JDZIT33I2HdyGMUBVS7OhKi4pMSnQF5sAre55oFK9RhIaN448lygFUjptj-4ld2d4SGGgVom6byVRyVIZ4Kyi0Of7RU2dRThDUtwKO_aNu8_IBf_p8WFn9TlgzS_5wQnoAHXuimBmWiT6SM8CXj0UlDFxFy4r_NEq4vK8_N9o0E-d1hNDu14OREupIylzxIpoDFmVSyxCINaMfykiD9rIMhqF8fv7ha4NzOP0Yz-pidunRKXkXuySrETkLE7KXdIYT3ohHBB3HdaFztbBmO3vN17E47H4UB2WkfA5Tx8sf_tShoB7lFfrtpTDzl_2rlAOvRuxnzMsxAA8ta5TVvXzI5dS_lxqoxqP_IhxTHZg1TiSRHlMwJDdz9CaKgK_t-8WhhSEjJrsC7i4snE4Y7_R3XwVd-CGt5VErUmVL2h832o9UjxR5R_g4MpciFDKJdgDDyqBhIMTc-BnXP08hygYwxyu4h8VNYhVKJoEcwxaDhoX57zXQ9SSZoSRYIn9eccCtygVyjNlwDMXV4_UxcI_eQUF64UE-qeerjiQkqP5Wy3yqMNcXk3IO16qQQb_xi-6imRn5MkTn2OIZ0DdSFwfQNbETwMQyKzN4ECgF7jmDp92GZ2gcrrk-cufPzwqfAgcKLPbNGsKiyhVAKyObohmHyEh2WvWfmW1RONL-6aJbsGKiF26SYVl1BqH6mYfm-szyDluwIsOIdA3BtIR7R-cEA38RZ68lmEkM3SPlXf7x2eiAieJCo3ijJgPMPm5LZvgL6FRpAoRox7qP5DT-4ezD60yNsPIw87wjMAGJotCwUDSJ4Oa02B4wpsDg6UADeGtpLJuusm1RitGPV7jYeAKRAHQzGz_bKuPQ7IpOFt27F47CqEC7XfLWdUo86_N3LzDpAuOv-mxVv1vaVgpgTKNLnOe9oXh501LW15V39hlxuUny2Hv0AKUrVXuOG3xg64eDpyZij2J-0is6oVt61oVBYbF-8lul3yTK9nHawXunSdOFAbsbQN7FXqyscWbk6rFvBXBEHv94TokmaWYVVWfEoZqtaQ-EVvj5gsg9p-3QB4kgLxdMJpvovvSVmRHOLUzR-p5Emb0l3fBTVmTMlFEOWh2ODwOeZDcx23E2QzW43rSRnFzKMC65vQALe5k_xMV9c7hra227TaESxpCL4Fxp9t3Nq1Qm8Tb7lz4s3TxOobJ9kyWaGdvFm0sBigx3RhoLYDORi55oPfops3qb91UZ3o0ghtgavaPQo9MU-Iy3LVrlEcZkH76Kip_86ZF4XfiPJY03cYO9-zh8ajneUv7RDfia91XnZMJzRaJjpLgj8yU2m8vLcr7XONj_6I5qcTwFTMNzV_Bga17582338vCAPACo5Pv6Dcl-msxXTwGoGuL5UNpVGkx_Z8tx2rfd8IXXmWb1_O9bl5CvIMbTUNICPOWYPqyRzChtgdOlG0LHnGyXoBuW4wlRNltVLhGGdlspc25WFDmy8XssAMyq0lP-0D1HETuPr05kbR4GNrw--UTRaPeum3RFjW7HUcUixGp9kM0XzdFWiQvEx7dlykzoZPWudmZJQXdovFtT8Dfy32l4yei2qtkLEWL8E6OPC-kr0_5EMxwx4kSlW2ONwifZyQEQ0C7jQ2-cXr1Uk9jdFpnM9ef-uzT16NK5Xuim7j-CNiPJuL_N4UHTkpY77eJQDp-HE8VD6oWTUyTQnJcegvgV_L31QPCf2S8qQw9-4nGCo7wo6x-UNkp1Se0lG08MNVhTmLZI5_KdnZlL_PsLevdvZbjgcZ_YkvSo-JAPOnmIzyhdWWMXPKXpLAZ4biJaCG9j2XeDwE1Ne6HfrUDHmzSLFZXnVCBi9E-Ki3xicem4rqpXx8zx6uNqBwjJqOdCl3QR3P2nLQeno2R-tfs0ve_SiC6qZnbqdvoYRLyVolZODOiEzGPlcmIM-_7zIVAzTGE7N1T_CAt52AzVV63pqzPQscZY9suP0F9g0m0kD50rlfOwk-jX4hC3rg_qVxgc1rg8UgtF49IQU2_jgpIfFEEcJdSQozQkBKaZ7eX3fDKOcHzX_cc-Z2eiBARZ3qnlQMZWboOpHTNrZC4D10TLNH-bnBS1xwqgO9wgrJ7OPs4Ye7GVsJyOl3OA6_LuxzE5dL9gjz98Is4pcJ1_lUbcHFygacKNh8nX0Lk7Dz9KnX5L7tyMCUEbcwfpGjEckXWxNnb695LNErE6D9gHIPOm5WVWgDdRDqpdNbX-NPZRF2JTWZibI_4hRV0UtVpKXWM3wjszz_xwBYawWpgaqQU7qcH9_sUjHPtCw4b5dy0B_DVj8PuRcZ60HBfX9lGt6nb73wI5C-zWIIbR79Rv9hixal0MxEEqge7rEJp_Rrj6esqTfd86AIV_jUTF6-vgMz8DuDkUqAx8JXsQ9caadhDS9LTc-e7qVDuTkcTRCkgry1CUZ3ZP8uDLrxJmFnYWVb4cVT7QLDUosGAwp9SFC0ZIcJjwJfMRx20rsN2VJ0BCJkK0bPoq08QLoOq5Mvn62ShmxI8nHGR5THEltFGA2uW3RITu99dAcBnTV8zl6H1IADkvA8MOZIrXG19hyblfMVrDyKYYstwkraLddSDjq90P9TuhtHkkY1v8ZbBGK-6ta08SNifCJNIP0EX6kpRBLNFwIkCe2RtIqC6SPE8lvwlbJXCYLZ8liJ_T-KbR8BDRkFJuh0K1vOq4HcxvEYopkmT4IjkCgrpJERr_WGSsMLyfdt43aB42g6YbXtXot0TYu4QNhQqcMTniaxKx583Sgij-VCRktjyB6oH-_Tkky3DGUFHuc-1FdoCaIem2wVKd7HtFqWeyzeZu-R-4zqxCWiIB4oZaPh5nNDcs-VCXMSd0CzDzoZp3U_sf0GiHVqf7u0q-ykb6CwSROccYvASLEU_olF4DJMCDHqqs-xOuHbu9OnZHNIoRsJv7JOgiprWq74AF15TbGOfFBUgZ5893Wwmzd-ZL62sZ8cbFQ3KUKv37uTCzOyuFJ26oO-xZcWjHZWHFmBIfPfyB8h04mufUlYQK1dJ4hgGajedoTveysE219mjH15IZUo0H1bVSUZOxwxlHKjXrZ5aRlYqp3z2t4wMeJbefNtJSGgFDWeVuXg8gxSB1u4pu2MXnanO6nb3scMlbUuut1vIls9wQMYBGoW51EYB8K_H3Kr82Z0S-hI54Xw9l_ajSjT5r3WTNxbVbdA18gwXk7lKeItn1oT2XKK4YNC3sCRzg89i_f8r1G-pk9Rui_bBMj6dX49WHiILCPPTEdvEwsjUekJDW-keXp1pcdMAjYWqm0JoI_7DvYxFNlH99A2Q07-xxNpmrGUYDNMC9tGesdWVNSEsNCs6VkUjXIaeDjiy3OI2S86ltuUv3LMWAu1FJ5WN90PCwzV8voDmRgZCegAEd1k_WYxDP-fUuZlcIIHz764FBu_mHEz-RwoGiKjmObwpaFnR42hIJnT_EXprigE_ljRGscg0nFfYA2m9U2SLXSQEr5S6cpYSyanaLI6FHyPhu2Y6TtjnsDau_9rNgNlgcvuxz4oDkN4YR2d5f0ImdGWFF5TJEuHUfXNB0dZXCw70moTn5TYjBtl9davb60C5KfeNkgKHuTZq38uJSROv3by7BaRe9dcJ-DpyLkUNGXF4UAca_0rLxepOZKs3DCh8xNAn8h377plfLWh8sO8DE7t7ZKemHRZ_Mk1LdDpF0rW0dCO2qW-728jXs63YezVEFLh_M846kqzXEPADmpPNfjNFUARZnXRLdt5-yS-o2uoGPlNYr7mXd0AV1meNcxmr8xPsesxjqefzZHSmTwP1ClHBhjLRTG5YZn_eBsTeU3d9MQ3NEayxONKf1r7zDRn3jIqXZKPw0hO53G1ANXMG8GV6nRkang7ZcfIMhH8ZXO41py6wzVsD1n2Bd1wyx_WNKUOiFQRtW4akgz5b24Ma4dlwz5IG-kRQNN9EdmETxbXGuoLAkE4vmQGUxWk5oL0lN4EIJcLHZqzUZ-_29a0otvjCntMe3sXn32a-TqJB-HiSE9NI1PF5162aJSMYLUFM80gRjhBRXbbkqAh-JtI9ak5FMiv8UGA3YYahrKY0-l9miBT1cuDNoVCMWysavT-nCU4OFovXnDA8MPwrWyShVEf1wJasw0w3Fza6MGWTiwYSjBakOtJO31KO10lAnqXGJwHsri_1oE7RJjdj9W3SfHJJlz_kOQtPP7c2KjW9v7w94DxaN-EXlMhTURWsgUAsks5mKb11WP11j4GumRGHsimBiLGNvIII3W1RzS0HtjQ_CJ3HspHo2fEYyubk9IV-4wDoTQZ2Rzo9xc3liz48I43ZE387RXROX7tdc1-0foK3njObCEuIGFBgzBSeolKVIGmc-UoD4wlqm-dRcaDMXKr4qFcv088x1d-CtZVBPnrXW5Ixf1uTck9GziE4daqPB6iWmZSxzqqQXBiyATjfdK6VwFjBuHHLd709iABbl34Us6mydY6IPMLZXkr6uH36F3WOo4MpEL4U0JmCW7oXYfkLm6CHBhkeavDxmhycY_GYbYdt928XoVsUCMlAIjdIOk4sX8rlzSA4qFTO1MpKKns8622XPXJVOTDCHVa2PwFMdnaXIg4vdzEQrCPZF7putxNbo75I3K9oCOSGIxErQnf0yltpMJj9mikZ3Y6IsVjorTUMYb59sPbaYjghFEaXB9H_AxgGB2wBQ5ZtrCWsiYVluuytDBZivpSqVp87h9kQa-BDkepta5QOx93SvcfZikKEI27IbVQlAd8n1sGTdUQBVvgeCpdYyjiwrn7zKiQ9HLufOjqEJuTbGS610JZCtBL7U6nSzSh77kxlMnm6JZLom0UxXd1KQuOvczSMtf_tPq6sjfuAAqWRhbfVwYpawYKZhRxp2PQbNTo7nZRBE152WqPVaAN2VGR_oHZiJt2HmCa9v3b-qOgQl5a3UCDy_oGMgStE1w3nhabWDgBEoXSb5XxeToJRVyBUxwiwfuukMqXM_QH2hXOKdveZ9FY-fKRK1pvGpNKY8QRdK6UuKymZB8o6eAfSgE63hmXlXAjidBC-gIFx8fp4eHXYpWPLPZ5fQPgYWXAu7GltEAo1njCimWejWBOMidvPw06jG4yVYEDSGpzDmEtNC_6YqAAkiDVvXjtruVY-iFi9u1DfIP-XYmhSy4IKZwUIagwhLMoJi6s4-v_Qjt8xTrL0cFVG8fG1wDSPsHChdEueKN2LuTL0yFlmeJ5xKRQorwsPwmXbM8g7dvu17RWtslZ0acjW5o3P9e1ISsd_75TZG-XZCAZCYFVxdoLsGaMxG8p59HjfaAuxfcnoGRhTeVBW344GTbSTlULL-3f2gbMSgsZ5JS6BMGLZVQ_gUk-FwVuFlG-BwG8YcVrqCbDwI3HfqvugNSqPANzFBMuG_MUnaxuWHb0kqKR0k7vp1T9Hckpl0smZgHV-GNepv653OfRe4wNacaOSu88bLaUQXrhHOxxML8ZzHQVWxPiy9dHRGevCfK5gkN4XdFi1IVJ2fuPi0-G2sLn9COYNn2Bsiih4K4j-jSb8HofVIQP8dw-YBpq5VZOqVWFanUfZBW5FerRDAN_Nc2uKiwA097wH3nP-kNe78dEU4e9GE2y3nKLm2Yr7ZGOWIzFINXDNwke6mIpj3XnLU2nC1MGAgLAMNwCQN6Odh79Hluk0FH-eBJl6a6Eow_gevxbyXy8V0UxxBBkzpoB3tQ1e6Sm3UKzcb5GI9j373pdOV996bO0RfP88jf72bJbIaFfIrsEUxT4HRg8hmO2bBCVRDMtx0gwenvBkw8HXa63Qihmpz8PkaQOzN5evwmho3c2BZAxJfwn9VLtDdGgYZtGb5K6MkbeYoY033yepYUzBzNeQ6XlGG9lPOpKK9a8eTYmDu_fChTBaoSz7ZR6tb8uT5ZbQEjETOBxaiWkE9CpogZvxabYsWNsHQkIMYiNsaBGAFSiASIwEAFlyzPmcWKP5fzyuEdEqV6cEn5MhBWPhbF-SjSpiXU4m-5slzlHICuia2ZxauSq5ifLunl2DLuNSULKkYUKCA4zyvL0PdnCMyDpDfgszqjA8HC4yU94l8e16CEPgNQY_KBR8HSwUBeVNSM-M9hWkOP8YZxKkJ0jF9eFV-JMETD-fif09NwfMqkvUOnEfWkf89h3Xs_CulUck7XhQYo_RcmNv2Buq6Xz3S7wMVQTceeUhbAkwSQfO8-RB4WKlCvp32g4WemXbJoVRqqunbglCEbpeQlcTHzuRd8w2zyMWcUn3YzzfK3fQJx8SKavIV5u81Q7T23fadQeI3QX7ePRmEn6sRpXjWna0HFqX6S9r8eADuvIPHNsCMQzHCrupCHFoEtiDF8Vo5UZn_sUVuU3iHE_lxYj2M909rvccuW3L4WvhIF1RX8Fi1Lq7PibGzs6cE51ipypjoUw22qeRsFCPV0Nrhzxp3aBdnCR4_ndi1D3maUkklUCD2Es7LXjl986w0d4_kNcvnDaSqKtH7nl3FeS2zEOP1PUwyecx0Q79KI582UM3UiRPn9fRWqtNK8Pi4_DFp_mbUZRgKpE_txUAZKzUCt148MpvJGyuRH3p3vfFtGHh5UWLVPm20m--h_ucNhpj6Rtik-pUbdIMJFeDn85_JGjmQXYwTJHtEz-63G01Hww4QTDSDuymyXxLkAytujgStG7msqRYPeQ5g614OYSf6OSxgQthzIcegrcTsAxYN0hLlVajL4eovCj_kqjU1qIu6nG6oXgewfReJlM7OjgN1Pp_OzXuZpi7GP3zl-QKcTOlILN2Pmh4mObGZOru5GT1kK6JB6TK8s97rUPfo6BlVt3ZkgY-FB07WhMrVVawCodSmF1M0eDKTVfGCYCyshUhP2gF1jWkACkWk-_QokmlMqxSC3RD4k9PVJA8K7oe53cbAOVmCzgkGqedFLgHh57oMaqarFY771jS2yzqSraNCo9uZNshIWI31f0jViVbXcS2QGWMmhSpp7pT91VbDNXfSl2vj1QXj0E1YnmxJ_m_V5kAVYR3enmfAeghR9fCeOPW6SlDrDiW_grv-R0nXUcM_TQEUQ7T-OQju8g_o9dwxEkMKXxVBNzVEU8MZVi7B3n6a9Su19Er873gNrQdl0DefG8vWlvg1_PULhpKbAkHSLvPYkWJfirYu5xyLlMXpuoYLM5UdNLtzOYbpMBFV3G_M3Yr9vXu1FhZF7y7Xx_OZOll5YiGBbIxCSV_cwhvv6Z7GOOl6HBNa8ChpHWq-BTDqrJOP-ab5bJFfOi6Gpw0Ad-fEHN6EtIO4LzoGimLPCVuk2PMWxRWFOno0SmI3emn3vGAz3vvtpRMXB8WW8WIEA2z1KBxkxAmXLObS7NXMfLJiMqUeMn9gPaj5JwoiuqJEYxKPeBWMTE7eVXAgxtTG73QJ9t5Qe1oy2c6dfXsF0IEu-L3hdgoqnMkIxRf8B_U4UfkCzsDQwcvoFXWJDe8NeVnp84V9kMTlLOntJUYXFooGcXZrXRun-fR9fqPYeMBYJire61DOgDKTCKtwogiZhy5MyK0Lirm2btGCyrX6Sne0Gk3TBkl45y7K-GglTplR5jA_NzVy-3pBolb6lWDnYhXBAH8r-exeiu2-abDSUfmMzegJ4CxiAyZu5J98peK8UuT0YR7GhZhckWhK3zt3K1Cfc4hw2lcWr5rqPnd7NrlRqgzNfNpAiV0cfG1zahww9MMSqNrvG76EbyoMsKpWSfJKG_jIftujNY3PwpBNX27aPr_EMQ1meNXCeAQ3ExAw3OqwA0PrKFCMb8DwfyVL-zUxgkzJ4w2hkCP10jRHThV_P_bdAv9jBdhzqdoeCQvjwzABfk1PLiPJlgcKzHzzdbx2fhruPyDqpfCHdjLNzoKLV2dH5o3IwHHwQyrIdRiNuJsUaf-5jUgv88ayFICsClLsoW_Z0I37JVSVvxKaBrPPNr06Tdk1VR53GjHgJDLqRKCujbQjLnDyxa_9GQUhKhbWlXnoqx_mOtAihX390CDZno5czpu7UmfabajYA2eu2BwJXSzyL38C2HaANAAqVmZhOtQY3vldYWTSt14yhvzMqiMwjnUB-QpamiKULMZtKxA7W7sB8yeBctFijOT7e-eQaKWiEk0s0DoBnYoxreedw0RxVdXtXT02HL_lA30oVN9ff8w6QZx4mikyDsDymp494L_pXj41akmvapIMmWZvy7U00Xp0DNzOlB6KFZqpmime3EUIlhEwcyUsGssFfWXL2rrF9RnUVJ_jI6h2e9EH-HHMZB662S_ZsWklamrrDaIRDL7mSbjGXs_-pDi1ygCJ681RgX4qllY4rjUVCttaMsBYxVpOkeYfJAMnRsQSoOnWte4Jss0RHXcqdpMSDjpqeAAhJG32b_9uNRNPs4autmtUehalirG14nQQN2nRFgfEI5J6s0bjYZbyH8JmDydSokKBZOTzBgNDN7snK5H2CdkVdTIRodVF9eNedE2IkKs7-ZPJAlGRbusRoJGR6y_2HnsFHJxpiSqPYZi5qYmnNd_tWsxEIMEuCPN0WVRAjm0kIleRJvT7HghK5MdXWyvfvglWiEz8tfpkHF_EkWLZBwkVUjFJ5N26PVwLl-JqbuYhubKBWKlwV5-GUcN-7uIIh_jkH5JrjGaR96nFAfsMNYtVfUK3a2-5-rGg5MlfjW8CHbmt8TZWcChcE01wssKPASAHNw1SZ6zGA1Kc2k_Zo1syHWeP70Su0I14ai19B-Dw1Rm2eqPg5mtD8gOP2JPM3QGYBkYIICGc0hVIKrWg0LgUdZ2SODlCUtwhNPC_ROZiDGyo6SyTgBtRuFomCrG2owJNkkiqUJe-SmMtecaAx0ZnEISfFrGv0t9dm7w5TfP3H2XK9lbwKJa0CCURIq2RTrTB3xmbpxrIsl8MvDiq2rRmpwC6XkWi6pY3dd8uH45I6vQ2wxpVjbv5jeUvhMD73MUqqL0Isk0YXP8AVOEtX3udrq_qRBm4cDIwcXqDVWm_EpH5_O77uCo5V8tcSgPAtJX_PMn7tk4rt8vCghzNMbRCaLIjmiPf2EafHFtZsSJk2oOGOTzHZcEgf3-UtGn2_zwl8HGGQ8mbN1QtJpOZdtcMqjD0DfOna26IjC65ZhIvoPDe7latrNj6Ijxg5KugJT5ziHNB4jQkuoWFX5QLpTbNiHAC-56BDVBrdmFwlYtKBY24xlnLQ7rzef7SwqTs13Lx8eT6GihtVMOyOAVK3RnqeSuwi9kgbZnKB4TvBbB_fGCGpyzKHyDvjRipPu549sEnNHFRpULJRi2JkcPYYsTO0V14jzheo3papuUid8igOqyojyrdA-NoXod139zfKOR2wC2s8LIinLjKYGKAEeoJtSmxz-Gm_ZcvmdAJ-2mfwF7qn_5kUfP3rLmAfTWOczN64goiZgrcnh34vbxfZDWdsUt7QNaCkgQwDadTavjym8wlaepaTcVAkvYM44HLSz2H1yAzF_z7hrDjhrapP4qkpwdX9p0wkTG2QrosZmRN342EIYzQtVnY-t97cHUL_U03XpwJhzV6s7KRJK7gJCXqCX1KKXUZr2-YvwtIhBTxwmRmiUadw9Hhfpvaq3h1LbHjSBs5oEHn_HOW-D3lmHo0A347dVSD1MiW86mWA0XXbi6uzDXa13LNDTp4m82wK6zkCL8a45a5pXX4oO6OYAYw9FBuLHvPO8vpdGaziGAii95Buqimh8958ChtSnhpmFa2hTBfoW_9ZFvSz4oLFc0ceSgGyt2hfRbK2B8jKEz0AFs0ztlfy2J_ufip1DHLB_5x4G4UlQr59EJYm6G4N8C-E1abiy5u-N_vr5S69odpSkhwc_z-fPuLZ6YgZQ3wO-fmjC-d9aOnEy_3i4hbMXvKhfSp00G1of1_S8gPbjcpFsYoC4xjAUfGanITCS9NxQButg6heqOzjU38Pt9ckfb655jfA53YmN1uZFj481irYqEUmg1QMsEZFe7_UhlIZMm3rbdp03z8U6pGAYEHL3amF7Skg_tA6ZWR423IQGM1oe3Ea01HtN7UgPAJLj5jvJsnOdes8Ka4vKQbQ6-ETGRgIXOoYd2YkDYsclyVJ-NtDUJC5xfE9uuqjIH6WiUcfl4406fMG5p79MMEaXGJcZfIpeTTZGYSFlk67RKoBoqLqK0eBnR06WNSI8q-qDPCzEUsr-TO0bKh9Q3qyBRPhjmcIPKTOUDvFP0FY5cmvog6nv8H9RcAjU-kwvtsdtyFD-o2NavvE3LT0_-tAyrEvQSGjKwJnLefn-7BDq85HQtmPhhz0Xs9FlvF3p9QW-HTNUQ3L0Ul6kqx38CjBmOdJZD0u0uzZWexvmmFe4WDO8QAWWfAodpWqr7vz1Qw6yE5zqfp97TKQFTh47juApphksOGCgJoztum85TsK0vQiTIFfOLHZJOwF9Z2Laj6THCTgyuYVfi1Tuqm_6_sJtZEycdHq6ETSiwN3kk_sv1eAEq_A0BOqMVexmc8g08NLUGB9xSTdHdOKxJ1Wa_tJoJXppV-iBvnErt5NEfmnp9VErRZfpDK_LX-KxPpu5l663s0Gt6xtcd_Pwff2pzAc5lLpWwOTW8Pbixf1HJ50PproIL6VQSOG0m3qnVAImLKKAGNAj6cV9BjHCFF-9mKozGD3-Y_kf_X777EeS3L24L9hfpnFk2JyxwubXH4gBcAFDFFrU0hXxehzB9Lo5ddi1kXztG4_T-IEz7sJJhSivjMouZGFMZMlZK0CQhyd1d7T9LwAwa0mpNzKtVzHsdbc2NReAqeGIh8w-fwxuWTxjXTBxXeQvCbh8ytpms4_nREuAFHcfD3jf40GDrTaP62LAkYwIpNxKLbEw7qo_Squo7i9vY4EPEQ9WS9YE_pXh9WkCqfx4xVQO66Qrn7oIofoQDzbvbKsHiOgzO51RsQASnIEbtT24xGfmt8Hfv_jN0IqEpj3-h9NMuUz-PPIIQexqMChKDHz14c-KT2KlufGaX_25l3fSz03KkIgPOVry6R4DbkwIprVMdlC7k92i-vRMqs2OmfgvUvY6bscNaUayF9p2PdLCfvzkYr_9V4Y3-9onqQ9vKGWrb4wdjQFJE_POcPH1EAw1qEpk2bi1aaMYotx13Jf9GCwXlrRG8N-QyPfSj0YIwKu_i0lZcuX8KxVEWFY1Ekv0oITIAUCiPo1mQqGhZsqZSO72vN3A2vqVaOYvrow7sURunCpcC2-N_rIKl4qKssNNf1bWEo16S74ZadfRyF9x1PxvToMu_Zw3LorhooBbhj7hwwmJ5IBr4AIqQ1JjS62HQJNvNQsFQ6KkzKq0EcRkavPNfH-CmkcpVeosnRy8FgysxEW4X5qEueRMxJ2eA4ZUauS9Sc3B6eURJ6DwdgqY5BQrjtpAmll5bsmik7UbBNOk8hFL7JSqmxzc00NTiqF5axRdqAwnwwj98vXYp24fME_bGZ6KaI4yyFgD9YkWs9-5SBaDptL0t7tJkUQUE3ruOFZzCHXM_Oewiqyde98vkxDnL_rdn5SOUrorfVtdkCKQMvMQzp9oZrgvfZefpKmhsZTJ1kXAjdhJNuNybhmIP7sYHXDGFYv4oPZzUycji-KKX1QAyMIXHpcIau0bLkeRuUVdL0TP8thWEqGgaJiAIPTHSqhsZm90gOyflO4nQXn9GVa8b_oiYiv6IoT6W-rOacrhV0OStDDVZ0AE68Kyvl_Z8J4BJd0IQjVoJshq8-UuIpeoMoeKzqGknMAo_IBg1Vk3FDevrgsDnAtPqZnkT_rw7FcQj2D2yIXkZC41qOfN-nNBRdn05KkLggNg7LKcBmDVo1foXVmjHBW3evA-L-UtzjcmBacx-wfLs75P7JM4Uj6UKAl5QywdY4ZdNPVnjW7qcbMxW3aNSe_AftfNi3a64zuPCgdsQVQwYu3gq21EeO24x05Ez-zrHKxhKrC8mj6Psq4McUjk2t9asG09p1WgOLQq9nxTWYxVQ2KlrI-qTsRHYBltAk8p1jTiCLQyaDDFh_zE-lzhU4VNpEnwAJqAtS0ePl0o6ojI68COqG8CYq6d5FdNqtmVpHF64JMfvctYqsbXKbuQajz_ITdbIY3Skza_skszwPJJjdJ0hTm7NfZHjjE6_f-5p96T6zp_Z1AzJsXhfbqW04-AlyUgN8IOnHAj5uwrxWcATEzpJU5UrLldpZuZF8NCwnmd1W9k4VyuQDNMS9WTKi4UHU-JW_NSKtR1dVuX1ivwf9WG0mnTSmliaCucleWzkJc4exKgZmxhsp-456wQtF1YdWwoF_GWK27XseaWerOfVSi9txW5O3s8CjJhghf31QLSdtsZDHX_gp05KuEetjX20Lw6I0hx32v9DkVWRKAnI28QoocwQe4i6PKbkcYXIo10XAFH8_vhK8eXxoFM8FP0NR4lFeQqts3LF9MfN3SrZSjCQNPT5qIx1ooKYZNL-iEXL3nD9qCAgMXNOiJBNJ2HDBFPjzdpvO8679ypuzQ_9xbtRf_blCE4H5rdI8beE3wsrhv5vD2vjj00bpzpidNuJQchMTp7lj3b5JAnGSXQrcEhIfgc90S0XziHsNpvbm3NFw5sujE0hn2pVmy7Ybu7viTjvxanyR_JfQUoHVv9E6FrQ59SLIrAXzrfK1L9rg93ZZYLoQ0q-p_KdYoqbw7tD5xqWbYTOElATpAGuN8UGlsDXncwJQoqdMjOdFkLetQ8ZZrgiUO_tZ6j_wuhDMD9Zg2Htv5a3jvnKcVix3gHZHrwwA8taab80JVSIrrXM6-NffVcHe5R04gVtx5oYm5iAJIecqt67nqso_E-Vd7fHb2VnrncGtExUFYI01IQW3dAS4CXlV5jTwEPo6f1qzIlHMgQ7F6nCoWT5bgSNYS54-jowXzYzVC5UtUMcGowEr0Qbrs2Sij09AjVg7cq2XvWRo7DxaptLBipsdQjErsvOf6NvUmHUKuY14nkv8hyKRQOWTyNg7ALkj6ywSa6jH5YbdK_Q6hlrErv71ZCQZUkqzUle9rz75E119TlSVBFPPihR1AjhFj2GUqnov2weuISSh2dBYczByYBes3iZGgkox86ybe1HIZeoH2YTaaCqMVSFv4wddx-yX-FCaZX_g1D7ATddZ7M10FSLsEXSjDik8b8rm7o66D7ssszyoQsnScAhnUsczvn4v4ic2IzDCT-VTHLlFafMFZUr7MHF6LiVOr5_O9q2vzWittfdfVA6qfsznIXtJU7MBTXzEGh4KpHcaaBQAL3zLg4W4nThd_3ND_u_gnog2gSKZ085LN7QiMZ29BO231jmYG3ozYVAnuJTidPHPuGPO3Pcxh2l8skx4R_zUB16jwv9_P5GWviAruTolsSRjT-dLoy4YqcHXVIYgDE_hhiof4wnRoiRjfwzhAHv_AWhk7MCg_lLYIcmqUlPq5Aa7DL-jrZLSE3ABtfiJd1CosG7H6_WJQY-6OetKGOeccSkH3rYEjqIzFqowA2JmyR98vcmc6vK9kcRt_zaMvxNTxDdW53346QXbiL8OSY79KZ8tZOvzdV22Y_nUPQpJFFwHSyxsQPtu7_oms5DcPDEPSIvB_dINDW3am6ZR55WaJPPBUmV6e9zgr0ZHiKedO7IC80EX_GhNd1sEwiZZmoRkM3-FT3s77jLNnnat0QVr2AbYmunVSniyH80hDd-2rRxCe3KQzckJqq82sYx5d4DXvfHCUihKOxdaH1j1dAcno-HgcDO7_Wo6hDiuuCKSahjUyPVr9ndHpF-H4C8Hzq0Y-mWCKNqc5SQ39ajZVcOGeNwPqpRNryc34aYDNhw6iJV0oDnbfCyxeM8goV4pYzbweshJ2IFENojCOkq-CNIsy1TFDKBBVPoA1NBNx1aCKTFl-tS8aliIyhwNGjEHoZvgcsTzUasLRo6adPOnbb2Zv8Oxc0H4pUvaWmvPGNy0A96wbs2RiDbzRq7_Lr2adAZvfLS7yrkbZPQtikBrCqhDz_aJHWdT9Mk7KUUNfTvQbD-qPNDQxexqfKCqcczkj8y7yzMQjAq7zA0dozoc5sLb9GkmiZdMO4hCQfNSKaxRMfG73BHOMLxyLDcmoN2xgeQceVAaRcL9oSGLbgIlTR8V-50yQPOuGx3S9Ja3tgIvivCtUi4zHYKczv6aLKnxg-OsQlDYgUojS7GQuiJOx_6kM_nntCJuLQH8rYWQt2pyaFMEuLUrX6w2zHn4-RNGM5LDjRcgHGkVm3szSnK2QD6ZDEzHIV2syI--fkMeiqf9cDO_SZApIsTNG0cXXUWQoChpKR6CtnYppqirfI8tPaQl8ErqJdBbb5tpzqpv4dWOWR3uL8t52izlB1hS51yBlBzqdjF3Nn2lMF1lBkV2t5VwSDbGNswiu35e85vYF2z2Hovphuayj6fFkYetyMTLVCuuVCIefazOZzEbdoQtM-6NkMYp8lYUxQsWDjHCMG2YCmVAaMSCXE5VJ1cxbrHQpW7c_TGbLt1NOBXbd3ucktMC6gA9bAPoHkr-oSoMBgP3o12rMsYm5vIfrf3HeI_MeeXFsR1yj-I8KKKeuTJ1KEqWgMogbmfxFhlU98LDCSyPLslmNR-6ePIwkWd3vU7bMtZG-f31Ig1OAA2HXfzPlBhgBb37oWDl842PIm5KlcQsN2mWJHSKE_p6URMPMN6SbomvDSrXA0vJH-p5tKgZzqce495WrNJLk0HdczeJvZwt-nFEwuxrCPqICoqjYEpeHXOs6TT-bnltzcNlQ6RvwlErZEdwGT2G-EMR89ApDj0bJAJKw3pxY3i3nvJSdIHWXE9x2BX6pNUvFrIZS6EgOQP3N6TfjqfbAefys01qBKF8OzZ2dbwoCFqi4WYlqDez0h6lDcrPaymipzeLl3UYF-LMwx-Z5Yz9ueRnDBUTZnd1h1XU3BoHAVDby-UU7X9gQeYnuwhPk5tEAPlM3osYKsyf8CDRuEyvOxaTLsDHep9ZCqQ8cmyW57etQZpXRRKzuWU79KfxzEOW9EzT7lTPEbUBY9yIoAjbE9yi7LfGd6e5UrzcMGrd3L8RqPCk-xRbKREQgmureJ9CvCff3pTaRRWjYgMjena8Wl7cm2T1AAZ3NkXbBjirNS0glAy_WOWURa9k5WySRg0qfI2P2YOF98lwFL7ydkhQ6IRUxh1sTX9yRdtW4MgRU4WGbzd6h0XhDBPU50amNQg11uMnwD1LbzgEMSFZsOCI7BHTScZNxSl1numLesWfHraFs5qyZiygekWMUkLSRbQwOKqLIohINVFjhz1LbEmKBy2V2WQOdREZbiItRiYvyX8ELoqPCA0y0BDOnO1fYSo7OTsqnyyPAahXxmnXu-O7eCF_2yuzaGqxAlVWZkVNTxDix5wWJ5pgZp7zRC2467TJIRiQbLXSbAVETBjkV4Y4i6q1teIjnJtYcz9RdwokQCgOFZ7lIG9r1WI2l1g8zLhgUjVGb0_eGKQRSULub_1OldzT5v5TixW4w-yzw5EeOWhJpcZ8oYxpFc47JX0Rh7Zgh1Ei6McOxv9QIswIWFLL6Kp9HpKsnwjsdN8Vl5RMJfoflkcZl_sMnQ1QaO7q7Mmqzi-NIzUhgWlYEysQa11TOUaL-Jebvu2MSuZ6sGoHdyLfGauZlkEpwIC76mGZ6URkOSu9P4TdE-8QNarWvZn8-E-D5kovAgpO02MBuI0O-PQSK6ApASsnoyRv3mOYISE1Qz0c9hcEZqE1Y5PCY4h3a4hgQ07Scsq-BxBe7EERM20p3wvJlhhSvgLiSWGOjleVmwAlX0xsPdMpD3yNwJcuSKzbkCwj56W8AiPbKrwH55Tn_LES8eZtaHf7jgiRq5yHXsGn6d7BQr2O9fvmLtjnZpP23eKdE1_8I03c8HFWzBxL3n5geEDqsmlT-7yMXktg-BQnCdVk-PEq5xGd8MZMZ7_580BPVDXNR_IpzquJRoc4j4-eKIRPVfJQ90HyQb7bFybGSYI2zWiQjFmrgWGyMh-4qgKBf65qpFhHHwicyOdXNwSl9hT6BkbjqWFm460KlaW8KNs9S0UjfbYCn9js_2L6mNEantb4IsmjpITmrxM-ROp7mFcm4SM30fhOqF5Qq6YxCdAkodEz_ghSxPqm5KPcprHuE4kAcTveYYs7v6urdP07NjDiAXuwmwgN6Ui08XIoG5XLd61sYD0ODcbma6qMIHig6IZj-AI0y_rgu_J54ojbd70Kiv5MRSV3hw4csNWJkeYbgnuk_myMAGj29Hx4NI9GY8vGOf4yDw-XP5eHI4Ce_gMhICr_E9qSWF2yP1Nmh9LUF4iLb6btWP45aujMEYlFg0ZCo0GPhEbgNZ5AIjjlj5yPm8u-BnyxIFTMOWP6LnHI73yH39mN_5Y74qidTZcQDWlgHJFrkCUlXivn8Ru7Psofcxs0Cxyz4Z7MmeW3zs53GuyLymddyW8tVA0jJF4o7Bdpqq3U-VvAoyMAsGnsy7Q4LiR2O5gC_iPRFqTXcmEv6tBI7hhjJC3ZT-DpsJ_HM6621e3_yXmecobX4-m8591BBcL0Q8fnVOWQ4hznFnrqmkMSrB6iJobqJ6Aq47acsEtoVo-zzUm5rV6MJ7aYH13JesR-fAZZYCKM_pZwLv6WCJiLFO8eue94RaxpxKFdiM8dJrv_MJggnXQZ0CtPQZHCM5KAfNMe7d3SNQH1Wi1iswUSL6Mi2F2QP86HMFuXEz0Eu1uQ42C77p_CXCeV3upPtnvIJUbG7zmmeYelOXulTvVFCSSnRXxLmAMF_g6P9mIhZO27_e3x5UfvGF0BlrEWRT-Z0Lc2s1lZ7wb-a_MIhd4aQpaA0gJo66KvMx90-edhJ0eWvYUcmdsxTo7n-hqa2xAE1eC_lB0kqkD2L22ai4CuEF6J2a3wj6mJ750uqnIstCxyWkZh9E4U6xqAUfjeKt78eX1zsbaYo1ud7jawqW-OZtw5NTCnJOFccFr6UWLO1TG23MZ7zSbx2SiARGEkd7u13-w3Q82EsG1HQk9MXANfXYNYCx-EnARexZfQZTXrBsUPvFIdwNBVLzmtY3mrRLQ5PbMzQCo5rKkZORzxL4FEcr3lhcZPi7jzKbRxZbnBa6NJhNbNsb0QcoHofY2cZ7U58g6Mlba7lrUmJaMr0-lH_-h1YnyNkYAMkn5MNbDiFfyATf69epMuumjZtuAoXI7Jg3WycgyyX8YGWSVpDQ7NWxn010_RGpSd6TAa6buZoVIZY-bXHbn1bZr3RXmVahvd6IwWiYCApntmrQi7CO79JQ1XR2qXrpnqXR2TRMiCvN_hutHbg4680is70TKi58ah2m7izI-yelEJVPuYV2rA7H-37a5D0QtYCDDBw_Ykxwae1jPeTVai9CeG9j_DruFVNlMYh8AH-hu_OiqiuO8a0t87VLAWlP06Xa4GDdfgXTXKDIoM_HHU21xZ5h85lDqLyS8AflfnRA6aOI9beYMbAOB_uPwI5MofpMGQ7UoyUgEOkInEz3JXvzo9pfDyMR84GmsmDyOpRoM_F1eK-WpiOxSrnMmr8NWH6wx0x9ulb8IcNQS8zQHMLLZC9M1RvtYoClWr0rDXCjZttfXMq3FX85vEFsY6gAfH7dr5ZdpO12MRADT7nkmQJhEZ0sMNYF5BDQoaAuYkMbxfrlmIB3lL5M2kADwskWJU2eIY8wkBC5OEAN2uKB1qJwpdIfGUDeQ3oA_nItbw4pVhL98Osya569fJSjfzm0bsDU2EVCAi7SHKrXw_-2sgavn4FKZ2I6Ua2D5Z_7wFqVRPIQ1oheUtFbAEucsd8TkkyP0EECs-aB61M1RxAKIbL6FQ_KUIzhIgOHfmDPO0euqJ4Hmi_xdjzDQIcQv8SiRyNN4FW4aHDVnjFYKOSKmWa7WQQy3ZGgEy5-X-DL94j9u2_AWYx9eYyqFexkqom9XGXF0vj3givuv6dIHvLtV8zaM-l4WcbURZf83f5o3sBpKtvfLJclK9y3hY708lgSuR8tXsiTvkwNP3dOaFmqiEHHbQ8tx-1iGB9Hotxh8Sv9culq30AU3Nrd1-ckLArAtUZ3e92X9YbMPDFgiMHArssP7KorZHPtMs2tcqzQvvS3DCQ6D-fEpVv_0b9MmvlgCejMacpFdbxjc4SOh2Jdkz625Yb7VNv_FziHZRRgEOlBJwALlFxprHjV91SwJ06eNId7W66C3IvzfsusX9ytXNktNzTfU_tOqku1LEzhPeOqHffSy_H29RSSQyzy8com_ow_GSxabXHuBMl5B6Q3ufDIyYQek7o1WPQ91gPuiWQN6IzlUw5w3pcfvtVD7Dxn8hWyVbQBDWAumSBSU0v2qSGo6udzkRtKN1GT6B-lo3DytyOGOGBYuUVDs6ZayoKqU_WiFZB45lW6jKC3ODcsghJnLyjRyXrRaOoBDOjEFMSInEgRcr0IgEpD6qTcAkdCPVD9umDlqUgFLg8qjI0laMxWMlTjP8HnAcRjNdT_V5ODgyY5I6siPfi-AsLnCzf7knNMoyMnjSM-jLfcnBe562l_z-BGCwSLHt-1UgsVcIfL7LwSUoZf-Q3iYTQHrnHe6y22kAGiBeXshs89omxQ2W7NutZQM38PVD3WZsBT_FdkjMIZQHDFBTu-hM9w7QhuTrhiOoSbwMenfwgJbKaD8b5F34n4FZ6J61DoRtRvu8TlfVvfXq3o0HvqSM_8X41RGAhi-sfazIb4bnfiBgS5lwfUnhJOEWEd8GtTOxtOfzNdf9N7xfZ04hBRGcF--PQ8hbXmEy6z-EwDiB9nSjLDtfnuXo8gbX8b40SCQFW-l0AKVSqGK4Pw4n9kZaByOWfLz8_M4VysTEqnsOgffo0PMeE8ehSXoUXYqqzEMnWeV4dvVf7Pj6z8SlthkDz_TLdcOAZg1ZzojntJn8etS6neTMw3e6zsTEWT_k6ic1mqx8v5aEMz_u95EsDQv9Mt-ZlMrqf-z0Ge2MaSh-m7pLMHEGLepLpWn2aKRxLkt5XA0LG-R9CBB639M5VsB3AGcU6D9Co_4XTmfAldffKdzgS9uZkn_gDy4egcGTTgfmanxexzIswqsPtnepYIsNQ03BdpJWqRKNZNXcVQ3ltTYIZhCMMPxpdqN94a4JFMPdwE-MMuX-RX2OQVHMes82iMnpro7ZGZfHx1bFhMMJA5uxwZQy7d0reAopKT04YdIhIM0d2nvfXN0zYe_5cLNAcvtfjEZTo3G_sO7PiQ8rYpbIIJl5cN4OkguHmH-RzyGSSU0XzD9SiXUkncQrOJCXQILlXPTTcrg3d6zqfdxPdVcuXH8UUTl6aTJt12KsbBSlhbhq1jv1ciLhUGdsC3yWg-mxoUyNB75MTb1RLc9EjAweUebA6XdE1VCgWMqG5KKnm6bXOVSmDVGSrubbaUvyYQKb5CiQHr_3eDvOFUN7-Wg5emzxGBQRcoqngU5k7EOuCAndWOh4EHy90yGnqNJk7WPMSDTKkPr8yUmaLHt9OsJ_KQkMbhUhZ49Mat6f7OY1_ACJmvJVyx__oFz3aJseCipIc1yFck3ywh_18d8yXtkSjTkEg0PzgJPnZhg1tfuAEjV3gLuIRYQgAKX3CZNFykblEuEb8pM7uNN5OxRBx7j9-xR8CCqrlU1lFg6iTAOUwbXX-onwqjKHOCENaiEPGOQ1aeLcDVkch04kS73Tv8w80Vpl39dGQmyvUoUDbzbXsn50aBPdX5yb7jfSBre5jfeYV0F1s9QpajDhVx5JSJ_HYCwmmqEG_u7hd8UWIyj82-pQ3Fg1DppW249hcQLw_XU1_Mv4MH8-CGLGO3OhkM0SorRRjolZ-cT5qje35N4Wl30WQWwoRRDIByzHmHobjCWcVwAgedUxqeCkykfBiGW6gNfPlL8cvyqXz6rsz9s4Ju13GrGhm-ITq0eu7Tj_y9RTmnBgTMH4xf9HSPQSJhEuq-n0VHqxpe3eL8OYuOv7ecTg98dzQ1RYVwWTU4OShoIWuDM1cdhQ5NSeUW4NrZOYHAw-1cOYTCk_2j9_Pdvc-0mzEZ82vRCwsxNALUTKaxcF58aEcwhUBHbKKNK5T40PNIzwEQHz5N3fivVv2QnSTne4ysDAQ5xv4ZDZcgWEHPHlHElUrprW5BDfY2WuPUtAFHlvxZhwf9YO6torGLN6aRxna6UHlevFNeX4Y69DtxJ94PqQmz-aXIsncJ4LGKe98v4S7JgWgscConFUo6J0PTCCvX4p6tbABAkVfMrF1tgNJowclbD_0FFqMYVjljGY3kWL1NEGVbeUjQ7YaVB6R4Oz7kk2iGwJqHw_bCD3HjUz6QV7EUXn51ZT_jL51wRKViIycLX0xb6WcAQFdLejOkCZPKnLqfVrLImyz8sAmbkKqOTk_LVFYdnhM8fsYC9hYgahfQzWUw-WpeGh9O_RE0hT998PLKw4gzO6PiinnE2D5oanJIYFCsyxHEi5aWcPx73v9YrAQPEb3oXt861eUW98tesLAci2N08xvpZAhb01xApCNFJxXT-zzAF3qhMIf3uFet2vh1qL0n6Rp4HTOYRYmsTcA_QaZPbUgIN3UigwUsJfGCbJpzQiCxIAjg51Vk-4x9lDrLJaoCs7bXSNqAqZ9rThIDVS7lw9z7Ft1i-WvikB4VbTbgUm_IET_t-7AZGom1TODsLc4ylKrK0_0951WhT1lkV7VP34LZuNkIfucI3xptKHJlQga2vQj54hk0q7uyDJUhxN4ptiYXPatylgfGF4oKvGPzf5-wczINjxatwdRyFnm-pzE-UKJ7279dEqzO3zJpR1zEsWNMKOkapIEGz8tGbbMBFaX2JSiGFonV6XY3qHM0WEUwL8qo33U9XJJF546SoeFnG3_3tsuAteZ1g6cchVsAsWlsSBQS8KlqTTwAdzBXA3NimFUpbn9LlNGAblyyjMHXSMc4y5uHwfmLxVqtJT5mDi-KHsDKlILf_77chW_jm4bAxU-AuBJTrACBpv_KRUw5jmw19VfliSCxVGaVVBcJAnkvhQ5Fj7XzHVLk04skJlwvvKNBCDG5Nyl3xTzb-ZmeWvFzOYU6a1fdEld7TgsHvlGTccEaj8xclpnr7LH1g-Tz2OOovuNb70cKTrv1y8KNjU-rhkhsJT_O6qt9R4ZiFmpSCV-8dTdzjrasAAJusKwZuOWoXSo4kTCFmSGwU9JWuyGwNCyyusM0VXypSqrJfVTiWnI0_6O6UdQ2XDN2hhnmOQbKX7IbdxSnFnPx1d0jbpoKCOhH6r-X0tGa6BlzIKy63pVHpoxCoF2cHMnSo-DKZLCyUp-xpAdTStVMjO6h3TZEIlt-JjDPPZq8yvzAf95zV8xOImcBSXhHWc_BiH9ar9lO9eqwP106r5sm4AwptR0tLfJuczwfXHyKGImwxainVLI4ZzLvfAldIzcmaGQUqMnAkfCPCFq87ykLfKVnUBgLgJAHRpWgqPoIdu5siKMeZvkPqldfVK3NBWfUyYGJf1XRp-zbCad03VEjGvkpQJREerWQJ39dPGFvCLid9h10h59IXq7eiVc1OXg4Mm0Pjs1xXCrrrwgj9XFvHe9iri1c131xH5GWnhOnHmNxpo5vj60-8bT5vMu5tR1AdZatyCB7_jFpM-23aLgjVXS4fLk6XvxixIIr3EcrV_rUXbzBRZq64RQMQtyMsTV6YvE9gx09gTZPP_lniGQCn0u4eg-W1Da5GpHHaqDZYiiV25gipyFgE7IFkZRUBTV5DtCiV-3FJfL7YJefZy8WqPm9hRlig45ih3NzTEgJlVDYqvRPteLa5A-AdsO_Ps7rLUYnYU_WDyOSxZUaT8n1bFychNRfzQFwmwJ40oP9zuFVYkwcMZ7SDDsuE-JnPVkUEdyvUoJxzEyw35FGYe9qXTbS5i1w8ijzV8RpQoIeeWKPvR4V6XpOEW0tP9EkNOsUgTfuUY62ADP4bN-3wQMH0Vh_JCgJ_tDpuGvdTRCUsE260sORdXzcII5vSlBUB-yQUjAYznK3eVdrdiYH7PG8p49ubbB8NvB9avtD11d2dybROQ5ziyApiGhUGaxAl0mXpqNR3wZNCexmtGfEoVu24L5q6E4Ql4nsyKggjRFubiyy47aLpcEKJ-x-h9BC6qViQXtVB_R8aTlCiq5u8vPVZNibRqVS9sfY4ZMmMW50H5sdmXfbVe323-7ML1aNde7-WpUVMVPXG4TfGS5EXq6hnTbHQlGPgHmDgIkmrZ1Ok5Q3w8JfMX50WqbsAe8Q030ZZ6BaNdzZ90ZRukx0li7oFjEKNnB9-NiapWoH6Ts4fzdnqXbu8alrreC9F32Jg-4LPwbkBQM_j7794wcAn1AwOnqmMu52XqiWvW3Puprv65kgSrTKGqI_-jXOpkMC316y4ctH4Zn5FsGwP18gK3sPdxP4QePOS32_ImvscCo6iuiN2MNWytylNG00QOPI9D8lyfppgTg6E_ALoIgtIqSszHy5u-kWXFiBWMG-wPIuAhUz-ZKVxdjc-wTp03rMCtovnxHhwjZJ5MkezySNvH7NG5ROR72vLhEaDBYqWML0FsNRk0e7B04iI4SYHOt1FS4_XYWsmA2pNTEbD0oRluszHe-IssZrFpQvi7pRnVPtN4WLKl7yuF4hp-xuwdVpdS6K-M7-UtaqU54eaL1NIM14UmTQShqpjZNmDktXBy5GZ7YwfwCysRziFHFS3qrVTBLaLcZtflIRUUQnY2HClxQYq9-pH2LILuoH9koTf4GHBs0zIwRz1SJAniylHSW07XlCSPzkd4o5J-0khDJzoTRB6aHagwEh2LpRTSUyrGHaGpHtmnPU46BFM2ib-zGErqOticnNE1gmmulqupqUxC4O3s6QohtiXK2DqdhoJPM42mve38S9ST88b-S2wtmFTyFe2wefdnCkaYv8IE4d4RPIeqgtR-K3bmDK4A491nGvLRawxF0pBFm-iaxzL12npKBOKoFRx_e1Q1kWm5dchNdVuIbBwVPypeBb6pTd3CaXKcHy6Wuyj9hds2hCBpKMLm6SOu4izYMKPBonUqhb8zn32DaWTdqYoRWs85qZpZqeCMal4XLH5TywYms5UY8oaG85CzfsOuKu48OuqAnVKQLA2z8c14J4F23mgvrLAuUYM_RFCpRXItcAZwwL8bmzrny9VIqG9WAQ5euEU0cpRp1az4_sBD3EgQtRX9gPB2JO4FFPa-AHmMVJsXw49QIUqVyI_AIUa2uO3hUF05FpNbj62gvKz9VpMGb6xoxOH_uR8B9v1r74ZoxBi2naTdsQbytOoL3pHRcmIYsILIt53gEgQbGVfjgJpSJnfAAuyS8qGyOPS-61M6M_3clmAWIhbz3yg4FiKEAzTpbUyx6DaRGF1Y5iCjlLbWzWu0bXBzTvvaiQ1UK5JH4RB8PTERJvEQdJCXDb3CHCcokyuZj1cae3LV-QDIeR97NRon0uL7hJOnaBR7qUT7-V8Vs__I7ILhXNki8lQo7wKs9o9LhVLxsjTu4-epHf_fDnHfZN8xcjrm5XuBYmzxZbaPRj2d5k9Lze9KqkZQcey8RDsCgaAqm3Y4lGHQj9QfC4EhlJYWCBLvaDE2O9hcIAazVcTVPFoFS3KeaH9DMTB2m4VsRTa-mj8888dSTf8YIRccBs464B1JSAS_jH3_rcC85mVCb1TVG0PHdqxsFz18qOUIQpXH86iItn1tIDa9ecaP6sliSIV601iw80m0tDcb-_TA-T4VrYZmIpx3bMinVefEQY1kQ4ZJoHOrdUy4mTmYf3MYcNY6VzMO9xyDDICeWioGi6kWLuIaPoN44BGXheEERP1an--CW269PVGLBSKHo8c7n0P9jxNRpQuL3SXo3gRN7T9LZQpnStmGzdjSJORH331nhxrUPIVbWoG3rMA_ltcVAke1TEYIvv3o1s02F-pG4i5hqe8djmF2G4sRTSD63MAGQbrmvwr1IvLh3kiN0bfeNcSf6T8MQtBeRtVOZL_x_WLF91fKi9WHMUucypKzPKb7-YCp4ZHQ80CB2cjCoxsC3Pzb4hJFrTbN2oUuUnNaEx1ykdoqZA2t1nVLsNAPkuuUDHb_OJY6ZuW-MnwvqgfsgCJdrCWMu27YSI2C616OQvxkqZInAPys_hniOl5MLqS6pyWwuE2hYcUcE0tE-rKKcV0PVLPvMJ4VHN9tXzrSGNlJpmVd7Z9WRHkIa_qkaWS79BJEa4HgrlqYDDJ8uKz6aq_H_m0ObT06ASlJOrnhd6l5WZTqYbDrdIG69oVff6fv48-_utcSN9C2uZz7PV0rPWrDZtdbLx1h6HAF1jHrzbn9JMiE4fjEjP8VCpdxkIu__eQ5R4TqQizrMM_67TzCmGPqsYgPB8CwJIoZ_reoLvYuGNwPHizbB2EfwL8qq8a3iLT6JCFVbK-3EIXNMPdZHNvFeEEd39Z0uepo5DfPav3CGSmJiAKmdIz3gkaQRpndbbs8CD3j6h6edIsSdXfgEet7hmQO7UmtVd2C_kvIG8FOiNV2hwceQRTvaXVzlGqawk90kGXyerixriZK881xTDp0oxxKY9KBHEJMqN3UebdZu7fX1Yv_S8YempOqfOeSjgYww7-u0mZHdDwijw2GCh033e7NDH-lvAxAoSDbVN0lHHLFRfyjNZXRhQn5AyeYGLhsk_MTd8AWGM7lJMCHG7fmSAM6Xxcnrn5Nc0egfu-vz-xwli3MNLfiEppkKwm3UnEiRr-auxmTQeONVNvx6G6s4eBioB2WPAJLWZFaVqap8ji3f7O21htzSBjlU9op2dzhUB82-Vp-HS4Sa2-Sl5HKGDecZU_-AXHY6zsX-y9-TNfyzuonXcNYf-XG5x0TG_H6VQHQioKoRTfcU3fMqw_jBI5Oe7rk9Ecq0-YuJOSbQonHJCCr-1MYkdZ297CpyHiJ4KHCMe097Uu1Sjg5qtP-MnDIsCCC-RrJ6RzOEIRd2H9KFPPVu8IhUHMvM99o-Iz-8p1gtmk6N6EsO2fVDtluiUzSDzOU5_ld2cLXv39wsKEn4VocE9ABJfHSCZiMiRuyPMv3aZUrZ2TWVJpMnn43M-knLAuiBd6vs-BMmmG1XHKZysPH1UGarOZcKzKk8KUa6_KhlhWC1KSUm18ZFQEHHcN5BgRnBpvu5kaBK5vdfRtvwrfrqST5oXXlug8iyQ2a8FjNPRc7OuQdH4cdRUcNn7oxqRwi7FdAJCP68STkdlQPxXb9la-g5ODjhmeVYYDwK9uaCtjANVK2v2qvYKj1hzQ_8SVhYcqNDB0nAYALIp9L0lCWnLeqLxsYDadyurbndN5lktmiG8yzUoFUlWIKknbsu49I76hnsO6sN8EoxhFrps7hAnzzAJyoziyYupvhcs0LQ-BgEii1WUQbFqEEQSF2lKflXnFdQconFR6TlTXUWhtYnt7weYJdSwjtsjGq4NCcj9tKwi48Ncl8qmza6bEdzBq6W_q5TbdYmB6I6D3gQejXYeIw86olJN2UHxJAUhsfmOMkhGjrtCNau5i8u6Wr58Dj8hcXEjRe7XQbO5IxoQ5XwcWKZPQfROrzn58aAq9fOKkgShxDhtoxXqCSVLSSedd0gfj0Zy8U_a-torWB2f4abWJZoBaBss_eMACowUUzL0PEt-taFeKcHTO7IMnwvrK-4mW2l1g-WzdYylMGxPLbVbiyhXYiQ5SuTeIaI2shpI0Cxi_CtIrGuHpG-xFYCNMixMsZ75UZC1UhCwLkwuBcbWyMM_p-r8QnlVDh0qrRXhX8bEP5KJQzoTgJl6NffMWreLOVIPQHMhX1d0kxnyw85SHIo0h7v9YZ6SRRGFnx8enPSJr37-2sS99ljerP9OHmrHz6Ww81vAc1iE82HKzRN6mH6hB_Y-LuCq6CQy4JieDUG9i-qzlbN8hUBrfGUCd36frTcMdM1q0uP2S_jY-hVKenqMExvjDpI-iCi1GTpDg1XbVbtfflAvC3WTIKCCPw8xQ0EiOQrnAeun6_sNqMnZ9fdzg4BqVmo3YgwUUQtCkOBciU1Xo2twsOen03TasqSLK1fytNIE_C-7ptgDU2oRkO7YiPn-H2wocoCclNJGsCBKU4vSwQQGTzi69kLGnI3kXXBwiXqh0OPA4MCSpAOnrMtrJNQYovCHk6DtIBveQsRhDj0uIe5YeY6ME2JRQQJ-N4rrIBebtotAg2XSgEJhIbERVlLMwU8MT98CCVrPksGxJZfJMdAQ7Cm9Y-ZeuCjpXGWJVLmM1ZvGItC38gbLCnYzGGfRSNowIo6wMi00tfEIKEN_nUU3BJZYE4Npiiwagbrz3CuyBSRhtb_Qivm_wKjQGY6imZcv65RjCX7QrZqfRibhA3-cbchgoMrUmNqlf2SsmySGF7ZaLFPKTcgqO_C1rk8X2a8yO2fe6CvNTNKk5IYIdAQvm8LDxRGmExia1bowI9iQAW-6ExCfGSm1aySFkTt8WBrqwUuZRZxbgADisVzX_CUb_5rNqYeWcyge-FC8u6I2X0s9_dwEorDe7cnwWdzCaqPgyejKl7v4r7-WbsjGcUXB7uZ7VQb99W_9qBZSUo5v_FEI9rgj8dtm3tKNgmdA9_pHecwft-PWEhOJiKcJvbZZ3Hxx1pE489Ng3wepfKovLf_oI-h5N2N-igqy9lGzXvkut_aGSG907-KmYoiODorHOHHx7JyFlh5lBzEP8K5HwUJvXDONyTQDKCS4O4O62_8DdcMETpICIZmGFYk5l8xiPRO8lAfN1lfa8xXjj2Ug_JQtFYQCH6ycxwOAtpTA-paOgfvAuMn7X1e6ZYYa5yOx3JcjBB_IngOFZdLePzrvQwt5znZndWUaBNDYRQKZ2gAbFZW21aAcCmX5xWzhA5g16S_8g2SYRhMKbdayTe6Rtaq4ffoLw45S2mNThmQZ7PEyxFgeAoEktt9WSCwWmqFqaK4yaCt0ulMRRAVeW-1M_YB2TeyXVm_K-I2UYVHm9U3f2ZfOYTwVhtO3IoF5mUwJk9nQe4WRqkZEOUhJsfY1Yt54ZDc5YWi1uLaaPr_ZUOqgi3BjPi5Ggg7deZbrb06S9J07Gz9nFw5cQ9UjuGgnz823WqdaBM-kN3w8rYb6uvQEoyaolm2DP99cypveEqfo3DUKNcXRHebm2ygimA5AgLXMblf76IA39Pn73yyP703bWKa25iOX5tWRv5U-fj2aLowN7hcxIl2k9Hv6uLo6C2ElCOjrKv7EVxmYI0uvaMLB2obZZihtNeD5hCOw2cy_QwtPDISGDBWDkHVD4incK1KG7i4fsAWQczMPZnIUjI11apInnypY8QLx8po7OWaDfu43FmhWWuFkV8hIy9X0oHKUXrClSwsUpU_zOaZcYQLcIpSGCwsdG4ig29P0NYekjX6MxNOCS7OrFzvMZNoC1eORWNXapW06ZLfdPFUMx1AsYDKYtXLKGhPvBq-uR6bDK_kjW1EzrK0v3rCoxYQji416yRd44YnXZQt8gkjJyak2l8qbyCPlgPy33XrR2Dyy44EbGGexqXYK9A55r4vEDarIINJiXGMlu9yXZTToE0DHfTDodiqwWer_nkkq3Kd1vrxCTM935aD0rXigxIg3yEw-3K1HWqTH5QHxzWR7EknIpA56FtdmOJRPbyqjhYVPTLZMJYty5umxsLy1xKQFWGs8yrdpas8IMMIoMi1elYbTdwWYJKhDw2xEOjQWpVzU0IxH01ghnAD262ecDF1NdcQArtjOJ3LB-p0CE1nyvXLVWgon2utwrVdg829_Hcj8ql0Z8obVTrmADT239Jihr1AdQ7sHBna3vXM_9RqdiO8T5azewlEZ57vDq5N96F4OYdJmUIKbMm58IqT45hEsQLx3FMhleigi7Ewqv0qFy02w6TDqcQkISz1hjf0N73ugYyyKeL0vBDklQQc8FaVZ1WnS1BRC3Z1ahQGbTbtYtZZzGtttF7HV9dw-Vcb_xyZRAV8Fu5DaSFt9EiiQzOTzLuPhrjL3-57giwmPl8RfLwkJtK1qdDqLdOIRpBql3vtPfI0PaAjmD7PQI4BvaLEbyHFkgAH2NPHsUnJYGANZvCtKz6-JZcFG3ykxPKFXmmNkWN2-hE4YXhtrR9TR8ZuZN44h5xdLhCmFxLc93eJDNAujU7IB3MZoqwE-00M3JQgKDuebqaJcUOJK-hY6hpYOlnJDPb7jQxDqFKuYTtOmTaCQ1PT8jvyyaMwef8jIcZnZWJ_Nat5EiCf9Jwt2e8-G1uQv27MSiE_qZl-8Fy_ghC-N9U1V1Z0UrmlkYwkf2Hf7WzqDev4Mb9TwCTpsiyFspcuR10nbbjpS_LfiPZC6QG6_mapmBnFO6fN5rgLYRw7J1YPXIrRoeLgOmoBnM2w6sahmLpdAUwkbb1xw-zddKBqiFY018qAAWRrXIc4D1KGMti1VpbkOYznKhfa-vc-5iPZkSr0POSf2XoMzV2j24WV-CRnBZ7N217dGr-rz0UWNGgqdmHkkbQTt_ptERjscfue2rXh3UZTnfK7jIRw5F5h-9KbjM_MoF5v_5V4tlLN8BkmuQ9p0uxLUsn1SO46dJC2qUaPLD2oofhHxbHO3fL7mR2HgeWZFXRpC9DeH5cKm5A90nWvUXBxoQ9PObCRMMvNxcLesZuQzXmDBXeljI4dv9kAkSKCwkOMvlatkJu5YRbEaSWpaUKiWFsfFzY6123Q8qsOExzwgqVjA1hdAWFVwQo7u_uGAtxszsfv0tiZA1MP13FngzOAtRfHwoLOC1GSvLbfPHVvY_nGPaeiXMRh0IdYX_J0Wiaf39xoj7sX08JbNI0ceOhpqbXU7FiB3nrUu0tINSPKK0DnpEEfnsRIy01p5oHAVgHITdcEpTOKxkSzuuRAaF4-XlMOI7iB4JRxWXC4_dGvgiwg4PzelalEEes1RwjLICoMcfQhitshxptBupFJSZLwQxF7LANYGPcKZfKLgkvwegPQ1HRV6idJPRVk9HoYnlLrr05smfWThjvatAYwFWXLE3zISwiqeQ9xEGRcMEpc47QPy6_Cikbz6bUAdLqoAYvZq57F0zWB2t_XJ_XVxOoyo9IuW9Ucxcs9HhMfmVyeuVL2yhTW8e8bDGX1jq0Y4NYMSUAhrai5ppPVLCaKvOMK1fiJ0eVLZDcHF-LFnOnBELKQ_yCcazvysR3YlrEztyiCppPZn61d0pe4OvJ57MeDkFMA635QS47T1EwwN4verlxx6-irpXe1nGsoqiuX9cv0cttvCdj9Xl3lWSQDMOIqtQeu2n8et2KhShV5JyqskQ4R1nPbAP4pNQ0ycFkHk0LK39QOOIwEYHHbXNu0OT2ao0QcQEHrmy7Ofzva7kbAh24dUVq88mB9WFiDmRqxFE_3-Eg-RgLrnwi2lM-EEsVSCUs4vWPInvdg0gD5pnlYnk038ArhExwYmowbShPRb0MZwiE4i7VpWuOX4phaW3WjFVxyauXv38iSXT3npEYDzukMasXaPzOm24Mr1EcefPmvFmycNw5BzNXC9R96pCSCKyGng_H5Q-TJP6_ZrtWrAnDNnDqZkiUzztRSJ5AIcV8ENcrDhgm58EDsQFVD8jpK6WnEBxSwbZxly26jRV_FpaBEtywSGqSInjdYPOLuMONfpISvfaE1LbBdYoVdOjT3V53BMjoi5v8Ddw7c8Niq4VtoAYSaNGVpDlPNXBBD8LbcKuYdDIEeqXGnFCy6ixY1vAVVFhq8LQPQ-2TX5TxpztlmIFjlRWQ0mGlyHNafJV_pzcJkkpXqKFT8fq9UWnwcz_5EGO3OM__COgQSM6c1XH7C9eI-tcIf1scwjEA8UJAup4oMB4mJANKsrmc6ilft7yH8obKCJl_9g13SWSj45s5ua2izh41Oa9rEOP2aoyZvbLqM7RaVx5X6bzm_00kJ5On6jVVbhJ5Le_CGMg_U8s_eVNnzNwvIYkvlRdbdGTE_Y5sxYOluiQKXKQvJkkGqFz8Hwx0gzqRtHYsNCM64WGLqcv04Abn-WYXdQd74KE6bxlvwOBCGeG3abhTG3Mae2LtFolxylE43j5OkFaSSgq06skryAY10TJPvZaH4cZQenj97lsqg9AaVsAXukHomMwlo-qeifx9b0oPgZDTdTnNWcXS8JM2_BWG_OiBP4onuR7pIVC_gfNoDJOZFPW026mNtmLCgPZypNVOxprYCa_WfRhy2m5G92wZsgXxohG_mfQQZZR_QaYYBgFTuBqRtgxWp3mB8RIM5-M3A0FvQ49d4LRP4n3EMrrZAbWEZUtLEbFWdCXTWzoh6sNfGroAziCPZJkLyhbzL33Z_l30LI8d_90Hf2xYhSYATVdwda9Kzzh8Ld_5gR3sIYbkPQ2qkqbOSDzp3FF1dzFZnO0IUKwyMlYR2dhej9EvpNv-T8gFNJ1ZN1LRwVV2nKVdS8v_JuU9_oDzXC3Eb3uZzfxJSgGZ78NVFnsod0HjcgcDEgwKS9_T711nypib4UU11nFcZdA2PlRk1eDGC1603TJLe2xxR06AV3B9RA8lLdE3iSFBNTwlQEmUbQcEQ8lz7SDiuOrbYv5DxFp38mmeYxNGC_OXsYJFOGcmfbau1kEpqAxApac_0nzcYgg2UmzpI9DnUolb4jRstbXHjoEfv_WrhcA8RVsf1oeuOkFdrvV_b-m9rimeYkO5nplTijDufaTGrQFIH1p0CfPwCqNLjAR2OLpZSGXVnOUPhSaHmJcVmhOCB1yQ2t1fWECn2E0C7qfxTES2kA7d2B9aLcqUzjwHRjNi-P4H63J-kVOqRIAR4_e2HCcNUMLW50y3wuTrWmhywJIzo7ybrRqvlWIFGFGVOTnN-TjHRhcTlvmgBVSIkIl6Q-1voKUfEpvfKtEY4agncmYxDjUuEAwHknEm4hawJWEmrhphlhJuJNaN3HfFpaZodKKkFpLKA0RN94lcPbDRZJaN5cNI_J567SG-pmQbh5MdDD6oxLdKjfoO5DI77cH0KXZqIo8eMwxo5uCS8fvLwKb0xznsoYhFll9WQjoRQF_iJrb1T6tb3nT5UCpamOzeLrpPJgEKUJSJJSHKp0qcrZ6o-ig4lT4nj7h8BlEVpKMBccnefdKgPbuNX0gyGSwA7eQhgkOrDT-FhuLGNpxqWuCuNnRa4St8XfnhVtynXUaZFsZbSoMCRD13p5X4tyV-86qPzIasQzO_Y3vcR3eGzisCckJaHu9lB226Na4y5jAHvfXSTuKi-CN5_cyc22GVjtB53B-BMKZKf4B0LbM8bPqet8z2crF3vsGwCDONI3nVE0-MKQ02viqLW8nh6R3cm4557h1NzAR_blxlzuDEMoLEldbtFfqjOERC3YD012ltXMRaTLNNWj5gU8Krphdg-EMa4CHi5PLGZc8KT1sOKIrbOp_o-LvPzQUflR14t9WKpI9XsWAZNFsz2CmWWCs7p13C9ry_OlsBikXFHPs4Om7c1ZnQB505dU-5e0_etgTISbtuj9AGOOC68o8Ug4t1gyKxh7vv9SjC4MkmztOZq-ODkq4b4cPgLm7Wp0wcaUfJxlmf1f9hm8JQfZ2c55YdVlIwMFZ4u4A3RdGTCB12rBfuBj3IAq9NV6s_g4ig0VZeaAJs92AAOfyocnDmebpsb3J_Co1NwQ4mmCPCSNxENMs7rduEhSpANxk0bKGaR8CqbG_prjcTuERn2Pv3wANjd4NWkkUrOewaBoViE6a6cxiyc-bj25pRcAqxMYK4NxMJFXl4ymuQPU9tW0c7eLgY3cpvgzyA8Ce72AOi1tv2omNQ_NschdC_KFRbvBHcPP0aZE7x0tIW5Tqu54RL3S-3LWvp0-Lspq6yZc2M2S7HKQD7zjNKR4JMav-KLaWpJbwbumqtHti6uIZmuuWK3I6t8QSqW37XEd3LGRHaL9VpYkhhrp--L_xWG4tGqXILBPpr7ValZo07xVsNIM9ZKFkGrLrZSSUaTyWT80xlHxkrJwJOg16fw1ZWECSXLXTlOimRW1M98uHEq-cWnHoEjiI1Me2uJllBooaTYPcusMl3H-8EDKy6hZ5b1ZYObGBe6sV0icNml9v49upeTeZQ0VaEa4pM2ydj6Vjw8GePepNfa8Zy5IBIwdiH2HDitm_tDYMYHuaFlA1RkqwMqADVg81LFKzyAsmWkwAJ5CztzcyKrWVfQlD2lylujVLKv9TlgUb-w8bsw23IjkQUia2rbBr33OH33qebplAlfASSs4fABQy29ZKJXnq5rX7YLGXcOyMmkzQdpTwbYXVVruQmAyNUQ1TV_M5aueE4TosMZV6nd54RkCV1bySF0yyd5QFby-ixWZHClkE66LnZR2ms80-liCeBbtUOMZk2mR1Cx_4s4pll5EGPUcVbYcQ9JfmuCB9zu28fPcjJ6FB3eFKWUXxjRpqi2HLJwg49d2HYj7GzSXVUi6UGqFBcJU0qM6UKLh7SyzTy7Q9FqtmPLznEoi97VZE6bYl_Dmf_3tmfIqcEv_p7LYKYPTgeKHVzQtkceiN0nPqfvnml2KOf0EbB_LWeZWA_88jbFMHIKbq27_7tzv9fgnTXi0lwNu2gSYvGJlZCUdLwVuYHOdXyOe5ZkqVM4wJ4T61Eu4QEAU2F_5I0jcnDvD7AKcLyIdGRbCY0dZHVbzvVZN5ntL5Zq5LkrtGTzd_Jirs_LgXvDMzowKwmLH3I85YCTxjWbCkKB7XQ4xxt4tBGh0VbhVBgtJMKMm4wT0gfYbp1F56b9LvGpMhaBkUrAHTkta2QATTAdMchYgCqR_rv-Xu2chTF930ZZoRYkKg_HHS4njXX04G1zu8DrF3KzauBWfI48fe1pnTFSseC9VyPFXQvlroJz_gSj-j8p4aDivjQ3FsSjRAB3nSx1EaUXIDIOQ7V5ynaqOKF1GMS8k6Z-bUwy1iA7lyhqS8-kEvVbkAW3L9W3GgFDPzNM4eBYJcZ-NBRXrRRVc69kd5fhHtTt0F314fS3sFShYRzbdsU9C4dO8cSj-y0CNQ3F4wfXydHKBdr4MtIXcisBT-O9ILU7H9eETp_GKPSURv6vrIr1mopjWRIQuBOwqKiKhbwMVS4sFYzc-s1zCyvU_PYCVjhrewvbab4Jhu46CBcdGXUWeH8uVhmXnfdljjYlw7kw1iLp5OCIKRXux0lKGLNixCF-d0DHwMbGlOQ77sRekuzE23zI5aDOHgAhkGiOLOuhTiEZOG6hXJ_CU3dKmRfzSUnP_0r_0-c9obK_rxdins1pxh8iUSnaErEEJJmEotnMC3GxX-Ud-nOHpT15o2q5Iem5eHlMbTFnhmY1CfxLx8i1xcca6Xe_l1OHTyX318d4crrMAh6UgvpX5Jx6EZETOt7-3NdzgDoH-2CPouYuFQd17OaSaK_cJFTlio17x-kJEPl6y_ROi9bIMBNrz65Q7QajyuyhoVYzt7Jry0MBvjgRSO__3PTHl-sdvaEUZD2UnkR1jrrLvAbc7A0murH9hw_PQT9GRO04R0RvLMtuc33gpOSHnurirRC-6Doi205lg-gN69zxIDGVsOnhTSYHzDGBGt_nYcocJEAhqNjmKIxE32DAoXtfBTYiXN-Gfb_zeNE7n4yPwZ3GIgRA7EwRc3W0rPvoTDeGnNNcmnVZHK76mE8_oWm6qNW3Im9LXYYi6EJqdjMuL7Gq22YN1Be7EVKkz2GI1CFH4G5JCwr1WqdkvgMQp8arSJG0M-ECYfdsob6DcRNfGqEGMhJnnphZ1IcN2TSXwlEfISt4enlahYoT0roBtGhHFkApuC4SkWiL6cjUkuxV1WPcn5YruSsatCzr5TaasXjprxiiQ6mwzT-JIDeIWRD5lw-MBJPm02KQKKmeM2ZEfPpiHajJTr9nIevMIXXe9LPCJ8HqDu3Bqqcnp60OBxlVNri_L1IIQk-SzyPSxUOdZ2m2czfNBPenTkc2D2sc0zM6--hGpJXyFB0OYyU133xMY0gpPEWw23xNivqMoCvev_VeUqRckvDFCM-kI9HSAG_RUaj9fWUQZtrRaD3SWW_LoUW0hmZrV1ZmbpIfxLehMgb_whzYvBKuy_GRgWzAFE4ZLyUNHFDt8lZfk-ckS590_01DgXur_QDR6SEdkamdLQcDzoJxVvz7bkdHKtajbcr_gwHuzU2H03nPxmZPyzFXRwtLLQ8nX2HPPrfDMkUFtbU2M8bVpZ-8JrHqeFxWkA7MAT-MUw9fhWiQICO5Bx01ytvlc-sKCX7IoTyFkBB1jFA5SPDgrEdXe8l_RFE1BT9qCxQ5pYwE1U8il4Ev8K3ImfimhMMV9fff5mAMKFAc6daWV_ysez1AfF8mPXSNjcghAdk5B2TZ1QurRTRnC_1gvvr6YXg7EdoVa0EvpjZ9GSVe7X-G_zh2bRm_Vj7MlIuj31SKQfKtM41Gdybg9WF70YuQOzWK8y65mKNsDwpeUjM8h2ggibRdxq4qPtDV37Zd006O8smWKKqPVp_A7L7-viAPxvd3bfVV5E1MPwLN6CQf6Lixd5-M8xJk5JavFCxJl1No_1szoz5CNEV-_HpSg-ifZwAD1J_e7_XtIIsTrlaQVAyt-_3rwbZAY18papiA2TO8CMkwFEX6q9w1BTB8oNwlO16U7hDWSBl3zZnzbWuSdOFUuJayyPyPuerWFFPD_tvrPM8vDiBdJOBHtMAHgwZewe8yoDJvpiZkRSSUNfWWiPKUWKetTvSNIu0XorJMmNknICnaW-KZmyN4eJKPTLH45dT2x7HVNCj53WPVmrlo7lxqcvDoHG4OtR_KOO6JXiXbrVB6sCqQnoTlXgVKIN4sKWSRSt4HCvU3HwvTo6wHbNceZyYuKwIsPgScSYLdqDpLyhl8epPKP_qROwLaFzc6ljUPxrv-NNTPE-BkgY79L6neqBzLtpgOML1OG4DDNQAZ5bg8H9pqJkJy7IEMury38tp1Nn4gBDQSrAURIZTTYHjwrPRRrIL00jqjSLNev-cHMgu0_czHewxGy2vmu0pxH4RDhBgK5lLAy6qnvVxNuEGZ2G8tz199fSbSDE9tkCZqHgT55MdkJu7Ov-o9aJJoyTwm3JZR4xvHPc_fKAW-BJlsGNLMXG-GBWcuUua1oqFimXPfgiMF-1rO6y02Xs-wvmhAwiqa6UGKZLFtgpoZxAgpsUEWy103P2oUrOtYbpsmVDabDPWQeYmiCqLIiWsQO7FBR8UuuSHWQCBuUssPuOie7FvBU1gO4utj96zRWiuarOfDk41SqvOkS__bIXo0EU2PaOXtSzhorj7xeNib-1PDerdpfcDgWTUI5YSA3eR5seXlcZjdxNRg-7V3Fus64J1FswTMqLL_AmoYLBzpyfKSKT84P6VoXx8HY_TfbMtAWKYKwXX_AHFX9JcY1yJOg88e0-xPqVKj-OCxZ1Pw8j0dXtBbX970z_c0BNYOFv_KUh6tQ4-8lZl8wN5JoXPTzQRpMxRzot3GO-MvBq65Di32OmkHEDBtjRygUBYWxamg0-MdnRMn9zjPhuAMs9ENJ2jmU3pW74mNEPN58HPoJXpu1PfJb8AtBcDjFMl36qm9RR6jImlUCmQC0rI63y__yGNim53aTsocw8gztqlyAUngL24eSZ3V8WRGydputvO39oH1VxmQHBLfhUAG3V5gspk8taXQqBVkTz8zuBK4Ov4um5bnIAdjTRipKdp3WEUqAEoVn8lzLBpzrVzkVB9io40MJJ02qBETqOOeMueKn5qhiRy13TmTq_0gG9Rrr_HbZi8WdIM-pQXwBMydbcma10IJk6gKeH6c3Nve53YajOB1dHOPAlOC8FN7BkByC7yn0EO7A2mRh-ykJ3LQsbqh6kxOzEd7cCVul1wpDnLHCwYuRvMiR28Jgnx2fkL5eZcpn_QxvqtQR-PH_KAcyQ7gq4Sz8BKbz4O7RSKIOiPbu7tmVAndMlieCTkIIoqEBy2HQawuV82NXqrkpe-Xq3MUc8CHJdXfkQdK4M00roiixNo6qpK8gAyim4hdXvckjqs3Qj-VjejsEkqi5WUN_t1iEJdt1Lyt5IvSpiH4xH4aNPSmjuYVPnWhGlwkwn3hz4k-Y792BNFZuboWrwv3ArBCvx1ouEIJeK5S28c-hwuVJGpLpM5H1BR_lKoJVpmzrLUHdC9FLyQbM_z4QR5DB7BunEaH7IfruK_HjVy6N6EqFvoRQq9iVCVgJORYCgU40Ze3XEpGmbiHnnGIMnT18CMef97Fm8wpqVyIhcjR8iM1bOFY1LVRGW-PfyvxlXfu621HtKbkMVwSFL_rUlOXZ7DSZ4cOqbnOrSd1di0d6Vr3BkatjUJ1kJD5KlE45fpfZQMi8rZ5DD7LOZfliiv7MXr8em_4VwQk3s5mzM3Zkv8eNOgKaIo2jLJAb1F2oPvSPV6QGJMCzosanIUeLas4MyFnyCDiC_zCXhurZdeYL7kvYctp2_Y1l9BagmUVTNFUPoJtlzfBOGNgxyf5Lf0PfH-QOZHlypBzJGEDRHt7FtvbGpzKvW5X6vsBkJOdKszosf3Y_eVOdT3MVWnx7ZiSwQqd45p9FSub3MJ1ijrQv7AgezvBfNEoV7aD2pMCKmG9Fv3gJyaUiROXuTb7gB8NxWfK3mrWoZBNFBGJglPwwuzdm1YfsYll25pPF3Yb1VxCjR5Vcv-F_Cx4T4x74PewK0vWPnk-F-nmhByv895r5riV5uCyL8lf81G25hSyFLRmtQTWc4cKiIKhzacn4CUbwQVnoZVZcly1536U9WRkBNWvVSuNw0r9Mg1SWRJhQ9BDkqMiZ-tOHS-bhezfbcc1dr39pGMgi4izjSfE9ro74_GODj5PW7DeQyPc6S_NSwdb-FVultVmYtxrMRGjJQcGC_JJzW4ed5Q9V70tnYnlfQ2reF5DhAud6UlL6R47qd1JDL7S-T-GrDLFNaKGGw1OqN8x32MOr07Nm14Zz_mfvBT5v5rcXONRYKod_7K3aVUcRWnM0fnLGc4vcdZ2WsWtTJUfBwWSopb5yLx_Hy6HcGGI1YOq31GJms7ZAO42-yPRC6INd0M08gMMDxdAeNtlZCUdmHCaATpiBLMZ597v7n8IX0oCZwUfdNpXxax2OjrSHn21GWunZntC0f9LuTt2RPq8sxfbUafNOzoWhN_aNW_M54lLPZxbtLktSgzbgSBEBM6C4GOKzPkaHGBNcNWoKl-H3ONtKqggfV6wmWSUV0Emea9l0Wi6IpePd_o_pE3BbJeNqZ877wJ-ryW25ysFkfFaMvU8H5gccLgrLPuv6OIgThclCt2H7uY3smbrdlvOHvVjmwnbNxzLp0Fy3f8A2znUndB5lBuFGEMoboPc_3ih1DPGi1Fh6YmunqPWCszLHfeOzLjClPEdw5YB7rTdfG55jMQANPcZv-nq4FnJ-rfPF9pj2ecQVZOoD2YgBLf7I-GnU_-21K8D7ZUnMX9lY1uDGHzpKO4gPo6Tg8IRj_uFOx91VRFgocCo_yWBwoiZpa6Q0N1uhILbk5MvNvK3R0MedwQqWl0q89i4eQz8fm0-AMlprW5CM_zclvRLXc7lnsqsImgOWP6i9VB1ey9QLnursQEYIkC551NkXbinB8P1lm6mY4b5GWjbWeYcqAoS65U2yJssmzo-tovMlsZQEZsIcYj8EIm23e3K4nvwi_SU42JHo0AqRgRe2Hlwn9Ok7TKf6kAg4Q-9bNlL9KOAsfe3Y3tQCy04oGsLrcJGQygsaKPDG7O4R_OYS6Ol4qiERHJUAVjnhaCFftP-COhwRRR15LXRrRGmA1C8t7wFqS38xPXx4c_1B7-mc9uha914v3VOQ31iTHbA1jOLsxhZu7sKBroWs5WxHsAA5hauG8u02D-HYDw2WvIXrGS7qCQomg7v3lcAJabp3GJ41sEbtysyxuwvrKUvnm0Z2OmI-1WR6j5sW7KEJ2v6DcekiQdN0TmP4NBe2dV2Kz_2A5se6L8kobV4N7ADm2tBwGQKBCvcOw-SHV3MbXo9PZWdr1KXHbaPu1ezYCmh-NNptNsxezaIB9PmiLHMmPavsDksTGPZl1MVol7JDSVltLvVXRNgEFNCxAlODmLOn-jEEO5fACWpmu4RJVbHzdap_s1zttkE86kif-76uyojBYW8alItJJb55G3e5MZEvgZAE2_-nTkRbLG3BMtN_-lYWXm9YDR38R-lCZzUyDgscTFC4-sVZzkkBWvjdCQO-8nno8TSr7fBGfzEYevSgGL7Pvn_j9DuOIGFySTp-La4iG51qBMzoXDJ1343YOwYN07YWxL5P4mYiEttaMIzUQnHWcDMWvAGEBfUkojooHhABTK65D28uc2aVU6fi2v6ZVG7fBM9FrfLxIwutYUsR-ZbuVE4MBy6NzK90WoQc1C95krOKOflgvEvRI5YZFw4wMnsXNpFoK7LtNl77bCUKb4gQ2FPfFMhKE31gi5GrB_Txqa2BPXeiNuE_o1FwuVFgdm6gHguK4_lUUyCdA_Z0fgdlqQa5oK8NYgpqQcpbsjnWT30dSWBAPk2A3Fom7T_ZxxMFAhJUZ7Dx1XMqTvS1Phb_gs4QIVOD1hvjaYbBj4GQgd1y0_wNskgaX_p9KRtfGJui0ohoqhJ4jUAYyVS8ExlAnO6hyE3VwBAMcys9LQSQ0kXqffGy_vWRggUHAPhCXcYwSqRfrW63Tr3YO40dwWdu5DD2_hgH-5kkB3h49TZHYtDyL_GHPLCUtym4_s-HfVf2iZ3h46hBpbNaBs-oqA9J6H53ea_wncFLMThKtX5r32myQLCUsRl4B8SIk6SP1FnD1HPaB1kJ-ZoVcYQXA-RVynWxDvCpW2H71l8YybEUVJZwr9xXvK8HMDMULhNnoMHyAt8ajQYaDY1KXZhpwkXzvHveCcpMjGLoli94nniv8DuEJCrNujvfxWz2ucwXAzlqDY8Jn6fEY-hV94lprEG_YsteCWciJzsOI_rC9EEBLer3kFPac8xKApiCXoQlwqAzMh6pccegSI6X13yMQADBPvav5ymSzTSuXHqnnjGIqW9-VENUMuBRHDPWVWNEXC52sOrt-WrEXMOrJLonZJL4lXV8AyOwgD38zACR518rM-2V1Ahn6OcfRE4elTxXrYsf7FIxxocVMhLZomjQfYlToadJauXZi72DNJn_ezuygGnPYmJaPqP8os4dFNaWCm4cy_DpOpOUbXF1oP_IxLx4ScD4pGl_aMH1bk9QTXPr2d-0MPpNJ4J00ZsRBLAp9jmFkW8nQ2oCueZSUe9t25RsPmLsr9GzDepSoHP421Zcmir7BTH2tJTrYxDNwEWwLbiqS-6V32XNQkynOdUlExmj6cTzjnYVrrtYhx0K-sptjq6a82BEHbRQvlkUGnbhM_4racPMwA3Tx7hUSbM8vxQg1zG-kFRoKtylqxGoPEKwMYLnk3GbFJEKME1nT3ysSQU81dDQ54I5wIh8GxB3tT4UbP7YLuVfzKL1cGRHnNFHbceElwEuDva4CZqngB26GBIrxhdRuW6E7AVcjiXGPCh1pvSItPStGrlPoPBE8SELDpjyMZcxBs_CP1KUocsyBIg-7PwSueXedMz9LeqP8NKoBtQE7HmMT4e7RUwt3z9Xt-vqg8S22eyLuatEty_dW5NajfAXMylD-CcOtvwdSboYqbc5vP6rVdRvZ1yLRPMF9Pcwm_pddFMr8X1SWQvy1awrCJUtrodPd1OvPet7JsLqh0cHch59fskjmcdwC26AQBvXy7WeG16uMCFeNEJxxOkpARdrJZ_S3dQWrV3YPncrtO3PFgDq8NT5890Hv93bT84viTQCSHoLkm1uFv-U8NUgySAB2pXWngEhZOnlH1mMIzmSSpPqBg-SVCdBtuHDivPaaXgqckenxnFuBnFe3csynjFrczvMbMR9ALl6gAMyRTwQM9AFdhP54Zde8vLw5FZSTERnOIwJjBFOrKz_lWszrqXfHw06Kikz5OocjVGrjSjQ8YkFGoZ7S7BP7hHmiXG2RuPZ33nnwngvR3-UUz4x8-f2BNLTOrlwqGplFJGv1gonH4IPuyCIlK-X5K3a8KbS-DBBo-2IrFUP4_9a7AtruQSiC5fwRlbZzUvy2icQBshhKcaIUPwEAhF8zes8UUXZZ0f2SA5Ijhf1-ppY-6GUK6ngNH6Td3Kf-AapqFJEhTisck8_hvLnhMi22Md-ouN8ngJwpVRIfYqnr_kA_5BAH79sJufVoiiERqiTRDq6ah3kD2ckBjyO34Y3WheMlw0hlwSnVkrC_SSkqcrDQtKqwYttfusfmgyNBNL_8EAy1tN6OnV_2xJCUxYoFU_RN71RjGl8g_4kIHaZsdD6ZrIqd8u60NjrkPc92rNd_kRK2otkkj2Ixk2pEQyTbwtPNW5ttJtedHLqQYE36pmNxjV6qCSiQJMfEZNngj6U-u9jTB0awVPnBsrAIOhv-I-ot102yyaxrdAs_ec4EcRs3_8XCucVhYbHx-mHO4d5T6DTGZu_gzPjyRat0LQYOItqiUBaHIpwBmPPrUYoWcU1mCXsawjVroz5JIvljYtuzdTv6id2vajwvNuH7O_yx1wcFGJuIszdnQDnEqUgQyVL_LKygEsON9dAy0HMptdONwlN-dANs6e-KSaGYzulISjZlzEIt8HGLOdyvmElIoXKuAcjD6d8yToTNiqVT5kKrgQau23TfH5pLRG-oj1ZgkzuJ1lwSltnGa9L4Z80SxO8jEvmLU4ogxDDmbTAcTntS6HDPozPV89FTi2Z4s_am9e64dktXD8IqPThNCT25stjbd1EdUW_jwlG_VHcoFP7uou5FxT7TEZrMdH6Yrz-Dh9mAQY_8KDjlDVDt8ttPP-XWDb8KS8NvvkCDvnW1UAYyj2OMiOlo0gSLlR0vAD1wT7xr2aLj807HdiUmTXl1uUledPhxY8JrAWslXs74Zoirr2xO3At4EXawbFyxn_n0z5VdtxrlSch3kj5PFe6Vq2YKGRYGCMWnyGc0VLAHJTAmMNZIVCCKO_Dc8_jAuwKSAFuxzbF73B5v3PVu3roQ6ldzdGUlMrVFVvx0nvkIZAg_67o78kVF9pOWsBNmrDyJtHTkrmNuiWyurIMFhPd-ISfBdku2P5lo-rmg_-2VW6XsjSFgbjcj_8CbFKMODh7VltJHLe77O5d3k5Rg8AZDPjBV2uQ9UOFUhvNXbcCtQLuhrMmgWC_rwHCnC2l7m-jrqAlfSA5dFBNwgNYzpGqc6Ypj53Hvt9mkZmYElPVadXGplG7dmjP6DKqKzE33PSJ8qGQZZgGlTFIYI7qJEOyWsvVZjLSuSvHGmHZ14nWu2wippun42Fbzvv3GwtlzGHo_EU1vZckL8QHCYPYkYZD3BB4-1-zRMkefEHWKcgvn-taSrAeXaPzf5gpfaeG4jHdb5OW2ZO2UtaT29e2KpsgM8tFH9zSmg5Jo2UPkmp555kjQsFLqKAnAgMrYxKR1MOCQyhr0QDPmqPrwTLwEyq1wikeJ1T6s8sh8W0DAXlye_8Os9S2IND-nn2ihoZ4-4I-S5wm6FUpq_oVDI43YLqHRxYUq0yNGEoo59hXsGAPsYuYeDx5PF357v7ajCen_qv43IyqVDB2pknVtP43AJM189WteOarAiupr4PSnXqdSG0g6RGY-Qr9z40qI4D8tmffldQx9pIIdqR2bgHQIEf_cqHnRYMALaj8Uexhjo00_g2bhbH6d4OtYqRNZvkgYyE1UCjoCUa4tUsQLp3GT5PDGfRgBNxOXCLABlLZCkrw3FqhA37TgD1Ol_-_Fx-C4weEUC1qv0SqRFLk4XhZkXAFztNKeCl7U9sefBrDGGMXVo3MoIkeiKgEH4zQzLC-wChEwwwMX8xe-ulXcMpnxMJwBLZCxjV2yTGAInYFg04jFdTev_ucatvH3jlGK1OvzatRD1c1yWU-A9QoUHq25uzcNmy6QAvV6LzWgKgllQgnRDhfkDaBVPB9lOfRFtX-jepi14WY0dIsArhbse2wH5PoVIEHV7acYuiS5cGkAw2aaML2zXlrr_DCmaO_OrBrzek5-NhNtN1vtsr2fR73EMQyBhIXBppMTpB_4WpwpMLMFlSVSVgaLz9FmxqftQGb12l9S8pz2PSAEIEQQ0P8Ssc0pej2kEFPJGyl9fPqPWQko0HnN5Ng4elIfNtWsvHrvw65fp8mYOVLCDiKZjFv6bglb56iJl3gmEGn7szqyuoQdshHsBbTXvV5dPJpFeym0mjULOt7d_xom7T2g20qQzDySWBhVqgagIyi_nBb4mXRzk31puEZk9psF7ZKuI12svmFbZDjGsSG7fLda4vP4If6yhQ_-3AUxewjmLzjvn4gsZeWUw4LaMDnb62ahT46gjb1ynHzgTDcWEtVOSAVjGgdiYE4pRASjEwB1cn9-azc1y1u1BjbIrjVlflxLUzxAykFdVvczc2_qUEXnF7LVwOWTsHOa-cxkuwKds0jorbwdN1fraSiTTCyJCv4owyMhAfHkfk-CUx_oeJVqSI9oMTjaDsCeQnigul3JUN_ntuacAWLy0xM1a1tQ_u6lP9KxwWpiHpxp0-xDq7zIgmclksJsqq2erEjmLBdsHC-k582RGKMBz6bW6yeziW5nC23nK8ENeIV1sjgpKn440sa8XvN0Z-joSSJQf7NA_-H37dgUr80H8FbClqQOacbMRwKrZ_pbcfTyPHGCXyIJhN5zgJSLBTtt5ENyRar--yNp1Me5pL9T2yDffI3O852yjGk34okzIjkZw_uoFeNqR-cTkmeDy0ONjgyGtqCgrTM-q_SAuOa4Z3HnqiEL2MdwbKw2KuNo0ZC7Ud35-BID3DEyNtCtm1sA2odXvbG9BdZYxOpL6Mp4oECHEmOtuK8TYE_U66NaRNRKclH8g6S-VuoqE58EE_AYHYYYReh2K8rC3JcMBbaLi1iVu9DNYhz551Gg6vswI8WODkt0VspTp_CRIXrpOGGYho6_-0nlG3O8GULe7JYsnPP9aplmjn3lpA2fDc_1ysEyeKsuXerXHEdypvAgwGtBW2FKHslXANv7BIPlaM5UvOP6YtUttn5Su5bMHcN1b7mETqn3GNnYJc8wan9U5OUIGrEmWKE4GnVv_Fnzy8Gb3Fd0s6bS6pN6GzLU4bMb0-pkyZcCBZ4Mwvq4nDHw7yR1guyPfQYvo6T1XBjRFfPv6kuIyLypUlqoZkxpR3ZyVdy-M2FSxDBHohXfUehoOpFqIZgUQqEafUs9UNGV9BJ5p1i1hiaoBGMBxlNkX9E-r97NS7Fro4Tp580PWu5aKMCv3BUIwiC3Q38wHlzNJJwdviWdfJ6HybdH5Ud2T3AtvuInWuFZNvhF0CyoE1bSn9skO4TjRWitvs1cjHpe6zjdB1FQnRnQIyuTheuEa5tqU99pH_LxJJaLXW7O0ytMDZ9x9uuqXBLK4kPDDE3lOofeOeYjp4yCSNk9VI2amJnQpEDmDO3pjhNM-ZhsZ5B6fnl25SmVZ-fCa0eO4LBYG_GXH5Hvldc56d_BH5jW5hAPab2X10YqQ9Met1cN5Hg06J4NEm8A27XeEpWeVJVDIuTWJkOnn2fktonyiiQ0QOzMP747tGr_CAYy20gdNj2LtCD7aVuy3SbDJ7yLdsOQCrXdfZuI8_VLv1Sq7-mLD17OztHVht4_-kGsR3yfm_ed_Qk6e1RD9gD_yspvn-uoS-QlM8Y4t6SH1MvyFBFD378Um_gLpu4W8hp92FtWF0jktkr37sDmk_cW8WtdvFepdk3zqenu3oe0yVglA5bmGvuHYPh-r-37n4Yhm7krAbUrb4pEAVdsYFEVG4C_9rj5BVZKyxv-zFgDyoVkTgTT8vHGV_BzIlQg1pBNz65Dva8eRwd2SaxMBBn4_4SpALVBug418AU7PsCSatu5qnKISlowkkShr-5WqzByF_E6FF7h76lcF4_kUBcj9xeBLWOLbZJmdymML5iK00Z-zzpvqEEZ47WiKhxIxf6wq6Cj7lOkfN6077I9Sky2FE1DE1lwJUvP3sVZrV0pWLSvHUuDvL6cHkW7DvttEfs2s_8wWuCO7tKbSN47Cb-URLN2ZYu9oXEQZ9BDL8b84HzpG2W5wziO_sy4hnE_56ILu7Nyi4JQXUwpFTatpGIvBLC9AlzpB3v7TY9BHKFdUNVyqQCU1OkV5bJ5bPHEdP_x5FB8WhWMSxHA3mKjDfu_fIxL6S15f4AsnAboc0pD0HsRmGLGRGWEw2QVBTTrbwbny3fe6uphm1dCdaE0PWzQyoM9HPnyOG1FoBB3F5ORheW5c8JlSqqrvOSf5m93_QypPpxv8Z9qv1bbE4DAIo4RVpAdNBYk96RVw23F-wfY3_VNs-rLuAAOQEov24srk9NInb8qjdjDXTyrSbHOblXSFg-MRnzleGUYJ8SoegqQZhEqywYHofNMDv0H8hCACJKNdy4Yo_HpxEZQeQOb5iAUTFyGflUKx_LMOlpDjq5ZsmOe2orMfOlc1wYUSCZeLDskveyxBj7GqjX-s9T-jwbZ3SwExeAHH4WKD3P7W9LC3YgetjFBauY-7D91ilY9JqRpKt2vm1mgAIY-Ol7mLRvpbdQXy-W-ude5JyoPcKdOiHGBDkiJR9c04BKB_KSkT186aXKrq-4M2MHIE25NmxIiMI3hYn9j_mgS5DYwJXb398x3oz9XYB_29RYJxzmqbGPFtllc3cmM8tELqV2sxrP92gMFojH8lLI6W11hbUHH1FZksTOAd6Wy1kkM-GDBsIjIYjHQEFuvxGf7N8DfVW5d2ZdWuaxgMbkW4r7Wny9EhSpFoc_iUcohvY66_8y_LgMLJtqP28fJljfu5rkkvDryIlLTZL5200WcP9YSeBtBUS1OoOUYYuyAKejxrWSASylsp_L-7eQegvK0yxYV3OvmCGm2lJA-wbFtuMZ2mlxqGiJzFIETZdRZLfFz8iq4MoSwsL7_rkjgt1LkOxKY7bm7DtbRXEW9DHGVyBqFSu0Pop8WbSZgCXdBN5saS9_nRq5PJwEHEPYIA5OJyf4Y9vj3ahnJx7BTw46gaa9fB0WqlpUwhxuyJO7KjWo2upkzkfcBeUwLjBYyD3I4nAFfY8MK1_k8jZst2AM1ccLFcHpzxfb-3f5YfWLp2t4AeTG2_NdAIXoZhcGVBNI3VkyCU8Rhck9bnplivinmHg8mHz_sd6291sNBNKeX9_zgvRkNHMu4KsQOALmY4RLVVx-aJPV-Qqfn2gWM60KmZTAreOqZ61kcyX6DAbOfpbIX4PKgsjl2_hIqaB6YBpTZcG_AqE5j_5Y6S-CH1peYFnpohI1WikpS12bsrm2GC-vKYYpJeM116Gxe618wP-7gYNrTDbjAQrtyitRyScpmD0OGTloIeVXyfkv1kIUlXRrTgMEi_0LBV_fSoK6OpwKwC_80qZGT2k0ttiEBUo7uSZslRbVX35kCjPjuGmVAiZSoDk8lKBRgaHD9m4Q63Hp6eQHKRwvKKe-bgjkViIRCglGSWAuyV0ICZFtH0cteDKOgR11Tn_aTb2bZSoW6macOciIkQNkiG3rkqiwcHNEfZIk60Kc42jXWMCtQHetIbHC9Skq7FtJ7NgvVjggHdtIsZKH5frb33f-hty0cWO0p9HZ7myZm1wIlibg64-Mvshq6XmUGBsKlt_JnFsz6f2nYWZUS48OhP-sxDCns3Nb_SwKUKQMEW-STJ3Po7J40hQw1c8rfKXsgpFwhCCk7PtxJXypjjYNK0yLHsXMKp1AjUDkrzufQdqXVQOhggcTwG9aXYDZSdQvU4N7GKpXzXFXfWgO4cyWUVcoDJvSOY1MDejETKNxKHoEZQ3u2FXVdSpPqpU-vB-Kinlp4smq2NhUnQ_3Kzq4wtwn9otWqYtTGcDUe5O0JJki-gi_1gX35JUj8CWHpl2uVs96-gT4008hBWfkqjLAn2RIDvJVi8DRcsXRl6v42tSacy_b_4CyOV2FDFunJj227Eduys1K5Xt7gi3-Ks1rbfmqM0rL2YdPZbX0i2oOSRPFPo31zHMMB12INfAOY85I-6l0Jdt_zIOdpUCH2dMdllQib7XrQuZbWDuTPFj0BOvQ84ORF3GCnHc6N9TL3h_EiGlyGDOQuhY6PG0dgR6RYtQ8mn2qY6_Y8rRSq0GHoA_hOnRig3MpJHr97VDVMik_4kmNh0GkJ6SeuZpoX2FtqMVf1YeECKJ9u__Y3cFZTFI4pwrcXBdBQIjK6nyzfYkgFi4gErubSGPjKeL3DxIvDRn8Cezeq0x0Kc4IuqkFma53-CyjD--7czTeNdkJ1cE9IFUtA_KL4f45PvdOZ82ZC8iHFw47m2U_-QdemYtmBZR0NK0sjIXVZauHSyVYLAKOQ_k2bzo337Pc3-uimC_-Dkcd0XHji1s13tAw4lvIMWd4XYYJ9S52385d677KANTiGi4eCY4lvrOiw6PDjYZ4GR9lY6YAna4iQP7GFQKPonQ9dl1zbDjS4AhNqeXJbpZwcbkN7Er1pSnTTVi7yDwLluTNxnXdjrtXkaQf8tsgJmEEPyv7hK_jUMsK-fmDa6nP5F1DaMLeuwuGKk8bfW7edpsMg30yFqYGu0IMnXptIG0F72C8yIaAcDdoDy3jdF9vcnQNxDPtwtC1kz40nuShaKwfVBl1nNkV_9OSRMMHiSdk1IoRBAqg2KZ3h4w4xUotKyb8xy3jV4Denxi4aGC0f_TXYCzQbPolveDCLfNmzVDz3S2kMKEeQj_kuyOzgQOrWP5cQDa5O2EhBTbr3ch_tzBQoV4IJeLoW0nnjXyxUuTqtnyloygUla2F65mwFvYbq9QrpqSI52-Wvp7vZUk8FYbpmfWZGUCo93MtarsL2A50fJqGvw2F67I_4ddHeljS4g1A3NLO3dJv6qbcGaMJa2JkT-kTOG-2xd_GT3XtXIGOfoxndUXE4Szm1HedJT5TCCPSc1nh-EMk3yh9FBK-_7zJNFXp8UpUNEQoB99mDK88rxrS_8al90n-eF6r9cSmzPpYhDrkFFUGJUwkURUEr0JQ0YkX0fa5yOBwRexDK4zJMs-EwAgARoZnDv36n69CRlYEyyGZc8Iu3a_lhCvz0bZZwTYw_Cyt4qIUMnd63o75y3OFCwbt_zjWYbEtbGD5cLECblxaEZND3fIW8ZYMblx-1KfebUJz6WkQisctx6rMDU93o9FZWHG19koO8ogeCwqdm1YiyUZOYBmMlyOklHWVyMfCB3aFjHiVmquH1rjMnAW4rlW_oN_Eobz6v-LqO6I-EK3P_9GJbRtsNM1GB6jCppjh4s0sKGbd3tLGzqk3J5gM-5Ip2NqPjOukigMcyGpbCB9vWJJLT8RjxYMB-Me6q67nLElKeLceSbx4wre6l_3_SaAt_moR7-TyN5scNiAXV5_8MEz2H8kwwyvkMEKWqNt3GJMUbEJWr5xJOYgcKABxdBBaynJ8PuE9Y8W_EaZt77cnfD0TrAZxnzLKY386Hsi98y6VyGCQ0uVJO8tOlxp3kJQaMREOKyI3ZRfV4xBIKXmwyLo-xACDUf1RsGc2ChlObpOhqaH-Xigtcip4H4wLZdglhVwRn2AxheYnZkVbDaATM98x78YFKM8WmdIbwRI6kO-nN5voJAhROo4s8CBB8knacnW5fpVIDcfYdST1lMviZbACYBeiQMdutRrf0rCeNsV9l6mb04RC46-8IKShYmzsv_Dfn22Y4fTKLQshF63jXz4KdhSuL1I5Nrh1B9fe1imsIFkzJGVSqV3iCtksreMOZdT2runmu75BPAfNhOEVDD1Ojsr0Cakl10m_Rt5btiEDEKAnpuLYGSfNFnGrPe8mUkhlfQpqvkSKWvhFiyLPuDmj0Ltd_3jKmWUTnnsV-frzf49E3plceO0DBn_hzDQRQLVTjMQZg5FY11y0HEiGYpFKFhGyg2UOwVq3uwl8HuUKZBLVIpFlwW5YGmn1nNV03mdLlJWkTSYRABTPp186q--V1a6aV9mb_9qq8JtBEU77fa1hYViWTzYhGrbXi2R5oFGVDnR7aYUnaebTrvNte75YQ5Y_Uu9psiw4-tmzaQa9qu1FJeJtEyzTFla7n4ovWBu6SqA2L363cVMk7FZXD-2be1ouKuEQRHXSF7-bGRUxqtBhECgnVDkuJ_XuiMQ8-CzG8qOPlBJ23jH1duQCfEDtpA9GFaNHJYi6z2X9YgsC5-y3BoMco75R6xigD_d9VBdP6-UwZQwVwqPWoAmwGWbuw43ejRgToya6e6t8RAomp8Ak2yZh3Kt-pyBRichFd6F35VKFPPtLdpA1zaO2cXKS7K0DDJWo51P6Sr26KqDYDFTn_PCBQ44V7noi8ecIlbpqxDMea9qsoWbuvluCbvarnZpguz8pX4gN9WVyQ-gK9Oqk5J5jnYY8kw0XkER-KeNCya_7x9kzJSSyPOaSCSvUtrcC6Kv46q563gSXMICgjMXaDT6H2z9dWjKVT4vw1G1uo3BCuprK6JrHaKyNszYIean7e134IJ43t4ijTgrgOAxETfPuXjVbEugx7mJGbi-lcWuO6p3x8h289ufgofNU-xowY75uOMbKllMVUJhThgfjTKdOHFm-UCNdZkXDha0aOWOMAM5JlKmSmnIsMNuJIkU1SXoiSu_TAoXE4gOZe-vO_7LzSibtVFSe2Z1-uKVT88uLip-V4N_hxCt6ycMC1yPcTaUeQkgRTABF68FJG9Wbuwn4hVe2S0QJlNVVbjY2IVXdcWCmlUDA-orCi9w9G7hLbW51C5h_LegryXVm2nECTgvgylVJ0XI2R5s_e8l136ZVAJYQslHwlEBEwdEMMDLBmIBvWpPj0py97s108iH-3hGH0jJfnvyPmLIiRsIpJoln6AJ6FSwV8GpufBztI_BdBlHWwnQUBPQnlo6w5PSVk6_k3p7QbTFtqQ4O3dCANik49QZdmmAJlqwoO3d70iKBIODDs5BTs0JcLVIlLtZuFIJvwMTIkSxJDoFjIVPNBcjNr6oyZD_7GxpukMf40VhWGgygFDoKFnNrMxWzAkf4FKcPe1ACna3dPgjd1yYJPldUgHAk9Z5Fel2_i70SCo6qJzx0NCHFKPL_iZzdycRlxVvQH-DqFBW5qs2hMKRew0tS75WpMQDvdghrX8592ROuaM3_HO8Pvvw730mScVQVuUCBMOwP5zD1_whOjnMToL-eG0hZP3280tvYssGCAAhevh3uVCiokj5i073tVa0CtMSiMECluWWV2hTptI1N_kKBpE-cijA6oLwO56OuRQhZLL2KVi1RDNlq5Bk1NI2rgKfQCzF0ieQg-0n07bzwa7KELAQJnDQAmuq2WCSbeWYR3wVfSXedTOXrxvREFAHbSszfIxQ_4p-eHVWTAK9cv1rQYPWsw-234AmWtx4m-RpfT7lLcX4xHxlTKmm6VPDWhDmbx6L1LU4m3vpJxF9ppHUdKeW-80wo_61HBruuYC_JkjmDDwlsS2AHzlABWhdFFmRoxmeY-5HjXpxjrEL_EHadz5eEfu1SoH84TpisxXVRRWYaxKGCu6ab0fTiM6ltLn3EYlzkyMISgFHbgygYPgjcy4iZ9HsV44l5ofZ2fs_JquT-skQOwBEGE7Zvww_e_TSxp1XnC1YlnPwkz2lekPT9uwbck9k0_EEc0EHOLABeUm5MYwfivnIEe_ZIM4T-QnLyUerGkq6-8YjU-I-tJ8oCZLsn2HWtkOifRfWKgVLMdpNOXagX2g9LXs23wJCWkgJqHGmYIV7SIhU_WJSOy0voa5m7_3ljyfpS5bV7EmHuTTjgFBEgiTLW-ar1u4qpjH2mrZE15tyFck3clbwe-0YvuJAGpsbiobnx0djgGaFTjj50S3Fh_NmrtNoS0Wo02fsE45y4C2U9D8o4yMlBlyl6a-9l9xcBsZIyJ4Fc4NoAX3bXWYmayZV4EJcTlhTNubCYhXa1iOtj5uNGE4rFgEHvcxAm9q7PGunfYNX_ayacjJ4f8Pga6D_-Uh3AovYAwdPLox0BBrtKSKklccr6a1PPYSl9r3y4beeZ9pFl4BiNW7ntBFXr68iTZdxq-BgsGHvq3I-XTBZg1Z1dvV2bg7HBIxqtTAnSx0vjKHr8zbwT8mSe4_QspvrNBdvIIQvZAEq0wRD7v5BoHPnVbYX6blcJVO3nWpJjuoR3Pmwa90LV_-uIkvgXyqb-4u4Thi-d5VcwalXUmmGwUYEh9xUG9yZLDXE6qqMgC-Batr1EVVQ3e-05P4qYMdHeDYEfenBU5YdgC5-EWEg5aD4n9qumEnJ0OCvo6XNx2VAV8LKs8oLU81cKoqoMymXMo4poJpy8SEF0fopLRlOnrJ7B5fB4MGo-5gxpJnq2gPhn_9XBbFbM0OnvAbdCoz8X0_09gG95HVxsqvYoEeSV7egDlpwmhGuUVUYHgsFaLblC3l8m076i5-GXImjCpjDACUqrEj6_V2apzzi68ZYjitTu7vrw2x9CBXEAOviE-EJts4RK9WEL6Wx785L7wZFU-FVzMszWKgCkpCjtQiYA5ToquB8_VlIEX6SHlAMp2vziaSUyPdJ_VW4a0INYRiMKSdsZmhdATlnEhQ0J85QYE5EwsZ3S4fLfNPKqszCMkTL8QH6hjm5yapv5-BKrFKRpTzEmjSpbYOg8HYOpLnDrfMLBzQtRNrOpT92R9XkM99GPf2vc2NLcal1NokVxG9gDN6yPcBnxPrizLtKsKSWbwVpXjrr9WZGWBkHjeHxnUKyjd5RW5fXVwzXdou9VW5pTUTIw2g6fWnUqEq1nI-noNPLAPhnq2nIEJvN8cqZ_QRreMdQ1gtiCExSVunPJckG_W3w79oedvvByL1wFvzUdpU-cHzATFQHk56Yexmew404AC36PGhEg7KDnsNImVTBy483TpAuIbIt5k1Ze163GwWF6Jmy55_NL41kv_6saOtAS2CzhWIItRtbX1mHNHak_EBRj9j02ReZn-gyqjdWNuiclNmq-kBIlqamyfHEf0u2CsJSKlMViWhytxiwwgjNIAjkAEXvaB5ANtTvGOdNaA1o3m4tMWyleY4O5VODXzh4hcXAriqfiFVt4yWD423LAXwPhWd2nL1uleLll5CgyxFXDtTNKXBVG5Rk18Ybq81-ParwbtJC8hyndYMvh-UywOksE_05OQMHq765iD28NrvtxZcYIBdNLvYRkrNtec63P1uguI2RIV0mDKNxrQf4UnpbhmCYO7a8MZyokn8E7mfKWeVLubLtmufnD-1rTvJbkBKAT6XNZJxRu2JdD2yetuD1A2oeGZskzLJ1QISVGOYLVgONRe1VyESIccbaHq1Up3lDymxyZ7dKvT4f8CcTw2O9III0aeQ2Q7qDX_By31E_NtgkuzgPIW2Tfvv5kHRG07_75KGM9Q8T331D8d8t8ySt9cA1f1KXzbW7Q-thuVZG4pler7nSZ2UR1RVoTZEVaRyT0j4YRdRsscEFJLhngHGjlNQqhxUKMtuK318MPoMvgXsnj-Kjlet_ZXnne5hHKtwO6-8G09Q4X6gseoXl-uBExm-bv_XP9fhZvRaoebWjo_HQ5LNOPmmh4_EPWRyisXN7OZlKxAswabHNjb26pPXL4F1I7E7693RQP7xHMrzSaNU1iYYXyQJuadxPswixPmxEboxWXfQcYdd8Adj9rDuecwpnM4PqLmZldoV0JJxiEijjHISiYAb2VdI9EIsJJCiiGqyxpBzdprnOCqZzJTBtrA2d7s8yw49RldU4gDAwvVaFqpifRFa1qEsjsAmxpsB8INfmKX8rLpr8nVowg6Rr4CsmrwzLgt1dJKdxSKpatHEKsv3Ho5-Wu13fRCDnlDhY_QdAHg58zglh21VQIf9dcq_XuaaZoLGF84rYpEaXZpfI-296cj6BdC79SClEI_1xPQIkkmR8xChDFetiOl3r67v2e5WGDJJwlPPU78WlASwGuyCbPjlK6nCt-jHdRPfEZrj4_YeMaJTplSyuuJbhpR5FeMvROl_b7Q7NX6FLSbZHS7LTA1aItUX2Tj9k2JzptmmKKt1evNd8OxrbK9gCyINhMEBD_tpgrl0kGnPIsSLLMEWn1-084HS-naVhcVwWkUzBOJg_PahEMj06awHXBBhlzkIOTLMmlra-GorfTdBGe96ny7snBv5UQz1BS2M30AMoioQQvp4GCPvbJAXSqZG5WNXGcKGwND_0h_BE4kDmaF-gu5G349X5_Lch3EO_eqa47vipavZ3eTbXVPV3XoXN4vMlwjIQ3KWpoQugHXsXzVIQvS2RHT10taEfuvekG1Ua649p7xKF0bkWbe0PCXPUfVgAdWR9nbfqzw2JuxwaABR67rjrINCU0AtkV6ButPIASfk5HHrFnhohEh_pQehHN8xuZtGHoaT8F-wBKCUDQzNm4ke0Wtjh3IyjkfHWoVupaaYZ_n5RzTLDE3ubC1wxeM8U1eZwK6vya9F3DBye2EVTFDkE5VXmmSup1Fn0wVDy4irZVqDMcnywAzhYUX2uhYNqBKSus6m-qZmi2_4WAKCIixOobAv7DQoezVZ0wIsCOeDbAihgU0FgSxBah3-UBy9915CcZlVuvhbCe3MzLDvi-Yu0ENccPBKeJQPNnap0VOBvBmjICZ_yZTY3GBWhF4ehUWFaE-cYfKY-AoDRypgS-MRLxaKCOvdHhxJ5FJ0DDP6gL7tP5U3v1gkiRlP10V2Y17GyfYK-C3_fUtrtqHNNnHzby4jzKs3YoO64CS7gPP0gEcvXRf1sE90Iu-M1U4J78hqTIC8EBZkiucpGsvC1i9xQVZUZB1YyXV49JQG4vyqKoiAA2m0o3Zf2iTQQsl1ePpJhhhXiZYZryDTY6DsNZbEhPsF8nsgKNgfkppmLEV-1wcJsZhOgHxjzTzD8uu-sDqi1prULsAySoU5Ba1dHlKOOu8yo_zab_m55o_d7H_OFIFWoe3Bg-ZK6Ohjbi8apw8BZTljBBUK7CJteE9lBX4KGON-FlcBw_aDFP--L21uXrvrJiktPKEwj-Z7qLqiuuPxj2gD2EeYoEy4uNWI10V01Ns2Jgj7I1LABBkw3w2Jrc47WWqWG_8fnDNmR7-u2JaNpL03hFdfva9YKML8Tb9v-d7lKGuVkyS6cHWGisnHqOyaBTFbyzMj4MviCtXqAAcY5LqC_M9dKdX_aW0pCjWVovOS3rjnY7PlEtHf5lzEFLTI2_sOZcVEaFFk8-CPNAx2yFZSVPUCcR5o1FzOlDdWeEpZIq3_OxiI14H0nI3-FhwZhuF4Ao9XX8K-fQOzT7KBPYc1w86IP1leOR2XNEa01bS_f7Zn1vuMPe6ZeIzqzmws_SYai5Jgs1XX5yZJywj-Vvd4KE-5UrJKy3VdxPRBAjpu2PjnDAwrwuaGfxJfKmuXVZefMQjNmwDaI-xscfCViMcRSa9Bd-65HKMZQiXdwIrZKqj8SZcVtoHCQcWQqUuDpdD55deXYxGkFVUG06XuYd-vTGxo0iy4scmOQLY_soDbnua_LdboQeA2ixTLPINoPcrqHkcCu8V6CRk989lOLvvvrxCol9HqO2wEEB4HuknX-w5y588UXOgjwjJqIlQx-cMoBc4HCpe8Q8KlLA5JMTZaAcW4eLBJdVIjgjQ82wuy7CEqj0qzUAsH79oyHou8beS79yHvrO_eRfJAYUqrxfns5ZW7bHviXtc2nPGdy-3PSsoEKIK9yxk7EmlhDsquthlnYXH2U9BAu0UhwO-NvGjEKt1Zzn-isCz37BpP6EuFsEzKd8UANCtsWm3hO8F4pWsSmuB7vzMY2AaqkEwRzea1LHpkOC2AjFKkiWWUERX66Q6WtWBAQxmdH46nvl5NLrLGU0DBK9n4JOtzmz3VJH6uenOodbgU3OiYgvP-NCbOZsD1clLUeVuKdIWPjZNIqwv5onDZIUk0oc0QQ4pH11BkkEGamZMsIniQMwbW633_EsPYUVtYleYyoOJRHdYpnJABq2g2YzG-X0ydlYI3R_vpBWlzA1HIDNYl7sc2S5WyB56laSQMOLJL511jtfRa-Wj0wTRHmbb9V6vvqQ5C5cy58gbQSz8YXkIH-7QTgSy2PwYCqqnlgMS2wIQGMGrKJH6Ipi_7VYSayy-bKXryEyPXRKOOoa1s6xbLnXZfuztFqI1_neblW8aczwBY5BPXoSpF87kXOckgGV04Teu2XgFd1bAnTLLWTWV0sno_9W5amM56mBbQ1WNlh4FYsYs-5hanqdVPlgW2LvayTzUHLbV0U-B94Wr-qwY9g71GDBypQTvkRw7nqbu2eiKJh0h0jhQ6sq1RwYU2btvE1PiVMJ6mzp78ODEbfa0ond14ZBUIi2ukmc034wU6VrzPVTy4B-4evGfwzx0RuEsL6EW5JVrn0qCgOR5V6OuC2JvW1X9KmNub4VkAx2U5un5SXk8itsdQzJsvm0MAg5fa4ZxeKQgxYKqBgeum5hEYggyxh7GO-SpJNgVLilUxYRtAMP6Glv0qoMFIXjJZuXNOkaeFGoPxCt7x_lweb3w34W-564H3a8HgshtRbnkzSDdoKl1CtPpcamNPUkKwJTlN2N4ueE4qC8rJJW30WM-6QhBwqg6slSZypwFaxUcCbD4aarM_HXj33HMVkh4A30Yk9S-jbR-GutqVbitKIBlX08ZKsn56JlWapoWefC0HqnbmknWc4kmAaLoU4TfljH9GiarOHGC-4KD3tWAY8q6O0xOl65IX35nmFPsclfAmjySsbQ7hGKRCbqUXmUkWJzeuAmiiaUunUycxyCX_Ko-OX0Mvk3dOLM-gb_jzrC1fX4r8OKnZZ4HgVcCFfagF-aJ7_9C3h6fxGejoFqtxAUuna3TA8FofErk68dEf92jgFhRp-hC-F_H7BAl5m8nSPJCX24W5dFCdeuJd80ZjOn8KQdBFIOcbLqO5eJYJax0fU_LMpJknZUiACj4hl4ODPRFd6Aal9DqrNI0ONLgtUAsp2QIC7lgLR0uYMZ5FwotsloXo6ImjUDLaz5QvZmKlIr7l6KY-JxseIMuyuL-0XL7Xrb9agcXOb9QpUSUJyHUKWUyaE9oFLMF0Of3KKfkYuTEYCWzwqVe3XcWSyexW7rAS66KsSVnNHxod3fTRAzGPN3L5p22_ri4h9Q1yFv6AH68sozukqHp895_IjKg6uK_J9nAaASlf9eTFE9Z_7jAmpq7M8mOMr1hbMVF7nOfJpviDqR39vjzJDo8iggZPYoLZXGIlHNkOPrVSGIcS37P8NPkaGbxJox2ymxowGL3XVlQQCrW2D-T7dsbti44kQfvEe6Lhwj4-O9cV1lK91Hko70HVCMVkZzo9Eh1Eot1VM7ihuOfCyq0YYPv3C2wx9FPe0BNzPsFkLaMjs1laqBA4_OInevqP6LgkaWuUwVSMb0_IB7HVJ9RCfTKFq4BJekBvBUauiqBNEKkGpKj5lRFdbipArbkA8uqCLVc2qSJIeXsK64QeWUSHp44RU5A-82PKPcpdKT2XO8enzeZunGXY0qDvPtTpsTTJC5J4EoJYiPBX4V7eu2YzYh9vll2M899onoHuRK3_zkugdlJTDdGnFWg-APCsrtrGRCoLbiF0DLpe9YlbmAmk0XP-82NT3mhE9J_yXSLS_Qt8kMj9aGAKnpYoIOdNWMzDZufg9pnBNNfAjdsnORV0Z9xhC7__VQxmwr_PZSKp6HEVVjMY0tR2jZJBu_iE6AUVJoAaaUCOqLRs5LOplk_BwIUtUchPx-ZzimfdyEHzUYNI-Hbu8pSWPK1DTWm8cT80XWG4MQepmje9CTUrw8EL5KaPxQqzVGRRs-kKCQ7W2ar1rSknM5pzsMNLfDxPsXgIRRWwzYjUfigxKZTUSMuM7fkbhwPBs_TyEA44LAfv3XHUYEvWoTIJL1ls-4aa3pTINS9TKkSXoejt1sXcWH7AifQkNRLLW1eQ9P8ROUMrzguYqBvGFt0VyDj8s19Do0NyMrEzulZ4UH6a2u1QBv6LE_B7DidWbMZYittygaCYsUcXcvoftRxiKCXIwSjxDKtmOJtEv24okwMqXy31HvZjCeZnbG_mAuHsUnmMGUgmVYz3IBcoL8L2oEM3kR0GHfip6IdvIBsnHhv8uZem5pf6FGruhOKO58yKxkIgz_qPGEWKg6vsdZelNwJ0tRrz1HIKM8ZKGQy2WiFnN0eJ0SaRQfuty9wblF7mk0lIsFDFjqLVQy7Tike84rIWT5kI0Xm9b_GB6m5Ewc1UugLQKyUYaH-W2SVarBrjx8dD2PJtjmLxK1RI56pUfrIlLiSfs8W9qP2-e3OtC7qNNfHj4YAPGq8j9T8bO-YGIvopzFUZw3eoyFzTssWsxWOYpyCWTVvDAkqoxVJv6MJfHqnfIuyMGCnVEDYk5Xt7WDrkek5Sk8nHwLUcYiIKIzjTIYLm_DnY-l_EglAzrCOOahvZzUTz5u1ga-iKi3hJfVaNOXGYUrm-EhhRoCy0u_Zm_WfW9xGYRi5RxWpr7X9BcFDyT3QspO07KpPtgnuDA61PAv_gBjAlULMtXQIdYKCVR5TnK1q2OiNbp-unLB5RZ-rZipBbeNkEDJhuVspKXNkZ3H3zGH3apzBjlF6qzSdWdeWmAQZuJ7JnO_NT3ajxy1V1Cd-KX6UhllzyRTlgUoquU61vYrAIdia8wowSeZyfhC4mOPBNMCSfgZLCESRQLc8HGQb_v-cf16EbvDvQH7ir3TfV8i4iJIuBryCcfvoQC7f2BpocXzcndaUjqioaisXNmyn1YyzGIiBFQf23NnYG4s2qsvZgf7aHKRoOG8H04VE40m-HTC7YM9xpc_MFHWqbloYxoIcUH3HdKn-tFdhkdsduEXdGzGg4i2qs0g8RLe5nBG4gphK6JpIJXqSPJAk6C9LlQw_J0eMpNdev7N8wzyHfQIvZ9At0jpPm8uRmoInoc1RPY04NRGa0Xd1NIDYGHvsVHbCbQoISutBu254SEpuXzW9VY6qfnRUk97enryEPo6TUrEoSh_XUnKRBp8j8rEjl9Mc_-GXoS-WtwU2x8e2gMqi9eZREY_8vNk02TDG0aQj9_T1oejjSg_PsCiU8QSFiAySTZaZJDekgKDAquCc2TZy38HJ5mm7L-l1SUgYdVr8i9xHAr2xd6896HkzkPQQqQ1LWGq2_-ZhA7r2Fz7uBsCnyByguSBQVnK_7Wc3t7old3v7q7u8QmDcJXw3JmMNARqGvr1o8gB24rCQGWqZCAy4VKIczTowvgy1MY64GeZxY449S6SU9YyAyBSsNz5OmX7pCrubQfhVRxyJZl1OWX49OI8bJ6cOlKR5oL1OGRZHAEENFbfe7qI0v6F2LTMZmpgkb205p2mCkqcIjhZ9M6tDUYbVQy7AWCIbz_PXKT6ZYJmkRhG3ZAJq2rE5vNaRJhpFirRAjpE5gNglBcJ6jp08WdzkOwVbopAarp3NM-0hG0IOB6Uyf6eFebFqmnJa0kJYyjK7GklRSAs7bksO09RP79MsE6Bk8NNn29DYs35S1tbijchNtPiKPX5-iVWx5ybHjEQtSQ5NMXWQuJBjUqNVh48Yvs6EmNB0BUNWq7Wx8eyX0pG6BHO5fS2kUxEs-n6KKCNwgcYg1v7629UDWXdsAo3cOaqVz0_Wmbhbnr1bqKfnI1uUzfCeMwEzNyRCjcuSndDJi7BjjwkrIpr7wUhc4Eof5znyFBHxYNrvV0SdUltRgb0zD4uTsoOr1n9rgF_W97fXK_ATqK-IUzMA0a1WqbZQ3KI3S9qR16aU4Tzu4FUbfTyinZenqlJgbIITou-J5fYGQbwyiKvxM-Nm3x9AW58vLTw4oKb71LaHLr0goaZ1zv5niV0t64hcq6soyW1rduqXge44C-wOlQiIDtNTF62X9JAAdwR2Y0SvaOyuKeU6MQuCjqcfBEJ9kgDb_a79BR0PocyxzRb7H1BSwcyqVBKAYGnYTpDl400cAUEfoqfglRybwFaMKbMFSekfqVLBcAcMYLi5_QK_cL5NajuwAS1ZozNpJuiacrA1mCpL4jQe7UEZM8bhZdrwEIq7VM-rCNO7X-ACh9q7cD_Yhzej49KF8uJqUtnNNBjCRxBsGHaiGSEv79zFOMkwrXchbN9S0mYUzlLH_9gr9k7Yy9ajiDaU2wi80JhTOr8A33CGJR09yoK0Au_J8-wtcXgIhlxOdvbYGDERF09UkgfYf5jkL5gTKlaOBdUccIU9DsQAj_apprwZqZYrsJSSdrVbF5tAEJ-wGwwlMxwn6GinIZq_iA99yrasS8BdZsVXAIIKrermCfnx97X6OFjkBR81HZCJD3etTGHW_tT1KwUenS1pcz0IJN_sue9VQMDEBo1YPZ8obLqvdzpZGZDsYSRWIshndkT0snj9ltXy5ARvkaCHcZyI234TsyiHK2nOFIwSfuWGBU_R1OWye2HHGYq1CTbhfEpO5pr08ckO3qR32e8ww7DuEdYqM_iZqYqX6FPAQ3gbSZzIjKWCCOZaLJ_W_A8qqXcpcFqdQu2eSV1veWGfa4_xkrtJeysH2hN3jCN7CRO9QvfpoZ6-xAErPEVzctxrdVl8NcGxFlPDbPv6LahJlU404Zvrq1fpzyFy2pp5qHZmkrDarH6vQ5zg2__7gPwnd7LXvNDpjU3RHbsJGMAXBV_AiWdFLF88psbaVMCzLap6XdTu6UC5bXdsQm8gb2EiDSDtvxGiAG78vtiSnhuFMt54QMYvVp3peTI7Xm03Hp-wzFEG5aJVt7rJwTGbEhoCe0Rq2tl7MRXapalN3HCjVnYlP4a0ZbGW-rBPpgHepuxutA6nIjlwaC4YyoEPuyxabS-Gps0l_7bh_Qi3c7yDhqfeRtq977u7Viz8Z7oPp106trwzfVK_iqt8jS0p5jU8rEcG1uaj5x5iQP_67zEdFfK38_EiFbBOH1sOPkSYtUGvNtRrAKb1tnFutPrUuKZeW0JKjF7KATzfp6q2cUTP94vvt5H6Cq0p7h0w8t8qn-P2LUzsuvo8FNxsrd0H8YGh2DTEvAawo8Bpvxf-aKkGIQY8SMUdh46Ml75iozqIreQ9q5k3aUJSswfPAi_N0AoxqIhLBMt69TWbOSEyQsRmgHH6qBXJhD4PS52XycXvhA-6jRV52FmAVoKCvWiLvSuvmxVkix3po4xeWGdDkqDFuP5AOu6_5mPbQE3Bl9A5iQF-kJrg8lXaOH3g6CJ9DUVoqgkqHIz4eMN1wdmWCla5Dwn4n8f-dmxOE_DZmTdLcUQLQFsO9crtFwBVd5j2z7XLu_tzd3P9SncgRKZOwt2MSvQi6mCd7ctRjEkyoct5AMapdcyAqjxb3nFghenYx-FzOipF9_p_iwrMDdPu71xhyj_xZSxXcQIzceP5_MCNFLvySWgQ87UTgca75-r58XvMi0gvzd9gD58qMeGM4-wCskSj80HiWvtvHdCETY1fZ2ZQ_ZqlSuJNoxX6OI_kwDUSLDPmRW3Lqk0aFPnWxPborViUhT_rniu5xd9KmsslCJe9qgtHqACK1Mh-6JzTjDnG669FEQVlzBW_DTgyZEY-dsDInXLcpefHWWag72sFNRhvx7CsmRwLVkg3ei1uo5_2iKKtIZsPi4tOhCKoN3JDPWVJkIehW94TTpgqCYCnzFnbB4kn4DFI5cNnY4mhVU8mbI7A4U-a8uK8KPyOfgChvgBjVlTXnAQ8_SBhOqIU0qGjhYsh2wn07iL8tyiyOTvlYp3JqSROM5JDt2ViQGb67DdJ9MKSamnHLqJ73uWog3igJFTCXa90XdQqVZVZ9OjsgvpJqh_rsrc5YC4GO23Uze5gaEzvHF_0wM0z4IVFYMFqWYAgc-p57WRDJTOCR9NKYZ_EvNm_-wdlEfUeLA1UG9P6qJRG6wk-jAaL5WMnQ3Wc0boDxEs8u-KxNibEynIJZyvNH_3lwGrzYUBsUcY0TPVw3SuccjF0C-gkMiUPWH4kfQEkH-rcYbjDFQ4SOEwtlRLtyWINEisqu_P1ysw3zBgcov3qnFkue9azP7W1cADqyvMgvqYVqFN0TmfFeFGfSaDFY2ZsA2HCzBwStkc9SqlZ8bo9EPVztJJs87jRKkaReOk-YHFuMCIQa2Dbc_ppzsFNTnWRXs6mJZ88hUwo1KXwi_tCrSlCleDbr9NA5JkuaO-agEm_QXx53NczUPD8_kiq17CXYwlGeUL6G3TmQAEfK6wDd_bNuDnCgBOUWRiQu8bnQtJITWofJ30A_qO7uBV2Ra55i2PYjuK34bDXIC6d1wRm_oaKzuQK1IjCHDWSP6-HiOXDUXYs8UZ1sShfrUQZpDdfAcJZjSuTbnYmccQHs3ZKouhseVQ_N60Gwo1mlEQCtGt_HGPwvbrvka1b6gYECxelfPeUtCTPXEDL757Tj06hx2RddGZNBI7svH_MUsfMsDHGXKfNXOWgleFFTwX8MSuvgjJWwOyXtfhDeh90btU6g9mwxJXRZk58X1Hg3JZ1NlKJ44x9hhw3qQAm-v96QU8VxNa6rfpaudL_rLUForZeBsBt0jkykZa56OEP1qjOMttAYeLRxSlk7GWEXZeJdnmjBa-lOAbFvpclgMODAmQ7lr4fPqDrGru3QJQaxpyc9fWVxa3ICHG2L76TB_ofQG8KrUh8dFcQRUxYvIw8P5ASXdd1ikarKNfKjkxzfsBO59GG5jWM-iZgiha-ZIpGMduj-vekhMgFf-OASCk0_ECxBy5OdaiA4sP0QoO21rWEZcLy_1EWGdiyXDMXlAbDtPc8xJ6FXynJe0RrXWEZJRmYeK9emv5QFBfB_LeoopRdJZ2o7AUZlM3sjh8LWxR5Imy_mAAbyodnvP8VdYLAcJ_feTCSRp2ObKeMaibC06tCi3q9t4ka-W9EutOdPpGQyKE_yHyk7W_jnVsbYg9ml5ntkexALyms8t8IayIArnQ4mRB-_f6_9Kj1NtWKbWk1upjCgXaOA24KvUio2rW9UNYkcUO_hCYmsV8S0kCgpXHX-36hXkn55AKX89xcjAyo4AyYg77m4maxYevqcFpxVXS00LjrDCsCV2e-OkhB_qwKvceqmpaWB7mQy6q9HzN46fSLCpxcBdZvBGL2SAQdamlxbL_zkdqRnqD9rfTmLTzlrMrJd8jmF0icZuRWWQrvJFhO5ar-2xs6-csy4WGyvMFSLS7fiJQ3Cc1J-zHXgvy_GBJx51FYz45SaJNnMqvuJg4_MFxRH-CgYHEycMJQd8mIFuCpUjUm75wVzhZpdS8jx0I74Z6kFxW7hv9ZTkjmyc6sWAhPC4MMU5rxMX6nE2H4ploeEyDASnTgqTtby_hQJiF1uwMXhHQ2ah9rtZNs7WGMXy34GXZKWgcTl3QyYrLcgqG-MsC9fHm2Ww4X79myYJC-xR3wiF15e6b7xvkC6PQs_tE1Z9U94Hsv86AhwCdW6ik18MtYLEkVh6rYHyKa-MV-UOX839lh1vKRTYOw2S-CyXEIGNI1VZaRsUPL57ucSY2JsFrnc-9X_6QkWbG1pyhPY5XFIIsTvFysiu-kPrBx4K1uxsaPqxL_jBC_TLRT1XDndl9HcVMnpraFa23lYIXJF3MMM8tieXbwCK0yPOG9QztCiHXR4qUHfJCsUNNT660FQ48IfdxW-6qrB7jqxtjBePVW6q8qmysfIotLhc2hJ4CdaXDgVRhCM3geQhLJOtgENMN7r8o2BaoqeNg5LeBZTryk68AXRW3pdpeUOBMWwfMJV3WthoCrNJTrDGosiSOxydtw_J5c3SwjguBOyAsQi6msnU_lLX1dfUGJ7-7VaJ-LPQDuSEuxIx6FWpehESz1VpTnPxTY0bw6lkMMvkQfwYuQPGCaFU5dkni3FcIH59-4xtndjIjE89qw5BS4_zf52GNE2Zu6mFKALumCYHSp3QOp3vQsSKCDQxmoqkAVHVtHX_LFogz3nSO3xkOj20qHGSuKcGCap0tno_RB8d1tUHKGEBaAACZTN9BhgrjLlS7Fvnv5XzB_v12_L7y6edPRmk8NzJbaqEdl8cSEo32Wxh0G3vZtm9-WlLG62rXZui-rkY-5305v5locpvhrgLN_yIGQ6JjK-8d9cjDx1YSfHyb-jIpiQPa4rxvtx0-WwaHJqNsnbtO7uvyWJJY7moFy-cZCtkVhFEIEvEQxrQAA7QRNTcTgsj26i770ZwwNGhdGz5ZHw-4L-h8XgRJorvgGDtzaem-3LsBDXdeitslFso9qKSijz4SoVK85Of5tp8ECrA99S18Pq2d8XCHwehY2VIXXJNdTLtamqIaNnO7v47gzVQrdGGwHmaMP1zTA12uOJPySyQbr3JHF24xyO2ccZgSdC-EBXwuwrAj6k96JJIGdkJHNMidFb5NwveqbXIm5cRDsNj_qKM78akZejI7jzNYzqeAQDalZeJ3haf-qCBX8x9iFMlVGmC-F_10vSkYCu9umWci95n5OMW_MQL3N8E-xYceayWYloesoNCnX-G_wfSZALt1XZFdpceYyrcVWyPmIux567_3ltFjQTh0kvR6pAAoVkBl-X0vqnDn-TLQgUTk74G_CjnslrIQTlcCppXvpYJf6Biuce62lTnL2jnVEgMXpKp9o3xeijx5YzcXMznGMFR_RLA3GzYAK5A3R7M1vI4ZudaTluNubzXmjzztRS65NpRYkay3pFApEo0ZZ9mg-gZLnX4gT3638fush7aSyHuEKGvQWKydU4ml9iWHCrGZn3-6Xrkj_sjVrC2p8dLYC2mnrI44hHKxrAAAl2v4CfunMP0ZVZd-86NJHv3nqfVi9akJmqIGS13QuAxzPhCzfnlZRui14z91WSbqRuLQodAFBK-bRnsPSN2rJugBqapR8xQS40n4oT37YBqwNAQxe4_dOplP57UX2GDq5E7PPmLAYUPa5FngDls6nscvPFg7OiuoMTS5Iyh0upNkSsWEG_XL0aDLLYBV8TKr0JpFfHJhVRo0kwJu-nhmYUE-hUJKrippX-Swn2ORBQplzm0SNhL1DQBSvPAY7p2QJO7UuksGd_q9H4KoOhVZXWRUw40YiR-oQmQVyXRl138krc24WLUAYG1ak4dbdpYHlpW6CVzHKZh74R1OYLTB2a56vUL5_YmqWWZHEZJpGyTQhk1fRgWo3eKOcExEuTU8DDKrG2yyHVfMuKrt7AVAxKmeXH-Pwns8-7fnHOQmJke-ifEmftUQcPYXXTgdmTAkADjUrDSopDrMNNy8xhRaCTPc8SnVoaSvGU7p-L-8dAH019C_rE-y94bLaxzacPi7K_KpOUg_ZBlqrEGb9sAoefq6euXBStZEG_Ak-MyajAGRzI73Mhk9-lkpgXhZHA3jdrGt79cZpAuCMDNWI54W_Cd0Dh3Tr4qjvr-6nUAuZx9UsKQE_Hx9ewLCZ3j3KI0bqj1Zqr0XkP-SwoWoaVLoma3Kor_Ugf2n9oTdpGO1BWv7Lk7IhFX9xJ3u7LTWX6SVgllmEx6H16_2nJQcjPZMmWsY6ArVO9XpUSH8DZFKIZhQdCnmw0oUKD4VyqITzDkklwq0paKlX7qlJOyZi--rpypXmVKHCDKXe_-WnagXdf_gNA7myVB53n-3C7UgPux88bMDK-7gsCCCbwh2SAYeBGcmUGX1WfLFxUiG8NkZohZrzbRlPe6Arjx4Tke7AjQVcHRXM81jOajkvgM9DQKT6Yoh6MfbB3G2xMOLiayRgJnAwQWDRZBeCW-N5nsdmkprBSUzmS6HNu36as5gznJ3ZB9p1o4o7iwLUC6nJtaS7yGSUXUYjff4QZKeHiw7yELvWaDnvGJmjxbVej5Mqh3e6540qIheIz4rAP_tw22OsvBHS456vqNuULHgVRK68VZyOiKzwHq7UWtCYfdDCfqBqdo0XzoGJGR13GSpBZYWdG1YNQlcZk63zvERAfaqfTVVKbu0PlQ0b1Wfz6LcMfLLhkMKkF11BUXgiLlRPf7BK9HyWziB7DDZM0-mvJIResplWvC-NQbgRcQbAwy0qehPttorCvbKXnMQI2Z2I_JoVae3JofdusqRPucILsvP60zR5ie-CA1v7QbkWtaYwzgzk1tq5g8w1o3iIE47q_WzJfoKxP1FRStKHNnOPlacDjMX3kjwN6XeDr0qFe1eUeN-sIVsEuuelqdxIL-4urrr2-D4OKsxrPgADdNhFedExNNtrpVhdDHwgzJbU09sKcq-dG68bPCctv1jvJeRtd-t5t12ty9RjtY0l7kMFMkp7YKmLHyrYNk5th5H09zJlHZOrNTqprjhzzkGOhXbuak2F1Im_hZaGj-z4iaXg-_sZk4kJSclymJce4u4H1h2t0k0I6Cktc_-FH--mH5ttLSCACOtNSrRml_KYF2PVi9RhV4JNLfKYHQtevFouKlkJDtFU1EEPonYqGGvcvBcEt-fv156pSNXGDme4ad9W2Me_jDe3zBoNJFgMTKbFLi68Vt7g_c3IgA4-1x4COsO4DAZAJ1mpQFTnDnBm9yFUEOUbNyrfHMN0FgXizGfdzQrz_y6H-QIkDSohR9uQLjtmNx4xSOf3AePRBJlsJ0m2BwYKNXZcScgyp3B6e3krRE1t9lO9XNjjgBvGcprQV8iloKWY3w9huh33M1RnUQ6SFgNRZPT3_oZZZTfj84W2ibrTSEKkmpHK7olQGiSYWj0yfWgY6ZdOG2Gi2zT76V_P2jI_uZt4eEpfPBocG3M51O53lRnBTOyB2QvfPn-DY_O8p2jaH_vrOskA4V7dr8E18EEJxuDKIrv_LdAcZO1VEto0-5We5WXbNVIaIwz_dFkB4HzbYVbIxj3SUC_ZxisAwKKDF7Uj0600dizgG9XUyANNQj2HmBaM3Xky5EYciEEz-IGHQ1Y6C0AxCBj36Mcay9ZxCoyRdlHJmM76ymhYkLu6h0mtJVTddsPRB8g-b1fAEqF5VSI_nFNF3mokEBB_8Zw8f-kzy5IvM2DlU7naan2QkWhILnfVy7pN3iLNJnhX96j5u9RXCCsDurQjXlMDmcuQqPwCeS98HwJ-ev6uS6OEYZ0iKfeeCwzCU5xAZuYk6q4zr3WSuby3Ecgufrzw20vSshongMoE8POpTFj5kHhHig_wcUc-n3-_lJabcox-WdbK0n7b2_PJUTzcPRRQ1bml3JiZbcTTT_Q1igGWo8s4Sofe59ehXCKwHzWO0c3O10zyn2QW4klXksYd47_1s6zBacNyRoEfuK0A5-cIu1ccpqaGTOxw1-A-zKcmyYGpNzWl90mwPJBWeORGoiNJxza-Y6oMNMZvBnGXu2N12rS1MixqDh94SE1Dka2szCKxrJ3wZH4NXF1948A2caEcp3Fx9UPZ8bEOgO2717r5CeuI_9tjewv5b0g0_uMuwiZ1f_W1j-OjVzmOfZhGgeLArp68ALs9DTM2aW7TqIPbL5BHs-dcf6ZvTTN1jPiZSR5r9xINEIg72jh7V2cJITLC5_DjHO0Eiu6t5APt8UiLp96rVjod679bipxv6Pm5blTu727YDReQX_liR9uOhvKdCqhvexjP72rkaWz7fwXR_oTgKIlJmyvMHvQihA3e42bgDA2cBT_XACBJOAU6ER7pF9cPXDURCrsrHdkTenq5E2aaDnj0ZYYdwx9jGRKC9zYhb3XXtqSQQx6eCkiARREZSciza-jC6VJv-GQmXTWEFVckTQgPNNSiiafh1QsRy7czsJSIbCeXskTOvOXwsPjnJ28i5a-nfqO7dpR7LRKW4xp-GvNrDepXnJezujW1bWXgD7KZ1aKQaFmglVYqjULMWHZmHMArJIIQTnmhwzLYgQpr3iY2KeNnqf4ZGtLRWpPduxW6gzas2AlTK2ZPV1AcvuSfyXS4b6GEy-v1xbISsByq74oVBsqeYywqanA1F5nsDptnUyCtke_reIzihzrekz4EDDM167Gu9bwdI371aj-hWSzpbH7YYyMgAUmoixkXtI9OTeQAU8TRzq43jn17otA88eUY_OEzuoJ4LKlBfT5MSxOfvs_jrrEbUftXs9f5Kvdi_szBc-D0xZO4MbZNI954jG0tpmZYTmv2iXIICSSB_q8WYtGxgbDAZ-XIP3-EXk_ByeqFMtXCzhTDbaJe2Nxpq5KZb_guVMjNlAB0fuECSSlJg_fjIbboBaqbcp_N1TtH91pEIEFloVcwinWbnMJwG-QiW07n6mWb2IraM8iG4cSBxmc0KoM0lKmE9JXoJp8X3SjCs_BcakI46vqk7pX8GFBHzf2OC8BLUyYcGhb5L5dqLtNenAVZM1qhNZlZ2mnNXnB1PmgIL4UyN9PeH2_dxn1VK6l9gEig8T0mjSdINBjHxsa9vhaVxnluXEDD02Bc13cUH7RduoiYx91QAWrvO7rW4litwWcjd6x8pWAA5xlLNUDDGSnyff-kKgyDvEok3z8Y13UhgIXQJS6pa9K3bKocSv5y_QkkvKXfj8tGstkglxtKUZfR7g9JOw3ClpYzCDqWOQLsGwx-E7e6z9kAGZM0p7d1bCnZKXVpvE0qtxI-EWleqEvgkTJR0nVReDQSChoJ5MmdLVE7U0UEns6pTd9hGJh6_KnSR1M58BTA3APN2tCCwGTmdviNQjHmRFjoVDYhxilgWNnnN1-0sp21pEiJgxiVvtQ73l3SUPRrD_HDOvyPd2aDAolxYaE8HpaVr4nS8N5SrcicaCs8XQs_dAHBZmTXNTFFTCrV4tKX4tRL1M9AI4qifcvJQoQZgjp7EqZS4TXHH7oZA53UeECUsIUoNa5pHAqK611GI-C08147Eqw7KAagcajc2PcZl5wQ0HdAinRPt6rp0uQRcQam5o4f3rwnWueRAn3QRV_OLiG7UpsTV9FHJUV-1NkJ0Mjfos8dcCLNHDZd10FTP_wsXTrEbx2KfUcywjJFaJIR3OuaRV6aUSVeO6osToW80XtHsK0txYPLW-NX6VdGrc4FQLBbSN5dDtO4SNZnQ6j2vX5tEMUTG95hzBs9j0Ca6d-c5wod9iLzEV6dY9iVwus_e26akByFyjg5h2gQD6yL78pcDhlCHEQqtqjOGntpOJqSsVDjuOlCWFIuBJl0f4FpE2gts7XfDE87nqh1YfYVgDEtGoysXOWuCdtVLfvcO8go6Chl3FZ2PN-NI6reofpBj0w7qjwmcBrUOmH5FIpig8jCdqbnR-4a43o9ERKf-WqYb0dPgCdPeZRtQOb6-cdEU9Y89y3nJLp06XwWhUMG9m2-0gNgMOh4GKmIE-9r62dVYzKyUKQkvaJOg_FOoKg8RzmHULnWGvZA6TATqL3Y5zkQNDGwVu2hJdYYOjiRqNDtjZEhThtbbfjl3jH4DpqtY02ZWa_Mr9GXXBwN-9zpQCSnh5XfHCGldFEMA-jfoYspNHBYhCGmqwM2cKl_2UYXkY7g2ijlHl7kOOwXmWNqeO0zIrbngNv4tlnX7yzq7yY8AItfoaSQYZiP5Qc-1vqC0pK5IsLEvdxVwr8xNID41GCxAgsN4h8QF8p0TOOQ5mYvUlZKXJj6rVUw7Hql8eWN5bdmEP98QZLGJ71IBbBmz81eOG7GJbFFCLA7QpV7b-ooTxJYDW1SzaW4SISSgEkkeqwyZu1bxYO30_s6yFw6JhmJdv2FLAyLngBkoS_0W2zs5YKWihkI0YHjRLVEWCPgvMWuf6XuR8SF6ag3B5-ovRjpXiAWaeeclSqX04m_kVhxRbysR052K-LI3lBYUb6cmfvi9148SbHvifPhWiGPDqOx_XVcPfcugIruUjtySiG3WH6dVUKdqw2lRx3n8yrLxMOw80pQ5wqenS2VIuODGOh5Vn4yQi0PpPENfhvUTh5MUrRXrozfBYGP-tkqwlSoEd2iyHTFUsP2LY9awTOLGW-jNQN47YPJbtJbiwxeZ02-7cdB050TSOhSeYXEca4RFGir_XGXFM57Ao_ZUHG8o0YG3j8F3AOS2B7kkTE0wrurowemAuClIYXELyFx72Dy6TE6koOGIU0cUzx1067Vp13opk_ve1mp1VJEFv3njk_114aOsguf_p4jC1RrMIEUe-OAHcvT-lX3iJ4uLDMJmGKQjsUgKtOjsd75IxlU6W7FHYUdALrnhTaxVm3ZNL4-FK6ZeL2T4dJukQFUMCo8RIkyX7qXR8t8LSi6irVASCMM8suqZtKXpszcR3ARu_7Z0LJgglmCbG3HkwjD0Vil-EMJEgxGFbYV2b0zqku_eNRe4sx6MiKJ49P2K0yg6TusdVQ-mcw041nGCAK2wBXggX6fMtxcVNDgMcfVCDJMPRYAYPs7jHEnFQ83cw18bX1Ivx8pgZfxL2J3zVcadAqMpLdqE7kPzG2V5OhnQZFE7gKjm3zwbQtWlo9v3q0toD7aK9SGcNf6peacTzdX2ySKFAXv12uLy4AgUCxvhmeMjeVoABmB-frgfazULtneFRMlBYS-vMP1RvD_Bac91d8XNy7858LvZGTzc4LgJk-YhIEZWP6TC9NZh23kSW0B7__Wq6wnPTkFGE1pmtCH8x0_saYZMO2f1Yt85z9uXoHe0TWlXS2DOSDtOQsSUelVJGHwY_CmYDNMSV-hW2BDDY1De00HhSU6PSifv-xqV0HUkdMq__0QQsJoIrMnfQ5yIlSmPNzIZ3_z31YDRvDVF6GngftJMhSpbei38CqHMjoypkYkTVW4axesGQgiZ3I3jie_50AYCr2eSF6RGHoxbnoZoUa3WSD0IRVUh6lqfTkG5U5WutUzjF3wYm4Fei2DODwzu0F5-Tb7lqTKrZDPeF76u6Dl2zsoP9OFGlOkYNTSIghP2pvGNwc_z2KnpErgi4MhEesvKHOwrApFySuDVRjbyOUQ2kRqQJW7JGsYFxe3S5PEIqO_2jKZNUZL4Z2aIZVl8BHNSPmLmSGm7C4m652XUhj8RDx5JZusfqms7S848GcAeIBjrcW6KraCI2eKAPo8ARHpDxPxEQdNmEaMm172Cs0sw8Uj1eDH54gVpr8KhFAU7JLNnQgJ-uGKVm6NvOl4qvu15VAXqbDHtHK1kwZRWdGqQuvaSi7V6Pd4tOcKCvg9q0F0K6gbwMJbSl56PZOjsZPG-aUt5-zmObJ5I0OIecqfXeqIwPZtjsgYxEagcubydzdXuAqdUogKo_JabiUR5HxPqbjTPxHofYbuTRVZsmuuwdOKAZZdtL9o6Mch0-vTFhwydELoJ0lcbVkKlE9h-65yp98VgYY8AX1VmJtO62zgnsmOzJXpJ-axOMPX2BIj7fveRsLBwY5mtSlxi8jE1GGs82Bj4cpJ_7eJX9oKcaO2MzsvhsIIeYw-8NPRb7Ip2TgmpvO6jpDMExHOLelroIo9rfCj_HsucZ2Oqol6x0bvmSGZAp5a87iF1Ts1925NRDMJ5cVacXJO-lGpdPTtqaxavW8qzHgvZDXkpi2mvuNH4rsVN_X3-nUmacU3hCIn04NwE29EQONi1QlG1Wcq_KFLHMxy1dO-CCY8tTAoYAABZdLX8Db6251iVAgocVd2NIrwSdkINA8tfODVL4WcsNW265Frc60RA5zNmx97T3ZBw42OkeuhlvJ_7bUZ3fX0BERYtFTFIYYuEGmP9TJefbENnL88filREI19IORnAiumkGV144CASn0prv0FArADcL923haUyLNPCIZcDoldIwh-j-3o6NfLuSkmJlkuPUbQAQrpePvLVQ2B-MvVcgvM82VMpgH4nKmE6yBMcoGJ_kyXTUQvxdfMGr6ANUJDNcQLa83Fss6ILffR5Llt0L_1drfwdZbQishjiSQZCd-P5uq4DRjrWr-uDWzNOltD6gAkXgKv3SDdKrMtUdHV_5-unTqYo9mGboYiMBjIxhPjcaEdhIBHXArl3B_ztq503dWLEhrnoDg7Jyzri2D4CD90IJvESTcB-UJPGcuSNAfzIMF7S3nF9bsC_lthoKUlAdfza83g_EW4oam0Ao7YYXXl8LTWsJXUVpUqAR9VkRvk4u504MKrsAtZ0j-NPdPb0BYUeBeirhXOr0dy3X_Q_a3t1nouAiOJzYlqArI-PTWev6sIHDPKS_LVpQcyxQ6zb_vRXFjAA7fntr2rgScEpeRYTTU6B0_HSDwu3YWuQVL7iMynLxuRWV0dKIk2k-18Z22jFC3sQi7o_ocLUCdYqxCRaR1MmMbZ9CPWD1cjWu6kUk0rJxJGy7uTFSVLsEPJxCPMjg866eh89PeZ6ykISyCX_WgVeXhHqzPakXNBs-0bJBAIRlNltanWpvjiYS82H1M5Si61EKp0UA9MUVkS3oiUWvpkLXyrdnoeBg7qV3QAqfMKZVPkTfw9XVmqMRs7VcKRXoMha99d1ON0bHVEbC-7zE7ZvYuVPdP6NhXkfE8y8MAanW29h7kgqgzmIRpYHA_cLKQC4YkTVUT4QvLA8rvjafWED73TP_NFT4ZdPl7viFhxHr_6HGWr2FsgW795RX7nRRCRiUF8DB904njKfm2_ps761IDSTCVboBs7HhXJOg8P9WKPrzA1Biz1gyM8wgckoHVp0QxN7kWE5zGtVrOqXmtkTQGqqzR6Q9VkB83bb9FDMVLLMDwPrbmPfFYbh5bSt8goa93rR94T0_hr5UDRtFFahYYR8gwobHzlaMBLOc_dZIV_3QoHW4tovO0WTHN-LiECzoQgaYF8RefGsQ6U4VpcFr-qn4HfWrcOXevODPEmiNWEfe50ZeiEmABClupl5_9k6SlCbfbTej7TpJFHqfDdr8zZ8Iro0MXvqt3VQTrw8I6R9HMMhqOhBqPw_Pr_kbC9tN-l-DOnMiSM4StWo1cQ7Lnkv85TUcEhbZEn2yMvdKOp-OietGm-fHyEZb3dIaj5aQTjSFdF2mXJUWx8O1k5r1NwXPyReD6SxrZMcdJ2tg0ILICDJYBshbnhd8PFgy5Xm8jz1elqTBon1spbyViiiJCA6UU5vnsSVsRa8xdg8g2Q4apUay8juhLE95NNuEvMDxjrPl6Ef50lU6dMEyfHLTjSzAI1XMUtweD5sGoVlr3-ivOgBbjR-HM85rUmecWD4XKFa2kY86uxoEH9neOvohnrglVzKpbeiC_yZ5sv0BXylNzOGnMwClcJWjl7u37blaYCv_rB6ZvWY7y9WAB9-mnBr8Qlw9b7OWHZUzSAtbJ79mgUx0KXBrNQvKUF9F3ZFpZSqLx1g8VjeYMNUFnC7nbx5rgpQpzkXljXf2odujP44WsI6BSG7tQvyfLPYwl9RWGQIUWkTBIfVIQ4P-4_bcaqsDOXeZdangA7Q3al4lMR4oQoxxXhDxeOygJIvLataB6I-4CESGLr_uAK6khwaCBc8Nu2w9K2ug7S-hruy5v97LrF_a-4u4Z8--_mHrTgY3wBsLCvvNRaml64AA515JhXTm1v_55qvfyaqcLIZ_L6blUV2eQPjAYVgngJms2IOhqkboSOCtN6i0Bzv4gm8No8MSvWE8QIE8vBRsnP_6PiUJu_R9QD9MH_disXKDa7OEnSFLzFCslJtNAydt-nyeF4wL7srrl2h3GgKhL6pAfGOuqW3qSAyqh3ycd1Qs64E3FP6oAcWrMrnJbeNpBLpn_-MxWExIzocqtILVFlmwhDrBSUrbhfPH3GG_qRt_V99-waafLAIkYbXmrrT8eRugHu9cEr88Ou8q5Zjoz1nkKbXJXIf-Yhc4x3whBm9kX13nf1WrYJap6366PwrPWizPcyf6YKBSpZAk22SPq4ZI-epCc_hqcA1IwShW57fEEwGulmCHHDwakpK2tnrSor5Djdk3E2uEA4YdOSVXMFZDWlzlXQkHxqxuU3GBknk8WXu4l0l1hT45NjPrBIsh_8duXf0FkFUn3ps6MJhQzdLvaNWLt2fl5n6hNvwuDUiO8Q0nHgmW6EXJbLMpRZl3ucZ_xxxY8w7NdZKaT-xo2a5CTKKYfz_6Opm_wb819FL6ztHGz1fGD4Z0dBebPbzTnuOuCqyLrdzKRg32aATuMWiNud7Mwxf_uRXrePqGzKZ5pg982oaafyI2Y1AVLKtxRJXqtBQ4c9lBocM_NcYlxPBVXksoZG-sAcu02bHvyCSPK6Ghqz8r2Y77qhY1-iAlUK8d3NtEZ6QF4A2SrjJBcNsKan2kVJDz8gFPfhJ_lPbb8tp9wLREe3NvrKjL9msSxXRCeFSNANwmi6ooXAbuD3jZGEkVkmiC6Uem0WhNSImrcNIqndh3jTRPfOQ4POGb0u72GjqqcLTovgvqzYIQNQlAiH4cAR-eUTe2j6QYzR4S2dVOuEepe3jXwpmUZNAK3nQJGY7Q4f4Bbz0HA0ZxTkCtqMdrv27qhgyN0cVfjfJyHDSzka6ZhHvLV_ahaOJEhT0Ocadq56BjaH-65eLfNE8IzLuW5avp53_bqpW9WMPHOeF88PBJAR8gz20XYDo_OJyHMHTRV74e7kmCmaCgxbL4HB3ajvUVez5ZKCFZGSAaOg10m9tnxe6osB7ysdycyRYQMR-Wofv3GSXbsZkMKyzDszdMc30jQ3h3kw9g49c3YIiZkSRBSX2ZDhu_kGHn3Lrzhhq18DV6Dn5DAFuq1DeCJOaVUzXoglsrQ5VEtmXtwa47NrQxXhJU4JoLqzB63SfWsMbUr2a7ylo7LAiU7S9AuFTIQJOSg7K3rhiGCHlbPPtEMNdDcFrCz1OVLg1h8uCkIB2oVY8EeFQqqEW4SLEKfs3_DcntCS6unTUj3inF8bwEaFx4E5BHqF-eL_nOlxyQrVOdjnYp5-dlS-Pd4wX_XIX6xOOYCEvKgY8C5uwjF3tPj3ZBTvkdDLcT07aK1mweZgD94Tm4VOf1maNgswIeOKdhnOowuDiJSd_Zvb1OjJfBuQ7N1h6MEaHHO1fKzArLFwS9imOaGl4YqqdrclMzfdt9AYNhpQR2EY-H0kunnqpbZrlReKp0MGY6TTlNjPANIyn41F5qnHMrfav6DmNo3VZLgfbov-0fw3rzmfm4fn0hPVxnHP_yFEHhXkxCYauDa5X-CBbmM2Xry9wjCLxXg8vN3ZlydrNghk3V1H-PzLkIS8Cy8d5ScY3_rzCkdCFPGo2H9dnytO-f0jPW-qHuYJVXSNlPxN5aKlYuA8PSA_qGuPPQr9IWxttQb85RYKolonLvuTL3rmzlrQAJGbzaCBlyvW4EORzC1AUnP6DdybnJpUuzyZH6qaROmo84-X5RjyLszrTGuRXwq_FU_305XRXWH8rxnRebhV-VfDhOOgT5yOyR_z-uGtY_6f7nYPcuGn2CkStx-AvRGRdTaH7LHNhAAosIUCrUE1ctuLo6p5Pk5ZJcZKm55r9HP0AnK99eMenLsT1-4wKYIVSRKB6ODCH7qncKmUcprIlI4nWqtd6c3TOvjYvhUjfQmDNYwxpoIhcvq2DC9cZhdyVZIrnswff6_-AYfnfu5fOZNteE6QQQEL3bCCEgZnqrp0qhCoVe2g182azem08U1-I_UUsVB10Ff4mmPilsla5oZ_fgo4nPo3dSr7jTUInp6ELTh0DAJXaV86F6sFLPpU-piOV_GwbBpA3v0aYNo48pustZ2z1snE7etwQYI5wO2J4cglQzRLFBz3Efl8KfpNXMWxhDQWOsE9OJKWGXVGOEBTvIgvCoLwverWvoKk6PZO-HQnGwkUKaBGDUPsJpwMk_Qal5fLsyT5YUHLv7Kw6mN4nX-0ddjpt1SvN8Xvx-h0Id9EbdIpTqUwS-2tssVGqfIaMTyS_Vlw3NITbM40jCcD9E0P6JZ3Yt_wz-DI26D8Tt7_FvhX3LAKGOoUL1D0W3fQ2XQdScva7T0ai5lBLIOb2QYwG7hGAf2Nu3VXb-bZkHb4-Ni73k7weM_ByImXB1hkXy7Tj1J_WXbmnWPZzHbhZiWwsfETh4K6hHllHsJ4BuOSv-QI77MYXA8PuFadXXn7UjSjN-Kjvohblybmpuu6n80Bmw9_VgepsFp_K1BvnVayFKqVjXDDEE1vYljjXOkD596dIY7cEF5zk_lhegHUa-vw2gMt40o_Wjl7VtMsMSYqo7wiVpu8ok3gZYqdbK1FAj1ie2pB-KV6-8IyOYXeak4FNNBX-9c1o1EII59mRjpNUrz6RYBiNYuTi30OJE211556l2fGgsjJwNgTjgZ6oTrMVF1Nbk00KlJ_vi42zZVxvfpuP8b8HGkXuK4mmdl9i_j884BpWac6S3F4OeIOjp7uFQ18cCsn0aX6YQTem18l83ADpevNbHHV03583prEPVsMIzCTg08bwwAXO_BMcawcEIa9Im0GMJK3qrA";if(!e)return null;if(Js&&Js.sealed===e)return Js;let t=null;try{t=nc.parse(JSON.parse(tc(e,Ux)))}catch{t=null}return Js={sealed:e,bundle:t},Js}function gH(){let e=Bx();if(!e?.bundle)return null;if(e.runtime===void 0){let t=Date.now();try{e.runtime=rc(e.bundle,{signedAt:t,fetchedAt:t})}catch{e.runtime=null}}return e.runtime}function kH(){let e=Bx();return e?.bundle?(e.keys??=new Set(e.bundle.filters.map(t=>nt(t.slug))),e.keys):null}function yH(e,t=!1){if(t||!e||e.length===0){let n=kH();return n?new Set(n):null}return new Set(e.map(n=>hH.test(n)?n:nt(n)))}var Ux,hH,Js,Gx=k(()=>{"use strict";jf();mr();oc();Ux="tokmizer-default-rules-v1",hH=/^[0-9a-f]{16}$/,Js=null});import Uy from"node:readline/promises";import{stdin as Md,stdout as Be}from"node:process";import i1 from"node:os";import{join as a1}from"node:path";var De={welcome:"Link your Tokmizer account.",needToken:"Tokmizer already works on this device. Linking attaches it to your account.",getToken:"Sign in at tokmizer.com, then grab your key from your dashboard.",askToken:"Paste your dashboard key, then press Enter:",activating:"Linking...",activated:e=>"Linked.",failed:e=>`Activation failed: ${e}`,suspended:e=>`Your token is suspended. ${e}`,revoked:"Your token has been revoked. Contact support at tokmizer.com/contact",rotated:"Token rotated. Paste your new token from tokmizer.com/dashboard/token",offline:"Network required. Tokmizer needs an internet connection.",deviceCap:"Device limit reached. Manage devices at tokmizer.com/dashboard/devices"};function uc(e,t,n=null){return e===null?t!==null?` \u26A0 engine offline \u2014 compression continues on ${t} cached rules (details: tkr doctor)
|
|
128
128
|
`:n!==null&&n>0?` \u26A0 engine offline \u2014 compression continues on ${n} built-in rules (details: tkr doctor)
|
|
129
129
|
`:` \u26A0 optimizer engine offline \u2014 run: tkr doctor
|
|
130
130
|
`:e===0?t!==null&&t>0||n!==null&&n>0?"":` \u26A0 optimizer engine reconnecting \u2014 savings resume shortly (details: tkr doctor)
|
|
131
|
-
`:""}
|
|
131
|
+
`:""}mr();Sn();pt();Tn();F();import{readFile as KC,writeFile as Fy,mkdir as ZC}from"node:fs/promises";import{createPublicKey as Wv,verify as qv}from"node:crypto";import{mkdir as Yv,writeFile as Xv}from"node:fs/promises";import{join as Qv}from"node:path";import{createHash as Gv,createPublicKey as Kv,verify as Zv}from"node:crypto";var Ep=`-----BEGIN PUBLIC KEY-----
|
|
132
132
|
MCowBQYDK2VwAyEA1erltQyvslpreg50WyEfiicirx2SMdYbjVEL3Kbk5pk=
|
|
133
133
|
-----END PUBLIC KEY-----
|
|
134
|
-
`;function
|
|
134
|
+
`;function $p(e,t,n,r,o){let s=Gv("sha256").update(o,"utf8").digest("hex");return Buffer.from(`tokmizer-bundle-v1
|
|
135
135
|
${e}
|
|
136
136
|
${t}
|
|
137
137
|
${n}
|
|
138
138
|
${r}
|
|
139
|
-
${s}`,"utf8")}function
|
|
140
|
-
`)}function
|
|
139
|
+
${s}`,"utf8")}function Vv(){return Ep.replace(/\\n/g,`
|
|
140
|
+
`)}function Tp(e,t,n=Vv()){if(typeof t!="string")return!1;try{return Zv(null,e,Kv({key:n,format:"pem"}),Buffer.from(t,"base64url"))}catch{return!1}}F();Tn();pt();Sn();At();function e_(e,t){let n=$o();if(!n||!n.includes("BEGIN PUBLIC KEY"))throw new Error("Tokmizer plugin: no valid signing public key. Set TOKMIZER_RESP_SIGNING_PUBLIC_KEY_PEM or rebuild plugin against a prod key.");let r=Wv({key:n,format:"pem"});try{let o=Buffer.from(t,"base64url");return qv(null,Buffer.from(e,"utf8"),r,o)}catch{return!1}}function t_(e,t,n){if(n.length===0||n.some((r,o)=>r.position!==o))throw new Error(`incomplete or inconsistent fragments on ${e}`);for(let r of n){let o=$p(e,t,r.position,n.length,r.body);if(!Tp(o,r.contentSig))throw new Error(`content signature mismatch on ${e}[${r.position}]`)}}async function n_(e){try{await Yv(y(),{recursive:!0}),await Xv(Qv(y(),"content-signature.json"),JSON.stringify({at:Date.now(),status:e}),{mode:384})}catch{}}var r_=/^[a-z0-9][a-z0-9-]*$/;async function Ap(e){$n();let t=await z();if(!t)throw new Error("Plugin not activated.");let n=await Ze(),r=await Ae("GET","/api/v1/skills/bundle",void 0,{baseUrl:e,bearer:t.jwt,signingSecret:t.signingSecret,fingerprint:n.fingerprint,installId:n.installId,timeoutMs:8e3});if(!r.ok)throw new Error(`bundle fetch failed ${r.status}`);let o=await Jt(r),s=[];for(let i of o.bundles){if(!r_.test(i.slug))throw new Error(`invalid bundle slug ${i.slug}`);let a=[...i.fragments].sort((c,l)=>c.position-l.position);for(let c of a)if(!e_(c.body,c.hash))throw new Error(`fragment signature mismatch on ${i.slug}[${c.position}]`);t_(i.slug,i.version,a),s.push({slug:i.slug,version:i.version,body:a.map(c=>c.body).join(`
|
|
141
141
|
|
|
142
|
-
`)})}return await
|
|
143
|
-
`);function
|
|
142
|
+
`)})}return await n_("verified"),s}var Rp=Object.freeze(["power","tkr-reducer","tkr","tkr-gain","tkr-status","tkr-link","tkr-unlink","tkr-compression","tkr-telemetry","tkr-update","tkr-yolo"]),Cp=Object.freeze(["power","reducer-light","reducer-balanced","reducer-max"]),o_=[[/allowed[-_]tools/i,"allowed-tools"],[/^[ \t]*["']?hooks["']?[ \t]*:/im,"hooks"],[/!`/,"shell execution"],[/^[ \t]*(`{3,}|~{3,})[ \t]*!/m,"shell execution"],[/(?<!\w)@[^\s@]/,"file reference"]];function Pp(e){for(let[t,n]of o_)if(t.test(e))return n;return null}ai();import{chmod as aM,mkdir as cM,readFile as Gp,writeFile as lM,stat as Ic,readdir as Kp,rm as li,rename as uM}from"node:fs/promises";import{existsSync as g_,readFileSync as k_,realpathSync as y_}from"node:fs";ci();import{dirname as zp,join as Po,resolve as Up}from"node:path";F();F();import{randomUUID as d_}from"node:crypto";import{readFileSync as f_}from"node:fs";import{mkdir as p_,rename as m_,rm as jp,writeFile as h_}from"node:fs/promises";import{join as Lp}from"node:path";function vr(){try{return f_(Lp(y(),"yolo-mode"),"utf8")==="on"}catch{return!1}}async function An(e){let t=y(),n=Lp(t,"yolo-mode");if(!e){await jp(n,{force:!0});return}await p_(t,{recursive:!0,mode:448});let r=`${n}.tmp-${process.pid}-${d_()}`;try{await h_(r,"on",{mode:384,flag:"wx"}),await m_(r,n)}finally{await jp(r,{force:!0})}}var Io=1440*60*1e3,w_=30*Io,Zp=200*1024*1024,b_=8*1024*1024,Vp=/^[0-9a-f]{8,64}$/i,x_=/^[0-9a-f]{8,64}$/,Oo=".meta",Oc=30,v_=200,ui=["usage: tkr restore <hash> [--lines a:b] [--grep pattern]"," tkr restore --list [--all-projects]"," tkr restore --grep <pattern> [--all-projects]",""].join(`
|
|
143
|
+
`);function Nc(){try{let e=JSON.parse(k_(ft(),"utf8")),t=e.maxAgeDays;return{...typeof t=="number"&&Number.isFinite(t)&&t>0?{maxAgeDays:Math.min(t,365)}:{},...e.disabled===!0?{disabled:!0}:{}}}catch{return{}}}function Hc(){let e=Nc().maxAgeDays;return e?e*Io:w_}function _r(e,t,n=process.env){let r=Number(n[e]);return Number.isFinite(r)&&r>0?r:t}function Dc(e=process.env){return{maxAgeMs:_r("TOKMIZER_CCR_MAX_AGE_MS",Hc(),e),maxBytes:_r("TOKMIZER_CCR_DIR_CAP_BYTES",Zp,e),entryMaxBytes:_r("TOKMIZER_CCR_ENTRY_MAX_BYTES",b_,e)}}function __(e){return`${gr(e)}${Oo}`}function Bp(e=process.cwd()){let t;try{t=y_(Up(e))}catch{t=Up(e)}for(let n=t;;n=zp(n)){if(g_(Po(n,".git")))return n;if(zp(n)===n)return t}}function Wp(e){return e===""?[]:(e.endsWith(`
|
|
144
144
|
`)?e.slice(0,-1):e).split(`
|
|
145
|
-
`)}async function
|
|
146
|
-
`;let n=e.reduce((i,a)=>i+a.bytes,0),r=" "+"\u2500".repeat(60),o=Date.now(),s=[` Restore cache \xB7 ${e.length} entr${e.length===1?"y":"ies"} \xB7 ${
|
|
147
|
-
`)}async function
|
|
148
|
-
`};let t=e.toLowerCase(),n=await
|
|
149
|
-
`}:{error:`tkr restore: no cached content for ${e} (entries are kept ${
|
|
150
|
-
`}}function
|
|
145
|
+
`)}async function qp(e){try{let t=JSON.parse(await Gp(__(e),"utf8"));return typeof t.at!="number"||typeof t.bytes!="number"||typeof t.lines!="number"||typeof t.partial!="boolean"?null:{at:t.at,bytes:t.bytes,lines:t.lines,partial:t.partial,...typeof t.label=="string"&&t.label?{label:t.label}:{},...typeof t.project=="string"&&t.project?{project:t.project}:{}}}catch{return null}}async function di(){let e;try{e=await Kp($t())}catch{return[]}let t=Dc().maxAgeMs,n=Date.now(),r=[];for(let o of e)if(x_.test(o))try{let s=await Ic(gr(o));if(n-s.mtimeMs>t)continue;let i=await qp(o);r.push({hash:o,at:s.mtimeMs,bytes:s.size,lines:i?.lines??null,partial:i?.partial??null,label:i?.label??null,project:i?.project??null})}catch{}return r.sort((o,s)=>s.at-o.at)}async function fi(){let e=await di(),t=Dc();return{entries:e.length,bytes:e.reduce((n,r)=>n+r.bytes,0),partialEntries:e.filter(n=>n.partial===!0).length,retentionDays:Math.round(t.maxAgeMs/Io*100)/100,entryMaxBytes:t.entryMaxBytes,maxBytes:t.maxBytes}}function Jp(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${(e/1024).toFixed(1)} KB`:`${e} B`}function Yp(e){let t=Math.max(0,Math.floor(e/6e4));return t<60?`${t}m`:t<1440?`${Math.floor(t/60)}h`:`${Math.floor(t/1440)}d`}function No(e=Dc().maxAgeMs){if(e<Io)return Yp(e);let t=Math.round(e/Io);return`${t} day${t===1?"":"s"}`}function S_(e){let t=No();if(e.length===0)return` Restore cache is empty. An entry appears when an output is shortened and is kept ${t}.
|
|
146
|
+
`;let n=e.reduce((i,a)=>i+a.bytes,0),r=" "+"\u2500".repeat(60),o=Date.now(),s=[` Restore cache \xB7 ${e.length} entr${e.length===1?"y":"ies"} \xB7 ${Jp(n)} \xB7 kept ${t}`,r,` ${"Hash".padEnd(18)}${"Age".padEnd(6)}${"Size".padStart(9)}${"Lines".padStart(8)} Command`,r];for(let i of e.slice(0,Oc)){let a=i.lines==null?"?":String(i.lines).replace(/\B(?=(\d{3})+(?!\d))/g,","),c=i.partial?" (partial)":"";s.push(` ${i.hash.padEnd(18)}${Yp(o-i.at).padEnd(6)}${Jp(i.bytes).padStart(9)}${a.padStart(8)} ${i.label??"\u2014"}${c}`)}return s.push(r),e.length>Oc&&s.push(` ${e.length-Oc} older entries not shown.`),s.push(" Show one: tkr restore <hash> [--lines a:b] [--grep pattern]",""),s.join(`
|
|
147
|
+
`)}async function E_(e){if(!Vp.test(e))return{error:`tkr restore: no cached content for ${e}
|
|
148
|
+
`};let t=e.toLowerCase(),n=await di();if(n.some(o=>o.hash===t))return{hash:t};let r=n.filter(o=>o.hash.startsWith(t));return r.length===1?{hash:r[0].hash}:r.length>1?{error:`tkr restore: ${e} matches ${r.length} entries, use more characters
|
|
149
|
+
`}:{error:`tkr restore: no cached content for ${e} (entries are kept ${No()}; see tkr restore --list)
|
|
150
|
+
`}}function $_(e,t){let n=/^(\d*):(\d*)$/.exec(e)??/^(\d+)()$/.exec(e);if(!n)return null;let r=!e.includes(":"),o=n[1]?Number(n[1]):1,s=r?o:n[2]?Number(n[2]):t;return o<1||s<o?null:{from:o,to:Math.min(s,t)}}function T_(e){try{return new RegExp(e)}catch{return null}}async function A_(e,t,n){let r=[],o=0;for(let i of await di()){if(n!=null&&i.project!==n)continue;let a=await Qp(i.hash);a!=null&&Wp(a).forEach((c,l)=>{e.test(c)&&(r.length<v_?r.push(`${i.hash}:${l+1}:${c}`):o+=1)})}if(r.length===0){let i=n!=null?" in this project (add --all-projects to search every project)":"";return{stderr:`tkr restore: no cached line matches ${t}${i}
|
|
151
151
|
`,code:1}}let s=r.join(`
|
|
152
152
|
`)+`
|
|
153
153
|
`;return{stdout:s,...o?{stderr:`tkr restore: ${o} more matches not shown; narrow with tkr restore <hash> --grep <pattern>
|
|
154
|
-
`}:{},code:0,restoredTokens:Math.round(Buffer.byteLength(s,"utf8")/4)}}async function
|
|
155
|
-
`,code:1};if(n==null)return a&&i==null?
|
|
156
|
-
`,code:1,restoredTokens:0};let d=(await
|
|
157
|
-
`:"",p=l;if(i!=null||a){let f=
|
|
158
|
-
`,code:1};if(
|
|
159
|
-
`,code:1};let g=f.slice(
|
|
160
|
-
`,code:1};p=
|
|
154
|
+
`}:{},code:0,restoredTokens:Math.round(Buffer.byteLength(s,"utf8")/4)}}async function Xp(e,t=process.cwd()){let n,r=!1,o=!1,s,i;for(let f=0;f<e.length;f+=1){let h=e[f];if(h==="--list"&&!r)r=!0;else if(h==="--all-projects"&&!o)o=!0;else if(h==="--grep"&&s==null&&e[f+1]!=null)s=e[++f];else if(h==="--lines"&&i==null&&e[f+1]!=null)i=e[++f];else if(!h.startsWith("--")&&n==null)n=h;else return{stderr:ui,code:1}}if(r){if(n!=null||s!=null||i!=null)return{stderr:ui,code:1};let f=o?null:Bp(t),h=(await di()).filter(g=>f==null||g.project===f);return{stdout:S_(h),code:0}}let a=s!=null?T_(s):null;if(s!=null&&!a)return{stderr:`tkr restore: invalid pattern ${s}
|
|
155
|
+
`,code:1};if(n==null)return a&&i==null?A_(a,s,o?null:Bp(t)):{stderr:ui,code:1};if(o)return{stderr:ui,code:1};let c=await E_(n);if("error"in c)return{stderr:c.error,code:1,restoredTokens:0};let l=await Qp(c.hash);if(l==null)return{stderr:`tkr restore: no cached content for ${n}
|
|
156
|
+
`,code:1,restoredTokens:0};let d=(await qp(c.hash))?.partial?`tkr restore: partial entry, it holds only the part left out of the shortened output (the full output was over the per-entry limit)
|
|
157
|
+
`:"",p=l;if(i!=null||a){let f=Wp(l),h=i!=null?$_(i,f.length):{from:1,to:f.length};if(!h)return{stderr:`tkr restore: invalid --lines ${i}, use a:b, a:, :b or n (1-based)
|
|
158
|
+
`,code:1};if(h.from>f.length)return{stderr:`${d}tkr restore: entry has ${f.length} lines
|
|
159
|
+
`,code:1};let g=f.slice(h.from-1,h.to),m=a?g.flatMap((b,E)=>a.test(b)?[`${h.from+E}:${b}`]:[]):g;if(m.length===0)return{stderr:`${d}tkr restore: no line matches ${s}
|
|
160
|
+
`,code:1};p=m.join(`
|
|
161
161
|
`)+`
|
|
162
|
-
`}return{stdout:p,...d?{stderr:d}:{},code:0,restoredTokens:Math.round(Buffer.byteLength(p,"utf8")/4)}}async function
|
|
162
|
+
`}return{stdout:p,...d?{stderr:d}:{},code:0,restoredTokens:Math.round(Buffer.byteLength(p,"utf8")/4)}}async function Qp(e){if(!Vp.test(e))return null;try{let t=await Ic(gr(e));return Date.now()-t.mtimeMs>_r("TOKMIZER_CCR_MAX_AGE_MS",Hc())?null:await Gp(gr(e),"utf8")}catch{return null}}async function em(){let e;try{e=await Kp($t())}catch{return}let t=_r("TOKMIZER_CCR_MAX_AGE_MS",Hc()),n=_r("TOKMIZER_CCR_DIR_CAP_BYTES",Zp),r=Date.now(),o=new Map;for(let a of e){let c=Po($t(),a);try{let l=await Ic(c);r-l.mtimeMs>t?await li(c):o.set(a,{mtimeMs:l.mtimeMs,size:l.size})}catch{}}for(let a of[...o.keys()])if(!(!a.endsWith(Oo)||o.has(a.slice(0,-Oo.length)))){try{await li(Po($t(),a))}catch{}o.delete(a)}let s=[...o.entries()].filter(([a])=>!a.endsWith(Oo)).sort((a,c)=>a[1].mtimeMs-c[1].mtimeMs),i=s.reduce((a,[,c])=>a+c.size,0);for(let[a,c]of s){if(i<=n)break;try{await li(Po($t(),a)),i-=c.size,await li(Po($t(),`${a}${Oo}`),{force:!0})}catch{}}}Fo();At();Pt();Gi();F();qt();qt();Or();Br();import{existsSync as rg,readFileSync as sg,rmSync as ig,statSync as g$,writeFileSync as ag,mkdirSync as cg}from"node:fs";import{join as k$}from"node:path";import og from"node:os";function lu(){return k$(y(),"healed")}function y$(e){if(!(e<=0))try{let t=Number(sg(lu(),"utf8"))||0;cg(y(),{recursive:!0,mode:448}),ag(lu(),String(t+e),{mode:384})}catch{}}async function nn(e){let t={staleShims:0,rewrittenShims:0,launcher:"absent",hookLauncher:"absent",globalPathRemoved:[],globalPathLines:0};if(og.platform()!=="win32"&&rg(gt())){let r=wi(Cn(gt())),o=Xt(e.shimJs);!(!r||e.explicit===!0&&(o.single!==""||o.js!==""))||e.dryRun&&r?t.hookLauncher="ok":e.dryRun?t.hookLauncher="stale":t.hookLauncher=await Gc(o)?"written":"failed"}let n=rg(G())&&Bn();if(n&&og.platform()!=="win32"){let r=wi(Cn()),o=Xt(e.shimJs);!(!r||e.explicit===!0&&(o.single!==""||o.js!==""))||e.dryRun&&r?t.launcher="ok":e.dryRun?t.launcher="stale":t.launcher=await Uo(o)?"written":"failed"}if(n){let r=await qh(e.shimJs,{dryRun:e.dryRun===!0});t.staleShims=r.stale,t.rewrittenShims=r.rewritten}return e.rc&&(e.dryRun||(t.globalPathRemoved=await cu()),t.globalPathLines=await eg()),y$(t.rewrittenShims+(t.launcher==="written"?1:0)+(t.hookLauncher==="written"?1:0)+t.globalPathRemoved.length),t}function lg(e){try{e?(cg(y(),{recursive:!0,mode:448}),ag(Vt(),String(Date.now()),{mode:384})):ig(Vt(),{force:!0})}catch{}}function Vi(){try{return Math.min(1e6,Math.floor(g$(zo()).size/2))}catch{return 0}}function ug(){try{ig(zo(),{force:!0})}catch{}}function dg(){try{return Math.min(1e6,Number(sg(lu(),"utf8"))||0)}catch{return 0}}Br();async function fg(){try{if(!(await Q()).telemetryOptIn)return;let e=await nn({shimJs:we(),rc:!0,dryRun:!0});return{shimFallbacks:Vi(),staleShims:Math.min(1e3,e.staleShims+(e.launcher==="stale"?1:0)+(e.hookLauncher==="stale"?1:0)),brokenHooks:Math.min(1e3,Wl().length),globalPathLines:Math.min(100,e.globalPathLines),healed:dg(),failOpen:Wt()}}catch{return}}En();Ho();var Dy="-command",My=3;async function Od(){try{let{connectDaemon:e}=await Promise.resolve().then(()=>(Zr(),Kr)),t=await e();try{await t.reload()}finally{t.close()}}catch{}}async function Id(e,t){if(!(!t&&await Ac("power"))){try{let n=await Ap(e),r=[],o=[],s=[];for(let i of n){let a=i.slug.endsWith(Dy),c=a?i.slug.slice(0,-Dy.length):i.slug;if(!(a?Rp:Cp).includes(c))continue;let l=Pp(i.body);l?s.push(`${i.slug} (${l})`):a?await Cc(c,i.body):await Rc(c,i.body),(a?o:r).push(c)}await br(r),await xr(o),await ii(s.length?`unsafe bundle skipped: ${s.join(", ")}`:null)}catch(n){await ii(n instanceof Error?n.message:String(n))}try{await em()}catch{}}}async function VC(e,t){let n;for(let r=0;r<t.attempts;r++)try{return await e()}catch(o){if(n=o,r===t.attempts-1)break;let s=500*Math.pow(3,r)+Math.floor(Math.random()*300);await new Promise(i=>setTimeout(i,s))}throw n}async function Ca(e){$n();let t=await Ze(),n=_o(),r=await z(),o=r&&r.linked!==!0&&r.token&&r.token!==e.token?r.token:null,s={token:e.token,...e.email?{email:e.email}:{},pluginVersion:ue,timeZone:n,...o?{previousToken:o}:{},...t},i=await VC(()=>Ae("POST","/api/v1/license/activate",s,{baseUrl:e.baseUrl,bearer:e.token,fingerprint:t.fingerprint,installId:t.installId,timeoutMs:1e4}),{attempts:3});if(!i.ok){if(i.status>=500)throw new Error("Tokmizer servers are temporarily unreachable. Try again in a minute.");let l=await i.text();throw WC(l)==="device_cap"?new Error(De.deviceCap):new Error(De.failed(`${i.status} ${l}`))}let a=await Jt(i),c={token:e.token,jwt:a.jwt,signingSecret:a.signingSecret,plan:a.plan,status:a.status,trialEndsAt:a.trialEndsAt,subEndsAt:a.subEndsAt,jwtVersion:a.jwtVersion,installId:t.installId,fingerprint:t.fingerprint,pluginVersion:ue,...e.email||a.boundEmail?{email:e.email??a.boundEmail??""}:{},timeZone:n,bonusActive:!1,linked:!0,lastHeartbeatOkAt:Date.now(),...Array.isArray(a.allowedFilters)&&a.allowedFilters.length>0?{allowedFilters:a.allowedFilters.map(nt)}:{}};return await ei(c),await Od(),await Id(e.baseUrl,!0),c}function WC(e){try{let t=JSON.parse(e);return typeof t.code=="string"?t.code:null}catch{return null}}function qC(e){try{return new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit"}).format(new Date)}catch{return new Date().toISOString().slice(0,10)}}async function Is(e,t){let n=await z();return n&&n.token!==e.token?!1:(await ei(t),!0)}async function Nd(e){let t=await z();if(!t)return null;if(!B())return t;let n=await Ze(),r=t.timeZone??_o(),o=await fg(),s={ts:Date.now(),localDate:qC(r),timeZone:r,...o?{health:o}:{}},i;try{i=await Ae("POST","/api/v1/license/heartbeat",s,{baseUrl:e,bearer:t.jwt,signingSecret:t.signingSecret,fingerprint:n.fingerprint,installId:n.installId,timeoutMs:5e3})}catch{return t}if(i.status===401){let f=(t.heartbeatAuthFails??0)+1,h={...t,heartbeatAuthFails:f},g=t.linked??(!!t.email||t.plan==="smart"||t.plan==="pro");if(f>=My&&g&&(h.relinkRequired=!0),!await Is(t,h))return null;if(f>=My&&!g){try{await Fy(`${y()}/state.replaced.json`,JSON.stringify(t),{mode:384})}catch{}try{return await jy(e)}catch{return null}}return null}if(i.status===451){let f=await z();if(f&&f.token!==t.token)return null;await ti();try{await br([]),await xr([])}catch{}return null}if(i.status===426)return await Is(t,{...t,updateRequired:!0}),null;if(i.status===423)return await Is(t,{...t,relinkRequired:!0}),null;if(!i.ok){if(i.status===400)try{(await i.json())?.code==="stale_ts"&&await Is(t,{...t,clockSkewDetected:!0})}catch{}return t}let a;try{a=await Jt(i)}catch{return t}lg(a.failOpen===!0),o&&ug();let c=a.settingsRevision??0,l=t.lastSettingsRevision??0,u=c>l,d=a.plan!==t.plan,p={...t,jwt:a.jwt,plan:a.plan,status:a.status,trialEndsAt:a.trialEndsAt,subEndsAt:a.subEndsAt,jwtVersion:a.jwtVersion,lastSettingsRevision:l,lastHeartbeatOkAt:Date.now(),heartbeatAuthFails:0,relinkRequired:!1,updateRequired:!1,clockSkewDetected:!1,timeZone:r,bonusActive:a.bonusActive??!1,...a.bonusResetAt!==void 0?{bonusResetAt:a.bonusResetAt}:{},...a.latestPluginVersion?{latestPluginVersion:a.latestPluginVersion}:{},...Array.isArray(a.allowedFilters)?{allowedFilters:a.allowedFilters.map(nt)}:{}};if(u)try{await Rn(),p.lastSettingsRevision=c}catch{}if(!await Is(t,p))return z();if(process.env.TOKMIZER_SELF_UPDATE_CHILD!=="1")try{let{maybeSpawnSelfUpdate:f}=await Promise.resolve().then(()=>(ra(),na));f()}catch{}(u||d)&&await Od(),await Id(e,u||d);try{let{syncReducerRules:f}=await Promise.resolve().then(()=>(xt(),bt));await f()}catch{}try{let{flushTelemetry:f}=await Promise.resolve().then(()=>(ba(),wk)),{flush:h}=await Promise.resolve().then(()=>(Hy(),Ny));await f(e),await h(e)}catch{}return p}var YC=5*6e4;async function jy(e){$n();let t=await Ze(),n=_o(),r={pluginVersion:ue,timeZone:n,...t},o=await Ae("POST","/api/v1/license/enroll",r,{baseUrl:e,fingerprint:t.fingerprint,installId:t.installId,timeoutMs:4e3});if(!o.ok)throw new Error(`enroll failed ${o.status}`);let s=await Jt(o),i={token:s.token,jwt:s.jwt,signingSecret:s.signingSecret,plan:s.plan,status:s.status,trialEndsAt:s.trialEndsAt,subEndsAt:s.subEndsAt,jwtVersion:s.jwtVersion,installId:t.installId,fingerprint:t.fingerprint,pluginVersion:ue,email:"",timeZone:n,bonusActive:!1,linked:!1,lastHeartbeatOkAt:Date.now(),...Array.isArray(s.allowedFilters)&&s.allowedFilters.length>0?{allowedFilters:s.allowedFilters.map(nt)}:{}};return await ei(i),await Od(),await Id(e,!0),i}function XC(){let e=process.env.CI;return e&&e!=="false"&&e!=="0"?!0:!!process.env.GITHUB_ACTIONS}async function Qe(e){let t=await z();if(t)return t;if(XC()||!B())return null;let n=kc();try{let r=await KC(n,"utf8"),o=Number(r);if(Number.isFinite(o)&&Date.now()-o<YC)return null}catch{}try{return await jy(e??Gt())}catch{return await ZC(y(),{recursive:!0}),await Fy(n,String(Date.now()),{mode:384}),null}}pt();Fo();aa();pt();sa();import QC from"node:readline/promises";import{stdin as e1,stdout as Oe}from"node:process";var t1={enabled:!0,outputVerbosity:"compact",filters:{enableAll:!0,disabled:[]}},n1=`
|
|
163
163
|
Help improve Tokmizer
|
|
164
164
|
By default Tokmizer collects the NAME of the commands you run, like "git" or "docker",
|
|
165
165
|
and whether we managed to compress them. Never their arguments, your output,
|
|
@@ -167,106 +167,106 @@ your file paths, or anything inside them. It just shows us which commands to
|
|
|
167
167
|
optimize next, so you save even more over time. Turn it off anytime with
|
|
168
168
|
tkr telemetry off; your choice survives updates.
|
|
169
169
|
|
|
170
|
-
`;async function
|
|
170
|
+
`;async function r1(e){return Oe.write(n1),Hd(e,"Share command names and token counts to help improve filters?",!0)}async function Ly(e,t,n){let r=(await e.question(`${t} [${n}]: `)).trim();return r.length===0?n:r}async function Hd(e,t,n){let r=n?"Y/n":"y/N",o=(await e.question(`${t} [${r}]: `)).trim().toLowerCase();return o===""?n:o==="y"||o==="yes"}async function o1(e,t,n,r){let o=(await e.question(`${t} (${n.join(" / ")}) [${r}]: `)).trim().toLowerCase();return o.length===0?r:n.find(i=>i===o)??r}async function s1(e,t,n){Oe.write(`
|
|
171
171
|
Let us walk through each setting. Press Enter to keep the default.
|
|
172
172
|
|
|
173
|
-
`);let r=await
|
|
173
|
+
`);let r=await Hd(e,"Enable Tokmizer optimizations?",!0),o=await o1(e,"Output verbosity",["normal","compact","minimal"],"normal"),s=await Hd(e,"Enable all built-in filters?",!0),i=[];s||(i=(await Ly(e,"Comma-separated slugs to DISABLE (e.g. git,grep)","")).split(",").map(l=>l.trim()).filter(l=>l.length>0));let a={enabled:r,outputVerbosity:o,filters:{enableAll:s,disabled:i}};return ia(t,n)?Oe.write(`
|
|
174
174
|
/power is available right now on this token.
|
|
175
|
-
`):t==="smart"&&
|
|
175
|
+
`):t==="smart"&&Oe.write(`
|
|
176
176
|
/power is included with Pro.
|
|
177
177
|
It is NOT available on this token today.
|
|
178
|
-
`),a}async function
|
|
178
|
+
`),a}async function Dd(e,t=!1){let n=QC.createInterface({input:e1,output:Oe});try{let r=t?" (bonus window active)":"";Oe.write(`
|
|
179
179
|
Configure Tokmizer (current plan: ${e}${r})
|
|
180
180
|
|
|
181
|
-
`),
|
|
182
|
-
`),
|
|
181
|
+
`),Oe.write(` 1) Recommended - sane defaults, ready to go
|
|
182
|
+
`),Oe.write(` 2) Custom - walk through each option
|
|
183
183
|
|
|
184
|
-
`);let s=await
|
|
184
|
+
`);let s=await Ly(n,"Choose 1 or 2","1")==="2"?await s1(n,e,t):{...t1},i=await r1(n),a={...s,telemetryOptIn:i};Oe.write(`
|
|
185
185
|
Saving...
|
|
186
|
-
`);let c=await
|
|
187
|
-
`),
|
|
188
|
-
`),
|
|
189
|
-
`),
|
|
186
|
+
`);let c=await rt(a);await An(!1),Oe.write(`Done.
|
|
187
|
+
`),Oe.write(`YOLO: off (this machine only)
|
|
188
|
+
`),Oe.write(`${JSON.stringify(c.settings,null,2)}
|
|
189
|
+
`),Oe.write(`
|
|
190
190
|
You can re-run this any time with: tkr settings configure
|
|
191
|
-
`),
|
|
191
|
+
`),Oe.write((await z())?.linked===!1?`These settings are saved only on this machine.
|
|
192
192
|
`:`Or edit at: https://tokmizer.com/dashboard/settings
|
|
193
|
-
`)}finally{n.close()}}async function
|
|
194
|
-
`);return}let n=
|
|
193
|
+
`)}finally{n.close()}}async function zy(){let e=await Rn(),t=await z(),n=t?Wr({...t,plan:e.plan}):e.plan,r=t?qr(t):!1;await Dd(n,r)}Br();async function By(e){let t=await z();if(t){Be.write(De.activated(t.plan)+`
|
|
194
|
+
`);return}let n=Uy.createInterface({input:Md,output:Be}),r=null,o=!1;try{Be.write(`${De.welcome}
|
|
195
195
|
${De.needToken}
|
|
196
196
|
${De.getToken}
|
|
197
197
|
|
|
198
198
|
`);let s=(await n.question(`${De.askToken} `)).trim();Be.write(`${De.activating}
|
|
199
|
-
`);let i=await
|
|
199
|
+
`);let i=await Ca({token:s,baseUrl:e});Be.write(De.activated(i.plan)+`
|
|
200
200
|
`),r=i.plan,o=i.bonusActive??!1}catch(s){let i=s instanceof Error?s.message:String(s);Be.write(`${i}
|
|
201
|
-
`),process.exitCode=1}finally{n.close()}r&&(await
|
|
202
|
-
`);let r=
|
|
201
|
+
`),process.exitCode=1}finally{n.close()}r&&(await Dd(r,o),await c1())}async function c1(){try{if(Md.isTTY){let e=Uy.createInterface({input:Md,output:Be});try{let t=(await e.question("Also optimize your commands outside the agent (terminal)? [y/N] ")).trim().toLowerCase();if(t==="y"||t==="yes"){let n=await Jn(we());Be.write(`Installed ${n.length} shims.
|
|
202
|
+
`);let r=a1(i1.homedir(),(process.env.SHELL??"").includes("zsh")?".zshrc":".bashrc"),o=await ss(r);o==="added"?Be.write(`Added PATH to ${r}. Open a new terminal.
|
|
203
203
|
`):o==="missing"&&Be.write(`Add this to your shell rc:
|
|
204
|
-
${
|
|
204
|
+
${zr()}`)}}finally{e.close()}}}catch{}try{let{connectDaemon:e}=await Promise.resolve().then(()=>(Zr(),Kr)),t=await e();await t.ping(),t.close(),Be.write(` Engine: \u2705 active
|
|
205
205
|
`)}catch{Be.write(` Engine: starts on first use
|
|
206
206
|
`)}Be.write(`
|
|
207
207
|
\u2705 Ready. tokmizer optimizes your commands automatically.
|
|
208
208
|
Run "tkr gain" anytime to see your savings.
|
|
209
|
-
`)}
|
|
210
|
-
`).filter(l=>l.trim()!==""),s=o.length,i=0;for(;s>0;){let l=Buffer.byteLength(o[s-1])+1;if(i+l>n)break;i+=l,s-=1}let a=
|
|
209
|
+
`)}Ho();pt();En();Sn();Tn();Fo();eu();aa();ai();sa();F();_s();import{readFile as Wy,rm as Gy}from"node:fs/promises";import{appendFileSync as u1,chmodSync as d1,mkdirSync as f1,readFileSync as qy,realpathSync as p1,renameSync as Yy,rmSync as Xy,statSync as Qy,writeFileSync as Ld}from"node:fs";import{basename as zd,dirname as ew,join as Pa,resolve as m1,sep as h1}from"node:path";var Fd={anthropic:3,openai:2.5,google:2,vertex:3.3,bedrock:3.5,openrouter:3.5},l1={"claude-code":"anthropic",codex:"openai",copilot:"openai","gemini-cli":"google",cursor:"anthropic",windsurf:"anthropic",cline:"anthropic",aider:"anthropic",shell:"anthropic"};function Jy(e){return e?l1[e]??"anthropic":"anthropic"}function jd(e){let t=0,n=0;for(let r of Object.keys(e)){let o=e[r]??0;o<=0||(t+=o,n+=o/1e6*(Fd[r]??Fd.anthropic))}return t<=0?Fd.anthropic:n/(t/1e6)}var g1="stats.jsonl",k1="stats-ledger.json",Ky=2*1024*1024,y1=3e4,tw=3e4,w1=new Set(["n","g","e"]),b1=256;function Oa(){return{n:0,nc:0,r:0,f:0,or:0,of:0,x:0,sn:0,sr:0,sf:0,mr:0,mf:0,rn:0,rb:0,tn:0,tr:0,tf:0,ox:0,t0:null,t1:null,cmds:{},prov:{},rl:{},fb:{}}}function nw(e){let t=e.trim();if(!t)return null;try{let n=JSON.parse(t);return typeof n.t!="number"||!Number.isFinite(n.t)||n.t<0||n.t>864e10||typeof n.r!="number"||!Number.isSafeInteger(n.r)||n.r<0||typeof n.f!="number"||!Number.isSafeInteger(n.f)||n.f<0||n.r+n.f===0?null:{t:n.t,r:n.r,f:n.f,m:n.m===1,...typeof n.h=="string"?{h:n.h}:{},...typeof n.k=="string"?{k:n.k}:{},...typeof n.c=="string"&&n.c?{c:n.c}:{},...typeof n.p=="string"&&n.p?{p:n.p}:{},...typeof n.s=="string"&&n.s?{s:n.s}:{},...typeof n.o=="string"&&w1.has(n.o)?{o:n.o}:{}}}catch{return null}}function x1(e,t){if(!t.c)return;let n=e.cmds[t.c]??{n:0,nc:0,r:0,f:0,sh:!1};n.n+=1,t.f<t.r&&(n.nc+=1,n.rr=(n.rr??0)+t.r,n.rf=(n.rf??0)+t.f),(t.k==="sh"||t.k==="restore")&&(n.sh=!0),t.h==="shell"&&t.k!=="restore"&&(n.tn=(n.tn??0)+1,n.tr=(n.tr??0)+t.r,n.tf=(n.tf??0)+t.f,t.f<t.r&&(n.tnc=(n.tnc??0)+1,n.trr=(n.trr??0)+t.r,n.trf=(n.trf??0)+t.f)),n.r+=t.r,n.f+=t.f,e.cmds[t.c]=n}function v1(e){return e.s==="b"?`b:${(e.c??"").split(" ")[0]||"other"}`:e.s?.startsWith("u:")?e.s:e.o==="n"?"n":"?"}function _1(e,t){let n=v1(t),r=e.rl[n]??{n:0,nc:0,r:0,f:0};if(r.n+=1,r.r+=t.r,r.f+=t.f,t.f<t.r&&(r.nc+=1),e.rl[n]=r,t.f>=t.r&&t.o){let o=`${t.o} ${t.c??""}`,s=e.fb[o]??{n:0,r:0};s.n+=1,s.r+=t.r,e.fb[o]=s}}function rw(e,t){if(t.m){e.mr+=t.r,e.mf+=t.f;return}if(e.t0=e.t0==null?t.t:Math.min(e.t0,t.t),e.t1=e.t1==null?t.t:Math.max(e.t1,t.t),t.k==="sh"&&t.r>tw){e.ox+=1;return}if(x1(e,t),t.k==="restore"?(e.rn+=1,e.rb+=t.f):_1(e,t),e.n+=1,e.or+=t.r,e.of+=t.f,t.f>t.r&&(e.x+=1),t.h==="shell"&&t.k!=="restore"&&(e.tn+=1,e.tr+=t.r,e.tf+=t.f),t.f<t.r){e.nc+=1,e.r+=t.r,e.f+=t.f,t.k==="sh"&&(e.sn+=1,e.sr+=t.r,e.sf+=t.f);let n=Jy(t.h),r=e.prov[n]??{r:0,f:0};r.r+=t.r,r.f+=t.f,e.prov[n]=r}}function S1(e,t){for(let n of["n","nc","r","f","or","of","x","sn","sr","sf","mr","mf","rn","rb","tn","tr","tf","ox"])e[n]+=t[n];t.t0!=null&&(e.t0=e.t0==null?t.t0:Math.min(e.t0,t.t0)),t.t1!=null&&(e.t1=e.t1==null?t.t1:Math.max(e.t1,t.t1));for(let[n,r]of Object.entries(t.cmds)){let o=e.cmds[n]??{n:0,nc:0,r:0,f:0,sh:!1};o.n+=r.n,o.nc+=r.nc,o.r+=r.r,o.f+=r.f,o.rr=(o.rr??0)+(r.rr??0),o.rf=(o.rf??0)+(r.rf??0),o.tn=(o.tn??0)+(r.tn??0),o.tr=(o.tr??0)+(r.tr??0),o.tf=(o.tf??0)+(r.tf??0),o.trr=(o.trr??0)+(r.trr??0),o.trf=(o.trf??0)+(r.trf??0),o.tnc=(o.tnc??0)+(r.tnc??0),o.sh=o.sh||r.sh,e.cmds[n]=o}for(let[n,r]of Object.entries(t.prov)){let o=e.prov[n]??{r:0,f:0};o.r+=r.r,o.f+=r.f,e.prov[n]=o}for(let[n,r]of Object.entries(t.rl??{})){let o=e.rl[n]??{n:0,nc:0,r:0,f:0};o.n+=r.n,o.nc+=r.nc,o.r+=r.r,o.f+=r.f,e.rl[n]=o}for(let[n,r]of Object.entries(t.fb??{})){let o=e.fb[n]??{n:0,r:0};o.n+=r.n,o.r+=r.r,e.fb[n]=o}}function sn(e){let t=new Date(e*1e3);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`}function Jd(e){return Pa(ew(e),k1)}function ow(e){let t=Jd(e),n;try{n=qy(t,"utf8")}catch{return{}}try{let r=JSON.parse(n);if(!r.days||typeof r.days!="object")throw new Error("invalid ledger");let o={};for(let[s,i]of Object.entries(r.days))!/^\d{4}-\d{2}-\d{2}$/.test(s)||!i||typeof i!="object"||(o[s]={...Oa(),...i});return o}catch{try{Yy(t,`${t}.corrupt-${Date.now()}`)}catch{}return{}}}function Zy(e,t){let n=`${e}.tmp-${process.pid}`;Ld(n,t,{mode:384}),Yy(n,e)}function E1(e){try{return Ld(e,String(process.pid),{flag:"wx",mode:384}),!0}catch{}try{return Date.now()-Qy(e).mtimeMs<y1?!1:(Xy(e,{force:!0}),Ld(e,String(process.pid),{flag:"wx",mode:384}),!0)}catch{return!1}}function $1(e,t=Ky,n=Ky/2){try{if(Qy(e).size<=t)return}catch{return}let r=`${e}.lock`;if(E1(r))try{let o=qy(e,"utf8").split(`
|
|
210
|
+
`).filter(l=>l.trim()!==""),s=o.length,i=0;for(;s>0;){let l=Buffer.byteLength(o[s-1])+1;if(i+l>n)break;i+=l,s-=1}let a=ow(e);for(let l of o.slice(0,s)){let u=nw(l);if(!u)continue;let d=sn(u.t),p=a[d]??Oa();rw(p,u),a[d]=p}let c=o.slice(s);Zy(e,c.length?`${c.join(`
|
|
211
211
|
`)}
|
|
212
|
-
`:""),
|
|
213
|
-
`)){let i=
|
|
214
|
-
`).filter(r=>r.trim()!=="").length;return await
|
|
215
|
-
`;try{
|
|
216
|
-
Watch this session live: tkr session`;let n=e.agent??{count:e.count,rawTokens:e.observed?.rawTokens??e.rawTokens,filteredTokens:e.observed?.filteredTokens??e.filteredTokens,savedPct:e.observed?.savedPct??e.savedPct},r=n.rawTokens-n.filteredTokens,o=n.rawTokens?Math.round(r/n.rawTokens*1e3)/10:0,s=p=>new Date(p*1e3).toISOString().slice(0,10),i=e.window?.firstAt!=null?` (since ${s(e.window.firstAt)})`:"",a=p=>` ${p.padEnd(16)}`,c=Math.max(0,Math.min(24,Math.round(Math.max(0,o)/100*24))),l=
|
|
217
|
-
`)}async function
|
|
218
|
-
`)}var
|
|
219
|
-
`)}var
|
|
220
|
-
`)}function
|
|
221
|
-
`)}function
|
|
212
|
+
`:""),Zy(Jd(e),JSON.stringify({v:1,days:a}))}catch{return}finally{Xy(r,{force:!0})}}function Gd(e){let t=m1(e),n=t,r="";for(;;){try{return Pa(p1(n),r)}catch{}let o=ew(n);if(o===n)return t;r=r?Pa(zd(n),r):zd(n),n=o}}function T1(e,t){return e.p!=null&&(e.p===t||e.p.startsWith(t+h1))}async function sw(e,t,n){let r="";try{r=await Wy(e,"utf8")}catch{}let o=[];for(let s of r.split(`
|
|
213
|
+
`)){let i=nw(s);!i||i.t<t||n!=null&&!T1(i,n)||o.push(i)}return o}async function Kd(e,t,n){let r=t>0?sn(t):"",o=new Map;if(n==null)for(let[s,i]of Object.entries(ow(e)))s>=r&&o.set(s,i);for(let s of await sw(e,t,n)){let i=sn(s.t),a=o.get(i)??Oa();rw(a,s),o.set(i,a)}return o}function ro(){return Pa(y(),g1)}async function iw(e=ro()){try{let n=(await Wy(e,"utf8")).split(`
|
|
214
|
+
`).filter(r=>r.trim()!=="").length;return await Gy(e,{force:!0}),await Gy(Jd(e),{force:!0}),n}catch{return 0}}function aw(e,t,n=ro(),r=!1,o,s,i,a,c={}){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t)||e<0||t<0||e+t===0)return;let l=o?`,"h":${JSON.stringify(o)}`:"",u=s?`,"k":${JSON.stringify(s)}`:"",d=i?`,"c":${JSON.stringify(i.slice(0,24))}`:"",p=a?Gd(a):"",f=p&&p.length<=b1?`,"p":${JSON.stringify(p)}`:"",h=c.s?`,"s":${JSON.stringify(c.s.slice(0,66))}`:"",g=c.o?`,"o":${JSON.stringify(c.o)}`:"",m=`{"t":${Math.floor(Date.now()/1e3)},"r":${e},"f":${t}${r?',"m":1':""}${l}${u}${d}${f}${h}${g}}
|
|
215
|
+
`;try{f1(y(),{recursive:!0,mode:448}),u1(n,m,{mode:384}),d1(n,384),$1(n)}catch{return}}function j(e){return Math.ceil(e/4)}function cw(e){if(!e.count)return null;let t=Math.round(e.compressedCount/e.count*100),n=(e.byCommand??[]).filter(o=>!o.native&&o.compressedCount===0).sort((o,s)=>s.count-o.count).slice(0,3).map(o=>o.cmd),r=n.length?` \xB7 top unchanged: ${n.join(", ")}`:"";return`${t}% of recorded outputs reduced (${e.compressedCount}/${e.count})${r}`}function A1(e){let t=Object.values(e.rl).reduce((o,s)=>o+s.n,0),n=e.n-e.rn-t,r=n>0?{...e.rl,"?":{...e.rl["?"]??{n:0,nc:0,r:0,f:0},n:(e.rl["?"]?.n??0)+n}}:e.rl;return Object.entries(r).map(([o,s])=>{let i=j(s.r),a=i-j(s.f),c=o.startsWith("b:")?"built-in":o.startsWith("u:")?"user":o==="n"?"none":"unattributed";return{rule:c==="built-in"||c==="user"?o.slice(2):c,kind:c,count:s.n,compressedCount:s.nc,rawTokens:i,savedTokens:a,avgPct:i?Math.round(a/i*100):0}}).sort((o,s)=>s.savedTokens-o.savedTokens||s.count-o.count)}var R1={n:"no-rule",g:"no-gain",e:"failed-run"};function C1(e){return Object.entries(e.fb).map(([t,n])=>{let[r,o]=t.split(" ");return{cmd:o||"other",reason:R1[r]??"no-rule",count:n.n,tokens:j(n.r)}}).sort((t,n)=>n.tokens-t.tokens||n.count-t.count)}async function an(e=ro(),t=0,n){let r=Oa();for(let C of(await Kd(e,t,n)).values())S1(r,C);let o=j(r.r),s=j(r.f),i=Math.max(0,o-s),a=o?Math.round(i/o*100):0,c=Math.floor(Date.now()/1e3),l=r.t0!=null?Math.max(1,Math.ceil((c-r.t0)/86400)):1,u=Math.max(0,j(r.mr)-j(r.mf)),d={};for(let[C,N]of Object.entries(r.prov))d[C]=Math.max(0,j(N.r)-j(N.f));let p=Object.entries(r.cmds).filter(([,C])=>C.n-(C.tn??0)>0).map(([C,N])=>{let te=j(N.r-(N.tr??0)),V=te-j(N.f-(N.tf??0)),ve=j(N.rr??0),rr=ve?Math.round((ve-j(N.rf??0))/ve*100):0;return{cmd:C,count:N.n-(N.tn??0),compressedCount:N.nc,savedTokens:V,avgPct:te?Math.round(V/te*100):0,reducedPct:rr,native:!N.sh}}).sort((C,N)=>N.savedTokens-C.savedTokens).slice(0,10),f=j(r.sr),h=f?Math.round((f-j(r.sf))/f*100):0,g=0,m=0,b=0;for(let C of Object.values(r.cmds))g+=(C.rr??0)-(C.trr??0),m+=(C.rf??0)-(C.trf??0),b+=C.nc-(C.tnc??0);let E=j(r.or),D=j(r.of);return{count:r.n,compressedCount:r.nc,rawTokens:o,filteredTokens:s,savedTokens:i,modeledSavedTokens:u,savedPct:a,sinceDays:l,savedByProvider:d,shellCompressedCount:r.sn,shellSavedPct:h,byCommand:p,observed:{count:r.n,rawTokens:E,filteredTokens:D,savedTokens:E-D,savedPct:r.or?Math.round((r.or-r.of)/r.or*1e4)/100:null,expandedCount:r.x},shortened:{count:b,rawTokens:j(g),filteredTokens:j(m),savedPct:g>0?Math.round((g-m)/g*1e3)/10:null},allCommands:{count:r.n,rawTokens:E,savedTokens:E-D,savedPct:r.or?Math.round((r.or-r.of)/r.or*1e4)/100:null},shortenedOnly:{count:b,rawTokens:j(g),savedTokens:j(g)-j(m),savedPct:g>0?Math.round((g-m)/g*1e3)/10:null},droppedEvents:mk(),agent:{count:r.n-r.tn,rawTokens:j(r.or-r.tr),filteredTokens:j(r.of-r.tf),savedPct:r.or-r.tr?Math.round((r.or-r.tr-(r.of-r.tf))/(r.or-r.tr)*1e4)/100:null},terminal:{count:r.tn,rawTokens:j(r.tr),savedTokens:j(r.tr)-j(r.tf)},restoration:{count:r.rn,tokens:j(r.rb)},byRule:A1(r),fallbacks:C1(r),oversizedExcluded:r.ox,window:{firstAt:r.t0,lastAt:r.t1},measurement:{scope:"tool-output",legacyScope:"reduced-outputs",tokenMethod:"bytes/4",tokenCounts:"estimated",billing:"not-measured"}}}function Y(e){return e<0?`-${Y(-e)}`:e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":String(e)}function lw(e){return e<0?`-${lw(-e)}`:e>0&&e<.01?"<$0.01":`$${e.toFixed(2)}`}function me(e){return String(e).replace(/\B(?=(\d{3})+(?!\d))/g,",")}var Ia="\x1B[38;2;245;176;65m",Na="\x1B[0m";function Ns(e,t){let n="\u2588".repeat(e);return t?`${Ia}${n}${Na}`:n}function uw(e,t){if(e.count===0&&!e.oversizedExcluded)return` No data yet. Run a few commands to measure your output savings.
|
|
216
|
+
Watch this session live: tkr session`;let n=e.agent??{count:e.count,rawTokens:e.observed?.rawTokens??e.rawTokens,filteredTokens:e.observed?.filteredTokens??e.filteredTokens,savedPct:e.observed?.savedPct??e.savedPct},r=n.rawTokens-n.filteredTokens,o=n.rawTokens?Math.round(r/n.rawTokens*1e3)/10:0,s=p=>new Date(p*1e3).toISOString().slice(0,10),i=e.window?.firstAt!=null?` (since ${s(e.window.firstAt)})`:"",a=p=>` ${p.padEnd(16)}`,c=Math.max(0,Math.min(24,Math.round(Math.max(0,o)/100*24))),l=Ns(c,t.color)+"\u2591".repeat(24-c),u=lw(r/1e6*t.pricePerMtok),d=e.terminal?.count??0;return[` Tokmizer savings \xB7 ${t.subtitle??"all time"}${i}`," "+"\u2550".repeat(60),"",`${a("Commands")}${me(n.count)} \xB7 ${me(e.compressedCount)} reduced`,`${a("Tokens in")}${Y(n.rawTokens)}`,`${a("Tokens out")}${Y(n.filteredTokens)}`,`${a(r>=0?"Tokens saved":"Tokens added")}${Y(Math.abs(r))} (${Math.abs(o)} % of all commands)`,...e.shortened?.savedPct!=null&&e.shortened.count>0?[`${a("Shortened only")}\u2212${e.shortened.savedPct} % on the ${me(e.shortened.count)} output${e.shortened.count===1?"":"s"} Tokmizer shortened, not the overall rate`]:[],`${a("Efficiency")}${l} ${Math.max(0,o)} %`,...t.periods?.length?["",...t.periods.map(p=>`${a(p.label)}${Wd(p.savedTokens)} \xB7 ${me(p.count)} commands`)]:[],`${a("API value")}${u} at $${t.pricePerMtok.toFixed(2)}/M input tokens`,...e.restoration?.count?[`${a("Restored")}${Y(e.restoration.tokens)} tokens, deducted \xB7 ${me(e.restoration.count)} restore${e.restoration.count===1?"":"s"}`]:[],...t.restoreCache?.entries?[`${a("Restore cache")}${me(t.restoreCache.entries)} entr${t.restoreCache.entries===1?"y":"ies"} \xB7 ${O1(t.restoreCache.bytes)} \xB7 kept ${t.restoreCache.kept}`]:[],...e.modeledSavedTokens>0?[`${a("Reducer (est.)")}${Y(e.modeledSavedTokens)} tokens, not included`]:[],...P1(e.byCommand,t.color),""," Estimates from output size (bytes \xF7 4), not provider-counted tokens.",...e.droppedEvents?[` ${me(e.droppedEvents)} usage event${e.droppedEvents===1?" was":"s were"} not uploaded because the queue was full.`]:[],...d?[` ${me(d)} terminal commands with no agent are not counted.`]:[],...e.oversizedExcluded?[` ${me(e.oversizedExcluded)} Bash outputs over ${me(tw)} characters are not counted: Claude Code shows at most that much.`]:[],""].join(`
|
|
217
|
+
`)}async function dw(e=ro(),t=0,n){return[...(await Kd(e,t,n)).entries()].filter(([,r])=>r.n>0).sort(([r],[o])=>r<o?-1:r>o?1:0).map(([r,o])=>({day:r,count:o.n,savedTokens:j(o.or)-j(o.of)}))}function P1(e,t){let n=(e??[]).filter(i=>i.savedTokens>0).slice(0,10);if(n.length===0)return[];let r=n[0].savedTokens,o=" "+"\u2500".repeat(60),s=[""," By command",o,` ${" #".padEnd(4)}${"Command".padEnd(20)}${"Runs".padStart(7)}${"Saved".padStart(9)}${"Avg%".padStart(7)} Impact`,o];return n.forEach((i,a)=>{let c=Math.max(1,Math.round(i.savedTokens/r*10)),l=Ns(c,t)+"\u2591".repeat(10-c),u=(i.native?`${i.cmd} (tool)`:i.cmd).slice(0,19);s.push(` ${(String(a+1)+".").padStart(3)} ${u.padEnd(20)}${me(i.count).padStart(7)}${Y(i.savedTokens).padStart(9)}${(String(i.avgPct)+" %").padStart(7)} ${l}`)}),s.push(o),s}function O1(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${Math.max(1,Math.round(e/1024))} KB`}function Zd(e,t){return[` ${e} \xB7 ${t??"all time"}`," "+"\u2550".repeat(60),""]}function fw(e,t){let n=e.byRule??[],r=n.filter(a=>a.kind==="built-in"||a.kind==="user").slice(0,15),o=n.find(a=>a.kind==="none"),s=n.find(a=>a.kind==="unattributed"),i=Zd("Tokmizer savings by rule",t.subtitle);if(r.length===0&&!o)i.push(" No run with rule details in this scope yet.");else{let a=" "+"\u2500".repeat(60),c=Math.max(1,...r.map(l=>l.savedTokens));i.push(` ${" #".padEnd(4)}${"Rule".padEnd(26)}${"Runs".padStart(6)}${"Saved".padStart(8)}${"Avg%".padStart(7)} Impact`,a),r.forEach((l,u)=>{let d=l.savedTokens>0?Math.max(1,Math.round(l.savedTokens/c*10)):0,p=`${l.kind==="user"?"your filter":"built-in"} \xB7 ${l.rule}`.slice(0,25);i.push(` ${(String(u+1)+".").padStart(3)} ${p.padEnd(26)}${me(l.count).padStart(6)}${Y(l.savedTokens).padStart(8)}${(String(l.avgPct)+" %").padStart(7)} ${Ns(d,t.color)}${"\u2591".repeat(10-d)}`)}),i.push(a),o&&i.push(` No rule matched: ${me(o.count)} run${o.count===1?"":"s"}, ${Y(o.rawTokens)} tokens left unchanged (tkr gain --failures).`),i.push(" Built-in rules are grouped by command.")}return s?.count&&i.push(` ${me(s.count)} older run${s.count===1?"":"s"} recorded before rule tracking are not attributed.`),i.push(""),i.join(`
|
|
218
|
+
`)}var Vy={"no-rule":{short:"no rule",note:"no rule: neither a built-in nor a custom filter matches this command (see tkr doctor)."},"no-gain":{short:"nothing to cut",note:"nothing to cut: a rule matched, but the output was short or would not shrink."},"failed-run":{short:"failed run, in full",note:"failed run, in full: error output is kept whole so the agent can debug."}};function pw(e,t){let n=(e.fallbacks??[]).slice(0,15),r=(e.byRule??[]).find(s=>s.kind==="unattributed"),o=Zd("Commands left unchanged",t.subtitle);if(n.length===0)o.push(" No command was left unchanged in this scope.");else{let s=" "+"\u2500".repeat(60);o.push(` ${" #".padEnd(4)}${"Command".padEnd(22)}${"Runs".padStart(6)}${"Tokens".padStart(9)} Reason`,s),n.forEach((i,a)=>{o.push(` ${(String(a+1)+".").padStart(3)} ${i.cmd.slice(0,21).padEnd(22)}${me(i.count).padStart(6)}${Y(i.tokens).padStart(9)} ${Vy[i.reason].short}`)}),o.push(s);for(let i of["no-rule","no-gain","failed-run"])n.some(a=>a.reason===i)&&o.push(` ${Vy[i].note}`)}return r?.count&&o.push(` ${me(r.count)} older run${r.count===1?"":"s"} recorded before this report existed have no details.`),o.push(""),o.join(`
|
|
219
|
+
`)}var no={pro:{plan:"Claude Pro",multiplier:1},"5x":{plan:"Claude Max 5x",multiplier:5},"20x":{plan:"Claude Max 20x",multiplier:20}},Ud=44e3,Bd=144;function Vd(e,t){let n=Math.max(0,e.agent?e.agent.rawTokens-e.agent.filteredTokens:e.observed?.savedTokens??e.savedTokens),r=Math.max(1,e.sinceDays),o=Math.round(n/r*30),s=Ud*Bd*no[t].multiplier;return{tier:t,plan:no[t].plan,savedTokens:n,days:r,monthlySavedTokens:o,monthlyBudgetTokens:s,pct:Math.round(o/s*1e3)/10,basis:"estimate",formula:`savedTokens / days * 30 / (${Ud} tokens per 5-hour window * ${Bd} windows * ${no[t].multiplier})`}}function mw(e,t){let n=o=>` ${o.padEnd(16)}`,r=Math.max(0,Math.min(24,Math.round(Math.min(100,e.pct)/100*24)));return[...Zd("Tokmizer quota estimate",t.subtitle),`${n("Plan (assumed)")}${e.plan}`,`${n("Tokens saved")}${Y(e.savedTokens)} over ${e.days} day${e.days===1?"":"s"}`,`${n("Per month")}${Y(e.monthlySavedTokens)}${e.days<30?" (projected)":""}`,`${n("Plan budget")}${Y(e.monthlyBudgetTokens)} per month (assumed)`,`${n("Quota kept")}${Ns(r,t.color)}${"\u2591".repeat(24-r)} ${e.pct} %`,""," Estimate, not a plan limit. Formula: tokens saved \xF7 days \xD7 30",` \xF7 (${Y(Ud)} tokens per 5-hour window \xD7 ${Bd} windows \xD7 ${no[e.tier].multiplier}).`," Anthropic does not publish plan limits in tokens and applies them per"," rolling 5-hour window. Each saved token is counted once.",""].join(`
|
|
220
|
+
`)}function Wd(e){return e<0?`${Y(-e)} added`:`${Y(e)} saved`}function hw(e,t){if(e.length===0)return"";let n=(l,u,d)=>` ${l.padEnd(11)}${me(u).padStart(4)}${(d<0?`${Y(-d)} added`:Y(d)).padStart(13)}`,r=" "+"Day".padEnd(11)+"Cmds".padStart(4)+"Saved".padStart(13),o=" "+"\u2500".repeat(31),s=e.map(l=>n(`${l.day.slice(8,10)}/${l.day.slice(5,7)}`,l.count,l.savedTokens)),i=e.reduce((l,u)=>l+u.count,0),a=e.reduce((l,u)=>l+u.savedTokens,0),c=n("Total",i,a);return[r,o,...s,o,t.color?`${Ia}${c}${Na}`:c,""].join(`
|
|
221
|
+
`)}function I1(e,t){let n=j(t.or-t.tr),r=j(t.of-t.tf),o=n-r;return{day:e,count:t.n-t.tn,rawTokens:n,filteredTokens:r,savedTokens:o,pct:n?Math.round(o/n*1e3)/10:0}}async function qd(e=ro(),t=0,n){return[...(await Kd(e,t,n)).entries()].filter(([,r])=>r.n-r.tn>0).sort(([r],[o])=>r<o?-1:r>o?1:0).map(([r,o])=>I1(r,o))}function gw(e){let t=["date,commands,tokens_in,tokens_out,tokens_saved,percent"];for(let n of e)t.push(`${n.day},${n.count},${n.rawTokens},${n.filteredTokens},${n.savedTokens},${n.pct}`);return t.join(`
|
|
222
222
|
`)+`
|
|
223
|
-
`}function
|
|
224
|
-
`)}async function
|
|
225
|
-
`;let n=" "+"\u2500".repeat(66),r=[` Last ${e.length} commands \xB7 ${t.subtitle}`,n,` ${"Time".padEnd(18)}${"Command".padEnd(22)}${"In".padStart(8)}${"Out".padStart(8)}${"Saved".padStart(10)}`,n];for(let i of e){let a=i.savedTokens<0?`-${
|
|
226
|
-
`)}function
|
|
227
|
-
`,{mode:384}),
|
|
228
|
-
`).filter(n=>n.trim()!=="").length;return
|
|
229
|
-
`).filter(s=>s.trim()!=="")}catch{return{sessionId:null,total:0,routed:0,pct:0}}t.length>
|
|
230
|
-
`)}
|
|
231
|
-
`)){let o=
|
|
232
|
-
`,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?
|
|
233
|
-
`||a==="|"){i(a,1);continue}}r+=a,o+=1}return s(),n}function
|
|
223
|
+
`}function N1(e){return`${e.slice(8,10)}/${e.slice(5,7)}`}function kw(e,t){let n=new Map(e.map(f=>[f.day,f])),r=t.sinceTs>0?sn(t.sinceTs):e[0]?.day??sn(t.nowTs),o=[],s=new Date(Number(r.slice(0,4)),Number(r.slice(5,7))-1,Number(r.slice(8,10))),i=sn(t.nowTs);for(;o.length<366;){let f=sn(Math.floor(s.getTime()/1e3));if(f>i)break;o.push(f),s.setDate(s.getDate()+1)}let a=30,c=Math.max(0,...e.map(f=>f.savedTokens)),l=" "+"\u2500".repeat(a+18),u=[` Tokens saved per day \xB7 ${t.subtitle}`,l];for(let f of o){let h=n.get(f)?.savedTokens??0,g=c>0&&h>0?Math.max(1,Math.round(h/c*a)):0,m=h<0?`${Y(-h)} added`:Y(h);u.push(` ${N1(f)} ${Ns(g,t.color)}${"\u2591".repeat(a-g)} ${m.padStart(11)}`)}let d=e.reduce((f,h)=>f+h.savedTokens,0),p=` ${"Total".padEnd(5)} ${"".padEnd(a)} ${Wd(d).padStart(11)}`;return u.push(l,t.color?`${Ia}${p}${Na}`:p,""," Estimates from output size (bytes \xF7 4), not provider-counted tokens.",""),u.join(`
|
|
224
|
+
`)}async function yw(e=ro(),t=0,n,r=20){return(await sw(e,t,n)).filter(o=>!o.m&&o.h!=="shell").slice(-r).map(o=>{let s=j(o.r),i=j(o.f);return{at:o.t,cmd:o.c??"(unlabeled)",rawTokens:s,filteredTokens:i,savedTokens:s-i}})}function H1(e){let t=new Date(e*1e3);return`${sn(e)} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}function ww(e,t){if(e.length===0)return` No commands recorded in this scope.
|
|
225
|
+
`;let n=" "+"\u2500".repeat(66),r=[` Last ${e.length} commands \xB7 ${t.subtitle}`,n,` ${"Time".padEnd(18)}${"Command".padEnd(22)}${"In".padStart(8)}${"Out".padStart(8)}${"Saved".padStart(10)}`,n];for(let i of e){let a=i.savedTokens<0?`-${Y(-i.savedTokens)}`:Y(i.savedTokens);r.push(` ${H1(i.at).padEnd(18)}${i.cmd.slice(0,21).padEnd(22)}${Y(i.rawTokens).padStart(8)}${Y(i.filteredTokens).padStart(8)}${a.padStart(10)}`)}let o=e.reduce((i,a)=>i+a.savedTokens,0),s=` ${"Total".padEnd(40)}${"".padStart(16)}${Wd(o).padStart(10)}`;return r.push(n,t.color?`${Ia}${s}${Na}`:s,""),r.join(`
|
|
226
|
+
`)}function Yd(e){return zd(e)||e}F();xu();import{appendFileSync as D1,chmodSync as M1,mkdirSync as F1,existsSync as _w,readFileSync as Sw,rmSync as j1}from"node:fs";import{dirname as L1,join as z1}from"node:path";var U1="usage.jsonl",bw=2e4,xw=2*1024*1024;function Xd(){return z1(y(),U1)}function Qd(e,t,n=Xd()){try{let r=L1(n);_w(r)||F1(r,{recursive:!0,mode:448});let o=e.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";D1(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${t?1:0}}
|
|
227
|
+
`,{mode:384}),M1(n,384),Qi(n,xw,xw/2)}catch{}}function Ew(e=Xd()){try{if(!_w(e))return 0;let t=Sw(e,"utf8").split(`
|
|
228
|
+
`).filter(n=>n.trim()!=="").length;return j1(e,{force:!0}),t}catch{return 0}}function vw(e){let t=e.trim();if(!t)return null;try{let n=JSON.parse(t);return typeof n.t!="number"||typeof n.s!="string"||typeof n.o!="number"?null:{s:n.s,o:n.o}}catch{return null}}function $w(e=Xd()){let t;try{t=Sw(e,"utf8").split(`
|
|
229
|
+
`).filter(s=>s.trim()!=="")}catch{return{sessionId:null,total:0,routed:0,pct:0}}t.length>bw&&(t=t.slice(t.length-bw));let n=null;for(let s=t.length-1;s>=0;s-=1){let i=vw(t[s]??"");if(i){n=i.s;break}}if(n===null)return{sessionId:null,total:0,routed:0,pct:0};let r=0,o=0;for(let s of t){let i=vw(s);!i||i.s!==n||(r+=1,i.o===1&&(o+=1))}return{sessionId:n,total:r,routed:o,pct:r?Math.round(o/r*100):0}}function Tw(e){return e.total===0?" No commands yet this session.":[" This session"," "+"\u2500".repeat(40),` ${e.total} commands \xB7 ${e.routed} handled by tkr (${e.pct} %)`," The rest (cd, echo\u2026) has nothing to optimize.",""].join(`
|
|
230
|
+
`)}_s();ba();Pt();Zu();At();F();Br();Ve();Hn();Mn();import{fileURLToPath as he}from"node:url";Or();$r();Cs();import{existsSync as Xn,readFileSync as Ds,readdirSync as Ma,statSync as vP}from"node:fs";import{homedir as Qn}from"node:os";import{fileURLToPath as _P}from"node:url";import{dirname as Jw,join as H,resolve as SP}from"node:path";ht();it();F();import{execFileSync as lP}from"node:child_process";import{mkdirSync as uP,readFileSync as Ow,renameSync as dP,statSync as fP,writeFileSync as pP}from"node:fs";import{join as Iw}from"node:path";import{closeSync as B1,openSync as J1,readSync as G1,readdirSync as K1,readFileSync as Z1,statSync as Rw}from"node:fs";import{homedir as V1}from"node:os";import{isAbsolute as W1,join as Ha,resolve as q1}from"node:path";var Y1=/^[A-Za-z0-9._+@%:,/-]+$/,X1=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),Q1=32,eP=4*1024*1024;function tf(e){let t;try{t=J1(e,"r");let n=Buffer.alloc(4),r=G1(t,n,0,4,0);return r>=2&&n[0]===35&&n[1]===33?"#!":r===4?n.toString("hex"):null}catch{return null}finally{t!==void 0&&B1(t)}}function Hs(e,t=process.platform){try{let n=Rw(e);if(!n.isFile())return!1;if(t==="win32")return!0;if((n.mode&73)===0)return!1;let r=tf(e);return r==="#!"||r!==null&&X1.has(r)}catch{return!1}}function tP(e){if(/\.[A-Za-z0-9]+$/.test(e))return[e];let t=(process.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);return[e,...t.map(n=>e+n.toLowerCase())]}function oo(e,t,n,r=process.platform){if(!Y1.test(e))return!1;let o=r==="win32";if(e.includes("/"))return Hs(q1(t??process.cwd(),e),r);if(!n)return!1;let s=o?tP(e):[e];for(let i of n.split(o?";":":"))if(!(!i||!W1(i))){for(let a of s)if(Hs(Ha(i,a),r))return!0}return!1}var nP=/^eval \$'([^\s'()=]+) \(\) /,rP=/^([^\s'"()=]+) \(\) \{$/,oP=/^alias -- ([^\s=]+)=(.*)$/,sP=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,iP=/^export PATH=(.*)$/,aP=/^(?:--colou?r(?:=\S+)?|-G)$/;function Aw(e){return e.length>=2&&e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1).replace(/'\\''/g,"'"):e.length>=2&&e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e}function cP(e,t){let n="";for(let r of e.split(`
|
|
231
|
+
`)){let o=iP.exec(r);if(o&&n!=="# Functions"){let s=Aw(o[1].trim());/[$`\\]/.test(s)||t.paths.push(s);continue}if(r.startsWith("# ")&&(n!=="# Functions"||sP.test(r))){n=r;continue}if(n==="# Functions"){let s=nP.exec(r)??rP.exec(r);s&&t.functions.add(s[1])}else if(n==="# Aliases"){let s=oP.exec(r);s&&t.aliases.set(s[1],Aw(s[2].trim()))}}}function ef(e){return e?.code==="ENOENT"}function Cw(e){let t={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=Ha(e||Ha(V1(),".claude"),"shell-snapshots"),r=[];try{for(let o of K1(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let s=Ha(n,o);try{let i=Rw(s);i.isFile()&&r.push({path:s,mtime:i.mtimeMs,size:i.size})}catch(i){ef(i)||(t.uncertain=!0)}}}catch(o){return ef(o)||(t.uncertain=!0),t}r=r.sort((o,s)=>s.mtime-o.mtime).slice(0,Q1);for(let o of r)try{if(o.size>eP)throw new Error("snapshot too large");cP(Z1(o.path,"utf8"),t)}catch(s){ef(s)||(t.uncertain=!0)}return t}function Pw(e,t){if(t.uncertain||t.functions.has(e))return!0;let n=t.aliases.get(e);if(n===void 0)return!1;let r=n.trim().split(/\s+/);return r[0]!==e||!r.slice(1).every(o=>aP.test(o))}var mP="exec-probe.json",hP=6e4;function gP(){return Iw(y(),mP)}function kP(e){try{let t=oe(Ow(e,"utf8"));if(t==null||typeof t!="object")return null;let n=t;return typeof n.key!="string"||typeof n.ok!="boolean"?null:{key:n.key,ok:n.ok,at:typeof n.at=="number"?n.at:0,skipped:typeof n.skipped=="number"&&n.skipped>=0?n.skipped:0}}catch{return null}}function yP(e,t){try{uP(Iw(e,".."),{recursive:!0,mode:448});let n=`${e}.${process.pid}.tmp`;pP(n,JSON.stringify(t),{mode:384}),dP(n,e)}catch{}}function wP(e){try{return lP(e,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function bP(e,t){try{let r=Ow(e,"utf8").split(`
|
|
232
|
+
`,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?oo(r[1]??"",void 0,t):Hs(o)}catch{return!1}}function xP(e,t,n){try{let r=fP(e);return[e,r.size,r.mtimeMs,r.ino,r.mode,t?n??"":""].join("|")}catch{return`${e}|missing`}}function nf(e,t=process.platform,n=process.env.PATH,r=gP(),o=Date.now()){let s=t!=="win32"&&tf(e)==="#!",i=xP(e,s,n),a=kP(r);if(a?.key===i&&(a.ok||o-a.at<hP))return a.ok;let c=Hs(e,t)&&(s?bP(e,n):wP(e));return yP(r,{key:i,ok:c,at:o,skipped:(a?.skipped??0)+(c?0:1)}),c}var EP=new Set(["tkr","tkr-exec","token","claude","cd","export","source","echo","mkdir","rm","mv","cp","chmod","ln","true","false",":","test","[","exit","return","nohup","sudo","doas","env"]),$P=new Set(["for","while","until","if","then","else","elif","fi","do","done","case","esac","select","function","time","coproc","in","!","[[","]]","{","}",".","declare","typeset","local","readonly","unset","set","shift","trap","wait","read","eval","exec","break","continue","pushd","popd","dirs","alias","unalias","hash","ulimit","umask","getopts","let","shopt","builtin","command","compgen","complete","disown","suspend","jobs","fg","bg","kill","history","fc","bind","enable","caller","type","printf","pwd","times","logout","mapfile","readarray","help","which","print","whence","where","autoload","zmodload","setopt","unsetopt","emulate","noglob","rehash","functions","bindkey","zle","vared","sched","limit","unlimit","zstyle","zparseopts","ttyctl"]),Nw=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),Hw="(?:dev|start|serve|watch|preview)",TP=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${Hw}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${Hw}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|php\\s+-l(?:\\s|$)|php\\s+(?:\\S*/)?(?:phpunit|pest|paratest|phpstan|pint|ecs|php-cs-fixer|psalm|rector|run-tests\\.php)(?:\\s|$)|php\\s+artisan\\s+(?!(?:serve|tinker|queue:work|queue:listen|horizon|octane:start|reverb:start|schedule:work|pail|dev)(?:\\s|$))\\S)`),AP=/(?:^|\s)--watch(?:\s|=|$)/;function RP(e){return TP.test(e)&&!AP.test(e)}var CP=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,PP=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,Gw=3;function Kw(e){let t=CP.exec(e);if(!t)return null;let n=t[2]==="fish";if(n&&t[3]!=="-c")return null;let r=t[4],o=t[1].length+1,s=e.indexOf(r,o);if(s<=o)return null;let i=e.slice(s+1);if(i&&!/^\s/.test(i))return null;let a=e.slice(o,s);return r==='"'&&/[$`\\!]/.test(a)||n&&PP.test(a)?null:{script:a,start:o,end:s,quote:r}}var OP=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function IP(e){return af(e).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=Vw(n.text);return r!==""&&!OP.has(r)&&!sf.test(r)}).length>1}function NP(e,t,n,r,o){if(n>=Gw)return null;let s=Kw(e);if(!s)return null;let{script:i,start:a,end:c,quote:l}=s,u=[],d=qw(i,t,n+1,r,g=>u.push(g));if(d===i||l==='"'&&/["$`]/.test(d))return null;let p=l==="'"?d.replace(/'/g,"'\\''"):d,f=`${e.slice(0,a)}${p}${e.slice(c)}`,h=IP(i);if(o)for(let g of h?[e,...u]:u)o(g);return h?`${t} ${f}`:f}var Dw=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,HP=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*[fF][a-zA-Z]*)(?:\s|=|$)/,DP=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]),Mw=new Set(["npm","pnpm","yarn","bun"]),Fw=/^(?:dev|start|serve|preview|watch)(?::\S*)?$/,MP=new Set(["--filter","-F","--dir","-C","--prefix","--workspace","-w","--cwd"]),jw=new Set(["npx","pnpx","bunx"]),FP=new Set(["nodemon","top","htop","btop","watch"]),jP=new Set(["tsc","vitest","jest","webpack","rollup","esbuild","tsup","babel","sass","tailwindcss","mocha","swc","parcel","nest"]),LP=/(?:^|\s)--watch(?:All)?(?:\s|=(?!false(?:\s|$))|$)/,Lw=/(?:^|\s)-w(?:\s|$)/;function zP(e){let t=e.map(i=>i.replace(/['"]/g,""));for(;t.length>1&&(t[0]==="env"||/^[A-Za-z_][A-Za-z0-9_]*=/.test(t[0]));)t=t.slice(1);let n=so(t[0]??"");if(jw.has(n)||Mw.has(n)&&(t[1]==="exec"||t[1]==="dlx"))t=t.slice(jw.has(n)?1:2).filter((i,a,c)=>!(i.startsWith("-")&&c.slice(0,a).every(l=>l.startsWith("-")))),n=so(t[0]??"");else if(Mw.has(n)){let i=t.slice(1).filter((c,l,u)=>!c.startsWith("-")&&!MP.has(u[l-1]??""));i[0]==="workspace"&&i.splice(0,2);let a=i[0]==="run"||i[0]==="run-script"?i[1]:i[0];return a!==void 0&&Fw.test(a)}let r=t.slice(1),o=r.join(" "),s=r.find(i=>!i.startsWith("-"));if(FP.has(n)||LP.test(o)||jP.has(n)&&Lw.test(o))return!0;switch(n){case"next":return s==="dev"||s==="start";case"vite":return!r.includes("build")&&!r.includes("optimize");case"vitest":return s==="watch"||s==="dev";case"cargo":case"dotnet":return s==="watch";case"turbo":{let i=s==="run"?r.filter(a=>!a.startsWith("-"))[1]:s;return i!==void 0&&Fw.test(i)}case"nx":{let i=s==="run"?r.filter(a=>!a.startsWith("-"))[1]?.split(":")[1]:s;return i!==void 0&&/^(?:serve|dev|start|watch)$/.test(i)}case"ping":return!r.some(i=>/^-[a-zA-Z]*c/.test(i));case"docker":case"podman":case"nerdctl":case"docker-compose":{let i=n==="docker-compose"?r:s==="compose"?r.slice(r.indexOf("compose")+1):null;return i?i.includes("up")&&!i.some(a=>a==="--detach"||/^-[a-zA-Z]*d[a-zA-Z]*$/.test(a)):s==="stats"&&!r.includes("--no-stream")||s==="events"}case"kubectl":return s==="port-forward"||(s==="get"||s==="rollout")&&Lw.test(o)||/(?:^|\s)--watch-only(?:\s|=|$)/.test(o);default:return!1}}function UP(e,t){let n=so(t);return n==="tail"?HP.test(e):n==="journalctl"?Dw.test(e):n==="stern"||DP.has(n)&&/\blogs?\b/.test(e)&&Dw.test(e)?!0:zP(e.split(/\s+/))}var sf=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,BP=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,JP=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function so(e){let t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function Zw(e){let t=new Array(e.length).fill(!1),n=[],r=0;for(;r<e.length;){let o=e[r],s=e[r+1],i=n[n.length-1];if(i==="'"){o==="'"&&n.pop(),r+=1;continue}if(o==="\\"){if(s===void 0)return null;r+=2;continue}if(i==="$'"){o==="'"&&n.pop(),r+=1;continue}if(o==="$"&&(s==="("||s==="{")){n.push(s==="("?")":"}"),r+=2;continue}if(o==="`"){i==="`"?n.pop():n.push("`"),r+=1;continue}if(i==='"'){o==='"'&&n.pop(),r+=1;continue}if(o==="$"&&s==="'"){n.push("$'"),r+=2;continue}if(o==="'"||o==='"'){n.push(o),r+=1;continue}if(o==="("||o==="{"&&i==="}"){n.push(o==="("?")":"}"),r+=1;continue}if(o===i){n.pop(),r+=1;continue}if(o===")"&&i===void 0)return null;t[r]=i===void 0,r+=1}return n.length===0?t:null}function rf(e){let t=Zw(e);if(!t)return!0;for(let n=0;n<e.length;n++)if(t[n]&&e[n]===">")return!0;return!1}function af(e){let t=Zw(e);if(!t)return[{kind:"cmd",text:e,unsafe:!0}];let n=[],r="",o=0,s=()=>{r.length>0&&(n.push({kind:"cmd",text:r}),r="")},i=(a,c)=>{s(),n.push({kind:"sep",text:a}),o+=c};for(;o<e.length;){let a=e[o],c=e[o+1];if(t[o]){if(a===">"&&c==="|"){r+=">|",o+=2;continue}if(a==="&"&&c==="&"){i("&&",2);continue}if(a==="&"&&c!==">"){let l=r.replace(/\s+$/,""),u=l[l.length-1];if(u!==">"&&u!=="<"&&u!=="&"){i("&",1);continue}}if(a==="|"&&c==="|"){i("||",2);continue}if(a==="|"&&c==="&"){i("|&",2);continue}if(a===";"&&c===";"){let l=e[o+2]==="&";i(l?";;&":";;",l?3:2);continue}if(a===";"||a===`
|
|
233
|
+
`||a==="|"){i(a,1);continue}}r+=a,o+=1}return s(),n}function Vw(e){return e.trim().split(/\s+/)[0]??""}function Ww(e,t=process.platform){try{let n=Jw(_P(import.meta.url)),r=t==="win32",o=e&&e!=="claude-code"&&e!=="codex"&&!r?`TOKMIZER_HOST=${e} `:"";if(r&&(!e||e==="claude-code")){let c=H(n,"..","bin","tkr-exec.exe");if(Xn(c))return nf(c,t)?`'${c.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let s=H(n,"..","bin","tkr-exec"),i=!r&&Xn(s);if(i&&!nf(s,t))return null;if(!r&&process.env.TOKMIZER_STABLE_RUN!=="0"){let c=Jc(H(n,"..","bin","tkr-exec.js"));if(c&&(i||Xn(H(n,"..","bin","tkr-exec.js"))))return`${o}'${c.replace(/'/g,"'\\''")}'`}if(i)return`${o}'${s.replace(/'/g,"'\\''")}'`;if(ae()){let c=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${c.replace(/'/g,"'\\''")}' exec`}let a=H(n,"..","bin","tkr-exec.js");return Xn(a)?`${o}node '${a.replace(/'/g,"'\\''")}'`:null}catch{return null}}function GP(e,t="tkr-exec",n=()=>!0,r){return qw(e,t,0,n,r)}var KP=new Set(["{","for","while","until","if","case","select"]),ZP=new Set(["}","done","fi","esac"]),VP=new Set(["then","do","else","elif","!","time","{","if","while","until"]);function WP(e,t){let n=e[t+1];return rf(e[t].text)||n?.kind==="sep"&&(n.text==="|"||n.text==="|&")}function qP(e){let t=new Set,n=[];for(let r=0;r<e.length;r++){let o=e[r];if(!(o.kind!=="cmd"||o.unsafe))for(let s of o.text.trim().split(/\s+/)){if(ZP.has(s)){let i=n.pop();if(i!==void 0&&WP(e,r))for(let a=i;a<=r;a++)t.add(a);continue}if(KP.has(s)&&n.push(r),!VP.has(s))break}}return t}function qw(e,t,n,r,o){if(e.includes("<<")||JP.test(e))return e;let s=af(e),i=qP(s),a=[];for(let c=0;c<s.length;c++){let l=s[c];if(l.kind==="sep"||l.unsafe||i.has(c)){a.push(l.text);continue}let u=l.text.trim();if(!u){a.push(l.text);continue}let d=Vw(u),p=s[c+1],f=p?.kind==="sep"&&(p.text==="|"||p.text==="|&"),h=p?.kind==="sep"&&p.text==="&",g=!f&&!h&&!rf(l.text)&&!l.text.includes("<(")&&!l.text.includes(">(")?NP(u,t,n,r,o):null;if(g!==null){a.push(`${l.text.match(/^\s*/)?.[0]??""}${g}${l.text.match(/\s*$/)?.[0]??""}`);continue}if(u===t||u.startsWith(t)&&/^\s/.test(u.slice(t.length))||EP.has(d)||$P.has(d)||(Nw.has(d)||Nw.has(so(d)))&&!RP(u)||sf.test(d)||d.startsWith("(")||d.startsWith("#")||d.startsWith("<")||d.startsWith(">")||BP.test(u)||UP(u,d)||d.endsWith(")")||f||h||rf(l.text)||l.text.includes("<(")||l.text.includes(">(")||d==="node"&&u.includes("tkr-exec.js")||!r(d,u)){a.push(l.text);continue}let m=l.text.match(/^\s*/)?.[0]??"",b=l.text.match(/\s*$/)?.[0]??"";o?.(u),a.push(`${m}${t} ${u}${b}`)}return a.join("")}var YP=new Set(["cd","cat","head","tail","ls","tree","find","grep","rg","wc","nl","sort","cut","diff","stat","file","du","df","ps","jq","yq","pwd","which"]),XP=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),QP={find:/^-(?:delete|exec|execdir|ok|okdir|fprint|fls)/,sort:/^(?:-[^-]*o|--output|--compress-program)/,rg:/^(?:--pre|--hostname-bin|-[^-]*z|--search-zip)/,yq:/^(?:-[^-]*[is]|--inplace|--split-exp)/,file:/^(?:-C|--compile)/,tree:/^(?:-o|--output|-R$|-H$)/,git:/^(?:--output|--ext-diff|--textconv|-c$|--exec-path|--git-dir|--work-tree)/,eslint:/^--fix/},Da=["test","run test","run build","run lint","run typecheck"],eO={npm:new Set(Da),pnpm:new Set([...Da,"build","lint","typecheck"]),yarn:new Set([...Da,"build","lint","typecheck"]),bun:new Set(Da),cargo:new Set(["test","build","check","clippy"]),go:new Set(["test","build","vet"]),mvn:new Set(["test","compile","verify"]),gradle:new Set(["test","build","check"]),dotnet:new Set(["test","build"])},tO=new Set(["pytest","tsc","vitest","jest","eslint","mypy"]);function Yw(e,t,n=0){if(/\$|`|<\(|>\(|\\\r?\n/.test(e)||/>/.test(e.replace(/2>&1|[12]?>\s*\/dev\/null/g,"")))return!1;for(let r of af(e)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<Gw?Kw(r.text.trim()):null;if(o){if(!Yw(o.script,t,n+1))return!1;continue}let s=r.text.trim().split(/\s+/).filter(Boolean).map(l=>l.replace(/['"\\]/g,""));if(s.length===0)continue;if(s.some(l=>sf.test(l)))return!1;let i=so(s[0]);if(i!==s[0])return!1;let a=QP[i];if(a&&s.slice(1).some(l=>a.test(l)))return!1;if((i==="git"?XP.has(s[1]??""):YP.has(i))||t&&tO.has(i))continue;let c=t?eO[i]:void 0;if(!(c&&(c.has(s[1]??"")||s[1]==="run"&&c.has(`run ${s[2]??""}`))))return!1}return!0}function nO(e,t){if(!Xn(e))return"missing";try{let n=Ds(e,"utf8").replace(/^\uFEFF/,"");return n.trim()===""?{}:JSON.parse(t?Xw(n):n)}catch{return"unreadable"}}function Xw(e){let t="",n=!1;for(let r=0;r<e.length;r++){let o=e[r];if(n){t+=o,o==="\\"?t+=e[++r]??"":o==='"'&&(n=!1);continue}if(o==='"')n=!0,t+=o;else if(o==="/"&&e[r+1]==="/"){for(;r<e.length&&e[r]!==`
|
|
234
234
|
`;)r++;t+=`
|
|
235
|
-
`}else if(o==="/"&&e[r+1]==="*"){if(r=e.indexOf("*/",r+2),r===-1)return"";r+=1}else t+=o}return t.replace(/,(\s*[}\]])/g,"$1")}function Ps(e){let t=[],n=mO(e);for(;;){t.push(n);let r=Fw(n);if(r===n)return t;n=r}}function KO(){let e=process.platform==="darwin"?"/Library/Application Support/ClaudeCode":process.platform==="win32"?"C:\\Program Files\\ClaudeCode":"/etc/claude-code",t=[D(e,"managed-settings.json")];try{for(let n of Ha(D(e,"managed-settings.d")))n.endsWith(".json")&&t.push(D(e,"managed-settings.d",n))}catch{return t}return t}function Is(e,t,n,r){let o=[];for(let s of e){let i=ZO(s,t);if(i!=="missing"&&(i==="unreadable"||!Se(i)||!n(i,o)))return"unreadable"}return{matchers:o,complete:r}}function Os(e){return e===void 0?[]:Array.isArray(e)?e.filter(t=>typeof t=="string"):null}function VO(){return{projectDir:process.env.CLAUDE_PROJECT_DIR,configDir:process.env.CLAUDE_CONFIG_DIR}}function WO(e,t){let n=h=>[D(h,"settings.json"),D(h,"settings.local.json")],r=h=>n(D(h,".claude")),o=D(Yn(),".claude"),s=t.configDir||o,i=[[KO(),"managed"],[[D(s,"settings.json")],"loaded"],[[D(s,"settings.local.json")],"loadedLocal"],[t.configDir?n(o):[],"extra"],[t.projectDir?r(t.projectDir):[],"project"],[Ps(e).flatMap(r),"extra"]],a=[],c={managed:[],loaded:[],loadedLocal:[],project:[],extra:[]},l={managed:!1,loaded:!1,loadedLocal:!1,project:!1,extra:!1},u=!1,d="managed",p=(h,v)=>{let E=h.permissions;if(d==="managed"&&(h.allowManagedPermissionRulesOnly===!0||Se(E)&&E.allowManagedPermissionRulesOnly===!0)&&(u=!0),E===void 0)return!0;if(!Se(E))return!1;for(let M of["deny","ask","allow"]){let C=Os(E[M]);if(!C)return!1;for(let N of C){let te=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(N);if(te)if(M!=="allow")v.push(Xn((te[1]??"*").replace(/:\*$/," *")));else if(te[1]===void 0||te[1].trim()==="*")l[d]=!0;else{a.push(Xn(te[1].replace(/:\*$/," *")));let V=hP(te[1]);V&&c[d].push({rule:N.trim(),matches:V})}}}return!0},f=[];for(let[h,v]of i){d=v;let E=Is(h,!1,p,!0);if(E==="unreadable")return"unreadable";f.push(...E.matchers)}let m=l.managed||(l.loaded||l.loadedLocal)&&!u,g=[...c.managed,...u?[]:c.loaded];return{matchers:[...f,...m?[]:a],complete:!0,allow:a,allowsEverything:m,guards:f,trustedAllow:g}}function qO(e){let t=[D(Yn(),".cursor","cli-config.json"),...Ps(e).map(n=>D(n,".cursor","cli.json"))];return Is(t,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!Se(o))return!1;let s=Os(o.deny);if(!s)return!1;for(let i of s){let a=/^\s*Shell\s*(?:\(([\s\S]*)\))?\s*$/.exec(i);if(!a)continue;let c=a[1]??"*",l=c.indexOf(":");r.push(Xn(l===-1?`${c} *`:`${c.slice(0,l)} ${c.slice(l+1)}`))}return!0},!1)}function YO(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var Zw=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function XO(e,t){let n=e.tools;if(n!==void 0&&!Se(n))return!1;let r=[Os(e.excludeTools),Os(Se(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let s of o){let i=Zw.exec(s);i&&t.push(Xn(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function Nw(e){try{return JSON.parse(e)}catch{return null}}function QO(e){let t=e.trim();if(t.startsWith('"""')||t.startsWith("'''"))return null;if(t.startsWith("[")){if(!/\]\s*(?:#.*)?$/.test(t))return null;let n=[];for(let r of t.matchAll(/"((?:\\.|[^"\\])*)"|'([^']*)'/g)){let o=r[2]??Nw(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(t.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(t);return n?Nw(`"${n[1]}"`):null}if(t.startsWith("'")){let n=/^'([^']*)'/.exec(t);return n?n[1]:null}return t.replace(/\s*#.*$/,"")}function eP(e,t){for(let n of e.split(/^\s*\[\[\s*rule\s*\]\]\s*$/m).slice(1)){let r={};for(let c of n.split(/\r?\n/)){if(/^\s*\[/.test(c))break;let l=/^\s*([A-Za-z_]+)\s*=\s*(.*)$/.exec(c);if(!l)continue;let u=QO(l[2]);if(u===null)return!1;r[l[1]]=u}let o=r.decision;if(o!=="deny"&&o!=="ask_user"||!(r.toolName===void 0?["*"]:[r.toolName].flat()).some(c=>c==="*"||Zw.test(c)))continue;let i=r.commandPrefix===void 0?[]:[r.commandPrefix].flat(),a=[r.commandRegex,r.argsPattern].flat().filter(c=>typeof c=="string");if(i.length===0&&a.length===0){t.push(()=>!0);continue}for(let c of i)t.push(Xn(`${c}*`));for(let c of a){let l;try{l=new RegExp(c)}catch{return!1}t.push(u=>l.test(JSON.stringify({command:u}))||Da(l,u))}}return!0}function Hw(e){try{return Ha(e).filter(t=>t.endsWith(".toml")).map(t=>D(e,t))}catch{return[]}}function tP(e){let t=YO(),n=[D(t,"system-defaults.json"),D(t,"settings.json"),process.env.GEMINI_CLI_SYSTEM_SETTINGS_PATH,process.env.GEMINI_CLI_SYSTEM_DEFAULTS_PATH,D(Yn(),".gemini","settings.json"),...Ps(e).map(o=>D(o,".gemini","settings.json"))].filter(o=>!!o),r=Is(n,!0,XO,!1);if(r==="unreadable")return r;for(let o of[...Hw(D(Yn(),".gemini","policies")),...Hw(D(t,"policies"))]){let s;try{s=Cs(o,"utf8")}catch{return"unreadable"}if(!eP(s,r.matchers))return"unreadable"}return r}function tf(e,t){if(e===void 0)return!0;if(typeof e=="string")return e!=="allow"&&t.push(()=>!0),!0;if(!Se(e))return!1;for(let n of["bash","shell","*"]){let r=e[n];if(r!==void 0){if(typeof r=="string"){r!=="allow"&&t.push(()=>!0);continue}if(!Se(r))return!1;for(let[o,s]of Object.entries(r))s!=="allow"&&t.push(Xn(o.replace(/\?/g,"*")))}}return!0}function Dw(e,t){if(e.permissions!==void 0||!tf(e.permission,t))return!1;for(let n of["agent","agents","mode"]){let r=e[n];if(r!==void 0){if(!Se(r))return!1;for(let o of Object.values(r))if(Se(o)&&(o.permissions!==void 0||!tf(o.permission,t)))return!1}}return!0}function nP(e){for(let t of e)for(let n of["agent","agents","mode","modes"]){let r;try{r=Ha(D(t,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(Cs(D(t,n,o),"utf8")))return!0}catch{return!0}}return!1}function rP(e){let t=D(process.env.XDG_CONFIG_HOME||D(Yn(),".config"),"opencode"),n=Ps(e),r=[t,...n.map(a=>D(a,".opencode"))];if(nP(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],s=[...o.map(a=>D(t,a)),process.env.OPENCODE_CONFIG,...n.flatMap(a=>[...o.slice(0,2).map(c=>D(a,c)),...o.slice(0,2).map(c=>D(a,".opencode",c))])].filter(a=>!!a),i=Is(s,!0,Dw,!0);if(i==="unreadable")return i;for(let a of[process.env.OPENCODE_CONFIG_CONTENT,process.env.OPENCODE_PERMISSION]){if(!a)continue;let c;try{c=JSON.parse(Gw(a))}catch{return"unreadable"}if(!(a===process.env.OPENCODE_PERMISSION?tf(c,i.matchers):Se(c)&&Dw(c,i.matchers)))return"unreadable"}return i}function oP(){return Is([D(Yn(),".gemini","antigravity-cli","settings.json")],!0,(e,t)=>{let n=e.permissions;if(n===void 0)return!0;if(!Se(n))return!1;for(let r of["deny","ask"]){let o=Os(n[r]);if(!o)return!1;for(let s of o){let i=/^\s*command\s*\(([\s\S]*)\)\s*$/.exec(s);if(!i)continue;let a=i[1].trim();if(!a.startsWith("regex:")){t.push(Xn(a==="*"?"*":`${a} *`));continue}let c;try{c=new RegExp(a.slice(6))}catch{return!1}t.push(l=>Da(c,l))}}return!0},!1)}function sP(e){let t=[],n=/\s+|#[^\n]*|("(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*')|([A-Za-z_][A-Za-z0-9_]*|[()[\],=])|(.)/gy;for(let r=n.exec(e);r&&r[0];r=n.exec(e)){if(r[3]!==void 0)return null;(r[1]!==void 0||r[2]!==void 0)&&t.push(r[1]??r[2])}return t}function Kw(e,t){let n=e[t.i++];if(n===void 0)return;if(/^["']/.test(n))try{return n.startsWith('"')?JSON.parse(n):JSON.parse(`"${n.slice(1,-1).replace(/\\'/g,"'").replace(/"/g,'\\"')}"`)}catch{return}if(n!=="[")return/^[A-Za-z_]/.test(n)?null:void 0;let r=[];for(;e[t.i]!=="]";){let o=Kw(e,t);if(o===void 0)return;if(r.push(o),e[t.i]===",")t.i++;else if(e[t.i]!=="]")return}return t.i++,r}function Vw(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let r of e){let o=typeof r=="string"?[r]:Array.isArray(r)?r:null;if(!o||o.length===0||!o.every(s=>typeof s=="string"&&s!==""))return null;t.push(`(?:${o.map(of).join("|")})`)}let n=new RegExp(`^${t.join(" ")}(?= |$)`);return r=>Da(n,r)}function iP(e,t){let n=sP(e);if(!n)return!1;for(let r=0;r<n.length;r++){if(n[r]!=="prefix_rule"||n[r+1]!=="(")continue;let o={i:r+2},s={};for(;n[o.i]!==")";){let c=n[o.i];if(!c||!/^[A-Za-z_]/.test(c)||n[o.i+1]!=="="||(o.i+=2,s[c]=Kw(n,o),s[c]===void 0&&(c==="pattern"||c==="decision")))return!1;if(n[o.i]===",")o.i++;else if(n[o.i]!==")")return!1}r=o.i;let i="decision"in s?s.decision:"allow";if(i!=="allow"&&i!=="prompt"&&i!=="forbidden")return!1;let a=Vw(s.pattern);if(!a)return!1;i!=="allow"&&t.push(a)}return!0}function aP(e){if(!eo(e))return[];try{return Ha(e).filter(t=>t.endsWith(".rules")).sort().map(t=>D(e,t))}catch{return"unreadable"}}function cP(){return process.platform==="win32"?D(process.env.ProgramData||"C:\\ProgramData","OpenAI","Codex","requirements.toml"):"/etc/codex/requirements.toml"}function lP(e){if(!(!Se(e)||Object.keys(e).length!==1)){if(typeof e.token=="string")return e.token;if(Array.isArray(e.any_of)&&e.any_of.every(t=>typeof t=="string"))return e.any_of}}function uP(e,t){let n;try{n=vs(e)}catch{return!1}if(n.rules===void 0)return!0;if(!Se(n.rules))return!1;let r=n.rules.prefix_rules;if(r===void 0)return!0;if(!Array.isArray(r))return!1;for(let o of r){if(!Se(o)||!Array.isArray(o.pattern)||o.decision!=="prompt"&&o.decision!=="forbidden")return!1;let s=o.pattern.map(lP);if(s.some(a=>a===void 0))return!1;let i=Vw(s);if(!i)return!1;t.push(i)}return!0}function dP(e){let t=process.env.CODEX_HOME||D(Yn(),".codex"),n=[D(t,"rules"),...Ps(e).map(s=>D(s,".codex","rules"))],r=[],o=null;try{o=Cs(cP(),"utf8")}catch(s){let i=s.code;if(i!=="ENOENT"&&i!=="ENOTDIR")return"unreadable"}if(o!==null&&!uP(o,r))return"unreadable";for(let s of[...new Set(n)]){let i=aP(s);if(i==="unreadable")return"unreadable";for(let a of i){let c;try{c=Cs(a,"utf8")}catch{return"unreadable"}if(!iP(c,r))return"unreadable"}}return{matchers:r,complete:!1}}function Se(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function of(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fP(e){let t=e.trim().replace(/\s+/g," "),n=t.endsWith(" *")&&t.length>2,r=(n?t.slice(0,-2):t).split("*").map(of).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var pP=512;function mP(e){let t=e.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[t,t.map(to)]}function Da(e,t){if(e.test(t)||e.test(t.trim().replace(/\s+/g," ")))return!0;for(let n of mP(t)){if(n.length>pP)return!0;for(let r=0;r<n.length;r++)if(e.test(n.slice(r).join(" ")))return!0}return!1}function Xn(e){let t=fP(e);return n=>Da(t,n)}function hP(e){let t=e.trim().replace(/:\*$/," *"),n=t.endsWith(" *"),r=n?t.slice(0,-2):t;if(!r||r.includes("*")||/\s\s|[^\S ]|^ | $/.test(r))return null;let o=new RegExp(`^${of(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var gP={"claude-code":WO,cursor:qO,"gemini-cli":tP,opencode:rP,antigravity:oP,codex:dP},kP=new Set(["codex"]),Ww=/(?:^|[\s=:/~])\.(?:git|claude|vscode|idea|husky)(?=[/\s;|&)]|$)|(?:^|[\s=:/~])\.(?:bashrc|bash_profile|bash_login|bash_logout|profile|zshrc|zprofile|zshenv|zlogin|zlogout|gitconfig|gitmodules|ripgreprc|mcp\.json)(?![A-Za-z0-9_])/;function yP(e,t,n){let r=gP[e];return r?r(t??process.cwd(),n):{matchers:[],complete:!1}}function wP(e,t,n){return e==="unreadable"||Ww.test(t.replace(/['"\\]/g,""))||e.matchers.some(r=>r(t))?!1:e.complete||Jw(t,!kP.has(n))}var qw=new Set(["default","acceptEdits","dontAsk"]);function Yw(e,t){return t.host!=="claude-code"||t.permissionMode==="bypassPermissions"?!0:e!=="unreadable"&&e.allowsEverything===!0&&qw.has(t.permissionMode??"")}function bP(e,t){let n="pathEnv"in e?e.pathEnv:process.env.PATH,r;return o=>e.host!=="claude-code"?Qr(o,e.cwd,n):(r??=_w(t.configDir),!Qr(o,e.cwd,n)&&!r.paths.some(s=>Qr(o,e.cwd,s))?!1:o.includes("/")||!Sw(o,r))}var xP=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function vP(e,t,n){return n.host!=="claude-code"||e==="unreadable"||Yw(e,n)||!qw.has(n.permissionMode??"")||!xP.test(t)||Ww.test(t.replace(/['"]/g,""))||(e.guards??[]).some(r=>r(t))?null:(e.trustedAllow??[]).find(r=>r.matches(t))?.rule??null}var _P=/^(?:\S+=\S*\s+)*(?:(?:npx|bunx|pnpm\s+exec|yarn\s+exec|uv\s+run|poetry\s+run)\s+)?(?:\.\/)?(?:ctest|gradlew|gradle|mvnw|mvnd|mvn|make|cmake|sbt|phpstan|phpunit|pest|pytest|py\.test|tox|nox|vitest|jest|mocha|playwright\s+test|tsc|(?:cargo|go)\s+(?:build|test|check|clippy|vet)|(?:bun|deno)\s+(?:test|check|lint|install)|(?:npm|pnpm|yarn)\s+(?:test|t|ci|install|run\s+\S+)|dotnet\s+(?:build|test)|swift\s+(?:build|test)|composer\s+(?:install|update|test))(?:\s|$)/;function SP(e,t){return t.host==="claude-code"&&t.permissionMode==="default"&&_P.test(e.trim())}function EP(e,t,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=t.claudeDirs??VO(),s=yP(t.host,t.cwd,o),i=vP(s,e,t),a=i||wP(s,e,t.host)?HO(e,n,bP(t,o)):e;return a!==e&&s!=="unreadable"&&(i?(s.guards??[]).some(c=>c(a)):s.matchers.some(c=>c(a))||(s.allow??[]).some(c=>c(a)&&!c(e)))&&(a=e),r(t.sessionId,a!==e),a===e?null:i?{command:a,allowedBy:i}:Yw(s,t)?{command:a}:s!=="unreadable"&&SP(e,t)&&!(s.allow??[]).some(c=>c(e))&&!(s.trustedAllow??[]).some(c=>c.matches(e))?{command:a,ask:!0}:null}function Xw(e,t,n,r){let o=EP(e,t,n,r);return o&&!o.ask?o.command:null}Wt();var sf=["opencode","kilo","amp","vibe","antigravity","openclaw","pi","omp","hermes"];function $P(e){return typeof e=="string"&&sf.includes(e)}function Qw(e,t,n="unknown",r=Uw(t),o=qd){return e?Xw(e,{host:t,sessionId:n},Vt()?null:r,o):null}function eb(e){let t,n;for(let r=0;r<e.length;r++){let o=e[r],s=e[r+1];if((o==="--host"||o==="--session")&&s!==void 0){o==="--host"?t=s:n=s,r+=1;continue}return null}return $P(t)?{host:t,...n?{session:n}:{}}:null}Dr();Hr();Ol();function tb(e=5e3){return new Promise(t=>{let n=[],r=process.stdin,o=!1,s=()=>{o||(o=!0,clearTimeout(a),r.off("data",i),r.pause(),r.unref?.(),t(Buffer.concat(n).toString("utf8")))},i=c=>{n.push(Buffer.isBuffer(c)?c:Buffer.from(c))},a=setTimeout(s,e);r.on("data",i).once("end",s).once("error",s),r.resume()})}mt();en();no();Nf();df();var xe=Jt();async function aH(){let{AGENT_BONUSES:e,powerInstalled:t,reducerInstalled:n}=await Promise.resolve().then(()=>(bt(),wt)),r=e.filter(t).map(s=>s.label),o=e.filter(n).map(s=>s.label);return[`/power: ${r.length?r.join(", "):"no other agent set up"} (Claude Code gets it from its plugin; others from tkr setup-<agent>)`,`Reducer: ${o.length?o.join(", "):"no other agent set up"} (Claude Code gets it from its plugin; others from tkr setup-<agent>)`]}function Ux(){return me(new URL("./tkr-context-hook.js",import.meta.url))}async function rc(e){let{installAgentBonuses:t}=await Promise.resolve().then(()=>(bt(),wt));return t(e,process.env.PATH??"",Ux()).catch(()=>({lines:["Could not add /power and the reducer for this agent."],error:!0}))}async function oc(e){let{removeAgentBonuses:t}=await Promise.resolve().then(()=>(bt(),wt));return t(e).catch(()=>"error")}function sc(e){return e==="removed"?["Removed the tokmizer /power command and reducer instructions for this agent."]:e==="error"?["Could not remove the tokmizer /power command or reducer instructions; remove them by hand."]:[]}async function co(){try{let{syncReducerRules:e}=await Promise.resolve().then(()=>(bt(),wt));await e()}catch{}}async function Dt(){let{codexHookNoticeLine:e}=await Promise.resolve().then(()=>(xu(),xg)),t=[_c(),await sk(),e(),Wa(Ns())].filter(n=>n!==null);return t.length?["",...t]:[]}async function cH(e){let t=`Usage: tkr migrate rtk [--dry-run] [--yes] [--shim] | tkr migrate rtk --undo
|
|
236
|
-
`,n=e.slice(1);if(e[0]!=="rtk"||n.some(g=>!["--dry-run","--yes","-y","--shim","--undo"].includes(g))||n.includes("--undo")&&n.length>1){process.stderr.write(t),process.exitCode=1;return}let{buildPlan:r,renderPlan:o,planHasWork:s,applyPlan:i,undoMigration:a,migrationApplied:c}=await Promise.resolve().then(()=>(
|
|
235
|
+
`}else if(o==="/"&&e[r+1]==="*"){if(r=e.indexOf("*/",r+2),r===-1)return"";r+=1}else t+=o}return t.replace(/,(\s*[}\]])/g,"$1")}function io(e){let t=[],n=SP(e);for(;;){t.push(n);let r=Jw(n);if(r===n)return t;n=r}}function rO(){let e=process.platform==="darwin"?"/Library/Application Support/ClaudeCode":process.platform==="win32"?"C:\\Program Files\\ClaudeCode":"/etc/claude-code",t=[H(e,"managed-settings.json")];try{for(let n of Ma(H(e,"managed-settings.d")))n.endsWith(".json")&&t.push(H(e,"managed-settings.d",n))}catch{return t}return t}function Fs(e,t,n,r){let o=[];for(let s of e){let i=nO(s,t);if(i!=="missing"&&(i==="unreadable"||!Se(i)||!n(i,o)))return"unreadable"}return{matchers:o,complete:r}}function Ms(e){return e===void 0?[]:Array.isArray(e)?e.filter(t=>typeof t=="string"):null}function oO(){return{projectDir:process.env.CLAUDE_PROJECT_DIR,configDir:process.env.CLAUDE_CONFIG_DIR?.trim()?mt():void 0}}function sO(e,t){let n=m=>[H(m,"settings.json"),H(m,"settings.local.json")],r=m=>n(H(m,".claude")),o=H(Qn(),".claude"),s=t.configDir||o,i=[[rO(),"managed"],[[H(s,"settings.json")],"loaded"],[[H(s,"settings.local.json")],"loadedLocal"],[t.configDir?n(o):[],"extra"],[t.projectDir?r(t.projectDir):[],"project"],[io(e).flatMap(r),"extra"]],a=[],c={managed:[],loaded:[],loadedLocal:[],project:[],extra:[]},l={managed:!1,loaded:!1,loadedLocal:!1,project:!1,extra:!1},u=!1,d="managed",p=(m,b)=>{let E=m.permissions;if(d==="managed"&&(m.allowManagedPermissionRulesOnly===!0||Se(E)&&E.allowManagedPermissionRulesOnly===!0)&&(u=!0),E===void 0)return!0;if(!Se(E))return!1;for(let D of["deny","ask","allow"]){let C=Ms(E[D]);if(!C)return!1;for(let N of C){let te=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(N);if(te)if(D!=="allow")b.push(er((te[1]??"*").replace(/:\*$/," *")));else if(te[1]===void 0||te[1].trim()==="*")l[d]=!0;else{a.push(er(te[1].replace(/:\*$/," *")));let V=EO(te[1]);V&&c[d].push({rule:N.trim(),matches:V})}}}return!0},f=[];for(let[m,b]of i){d=b;let E=Fs(m,!1,p,!0);if(E==="unreadable")return"unreadable";f.push(...E.matchers)}let h=l.managed||(l.loaded||l.loadedLocal)&&!u,g=[...c.managed,...u?[]:c.loaded];return{matchers:[...f,...h?[]:a],complete:!0,allow:a,allowsEverything:h,guards:f,trustedAllow:g}}function iO(e){let t=[H(Qn(),".cursor","cli-config.json"),...io(e).map(n=>H(n,".cursor","cli.json"))];return Fs(t,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!Se(o))return!1;let s=Ms(o.deny);if(!s)return!1;for(let i of s){let a=/^\s*Shell\s*(?:\(([\s\S]*)\))?\s*$/.exec(i);if(!a)continue;let c=a[1]??"*",l=c.indexOf(":");r.push(er(l===-1?`${c} *`:`${c.slice(0,l)} ${c.slice(l+1)}`))}return!0},!1)}function aO(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var Qw=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function cO(e,t){let n=e.tools;if(n!==void 0&&!Se(n))return!1;let r=[Ms(e.excludeTools),Ms(Se(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let s of o){let i=Qw.exec(s);i&&t.push(er(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function zw(e){try{return JSON.parse(e)}catch{return null}}function lO(e){let t=e.trim();if(t.startsWith('"""')||t.startsWith("'''"))return null;if(t.startsWith("[")){if(!/\]\s*(?:#.*)?$/.test(t))return null;let n=[];for(let r of t.matchAll(/"((?:\\.|[^"\\])*)"|'([^']*)'/g)){let o=r[2]??zw(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(t.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(t);return n?zw(`"${n[1]}"`):null}if(t.startsWith("'")){let n=/^'([^']*)'/.exec(t);return n?n[1]:null}return t.replace(/\s*#.*$/,"")}function uO(e,t){for(let n of e.split(/^\s*\[\[\s*rule\s*\]\]\s*$/m).slice(1)){let r={};for(let c of n.split(/\r?\n/)){if(/^\s*\[/.test(c))break;let l=/^\s*([A-Za-z_]+)\s*=\s*(.*)$/.exec(c);if(!l)continue;let u=lO(l[2]);if(u===null)return!1;r[l[1]]=u}let o=r.decision;if(o!=="deny"&&o!=="ask_user"||!(r.toolName===void 0?["*"]:[r.toolName].flat()).some(c=>c==="*"||Qw.test(c)))continue;let i=r.commandPrefix===void 0?[]:[r.commandPrefix].flat(),a=[r.commandRegex,r.argsPattern].flat().filter(c=>typeof c=="string");if(i.length===0&&a.length===0){t.push(()=>!0);continue}for(let c of i)t.push(er(`${c}*`));for(let c of a){let l;try{l=new RegExp(c)}catch{return!1}t.push(u=>l.test(JSON.stringify({command:u}))||Fa(l,u))}}return!0}function Uw(e){try{return Ma(e).filter(t=>t.endsWith(".toml")).map(t=>H(e,t))}catch{return[]}}function dO(e){let t=aO(),n=[H(t,"system-defaults.json"),H(t,"settings.json"),process.env.GEMINI_CLI_SYSTEM_SETTINGS_PATH,process.env.GEMINI_CLI_SYSTEM_DEFAULTS_PATH,H(Qn(),".gemini","settings.json"),...io(e).map(o=>H(o,".gemini","settings.json"))].filter(o=>!!o),r=Fs(n,!0,cO,!1);if(r==="unreadable")return r;for(let o of[...Uw(H(Qn(),".gemini","policies")),...Uw(H(t,"policies"))]){let s;try{s=Ds(o,"utf8")}catch{return"unreadable"}if(!uO(s,r.matchers))return"unreadable"}return r}function of(e,t){if(e===void 0)return!0;if(typeof e=="string")return e!=="allow"&&t.push(()=>!0),!0;if(!Se(e))return!1;for(let n of["bash","shell","*"]){let r=e[n];if(r!==void 0){if(typeof r=="string"){r!=="allow"&&t.push(()=>!0);continue}if(!Se(r))return!1;for(let[o,s]of Object.entries(r))s!=="allow"&&t.push(er(o.replace(/\?/g,"*")))}}return!0}function Bw(e,t){if(e.permissions!==void 0||!of(e.permission,t))return!1;for(let n of["agent","agents","mode"]){let r=e[n];if(r!==void 0){if(!Se(r))return!1;for(let o of Object.values(r))if(Se(o)&&(o.permissions!==void 0||!of(o.permission,t)))return!1}}return!0}function fO(e){for(let t of e)for(let n of["agent","agents","mode","modes"]){let r;try{r=Ma(H(t,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(Ds(H(t,n,o),"utf8")))return!0}catch{return!0}}return!1}function pO(e){let t=H(process.env.XDG_CONFIG_HOME||H(Qn(),".config"),"opencode"),n=io(e),r=[t,...n.map(a=>H(a,".opencode"))];if(fO(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],s=[...o.map(a=>H(t,a)),process.env.OPENCODE_CONFIG,...n.flatMap(a=>[...o.slice(0,2).map(c=>H(a,c)),...o.slice(0,2).map(c=>H(a,".opencode",c))])].filter(a=>!!a),i=Fs(s,!0,Bw,!0);if(i==="unreadable")return i;for(let a of[process.env.OPENCODE_CONFIG_CONTENT,process.env.OPENCODE_PERMISSION]){if(!a)continue;let c;try{c=JSON.parse(Xw(a))}catch{return"unreadable"}if(!(a===process.env.OPENCODE_PERMISSION?of(c,i.matchers):Se(c)&&Bw(c,i.matchers)))return"unreadable"}return i}function mO(){return Fs([H(Qn(),".gemini","antigravity-cli","settings.json")],!0,(e,t)=>{let n=e.permissions;if(n===void 0)return!0;if(!Se(n))return!1;for(let r of["deny","ask"]){let o=Ms(n[r]);if(!o)return!1;for(let s of o){let i=/^\s*command\s*\(([\s\S]*)\)\s*$/.exec(s);if(!i)continue;let a=i[1].trim();if(!a.startsWith("regex:")){t.push(er(a==="*"?"*":`${a} *`));continue}let c;try{c=new RegExp(a.slice(6))}catch{return!1}t.push(l=>Fa(c,l))}}return!0},!1)}function hO(e){let t=[],n=/\s+|#[^\n]*|("(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*')|([A-Za-z_][A-Za-z0-9_]*|[()[\],=])|(.)/gy;for(let r=n.exec(e);r&&r[0];r=n.exec(e)){if(r[3]!==void 0)return null;(r[1]!==void 0||r[2]!==void 0)&&t.push(r[1]??r[2])}return t}function eb(e,t){let n=e[t.i++];if(n===void 0)return;if(/^["']/.test(n))try{return n.startsWith('"')?JSON.parse(n):JSON.parse(`"${n.slice(1,-1).replace(/\\'/g,"'").replace(/"/g,'\\"')}"`)}catch{return}if(n!=="[")return/^[A-Za-z_]/.test(n)?null:void 0;let r=[];for(;e[t.i]!=="]";){let o=eb(e,t);if(o===void 0)return;if(r.push(o),e[t.i]===",")t.i++;else if(e[t.i]!=="]")return}return t.i++,r}function tb(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let r of e){let o=typeof r=="string"?[r]:Array.isArray(r)?r:null;if(!o||o.length===0||!o.every(s=>typeof s=="string"&&s!==""))return null;t.push(`(?:${o.map(cf).join("|")})`)}let n=new RegExp(`^${t.join(" ")}(?= |$)`);return r=>Fa(n,r)}function gO(e,t){let n=hO(e);if(!n)return!1;for(let r=0;r<n.length;r++){if(n[r]!=="prefix_rule"||n[r+1]!=="(")continue;let o={i:r+2},s={};for(;n[o.i]!==")";){let c=n[o.i];if(!c||!/^[A-Za-z_]/.test(c)||n[o.i+1]!=="="||(o.i+=2,s[c]=eb(n,o),s[c]===void 0&&(c==="pattern"||c==="decision")))return!1;if(n[o.i]===",")o.i++;else if(n[o.i]!==")")return!1}r=o.i;let i="decision"in s?s.decision:"allow";if(i!=="allow"&&i!=="prompt"&&i!=="forbidden")return!1;let a=tb(s.pattern);if(!a)return!1;i!=="allow"&&t.push(a)}return!0}function kO(e){if(!Xn(e))return[];try{return Ma(e).filter(t=>t.endsWith(".rules")).sort().map(t=>H(e,t))}catch{return"unreadable"}}function yO(){return process.platform==="win32"?H(process.env.ProgramData||"C:\\ProgramData","OpenAI","Codex","requirements.toml"):"/etc/codex/requirements.toml"}function wO(e){if(!(!Se(e)||Object.keys(e).length!==1)){if(typeof e.token=="string")return e.token;if(Array.isArray(e.any_of)&&e.any_of.every(t=>typeof t=="string"))return e.any_of}}function bO(e,t){let n;try{n=As(e)}catch{return!1}if(n.rules===void 0)return!0;if(!Se(n.rules))return!1;let r=n.rules.prefix_rules;if(r===void 0)return!0;if(!Array.isArray(r))return!1;for(let o of r){if(!Se(o)||!Array.isArray(o.pattern)||o.decision!=="prompt"&&o.decision!=="forbidden")return!1;let s=o.pattern.map(wO);if(s.some(a=>a===void 0))return!1;let i=tb(s);if(!i)return!1;t.push(i)}return!0}function xO(e){let t=process.env.CODEX_HOME||H(Qn(),".codex"),n=[H(t,"rules"),...io(e).map(s=>H(s,".codex","rules"))],r=[],o=null;try{o=Ds(yO(),"utf8")}catch(s){let i=s.code;if(i!=="ENOENT"&&i!=="ENOTDIR")return"unreadable"}if(o!==null&&!bO(o,r))return"unreadable";for(let s of[...new Set(n)]){let i=kO(s);if(i==="unreadable")return"unreadable";for(let a of i){let c;try{c=Ds(a,"utf8")}catch{return"unreadable"}if(!gO(c,r))return"unreadable"}}return{matchers:r,complete:!1}}function Se(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function cf(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function vO(e){let t=e.trim().replace(/\s+/g," "),n=t.endsWith(" *")&&t.length>2,r=(n?t.slice(0,-2):t).split("*").map(cf).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var _O=512;function SO(e){let t=e.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[t,t.map(so)]}function Fa(e,t){if(e.test(t)||e.test(t.trim().replace(/\s+/g," ")))return!0;for(let n of SO(t)){if(n.length>_O)return!0;for(let r=0;r<n.length;r++)if(e.test(n.slice(r).join(" ")))return!0}return!1}function er(e){let t=vO(e);return n=>Fa(t,n)}function EO(e){let t=e.trim().replace(/:\*$/," *"),n=t.endsWith(" *"),r=n?t.slice(0,-2):t;if(!r||r.includes("*")||/\s\s|[^\S ]|^ | $/.test(r))return null;let o=new RegExp(`^${cf(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var $O={"claude-code":sO,cursor:iO,"gemini-cli":dO,opencode:pO,antigravity:mO,codex:xO},TO=new Set(["codex"]),nb=/(?:^|[\s=:/~])\.(?:git|claude|vscode|idea|husky)(?=[/\s;|&)]|$)|(?:^|[\s=:/~])\.(?:bashrc|bash_profile|bash_login|bash_logout|profile|zshrc|zprofile|zshenv|zlogin|zlogout|gitconfig|gitmodules|ripgreprc|mcp\.json)(?![A-Za-z0-9_])/;function AO(e,t,n){let r=$O[e];return r?r(t??process.cwd(),n):{matchers:[],complete:!1}}function RO(e,t,n){return e==="unreadable"||nb.test(t.replace(/['"\\]/g,""))||e.matchers.some(r=>r(t))?!1:e.complete||Yw(t,!TO.has(n))}var rb=new Set(["default","acceptEdits","dontAsk"]);function ob(e,t){return t.host!=="claude-code"||t.permissionMode==="bypassPermissions"?!0:e!=="unreadable"&&e.allowsEverything===!0&&rb.has(t.permissionMode??"")}var CO=/(?:^|[\s/])git(?:\.exe|\.real|-[a-z][\w-]*)?(?=\s|$)/;function PO(e){if(!e)return!1;try{for(let t of io(e)){let n=H(t,".git");if(Xn(n))return vP(n).isFile()}}catch{return!0}return!1}function OO(e,t){let n="pathEnv"in e?e.pathEnv:process.env.PATH,r,o;return(s,i)=>e.host!=="claude-code"?oo(s,e.cwd,n):i!==void 0&&CO.test(i)&&(o??=PO(e.cwd))||(r??=Cw(t.configDir),!oo(s,e.cwd,n)&&!r.paths.some(a=>oo(s,e.cwd,a)))?!1:s.includes("/")||!Pw(s,r)}var IO=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function NO(e,t,n){return n.host!=="claude-code"||e==="unreadable"||ob(e,n)||!rb.has(n.permissionMode??"")||!IO.test(t)||nb.test(t.replace(/['"]/g,""))||(e.guards??[]).some(r=>r(t))?null:(e.trustedAllow??[]).find(r=>r.matches(t))?.rule??null}var HO=/^(?:\S+=\S*\s+)*(?:(?:npx|bunx|pnpm\s+exec|yarn\s+exec|uv\s+run|poetry\s+run)\s+)?(?:\.\/)?(?:ctest|gradlew|gradle|mvnw|mvnd|mvn|make|cmake|sbt|phpstan|phpunit|pest|pytest|py\.test|tox|nox|vitest|jest|mocha|playwright\s+test|tsc|(?:cargo|go)\s+(?:build|test|check|clippy|vet)|(?:bun|deno)\s+(?:test|check|lint|install)|(?:npm|pnpm|yarn)\s+(?:test|t|ci|install|run\s+\S+)|dotnet\s+(?:build|test)|swift\s+(?:build|test)|composer\s+(?:install|update|test))(?:\s|$)/;function DO(e,t){return t.host==="claude-code"&&t.permissionMode==="default"&&HO.test(e.trim())}function MO(e,t,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=t.claudeDirs??oO(),s=AO(t.host,t.cwd,o),i=NO(s,e,t),a=i||RO(s,e,t.host)?GP(e,n,OO(t,o)):e;return a!==e&&s!=="unreadable"&&(i?(s.guards??[]).some(c=>c(a)):s.matchers.some(c=>c(a))||(s.allow??[]).some(c=>c(a)&&!c(e)))&&(a=e),r(t.sessionId,a!==e),a===e?null:i?{command:a,allowedBy:i}:ob(s,t)?{command:a}:s!=="unreadable"&&DO(e,t)&&!(s.allow??[]).some(c=>c(e))&&!(s.trustedAllow??[]).some(c=>c.matches(e))?{command:a,ask:!0}:null}function sb(e,t,n,r){let o=MO(e,t,n,r);return o&&!o.ask?o.command:null}qt();var lf=["opencode","kilo","amp","vibe","antigravity","openclaw","pi","omp","hermes"];function FO(e){return typeof e=="string"&&lf.includes(e)}function ib(e,t,n="unknown",r=Ww(t),o=Qd){return e?sb(e,{host:t,sessionId:n},Wt()?null:r,o):null}function ab(e){let t,n;for(let r=0;r<e.length;r++){let o=e[r],s=e[r+1];if((o==="--host"||o==="--session")&&s!==void 0){o==="--host"?t=s:n=s,r+=1;continue}return null}return FO(t)?{host:t,...n?{session:n}:{}}:null}jr();Fr();Nl();function cb(e=5e3){return new Promise(t=>{let n=[],r=process.stdin,o=!1,s=()=>{o||(o=!0,clearTimeout(a),r.off("data",i),r.pause(),r.unref?.(),t(Buffer.concat(n).toString("utf8")))},i=c=>{n.push(Buffer.isBuffer(c)?c:Buffer.from(c))},a=setTimeout(s,e);r.on("data",i).once("end",s).once("error",s),r.resume()})}ht();tn();ao();Mf();mf();var xe=Gt();async function wH(){let{AGENT_BONUSES:e,powerInstalled:t,reducerInstalled:n}=await Promise.resolve().then(()=>(xt(),bt)),r=e.filter(t).map(s=>s.label),o=e.filter(n).map(s=>s.label);return[`/power: ${r.length?r.join(", "):"no other agent set up"} (Claude Code gets it from its plugin; others from tkr setup-<agent>)`,`Reducer: ${o.length?o.join(", "):"no other agent set up"} (Claude Code gets it from its plugin; others from tkr setup-<agent>)`]}function Wx(){return he(new URL("./tkr-context-hook.js",import.meta.url))}async function sc(e){let{installAgentBonuses:t}=await Promise.resolve().then(()=>(xt(),bt));return t(e,process.env.PATH??"",Wx()).catch(()=>({lines:["Could not add /power and the reducer for this agent."],error:!0}))}async function ic(e){let{removeAgentBonuses:t}=await Promise.resolve().then(()=>(xt(),bt));return t(e).catch(()=>"error")}function ac(e){return e==="removed"?["Removed the tokmizer /power command and reducer instructions for this agent."]:e==="error"?["Could not remove the tokmizer /power command or reducer instructions; remove them by hand."]:[]}async function mo(){try{let{syncReducerRules:e}=await Promise.resolve().then(()=>(xt(),bt));await e()}catch{}}async function Mt(){let{codexHookNoticeLine:e}=await Promise.resolve().then(()=>(Su(),$g)),t=[Ec(),await uk(),e(),Ya(js())].filter(n=>n!==null);return t.length?["",...t]:[]}async function bH(e){let t=`Usage: tkr migrate rtk [--dry-run] [--yes] [--shim] | tkr migrate rtk --undo
|
|
236
|
+
`,n=e.slice(1);if(e[0]!=="rtk"||n.some(g=>!["--dry-run","--yes","-y","--shim","--undo"].includes(g))||n.includes("--undo")&&n.length>1){process.stderr.write(t),process.exitCode=1;return}let{buildPlan:r,renderPlan:o,planHasWork:s,applyPlan:i,undoMigration:a,migrationApplied:c}=await Promise.resolve().then(()=>(Mf(),$x));if(n.includes("--undo")){let g=await a();process.stdout.write(`${g.lines.join(`
|
|
237
237
|
`)}
|
|
238
|
-
`),g.ok||(process.exitCode=1);return}let l=
|
|
238
|
+
`),g.ok||(process.exitCode=1);return}let l=js(),u=n.includes("--shim")?{tkr:Ui(process.env.PATH??"",he(import.meta.url))}:void 0,d=await r(l,u?{shim:u}:{});if(!(d.binary||d.dirs.length>0||d.filters.length>0||d.config.file||d.history||d.hooks.length>0)&&!d.shim){process.stdout.write(`rtk was not found on this machine: no rtk command, settings, history or agent hook. Nothing to migrate.
|
|
239
239
|
`);return}if(process.stdout.write(o(d)),!s(d)){process.stdout.write(c()?`Already migrated: nothing to change. Undo with: tkr migrate rtk --undo
|
|
240
240
|
`:`Nothing to change.
|
|
241
241
|
`);return}let f=n.includes("--yes")||n.includes("-y");if(n.includes("--dry-run")){process.stdout.write(`Dry run: nothing changed. Apply with: tkr migrate rtk --yes
|
|
242
|
-
`);return}if(!f&&process.stdin.isTTY&&process.stdout.isTTY){let
|
|
243
|
-
`);return}let
|
|
244
|
-
${
|
|
242
|
+
`);return}if(!f&&process.stdin.isTTY&&process.stdout.isTTY){let m=(await import("node:readline/promises")).createInterface({input:process.stdin,output:process.stdout});try{f=["y","yes"].includes((await m.question("Apply these changes? [y/N] ")).trim().toLowerCase())}finally{m.close()}}if(!f){process.stdout.write(`Nothing changed. Apply with: tkr migrate rtk --yes
|
|
243
|
+
`);return}let h=await i(d);process.stdout.write(`
|
|
244
|
+
${h.join(`
|
|
245
245
|
`)}
|
|
246
246
|
`),d.shim&&d.binary&&process.stdout.write(`The real rtk is still at ${d.binary.path}. Uninstall it so the rtk command forwards to Tokmizer.
|
|
247
247
|
`),d.hooks.some(g=>g.tkrInstalled&&g.edits.length>0)&&process.stdout.write(`Restart your agents so they reload their hooks.
|
|
248
248
|
`),process.stdout.write(`Undo anytime with: tkr migrate rtk --undo
|
|
249
|
-
`)}function
|
|
250
|
-
`))}async function
|
|
249
|
+
`)}function xH(){process.stdout.write(["Usage: tkr <command>",""," link link your account (optional; paste your key)"," link <key> link without prompts"," link --shim [--shim-runner P] install shell-shims (universal compat)"," unlink unlink this machine from your account"," status show account and engine status"," gain [--day|--week|--month] estimated tool-output savings (today / 7 days / 30 days / all time)"," [--project [path]] only commands run inside a project directory (default: current)"," [--json|--csv|--graph|--history] JSON, one CSV row per day, per-day bar chart, last 20 commands"," [--by-rule|--failures] savings per rule, commands left unchanged"," [--quota [pro|5x|20x]] estimated share of a Claude plan budget (default pro, last 30 days)"," session this session's tkr coverage"," restore <hash> re-fetch the full output behind a [tkr restore \u2026] hint"," [--lines a:b] [--grep re] only some lines of it"," restore --list | --grep <re> list or search this project's cached outputs"," [--all-projects] include the outputs of every project"," filters trust [file\u2026] allow your ~/.tokmizer/filters/*.toml files (records SHA-256)"," filters untrust [file\u2026] stop using them"," filters test [rule] run the inline tests of your filters"," discover what's covered (agent + terminal)"," setup-claude [--remove] add or remove Claude Code hooks for the standalone tkr"," setup [--all] set up every agent found on this machine (asks which; --all sets up all)"," setup-codex [--remove] one-command setup for OpenAI Codex"," uninstall remove every hook, shim and PATH line Tokmizer added"," setup-cursor [--remove] install or remove the Cursor agent hook"," setup-gemini [--remove] install or remove the Gemini CLI hook",...ze.map(e=>` ${`${e.command} [--remove]`.padEnd(34)}install or remove the ${e.label} integration`)," rewrite --host <agent> print the tokmizer form of a command read on stdin (used by agent plugins)",...ce.map(e=>` ${`${e.setup.slice(4)} [--remove]`.padEnd(34)}install or remove the ${e.label} hook`)," auto-update [on|off|status] keep the tkr CLI up to date on its own (on by default)"," network [on|off|status] allow or block every connection to tokmizer.com (on by default)"," doctor [--fix] print detected host, OS, adapter; --fix repairs outdated shims and hooks"," migrate rtk [--dry-run] [--yes] move from rtk: filters, settings, history; turn off its agent hooks"," [--shim] | --undo also forward the rtk command to tkr; undo the last migration"," shim install [--runner P] install command shims for agents without hooks (Aider, Cline, Windsurf)"," [--global-path] also route every terminal through them (changes your shell profile)"," shim global-path [on|off|status] turn that terminal-wide PATH line on or off"," shim uninstall remove the shims and any PATH line Tokmizer added"," wrap [--host H] <agent> [args] start an agent with the shims active only for it"," heartbeat refresh JWT + bundle"," settings show print current settings"," settings set <key> <value> update one setting (key uses dot path, e.g. filters.enableAll true)"," settings configure interactive wizard (recommended or custom)"," settings reset reset all settings to defaults"," compression [level] show or set compression level (light, balanced, max)"," yolo [on|off|status] local aggressive output reduction; content can be lost"," reducer [level] show or set response reducer (off, light, balanced, max)"," telemetry status show telemetry on/off + local record count"," telemetry on | off turn usage stats (command names, token counts; on by default) on or off"," telemetry forget erase telemetry data stored on this machine",""].join(`
|
|
250
|
+
`))}async function vH(e){let t=e[0]??"show";if(t==="show"){try{let n=await Rn();process.stdout.write(`Plan: ${n.plan}
|
|
251
251
|
`),process.stdout.write(`${JSON.stringify(n.settings,null,2)}
|
|
252
252
|
`)}catch(n){process.stdout.write(`Settings unavailable; showing local cached settings: ${n instanceof Error?n.message:String(n)}
|
|
253
253
|
`),process.stdout.write(`${JSON.stringify(await Q(),null,2)}
|
|
254
254
|
`)}return}if(t==="set"){let n=e[1],r=e[2];if(!n||r===void 0){process.stderr.write(`Usage: tkr settings set <key> <value>
|
|
255
|
-
`),process.exitCode=1;return}let o=
|
|
255
|
+
`),process.exitCode=1;return}let o=um(n,r),s=await rt(o);await mo(),process.stdout.write(`Updated. ${n} = ${JSON.stringify(r)}
|
|
256
256
|
`),process.stdout.write(`Current: ${JSON.stringify(s.settings,null,2)}
|
|
257
|
-
`);return}if(t==="configure"){await
|
|
257
|
+
`);return}if(t==="configure"){await zy();return}if(t==="reset"){let n=await rt({enabled:!0,outputVerbosity:"compact",reducer:"off",filters:{enableAll:!0,disabled:[]}});await An(!1),await mo(),process.stdout.write(`Settings reset to defaults.
|
|
258
258
|
`),process.stdout.write(`YOLO: off (this machine only)
|
|
259
259
|
`),process.stdout.write(`${JSON.stringify(n.settings,null,2)}
|
|
260
260
|
`);return}process.stderr.write(`Unknown settings subcommand: ${t}
|
|
261
|
-
`),process.exitCode=1}async function
|
|
261
|
+
`),process.exitCode=1}async function _H(e){let t=e[0]??"status";if(t==="on"||t==="off"){let n=t==="on";try{let r=await rt({telemetryOptIn:n});process.stdout.write(`Telemetry ${r.settings.telemetryOptIn?"on":"off"}.
|
|
262
262
|
`),r.settings.telemetryOptIn&&!B()?process.stdout.write(`Network is off, so nothing is sent. Turn it back on with: tkr network on
|
|
263
|
-
`):r.settings.telemetryOptIn?(await
|
|
264
|
-
`),process.stdout.write(`${
|
|
265
|
-
`),
|
|
263
|
+
`):r.settings.telemetryOptIn?(await z()||process.stdout.write(`Could not reach tokmizer.com right now. Usage stats stay on this machine and are sent once Tokmizer is online.
|
|
264
|
+
`),process.stdout.write(`${Bu}
|
|
265
|
+
`),Ku()):process.stdout.write(`Your choice is saved on this machine and survives updates. Turn them back on with: tkr telemetry on
|
|
266
266
|
`)}catch(r){process.stdout.write(`${r instanceof Error?r.message:String(r)}
|
|
267
|
-
`),process.exitCode=1}return}if(t==="forget"){
|
|
268
|
-
`);return}if(t==="status"){let n;try{n=(await
|
|
269
|
-
Network: ${
|
|
267
|
+
`),process.exitCode=1}return}if(t==="forget"){bs("telemetry"),bs("learn");let n=await iw()+Ew();process.stdout.write(`Cleared ${n} local telemetry record${n===1?"":"s"} from this machine.
|
|
268
|
+
`);return}if(t==="status"){let n;try{n=(await Rn()).settings.telemetryOptIn?"on":"off"}catch{n=`${(await Q()).telemetryOptIn?"on":"off"} (offline; last known)`}let[r,o]=await Promise.all([an(),z()]),s=n.startsWith("on"),i=s&&B();process.stdout.write(`Telemetry: ${n}
|
|
269
|
+
Network: ${Eo()}
|
|
270
270
|
Account: ${o?.linked===!0||o?.email?"linked":"none (stats are tied to this install's random key)"}
|
|
271
271
|
`+(i?`Sent: command names, token counts, session ID, agent name and install health counts. Never arguments, output, file contents or paths.
|
|
272
272
|
`:s?`Sent: nothing while network is off.
|
|
@@ -275,147 +275,147 @@ Account: ${o?.linked===!0||o?.email?"linked":"none (stats are tied to this insta
|
|
|
275
275
|
`+(s?`Default: on. Turn off in one command: tkr telemetry off (your choice survives updates)
|
|
276
276
|
`:`Default: on; you turned them off. Turn on: tkr telemetry on
|
|
277
277
|
`)+`Manage: tkr telemetry on | off | forget. Stop every connection: tkr network off
|
|
278
|
-
`),i&&
|
|
279
|
-
`),process.exitCode=1}var
|
|
280
|
-
`)}async function
|
|
281
|
-
`),process.exitCode=2;return}
|
|
282
|
-
`);let{spawn:c}=await import("node:child_process"),l=c(o,r.slice(1),{stdio:"inherit",env:{...
|
|
283
|
-
`),d(127)}),l.on("close",(p,f)=>d(p??(f==="SIGINT"?130:f==="SIGTERM"?143:1)))})}function
|
|
278
|
+
`),i&&Ku();return}process.stderr.write(`Unknown telemetry subcommand: ${t}
|
|
279
|
+
`),process.exitCode=1}var Kx=["aider","cline","windsurf"];function Zx(){return["Shims only run inside agents you start with: tkr wrap <agent> [args]","Your own terminals are not changed. To route every terminal through Tokmizer anyway: tkr shim global-path on",""].join(`
|
|
280
|
+
`)}async function SH(e){let t=e.indexOf("--host"),n=t>=0?e[t+1]:void 0,r=t>=0?[...e.slice(0,t),...e.slice(t+2)]:e;r[0]==="--"&&r.shift();let o=r[0],s=o?o.split(/[\\/]/).pop().replace(/\.(?:exe|cmd)$/,""):"",i=n??(Kx.includes(s)?s:void 0);if(!o||!i){process.stderr.write(`Usage: tkr wrap [--host <${Kx.join("|")}>] <agent command> [args]
|
|
281
|
+
`),process.exitCode=2;return}Bn()||await Jn(we());let a=Ec();a&&process.stderr.write(`${a}
|
|
282
|
+
`);let{spawn:c}=await import("node:child_process"),l=c(o,r.slice(1),{stdio:"inherit",env:{...ng(),TOKMIZER_HOST:i}}),u=d=>{try{l.kill(d)}catch{}};process.on("SIGINT",()=>u("SIGINT")),process.on("SIGTERM",()=>u("SIGTERM")),process.exitCode=await new Promise(d=>{l.on("error",p=>{process.stderr.write(`tkr wrap: ${p.message}
|
|
283
|
+
`),d(127)}),l.on("close",(p,f)=>d(p??(f==="SIGINT"?130:f==="SIGTERM"?143:1)))})}function Vx(e){return`Tokmizer no longer changes your terminals: it removed its PATH line from ${e.join(", ")} (backups in ~/.tokmizer/backup/rc). Agents keep their savings through their hooks. To put the line back: tkr shim global-path on`}function EH(e){return[...e.rewrittenShims?[`Rewrote ${e.rewrittenShims} outdated command shim${e.rewrittenShims===1?"":"s"}.`]:[],...e.launcher==="written"?["Pointed the shims at the current Tokmizer install."]:[],...e.hookLauncher==="written"?["Pointed the agent hooks at the current Tokmizer install."]:[],...e.globalPathRemoved.map(t=>`Removed the Tokmizer PATH line from ${t} (backup in ~/.tokmizer/backup/rc; undo: tkr shim global-path on).`)]}async function $H(){let{droidFiles:e}=await Promise.resolve().then(()=>(tn(),bh)),{claudeSettingsFile:t}=await Promise.resolve().then(()=>(In(),Jo)),{AGENT_BONUSES:n}=await Promise.resolve().then(()=>(xt(),bt)),r=[t(),ie(),We(),Re(),...e().map(o=>o.file),...ce.flatMap(o=>o.files())];for(let o of ze)r.push(...o.kind==="hook"?[o.file()]:o.files().map(s=>s.target));for(let o of n)o.reducer.kind==="rules"&&r.push(o.reducer.file());return r}async function TH(){let{removeCodexHook:e}=await Promise.resolve().then(()=>(Ve(),en)),{removeClaudeHooks:t}=await Promise.resolve().then(()=>(In(),Jo)),{removeVibeHook:n,removeAntigravityHook:r}=await Promise.resolve().then(()=>(Fr(),Ih)),{rm:o}=await import("node:fs/promises"),{hookLauncherFile:s}=await Promise.resolve().then(()=>(Or(),Om)),i=[],a=[["Claude Code",t],["Codex",e],["Cursor",wl],["Gemini CLI",El],["Vibe",n],["Antigravity",r],...ce.map(h=>[h.label,h.remove]),...ze.filter(h=>h.kind!=="hook").map(h=>[h.label,()=>Vl(h)])];for(let[h,g]of a){let m=await g().catch(()=>"error");m==="removed"?i.push(`Removed the ${h} integration.`):m==="error"&&i.push(`Could not update the ${h} configuration; remove the tokmizer entry by hand.`)}let{AGENT_BONUSES:c,removeAgentBonuses:l}=await Promise.resolve().then(()=>(xt(),bt));for(let h of c){let g=await l(h.id,!0).catch(()=>"error");g==="removed"?i.push(`Removed the ${h.label} /power command and reducer instructions.`):g==="error"&&i.push(`Could not remove the ${h.label} /power command or reducer instructions; remove them by hand.`)}let{forgetReducerFiles:u}=await Promise.resolve().then(()=>(xt(),bt));await u();let{cleanLegacyBackups:d,removeConfigBackups:p}=await Promise.resolve().then(()=>(Pn(),Mm));await d(await $H()),await p();let f=await iu();f&&i.push(`Removed ${f} command shims.`);for(let h of(await ls(!1)).files)i.push(`Removed the Tokmizer PATH line from ${h} (backup in ~/.tokmizer/backup/rc).`);await o(s(),{force:!0}).catch(()=>{}),i.push("Your shell and agents now run without Tokmizer. Your savings history stays in ~/.tokmizer (delete that folder to erase it).","To remove the program itself: npm uninstall -g @tokmizer/plugin, brew uninstall tokmizer, or /plugin uninstall tokmizer@tokmizer in Claude Code."),process.stdout.write(`${i.join(`
|
|
284
284
|
`)}
|
|
285
|
-
`)}async function
|
|
285
|
+
`)}async function Jf(e,t){if(e==="claude"){let{claudeExecutables:s,claudePluginEnabled:i,claudeSettingsFile:a,ensureClaudeHooks:c}=await Promise.resolve().then(()=>(In(),Jo));if(ae())return{status:await c(s()),notes:[]};let{readJsonConfig:l}=await Promise.resolve().then(()=>(de(),Um)),u=await l(a());return{status:u&&i(u)?"plugin":"error",notes:[]}}if(e==="codex"){let{setupCodexHook:s}=await Promise.resolve().then(()=>(Ve(),en)),i=await s(Wo(t,he(new URL("./tkr-codex-hook.js",import.meta.url))));return{status:i.hook,notes:i.repair.lines}}if(e==="cursor")return{status:await yl(bl(t,he(new URL("./tkr-cursor-hook.js",import.meta.url)))),notes:[]};if(e==="gemini")return{status:await Sl($l(t,he(new URL("./tkr-gemini-hook.js",import.meta.url)))),notes:[]};let n=ce.find(s=>s.id===e);if(n)return{status:await n.ensure(zi(n,t,he(new URL(`./${n.bin}.js`,import.meta.url)))),notes:[]};let r=ze.find(s=>s.host===e);return r?{status:r.kind==="hook"?await r.ensure(Bi(r.host,t,he(new URL("./tkr-agent-hook.js",import.meta.url)))):await Zl(r,he(new URL("../../agent-plugins/",import.meta.url)),Ui(t,he(import.meta.url))),notes:[]}:{status:"error",notes:[]}}async function Gf(e=!1){let t=[],{brokenIntegrations:n}=await Promise.resolve().then(()=>(Gi(),ql)),r=process.env.PATH??"";for(let{check:i}of n()){if(i.id==="claude"&&!ae())continue;let{status:a,notes:c}=await Jf(i.id,r);if(a!=="error"){let{repairReducerHooks:l}=await Promise.resolve().then(()=>(xt(),bt));await l(i.id,r,Wx())}t.push(...c),t.push(a==="error"?`Could not repair the ${i.label} hook. Run its setup command again.`:`Repaired the ${i.label} hook, which pointed at a removed install.${i.id==="codex"?" In Codex, run /hooks once and approve it.":""}`)}let{codexFindings:o}=await Promise.resolve().then(()=>(Oi(),fl));if(o().some(i=>i.kind!=="config-toml"||i.commands.length>0)){let{status:i,notes:a}=await Jf("codex",r);t.push(...a,...i==="added"||i==="updated"?["In Codex, run /hooks once, approve the Tokmizer hook, then restart Codex."]:[])}let{healForeignHooks:s}=await Promise.resolve().then(()=>(Qa(),Xa));return t.push(...await s(async i=>(await Jf(i,r)).status,e)),t}async function AH(){let e=await nn({shimJs:we(),explicit:!0,rc:!0}),{codexDoctorFix:t}=await Promise.resolve().then(()=>(Ve(),en)),n=await t(Wo(process.env.PATH??"",he(new URL("./tkr-codex-hook.js",import.meta.url)))),r=[...EH(e),...n,...await Gf(!0)];r.length||r.push("Nothing left to repair.");for(let o of await tg())r.push(`Removed earlier: the Tokmizer PATH line in ${o.file} (backup: ${o.backup}; undo: tkr shim global-path on).`);process.stdout.write(`${r.join(`
|
|
286
286
|
`)}
|
|
287
|
-
`)}async function
|
|
288
|
-
`);return}if(e==="reducer"&&t[0]==="--context"){let o=t[1]==="prompt"?"prompt":"session",{reducerContext:s}=await Promise.resolve().then(()=>(
|
|
289
|
-
`),e!=="doctor")for(let s of await
|
|
290
|
-
`)}if(e==="rtk-compat"){let{rtkCompatAction:o,runRaw:s}=await Promise.resolve().then(()=>(
|
|
291
|
-
`),process.exitCode=2;return}let s=
|
|
287
|
+
`)}async function RH(){let e=process.argv[2]??"help",t=process.argv.slice(3);if(["--version","-v","version"].includes(e)){process.stdout.write(`${ue}
|
|
288
|
+
`);return}if(e==="reducer"&&t[0]==="--context"){let o=t[1]==="prompt"?"prompt":"session",{reducerContext:s}=await Promise.resolve().then(()=>(Iu(),Lg)),i=await s(o).catch(()=>null);i&&process.stdout.write(i.text);return}if(!["rtk-compat","shims-heal","rewrite","help","--help","-h"].includes(e)&&!(e==="doctor"&&t[0]!=="--fix")){let o=await nn({shimJs:we(),rc:!0}).catch(()=>null);if(o?.globalPathRemoved.length&&process.stderr.write(`${Vx(o.globalPathRemoved)}
|
|
289
|
+
`),e!=="doctor")for(let s of await Gf().catch(()=>[]))process.stderr.write(`${s}
|
|
290
|
+
`)}if(e==="rtk-compat"){let{rtkCompatAction:o,runRaw:s}=await Promise.resolve().then(()=>(Pf(),bx)),i=o(t);if(i.kind==="message"){i.stdout&&process.stdout.write(i.stdout),i.stderr&&process.stderr.write(i.stderr),process.exitCode=i.code;return}if(i.kind==="raw"){process.exitCode=s(i.argv);return}e=i.argv[0],t=i.argv.slice(1)}if(e==="migrate"){await bH(t);return}if(e==="rewrite"){let o=ab(t);if(!o){process.stderr.write(`Usage: tkr rewrite --host <${lf.join("|")}> [--session <id>] < command
|
|
291
|
+
`),process.exitCode=2;return}let s=ib(await cb(),o.host,o.session);s&&process.stdout.write(s);return}if(e==="yolo"){let o=t[0]??"status";if(t.length>1||!["on","off","status"].includes(o)){process.stderr.write(`Usage: tkr yolo [on|off|status]
|
|
292
292
|
`),process.exitCode=1;return}o==="on"?(process.stderr.write(`Warning: YOLO can discard content and diagnostics. Lost output cannot be restored; command exit codes are preserved.
|
|
293
|
-
`),await
|
|
294
|
-
`);return}if(e==="init"||e==="link"){if(e==="init"&&process.stdout.write("`tkr init` is now `tkr link`. Running link...\n"),t.includes("--shim")){let c=t.indexOf("--shim-runner"),l=c>=0?t[c+1]:
|
|
295
|
-
${
|
|
296
|
-
`+(
|
|
293
|
+
`),await An(!0)):o==="off"&&await An(!1),process.stdout.write(`YOLO: ${vr()?"on":"off"} (this machine only)
|
|
294
|
+
`);return}if(e==="init"||e==="link"){if(e==="init"&&process.stdout.write("`tkr init` is now `tkr link`. Running link...\n"),t.includes("--shim")){let c=t.indexOf("--shim-runner"),l=c>=0?t[c+1]:we(),u=await Jn(l??we());process.stdout.write(`Installed ${u.length} shims into ${G()}
|
|
295
|
+
${Zx()}`);return}if(!B()){process.stdout.write(`Linking needs to reach tokmizer.com, and network access is off for Tokmizer.
|
|
296
|
+
`+(So()?`Unset TOKMIZER_NETWORK (or set it to 1), then run tkr link again.
|
|
297
297
|
`:`Turn it back on with: tkr network on, then run tkr link again.
|
|
298
298
|
`)),process.exitCode=1;return}let o=t.indexOf("--email"),s=t.indexOf("--token"),i=t.find(c=>c.startsWith("tokmizer_")),a=s>=0?t[s+1]??"":i??"";if(t.length>0){if(!a){process.stdout.write(`Usage: tkr link <key> (the key from tokmizer.com/dashboard/token, starts with tokmizer_)
|
|
299
|
-
`),process.exitCode=1;return}let c=o>=0?t[o+1]:"";try{let l=await
|
|
299
|
+
`),process.exitCode=1;return}let c=o>=0?t[o+1]:"";try{let l=await Ca({token:a,baseUrl:xe,...c?{email:c}:{}});process.stdout.write(De.activated(l.plan)+`
|
|
300
300
|
`),process.stdout.write(`Review this account's settings: tkr settings show. Adjust them with: tkr settings configure
|
|
301
|
-
`);let u=await
|
|
301
|
+
`);let u=await Ao();u?.error&&process.stdout.write(`Note: feature sync failed (${u.error}). Run "tkr heartbeat" to retry.
|
|
302
302
|
`)}catch(l){process.stdout.write(`${l instanceof Error?l.message:String(l)}
|
|
303
|
-
`),process.exitCode=1}return}await
|
|
303
|
+
`),process.exitCode=1}return}await By(xe);return}if(e==="unlink"){let o=await z(),s=!(await Q()).telemetryOptIn,i=B();if(i&&o?.jwt&&o.signingSecret)try{let c=await Ze();await Ae("POST","/api/v1/license/unlink",{ts:Date.now()},{baseUrl:xe,bearer:o.jwt,signingSecret:o.signingSecret,fingerprint:c.fingerprint,installId:c.installId,timeoutMs:4e3})}catch{}await ti();try{await br([]),await xr([])}catch{}await Fc(),s&&await Mo({telemetryOptIn:!1});try{let{shutdownDaemon:c}=await Promise.resolve().then(()=>(Zr(),Kr));await c()}catch{}let a=o?.email?` from ${o.email}`:"";process.stdout.write(`Unlinked this machine${a}. The plugin keeps working without an account; a new install token is created on the next online run. Link another account with: tkr link
|
|
304
304
|
`),!i&&o&&process.stdout.write(`Network is off: the local link was removed, but tokmizer.com was not told. Run tkr unlink again after tkr network on to remove this device from your dashboard.
|
|
305
|
-
`);return}if(e==="doctor"){if(t[0]==="--fix"){await
|
|
306
|
-
`),
|
|
307
|
-
`));return}if(e==="auto-update"){let{autoUpdateEnabled:o,setAutoUpdate:s}=await Promise.resolve().then(()=>(
|
|
305
|
+
`);return}if(e==="doctor"){if(t[0]==="--fix"){await AH();return}let o=await nn({shimJs:we(),rc:!0,dryRun:!0}),{brokenIntegrations:s}=await Promise.resolve().then(()=>(Gi(),ql)),i=s(),a=Vi(),c=Ki(),l=await Pc(),{brewTapStatus:u}=await Promise.resolve().then(()=>(Ox(),Px)),d=u(),p=d?.wedged?d.path.replace(/\/Formula\/tokmizer\.rb$/,""):null,f=Lh(c.host),h=await fi().catch(()=>null),g=[`Host: ${c.host} (source: ${c.source})`,`OS: ${c.os}`,`Arch: ${c.arch}`,`Network: ${Eo()}${B()?" \u2014 turn off with: tkr network off":" \u2014 no request leaves this machine; re-enable with: tkr network on"}`,`Adapter: ${zh(c.host)}${f?` \u2014 native hook available, run: ${f}`:""}`,`Shim dir: ${G()}`,`Shim: ${Bn()?`installed \u2014 ${o.staleShims||o.launcher==="stale"?"outdated, run: tkr doctor --fix":"up to date"}`:"not installed (only needed for Aider, Cline, Windsurf: tkr wrap <agent>)"}`,`PATH: ${o.globalPathLines?`${cs()?"terminal-wide PATH line on (tkr shim global-path off to remove)":"old terminal-wide PATH line found \u2014 run: tkr doctor --fix"}`:"your shell profile is not changed by Tokmizer"}`,...o.hookLauncher==="stale"?["Hooks: the agent hooks point at a removed install \u2014 run: tkr doctor --fix"]:[],...a?[`Fallback: ${a} command${a===1?"":"s"} ran without Tokmizer because its files were missing \u2014 run: tkr doctor --fix`]:[],...Wt()?["Safe mode: on \u2014 tokmizer.com paused command rewriting for this version; commands run unchanged"]:[],...i.map(m=>`Broken: ${m.check.label} points at a missing file (${m.missing[0]}) \u2014 run: tkr doctor --fix`),...(await Promise.resolve().then(()=>(Ve(),en))).codexDoctorLines(),...(await Promise.resolve().then(()=>(Qa(),Xa))).foreignFindingLines((await Promise.resolve().then(()=>(Qa(),Xa))).foreignFindings()),`Codex: ${Nn()?"hook installed \u2014 if Codex shows it as new or changed, approve it once with /hooks":"hook not installed \u2014 run: tkr setup-codex"}`,`Cursor: ${Nt()?"hook installed":"hook not installed \u2014 run: tkr setup-cursor"}`,`Gemini: ${Dn()?"hook installed":"hook not installed \u2014 run: tkr setup-gemini"}`,...ze.map(m=>`${`${m.label}:`.padEnd(Math.max(10,m.label.length+2))}${wt(m)?"integration installed":`integration not installed \u2014 run: tkr ${m.command}`}`),...ce.map(m=>`${`${m.label}:`.padEnd(9)} ${m.installed()?"hook installed":`hook not installed \u2014 run: ${m.setup}`}`),...await wH(),`Commands: ${l.installed}/${l.total} unprefixed slash commands${l.installed<l.total?" \u2014 restart Claude Code to reinstall":""}`,`Restore: ${process.env.TOKMIZER_CCR_DISABLED==="1"||process.env.TOKMIZER_CCR_DISABLED==="true"?"disabled (TOKMIZER_CCR_DISABLED)":Nc().disabled?`disabled (${ft()})`:`active${h?` \xB7 ${h.entries} cached output${h.entries===1?"":"s"} \xB7 kept ${No()} (tkr restore --list)`:""}`}`,...p?[`Homebrew: tap clone conflicted \u2014 updates are stuck. Fix: git -C ${p} fetch origin && git -C ${p} reset --hard origin/main && brew upgrade tokmizer`]:[],""];try{let{connectDaemon:m}=await Promise.resolve().then(()=>(Zr(),Kr)),{socketPath:b}=await Promise.resolve().then(()=>(fu(),yg)),{path:E}=b(),D=await m(),C=await D.ping();D.close(),g.push(`Daemon: running (pid ${C.pid})`,` socket: ${E}`,` uptime: ${Math.floor(C.uptimeMs/1e3)}s`,` ruleCount: ${C.ruleCount}`,` bundleVersion: ${C.bundleVersion}`,"")}catch(m){g.push(`Daemon: not running (${m.message})`,"")}try{let{readFileSync:m,existsSync:b,statSync:E}=await import("node:fs"),{join:D}=await import("node:path"),{tokmizerHome:C}=await Promise.resolve().then(()=>(F(),fp)),N=C(),te=D(N,"daemon.spawn.fail");if(b(te)){let ve=Number(m(te,"utf8"));g.push(` last spawn failure: ${Number.isFinite(ve)?new Date(ve).toISOString():"unknown"} (details: ${D(N,"daemon.log")})`)}let V=D(N,"drift.jsonl");if(b(V)&&E(V).size>0){let ve=m(V,"utf8").trim().split(`
|
|
306
|
+
`),rr=JSON.parse(ve[ve.length-1]);g.push(`Drift: ${ve.length} unrecognized hook payload shape(s), last on ${rr.tool??"?"} (${V})`,"")}}catch{}try{let m=cw(await an());m&&g.push(`Coverage: ${m}`,"")}catch{}try{let{loadUserFilters:m}=await Promise.resolve().then(()=>(Yn(),Pd)),b=await m(),E=b.filters.size;g.push(E===0&&b.issues.length===0?`Filters: no user filters (optional: *.toml files in ${b.dir})`:`Filters: ${E} user filter${E===1?"":"s"} loaded from ${b.dir}`);for(let D of b.issues)g.push(` skipped ${D.file}: ${D.message}`);g.push("")}catch(m){g.push(`Filters: unavailable (${m.message})`,"")}try{let{doubleHooked:m}=await Promise.resolve().then(()=>(wf(),Cb)),b=m(js());if(b.length>0)g.push(`rtk: double hook \u2014 rtk and Tokmizer both wrap commands in ${b.join(", ")}. Fix: tkr migrate rtk`,"");else{let E=Ya(js());E&&g.push(`rtk: ${E}`,"")}}catch{}process.stdout.write(g.join(`
|
|
307
|
+
`));return}if(e==="auto-update"){let{autoUpdateEnabled:o,setAutoUpdate:s}=await Promise.resolve().then(()=>(ra(),na)),i=t[0]??"status";if(i==="on"||i==="off")s(i==="on");else if(i!=="status"){process.stderr.write(`Usage: tkr auto-update [on|off|status]
|
|
308
308
|
`),process.exitCode=1;return}process.stdout.write(`auto-update: ${o()?"on":"off"}
|
|
309
309
|
`);return}if(e==="network"){let o=t[0]??"status";if(t.length>1||!["on","off","status"].includes(o)){process.stderr.write(`Usage: tkr network [on|off|status]
|
|
310
|
-
`),process.exitCode=1;return}(o==="on"||o==="off")&&
|
|
310
|
+
`),process.exitCode=1;return}(o==="on"||o==="off")&&_p(o==="on"),process.stdout.write(`Network: ${Eo()}
|
|
311
311
|
`),B()?process.stdout.write(`Tokmizer may contact tokmizer.com to keep its rules up to date, check for updates and, if you turned them on, send usage stats.
|
|
312
312
|
Turn it off with: tkr network off
|
|
313
313
|
`):process.stdout.write(`Tokmizer sends nothing: no sign-up, no rule download, no update check, no usage stats.
|
|
314
314
|
It keeps compressing locally: with the last downloaded rules for up to 7 days, then with its core built-in rules.
|
|
315
|
-
`+(
|
|
315
|
+
`+(So()&&o==="on"?`TOKMIZER_NETWORK still blocks it for this shell. Unset it (or set it to 1) to turn the network back on.
|
|
316
316
|
`:`Turn it back on with: tkr network on
|
|
317
|
-
`));return}if(e==="self-update"){let{selfUpdate:o,defaultDeps:s}=await Promise.resolve().then(()=>(
|
|
317
|
+
`));return}if(e==="self-update"){let{selfUpdate:o,defaultDeps:s}=await Promise.resolve().then(()=>(ra(),na)),i=await z(),a=await o(s(i?.latestPluginVersion));process.stdout.write(`${a.length?a.join(`
|
|
318
318
|
`):"up to date"}
|
|
319
|
-
`);return}if(e==="shims-refresh"){let o=await
|
|
320
|
-
`);return}if(e==="shims-heal"){let o=await
|
|
321
|
-
`);for(let s of await
|
|
322
|
-
`);return}if(e==="wrap"){await
|
|
319
|
+
`);return}if(e==="shims-refresh"){let o=await nn({shimJs:we(),explicit:!0,rc:!0});process.stdout.write(`shims refreshed: ${o.rewrittenShims}
|
|
320
|
+
`);return}if(e==="shims-heal"){let o=await nn({shimJs:we(),rc:!0}).catch(()=>null);o?.globalPathRemoved.length&&process.stdout.write(`${Vx(o.globalPathRemoved)}
|
|
321
|
+
`);for(let s of await Gf().catch(()=>[]))process.stdout.write(`${s}
|
|
322
|
+
`);return}if(e==="wrap"){await SH(t);return}if(e==="setup"){let{AGENT_PROBES:o,detectedAgents:s,parseSelection:i,runSetups:a,setupSummary:c}=await Promise.resolve().then(()=>(Mx(),Dx));if(t.length&&!(t.length===1&&t[0]==="--all")){process.stderr.write(`Usage: tkr setup [--all]
|
|
323
323
|
`),process.exitCode=1;return}let l=s(),u=o.filter(f=>!l.includes(f));if(!l.length){process.stdout.write(`No supported agent found on this machine. See tkr discover for the list.
|
|
324
|
-
`);return}let d=l;if(t[0]!=="--all"){let f=l.map((
|
|
324
|
+
`);return}let d=l;if(t[0]!=="--all"){let f=l.map((b,E)=>` ${String(E+1).padStart(2)}. ${b.label}`).join(`
|
|
325
325
|
`);if(!process.stdin.isTTY||!process.stdout.isTTY){process.stdout.write(`Agents found:
|
|
326
326
|
${f}
|
|
327
327
|
Run tkr setup --all to set them all up, or tkr <setup command> for one.
|
|
328
|
-
`);return}let g=(await import("node:readline/promises")).createInterface({input:process.stdin,output:process.stdout}),
|
|
328
|
+
`);return}let g=(await import("node:readline/promises")).createInterface({input:process.stdin,output:process.stdout}),m=null;try{for(;m===null;)m=i(await g.question(`Agents found:
|
|
329
329
|
${f}
|
|
330
|
-
Set up which? Enter = all, numbers like 1 3, or none: `),l.length),
|
|
331
|
-
`)}finally{g.close()}if(d=
|
|
330
|
+
Set up which? Enter = all, numbers like 1 3, or none: `),l.length),m===null&&process.stdout.write(`Type all, none, or numbers from the list.
|
|
331
|
+
`)}finally{g.close()}if(d=m.map(b=>l[b]),!d.length)return}let p=a(d,Kt(he(import.meta.url)));for(let f of p)process.stdout.write(`== ${f.agent.label} (tkr ${f.agent.command})
|
|
332
332
|
${f.output?`${f.output}
|
|
333
333
|
`:""}`);process.stdout.write(c(p,u).join(`
|
|
334
|
-
`)),p.some(f=>!f.ok)&&(process.exitCode=1);return}if(e==="setup-claude"){let{claudeExecutables:o,claudeSettingsFile:s,ensureClaudeHooks:i,removeClaudeHooks:a}=await Promise.resolve().then(()=>(
|
|
334
|
+
`)),p.some(f=>!f.ok)&&(process.exitCode=1);return}if(e==="setup-claude"){let{claudeExecutables:o,claudeSettingsFile:s,ensureClaudeHooks:i,removeClaudeHooks:a}=await Promise.resolve().then(()=>(In(),Jo)),c=s(),l=`Could not update ${c}: it is not valid JSON. Fix it, then run tkr setup-claude again.`;if(t[0]==="--remove"){let d=await a();process.stdout.write(`${d==="error"?l:d==="removed"?`Removed the tokmizer hooks from ${c}.`:`No tokmizer hooks found in ${c}.`}
|
|
335
335
|
`),d==="error"&&(process.exitCode=1);return}if(t.length){process.stderr.write(`Usage: tkr setup-claude [--remove]
|
|
336
336
|
`),process.exitCode=1;return}if(!ae()){process.stdout.write(`Claude Code loads Tokmizer from its plugin: /plugin marketplace add norwelltw/Tokmizer, then /plugin install tokmizer@tokmizer
|
|
337
337
|
`);return}let u=await i(o());process.stdout.write(`${u==="error"?l:u==="plugin"?"Claude Code already runs Tokmizer through its plugin; no hooks added.":u==="present"?`Claude Code hooks already set in ${c}.`:`Added the tokmizer hooks to ${c}. Restart Claude Code to load them.`}
|
|
338
|
-
`);for(let d of(await
|
|
339
|
-
`);u==="error"&&(process.exitCode=1);return}if(e==="setup-codex"&&t[0]==="--remove"){let{removeCodexHook:o}=await Promise.resolve().then(()=>(
|
|
340
|
-
`);for(let a of
|
|
341
|
-
`);(s==="error"||i==="error")&&(process.exitCode=1);return}if(e==="uninstall"){await
|
|
342
|
-
`)),(i==="error"||a.error||l.error)&&(process.exitCode=1);return}if(e==="setup-cursor"||e==="setup-gemini"){let o=e==="setup-cursor",s=o?"Cursor":"Gemini CLI",i=o?
|
|
343
|
-
`);for(let
|
|
338
|
+
`);for(let d of(await Mt()).slice(1))process.stdout.write(`${d}
|
|
339
|
+
`);u==="error"&&(process.exitCode=1);return}if(e==="setup-codex"&&t[0]==="--remove"){let{removeCodexHook:o}=await Promise.resolve().then(()=>(Ve(),en)),s=await o(),i=await ic("codex");process.stdout.write(`${s==="error"?`Could not update ${ie()}: it is not valid JSON.`:s==="removed"?`Removed the tokmizer hook from ${ie()}.`:`No tokmizer hook found in ${ie()}.`}
|
|
340
|
+
`);for(let a of ac(i))process.stdout.write(`${a}
|
|
341
|
+
`);(s==="error"||i==="error")&&(process.exitCode=1);return}if(e==="uninstall"){await TH();return}if(e==="setup-codex"){await Qe(xe);let o=he(new URL("./tkr-codex-hook.js",import.meta.url)),{setupCodexHook:s}=await Promise.resolve().then(()=>(Ve(),en)),{hook:i,repair:a}=await s(Wo(process.env.PATH??"",o)),c=i==="error"?`Could not update ${ie()}: it is not valid JSON. Fix it, then run tkr setup-codex again.`:i==="plugin"?"The Tokmizer Codex plugin already runs the Codex hook. In Codex, run /hooks once and approve it.":`${i==="present"?"Codex hook already set":"Added the tokmizer hook"} in ${ie()}. In Codex, run /hooks once and approve it.`,l=await sc("codex");process.stdout.write([...a.lines,c,...l.lines,"","Last step: restart Codex so it picks up the change.","Check coverage anytime with: tkr discover","Tokmizer is free. No account is required.",...await Mt(),""].join(`
|
|
342
|
+
`)),(i==="error"||a.error||l.error)&&(process.exitCode=1);return}if(e==="setup-cursor"||e==="setup-gemini"){let o=e==="setup-cursor",s=o?"Cursor":"Gemini CLI",i=o?We():Re(),a=`Could not update ${i}: it is not valid JSON. Fix it, then run tkr ${e} again.`;if(t[0]==="--remove"){let p=o?await wl():await El(),f=await ic(o?"cursor":"gemini");process.stdout.write(`${p==="error"?a:p==="removed"?`Removed the tokmizer hook from ${i}.`:`No tokmizer hook found in ${i}.`}
|
|
343
|
+
`);for(let h of ac(f))process.stdout.write(`${h}
|
|
344
344
|
`);(p==="error"||f==="error")&&(process.exitCode=1);return}if(t.length){process.stderr.write(`Usage: tkr ${e} [--remove]
|
|
345
|
-
`),process.exitCode=1;return}await
|
|
346
|
-
`)),(u==="error"||d.error)&&(process.exitCode=1);return}let n=
|
|
347
|
-
`);for(let d of
|
|
345
|
+
`),process.exitCode=1;return}await Qe(xe);let c=he(new URL(o?"./tkr-cursor-hook.js":"./tkr-gemini-hook.js",import.meta.url)),l=(o?bl:$l)(process.env.PATH??"",c),u=o?await yl(l):await Sl(l),d=await sc(o?"cursor":"gemini");process.stdout.write([u==="error"?a:`${u==="present"?`${s} hook already set`:"Added the tokmizer hook"} in ${i}.`,...d.lines,o?"Cursor reloads hooks on its own; restart Cursor if the Hooks tab does not list it.":"Restart Gemini CLI, then check it with /hooks panel.","Shell commands run by the agent now go through tokmizer. Check savings anytime with: tkr gain","Tokmizer is free. No account is required.",...await Mt(),""].join(`
|
|
346
|
+
`)),(u==="error"||d.error)&&(process.exitCode=1);return}let n=Hh(e);if(n){let o=Ji(n),s=`Could not update ${o}. Check that it is valid and writable, then run tkr ${e} again.`;if(t[0]==="--remove"&&t.length===1){let l=n.kind==="hook"?await n.remove():await Vl(n),u=await ic(n.host);process.stdout.write(`${l==="error"?s:l==="removed"?`Removed the tokmizer ${n.label} integration from ${o}.`:`No tokmizer integration found in ${o}.`}
|
|
347
|
+
`);for(let d of ac(u))process.stdout.write(`${d}
|
|
348
348
|
`);(l==="error"||u==="error")&&(process.exitCode=1);return}if(t.length){process.stderr.write(`Usage: tkr ${e} [--remove]
|
|
349
|
-
`),process.exitCode=1;return}await
|
|
350
|
-
`)),(a==="error"||c.error)&&(process.exitCode=1);return}let r=
|
|
351
|
-
`);for(let d of
|
|
349
|
+
`),process.exitCode=1;return}await Qe(xe);let i=process.env.PATH??"",a=n.kind==="hook"?await n.ensure(Bi(n.host,i,he(new URL("./tkr-agent-hook.js",import.meta.url)))):await Zl(n,he(new URL("../../agent-plugins/",import.meta.url)),Ui(i,he(import.meta.url))),c=await sc(n.host);process.stdout.write([a==="error"?s:`${a==="present"?`${n.label} integration already set`:`Added the tokmizer ${n.label} integration`} in ${o}.`,...c.lines,n.next,"Shell commands run by the agent now go through tokmizer. Check savings anytime with: tkr gain","Tokmizer is free. No account is required.",...await Mt(),""].join(`
|
|
350
|
+
`)),(a==="error"||c.error)&&(process.exitCode=1);return}let r=Ol(e);if(r){let o=r.files().join(", "),s=`Could not update ${o}: it is not valid JSON or has an unsupported format. Fix it, then run tkr ${e} again.`;if(t[0]==="--remove"){let l=await r.remove(),u=await ic(r.id);process.stdout.write(`${l==="error"?s:l==="removed"?`Removed the tokmizer hook for ${r.label}.`:`No tokmizer hook found for ${r.label}.`}
|
|
351
|
+
`);for(let d of ac(u))process.stdout.write(`${d}
|
|
352
352
|
`);(l==="error"||u==="error")&&(process.exitCode=1);return}if(t.length){process.stderr.write(`Usage: tkr ${e} [--remove]
|
|
353
|
-
`),process.exitCode=1;return}await
|
|
354
|
-
`)),(a==="error"||c.error)&&(process.exitCode=1);return}if(e==="shim"){let o=t[0]??"install";if(o==="install"){let s=t.indexOf("--runner"),i=s>=0?t[s+1]:
|
|
355
|
-
`),t.includes("--global-path")){let l=await
|
|
353
|
+
`),process.exitCode=1;return}await Qe(xe);let i=he(new URL(`./${r.bin}.js`,import.meta.url)),a=await r.ensure(zi(r,process.env.PATH??"",i)),c=await sc(r.id);process.stdout.write([a==="error"?s:`${a==="present"?`${r.label} hook already set`:"Added the tokmizer hook"} in ${o}.`,...c.lines,r.restart,"Shell commands run by the agent now go through tokmizer. Check savings anytime with: tkr gain","Tokmizer is free. No account is required.",...await Mt(),""].join(`
|
|
354
|
+
`)),(a==="error"||c.error)&&(process.exitCode=1);return}if(e==="shim"){let o=t[0]??"install";if(o==="install"){let s=t.indexOf("--runner"),i=s>=0?t[s+1]:we(),a=await Jn(i??we());if(process.stdout.write(`Installed ${a.length} shims into ${G()}
|
|
355
|
+
`),t.includes("--global-path")){let l=await ls(!0);if(l.files.length)process.stdout.write(`Added PATH to ${l.files.join(", ")}. Open a new terminal to activate.
|
|
356
356
|
`);else if(l.manual){process.stdout.write(`Add this to your shell profile, then open a new terminal:
|
|
357
357
|
${l.manual}`),process.exitCode=1;return}else process.stdout.write(`PATH already set. Open a new terminal if not active.
|
|
358
|
-
`)}else process.stdout.write(
|
|
358
|
+
`)}else process.stdout.write(Zx());let c=await z()??await Qe(xe);process.stdout.write(c?`Free access is ready. No account is required.
|
|
359
359
|
`:B()?`Free activation is pending. When online, run: tkr status
|
|
360
360
|
`:`Network is off: Tokmizer runs with its built-in rules. Turn it back on with: tkr network on
|
|
361
|
-
`);for(let l of(await
|
|
362
|
-
`);return}if(o==="uninstall"){let s=await
|
|
361
|
+
`);for(let l of(await Mt()).slice(1))process.stdout.write(`${l}
|
|
362
|
+
`);return}if(o==="uninstall"){let s=await iu(),{files:i}=await ls(!1);process.stdout.write(`Removed ${s} shims from ${G()}
|
|
363
363
|
`);for(let a of i)process.stdout.write(`Removed the Tokmizer PATH line from ${a} (backup in ~/.tokmizer/backup/rc).
|
|
364
|
-
`);return}if(o==="global-path"){let s=t[1]??"status";if(s==="status"){process.stdout.write(`Global PATH: ${
|
|
364
|
+
`);return}if(o==="global-path"){let s=t[1]??"status";if(s==="status"){process.stdout.write(`Global PATH: ${cs()?"on \u2014 every terminal goes through Tokmizer (turn off: tkr shim global-path off)":"off \u2014 shims only run inside agents started with tkr wrap"}
|
|
365
365
|
`);return}if(s!=="on"&&s!=="off"){process.stderr.write(`Usage: tkr shim global-path [on|off|status]
|
|
366
|
-
`),process.exitCode=1;return}s==="on"&&!
|
|
366
|
+
`),process.exitCode=1;return}s==="on"&&!Bn()&&await Jn(we());let i=await ls(s==="on");if(s==="on")i.files.length?process.stdout.write(`Added PATH to ${i.files.join(", ")}. Open a new terminal to activate.
|
|
367
367
|
`):i.manual?(process.stdout.write(`Add this to your shell profile, then open a new terminal:
|
|
368
368
|
${i.manual}`),process.exitCode=1):process.stdout.write(`PATH already set. Open a new terminal if not active.
|
|
369
369
|
`);else{for(let a of i.files)process.stdout.write(`Removed the Tokmizer PATH line from ${a} (backup in ~/.tokmizer/backup/rc).
|
|
370
370
|
`);process.stdout.write(`Global PATH off. Open a new terminal for it to take effect.
|
|
371
371
|
`)}return}process.stderr.write(`Unknown shim subcommand: ${o}
|
|
372
|
-
`),process.exitCode=1;return}if(e==="status"){process.stdout.write(`YOLO: ${
|
|
373
|
-
`),process.stdout.write(`Network: ${
|
|
374
|
-
`);let o=await
|
|
372
|
+
`),process.exitCode=1;return}if(e==="status"){process.stdout.write(`YOLO: ${vr()?"on":"off"} (this machine only)
|
|
373
|
+
`),process.stdout.write(`Network: ${Eo()}${B()?"":" (built-in and cached rules only; re-enable: tkr network on)"}
|
|
374
|
+
`);let o=await z()??await Qe(xe);if(!o){process.stdout.write(B()?`Tokmizer starts automatically on the first online run. Could not reach tokmizer.com right now. Retry later, or run: tkr link
|
|
375
375
|
`:`Tokmizer compresses with its built-in rules. Nothing is sent while network is off.
|
|
376
|
-
`);for(let a of(await
|
|
377
|
-
`);return}let s=
|
|
376
|
+
`);for(let a of(await Mt()).slice(1))process.stdout.write(`${a}
|
|
377
|
+
`);return}let s=ia(Wr(o),qr(o));if(process.stdout.write(`Status ${o.status} | ${o.email?`Account ${o.email}`:"Not linked (run tkr link to see your savings on the dashboard)"}
|
|
378
378
|
`),process.stdout.write(`power: ${s?"available":"locked"}
|
|
379
|
-
`),s){let a=await
|
|
380
|
-
`)}}
|
|
379
|
+
`),s){let a=await si("power"),c=await Ro("power")!==null;if(!a||!c){let l=await Ao(),u=l?.error?` (last sync failed: ${l.error})`:"";process.stdout.write(`/power not synced yet${u} \u2014 run: tkr heartbeat
|
|
380
|
+
`)}}Hg(o)&&process.stdout.write(B()?`Offline too long \u2014 reconnect (tkr heartbeat) to refresh your local state.
|
|
381
381
|
`:`Network is off \u2014 compression uses the built-in and last downloaded rules.
|
|
382
|
-
`);let i=await
|
|
383
|
-
`);for(let a of(await
|
|
382
|
+
`);let i=await Gu();i&&process.stdout.write(`${i}
|
|
383
|
+
`);for(let a of(await Mt()).slice(1))process.stdout.write(`${a}
|
|
384
384
|
`);return}if(e==="gain"){let o=`Usage: tkr gain [--day|--week|--month] [--project [path]] [--json] [--csv|--graph|--history|--by-rule|--failures|--quota [pro|5x|20x]]
|
|
385
|
-
`,s=new Date,i=
|
|
386
|
-
`:"";if(d){let[
|
|
387
|
-
`);return}if(u==="--by-rule"||u==="--failures"||u==="--quota"){let
|
|
388
|
-
`:"")+N),
|
|
389
|
-
`),E){let
|
|
390
|
-
`+
|
|
385
|
+
`,s=new Date,i=P=>Math.floor(new Date(s.getFullYear(),s.getMonth(),s.getDate()-P).getTime()/1e3),a={"--day":{since:i(0),subtitle:"today",daily:!1},"--jour":{since:i(0),subtitle:"today",daily:!1},"--week":{since:i(6),subtitle:"last 7 days",daily:!0},"--semaine":{since:i(6),subtitle:"last 7 days",daily:!0},"--month":{since:i(29),subtitle:"last 30 days",daily:!0},"--mois":{since:i(29),subtitle:"last 30 days",daily:!0}},c=new Set(["--csv","--graph","--history","--by-rule","--failures","--quota"]),l,u,d=!1,p="pro",f,h=!1;for(let P=0;P<t.length;P+=1){let ne=t[P];if(a[ne]&&!l)l=a[ne];else if(ne==="--json"&&!d)d=!0;else if(c.has(ne)&&!u){u=ne;let ge=t[P+1];ne==="--quota"&&ge!=null&&!ge.startsWith("--")&&(Object.hasOwn(no,ge)?p=ge:h=!0,P+=1)}else if(ne==="--project"&&f==null){let ge=t[P+1],Ne=ge!=null&&!ge.startsWith("--");Ne&&(P+=1),f=Gd(Ne?ge:process.cwd())}else h=!0}if(h||d&&u!=null&&!["--by-rule","--failures","--quota"].includes(u)){process.stderr.write(o),process.exitCode=1;return}let g=u==="--quota"&&!l?{since:i(29),subtitle:"last 30 days"}:void 0,m=l?.since??g?.since??0,b=l?.subtitle??g?.subtitle,E=l?.daily??!1,D=!!process.stdout.isTTY&&!process.env.NO_COLOR,C=`${b??"all time"}${f?` \xB7 ${Yd(f)}`:""}`,N=f?` Project ${f}: live journal only, rotated history not included.
|
|
386
|
+
`:"";if(d){let[P,ne,ge,Ne]=await Promise.all([an(void 0,m,f),z(),fi(),!m&&!f?pf():null]),ho=jd(P.savedByProvider);process.stdout.write(JSON.stringify({...P,restoreCache:ge,...u==="--quota"?{quota:Vd(P,p)}:{},savedUsd:Number((P.savedTokens/1e6*ho).toFixed(2)),savedUsdBasis:"reference-input-price",savedUsdScope:"reduced-outputs",netSavedUsd:Number(((P.observed?.savedTokens??P.savedTokens)/1e6*ho).toFixed(2)),netSavedUsdScope:"all-observed-outputs",referencePricePerMtok:ho,plan:ne?.plan??"free",...Ne?{importedFromRtk:{commands:Ne.commands,savedTokens:Ne.savedTokens,inputTokens:Ne.inputTokens,outputTokens:Ne.outputTokens,firstAt:Ne.firstAt,lastAt:Ne.lastAt,scope:"rtk-estimate-not-in-totals"}}:{},...m?{since:m}:{},...f?{project:f,projectScope:"live-journal"}:{}})+`
|
|
387
|
+
`);return}if(u==="--by-rule"||u==="--failures"||u==="--quota"){let P=await an(void 0,m,f),ne=u==="--by-rule"?fw(P,{color:D,subtitle:C}):u==="--failures"?pw(P,{subtitle:C}):mw(Vd(P,p),{color:D,subtitle:C});process.stdout.write(ne+N);return}if(u==="--csv"){process.stdout.write(gw(await qd(void 0,m,f)));return}if(u==="--graph"){let P=l?m:i(29),ne=await qd(void 0,P,f),ge=`${b??"last 30 days"}${f?` \xB7 ${Yd(f)}`:""}`;process.stdout.write(kw(ne,{color:D,sinceTs:P,nowTs:Math.floor(s.getTime()/1e3),subtitle:ge})+N);return}if(u==="--history"){process.stdout.write(ww(await yw(void 0,m,f),{color:D,subtitle:C})+N);return}let[te,V,ve,rr]=await Promise.all([an(void 0,m,f),z(),l?void 0:an(void 0,i(0),f),l?void 0:an(void 0,i(6),f)]),Kf=P=>({savedTokens:P.agent?P.agent.rawTokens-P.agent.filteredTokens:P.observed?.savedTokens??P.savedTokens,count:P.agent?.count??P.count}),qx=ve&&rr?[{label:"Today",...Kf(ve)},{label:"Last 7 days",...Kf(rr)}]:void 0,Yx=jd(te.savedByProvider),Xx=V?.linked??(!!V?.jwt&&V?.plan!=="free"),cc=await fi().catch(()=>null),Qx=cc?{entries:cc.entries,bytes:cc.bytes,kept:No()}:void 0,Ie=uw(te,{color:D,pricePerMtok:Yx,subtitle:C,periods:qx,restoreCache:Qx}),Zf=!l&&!f?await pf():null;if(Zf&&(Ie+=Eb(Zf)),f&&(Ie+=(te.count===0?`
|
|
388
|
+
`:"")+N),Xx||(Ie+=` Not linked: run tkr link to see these on your dashboard.
|
|
389
|
+
`),E){let P=hw(await dw(void 0,m,f),{color:D});P&&(Ie+=`
|
|
390
|
+
`+P)}V?.relinkRequired&&(Ie+=` \u26A0 dashboard link lost \u2014 run: tkr link <your-token> (from tokmizer.com/dashboard)
|
|
391
391
|
`),V?.updateRequired?Ie+=` \u26A0 plugin update required \u2014 run: /tkr-update
|
|
392
|
-
|
|
392
|
+
`:Tt(ue,V?.latestPluginVersion)&&(Ie+=` \u26A0 you run v${ue}, v${V?.latestPluginVersion} is out \u2014 older versions undercount savings. Run /tkr-update, then RESTART Claude Code.
|
|
393
393
|
`),V?.clockSkewDetected&&(Ie+=` \u26A0 system clock looks off \u2014 sync it, then run: tkr heartbeat
|
|
394
|
-
`);let
|
|
395
|
-
`);for(let
|
|
394
|
+
`);let Vf=async()=>{let{defaultRulesRuntime:P}=await Promise.resolve().then(()=>(Gx(),Jx));return P()?.ruleCount??null};try{let{connectDaemon:P}=await Promise.resolve().then(()=>(Zr(),Kr)),ne=await P(),ge=await ne.ping();ne.close();let Ne=null;if(ge.ruleCount===0){let{runtimeFromCache:ho}=await Promise.resolve().then(()=>(oc(),Bf));Ne=(await ho())?.ruleCount??null}Ie+=uc(ge.ruleCount,Ne,ge.ruleCount===0?await Vf():null)}catch{let{runtimeFromCache:P}=await Promise.resolve().then(()=>(oc(),Bf)),ne=await P();Ie+=uc(null,ne?ne.ruleCount:null,await Vf())}let Wf=await Gu();Wf&&(Ie+=` ${Wf}
|
|
395
|
+
`);for(let P of(await Mt()).slice(1))Ie+=`${P.split(`
|
|
396
396
|
`).map(ne=>` ${ne}`).join(`
|
|
397
397
|
`)}
|
|
398
398
|
`;process.stdout.write(Ie+`
|
|
399
|
-
`);return}if(e==="session"){process.stdout.write(
|
|
400
|
-
`);return}if(e==="discover"){let o=
|
|
399
|
+
`);return}if(e==="session"){process.stdout.write(Tw($w())+`
|
|
400
|
+
`);return}if(e==="discover"){let o=Bn()&&cs(),s=(a,c,l)=>` ${a.padEnd(23)}${c?"\u2705 optimized automatically":`\u26A0\uFE0F not covered \u2014 run: ${l}`}`,i=[" tokmizer coverage"," "+"\u2500".repeat(40)," Claude Code / Codex \u2705 optimized automatically",s("Cursor",Nt(),"tkr setup-cursor"),s("Gemini CLI",Dn(),"tkr setup-gemini"),...ze.map(a=>s(a.label,wt(a),`tkr ${a.command}`)),...ce.map(a=>s(a.label,a.installed(),a.setup)),o?" Your terminal \u2705 routed through Tokmizer (tkr shim global-path on)":" Your terminal unchanged (optional: tkr shim global-path on)",` ${"Aider, Cline, Windsurf".padEnd(23)}start with: tkr wrap <agent>`];i.push(""),process.stdout.write(i.join(`
|
|
401
401
|
`)+`
|
|
402
|
-
`);return}if(e==="restore"){let o=await
|
|
402
|
+
`);return}if(e==="restore"){let o=await Xp(t);if(o.stdout&&process.stdout.write(o.stdout),o.stderr&&process.stderr.write(o.stderr),o.code===0&&o.stdout&&o.restoredTokens&&aw(0,Buffer.byteLength(o.stdout,"utf8"),void 0,!1,Ki().host,"restore","tkr restore",process.cwd()),o.code===0&&o.restoredTokens){let s=await Q();await rd({cmd:"restore",tokensSaved:0,tokensRestored:o.restoredTokens,optimized:!1,telemetryOptIn:s.telemetryOptIn,host:Ki().host})}process.exitCode=o.code;return}if(e==="filters"){let{trustUserFilters:o,untrustUserFilters:s,runUserFilterTests:i,userFiltersDir:a}=await Promise.resolve().then(()=>(Yn(),Pd)),c=t[0],l=t.slice(1),u=a();if(c==="trust"){let{trusted:d,missing:p}=await o(l);d.length>0?process.stdout.write(`Trusted ${d.length} filter file${d.length===1?"":"s"} in ${u}: ${d.join(", ")}
|
|
403
403
|
Editing a file revokes its trust until you run this again.
|
|
404
404
|
`):p.length===0&&process.stdout.write(`No *.toml file in ${u}.
|
|
405
405
|
`),p.length>0&&(process.stderr.write(`tkr filters: not found in ${u}: ${p.join(", ")}
|
|
406
406
|
`),process.exitCode=1);return}if(c==="untrust"){let d=await s(l);process.stdout.write(d.length>0?`No longer used: ${d.join(", ")}
|
|
407
407
|
`:`Nothing to untrust.
|
|
408
|
-
`);return}if(c==="test"&&l.length<=1){let{results:d,issues:p,untested:f}=await i(l[0]),
|
|
408
|
+
`);return}if(c==="test"&&l.length<=1){let{results:d,issues:p,untested:f}=await i(l[0]),h=[],g=b=>b.trimEnd().split(`
|
|
409
409
|
`).map(E=>` ${E}`).join(`
|
|
410
|
-
`);for(let
|
|
410
|
+
`);for(let b of p)h.push(` skipped ${b.file}: ${b.message}`);for(let b of d){let E=`${b.rule} #${b.index}${b.name?` (${b.name})`:""}`;h.push(` ${b.pass?"PASS":"FAIL"} ${E}`),b.pass||h.push(" expected:",g(b.expected)," got:",g(b.actual))}let m=d.filter(b=>!b.pass).length;l[0]&&d.length===0&&!f.includes(l[0])?(h.push(` No rule named ${l[0]} in ${u}.`),process.exitCode=1):d.length===0?h.push(` No inline test found. Add [[filters.<name>.tests]] with input and expected to a file in ${u}.`):h.push(` ${d.length} test${d.length===1?"":"s"}: ${d.length-m} passed, ${m} failed`),f.length>0&&h.push(` Without tests: ${f.join(", ")}`),process.stdout.write(h.join(`
|
|
411
411
|
`)+`
|
|
412
|
-
`),(
|
|
413
|
-
`),process.exitCode=1;return}if(e==="heartbeat"){if(!B()){process.stderr.write(`${
|
|
414
|
-
`),process.exitCode=1;return}await
|
|
412
|
+
`),(m>0||p.length>0)&&(process.exitCode=1);return}process.stderr.write(`Usage: tkr filters trust [file\u2026] | untrust [file\u2026] | test [rule]
|
|
413
|
+
`),process.exitCode=1;return}if(e==="heartbeat"){if(!B()){process.stderr.write(`${Sc}
|
|
414
|
+
`),process.exitCode=1;return}await Qe(xe);let o=Date.now(),s=await Nd(xe);if(!s||(s.lastHeartbeatOkAt??0)<o){process.stderr.write(`Heartbeat failed
|
|
415
415
|
`),process.exitCode=1;return}process.stdout.write(`OK status=${s.status}
|
|
416
|
-
`),await
|
|
417
|
-
`);return}if(e==="settings"){(t[0]??"show")==="show"&&process.stdout.write(`YOLO: ${
|
|
418
|
-
`),await
|
|
416
|
+
`),await mo();let i=await Ao();i?.error&&process.stdout.write(`Note: feature sync failed: ${i.error}
|
|
417
|
+
`);return}if(e==="settings"){(t[0]??"show")==="show"&&process.stdout.write(`YOLO: ${vr()?"on":"off"} (this machine only)
|
|
418
|
+
`),await Qe(xe),await vH(t);return}if(e==="telemetry"){["off","status","forget"].includes(t[0]??"status")||await Qe(xe),await _H(t);return}if(e==="reducer"){let o=["off","light","balanced","max"],s={off:"default: responses untouched",light:"trims padding, keeps natural prose",balanced:"dense and direct, answer first",max:"telegraphic, every token earns its place"},i=t[0]?.toLowerCase();if(!i){let a=await Q(),c=a.reducer==="off"?"":a.enabled?await Ro(`reducer-${a.reducer}`)?`Ready for the next agent session.
|
|
419
419
|
`:`Reducer ruleset unavailable; reconnect and run: tkr heartbeat
|
|
420
420
|
`:`Tokmizer is disabled; the reducer is inactive.
|
|
421
421
|
`;process.stdout.write(`Reducer: ${a.reducer}
|
|
@@ -424,15 +424,15 @@ Editing a file revokes its trust until you run this again.
|
|
|
424
424
|
Reducer guides the response style of every agent set up with Tokmizer (see tkr doctor); command output compression is separate.
|
|
425
425
|
`+c+`Change it: tkr reducer <off|light|balanced|max>
|
|
426
426
|
`);return}if(!o.includes(i)){process.stderr.write(`Unknown level: ${t[0]}. Use off, light, balanced or max.
|
|
427
|
-
`),process.exitCode=1;return}await
|
|
428
|
-
`);else if(!a.settings.enabled)await
|
|
429
|
-
`);else{if(await
|
|
427
|
+
`),process.exitCode=1;return}await Qe(xe);try{let a=await rt({reducer:i});if(a.settings.reducer==="off")await mo(),process.stdout.write(`Reducer off. Agent responses back to normal next session.
|
|
428
|
+
`);else if(!a.settings.enabled)await mo(),process.stdout.write(`Reducer saved as ${a.settings.reducer}. Tokmizer is disabled; enable it with: tkr settings set enabled true
|
|
429
|
+
`);else{if(await Nd(xe),!await Ro(`reducer-${a.settings.reducer}`)){process.stderr.write(B()?`Reducer saved as ${a.settings.reducer}, but its ruleset is unavailable. Reconnect and run: tkr heartbeat before starting a new agent session.
|
|
430
430
|
`:`Reducer saved as ${a.settings.reducer}, but its ruleset was never downloaded and network is off. Run tkr network on, then tkr heartbeat.
|
|
431
|
-
`),process.exitCode=1;return}await
|
|
431
|
+
`),process.exitCode=1;return}await mo(),process.stdout.write(`Reducer set to ${a.settings.reducer}. Its response-style instructions load in the next session of each agent set up with Tokmizer.
|
|
432
432
|
`)}}catch(a){let c=a instanceof Error?a.message:String(a);c.includes("plan_required")||c.toLowerCase().includes("smart and pro")?process.stdout.write(`Reducer is not available on this token right now.
|
|
433
433
|
`):process.stdout.write(`${c}
|
|
434
434
|
`),process.exitCode=1}return}if(e==="compression"){if(t.length>1){process.stderr.write(`Usage: tkr compression [light|balanced|max]
|
|
435
|
-
`),process.exitCode=1;return}let o={light:"normal",balanced:"compact",max:"minimal",normal:"normal",compact:"compact",minimal:"minimal"},s={normal:"light",compact:"balanced",minimal:"max"},i=t[0];if(!i){let c=await Q(),l=
|
|
435
|
+
`),process.exitCode=1;return}let o={light:"normal",balanced:"compact",max:"minimal",normal:"normal",compact:"compact",minimal:"minimal"},s={normal:"light",compact:"balanced",minimal:"max"},i=t[0];if(!i){let c=await Q(),l=vr();process.stdout.write((l?`Compression: YOLO (this machine only)
|
|
436
436
|
Standard level: ${s[c.outputVerbosity]}
|
|
437
437
|
Content and diagnostics can be lost; discarded output cannot be restored.
|
|
438
438
|
`:`Compression: ${s[c.outputVerbosity]}
|
|
@@ -443,10 +443,10 @@ Content and diagnostics can be lost; discarded output cannot be restored.
|
|
|
443
443
|
Change standard level and leave YOLO: tkr compression <light|balanced|max>
|
|
444
444
|
Local mode: tkr yolo <on|off|status>
|
|
445
445
|
`);return}let a=Object.hasOwn(o,i.toLowerCase())?o[i.toLowerCase()]:void 0;if(!a){process.stderr.write(`Unknown level: ${i}. Use light, balanced or max.
|
|
446
|
-
`),process.exitCode=1;return}await
|
|
447
|
-
`);try{await
|
|
446
|
+
`),process.exitCode=1;return}await An(!1),process.stdout.write(`YOLO: off (this machine only)
|
|
447
|
+
`);try{await Qe(xe);let c=await rt({outputVerbosity:a});process.stdout.write(`Compression set to ${s[c.settings.outputVerbosity]}. Applies to your next commands.
|
|
448
448
|
`)}catch(c){process.stderr.write(`Could not update standard compression: ${c instanceof Error?c.message:String(c)}
|
|
449
|
-
`),process.exitCode=1}return}
|
|
449
|
+
`),process.exitCode=1}return}xH(),process.exitCode=["help","--help","-h"].includes(e)?0:1}RH().catch(e=>{process.stderr.write(`${e.message??e}
|
|
450
450
|
`),process.exitCode=1});
|
|
451
451
|
/*! Bundled license information:
|
|
452
452
|
|