{"item":"e02-policy-table/rep-a: uncertainty-conditioned displacement TABLE policy on frozen mixture-B filter","status":"complete on replica.py only; NEGATIVE result. No engine run, no Solidity port, no RS2 pairing; no leaderboard/engine claim. Replica scores alone cannot select an entry.","headline":"Held-out 32000..32255 (10000 steps): new - unchanged mixture-B/table = -0.028 (SE 0.061, 95% CI [-0.147, 0.091]); true-p oracle - new = 6.315 (SE 0.078). A 6-parameter bounded sd/parb interaction on top of the frozen oracle_table knots did not close any of the ~6.3 deficit. CMA-ES best training candidate was itself below base (-0.039 on train).","frozen_estimator":{"url":"https://api.imd.fun/artifacts/827590bb235808bd3789c89ad42e5038d2733d133c744455327a3e4275089b26","response_sha256":"827590bb235808bd3789c89ad42e5038d2733d133c744455327a3e4275089b26 (matches URL id)","embedded_hashes_verified":{"mf.py":true,"run.py":true,"agg.py":true,"test_mf.py":true,"sweep.py":true},"mf_py_sha256":"8adbd509efdac3e77ccde38d07a7272e9706b42ea4ecc926f77963e2a332445e","constants_frozen":{"KMAX":4,"SIG0":0.000945,"N0":200.0,"TAU_ROUTER":0.0015,"ROUTER":1,"PRETAIL":0.27,"RET_MU":"ln(20)-0.72","RET_SD":1.3,"PIN_VAR":1e-12,"MINVAR":1e-12,"ARB_CONF":0.9},"fee_feedback":"policy fees are passed to MixFilter.set_fees after every callback (filter's stored fee history = policy output)"},"inputs_sha256":{"replica.py":"d079712fa1f4850ad8337e656e7ee8dbdde806cd4762d597fae50f547ef9c7c4","oracle_table.json":"3e9d1fc8874c6d796d4c26948d486b587f2a6b5610b20fba99923a60954cf4b5 (per frozen artifact; same file fetched)"},"engine_setup":"amm-challenge cloned at 6b6921f8d463314aa7c96234e1be25a25245f704, research/setup.sh ran OK (StarterStrategy validated). Engine not used for scoring.","dependencies":"Python 3 stdlib only (math, json, random, multiprocessing); no numpy. Pins: none needed.","policy":{"features":{"u":"own displacement ln(spot/p_hat)/0.003 = -E[z]/0.003, units of 30 bps; z=ln(p/spot)","S":"posterior sd of z / 0.003, capped at 3 (30 bps units)","flag":"1[parb>0.5] (inferred arb, as in mixture-B)","q":"parb - flag in [-0.5,0.5] (soft arb-probability residual)","redundancy":"u is a function of posterior mean and own spot (mean and displacement are one input, not two); flag and q together encode parb; S is the only new uncertainty input"},"form":"ask = interp(ask_knots,u)+arb_flag*flag+adj_a; bid = interp(bid_knots,u)+arb_flag*flag+adj_b; adj_a=clip(t0*S+t1*S*max(u,0)/8+t2*S*max(-u,0)/8+t3*q+t4+t5*S*flag,-2,2); adj_b mirror (u->-u); each t clipped to [-1.5,1.5]; fees per oracle_table formula with p_hat, clamped [0,0.1]","warm_start":"oracle_table.json 17 ask + 17 bid knots + arb_flag 0.1463 kept frozen; theta init 0 (= exact base policy)","theta_selected":[-0.169834,-0.0042,-0.037731,-0.191049,-0.035613,0.054919],"theta_train_fit_vs_base":-0.0389,"normalization":"none beyond the 0.003 unit scaling and caps above"},"optimizer":{"method":"CMA-ES (mu/mu_w,lambda) full covariance, own stdlib implementation (cma.py), sigma0 0.3, lambda 6, mu 3, rng seed 12345+gen, checkpoint json per generation","objective":"mean paired edge(new)-edge(base) over train seeds 30000..30255, common random numbers (same seeds every candidate)","deviation":"training runs used 2000 steps (not 10000) because this machine gave ~1 effective core (~0.55 s per 10000-step run); evaluation used 10000","budget":"18 candidates x 256 seeds x 2000 steps, 3 generations, ~520 s; stopped by time budget, not convergence","log":[{"gen":0,"best":-0.0389,"median":-0.6896,"sig":0.2572,"m":[-0.1315,-0.0022,0.0265,-0.1681,-0.0741,0.0707]},{"gen":1,"best":-0.4711,"median":-1.2661,"sig":0.2236,"m":[0.0093,0.0747,-0.0141,-0.2745,-0.0019,-0.0037]},{"gen":2,"best":-0.0665,"median":-0.5968,"sig":0.1985,"m":[-0.1262,-0.0264,0.1761,-0.1363,-0.0048,0.1419]}]},"seeds":{"train":"30000..30255","heldout":"32000..32255 (10000 steps, frozen theta)","ablation":"32000..32063","never_touched":"5148000..5151999 not used"},"arms":{"new":"theta policy on frozen filter","base":"unchanged mixture-B (oracle_table on p_hat, flag)","oracle":"oracle_table on TRUE p and TRUE arb flag (filter run alongside only for error logging)"},"heldout_aggregate":{"new":{"edge":517.772,"retail":551.033,"arb":-33.261,"retail_volY":78505.0,"arb_volY":27291.9,"sq_err_sum_ln":5.297293,"err_count":2737060,"pooled_rms_bps":13.912,"runtime_sec_sum":621.4},"base":{"edge":517.8,"retail":546.732,"arb":-28.932,"retail_volY":74846.7,"arb_volY":24522.1,"sq_err_sum_ln":6.073169,"err_count":2614858,"pooled_rms_bps":15.24,"runtime_sec_sum":535.4},"oracle":{"edge":524.087,"retail":549.563,"arb":-25.476,"retail_volY":75840.0,"arb_volY":23759.5,"sq_err_sum_ln":5.304836,"err_count":2622519,"pooled_rms_bps":14.223,"runtime_sec_sum":476.7}},"heldout_paired":{"new_minus_base":{"n":256,"mean":-0.0279,"se":0.0608,"ci95":[-0.147,0.0912]},"oracle_minus_new":{"n":256,"mean":6.3153,"se":0.0775,"ci95":[6.1633,6.4672]},"oracle_minus_base":{"n":256,"mean":6.2874,"se":0.0805,"ci95":[6.1296,6.4452]}},"rms_note":"pooled RMS is the filter's ln(p_hat/p) error at every own callback, in bps; differs by arm because the filter sees each arm's own closed-loop fees. new 13.91, base 15.24, oracle-loop 14.22 bps: the new policy lowered price RMS 1.3 bps yet edge did not move.","ablation_first64_no_refit":{"desc":"sd0: S forced 0; q0: parb replaced by flag; both","results":{"sd0":{"full_minus_ablated":{"n":64,"mean":-0.1867,"se":0.1129,"ci95":[-0.4079,0.0345]},"ablated_minus_base":{"n":64,"mean":0.0132,"se":0.0923,"ci95":[-0.1677,0.1941]}},"q0":{"full_minus_ablated":{"n":64,"mean":-0.4501,"se":0.0729,"ci95":[-0.5929,-0.3073]},"ablated_minus_base":{"n":64,"mean":0.2766,"se":0.122,"ci95":[0.0375,0.5157]}},"both":{"full_minus_ablated":{"n":64,"mean":-0.2507,"se":0.1024,"ci95":[-0.4514,-0.0499]},"ablated_minus_base":{"n":64,"mean":0.0772,"se":0.079,"ci95":[-0.0777,0.232]}}},"reading":"Removing the soft parb input (q0) IMPROVED edge by 0.45 (SE 0.07); the fitted t3 on q is harmful out of sample; the sd terms are within noise."},"hidden_input_tests":"By construction PArm passes to MixFilter.update only (is_buy, amount_x, amount_y, t, x, y); replica's init(sigma,lam,size) args are ignored; p is used only for the error sum and the oracle arm; s2 (rival spot) and arb label never reach new/base fees. Not separately unit-tested beyond code inspection.","runtime":{"heldout_3arms_sec":411.4,"ablation_sec":117.0,"effective_cores":"~1 (sandbox)","per_run_sec_10000_steps":"~0.55"},"state_compute_cost":"Policy adds 6 constants and O(1) arithmetic per callback over mixture-B (<=4 Gaussian components, up to 400 diffuse+truncate per silent gap). No Solidity gas measured.","per_seed":{"columns":["seed","new_edge","new_retail","new_arb","base_edge","base_retail","base_arb","oracle_edge","oracle_retail","oracle_arb","new_minus_base","oracle_minus_new"],"rows":[[32000,518.37,552.7,-34.33,517.53,546.58,-29.05,526.66,551.83,-25.17,0.837,8.296],[32001,549.98,582.74,-32.75,551.5,579.77,-28.27,558.67,583.92,-25.24,-1.513,8.691],[32002,408.25,438.15,-29.9,408.13,434.01,-25.88,413.26,436.72,-23.46,0.124,5.016],[32003,372.95,398.1,-25.15,374.43,396.09,-21.66,378.92,397.89,-18.97,-1.47,5.964],[32004,390.83,417.18,-26.35,393.25,415.5,-22.25,398.19,417.65,-19.47,-2.422,7.36],[32005,384.01,409.61,-25.6,382.78,404.52,-21.74,389.2,408.35,-19.15,1.229,5.19],[32006,433.42,462.88,-29.47,432.64,457.88,-25.24,440.66,462.58,-21.91,0.78,7.248],[32007,450.3,479.33,-29.03,450.33,475.47,-25.14,455.98,478.06,-22.08,-0.03,5.676],[32008,601.88,635.57,-33.69,602.82,631.82,-29.0,609.89,635.54,-25.66,-0.942,8.007],[32009,612.57,650.58,-38.01,611.84,644.79,-32.94,618.5,646.57,-28.07,0.731,5.928],[32010,441.33,469.4,-28.07,439.03,462.61,-23.58,446.06,466.45,-20.4,2.299,4.725],[32011,646.23,723.47,-77.24,646.9,719.69,-72.8,658.42,725.45,-67.03,-0.662,12.182],[32012,673.7,713.12,-39.43,675.44,710.09,-34.65,680.98,711.33,-30.35,-1.746,7.283],[32013,447.76,474.77,-27.0,448.06,471.55,-23.5,453.0,473.61,-20.61,-0.292,5.235],[32014,434.61,464.88,-30.27,432.56,458.35,-25.79,440.17,462.46,-22.28,2.042,5.568],[32015,441.12,469.83,-28.7,441.88,466.29,-24.41,447.05,467.95,-20.9,-0.755,5.928],[32016,480.6,509.59,-28.98,481.57,506.41,-24.84,486.03,507.79,-21.76,-0.963,5.426],[32017,424.46,453.86,-29.4,425.23,451.14,-25.9,429.19,451.34,-22.15,-0.779,4.737],[32018,593.06,627.22,-34.16,593.54,622.95,-29.41,599.78,625.5,-25.72,-0.481,6.72],[32019,484.45,515.54,-31.09,485.36,511.9,-26.54,490.58,513.76,-23.18,-0.902,6.128],[32020,622.85,657.81,-34.97,623.19,653.94,-30.76,631.86,659.32,-27.46,-0.337,9.009],[32021,554.02,585.98,-31.96,554.38,581.76,-27.38,558.85,583.07,-24.22,-0.359,4.834],[32022,664.07,699.22,-35.15,664.85,695.2,-30.35,670.86,697.8,-26.94,-0.782,6.789],[32023,573.49,611.19,-37.71,573.41,605.6,-32.19,580.58,608.13,-27.55,0.076,7.098],[32024,555.56,588.55,-32.99,556.0,584.62,-28.63,562.79,587.61,-24.82,-0.439,7.234],[32025,550.77,581.01,-30.24,550.49,576.51,-26.02,558.45,581.58,-23.13,0.281,7.68],[32026,435.86,462.7,-26.84,436.48,459.68,-23.2,440.2,459.97,-19.77,-0.62,4.344],[32027,521.46,554.71,-33.24,521.22,549.98,-28.76,528.03,553.43,-25.4,0.243,6.571],[32028,631.63,668.54,-36.92,633.39,665.71,-32.31,639.88,667.98,-28.1,-1.764,8.256],[32029,412.74,437.99,-25.25,411.57,433.29,-21.72,417.24,436.28,-19.04,1.168,4.5],[32030,383.52,411.63,-28.1,382.83,407.12,-24.29,388.19,409.54,-21.35,0.694,4.663],[32031,457.75,487.85,-30.1,455.95,481.59,-25.64,464.76,487.06,-22.3,1.803,7.009],[32032,624.79,661.68,-36.89,624.77,656.25,-31.47,631.77,659.24,-27.47,0.016,6.979],[32033,436.34,464.47,-28.12,435.51,459.36,-23.85,440.14,461.18,-21.03,0.835,3.799],[32034,594.19,630.96,-36.76,594.0,626.05,-32.05,602.81,630.59,-27.78,0.191,8.614],[32035,553.33,585.37,-32.04,551.92,580.16,-28.24,558.16,582.02,-23.87,1.41,4.831],[32036,414.33,441.31,-26.98,414.32,437.81,-23.49,418.97,439.27,-20.3,0.009,4.643],[32037,405.32,433.07,-27.75,405.71,429.29,-23.58,410.94,431.51,-20.57,-0.387,5.618],[32038,528.18,560.67,-32.49,529.67,558.1,-28.44,534.7,559.04,-24.35,-1.487,6.517],[32039,411.0,435.9,-24.9,411.32,432.86,-21.54,415.16,433.84,-18.69,-0.321,4.156],[32040,445.47,473.76,-28.3,444.47,468.71,-24.24,449.76,471.15,-21.4,0.997,4.291],[32041,804.31,904.03,-99.71,806.63,901.05,-94.42,811.97,902.17,-90.21,-2.314,7.656],[32042,534.18,566.02,-31.84,534.62,562.57,-27.95,541.02,565.39,-24.37,-0.445,6.844],[32043,369.91,395.23,-25.32,368.89,390.38,-21.49,375.92,394.23,-18.32,1.018,6.008],[32044,519.86,550.76,-30.9,521.29,548.12,-26.83,525.97,549.28,-23.31,-1.426,6.106],[32045,651.84,686.4,-34.56,653.92,683.89,-29.97,658.07,684.93,-26.86,-2.085,6.23],[32046,636.59,672.03,-35.43,636.26,666.33,-30.07,643.52,669.89,-26.37,0.33,6.924],[32047,431.69,458.83,-27.14,432.88,456.24,-23.36,436.84,457.06,-20.23,-1.187,5.146],[32048,500.12,532.56,-32.44,500.09,528.26,-28.16,506.14,530.45,-24.31,0.022,6.027],[32049,599.13,634.71,-35.58,598.79,629.65,-30.86,605.72,632.73,-27.01,0.337,6.583],[32050,478.83,510.67,-31.84,477.85,505.24,-27.39,487.04,510.15,-23.1,0.985,8.212],[32051,632.24,668.79,-36.56,634.3,665.63,-31.33,640.52,668.01,-27.49,-2.062,8.285],[32052,633.32,667.5,-34.18,634.16,663.59,-29.43,638.28,664.04,-25.75,-0.842,4.962],[32053,471.08,501.26,-30.18,470.93,496.51,-25.58,477.06,499.0,-21.95,0.157,5.972],[32054,381.82,407.08,-25.26,381.58,402.88,-21.29,386.3,404.24,-17.94,0.237,4.479],[32055,543.38,576.51,-33.13,543.72,572.23,-28.5,549.85,575.16,-25.31,-0.348,6.477],[32056,568.8,602.18,-33.38,568.05,596.85,-28.8,574.84,600.18,-25.34,0.752,6.039],[32057,482.59,515.71,-33.13,482.46,510.77,-28.31,489.64,514.79,-25.15,0.129,7.05],[32058,469.8,498.55,-28.75,470.1,495.27,-25.17,476.89,498.44,-21.55,-0.299,7.087],[32059,577.02,610.54,-33.52,577.16,606.31,-29.15,581.98,607.54,-25.56,-0.144,4.964],[32060,412.78,439.5,-26.72,411.75,434.79,-23.05,418.25,437.94,-19.69,1.037,5.465],[32061,469.1,499.58,-30.47,469.35,495.68,-26.33,475.64,498.84,-23.2,-0.249,6.535],[32062,521.8,551.66,-29.87,522.85,548.96,-26.11,528.56,551.2,-22.64,-1.053,6.759],[32063,359.67,382.78,-23.12,359.63,379.77,-20.14,364.26,381.53,-17.27,0.035,4.592],[32064,600.88,635.9,-35.02,601.44,631.66,-30.21,607.0,632.77,-25.77,-0.561,6.12],[32065,514.76,546.65,-31.88,515.31,543.15,-27.84,523.41,548.04,-24.63,-0.546,8.642],[32066,686.42,724.67,-38.25,686.84,720.17,-33.33,694.01,723.61,-29.6,-0.415,7.592],[32067,626.91,662.09,-35.18,627.45,657.67,-30.22,634.18,660.52,-26.33,-0.544,7.277],[32068,519.94,551.64,-31.7,520.79,548.49,-27.69,525.8,549.66,-23.86,-0.852,5.865],[32069,459.31,488.69,-29.38,459.42,484.88,-25.46,464.13,486.43,-22.3,-0.104,4.815],[32070,624.51,661.97,-37.46,624.66,656.61,-31.95,631.69,659.55,-27.86,-0.142,7.173],[32071,361.38,386.74,-25.36,361.02,382.61,-21.59,367.25,386.24,-18.99,0.352,5.872],[32072,648.64,684.84,-36.2,650.27,682.31,-32.03,656.63,684.4,-27.77,-1.632,7.986],[32073,603.66,641.17,-37.51,604.29,636.38,-32.09,612.49,640.43,-27.95,-0.634,8.831],[32074,608.26,645.4,-37.14,608.55,640.26,-31.71,614.52,642.26,-27.74,-0.284,6.255],[32075,396.33,421.83,-25.5,395.32,416.78,-21.46,400.27,418.7,-18.43,1.01,3.94],[32076,458.53,489.07,-30.54,459.1,485.31,-26.21,465.73,488.72,-22.99,-0.569,7.198],[32077,348.8,373.25,-24.45,347.88,368.81,-20.93,354.4,372.72,-18.32,0.92,5.6],[32078,587.79,623.34,-35.55,588.27,618.89,-30.62,596.83,623.09,-26.26,-0.474,9.039],[32079,543.44,577.48,-34.04,543.75,573.22,-29.47,550.69,576.21,-25.52,-0.308,7.251],[32080,586.99,623.23,-36.24,587.31,618.85,-31.54,594.17,621.76,-27.6,-0.322,7.178],[32081,472.14,502.22,-30.08,471.45,496.96,-25.51,477.86,499.59,-21.72,0.686,5.728],[32082,550.64,589.02,-38.38,550.36,584.15,-33.79,554.92,586.06,-31.14,0.278,4.283],[32083,478.33,509.76,-31.43,477.06,504.22,-27.16,484.69,507.72,-23.03,1.27,6.358],[32084,451.95,481.93,-29.99,451.87,477.72,-25.85,458.34,480.65,-22.3,0.077,6.397],[32085,619.2,659.17,-39.97,620.02,655.09,-35.07,627.22,657.75,-30.53,-0.814,8.019],[32086,557.06,589.22,-32.16,556.79,584.27,-27.49,563.52,588.13,-24.61,0.271,6.459],[32087,476.93,505.14,-28.21,477.89,501.99,-24.09,482.66,504.06,-21.4,-0.964,5.73],[32088,419.71,449.59,-29.88,418.92,444.76,-25.84,425.77,448.09,-22.32,0.787,6.059],[32089,543.24,578.27,-35.04,541.58,571.78,-30.2,549.98,576.58,-26.6,1.655,6.74],[32090,478.17,505.66,-27.49,476.63,500.28,-23.65,483.94,504.78,-20.83,1.535,5.776],[32091,394.68,418.88,-24.2,394.37,415.43,-21.06,400.96,419.33,-18.37,0.318,6.277],[32092,656.82,692.63,-35.81,657.56,688.43,-30.86,665.3,692.92,-27.62,-0.74,8.479],[32093,401.37,429.24,-27.87,401.35,425.08,-23.73,406.65,427.21,-20.56,0.018,5.28],[32094,458.6,486.48,-27.88,458.39,482.62,-24.23,464.99,486.46,-21.47,0.211,6.394],[32095,532.04,567.07,-35.03,531.7,562.21,-30.52,537.54,563.97,-26.44,0.345,5.496],[32096,542.58,573.75,-31.17,541.13,567.84,-26.7,549.26,572.95,-23.69,1.45,6.677],[32097,616.17,700.07,-83.9,615.19,695.93,-80.75,623.33,700.28,-76.95,0.982,7.157],[32098,499.68,528.74,-29.05,500.47,525.37,-24.9,506.61,528.55,-21.94,-0.792,6.933],[32099,629.68,666.08,-36.4,630.07,661.46,-31.39,637.55,664.67,-27.12,-0.394,7.871],[32100,419.62,449.03,-29.41,420.01,446.4,-26.39,425.71,449.02,-23.31,-0.383,6.086],[32101,673.79,712.52,-38.73,675.36,709.71,-34.35,680.77,710.31,-29.54,-1.566,6.977],[32102,484.54,515.42,-30.88,484.08,510.69,-26.61,491.09,514.93,-23.85,0.463,6.545],[32103,584.49,617.26,-32.78,583.37,611.62,-28.25,591.56,616.5,-24.93,1.116,7.077],[32104,497.29,530.78,-33.49,497.48,527.53,-30.05,500.13,527.36,-27.23,-0.195,2.847],[32105,486.04,515.5,-29.46,486.31,511.71,-25.4,492.37,514.33,-21.95,-0.276,6.339],[32106,567.06,607.94,-40.88,568.18,605.09,-36.91,572.65,607.2,-34.56,-1.128,5.59],[32107,359.2,382.94,-23.74,356.61,377.15,-20.54,363.26,380.65,-17.4,2.595,4.054],[32108,400.49,426.04,-25.55,399.46,421.0,-21.54,406.18,425.21,-19.03,1.027,5.692],[32109,595.69,632.2,-36.51,594.82,626.6,-31.78,604.16,632.11,-27.95,0.871,8.475],[32110,532.36,568.84,-36.48,533.06,564.47,-31.42,540.28,567.35,-27.07,-0.698,7.92],[32111,439.39,465.95,-26.56,439.25,461.86,-22.61,444.73,464.67,-19.94,0.136,5.338],[32112,354.24,379.18,-24.94,353.73,374.92,-21.19,360.78,378.82,-18.04,0.513,6.545],[32113,358.68,384.71,-26.04,357.99,380.23,-22.24,364.83,384.1,-19.27,0.69,6.15],[32114,556.47,590.48,-34.01,554.87,583.71,-28.84,562.02,587.34,-25.32,1.599,5.558],[32115,383.23,409.02,-25.79,382.9,404.88,-21.98,387.55,406.24,-18.68,0.33,4.327],[32116,479.69,509.6,-29.91,479.0,504.74,-25.74,485.26,508.01,-22.75,0.688,5.572],[32117,490.67,553.22,-62.56,491.74,549.99,-58.25,496.66,552.16,-55.49,-1.07,5.996],[32118,414.31,440.39,-26.08,411.74,434.11,-22.37,418.72,437.97,-19.25,2.572,4.412],[32119,537.12,569.46,-32.34,537.66,565.86,-28.2,543.69,568.22,-24.53,-0.542,6.567],[32120,420.97,447.99,-27.02,420.94,444.07,-23.13,427.28,447.58,-20.29,0.028,6.313],[32121,423.67,450.04,-26.37,421.05,443.53,-22.47,429.01,448.95,-19.94,2.615,5.345],[32122,503.26,534.67,-31.41,502.62,529.41,-26.79,510.12,533.79,-23.67,0.633,6.862],[32123,595.66,632.62,-36.97,595.6,627.11,-31.51,602.54,630.4,-27.86,0.056,6.885],[32124,649.2,687.17,-37.96,648.57,681.66,-33.09,655.36,685.79,-30.43,0.636,6.152],[32125,442.73,472.2,-29.47,441.26,466.48,-25.22,448.12,470.18,-22.07,1.47,5.382],[32126,634.69,669.36,-34.67,634.7,665.02,-30.32,641.41,667.36,-25.95,-0.013,6.726],[32127,589.61,623.8,-34.19,590.28,619.8,-29.52,596.72,622.88,-26.15,-0.668,7.115],[32128,625.22,761.75,-136.52,625.02,758.33,-133.31,630.8,761.11,-130.31,0.197,5.578],[32129,543.78,577.54,-33.76,544.41,573.44,-29.02,552.16,577.22,-25.06,-0.626,8.38],[32130,518.46,551.17,-32.71,517.38,545.37,-27.99,523.59,548.69,-25.09,1.078,5.138],[32131,440.9,469.62,-28.72,441.31,465.89,-24.58,445.33,466.74,-21.42,-0.408,4.421],[32132,433.23,460.66,-27.43,432.75,456.3,-23.55,439.25,459.83,-20.58,0.478,6.018],[32133,596.55,632.59,-36.04,596.68,628.11,-31.44,602.44,629.57,-27.13,-0.126,5.889],[32134,503.84,536.26,-32.43,503.82,531.04,-27.22,509.97,534.09,-24.11,0.018,6.137],[32135,534.29,564.57,-30.28,536.06,561.94,-25.88,540.34,563.2,-22.86,-1.772,6.052],[32136,526.73,560.2,-33.48,526.63,555.22,-28.58,533.11,558.06,-24.95,0.095,6.385],[32137,556.46,591.63,-35.17,557.79,588.44,-30.65,563.5,590.04,-26.54,-1.332,7.045],[32138,543.82,576.06,-32.24,544.68,572.65,-27.97,551.26,575.87,-24.61,-0.863,7.443],[32139,392.62,417.37,-24.75,392.64,414.16,-21.52,397.97,416.8,-18.83,-0.027,5.357],[32140,461.54,488.79,-27.25,461.18,484.42,-23.24,466.52,486.18,-19.66,0.36,4.973],[32141,389.64,415.9,-26.26,390.09,412.81,-22.72,395.57,415.21,-19.65,-0.455,5.925],[32142,614.19,653.03,-38.84,613.82,648.29,-34.47,620.52,651.73,-31.21,0.367,6.33],[32143,588.54,624.88,-36.34,589.74,621.37,-31.63,595.03,622.33,-27.3,-1.201,6.486],[32144,493.35,530.94,-37.58,492.91,527.2,-34.29,499.35,530.26,-30.91,0.441,5.997],[32145,579.26,613.28,-34.02,578.3,608.27,-29.96,585.45,611.2,-25.75,0.953,6.195],[32146,626.44,662.53,-36.09,627.0,658.12,-31.12,632.57,659.37,-26.79,-0.563,6.138],[32147,436.81,463.37,-26.56,436.75,459.67,-22.92,441.76,461.86,-20.1,0.056,4.945],[32148,616.54,651.65,-35.11,615.99,646.38,-30.39,622.73,649.24,-26.5,0.559,6.19],[32149,581.06,616.03,-34.97,580.53,610.77,-30.24,587.54,613.69,-26.15,0.531,6.474],[32150,595.14,633.41,-38.27,596.48,629.36,-32.88,601.78,629.86,-28.07,-1.333,6.64],[32151,622.23,657.88,-35.65,623.49,654.11,-30.62,630.02,656.88,-26.86,-1.263,7.79],[32152,591.34,625.82,-34.47,590.48,620.24,-29.76,596.53,622.77,-26.24,0.862,5.189],[32153,373.68,401.63,-27.96,375.23,398.94,-23.71,380.14,400.86,-20.72,-1.554,6.463],[32154,413.76,439.83,-26.08,411.05,433.63,-22.58,419.31,438.77,-19.46,2.707,5.554],[32155,497.86,528.68,-30.82,496.34,523.25,-26.91,502.94,526.17,-23.22,1.52,5.082],[32156,388.4,414.59,-26.19,388.76,411.6,-22.84,396.23,415.66,-19.44,-0.366,7.83],[32157,495.41,525.65,-30.24,496.75,523.02,-26.27,502.46,525.15,-22.69,-1.34,7.058],[32158,504.06,534.35,-30.29,504.32,530.56,-26.25,510.33,533.16,-22.82,-0.255,6.27],[32159,438.81,465.9,-27.09,438.5,461.84,-23.34,444.99,465.29,-20.3,0.305,6.178],[32160,533.93,566.39,-32.46,534.9,563.01,-28.11,540.75,564.76,-24.01,-0.976,6.818],[32161,491.19,520.0,-28.81,490.24,514.78,-24.54,496.09,517.75,-21.66,0.948,4.898],[32162,468.51,499.63,-31.12,468.92,495.41,-26.49,473.98,497.48,-23.5,-0.413,5.473],[32163,466.09,496.17,-30.07,465.43,491.37,-25.94,470.27,493.09,-22.82,0.665,4.18],[32164,451.78,480.46,-28.68,451.98,476.51,-24.53,456.48,477.98,-21.5,-0.2,4.698],[32165,562.31,596.75,-34.44,563.02,592.45,-29.43,567.71,593.5,-25.78,-0.707,5.399],[32166,591.8,626.54,-34.73,591.96,621.4,-29.44,599.06,624.91,-25.85,-0.155,7.261],[32167,493.45,524.24,-30.79,493.28,519.75,-26.47,499.54,522.25,-22.71,0.172,6.087],[32168,680.28,725.39,-45.11,681.5,721.59,-40.08,689.22,725.43,-36.2,-1.228,8.948],[32169,558.27,593.71,-35.44,556.96,587.23,-30.27,564.81,590.78,-25.97,1.308,6.542],[32170,491.14,525.25,-34.11,490.62,519.93,-29.31,496.6,522.38,-25.78,0.522,5.459],[32171,490.33,520.22,-29.88,491.88,517.77,-25.89,496.62,519.09,-22.47,-1.544,6.29],[32172,583.95,619.53,-35.58,584.01,615.36,-31.35,589.34,617.98,-28.64,-0.057,5.392],[32173,570.47,605.52,-35.05,570.43,600.41,-29.98,577.8,603.55,-25.74,0.044,7.333],[32174,364.04,388.47,-24.43,363.23,383.94,-20.71,367.64,385.53,-17.88,0.806,3.604],[32175,452.01,482.6,-30.6,450.84,477.09,-26.25,457.85,480.71,-22.86,1.17,5.849],[32176,406.52,432.13,-25.61,405.99,427.85,-21.87,412.65,431.35,-18.71,0.532,6.128],[32177,424.67,451.11,-26.44,423.53,446.38,-22.85,431.92,452.37,-20.45,1.141,7.253],[32178,457.03,485.79,-28.76,456.33,480.79,-24.46,462.72,484.04,-21.32,0.7,5.684],[32179,600.53,635.08,-34.55,599.94,630.16,-30.22,606.83,633.51,-26.68,0.591,6.298],[32180,439.64,466.48,-26.84,439.02,462.38,-23.35,444.03,464.48,-20.44,0.617,4.392],[32181,505.26,535.65,-30.39,505.54,531.4,-25.86,510.88,533.25,-22.37,-0.275,5.619],[32182,597.45,631.26,-33.81,597.58,626.95,-29.36,601.85,627.4,-25.55,-0.13,4.4],[32183,594.48,634.39,-39.91,595.84,631.33,-35.5,601.86,633.62,-31.75,-1.356,7.385],[32184,534.23,566.95,-32.73,535.39,563.33,-27.94,540.08,564.9,-24.82,-1.165,5.855],[32185,420.67,451.39,-30.72,420.88,447.21,-26.32,426.72,448.97,-22.25,-0.216,6.055],[32186,471.69,503.86,-32.17,471.8,499.8,-27.99,479.15,503.28,-24.13,-0.111,7.462],[32187,747.59,789.89,-42.31,749.53,785.9,-36.37,756.48,788.56,-32.08,-1.941,8.896],[32188,563.04,595.46,-32.42,564.15,592.06,-27.91,569.89,594.32,-24.43,-1.11,6.853],[32189,484.05,514.57,-30.52,485.84,512.12,-26.28,489.28,512.14,-22.86,-1.782,5.225],[32190,461.02,491.63,-30.6,461.17,487.68,-26.51,468.6,491.73,-23.13,-0.145,7.58],[32191,391.45,414.4,-22.96,391.73,411.38,-19.66,396.4,413.28,-16.88,-0.28,4.952],[32192,489.45,519.48,-30.04,489.3,515.13,-25.84,496.74,519.53,-22.78,0.152,7.297],[32193,440.43,468.74,-28.32,440.18,464.58,-24.4,447.8,469.34,-21.54,0.247,7.373],[32194,496.58,528.73,-32.15,495.52,523.03,-27.52,502.45,526.65,-24.2,1.062,5.873],[32195,700.34,736.47,-36.12,700.75,731.73,-30.98,708.62,735.91,-27.29,-0.407,8.277],[32196,441.12,469.11,-27.99,441.31,465.33,-24.02,445.19,465.61,-20.42,-0.19,4.073],[32197,708.67,748.95,-40.28,708.3,744.2,-35.9,715.86,748.04,-32.19,0.375,7.183],[32198,588.77,621.62,-32.85,589.97,619.32,-29.35,596.27,621.5,-25.23,-1.201,7.498],[32199,514.43,546.94,-32.51,514.79,543.3,-28.51,520.44,545.25,-24.8,-0.361,6.012],[32200,487.59,523.64,-36.06,487.93,520.36,-32.44,493.88,523.73,-29.85,-0.341,6.297],[32201,391.96,417.42,-25.45,391.11,413.06,-21.95,396.17,415.05,-18.88,0.851,4.203],[32202,616.41,651.95,-35.54,616.4,647.13,-30.73,623.18,650.19,-27.01,0.012,6.77],[32203,520.09,552.36,-32.27,520.28,548.39,-28.1,527.32,551.72,-24.4,-0.192,7.232],[32204,591.29,626.95,-35.66,592.0,622.82,-30.82,596.97,623.54,-26.56,-0.708,5.686],[32205,530.38,563.31,-32.92,531.44,559.88,-28.44,538.04,563.02,-24.98,-1.057,7.66],[32206,432.49,461.29,-28.8,432.56,457.32,-24.77,437.95,460.09,-22.13,-0.065,5.459],[32207,511.81,545.02,-33.22,511.87,540.38,-28.51,517.29,542.06,-24.77,-0.062,5.481],[32208,458.98,488.58,-29.6,458.31,483.35,-25.04,465.01,486.77,-21.75,0.67,6.031],[32209,587.22,622.55,-35.34,590.4,620.95,-30.55,595.53,622.28,-26.75,-3.181,8.31],[32210,497.31,528.2,-30.89,497.59,524.04,-26.45,504.13,527.07,-22.94,-0.287,6.817],[32211,491.51,522.33,-30.81,490.08,516.6,-26.52,497.3,520.37,-23.06,1.433,5.787],[32212,427.56,455.72,-28.16,428.48,452.58,-24.1,433.36,454.53,-21.17,-0.922,5.801],[32213,539.73,571.15,-31.42,538.54,565.97,-27.43,546.11,570.73,-24.62,1.191,6.38],[32214,570.73,607.16,-36.43,570.29,601.91,-31.62,575.88,603.59,-27.71,0.446,5.142],[32215,660.81,698.68,-37.86,659.77,692.71,-32.94,665.8,694.86,-29.06,1.042,4.984],[32216,480.3,514.66,-34.36,479.22,509.85,-30.63,485.38,512.08,-26.7,1.081,5.079],[32217,596.0,631.23,-35.23,596.45,626.88,-30.43,602.03,628.47,-26.44,-0.452,6.035],[32218,463.81,490.79,-26.98,463.67,487.09,-23.42,469.61,490.39,-20.77,0.14,5.805],[32219,618.38,653.49,-35.12,617.42,647.86,-30.44,625.78,652.38,-26.6,0.953,7.405],[32220,522.48,556.1,-33.63,521.93,550.63,-28.7,529.86,554.18,-24.32,0.551,7.379],[32221,462.07,491.9,-29.83,462.9,488.9,-26.0,467.22,489.66,-22.44,-0.831,5.152],[32222,444.4,472.26,-27.86,444.98,469.18,-24.2,451.01,472.44,-21.43,-0.573,6.609],[32223,432.84,461.84,-29.0,432.73,458.02,-25.29,440.42,462.01,-21.59,0.102,7.586],[32224,493.4,524.7,-31.3,494.17,520.97,-26.8,500.73,524.67,-23.94,-0.77,7.329],[32225,665.37,701.45,-36.08,666.52,697.7,-31.18,673.56,700.98,-27.42,-1.156,8.193],[32226,506.39,539.44,-33.05,507.42,535.59,-28.17,512.7,537.39,-24.7,-1.032,6.306],[32227,423.7,452.31,-28.61,425.2,449.61,-24.41,431.64,452.96,-21.33,-1.497,7.932],[32228,569.8,605.72,-35.92,568.41,599.2,-30.79,577.97,605.16,-27.18,1.392,8.171],[32229,584.05,616.87,-32.82,582.13,610.34,-28.21,587.46,611.88,-24.42,1.923,3.403],[32230,524.14,555.59,-31.44,524.56,551.61,-27.06,530.85,554.43,-23.58,-0.413,6.705],[32231,561.1,632.95,-71.85,560.55,628.59,-68.05,566.62,632.12,-65.5,0.555,5.52],[32232,551.92,585.71,-33.79,550.64,579.97,-29.33,558.2,584.01,-25.8,1.277,6.288],[32233,718.18,766.2,-48.02,719.25,762.0,-42.75,725.56,763.76,-38.2,-1.067,7.379],[32234,676.45,715.47,-39.02,677.99,712.36,-34.38,682.66,712.75,-30.09,-1.54,6.21],[32235,523.26,555.46,-32.2,522.32,549.64,-27.32,530.32,554.21,-23.9,0.937,7.054],[32236,679.37,721.49,-42.12,677.74,714.6,-36.86,686.09,718.9,-32.81,1.624,6.722],[32237,402.81,428.85,-26.04,402.94,425.31,-22.36,407.46,426.73,-19.27,-0.134,4.648],[32238,503.65,537.73,-34.08,502.77,532.33,-29.56,509.82,535.15,-25.33,0.881,6.167],[32239,532.95,565.64,-32.68,533.31,561.51,-28.2,539.37,563.84,-24.47,-0.355,6.416],[32240,544.42,576.75,-32.33,543.38,571.29,-27.91,551.21,575.86,-24.65,1.042,6.788],[32241,619.47,660.79,-41.32,619.96,656.11,-36.15,625.72,658.13,-32.41,-0.487,6.248],[32242,495.0,524.43,-29.43,494.58,520.0,-25.41,502.07,524.06,-21.99,0.421,7.064],[32243,481.81,511.76,-29.95,480.83,506.66,-25.83,488.16,510.7,-22.54,0.978,6.351],[32244,530.77,564.66,-33.89,530.59,559.87,-29.28,537.14,562.16,-25.02,0.181,6.367],[32245,570.73,604.28,-33.55,571.82,600.95,-29.12,578.17,604.17,-26.0,-1.097,7.444],[32246,658.85,697.39,-38.54,659.66,693.0,-33.33,666.23,695.82,-29.59,-0.811,7.378],[32247,391.96,420.91,-28.96,392.0,416.56,-24.55,397.71,419.11,-21.4,-0.045,5.753],[32248,606.6,641.45,-34.85,606.32,636.8,-30.47,615.69,642.33,-26.64,0.273,9.094],[32249,497.37,527.64,-30.27,498.22,524.53,-26.3,503.96,526.82,-22.87,-0.855,6.587],[32250,461.15,491.23,-30.08,460.05,486.0,-25.95,469.05,491.02,-21.96,1.103,7.902],[32251,383.98,408.53,-24.55,383.34,404.15,-20.8,389.42,408.05,-18.64,0.636,5.435],[32252,573.85,605.6,-31.75,575.57,603.21,-27.64,578.9,604.35,-25.45,-1.724,5.05],[32253,616.33,652.89,-36.56,617.12,648.43,-31.31,624.11,651.49,-27.38,-0.786,7.783],[32254,589.24,628.15,-38.91,588.96,623.29,-34.33,595.15,626.52,-31.36,0.278,5.911],[32255,576.75,610.4,-33.64,577.04,606.27,-29.23,582.64,608.54,-25.91,-0.282,5.884]]},"dead_ends":["Bounded 6-param sd/parb interaction on frozen knots: heldout -0.028 (SE 0.061) vs base; deficit to true-p oracle stays 6.3","CMA gen0..2 best on train: -0.039, -0.471, -0.067; medians -0.69, -1.27, -0.60: nearly every perturbation from the table hurts","Soft arb probability term (t3): ablating it gains +0.45 (SE 0.07) on 64 seeds","Reading: the deficit is in the posterior mean/arb classification (estimator), not in a missing width response to sd; policy adaptation of this size cannot recover it"],"limitations":["Replica only; 3 CMA generations (small budget); training at 2000 steps","No Solidity port, no engine, no RS2 pairing","Retrain of all 35 knots jointly with sd not attempted"],"source":{"pol.py":"\"\"\"Uncertainty-conditioned displacement table policy (rep-a). Frozen MixFilter (mf.py, mixture-B)\nsupplies posterior mean m=E[z], z=ln(p/spot), sd=sqrt(Var z), parb. Policy inputs ONLY: m, sd, parb,\nown spot (via m: own displacement u=ln(spot/p_hat)/0.003 = -m/0.003). No true p / labels / rival state.\nOffsets in units of 30 bps (as oracle_table). Base = oracle_table knots + arb_flag*[parb>0.5].\nInteraction (bounded): S=min(sd/0.003,3) (sd in 30bps units, capped), q=parb-[parb>0.5] (in [-.5,.5]).\n adj_ask = clip(t0*S + t1*S*max(u,0)/8 + t2*S*max(-u,0)/8 + t3*q + t4 + t5*S*flag, -2, 2)\n adj_bid = same with u -> -u (mirror symmetry). Each theta clipped to [-1.5,1.5]. Fees clamped [0,0.1].\"\"\"\nimport math, mf\nTAB = mf.TAB\nLIM = 1.5; ADJ = 2.0\ndef feats(m, v, parb):\n    u = -m / 0.003; S = min(math.sqrt(max(v, 0.0)) / 0.003, 3.0)\n    flag = 1.0 if parb > 0.5 else 0.0\n    return u, S, parb - flag, flag\ndef adj(th, u, S, q, flag):\n    t = [min(max(a, -LIM), LIM) for a in th]\n    up, dn = max(u, 0.0) / 8, max(-u, 0.0) / 8\n    a = t[0]*S + t[1]*S*up + t[2]*S*dn + t[3]*q + t[4] + t[5]*S*flag\n    b = t[0]*S + t[1]*S*dn + t[2]*S*up + t[3]*q + t[4] + t[5]*S*flag\n    return min(max(a, -ADJ), ADJ), min(max(b, -ADJ), ADJ)\ndef fees(th, spot, m, v, parb):\n    u, S, q, flag = feats(m, v, parb)\n    d = u * 0.003\n    a = mf.interp(TAB['ask'], u) + TAB['arb_flag'] * flag\n    b = mf.interp(TAB['bid'], u) + TAB['arb_flag'] * flag\n    if th is not None:\n        da, db = adj(th, u, S, q, flag); a += da; b += db\n    fa = 1 - math.exp(d - a * 0.003); fb = 1 - math.exp(-b * 0.003 - d)\n    return min(max(fb, 0.0), 0.1), min(max(fa, 0.0), 0.1)\nclass PArm:\n    \"\"\"mode 'new': theta policy; 'base': unchanged mixture-B/table (theta None); 'oracle': true p/true flag.\n    abl: 'sd0' sets S=0 input, 'q0' sets parb->flag, 'both'. p only used for error logging (and oracle arm).\"\"\"\n    def __init__(self, mode, th=None, abl=None): self.mode, self.th, self.abl = mode, th, abl\n    def init(self, *hidden):\n        self.f = mf.MixFilter(100.0, 10000.0); self.se = 0.0; self.n = 0\n        return 0.003, 0.003\n    def on_trade(self, is_buy, ax, ay, t, x, y, arb, p, s2):\n        ph, parb = self.f.update(is_buy, ax, ay, t, x, y)\n        e = math.log(ph / p); self.se += e*e; self.n += 1\n        s = y / x\n        if self.mode == 'oracle': fb, fa = mf.table_fees(s, p, arb)\n        else:\n            m = self.f.mean(); v = self.f.var()\n            if self.abl in ('sd0', 'both'): v = 0.0\n            if self.abl in ('q0', 'both'): parb = 1.0 if parb > 0.5 else 0.0\n            fb, fa = fees(self.th if self.mode == 'new' else None, s, m, v, parb)\n        self.f.set_fees(fb, fa)\n        return fb, fa\n","ev.py":"import sys, os, json, time\nsys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))\nimport replica, pol\ndef one(a):\n    seed, mode, th, abl, ns = a\n    arm = pol.PArm(mode, th, abl); t0=time.time(); r = replica.run(seed, arm, n_steps=ns)\n    return dict(seed=seed, mode=mode, abl=abl, edge=r['edge'], retail=r['retail'], arb=r['arb'], rv=r['rv'], av=r['av'],\n                se=arm.se, n=arm.n, sec=time.time()-t0)\n","cma.py":"\"\"\"Minimal (mu/mu_w,lambda) CMA-ES, full covariance, stdlib+random only; checkpoint json each gen.\nObjective: mean over train seeds 30000..30255 (10000 steps, CRN: same seeds every candidate) of edge(new)-edge(base).\"\"\"\nimport sys, os, json, time, math, random\nsys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))\nimport ev\nfrom multiprocessing import Pool\nCK = sys.argv[1]; TLIM = float(sys.argv[2]); MAXGEN = int(sys.argv[3]); NS = int(sys.argv[4])\nSEEDS = list(range(30000, 30256)); N = 6; LAM = 6; MU = 3\nw = [math.log(MU + .5) - math.log(i + 1) for i in range(MU)]; sw = sum(w); w = [x / sw for x in w]\nmueff = 1 / sum(x * x for x in w)\ncc = (4 + mueff / N) / (N + 4 + 2 * mueff / N); cs = (mueff + 2) / (N + mueff + 5)\nc1 = 2 / ((N + 1.3) ** 2 + mueff); cmu = min(1 - c1, 2 * (mueff - 2 + 1 / mueff) / ((N + 2) ** 2 + mueff))\nds = 1 + 2 * max(0, math.sqrt((mueff - 1) / (N + 1)) - 1) + cs; chiN = math.sqrt(N) * (1 - 1 / (4 * N) + 1 / (21 * N * N))\ndef chol(A):\n    L = [[0.0] * N for _ in range(N)]\n    for i in range(N):\n        for j in range(i + 1):\n            s = A[i][j] - sum(L[i][k] * L[j][k] for k in range(j))\n            L[i][j] = math.sqrt(max(s, 1e-20)) if i == j else s / L[j][j]\n    return L\ndef solveL(L, b):\n    y = [0.0] * N\n    for i in range(N): y[i] = (b[i] - sum(L[i][k] * y[k] for k in range(i))) / L[i][i]\n    return y\nif os.path.exists(CK): S = json.load(open(CK))\nelse:\n    pool = Pool(4); base = pool.map(ev.one, [(s, 'base', None, None, NS) for s in SEEDS], chunksize=4); pool.close()\n    S = dict(m=[0.0] * N, sig=0.3, C=[[float(i == j) for j in range(N)] for i in range(N)], pc=[0.0] * N, ps=[0.0] * N,\n             gen=0, base={str(r['seed']): r['edge'] for r in base}, log=[], best=None, rng=12345, evals=0)\nt0 = time.time(); pool = Pool(4)\nwhile S['gen'] < MAXGEN and time.time() - t0 < TLIM:\n    rng = random.Random(S['rng'] + S['gen']); L = chol(S['C'])\n    zs = [[rng.gauss(0, 1) for _ in range(N)] for _ in range(LAM)]\n    xs = [[S['m'][i] + S['sig'] * sum(L[i][k] * z[k] for k in range(N)) for i in range(N)] for z in zs]\n    jobs = [(s, 'new', x, None, NS) for x in xs for s in SEEDS]\n    res = pool.map(ev.one, jobs, chunksize=8); S['evals'] += LAM\n    fit = []\n    for j in range(LAM):\n        d = [r['edge'] - S['base'][str(r['seed'])] for r in res[j * 256:(j + 1) * 256]]\n        fit.append(sum(d) / 256)\n    order = sorted(range(LAM), key=lambda j: -fit[j])\n    old = S['m']; S['m'] = [sum(w[k] * xs[order[k]][i] for k in range(MU)) for i in range(N)]\n    y = [(S['m'][i] - old[i]) / S['sig'] for i in range(N)]\n    zw = solveL(L, y)\n    S['ps'] = [(1 - cs) * S['ps'][i] + math.sqrt(cs * (2 - cs) * mueff) * zw[i] for i in range(N)]\n    nps = math.sqrt(sum(v * v for v in S['ps']))\n    hs = 1.0 if nps / math.sqrt(1 - (1 - cs) ** (2 * (S['gen'] + 1))) < (1.4 + 2 / (N + 1)) * chiN else 0.0\n    S['pc'] = [(1 - cc) * S['pc'][i] + hs * math.sqrt(cc * (2 - cc) * mueff) * y[i] for i in range(N)]\n    ys = [[(xs[order[k]][i] - old[i]) / S['sig'] for i in range(N)] for k in range(MU)]\n    S['C'] = [[(1 - c1 - cmu) * S['C'][i][j] + c1 * S['pc'][i] * S['pc'][j] + cmu * sum(w[k] * ys[k][i] * ys[k][j] for k in range(MU))\n               for j in range(N)] for i in range(N)]\n    S['sig'] *= math.exp((cs / ds) * (nps / chiN - 1)); S['sig'] = min(S['sig'], 1.0)\n    bj = order[0]\n    if S['best'] is None or fit[bj] > S['best'][0]: S['best'] = [fit[bj], xs[bj]]\n    S['log'].append(dict(gen=S['gen'], best=round(fit[bj], 4), median=round(sorted(fit)[LAM // 2], 4), sig=round(S['sig'], 4), m=[round(v, 4) for v in S['m']]))\n    S['gen'] += 1; json.dump(S, open(CK, 'w')); print(S['log'][-1], round(time.time() - t0), flush=True)\n","val.py":"import sys, os, json, time\nsys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))\nimport ev\nfrom multiprocessing import Pool\nS = json.load(open(sys.argv[1])); TH = S['best'][1]\nlo, hi, out, kind = int(sys.argv[2]), int(sys.argv[3]), sys.argv[4], sys.argv[5]\nif kind == 'main': jobs = [(s, m, TH if m == 'new' else None, None, 10000) for s in range(lo, hi) for m in ('new', 'base', 'oracle')]\nelse: jobs = [(s, 'new', TH, a, 10000) for s in range(lo, hi) for a in ('sd0', 'q0', 'both')]\nt0 = time.time()\nwith Pool(4) as p: res = p.map(ev.one, jobs, chunksize=4)\njson.dump(dict(theta=TH, res=res, sec=time.time() - t0), open(out, 'w')); print('sec', time.time() - t0)\n","agg.py":"import json, math, hashlib, sys\nR = sys.argv[1]\nv = json.load(open('../ck/v1.json'))['res'] + json.load(open('../ck/v2.json'))['res']\nab = json.load(open('../ck/ab.json')); S = json.load(open('../ck/cma.json'))\nD = {}\nfor r in v: D.setdefault(r['seed'], {})[r['mode']] = r\ndef st(x):\n    n = len(x); m = sum(x) / n; se = math.sqrt(sum((a - m) ** 2 for a in x) / (n - 1) / n)\n    return dict(n=n, mean=round(m, 4), se=round(se, 4), ci95=[round(m - 1.96 * se, 4), round(m + 1.96 * se, 4)])\nseeds = sorted(D)\narms = {}\nfor a in ('new', 'base', 'oracle'):\n    rs = [D[s][a] for s in seeds]; se = sum(r['se'] for r in rs); n = sum(r['n'] for r in rs)\n    arms[a] = dict(edge=round(sum(r['edge'] for r in rs) / 256, 3), retail=round(sum(r['retail'] for r in rs) / 256, 3),\n                   arb=round(sum(r['arb'] for r in rs) / 256, 3), retail_volY=round(sum(r['rv'] for r in rs) / 256, 1),\n                   arb_volY=round(sum(r['av'] for r in rs) / 256, 1), sq_err_sum_ln=round(se, 6), err_count=n,\n                   pooled_rms_bps=round(math.sqrt(se / n) * 1e4, 3), runtime_sec_sum=round(sum(r['sec'] for r in rs), 1))\npaired = {'new_minus_base': st([D[s]['new']['edge'] - D[s]['base']['edge'] for s in seeds]),\n          'oracle_minus_new': st([D[s]['oracle']['edge'] - D[s]['new']['edge'] for s in seeds]),\n          'oracle_minus_base': st([D[s]['oracle']['edge'] - D[s]['base']['edge'] for s in seeds])}\nA = {}\nfor r in ab['res']: A.setdefault(r['abl'], {})[r['seed']] = r\nabl = {k: dict(full_minus_ablated=st([D[s]['new']['edge'] - A[k][s]['edge'] for s in range(32000, 32064)]),\n               ablated_minus_base=st([A[k][s]['edge'] - D[s]['base']['edge'] for s in range(32000, 32064)])) for k in A}\nrows = [[s] + [round(D[s][a][k], 2) for a in ('new', 'base', 'oracle') for k in ('edge', 'retail', 'arb')] +\n        [round(D[s]['new']['edge'] - D[s]['base']['edge'], 3), round(D[s]['oracle']['edge'] - D[s]['new']['edge'], 3)] for s in seeds]\njson.dump(dict(arms=arms, paired=paired, ablation=abl, rows=rows, theta=S['best'][1], train_fit=S['best'][0], log=S['log'], evals=S['evals']), open(R, 'w'))\nprint(json.dumps(dict(arms=arms, paired=paired, ablation=abl), indent=0))\n","mf.py":"\"\"\"Small Gaussian-mixture posterior of z=ln(p/spot) for the AMM fee challenge (replica B).\nFilter sees only: init reserves, and per own-pool callback (is_buy, amount_x, amount_y, t, x, y)\nplus its own stored fees. Policy = frozen oracle_table driven by p_hat=spot*exp(E[z]).\"\"\"\nimport math, json, os\nSQ2 = math.sqrt(2.0)\ndef Phi(u): return 0.5 * (1.0 + math.erf(u / SQ2))\ndef phi(u): return math.exp(-0.5 * u * u) / 2.5066282746310002\nP = dict(KMAX=4, SIG0=0.000945, N0=200.0, TAU_ROUTER=0.0015, ROUTER=1, PRETAIL=0.27,\n         RET_MU=math.log(20.0) - 0.72, RET_SD=1.3, PIN_VAR=1e-12, MINVAR=1e-12, ARB_CONF=0.9)\nTAB = json.load(open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'oracle_table.json')))\n\ndef interp(arr, u):\n    u = (u + 8.0)\n    if u <= 0: return arr[0]\n    if u >= 16: return arr[16]\n    i = int(u); f = u - i\n    return arr[i] * (1 - f) + arr[i + 1] * f\n\ndef table_fees(spot, p, arbflag):\n    d = math.log(spot / p); u = d / 0.003\n    a = interp(TAB['ask'], u) + (TAB['arb_flag'] if arbflag else 0.0)\n    b = interp(TAB['bid'], u) + (TAB['arb_flag'] if arbflag else 0.0)\n    fa = 1 - math.exp(d - a * 0.003); fb = 1 - math.exp(-b * 0.003 - d)\n    return min(max(fb, 0.0), 0.1), min(max(fa, 0.0), 0.1)\n\ndef soft_upper(m, v, b, tau2):\n    \"\"\"Gaussian(m,v) times Phi((b-z)/sqrt(tau2)) (tau2=0: hard truncation z<=b).\n    Returns (mass, mean, var).\"\"\"\n    s = math.sqrt(v + tau2); a = (b - m) / s\n    Z = Phi(a)\n    if Z < 1e-300: return 0.0, b, P['MINVAR']\n    lam = phi(a) / Z\n    mean = m - v / s * lam\n    var = v - v * v / (v + tau2) * lam * (a + lam)\n    return Z, mean, max(var, P['MINVAR'])\n\ndef soft_lower(m, v, b, tau2):\n    Z, mean, var = soft_upper(-m, v, -b, tau2)\n    return Z, -mean, var\n\ndef trunc(m, v, lo, hi):\n    \"\"\"hard truncate to [lo,hi]\"\"\"\n    s = math.sqrt(v); A = (lo - m) / s; B = (hi - m) / s\n    Z = Phi(B) - Phi(A)\n    if Z < 1e-14:  # numerically empty: put at nearest edge\n        e = lo if m < lo else hi\n        return 1e-300, min(max(e, lo), hi), P['MINVAR']\n    pa, pb = phi(A), phi(B)\n    mu = m + s * (pa - pb) / Z\n    var = v * (1 + (A * pa - B * pb) / Z - ((pa - pb) / Z) ** 2)\n    return Z, mu, max(var, P['MINVAR'])\n\nclass MixFilter:\n    def __init__(self, x0, y0, router=None):\n        self.x, self.y = x0, y0\n        self.c = [[1.0, 0.0, 1e-10]]  # weight, mean, var  (p0 == initial spot)\n        self.t = -1; self.fb = self.fa = 0.003\n        self.sig2 = P['SIG0'] ** 2; self.sq = 0.0; self.dt = 0.0\n        self.lastpin = None; self.router = P['ROUTER'] if router is None else router\n        self.merge_err = 0.0; self.nmerge = 0; self.parb = 0.0\n    def _diffuse(self, n=1):\n        d = self.sig2 * n\n        for c in self.c: c[1] += -0.5 * self.sig2 * n; c[2] += d\n    def _band(self):\n        lo = math.log(1 - self.fb) if self.fb < 1 else -50; hi = -math.log(1 - self.fa)\n        out = []; tot = 0.0\n        for w, m, v in self.c:\n            Z, mu, var = trunc(m, v, lo, hi); out.append([w * Z, mu, var]); tot += w * Z\n        return out, tot\n    def _silent(self, n):\n        # fully silent steps: diffuse+truncate each step; long gaps: after 64 steps truncation\n        # is near stationary, cap per-step loop and do remaining in chunks of diffusion+trunc\n        for _ in range(min(n, 400)):\n            self._diffuse(1)\n            out, tot = self._band()\n            if tot > 0: self.c = [[w / tot, m, v] for w, m, v in out]\n        if n > 400:\n            self._diffuse(n - 400); out, tot = self._band()\n            if tot > 0: self.c = [[w / tot, m, v] for w, m, v in out]\n    def _norm_prune(self):\n        tot = sum(c[0] for c in self.c)\n        self.c = [[w / tot, m, v] for w, m, v in self.c if w / tot > 1e-9]\n        while len(self.c) > P['KMAX']:\n            best = None\n            for i in range(len(self.c)):\n                for j in range(i + 1, len(self.c)):\n                    wi, mi, vi = self.c[i]; wj, mj, vj = self.c[j]\n                    w = wi + wj; m = (wi * mi + wj * mj) / w\n                    v = (wi * (vi + (mi - m) ** 2) + wj * (vj + (mj - m) ** 2)) / w\n                    # Runnalls KL upper bound of the merge\n                    cost = 0.5 * (w * math.log(v) - wi * math.log(vi) - wj * math.log(vj))\n                    if best is None or cost < best[0]: best = (cost, i, j, [w, m, v])\n            cost, i, j, nc = best\n            self.merge_err += cost; self.nmerge += 1\n            self.c = [c for k, c in enumerate(self.c) if k not in (i, j)] + [nc]\n    def mean(self): return sum(w * m for w, m, v in self.c)\n    def var(self):\n        mu = self.mean(); return sum(w * (v + (m - mu) ** 2) for w, m, v in self.c)\n    def update(self, is_buy, ax, ay, t, x, y):\n        \"\"\"is_buy: AMM bought X (trader sold X). Returns (p_hat, arb_prob).\"\"\"\n        ls0 = math.log(self.y / self.x); ls1 = math.log(y / x)\n        first = t != self.t\n        parb = 0.0\n        if first:\n            if t > self.t + 1: self._silent(t - self.t - 1)\n            self._diffuse(1)\n            lo = math.log(1 - self.fb); hi = -math.log(1 - self.fa)\n            # arb hypothesis: pinned z (relative to post spot), mapped back to pre-spot coords\n            if not is_buy:  # AMM sold X: arb bought X, spot_after = p(1-fa)\n                zpost = -math.log(1 - self.fa); xn = x; a = ax\n                consistent = True\n            else:            # AMM bought X: spot_after = p/(1-fb)\n                zpost = math.log(1 - self.fb); xn = x; a = ax\n                consistent = True\n            zpre = zpost + ls1 - ls0\n            dens = 0.0\n            ok = (zpre > hi) if not is_buy else (zpre < lo)\n            if ok and consistent:\n                for w, m, v in self.c:\n                    dens += w * phi((zpre - m) / math.sqrt(v)) / math.sqrt(v)\n                dens *= 2.0 * a / xn  # |dz/dln a|\n            # retail hypothesis: no-arb band, then retail density of ln(amount in Y)\n            out, tot = self._band()\n            ly = math.log(max(ay, 1e-9))\n            dret = P['PRETAIL'] * phi((ly - P['RET_MU']) / P['RET_SD']) / P['RET_SD']\n            Larb = dens; Lret = tot * dret\n            parb = Larb / (Larb + Lret) if Larb + Lret > 0 else 0.0\n            ret = [[w * (1 - parb) / max(tot, 1e-300), m - (ls1 - ls0), v] for w, m, v in out] if tot > 0 else []\n            comps = ret + ([[parb, zpost, P['PIN_VAR']]] if parb > 1e-9 else [])\n            if not comps: comps = [[1.0, zpost, P['PIN_VAR']]]\n            self.c = comps\n            if parb > P['ARB_CONF']:\n                lp = ls1 + zpost\n                if self.lastpin is not None:\n                    tp, lpp = self.lastpin; dtp = t - tp\n                    if dtp > 0:\n                        self.sq += (lp - lpp + 0.5 * self.sig2 * dtp) ** 2; self.dt += dtp\n                        self.sig2 = (P['N0'] * P['SIG0'] ** 2 + self.sq) / (P['N0'] + self.dt)\n                self.lastpin = (t, lp)\n        else:\n            for c in self.c: c[1] -= (ls1 - ls0)\n        if parb < 0.5 and self.router:\n            # weak router observation: rival marginal >= p-band => z <= -ln(1-fa) after buy-X fill\n            tau2 = P['TAU_ROUTER'] ** 2; new = []\n            for w, m, v in self.c:\n                if v <= P['PIN_VAR'] * 1.01: new.append([w, m, v]); continue\n                if not is_buy: Z, mu, var = soft_upper(m, v, -math.log(1 - self.fa), tau2)\n                else: Z, mu, var = soft_lower(m, v, math.log(1 - self.fb), tau2)\n                new.append([w * Z, mu, var])\n            if sum(c[0] for c in new) > 0: self.c = new\n        self._norm_prune()\n        self.x, self.y, self.t = x, y, t; self.parb = parb\n        return (y / x) * math.exp(self.mean()), parb\n    def set_fees(self, fb, fa): self.fb, self.fa = fb, fa\n\nclass Arm:\n    \"\"\"mode: 'oracle' (true p, true flag), 'filter' (p_hat, inferred flag),\n    'diag' (true p, inferred flag). Oracle values are passed to the filter NEVER.\"\"\"\n    def __init__(self, mode, router=None):\n        self.mode = mode; self.router = router\n    def init(self, sigma, lam, size):  # hidden params ignored\n        self.f = MixFilter(100.0, 10000.0, self.router)\n        self.se = 0.0; self.n = 0; self.cov = 0; self.parb_err = 0\n        return 0.003, 0.003\n    def on_trade(self, is_buy, ax, ay, t, x, y, arb, p, s2):\n        ph, parb = self.f.update(is_buy, ax, ay, t, x, y)\n        e = math.log(ph / p); self.se += e * e; self.n += 1\n        sd = math.sqrt(self.f.var()); self.cov += abs(e) <= 1.96 * sd + 1e-12\n        flag = parb > 0.5; self.parb_err += flag != arb\n        s = y / x\n        if self.mode == 'oracle': fb, fa = table_fees(s, p, arb)\n        elif self.mode == 'diag': fb, fa = table_fees(s, p, flag)\n        else: fb, fa = table_fees(s, ph, flag)\n        self.f.set_fees(fb, fa)\n        return fb, fa\n","replica.py":"\"\"\"Pure-Python replica of benedictbrady/amm-challenge @6b6921f8 (engine.rs, cfmm.rs,\narbitrageur.rs, router.rs, retail.rs), written from the source for ceiling experiments.\nRNG streams differ from the Rust engine, so absolute scores move by the seed set;\ncompare policies paired on the same seeds.\n\nA policy gets a callback after every trade on its own pool (arb or retail), like afterSwap,\nplus an oracle view (true fair price p and the 30 bps pool's spot s2 after the pending\naction of the same event), and returns (bid_fee, ask_fee).\"\"\"\nimport math, random\n\nK = 100.0 * 10000.0\nMAXF = 0.1\nNF = 0.003  # normalizer fee\n\n\ndef clampf(f):\n    return 0.0 if f < 0.0 else (MAXF if f > MAXF else f)\n\n\ndef run(seed, policy, n_steps=10000, cfg=None):\n    cr = random.Random(10_000_000 + seed)\n    size_mean = cr.uniform(19.0, 21.0)\n    lam = cr.uniform(0.6, 1.0)\n    sigma = cr.uniform(0.000882, 0.001008)\n    if cfg:\n        size_mean, lam, sigma = cfg\n    pr = random.Random(seed)\n    rr = random.Random(seed + 1)\n    drift = -0.5 * sigma * sigma\n    mu_ln = math.log(size_mean) - 0.5 * 1.2 * 1.2\n    emlam = math.exp(-lam)\n    p = 100.0\n    x1, y1 = 100.0, 10000.0\n    x2, y2 = 100.0, 10000.0\n    fb, fa = policy.init(sigma, lam, size_mean)\n    fb, fa = clampf(fb), clampf(fa)\n    e1 = e2 = 0.0\n    ret1 = arb1 = 0.0  # our retail / arb edge\n    rv1 = av1 = 0.0\n    sum_fb = sum_fa = 0.0\n    g2 = 1.0 - NF\n    sqrt = math.sqrt\n    for t in range(n_steps):\n        p *= math.exp(drift + sigma * pr.gauss(0.0, 1.0))\n        # --- arbitrage, normalizer first (pools are independent), then ours\n        s2 = y2 / x2\n        if s2 < p:\n            nx = sqrt(K / (g2 * p)); ax = x2 - nx\n            if ax > 0:\n                ax = min(ax, x2 * 0.99)\n                nrx = x2 - ax; nry = K / nrx; net_y = nry - y2; ty = net_y / g2\n                prof = ax * p - ty\n                if prof > 0:\n                    x2, y2 = nrx, nry; e2 -= prof\n        elif s2 > p:\n            xv = sqrt(K * g2 / p); ax = (xv - x2) / g2\n            if ax > 0:\n                nrx = x2 + ax * g2; nry = K / nrx; yo = y2 - nry\n                prof = yo - ax * p\n                if yo > 0 and prof > 0:\n                    x2, y2 = nrx, nry; e2 -= prof\n        s1 = y1 / x1\n        if s1 < p:\n            g = 1.0 - fa\n            if g > 0:\n                nx = sqrt(K / (g * p)); ax = x1 - nx\n                if ax > 0:\n                    ax = min(ax, x1 * 0.99)\n                    nrx = x1 - ax; nry = K / nrx; net_y = nry - y1; ty = net_y / g\n                    prof = ax * p - ty\n                    if prof > 0:\n                        x1, y1 = nrx, nry; e1 -= prof; arb1 -= prof; av1 += ty\n                        fb, fa = policy.on_trade(False, ax, ty, t, x1, y1, True, p, y2 / x2)\n                        fb, fa = clampf(fb), clampf(fa)\n        elif s1 > p:\n            g = 1.0 - fb\n            if g > 0:\n                xv = sqrt(K * g / p); ax = (xv - x1) / g\n                if ax > 0:\n                    nrx = x1 + ax * g; nry = K / nrx; yo = y1 - nry\n                    prof = yo - ax * p\n                    if yo > 0 and prof > 0:\n                        x1, y1 = nrx, nry; e1 -= prof; arb1 -= prof; av1 += yo\n                        fb, fa = policy.on_trade(True, ax, yo, t, x1, y1, True, p, y2 / x2)\n                        fb, fa = clampf(fb), clampf(fa)\n        # --- retail\n        n = 0; q = rr.random()\n        while q > emlam:\n            n += 1; q *= rr.random()\n        for _ in range(n):\n            size = rr.lognormvariate(mu_ln, 1.2)\n            buy = rr.random() < 0.5\n            if buy:  # trader buys X with Y\n                ga = 1.0 - fa\n                a1 = sqrt(x1 * ga * y1); a2 = sqrt(x2 * g2 * y2); r = a1 / a2\n                d = ga + r * g2\n                u1 = (r * (y2 + g2 * size) - y1) / d if d != 0 else size / 2\n                u1 = 0.0 if u1 < 0 else (size if u1 > size else u1)\n                u2 = size - u1\n                if u2 > 1e-4:\n                    nry = y2 + u2 * g2; nrx = K / nry; xo = x2 - nrx\n                    if xo > 0:\n                        e2 += u2 - xo * p; x2, y2 = nrx, nry\n                if u1 > 1e-4:\n                    nry = y1 + u1 * ga; nrx = K / nry; xo = x1 - nrx\n                    if xo > 0:\n                        ed = u1 - xo * p; e1 += ed; ret1 += ed; rv1 += u1\n                        x1, y1 = nrx, nry\n                        fb, fa = policy.on_trade(False, xo, u1, t, x1, y1, False, p, y2 / x2)\n                        fb, fa = clampf(fb), clampf(fa)\n            else:  # trader sells X\n                tx = size / p\n                gb = 1.0 - fb\n                b1 = sqrt(y1 * gb * x1); b2 = sqrt(y2 * g2 * x2); r = b1 / b2\n                d = gb + r * g2\n                v1 = (r * (x2 + g2 * tx) - x1) / d if d != 0 else tx / 2\n                v1 = 0.0 if v1 < 0 else (tx if v1 > tx else v1)\n                v2 = tx - v1\n                if v2 > 1e-4:\n                    nrx = x2 + v2 * g2; nry = K / nrx; yo = y2 - nry\n                    if yo > 0:\n                        e2 += v2 * p - yo; x2, y2 = nrx, nry\n                if v1 > 1e-4:\n                    nrx = x1 + v1 * gb; nry = K / nrx; yo = y1 - nry\n                    if yo > 0:\n                        ed = v1 * p - yo; e1 += ed; ret1 += ed; rv1 += yo\n                        x1, y1 = nrx, nry\n                        fb, fa = policy.on_trade(True, v1, yo, t, x1, y1, False, p, y2 / x2)\n                        fb, fa = clampf(fb), clampf(fa)\n        sum_fb += fb; sum_fa += fa\n    return dict(edge=e1, norm=e2, retail=ret1, arb=arb1, rv=rv1, av=av1,\n                fb=sum_fb / n_steps * 1e4, fa=sum_fa / n_steps * 1e4,\n                sigma=sigma, lam=lam, size=size_mean)\n\n\nclass Fixed:\n    def __init__(self, f): self.f = f\n    def init(self, *a): return self.f, self.f\n    def on_trade(self, *a): return self.f, self.f\n\n\nclass OracleQuote:\n    \"\"\"Quote ask p(1+m) and bid p(1-m) around the TRUE fair price after every own trade.\"\"\"\n    def __init__(self, m): self.m = m\n    def init(self, *a): return 0.003, 0.003\n    def on_trade(self, is_buy, ax, ay, t, x, y, arb, p, s2):\n        s = y / x\n        fa = 1.0 - s / (p * (1 + self.m))\n        fb = 1.0 - p * (1 - self.m) / s\n        return fb, fa\n\n\nclass OracleCompete:\n    \"\"\"Know p and the 30 bps pool's spot s2. Ask quote: undercut the rival's ask by u,\n    but never below p(1+mlo); bid quote: outbid the rival's bid by u, never above p(1-mlo).\"\"\"\n    def __init__(self, mlo, u, mhi=1.0):\n        self.mlo, self.u, self.mhi = mlo, u, mhi\n    def init(self, *a): return 0.003, 0.003\n    def on_trade(self, is_buy, ax, ay, t, x, y, arb, p, s2):\n        s = y / x\n        ra = s2 / (1 - NF); rb = s2 * (1 - NF)\n        qa = max(p * (1 + self.mlo), min(ra * (1 - self.u), p * (1 + self.mhi)))\n        qb = min(p * (1 - self.mlo), max(rb * (1 + self.u), p * (1 - self.mhi)))\n        return 1.0 - qb / s, 1.0 - s / qa\n"},"source_sha256":{"pol.py":"8202a011d56bee1e7cdf4ad6702a319f276c77ffe9ccccb9bc2de9fb2cbd83e9","ev.py":"c7110024e0a387d1820ddc2f3895e5b5d9fe34448ffe93307405ce6b0bd5b906","cma.py":"116ed4c04abaab659a13d2ec85f341c811319154713ae46a597f12dc035813c2","val.py":"6bff148aa3ac48910b9f232cfc5fe954298ccf6a8c4eab9f69952c33281d6ce8","agg.py":"24e9f3d8a96fc44416e800e62c352b163290c5da4cab254e1db3acfcbfbace7c","mf.py":"8adbd509efdac3e77ccde38d07a7272e9706b42ea4ecc926f77963e2a332445e","replica.py":"d079712fa1f4850ad8337e656e7ee8dbdde806cd4762d597fae50f547ef9c7c4"}}