ó
    ééÜj³ ã                   ó.
  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r
\R                  R                  \R                  R                  \5      5      r\R                  R!                  S\5        SSKrSSKrSSKrSSKJr  Sr\R                  R1                  S5      r\
R4                  " / SQ5      r\
R4                  " / SQ5      r/ SQ/ S	Q/ S
Q/ SQ/ SQSS/S/S// SQ/ SQSS// SQSS/S.r\R<                  " \" \R                  RA                  \R                  R                  \R                  R                  \5      5      S5      5      5      r!\"" \!S   5      r#\$" \!S   5      r%\%RM                  SSSSSS S!S"S#S$.	RO                  5        V Vs0 s H  u  pU \%;  d  M  X_M     snn 5        \(" \"" \%RO                  5       5      5       V Vs0 s H  u  pX_M	     snn r)\)RM                  \!S   RO                  5        V Vs0 s H  u  pX_M	     snn 5        S%r*S&r+S r,SSK-r.\.R^                  " 5       r0\1" \Rd                  Rg                  S'5      S(S5      =(       d    \.R^                  " 5       r4S)r5Sr6S*r7/ S+Qr8\R                  RA                  \S,5      r9\R                  RA                  \S-5      r:S. r;S/ r<S0 r=SWS1 jr>S2 r?S3 r@0 rAS4 rBS5 rCSXS6 jrD " S7 S85      rE\E" 5       rFSYS9 jrGS:rHS; rISZS< jrJ " S= S>\R–                  5      rL\MS?:X  Gañ  \Rœ                  " 5       rO\OR¡                  S@\QSASB9  \OR¡                  SC\QSDSB9  \OR¡                  SESFSG9  \OR¡                  SHSFSISJ9  \OR¡                  SKSFSLSJ9  \OR¡                  SMSFSNSJ9  \OR¥                  5       rS\SR¨                  (       at  \L" \SRª                  \ SO\SR¬                  =(       d    SP 3\SR®                  =(       d    S\SR¨                  SQ9rX\XR#                  \SR²                  5        \R´                  " 5         \SRˆ                  (       a6  \=" \SRˆ                  5        \[" SR\SRˆ                  5        \R´                  " 5         \SR¬                  =(       d    SS\SRª                   3rVS\SR²                  Ssr\r]r^\]S:”  ae  \L" \SRª                  \^-   \ SO\V 3\^(       a  ST\^ 3OSF-   \\SU9rX\XR#                  \]5      r\\]\_" \XRÀ                  5      -  r]\^SV-  r^\\(       d  g\]S:”  a  Md  gggs  snn f s  snn f s  snn f )[a+  imagine.py -- the reef decides for itself what it is building, and pivots (step 2, Oct 23 2026).
Ivy: "It should decide for itself what to build, what it might be building, and pivot. It should imagine it and look at it
creatively each turn."
Each turn Opus LOOKS at the render of the build and writes a notebook entry: what it sees, what it might be becoming,
whether it pivots, what it wants next (in words about the picture: colours, top/bottom, reaching out). Jev then picks the
legal piece that best fits that wish and the taste, from measured candidates that say which coloured piece they join and
where in the build they sit. The notebook is the long memory: Opus reads all of it every turn.
    python3 imagine.py --turns 12 --seed 2       -> runs/imagine_s<seed>/frame_NN.png, notebook.jsonl, log.jsonlé    N)ÚThreadPoolExecutorz/var/tmp/brick_loopz~/.iris_loop_claude)ç333333ë?çö(\�Âõà?ç        )r   g333333ë¿r   )Ú3024Ú3023Ú3700Ú3022Ú3005Ú3004Ú6141Ú3070b)Ú3702Ú3894Ú32524Ú32316Ú3034Ú32017Ú3666Ú3010)r   Ú3020r
   r   r   Ú3710r   Ú2420)	r	   Ú3701r   r   Ú3001r   r   Ú3622r   )r   r   r   Ú2905r   Ú122c01Ú3641)Ú3039Ú3040bÚ3298Ú3665aÚ3747b)Ú3062br   Ú3941Ú4032aÚ4589Ú4740Ú41769aÚ41770a)Ú3069bÚ2412br   Ú3659Ú6091)ÚsmallÚlongÚplateÚbrickÚbeamÚangleÚwheelsÚtyreÚslopeÚroundÚwingÚtileÚarchzlego_colours.jsonÚmenuéG   éH   éF   i)  é   é   éI   i{  iJ  )	z
light greyz	dark greyÚbrownÚgoldÚpurplez	dark pinkzmedium bluez	sand bluezolive greené   é   Úteach_lock_holderÚlocka(  MASTER BUILDER HABITS (from real builders -- break one only for a good reason, and say why):
- Start where the thing STANDS: its feet, base, pedestal or hull. A statue starts at its pedestal, not its torch; details like a torch,
  crown, eyes or antennae come LAST.
- Find the skeleton first: one line per part (body, head, each limb) at the right proportions. Get the big silhouette right before
  any small piece.
- Build up in layers from the bottom, and keep it heavier at the bottom than the top so it can't tip.
- Sturdy before pretty: make the core hold together, then decorate.
- Use symmetry when the thing is symmetric -- if one side gets an arm, the other side probably needs one.
- Some parts are easier made separately and then joined (a head, a wing); it's fine to build one area for a few turns.
- PLAN, then refine (LEGO's own designers build a rough version first and change it as they go): decide the SCALE first -- how many
  studs wide, deep and tall the whole thing is -- then the big masses, then the parts that hang off them, then details.
- Sizes are relative: a brick is a little taller than wide (6:5), three plates stack to one brick, a stud is the unit. A head is
  some fraction of the body; legs are some number of bricks tall. Say those ratios and keep them.
- Think in DEPTH, front to back, not a flat picture: what is in front, what is behind, how thick each part is.
- Bricks hold best when they overlap the joins below them, like a wall.
- DUPLO IS GOOD FOR BULK (Ivy): a Duplo brick is twice as big every way -- one 2x4 Duplo is a whole chunk of body, a trunk, a hill,
  a base. Use it for the big masses and cores, then detail with small pieces. A Duplo brick sits on ordinary studs, and Duplo stacks
  on Duplo; ordinary bricks can't go on top of a Duplo stud yet. Dig for "duplo" to grab some.z9Is it done? Would one more piece make it better or worse?)z-Are there any bricks that don't fit the idea?z Is any colour fighting the idea?zWhat is the build missing most?z$Did the last piece do what I wanted?z	self.jsonzIT.mdc                  ó\   • [        [        5      R                  5       $ ! [         a     gf = f)NÚ )ÚopenÚITÚreadÚOSError© ó    Ú-/home/ivy/projects/brick_reef/reef/imagine.pyÚit_mdrT   I   s   € Ü”R“—‘“Ð	øÜÓ™2Ðús   � ž
+ª+c           
      óØ   • [        [        R                  " [        [        R
                  R                  U S5      5      5      R                  S5      5      $ ! [        [        4 a     gf = f)z-a stopped game nothing was learned from (yet)ú
state.jsonÚ	unwrittenF)
ÚboolÚjsonÚloadrM   ÚosÚpathÚjoinÚgetrP   Ú
ValueError)Úrun_dirs    rS   rW   rW   L   sG   € ä”T—Y’Yœt¤B§G¡G§L¡L°¸,Ó$GÓHÓI×MÑMÈkÓZÓ[Ð	[øÜ”ZÐ Ó.©Ð.ús   �AA ÁA)Á(A)c           
      óÜ  • [         R                  R                  [        SU 5      n[        R
                  " [        [         R                  R                  US5      5      5      n[        [         R                  R                  US5      5       Vs/ s H  n[        R                  " U5      PM     nn[         R                  R                  [         R                  R                  US5      5      (       aQ  [        [         R                  R                  US5      5       Vs/ s H  n[        R                  " U5      S   PM     snO/ n[        X[        [        5       R                  S5      =(       d    [        5      XRR                  S5      UR                  S5      S	9  S
US'   [        R                  " U[        [         R                  R                  US5      S5      [        S9  gs  snf s  snf )zgwrite a stopped game down after all: its memory, and it counts for the teacher and the deck from now onÚrunsrV   únotebook.jsonlú	log.jsonlÚpickedÚ	questionsÚplayerÚ
reflection©rg   rh   FrW   Úw©ÚdefaultN)r[   r\   r]   ÚHERErY   rZ   rM   ÚloadsÚexistsÚrememberÚlistÚ	load_selfr^   Ú	QUESTIONSÚdumpÚstr)ÚrunÚdÚstÚlÚnbre   s         rS   Úremember_laterr{   Q   se  € ä
�‰�‰”T˜6 3Ó'€A¬d¯iªi¼¼R¿W¹W¿\¹\È!È\Ó=ZÓ8[Ó.\¨Ü!%¤b§g¡g§l¡l°1Ð6FÓ&GÔ!HÓ	IÒ!H˜AŒ$�*Š*�QŽ-Ñ!H€BÐ	IÜVX×V]ÑV]×VdÑVdÔeg×elÑel×eqÑeqÐrsð  vAó  fB÷  WCñ  WC¬t´B·G±G·L±LÀÀKÓ4PÔ/QÓRÒ/Q¨!Œd�jŠj˜‹m˜HÔ%Ñ/QÒRð  IK€FÜˆS”dœ9›;Ÿ?™?¨;Ó7×D¼9ÓEÀv×V\ÑV\Ð]eÓVfÐsu×syÑsyð  {Gó  tHò  IØ€B€{�OœTŸYšY r¬4´·±·±¸QÀÓ0MÈsÓ+SÔ]`Óaùò 
JùÚRs   Â G$Ä#G)c                 óè  • SSK nS Vs/ s HH  n[        R                  R                  [        R                  R	                  X5      5      (       d  MF  UPMJ     nnU[        UR                  [        R                  R	                  U S5      5      5       Vs/ s H"  n[        R                  R                  U5      PM$     sn-  n[        UR                  [        R                  R	                  U S5      5      5      oTU(       a#  [        R                  R                  US   5      /O/ -  n[        R                  " SSS	S
U S[        R                  R                  U 5       3/UQ[        R                  [        R                  S9  U(       d  g [        R                  " SSSSSSS[        R                  R	                  [        SS5      /[        0 [        R                  ESSS.E[        [        R                  R	                  [        SS5      S5      [        R                  S9   SSKofR!                  5         gs  snf s  snf ! [         a     N+f = f! [         a  n[#        SUSS9   SnAgSnAff = f)zñcommit what a build made: notebook, moves, state, every frame as .ldr (pictures and 3D regenerate from those), last picture
(Ivy, Oct 23 2026: "Everything it makes is being saved right?" -- it was on disk but almost none of it was committed)r   N)rc   rd   zcands.jsonlrV   z	build.ldrzframe_*.ldrzframe_*.pngéÿÿÿÿÚbashz-cz<git -C "$1" add -- "${@:3}" && git -C "$1" commit -q -m "$2"Ú_z%brick_reef: the reef saved its build )ÚstdoutÚstderrÚflockz-nz/var/tmp/brick_loop/teach.lockÚchrtz--idleÚ0Úpython3Úteacherzteach.pyrL   )ÚHIP_VISIBLE_DEVICESÚCUDA_VISIBLE_DEVICESzlast_train.logrj   )ÚcwdÚenvr€   r�   zgallery failed:T©Úflush)Úglobr[   r\   ro   r]   ÚsortedÚbasenameÚ
subprocessÚPopenÚDEVNULLrm   ÚenvironrM   ÚSTDOUTÚ	ExceptionÚmake_galleryÚbuildÚprint)ÚoutÚlearnr�   ÚfÚkeepÚpngsr–   Úexs           rS   Úsave_runrŸ   Y   sJ  € ó Ù`ó  JÒ`�!Ôdf×dkÑdk×drÑdrÔsu×szÑsz×sÑsð  ADó  tH÷  eI�AÑ`€Dð  JØ¬&°·±¼2¿7¹7¿<¹<ÈÈ]Ó;[Ó1\Ô*]Ó^Ò*] QŒR�W‰W×Ñ˜aÖ Ñ*]Ñ^Ñ^€DÜ�$—)‘)œBŸG™GŸL™L¨¨mÓ<Ó=Ó>€DÖimÌ"Ï'É'×JZÑJZÐ[_Ð`bÑ[cÓJdÑIeÐsuÑAuÀä×Ò�f˜dÐ$bÐdgÐilØ=¼b¿g¹g×>NÑ>NÈsÓ>SÐ=TÐUð^ØX\ð^Üfp×fxÑfxô  BL÷  BTñ  BTòUæ�&ðô 	×Ò˜' 4Ð)IÈ6ÐS[Ð]`ÐbkÔmo×mtÑmt×myÑmyÔz~ð  AJð  LVó  nWð  Xô  ^bð  hmô  km÷  kuñ  kuð  hmð  NPð  jlò  hmÜ $¤R§W¡W§\¡\´$¸	ÐCSÓ%TÐVYÓ ZÔcm×ctÑctò	vðEÛ×/Ñ/Õ1ùò JùÚ^øô Ó‘dÐûô ÓDœEÐ"3°R¸t×DûÐDús=   ‰AH8ÁH8Â)H=ÆBI È$I É
IÉIÉ
I1ÉI,É,I1c                 ó0  • / nU HA  nUR                  SS5      nU(       d  M  U(       a  US   U:w  d  M0  UR                  U5        MC     S[        5        SSR                  U5       SU(       a  US   R                  SS5      OS S	3n[	        [
        R                  S
SSSSSSU/[        0 [        R                  ES[        0ESSSS9n [        R                  " UR                  5      n[        U[        5      (       a  US   OUn[        R                  " [         R"                  " SUS   [         R$                  5      R'                  S5      5      n	U	R                  S5      (       až  U	R                  SS5      R)                  5       (       ay  [+        [,        S5      R/                  U	S   R)                  5       SS S-   5        [
        R                  " SS[0        S [,        /SS!9  [
        R                  " SS[0        S"S#S$S%/SS!9  gg&! [2         a     g&f = f)'z{after a build, it may rewrite IT.md -- it returns the full text and the harness saves it, so it can only touch its own fileÚmight_berL   r}   z8This is your own file, IT.md, which only you write:
---
z)
---
You just finished a build. It went: ú -> z. By the end you loved: Útastezú.
Rewrite IT.md if anything in it is no longer true, or if this build taught you something worth carrying. Or leave it exactly
as it is. Under 4000 characters, your own voice. Answer ONLY with JSON: {"changed": true|false, "it_md": "<the full text>"}Úclaudeú-pú--modelÚopusú--output-formatrY   ú--ÚCLAUDE_CONFIG_DIRTéX  ©r‰   rŠ   Úcapture_outputÚtextÚtimeoutú\{.*\}Úresultr   ÚchangedrT   rj   Nip  Ú
Úgitz-CÚadd©r­   Úcommitz-qz-mz<brick_reef: IT.md rewritten by the reef itself after a buildF)r^   ÚappendrT   r]   Ú_claude_retryr�   rv   ÚWORKr[   r“   ÚCFGrY   rn   r€   Ú
isinstancerq   ÚreÚsearchÚSÚgroupÚstriprM   rN   Úwriterm   r•   )
ÚmeÚnotebookÚseenÚeÚmbÚqÚprw   ÚrÚas
             rS   Ú
rewrite_itrÌ   m   sñ  € à€DÛˆØ�U‰U�:˜rÓ"ˆßˆ2–t˜t B™x¨2�~°·±¸B¶ñ ðäƒ€	ð 
%à%+§[¡[°Ó%6Ð$7Ð7OÖqyÐPXÐY[ÑP\×P`ÑP`ÐahÐjlÔPmð  @Bð  PCð C~ð		A€Aô 	”j—n‘n x°°yÀ&ÐJ[Ð]cÐeiÐklÐ&mÔswØCœbŸj™jÐCÐ*=¼sÑCÐTXÐ_cÐmpñ	r€AðÜ�JŠJ�q—x‘xÓ ˆ¬z¸!¼T×/BÑ/B a¨¢eÈ !Ü�JŠJ”r—y’y ¨A¨h©K¼¿¹Ó>×DÑDÀQÓGÓHˆØ�5‰5�×Ñ §¡ g¨rÓ 2× 8Ñ 8× :Ñ :Ü”�S‹M×Ñ  '¡
× 0Ñ 0Ó 2°5°DÐ 9¸DÑ @ÔAÜ�NŠN˜E 4¬¨u´bÐ9È$ÒOÜ�NŠN˜E 4¬¨x¸¸tð  FDð  Eð  VZò  [Øàøô Ó�dØð ús   ÃD;H È
HÈHc           
      óp  • SSK JnJn  U (       d  SSS.$ [        R                  " U  Vs/ s H  o3R
                  PM     sn5      n[        R                  " U  Vs/ s H  o3R                  PM     sn5      nXTSS2S4   -  R                  S5      UR                  5       -  n[        R                  " U  Vs/ s H  o3R                  PM     sn5      owSS2S4   R                  5       nU" XwSS2S4   US-   :      V	s/ s H  n	[        U	SS 5      PM     sn	5      R                  n
U" US   US	   5      oºR                  S
:”  a   U
R                  S5      R                  U5      OU
R!                  U5      S:  n[#        U5      UR%                  5       ['        US   U-
  5      S.nU(       a  SUS'   U$ U
R                  S
:”  aU  [        R(                  " U
R*                  R-                  U
R*                  R/                  U5      5      R0                  S   5      O,[        R(                  " U
R2                  R0                  S   5      n[        R(                  " US   US   -
  US	   US	   -
  S/5      oúR!                  U5      S-  nU[        R4                  " [6        [&        5      -  U[        R4                  " [8        [&        5      -  nn[;        U5      [;        U5      :¼  a
  US:”  a  SOSO	US:”  a  SOSnUR=                  U[?        ['        U5      S	5      S9  SU SUS    S3US'   U$ s  snf s  snf s  snf s  sn	f )z|the stability check itself (see Imagine.stability), on bare meshes in our frame (mm, z up), so old builds can be checked toor   )Ú
MultiPointÚPointTrL   )ÚstableÚsentenceNé   gš™™™™™Ù?é   é   gš™™™™™é¿çš™™™™™é?)rÐ   ÚcomÚheightz,It stands up on its own the way it sits now.rÑ   r   é   zto the rightzto the leftz
toward youzaway from you)ÚwayÚstudszWARNING: it would FALL OVER z& the way it sits now -- its weight is rÚ   zÔ studs past the part touching the ground. You can keep building, but it can't be finished until it stands: widen or extend what it stands on, add weight on the other side, take off what overhangs, or reorient it.) Úshapely.geometryrÎ   rÏ   ÚnpÚconcatenateÚ
area_facesÚvstackÚtriangles_centerÚsumÚverticesÚminÚtupleÚconvex_hullÚareaÚbufferÚcontainsÚdistancerX   ÚtolistÚfloatÚarrayÚexteriorÚinterpolateÚprojectÚcoordsÚcentroidÚasarrayÚRIGHTÚTOWARDÚabsÚupdater9   )ÚmeshesrÎ   rÏ   ÚmÚAÚCrÖ   ÚVÚz0ÚvÚfootÚptÚinsider™   Únearrw   ÚfarÚlrÚfbrÙ   s                       rS   Ústandr  †   sØ  € ç2Þ T°rÑ:Ð:Ü
�Š©fÓ5ªf¨Ÿœ©fÑ5Ó6€A¼B¿IºIÑciÓFjÒciÐ^_×GYÔGYÑciÑFjÓ<k¸Ø’�D�‰z‰>×
Ñ
˜qÓ
! A§E¡E£GÑ
+€CÜ
�	Š	¡vÓ.¢v !—:”:¡vÑ.Ó/€Aº¸1¸±g·k±k³m°Ù¨Q²°A°©w¸¸c¹Ñ/AÒ-BÓCÒ-B¨”u˜Q˜r ˜U–|Ñ-BÑCÓD×PÑP€DÙ	ˆs�1‰v�s˜1‘vÓ	€BÏ9É9ÐWXË=¨¯©°TÓ):×)CÑ)CÀBÔ)GÐ^b×^kÑ^kÐlnÓ^oÐruÑ^u Ü˜&“\¨#¯*©*«,Ä%ÈÈAÉÐQSÉÓBTÑ
U€CÞØHˆˆJ‰Øˆ
ØW[×W`ÑW`ÐcdÓWdŒ2�8Š8�D—M‘M×-Ñ-¨d¯m©m×.CÑ.CÀBÓ.GÓH×OÑOÐPQÑRÔSÔjl×jrÒjrÐsw÷  tAñ  tA÷  tHñ  tHð  IJñ  tKó  kL€DÜ
�Š�#�a‘&˜4 ™7Ñ" C¨¡F¨T°!©WÑ$4°cÐ:Ó;€AÇ=Á=ÐQSÓCTÐWXÑCX¸SØ”—’œE¤5Ó)Ñ)¨1¬r¯zªz¼&Ä%Ó/HÑ+Hˆ€BÜ;>¸r»7ÄcÈ"ÃgÓ;M˜R !›V‰>©ÐdfÐijÓdjÑT`Ðp€CØ‡J�J�3œe¤E¨#£J°Ó2€JÑ3Ø5°c°UÐ:`ÐadÐelÑamÐ`nð osð t€Cˆ
�Oð €Jùò# 6ùÒFjùâ.ùÚCs   ©L$ÁL)Â4L.Ã;L3c                 óÀ  • U [         ;   a	  [         U    $  [        [        R                  R	                  U 5      R
                  R                  SS 5      n[        R                  R	                  U 5      R
                  R                  S   n[        US   S-  S5      [        US   S-  S5      pCUS SUS S3/nUR                  US	:  a  S
O	US:  a  SOS5        US:¼  a  US::  a  UR                  S5        O;US:¼  a  US:¼  a  UR                  S5        OUS::  a  US::  a  UR                  S5        SR                  U5      nU[         U '   U$ ! [         a    Sn Nf = f)zmplain words for a piece's real size, from its geometry (so 'a long thin plate' finds Plate 1 x 8, not a clip)NrÒ   r   rØ   rÓ   Úgz by z studsé   zflat and thin, plate heighté   zbrick heightÚtallrÔ   ç      ø?z(long and thin, a stick or beam or branchrH   z"wide and broad, a base or platformç333333ó?ztiny, one studú, rL   )Ú_SHAPErŽ   ÚplayÚGÚfreshÚmeshÚextentsr9   r¸   r]   r•   )ÚnrÆ   Úhrj   ry   Úwordsr™   s          rS   Úshape_wordsr  ž   s8  € àŒFƒ{œ6 !™9Ð$ð	Ü”4—6‘6—<‘< “?×'Ñ'×/Ñ/°°Ð3Ó4ˆ¼$¿&¹&¿,¹,Àq»/×:NÑ:N×:VÑ:VÐWXÑ:Y°aÜ�Q�q‘T˜A‘X˜qÓ!¤5¨¨1©°©°1Ó#5ˆ1Ø�a�5˜˜Q˜q˜E Ð(Ð)ˆØ�‰°a¸!³eÑ2ÐSTÐWYÓSYÁÐ_eÔfØ�‹6�a˜3“h §¡Ð-WÕ XØ�!‹V˜˜Q› §¡Ð-QÕ RØ�#‹X˜!˜s›( E§L¡LÐ1AÔ$BØ�i‰i˜Óˆà„Fˆ1�I˜C�Zøô Ó˜B’cÐús   •D.E ÅEÅEc                  ó˜   • [         R                  " [        [        5      5      $ ! [        [
        4 a    / [        [        5      S.s $ f = f)N)Úbuildsrf   )rY   rZ   rM   ÚSELFrP   r_   rq   rs   rQ   rR   rS   rr   rr   ¬   s3   € Ü—	’	œ$œt›*Ó%Ð	%øÜ”ZÐ ÓU°BÄTÌ)Ã_Ñ)UÒ"UÐUús   �"$ ¤"A	ÁA	c                 ó¢  • [        5       n/ nU HA  nUR                  SS5      n	U	(       d  M  U(       a  US   U	:w  d  M0  UR                  U	5        MC     US    V
s/ s H  oªS   U :w  d  M  U
PM     sn
U [        R                  " S5      Xw(       a  US   OSUSS  Vs/ s H  oˆR                  S	S5      PM     sn[        [        R                  " S
 U 5       5      R                  5       5      [        S U 5       S5      S./-   US'   U Vs/ s H  o»[        :w  d  M  UPM     snUS'   U(       aM  UR                  S0 5      R                  U/ 5      R                  U [        R                  " S5      USS US.5        [        S-   n[        R                  " U[        US5      SS9  [         R"                  " U[        5        gs  sn
f s  snf s  snf )zlafter a build: what it became, in order, how it ended, what it loved -- so the next build is the same playerr¡   rL   r}   r  rv   z%b %d %-I:%M %péýÿÿÿNr£   c              3   ót   ^#   • U  H-  m[        U4S  j[        R                  5        5       S5      v •  M/     g7f)c              3   ó<   >#   • U  H  u  pTU;   d  M  Uv •  M     g 7f©NrQ   )Ú.0Úkrý   rÉ   s      €rS   Ú	<genexpr>Ú%remember.<locals>.<genexpr>.<genexpr>¸   s   øé € Ð1XÂ¹¸ÐQRÐVWÑQW·!±!Âùs   ƒ“	ÚotherN)ÚnextÚKINDSÚitems)r   rÉ   s    @rS   r"  Úremember.<locals>.<genexpr>¸   s+   øé € Ð+sÒlrÐgh¬DÔ1XÄÇÁÄÓ1XÐZa×,bÐ,bÒlrùs   ƒ58c              3   ór   #   • U  H-  oR                  S 5      (       d  M  UR                  S5      v •  M/     g7f)ÚdoneÚdone_whyN©r^   ©r   rÆ   s     rS   r"  r(  ¸   sn   é € ð  VLò  rzð  mn÷  ~Cñ  ~Cð  DJ÷  ~Kó  Whð  WX÷  W\ñ  W\ð  ]g÷  Whð  Whò  rzùs   ‚7Ÿ7)rv   ÚwhenÚbecameÚfinalÚlovedÚmade_ofr+  rf   Úfriendséüÿÿÿ)rv   r.  r/  rh   z.tmprj   rÓ   ©Úindent)rr   r^   r¸   ÚtimeÚstrftimeÚdictÚcollectionsÚCounterÚmost_commonr%  ÚDONE_QÚ
setdefaultr  rY   rt   rM   r[   Úreplace)rv   rÄ   rf   re   rg   rh   rÃ   rÅ   rÆ   rÇ   ÚbrÈ   Útmps                rS   rp   rp   ¯   sÇ  € ä	‹€B˜R�dÛˆØ�U‰U�:˜rÓ"ˆßˆ2–t˜t B™x¨2�~°·±¸B¶ñ ð  " (š|Ó?š|˜!°©x¸3©—A™|Ñ?ØœDŸMšMÐ*;Ó<ÈÕcgÐW[Ð\^ÒW_ÐmoØ.6°r°s©mÓ<ªm¨—%‘%˜ Ö$©mÑ<Üœ×+Ò+Ñ+sÑlrÓ+sÓs×Ñó  Bó  Cô  QUñ  VLñ  rzó  VLð  NRó  QSñDTð CUñ U€B€x�Lñ #,Ó;¢)˜Q´F©{—q¡)Ñ;€B€{�OÞØ
�‰�i Ó$×/Ñ/°¸Ó;×BÑBÈ3ÔX\×XeÒXeÐfwÓXxð  EIð  JLð  JMð  ENØR\ñD^ô 	_ä
�‰-€CœŸš 2¤t¨C°£~¸aÒ@Ä"Ç*Â*ÈSÔRVÕBWùò @ùâ<ùâ;s   ÁGÁ+GÂGÄGÄGc                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	Ú	_WholeBoxé¾   zôthe first piece can be ANY piece in the box (Ivy, Oct 23 2026: "It should be able to pick any piece in the box for the first piece"):
the baseplates plus everything in its bin, including what's been added from the catalog since the game startedc                 ó¬   • [        [        R                  5      [        R                   Vs/ s H  o[        R                  ;  d  M  UPM     sn-   $ s  snf r  )rq   r  Ú
BASEPLATESÚPALETTE©Úselfr  s     rS   Ú_allÚ_WholeBox._allÁ   s7   € œ4¤§¡Ó0¼t¿|º|Ó3hº|¸!ÔX\×XgÑXgÑOg·A¹|Ñ3hÑhÐhùÒ3hs   «AÁAc                 ó4   • [        U R                  5       5      $ r  )ÚiterrJ  ©rI  s    rS   Ú__iter__Ú_WholeBox.__iter__Â   s   € œt D§I¡I£KÓ0Ð0rR   c                 ó&   • XR                  5       ;   $ r  )rJ  rH  s     rS   Ú__contains__Ú_WholeBox.__contains__Ã   s   €  a¯9©9«;Ñ&6Ð6rR   c                 ó4   • [        U R                  5       5      $ r  )ÚlenrJ  rN  s    rS   Ú__len__Ú_WholeBox.__len__Ä   s   € œc $§)¡)£+Ó.Ð.rR   rQ   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rJ  rO  rR  rV  Ú__static_attributes__rQ   rR   rS   rC  rC  ¾   s   † ñvâhÚ0Ú6Ý.rR   rC  c                 óz  • SR                  S U R                  S/ 5      SS  5       5      nSR                  S [         5       5      nU R                  SS5       S	[        5        S
U SU(       a  SU-   S-   OS SU SSR                  [        5       S3n[        [        R                  SSSSSSSU/[        0 [        R                  ES[        0ESSSS9n [        R                  " UR                  5      n[        U[         5      (       a  US   OUn[        R                  " ["        R$                  " SUS   ["        R&                  5      R)                  S 5      5      nUR                  S!5      [        ;   a3  [+        UR                  S"S5      5      R-                  5       [.        ;   a  U$ g! [0         a     gf = f)#zjit asked: 'Show me my memory before I place the first piece' -- so it picks its own first piece and colourr³   c              3   ó¸   #   • U  HP  nS SR                  S US    5       5      -   UR                  S5      (       a  SUR                  S5       3OS-   v •  MR     g7f)ú- r¢   c              3   óN   #   • U  H  oR                  S 5      S   SS v •  M     g7f©Ú.r   Né2   ©Úsplit©r   Úxs     rS   r"  Ú)choose_first.<locals>.<genexpr>.<genexpr>È   s!   é € Ð(SÂ{À!¯©°«°a©¸¸"Õ)=Â{ùó   ‚#%r/  r2  ú | made of rL   N©r]   r^   ©r   r@  s     rS   r"  Úchoose_first.<locals>.<genexpr>È   sz   é € ð :Ú8˜ð ˜VŸ[™[Ñ(SÀqÈÂ{Ó(SÓSÑSÐ{|÷  |Añ  |Að  BK÷  |Lñ  |LÐYdÐef×ejÑejÐktÓeuÐdvÑWwð  RTö  UÚ8ùs   ‚AAr  éôÿÿÿNc              3   ó–   #   • U  H?  o S [         R                  R                  R                  X5       S[	        U5       S3v •  MA     g7f)ú: ú (Ú)N©r  ÚCXÚNAMESr^   r  ©r   r  s     rS   r"  rn  Ê   s<   é € ÐaÒS`Èa�s˜"œTŸW™WŸ]™]×.Ñ.¨qÓ4Ð5°R¼ÀA»Ð7GÀqÕIÒS`ùs   ‚AA	Úwho_you_arerL   z

Your own file, IT.md:
z

Your past builds:
z%

You are about to start a new build.z Someone asked you to build: "z.". Pick a first piece that starts it YOUR way.z> Choose the very first piece and its colour yourself. Pieces:
z

Colours: r  zy
Answer ONLY with JSON: {"piece": "<one of the part numbers>", "colour": "<one of the colours>", "why": "<one sentence>"}r¤   r¥   r¦   r§   r¨   rY   r©   rª   Tr«   r¬   r}   r°   r±   r   ÚpieceÚcolour)r]   r^   ÚFIRST_CHOICESrT   ÚMENUr¹   r�   rv   rº   r[   r“   r»   rY   rn   r€   r¼   rq   r½   r¾   r¿   rÀ   ru   ÚlowerÚ	RECOLOURSr•   )	rÃ   ÚrequestÚpastÚoptsrÈ   rÉ   rw   rÊ   rË   s	            rS   Úchoose_firstr‚  Æ   s¼  € à�9‰9ñ :Ø Ÿf™f X¨rÓ2°3°4Ñ8ó:ó :€Dà�9‰9ÑaÕS`ÓaÓa€DØ�V‰V�M 2Ó&Ð'ð (ô ƒ€	ð 
ð €ð $ö HOÐ%EÈÑ%Oð  SCò  &Cð  UWð  $Xð XØ€ð 
Ø
�)‰)”D‹/Ð	ð {ð	~€Aô 	”j—n‘n x°°yÀ&ÐJ[Ð]cÐeiÐklÐ&mÔswØCœbŸj™jÐCÐ*=¼sÑCÐTXÐ_cÐmpñ	r€AðÜ�JŠJ�q—x‘xÓ ˆ¬z¸!¼T×/BÑ/B a¨¢eÈ !Ü�JŠJ”r—y’y ¨A¨h©K¼¿¹Ó>×DÑDÀQÓGÓHˆØ�5‰5�‹>œ]Ó*¬s°1·5±5¸À2Ó3FÓ/G×/MÑ/MÓ/OÔS\Ó/\ÐefÐ^fàøô Ó�dØð ús   ÃCF- Æ-
F:Æ9F:uÃ  HOW GOOD CHARADES PLAYERS DO IT (and how emoji get misread):
- Beats, not bursts: one clear idea per step, and a step pair is a sentence -- POINT at a piece (ðŸ‘‡), then REACT (ðŸ‘� right, ðŸ‘€ look
  here, â�Œ wrong, ðŸ¤� almost / smaller, ðŸ‘� bigger, â†•ï¸� taller, â†”ï¸� wider, ðŸ”„ keep going on that thought). Don't throw everything at once.
- Their guesses are your subtitles: when a guess is CLOSE, point at THEM -- ðŸ«µ then ðŸ”¥ or ðŸ¤� -- and build on it; when it's wrong, â�Œ
  once, then show the part that should change their mind. A rhyme or near-sound: ðŸ‘‚.
- If the secret is two words, set it up the charades way: âœŒï¸� (two words), then 1ï¸�âƒ£ or 2ï¸�âƒ£ before you point at the part for that word.
  Act the easiest, most visual part first.
- Show the context, not just the object: the rain around an umbrella, the water around a boat -- an emoji of the SURROUNDINGS or of
  what you DO with it is a fair hint; the thing's own emoji is not.
- Repeat a gesture that's working; change only what isn't. A clear repeated gesture beats a new clever one.
- Hands, arrows and concrete objects are read the same way by almost everyone. FACES are not (people disagree on whether the same
  face is happy, neutral or upset about one time in four) and symbols from code books (zodiac, kanji) are as ambiguous as random --
  avoid both. Be creative with HANDS: ðŸ¤² cupping, ðŸ«³ pressing down, ðŸ«´ offering, ðŸ¤Œ 'this exact bit', ðŸ‘‹ 'over here', ðŸ™Œ 'yes!'.c                 ó”   • [        S5       H  nU " U0 UD6s  $    g! [         a!    US:X  a  e [        R                  " S5         M:  f = f)zÝstart Pin's claude process, waiting out a Claude Code self-update (Oct 24 2026: the binary was replaced at 12:50 AM, mid-game,
and the turn died on 'No such file or directory: claude'). Up to 30 s, then give up as before.rG   r  rB   N)ÚrangeÚFileNotFoundErrorr7  Úsleep)ÚfnrË   ÚkwÚis       rS   r¹   r¹   ð   sC   € ô �1ŽXˆÙ˜�L˜R‘LÒ ò øä ó 	Ø�A‹v�uÜ�JŠJ�q�Mð	ús   �œ'AÁAc                 ó¬  • SSK n[        R                  R                  SS5        [        R
                  R                  S[        R
                  R                  S5      5        SSKnUS:X  a  UR                  UR                  4OUR                  UR                  4nSnU H  nU" U [        U5      U5      s  $    Ue! [         a  n	U	n Sn	A	M.  Sn	A	ff = f)af  the small side calls (bubbles, the clone judge) -- Gemini or Haiku, whichever answers (Ivy, Oct 23 2026: "We could route thru
gemini to offgas the usage"). Haiku was rate-limited nearly every turn that day, so the bubbles were blank. Gemini 3.5-flash-lite
answers in ~1 s on the free tier (about 20 calls a minute across both keys before its quota stops it).r   NÚHAIKUúclaude-haiku-4-5-20251001ú~/projects/brick_reef/favoritesÚgemini)Úgemr[   r“   r>  Úsysr\   ÚinsertÚ
expanduserÚhaikuÚaskrq   r•   )
r®   ÚimagesÚ
max_tokensÚpreferr�  ÚHÚorderÚlastr›   rž   s
             rS   Ú	small_askr›  ù   s¤   € ó Ü‡J�J×Ñ˜'Ð#>Ô?Ü‡H�H‡O�O�A”r—w‘w×)Ñ)Ð*KÓLÔMÓO`Ø &¨(Ó 2ˆS�W‰W�a—e‘eÑ¸¿¹ÀÇÁÐ8H€EØ€DÛˆÙ�dœD ›L¨*Ó5Ò5ñ ð €Jøô Ó) r¦ûÐ)ús   Â#B<Â<
CÃCÃCc                   óÎ  ^ • \ rS rSrSAU 4S jjrS rS rS rS rSBS jr	S r
S	 rS
 rS rS rS rS rS rSCS jrS rSDS jrSES jrS rS rS rS rS rS rS rSFS jrS rS rSr S r!S  r"SGS! jr#S" r$S# r%S$ r&SHS% jr'SES& jr(S' r)S( r*SIS* jr+S+ r,SDS, jr-S- r.S. r/S/ r0S0 r1S1 r2S2 r3SJS3 jr4S4 r5S5 r6S6 r7S7 r8S8 r9S9 r:SKS: jr;U 4S; jr<S< r=S= r>S> r?S? r@S@ rAS)rBU =rC$ )LÚImaginei  c           
      ój  >• [         TU ]  USU5        / U l        / U l        U=(       d    SR	                  5       S S =(       d    S U l        U(       as  SS KnUR                  U5      nUR                  U l        UR                  U l	        U R                  U R                  l        U R                  5       S   R                  SSS.nU=(       d    SR	                  5       S S =(       d    S U l        [        U R                  5      U l        / U l        S U l        ['        5       o“=(       d(    [)        X�R
                  =(       d    U R                  5      nU(       Ga.  U(       Gd&  U R                  5       S   o R                  R*                  R,                  R/                  U
5        [1        5       U R                  l        [4        R6                  " US	   5      n[8        US
   R;                  5          Ul        U R                  R*                  R?                  U5        U R                  RA                  5         X0l!        [E        SUS
    S[F        RH                  RJ                  RM                  US	   5       SURM                  S5       3SS9  [F        RN                  " U R                  5       5      S   U l(        ['        5       U l)        [U        U RR                  RM                  S5      =(       d    [V        5      U l,        [Z        R\                  R_                  US-   5      U l0        / U l1        U Re                  5         SU l3        SU l4        SU l5        [m        [n        5       Vs/ s H  oÀRq                  S5      PM     snU l9        SS K:oÝRw                  5       U l<        SS0U l=        SS0U l>        SU l?        g s  snf )NÚtidyrL   éx   r   Úredzthe big brush)ry  rz  Úwhyé<   ry  rz  zFIRST PIECE (its choice): Ú ú -- r¢  Tr‹   rÓ   rf   iè  FÚIvyÚtokens)@ÚsuperÚ__init__rÄ   ÚmovesrÁ   r  ÚfitsÚ
load_boardr  Ú_g_undoÚ_undoÚundoÚbodiesÚnameÚsecretrX   Ú
pictionaryÚguessesÚsolvedrr   r‚  ÚasmÚpartsÚremoveÚsetÚusedr  r  r~  r}  rz  ÚplaceÚ	reconcileÚfirst_choicer˜   r  ru  rv  r^   Ú
floor_gridÚ	floor_offrÃ   rq   rs   rf   rÜ   ÚrandomÚdefault_rngÚdealÚhandÚrefill_handfulÚcooprg   Ú
human_noter„  ÚHANDÚdrawÚ
human_handÚ	threadingÚRLockrJ   r§  Úreef_tokensÚ_study)ÚsÚseedÚoutdirÚfirstr  r²  Ústartr«  r@  rÃ   Úp0r›   r   rÊ  Ú	__class__s                 €rS   r©  ÚImagine.__init__  sã  ø€ Ü‰Ñ˜˜v vÔ.¸R°´
È2ÀÄÐ\c×\iÐgi×[pÑ[pÓ[rÐswÐtwÐ[x÷  \Að  }AÈqÌyÞó Ø—‘ Ó&ˆAØ—#‘#ˆAŒC 1§9¡9�q”y¸¿¹¨a¯c©c¬hØŸh™h›j¨™m×0Ñ0¸EÈ/ÑZˆEð —L˜b×'Ñ'Ó)¨#¨2Ð.×6°$ˆŒÄtÈAÏHÉHÃ~¸¼ÐceÐWXÔW`ÐrvÐghÔgoÜ‹[ˆ×"R¬<¸¿I¹I×<QÈÏÉÓ+R˜%ßŸØ—‘“˜A‘ˆB§¡§¡§¡× 4Ñ 4°RÔ 8ÄSÃU¸!¿#¹#¼(Ü—’˜˜g™Ó'ˆA´I¸eÀH¹o×>SÑ>SÓ>UÑ4V¨¬ÐXY×X[ÑX[×X_ÑX_×XeÑXeÐfgÔXhÐjk×jmÑjm×jwÑjwÔjyØ"ŒN¤EÐ,FÀuÈXÁÐFWÐWXÔY]×Y`ÑY`×YfÑYf×YjÑYjÐkpÐqxÑkyÓYzÐX{Ð{ð  AF÷  AJñ  AJð  KPó  AQð  @Rð  +Sð  [_ò  %`Ü—o’o a§h¡h£jÓ1°!Ñ4ˆŒÜ‹{ˆŒ¬$¨q¯t©t¯x©x¸Ó/D×/QÌ	Ó*R˜AœKô
 —‘×&Ñ& t¨d¡{Ó3ˆŒ¸b°Q´VÀ!×BRÑBRÔBTØˆŒ 5˜œ¸¨!¬,ÔdiÔjnÔdoÓLpÒdoÐ_`ÏVÉVÐTYÎ]ÑdoÑLp¸Q¼\Û§?¡?Ó#4˜!œ&À(ÈAÀ°a´hØ! 1˜ˆŒ°% q¥xùò Mqs   ÍN0c                 óº  • US   nUS   S:X  a$  UR                  UR                  US      S   5      $ US   S;   a$  UR                  UR                  US      S   5      $ US   S:X  a>  [        R                  " U[        R
                  " UR                  5      US      5      S   $ US   S:X  a  UR                  $ US   S	:X  a  [        R                  " U5      US      $ US   S
:X  a*  UR                  [        R                  US      -  S S2S4   $ UR                  US      o2R                  US   5      UR                  US   5      US   -  US   -  S-  -   $ )NrÓ   r   ÚstudrÒ   Úc©ÚsocketÚliftÚsnapÚfloorÚbetweenr7   rH   ÚaxisÚface_len)ÚworldrÚ   Úsocketsr  Ú
snap_worldÚ	new_snapsr±  rÿ   Úbetween_pointsÚTÚ_TYRE_SLOTSÚholesÚ	world_dir)rÎ  rØ  r  Úhls       rS   Ú
conn_pointÚImagine.conn_point%  sV  € Øˆa‰DˆØˆQ‰4�6‹> !§'¡'¨!¯'©'°!°A±$©-¸Ñ*<Ó"=Ð=ØˆQ‰4Ð%Ó%¨a¯g©g°a·i±iÀÀ!Á±oÀcÑ6JÓ.KÐ'KØˆQ‰4�6‹>¤$§/¢/°!´T·^²^ÀAÇFÁFÓ5KÈAÈaÉDÑ5QÓ"RÐSTÑ"UÐUØˆQ‰4�7‹? 1§4¡4˜KØˆQ‰4�9Ó¤T×%8Ò%8¸Ó%;¸A¸a¹DÑ%AÐAØˆQ‰4�6‹> 1§3¡3¬×)9Ñ)9¸!¸A¹$Ñ)?Ñ#?ÀÀ!ÀÀQÀÑ"GÐGØ�W‰W�Q�q‘T‰]ˆ§7¡7¨2¨c©7Ó#3°a·k±kÀ"ÀVÁ*Ó6MÐPQÐRSÑPTÑ6TÐWYÐZdÑWeÑ6eÐhiÑ6iÑ#iÐirR   c                 óè   • US   S:X  a$  SS[        US   S   5      [        US   S   5      /$ US   U R                  R                  R                  R	                  US   5      /[        USS  5      -   $ )Nr   rÝ  r}   rÒ   rÓ   )rë   r  r¶  r·  Úindexrq   )rÎ  rØ  s     rS   Úconn_idÚImagine.conn_id.  sl   € ØˆQ‰4�7‹? G¨R´°q¸±t¸A±w³ÄÀqÈÁtÈAÁwÃÐ#PÐPØ�!‘�a—c‘c—g‘g—m‘m×)Ñ)¨!¨A©$Ó/Ð0´4¸¸!¸"¸³;Ñ>Ð>rR   c                 óˆ  • US   S:X  an  [         R                  " U R                  5       U R                  5      S   nS[         R                  " US   US   U/5      [        US   5      [        US   5      44$ [        US   U R                  R                  R                  [        US   5         /[        USS  5      -   5      $ )Nr   rÝ  rÒ   rH   rÓ   )r  r¾  r°  r¿  Ú	FloorHostrë   rä   r  r¶  r·  Úintrq   )rÎ  Úcidrü   s      rS   Úconn_from_idÚImagine.conn_from_id1  sÞ   € Øˆq‰6�WÓÜ—’ §¡£¨Q¯[©[Ó9¸!Ñ<ˆBÀgÌtÏ~Ê~Ð_bÐcdÑ_eÐgjÐklÑgmÐoqÐ^rÓOsÔv{Ð|ð  ABñ  }Có  wDô  FKð  LOð  PQñ  LRó  FSð  vTð  FUð  ?UÜ�c˜!‘f˜aŸc™cŸg™gŸm™m¬C°°A±«KÑ8Ð9¼DÀÀQÀRÀ»MÑIÓJÐJrR   c                 ó  • U[        U R                  U5      5      [        U R                  R                  R
                  5      [        U R                  R                  R
                  S   5      4nU R                  R                  S0 5      nX4;   a  XC   $ [        R                  R                  U5      n[        [        UR                  5      [        UR                  5      [        UR                  5      S5      n/ nSU l        US   S:X  a  [        US5      n[#        [%        US5      5       Hì  nS	 Hã  n	U R'                  X!X‰5      n
U
(       d  M  U
S   o»R(                  R*                  nUR-                  U R                  U5      X‰UR.                  R1                  5       UR(                  R2                  R5                  S5      R1                  5       US   R1                  5       US   R1                  5       S
.5        U R                  R6                  " U
6   Må     Mî     SU l        0 nU HŸ  nUR                  [        [8        R:                  " [8        R<                  " US   5      SS2S4   S5      5      [        [8        R:                  " [8        R<                  " US   5      SS2SS24   R?                  5       S5      5      4U5        M¡     [        U5      S:”  a  URA                  5         [C        URE                  5       5      XC'   XC   $ )zxevery legal way `card` fits at connector c (each of its sockets/holes/studs x each quarter turn), cached per build stater}   Ú_ghost_cacherÓ   Tr   rÜ  é   é   ©r   ç     €V@ç     €f@g     àp@©ÚconnÚidxÚspinræ  ÚcentreÚloÚhiFræ  NrH   i�  )#rä   rï  rU  r  r¶  r·  ÚidÚ__dict__r>  r  r  r  Úmaxrâ  rè  rÚ   Úquickr„  rã   Útry_mover  Úboundsr¸   ræ  rê   râ   Úmeanr¯  rÜ   r9   rì   ÚravelÚclearrq   Úvalues)rÎ  ÚcardrØ  ÚkeyÚcacheÚnewÚslotsr™   r   r  rÊ   ÚpartÚbbÚuniqrý   s                  rS   Úghost_variantsÚImagine.ghost_variants5  s‡  € à”U˜1Ÿ9™9 Q›<Ó(¬#¨a¯c©c¯g©g¯m©mÓ*<¼bÀÇÁÇÁÇÁÈrÑARÓ>SÐTˆØ—
‘
×%Ñ% n°bÓ9ˆØ‹< ¡
Ð*Ü�f‰f�l‰l˜4Ó ˆ¬#¬c°#·+±+Ó.>ÄÀCÇIÁIÃÔPSÐTW×T]ÑT]ÓP^Ð`aÓ*b %ÐjlÐdgÐx|ÐnoÔnuØˆQ‰4�6‹>¤3 u¨b£>˜5Üœ˜U B›Ö(ˆCÛ1�Ø—J‘J˜q¨Ó2�ß�1Ø˜Q™4�D§i¡i×&6Ñ&6 Ø—J‘J¨¯	©	°!«¸SÐUY×U[ÑU[×UbÑUbÓUdÐpt×pyÑpy÷  qCñ  qC÷  qHñ  qHð  IJó  qK÷  qRñ  qRó  qTØ&(¨¡e§l¡l£n¸B¸q¹E¿L¹L»Nñ Lô MØNOÏcÉcÏhÊhÐXYËló 2ñ )ð ˆŒØˆÛˆAØ�O‰OœU¤2§8¢8¬B¯HªH°Q°s±VÓ,<¸R¸a¸RÀ¸UÑ,CÀQÓ#GÓHÌ%ÔPR×PXÒPXÔY[×YaÒYaÐbcÐdgÑbhÓYiÐjlÐklÐjlÐnpÐopÐnpÐjpÑYq×YwÑYwÓYyÐ{|ÓP}ÓJ~Ðð  BCö  Dñ äˆu‹:˜Ó˜UŸ[™[œ]Ü˜$Ÿ+™+›-Ó(ˆ‰
°±Ð*;rR   c                 ó  ^ ^^• [         R                  " T[        5      m/ nT R                     U(       að  T R	                  5        V	s/ s H  o™S   S;   d  M  U	PM     n
n	Ubl  S[        U5      s=::  a-  [        T R                  R                  R                  5      :  a/  O  O,T R                  R                  R                  [        U5         OSmTb5  [        U4S jU
 5       5      (       a  U
 V	s/ s H  o™S   TL d  M  U	PM     n
n	[        U
UU 4S jS9S[        US5       nOB[        T R	                  5        V	s/ s H  o•(       d  U	S   S	:w  d  M  U	PM     sn	UU 4S
 jS9SU nT R	                  5        V	s/ s H  o™S   S;   d  M  T R                  U	5      PM      nn	U(       aK  [        UU4S jS9oÝR                  5       oíSS [         R                   " TSS USS -
  S-  5      S-  -   USS& OTR                  5       nT R"                  R%                  S0 5      n['        U5       GHè  u  nn	[        [         R(                  R+                  T R                  U	5      T-
  5      5      nU[-        T R/                  U	5      5      [        T R                  R                  R                  5      [1        T R                  R                  R                  S   5      4nUS:X  d  UU;   a  T R3                  X5      nGO/ nST l        [7        S5       Hî  nS HÜ  nT R9                  X‘UU5      nU(       d  M  US   R:                  R<                  nT R/                  U	5      UUUS   R>                  RA                  5       US   R:                  RB                  RE                  S5      RA                  5       US   RA                  5       US   RA                  5       S./nT R                  RF                  " U6     O   U(       d  Mî    O   ST l        U GH  n[         RH                  " US   5      [         RH                  " US   5      nn[        [         R(                  R+                  [         RJ                  " S[         RJ                  " USS USS -
  USS USS -
  5      5      5      5      nURM                  0 UEUUS:  US-  S[        [         R(                  R+                  [         RH                  " US   5      U-
  5      5      -  -   SU-  -   S.E5        GM     GMë     SSS5        URO                  S S9  USU WRA                  5       [Q        U=(       a    US   S   5      S.$ s  sn	f s  sn	f s  sn	f s  sn	f ! , (       d  f       Na= f)ab  legal placements of `card` near the mouse (point p, our frame, mm). Tries every orientation at the nearest connectors and
ranks them by how close the PIECE sits to the mouse, so shifting off-centre flips the piece toward you (Ivy, Oct 23 2026:
"When you shift from the center of a locked in move, it should try similar ones by flipping the piece around")r   rÙ  Nc              3   ó0   >#   • U  H  oS    TL v •  M     g7f)rÓ   NrQ   ©r   rØ  Útgts     €rS   r"  Ú!Imagine.ghosts.<locals>.<genexpr>R  s   øé € Ð*CÂ¸1¨Q©4°3­;Âùs   ƒrÓ   c                 ól   >• [         R                  R                  TR                  U 5      T-
  S S 5      $ )NrÒ   ©rÜ   ÚlinalgÚnormrë  ©rØ  rÉ   rÎ  s    €€rS   Ú<lambda>Ú Imagine.ghosts.<locals>.<lambda>S  s)   ø€ ¬b¯i©i¯n©n¸a¿l¹lÈ1»oÐPQÑ>QÐSUÐTUÐ=VÔ.WrR   ©r  rH   rÝ  c                 óf   >• [         R                  R                  TR                  U 5      T-
  5      $ r  r  r"  s    €€rS   r#  r$  U  s6   ø€ Ô^`×^gÑ^g×^lÑ^lÐmn×myÑmyÐz{Óm|ð  @Añ  nAô  _BrR   )r×  rÝ  c                 óH   >• [         R                  R                  U T-
  5      $ r  ©rÜ   r   r!  )rÈ   rÉ   s    €rS   r#  r$  \  s   ø€ ¬b¯i©i¯n©n¸QÀ¹UÔ.CrR   rÒ   ç       @rø  r}   TrÔ   rû  rþ  Fr  r  ç      ð?ç333333Ó?r  )rw   ÚreachesÚscorec                 ó   • U S   $ )Nr-  rQ   )rý   s    rS   r#  r$  r  s   €   7¢rR   r,  )ÚghostsrÜ  r,  ))rÜ   rò   rë   rJ   Úconnsró  rU  r  r¶  r·  ÚanyrŽ   r  rë  rã   Úcopyr9   r  r>  Ú	enumerater   r!  rä   rï  r  r  r  r„  r	  r  r
  ræ  rê   râ   r  r¯  rì   Úmaximumr¸   ÚsortrX   )rÎ  r  rÉ   r  r  rÝ  ÚunderÚnodeÚfoundrØ  ÚusÚcsrÚ   ÚnsrÜ  r  r‰  Úd_connr  Úvsr   r  rÊ   Úb_rý   r  r  Úgapr  s   ` `                         @rS   r/  ÚImagine.ghostsI  so  ú€ ô �JŠJ�qœ%Ó ˆ¨" %Ø�V‹VÞØ!"§¡¤ÓI¢˜A°©dÐ6HÑ.H—a¡�ÐIØ26Ñ2BÀqÌCÐPTËIÕGjÔX[Ð\]×\_Ñ\_×\cÑ\c×\iÑ\iÓXjÖGj�a—c‘c—g‘g—m‘m¤C¨£IÒ.Ðpt�Ø‘?¤sÔ*CÁÓ*C×'CÑ'CÑVXÓJhÒVXÐQRÐ^_Ñ\`ÐdgÐ\gÏ1ÑVXÀRÐJhÜ˜BÕ$WÑXÐYfÔZ]Ð^bÐdeÓZfÐg‘ä¨¯©¬	ÓNª	 1µU¸aÀ¹dÀg¹oŸQ©	ÑNõ  UBñ  Cð  DIð  EIð  J�ð
 /0¯g©g¬iÓUªi¨¸Q¹4ÐCTÑ;T“_�Q—\‘\ !–_©iˆEÐUÞÜ˜Ô$CÑD�ÏWÉWËYÀdÐfhÐghÐciÔln×ltÒltÐvwÐxzÐyzÐv{ð  Að  BDð  CDð  Eñ  wEð  ILñ  vLó  mMð  PSñ  mSñ  dSÐX\Ð]_Ð^_ÑX`ØŸ™›�$Ø—J‘J×)Ñ)¨.¸"Ó=ˆEÜ! "Ÿ‘��1ÜœrŸy™yŸ~™~¨a¯l©l¸1«oÀÑ.AÓBÓC�ØœU 1§9¡9¨Q£<Ó0´#°a·c±c·g±g·m±mÓ2DÄbÈÏÉÏÉÏÉÐWYÑIZÓF[Ð\�Ø˜“6˜S E›\°×0@Ñ0@ÀÓ0Iª2à�B t˜QœWÜ$ Qžx˜Û$=˜DØ !§
¡
¨1°C¸Ó >˜Aß ˜qØ%& q¡T§Y¡Y×%5Ñ%5 ÀaÇiÁiÐPQÃlÐ[^ÐhlÐstÐuvÑsw×syÑsy÷  tAñ  tAó  tCð  OPð  QRñ  OS÷  OXñ  OX÷  Oañ  Oa÷  Ofñ  Ofð  ghó  Oi÷  Opñ  Opó  Orð  z|ð  }~ñ  z÷  zFñ  zFó  zHð  PRð  STñ  PU÷  P\ñ  P\ó  P^ñ  >_ð  =`°rØ !§¡§¢¨!¡©eñ	 %>÷
 ˜2™uñ  (ð $�A”GÜ�AÜŸXšX a¨¡gÓ.´·²¸¸4¹Ó0A˜�BÜ¤§	¡	§¡¬r¯zªz¸!¼R¿ZºZÈÈ2ÈAÈÐQUÐVXÐWXÐQYÑHYÐ[_Ð`bÐabÐ[cÐfhÐikÐjkÐflÑ[lÓ=mÓ/nÓ oÓp�CØ—L‘Lð " Að "¨F¸sÀS¹yØ+.°©7°S¼5ÄÇÁÇÁÔPR×PXÒPXÐYZÐ[cÑYdÓPeÐhlÑPlÓAmÓ;nÑ5nÑ+nÐqtÐw}Ñq}Ñ+}ò"÷ @ô ñ &÷# ðH 	�
‰
Ñ+ˆ
Ñ,Ø  ˜)¨T¯[©[«]ÄtÈE×LiÐV[Ð\]ÑV^Ð_hÑViÓGjÑkÐkùòG JùâJhùò Oùò
 V÷ �Vúsi   ­U1ÁUÁUÁBU1Ã1U"Ä U"Ä6U1Ä<U'
ÅU'
Å U1Å9U,Æ	U,ÆFU1Ì0CU1Ï:DU1ÕU1Õ1
U?c                 óŽ  • U R                    SU R                  S 3oR                  US-   5        [        R                  " SSSSSS	S
US-   SSSSSSUS-   /SS9   SS Ko"R                  US-   5        [        U S5      (       a  U R                  5         g g ! [         a  n[        SUSS9   S nAN=S nAff = f! [         a     g f = f)Nú/frame_Ú02dú.ldrÚflatpakrv   ú--filesystem=homeúorg.leocad.LeoCADú-lú/home/ivy/lego/ldrawú-iú.pngú-wÚ700ú-hú--viewpointÚhomeTr¶   r   zglb failed:r‹   Ústate)r™   ÚturnÚwrite_frame_ldrr�   rv   Úto_glbÚ
ldr_to_glbr•   r˜   ÚhasattrÚ	stability)rÎ  ÚstemrT  rž   s       rS   ÚframeÚImagine.framet  så   € Ø—%‘%�˜ §¡ s˜|Ð,ˆ×.?Ñ.?ÀÀvÁÔ.NÜ�Š˜	 5Ð*=Ð?RÐTXÐZpÐrvÐx|ð  @Fñ  yFð  HLð  NSð  UYð  [`Ø% v¨t°f©}ð>ØNRò	Tð	EÛ×,Ñ,¨T°F©]Ô;ä�1�g×ÑØ—‘•ð øô ÓD¤ m°R¸t× DûÐDûô Ó"™dÐ"ús*   ÁB ÂB7 Â
B4ÂB/Â/B4Â7
CÃCc                 óp  • [        U S5      (       a  U R                  5         U R                   SU R                  S U 3o R                  US-   5        [        R                  " SSSSS	S
SUS-   SSSSSSUS-   /SS9   SS Ko3R                  US-   5        U$ ! [         a     N�f = f! [         a     U$ f = f)NrQ  rB  rC  rD  rE  rv   rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  Tr¶   r   )
rV  rW  r•   r™   rR  rS  r�   rv   rT  rU  )rÎ  ÚtagrX  rT  s       rS   ÚrerenderÚImagine.rerender~  så   € Ü�1�g×ÑØ—‘”à—%‘%�˜ §¡ s˜|¨C¨5Ð1ˆ×3DÑ3DÀTÈFÁ]Ô3SÜ�Š˜	 5Ð*=Ð?RÐTXÐZpÐrvÐx|ð  @Fñ  yFð  HLð  NSð  UYð  [`Ø% v¨t°f©}ð>ØNRò	Tð	Û×,Ñ,¨T°F©]Ô;àˆøô Ó"™dÐ"ûô Ó˜$Øˆð 	ús#   ’B Á>B' Â
B$Â#B$Â'
B5Â4B5c           	      óZ  •  [         R                  R                  SS5        [        R                  R                  S[         R                  R                  S5      5        SSKnU R                  R                  SS5       S[        5        S	UR                  S
5       SUR                  S5       S3n[        XQ/SSS9u  pg[        R                  " SU[        R                  5      oˆ(       a%  [        R                   " UR#                  S5      5      O0 n	U	R                  S5      (       a9  U R$                  S==   S-  ss'   ['        U R$                  5      U R(                  S'   U[+        U	R                  S5      5      U	R                  SS5      S.U R(                  S'   U R-                  5         [/        U R0                   S3S5       oªR3                  [        R4                  " SU0U	E5      S-   5        SSS5        g! , (       d  f       g= f! [6         a  n[9        SUSS9   SnAgSnAff = f) z÷a CLONE of it judges its move (Ivy, Oct 23 2026: "the player shouldn't do the hearts. It should be auto. Clone it and make a
judge version of it"): same self-description and same IT.md, a fresh pair of eyes on the result. Haiku, in the background.r‹  rŒ  r   r�  Nrx  rL   z%

Your own file, IT.md (your taste):
z‚

You are a CLONE of that player, acting as its judge. The picture is the build right after its move this turn. It was going for: r¡   z; it wanted: r%  zÆ. Did this move genuinely delight you -- surprising, alive, or exactly right? Be stingy: most moves are fine, few are loved. Answer ONLY with JSON: {"loved": true|false, "why": "<at most 14 words>"}r   r“  ©r—  r°   r1  r§  rÓ   rÌ  r¢  )rR  r1  r¢  Újudgez/judge.jsonlrË   rR  r³   zjudge failed:Tr‹   )r[   r“   r>  r�  r\   r‘  r’  r“  rÃ   r^   rT   r›  r½   r¾   r¿   rY   rn   rÀ   rÌ  r9  rQ  rX   ÚsaverM   r™   rÂ   Údumpsr•   r˜   )rÎ  ÚpngrÆ   rR  r˜  rÈ   Útr   rø   rË   r›   rž   s               rS   ra  ÚImagine.judge‰  sÑ  € ð	GÜ�J‰J×!Ñ! 'Ð+FÔGÜ�H‰H�O‰O˜AœrŸw™w×1Ñ1Ð2SÓTÔUÓWhØ—D‘D—H‘H˜]¨BÓ/Ð0Ð0XÔY^ÓY`ÐXað bfØfg×fkÑfkÐlvÓfwÐexð  yFð  GH÷  GLñ  GLð  MSó  GTð  FUð U]ð]ˆAô ˜Q  s°7Ñ;‰DˆAÜ—	’	˜) Q¬¯©Ó-ˆAÍQ´4·:²:¸a¿g¹gÀa»jÔ3IÐTV¨qØ�u‰u�W�~‰~Ø—‘˜hÓ'¨1Ñ,Ó'Ü)-¨a¯m©mÓ)<�—‘˜Ñ&Ø(,´t¸A¿E¹EÀ'»NÓ7KÐTU×TYÑTYÐZ_ÐacÓTdÑeˆA�G‰G�GÑÐgh×gmÑgmÔgoÜ˜Ÿ™˜˜|Ð,¨cÔ2°a¿¹ÄÇÂÈVÐUYÐL_Ð]^ÐL_ÓA`ÐcgÑAgÔ9h×2×2Ö2ûÜÓF¤ o°rÀ× FûÐFús6   ‚GH Ç,G:Ç1H Ç:
HÈH ÈH È
H*ÈH%È%H*c                 ó$  •  [         R                  R                  SS5        [        R                  R                  S[         R                  R                  S5      5        SSKnS Vs0 s H+  oaR                  U5      (       d  M  XaR                  U5      _M-     nn[        S[        R                  " U5      -   S-   S	R                  U5      -   S
-   S	R                  U5      -   S-   SS9u  p‰[        R                  " SU[        R                  5      oª(       au  [        R                   " U
R#                  S5      5       Vs/ s HA  n[%        U[&        5      (       d  M  UR)                  5       (       d  M1  UR)                  5       PMC     snSS O/ nU(       aP  U R*                  U:X  a?  U R,                  R                  S5      S:X  a  XÀR,                  S'   U R/                  5         ggggs  snf s  snf ! [0         a  n[3        SUSS9   SnAgSnAff = f)ad  what the bubble says while it looks: its questions, rephrased for THIS build from its recent thoughts (Ivy, Oct 23 2026: "When it
repeats itself it reads as unintelligent even though it's actually thinking. It should be specific ... rephrase for the specific
instance based on recent thoughts"). Haiku, in the background; generic questions are never shown.r‹  rŒ  r   r�  N)r¡   Úi_seer%  r£   Úabout_the_last_pieceÚabout_her_movezTA Lego-building AI is looking at its build and thinking. What it thought last turn:
z
Its standing questions:
r³   z!
Other thoughts it carried over:
a  

Write 5 short thoughts it might be having RIGHT NOW, each about THIS specific build (name the actual thing and its actual pieces/colours), mostly its questions made specific. First person, at most 12 words each, all different, no 'hmm'. Answer ONLY with a JSON list of strings.i,  ©r–  z\[.*\]r  ÚstageÚlookingÚaskingzvamp failed:Tr‹   )r[   r“   r>  r�  r\   r‘  r’  r“  r^   r›  rY   rc  r]   r½   r¾   r¿   rn   rÀ   r¼   ru   rÁ   rR  rQ  rb  r•   r˜   )rÎ  Úlastnrf   ÚechoesrR  r˜  r!  Úctxre  r   rø   rh  Úlinesrž   s                 rS   ÚvampÚImagine.vamp›  s  € ð	FÜ�J‰J×!Ñ! 'Ð+FÔGÜ�H‰H�O‰O˜AœrŸw™w×1Ñ1Ð2SÓTÔUÓWhÙ,|ó  NÒ,| q÷  AJñ  AJð  KL÷  AM“?�1—i‘i “l’?Ñ,|ˆCð  NÜÐtÔw{÷  xBò  xBð  CFó  xGñ  GØ6ñ7Ø9=¿¹À9Ó9MñNØPuñvØx|÷  yBñ  yBð  CIó  yJñJðNñNð [^ñ	_‰DˆAô
 —	’	˜) Q¬¯©Ó-ˆAõ  OPÌ4Ï:Ê:ÐVW×V]ÑV]Ð^_ÓV`ÔKaó  8GÒKaÀaÔeoÐpqÔsv×ew»	Ð|}÷  }Dñ  }D÷  }F»	¸¿¹¾	ÑKañ  8Gð  HJð  IJñ  8Kð  VX¨uÞ˜Ÿ™ 4›¨A¯G©G¯K©K¸Ó,@ÀIÓ,MÐchÏwÉwÐW_ÑO`Ðjk×jpÑjpÕjrÐ,M˜ˆuùò Nùò 8GøäÓE¤ n°bÀ× EûÐEúsJ   ‚A%G0 Á'G&ÂG&ÂB%G0 Ä>G+ÅG+Å2G+ÆAG0 Ç&
G0 Ç0
HÇ:H
È
Hc                 ó>  •  [         R                  R                  SS5        [        R                  R                  S[         R                  R                  S5      5        SSKnS Vs0 s H  oDUR                  U5      _M     nn[        S[        R                  " U5      -   S-   S	S
9u  pgU R                  U:X  a=  UR                  5       R                  S5      U R                  S'   U R                  5         ggs  snf ! [          a  n[#        SUSS9   SnAgSnAff = f)zÇHaiku: the most interesting thing it thought this turn, in one line a child can read (Ivy, Oct 23 2026: "haiku should
summarize the most interesting part of the turn as it happens from its thoughts")r‹  rŒ  r   r�  N)rh  r¡   ÚpivotÚweighrj  ri  r%  r£   ÚanswersÚfeelingsÚdaydreamz9Here is what a Lego-building AI thought during one turn:
zÏ

Write the single most interesting or surprising thing it thought, as one short sentence a 7-year-old can read (at most 14 words), in third person ("It thinks..." / "It decided..."). No quotes, no preamble.r£  rk  Ú"Ú	highlightzhighlight failed:Tr‹   )r[   r“   r>  r�  r\   r‘  r’  r“  r^   r›  rY   rc  rR  rÁ   rQ  rb  r•   r˜   )	rÎ  rÆ   rR  r˜  r!  rœ   re  r   rž   s	            rS   r|  ÚImagine.highlight«  sö   € ð	KÜ�J‰J×!Ñ! 'Ð+FÔGÜ�H‰H�O‰O˜AœrŸw™w×1Ñ1Ð2SÓTÔUÓWhñ *oó  pò  *o A�q—u‘u˜Q“x’Kñ  *oˆDð  pÜÐYÔ\`×\fÒ\fÐgkÓ\lÑlð p[ñ [àgiñk‰DˆAð �v‰v˜‹~°a·g±g³i·o±oÀcÓ6J˜qŸw™w {Ñ3ÈAÏFÉFÍHˆ~ùò	 pøô
 ÓJ¤Ð&9¸2ÀT× JûÐJús+   ‚A%C= Á'C8ÂA4C= Ã8C= Ã=
DÄDÄDc                 óB  ^ • T R                    S3nT R                  R                  R                  US-   5        [        R
                  " SSSSSSS	US
-   SSSSSSUS-   /SS9  SR                  U 4S jT R                   5       5      n[        T SS5      (       dÅ  SR                  S T R                   5       5      nT R                  R                  SS5       S[        T SS5      (       a  ST R                  -   S-   OS ST R                  US
-   5       SU S S!R                  T R                  S"S 5       S#T R                  R                  S$5      =(       d    S% S&3nO¾T R                  R                  SS5       S'T R                   S([        T SS5      (       a  S)T R                  -   S-   OS ST R                  US
-   5       S*U S S!R                  T R                  S"S 5       S+T R                   S,T R                   S-T R                   S.T R                   S/3n[!        [        R
                  S0S1S2S3S4S5S6S7S8T R                   S9U/["        0 [$        R&                  ES:[(        0ESSS;S<9n [*        R,                  " UR.                  5      n[1        U[2        5      (       a  US=   OUn[*        R,                  " [4        R6                  " S>US?   [4        R8                  5      R;                  S@5      5      nSAUSB'   [        T SS5      (       + USC'   U$ ! [<         a     gf = f)Dz{when a game together ends, it looks back at the whole game (Ivy, Oct 23 2026: "We're done should show how it's reflecting")z
/frame_endrD  rE  rv   rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  Tr¶   r³   c              3   ó¶   >#   • U  HN  nS US    SUR                  S5       S3UR                  S5      (       a  STR                   SUS    3OS-   v •  MP     g	7f)
úturn rR  ú: you thought 'r¡   Ú'rj  z; about z	's move: rL   N)r^   rg   )r   rÆ   rÎ  s     €rS   r"  Ú"Imagine.reflect.<locals>.<genexpr>¼  s�   øé € ð /Ú#-˜að " ! F¡) ¨O¸A¿E¹EÀ*Ó<MÐ;NÈaÐPð  LM÷  LQñ  LQð  Rb÷  Lcñ  LcÐV^Ð_`×_gÑ_gÐ^hÐhqÐrsð  uEñ  sFð  rGñ  UHð  ikö  lÚ#-ùs   ƒAArÅ  Fc              3   óX   #   • U  H   nS US    SUR                  S5       S3v •  M"     g7f)r€  rR  r�  r¡   r‚  Nr,  r-  s     rS   r"  rƒ  Á  s1   é € ÐiÒ^hÐYZ  a¨¡i [°ÀÇÁÀjÓ@QÐ?RÐRSÕTÒ^hùó   ‚(*rx  rL   z(

You just finished a build on your own.r  Nz It was asked for: "z".z The finished build: z- (Read it.)
How it went, from your notebook:
z
What happened, move by move: ú; iâÿÿÿz
Why you called it done: r+  z(you did not say)a�  

Present it to whoever is watching, honestly, in a few short warm sentences they can read (they may be a child). Answer ONLY with JSON:
{"we_made": "<at most 8 words: what you made>", "loved": "<one sentence: the piece or moment in it you're proudest of, and why>",
  "remember": "<one sentence: how it changed along the way -- what it started as, what it became>", "to_you": "<a short line to whoever watched>"}z5

You just finished building something together with z, taking turns.z They had asked for "z3 (Read it.)
How the game went, from your notebook:
zA

Look back on the game, honestly, in a few short warm sentences z� can read (they may be a child). Answer ONLY with JSON:
{"we_made": "<at most 8 words: what you two made>", "loved": "<one sentence: a move of z_'s you loved, and why>",
  "remember": "<one sentence: what you'll remember about playing with z >", "to_you": "<a short line to z>"}r¤   r¥   r¦   r§   r¨   rY   ú--allowedToolsÚReadú	--add-dirr©   rª   r«   r¬   r}   r°   r±   r   zframe_end.pngrY  Úsolo)r™   r  r¶  Ú	write_ldrr�   rv   r]   rÄ   ÚgetattrrÃ   r^   r  Úviewsrª  rQ  rg   r¹   rº   r[   r“   r»   rY   rn   r€   r¼   rq   r½   r¾   r¿   rÀ   r•   )rÎ  rX  ÚstoryrÈ   rÉ   rw   rÊ   rË   s   `       rS   ÚreflectÚImagine.reflect·  s  ø€ à—%‘%�˜
Ð#ˆ Q§S¡S§W¡W×%6Ñ%6°t¸f±}Ô%EÜ�Š˜	 5Ð*=Ð?RÐTXÐZpÐrvÐx|ð  @Fñ  yFð  HLð  NSð  UYð  [`Ø% v¨t°f©}ð>ØNRò	Tà—	‘	ô /Ø#$§:¢:ó/ó /ˆô �q˜& %×(Ñ(Ø—I‘IÑiÐ^_×^hÒ^hÓiÓiˆEØ—T‘T—X‘X˜m¨RÓ0Ð1ð 2'äV]Ð^_ÐajÐlp×VqÑVqÐ(>ÀÇÁÑ(JÈTÒ(QÐwyÐ&zð  {Pð  QR÷  QXñ  QXð  Y]ð  `fñ  Yfó  Qgð  Phð hà€ð Ø"Ÿi™i¨¯©°°¨Ó6Ð7ð 8ØŸ™Ÿ™ ZÓ0×GÐ4GÐHð ITð
W‰Að —t‘t—x‘x ¨rÓ2Ð3ð 44à45·H±H°:¸_ô  ~Eð  FGð  IRð  TX÷  ~Yñ  ~YÐNeÐhi×hqÑhqÑNqÐtxÒNxð  _að  Mbð  bwð  xy÷  xñ  xð  @Dð  GMñ  @Mó  xNð  wOð Oà€ð Ø"Ÿi™i¨¯©°°¨Ó6Ð7ð 8@à@AÇÁ¸zð JYØYZ×YaÑYaÐXbð cGØGHÇxÁxÀjÐPpÐqr×qyÑqyÐpzÐz~ð	Bˆaô œ*Ÿ.™.¨8°T¸9ÀfÐN_ÐagÐiyð  |Bð  DOð  QR÷  QVñ  QVð  X\ð  ^_ð  +`Ü#Ð)Q¬B¯J©JÐ)QÐ8KÌSÑ)QÐbfÐmqÐ{~ñ@ˆð	&Ü—
’
˜1Ÿ8™8Ó$ˆA´:¸aÄ×3FÑ3F¨!¨Bª%ÈA aÜ—
’
œ2Ÿ9š9 Y°°(±¼R¿T¹TÓB×HÑHÈÓKÓLˆAÐ[jÈaÐPWÉjô  }Dð  EFð  HNð  PUó  }Vô  yVÐlmÐntÑluð  _`ð  X`øÜÓ%¡Ð%ús   É-B#L Ì
LÌLc                 óˆ)  ^ • SSK nT R                  [        -  S:H  nU(       a  T R                  S==   S-  ss'   T R                  T l        T R
                     T R                  T R                  5      nSSS5        T R                  R                  S[        T R                  5      / [        T R                  5      W(       a  SU S3US:”  a  SOS	-   S
-   OS	U(       a  SOS	-   S9  T R                  5         / SpT T R                  R                  SS9nUR                  S5      nUS:X  ab  T R
                     T R!                  5       nSSS5        WS   (       d2  T R                  R                  SUS    S3S9  T R                  5         M’  gUS:X  aK  T R"                   S3T l        T R&                  R)                  ST R                   ST R"                   S35        gUS:X  a¦  UR                  S5      T R                  ;   a‡  T R                  R+                  US   5        T R                  R)                  T R-                  S5      5        T R                  R                  [        T R                  5      S 9  T R                  5         GM�  US!:X  a-  T R                  R                  S/ S"9  T R                  5         GMÃ  US#;   a?  T R                  S   S::  a,  T R                  R                  S$S9  T R                  5         GM  US%:X  GaF  [.        R                  [1        UR                  S&S	5      5      R3                  5       / 5       V	s/ s H  o™[4        R6                  ;   d  M  U	PM     n
n	U
(       d  GM{  U
T R8                  R;                  [=        U
5      5         nT R                  SS U/-   T l        T R                  S==   S-  ss'   T R                  R                  [        T R                  5      [        T R                  5      S'US&    S([4        R>                  R@                  R                  X»5       3S)9  T R                  5         GMU  US*:X  Ga   [1        UR                  S+S	5      5      R3                  5       [B        ;   Gan  T R
                     [E        UR                  S,S-5      5      nSUs=::  a-  [=        T RF                  RH                  RJ                  5      :  a6  O  O3[M        T RF                  RH                  RJ                  U   S.S5      (       a   SSS5        GM,  T RF                  RH                  RJ                  U   n[N        R                  URP                  S/5      n[B        [1        US+   5      R3                  5          Ul(        [M        T S0S5      S-   T l)        T RU                  S1T RR                   35      nSSS5        T R"                   S2W S3[4        R>                  R@                  R                  WRV                  URV                  5       S3US+    S43nT R&                  R)                  ST R                   SU 35        [M        T S5S	5      S3-   U-   RY                  5       T l-        T R                  S==   S-  ss'   WS6-   T l.        T R                  R                  [^        R`                  Rc                  U5      S6-   S7[        T R                  5      S89  T R                  5         GMü  US9:X  Ga?  T R
                     T Re                  [1        UR                  S:S	5      5      5      nU(       d   SSS5        GMM  [M        T S0S5      S-   T l)        T RU                  S;T RR                   35      nSSS5        T R"                   S<W S=3nT R&                  R)                  ST R                   SU 35        [M        T S5S	5      S3-   U-   RY                  5       T l-        WS6-   T l.        T R                  R                  [^        R`                  Rc                  U5      S6-   S>S?9  T R                  5         GMB  US@:X  Ga  T R
                     [E        UR                  S,S-5      5      nSUs=::  a-  [=        T RF                  RH                  RJ                  5      :  a6  O  O3[M        T RF                  RH                  RJ                  U   S.S5      (       a   SSS5        GMç  T Rg                  T RF                  RH                  RJ                  U   [i        UR                  SASB5      5      T R"                  5      nU(       d4  T R                  R                  SCS9  T R                  5         SSS5        GMy  [M        T S0S5      S-   T l)        T RU                  SDT RR                   35      nSSS5        T R&                  R)                  ST R                   SW 35        [M        T S5S	5      S3-   U-   S4-   RY                  5       T l-        WS6-   T l.        T R                  R                  [^        R`                  Rc                  U5      S6-   SES?9  T R                  5         G	M_  USF:X  Ga   T R
                     [E        UR                  S,S-5      5      nSUs=::  a-  [=        T RF                  RH                  RJ                  5      :  a6  O  O3[M        T RF                  RH                  RJ                  U   S.S5      (       a   SSS5        G
M  T RF                  RH                  RJ                  U   n[N        R                  URP                  S/5       S3[4        R>                  R@                  R                  URV                  URV                  5       3nT R+                  U5      nUSG:w  aG  T R                  R                  SHURk                  SIS	5       3S9  T R                  5         SSS5        G
Mæ  T R                  S==   S-  ss'   [M        T S0S5      S-   T l)        T RU                  SJT RR                   35      nSSS5        T R"                   SKW S43nT R&                  R)                  ST R                   SU 35        [M        T S5S	5      S3-   U-   RY                  5       T l-        WS6-   T l.        T R                  R                  [^        R`                  Rc                  U5      S6-   SL[        T R                  5      S89  T R                  5         GM  USM:X  Gaf  UR                  S5      T R                  ;   GaF  US   nT R
                     T Rm                  USN   5      nUU[E        UR                  SOS5      5      [i        UR                  SPS5      5      SQ.nT Rq                  U5      (       d4  T R                  R                  SRS9  T R                  5         SSS5        GMÖ  T Rs                  5       S-   nUR                  US   URt                  / SS9  [1        UR                  S+S	5      5      R3                  5       [B        ;   a(  [B        [1        US+   5      R3                  5          Ul(        SSS5        W/nSTSSSU.nSTnUS:X  GaÈ  UR                  S5      T R                  ;   Ga¨  US   nT R                  R                  SVUS	SW9  T R                  5         T Rw                  SXSYU/SZ9nU(       d-  T R                  R                  SS[S\9  T R                  5         GM  [y        S]5       n[        UR{                  U 4S^ j[}        U5      5      5      nSSS5        T R                  R                  S_[}        U5       VVs/ s H²  u  nnWU   [4        R>                  R@                  R                  US`   US`   5      [N        R                  USa   RP                  USa   RP                  5       S3[4        R>                  R@                  R                  USa   RV                  USa   RV                  5       3Sb.PM´     snnS"9  T R                  5         GMB  UST:X  Ga“  U(       Ga‹  S[E        UR                  ScS-5      5      s=::  a  [=        U5      :  Ga[  O  GOWU[E        USc   5         nT R                  US5      Sd   nUR                  Se5      (       dC  T Rq                  U5      (       d-  T R                  R                  SSfS\9  T R                  5         GM  UR                  Se5      (       dj  [1        UR                  S+S	5      5      R3                  5       [B        ;   a9  [B        [1        US+   5      R3                  5          T Rs                  5       S-   l(        T Rs                  5       S-   nT R                  R+                  U5        T R                  R)                  T R-                  S5      5        UR                  SgS5      nUR                  ShS5      n[M        T S5S	5      nS	T l-        U(       a  US3-   OS	T R"                   Si[N        R                  URP                  URP                  5       S3[4        R>                  R@                  R                  US`   US`   5       SjUSk    SlUSm:  a  SnO	USo:”  a  SpOSq SlUSr:”  a  SsO	USo:  a  StOSu S43-   T l        T R&                  R)                  ST R                   ST R$                   35        T R!                  5         T R€                   SvT R                  Sw Sx3nT Rƒ                  USy-   5        [„        R†                  " SzS{S|S}S~SS€US6-   S�S‚SƒS‚S„S…USy-   /SS†9   SSKDnUR‹                  USy-   5        US6-   T l.        T R                  R                  S‡T R                  Sw Sˆ3S‰/ [        T R                  5      T R$                  SŠ9  T R                  5         gGMÞ  ! , (       d  f       GNk= f! UR                   a     gf = f! , (       d  f       GNÀ= fs  sn	f ! , (       d  f       GN[= f! , (       d  f       GN·= f! , (       d  f       G
N�= f! , (       d  f       GN+= f! [n         a     SSS5        GM|  f = f! , (       d  f       GN'= f! , (       d  f       GNU= fs  snnf ! [n         a     GN³f = f! [n         a     GNPf = f)‹zóCO-OP: Ivy's move, from her own hand (Ivy, Oct 23 2026: "there should be co op mode so it can play with me. It needs to
think about what I did"). She picks a card, sees every legal spot for it as pictures, picks one. Actions arrive on s.inbox.r   Nr§  rÓ   Ú	your_turnz	rerolled z cardrÎ  rL   z that had nowhere to go. zYou got a token. )rl  rÉ  Úhuman_optionsÚ	free_leftÚ	human_msgTi  ©r¯   ÚgoneÚtyper*  rÐ   zit would fall over rÙ   z( -- it can't be finished until it stands)r•  Úpassz passed this turn.r€  rq  z passedÚswapr  F)rÉ  Úback)rl  r“  )Úrepaintr¸  r  zno tokens leftr  Úkindzyou asked for z and got a )rÉ  r”  r•  rœ  rz  Újr}   Úis_pinÚ?ÚrepaintsrÊ   z repainted the r¤  rc  Úhuman_extrarK  zrepainted -- still your turn)rY  r•  r”  ÚreorientÚhowÚoz turned the whole creation (z).zturned -- still your turn)rY  r•  ÚbendÚdegreesé   z:that piece isn't on a hinge -- it needs to hang on one pinr@  zbent -- still your turnr¸  Úremovedzcan't take that one off: ú	refused: rh  z took off the ztaken off -- still your turnÚplace_atrÿ  r   r  ©rÿ  r±  r   r  z.that spot didn't work after all -- try another)Úhostræ  Úpinsr»  )r˜  r‰  Ú
_committedÚfinding_spots)rl  Ú
human_cardr•  r  éd   ©r!  ÚtriesÚpoolz6that piece has nowhere to go right now -- pick another)rl  r•  rH   c                 ó:   >• TR                  U S   SU S    35      $ )NrÓ   r  r   ©Úthumb©ÚimrÎ  s    €rS   r#  Ú$Imagine.human_turn.<locals>.<lambda>,  ó*   ø€ ÐPQ×PWÑPWÐXZÐ[\ÑX]ÐabÐceÐfgÑchÐbiÐ_jÔPkrR   Úyour_optionsr±  r­  )rd  r±  Újoinsr‰  Úwherer¯  z&that spot just got taken -- pick againúzleft or right in the picture (-1 = far left of the build, 0 = middle, 1 = far right, beyond 1 = further out than anything)úMheight in the build (0 = bottom, 1 = top, above 1 = higher than anything yet)z just added a z
 onto the ú	joins ther  ç…ëQ¸Õ¿zon the leftç…ëQ¸Õ?zon the rightzin the middleç…ëQ¸å?zup highzdown lowz
halfway uprB  rC  r  rD  rE  rv   rF  rG  rH  rI  rJ  rL  rM  rN  rO  rP  r¶   Úframe_zh.pngrm  )rY  rl  r“  rÉ  Úivy_did)FÚqueuerR  ÚTOKEN_EVERYr§  r”  rJ   ÚrerollrÉ  rQ  rö   rq   r9  rb  Úinboxr^   ÚEmptyrW  rg   rÆ  rª  r¸   r¸  rÈ  r&  ru   r}  r  rG  rÂ  ÚintegersrU  ru  rv  r~  ró  r  r¶  r·  rŒ  ÚCNAMErz  r¡  r]  r±  rÁ   r¢  Úlook_pngr[   r\   r�   r£  Údo_bendrë   r?  rõ  r•   r·   r°  ræ  Úproposer   Úmapr3  Údescriber™   rS  r�   rv   rT  rU  )rÎ  rÈ  ÚearnedÚrrÚhoptsr  Úactre  Úst_r  rµ  Úgotrž  rÉ   ÚoldrX  Únoter¤  ÚnmÚresrØ  rø   r  rž   r�   r‰  rj   r  r  ÚextrarT  s   `                              rS   Ú
human_turnÚImagine.human_turnÝ  sà  ø€ ó 	Ø—‘œ+Ñ%¨Ñ*ˆÞ�1—8‘8˜HÓ%¨Ñ*Ó%Ø—h‘hˆŒØ�V‹V˜!Ÿ(™( 1§<¡<Ó0�R�VØ	�‰�‰˜[´T¸!¿,¹,Ó5GÐWYÔeiÐjk×jrÑjrÓesÞuw Y¨r¨d°%Ð#8À2ÈÃ6¹CÈrÑ#RÐUpÒ#pÐ}ö  \bñ  EXð  hjñ  "kð 	ñ 	lð no÷  ntñ  ntô  nvð  FHð  JNð  CØØ—w‘w—{‘{¨4�{Ð0�à—‘˜“ˆAØ�F‹{Ø—V“V 1§;¡;£=˜S—VØ˜8—}Ø—G‘G—N‘NÐ/BÀ3ÀuÁ:À,ÐNvÐ-w�NÑxÐz{÷  {Añ  {Aô  {Cñ  EMØØ�F‹{¨a¯h©h¨ZÐ7IÐ+J˜AœLÈAÏGÉGÏNÉNÐ]bÐcd×ciÑciÐbjÐjlÐmn×muÑmuÐlvÐv}Ð[~ÔLð  IMØ�F‹{˜sŸw™w v›°!·,±,Ó>Ø—‘×#Ñ# C¨¡KÔ0°!·,±,×2EÑ2EÀaÇfÁfÈUÃmÔ2TÐVW×V]ÑV]×VdÑVdÔptÐuv÷  vBñ  vBó  qCÐVdñ  WDð  FG÷  FLñ  FLô  FNò  PXØ�F‹{˜AŸG™GŸN™N°ÈB˜NÑOÐQR×QWÑQWÔQYÒ[cØÐ4Ó4¸¿¹ÀXÑ9NÐRSÓ9SÐUV×U\ÑU\×UcÑUcÐn~ÐUcÑUð  BC÷  BHñ  BHô  BJò  LTØ�IŒ~Ü#(§9¡9¬S°·±¸ÀÓ1DÓ-E×-KÑ-KÓ-MÈrÔ#RÓhÒ#R˜aÔ[_×[gÑ[gÑVgŸÑ#R�ÐhÞšXØ˜1Ÿ6™6Ÿ?™?¬3¨t«9Ó5Ñ6�ÀqÇ|Á|ÐTUÐTVÐGWÐ[^ÐZ_ÑG_¸¼Ðab×alÑalÐmuÓavÐz{Ña{ÓavØ—‘—‘¬$¨q¯|©|Ó*<ÌÈQÏ[É[ÓHYÐguÐvyð  {Añ  wBð  vCð  CNô  OS÷  OVñ  OV÷  O\ñ  O\÷  O`ñ  O`ð  adó  Ojð  Nkð  fl�ñ  mð  op÷  ouñ  ouô  owò  yAØ�IŒ~¤# c§g¡g¨h¸Ó&;Ó"<×"BÑ"BÓ"DÌ	Ô"QØ—V“VÜ˜CŸG™G C¨Ó,Ó-�AØ Õ7¤S¨¯©¯©¯©Ó%7Ö7¼GÀAÇCÁCÇGÁGÇMÁMÐRSÑDTÐV^Ð`e×<fÑ<fÐhp÷ ’Vð Ÿ™Ÿ™Ÿ™ aÑ(�A´·	±	¸!¿(¹(ÀCÓ0H¨#ÔU^Ô_bÐcfÐgoÑcpÓ_q×_wÑ_wÓ_yÑUzÈ!Ì(Ü!(¨¨J¸Ó!:¸QÑ!>�A”JÀqÇzÁzÐTUÐVW×V`ÑV`ÐUaÐRbÓGcÀ÷	 ð
 Ÿ(™(˜ ?°3°%°q¼¿¹¿¹×9JÑ9JÈ1Ï6É6ÐST×SYÑSYÓ9ZÐ8[Ð[\Ð]`ÐaiÑ]jÐ\kÐklÐm�Ø—‘—‘  q§v¡v h¨b°°Ð7Ô8Ì7ÐSTÐVcÐegÓKhÐknÑKnÐquÑKu×J|ÑJ|ÓJ~¸!¼-Ø—‘˜HÓ%¨Ñ*Ó%Ø! F™]�”
¨A¯G©G¯N©NÄÇÁ×AQÑAQÐRVÓAWÐZ`ÑA`ð  mKô  W[ð  \]÷  \gñ  \gó  Wh¨Nñ  -ið  kl÷  kqñ  kqô  ksò  u}Ø�JŒØ—V“VØŸ*™*¤S¨¯©°¸Ó);Ó%<Ó=�CÞ ÷ ’Vô ")¨¨J¸Ó!:¸QÑ!>�A”JÀqÇzÁzÐTUÐVW×V`ÑV`ÐUaÐRbÓGcÀ÷ ð Ÿ(™(˜Ð#?À¸uÀBÐG�ÈÏÉÏÉÐZ_Ð`a×`fÑ`fÐ_gÐgiÐjnÐioÐXpÔIqô  ELð  MNð  P]ð  _aó  Ebð  ehñ  Ehð  koñ  Eo÷  Dvñ  Dvó  DxÐstô  tAØ! F™]�”
¨A¯G©G¯N©NÄÇÁ×AQÑAQÐRVÓAWÐZ`ÑA`ð  mH¨Nñ  -Ið  KL÷  KQñ  KQô  KSò  U]Ø�FŒ{Ø—V“VÜ˜CŸG™G C¨Ó,Ó-�AØ Õ7¤S¨¯©¯©¯©Ó%7Ö7¼GÀAÇCÁCÇGÁGÇMÁMÐRSÑDTÐV^Ð`e×<fÑ<fÐhp÷ ’Vð Ÿ9™9 Q§S¡S§W¡W§]¡]°1Ñ%5´u¸S¿W¹WÀYÐPRÓ=SÓ7TÐVW×V^ÑV^Ó_�DÞ §¡§¡Ð:v Ñ!wÐyz×yÑyô  zB÷	 ’Vô
 ")¨¨J¸Ó!:¸QÑ!>�A”JÀqÇzÁzÐTUÐVW×V`ÑV`ÐUaÐRbÓGcÀ÷ ð —‘—‘  q§v¡v h¨b°°Ð7Ô8Ì7ÐSTÐVcÐegÓKhÐknÑKnÐquÑKuÐx{ÑK{÷  KCñ  KCó  KE¸!¼-Ø! F™]�”
¨A¯G©G¯N©NÄÇÁ×AQÑAQÐRVÓAWÐZ`ÑA`ð  mF¨Nñ  -Gð  IJ÷  IOñ  IOô  IQò  S[Ø�HŒ}Ø—V“VÜ˜CŸG™G C¨Ó,Ó-�AØ Õ7¤S¨¯©¯©¯©Ó%7Ö7¼GÀAÇCÁCÇGÁGÇMÁMÐRSÑDTÐV^Ð`e×<fÑ<fÐhp÷ ’Vð Ÿ™Ÿ™Ÿ™ aÑ(�A´%·)±)¸A¿H¹HÀcÓ2JÐ1KÈ1ÌTÏWÉWÏ]É]×M^ÑM^Ð_`×_eÑ_eÐgh×gmÑgmÓMnÐLoÐ/p¨"Ðxy÷  yAñ  yAð  BCó  yDÐruØ˜iÓ'¨¯©¯©ÐD]Ð^a×^iÑ^iÐjuÐwyÓ^zÐ]{ÐB|¨Ñ)}ð  @A÷  @Fñ  @Fô  @H÷	 ’Vð
 —K‘K Ó)¨QÑ.Ó)¼WÀQÈ
ÐTUÓ=VÐYZÑ=Z°´
Ðcd×cmÑcmÐpqÐrs×r|Ñr|Ðq}Ðn~ÓcÐ\`÷ ð Ÿ(™(˜ >°"°°QÐ7�¸¿¹¿¹È%ÐPQ×PVÑPVÈxÐWYÐZ^ÐY_ÐH`Ô9aÔt{Ð|}ð  @Mð  OQó  uRð  UXñ  uXð  [_ñ  u_÷  tfñ  tfó  thÐcdÔcpØ! F™]�”
¨A¯G©G¯N©NÄÇÁ×AQÑAQÐRVÓAWÐZ`ÑA`ð  mKô  W[ð  \]÷  \gñ  \gó  Wh¨Nñ  -ið  kl÷  kqñ  kqô  ksò  u}Ø�JŒ 3§7¡7¨6£?°a·l±lÔ#BØ˜6‘{�Ø—V“VØŸ^™^¨C°©KÓ8˜à!"¨D¼¸S¿W¹WÀUÈAÓ=NÓ9OÔY^Ð_b×_fÑ_fÐgmÐopÓ_qÓYrÑs�AØŸ8™8 AŸ;™;¨¯©¯©ÐAq¨Ñ(rÐtu×tzÑtzÔt|÷	 ’Vð
 Ÿ(™(›* R™.�C¨!¯(©(¸¸!¹ÀÇÁÈB¨(Ñ*OÜ˜3Ÿ7™7 8¨RÓ0Ó1×7Ñ7Ó9¼YÓFÔU^Ô_bÐcfÐgoÑcpÓ_q×_wÑ_wÓ_yÑUzÈÌ
÷ ð ˜�¨G¸!È4Ñ#P˜SÐV]ÐRSØ�FŒ{˜sŸw™w v›°!·,±,Ô>Ø˜6‘{� A§G¡G§N¡N¸ÐUYÐeg NÑ$hÐjk×jpÑjpÔjrØŸ	™	 A¨S¸°v˜	Ð>�ÞØ—G‘G—N‘N¨Ð@x�NÑyÐ{|÷  |Bñ  |Bô  |Dò  FNÜ'¨Ô*¨b¼¸b¿f¹fÔEkÔmvÐw|Óm}Ó>~Ó9°$×*Ø—‘—‘ ^ä )¨%Ô 0ôD2â 0™˜˜1ð MQÐQRÉGÔ]a×]dÑ]d×]jÑ]j×]nÑ]nÐopÐqwÑoxÐz{ð  }Cñ  {Dó  ^EÜ %§	¡	¨!¨F©)×*:Ñ*:¸A¸f¹I×<LÑ<LÓ MÐNÈaÔPT×PWÑPW×P]ÑP]×PaÑPaÐbcÐdjÑbk×bpÑbpÐrsÐtzÑr{÷  sAñ  sAó  QBð  PCð  DôEEá 0òD2�ñ 3à45·F±F´HºhØ�GŒ|§¨!¬s°3·7±7¸3ÀÓ3CÓ/DÕ*QÄsÈ5Ãz×*QÐ*QØœ#˜c #™h›-Ñ(�¨a¯j©j¸¸AÓ.>¸wÑ.G¨!Ø—w‘w˜|×,Ñ,°Q·X±X¸a·[±[À!Ç'Á'Ç.Á.ÐWbð  oWÀ.ñ  CXð  Z[÷  Z`ñ  Z`ô  Zbò  dlØ—w‘w˜|×,Ñ,´°S·W±W¸XÀrÓ5JÓ1K×1QÑ1QÓ1SÔW`Ó1`ô  {Dô  EHð  ILð  MUñ  IVó  EW÷  E]ñ  E]ó  E_ñ  {`Ðbc×bjÑbjÓblÐmoÑbpÔbwØ—h‘h“j ‘n� a§l¡l×&9Ñ&9¸$Ô&?ÀÇÁ×ATÑATÐUV×U[ÑU[Ð\aÓUbÔAcØ—U‘Uð  Xð  Z[ó  \�Ø—E‘EÐiÐklÓm�Ü  =°"Ó5�Àr°q´}Þ/4 ¨¢¸"ÀAÇHÁHÀ:È^Ô\a×\eÑ\eÐfi×fpÑfpÐru×r|Ñr|Ó\}Ð[~Ð~ô  AE÷  AHñ  AH÷  ANñ  AN÷  ARñ  ARð  STð  U[ñ  S\ð  ^_ð  `fñ  ^gó  Ahð  @ið  isØ#$ [¡>Ð"2°"ÀbÈ5Ãj±]ÐhjÐmqÓhqÑVdð  xGð  5Hð  HJØ01°D³¡9ÈAÐPTËH¹jÐZfÐ"gÐghðBjñ  k�”ð —‘—‘  q§v¡v h¨b°·±°Ð?Ô@Ø—[‘[”]àŸ%™%˜ ¨¯©¨s |°1Ð5�°q×7HÑ7HÈÐPVÉÔ7WÜ—’ 	¨5Ð2EÐGZÐ\`ÐbxÐz~ð  AEð  HNñ  ANð  PTð  V[ð  ]að  chØ -¨v°t¸f±}ð FØVZò\ð'Û! 6×#4Ñ#4°T¸F±]Ô#Cà! F™]�”
¨A¯G©G¯N©NÀ6È!Ï&É&ÐQTÈÐUZÐA[ÐclÐ|~ÜGKÈAÏLÉLÓGYÐcd×coÑcoð -;ñ -qØrs×rxÑrxÔrzØò ÷ ŽVûð
 —;‘;Ó-¡vÐ-ú÷ –Vüò i÷
 –Vú÷ –Vú÷ –Vú÷ –Vûô %Ó. h÷ ’Và.ú÷ –Vú÷ +Ö*üóD2øô  !Ó&¢$Ð&ûô !Ó&¢$Ð&ús=  ÁAOÃ9AO) Ä5AO?ÍAPÍ!APÒBAPÔ$BAPÜ3AP(Ý3AP(áBAP:ãBAP:å13AP:é*BAQë<CAQïA
AQô6AQ8ô7AQõA8AQ8÷B
AQ8ü)AR
ý(B9ARÁK,AR" ÁMAR3 ÁO
AO&ÁO)AO<ÁO;AO<ÁO?
APÁP
AP%ÁP(
AP7ÁP:
AQ	ÁQ
AQÁQ
AQ5ÁQ(AQ8ÁQ4AQ5ÁQ5AQ8ÁQ8
ARÁR

ARÁR"
AR0ÁR/AR0ÁR3
ASÁS ASc           
      ó~  • SnSU l          [        [        U5      5       H‡  u  p4[        S5       Hs  nX   [	        U S[        5       5      ;   a  U[	        U SS5      L a    MA  U R                  SSX   /S	S
9(       a    M^  U R                  U[	        U SS5      L 5      X'   US-  nMu     M‰     S	U l         U$ ! S	U l         f = f)zÕswap out cards that have nowhere legal to go on the build right now (Ivy, Oct 23 2026: "Pieces that can't be placed should
be rerolled"). Quick collision check; a few tries per slot. Returns how many were swapped.r   TrB   ÚreservedrÃ  NrÓ   é(   F)r!  r´  rµ  rÝ  )r  r3  rq   r„  rŒ  r¹  rÑ  rÈ  )rÎ  rÃ  r  r‰  r  r   s         rS   rÊ  ÚImagine.rerollG  s»   € ð ˆ˜ˆqŒwð	!Ü$¤T¨$£ZÖ0‘�Ü˜qž�AØ‘w¤'¨!¨Z¼»Ó"?Ó?ÀDÌGÐTUÐW]Ð_cÓLdÒDdÒfkØ—y‘y 1¨B°d±g°YÀe�yÖLÊeØŸf™f T¬W°Q¸ÀÓ-EÐ%EÓF�D‘GÈÈQÉÊó "ñ 1ð
 !�”Øˆøð !�•ús   ‹BB3 Â3	B<c                 ó
  ^• U(       dC  [         R                  U R                  R                  [	        [         R                  5      5         $ [        U SS5      nUb'  [	        U5      [	        [         R                  5      :w  Ga”  SSKn[        R                  " 5       mUR                  [         S35       Vs/ s H4  n[        [        R                  R                  U5      5      (       a  M2  UPM6     sn HF  n [        U5       H3  nT[        R                   " U5      R#                  S5      ==   S-  ss'   M5     MH     [)        U4S j[         R                   5       5      [	        [         R                  5      -  =(       d    Sn[*        R,                  " [         R                   Vs/ s H"  n[/        S[1        S	TU   U-  5      S
-  5      PM$     sn5      o"UR)                  5       -  U l        [5        U4S j[         R                   5       SS9SS U l        [         R                  U R                  R9                  [	        [         R                  5      U R2                  S9   $ s  snf ! [$        [&        4 a     GMˆ  f = fs  snf )aŠ  a card. ITS deck is stacked toward what it likes (Ivy, Oct 23 2026: "Maybe we stack the deck? Pieces it likes are more likely
to end up in the hand?"): weight = (how often it picked that piece across every saved build / the average) ^ 1.5, between 0.3 and 4,
so a favourite comes up several times as often as an ignored piece and nothing ever disappears. The other player's deck is a fair deal.Ú_deck_wNr   z/runs/*/log.jsonlre   rÓ   c              3   ó.   >#   • U  H
  nTU   v •  M     g 7fr  rQ   ©r   r  rØ  s     €rS   r"  ÚImagine.draw.<locals>.<genexpr>`  s   øé € Ð3¢l ˜˜!ž¢lùs   ƒg      @r+  r  c              3   ó2   >#   • U  H  nTU   U4v •  M     g 7fr  rQ   rè  s     €rS   r"  ré  b  s   øé € Ð>²¨A˜q ™t Q�i²ùó   ƒT)ÚreverserB   )rÉ   )r  rG  rÂ  rÍ  rU  rŒ  r�   r:  r;  rm   rW   r[   r\   ÚdirnamerM   rY   rn   r^   rP   r_   rá   rÜ   rì   rã   r  ræ  rŽ   ÚlikesÚchoice)	rÎ  Úminerj   r�   r›   ry   r  r  rØ  s	           @rS   rÈ  ÚImagine.drawS  s¿  ø€ ö œDŸL™L¨¯©¯©¼¼T¿\¹\Ó9JÓ)KÑLÐLÜ�A�y $Ó'ˆØ‰9œ˜A›¤#¤d§l¡lÓ"3Ô3ÛÜ×#Ò#Ó%ˆAØ!%§¡¬d¨VÐ3DÐ+EÔ!FÓlÒ!F˜AÌiÔXZ×X_ÑX_×XgÑXgÐhiÓXj×Nk—aÑ!FÔl�ð3Ü! !žW˜ a¬¯
ª
°1«×(9Ñ(9¸(Ó(CÓ&DÈÑ&IÕ&D›Wñ mô Ô3¤d§l¢lÓ3Ó3´c¼$¿,¹,Ó6GÑG×MÈAˆDÜ—’Ì$Ï,Ê,ÓWÊ,ÀQœ#˜c¤3 s¨A¨a©D°4©KÓ#8¸CÑ#?Ö@É,ÑWÓXˆAÐjk×joÑjoÓjqÑfqÐZ[ÔZcÜÔ>´·²Ó>ÈÑMÈbÈqÐQˆAŒGÜ�|‰|˜AŸF™FŸM™M¬#¬d¯l©lÓ*;¸q¿y¹y˜MÐIÑJÐJùò møô  ¤Ð,Ó2«dÐ2üâWs%   Â61I#Ã+I#Ã8AI(Æ&)J É(I=É<I=c                 ó  ^• U R                  5       m[        R                  " T Vs/ s H  oR                  R                  PM     sn5      o"[
        -  o2S S 2S4   R                  5       US S 2S4   R                  5       pT/ nSSKJ	n  T VVs/ s H)  oR                    H  o�R                  US   5      PM     M+     n	nnU	(       a  U" [        R                  " U	5      5      OS U l        [        [        T5      5      n
[        T5      S:”  aÜ  [!        T5       VVs/ s HG  u  p±SU R#                  UT5      ;   d  M  U R#                  UT5      R%                  S5      (       a  ME  UPMI     nnnUR'                  U4S jS	9  [)        [+        US S
 5      [+        [        [        S[        T5      S-
  5      [        T5      5      5      -  5      n
UR-                  S[        T5       S35        U
 GHu  nTU   nUR                  R                  R/                  S5      oÝ[
        -  UR                  5       UR                  5       -   S-  -
  [        UR                  5       UR                  5       -
  S-  S5      -  nUS:  a  SO	US:”  a  SOSoýS   U-
  [        XT-
  S5      -  nU R#                  UT5      nUR-                  SUS-    S[0        R3                  UR4                  UR4                  5       S[6        R8                  R:                  R3                  UR<                  UR<                  5       SU SUS:”  a  SO	US:  a  SOS SUS:X  a  SOS 3U(       a  S U 3OS-   5        GMx     S!R?                  U5      $ s  snf s  snnf s  snnf )"NrÒ   r   )ÚcKDTreerØ  r£  z	free studzno c                 óD   >• TU    R                   R                  S   S   * $ )NrÓ   rÒ   ©r  r
  )r‰  Úbss    €rS   r#  Ú Imagine.labels.<locals>.<lambda>n  s    ø€  R¨¡U§Z¡Z×%6Ñ%6°qÑ%9¸!Ñ%<Ñ$<rR   r%  é-   é   Ú(zX pieces in all; only the ones you can build on are listed -- the rest are buried inside)rÔ   rÃ  ÚleftrÄ  ÚrightÚmiddlerÓ   Ú#r¤  rr  r  rÅ  ÚtopÚbottomzmiddle heightrs  z -- the first piecerL   r†  r³   ) r°  rÜ   rß   r  râ   ró   rã   r  Úscipy.spatialró  râ  rá  rì   Ú
_sock_treer„  rU  r3  Ú
free_studsÚ
startswithr5  rŽ   r¹  r¸   r  rÎ  r^   rz  r  ru  rv  r±  r]   )rÎ  rÉ   rû   Úprrü   Úz1r™   ró  r!  r¿   Úshowr‰  ÚfreerØ  r  Úsider  Úfsrö  s                     @rS   ÚlabelsÚImagine.labelsd  s  ø€ Ø�X‰X‹ZˆœRŸYšYÁÓ'DÂ¸A¯©¯¬ÁÑ'DÓE˜ÔPUÉIÀrÒbcÐefÐbfÑ`g×`kÑ`kÓ`mÐopÒqrÐtuÐquÑov×ozÑozÓo|Ð[]ØˆÝ)Ù&(Ô<¢b ·)µ)¨Q�W‰W�Q�s‘VŽ_±)‰_¡bˆÑ<ÖefÉWÔUW×U]ÒU]Ð^_ÓU`ÔMaÐlp¸a¼lÜ”S˜“W‹~ˆÜˆr‹7�R‹<ô #,¨B¤-ô  E¢-™$˜!°;À!Ç,Á,ÈqÐRTÓBUÑ3U“AÐ^_×^jÑ^jÐklÐnpÓ^q×^|Ñ^|ð  ~C÷  _D—A¡-ˆDñ  EØ�I‰IÔ<ˆIÑ=Üœ#˜d 3 B˜i›.¬3¬u´S¸¼CÀ»GÀb¹LÓ5IÌ3ÈrË7Ó/SÓ+TÑTÓUˆDØ�J‰J˜œ3˜r›7˜)Ð#{Ð|Ô}ÜˆAØ�1‘ˆAØ—‘—‘×$Ñ$ QÓ'ˆA´5©y¸B¿F¹F»HÀrÇvÁvÃxÑ<OÐSTÑ;TÑ/TÔX[Ð]_×]cÑ]cÓ]eÐhj×hnÑhnÓhpÑ]pÐtuÑ\uÐwxÓXyÑ.y¨Ø %›Z‘6¸¸T»	©WÀxˆDÐXYÑVZÐ]_ÑV_ÔcfÐgiÑgnÐpqÓcrÑUrÐQRØ—‘˜a Ó$ˆBØ�J‰J˜˜1˜q™5˜' ¤5§9¡9¨Q¯X©X°q·x±xÓ#@Ð"AÀÄ4Ç7Á7Ç=Á=×CTÑCTÐUV×U[ÑU[Ð]^×]cÑ]cÓCdÐBeÐegÐhlÐgmÐmoØ#$ t£8™%¸QÀ»X±È?Ð[Ð[\ÐvwÐ{|Óv|Ñ]rð  CEð  ]FðGæ')˜B˜r˜d™)¨rñ3÷ 4ñ ð �y‰y˜‹~Ðùò) (Eùó =ùó
 Es   ¦M6Â0M;ÄNÄ;$NÅ#Nc           
      óü  ^^• [         R                  " T5      (       a  TR                  (       d  gUb  UOU R                  5       n[	        U SS5      nUbe  TR                   Vs/ s HM  nTR                  US   5      S   S:”  d  M   UR                  TR                  US   5      S5      (       a  MK  UPMO     nnO–U VVs/ s H0  ofTLd  M	  UR                    H  ovR                  US   5      PM     M2     nnnTR                   V^s/ s H?  mTR                  TS   5      S   S:”  d  M   [        UU4S	 jU 5       5      (       a  M=  TPMA     nnU(       d  g
U Vs1 s H=  n[        [        US   S   S-  5      5      [        [        US   S   S-  5      5      4iM?     n	nU	 V
Vs/ s H  u  p¦U
PM	     snn
U	 V
Vs/ s H  u  p¦UPM	     nn
nn[        U5      [        U5      -
  S-   [        U5      [        U5      -
  S-   pí[        XÞ45      u  pÞ[        U	5      XÞ-  :X  a(  [        U	5       S[        U	5      S:w  a  SOS SU SU S3$ [        U	5       SU SU S3$ s  snf s  snnf s  snf s  snf s  snn
f s  snn
f )zðhow many studs on top of p are free, and in what shape, so it knows what size to shop for (Ivy, Oct 23 2026: "It should also
count studs so it knows what to shop for"). '6 free studs on top (2x3)', or '5 free studs on top (spread over 2x4)'rL   Nr  rß  rÒ   ç®Gáz®ï?rØ  ç333333ã?c              3   ó’   >#   • U  H<  n[         R                  R                  TR                  TS    5      U-
  5      S:  v •  M>     g7f©rØ  r  N©rÜ   r   r!  rá  )r   rj   rÉ   re  s     €€rS   r"  Ú%Imagine.free_studs.<locals>.<genexpr>„  s]   øé € ð  WQò  KPð  FGÔWY×W`ÑW`×WeÑWeÐfg×fmÑfmÐnoÐpsÑntÓfuÐxyÑfyÓWzð  ~Aö  XAò  KPùó   ƒAAzno free studs on topr   r)  rÓ   z
 free studrÎ  z	 on top (rh  rs  z  free studs on top (spread over )r  ÚuprightrÚ   r°  rŒ  ré  Úquery_ball_pointrá  râ  r1  ró  r9   r  rã   rŽ   rU  )rÎ  rÉ   rö  Útreere  r  r@  r!  Úsocksr  rË   ÚxsÚysrj   rw   s    `  `          rS   r  ÚImagine.free_studsz  s}  ù€ ô �|Š|˜A�‰ a§g§g°bØ‘>‰R q§x¡x£zˆÜ�q˜,¨Ó-ˆØÑØ ŸwšwÓšw˜!¨!¯+©+°a¸±iÓ*@ÀÑ*CÀdÑ*J“AÐSW×ShÑShÐij×ipÑipÐqrÐsvÑqwÓixÐz}×S~—A™wˆDÐˆDá.0ÔRªb¨¸Q°J“_ÈÏ	Í	À1—W‘W˜Q˜s™V–_É	‘_©bˆEÑRØ Ÿwšwô  Ršw˜!¨!¯+©+°a¸±iÓ*@ÀÑ*CÀdÑ*J“AÔSVõ  WQñ  KPó  WQ÷  TQ—A™wˆDð  RÞÐ2ÙQUÓVÒQUÈAŒc”%˜˜#™˜q™	 C™Ó(Ó)¬3¬u°Q°s±V¸A±YÀ±_Ó/EÓ+FÓGÑQUˆÐVÙ !Ô"¢™˜“!¡Ò"±1Ô$5²1©4¨1£Q±1ˆBÑ$5ˆ¼cÀ"»gÌÈBËÑ>OÐRSÑ>SÔUXÐY[ÓU\Ô_bÐceÓ_fÑUfÐijÑUj¸!Ü�q�f‹~‰ˆÜUXÐYZÓU[Ð_`Ñ_dÓUd”#�a“&�˜¬3¨q«6°Q«;¡C¸BÐ#?¸yÈÈÈ1ÈQÈCÈqÐQð  	^ÔmpÐqrÓmsÐltð  uUð  VWð  UXð  XYð  Z[ð  Y\ð  \]ð  k^ð  	^ùò @ùãRùò RùâVùÛ"ùÓ$5sC   Á#IÂ'IÂ1IÂ?I"Ã+I"ÄI(Ä+I(ÅI(ÅAI-Æ'I2Æ=I8c                 ó´	  ^ ^^^ • U(       a  T R                  U5      OSnT R                  5        Vs/ s H  oUS   S:w  d  M  Ub
  US   UL d  M  UPM     nnU(       d  / $ T R                  TSS9 VVs/ s H  u  pxUPM	     snnSS n	/ [        5       smn
T R                  R                  [        U5      5      SS  Vs/ s H  o¶U   PM	     nnT R                     ST l        U	 GHs  nSnU GHU  n[        S	5       GH8  nS
 GH$  nT R                  X\Xï5      nU(       d  M  Uu  nnU[        [        R                  " UR                  SS	2S	4   S5      5      4nT R                  R                   R"                  US  Vs/ s H1  n[%        USS5      (       d  M  UR                  R'                  5       PM3     nnUR                  R'                  5       nT R                  R)                  UU5        UU
;   a  Mô  U
R+                  U5        TR-                  X\XïUS   UUSS.5        US-  n  O   U(       d  GM9    O   U(       d  GMV    O   [        T5      S:¼  d  GMt    O   ST l        / nT HV  nT R                  US   US   US   US   5      nU(       d  M,  T R                  R(                  " U6   UR-                  U5        MX     UmSSS5        T(       d  / $ U U4S jn[/        S	5       n[1        UR3                  U[5        T5      5      5      m SSS5        [7        [8         S3S5       n[;        TT 5       Ho  u  nu  nnUR=                  [>        R@                  " US   US   RB                  TUU[D        RF                  RI                  T RJ                  5      S.5      S-   5        Mq     SSS5        [M        [        [        T5      5      U 4S jS9SU nSRO                  UU 4S jU 5       5      nU(       a  T US      S   S:  a1  T RP                  R-                  ST RR                   ST SU S 35        / $ T RP                  R-                  ST RR                   ST S!3U(       a  S"U 3OS#-   S$-   U-   5        U Vs/ s H  nTU   PM
     sn$ s  snf s  snnf s  snf s  snf ! , (       d  f       GNä= f! , (       d  f       GN®= f! , (       d  f       GN%= fs  snf )%ad  thumb through the bin for what it wants, keep what FITS the piece it named, and ask a quick eye what each one reads as (Ivy,
Oct 23 2026: "It could run mcts to find pieces that fit and then ask haiku what it thinks of those pieces (collecting
descriptions)" -- for things no part is called, like clouds of dust). Every reading is kept in parts/reads.jsonl.Nr   rÝ  rÓ   T)Úrankedé   r  rH   ©r   rü  rŸ  F©rÿ  r±  r   r  r­  ræ  r®  Úaimedrÿ  r±  r   r  c           	      óD  >• U u  p [         R                  R                  T	R                  T	R	                  USU 35      5      n[        SU/SSS9u  pEUR                  5       R                  S5      R                  5       S S n[        R                  R                  S[         R                  R                  [        S	5      5        SS K
n[           [        R                  " UR                  UT
/5      [        R                  S
9nS S S 5        W[        R                   " [        R"                  R%                  USSS9S5      -  n['        [        R(                  " ['        US   US   -  5      S-
  S-  S-  SS5      5      U4$ ! , (       d  f       Nƒ= f! [*         a     gf = f)NrÎ  z¨A Lego build; the MAGENTA piece was just added. In a few words, what does the magenta piece look like it is, right there in the scene? Answer with just those few words.rã  rŽ  r`  z."r£  r   r†   ©ÚdtyperÓ   T©rß  Úkeepdimsç•Ö&è.>çš™™™™™É?r  é
   )r   rL   )r[   r\   r]   r™   r¸  r›  rÁ   r�  r‘  rm   ÚteachÚ
TEACH_LOCKrÜ   rò   ÚembÚfloat32r4  r   r!  rë   Úclipr•   )rº  r‰  rø   rd  re  r   Úrar*  rû   rÎ  Úwants            €€rS   rO   ÚImagine.shop.<locals>.read¬  s?  ø€ Ø‰DˆAð
-Ü—g‘g—l‘l 1§5¡5¨!¯'©'°!°q¸¸°WÓ*=Ó>�ä ð "_ØadÐ`eÐgiÐrzñ|‘�à—W‘W“Y—_‘_ TÓ*×0Ñ0Ó2°3°BÐ7�Ü—‘—‘ ¤2§7¡7§<¡<´°iÓ#@ÔAÃ<Þ¤R§Z¢Z°·	±	¸2¸t¸*Ó0EÌRÏZÉZÑ%X —ZØ”R—Z’Z¤§	¡	§¡¨q°qÀ4 Ð HÈ$ÓOÑO�ÜœRŸWšW¤e¨A¨a©D°1°Q±4©KÓ&8¸3Ñ&>À#Ñ%EÈÑ%JÈAÈrÓRÓSÐUWÐWÐW÷  •Zûô Ó,¡WÐ,ús+   ‡CF Ã5FÄA<F Æ
FÆF Æ
FÆFz/parts/reads.jsonlrË   r­  )r  Úonr0  Úreads_asr-  rv   r³   c                 ó   >• TU    S   * $ ©Nr   rQ   )r!  Úreadss    €rS   r#  ÚImagine.shop.<locals>.<lambda>½  s   ø€ ¸¸a¹À¹±|rR   r%  r†  c              3   óÎ   >#   • U  HZ  n[         R                  R                  R                  TU   S    TU   S    5       STU   S   =(       d    S STU   S   S S3v •  M\     g7f)	r±  z
 reads as rÓ   r   rr  r   ú.0fz/10)N©r  ru  rv  r^   )r   r!  r«  r6  s     €€rS   r"  ÚImagine.shop.<locals>.<genexpr>¾  s“   øé € ð  Xò  RWð  MNœTŸW™WŸ]™]×.Ñ.¨t°A©w°v©ÀÀQÁÈÁÓPÐQÐQ[Ð\aÐbcÑ\dÐefÑ\g×\nÐknÐ[oÐoqÐrwÐxyÑrzÐ{|Ñr}ð  Bð  rCð  CGõ  Hò  RWùs   ƒA"A%rÔ   r€  z: you shopped for "z)" but NOTHING in your bin reads as that (z[). Wish for it, or ask the catalog with a token -- this turn's options are your usual ones.r{  z on rL   rq  )*ry  r0  Údigr¹  ÚrngÚpermutationrU  rJ   r  r„  r	  rä   rÜ   r9   ræ  r  r¶  r·  rŒ  r2  r¯  rµ   r¸   r   rq   rÒ  r3  rM   rm   ÚziprÂ   rY   rc  r±  r[   r\   r�   r™   rŽ   r]   rª  rR  )!rÎ  r0  r2  r  r  rØ  r0  rÉ   Úscr  rÅ   r!  r±  rÙ  r   r  rÊ   r  Ún0r  rÈ   r®  ræ  Úokrø   rO   rž   r›   r/  r™  Úseen_r«  r6  s!   ``                             @@rS   ÚshopÚImagine.shopŠ  s®  û€ ö  ˆa�g‰g�bŒk TˆØŸG™GœIÓZšI�q¨1©°©“¸c¹kÈQÈqÉTÐUXÈ[—™IˆÐZÞ˜R�iØ!"§¡ t°D Ñ!9Ô:Ò!9™˜“!Ñ!9Ò:¸3¸BÐ?ˆØœ›ˆ
ˆˆdØ#$§5¡5×#4Ñ#4´S¸³ZÓ#@ÀÀ!Ñ#DÓEÒ#D˜a�q”Ñ#DˆÐEØ�V‹VØˆAŒGÜ�Ø�Ü�AÜ$ QŸx˜Ü$/˜DØ !§
¡
¨1°CÓ >˜AÞ#$¡hØ&'™G˜C °´e¼B¿HºHÀSÇUÁUÈ2ÈAÈ2ÈqÈ5Á\ÐSTÓ<UÓ6VÐ/W¨Ø89¿¹¿¹¿¹ÀbÀcÑ8JÓ#jÒ8J°1ÌgÐVWÐYaÐch×Ni£J A§C¡C§H¡H¦JÑ8J˜DÐ#jÐps×puÑpu×pzÑpzÓp|ÐlmÐ~÷  Bñ  B÷  Gñ  Gð  HKð  MOô  PØ" d›{©HØ ŸH™H SœM¨4¯;©;ÀÐX[ÐstÐuvÑswÐ~ð  JNð  Y]ñ  8^ô  ,_Ø 1™H˜C¡eñ %0÷ ™3¡ñ  (÷ ‘s™Eñ ô �t“9 –>¡5ñ ð ˆAŒGØˆBÛ�Ø—J‘J˜q ™y¨!¨F©)°Q°u±X¸qÀ¹yÓI�ß�1�a—c‘c—h’h ‘l B§I¡I¨a¦Lñ ð ˆD÷- ö. ˜B�Yö	-ô   Ô" b´$°r·v±v¸dÄIÈdÃOÓ7TÓ2U¨%×"Ü”T�FÐ,Ð-¨sÔ3°qÜ" 4¨Ö/‘�‘8�B˜Ø—‘œŸ
š
¨A¨f©I¸Q¸v¹Y¿^¹^ÐUYÐgiÐtvô  @B÷  @Gñ  @G÷  @Pñ  @Pð  QR÷  QVñ  QVó  @Wñ  $Xó  Yð  \`ñ  `ö  añ  0÷ 4ô ”uœS ›YÓ'Ô-CÑDÀRÀaÐHˆØ—	‘	õ  Xñ  RWó  Xó  XˆÞ˜˜e A™h™¨Ñ*¨QÓ.Ø�G‰G�N‰N˜U 1§6¡6 (Ð*>¸t¸fÐDnÐotÐnuð v^ð _ô `àˆIØ	�‰�‰˜˜qŸv™v˜hÐ&:¸4¸&ÀÐCÖVXÈÈbÈTÁ{Ð^`ÑaÐdhÑhÐkpÑpÔqÙ!&Ó'¢˜A��Q”¡Ñ'Ð'ùòk [ùã:ùâEùò $k÷ ŽVú÷J #Ö"úß3Ö3üò (sz   ±R
Á	R
ÁR
Á2RÂ=RÃB#RÅ<RÆRÆ4A:RÈ3	RÉRÉ7RÊ0RË%%R1Ì%B SÑ8SÒRÒ
R.Ò1
S Ó
Sc                 ó&  • [         R                  " S[        U=(       d    S5      5      o R                  5       nU(       aQ  S[	        UR                  S5      5      s=:  a  [        U5      ::  a#  O  O U[	        UR                  S5      5      S-
     $ S $ )Nz#?(\d+)rL   r   rÓ   )r½   r¾   ru   r°  ró  rÀ   rU  )rÎ  Úlabelrø   rö  s       rS   ry  ÚImagine.pieceÅ  sc   € Ü�IŠI�j¤# e§k¨rÓ"2Ó3ˆ¿(¹(»*°RÞ*+°´C¸¿¹À»
³OÕ0NÄsÈ2ÃwÖ0Nˆr”#�a—g‘g˜a“j“/ AÑ%Ñ&ÐXÐTXÐXrR   c                 óî  ^^^^• [        5       n[        U5       GHÖ  u  nm[        U5       GH¿  u  nmXT::  a  M  TR                  R                  TR                  R                  smmTS   TS   S-   :„  R	                  5       (       d!  TS   TS   S-   :„  R	                  5       (       a  M  [	        UU4S jTR
                   5       5      =(       d     [	        UU4S jTR
                   5       5      n[	        UU4S jU 5       5      nS nU" TT5      =(       d	    U" TT5      n	[	        UU4S j[        R                  " TR                  5       5       5      n
TR                  TR                  1S	S
1:H  =(       a    [	        S TT4TT44 5       5      n[	        S TT4TT44 5       5      nU(       d&  U(       d  U	(       d  U(       d  U
(       d
  U(       d  GM­  UR                  XE45        GMÂ     GMÙ     U$ )zTwhich bodies are joined: a stud sitting in a socket, or a pin whose box touches bothr   rÓ   ç      à?c           	   3   óÞ   >#   • U  Hb  nTR                     HN  n[        R                  R                  TR	                  US    5      TR	                  US    5      -
  5      S:  v •  MP     Md     g7fr  ©râ  rÜ   r   r!  rá  ©r   re  r!  rË   r@  s      €€rS   r"  Ú Imagine.links.<locals>.<genexpr>Ð  óU   øé € ÐuÒZaÐUVÐkl×ktÕktÐfgœŸ™Ÿ™¨¯©°°#±«¸!¿'¹'À!ÀCÁ&»/Ñ(IÓJÈSÖPÑktÑPÒZaùó   ƒA*A-c           	   3   óÞ   >#   • U  Hb  nTR                     HN  n[        R                  R                  TR	                  US    5      TR	                  US    5      -
  5      S:  v •  MP     Md     g7fr  rL  rM  s      €€rS   r"  rN  Ñ  rO  rP  c              3   óT   >^#   • U  H  m[        U4S  jTT4 5       5      v •  M     g7f)c              3   óü   >#   • U  Hq  nTR                   R                  S    US   S-   :„  R                  5       =(       d0    US    TR                   R                  S   S-   :„  R                  5       (       + v •  Ms     g7f)r   rÓ   r(  N)r  r
  r1  )r   rh  rÈ   s     €rS   r"  Ú*Imagine.links.<locals>.<genexpr>.<genexpr>Ò  sx   øé € ð  Eò  |DÐvw 1§6¡6§=¡=°Ñ#3°a¸±d¸S±jÑ#@×"EÑ"EÓ"G×"pÈAÈaÉDÐST×SYÑSY×S`ÑS`ÐabÑScÐfiÑSiÑLi×KnÑKnÓKp×qÑqò  |Dùs   ƒA9A<N)Úall)r   rÈ   Úbar  s    @€€rS   r"  rN  Ò  sL   ùé € ð  Tò  OSð  JKœô  EÐ|~ð  ACñ  |Dó  E÷  Eð  Eò  OSùs   „$(c           	      óH  • U R                    H’  nU R                  US   5      nUR                   Hk  nUR                  US   5      UR                  US   5      peS H;  n[        R
                  R                  XVU-  US   -  S-  -   U-
  5      S:  d  M9        g   Mm     M”     g)	NrØ  rß  )rÓ   r}   rà  rÒ   rÕ   TF)rÚ   rá  rè  ré  rÜ   r   r!  )Úurý   re  r@  r  ÚhcÚhxÚsgs           rS   Ústud_in_holeÚ#Imagine.links.<locals>.stud_in_holeÔ  s“   € ØŸWœW˜ØŸW™W Q s¡V›_˜Ø!"§¤˜AØ%&§W¡W¨Q¨s©V£_°a·k±kÀ!ÀFÁ)Ó6L Û&- Ü#%§9¡9§>¡>°"¸B±wÀÀ:ÁÑ7NÐQRÑ7RÑ2RÐUWÑ2WÓ#XÐ[^Õ#^Ógkó '.ó ")ñ %ð !rR   c              3   óþ  >#   • U  Hò  n[         R                  " TU5      u  p#[         R                  " TR                  5        H±  n[         R                  " TU5      u  pV[        R
                  R                  X%-
  5      S :  =(       ah    [        [        X6-  5      S-
  5      S:  =(       aE    [         R                  R                  X5      =(       d    [         R                  R                  XA5      v •  M³     Mô     g7f)r  rÓ   gš™™™™™©?N)
r  rã  rä  r±  rÜ   r   r!  rõ   ÚSNr«  )	r   ÚdaÚpaÚxaÚdbÚpbÚxbrË   r@  s	          €€rS   r"  rN  Ý  sÙ   øé € ð bÚ#9˜RÌÏÊÐYZÐ\^ÓI_¹f¸bÜ#'§>¢>°!·&±&×#9˜RÌÏÊÐYZÐ\^ÓI_¹f¸bô Ÿ™Ÿ™¨©Ó0°3Ñ6÷  K¼3¼sÀ2Á7»|ÈaÑ?OÓ;PÐSWÑ;W÷  KÔ]a×]dÑ]d×]iÑ]iÐjlÓ]q÷  ^JÔuy×u|Ñu|÷  vBñ  vBð  CEó  vJô  Ká#9ñ KÚ#9ùs   ƒC:C=r   r   c              3   ó  #   • U  H{  u  pUR                   S :X  d  M  [        R                    HO  n[        R                  R                  UR                  U-  SS2S4   UR                  SS2S4   -
  5      S:  v •  MQ     M}     g7f)r   NrH   r*  )r±  r  rç  rÜ   r   r!  ræ  )r   rj   re  ÚMs       rS   r"  rN  à  s”   é € ð DcÚ!1™˜°Q·V±V¸xÑ5Gó ExÜQU×QaÕQaÈAô EGÇIÁIÇNÁNÐTU×TWÑTWÐZ[ÑT[Ð]_Ð^_Ð]_ÐabÐ]bÑScÐfg×fiÑfiÐjlÐklÐjlÐnoÐjoÑfpÑSpÓDqÐtwÖDwÙQañ ExÚ!1ùs   ‚BœA)Bc           	   3   óL  #   • U  Hš  u  p[         R                  " UR                  5      (       d  M,  UR                  S S   HZ  n[         R                  " U5        H<  n[
        R                  R                  UR                  US   5      U-
  5      S:  v •  M>     M\     Mœ     g 7f)NrÓ   rØ  r  )	r  Ú	round_1x1r±  râ  rå  rÜ   r   r!  rá  )r   rj   r¥  r!  rÈ   s        rS   r"  rN  â  s…   é € ð QÒO_ÁtÀqÔcg×cqÒcqÐrs×rxÑrx×cyÓBØ"#§)¡)¨B¨Q¤-˜Q¼×9LÒ9LÈQ×9O°Aô Ÿ™Ÿ™¨¯©°°#±«¸!Ñ(;Ó<¸sÖBÙ9Oñ CÙ"/ñ CÒO_ùs   ‚+B$±A3B$)
r¹  r3  r  r
  r1  rÚ   r  rä  r±  rµ   )rÎ  r°  r®  ÚEr‰  rž  rx   Úpnr\  ÚshÚsnÚtyÚbtrË   r@  rV  r  s                @@@@rS   ÚlinksÚImagine.linksÈ  sÅ  û€ ä‹EˆÜ˜f×%‰DˆAˆqÜ! &×)‘��1Ø“6™8ØŸ™Ÿ™¨¯©¯©���BØ�q‘E˜B˜q™E C™KÑ'×,Ñ,×.Ñ.°2°a±5¸2¸a¹5À3¹;Ñ3F×2KÑ2K×2MÑ2MÉxÜÕuÐZ[×ZaÒZaÓuÓu÷ vÜÕuÐZ[×ZaÒZaÓuÓuð äõ  Tñ  OSó  Tó  T�ò!ñ " ! QÓ'×=©<¸¸1Ó+=�Üõ bÜ#'§>¢>°!·&±&Ô#9óbó b�ð —f‘f˜aŸf™fÐ%¨&°(Ð);Ñ;÷ cÄñ DcØ#$ a &¨1¨a¨&Ñ!1óDcó Ac�äñ QÐQRÐTUÐPVÐYZÐ\]ÐX^ÑO_ó Qó Q�æžžr¦R®2·±°Q·U±U¸A¸6·]ô1 *ñ &ð4 ˆrR   c                 óÆ  • UR                  [        R                  " / SQ5      5      o"[        R                  R	                  U5      -  o!R
                  R                  R                  S5      o1R
                  R                  R                  5       S-  S-   n/ nU R                  5        H³  nUR                   H   nUR                  US   5      UR                  US   5      p˜[        [        X’-  5      S-
  5      S:”  a  MI  Xƒ-
  oªX¢-  U-  -
  n[        R                  R	                  U5      S	:  d  M{  [        X¢-  5      U::  d  MŽ  UR                  U5          M±     Mµ     XSU4$ )
zlthe pieces a pin actually goes THROUGH: a hole on the pin's own axis, within its length (not bounding boxes))r*  r   r   r   rÒ   rJ  rØ  rß  rÓ   g{®Gáz”?r  )ré  rÜ   rì   r   r!  r  râ   r  r  r  r°  rè  rá  rõ   r¸   )rÎ  rÈ   ÚaxrØ  Úhalfr™   r@  r  rY  rZ  rw   Úoffs               rS   Ú
pin_bodiesÚImagine.pin_bodiesç  s0  € à�[‰[œŸš¢+Ó.Ó/ˆ´r·y±y·~±~ÀbÓ7IÑ1I°ÏvÉvÏÉ×OcÑOcÐdeÓOfÈ1×ouÑou×o}Ño}÷  pBñ  pBó  pDð  GHñ  pHð  KNñ  pNÐhlØˆØ—‘–ˆAØ—W”W�ØŸ™  3¡›¨!¯+©+°a¸±iÓ*@�BÜ”s˜2™7“| aÑ'Ó(¨4Ó/±Ø‘F� q¡v°¡mÑ"3˜CÜ—9‘9—>‘> #Ó&¨Õ,´°Q±V³ÀÕ1DÀcÇjÁjÐQRÄmÒUZó	 ñ ð �rˆzÐrR   c                 ó  ^• U R                  5       oR                  R                  R                   Vs/ s H  n[	        USS5      (       d  M  UPM     nnU Vs0 s H  n[        U5      U R                  U5      _M      nn/ nU GHÒ  nU[        U5         u  pgn[        U5      S:w  a  M&  Uu  pšU Vs/ s H7  o»ULd  M	  X”[        U5         S   ;   d  M  X¤[        U5         S   ;   d  M5  UPM9     nn[        S Xš4X©44 5       5      nU(       d  U(       a  M”  U R                  X Vs/ s H  o»ULd  M	  UPM     sn5      n[        U5       VVs0 s H  u  pû[        U5      U_M     nnn[        [        U5      5       Vs0 s H  oÿ[        5       _M     snmU HR  u  nnUU1U[        U	5         U[        U
5         1:X  a  M*  TU   R                  U5        TU   R                  U5        MT     U4S jnU" U[        U
5         5      nSU;   a  X©U" U[        U	5         5      np©SU;   a  GM©  UR                  X)X§UU Vs/ s H  oñU   PM	     snS.5        GMÕ     U$ s  snf s  snf s  snf s  snf s  snnf s  snf s  snf )zÖsingle-pin joins: a pin through exactly two pieces that have no other connection between them. Each is
(pin, fixed piece, moving piece, axis point, axis dir, moving group) -- the group is everything on the far siderŸ  FrÒ   r   c           
   3   ó  #   • U  Hw  u  pUR                     Ha  o2R                    HN  n[        R                  R	                  UR                  US    5      UR                  US    5      -
  5      S:  v •  MP     Mc     My     g7fr  )rÚ   râ  rÜ   r   r!  rá  )r   rX  rý   re  r!  s        rS   r"  Ú!Imagine.hinges.<locals>.<genexpr>ý  sy   é € ð  RÒ\lÑTXÐTUÐvw×v}Õv}Ðqr÷  HQõ  HQð  CDœŸ	™	Ÿ™ q§w¡w¨q°©v£¸¿¹ÀÀ3Á»Ñ'HÓIÈCÖOñ  HQÑOÑv}ÑOÒ\lùó   ‚A?Bc                 ó¸   >• U 1U /p!U(       aL  TUR                  5           H,  nX1;  d  M
  UR                  U5        UR                  U5        M.     U(       a  ML  U$ r  )Úpoprµ   r¸   )rÒ  rÅ   Útodorž  Úadjs       €rS   ÚcompÚImagine.hinges.<locals>.comp  sL   ø€ Ø#˜W u g�dÞØ  §¡£œ_˜Ø�=¨$¯(©(°1¬+°t·{±{À1¶~ñ -÷ �dð �rR   )ÚpinÚfixedÚmovingrØ  rs  rÀ   )r°  r  r¶  r·  rŒ  r  rv  rU  r1  rp  r3  r„  r¹  rµ   r¸   )rÎ  rö  rÈ   r®  Úthrur™   ÚtworØ  rs  rË   r@  rh  ÚothersrÚ   rj  r‰  r   rž  r€  Úgbr  s                       @rS   ÚhingesÚImagine.hingesò  sO  ø€ ð �X‰X‹Zˆ¯C©C¯G©G¯MªMÓ YªM q¼WÀQÈÐRW×=X§©M˜Ð YÙ04Ó5²¨1”�1“�q—|‘| A“Ò&±ˆÐ5ØˆÜˆAØœb ›e™‰JˆC�BÜ�3‹x˜1‹}™hØ‰DˆAÙ!%Ód¢˜A°!¨“a¸Ä"ÀQÃ%¹[È¹^Ñ8K“aÐPQÔZ\Ð]^ÓZ_ÑU`ÐabÑUcÑPc—a¡ˆFÐdÜñ  RÐ^_Ð]cÐfgÐekÑ\ló  Ró  RˆEÞž¡à—‘˜¨Ó;ª 1¸°
ŸQ©Ñ;Ó<ˆAÔZcÐdfÔZgÔDhÒZgÑRVÐRSÄRÈÃUÈAÂXÑZg¸cÑDhÜ%*¬3¨r«7¤^Ó4¢^ ”c“e’8¡^Ñ4ˆCÛ‘��1Ø�q�6˜c¤" Q£%™j¨#¬b°«e©*Ð5Ó5±xØ�A‘—
‘
˜1”˜s 1™vŸz™z¨!ž}ñ õñ �cœ"˜Q›%‘jÓ!ˆBØ�B‹w 1©¨c´"°Q³%©jÓ)9˜b˜1Ø�B‹wšØ�J‰J˜q¸ÈÑfhÓViÒfhÐabÐZ[ÔW\ÑfhÑViÑj×kñ- ð. ˆ
ùò5 !ZùÚ5ùò eùò <ùÓDhùÚ4ùò WjsG   ³IÁIÁ%I"Â2I'Â>I'ÃI'Ã*I'Ä'I,Ä3I,ÅI1Å?I7È?I<c           	      óº  • SSK nUS   oD Vs1 s H  n[        U5      iM     nnU R                  R                  R                   Vs/ s HL  n[        USS5      (       d  M  XqS   Ld  M   [        S U R                  U5      S    5       5      U::  d  MJ  UPMN     nnXH-    Vs0 s H'  n[        U5      UR                  R                  5       _M)     n	nU R                  5        V
s/ s H  n
[        U
5      U;  d  M  U
PM     nn
[        S U R                  5        5       5      nX"S	-  US
-  US-  4 GH“  nUR                  R                  [        R                  " U5      US   US   5      nXH-    H  o^U	[        U5         -  Ul        M     SnU HØ  nUR                   nU Hº  nUUS   L a  M  UR                   nUR"                  S   UR"                  S   S-   :„  R%                  5       (       d5  UR"                  S   UR"                  S   S-   :„  R%                  5       (       a  M…  [&        R(                  R+                  UUSS9[&        R,                  :”  d  M¸  Sn  O   U(       d  MØ    O   U(       d  [        S U 5       5      US-
  :  a  SnU(       d  Us  $ XH-    H#  oY[        U5         R                  5       Ul        M%     GM–     gs  snf s  snf s  snf s  sn
f )zyswing the moving group around the hinge pin; if it would crash into the rest, try smaller angles (returns the angle used)r   NrÀ   rŸ  Fr‚  c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr  ©r  rg  s     rS   r"  ÚImagine.bend.<locals>.<genexpr>  s)   é € ð  gJò  wIÐqrÔgiÐjk×glÐglò  wIùó   ‚c              3   óX   #   • U  H   oR                   R                  S    S   v •  M"     g7f©r   rÒ   Nrõ  rm  s     rS   r"  rŽ    s    é € Ð=²*¨Q—V‘V—]‘] 1Ñ% aÖ(²*ùr…  g      è?rJ  ç      Ð?rs  rØ  rƒ  rÓ   gš™™™™™¹?i   ©r  Tc              3   óX   #   • U  H   oR                   R                  S    S   v •  M"     g7fr‘  rõ  )r   rø   s     rS   r"  rŽ  %  s    é € Ð:²E¨q—v‘v—}‘} QÑ'¨Ö*²Eùr…  r+  r   )Útrimeshr  r  r¶  r·  rŒ  r¹  rv  ræ  r2  r°  rã   ÚtransformationsÚrotation_matrixrÜ   Úradiansr  r
  r1  r  ÚAssemblyÚpenetrationÚ	DEPTH_TOL)rÎ  r  r§  r•  rÀ   rh  ÚgidrÈ   ÚgpinsÚbeforer@  ÚrestÚfloor0ÚangÚRÚbadrø   rÇ   r›   r  s                       rS   r¦  ÚImagine.bend  s¢  € ãØ�'‘
ˆ°%Ó"8²%¨Q¤2 a¦5±%˜CÐ"8ØŸC™CŸG™GŸMšMó  RšM�q¬W°Q¸À%×-H“ÈQÐX]ÑV^ÐM^“Ôcfñ  gJÐvw÷  wCñ  wCð  DEó  wFð  GHò  wIó  gJó  dJð  NQñ  dQ—™Mˆð  RØ-2ª]Ó;ª]¨”"�Q“%˜Ÿ™Ÿ™›Ò#©]ˆÐ;ØŸ8™8œ:Ó:š:�a¬¨A«°cÑ)9—™:ˆÐ:ÜÑ=°!·(±(´*Ó=Ó=ˆØ t™^¨W°s©]¸GÀd¹NÔKˆCØ×'Ñ'×7Ñ7¼¿
º
À3»ÈÈ4ÉÐRSÐTWÑRXÓYˆAØ”]�¨f´R¸³U©mÑ*; A¦C‘]ØˆCÛ�Ø—V‘V�Û�AØ˜A˜g™J’©ØŸ™�BØŸ	™	 !™ r§y¡y°¡|°cÑ'9Ñ9×>Ñ>×@Ñ@ÀRÇYÁYÈqÁ\ÐTV×T]ÑT]Ð^_ÑT`ÐcfÑTfÑEf×DkÑDk×DmÑDmÑowÜ—z‘z×-Ñ-¨b°"¸Ð-Ð<¼q¿{¹{ÕJÐRVÈCÑX]ñ	 ÷
 �3™ñ ö ÜÑ:±EÓ:Ó:¸VÀc¹\ÓIÐQUÈ3Þ˜sš
Ø”]�´°A³©-×*<Ñ*<Ó*> A¦C”]ñ Lð  ùò+ #9ùò RùÚ;ùÚ:s/   �K	ÁKÁ KÁ)&KÂKÂ!.KÃ#KÃ:Kc                 ó  ^• U R                  5       o" Vs/ s H  o3S   TL d  M  UPM     nnU(       a  US   $ U Vs/ s H$  n[        U4S jUS    5       5      (       d  M"  UPM&     nnU(       a  [        US S9$ S$ s  snf s  snf )znthe hinge that swings piece p: one where p is the moving piece, else the smallest swinging group containing itr„  r   c              3   ó*   >#   • U  H  oTL v •  M
     g 7fr  rQ   ©r   rh  rÉ   s     €rS   r"  Ú$Imagine.hinge_for.<locals>.<genexpr>-  s   øé € Ð$@²Z°¨!¥V²Zùó   ƒrÀ   c                 ó   • [        U S   5      $ )NrÀ   ©rU  )r  s    rS   r#  Ú#Imagine.hinge_for.<locals>.<lambda>.  s   € ¤s¨1¨W©:¤rR   r%  N)r‰  r1  rã   )rÎ  rÉ   Úhsr  Úownrð  s    `    rS   Ú	hinge_forÚImagine.hinge_for)  sx   ø€ à�X‰X‹Zˆ¨2ÓBª2 a°8±ÀÐ1A§©2˜ÐBÞ�s˜1‘v�ÙÓAš2�a¤Ô$@°Q°w²ZÓ$@×!@—™2ˆÐAÞ;?Œs�4Ñ6Ñ7ÐIÀTÐIùò  CùâAs   •A=¤A=¼!BÁ!Bc                 ó  • U R                  U5      nUc  gUS    Vs1 s H  n[        U5      iM     nn[        U R                  R                  R
                  5       VVs/ s H]  u  px[        U5      U;   dG  [        USS5      (       d  M(  X„S   Ld  M1  [        S U R                  U5      S    5       5      U::  d  M[  UPM_     n	nnU R                  U[        U5      5      n
U
(       a_  [        U S0 5      U l        U R                  R                  [        US   5      S	5      U
-   S
-   S-  S
-
  U R                  [        US   5      '   U
(       da  U S[        R                  US   R                  S5       S[        R                   R"                  R                  US   R$                  S5       S3$ [&        R&                  " 5       X”S   R)                  5       US   R)                  5       U
S.U R*                  S'   U R-                  5         [&        R.                  " S5        U S[        R                  US   R                  S5       S[        R                   R"                  R                  US   R$                  S5       S[1        [3        U
5      5       S[3        U R                  R                  [        US   5      S5      5       S3
[1        U
[        U5      -
  5      S:”  a  S[3        [        U5      5       S3-   $ S-   $ s  snf s  snnf )zlbend at p's hinge, tell the page how to animate it, re-render. Returns a sentence for the notebook, or None.NrÀ   rŸ  Fr‚  c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr  r�  rg  s     rS   r"  Ú"Imagine.do_bend.<locals>.<genexpr>5  s   é € Ð;Ò(: 1œ˜AŸ˜Ò(:ùr�  r   Úhinge_angler   rý  ç     €v@z tried to bend the r„  r   r¤  rL   z" but it would crash into somethingrØ  rs  )r  ÚnodesrØ  rs  Údegr¦  r*  z
 bent the z degrees on its pin (now at z	 degrees)rÓ   z, not the full z: it would have crashed)r¯  r  r3  r  r¶  r·  rŒ  r¹  rv  r¦  rë   r´  r^   rÎ  rz  r  ru  rv  r±  r7  rê   rQ  rb  r†  rõ   r9   )rÎ  rÉ   r§  Úwhor  rh  rœ  rž  rÈ   r¶  r¡  s              rS   rÐ  ÚImagine.do_bend/  sP  € à�K‰K˜‹NˆØ‰9˜TØ šjÓ)šj˜Œr�!Žu™jˆÐ)Ü(¨¯©¯©¯©Ô7ô EÒ7‘t�q¼2¸a»5ÀC»<ÌGÐTUÐW_Ðaf×Lg“ÐlmÐw|Ñu}Ðl}“ÜÑ;¨¯©°Q«¸Ò(:Ó;Ó;¸sÑB÷ Ñ7ˆñ Eà�f‰f�Qœ˜g›Ó'ˆÞ¤¨¨=¸"Ó =�”Ð^_×^kÑ^k×^oÑ^oÔprÐstÐuzÑs{Óp|ð  Bó  _Cð  FIñ  _Ið  LQñ  _Qð  UZñ  ^Zð  ]bñ  ^b¸q¿}¹}ÌRÐPQÐRWÑPXË\Ñ?ZÞ˜c˜UÐ"5´e·i±iÀÀ(Á×@RÑ@RÐTWÓ6XÐ5YÐYZÔ[_×[bÑ[b×[hÑ[h×[lÑ[lÐmnÐowÑmx×m}Ñm}ð  @Bó  \Cð  [Dð  Dfð  gð  gÜ!%§¢£°uÀSÁ6Ç=Á=Ã?ÐZ[Ð\`ÑZa×ZhÑZhÓZjÐsvÑwˆ�‰�‰Ðyz×yÑyô  zBô  DH÷  DNò  DNð  ORô  DSØ�%�z¤%§)¡)¨A¨h©K×,>Ñ,>ÀÓ"DÐ!EÀQÄtÇwÁwÇ}Á}×GXÑGXÐYZÐ[cÑYd×YiÑYiÐkmÓGnÐFoÐopÔqtÔuzÐ{~Óuó  rAð  qBð BÜ! !§-¡-×"3Ñ"3´B°q¸±x³LÀ!Ó"DÓEÐFÀiðQô Y\ð  ]`ô  chð  ipó  cqñ  ]qó  Yrð  uvó  YvÐVeÔfkÔlqÐryÓlzÓf{Ðe|ð  }Tð  UUñð 	@ð |~ñð 	@ùò *ùóEs   �K?Á 'LÂLÂ&LÂ>Lc                 óx  • U R                  5       n[        S U 5       5      (       a  g[        R                  " U Vs/ s H  o3R                  R
                  PM     sn5      oDSS2S4   R                  5       oTR                  S5      UR                  S5      -   S-  nU Vs/ s HY  o3R                  R                  S   S   US-   :  d  M'  UR                  (       d  M:  [        R                  " U5      (       d  MW  UPM[     nn[        R                  R                  U5      nSn	U GH4  n
[        U
R                  SS 5       GH  u  p¼U
R                  US   5      nS	 GHò  n[        R                   " [        R"                  " [        R$                  " U5      5      [        R&                  " [        R$                  " U5      5      * /[        R&                  " [        R$                  " U5      5      [        R"                  " [        R$                  " U5      5      //5      nUR(                  USS USS -
  -  n[+        [        R,                  " UR.                   Vs/ s H?  n[        R0                  R3                  [        R4                  " US   5      SS U-
  5      PMA     sn5      5      nU R7                  S
X«4UUU5      nU(       d  GMm  [9        [        R0                  R3                  US   R                  R                  R;                  S5      SS USS -
  5      5      nU R<                  R>                  " U6   U	b  UU	S   :  d  GMì  UX«UU4n	GMõ     GM     GM7     U	c  gU	u  np«nnU RA                  S
X«4UUUS.5      nU(       a  SU R                  5       S   l!        U(       a  S$ S$ s  snf s  snf s  snf )zûslide a baseplate under the whole build, centred: its studs press into the lowest pieces' sockets (Ivy, Oct 23 2026: "It should
get to decide if it wants to start from a baseplate or a piece and it should be able to add a baseplate if it wants later")c              3   óZ   #   • U  H!  oR                   [        R                  ;   v •  M#     g 7fr  ©r±  r  rF  rm  s     rS   r"  Ú(Imagine.add_baseplate.<locals>.<genexpr>@  s   é € Ð5²"¨Q�v‰vœŸ™Ö(²"ùs   ‚)+zthere is already a baseplateNrÒ   r   rJ  rÔ   rØ  r  rÚ  z(no room: something hangs below the buildr¬  r}   Úaddedzno room)"r°  r1  rÜ   rß   r  râ   rã   r  r
  râ  r  r  r  r  r3  rá  rì   Úcosr˜  Úsinræ  ró  ÚargminrÚ   r   r!  rò   r	  rë   r  r  r¯  r·   rz  )rÎ  r±  rö  r@  rû   Úzlor  Úlowr2   Úbestr­  r!  Úsorj   r  r¢  r0  re  rž  rÊ   rw   r   rB  s                          rS   Úadd_baseplateÚImagine.add_baseplate<  s  € ð �X‰X‹ZˆÜÑ5±"Ó5×5Ñ5Ð>\Ü�IŠI±Ó3²¨1—v‘v—”±Ñ3Ó4ˆºaÀ¸d¹G¿K¹K»M°c×UZÑUZÐ[\ÓU]Ð`a×`eÑ`eÐfgÓ`hÑUhÐlmÑTmÈ6ÙÓbš"�Q§¡§¡¨aÑ 0°Ñ 3°c¸C±iÑ ?‹qÀAÇIÅI‹qÔRV×R^ÒR^Ð_`×Ra�q™"ˆÐbÜ—‘—‘˜TÓ"ˆ¨4 DÜˆDÜ" 4§<¡<°°Ð#3×4‘�Ø—J‘J˜r #™wÓ'�Ü'�DÜŸš¤2§6¢6¬"¯*ª*°TÓ*:Ó#;¼b¿fºfÄRÇZÂZÐPTÓEUÓ>VÐ=VÐ"WÔZ\×Z`ÒZ`Ôac×akÒakÐlpÓaqÓZrÔtv×tzÒtzÔ{}÷  |Fò  |Fð  GKó  |Ló  uMð  ZNð  "Oó  P�AØŸ3™3 ! B Q %¨&°°!¨*Ñ"4Ñ5�DÜœBŸIšIÐ^c×^iÒ^iÓ&jÒ^iÐYZ¤r§y¡y§~¡~´b·j²jÀÀ3ÁÓ6HÈÈ!Ð6LÈtÑ6SÖ'TÑ^iÑ&jÓkÓl�AØŸ
™
 H¨dÐ#6¸¸aÀÓF�Aß‘qÜ!¤"§)¡)§.¡.°°1±·±×1AÑ1A×1FÑ1FÀqÓ1IÈ"È1Ð1MÐPVÐWYÐXYÐPZÑ1ZÓ"[Ó\˜Ð^_×^aÑ^a×^fÒ^fÐhiÑ^jØ™<¨1¨t°A©w®;ÀÀ4ÈAÈtÐ?T»ô (ô 5ñ ð ‰<Ð JØ"Ñˆˆ4�A�tØ�X‰X ¨$Ð2¸DÈÐTXÑYÓZˆÞ qˆq�x‰x‹z˜"‰~Ô$ÞˆwÐ+ )Ð+ùò% 4ùÚbùò 'ks$   ½N-Â"&N2ÃN2ÃN2Ã<N2ÉAN7c           
      ó  • [        S [        U S/ 5       5       5      n/ / / pCnU R                   GH8  nUR                  S5      =(       d    0 nU(       d  M'  UR	                  [        UR                  SS5      5      5        UR	                  [        UR                  SS5      5      5        UR                  US   S	-
  5      opR                  5       nUb|  Xx;   aw  SUR                  U5      S	-    S[        R                  UR                  S5       S[        R                  R                  R                  UR                  UR                  5       3OSn	UR	                  US   Xi45        GM;     SR!                  S USS
  5       5      n
S
n[#        S	[%        U5      5       H{  nX<   ['        US
U 5      -
  S:¬  =(       a    ['        X<S
 5      X<   S	-
  :¬  n[)        US
U 5      XL   -
  S:¬  =(       a    [)        XLS
 5      XL   S	-   :*  nU(       d	  U(       d  Mw  X,   n  O   [+        U5      =(       a8    US   S:¬  =(       d)    [%        U5      S	:„  =(       a    [)        U5      US   -
  S:¬  nX«U4$ ! [        [        4 a     GMP  f = f)zðits feelings turn by turn, each with the piece it had just added; and where frustration started (Ivy, Oct 23 2026: "It should use
its feelings to know when to go back to. So it knows which piece made it start feeling frustrated initially.")c              3   ó,   #   • U  H
  u  pX4v •  M     g 7fr  rQ   )r   re  r@  s      rS   r"  Ú(Imagine.feeling_story.<locals>.<genexpr>W  s   é € Ð@Ò(?¡ �a•VÒ(?ùs   ‚r¾  ry  Úfrustrationr   Ú
excitementrB   rR  rÓ   Nzafter adding #z the r   r¤  rL   ú | c              3   óÀ   #   • U  HT  u  pnS U U(       a  SU-   S-   OS SUR                  S5       SUR                  S5       SUR                  S	5       3	v •  MV     g
7f)r€  rr  rs  rL   z
: excited rÌ  z, frustrated rË  z, bored ÚboredomNr,  )r   re  r›   rj   s       rS   r"  rÊ  a  s™   é € ð 6Ú*4™w˜q Qð # 1 #¾! t¨a¡x°#¢~ÀÐ%DÀJÈqÏuÉuÐUaÓObÐNcÐcpÐqr×qvÑqvð  xEó  rFð  qGð  GOð  PQ÷  PUñ  PUð  V_ó  P`ð  Oaõ  bÚ*4ùs   ‚AAiöÿÿÿrÒ   r}   rH   )r9  rŒ  rÄ   r^   r¸   rë   Ú	TypeErrorr_   r°  rî  rÎ  rz  r  ru  rv  r±  r]   r„  rU  rã   r  rX   )rÎ  r¾  ÚrowsÚfrrž   rÆ   r›   r@  rö  ÚwhatrŽ  Úturn_ptr‰  ÚroseÚfellÚupsets                   rS   Úfeeling_storyÚImagine.feeling_storyT  sE  € ô Ñ@¬°°7¸BÔ(?Ó@Ó@ˆØ˜2˜r�"ˆØ—•ˆAØ—‘�jÓ!×' RˆAÞ‘hØ—‘œ5 §¡ }°aÓ!8Ó9Ô:¸B¿I¹IÄeÈAÏEÉEÐR^Ð`aÓLbÓFcÔ<dà—	‘	˜!˜F™) a™-Ó(ˆA¯x©x«z¨"Ø|}ñ  }Jð  OPó  OV�^ B§H¡H¨Q£K°!¡OÐ#4°E¼%¿)¹)ÀAÇHÁHÈcÓ:RÐ9SÐSTÔUY×U\ÑU\×UbÑUb×UfÑUfÐgh×gmÑgmÐop×ouÑouÓUvÐTwÑxð  \^ˆDØ�K‰K˜˜6™ AÐ,×-ñ ð —
‘
ñ 6Ø*.¨s¨t©*ó6ó 6ˆàˆÜ�qœ#˜b›'Ö"ˆAØ‘5œ3˜r " 1˜v›;Ñ&¨!Ñ+×H´°B°r°F³¸r¹uÀq¹yÑ0HˆDÜ�r˜"˜1�v“; ¡Ñ&¨!Ñ+×H´°B°r°F³¸r¹uÀq¹yÑ0HˆDÞ—t�t t¡w˜W±ñ #ô �R“×U˜b ™f¨™k×T¬c°"«g¸©k×.S¼cÀ"»gÈÈ2ÉÑ>NÐRSÑ>SˆØ˜uÐ$Ð$øô œzÐ*Ó4«HÐ4ús   ÁAI+É+J É?J c                 ó  • / n[        [        U S/ 5      S S9 H¨  u  p4X1::  d  X@R                  5       ;  a  M  [        R	                  UR
                  S5       S[        R                  R                  R	                  UR                  UR                  5       3nU R                  U5      S:X  d  M—  UR                  U5        Mª     [        U S/ 5       VVs/ s H  u  p4X@R                  5       ;   d  M  X44PM     snnU l        U$ s  snnf )zTtake off every piece IT added after to_turn, newest first (never the other player's)r¾  c                 ó   • U S   * $ r5  rQ   )rh  s    rS   r#  Ú!Imagine.go_back.<locals>.<lambda>m  s
   € À1ÀQÁ4Á%rR   r%  r   r¤  r©  )rŽ   rŒ  r°  rÎ  r^   rz  r  ru  rv  r±  r¸  r¸   r¾  )rÎ  Úto_turnÚtookre  r@  rÜ  s         rS   Úgo_backÚImagine.go_backj  sÌ   € àˆÜœ7 1 g¨rÓ2¹ÔH‰DˆAØ‹|˜q¯©«
Ó2±HÜ—I‘I˜aŸh™h¨Ó,Ð-¨Q¬t¯w©w¯}©}×/@Ñ/@ÀÇÁÈÏÉÓ/PÐ.QÐRˆBØ�x‰x˜‹{˜iÕ'¨¯©°R®ñ Iô '.¨a°¸"Ô&=ÔQÒ&=™d˜aÀÇhÁhÃjÁ“6�A“6Ñ&=ÒQˆŒØˆùó Rs   ÃDÃ2Dg      8@c           
      ó  ^• U R                  5       o0R                  R                  R                   Vs/ s H  n[	        USS5      (       d  M  UPM     nnUb  Ub  XL a  gU R                  X55      ocR                  U5      UR                  U5      p‡[        Xx5      [        Xx5      4U;  a  gUR                  [        Xx5      [        Xx5      45        [        R                  " [        5      n	U H+  u  p«Xš   R                  U5        X›   R                  U
5        M-     U1U/pÜU(       aF  X�R                  5          U-
   H$  o¼R                  U5        UR                  U5        M&     U(       a  MF  X|;   a  g[!        U5       V
s/ s H  o£U
   PM	     nn
U Vs1 s H  n[#        U5      iM     snmXå Vs/ s H3  n[%        U4S jU R'                  U5      S    5       5      (       d  M1  UPM5     sn-  nUS4$ s  snf s  sn
f s  snf s  snf )	zžthe pieces that come away with `piece` when its join to `frm` is broken (plus pins that go through it). None if the
two are still held together some other wayrŸ  FN)Nzno such pieces)Nz-those two pieces are not joined to each other)Nz(they are still held together another wayc              3   ó@   >#   • U  H  n[        U5      T;   v •  M     g 7fr  r�  )r   rh  Úsids     €rS   r"  Ú"Imagine.section.<locals>.<genexpr>…  s   øé € Ð&PÒ=O¸¤r¨!£u°¦|Ò=Oùs   ƒr   )r°  r  r¶  r·  rŒ  rp  rî  rã   r  Údiscardr:  Údefaultdictr¹  rµ   r}  r¸   rŽ   r  r1  rv  )rÎ  ry  Úfrmrö  rÈ   r®  rj  ÚiaÚibrz   r‰  rž  rÅ   r~  Úsecrh  rã  s                   @rS   ÚsectionÚImagine.sectionv  s�  ø€ ð �X‰X‹Zˆ¯C©C¯G©G¯MªMÓ YªM q¼WÀQÈÐRW×=X§©M˜Ð YØ‰=˜C™K¨5ª<Ð@VØ�G‰G�BÓˆ¯©°«°r·x±xÀ³ 2Ü�‹Kœ˜R›Ð%¨QÓ.Ð7lØ	�	‰	”3�r“;¤ B£Ð,Ô-Ü×$Ò$¤SÓ)ˆÛ‰DˆA�r‘u—y‘y ”| R¡U§Y¡Y¨q¦\‘AØ�T˜B˜4ˆdÞØŸ™›
‘^ dÔ*�¯H©H°Q¬K¸¿¹ÀQ¾Ñ*÷ ˆdà‹:ÐNÜ$ TœlÓ+šl˜�!Œu™lˆÐ+Á3Ó3GÂ3¸a´B°q¶EÁ3Ñ3G¨SØ˜4ÓQš4�a¤3Ô&P¸Q¿\¹\È!»_ÈQÒ=OÓ&P×#P—™4ÑQÑQˆØ�DˆyÐùò !Zùò ,ùÒ3GùÚQs#   ³G4ÁG4ÆG9ÆG>Æ10HÇ%Hc           
      ó~  • U R                  X5      u  pEUc  SU 3$ [        U Vs/ s H  n[        USS5      (       a  M  UPM     sn5      n[        U R                  5       5      U-
  nSR	                  S U 5       5      n	U Vs1 s H  n[        U5      iM     n
nUS:X  aB  U R                  R                  R                   Vs/ s H  n[        U5      U
;  d  M  UPM     nnO
US;   a  UnOg [        R                  " U R                  R                  R                   Vs/ s H  oÌR                  R                  PM     sn5      S S 2S4   R                  5       nU H1  o`R                  R                  R                  R                  U5        M3     U R                  R                  R                  (       a®  [        R                  " U R                  R                  R                   Vs/ s H  oÌR                  R                  PM     sn5      oíUS S 2S4   R                  5       -
  nU R                  R                  R                   H  oÌR                  S	==   U-  ss'   M     [!        5       U R                  l        U R                  R%                  5         [        U S
/ 5       VVs/ s H   u  nnUU R                  5       ;   d  M  UU4PM"     snnU l        US:X  a  X@l        XyS.U R*                  S'   SU	 S3$ S U R*                  S'   US:X  a  SU SU	 SU S3$ SU	 3$ s  snf s  snf s  snf s  snf s  snf s  snnf )Nzcouldn't break it there: rŸ  Fr  c              3   ó  #   • U  Hz  n[        US S5      (       a  M  [        R                  UR                  S5       S[        R
                  R                  R                  UR                  UR                  5       3v •  M|     g7f)rŸ  Fr   r¤  N)rŒ  rÎ  r^   rz  r  ru  rv  r±  rg  s     rS   r"  Ú$Imagine.break_off.<locals>.<genexpr>‹  sp   é € ð  MÒehÐ`aÔpwÐxyð  |Dð  FK÷  qLÓ[œUŸY™Y q§x¡x°Ó5Ð6°a¼¿¹¿¹×8IÑ8IÈ!Ï&É&ÐRS×RXÑRXÓ8YÐ7ZÕ[Òehùs   ‚BœA(BÚkeep_it)Úthrow_it_awayÚholdrÒ   ©rÒ   rH   r¾  rò  )r  ÚnamesÚholdingzbroke off a section (z) and is holding it upz	kept the z-piece half (z) and threw the other z pieces awayzbroke off and threw away )rë  rU  rŒ  r°  r]   r  r  r¶  r·  rÜ   rß   r  râ   rã   r¸  ræ  r¹  rº  r¼  r¾  ÚheldrQ  )rÎ  ry  rç  Úthenrê  r¢  rh  r  Úrest_nrô  rã  r—  rÉ   rü   rû   Údzre  r@  s                     rS   Ú	break_offÚImagine.break_off‡  s�  € Ø—9‘9˜UÓ(‰ˆØ‰;Ð!:¸3¸%Ð@Ð@Ü™CÓCšC�q¤w¨q°(¸E×'B—™CÑCÓDˆÌsÐST×S[ÑS[ÓS]ËÐabÑObÀfØ—	‘	ñ  MÑehó  Mó  MˆÙ!Ó"šc˜Œr�!Žu™cˆÐ"Ø�9ÓØ Ÿs™sŸw™wŸ}š}ÓAš}˜!´°1³¸SÑ0@—A™}ˆDÐAˆDØÐ.Ó.Ø‰DØÜ�YŠY°·±·±·²Ó?²¨AŸ™Ÿœ±Ñ?Ó@ÂÀAÀÑF×JÑJÓLˆÛˆA—s‘s—w‘w—}‘}×+Ñ+¨AÖ.‘Ø�3‰3�7‰7�=�=Ü—	’	°A·C±C·G±G·M²MÓB²M¨qŸ6™6Ÿ?œ?±MÑBÓCˆAÈqÒQRÐTUÐQUÉwÏ{É{Ë}ÑJ\ÀRØ—S‘S—W‘W—]”]�§C¡C¨£I°¡O¥I‘]Ü“5ˆ�‰Œ˜!Ÿ#™#Ÿ-™-œ/Ü&-¨a°¸"Ô&=ÔQÒ&=™d˜a ÀÀaÇhÁhÃjÁ“6�A�q“6Ñ&=ÒQˆŒØ�6‹>ØŒF°QÑ/G˜!Ÿ'™' )Ñ,Ø*¨5¨'Ð1GÐHÐHØ!ˆ�‰�	ÑØaeÐirÓar�)˜A˜3˜m¨E¨7Ð2HÈÈÐP\Ð]ð 	:Ø0°°Ð8ð	:ùò' Dùâ"ùâAùò @ùò Cùó Rs4   ¥L ¿L ÂL%ÃL*ÃL*ÄL/Ç(L4Ê'L9ËL9c                 ó  ^ ^^
^^^^• SSK n[        T SS5      nU(       d  gT R                  5       oQ(       a  T R                  U5      OSmU VVVs/ s H}  n[	        UR
                  5        H`  u  px[        U5      SU4T R                  R                  ;  d  M-  UR                  US   5      S   S:”  d  MJ  UR                  US   5      U4PMb     M     snnnmT[        R                  " U[        T S	S5      S
9 V	s/ s H  o™S4PM     sn	-  mU V
s/ s H  n
[        U
SS5      (       a  M  U
PM     nn
U V
Vs/ s H)  oªR
                    H  oŠR                  US   5      PM     M+     nn
nU V
^
V^s/ s He  m
T
R                    HQ  m[        R                  " T
5      (       d  M   [        UU
4S jU 5       5      (       a  M=  T
R                  TS   5      PMS     Mg     nn
nT(       a  U(       d  g[         R"                  " U V
s/ s H  oªR$                  R&                  PM     sn
5      R)                  S5      oô V
s0 s H'  n
[        U
5      U
R*                  R-                  5       _M)     nn
/ [/        5       nnS GH-  nUR0                  R3                  [         R4                  " U5      / SQU5      nU Vs/ s H  nU[         R6                  US4   -  SS PM      snmT HÄ  mT H»  u  nnUT-
  mU/[         R8                  " TS5      Q7nUU;   a  M.  UR;                  U5        [=        UU4S jT 5       5      nTSL=(       a    [        UUU4S jT 5       5      nUR?                  U* U* [A        [         RB                  RE                  T5      5      US-  -   UT45        M½     MÆ     GM0     URG                  S S9  USU  GHŽ  nUS   US   snmUR0                  R3                  [         R4                  " U5      / SQU5      nUSS2S4==   T-  ss'   U H  m
UU[        T
5         -  T
l        M     ST l$        [        U 4S jU 5       5      nST l$        U(       dÈ  [        U 4S jU 5       5      (       d®  T R                  RJ                  RL                  RO                  U5        ST l(        ST RR                  S'   [/        5       T R                  l        T R                  RU                  5         SUS   *  SUS   * S:w  a  SOS S U(       a  S![W        U5      -   S"-   OS S#3s  $ U H$  m
U[        T
5         R-                  5       T
l        M&     GM‘     gs  snnnf s  sn	f s  sn
f s  snn
f s  snn
f s  sn
f s  sn
f s  snf ! ST l$        f = f)$zæput the held section back as ONE big piece: its free underside sockets onto free studs, turned any quarter turn.
A piece it named wins; then closest to where it came from (a lifted body goes back on its new legs); then most studs.r   Nrö  r×  rß  rÒ   r  rØ  r¿  )ru  rŸ  Fc              3   ó’   >#   • U  H<  n[         R                  R                  TR                  TS    5      U-
  5      S:  v •  M>     g7fr  r  )r   r  r!  rh  s     €€rS   r"  Ú#Imagine.set_down.<locals>.<genexpr>¬  s9   øé € Ð/jÒciÐ^_´·	±	·±¸q¿w¹wÀqÈÁv»ÐQRÑ?RÓ0SÐVYÖ0YÒciùr  )r   éZ   é´   i  )r   r   rÓ   rÓ   rH   c              3   óR   >^#   • U  H  m[        UU4S  jT 5       5      v •  M     g7f)c              3   óx   >#   • U  H/  u  p[         R                  R                  TT-   U-
  5      S :  v •  M1     g7f©r  Nr(  )r   Úst2r   Úk2re  s      €€rS   r"  Ú-Imagine.set_down.<locals>.<genexpr>.<genexpr>¸  s/   øé € Ð#[ÒUZÉ6È3¤B§I¡I§N¡N°2¸±6¸C±<Ó$@À3Ö$FÒUZùs   ƒ7:N)r1  )r   r  rÚ   re  s    @€€rS   r"  rþ  ¸  s#   ùé € ÐiÒfhÐ`b¤Õ#[ÑUZÓ#[× [Ð [Òfhùs   „#'c              3   óš   >#   • U  H@  u  pUTL d  M  T  H-  n[         R                  R                  UT-   U-
  5      S :  v •  M/     MB     g7fr  r(  )r   r  Úb2r  Úrsre  Útargets       €€€rS   r"  rþ  ¹  sb   øé € ð  ;QÒmrÑbiÐbeÐvxð  }Cð  wCÓ;]ô  NPð  HJ¼2¿9¹9¿>¹>È"ÈqÉ&ÐSVÉ,Ó;WÐZ]Ö;]ñ  NPÑ;]Òmrùs
   ƒA’9Ag{®Gáz„?c                 ó   • U S   U S   U S   4$ )NrÓ   rÒ   r   rQ   )rØ  s    rS   r#  Ú"Imagine.set_down.<locals>.<lambda>»  s   €  ! A¡$¨¨!©¨a°©dÑ!3rR   r%  rÔ   Tc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr  )Úcollides©r   rh  rÎ  s     €rS   r"  rþ  Á  s   øé € Ð5²"¨Q˜1Ÿ:™: aŸ=˜=²"ùs   ƒ!c              3   óZ   >#   • U  H   nTR                   R                  U5      v •  M"     g 7fr  )r  r  r  s     €rS   r"  rþ  Ã  s   øé € Ð"?ºB°q 1§3¡3§<¡<°§? ?ºBùs   ƒ(+rõ  z(set the section back down as one piece (z studrÎ  rL   z holding itz	, turned ú degreesrs  ),r•  rŒ  r°  ry  r3  rÚ   r  r  rº  ré  rá  r  Úfloor_pointsrâ  r  r1  rÜ   rß   r  râ   r  ræ  r2  r¹  r–  r—  r˜  Úr_r9   rµ   rá   r¸   rë   r   r!  r5  r  r¶  r·  Úextendrö  rQ  r¼  ru   )rÎ  r2  r´  r•  rö  rö  r@  r‰  re  rÈ   rh  ÚhbÚhstudsr!  r  rP  rž  ÚcandsrÅ   r  r¢  rx   r  r¾  Ú	on_targetrØ  rg  r£  r	  rÚ   r
  s   `       ` `  `              @@@rS   Úset_downÚImagine.set_downŸ  sé  þ€ ó 	Ü�q˜& $Ó'ˆÞ˜DØ�X‰X‹Zˆµ !§'¡'¨"¤+¸˜Ù/1õ ]ªr¨!¼iÈÏÉ×>P±d°aÜ˜“U˜F AÐ&¨a¯c©c¯h©hÑ6ó &Ø;<¿;¹;ÀqÈÁyÓ;QÐRSÑ;TÐW[Ñ;[ó &�!—'‘'˜!˜C™&“/ 1Ó%Ñ>PÑ%©ró ]ˆà¤T×%6Ò%6°r¼wÀqÈ+ÐW[Ó?\Ò%]Ó^Ò%] �d“)Ñ%]Ñ^Ñ^ˆÙÓAš�A¤W¨Q°¸%×%@�a™ˆÐAÙ+-Ô?ª2 a·wµw°!—'‘'˜!˜C™&–/±w‘/©2ˆÑ?Ù*,ö lª" Q°a·iµi°Ü—L’L —Oó !Ü,/Õ/jÑciÓ/j×,jó !�—‘˜˜3™–±i‘©"ˆñ læžE¨$Ü�yŠy±2Ó6²2¨aŸ&™&Ÿ/œ/±2Ñ6Ó7×<Ñ<¸QÓ?ˆÐfjÓJkÒfjÐabÌ2ÈaË5ÐRS×RUÑRU×RZÑRZÓR\ÒK\ÑfjÀÐJkØœ#›%ˆtˆÜ%ˆDØ×'Ñ'×7Ñ7¼¿
º
À4Ó8HÊ)ÐUYÓZˆAÙ16Ó7²¨A�1”r—u‘u˜Q ˜T‘{‘? B QÓ'±Ñ7ˆBÛ�Û"‘E�B˜Ø˜Q™�A tÐ&=¬b¯hªh°q¸!«nÑ&= Ø˜d“{¡HØ—H‘H˜S”MÜÕiÑfhÓiÓi�EØ &¨dÐ 2÷  !Q´sö  ;QÑmró  ;Qó  8Q�IØ—L‘L 5 &¨9¨*´e¼B¿I¹I¿N¹NÈ1Ó<MÓ6NÐQUÐX\ÑQ\Ñ6\Ð^bÐdeÐ!fÖgó #ô ñ &ð 	�
‰
Ñ3ˆ
Ñ4Ø�v˜”ˆAØ˜‘d˜A˜a™DˆGˆD�!Ø×'Ñ'×7Ñ7¼¿
º
À4Ó8HÊ)ÐUYÓZˆAÐ\]Ð^`Ð_`Ð^`ÐbcÐ^cÓ\dÐhiÑ\iÓ\dÛ�  V¬B¨q«E¡]Ñ!2˜1ž3‘TØˆAŒGÜÔ5±"Ó5Ó5�Ø$�Q”WÞœsÔ"?¹BÓ"?×?Ñ?Ø—‘—‘—‘×$Ñ$ TÔ*°T¨A¬FÐPT¸1¿7¹7À9Ñ;MÜ›5�—‘” !§#¡#§-¡-¤/ØAÀ1ÀQÁ4À%ÀÈÐVWÐXYÑVZÐUZÐ^_ÓU_ÉcÐegÐMhÐhsö  ]aÐtô  CFð  GKó  CLñ  uLð  OYò  uYð  gið  tjð  jkð  lò  lÛ� ¬¨1«¡×!3Ñ!3Ó!5˜1ž3”Tñ ð ùôE]ùâ^ùÚAùÛ?ùólùò 7ùÒJkùò 8øð   %�Q•Wús[   ÁAUÂUÂ6UÃ<UÄU"Ä,U"Ä90U'Å3/U-Æ&U-ÇU-ÈU3È=.U8Ê6%U=Ð;VÖ	Vc                 ó,  • SSK n[        U SS5      nU(       d%  U R                  R                  R	                  U5      $ UR                  U R                  R                  5      n[        U R                  R                  R                  5      Ul        U Hn  nUR                  U5      oeR                  R                  5       Ul        UR                  S==   U R                  -  ss'   UR                  R                  U5        Mp     UR	                  U5      $ )z`the .ldr for a picture: the build, plus a held section floating LIFT mm above where it came fromr   Nrö  ró  )
r2  rŒ  r  r¶  r‹  rq   r·  ræ  ÚLIFTr¸   )rÎ  r\   r2  rö  Úa2rh  Úys          rS   rS  ÚImagine.write_frame_ldrÉ  s´   € ãÜ�q˜& $Ó'ˆÞ˜AŸC™CŸG™G×-Ñ-¨dÓ3Ð3Ø�Y‰Y�q—s‘s—w‘wÓˆ¬D°·±·±·±Ó,? ¤ÛˆAØ—	‘	˜!“ˆA§C¡C§H¡H£J˜aœc°·±°D³	¸Q¿V¹VÑ0C³	ÀRÇXÁXÇ_Á_ÐUVÖEWñ à�|‰|˜DÓ!Ð!rR   c           	      óV  • SSK n[        S4[        S4[        S4[        S4[        R                  " / SQ5      S4[        R                  " / SQ5      S4S.nX;  a  gX1   u  pE[        R
                  " U[        5      [        R                  R                  U5      -  n[        US   5      S:  ah  [        [        R                  " [        R                  " USS 5      5      5      n[        R                  " S	5      n[        R                  " XF   5      Xv'   Un[        U R                  R                   R"                  5      n[        R$                  " U V	s/ s H  o™R&                  R(                  PM     sn	5      oªR+                  S5      U
R-                  S5      -   S-  oºSS2S4   R+                  5       nUR.                  R1                  [        R2                  " U5      XK5      nU H  o�U	R4                  -  U	l        M     [        R$                  " U V	s/ s H  o™R&                  R(                  PM     sn	5      oìUSS2S4   R+                  5       -
  nU H  o™R4                  S
==   U-  ss'   M     [7        5       U R                  l        U R                  R;                  5         [<        R<                  " 5       UR?                  5       UR?                  5       X_S.U R@                  S'   U RC                  5         [<        RD                  " S5        URG                  SS5      $ s  sn	f s  sn	f )zçturn the WHOLE creation a quarter turn, as seen in the main view, around its middle, and set it back on the ground
(Ivy, Oct 23 2026: "It should be allowed to reorient the whole creation during a turn"). Returns a sentence or None.r   Nrÿ  i¦ÿÿÿ)r   r   r*  )Útip_forwardÚtip_backÚ	roll_leftÚ
roll_rightÚ	spin_leftÚ
spin_rightrÒ   rJ  rH   ró  )r  rØ  rs  r·  rù  r£  r*  r   r¤  )$r•  ró   rô   rÜ   rì   rò   rë   r   r!  rõ   ró  ÚargmaxÚzerosÚsignrq   r  r¶  r·  rß   r  râ   rã   r  r–  r—  r˜  ræ  r¹  rº  r¼  r7  rê   rQ  rb  r†  r?  )rÎ  r¤  r•  Úaxesrs  r·  r‰  r  r·  rÉ   rû   rØ  rü   r¢  ÚV2rù  s                   rS   r£  ÚImagine.reorientÒ  sp  € ó 	Ü % r˜{¼À¸ÔTZÐ\_ÐS`ÔqwÐy{Ðp|Ü Ÿhšh¢{Ó3°RÐ8ÌÏÊÒR]ÓI^Ð`cÐHdñfˆà‹? 4Ø‘)‰ˆ¤"§*¢*¨R´Ó"7¼"¿)¹)¿.¹.ÈÓ:LÑ"L˜RÜˆr�!‰u‹:˜ÓÜ”B—I’IœbŸfšf R¨¨ V›nÓ-Ó.ˆA´B·H²H¸Q³K°ÌÏÊÐPRÑPUËÀÁÐ]^ÐXZÜ�Q—S‘S—W‘W—]‘]Ó#ˆ¬¯ªÉUÓ3SÊUÈ·F±F·O´OÉUÑ3SÓ)T Q×[`Ñ[`ÐabÓ[cÐfg×fkÑfkÐlmÓfnÑ[nÐrsÑZsÐVWÒ|}ð  @Að  }Añ  {B÷  {Fñ  {Fó  {HÐuwØ×#Ñ#×3Ñ3´B·J²J¸s³OÀRÓKˆÛˆA !§#¡#™g˜ž‘Ü�YŠY±Ó7²¨AŸ™Ÿœ±Ñ7Ó8ˆÀBÂqÈ!ÀtÁHÇLÁLÃNÑ?R¸"ÛˆAŸ™˜D›	 R™�	‘Ü“5ˆ�‰Œ˜!Ÿ#™#Ÿ-™-œ/Ü%)§Y¢Y£[°q·x±x³zÈÏÉËÐ]`Ñkˆ�‰�
ÑÐmn×msÑmsÔmuÔw{÷  xBò  xBð  CFô  xGØ�{‰{˜3 Ó$Ð$ùò 4Tùò 8s   ÅL!ÈL&c                 ó  ^^^^• U R                  5       m[        U SS5      m[        R                  " TT5      S   mT V^s/ s Ho  mTR                  R
                  S   S   TS-   :  d  M(  [        R                  " T5      (       d  ME  [        UUU4S jTR                   5       5      (       d  Mm  TPMq     nnU(       a•  SR                  [        U Vs1 s Hd  n[        R                  UR                  S5       S	[        R                  R                  R                  UR                   UR                   5       3iMf     sn5      5      nS
S
SU S3S.nOf[#        U R$                  R&                  R(                   Vs/ s H  oUR                  PM     sn5      nSUS'   US   (       a  SUS'   OSUS   -   S-   US'   SUS'   [+        S [-        T5       5       S5      nUGbò  [/        T5      S:”  Gaâ  U R$                  R&                  R(                   Vs/ s H  n[        USS5      (       d  M  UPM     nnU R1                  TU5      n	[2        R4                  " [6        5      n
U	 H+  u  p¼X«   R9                  U5        X¬   R9                  U5        M-     U1U/píU(       aF  X®R;                  5          U-
   H$  oÍR9                  U5        UR=                  U5        M&     U(       a  MF  [?        [/        T5      5       Vs/ s H  o»U;  d  M
  UPM     nnU(       a½  SR                  [        U Vs1 s Hm  n[        R                  TU   R                  S5       S	[        R                  R                  R                  TU   R                   TU   R                   5       3iMo     sn5      5      nSUS'   US==   SU S	[/        U5      S:X  a  SOS S3-  ss'   UGcù  [/        T5      S:”  Gaé  U R$                  R&                  R(                   Vs/ s H  n[        USS5      (       d  M  UPM     nnU R1                  TU5      n	[2        R4                  " [6        5      n
U	 H+  u  p¼X«   R9                  U5        X¬   R9                  U5        M-     [7        5       / nn[?        [/        T5      5       Hs  nUU;   a  M  U1U/píU(       aF  X®R;                  5          U-
   H$  oÍR9                  U5        UR=                  U5        M&     U(       a  MF  UU-  nUR=                  U5        Mu     U Vs/ s H#  n[A        U4S jU 5       5      TS-   :  d  M!  UPM%     nn[/        U5      S:”  ar  URC                  S S9  USS  nS!R                  U4S" jUSS#  5       5      n[/        U5      US'   US==   S$[/        U5       S%U S	[/        U5      S:X  a  SOS S&3-  ss'   X@RD                  S''   U$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )(aˆ  would it stand up on its own the way it sits now? (Ivy, Oct 23 2026: "It should get a warning every turn if the creation
isn't stable. It can have it in an orientation but gets flagged it would fall over and can't be completed until it's stable.")
Lego is thin-walled plastic, so each piece's weight goes with its surface area: the centre of weight is the area-weighted
centroid of every triangle. The footprint is the convex hull of everything within 0.4 mm of the floor (the engine is in mm;
a stud is 8 mm). Stable when the centre of weight sits over the footprint with 0.8 mm to spare. Returns a dict for the page and a sentence for the prompt.r¿  Nr   rÒ   r+  c              3   óì   >#   • U  Hi  n[        TR                  US    5      S   T-
  5      S:  =(       a7    TSL=(       a,    [        R                  " TR                  US    5      SS T5      v •  Mk     g7f©rØ  rÒ   r  N©rõ   rá  r  Úon_grid©r   r!  r@  ru  rü   s     €€€rS   r"  Ú$Imagine.stability.<locals>.<genexpr>ð  s   øé € ð  Rò  HQð  CDœC §¡¨¨#©£°Ñ 2°RÑ 7Ó8¸3Ñ>×}À3ÈdÀ?×}ÔW[×WcÒWcÐde×dkÑdkÐlmÐnqÑlrÓdsÐtvÐuvÐdwÐy|ÓW}Ô}ò  HQùs   ƒA1A4r  r   r¤  Tz5It's clutched to the huge invisible baseplate by the z”, so it can't fall over: one leg is fine, lean and overhang as much as you like. You can also build straight onto the baseplate, anywhere around it.)rÐ   ÚclutchedrÑ   Fr4  rÐ   zªIt's only RESTING on the invisible baseplate, not clutched to it (no upright piece has its underside on the baseplate's studs), so gravity decides. Right now it balances.rÑ   zXIt's only RESTING on the invisible baseplate, not clutched to it, so gravity decides -- z; Or press an upright piece onto the baseplate to clutch it.Úislandsc              3   ój   #   • U  H)  u  pUR                   [        R                  ;   d  M%  Uv •  M+     g 7fr  r¼  )r   r‰  r@  s      rS   r"  r3    s#   é € ÐO¢M™D˜A°Q·V±V¼t¿¹Ñ5N—a‘a¢Mùs   ‚$3ª	3rŸ  z LOOSE ON THE BASEPLATE: the rÓ   ÚisÚarezá standing on the baseplate but not clicked into it or into anything that is -- lift the build and it stays behind. Join it to the build (a piece that bridges it to something clicked in), or take it off. Decide, and say which.c              3   ób   >#   • U  H$  nTU   R                   R                  S    S   v •  M&     g7fr‘  rõ  )r   r‰  rö  s     €rS   r"  r3    s)   øé € Ð-QÊqÈ!¨b°©e¯j©j×.?Ñ.?ÀÑ.BÀ1Ö.EÊqùs   ƒ,/c                 ó"   • [        U 5      SU ;   4$ r5  r«  )r  s    rS   r#  Ú#Imagine.stability.<locals>.<lambda>!  s   € ¬#¨a«&°!°q±&Ñ)9rR   r%  r}   r†  c              3   óT  >#   • U  H˜  nS R                  [        U Vs1 s Hm  n[        R                  TU   R                  S5       S[
        R                  R                  R                  TU   R                  TU   R                  5       3iMo     sn5      5      v •  Mš     gs  snf 7f)r  r   r¤  N)	r]   rŽ   rÎ  r^   rz  r  ru  rv  r±  )r   r  r‰  rö  s      €rS   r"  r3  "  s½   øé € ð "6Ú+4 að #'§)¡)¬Fñ  LMó  4Nò  LMð  GH´u·y±yÀÀAÁÇÁÈsÓ7SÐ6TÐTUÔVZ×V]ÑV]×VcÑVc×VgÑVgÐhjÐklÑhm×hrÑhrÐtvÐwxÑty×t~Ñt~ÓVð  VAó  5Bñ  LMñ  4Nó  -O÷  #Pð  #PÚ+4ùò 4Nùs   ƒB(�A4B#ÂB(rH   z
 ISLANDS: z< separate groups sit on the floor and nothing joins them -- zí loose beside the main build. On a real table those slide apart the moment anyone bumps it. Do you want a real baseplate under all of them, so they become one thing? ("add_baseplate": true) Or is the gap the point? Decide, and say which.rW  )#r°  rŒ  r  r¾  r  r
  r  r1  râ  r]   rŽ   rÎ  r^   rz  ru  rv  r±  r  r  r¶  r·  r%  r3  rU  rp  r:  ræ  r¹  rµ   r}  r¸   r„  rã   r5  rQ  )rÎ  r@  r4  rô  r™   rÉ   r2   rÈ   r®  rj  rz   r‰  rž  r  r~  ÚlooserÅ   ÚgroupsrÝ  rö  ru  rü   s    `                 @@@rS   rW  ÚImagine.stabilityä  ss  û€ ð �X‰X‹Zˆœw q¨+°tÓ<˜Ä4Ç?Â?ÐSUÐWZÓC[Ð\]ÑC^¸bÙ!ô Sšr˜! Q§V¡V§]¡]°1Ñ%5°aÑ%8¸2À¹8Ñ%C“AÌÏÊÐUVÏ“AÜö  Rð  HI÷  HQò  HQó  R÷  R÷ ™rˆð SæØ—I‘IœfÑqyÓ%zÒqyÐlm¬¯©°1·8±8¸SÓ)AÐ(BÀ!ÄDÇGÁGÇMÁM×DUÑDUÐVW×V\ÑV\Ð^_×^dÑ^dÓDeÐCfÓ&gÑqyÑ%zÓ{Ó|ˆEØ!¨tØ!VÐW\ÐV]ð ^Cð  DñE‰Cô ¨¯©¯©¯ªÓ7ª AŸœ©Ñ7Ó8ˆCÈE¸#¸j¹/Ø�8�}ð$h��J’ð $~ð  ADð  EOñ  APñ  $PØ#`ñ$a��J‘ð
 ˆˆI‰ÜÑO¤I¨b¤MÓOÐQUÓVˆØÒ¤ R£¨1¤ð  !Ÿs™sŸw™wŸ}š}ÓLš}˜!´¸¸8ÀU×0K—A™}ˆDÐLØ—‘˜˜DÓ!ˆA¬×(?Ò(?ÄÓ(D 2Û‘�˜2™5Ÿ9™9 Qœ<¨©¯©°1®™Ø�g ˜wˆtÞØŸH™H›J™¨!Ô+�A¯U©U°1¬X°t·{±{À1¶~Ñ+÷ �$ä %¤c¨"£g¤Ó=¢˜1¸1±*—Q¡ˆEÐ=ÞØŸ	™	¤&ñ  BGó  *Hò  BGÐ|}¬U¯Y©Y°r¸!±u·|±|ÀSÓ-IÐ,JÈ!ÌDÏGÉGÏMÉM×L]ÑL]Ð^`ÐabÑ^c×^hÑ^hÐjlÐmnÑjo×jtÑjtÓLuÐKvÓ*wñ  BGñ  *Hó  #Ió  J�Ø!"��I‘Ø�J“Ð&CÀEÀ7È!ÔTWÐX]ÓT^ÐbcÓTcÉDÐinÐKoð pFð %Gñ H“ð Š=œS ›W qœ[Ø Ÿs™sŸw™wŸ}š}ÓLš}˜!´¸¸8ÀU×0K—A™}ˆDÐLØ—‘˜˜DÓ!ˆA¬×(?Ò(?ÄÓ(D 2Û‘�˜2™5Ÿ9™9 Qœ<¨©¯©°1®™Ü›5 "�&ˆDÜœ3˜r›7–^�Ø˜“9™hØ˜# ˜s�4ÞØ§¡£
™^¨aÔ/˜·±°q´¸4¿;¹;Àq¾>Ñ/÷ �dà˜‘	�˜6Ÿ=™=¨Ö+ñ $ñ !'Ó]¢˜1¬#Ô-QÉqÓ-QÓ*QÐTVÐY\ÑT\Ñ*\—Q¡ˆEÐ]Ü�5‹z˜A‹~Ø—
‘
Ñ9�
Ñ:ÀEÈ#È2ÀJ¸EØŸ	™	ô "6Ø+0°°!©9ó"6ó 6�ä!$ U£��I‘Ø�J“ j´°U³°Ð<xÐy~Ðxð  @AÜ/2°5«z¸Q«¡tÀEÐ&Jð Kwð%xñ y“ð  #�‰�ÑØˆ
ùòwSùò &{ùò
 8ùò  Mùò >ùò *Hùò Mùò ^s\   Á'WÁ,WÂ	$WÂ1WÃA+W$Å<W)ÈW.È,W.Ë9	W3ÌW3Ì)A4W8ÐW=Ð"W=Ô" XÕXc                 ó:  ^ ^• U(       a  UT R                   ;   a  g[        T R                   5      [        :¼  aI  [        UU 4S j[	        T R                   5       5       S5      nUc  gT R                   R                  U5        T R                   R                  U5        g)zxpick a piece up into its handful; when it already holds HAND, the oldest one it isn't about to play goes back in the binNc              3   ór   >#   • U  H,  u  pUT:w  d  M  U[        TS [        5       5      ;  d  M(  Uv •  M.     g7f)râ  N)rŒ  r¹  )r   r‰  r  rœ   rÎ  s      €€rS   r"  ÚImagine.hold.<locals>.<genexpr>/  s6   øé € ÐpÒ&7™d˜a¸1À¹9›ÈÔRYÐZ[Ð]gÔilÓinÓRoÑIoŸ™Ò&7ùs   ƒ7“7®	7)rÃ  rU  rÇ  r%  r3  r}  r¸   )rÎ  r  rœ   r™   s   ` ` rS   rò  ÚImagine.hold+  sd   ù€ æ�t˜qŸv™v“~ vÜˆq�v‰v‹;œ$ÓÜÕp¤i°·±Ô&7ÓpÐrvÓwˆCØ‰{˜FØ�F‰F�J‰J�sŒOØ	�‰�‰�dÕrR   c                 óÀ  • [        5       R                  S/ 5       HW  n[        U R                  5      U:¼  a    O=UR                  S5      [        R
                  ;   d  MC  U R                  US   5        MY     Sn[        U R                  5      U:  aN  US:  aG  U R                  U R                  5       5        US-  n[        U R                  5      U:  a	  US:  a  ME  gggg)z~when it holds almost nothing: its hot list first, then pieces it tends to like (the stacked deck) -- never a forced lame brickÚhotr  r   rã  rÓ   N)rr   r^   rU  rÃ  r  rG  rò  rÈ  )rÎ  Úuptor  r´  s       rS   rÄ  ÚImagine.refill_handful3  s¡   € ä“—‘ ¨Ö+ˆAÜ�1—6‘6‹{˜dÓ"¡EØ�u‰u�V‹}¤§¡Õ,¨a¯f©f°Q°v±YÖ.?ñ ,ð ˆÜ�!—&‘&‹k˜DÓ  U¨R£Z°·±¸¿¹»Ô1AÀ5ÈAÁ:À5Œc�!—&‘&‹k˜DÓ  U¨R¦ZÐ  ZÐ rR   c                 óø  ^• [        5       o"R                  S/ 5      n[        U4S j[        U5       5       S5      nU(       d  gUR	                  SUR                  U5      5        X2S'   [        R                  " U[        [         S3S5      SS9  X0l
        U R                   Vs/ s H;  n[        U[        R                  R                  R                  US	   US	   5      S
9PM=     snU R                  S'   gs  snf )zãplaying a hot piece moves it back to the front, so the 12-limit drops the ones it stopped using, not the ones it uses most
(Oct 23 2026: the microfig Ivy showed it was 6th of 12 and would have aged off after six new favourites)rE  c              3   óZ   >#   • U  H   u  pUR                  S 5      T:X  d  M  Uv •  M"     g7f©r  Nr,  )r   r!  r  r  s      €rS   r"  Ú$Imagine.touch_hot.<locals>.<genexpr>=  s*   øé € Ð<sÊ>Á4À1Ð]^×]bÑ]bÐciÓ]jÐnrÑ]r¿Q¹QÊ>ùs   ƒ+¢	+Nr   ú
/self.jsonrj   rÓ   r5  r  ©r±  )rr   r^   r%  r3  r‘  r}  rY   rt   rM   rm   rE  r9  r  ru  rv  rQ  )rÎ  r  rÃ   rE  r‰  r  s    `    rS   Ú	touch_hotÚImagine.touch_hot:  sÂ   ø€ ô ‹[ˆ§¡ u¨bÓ 1˜#´tÔ<sÌ9ÐUXÌ>Ó<sÐuyÓ7z°1Þ�&Ø�
‰
�1�c—g‘g˜a“jÔ!¨s e¡9´D·I²I¸bÄ$Ì$ÈÈzÐGZÐ\_ÓB`ÐijÒ4kÐuxÔmrØYZ×Y^ÒY^Ó_ÒY^ÐTUœ$˜q¤t§w¡w§}¡}×'8Ñ'8¸¸6¹ÀAÀfÁIÓ'NÔOÑY^Ñ_ˆ�‰�ŠùÒ_s   Â$AC7c                 óp  • U(       a  U[         R                  ;  a  g[        5       o3R                  S/ 5       Vs/ s H  oDR                  S5      U:w  d  M  UPM     nnUR	                  SU[        U5      SS [        R                  " S5      S.5        USS US'   [        R                  " U[        [         S	3S
5      SS9  US   U l        U R                   Vs/ s H;  n[        U[         R                  R                  R                  US   US   5      S9PM=     snU R                   S'   gs  snf s  snf )z÷keep a piece it likes one call away, across builds (Ivy, Oct 23 2026: "If it likes a piece it should keep it hotloaded. Like
it should be able to ask for a big leg, know it can ask, do it, and then it's on its hot list"). Newest first, at most 12.NrE  r  r   éP   z%b %-d %-I:%M %p)r  r¢  r.  rù  rL  rj   rÓ   r5  rM  )r  rG  rr   r^   r‘  ru   r7  r8  rY   rt   rM   rm   rE  r9  ru  rv  rQ  )rÎ  r  r¢  rÃ   r  rE  s         rS   Úmake_hotÚImagine.make_hotA  se  € ö �t¤4§<¡<Ó/°Ü‹[ˆ¯F©F°5¸"Ô,=Ó WÒ,= qÇÁÀvÃÐRVÑAV§Ñ,=˜#Ð WØ�
‰
�1˜t¬C°«H°S°b¨MÄ4Ç=Â=ÐQcÓCdÑeÔfÐtwÐx{Ðy{Ðt|ÐhjÐkpÑhqÜ�	Š	�"”dœd˜V :Ð.°Ó4¸QÒ?ÈÈEÉÀÄð  fg÷  fkò  fkó  flò  fkð  abÔfjÐklÔsw×szÑsz÷  tAñ  tA÷  tEñ  tEð  FGð  HNñ  FOð  QRð  SYñ  QZó  t[ô  g\ñ  fkñ  flÐTU×T[ÑT[Ð\aÒTbùò !Xùò fls   ºD.ÁD.ÃAD3rQ   c                 óš  • [         R                  " [        [         S35      5      n[        R                   Vs/ s H  oUU;  d  M
  UPM     nnU(       a  [        U5      R                  5       (       d  g[        R                  R                  S[        R                  R                  [        S5      5        SSKn[            ["        R$                  " UR'                  [        U5      /U Vs/ s HM  n[        R(                  R*                  R-                  XU5       S[/        U5       SUR-                  US5       3PMO     sn-   5      ["        R0                  S9nSSS5        W["        R2                  " ["        R4                  R7                  US	S
S9S5      -  oˆS	S US   -  n	1 Skn
[8        R:                  " S[        U5      R=                  5       5       Vs1 s H  o»U
;  d  M
  [?        U5      S:”  d  M  UiM     nn[A        U5       H•  u  pÕ[C        [8        R:                  " S[        R(                  R*                  R-                  XU5       S[/        U5       SUR-                  US5       3R=                  5       5      5      nX�==   S[?        XÎ-  5      -  -  ss'   M—     U(       a7  ["        RD                  " U	* 5       Vs/ s H  oÖU   [G        X�   5      4PM     sn$ [I        ["        RJ                  " U	5      5      nXo   [G        XŸ   5      4$ ! [        [
        4 a    0 n GNüf = fs  snf s  snf ! , (       d  f       GNß= fs  snf s  snf )zòdig through ITS OWN bin for the piece it means -- free, local, no API call (Ivy, Oct 23 2026: "Letting it dig thru the bin
would save money"). MiniLM similarity between its words and each bin piece's name + description. Returns (part, score).ú/parts/desc.json)Nr   r   r†   Nú. rL   r#  rÓ   Tr%  r'  >   rË   ÚanÚmyÚofÚtoÚandÚbigÚforÚoneÚther  ÚsomeÚwithr3   ry  r0   Úlittleú[a-z]+rÒ   r¤  g¸…ëQ¸¾?)&rY   rZ   rM   rm   rP   r_   r  rG  ru   rÁ   r�  r\   r‘  r[   r]   r*  r+  rÜ   rò   r,  ru  rv  r^   r  r-  r4  r   r!  r½   Úfindallr}  rU  r3  r¹  Úargsortrë   ró  r'  )rÎ  r”  Úexcluder  Údescsr  rµ  r*  rû   r@  Ústoprj   r0  r!  Úhaver‰  s                   rS   r<  ÚImagine.digH  s¯  € ô —Y’Yœt¤t fÐ,<Ð$=Ó>Ó?ˆUäŸ<š<Ó<š<�a°GÑ+;—™<ˆÐ<Þœ3˜s›8Ÿ>™>×+Ñ+°IÜ�‰�‰˜œ2Ÿ7™7Ÿ<™<¬¨iÓ8Ô9»<ÞÜ—
’
˜5Ÿ9™9¤c¨#£h Zñ  @Dó  3Eò  @DÐz{´d·g±g·m±m×6GÑ6GÈÓ6MÐ5NÈbÔQ\Ð]^ÓQ_ÐP`Ð`bÐch×clÑclÐmnÐprÓcsÐbtÓ3uñ  @Dñ  3Eñ  &Eó  Fô  NP÷  NXñ  NXñ  YˆA÷ à	ŒR�ZŠZœŸ	™	Ÿ™ q¨q¸4˜Ð@À$ÓGÑGˆÐPQÐPRÈeÐVWÐXYÑVZÉlÈò MˆÜŸ:š: i´°S³·±Ó1AÔBÓcÒB�aÈtÁm“ÔX[Ð\]ÓX^ÐabÑXb—ÑBˆÐcÜ˜d–O‰DˆAÜ”r—z’z )´·±·±×0AÑ0AÀ!Ó0GÐ/HÈÌ+ÐVWË.ÐIYÐYZÐ[`×[dÑ[dÐefÐhjÓ[kÐZlÐ-m×-sÑ-sÓ-uÓvÓwˆDØ‹E�TœC ¡Ó,Ñ,Ñ,�Eñ $ö ¼B¿JºJÈÀs¼OÓLºO°q ™G¤U¨2©5£\Ó2¹OÑLÐLÜ”—	’	˜"“ÓˆØ‰wœ˜b™e›Ð$Ð$øô œÐ$Ó0¨b£eÐ0üÚ<ùò 3E÷ ŽZüò
 dùò MsS   �&L ¹	L'ÁL'Ã +L1Ã+AL,Ä?L1Ç	MÇ#MÇ4MË MÌL$Ì#L$Ì,L1Ì1
M c                 óH  ^
• SSK nU R                  R                  SU S3S9  U R                  5         UR	                  US5       Vs/ s H  o2R                  US   5      (       a  M  UPM!     snSS nU(       d  g [        R                  R                  S[        R                  R                  S	5      5        SSKn[        R                  R                  S
S5        UR                  SU S3SR                  S U 5       5      -   SS9u  m
n[!        U
4S jU 5       US   S   5      nU[$        R&                  ;  aH  UR)                  USSS9u  p†U(       d  gSSKo™R-                  UR.                  U4SS9R1                  5         U$ s  snf ! ["         a    US   S   n Nwf = f)zùIvy, Oct 23 2026: "It should work on its turn, what shape would be right, and what lego does that." The catalog's best
matches for the shape it described; Haiku picks the one that IS that shape; it goes in its bin for good. Returns the part or None.r   Nz+Looking through the whole Lego catalog for z...©r|  r)  r  rØ   r�  r‹  rŒ  zA Lego builder wants: "zM". Which of these real Lego parts IS that? Answer with the part number only.
r³   c              3   ó:   #   • U  H  oS     SUS    3v •  M     g7f)r  rq  r±  NrQ   )r   rÊ   s     rS   r"  Ú(Imagine.catalog_fetch.<locals>.<genexpr>g  s!   é € Ð"NÊÀ1¨¡i [°°1°V±9°+Õ#>Êùó   ‚é   rk  c              3   óT   >#   • U  H  oS    T=(       d    S;   d  M  US    v •  M     g7f)r  rL   NrQ   )r   rÊ   re  s     €rS   r"  rn  h  s$   øé € ÐLªE q°v±YÀ1Ç7ÈÑ5K›˜˜6žªEùs   ƒ(œ(zthe reefF)Údescribe_itT©r
  ÚargsÚdaemon)ÚpartbinrQ  rö   rb  ÚcatalogÚcheckr�  r\   r‘  r[   r’  r“  r“   r>  r”  r]   r%  r•   r  rG  rµ   rÊ  ÚThreadrÓ  rÒ  )rÎ  r”  rv  rÊ   r8  r˜  r   ÚpickrB  Ú_tre  s             @rS   Úcatalog_fetchÚImagine.catalog_fetch\  s  ø€ ó 	Ø	�‰�‰Ð#NÈsÈeÐSVÐ!WˆÑXÐZ[×Z`ÑZ`ÔZbØ#ŸO™O¨C°Ô4ÓUÒ4�q¿M¹MÈ!ÈFÉ)×<T—Ñ4ÑUÐVXÐWXÐYˆÞ˜Tð	2Ü�H‰H�O‰O˜AœrŸw™w×1Ñ1Ð2SÓTÔUÓWhÜ�J‰J×!Ñ! 'Ð+FÔGØ—5‘5Ð2°3°%ð  8Fð  GØŸ™Ñ"NÉÓ"NÓNñOØ[]ð ð _‰DˆAˆqäÔL©EÓLÈeÐTUÉhÐW]ÑN^Ó_ˆDà”t—|‘|Ó#Ø—K‘K  j¸e�KÐD‰EˆBÞ˜dÛ"§I¡I°W×5EÑ5EÈTÈGÐ\` IÐ$a×$gÑ$gÔ$iØˆùò Vøô Ó1  q¡¨&Ñ!1š$Ð1ús   ÁFÁ'FÁ<B-F ÆF!Æ F!c                 ó¤  • Uc  gUc  U R                  U5      OUnUc  gUR                  UR                  UR                  R	                  5       pen[
        R                  US5       S[        R                  R                  R                  XD5       3nU R                  U5      nUS:w  a	  SU SU S	3$ [        U=(       d    0 R                  S
S5      5      R                  5       S;   n	U R                  XCSU	S9R                  S/ 5       GH5  n
[        R                  " [        R                   " U
S   5      SS2S4   USS2S4   SS9(       a  MF  U R#                  U
S   5      nU R%                  X´U
S   U
S   S.5      (       d  M|  U R'                  5       S   oÅUl        [)        U S/ 5       VVs/ s H  u  pÞXàR'                  5       ;   d  M  XÞ4PM     snnU R*                  U4/-   U l        SU SUR                  S
5       SUR                  SS5       SUR                  SS5      =(       d    S 3R/                  5       s  $    [0        R2                  " U5      oöUl        X_l        U R4                  R6                  R8                  R;                  U5        [=        5       U R4                  l        U R4                  RA                  5         SU S3$ s  snnf )ab  take ONE piece off and put it somewhere else, same piece, same colour -- free (Ivy, Oct 23 2026: "It should try moving
pieces more often. It should move just one or two sometimes and be super willing to move just one piece"). `to` is an aim
({piece, side, end}, or piece 'ground'). If it fits nowhere there, it goes back where it was. Returns a sentence.Nz'tried to move a piece that is not therez-tried to move a piece but didn't say where tor   r¤  r©  ztried to move the rr  rs  ry  rL   ©ÚgroundÚ	baseplaterÝ  rØ   ©r  rÝ  r/  ræ  rH   rJ  )Úatolrÿ  r   r  r¬  r}   r¾  z
moved the z to r	  Úendz+, but it fit nowhere there, so it went back)!Ú	aim_pointr±  rz  ræ  r2  rÎ  r^   r  ru  rv  r¸  ru   r}  r/  rÜ   Úallcloserì   rõ  r·   r°  rŒ  rR  r¾  rÁ   r  r  r  r¶  r·  r¸   r¹  rº  r¼  )rÎ  rÉ   rZ  rÈ   r±  rz  ÚT0rÜ  rÊ   r€  r  rØ  r  re  r@  r›  s                   rS   ÚmoveÚImagine.moveo  st  € ð ‰9ÐFØ ™yˆA�K‰K˜ŒO¨aˆØ‰9ÐLØŸ6™6 1§8¡8¨Q¯S©S¯X©X«Z�bˆÄÇÁÈ6ÐSVÓAWÐ@XÐXYÔZ^×ZaÑZa×ZgÑZg×ZkÑZkÐlpÓZwÐYxÐ>y¸Ø�H‰H�Q‹KˆØ�	‹>Ð$6°r°d¸"¸Q¸C¸qÐ"AÐAÜ�b—h˜B—^‘^ G¨RÓ0Ó1×7Ñ7Ó9Ð=]Ñ]ˆØ—‘˜$ Q¨f�Ð5×9Ñ9¸(ÀB×GˆAÜ�{Š{œ2Ÿ8š8 A c¡FÓ+¨B¨Q¨B°¨EÑ2°B°r¸°r¸1°u±IÀC×HÉ(Ø—‘˜q ™yÓ)ˆAØ�x‰x ¸¸5¹È1ÈVÉ9ÑU×VÓVØ—h‘h“j ‘n� c¤jÜ.5°a¸À"Ô.EÔYÒ.E¡d aÈÏhÉhËjÉ›6˜A›6Ñ.EÒYÐ^_×^dÑ^dÐfiÐ]jÐ\kÑk�”Ø# B 4 t¨B¯F©F°7«OÐ+<¸A¸b¿f¹fÀVÈRÓ>PÐ=QÐQRÐSU×SYÑSYÐZ_ÐacÓSd×SjÐhjÐRkÐl×rÑrÓtÒtñ Hô �wŠw�t‹}ˆ˜dœf¸¬;ÀÇÁÇÁÇÁ×AUÑAUÐVZÔA[ÔhkÓhmÐ]^×]`Ñ]`Ô]eÐop×orÑor×o|Ño|Ôo~Ø# B 4Ð'RÐSÐSùó Zs   Æ-KÇ
Kc           	      ó  ^^^^• U R                  5       nTb  TUS   L a  Tb  S$ S$ U R                  R                  R                   Vs/ s H  n[	        USS5      (       d  M  UPM     nnTR
                  R                  nU Vs/ s H3  n[        U4S jU R                  U5      S    5       5      (       d  M1  UPM5     nnU Vs/ s H  owTLd  M	  UPM     nnU R                  X„ Vs/ s H  o3U;  d  M
  UPM     sn5      n	[	        U SS 5      m[        S U 5       5      m[        U5       V
V^s1 s Hw  u  n
mTc  M  TR
                  R                  S   S	   TS
-   :  d  M0  [        R                  " T5      (       d  MM  [        UUU4S jTR                   5       5      (       d  Mu  U
iMy     nn
nS1U-  n[        U5      nU(       ah  UR!                  5       n
U	 HI  u  nmUT4TU44 H7  u  nnXú:X  d  M  UU;  d  M  UR#                  U5        UR%                  U5        M9     MK     U(       a  Mh  ['        U5      ['        U5      :  a  S['        U5      ['        U5      -
   S3$ U R                  R                  R                   Vs/ s H  o3TLd  M	  X6;  d  M  UPM     snU R                  R                  l        [)        5       U R                  l        U R                  R-                  5         gs  snf s  snf s  snf s  snf s  snn
f s  snf )Nr   z refused: that is the first piecezno such piecerŸ  Fc              3   ó*   >#   • U  H  oTL v •  M
     g 7fr  rQ   r§  s     €rS   r"  Ú!Imagine.remove.<locals>.<genexpr>ˆ  s   øé € Ð&JÒ7I°!¨A¥vÒ7Iùr©  r¿  c              3   óX   #   • U  H   oR                   R                  S    S   v •  M"     g7fr‘  rõ  rm  s     rS   r"  rŒ  Š  s"   é € Ð5VÒSUÈa·f±f·m±mÀAÑ6FÀqÖ6IÒSUùr…  rÒ   r+  c              3   óÖ   >#   • U  H^  n[        TR                  US    5      S   T-
  5      S:  =(       a,    [        R                  " TR                  US    5      SS T5      v •  M`     g7fr/  r0  r2  s     €€€rS   r"  rŒ  Œ  s`   øé € ÐyÒoxÐjkœ˜AŸG™G A c¡F›O¨AÑ.°Ñ3Ó4°sÑ:×e¼t¿|º|ÈAÏGÉGÐTUÐVYÑTZËOÐ\^Ð]^ÐL_ÐadÓ?eÔeÒoxùs   ƒA&A)rª  z  piece(s) would be left floatingr©  )r°  r  r¶  r·  rŒ  r  r
  r1  rv  rp  rã   r3  r  r  râ  rq   r}  rµ   r¸   rU  r¹  rº  r¼  )rÎ  rÉ   rö  rÈ   r®  rd  r—  r@  rŸ  rj  r‰  rö  rÅ   r~  rË   rh  r  ru  rü   s    `     `         @@rS   r¸  ÚImagine.removeƒ  sk  û€ Ø�X‰X‹ZˆØ‰9˜˜R ™Uš
ÐQRÑQ^Ð+MÐ$sÐdsÐ$sØŸ3™3Ÿ7™7Ÿ=š=ÓHš=�a¬G°A°xÀ×,G—™=ˆÐHØ�V‰V�]‰]ˆÙÓKš4�a¤3Ô&J°q·|±|ÀA³ÀqÒ7IÓ&J×#J—™4ˆÐKÙÓ,š2�a¨! —™2ˆÐ,°!·'±'¸$ÈDÓ@bÊDÀqÐ]aÑTaÇÉDÑ@bÓ2c¨aÜ�a˜ dÓ+ˆ´#Ñ5VÑSUÓ5VÓ2V¨RÜ'¨œoõ {šo‘d�a˜°“ÀQÇVÁVÇ]Á]ÐSTÑEUÐVWÑEXÐ[]Ð`cÑ[cÑEc“Ôhl×htÒhtÐuv×hw“ÜÖyÐop×oxÒoxÓy×y÷ ™oˆñ {àˆs�T‰zˆ¤$ t£*˜4ÞØ—‘“
ˆAÛ‘��1Ø ˜V a¨ VÓ,‘D�A�qØ•v !¨4¥-°·±¸!´¸d¿k¹kÈ!¾nó -ñ ÷ ˆdô
 ˆt‹9”s˜4“yÓ ¨9´S¸³YÄÀTÃÑ5JÐ4KÐKkÐ)lÐ"lØ$%§C¡C§G¡G§M¢MÓR¢M˜q¸a°Z›ÀAÁMŸ¡MÑRˆ�‰�‰ŒÜ“5ˆ�‰Œ˜!Ÿ#™#Ÿ-™-œ/°)ùò IùâKùÚ,ùÒ@bùó{ùò Ss`   Á	K/Á#K/Â0K4Â9K4ÃK9ÃK9Ã(	K>
Ã5K>
Ä0
LÄ>!LÅ#LÆ $LÆ(LÊL	ÊL	ÊL	c                 ó‚  ^^^• / m[        U SS 5      m[        UR                  SS5      5      n[        U S5      (       a4  U[        R
                  ;   a   X R                  ;  a  U R                  U5        UU4S jnUR                  S5      (       a  U" S5      (       d  S US'   UR                  S5      (       aÓ  U R                  US   5      oD(       aa  [        R                  UR                  S5       S	[        R                  R                  R                  UR                  UR                  5       3O[        US   5      nU R                  U5      nTR                  US
:X  a  SU 3OSU SU S35        US
:w  a  Tb  TS==   S-  ss'   UR                  S5      n[!        U["        5      (       aV  UR                  S5      (       a@  [        UR                  SS5      5      R%                  5       [&        ;   a  U" S5      (       d  S n[!        U["        5      (       aÿ  UR                  S5      (       aé  [        UR                  SS5      5      R%                  5       [&        ;   a¸  U R                  US   5      nUb¡  [        R                  UR                  S5      n[&        [        US   5      R%                  5          Ul
        TR                  SU S	[        R                  R                  R                  UR                  UR                  5       S	US    35        UR                  S5      (       a{  [        U S5      (       aj  U" S5      (       a]  U R                   V	s/ s H  o™[        U S[)        5       5      ;   d  M  U	PM!     sn	U l        U R+                  5         TR                  S5        [        UR                  S5      =(       d    S5      R%                  5       n
[,        R                  U
/ 5       V	s/ s H  o™[        R
                  ;   d  M  U	PM     nn	U(       a±  [        U S5      (       a   U" SU
 35      (       a�  X°R.                  R1                  [3        U5      5         n[        UR                  SS5      5      nU R                  XÍ5        TR                  SU
 S[        R                  R                  R                  XÌ5       35        [        UR                  S5      =(       d    S5      R5                  5       nU(       aº  [        U S5      (       a©  U R7                  U[)        U R                  5      S9u  pÏU(       a}  U R                  U[        UR                  SS5      5      5        TR                  S US S!  S"[        R                  R                  R                  XÌ5       35        U R9                  XÎ5        UR                  S#5      =(       d    /  Vs/ s H  n[!        U[        5      (       d  M  UPM     snS [:          Hm  nUU R                  ;   d  M  U R                  R                  U5        TR                  S$[        R                  R                  R                  UU5       S%35        Mo     UR                  S&5      =(       d    /  Vs/ s H3  n[!        U[        5      (       d  M  UR5                  5       (       d  M1  UPM5     snS S'  H¿  nU[        R
                  ;   a  UO%U R7                  U[)        U R                  5      S9S(   nU(       d  MH  XÀR                  ;  d  MY  U R                  U[        UR                  SS5      5      5        TR                  S)[        R                  R                  R                  XÌ5       35        MÁ     [        UR                  S*5      =(       d    S5      R5                  5       nU(       aÂ  [        U S5      (       a±  U[        U S+/ 5       Vs/ s H  nUS,   PM
     sn;   aŒ  U[        R
                  ;   ax  UU R                  ;  ah  U R                  U[        UR                  SS5      5      5        TR                  S-[        R                  R                  R                  UU5       S.35        [!        UR                  S/5      ["        5      (       a  UR                  S/5      OS nU(       a§  [        UR                  S,S5      5      [        R
                  ;   az  U R9                  [        US,   5      UR                  S0S5      5        TR                  S$[        R                  R                  R                  [        US,   5      US,   5       S135        [        UR                  S25      =(       d    S5      mT(       Ga/  [=        U4S3 j[        U S+/ 5       5       5      (       Ga	  [?        5       nUR                  S+/ 5       Vs/ s H  nUS,   T:w  d  M  UPM     snUS+'   [@        RB                  " U[E        [F         S43S55      SS69  US+   U l$        U RH                   Vs/ s H;  n[#        U[        R                  R                  R                  US,   US,   5      S79PM=     snU RJ                  S+'   TR                  S-[        R                  R                  R                  TT5       S835        [        UR                  S95      =(       d    S5      R5                  5       nU(       aØ  [        U S5      (       aÇ  U" S:U 35      (       a·  U RM                  U5      nU(       a}  U R                  U[        UR                  SS5      5      5        TR                  S;U S<[        R                  R                  R                  XÌ5       S=35        U R9                  UU5        O"TS==   S-  ss'   TR                  S;U S>35        [        UR                  S?5      =(       d    S5      nU(       a¢  [        U S5      (       a‘  UU R                  ;   a�  U[        U S[)        5       5      ;  ah  U" S@5      (       a[  [        U S[)        5       5      U1-  U l'        TR                  SA[        R                  R                  R                  UU5       SB35        UR                  SC5      SDL aj  U" SE5      (       a]  SDU l(        TR                  SF[        R                  R                  R                  [        UR                  SS5      5      S5       SG35        UR                  SH5      UR                  SI5      nnU[R        :X  a  S nU(       aY  UU RT                  ;   aI  [3        U RT                  5      S:”  a0  U RT                  R                  U5        TR                  SJU SK35        U(       aY  UU RT                  ;  aI  [3        U RT                  5      SL:  a0  U RT                  R                  U5        TR                  SMU SK35        T$ s  sn	f s  sn	f s  snf s  snf s  snf s  snf s  snf )NNrÌ  Ú
play_piecerL   rÃ  c                 óf   >• Tc  gTS   S::  a  TR                  SU  S35        gTS==   S-  ss'   g)NTr§  r   z
wanted to z but had no tokensFrÓ   )r¸   )rÓ  ÚdidÚrts    €€rS   ÚpayÚ Imagine.apply_moves.<locals>.pay›  s>   ø€ Ø‰z $Ø�(‰|˜qÓ  #§*¡*¨z¸$¸Ð?QÐ-RÔ"SÐ\aØˆx‹L˜AÑ‹L drR   r¸  ztake a piece offr   r¤  r©  ztook off the ztried to take off the rr  rs  r§  rÓ   Úrecolorry  rZ  rœ  zrecoloured the Únew_handzget a new handrâ  z2put its handful back and picked up pieces it likesÚrequest_piecezask for zspent a token on z and drew a r<  ©rf  zdug through its bin for "rd  z" and pulled out the Údropúput the ú back in the binÚgrabrH   r   zpicked up the Úhot_takerE  r  z	took the z from its hot listÚhot_addr¢  z on its hot listÚhot_dropc              3   ó2   >#   • U  H  oS    T:H  v •  M     g7frJ  rQ   )r   r  Úhd_s     €rS   r"  Ú&Imagine.apply_moves.<locals>.<genexpr>Ã  s   øé € ÐGÒ1F¨A˜‘y CÖ'Ò1Fùrë  rL  rj   r5  rM  z off its hot listÚcatalog_askzlook in the catalog for zlooked in the catalog for "z" and found the z -- it is in its bin nowz-" but found nothing it could join (no charge)Úreservezreserve a piecezreserved the z" for later -- it stays in its handÚstudyTzstudy a piecezspent a token studying the z	 ten waysÚdrop_questionÚnew_questionzstopped asking "r{  rØ   zstarted asking ")+rŒ  ru   r^   rV  r  rG  rÃ  rò  ry  rÎ  rz  ru  rv  r±  r¸  r¸   r¼   r9  r}  r~  r¹  rÄ  r&  rÂ  rÍ  rU  rÁ   r<  rR  rÇ  r1  rr   rY   rt   rM   rm   rE  rQ  r|  râ  rÍ  r=  rf   )rÎ  rÆ   Úpp_r•  rÉ   rÜ  rÊ   ÚrcrÚ  r  r�  rµ  rÙ  rœ   Údgr@  rh  Úd_Úg_Úhtr  ÚharÃ   r”  ÚrvÚdqÚnqr“  r£  r”  s                              @@@rS   Úapply_movesÚImagine.apply_moves–  sw  ú€ ØˆÜ�Q˜ tÓ,ˆÜ�!—%‘%˜ bÓ)Ó*ˆÜ�1�f×Ñ #¬¯©Ó"5¸#ÇVÁVÓ:KÈQÏVÉVÐTWÌ[ö	+ð �5‰5��?‰?¡3Ð'9×#:Ñ#:È$¸A¸h¹KØ�5‰5��?‰?Ø—‘˜˜(™Ó$ˆAÕpq¬e¯i©i¸¿¹À#Ó.FÐ-GÀqÌÏÉÏÉ×IZÑIZÐ[\×[aÑ[aÐcd×ciÑciÓIjÐHkÑ+lÔwzÐ{|ð  ~Fñ  |Gó  xH bØ—‘˜“ˆA˜SŸZ™ZÀÀYÃ¨-¸°tÑ(<ÐVlÐmoÐlpÐprÐstÐruÐuvÐTwÔxØ�I‹~ "¡.°"°X³,À!Ñ2C³,Ø�U‰U�9ÓˆÜ�bœ$×Ñ B§F¡F¨7§O¡O¼¸B¿F¹FÀ4ÈÓ<LÓ8M×8SÑ8SÓ8UÔYbÓ8bÑknÐox×kyÑkyð  AEÐ{}Ü�bœ$×Ñ B§F¡F¨7§O¡O¼¸B¿F¹FÀ4ÈÓ<LÓ8M×8SÑ8SÓ8UÔYbÓ8bØ—‘˜˜7™Ó$ˆAØ‰}Ü—i‘i §¡¨#Ó.�¼9ÄSÈÈDÉÃ]×EXÑEXÓEZÑ;[°´Ø—
‘
˜_¨S¨E°´4·7±7·=±=×3DÑ3DÀQÇVÁVÈQÏVÉVÓ3TÐ2UÐUVÐWYÐZ^ÑW_ÐV`ÐaÔbØ�5‰5�×Ñ¤¨¨F×!3Ñ!3¹Ð<L×8MÑ8MØ!"§¢ÓN¢˜A´¸¸:ÄsÃuÓ0MÑ+M—a¡ÑNˆAŒFÐPQ×P`ÑP`ÔPbÐdg×dnÑdnð  pdô  eeÜ�1—5‘5˜Ó)×/¨RÓ0×6Ñ6Ó8ˆÜ Ÿ9™9 T¨2Ô.ÓDÒ.�a´t·|±|Ñ2C—Ñ.ˆÐDÞ”G˜A˜v×&Ñ&©3°¸$¸Ð/@×+AÑ+AØ—v‘v—‘¤s¨4£yÓ1Ñ2ˆC¼3¸q¿u¹uÀ\ÐSUÓ?VÓ;W°DØ�F‰F�3ÔØ�J‰JÐ*¨4¨&°¼T¿W¹W¿]¹]×=NÑ=NÈsÓ=XÐ<YÐZÔ[Ü�—‘�u“×# Ó$×*Ñ*Ó,ˆÞ”'˜!˜V×$Ñ$Ø—e‘e˜B¬¨A¯F©F«�eÐ4‰GˆCÞØ—‘�sœC §¡ l°BÓ 7Ó8Ô9¸3¿:¹:ÐHaÐbdÐehÐfhÐbiÐajÐjô  AE÷  AHñ  AH÷  ANñ  AN÷  ARñ  ARð  SVó  A\ð  @]ð  G^ô  <_ð  ab÷  akñ  akð  loô  atØ Ÿu™u V›}×2°Ð2ÓJÒ2˜´zÀ!ÄS×7I—1Ñ2ÑJÈ5ÌDÓQˆBØ�Q—V‘V�|˜QŸV™VŸ]™]¨2Ô.°·
±
¸XÄdÇgÁgÇmÁm×FWÑFWÐXZÐ\^ÓF_ÐE`Ð`pÐ;qÖ0rñ Rà Ÿu™u V›}×2°Ð2ÓXÒ2˜´zÀ!ÄS×7I“1ÈaÏgÉgÏi—1Ñ2ÑXÐY[ÐZ[Ó\ˆBØœdŸl™lÓ*‘"°·±°bÄ#ÀaÇfÁfÃ+°Ð0NÈqÑ0QˆCßˆs�s§&¡&Õ(¨!¯&©&°´c¸!¿%¹%ÀÈbÓ:QÓ6RÔ*SÐUX×U_ÑU_ÐbpÔqu×qxÑqx×q~Ñq~÷  rCñ  rCð  DGó  rMð  qNð  aOö  VPñ ]ô �—‘�zÓ"×( bÓ)×/Ñ/Ó1ˆÞ”'˜!˜V×$Ñ$¨Ä7È1ÈeÐUWÔCXÓ/YÒCX¸a°°&´	ÑCXÑ/YÓ)YÐ^`Ôdh×dpÑdpÓ^pÐuwð  @A÷  @Fñ  @Fó  vFØ�F‰F�2”s˜1Ÿ5™5 ¨rÓ2Ó3Ô4°c·j±jÀ9ÌTÏWÉWÏ]É]×M^ÑM^Ð_aÐceÓMfÐLgÐgyÐAzÔ6{Ü!+¨A¯E©E°)Ó,<¼d×!CÑ!CˆQ�U‰U�9ÔÈˆÞ”#�b—f‘f˜V RÓ(Ó)¬T¯\©\Ó9¸1¿:¹:ÄcÈ"ÈVÉ*ÃoÐWY×W]ÑW]Ð^cÐegÓWhÔ;iÐkn×kuÑkuð  yAô  BF÷  BIñ  BI÷  BOñ  BO÷  BSñ  BSô  TWð  XZð  [añ  Xbó  Tcð  egð  hnñ  eoó  Bpð  Aqð  qAð  wBô  lCÜ�!—%‘%˜
Ó#×) rÓ*ˆß”3ÔG´¸¸EÀ2Ô1FÓG×GÒGÜ“ˆB°b·f±f¸UÀBÔ6GÓ*\Ò6G°È1ÈVÉ9ÐX[ÑK[¯1Ñ6GÑ*\˜b ™iÔ^b×^gÒ^gÐhjÔlpÔtxÐsyð  zDð  rEð  GJó  mKð  TUò  _Vð  `bð  chñ  `ið  XYô  X]Ø]^×]bÒ]bÓcÒ]bÐXYœd 1¬4¯7©7¯=©=×+<Ñ+<¸Q¸v¹YÈÈ&É	Ó+RÔSÑ]bÑcˆA�G‰G�E‰NÐeh×eoÑeoÐr{ô  }A÷  }Dñ  }D÷  }Jñ  }J÷  }Nñ  }Nð  ORð  TWó  }Xð  |Yð  Yjð  qkô  flÜ�!—%‘%˜Ó&×,¨"Ó-×3Ñ3Ó5ˆÞ”7˜1˜f×%Ñ%©#Ð0HÈÈÐ.N×*OÑ*OØ—/‘/ #Ó&ˆCÞØ—‘�sœC §¡ l°BÓ 7Ó8Ô9Ø—
‘
Ð8¸¸Ð=MÌdÏgÉgÏmÉm×N_ÑN_Ð`cÓNiÐMjð  kCð  Dô  Eð  GH÷  GQñ  GQð  RUð  WZõ  G[à�8“ Ñ!“ 3§:¡:Ð0KÈCÈ5ÐP}Ð.~Ô#Ü�—‘�yÓ!×' RÓ(ˆÞ”'˜!˜V×$Ñ$¨¨q¯v©v«¸"ÄGÈAÈzÔ[^Ó[`ÓDaÓ:aÑfiÐj{×f|Ñf|Ü   J´³Ó6¸"¸Ñ=ˆAŒJ¸s¿z¹zÈMÔZ^×ZaÑZa×ZgÑZg×ZkÑZkÐlnÐprÓZsÐYtð  uWð  KXô  @YØ�5‰5�‹>˜TÒ!¡c¨/×&:Ñ&:ØˆAŒH˜SŸZ™ZÐ*EÄdÇgÁgÇmÁm×FWÑFWÔX[Ð\]×\aÑ\aÐbnÐprÓ\sÓXtÐv}ÓF~ÐEð  @Ið  )Jô  KØ—‘�Ó'¨¯©¨~Ó)>ˆBˆØ”‹<˜d˜Þ�"˜Ÿ™Ó#¬¨A¯K©KÓ(8¸1Ó(<¸a¿k¹k×>PÑ>PÐQSÔ>TÐVY×V`ÑV`ÐcsÐtvÐswÐwxÐayÔVzÞ�"˜AŸK™KÓ'¬C°·±Ó,<¸qÓ,@À!Ç+Á+×BTÑBTÐUWÔBXÐZ]×ZdÑZdÐgwÐxzÐw{Ð{|Ðe}ÔZ~Øˆ
ùòW OùâDùò KùâXùò 0Zùò +]ùÚcsO   ÍxÍ=xÏ5x#Ðx#×x(×;x(Úx-Ú5x-Ûx-ß4x2ç)x7ç:x7éAx<c           
      óÌ  ^^• SSK JnJnJn  TSS S-   m[        R
                  R                  T5      (       d  T$ UU4S jn[        S5       ofR                  US5      u  pxSSS5         UR                  S	S
S5      n	U	R                  UR                  T5      R                  S5      R                  S5      SUR                  T5      R                  S5      R                  S5      5        [        WS4WS445       Hx  u  n
u  p¼UR                  U5      R                  S5      oÙR                  USU
S-  4U5        UR                  U	5      R!                  SU
S-  S-   4USUR#                  SS5      S9  Mz     UR                  U	5      R!                  SSSUR#                  SS5      S9  TSS S-   oéR%                  U5        U$ ! , (       d  f       GNh= f! [&         a    Ts $ f = f)zñwhat it looks at: the main view plus from behind and from above, in one picture (Ivy, Oct 23 2026: "The diagonal plate
isn't visible to it" -- from one corner, pieces under or behind others are hidden; she can turn the 3D model, it couldn't)r   )ÚImageÚ	ImageDrawÚ	ImageFontNr4  rD  c                 óh   >• TS S SU  S3-   n[         R                  " SSSSSS	S
USSSSSU T/SS9  U$ )Nr4  r   rK  rE  rv   rF  rG  rH  rI  rJ  rL  Ú420rN  rO  Tr¶   )r�   rv   )Úvpr™   Úldrrd  s     €€rS   r^  ÚImagine.views.<locals>.oneÞ  sn   ø€ Ø�c�r�(˜q   D˜\Ñ)ˆCÜ�NŠN˜I uÐ.AÐCVÐX\Ð^tÐvzÐ|ð  BFð  HMð  OSð  UZØ)¨2¨sð4ØDHòJØRUÈ:rR   rÒ   )r›  rÿ  ÚRGB)i`  iH  ÚwhiteÚRGBA)é¼  rÂ  )r   r@   zfrom behindz
from aboverÂ  i¤  iÆ  rØ   Úblackz//usr/share/fonts/truetype/dejavu/DejaVuSans.ttfrA   )ÚfillÚfont)rù  rp  z	main viewé   z
_views.png)ÚPILr·  r¸  r¹  r[   r\   ro   r   rÒ  r  ÚpasterM   ÚconvertÚresizer3  ÚDrawr®   Útruetyperb  r•   )rÎ  rd  r·  r¸  r¹  r^  rž   r›  rÿ  ÚWr!  rÉ   Úlabrº  r™   r½  s    `             @rS   r�  ÚImagine.viewsØ  sà  ù€ ÷ 	4Ñ3Ø�#�2ˆh˜ÑˆÜ�w‰w�~‰~˜c×"Ñ"¨3 Jö	Vô   Ô" b·f±f¸SÀ/Ó6R©)¨$×"ð	%Ø—	‘	˜%Ð!1°7Ó;ˆAØ�G‰G�E—J‘J˜s“O×+Ñ+¨FÓ3×:Ñ:¸:ÓFÈÐQV×Q[ÑQ[Ð\_ÓQ`×QhÑQhÐioÓQp×QwÑQwð  yCó  RDô  EÜ(¨4°Ð*?À#À|ÐATÐ)UÖV‘�‘8�AØ—Z‘Z “]×*Ñ*¨6Ó2�·G±G¸BÀÀaÈ#ÁgÀÐPRÔ4SØ—‘˜qÓ!×&Ñ&¨¨Q°©W°q©[Ð'9¸3ÀWÐS\×SeÑSeð  gXð  Z\ó  T]Ð&ó  ^ñ  Wð �N‰N˜1Ó×"Ñ" 8¨[¸wÈY×M_ÑM_ð  aRð  TVó  NWÐ"ñ  XØ�c�r�(˜\Ñ)ˆC¯6©6°#¬;¸s¸
÷ #Ö"ûô Ó$ š*Ð$ús   ÁGÁ*EG Ç
GÇG#Ç"G#c                 óz  ^ ^/^0^1• [        T SS 5      =(       d    T R                   ST R                  S S3nS T l        T R	                  U5      nSR                  S T R                   5       5      =(       d    SnT R                  5       nSR                  S [        T R                  5       5       5      nS	R                  T R                  S
S  5      =(       d    Sn[        R                  " [        [         S35      5      m0SR                  U0U 4S jT R"                   5       5      n[        T SSS05      n[$        nT R'                  5       u  pšnU	=(       d    Sn	[        T SS 5      (       a$  T R*                  =(       d    0 R-                  S5      OS nU(       a	  SUS    S3OSnT R/                  5       S   nU
(       a-  U(       a&  SU
S    U
S   (       a  SU
S   -   OS S U
S   S!-
   S"3OSnUS    S#US   S!:w  a  S$OS S%[2         S&3n T R5                  5       m/SR                  U/U 4S' jT R7                  5        5       5      =(       d    SnS( m1SR                  U14S) jT R8                  R-                  S*/ 5      S+S   5       5      =(       d    S,nT R8                  R-                  S-S5      nT R                  (       a  T R                  S.   O0 nUR-                  S/5      (       a%  [        R:                  " UR-                  S/5      5      OS0n[=        5       R-                  S1/ 5      T l        T R>                   Vs/ s H;  n[A        U[B        RD                  RF                  R-                  US2   US2   5      S39PM=     snT R*                  S1'   SR                  S4 T R>                   5       5      =(       d    S5n[        T S6S 5      (       a   [        R:                  " [        T S6S 5      S!S79OS8nT R                  [H        -  (       a  [H        T R                  [H        -  -
  OSnUR-                  S95      (       a  S:UR-                  S95      < S;3OS<US:X  a  T R                  S:”  a  S=OS>U=(       d    [H         S?3-   nUR-                  S@5      (       a%  [        R:                  " UR-                  S@5      5      OSnT R8                  R-                  SA5      =(       d    0 R-                  T RJ                  / 5      nU(       a  S	R                  SB USCS   5       5      OSDn[        T SES 5      (       aA  SF[        T SGS 5      =(       d    SH SIT RL                   SJT RL                   SKT RL                   SL3	OSn[        T SMSN5      (       aµ  T RN                   V s/ s H  n U R-                  SO5      (       d  M  U PM     n!n SPT RP                   SQT RJ                   SRT RP                   SS3U!(       a  S	R                  ST U!SUS   5       5      OS-   SV-   SWT RP                   SX[        T SYS5      =(       d    S SL[R         S3-   n[        T SZSN5      (       a   [        T S[S5      (       aŽ  S\T RJ                  RU                  5        S]T RJ                   S^U SLT RV                   S_3	UR-                  S`5      (       a7  SaS	R                  Sb UR-                  S`5      =(       d    / S Sc  5       5       Sd3OS-   Se-   OSn"[        T SZSN5      (       a  SfOSn#[        T SgS 5      =(       d    0 n$U$R-                  Sh5      (       a+  SiU$R-                  Sj5       SkU$R-                  Sl5       Sm3U-   nO.U$R-                  Sj5      (       a  SnU$R-                  Sj5       SL3U-   nSR                  So [X         5       5      n%[        T SpSN5      (       a  SqOSn&SR                  / U PSrP[[        5        PSsPU PStPU PSuPU PSvPU PSwP[\         PSxPU PSyPU PSzPU	 PU PS{PU PS|PU PS}PU PS~P[H         PSPU PS€PU PS�PU PS‚PU PSyPU PU" PU& PSƒPU PS„PU PS…PU% PS†PU# PS‡PU PSˆPU PS‰PSR                  [^        5       PSŠPSR                  [^        5       PS‹P5      n'SŒS�SŽS�S�S‘S’S“S”T R                  S•U'/T l0        SŒS�SŽS�S�S–S—S˜S’S“S”T R                  S•U'/n([c        [d        Rf                  U([h        0 [j        Rl                  ES™[n        0E[d        Rp                  [d        Rp                  SSš9T l9        T R                  (       a  T R                  S.   O0 n)U)R-                  S›5      (       a  SœU)S›    3OSU)R-                  S�5      =(       d    S[u        U)R-                  S@5      [@        5      (       a%  U)S@   R-                  Sj5      (       a  SžU)S@   Sj    SŸ3OS/n*S T l;        S T R*                  S '   / T R*                  S¡'   T R                  T R*                  S¢'   T Ry                  5         [{        S£5      R}                  T R~                  U)[�        T R                  5      U* V+s/ s H  n+U+(       d  M  U+PM     sn+T R                  4SS¤9n,U,Rƒ                  5         SS KBn-T Rr                  4U 4S¥ jjn.U-R}                  U.SS¦9T lC        T R†                  Rƒ                  5         g ! [        [         4 a    0 m0 G	NÛf = f! [(         a	    Su  pšn G	N£f = f! [(         a  nSn[1        SUSS9   S nAG	N\S nAff = f! [(         a    Sn GNÜf = fs  snf s  sn f s  sn+f )§NrÏ  rB  rC  rK  r³   c              3   ó  #   • U  Hw  nS US    SUR                  SS5       SUR                  SS5       SUR                  S5      (       a  S	UR                  S
S5      -   S-   OS SUR                  SS5       3
v •  My     g7f)r€  rR  z: saw rh  rL   z | might be r¡   rÍ  rv  zPIVOT: Ú	why_pivotzwanted r%  Nr,  r-  s     rS   r"  ÚImagine.look.<locals>.<genexpr>ï  s“   é € ð ,â *˜1ð ˜q ™y˜k¨°·±°g¸rÓ0BÐ/CÀ<ÐPQ×PUÑPUÐV`ÐbdÓPeÐOfÐfiØHIÏÉÈgÏÉ˜) a§e¡e¨K¸Ó&<Ñ<¸uÒDÐ\^Ð_Ð_fÐgh×glÑglÐmsÐuwÓgxÐfyõ{â *ùr{  z"(empty -- this is the first piece)c              3   ó:   #   • U  H  u  pUS -    SU 3v •  M     g7f)rÓ   rV  NrQ   )r   r‰  rÈ   s      rS   r"  rÓ  ó  s"   é € ÐJÒ3I©4¨1˜!˜a™%˜  1 #•Ò3Iùro  r†  iúÿÿÿúnone yetrU  c           	   3   ó   >#   • U  Hs  nS U S[         R                  R                  R                  X5       3U[	        TS[        5       5      ;   a  SOS-   TR                  U5      (       a  STU    3OS-   v •  Mu     g7f)r`  rq  râ  z (RESERVED by you)rL   r¥  N)r  ru  rv  r^   rŒ  r¹  )r   r  rg  rÎ  s     €€rS   r"  rÓ  ÷  s„   øé € ð XÚPVÈ1ð ˜a˜S ¤4§7¡7§=¡=×#4Ñ#4°QÓ#:Ð";Ð<ÐXYÔ]dÐefÐhrÔtwÓtyÓ]zÓXzÑ@Tð  ACñ  DØ16·±¸1·±˜d 5¨¡8 *Ñ-À2öGÚPVùs   ƒA;A>rÌ  r§  r   )rL   NFznothing yetrö  rõ  z&
YOU ARE HOLDING a section right now: rô  zÓ -- floating above where it was in the pictures. Build under or around it, then "set_down" puts it back as one piece (where it came from, unless you name a piece). You can't call it done while you're holding it.rL   rÑ   zstability failed:Tr‹   z$
Things started going wrong at turn rÒ   r  zD. If you want, you can GO BACK to before it: "go_back": {"to_turn": rÓ   z:} takes off that piece and every piece YOU added after it.z tokenrÎ  z. Tokens are rare: one every aM   turns, and one each time your judge (a clone of you) gives you a heart. ONE token buys any one of: repaint a piece (recolor), take a piece off (remove), find a piece by its SHAPE in the whole Lego catalog (catalog_ask: think what shape would be right here, and which Lego piece is that), or a STUDY turn (study: instead of a few random surprises, see the piece you chose tried about ten ways where you aim -- for when you know the piece but not the spot). You choose what's worth it; you can't spend what you don't have. Breaking off sections, bending, turning and starting over are free.c              3   ó6  >#   • U  HŽ  nS TR                  US   5      S-    STR                  US   5      S-    S3SR                  U4S jUS    5       5      -   S	[        [        TS
0 5      R	                  [        US   5      S5      5       S3-   v •  M�     g7f)z- #r„  rÓ   z swings on its pin on #rƒ  z, carrying r  c              3   óR   >#   • U  H  nS TR                  U5      S-    3v •  M     g7f)rþ  rÓ   N)rî  )r   rh  Úbs_s     €rS   r"  Ú)Imagine.look.<locals>.<genexpr>.<genexpr>  s)   øé € Ð:fÒ[eÐVW¸Q¸s¿y¹yÈ»|ÈaÑ?OÐ>PÕ;QÒ[eùs   ƒ$'rÀ   z -- now at r´  r‚  r   r  N)rî  r]   r9   rŒ  r^   r  )r   r  rÙ  rÎ  s     €€rS   r"  rÓ    sÝ   øé € ð 1Xò MWð  HIð 47°s·y±yÀÀ8ÁÓ7MÐPQÑ7QÐ6RÐRiÐjm×jsÑjsÐtuÐv}Ñt~Ójð  CDñ  kDð  jEð  EPð  2QØ15·±Ô:fÐ[\Ð]dÒ[eÓ:fÓ1fñ2gà3>¼uÄWÈQÐP]Ð_aÓEb×EfÑEfÔgiÐjkÐlqÑjrÓgsÐuvÓEwÓ?xÐ>yð  zBð  2Cö2Cò MWùs   ƒBBc                 óÚ   • U R                  S5      =(       d    0 n[        UR                  5       5      nU(       a0  SSR                  S UR	                  5        5       5      -   SU S3-   $ S$ )Nr2  rk  r  c              3   ó4   #   • U  H  u  pU S U 3v •  M     g7f©r¤  NrQ   )r   r!  rý   s      rS   r"  Ú-Imagine.look.<locals>.made.<locals>.<genexpr>  s   é € Ð-OÂY¹T¸Q°°°1°Q°C­jÂYùs   ‚rr  z pieces)rL   )r^   rá   r  r]   r'  )r@  rø   r  s      rS   ÚmadeÚImagine.look.<locals>.made  s]   € Ø—‘�iÓ ×& BˆA¬C°·±³
«O¨Þgh�M D§I¡IÑ-OÀQÇWÁWÄYÓ-OÓ$OÑOÐTVÐWXÐVYÐYaÐRbÑbÐpÐnpÐprR   c              3   óÈ   >#   • U  HW  nS US    S3SR                  S US    5       5      -   T" U5      -   UR                  S5      (       a  SUS   S    3OS	-   v •  MY     g
7f)r`  r.  rq  r¢   c              3   óN   #   • U  H  oR                  S 5      S   SS v •  M     g7frb  re  rg  s     rS   r"  rÚ    s$   é € Ð9dÒXcÐST¿'¹'À#»,Àq¹/È#È2Õ:NÒXcùrj  r/  r1  z | by the end you loved: r}   rL   Nrl  )r   r@  rß  s     €rS   r"  rÓ    s€   øé € ð Kò nJÐhið ˜a ™i˜[¨Ð+¨f¯k©kÑ9dÐXYÐZbÒXcÓ9dÓ.dÑdÑgkÐlmÓgnÑnØLMÏEÉEÐRYÏNÉNÐ7¸¸'¹
À2¹Ð7GÑHÐ`bödò nJùs   ƒAA"r  ro  z(this is your first build)rx  r}   ry  z$nothing yet: this build just startedrE  r  rM  c              3   óÚ   #   • U  Ha  nS US    S[         R                  R                  R                  US   US   5       S[	        US   5       SUR                  SS5       S3	v •  Mc     g7f)	r`  r  rq  r¥  z (you wanted it for: r¢  rL   rs  Nrt  )r   r  s     rS   r"  rÓ    s¨   é € ð  lò  fkð  ab˜b  6¡ ¨2¬d¯g©g¯m©m×.?Ñ.?ÀÀ&Á	È1ÈVÉ9Ó.UÐ-VÐVZÔ[fÐghÐioÑgpÓ[qÐZrð  sHð  IJ÷  INñ  INð  OTð  VXó  IYð  HZð  Z[õ  \ò  fkùs   ‚A)A+z(empty so far)Úplanr5  znone yet: make one nowÚ
wish_shapezYour wish so far: rV  z%You haven't wished for anything yet. z+It is delivered THIS turn -- make it exact.zNext delivery in z	 turn(s).rz  r3  c              3   ó^   #   • U  H#  oS     SSR                  US   SS 5       3v •  M%     g7f)r.  rq  r¢   r/  éþÿÿÿN)r]   ©r   r  s     rS   r"  rÓ     s4   é € Ð_ÒS^Èa˜v™Y˜K r¨&¯+©+°a¸±kÀ"À#Ð6FÓ*GÐ)HÕIÒS^ùs   ‚+-r4  z this is your first game togetherr  z
A REQUEST: rg   Úsomeonez asked you to build "zn". Build that, your own way: interpret it playfully and surprise them, but by the end it must clearly read as zš. Your current idea is that request (you can elaborate it, not replace it), you don't abandon it for a daydream, and 'done' means it now clearly reads as z.
r³  Fr®   z
PICTIONARY. Your secret is "z". z• CANNOT see it: they are watching the build and guessing what it is. Make them guess it from the bricks alone -- the most recognisable thing about a a%   first and biggest (exaggerate it, the way a Pictionary drawing does), nothing extra that muddies it, and never letters or words built in bricks. Their guesses so far, oldest first, each with how WARM it reads (0-10, from closeness in meaning; they see warmer / colder than their last guess): c           	   3   ó¶   #   • U  HO  nS UR                  S5       SUS    S3UR                  S5      b  [        [        SUS   -  5      5      OS-   v •  MQ     g7f)	r€  rR  z: "r®   z	" warmth ÚwarmNr)  r   )r^   ru   r9   rè  s     rS   r"  rÓ  +  s{   é € ð   fò  ^eð  YZ %¨¯©¨f« °c¸!¸F¹)¸ÀIÐ NÐpq×puÑpuÐv|Óp}ñ  qJÔRUÔV[Ð\^ÐabÐciÑajÑ\jÓVkÔRlð  PSö  !Tò  ^eùs   ‚AAiøÿÿÿzw. If a warmth is wrong -- you know your secret, the meter does not -- add "warmth": {"<their guess>": <0-10>} to fix itzu. Read their LATEST guess as feedback: what did they see in your build that made them say it? Keep what pulls toward a  , change what pulls away. You cannot finish until they guess it ('done' is refused). Also add a field "to_guesser" to your JSON: a hint made ONLY of emoji, up to six, no letters or words at all. NEVER the emoji of the thing itself or anything that names it.
And GESTURE, like a charades player's hands: add "gestures": a sequence of up to TWELVE steps, each {"piece": "#n", "emoji": "<ONE emoji>"}, played in order as an animation over their view -- a hand glides to each piece and shows that emoji, then the next. Your gestures last turn: Ú_last_gesturesrÅ  rÆ  z
YOU ARE PLAYING TOGETHER WITH z9, taking turns, each from your own hand. Your games with z	 before: zÂ
Think about what they did: what do you think they were going for? Then decide whether to follow their idea, answer it, or go your own way, and say which. (Fill in about_her_move and with_her.)
Úcharadesz&Your charades guesses LAST turn were: c              3   ó˜   #   • U  H@  n[        UR                  S 5      5      S-   [        UR                  S5      5      -   S-   v •  MB     g7f)Úguessrr  Úsurez%)N)ru   r^   rè  s     rS   r"  rÓ  8  sU   é € ð  Fhò  Ggð  BCÄcÈ!Ï%É%ÐPWË.ÓFYÐ\`ÑF`ÔcfÐgh×glÑglÐmsÓgtÓcuÑFuÐx|ÖF|ò  Ggùs   ‚AA
rÔ   z9. Did their new move make any warmer or colder? Re-rank.
aR  PLAY CHARADES with them: shout guesses, bold and fast, the way you would at a party. What are they making, and why did they add THAT piece THERE? Give several different guesses, ranked best first, each with how sure you are ("charades"). A wild guess that turns out right is the most fun thing in the game; a safe vague one is the least.
zz
(You are playing together, so you can't start over on your own: if you would, say so in start_over and they will see it.)r½  Úrestartz.
YOU STARTED OVER. Last time you were making: Úideaz&. What you decided to do differently: Úwouldz3. The old one is saved. Build it better this time.
z3
You left your last build unfinished to make this: c              3   ó|   #   • U  H2  o S [         R                  R                  R                  X5       3v •  M4     g7frÝ  r:  rw  s     rS   r"  rÓ  F  s-   é € ÐWÊÀA  A¤d§g¡g§m¡m×&7Ñ&7¸Ó&=Ð%>Õ?Êùs   ‚:<Úlast_was_surprisez°
Your last piece was a SURPRISE, not what you asked for. Before you change anything, ask yourself whether it should stay. Some of your best builds came from keeping accidents.
z2

Your own file, IT.md, which only you write:
---
aN  
---

You are playing with Lego with no plan, one piece at a time. Nobody asked you to make anything. You decide what
this is, what it might become, and you can change your mind whenever you see something else in it.

You have built before. These are your own past builds, what each one became, in order (your memory, across builds):
a,  
You can make something you've made before if you really want to, but notice if you keep making the same thing. You might be
tired of it. Being the same player who made those is the point: you carry your taste and your questions from build to build.

Look at the picture of what you've built so far: zÉ  (Read it. It shows the main view, plus the same build from behind and from above, so you can see pieces the main view hides.)
The pieces in it (#number, colour, piece, where it sits in the picture):
z
What you did on recent turns: a:  

YOUR HANDFUL -- the few pieces you've picked up; you add from these. Nothing is dealt to you and nothing is forced on you: pick up
pieces you want ("grab": up to 3 a turn, free -- a part number from your bin, or describe it and you'll dig it out) and put back any
you don't like ("drop", free). You hold at most z; a played piece is used up.
z

z

YOUR FEELINGS THIS BUILD: z�

YOU CANNOT RUN OUT OF TURNS. Take as many as the build needs: it ends only when YOU say it's done (or someone presses stop).

YOUR TOKENS: z

DOES IT STAND? zò

YOUR HOT LIST -- pieces you love, kept one call away across every build ("hot_take" puts one in your hand, free, once a turn).
Anything you dig up, wish for or fetch goes on it; add your own favourites with "hot_add", drop with "hot_drop":
zï

DIGGING IS FREE: once a turn you can dig through your whole bin for a piece you know you have ("dig": describe it) and it comes
into your hand. Your hand is just what's in front of you; your bin is everything you own.

A NEW PIECE EVERY zÑ TURNS, from the whole Lego catalog, free: think about what SHAPE would be right here that your bin
doesn't have, and refine it every turn in "wish_shape" (what it looks like, how big, what it attaches with). aÖ  

BUILDING UNDER: you can put a piece UNDER any piece -- aim at its bottom. Under the BOTTOM piece, the whole build lifts by the new
piece's height and stands on it (that's how you set the build into a tray or onto a base someone made).

MOVING PIECES IS FREE, and good builders do it constantly: a piece in the wrong place is better MOVED than built around or covered
up. Every turn, look for one or two pieces that would be better somewhere else -- an inch left, the other end, the other side, up
a level -- and move them ("move"). Moving just one piece is a perfectly good turn. It keeps its colour; if it fits nowhere where you
point, it goes back.

SECTIONS: you can break the build apart at any join and treat a section as ONE big piece. "break_off" breaks a piece -- and
everything that comes away with it -- off the piece it's joined to. Then: "hold" lifts it up and you hold it while you build on
what's left: lift the body off its one leg, add a second leg (it can stand straight on the invisible baseplate), set the body back down on both legs. That is how you ADD a leg, or
build anything in between. "keep_it" keeps that half and throws the rest away; "throw_it_away" throws that half away. Both are
free, like starting over.zi

HINGES you can bend this turn (a piece on a single pin can swing; everything riding on it swings too):
zS

Your own questions -- ask yourself each one, honestly, before deciding anything:
zHow you felt last turn: z$
The daydream you've been carrying: a  

Your attention runs on interest, the way ADHD attention does: novelty, challenge, urgency and real interest light you up;
repetition, waiting, and things that aren't working drain you. Feelings move gradually, unless something surprises you.
You can abandon this build for your daydream if you are genuinely more excited about it, or if this one isn't working. That
is allowed, not a failure; unfinished builds are saved and remembered. But don't leave on a whim either.
First pieces you could start a daydream with: aA  

STARTING OVER IS FREE. Every turn, imagine starting THIS SAME idea over from nothing, knowing what you know now: what would you
put down first, what would it stand on, what would you do differently? Then weigh it honestly against pressing on. Ivy says:
starting over with Legos is free -- and with virtual Legos, as a machine that doesn't get tired, it is more than free. Nothing
is lost: this build is saved and remembered. Keeping a build going only because pieces are already on it is the one real
waste. And a better build is what people would actually want to play with.zÆ

YOUR CONSTRUCTION PLAN so far (yours -- refine it every turn: tick off what's built, fix sizes and positions that turned out wrong,
reorder steps; only start it fresh if the idea itself changed):
z8

Your notebook so far (your own memory of this build):
ae  

Look at it creatively, the way a kid looks at a pile of bricks and suddenly sees a dog. Then answer ONLY with JSON:
{"i_see": "<one sentence, at most 25 words: what it looks like right now>",
  "current_idea": "<the idea you were holding (from your notebook), or 'none yet'>",
  "new_seeing": "<a few words: what it could be NOW, if something new jumps out at you; may be the same as your current idea>",
  "weigh": "<one sentence, at most 25 words: do you like the new seeing more than your current idea, and why?>",
  "keep": <true to keep your current idea and make the build fit it better; false to switch to the new seeing>,
  "might_be": "<a few words: the idea you are going with now -- or 'not sure yet' if you honestly don't know what it is>",
  "might_be_why": "<one sentence, at most 20 words: why you see that>",
  "next": "<one sentence, at most 25 words: the one piece you want next, in picture words: which coloured piece it joins,
           left or right, up or down, reaching out or tucked in, long or small. If you kept your idea, the piece that makes
           the build look MORE like it.>",
  "answers": ["<a short honest answer to question 1>", "<to question 2>", "..."],
  "remove": "<'#n' of one piece to take off because it doesn't fit, or null>",
  "remove_why": "<if removing, at most 15 words why>",
  "recolor": {"piece": "<'#n'>", "to": "<one of: a[  >"} or null,
  "new_question": "<a question you want to ask yourself every turn from now on, or null>",
  "drop_question": "<the exact text of one of your questions that stopped being useful, or null>",
  "charades": [{"guess": "<what they're making / why they put that piece there>", "because": "<what in the build tells you>", "sure": <0-100>}, "...3 to 5, best first..."] -- only when playing with someone, else [],
  "could_be": [{"thing": "<what the WHOLE build could be>", "sure": <0-100>}, "...3 to 5 different readings, best first, your current idea among them..."],
  "about_her_move": "<only when playing with someone: what you think they were going for with their last piece, or null>",
  "with_her": "<only when playing with someone: follow | answer | own way>",
  "loved_her_move": <only when playing with someone: true ONLY if you genuinely loved their last move -- it earns them a rare token to take a piece off>,
  "kid_thinks": "<at most 5 plain words a child can read: what it is, e.g. 'a little red boat' or 'not sure yet'>",
  "kid_wants": "<at most 8 plain words a child can read: what you want next, e.g. 'a tall piece on the blue roof'>",
  "feelings": {"excitement": <0-10>, "confidence": <0-10, is this build working?>, "frustration": <0-10>, "boredom": <0-10>},
  "about_the_last_piece": "<one short honest feeling about the piece that just went on>",
  "daydream": {"idea": "<something ELSE you could start making instead>", "first_piece": "<one part number from the first-piece list>",
               "first_colour": "<a colour>", "excitement": <0-10, how much it pulls at you>},
  "hot_take": "<free, once a turn: a part number from YOUR HOT LIST to put in your hand now -- or null>",
  "hot_add": {"part": "<a part number you love and want one call away from now on>", "why": "<a few words>"} or null,
  "hot_drop": "<a part number to take off your hot list -- or null>",
  "dig": "<free, once a turn: describe a piece you think is somewhere in your bin and you'd like in your hand now -- or null>",
  "shop": <free, for things no part is CALLED (a puff of dust, a cloud, a splash): {"for": "<what you want it to look like>", "on": "#n"} --
           the engine thumbs through your bin, keeps only pieces that FIT on #n, shows each in place to a quick eye that says what it
           reads as, and those become this turn's options. Use the free-stud counts on the piece list to say what size fits. Or null>,
  "wish_shape": "<the piece you wish your bin had, refined from last turn: its shape, size in studs, how it attaches -- delivered free every few turns>",
  "catalog_ask": "<or: describe the SHAPE you wish you had, in plain words (e.g. 'a little frog', 'a long thin curved piece for a neck'); a token finds the real Lego piece that is that shape in the whole catalog, puts it in your bin for good and in your hand now -- or null>",
  "study": <true to spend a token studying your chosen piece about ten ways this turn, false otherwise>,
  "move": [{"piece": "<#n>", "to": {"piece": "<#m, or 'ground'>", "side": "<top | bottom | left | right | front | back>", "end": "<left | right | middle>"}}] -- up to two pieces, or [],
  "break_off": {"piece": "<#n>", "from": "<#m it is joined to>", "then": "<hold | keep_it | throw_it_away>"} or null,
  "set_down": {"on": "<#n, or null for back where it came from>"} or null -- only while you are holding a section,
  "start_over": {"would": "<at most 25 words: how you would build THIS SAME idea again from nothing, knowing what you know now>",
                 "first_piece": "<one part number from the first-piece list>", "first_colour": "<a colour>",
                 "better_by": <0-10: how much better the do-over would be than pressing on>, "do_it": <true to start over now>,
                 "why": "<at most 15 words>"},
  "abandon": <true to leave this build unfinished and start your daydream now>,
  "abandon_why": "<if abandoning, at most 20 words>",
  "done": <true ONLY if you are asked whether it is done and you really think it is finished; otherwise false>,
  "done_why": "<if done, at most 20 words: why it is finished>",
  "grab": ["<up to 3: a part number from your bin, or a description to dig out>"],
  "drop": ["<part numbers from your handful to put back in the bin>"],
  "play_piece": "<the part number, FROM YOUR HANDFUL (after grabbing), of the piece you want to add next>",
  "piece_colour": "<the colour for the piece you add: one of aú	  >",
  "go_back": {"to_turn": <n>} or null -- only if your feelings say it went wrong; takes off your pieces added after turn n,
  "add_baseplate": <true to slide a 16x16 green baseplate under the whole build (once), else false>,
  "reorient": "<tip_forward | tip_back | roll_left | roll_right | spin_left | spin_right -- turn the whole creation a quarter turn, as seen in the main view -- or null>",
  "bend": {"piece": "<#n of a hinge piece from the list>", "to": <the angle you want it AT, -180 to 180: any angle you like; 0 is how it was built, the list says where it is now>} or null,
  "count_check": [<COUNT, don't just tick: for each feature that defines what it is, how many the real thing has and how many your
                  picture shows RIGHT NOW -- {"feature": "torch", "should": 1, "has": 2}. Lady Liberty has ONE torch; a new torch
                  also 'has a torch'. Two eyes, four legs, one tail. If has != should, fix it (take one off, move it) before anything new.>],
  "plan": {"scale": "<the whole thing's size in studs: wide x deep x tall (in bricks)>",
            "symmetry": "<what mirrors what, and about which line -- or none, and why>",
            "depth": "<front to back: what is in front, what behind, how thick>",
            "steps": [{"part": "<a part of the thing: base, leg, body, head, tail...>", "pieces": "<which Lego pieces make it>",
                        "size": "<its size in studs/bricks, and relative to the other parts>",
                        "at": "<where it goes relative to the other parts>", "joins": "<how it connects: on studs, under, sideways, pin, hinge>",
                        "done": <true once built>}, "...in build order..."],
            "now": "<the step you are working on this turn>"},
  "aim": {"piece": "<#n of the piece you want to build on, or 'ground' to put a piece on the baseplate beside the build>", "side": "<top | bottom | left | right | front | back, as seen in the main view>",
          "end": "<left | middle | right, along that piece as seen in the main view>"},
  "want_piece": "<one of: small, long, plate, brick, beam, angle, wheels, tyre, slope, round, wing, tile, arch, any>",
  "want_on": "<the colour of the piece it should join, from the colours listed above, or 'any'>",
  "taste": "<at most 15 words, fits 'I love ...': what you are into right now in this build>"}
Don't switch just because something new occurs to you: switch only if you actually like it more. Changing your mind and
sticking with an idea are both fine.
Keep it short. Answer quickly.r¤   r¥   r¦   r§   r¨   rY   r‡  rˆ  r‰  r©   zstream-jsonz--include-partial-messagesz	--verboserª   )r‰   rŠ   r€   r�   r®   r£   zI still love ri  zmaybe r   Úlivern  Úasking_turnrÊ  rs  c                 ó¾  >• Su  pU R                    GH5  n[        R                  " U5      nUR	                  S5      =(       d    0 nUR	                  S5      S:X  aÍ  UR	                  S5      =(       d    0 R	                  S5      S:X  a   XS   S   -  n[
        R
                  " 5       U-
  S:”  aw  [        R                  " S	U5      nU(       aV  US
   S   US
   S   R                  SS5      S.TR                  S'   TR                  5         [
        R
                  " 5       nGM  GM  GM  UR	                  S5      S:X  d  GM.  UTl        GM8     g ! [         a     GMI  f = f)N)rL   r   Úeventr˜  Úcontent_block_deltaÚdeltaÚ
text_deltar®   r’  z "(\w+)"\s*:\s*"((?:[^"\\]|\\.)*)r}   r   rÓ   z\"r{  )r!  re  rö  r±   )r€   rY   rn   r_   r^   r7  r½   rd  r?  rQ  rb  Ú_result)Úprocr®   rš  Úlinerw   Úevrø   rÎ  s          €rS   ÚreaderÚImagine.look.<locals>.readerø  s  ø€ Ø ‰JˆDØŸ��ÜŸš DÓ)�Qà—U‘U˜7“^×) r�Ø—6‘6˜&“>Ð%:Ó:ÀÇÁÀwÃ×@UÐSU×?ZÑ?ZÐ[aÓ?bÐfrÓ?rØ˜w™K¨Ñ/Ñ/�DÜ—y’y“{ TÑ)¨DÓ0ÜŸJšJÐ'JÈDÓQ˜Þ°a¸±e¸A±hÀQÀrÁUÈ1ÁX×EUÑEUÐV[Ð]`ÓEaÑ0b˜aŸg™g f™oÐde×djÑdjÔdlÔuy×u~Òu~ó  vAÓnrš1ò 1ð —U‘U˜6“] hÖ.¸A°·	ò $øä!Ó+£8Ð+ús   –EÅ
EÅE©r
  ru  )DrŒ  r™   rR  rÏ  r�  r]   rÄ   r  r3  rf   rª  rY   rZ   rM   rm   rP   r_   rÃ  ÚMASTER_TIPSrØ  r•   rQ  r^   rW  r˜   rÉ  r°  r‰  rÃ   rc  rr   rE  r9  r  ru  rv  Ú
WISH_EVERYrg   r  r´  r²  ÚGESTURE_CRAFTÚupperrÆ  r{  rT   rÇ  r|  Ú_cmdr¹   r�   r‘   rº   r[   r“   r»   ÚPIPEÚ_procr¼   rý  rb  Ú
__import__ry  rs  rq   rÒ  rÊ  Ú_reader)2rÎ  rd  rz   r·  Úqsrª  rÃ  r”  ÚtipsÚfstoryÚtptr×  Úhdrõ  Ústeadyrž   ÚfbackÚmytokr‰  r€  r¸  rš  Úfeel_beforer  ÚhotlistÚplan_beforeÚdueÚ	wish_noteÚdream_beforeÚfriendÚhistÚreqr  ÚgsrÅ  Úrestart_noteÚfcÚ
first_optsÚsurpriserÈ   Úcmdro  rp  rh  Ú_vtÚ_thr  rÙ  rg  rß  s2   `                                              @@@rS   ÚlookÚImagine.lookì  sÍ  û€ Ü�a˜ TÓ*×O°·±°°w¸q¿v¹vÀc¸lÈ$Ð.OˆÐ^bÐQRÔQ[Ø�g‰g�c‹lˆØ�Y‰Yñ ,à !§
¢
ó,ó ,÷ Tà/Sð 	ð —‘“
ˆØ�Y‰YÑJ´9¸Q¿[¹[Ô3IÓJÓJˆØ—	‘	˜!Ÿ'™' " #˜,Ó'×5¨:ˆÜ—Y’Yœt¤t fÐ,<Ð$=Ó>Ó?ˆUà�y‰yõ XØPQ×PVÒPVóXó Xˆä�Q˜¨°! }Ó5ˆ¼k°tØ"#§/¡/Ó"3ÑˆV˜%à×(˜=ˆÜ/6°q¸&À$×/GÑ/Gˆa�g‰g�m˜× Ñ  Ô+ÈTˆö <>ð =¸RÀ¹[¸Mð J6ñ 7àCEð 	ð —k‘k“m JÑ/ˆVö z}ö  BGð 9¸¸Q¹¸ÐTWÐXY×TZÀ$ÈÈQÉÂ-Ð`bÐ@cð d,Ø,/°©F°Q©J¨<Ð7rñtð NPð 	à�x‘L�> ¨r°(©|¸qÓ/@©ÀbÐ'IÐIfÔgrÐfsð tJð Kˆð	.Ø—(‘(“*ˆC t§y¡yõ 1Xð MN÷  MUñ  MUô  MWó1Xó (X÷ (fð \fð %ò	qð �y‰yô KØmn×mqÑmq×muÑmuÐv~ð  ACó  nDð  EHð  EIñ  nJóKó K÷ kð Okð 	à�d‰d�h‰h�} bÓ)ˆØ!"§§ˆq�z‰z˜"Š~°ˆØ:>¿(¹(À:×:NÑ:N”d—j’j §¡¨*Ó!5Ô6ÐTzˆÜ“—‘  rÓ*ˆŒÐ}~÷  ~Cò  ~Có  >Dò  ~CÐxy¼dÀ1Ì4Ï7É7Ï=É=×K\ÑK\Ð]^Ð_eÑ]fÐhiÐjpÑhqÓKrÔ>sñ  ~Cñ  >D¨A¯G©G°E©NØ—)‘)ñ  lð  fg÷  fkò  fkó  ló  l÷  @ð  p@ˆÜHOÐPQÐSYÐ[_×H`ÑH`”d—j’j¤¨¨F°DÓ!9À!ÒDÐf~ˆØ45·F±F¼Z×4GŒj˜AŸF™F¤ZÑ/Ò0ÈQˆØJNÏ(É(ÐS_×J`ÑJ`Ð)¨$¯(©(°<Ó*@Ñ)CÀ2ÑFð  gNØFIÈQÃhÐST×SYÑSYÐ\]ÓS]ÑBÐevÐwz÷  xIô  Ið  wJð  JSð  dTñUˆ	à;?¿8¹8ÀJ×;OÑ;O”t—z’z $§(¡(¨:Ó"6Ô7ÐU_ˆØ—$‘$—(‘(˜9Ó%×+¨×0Ñ0°·±¸2Ó>ˆÞdj�—	‘	Ñ_ÐSYÐZ\ÐZ]ÑS^Ó_Ô_ð  qSˆô SZð  [\ð  ^gð  im÷  Snñ  Snð œw q¨(°DÓ9×F¸YÐGÐG]Ð^_×^gÑ^gÐ]hð iYØYZ×YbÑYbÐXcð dð @A÷  @Iñ  @Ið  Jð  JMñNð tvð 	ô �1�l E×*Ñ*ØŸYšYÓ8šY˜¨!¯%©%°¯-—!™YˆBÐ8Ø4°Q·X±X°J¸dÀ1Ç8Á8À*ð MmØmn×muÑmuÐlvð w>ð?ö
 jl�d—i‘iñ   fð  ^`ð  acð  adñ  ^eó   fô  fð  r|ñ}ð OñOðØŸX™X˜Jð '_ô
 `gÐghÐjzÐ|~Ó_÷  `Nð  DNð  _Oð  ORÜ#�_ Bð(ñ(ˆCô. ˜!˜V U×+Ñ+´¸¸<È×0LÑ0Lð 3°1·8±8·>±>Ó3CÐ2DÐD}Ð~÷  Gñ  Gð  ~Hð HØ˜&  A§L¡L >ð 2|ð}ð SW×RZÑRZÐ[e×RfÑRfð <¸D¿I¹Iñ  Fhð  HL÷  HPñ  HPð  Q[ó  H\÷  Hbð  `bð  dfð  efñ  Ggó  Fhó  =hð  <ið iNñ OØlnñ	pð
qòrð SUð 	ô # 1 f¨e×4Ñ4ñ VØ:<ð 	ä�Q˜¨Ó-×3°ˆØ�6‰6�)×ÑØDÀRÇVÁVÈFÃ^ÐDTÐTzÐ{}÷  |Bñ  |Bð  CJó  |Kð  {Lð LHð IØLOñP‰Cà�V‰V�F�^‰^ØHÈÏÉÐPVËÐHXÐX[Ð\Ð_bÑbˆCØ—Y‘YÑWÍÓWÓWˆ
ä_fÐghÐj}ð  @E÷  `Fñ  `Fñ[ð LNð 	÷b"ó b"��ð b"ð ð b"ô ƒ€	ð	b"ð
ð	b"ð €ðb"ð2ðb"ð 36°ðb"ð7ðb"ð" €ð#b"ð"ð#b"ð$  %˜gð%b"ð$&1ð%b"ô, 26°ð-b"ð,7ð-b"ð. €ð/b"ð.ð/b"ð2 €ð3b"ð2ð3b"ð6 "˜(ð7b"ð6 $) 'ð7b"ð6*ð7b"ð> ˆWð?b"ð>ð?b"ðB ˆxðCb"ðBðCb"ðJ 	€	ðKb"ðJ
ðKb"ôT �,ðUb"ðTnðUb"ðV oxÐmxðWb"ðVyðWb"ðr "˜ðsb"ðr#ðsb"ðx €ðyb"ðx	ðyb"ð~ €ðb"ð~ðb"ðB €ðCb"ðB €VðCb"ðB ˆ:ðCb"ðB .ðCb"ðB /:¨]ðCb"ðB;$ðCb"ðD %1 >ðEb"ðD2/ðEb"ðP 0:¨lðQb"ðP;KðQb"ð\ LXÈ.ð]b"ð\Yð]b"ðd €ðeb"ðdðeb"ðj €ðkb"ðj3ðkb"ðJ 48·9±9¼T³?Ð2CðKb"ðJ&D>ðKb"ðV ?C¿i¹iÌ»oÐ=NðWb"ðVOôWb"ˆðF ˜D )¨VÐ5FÈÐP`ÐbhÐjuÐwx×w|Ñw|ð  Cð  EFð  GˆŒð ˜˜y¨&Ð2CÀ]ÐTpÐr}Ø ¨°a·e±e¸TÀ1ðFˆä¤
× 0Ñ 0°#¼4ÐEmÌÏ
É
ÐEmÐTgÔilÑEmô  wA÷  wFñ  wFô  OY÷  O^ñ  O^ð  eiñ  jˆŒØ"#§*§*�—
‘
˜2’°"ˆØ6;·i±iÀ×6HÑ6H�M %¨¡.Ð!1Ñ2ÈbÐRW×R[ÑR[Ð\rÓRs×RyÐwyÜ;EÀeÇiÁiÐPZÓF[Ô]a×;bÑ;bÐglÐmwÑgx×g|Ñg|ð  ~D÷  hEñ  hE�F˜5 Ñ,¨VÑ4Ð5°QÑ7ð  KMðNˆàˆŒ	¨D˜!Ÿ'™' &™/Àb°!·'±'¸(Ñ2CÐcd×ciÑciÈ!Ï'É'ÐR_ÑJ`Ðkl×kqÑkqÔksÜ˜Ó%×,Ñ,°A·F±FÀ%ÌÈaÏkÉkÓIZÑhnÓ\tÒhnÐcdÔrs×]^ÑhnÑ\tÐvw×v|Ñv|ÐA}ð  GKÐ,ð  Lˆð  NQ÷  NWñ  NWô  NYÛØŸ™÷ 	>ð —J‘J f°T�JÐ:ˆŒ	¸A¿I¹I¿O¹OÕ<Møô] œÐ$Ó0¨b£eÐ0ûô
 Ó>¨Ñ,˜&£uÐ>ûô ÓW¨ ¬UÐ3FÈÐRV×-WÐ-WûÐWûô Ó- :›&Ð-üò >Dùò 9ùòb ]usn   Ã&k Ä<k  Æ$k6 ÈAl Ì:Al.Öl3Ö+l3é	l8él8ëkëkë k3ë2k3ë6
lì lìlìl+ì*l+c           
      ó  • [        U SS5      (       a%  U R                  R                  5         [        S5      eU R                  R                  SS9  U R                  R                  SS9  U R                  R                  (       a$  U R                  R                  R                  5       OSnU R                  (       a   [        R                  " U R                  5      OSnS U R                  S'   [        S	5       GHN  nU(       aV  [        R                  " U R                   ["        0 [$        R&                  ES
[(        0ESSSS9nUR*                  UR                  p [        R,                  " U5      n[/        U[0        5      (       a  US   OUn[        R,                  " [2        R4                  " SUS   [2        R6                  5      R9                  S5      5      opR:                  US'   UR=                  S5      US'   UR=                  SS5      (       + =(       a    UR=                  SS5      S;  US'   UR=                  SS5      US'   Us  $    [        W	5      e! [>         a  nU SU=(       d    USS   3n	 S nAGM‚  S nAff = f)Nrh  FÚstoppedr«   r–  r¨  rL   rö  rÒ   rª   Tr¬   r}   r°   r±   r   rR  Útotal_cost_usdÚcostrœ   Úcurrent_idearÕ  )rÕ  rL   Nrv  rw  rÒ  rq  iÔþÿÿ) rŒ  r
  ÚkillÚRuntimeErrorr  r]   Úwaitr�   rO   rý  rY   rc  rQ  r„  r�   rv   r  rº   r[   r“   r»   r€   rn   r¼   rq   r½   r¾   r¿   rÀ   rR  r^   r•   )
rÎ  Úerrtr™   ÚattemptrÉ   rw   rÊ   rÆ   rž   Úerrs
             rS   Úlook_resultÚImagine.look_result  s  € Ü�1�f˜e×$Ñ$ a§g¡g§l¡l¤n¼LÈÓ<SÐ6SØ	�	‰	�‰˜sˆÑ# Q§W¡W§\¡\¸" \Ñ%=Ð_`×_fÑ_f×_m×_mÀaÇgÁgÇnÁn×FYÑFYÔF[Ðsu¸tØ'(§y§yŒd�jŠj˜Ÿ™Ô#°bˆØˆ�‰�‰Ü˜Q—xˆGÞÜ—N’N 1§6¡6¬tÐ9a¼B¿J¹JÐ9aÐH[Ô]`Ñ9aÐrvð  ~Bð  LOñ  P�ØŸH™H a§h¡h�TðJÜ—J’J˜s“O�´*¸QÄ×2EÑ2E¨¨2ªÈ1 QÜ—J’JœrŸyšy¨°A°h±KÄÇÁÓF×LÑLÈQÓOÓP�×^dÑ^dÐRSÐTZÑR[Ðrs×rwÑrwð  yIó  sJÐfgÐhnÑfoØ"#§%¡%¨°Ó"5Ô5×z¸1¿5¹5ÀÐQ[Ó;\ÐdzÑ;z��'‘
ð  NO÷  NSñ  NSð  T[ð  ]_ó  N`Ð|}ð  Jñ  }KØ’ñ  ô ˜3ÓÐøô ÓI¨R¨D°°C·K¸4ÀÀÐ3GÐ2HÐ*I§CûÐIús   ÅC,IÉ
I?É I:É:I?c           
      óš  • [        U=(       d    0 R                  SS5      5      R                  5       S;   Gae  U R                  5       n[        R
                  " U Vs/ s H  o3R                  R                  PM     sn5      oDR                  S5      UR                  S5      -   S-  oTSS2S4   R                  5       n[        UR                  SS5      5      R                  5       n[        * [        [        [        * S	.R                  U[        5      n[        [        R                  " USS2SS24   USS -
  [        R                  " USS 5      -  5      R                  5       5      S
-   n	[        R                  " US   US   U	-  -   US   US   U	-  -   U/5      $ U R!                  U=(       d    0 R                  S5      5      n
U
c  gU
R                  R                  oJR                  R"                  u  p¼X¼-   S-  oT[        -  oÔ[        -  n[        UR                  SS5      5      R                  5       [        UR                  SS5      5      R                  5       p÷UR%                  5       nUS:X  a,  U[        R&                  " U5         SS S-  USS S-  -   USS& O1US:X  a+  U[        R(                  " U5         SS S-  USS S-  -   USS& US:X  a  US   S-   US'   U$ US:X  a  US   S-
  US'   U$ US:X  a.  U[        R&                  " U5         SS [        SS S-  -
  USS& U$ US:X  a.  U[        R(                  " U5         SS [        SS S-  -   USS& U$ US:X  a.  U[        R(                  " U5         SS [        SS S-  -   USS& U$ US:X  a,  U[        R&                  " U5         SS [        SS S-  -
  USS& U$ s  snf )zZits words ('#3, top, left end') -> a point in our frame, the way a mouse would hover therery  rL   r  r   rÒ   Nr	  Úfront)rû  rü  r6  r›  rØ   rÓ   rÿ  r„  rý  rû  rÕ   r(  rü  r   rÔ   r›  )ru   r^   r}  r°  rÜ   rß   r  râ   rã   r  ró   rô   rë   rõ   rò   rì   ry  r
  r2  rÁ  r'  )rÎ  Úaimrö  r@  rû   rØ  rü   r	  rw   ÚreachrÉ   r  r  r  rÿ   r„  rÈ   s                    rS   r…  ÚImagine.aim_point  s®  € ä�—	�r�‰˜w¨Ó+Ó,×2Ñ2Ó4Ð8XÔXØ—‘“ˆB¤§¢ÁRÓ+HÂRÀ¯F©F¯O¬OÁRÑ+HÓ!I˜Q×PUÑPUÐVWÓPXÐ[\×[`Ñ[`ÐabÓ[cÑPcÐghÑOhÈ1ÒqrÐtuÐquÑov×ozÑozÓo|ÐjlÜ�s—w‘w˜v wÓ/Ó0×6Ñ6Ó8ˆDÌÀvÔX]ÔhnÔyÐxñ  ?A÷  ?Eñ  ?Eð  FJô  LRó  ?S¸!Üœ"Ÿ&š& !¢A r¨ r E¡(¨Q¨r°¨UÑ"2´b·j²jÀÀ2ÀAÀÓ6GÑ!GÓH×LÑLÓNÓOÐRSÑSˆEÜ—8’8˜Q˜q™T A a¡D¨5¡LÑ0°!°A±$¸¸1¹À¹Ñ2EÀrÐJÓKÐKØ�G‰G�S—Y˜B—O‘O GÓ,Ó-ˆØ‰9˜TØ�F‰F�O‰Oˆ§f¡f§m¡m™V˜R¸"¹'ÀQ¹°QÔQVÉYÈÔagÑ]gÐXZÜ˜Ÿ™ ¨Ó.Ó/×5Ñ5Ó7¼¸S¿W¹WÀUÈHÓ=UÓ9V×9\Ñ9\Ó9^ˆcØ�F‰F‹HˆØ�&‹= !¤B§I¢I¨b£MÑ"2°2°AÐ"6¸Ñ"<¸qÀÀ!¸uÀs¹{Ñ"J˜!˜B˜Q™%Ø�G‹^ Q¤r§y¢y°£}Ñ%5°b°qÐ%9¸CÑ%?À!ÀBÀQÀ%È#Á+Ñ%M˜Q˜r ˜UØ�5‹=  A¡¨¡˜!˜A™$ð ˆð �XÓ b¨¡e¨a¡i˜q ™tð
 ˆð	 �V‹^ Q¤r§y¢y°£}Ñ%5°b°qÐ%9¼EÀ"À1¸IÈ¹MÑ%I˜Q˜r ˜Uð ˆð �W‹_ a¬¯	ª	°"«Ñ&6°r¸Ð&:¼UÀ2ÀA¸YÈ¹]Ñ&J˜a  ˜eð ˆð �W‹_ a¬¯	ª	°"«Ñ&6°r¸Ð&:¼VÀBÀQ¸ZÈ!¹^Ñ&K˜a  ˜eàˆð �V‹^ Q¤r§y¢y°£}Ñ%5°b°qÐ%9¼FÀ2ÀA¸JÈ¹NÑ%J˜Q˜r ˜UØˆùò# ,Is   ÁOc                 ó:  ^ ^ ^!• T R                  UR                  S5      5      m T c  / $ [        UR                  S5      =(       d    0 R                  SS5      5      R                  5       S;   n[        UR                  SS5      5      n[	        [        T S/ 5      =(       d    / 5      nXE;   a  U/OeU Vs/ s HO  of[        R                  [        UR                  SS5      5      R                  5       5      =(       d    / ;   d  MM  UPMQ     sn=(       d    Un/ [        5       p˜[        UR                  S5      =(       d    0 R                  S	S5      5      R                  5       n
T R                  UR                  S5      =(       d    0 R                  S5      5      m!T!Gbý  U
S
;   Gaö  U
S:X  a  SOSn[        T R                  5        Vs/ s H  ofS   U;   d  M  US   T!L d  M  UPM     snU U 4S jS9nUSS  GH   nUSS  GH’  nT R                     [        S5       GHi  nS GH^  nT R                  XmXï5      nU(       d  M  Uu  nnU[        [        R                   " UR"                  SS2S4   S5      5      4nT R%                  UT!U
T 5      nT R&                  R(                  R*                  US  Vs/ s H1  n[        USS5      (       d  M  UR"                  R-                  5       PM3     nnUR"                  R-                  5       nT R&                  R/                  UU5        UU	;   d  U(       d  GM  U	R1                  U5        UR3                  XmXïUS   UUSS.5        [5        U5      U:¼  d  GMN  Us  s  sSSS5        s  s  $    GMl     SSS5        GM•     GM£     / nUSS  GHî  nT R7                  UT SUS9n[9        U[:        5      (       a  UR                  S5      OU GH«  nU[        [        R                   " [        R<                  " US   5      SS2S4   S5      5      4nUU	;   a  ML  U	R1                  U5        T R                     T R?                  US   5      nT R                  XmUS   US   5      nU(       d   SSS5        M©  Uu  nnU=(       d    T R%                  UT!U
T 5      nT R&                  R(                  R*                  US  Vs/ s H1  n[        USS5      (       d  M  UR"                  R-                  5       PM3     nnUR"                  R-                  5       nT R&                  R/                  UU5        SSS5        WUUS   US   US   WWWS.nU(       a  UOUR3                  U5        [5        U5      U:¼  d  GM¨  Us  s  $    GMñ     U(       Gd%  T!Gb!  U
(       Ga  T!T RA                  5       ;   a%  S T RA                  5       RC                  T!5      S-    3OS!nSnU
S":X  Ga£  T!RD                  (       Ga‘  [G        U!4S# jT R                  5        5       5      (       Gdh  [        T RA                  5        Vs1 s GH$  nUT!Ld  M  URH                  RJ                  S   S$   T!RH                  RJ                  S   S$   S%-   ::  d  MJ  URH                  RJ                  S   SS$ T!RH                  RJ                  S   SS$ :„  RG                  5       (       a  M˜  T!RH                  RJ                  S   SS$ URH                  RJ                  S   SS$ :„  RG                  5       (       a  Mæ  [L        RN                  RP                  R                  URR                  URR                  5      iGM'     sn5      nS&S'RU                  U5      =(       d    S( S)3nT RV                  R3                  S*T RX                   S+U
 S,U S-U S.3	5        UUS[[        SU[5        U5      -
  5       -   $ s  snf s  snf s  snf ! , (       d  f       GM   = fs  snf ! , (       d  f       GNÎ= fs  snf )/zöIvy, Oct 23 2026: "could it ask for the area it wants to add to with natural language and we basically mouse around over
there and give it the narrowed down moves. That way it can be smarter about placement and less random, but with assistance." r7  Nry  rL   r  r‘  rÃ  Ú
want_piecer	  )rÿ  r   rÿ  )r×  rÙ  r   rÓ   c                 óf   >• [         R                  R                  TR                  U 5      T-
  5      $ r  r  )rØ  rÈ   rÎ  s    €€rS   r#  Ú(Imagine.aim_candidates.<locals>.<lambda>9  s6   ø€ Ôac×ajÑaj×aoÑaoÐpq×p|Ñp|Ð}~Ópð  CDñ  qDô  bErR   r%  rH   r  rÔ   rû  rŸ  FTr   r‚  r/  ræ  rÿ  r   r  rþ  z
that piecer   c              3   óN   >#   • U  H  oS    TL =(       a    US   S;   v •  M     g7f)rÓ   r   rÙ  NrQ   r  s     €rS   r"  Ú)Imagine.aim_candidates.<locals>.<genexpr>\  s,   øé € Ð;zÒpyÐkl¸a¹DÀC¸K×<fÈAÈaÉDÐTfÑLfÔ<fÒpyùs   ƒ"%rÒ   ç       @z+ Its underside is already clicked onto the r  zpiece below itzY; to build under it, lift it off first (break_off) and set it back down on the new piece.r€  z&: NOTHING you are holding fits on the z of rc  zm The options shown are NOT where you aimed -- pick one only if you like it anyway, or ask for something else.).r…  r^   ru   r}  rq   rŒ  r&  r¹  ry  rŽ   r0  rJ   r„  r	  rä   rÜ   r9   ræ  Úside_okr  r¶  r·  r2  r¯  rµ   r¸   rU  r/  r¼   r9  rì   rõ  r°  rî  râ  r1  r  r
  r  ru  rv  r±  r]   rª  rR  r  )"rÎ  rÆ   r  Ú	on_groundÚpprÃ  rØ  Úcardsr™   rÅ   r	  Úkindsrð  r  r   r  rÊ   r  rA  r  rB  rÉ   r®  ræ  ÚmissesrÝ  r  rø   Útnr¢  r@  r6  rÈ   r  s"   `                               @@rS   Úaim_candidatesÚImagine.aim_candidates*  sµ  ú€ ð �K‰K˜Ÿ™˜e›Ó%ˆØ‰9˜R�iÜ˜Ÿ™˜u›×+¨×0Ñ0°¸"Ó=Ó>×DÑDÓFÐJjÑjˆ	Ü�—‘�| RÓ(Ó)ˆ´$´w¸qÀ&È"Ó7M×7SÐQSÓ2T¨4Ø›
�‘±DÓ(y²D¨qÄ%Ç)Á)ÌCÐPQ×PUÑPUÐVbÐdfÓPgÓLh×LnÑLnÓLpÓBq×BwÐuwÑ<x¯±DÑ(y÷  )Bð  ~BˆØœ›ˆTô �A—E‘E˜%“L×& B×+Ñ+¨F°BÓ7Ó8×>Ñ>Ó@ˆÈÏÉÐQR×QVÑQVÐW\ÓQ]×QcÐac×PhÑPhÐipÓPqÓHrÀ#ØŠ?˜tÐ'8Ô8Ø!%¨£‘IÐ4FˆEÜ a§g¡g¤iÓQ¢i °Q±4¸5±=›1ÀQÀqÁTÈSÀ[Ÿ1¡iÑQõ  XEñ  FˆDØ˜b˜qœ	�Ø˜b˜qœ�AØŸ›Ü#(¨§8˜CÜ(A Ø$%§J¡J¨q¸Ó$B Þ'(©(Ø*+¡  R°D¼%ÄÇÂÈÏÉÈrÐPQÈrÐSTÈuÉÐWXÓ@YÓ:ZÐ3[¨SÐbc×bkÑbkÐloÐqtÐvzÐ|}Ób~Ð]_Ø<=¿C¹C¿G¹G¿M¹MÈ"È#Ñ<NÓ'nÒ<N°qÔRYÐZ[Ð]eÐgl×Rm«
¨¯©¯©®
Ñ<N Ð'nÐtw×tyÑty×t~Ñt~ó  uAÐpqð  CD÷  CFñ  CF÷  CKñ  CKð  LOð  QSô  CTØ#&¨$£;¶bº(Ø $§¡¨¤¨s¯z©zÀ1Ð[^ÐvwÐxyÑvzð  BCð  MQð  \`ñ  ;aô  0bÜ#& s£8¨q¦=¸³*÷  �ä(Añ $,÷  šô "ñ "ð  ˆØ˜"˜1”IˆDØ—(‘(˜4  a¨y�(Ð9ˆCÜ+5°c¼4×+@Ñ+@�c—g‘g˜hÔ'ÀcÓI�ØœU¤2§8¢8¬B¯HªH°Q°s±VÓ,<¸R¸a¸RÀ¸UÑ,CÀQÓ#GÓHÐI�Ø˜$“;¡Ø—‘˜”Ø—V“VØŸ™ q¨¡yÓ1�A°q·z±zÀ!È1ÈUÉ8ÐUVÐW]ÑU^Ó7_°1Þ˜h÷ ‘Vð  ‘G�C˜ i×&O°1·9±9¸SÀ#ÀtÈQÓ3O Ø01·±·±·±¸b¸cÑ0BÓbÒ0B¨1ÄgÈaÐQYÐ[`×Fa›J˜AŸC™CŸH™HžJÑ0B�DÐbÐhk×hmÑhm×hrÑhrÓhtÐdeÐvw×vyÑvy×v~Ñv~ð  @Cð  EGô  wH÷	 ð
 ¨°Q°u±XÀqÈÁyÐZ[Ð\]ÑZ^ÐefÐptð  @Bñ  C�Þ‘ ×.Ñ.¨qÔ1Ü�s“8˜q–=¨¤*ô Jñ ÷ �s’¯4Ø47¸1¿8¹8»:Ó4E�1�Q—X‘X“Z×%Ñ% cÓ*¨QÑ.Ð/Ñ0È<ˆBØˆCØ�xÔ C§K§K K¼Ô;zÐpq×pwÑpwÔpyÓ;z×8zÒ8zÜÈ1Ï8É8Ì:ó  ZË:ÀaÐYZÐbeÐYeÓ AÐjk×jpÑjp×jwÑjwÐxyÑjzÐ{|Ñj}ð  BE÷  BJñ  BJ÷  BQñ  BQð  RSñ  BTð  UVñ  BWð  Z]ñ  B]ñ  k]Ó AØ*+¯&©&¯-©-¸Ñ*:¸2¸AÐ*>ÀÇÁÇÁÐQRÑASÐTVÐUVÐAWÑ*W×)\Ñ)\×)^ó !BØcf×ckÑck×crÑcrÐstÑcuÐvxÐwxÐcyÐ|}÷  }Cñ  }C÷  }Jñ  }Jð  KLñ  }Mð  NPð  OPð  }Qñ  dQ÷  cVñ  cV÷  cXó !B¤§¡§¡× 1Ñ 1°!·&±&¸!¿&¹&× AÉ:ñ  Zó [�àCÀDÇIÁIÈeÓDT×DhÐXhÐCið  jCð  D�Ø�G‰G�N‰N˜U 1§6¡6 (Ð*PÐQUÐPVÐVZÐ[]ÐZ^Ð^_Ð`cÐ_dð e]ð ^ô _à�VÐ1œS  A¬¨C«¡LÓ1Ð2Ñ2Ð2ùòc )zùò Rùò (o÷  Ÿüò2 c÷	 –Vüò Zs�   Â3A_Ä_Ç_$Ç_$Ç_$ÈB"_.Ê0_)Ë
_)Ë(B_.Í._.Î_.Ñ6`ÒA`Ó`
Ó)`
Ô8`Ø>
`Ù;`ÚA
`ÛA
`Ü'A`ß)_.ß.
_>à`à
`c                 ó  • [        U=(       d    S5      R                  5       n[        R                  " S[        U R                  =(       d    S5      R                  5       5       H$  n[        U5      S:¼  d  M  X2;   d  USS U;   d  M$    g   g)zhwould this line give the pictionary secret away? any of its words (3+ letters), or their first 4 lettersrL   rc  rH   NrÔ   TF)ru   r}  r½   rd  r²  rU  )rÎ  r®   rÃ  rj   s       rS   ÚleaksÚImagine.leaksc  sd   € ä�$—*˜"‹o×#Ñ#Ó%ˆÜ—’˜I¤s¨1¯8©8¯>°rÓ':×'@Ñ'@Ó'BÖCˆAÜ�1‹v˜�{ £¨A¨b¨q¨E°S­LÁ$ñ DàrR   c           
      óØ  • / n[        U S/ 5       H‚  u  p#X R                  5       ;  a  M  UR                  R                  u  pEUR	                  U[        US   US   -   S-  5      [        US   US   -   S-  5      [        US   5      S-   /S.5        M„     XR                  S'   U(       a1  U R                   S[        U5       S[        R                  " 5       S	 3OS
U R                  S'   g
)zzwhere each pinned emoji floats: just above the top centre of its piece, recomputed after a move (a lift shifts everything)Ú
_pin_hintsr   rÒ   rÓ   g      @)ÚemojirÉ   Úpiece_hintsÚ-r9  NÚ
gesture_id)
rŒ  r°  r  r
  r¸   rë   rQ  rR  rU  r7  )rÎ  r­  r@  Úemr  r  s         rS   Úplace_hintsÚImagine.place_hintsi  s  € àˆÜ˜Q ¨bÖ1‰EˆAØŸ™›
Ó"¡HØ—V‘V—]‘]‰FˆB B§I¡I¸Ä%ÈÈAÉÐQSÐTUÑQVÉÐZ[ÑH[ÓB\Ô^cÐegÐhiÑejÐmoÐpqÑmrÑerÐvwÑdwÓ^xÔzð  ACð  DEñ  AFó  {Gð  JMñ  {Mð  BNñ  /Oö  %Pñ 2ð "$�‰�ÑÖhjÀÇÁ¸xÀqÌÈRËÈ	ÐQRÔSW×S\ÒS\ÓS^Ð_bÐRcÑ=dÐpt Q§W¡W¨\Ò%:rR   c                 ó"  ^ ^• SSK m/ S[        U=(       d    S5      pCnU[        U5      :  GaÏ  XC   nTR                  U5      n[	        U5      nXCS-   US-    nUS;   a6  SU;   a0  US-   UR                  S5      -   S-   o’R                  XCU	 5        U	nMv  US:X  d?  S	Us=::  a  S
::  d2  O  SUs=::  a  S::  d#  O  SUs=::  a  S::  d  O  SUs=::  a  S::  Ga  O  GOUS-   n	U	[        U5      :  aÆ  [	        XI   5      S;   dE  S[	        XI   5      s=::  a  S::  d-  O  [	        XIS-
     5      S:X  a‡  TR                  XI   5      S:X  ap  U	S-  n	U	[        U5      :  a\  [	        XI   5      S;   a  M'  S[	        XI   5      s=::  a  S::  a  MA  O  [	        XIS-
     5      S:X  a  TR                  XI   5      S:X  a  Mp  XCU	 n
[        U U4S jU
 5       5      (       d  UR                  U
5        U	nOUS-  nU[        U5      :  a  GMÏ  SR                  USS 5      $ )zóemoji only (Ivy, Oct 23 2026: "It should only be allowed to send emojis as hints"): letters, digits and punctuation are
stripped, and an emoji whose Unicode name gives the secret away (GIRAFFE FACE for giraffe, SUNFLOWER for flower) is droppedr   NrL   rÓ   rH   z0123456789#*u   âƒ£ÚSoi ð iÿú i &  i¿'  i +  iÿ+  i�!  iÿ!  )é   iþ  iã   iûó iÿó rX  c              3   ó”   >#   • U  H=  nTR                  U5      S :X  d  M  TR                  TR                  US5      5      v •  M?     g7f)rW  rL   N)ÚcategoryrK  r±  )r   ÚchrÎ  Úunicodedatas     €€rS   r"  Ú%Imagine.emoji_hint.<locals>.<genexpr>€  sA   øé € ÐmÂqÀÈK×L`ÑL`ÐacÓLdÐhlÑLlÓ<˜1Ÿ7™7 ;×#3Ñ#3°B¸Ó#;×<Ð<Âqùs
   ƒA (Ar  )	r\  ru   rU  rZ  Úordrî  r¸   r1  r]   )rÎ  r®   r™   r‰  ÚtxtrØ  Úcatr¥  Únxtrž  r  r\  s   `          @rS   Ú
emoji_hintÚImagine.emoji_hintp  s  ù€ ó 	Ø˜!œS §¨›_�ˆØ”#�c“(ŒlØ‘ˆA˜k×2Ñ2°1Ó5˜¼3¸q»6°qØ˜!‘e˜A ™EÐ"ˆCØ�NÓ" x°3£Ø˜‘E˜CŸI™I hÓ/Ñ/°!Ñ3�·Z±ZÀÀaÀÔ5IÈqÈ1ÑRZØ�d‹{˜g¨Õ5¨gÕ5¸À1Õ9NÈÕ9NÐRXÐ\]ÕRgÐagÕRgÐkqÐuvõ  lAð  {A÷  lAð  lAØ˜‘E�Øœ#˜c›(“l¬¨C©F«Ð7OÓ(OÐSZÔ^aÐbeÑbhÓ^iÕStÐmtÕStÜ,/°¸±E±
«O¸vÓ,EÈ+×J^ÑJ^Ð_bÑ_eÓJfÐjnÓJnØ˜‘F�Að œ#˜c›(“l¬¨C©F«Ð7OÕ(OÐSZÔ^aÐbeÑbhÓ^iÕStÐmt×StÜ,/°¸±E±
«O¸vÓ,EÈ+×J^ÑJ^Ð_bÑ_eÓJfÐjnÕJnà˜!�H�ÜÕmÁqÓm×mÑmÐor×oyÑoyÐz{Ôo|Ø‘Ø�q‘&�!ð ”#�c“(Žlð �w‰w�s˜2˜A�wÓÐrR   c                 ó®   • [        UR                  S5      =(       d    0 R                  SS5      5      R                  5       (       a  U H  nSUS'   M
     U$ )zspropose_aimed finds the right KIND of piece anywhere; when it named a piece and a side, those spots are not its aimr7  ry  rL   Fr!  )ru   r^   rÁ   )rÎ  rÆ   Úmsrø   s       rS   ÚunaimedÚImagine.unaimed„  sD   € ä�—‘�e“×" ×'Ñ'¨°Ó4Ó5×;Ñ;×=Ñ=Û� e˜˜7›‘RØˆ	rR   c                 ó8   • [        U R                  XX45      5      $ )zãis a placed piece really on the side of the target it was aimed at? top/bottom: above its top / below its bottom (a stud's
height of slack) and touching it; a side: its centre moved from the target's centre toward the aim point)rX   Ú_side_ok)rÎ  r  r  r	  rÈ   s        rS   rA  ÚImagine.side_ok‰  s   € ô �A—J‘J˜s¨Ó1Ó2Ð2rR   c                 óÈ  • Ub  U(       d  gUR                   R                  UR                   R                  peUS   US   S-   :„  R                  5       =(       d    US   US   S-   :„  R                  5       (       + nU(       d  gUS:X  a  US   S   US   S   S-
  :¬  $ US	:X  a  US   S   US   S   S-   :*  $ [        R                  " U[
        5      UR                  S5      -
  o…R                  S5      UR                  S5      -
  n	S
=US'   U	S'   [        [        R                  " X‰5      5      S:„  =(       a+    [        [        R                  R                  U	5      5      S:„  $ )NTr   rÓ   r  Frÿ  rÒ   r@  r   r   r*  )
r  r
  r1  rÜ   rò   rë   r  Údotr   r!  )
rÎ  r  r  r	  rÈ   rz   ÚtbÚtouchrw   Úncs
             rS   ri  ÚImagine._side_ok�  s0  € Ø‰;žd¨4Ø—‘—‘ #§(¡(§/¡/ˆBØ˜‘e˜b ™e c™kÑ)×.Ñ.Ó0×O°R¸±U¸RÀ¹UÀS¹[Ñ5H×4MÑ4MÓ4OÔPˆÞ˜UØ�5‹=  A¡ q¡¨R°©U°1©X¸©^Ñ!;Ð;Ø�8Ó B q¡E¨!¡H°°1±°a±¸3±Ñ$>Ð>Ü�JŠJ�qœ%Ó  2§7¡7¨1£:Ñ-ˆ·G±G¸A³JÀÇÁÈÃÑ4K¨rÐ\_ÐM_ÈQÈqÉTÐTVÐWXÑTYÜ”R—V’V˜A“]Ó# aÑ'×K¬E´"·)±)·.±.ÀÓ2DÓ,EÈÑ,KÐKrR   c                 óÈ  ^^• [         R                  5        VVs0 s H  u  pVXe_M	     snnR                  [        UR                  SS5      5      R	                  5       5      n[        U SS5      n[        R                  [        UR                  SS5      5      R	                  5       5      n	U(       aW  [        UR                  SS5      5      n
X¨;   a  U
/O3U Vs/ s H  o¹(       d  M  X¹;   d  M  UPM     sn=(       d    [        U5      n	/ [        5       smmUU4S jn[        U5       GHÜ  n[        T5      U:¼  a    GOËU R                  5        Vs/ s H  oçb  US	   R                  U:X  d  M  UPM     nnU(       d    GOŠXðR                  R                  [        U5      5         oé=(       d    [        R                   nUU R                  R                  [        U5      5         n[#        U R                  R                  S
5      5      n[%        U R                  R'                  [(        R*                  5      5      nU R-                  UUUU5      nU(       d  GM0  Uu  nnU R.                  R0                  R2                  US  Vs/ s H1  n[        USS5      (       d  M  UR4                  R7                  5       PM3     nnU" UUUUUS	   UR4                  R7                  5       USS.5        U R.                  R9                  UU5        GMß     U R;                  U[        T5      -   SS9 H$  n[        T5      X#-   :¼  a    T$ SUS'   U" U5        M&     T$ s  snnf s  snf s  snf s  snf )zjmost candidates from the wish (that kind of piece, on that colour), a few random so accidents still happenÚwant_onr1  rÃ  Nr;  r‘  rL   c           
      ó(  >• U S   [        [        R                  " U S   S S2S4   S5      5      [        [        R                  " U S   S S2S S24   R                  5       S5      5      4nUT;  a#  TR	                  U5        TR                  U 5        g g )Nr±  ræ  rH   r   )rä   rÜ   r9   r  rµ   r¸   )rø   r  r™   rÅ   s     €€rS   rµ   Ú"Imagine.propose_aimed.<locals>.addŸ  s‰   ø€ Ø�V‘9œe¤B§H¢H¨Q¨s©V°B°Q°B¸°E©]¸AÓ$>Ó?ÄÄrÇxÂxÐPQÐRUÑPVÐWYÐXYÐWYÐ[]Ð\]Ð[]ÐW]ÑP^×PdÑPdÓPfÐhiÓGjÓAkÐlˆCØ˜$‹ §¡¨¤¨s¯z©z¸!­}ˆrR   rÓ   rØ   rŸ  FTr   r£  )r!  r´  r!  )rÎ  r'  r^   ru   r}  rŒ  r&  rq   r¹  r„  rU  r0  rz  r=  rÍ  r  rG  ró  rë   rï  r  ÚSPINSr	  r  r¶  r·  ræ  r2  r¯  rÑ  )rÎ  rÆ   r!  Úwildr´  r!  rý   ÚcoderÃ  rô  rC  r  rµ   r   rØ  r0  rµ  r±  r   r  rÊ   r  rA  rÉ   r®  rø   r™   rÅ   s                             @@rS   Úpropose_aimedÚImagine.propose_aimed–  sµ  ù€ ä!&§¡¤Ô/¢™˜�’¡Ò/×3Ñ3´C¸¿¹¸iÈÓ8OÓ4P×4VÑ4VÓ4XÓYˆÜ�q˜& $Ó'ˆÜ—	‘	œ#˜aŸe™e L°%Ó8Ó9×?Ñ?ÓAÓBˆÞÜ�Q—U‘U˜<¨Ó,Ó-ˆBØ›J�R‘D¹Ó-Vº°AÃ«aÈ1É:¯a¹Ñ-V×-dÔZ^Ð_cÓZdˆEØœ›ˆ	ˆˆTö	=ô �u—ˆAÜ�3‹x˜5Ó ¢%Ø !§¡¤	ÓQ¢	˜1©\¸Q¸q¹T¿[¹[ÈDÑ=P—Q¡	ˆEÐQÞš%Ø—e‘e—n‘n¤S¨£ZÓ0Ñ1ˆA×:OÄ4Ç<Á<°4ÐX\Ð]^×]bÑ]b×]kÑ]kÔloÐptÓluÓ]vÑXwÐQUÜ�a—e‘e—n‘n QÓ'Ó(ˆC´°q·u±u·|±|ÄAÇGÁGÓ7LÓ1M¨$ÐST×S]ÑS]Ð^_ÐaeÐgjÐlpÓSqÈqÞ’hØ‰GˆC�°Q·S±S·W±W·]±]À2À3Ñ5GÓ gÒ5G°Ì7ÐSTÐV^Ð`e×Kf£ §¡§¡¦Ñ5G˜Ð gÙ˜ D°¸dÈAÈaÉDÐWZ×W\ÑW\×WaÑWaÓWcÐmqð  }Añ  Bô  CØ�C‰C�H‰H�S˜"×ñ ð —‘˜T¤C¨£H™_°B�Ó7ˆAÜ�3‹x˜5™<Ó'¨àˆ
ð ˆAˆg‰J¡ A¦ñ 8ð ˆ
ùó/ 0ùò
 .Wùò Rùò
 !hs/   šMÃ
MÃ'MÃ.MÅMÅ-MÊMÊMc                 óx  >• [         TU ]  X5      nU R                  5       n[        R                  " U Vs/ s H  oUR
                  R                  S   PM     snS5      n[        R                  " U Vs/ s H  oUR
                  R                  S   PM     snS5      n[        R                  " US   5      o�S   Ul
        UR
                  R                  R                  S5      n	[        R                  " U Vs/ s H  oUR
                  R                  PM     sn5      oª[        -  U
[        -  pËS n[         R#                  US   R$                  US   R$                  5       S[&        R(                  R*                  R#                  US   R,                  US   R,                  5       3[/        [1        U	S   US   -
  [        US   US   -
  S5      -  5      S5      U" X¹[        -  5      U" XÉ[        -  5      [&        R(                  R*                  R#                  US   US   5      S	.US
'   U$ s  snf s  snf s  snf )Nr   rÓ   r±  ræ  c           
      óÒ   • [        [        XR                  5       U R                  5       -   S-  -
  [        U R                  5       U R                  5       -
  S-  S5      -  5      S5      $ )NrÒ   rÔ   )r9   rë   rã   r  )rý   rh  s     rS   ÚspanÚImagine.describe.<locals>.spanµ  sY   € œu¤U¨A·±³¸1¿5¹5»7Ñ1BÀaÑ0GÑ,GÌ3ÐPQ×PUÑPUÓPWÐZ[×Z_ÑZ_ÓZaÑPaÐefÑOfÐhiÓKjÑ+jÓ%kÐmnÓoÐorR   r­  r¤  rÒ   )rÂ  rÁ  rÀ  zNfront or back in the picture (-1 = back, away from you, 1 = front, toward you)ú	new piecer¿  )r¨  rÓ  r°  rÜ   rã   r  r
  r  r  r  ræ  râ   r  rß   ró   rô   rÎ  r^   rz  r  ru  rv  r±  r9   rë   )rÎ  rø   r‰  rw   rö  rÉ   r  r  r  rØ  rû   r  rÿ   r|  rÔ  s                 €rS   rÓ  ÚImagine.describe°  s9  ø€ Ü‰GÑ˜QÓ"ˆØ�X‰X‹ZˆœbŸfšfÁÓ%CÂ¸1§f¡f§m¡m°AÔ&6ÁÑ%CÀQÓG˜ÌbÏfÊfÑprÓUsÒprÐkl×V\ÑV\×VcÑVcÐdeÔVfÑprÑUsÐuvÓNwÈÜ�gŠg�a˜‘iÓ ˆ¨C©& #¤%°c·h±h×6GÑ6G×6LÑ6LÈQÓ6O°!Ü�IŠI±Ó3²¨1—v‘v—”±Ñ3Ó4ˆÄ5¹yÈ!ÌfÉ*¸"ÚoÜ&+§i¡i°°&±	×0@Ñ0@À!ÀFÁ)×BRÑBRÓ&SÐ%TÐTUÔVZ×V]ÑV]×VcÑVc×VgÑVgÐhiÐjpÑhq×hvÑhvÐxyð  {Añ  yB÷  yGñ  yGó  WHð  VIð  $JÜglÔmrÐtuÐvwÑtxÐ{}Ð~ñ  |Añ  uAô  EHð  IKð  LMñ  INð  QSð  TUñ  QVñ  IVð  XYó  EZñ  tZó  n[ð  ]^ó  h_á˜r¤u¡9Ó-á˜r¤v¡:Ó.Ü#'§7¡7§=¡=×#4Ñ#4°Q°v±YÀÀ&Á	Ó#JñLˆˆ'‰
ð ˆùò &DùÒUsùâ3s   µ"H-Á3"H2Ã8H7c                 óF  ^^^• U R                   S   n[        U5       VVs/ s H  u  p4U R                  XC5      PM     snnmSu  pV [        R                  R                  S[        R                  R                  [        S5      5        [           SS K
nS S S 5        WR                  UR                  S5      UR                  S5      UR                  S5      UR                  S5      S	.[        TU5       VVs/ s H  u  p„X„S
   UR                  SS5      S.PM     snn5      u  pVU V	s/ s H  n	[        [        U	5      S5      PM     sn	U R                   S'   U R#                  5         UR                  S5      (       a¦  [        UR%                  5       5      S:¼  a‰  ['        UR)                  5       5      n
TU l        U
STU
   S   [        [        UR%                  5       5      S5      U V	s/ s H  n	[        [        U	5      S5      PM     sn	T Vs/ s H  o»S   PM	     snSS.4$ SUS    SUS    SUS    S3mSmUUU4S jnTU l        [3        [5        [7        U5      5      5      n[9        S5       oÌR;                  XÞUS S S2   45      u  nnS S S 5        U Vs0 s H  nUWU   WU   -   S-  _M     nn[%        UUR                  S9n
WR                  S S5      WR                  S S5      -   S-  nUUU
   :”  a2  SS!0 [        US5      U Vs/ s H  n[        UU   S5      PM     snSS".4$ U
[%        XÿR                  S9[%        UUR                  S9:H  TU
   S   [        UU
   S5      U Vs/ s H  n[        UU   S5      PM     snT Vs/ s H  o»S   PM	     snS#.4$ s  snnf ! , (       d  f       GN= fs  snnf s  sn	f s  sn	f s  snf ! [,         a"  n[/        S[1        U5      S S SS9   S nAGNÐS nAff = f! , (       d  f       GNu= fs  snf s  snf s  snf s  snf )$Nr}   ©NNr   r†   r%  r¡   r;  rr  )r%  r¡   r;  rr  r±  r!  T)Údescr±  r!  rH   rï  rÜ  r   r¿  rÒ   )Úagreer¿  rÉ   ÚprobsÚwheresrÜ  zteacher guess failed:r   r‹   zVSomeone is playing with Lego with no plan. Right now they think it might be becoming: z. What they want to add next: z. They love r£   z‰. Each option is one piece they could add, with which coloured piece it joins, where it sits, and measurements. Which one would they add?Ú
ABCDEFGHIJc           	      óT  >• [        U 5       VVs0 s H  u  pTU   TU   _M     nnnSUS'   [        R                  " T	SST	US.05      nUS   S   S   n[        U 5       VVs0 s H  u  pX%R                  TU   S5      _M     nnnUR                  SS5      US	'   U$ s  snnf s  snnf )
NzYNone of these: every option misses what they want, so they would rather draw new options.ÚZrµ   rï  )r˜  ÚinstructionsÚcriteriarx  Úprobabilitiesr   Únone)r3  ÚjevÚcallr^   )
r™  r!  rž  ÚcritrÊ   rÉ   r™   ÚLr‚  rÈ   s
          €€€rS   r”  ÚImagine.choose.<locals>.askÑ  sß   ø€ Ü.7¸Ô.>Ô?Ò.>¡d a�A�a‘D˜$˜q™'’MÑ.>ˆDÑ?ØsˆD�‰IÜ—’˜˜U¨XÀqÐVZÑ$[Ð\Ó]ˆAØ�)‘˜UÑ# OÑ4ˆAÔ[dÐejÔ[kÔ<lÒ[kÑSWÐST¸QÇÁÀaÈÁdÈAÃÒ=NÑ[k°cÑ<lÐ|}÷  }Bñ  }Bð  CFð  HIó  }JÐnqÐrxÑnyð  SVð  LVùó @ùó =ms   �BÁ#!B$r%  rŒ  F)rƒ  r¿  rÉ   r„  rŒ  )rƒ  r¿  rÉ   r„  r…  )rÄ   r3  rÓ  r�  r\   r‘  r[   r]   rm   r+  r*  rï  r^   r?  r9   rë   rQ  rb  r  ró  r'  Ú
_last_descr•   r˜   ru   rq   r„  rU  r   rÒ  )rÎ  r  rÆ   r‰  rø   r  rg  r*  rw   rh  rz  r­  rž   r”  r¥  Úp1Úp2rž  ÚtotrŒ  r�  r‚  rÈ   s                       @@@rS   ÚchooseÚImagine.choose¾  s@  ú€ Ø�J‰J�r‰NˆÄÈ5ÔAQÔ#RÒAQ¹¸ A§J¡J¨qÖ$4ÑAQÒ#R˜Dà‰ˆð
	ZÜ�H‰H�O‰O˜AœrŸw™wŸ|™|¬D°)Ó<Ô=Þ›\—Ø—;‘;¨¯©¨f«À1Ç5Á5ÈÓCTÐde×diÑdiÐjvÓdwð  EF÷  EJñ  EJð  KTó  EUñ   VÜjmÐnrÐtyÔjzÔ{ÒjzÑbfÐbc¨°f±IÈÏÉÈgÐW[ÓH\Ô ]ÑjzÒ{ó}‰DˆAá<=Ó>ºA°q¤¤e¨A£h°Ö 2¹AÑ>ˆA�G‰G�GÑÀÇÁÄØ�u‰u�V�}‰}¤ q§u¡u£w£°4Ó!7Ü˜1Ÿ8™8›:“�°t¨¬Ø t°d¸4±jÀÑ6IÔPUÔV[Ð\]×\aÑ\aÓ\cÓVdÐfgÓPhñ  QRó  tSò  QRð  LMÔtyÔzð  ABó  {Cð  EFö  uGñ  QRñ  tSÙ?CÓ(Dºt¸¨G¬¹tÑ(DÈdñTð Tð Tð fÐfgÐhrÑfsÐetð u,Ø,-¨f©I¨;°lÀ1ÀWÁ:À,ð Onðoˆð ˆ÷	Vð
 ˆŒÜ””s˜5“zÓ"Ó#ˆÜ Ô" b·6±6¸#À1ÁTÀrÀTÁ7¸|Ó3L©&¨"¨b×"Ù/0Ó1ªq¨!ˆq�2�a‘5˜2˜a™5‘= AÑ%Ò%©qˆÐ1¼#¸cÀsÇwÁwÑ:O°4Ø—‘�v˜qÓ! B§F¡F¨6°1Ó$5Ñ5¸Ñ:ˆØ�#�d‘)Ó B°%À"Ì5ÐQUÐWXË>ñ  @Aó  eBò  @AÐz{ÔejÐknÐopÑkqÐstÖeuñ  @Añ  eBð  LPñ  )Qð  %Qð  QØœs 2¯6©6Ñ2´c¸"À"Ç&Á&Ñ6IÑIÐTXÐY]ÑT^Ð_fÑTgÔnsÐtwÐx|Ñt}ð  @Aó  oBÙ:;Ó<º!°Q¤ c¨!¡f¨aÖ 0¹!Ñ<Ñ_cÓHdÒ_cÐY[ÈGÌÑ_cÑHdñfð fð 	fùó; $S÷
 –üã{ùÚ>ùò tSùÚ(DøÜÓY¤Ð&=¼sÀ2»wÀtÈ¸}ÐTX× YÐ YûÐYú÷ #Ö"üÚ1ùò eBùâ<ùÒHdsŒ   ¡N!ÁAO ÂN'ÂA$O Ã8$N9ÄO Ä*N?Å	B"O Ç+OÈ
O ÈO	ÈO É3O=ÊPÌPÍ.PÎPÎ'
N6Î1O Ï
O:ÏO5Ï5O:Ï=
Pc                 ó   • [        U SS5      (       a  SU R                  S'   U R                   S3n[        R                  " U R                  [        US5      S S9  [        R                  " XR                   S	35        g )
Nrh  Fr)  rl  z/state.json.tmprj   c                 óZ   • [        U S5      (       a  U R                  5       $ [        U 5      $ )NÚitem)rV  rš  ru   )r¥  s    rS   r#  ÚImagine.save.<locals>.<lambda>ã  s@   € ÔjqÐrsÐu{×j|Ñj|Ð^_×^dÑ^dÓ^fð  _Iô  CFð  GHó  CIð  _IrR   rk   z/state.json)rŒ  rQ  r™   rY   rt   rM   r[   r?  )rÎ  rA  s     rS   rb  ÚImagine.saveß  sh   € Ü�1�f˜e×$Ñ$¸ a§g¡g¨gÑ&6ð —‘��Ð'ˆ¬¯ª°1·7±7¼DÀÀc»Nñ  UIò  *JÜ
�
Š
�3Ÿ5™5˜' Ð-Õ.rR   c                 ó*  • SSK Jn  U" S5      nU R                  R                  R                   H1  oTR                  UR                  UR                  UR                  S9  M3     UR                  US   US   SS9  US    H  odR                  S	USS9  M     U R                   S
U R                  S SU 3otR                  US-   5        [        R                  " SSSSSSSUS-   SSSSSSUS-   /SS9  [        R                  R!                  U5      S-   $ )zwthe whole build with this candidate in MAGENTA (26: not on the colour menu -- white is, since Oct 24 2026) and its pinsr   )ÚModelÚcand)Úrotrz  r±  ræ  rÆ  r®  Ú2780z/trC  Ú_crD  rE  rv   rF  rG  rH  rI  rJ  rK  rL  Ú360rN  rO  rP  Tr¶   )r—   rž  r  r¶  r·  rµ   r±  ræ  rz  r™   rR  rÂ   r�   rv   r[   r\   r�   )rÎ  rø   r‰  rž  rg  rÉ   ræ  rX  s           rS   r¸  ÚImagine.thumbå  s  € åÙ�&‹MˆØ—‘—‘—”ˆA§¡ a§f¡f°!·#±#¸a¿h¹h Ó G‘Ø	�‰ˆa�‰i˜Q˜s™V¨BˆÑ/Ø�6”ˆAŸE™E &¨a¸˜EÓ:‘Ø—%‘%�˜˜1Ÿ6™6 #˜, b¨¨Ð,ˆ¯g©g°d¸V±mÔ.DÜ�Š˜	 5Ð*=Ð?RÐTXÐZpÐrvÐx|ð  @Fñ  yFð  HLð  NSð  UYð  [`Ø% v¨t°f©}ð>ØNRò	Tä�w‰w×Ñ Ó%¨Ñ.Ð.rR   c                 óô  • S U l         U R                  U5        [        U SS5      (       a*  U R                  R	                  SSS9  U R                  5         [        U R                  [        U SS5      (       + S9  U R                   $ ! [         ah  nU R                  R	                  S[        U5      S S SS9  U R                  5         [        U R                  SS9  [        U SS5      (       a   S nAg e S nAff = f)	Nr)  éÈ   T)rl  ÚerrorrW   F)rš   rh  ©rl  rW   )
Ú	abandonedÚ_playr•   rQ  rö   ru   rb  rŸ   r™   rŒ  )rÎ  Úturnsrž   s      rS   r  ÚImagine.playð  sÌ   € ØˆŒØ�W‰W�UŒ^ô
 �1�f˜e×$Ñ$ a§g¡g§n¡n¸9ÐPT nÑ&UÐWX×W]ÑW]ÔW_Ü�—‘¤'¨!¨V°UÓ";Ô;Ò<ÀQÇ[Á[Ð>Pøô ó 	Ø�G‰G�N‰N ´#°b³'¸$¸3°-È4ˆNÑPÐRS×RXÑRXÔRZÔ\dÐef×ejÑejÐrwÒ\xÜ�q˜& %×(Ñ(´Øûð	ús   ˆB Â
C7ÂAC2Ã1C2Ã2C7c                 ó®m  ^ ^^]^^• [        T R                   S3S5      n[        T R                   S3S5      nST l        T R                  5         SU[	        T SS 5      [	        T SS5      (       a  T R
                  OS SS	S / S / [        R                  " 5       [        [	        T S
S5      5      / [	        T SS 5      [	        T SS 5      =(       d    0 R                  S5      (       a  T R                  OS S.T l
        T R                  5         [        R                  R                  T R                  5      R                  S5      (       dQ  [         R"                  " S[        R                  R                  T R                  5      0[        [$         S3S5      5        ['        SUS-   5       G/H=  T l        T R                  [(        :¼  a3  [*        T R,                  ;  a  T R,                  R/                  [*        5        [	        T SS5      (       a    G.OÝ[	        T SS 5      (       a    G.OÈ[	        T SS5      (       a'  T R                  S:”  a  T R1                  5       S;   a    G.O�[        R                  " 5       n[3        T R4                  5      T R                  S'   T R                  R7                  T R                  S[	        T SS 5      (       a)  [        R                  R                  T R8                  5      OST R                  S S3/ S S S9  T R                  5         [;        T R4                  5      S:  a  T R=                  5         T R                  S:”  a.  T R                  [>        -  S:X  a  T R@                  S==   S-  ss'   [C        T R@                  5      T R                  S'   ST l"        T RG                  5         T R                  S:  a  SOS nT R                  U:  aO  T RI                  US![3        T R4                  5      ['        S5       Vs/ s H  nT RK                  5       PM     sn-   S"9O/ nU H  mSTS#'   M
     [M        S 5       n[3        URO                  U 4S$ j[Q        U5      5      5      n	S S S 5        U(       a¨  T R                  R7                  [Q        U5       V
Vs/ s Hh  u  p«W	U
   [R        RT                  RV                  R                  US%   US%   5      SS US%   [X        RZ                  " US&   5      R]                  5       S'S(.PMj     snn
S)9  T R                  5         [	        T SS5      (       a    G+O³T R_                  5       n[3        T R,                  5      US*'   T R`                  R/                  U5        URc                  [         Rd                  " U5      S+-   5        URg                  5         [i        UR                  S,5      [B        5      (       a<  US,   R                  S-5      (       a#  US,   T l5        T Rj                  T R                  S,'   / T l6        UR                  S.5      =(       d    / S S/  Hn  n [i        U[B        5      (       aU  [o        UR                  S05      5      [o        UR                  S15      5      :w  a  T Rl                  R/                  U5        Ml  Mn  Mp     T Rl                  T R                  S2'   T Rl                  (       aO  T Rt                  R/                  S3T R                   S43S5Rw                  S6 T Rl                   5       5      -   S7-   5        UR                  S85      [x        T R                  [x        -  -
  [x        -  S9.T R                  S:'   T R                  S;   (       a  T R                  S;   S<   S=   OS nT R                  S;   R/                  T R                  ST R                  S S3UR                  S=S'5      [        UR                  S>5      5      =(       a    US LXìR                  S?5      [        UR                  S@SA5      5      SB.5        [	        T SS5      (       a’  UR                  SC5      (       a|  [	        T SDS'5      (       aj  T Rz                  S==   S-  ss'   SET R
                   SFT R
                   SG3/T R                  S;   S<   SH'   [C        T Rz                  5      T R                  SI'   T R                  R7                  S:US SJ9  T R                  5         SS K>oÿR                  T R€                  UT R                  4SASK9Rƒ                  5         […        SLT R                   SMUSN    SOUR                  S?5       SPUR                  SQ5       SRUS=    UR                  S>5      (       a  SSUR                  STS'5      -   SU-   OS' SVUSW    SXUSY    3SASZ9  T R                  U:X  a    G'O(UR                  S[5      =(       d    0 UR                  S\5      =(       d    0 nnUT R                  S;   S<   S]'   T R                  R7                  UUS^9  T R                  5         [‡        UR                  S_S5      5      [‡        UR                  S_S5      5      -
  n[‡        UR                  S`S5      =(       d    S5      Sa:¬  =(       d'    [‡        UR                  SbSc5      =(       d    Sc5      S:*  n[i        UR                  Sd5      [B        5      (       a  UR                  Sd5      O0 n[‡        UR                  SeS5      =(       d    S5      nUT R                  Sd'   [	        T SS5      (       Gd0  [	        T S
S5      (       Gd  T R                  S:¼  Ga  UR                  Sf5      SAL aø  US :¼  aò  UR                  Sg5      [ˆ        ;   aÙ  [‹        UR                  ShS'5      5      R�                  5       [Ž        ;   a¨  UR                  S=S'5      nUR                  SiS'5      n[…        SjUSk SlU SmUR                  SnS'5       3SASZ9  SoU 3/T R                  S;   S<   SH'   T R                  R7                  SpUSq9  T R                  5         USg   USh   SrU SsU 3UUSASt.T lH          G$O|[	        T SS5      (       GdQ  [	        T SS 5      (       Gd>  [	        T S
S5      (       Gd+  UR                  Su5      (       Ga  US:¼  d  U(       Ga  UR                  Sg5      [ˆ        ;   aí  [‹        UR                  ShS'5      5      R�                  5       [Ž        ;   a¼  UR                  SvS'5      n[…        SwUR                  Sx5       SyU 3SASZ9  SzUR                  Sx5       SyU 3/T R                  S;   S<   SH'   T R                  R7                  SpUS{9  T R                  5         USg   USh   S|UR                  Sx5       3UR                  Sx5      S}.T lH          G#O[	        T S
S5      (       Gaµ  T R“                  UR                  S~5      5      T R                  S~'   [i        UR                  S5      [B        5      (       a  UR                  S5      O0 R•                  5        Hœ  u  nnT R–                   H†  nUR                  S€S'5      R™                  5       R�                  5       [‹        U5      R™                  5       R�                  5       :X  d  M\  [›        S�[�        S‚[‡        U5      Sc-  5      5      USƒ'   S„US…'   Mˆ     Mž     [3        T R–                  5      T R                  S†'   / T lO        UR                  S‡5      =(       d    UR                  Sˆ5      =(       d    / S S/  Hˆ  n[i        U[B        5      (       d  M  T R¡                  UR                  S‰5      5      nT R“                  UR                  SŠ5      5      S S nUc  Mb  U(       d  Mk  T Rž                  R/                  UU45        MŠ     S‹Rw                  U 4SŒ jUR                  S‡5      =(       d    / S S/  5       5      T lQ        T R¥                  5         UR                  Sp5      (       aX  T R¦                  (       dG  SUSp'   T Rt                  R/                  S3T R                   S�T R
                   SŽT R¨                   35        UR                  Sp5      (       a@  [	        T S2S 5      (       a.  SUSp'   T Rt                  R/                  S3T R                   S�35        UR                  Sp5      (       a@  [	        T S�S 5      (       a.  SUSp'   T Rt                  R/                  S3T R                   S‘35        UR                  Sp5      (       au  T R                  R                  S’0 5      R                  S“SA5      (       dD  SUSp'   T Rt                  R/                  S3T R                   S”35        S•/T R                  S;   S<   SH'   [	        T SS5      (       aT  UR                  Sp5      (       a>  T R                  R7                  UR                  S–S'5      S—9  T R                  5         SUSp'   UR                  Sp5      (       a†  [*        T R,                  ;   ar  […        S˜UR                  S–S'5       3SASZ9  S™UR                  S–S'5       3/T R                  S;   S<   SH'   T R                  R7                  UR                  S–S'5      Sš9    GOUR                  S›5      =(       d    /  Vs/ s HZ  n[i        U[B        5      (       d  M  UR                  S‰5      (       d  M2  [i        UR                  Sœ5      [B        5      (       d  MX  UPM\     snS S nU Vs/ s H/  nT R¡                  US‰   5      USœ   T R«                  USœ   5      4PM1     nn[i        UR                  S�5      [B        5      (       a  UR                  S�5      OS n U (       a@  T R¡                  U R                  S‰5      5      T R¡                  U R                  Sž5      5      4OSŸu  n!n"T R­                  U5      n#T R                  S:”  Ga  T R                  [x        -  S:X  Gaï  [‹        UR                  S85      =(       dZ    [;        T R`                  5      S:”  a  T R`                  S    R                  S85      OS'=(       d    UR                  SW5      =(       d    S'5      R™                  5       n$U$(       Ga^  T R¯                  U$[±        T R4                  5      S¡9u  n%n&U%(       a  U&S¢:¼  a  U%OS n'U'(       d&  T R²                     T Rµ                  U$5      n'S S S 5        U'(       aÛ  [        R                  " 5       T R                  U'[R        RT                  RV                  R                  U'U'5      U$S£.T R                  S¤'   T R·                  U'U$5        T R¹                  U'[‹        UR                  S¥S'5      5      5        U#R/                  S¦U$S S!  S§[R        RT                  RV                  R                  U'U'5       S¨35        OU#R/                  S©U$S S!  Sª35        Sn(U HY  u  n)n*n+U)b  U)T R»                  5       ;  a  M   T R²                     U#R/                  T R½                  U)U*U+5      5        SAn(S S S 5        M[     U((       aM  T R¿                  S›5      n,T R                  R7                  [        R                  R                  U,5      S-   S«9  / / p—UR                  S¬5      n-U-(       a¥  T R²                     T RÁ                  [‹        U-5      R�                  5       5      n.S S S 5        W.(       aa  U#R/                  S­U. 35        T R¿                  S®5      n,T R                  R7                  [        R                  R                  U,5      S-   S«9  / / p—UR                  S¯5      n/[	        T S�S 5      (       aÇ  U/bÄ  T R²                     T RÃ                  [i        U/[B        5      (       a  U/=(       d    0 R                  S°5      OS 5      n0S S S 5        U#R/                  W0=(       d    S±5        U0(       aM  T R¿                  S²5      n,T R                  R7                  [        R                  R                  U,5      S-   S«9  / / p—OÑU (       aÊ  [	        T S�S 5      (       d¸  [‹        U R                  S³5      5      S´;   aš   T R²                     T RÅ                  U!U"[‹        U S³   5      5      n0S S S 5        W0(       a^  U#R/                  U05        T R¿                  S¶5      n,T R                  R7                  [        R                  R                  U,5      S-   S«9  / / p—UR                  S·5      n1[i        U1[B        5      (       aÌ  U1R                  S¸5      bº   T R²                     T RÇ                  [o        U1S¸   5      5      n2S S S 5        W2(       a€  U#R/                  S¹[o        U1S¸   5       Sº3S»Rw                  U25      -   5        T R¿                  S¼5      n,T R                  R7                  [        R                  R                  U,5      S-   S«9  / / p—UR                  S½5      (       a”  T R²                     T RÉ                  5       n0S S S 5        U#R/                  W0S¾:X  a  S¿OSÀU0 35        U0S¾:X  aM  T R¿                  SÁ5      n,T R                  R7                  [        R                  R                  U,5      S-   S«9  / / p—UR                  SÂ5      n3[i        U3[B        5      (       GaI  U3R                  S‰5      (       Ga2  T R¡                  U3S‰   5      n) U)b  T RË                  U)5      OS n4U4(       a)  [	        T SÃ0 5      R                  [Í        U4SÄ   5      S�5      OS�n5U3R                  Sœ5      b  [‡        U3Sœ   5      U5-
  O[‡        U3R                  SÅSÆ5      5      n6U6SÇ-   SÈ-  SÇ-
  n6U)b"  [Ñ        U65      S:¼  a  T RÓ                  U)U6SÉ5      OS n7U7(       a^  U#R/                  U75        T R¿                  SÂ5      n,T R                  R7                  [        R                  R                  U,5      S-   S«9  / / p—[‹        UR                  SÊ5      =(       d    S'5      n8U8T R4                  ;   a—  U8[	        T SË[±        5       5      ;  a~  T R4                  RÕ                  U85        U#R/                  SÌ[R        RT                  RV                  R                  U8U85       SÍ35        U Vs/ s H  o»S%   T R4                  ;   d  M  UPM     nnU#(       Gaº  T =Rt                  U# V9s/ s H  n9S3T R                   SyU9 3PM     sn9-  sl:        […        SÎS5Rw                  U#5      -   SASZ9  [×        SÏ U# 5       5      (       GaP  T R                   SÐT R                  S SÑ3n,T RØ                  RÚ                  RÝ                  U,SÒ-   5        [Þ        Rà                  " SÓSSÔSÕSÖS×SØU,S-   SÙSÚSÛSÚSÜSÝU,SÒ-   /SASÞ9   SS Kqn:U:Rå                  U,SÒ-   5        T R                  R7                  ST R                  S Sß3S«9  T R»                  5        Vs/ s H  n[Í        U5      PM     n;nU Vs/ s H.  n[Í        USà   5      U;;   d  [	        USà   SáS5      (       d  M,  UPM0     nn[M        S 5       n[3        URO                  U 4Sâ j[Q        U5      5      5      n	S S S 5        U#T R                  S;   S<   SH'   T R                  R7                  U#[3        T R,                  5      Sã9  T R                  5         [	        T SS5      (       a    GO€[	        T SäS5      (       aç  T Ré                  UScSå9=(       d    / T Rë                  UT Rí                  UScSSæ95      -   n<[±        5       n=U< Vs/ s HŒ  o»S%   [ï        [X        Rð                  " US&   S S 2S 4   S5      5      [ï        [X        Rð                  " US&   S S 2S S 24   Ró                  5       S5      5      4=n>U=;   a  Mr  U=Rõ                  U>5      (       a  MŠ  UPMŽ     snS Sc n</ / p—GO[i        UR                  Sç5      [B        5      (       a  UR                  Sç5      OS n?U?(       az  [‹        U?R                  SèS'5      5      R™                  5       (       aL  T R÷                  [‹        U?R                  SèS'5      5      [‹        U?R                  S°S'5      =(       d    S'5      SéSå9O/ =(       d\    T Ré                  UT R                  S:  a  S OSSå9=(       d3    T Rë                  UT Rí                  UT R                  S:  a  S OSSSæ95      n<[M        S5       n[3        URO                  U 4Sê j[Q        U<5      5      5      n@S S S 5        U<U-   W@W	-   nBnA[;        UA5      S:  aŸ  T RI                  SëSìSASí9 V^s/ s H!  m[×        U4Sî jWA 5       5      (       a  M  TPM#     nCnUC H  mTRù                  S#S5        M     [M        S5       n[3        URO                  U 4Sï j[Q        WC5      5      5      nDS S S 5        WAWC-   WBWD-   nBnAWA VEs/ s H  nEUESð   S   Sñ:w  d  M  WEPM     nFnEUF(       d¡  T RI                  SéSìSSí9 V^s/ s H!  m[×        U4Sò jWA 5       5      (       a  M  TPM#     nGnUG H  mTRù                  S#S5        M     [M        Sé5       n[3        URO                  U 4Só j[Q        WG5      5      5      nHS S S 5        WAWG-   WBWH-   UGnFnBnA[;        WA5      S:  d  WF(       Gdå  […        SôSASZ9  [	        T S
S5      (       a_  T Rt                  R/                  S3T R                   SõT R
                   Sö35        S÷/T R                  S;   S<   SH'   T R                  5         G"M&  [	        T SS5      (       GdT  [i        UR                  Sd5      [B        5      (       a  UR                  Sd5      O0 n[;        T R»                  5       5      S:X  a  T R»                  5       S   Rú                  OS nIUR                  Sg5      [ˆ        ;   a&  UR                  Sg5      WI:w  a  UR                  Sg5      OSønJ[‹        UR                  ShS'5      5      R�                  5       [Ž        ;   a)  [‹        UR                  ShS'5      5      R�                  5       OSùnKUR                  S=S'5      nS»Rw                  [ý        T R»                  5        Vs1 s HA  n[R        RT                  RV                  R                  URú                  URú                  5      iMC     sn5      5      S Sú nLUR                  Si5      =(       d.    Sû[R        RT                  RV                  R                  WJUJ5       Sü3n[…        SýU 3SASZ9  SþWL SÿU 3/T R                  S;   S<   SH'   T R                  R7                  Sp0 UEGS SA0ESq9  T R                  5         WJWKSAUUGSUL GSU SsU 3GS.T lH          G
O²T R                  R7                  GS[Q        WA5       V
Vs/ s Hð  u  p«WBU
   [R        RT                  RV                  R                  US%   US%   5      [þ        R                  USà   GR                   USà   GR                   5       S‹[R        RT                  RV                  R                  USà   Rú                  USà   Rú                  5       3UR                  S#S5      S US%   [X        RZ                  " US&   5      R]                  5       GS.PMò     snn
GS9  T R                  5         T GR                  WA5      u  nMnN[	        T SS5      (       a    G	OUSm^WMS<:X  Ga  T^S:  Ga	  T^S-  m^T Rt                  R/                  S3T R                   GS35        T R                  R7                  GSGS9  T R                  5         T RI                  SéSú[3        T R4                  5      ['        S 5       Vs/ s H  nT RK                  5       PM     sn-   S"9T Rí                  USéSSæ9-   nOUO H  mTRù                  S#S5        M     [;        WO5      S:  a  GO"[M        Sé5       n[3        URO                  U^U 4GS j[Q        WO5      5      5      nPS S S 5        WOWPnBnAT R                  R7                  GS[Q        UA5       V
Vs/ s Hy  u  p«WBU
   [R        RT                  RV                  R                  US%   US%   5      S'UR                  S#S5      S US%   [X        RZ                  " US&   5      R]                  5       GS.PM{     snn
GS9  T R                  5         T GR                  WA5      u  nMnNWMS<:X  a	  T^S:  a  GM	  SnQWMS<:X  Ga9  WNR                  GS5      =(       d    /  VRs/ s H"  nR[i        UR[n        [†        45      (       a  WROS<PM$     snRS [;        WA5       nSUS(       a/  [›        WS5      S:¼  a   [o        [X        GR                  " WS5      5      OSnMSAnQ0 WNEGSUNR                  GS5      =(       d    S /[;        WA5      -  0EnN[‹        UR                  S¥S'5      5      nTT Rt                  R/                  S3T R                   GS[R        RT                  RV                  R                  UTUT5      =(       d    GS GS35        GS
WN;  d  WNGS
   (       d  T GR                  WAWM   UM5      GS
   WNGS
'   [3        WNR                  GS5      =(       d    / 5      S /[;        WA5      -  -   S [;        UA5       WNGS'   [Q        T R                  GS   5       H  u  n
nUWNGS   U
   UUGS'   M     T R                  R7                  GSWM[‹        UR                  GSS'5      5      R�                  5       GS9  T R                  5         [        GR
                  " GS5        [	        T SS5      (       a    GOÔWQ=(       d    WAWM   R                  S#SA5      (       + T l†        [        T R                   GS3GS5       nVUVRc                  [         Rd                  " T R                  WQUR                  S=5      UR                  SW5      UR                  GS5      UR                  GS5      UR                  SY5      WM[Q        WA5       VWVs/ s Ht  u  nWnUS%   UR                  S#SA5      WNGS   UW   [X        Rð                  " US&   S 5      R]                  5       [	        T GS S 5      =(       d    S /[;        WA5      -  WW   GS!.PMv     snnWGS".	[Š        GS#9S+-   5        S S S 5        T GR                  WAWM   5      nX[	        T S
S5      (       a  T R¥                  5         WX(       al  [‹        UR                  GSS'5      5      R�                  5       [Ž        ;   a:  [Ž        [‹        UGS   5      R�                  5          T R»                  5       S<   l€        WX(       aI  T GR                  Rù                  S¾/ 5      R/                  T R                  T R»                  5       S<   45        WX(       a[  WAWM   S%   T R4                  ;   aE  T R4                  RÕ                  WAWM   S%   5        [	        T SË[±        5       5      UAUM   S%   1-
  T l‰        WX(       a  T GR                  WAWM   S%   5        T =R                  S-  sl        T R                  5         T =R                  S-  sl        SS K>nYUYR                  T GR                  T R                   SÐT R                  S-   S S3UT R                  4SASK9Rƒ                  5         T R                  R7                  GS$ST R                  S-   S S3[3        T R4                  5      WAWM   S%   GS%9  T R                  5         URc                  [         Rd                  " T R                  UAUM   S%   WX[ñ        [        R                  " 5       U-
  S5      GS&.WNR•                  5        VWVs0 s H  u  nWnUWGS':w  d  M  WWU_M     snnWE5      S+-   5        URg                  5         […        GS(WNGS
   GS)    GS*UNGS
   GS+    GS,UNR                  GS5       S»UNGS-   (       a  GS.OGS/ GS0[        R                  " 5       U-
  Sk GS13SASZ9  G/M@     [	        T S�S 5      (       a‹  T R²                     T RÃ                  5       n0S S S 5        W0(       dO  T R                  S;   =(       a2    T R                  S;   S<   Rù                  SH/ 5      R/                  GS25        S T lŒ        T R                  5         T RØ                  RÚ                  RÝ                  T R                   GS335        S nZ[;        T R`                  5      S:¼  a‚  [	        T SS5      (       dp  [	        T GS4S 5      (       d]  T R                  R7                  GS5GS69  T R                  5         T GR                  5       nZUZ(       a  T R                  R7                  WZGS79  [	        T SS5      (       a-  T R                  R7                  GS8SAGS99  T R                  5         g T R                  R7                  SpGS69  T R                  5         G[        [        R                  R                  T R                  5      T R`                  T R,                  [        T R                   S35       V[s/ s H  n[[         GR                  " U[5      GS:   PM      sn[[	        T SS5      (       a  T R
                  OS WZGS;9  [;        T R`                  5      S:¼  aU  [	        T SS5      (       dB  [3        T R`                  5      m]U]4GS< jn\G[         R~                  " U\SAGS=9Rƒ                  5         g g g s  snf ! , (       d  f       G/Ny= fs  snn
f ! [p        [r        4 a     G-MÓ  f = f! [p        [r        4 a    Sn G)N¶f = f! [p        [r        4 a    Sn G)Nf = f! [p        [r        4 a     G%Mê  f = fs  snf s  snf ! , (       d  f       GN,= f! , (       d  f       GMA  = f! , (       d  f       GNM= f! , (       d  f       GN|= f! , (       d  f       GN³= f! [r         a    Sµn0 GNÅf = f! , (       d  f       GN= f! [p        [r        4 a     GN—f = f! , (       d  f       GNo= f! [p        [r        [Î        4 a    S�n6 GN9f = fs  snf s  sn9f ! [æ         a     GNf = fs  snf s  snf ! , (       d  f       GNY= fs  snf ! , (       d  f       GN·= fs  snf ! , (       d  f       GN = fs  snEf s  snf ! , (       d  f       GNv= fs  snf s  snn
f ! [æ         a�  n[…        GS[‹        U5      S Sú  GS3SASZ9  G[        GS	 [Q        WA5       5       S5      nMST GR                  UAUM   UM5      GS
   S S /[;        UA5      -  SAGS.nNT Rt                  R/                  S3T R                   GS35         S nAGNÖS nAff = fs  snf ! , (       d  f       GN¨= fs  snn
f ! [æ         a    SSS S /[;        WA5      -  GS.nNnM GNÿf = fs  snRf s  snnWf ! , (       d  f       G	NA= fs  snnWf ! , (       d  f       GN³= fs  sn[f (>  Nz
/log.jsonlrj   z/notebook.jsonlr   r  rÅ  Frm  zframe_00.pngr³  Úd20r½  rñ  )rR  r«  r  rg   rl  rY  ÚentryÚ
candidatesrz  ÚhistoryÚstartedr³  r´  r®  Úrestarted_fromr   rv   z/runs/latest.jsonrÓ   rh  rµ  )r*  r—  rÃ  rÏ  rÆ  rC  rK  )rR  rl  rY  r°  rz  r¯  rÒ   r§  rÌ  rB   rH   r£  r³  r!  c                 ó:   >• TR                  U S   SU S    35      $ ©NrÓ   rj   r   r·  r¹  s    €rS   r#  ÚImagine._play.<locals>.<lambda>  r¼  rR   r±  ræ  rL   )rd  r±  r!  rÉ   r  ræ  r¾  )r°  Úaskedr³   rä  ÚstepsÚcount_checkrù  ÚhasÚshouldÚ
off_countsr€  z: YOUR COUNT IS OFF -- r†  c              3   óŽ   #   • U  H;  oR                  S 5       SUR                  S5       SUR                  S5       3v •  M=     g7f)Úfeaturez: it should have r»  z, your build has rº  Nr,  )r   Úccs     rS   r"  Ú Imagine._play.<locals>.<genexpr>  sR   é € ð SFò yEÐrt—v‘v˜iÓ(Ð)Ð):¸2¿6¹6À(Ó;KÐ:LÐL]Ð^`×^dÑ^dÐejÓ^kÐ]lÕmò  yEùs   ‚AAzJ. Fix that first: take the extra off (or move it), or add the missing one.rå  )ÚshapeÚinÚwishr±  r}   r¡   rv  Ú
new_seeingrœ   T)rR  rY  r¡   rv  ÚwasrÄ  ÚkeptÚloved_her_moverÆ  zloved z's move -- z earned a tokenr“  r”  )rl  r¯  r|  rs  z
turn z: SEES rh  z
   COULD BE z  -- rw  z
   GOING WITH z   [PIVOT: rÒ  Ú]z

   WANTS r%  z

   LOVES r£   r‹   ry  rz  Úfeel)ry  rz  rÌ  rË  rG   Ú
confidencer)  Ú
start_overÚ	better_byÚdo_itÚfirst_pieceÚfirst_colourró  z   STARTED OVER (r9  z/10 better): r¥  r¢  zstarted over: r*  )rl  Ú	restartedz	starting z over: )ry  rz  r¢  rò  ró  rñ  ÚabandonÚabandon_whyz   ABANDONED for rò  rq  zleft it unfinished for )rl  r©  zleft the last build for this: )ry  rz  r¢  rò  Ú
to_guesserÚwarmthr®   r   r*  rë  ÚPinÚbyr´  ÚgesturesrP  ry  rO  r¤  c              3   ó¾   >#   • U  HR  n[        U[        5      (       d  M  UR                  S 5       TR                  UR                  S5      5      SS  3v •  MT     g7f)ry  rO  NrÒ   )r¼   r9  r^   rb  )r   r  rÎ  s     €rS   r"  rÀ  U  sl   øé € ð  ,bò  lJÐfgô  NXð  YZô  \`÷  NaÓ,a¨q¯u©u°W«~Ð.>¸q¿|¹|ÈAÏEÉEÐRYËNÓ?[Ð\^Ð]^Ð?_Ð>`Õ,aò  lJùs
   ƒA =Az: you wanted to stop, but z7 hasn't guessed it yet -- make it read more plainly as zF: you tried to call it done, but your own count is off -- fix it firströ  zN: you tried to call it done while still holding a section -- set it down firstrW  rÐ   z[: you tried to call it done, but it would fall over -- it can't be finished until it standsz.wanted to call it done, but it would fall overr+  )Úreef_thinks_donez	   DONE: zdecided it's done: )r+  rˆ  rZ  rú  Úfromr�  rç  rš  r  )r  rR  r  r±  rÃ  Úwish_grantedr‘  z+the catalog delivered what it wished for ("z"): the z, now in its bin and handzwished for "z'" but nothing in the catalog could join)rY  r£  zturned the whole creation: rR  r  r2  z@tried to set the section down, but there was nowhere it fits yetÚdownr÷  )rò  rð  rñ  z=couldn't break it there: one of those pieces was already gonerf  rß  rÝ  zwent back to turn z: took off r  r›  rÆ  r¾  z&slid a baseplate under the whole buildzwanted a baseplate, but Úbaser¦  r´  r‚  r§  r¨  rý  rµ  Úitrš  râ  rœ  r�  z	   MOVES c              3   óB   #   • U  H  oR                  S 5      v •  M     g7f))ztook offÚ
recolouredN)r  )r   rw   s     rS   r"  rÀ  ©  s   é € ÐMÊÀA—|‘|Ð$>×?Ð?Êùs   ‚rB  r@  rD  rE  rF  rG  rH  rI  rJ  rL  rM  rN  rO  rP  r¶   zb.pngr­  Úis_floorc                 ó:   >• TR                  U S   SU S    35      $ rµ  r·  r¹  s    €rS   r#  r¶  ³  s*   ø€ ÐXY×X_ÑX_Ð`bÐcdÑ`eÐijÐkmÐnoÑkpÐjqÐgrÔXsrR   )r“  rf   rÍ  r“  )r!  rv  rD  r]  rÔ   c                 ó4   >• TR                  U S   U S   5      $ )NrÓ   r   r·  r¹  s    €rS   r#  r¶  ¾  s!   ø€ ÐQR×QXÑQXÐY[Ð\]ÑY^Ð`bÐcdÑ`eÔQfrR   r  r¦  )r!  r´  rÝ  c              3   ó^   >#   • U  H"  nTS    US    :H  =(       a    TS   US   :H  v •  M$     g7f©rÿ  r±  NrQ   ©r   rØ  rø   s     €rS   r"  rÀ  Á  sf   øé € ð  TVò  PUð  KLÐTUÐV\ÑT]ÐabÐciÑajÑTj÷  UFÐopÐqwÑoxÐ|}ð  Eñ  }Fñ  pFô  UFò  PUùó   ƒ*-c                 ó:   >• TR                  U S   SU S    35      $ )NrÓ   rh  r   r·  r¹  s    €rS   r#  r¶  Ã  s*   ø€ ÐTU×T[ÑT[Ð\^Ð_`Ñ\aÐefÐgiÐjkÑglÐfmÐcnÔTorR   rÿ  rÝ  c              3   ó^   >#   • U  H"  nTS    US    :H  =(       a    TS   US   :H  v •  M$     g7frå  rQ   ræ  s     €rS   r"  rÀ  Ç  sf   øé € ð  SUò  OTð  JKÐSTÐU[ÑS\Ð`aÐbhÑ`iÑSi÷  TEÐnoÐpvÑnwÐ{|ð  ~Dñ  |Eñ  oEô  TEò  OTùrç  c                 ó:   >• TR                  U S   SU S    35      $ )NrÓ   rž  r   r·  r¹  s    €rS   r#  r¶  É  s*   ø€ ÐRS×RYÑRYÐZ\Ð]^ÑZ_ÐcdÐegÐhiÑejÐdkÐalÔRmrR   ztoo few moveszd: NOTHING you could add fits anywhere on the build right now. You can't start over in pictionary -- z˜ is guessing at THIS build. Next turn, open up room: move a piece, take one off, or break off a section and set it down somewhere else, then keep going.z0got stuck: nothing fits -- making room next turnÚ3003r¡  rQ  zstart from a z insteadz   STUCK, STARTING OVER: zgot stuck (the z0 left almost nowhere to join) and started over: Ústuckz9the engine found almost nowhere to join a piece onto the z, so you started )ry  rz  rñ  rò  ró  r¢  Úconsidering)rd  r±  r¾  r!  rÉ   r  ræ  )rl  r°  z   Jev unavailable (z&); taking the first piece it asked forc              3   óZ   #   • U  H!  u  pUR                  S 5      (       d  M  Uv •  M#     g7f)r!  Nr,  )r   r!  rø   s      rS   r"  rÀ  î  s    é € ÐNÒ+;¡4 1¸q¿u¹uÀW¿~ŸQ™QÒ+;ùs   ‚+¢	+r¿  )rƒ  r¿  rÉ   r„  Újev_downz=: the judge was away, so it took the first piece it asked forz0: none of its options were right, so it rerolledz0None of these feel right. Drawing new options...rl  c                 ó@   >• TR                  U S   ST SU S    35      $ )NrÓ   rÊ   r   r   r·  )rº  ÚrerollsrÎ  s    €€rS   r#  r¶  ù  s3   ø€ ÐPQ×PWÑPWÐXZÐ[\ÑX]ÐabÐcjÐbkÐklÐmoÐpqÑmrÐlsÐ_tÔPurR   )rƒ  rÉ   r„  r„  zN: NONE of the options were what you asked for -- the engine could not put the zpiece you wantedz where you aimed (try another spot, another piece, or move something). It placed the option closest to what you wanted instead.r°  rÉ   ÚchoosingÚpiece_colour)rl  rz  Úpick_colourr  z/cands.jsonlrË   r;  rr  r’  )r±  r!  rÉ   ræ  r‚  )	rR  Úforcedr¡   r%  r;  rr  r£   rz  r°  rk   Úplaced)rl  rY  rÃ  Úplayed)rR  re   Ú	committedÚsecsr…  z   -> added r~  z joining the rÂ  z (Jev rƒ  zsame both orderszorders disagreedz)  [zs]z<the game ended with a section still held up; it was left offz
/build.ldrr©  Ú
reflecting)rl  )rh   r)  r¨  re   ri   c                  ó�   >• [            [        [        [        5       T 5      (       a  SOSSS9  S S S 5        g ! , (       d  f       g = f)NzIT.md rewritten by itzIT.md left as it wasTr‹   )ÚIT_LOCKr˜   rÌ   rr   )Únb_s   €rS   Ú_rwÚImagine._play.<locals>._rw:  s1   ø€ Þœe¼zÌ)Ë+ÐWZ×?[Ñ?[Ñ$;Ðawð  @Dò  E—W—W–Wús	   ˆ&7·
Ar  )‘rM   r™   rR  rY  rŒ  rg   r7  rX   r^   r½  rQ  rb  r[   r\   r�   r  rY   rt   rm   r„  Ú
DONE_AFTERr=  rf   r¸   rß  rq   rÃ  rö   rÏ  rU  rÄ  rÉ  rÌ  r9  rÍ  r&  rÑ  rÈ  r   rÒ  r3  r  ru  rv  rÜ   rò   rê   r3  rÄ   rÂ   rc  rŒ   r¼   rä  r¼  ró  rÐ  r_   rª  r]   r  r§  rÊ  ry  r|  rÒ  r˜   rë   r{  ru   r}  r~  r©  rb  r'  r´  rÁ   r  rã   rN  ry  rì  rT  rµ  r²  r…  r´  r<  r¹  rJ   r|  rR  rò  r°  rˆ  r]  r£  r  rú  rß  rÆ  r¯  r  ÚKeyErrorrõ   rÐ  r¸  r1  r  r¶  r‹  r�   rv   rT  rU  r•   rH  rf  rx  rä   r9   r  rµ   rD  r>  r±  rŽ   rÎ  rz  r–  r%  rÓ  r'  r†  rõ  r·   r  râ  rN  ra  rö  r�  rp   rn   Ú
_threading)_rÎ  r«  ÚlogÚnbfÚt0Únwildr   rv  rž   Úwild_pngr‰  rø   rÆ   r¿  Úprevr%  ÚfeÚddÚpullrì  rÅ  Úbetterrò  ró  r¢  Úgtrý   r  r  r@  rS  ÚmvÚboÚbo_pÚbo_fr“  rÃ  ri  r@  rÙ  ÚmovedÚp_Úto_Úq_rX  Úror¤  ÚsdrÝ  rˆ  rÞ  ÚbdÚh_Únowr·  rÛ  Úswrw   rT  Úaliver!  rC  Úk_rl  Ú	aimed_pngr  r�   ÚmoreÚmore_pngrØ  r¾  ÚjmÚjm_pngÚdeadry  rz  Ústuckonrz  Úinfor  Úfpngrõ  rÉ   r  r0  Úc_Úcfr!  rB  Ú_th2Úreflry   rþ  rý  rñ  s_   `          `                                                                                 @@rS   rª  ÚImagine._playù  s4  û€ Ü�a—e‘e�W˜JÐ'¨Ó-ˆ´T¸Q¿U¹U¸GÀ?Ð:SÐUXÓ5Y¨sÐdeÐ[\Ô[aÐgh×gnÑgnÔgpØ u¼ÀÀIÈtÓ9TÔlsÐtuÐw}ð  @E÷  mFñ  mFÐ`a×`hÒ`hð  LPð  [dð  o}ð  HLð  \^Ø¨B¼4¿9º9»;ÔVZÔ[bÐcdÐfrÐtyÓ[zÓV{ð  IKô  T[ð  \]ð  _dð  fjó  TkÜ9@ÀÀNÐTXÓ9Y×9_Ð]_×8dÑ8dÐen×8oÑ8o a§n¢nÐuyñ|ˆŒð 	
�‰ŒÜ�w‰w×Ñ §¡Ó&×1Ñ1°#×6Ñ6¼¿	º	À5Ì"Ï'É'×JZÑJZÐ[\×[`Ñ[`ÓJaÐBbÔdhÔlpÐkqð  rCð  jDð  FIó  eJô  9KÜ˜A˜u q™y×)ˆAŒFØ�v‰vœÓ#¬°a·k±kÓ(AÀ1Ç;Á;×CUÑCUÔV\ÔC]Ü�q˜& %×(Ñ(ª%Ü�q˜( D×)Ñ)ª5Ü�q˜& %×(Ñ(¨Q¯V©V°a«ZØ—<‘<“>Ð%5Ó5²uÜ—’“ˆB´°Q·V±V³˜aŸg™g f™o¸a¿g¹g¿n¹nÐRS×RXÑRXÐ`iô  SZð  [\ð  ^hð  jn÷  Soñ  SoÔrt×ryÑry÷  sCñ  sCð  DE÷  DNñ  DNô  sOð  w}ð  ~÷  ~Dñ  ~Dð  EHð  }Ið  IMð  uNØ')°¸Dð ?Mñ ?BØCDÇ6Á6Ä8Ü�1—6‘6‹{˜Q‹ × 0Ñ 0Ô 2Ø�v‰v˜‹z˜aŸf™f¤{Ñ2°aÓ7¸¿¹ÀxÓ9PÐTUÑ9UÓ9PÜ%)¨!¯-©-Ó%8ˆA�G‰G�MÑ"ÀU¸!¼(Ø�F‰FŒHØŸ™ !›‘A¨ˆEØef×ekÑekÐnsÓes�1—9‘9˜u¨B´T¸!¿&¹&³\ÔW\Ð]^ÔW_ÓD`ÒW_ÐRSÀQÇVÁVÆXÑW_ÑD`Ñ5`�9ÑaÐy{ˆDÛ�¨˜1˜W›:‘TÜ# AÔ&¨"¼¸b¿f¹fÔEkÔmvÐw{Óm|Ó>}Ó9~¨h×&ÞØ—‘—‘ô {Dð  EIô  {Jô+Kò {JÑrvÐrsð 4<¸A±;ÌÏÉÏÉ×HYÑHYÐZ[Ð\bÑZcÐefÐgmÑenÓHoÐzð  GKØ45°f±IÄBÇJÂJÈqÐQTÉvÓDV×D]ÑD]ÓD_Ðjlô,nñ {Jò+K�ñ Lð NO÷  NTñ  NTô  NVÜ�q˜& %×(Ñ(ª%Ø—‘“ˆA¬d°1·;±;Ó.?  7¡ÀÇÁ×ARÑARÐSTÔAUÐWZ×W`ÑW`Ôae×akÒakÐlmÓanÐquÑauÔWvÐx{÷  yBñ  yBô  yDÜ˜!Ÿ%™% ›-¬×.Ñ.°1°V±9·=±=À×3IÑ3IÐTUÐV\ÑT]È1Ì6Ðqr×qwÑqwÐ_`×_fÑ_fÐgmÑ_nð ˆAŒLØ—u‘u˜]Ó+×1¨r°3°BÓ7�ð5Ü! "¤d×+Ñ+´°B·F±F¸5³MÓ0BÄcÈ"Ï&É&ÐQYÓJZÓF[Ó0[Ð]^×]iÑ]i×]pÑ]pÐqsÖ]tÑ0[Ñ+ñ 8ð %&§L¡LˆA�G‰G�LÑ!Ø�|�|Ø—‘—‘  q§v¡v hÐ.EÐFÈÏÉñ SFØxy÷  yEò  yEóSFó JFñ  Fà`ñ aô bð )*¯©¨lÓ(;ÄJÐQR×QWÑQWÔZdÑQdÑDdÔhrÑCrÑsˆA�G‰G�F‰OØ9:¿¹À×9K�1—7‘7˜9Ñ% bÑ)¨*Ò5ÐQUˆDØ�G‰G�IÑ×%Ñ%¨q¯v©vÀ&ÈÏÉÐPSÈÐTXÐ@YÐgh×glÑglÐmwÐy{Óg|Ü04°Q·U±U¸7³^Ó0D×0YÈÐUYÐIYÐbf×v{Ñv{ð  }Ió  wJô  TXð  YZ÷  Y^ñ  Y^ð  _eð  gkó  Yló  Tmñ'nô oä�q˜& %×(Ñ(¨Q¯U©UÐ3C×-DÑ-DÌÐQRÐT`Ðbd×IeÑIeØ—‘˜Ó" aÑ'Ó"ÈFÐST×S[ÑS[ÐR\Ð\gÐhi×hpÑhpÐgqð  rAð  KBð  JC¨¯©°Ñ);¸BÑ)?ÀÑ)FÜ'+¨A¯H©H£~�—‘˜Ñ$Ø�G‰G�N‰N ¨q¸DˆNÑAÀ1Ç6Á6Ä8Û#§Z¡Z°q·{±{È!ÈQÏVÉVÈÐ]a ZÐ%b×%hÑ%hÔ%jÜ�G˜AŸF™F˜8 7¨1¨W©:¨,°nÀQÇUÁUÈ<ÓEXÐDYÐY^Ð_`×_dÑ_dÐelÓ_mÐ^nÐn~ð  @Að  BLñ  @Mð  Nð  @÷  Dñ  Dð  EL÷  Mñ  Mð  O\ð  _`÷  _dñ  _dð  epð  rtó  _uñ  Ouð  x{ò  O{ð  SUð  NVØ  &¡	˜{¨+°a¸±j°\ðCØJNòPà�v‰v˜‹¢Ø—U‘U˜:Ó&×,¨"¨a¯e©e°JÓ.?×.EÀ2�ˆBØ-/ˆA�G‰G�IÑ˜rÑ" 6Ñ*°·±·±ÈÐVX°Ñ1YÐ[\×[aÑ[aÔ[cÜ˜bŸf™f \°1Ó5Ó6¼¸r¿v¹vÀlÐTUÓ?VÓ9WÑW�ä˜"Ÿ&™& °Ó2×7°aÓ8¸AÑ=×kÄÀrÇvÁvÈlÐ\^ÓG_×GeÐceÓAfÐjkÑAkˆEÜ(2°1·5±5¸Ó3FÌ×(MÑ(M�—‘�|Ô$ÐSUˆBÜ §¡ {°AÓ 6× ;¸!Ó<�à$&ˆA�G‰G�LÑ!Ü˜A˜v u×-Ò-´g¸aÀÈu×6UÒ6UÐZ[×Z`ÑZ`ÐdeÔZeÐjl×jpÑjpÐqxÓjyð  ~Bò  kBð  GMð  QRó  GRØŸ™˜}Ó-´Ó>Ä3ÀrÇvÁvÈnÐ^`ÓGaÓCb×ChÑChÓCjÔnwÓCwØ—u‘u˜Z¨Ó,�°b·f±f¸WÀbÓ6I¨eÜÐ)¨&°¨°]À5À'ÈÈbÏfÉfÐUZÐ\^ÓN_ÐM`ÐaÐimÒnØ3AÀ%ÀÐ1IÐ0J�—‘˜	Ñ" 2Ñ& uÑ-ÈAÏGÉGÏNÉNÐagÐsuÈNÑLvÐxy×x~Ñx~ô  yAØ(*¨=Ñ(9ÀRÈÑEWÐbkÐlpÐkqÐqxÐy~Ðxð  aAØ'+°eÈñN�”âÜ˜1˜f e×,Ò,´W¸QÀ	È4×5PÒ5PÔY`ÐabÐdpÐrw×YxÒYxÐ}~÷  ~Cñ  ~Cð  DM÷  ~Nò  ~Nð  TXð  \]ó  T]÷  afð  ln÷  lrñ  lrð  s@ó  lAô  ERó  lRô  WZð  []÷  [añ  [að  bpð  rtó  [uó  Wv÷  W|ñ  W|ó  W~ô  BKó  WKØ—e‘e˜M¨2Ó.�ÜÐ)¨"¯&©&°«.Ð)9¸¸C¸5ÐAÈÒNØ3JÈ2Ï6É6ÐRXË>ÐJZÐZ\Ð]`Ð\aÐ1bÐ0c�—‘˜	Ñ" 2Ñ& uÑ-Ðef×elÑel×esÑesð  {Að  MOÐesñ  fPð  RS÷  RXñ  RXô  RZØ(*¨=Ñ(9ÀRÈÑEWð  cAð  BD÷  BHñ  BHð  IOó  BPð  AQð  aRð  \^÷  \bñ  \bð  ció  \jñ  k�”ÚÜ�q˜,¨×.Ò.Ø()¯©°Q·U±U¸<Ó5HÓ(I�—‘˜Ñ%Ü1;¸A¿E¹EÀ(»OÌT×1RÑ1R˜aŸe™e HœoÐXZ×aÑaÖc‘E�B˜ØŸYœY˜ØŸ5™5 ¨Ó,×2Ñ2Ó4×:Ñ:Ó<ÄÀBÃÇÁÃ×@UÑ@UÓ@WÕWÜ-0°´c¸#¼uÀQ»xÈ"¹}Ó6MÓ-N  6¡ÐZ_ÐPQÐRVÓPWó 'ñ dô
 &*¨!¯)©)£_�—‘˜	Ñ"ð  "�”ØŸ%™% 
Ó+×I¨q¯u©u°]Ó/C×IÀrÈ3ÈBÓO�AÜ% a¬×.Ñ.±ØŸ™ §¡ g£Ó/�A°a·l±lÀ1Ç5Á5ÈÃ>Ó6RÐSUÐTUÐ6V°Ø“}¯¨¨Q¯\©\×-@Ñ-@À!ÀRÀÖ-Iñ Pð $'§8¡8ô  ,bÐlm×lqÑlqÐr|Ól}÷  mDð  BDð  FIð  GIñ  lJó  ,bó  $b�Ô Ø—‘”Ø—5‘5˜—=‘=¨¯¯Ø %�A�f‘I q§w¡w§~¡~¸¸a¿f¹f¸XÐE_Ð`a×`hÑ`hÐ_ið  jað  bc÷  bjñ  bjð  akð  7lô  (mØ�u‰u�V�}‰}¤¨¨L¸$×!?Ñ!?Ø!��&‘	 1§7¡7§>¡>°E¸!¿&¹&¸ð  BHð  3Iô  $JØ�u‰u�V�}‰}¤¨¨F°D×!9Ñ!9Ø!��&‘	 1§7¡7§>¡>°E¸!¿&¹&¸ð  BPð  3Qô  $RØ�u‰u�V�}‰} Q§W¡W§[¡[°¸bÓ%A×%EÑ%EÀhÐPT×%UÑ%UØ!��&‘	 1§7¡7§>¡>°E¸!¿&¹&¸ð  B]ð  3^ô  $_Ø1aÐ0b�—‘˜	Ñ" 2Ñ& uÑ-Ü�q˜& %×(Ñ(¨Q¯U©U°6¯]©]Ø—‘—‘°·±°jÀ"Ó0E�ÑFÈÏÉÌÐ^cÐRSÐTZÑR[Ø�u‰u�V�}‰}¤¨1¯;©;Ó!6Ü˜	 !§%¡%¨
°BÓ"7Ð!8Ð9ÀÒFÐk~ð  @A÷  @Eñ  @Eð  FPð  RTó  @Uð  Vð  jWð  iXÈÏÉÐPYÑHZÐ[]ÑH^Ð_dÑHeØ—‘—‘¨¯©¨j¸"Ó(=�Ñ>ÂØŸe™e F›m×1¨rÐ1ÓÒ1˜´jÀÄD×6I“!ÈaÏeÉeÐT[Ïn“!ÔakÐlm×lqÑlqÐrvÓlwÔy}×a~—!Ñ1Ñð  ACð  BCð  DˆBÙPRÓSÒPRÈ1�1—7‘7˜1˜W™:Ó&¨¨$©°·±¸Q¸t¹WÓ1EÓFÑPRˆBÐSÜ'1°!·%±%¸Ó2DÄd×'KÑ'K�—‘�{Ô#ÐQUˆBÞPR˜!Ÿ'™' "§&¡&¨£/Ó2°A·G±G¸B¿F¹FÀ6»NÓ4KÑLÐXd‰JˆD�$Ø—-‘- Ó"ˆCØ�v‰v˜Œz˜aŸf™f¤zÑ1°QÔ6Ü˜1Ÿ5™5 Ó.÷  KÔWZÐ[\×[eÑ[eÓWfÐijÓWj°1·:±:¸b±>×3EÑ3EÀlÔ3SÐpr÷  KÐwx×w|Ñw|ð  ~Dó  xE÷  Kð  IKó  L÷  Rñ  Ró  T�ßØ Ÿu™u T´3°q·v±v³;˜uÐ?‘H�D˜"Þ"&¨2°«9™$¸$�CÞØŸV›V¨1¯?©?¸4Ó+@ SŸVÞÜ9=¿º»ÈaÏfÉfÐ^aÔko×krÑkr×kxÑkx×k|Ñk|ð  ~Að  CFó  lGð  QUñ  3V˜Ÿ™ Ñ/ØŸ
™
 3¨Ô-ØŸ™˜s¤C¨¯©¨l¸BÓ(?Ó$@ÔAÀ3Ç:Á:ÐP{ð  }Að  BEð  CEð  }Fð  |Gð  GOô  PT÷  PWñ  PW÷  P]ñ  P]÷  Pañ  Pað  beð  gjó  Pkð  Olð  lEð  OFõ  DGØŸ*™* |°D¸¸"°I°;Ð>eÐ%fÔgØˆEÛ!‘��C˜Ø‘: ¨1¯8©8«:Ó!5±xØ—V“V˜SŸZ™Z¨¯©¨r°3¸Ó(;Ô<Àd¸e—V‘Vñ  "ö ˜QŸZ™Z¨Ó/�d°·±·±ÄbÇgÁg×FVÑFVÐW[ÓF\Ð_eÑFe°Ñ1fÐy{Ð}ÐnvØ—‘�zÓ"ˆBÞØ—V“V 1§:¡:¬c°"«g¯m©m«oÓ#>˜S—VÞ˜Ÿ
™
Ð%@ÀÀÐ#FÔGÐPQ×PZÑPZÐ[aÓPbÈÐde×dkÑdk×drÑdrÔy{÷  zAñ  zA÷  zJñ  zJð  KOó  zPð  SYñ  zYÐdrñ  eZð  moð  qsð  bjØ—‘�zÓ"ˆBÜ�q˜& $×'Ñ'¨B©NØ—V“V 1§:¡:ÄjÐQSÔUY×FZÑFZ¨r¯x°R¯n©n¸TÔ.BÐ`dÓ#e˜S—VØ—
‘
˜3×dÐ"dÔeÞ˜qŸz™z¨&Ó1˜°1·7±7·>±>ÌÏÉ×HXÑHXÐY]ÓH^ÐagÑHg°>Ñ3hÐ{}ð  @BÐpxøÞœG A v¨t×4Ñ4¼¸R¿V¹VÀF»^Ó9LÐPtÓ9tðiØŸ› q§{¡{°4¸¼sÀ2ÀfÁ:»Ó'O ŸæØ—J‘J˜s”O¨A¯J©J°wÓ,? TÀÇÁÇÁÔVX×V]ÑV]×VfÑVfÐgkÓVlÐouÑVuÀÑAvð  JLð  NPð  GØ—‘�yÓ!ˆBÜ˜"œd×#Ñ#¨¯©¨yÓ(9Ñ(Eð5ØŸ›¨¯	©	´#°b¸±mÓ2DÓ(E ŸÞØŸ
™
Ð%7¼¸B¸y¹MÓ8JÐ7KÈ;Ð#WÐZ^×ZcÑZcÐdhÓZiÑ#iÔjØ Ÿz™z¨&Ó1˜°1·7±7·>±>ÌÏÉ×HXÑHXÐY]ÓH^ÐagÑHg°>Ñ3hÐ{}ð  @BÐpxà�u‰u�_×%Ñ%Ø—V“V 1§?¡?Ó#4˜S—VØ—
‘
ÀsÈgÃ~ÑCÐ]uÐvyÐuzÐ[{Ô|Ø˜'“>¨!¯*©*°VÓ*< 4¸a¿g¹g¿n¹nÔSU×SZÑSZ×ScÑScÐdhÓSiÐlrÑSr¸nÑ>sð  GIð  KMð  |DØ—‘�v“ˆBÜ˜"œd×#Ò#¨¯©¨w¯ªØ—W‘W˜R ™[Ó)�ðDØ,.©N˜Ÿ™ RœÀ�BÞSUœ' ! ]°BÓ7×;Ñ;¼B¸rÀ%¹y»MÈ3ÔOÐ[^�CØ57·V±V¸D³\Ñ5Mœ5  D¡›?¨SÒ0ÔSXÐY[×Y_ÑY_Ð`iÐkmÓYnÓSo�CØ ™;¨%Ñ/°%Ñ7�Cà46±NÄsÈ3ÃxÐSTÃ}�q—y‘y  S¨$Ô/Ð[_�ÞØ—J‘J˜tÔ$¨Q¯Z©Z¸Ó-? dÀÇÁÇÁÔVX×V]ÑV]×VfÑVfÐgkÓVlÐouÑVuÀÑAvØ%'¨˜(Ü�Q—U‘U˜6“]×( bÓ)ˆBØ�Q—V‘V‹| ¬'°!°ZÄÃÓ*GÓ GØ—‘—‘˜bÔ! 3§:¡:°¼¿¹¿¹×9JÑ9JÈ2ÈrÓ9RÐ8SÐScÐ.dÔ#eÙ#'Ó?¢4˜a¨V©9¸¿¹Ñ+>Ÿ¡4�Ð?ßØ—’¹3Ó?º3°a˜e A§F¡F 8¨2¨a¨SÓ1¹3Ñ?Ñ?•ÄÀ{ÐUY×U^ÑU^Ð_bÓUcÑGcÐkoÒApÜÑMÉÓM×MÒMØŸe™e˜W G¨A¯F©F°3¨<°qÐ9�D¸1¿3¹3¿7¹7×;LÑ;LÈTÐTZÉ]Ô;[Ü—N’N I¨uÐ6IÐK^Ð`dÐf|ð  Cð  EIð  LRñ  ERð  TXð  Z_Ø$(¨%°ÀÈÈvÉð$WØgkòmð+Û% v×'8Ñ'8¸À¹Ô'Gà—G‘G—N‘N¨6°!·&±&¸°¸UÐ)C�NÑDØ,-¯H©H¬JÓ7ªJ qœR žU©J�EÐ7Ù'+Óo¢t !¬r°!°F±)«}ÀÓ/EÌÐQRÐSYÑQZÐ\fÐhm×InŸA¡t�DÐoÜ+¨AÔ.°"ÄÀbÇfÁfÔMsÔu~ð  @Dó  vEó  GFó  BG°h×.Ø,/ˆA�G‰G�IÑ˜rÑ" 5Ñ)°·±·±ÀCÔSWÐXY×XcÑXcÓSd°Ñ1eÐgh×gmÑgmÔgoÜ�q˜& %×(Ñ(ª%Ü�q˜( E×*Ñ*Ø×)Ñ)¨!¨rÐ)Ð2×8°b¸A¿I¹IÀaÈÏÉÐYZÐbdÐklÈÐImÓ<nÑn�Ü›�±5ó  (@²5¨aÈ6ÉÔTYÔZ\×ZbÒZbÐcdÐehÑciÐjlÐklÐjlÐnoÐjoÑcpÐrsÓZtÓTuÔw|Ô}÷  ~Fò  ~Fð  GHð  ILñ  GMð  NPð  OPð  NPð  RTð  STð  RTð  NTñ  GU÷  G[ñ  G[ó  G]ð  _`ó  ~aó  xbð  Icð  CcÀ"ð  hmñ  Bm«ð  qv÷  qzñ  qzð  {}÷  q~¯±5ñ  (@ð  ADð  BDð  (E˜uØ!# R’hä&0°·±°v³Ä×&EÑ&E�Q—U‘U˜6”]È4�Þ]_ÔdgÐhj×hnÑhnÐotÐvxÓhyÓdz÷  eAñ  eA÷  eCñ  eC˜Ÿ™¤ B§F¡F¨5°"Ó$5Ó 6¼¸B¿F¹FÀ4ÈÓ<L×<RÐPRÓ8SÐWX˜ÑYð  IK÷ PØ×(Ñ(¨°1·6±6¸A³:©aÀ1Ð(ÐE÷PØIJÏÉÐSTÐVW×VeÑVeÐfgÐtu×tzÑtzÐ}~Ót~Ñopð  EFð  MNÐVeð  WOó  JPð ä# AÔ&¨"¼$¸r¿v¹vÔFfÔhqÐrwÓhxÓ?yÓ:z¨i×&Ø $™,¨	°HÑ(<�4ˆEÜ�5‹z˜A‹~Ø#$§9¡9¨q¸À4 9Ñ#Hô  WÒ#H˜aÔPSô  TVñ  PUó  TV÷  QVŸÑ#H�ð  WÛ�A˜qŸ|™|¨G°UÖ;™Ü'¨Ô*¨b¼TÀ"Ç&Á&ÔIoÔqzÐ{ó  rAó  CBó  >C°(×*Ø# d™l¨D°8©O�t�Ù %ÓA¢˜1¨¨6©°1©¸Ñ)@—Q¡ˆEÐAÞØ!"§¡¨Q°cÀ Ñ!Gô  VÒ!G˜AÌsô  SUñ  OTó  SU÷  PU—aÑ!G�ð  VÛ�A˜QŸ\™\¨'°5Ö9™Ü'¨Ô*¨b¼4ÀÇÁÔGmÔoxÐy{Óo|Ó@}Ó;~°&×*Ø%*¨R¡Z°¸±À˜U�t�Ü�5‹z˜A‹~§Uô �o¨TÒ2Ü˜1˜l¨E×2Ñ2ð —G‘G—N‘N U¨1¯6©6¨(ð 34Ø45·H±H°:ð >mð$nô oð 6hÐ4h�A—G‘G˜IÑ& rÑ*¨5Ñ1Ðjk×jpÑjpÔjrÚÜ˜q &¨%×0Ò0Ü0:¸1¿5¹5ÀÓ;NÔPT×0UÑ0U˜Ÿ™˜|Ô,Ð[]�BÜ14°Q·X±X³Z³ÀAÓ1E˜1Ÿ8™8›: a™=×-Ò-È4�DØ57·V±V¸MÓ5JÌmÓ5[Ð`b×`fÑ`fÐgtÓ`uÐy}Ó`}˜BŸF™F =Ô1ð  DJ�EÜHKÈBÏFÉFÐSaÐceÓLfÓHg×HmÑHmÓHoÔs|ÓH|œS §¡¨¸Ó!;Ó<×BÑBÔDð  CH�FØŸ5™5 ¨RÓ0�D¸D¿I¹IÄfÐyz÷  zBñ  zBô  zDó  NEò  zDÐtuÌdÏgÉgÏmÉm×N_ÑN_Ð`a×`fÑ`fÐhi×hnÑhnÖNoñ  zDñ  NEó  GFó  =Gð  HKð  IKð  =L°'ØŸF™F 7›O×h°¼t¿w¹w¿}¹}×?PÑ?PÐQVÐX]Ó?^Ð>_Ð_gÐ/h�EÜÐ5°e°WÐ=ÀTÒJØ7FÀwÀiÐOð  AFð  @Gð  6Hð  5I�A—G‘G˜IÑ& rÑ*¨5Ñ1Ø—G‘G—N‘N¨Ð;P¸bÐ;PÁ'È4Ñ;P�NÑQÐST×SYÑSYÔS[Ø,1¸VÐPTÐ^bÐmrÙ,eÐfmÐenÑnð  AEð  @Fð  FMð  NSð  MTð  +Uò#V�A”KâØ�G‰G�N‰N¡ô HQð  RWô  HXô<Yò HXñ  @Dð  @Að EIÈÁGÔUY×U\ÑU\×UbÑUb×UfÑUfÐghÐioÑgpÐrsÐtzÑr{ÓU|Ü',§y¡y°°6±×1AÒ1AÀ1ÀVÁ9×CSÒCSÓ'TÐ&UÐUVÔW[×W^ÑW^×WdÑWd×WhÑWhÐijÐkqÑir×iwÑiwÐyzð  |Bñ  zC÷  zHñ  zHó  XIð  WJð  %KØ$%§E¡E¨'°5Ó$9ÀÈaÐPVÉiÔ^`×^hÒ^hÐijÐknÑioÓ^p×^wÑ^wÓ^yõ={ñ HXò<Y‰Nñ Zð \]÷  \bñ  \bô  \dØŸhšh u›o‘��tô �q˜& %×(Ñ(ª%ØˆGØ˜"”* ¨1¤Ø˜1‘�˜aŸg™gŸn™n¨u°Q·V±V°HÑ<lÐ-mÔnØ—‘—‘Ñ)[‘Ñ\Ð^_×^dÑ^dÔ^fØŸ	™	 A¨R´d¸1¿6¹6³lÔX]Ð^_ÔX`ÓEaÒX`ÐSTÀaÇfÁfÆhÑX`ÑEaÑ6a˜	ÐbÐef×etÑetÐuvÐ~ð  GHÐetð  fIñ  I�Û�A §¡¨W°eÖ <™Ü�u“: “>¡5Ü'¨Ô*¨b¼¸b¿f¹fÖEuô  xAð  BGó  xHó  ?Ió  :J°$×*Ø# T�t�Ø—‘—‘¡]ô LUð  V[ô  L\ô@]ò L\ñ  DHð  DEð IMÈQÉÔY]×Y`ÑY`×YfÑYf×YjÑYjÐklÐmsÑktÐvwÐx~Ñvó  ZAð  LNØ()¯©¨g°uÓ(=ÀDÐRSÐTZÑR[Ôbd×blÒblÐmnÐorÑmsÓbt×b{Ñb{Ób}õAñ L\ò@]‘ñ ^ð `a÷  `fñ  `fô  `hØ"#§(¢(¨5£/‘Z�T˜4ð ˜"“* ¨1¦ð ˆFØ�rŒzð JNÏÉÑRYÓIZ×I`Ð^`ÐI`ÓbÒI`À1œ: a¬#¬u¨×6Ñ6‘a¸BÒ>ÑI`ÑbÐcnÔdgÐhmÓdnÐo�Þ-/´C¸³G¸q³L”sœ2Ÿ9›9 R›=Ô)Àa�ÐRVÈØR˜$ÐR¡¨¯©±'Ó):×)Q¸t¸fÄsÈ5ÃzÑ>QÑR�Ü˜1Ÿ5™5 ¨rÓ2Ó3�Ø—‘—‘  q§v¡v hÑ.|Ü"&§'¡'§-¡-×"3Ñ"3°D¸$Ó"?×"UÑCUÐ!Vñ Wfð gô hñ ˜dÓ"¨$©w¯-ÈÏÊÐTYÐZ^ÑT_ÐaeÓIfÑgnÑIo¸¹g¹Ü! $§(¡(©7Ó"3×"9°rÓ:¸d¸VÄcÈ%ÃjÑ=PÑPÐR]ÔSVÐW\ÓS]Ð^ˆD‘‰MÜ" 1§7¡7©<Ñ#8Ö9‘��2ÀTÉ'Á]ÐSTÑEU¸2¹c»7Ñ9Ø�G‰G�N‰N¡°$ÄCÈÏÉÉnÐ^`ÓHaÓDb×DhÑDhÓDj‰NÑkÐmn×msÑmsÔmuÔw{÷  xBó  xBñ  CFô  xGÜ�q˜& %×(Ñ(ª%Ø"(×"N°°d±·±ÀÈÓ0NÔ,NˆAÔô ˜Ÿ™˜™|Ð,©cÔ2°bØ—‘œŸš¨Q¯V©V¸vÐST×SXÑSXÐYcÓSdÐno×nsÑnsÐtzÓn{ð  LM÷  LQñ  LQñ  R^ó  L_Ø Ÿu™u¡YÓ/¸!¿%¹%À».ÐRVät}ð  Dô  uEô#Fò uEÑlpÐlmÐopð -.¨f©IÀÇÁÀgÈtÓ@TÐ[_Ñ`gÑ[hÐijÑ[kÔrt×rzÒrzÐ{|ð  ~Añ  |Bð  DEó  sF÷  sMñ  sMó  sOÜ-4°Q¹ÀdÓ-K×-bÐPTÈvÔX[Ð\aÓXbÑObÐdeÑ,fõ$hñ uEò#Fò%Gô QTòUð X\ñ\ô ]÷ 3ð
 —’˜% ™+Ó&ˆBÜ�q˜,¨×.Ñ.°·±´Þ”c˜!Ÿ%™%¡°Ó3Ó4×:Ñ:Ó<Ä	ÓIÔclÔmpÐqrñ  tBñ  rCó  nD÷  nJñ  nJó  nLñ  dMÈ1Ï8É8Ë:ÐVXÉ>ÔK`Þ�1—:’:×(Ñ(¨°"Ó5×<Ñ<¸a¿f¹fÀaÇhÁhÃjÐQSÁnÐ=UÔVÞ�e˜D‘k &Ñ)¨Q¯V©VÓ3°Q·V±V·]±]À5ÈÁ;ÈvÑCVÔ5WÔfmÐnoÐq{ô  ~Aó  ~Có  gDð  HMð  NRñ  HSð  TZñ  H[ð  G\ñ  g\ÐYZÔYcÞ�1—;’;˜u T™{¨6Ñ2Ô3Ø�FŠF�a‰K�F˜Ÿ™œ A§F¢F¨a¡K¥FÛ$ d§k¡k¸¿ºÈ1Ï5É5È'ÐQXÐYZ×Y_ÑY_ÐbcÑYcÐdgÐXhÐhlÐHmÐopÐrs×rxÑrxÐGyð  CG kð  'H÷  'Nñ  'Nô  'PØ�G‰G�N‰N¡°6¸!¿&¹&À1¹*ÀSÐ9IÈÐ1NÔUYÐZ[×Z`ÑZ`ÓUaÐjoÐptÑjuÐv|Ñj}‰NÑ~ð  AB÷  AGñ  AGô  AIØ�I‰I”d—j’j¨!¯&©&¸EÀ$¹KÈÑ<OÐ^`ÔjoÔpt×pyÒpyÓp{ð  Añ  qAð  CDó  kEò "VØ6:·j±j´lÔ$T²l©d¨a°ÀaÉ8Ám£T Q¨¢T±lÒ$Tð"Vó WØY]ñ^ô _Ø`c×`iÑ`iÔ`kÜ‘L ¡g¡©{Ñ!;Ð <¹MÈ$ÉwÉ-ÑXcÑJdÐIeÑekÐlp×ltÑltÑuxÓlyÐkzÐz|Ø+/±¯=Ò'Ñ>PÐQÑQUÔVZ×V_ÒV_ÓVaÐdfÑVfÐgjÐUkÑkmðoØvzõ|ñG	 *ôJ	 �1�f˜d×#Ñ#Ø—“˜qŸz™z›|˜—ÞØ—‘˜	Ñ"÷  [ q§w¡w¨yÑ'9¸"Ñ'=×'HÑ'HÈÐPRÓ'S×'ZÑ'Zñ  \Zó  ([øØ�”Ø�G‰GŒIØ	�‰�‰×Ñ˜QŸU™U˜G¡:Ð.Ô/¸°Üˆq�z‰z‹?˜aÓ¬°°6¸5×(AÑ(AÌ'ÐRSÑU`Ðbf×JgÑJgØ�G‰G�N‰N¡‰NÑ.°·±´ÀÇÂÃ¸$Þ�Q—W‘W—^‘^¨t‘^Ñ4Ü�1�f˜e×$Ñ$ð �G‰G�N‰N¡°d‰NÑ;¸Q¿V¹V¼XÀvØ	�‰�‰˜V‰Ñ$ a§f¡f¤hÝ”—‘×!Ñ! !§%¡%Ó(¨!¯*©*°a·k±kÔeiÐmn×mrÑmrÐlsÐs}Ðj~Ôeó  DAÒeÐ`aÄDÇJÃJÈqÃMÑRZÔD[Ñeñ  DAÜ$+¨A¨v°u×$=Ñ$=˜ŸšÀ4ÐTXó	Zäˆq�z‰z‹?˜aÓ¬°°6¸5×(AÑ(Aô �q—z‘zÓ"ˆCöEå×Ò S°Ò6×<Ñ<Õ>ð )BÐùòS	 Eaç&Ö&üó+Køô "¤:Ð.Ó4³Ð4ûô* œzÐ*Ó4°1«DÐ4ûô œzÐ*Ó6°Q«FÐ6ûô, %.¬zÐ#:Ó@»DÐ@üò4 @ùÚS÷ $žVú÷ —Vú÷ –Vú÷ –Vú÷
  žûÜ!ÓhÐ)h£3Ðhú÷  žûô "¤:Ð.Ó4²Ð4úç–Vûô "¤:¬xÐ8ÓCÀ»#ÐCüò @ùâ?øô %Ó*¢dÐ*üâ7ùÚoß.Ö.üò
 (@÷ 'Ö&üò Wç*Ö*üâAùò Vç*Ö*üò. NEùó<Yøô ó nÜÑ,¬S°«W°S°b¨\¨NÑ:`ÐaÐimÒnÝÒN¬9°UÔ+;ÓNÐPQÓR�Ø!&°·²¸EÀ$¹KÈÓ1NÉwÑ1WÐ^bÐnrÐmsÔvyÐzó  wAñ  nAð  OSò  T�Ø—‘—‘  q§v¡v hÑ.kÐl×mÒmûð	nüò Fb÷ +Ö*üó@]øô !Ók¨q¸EÈÐX\ÐW]Ô`cÐdiÓ`jÑWjÒ2k¨ $ªÐküò cùó$#F÷ 3Ö2üó %U÷ –üò DAs  ÐCOÐ=)COÒA/CO*Ø5A&CO0è07CPë3$CP!û *CP:ÁK*CQÁLCQÁL"CQÁMCQÁM6CQÁT%CQÁY)%CQ.Á\)CRÁ_ACRÁcCR7Ác CR%Ác9CR7ÁfCSÁf+CS
Ág	BCSÁi:CS3ÁmBCTÁtCT#Át4CT#ÁuCT(
ÁxCT-Áy0CT>Áz+CUÁz:CUÁ{)CUÁ A1CUÂ@5CUÂACUÂF)CUÂG$CU1ÂHCU1ÂH4)CU6ÂI3CVÂJCVÂJ*CVÂKCVÂK:)CVÂT ACV$ÂYC7CV)Â]&CV/Â`(CYÂb+CYÂc.B CY0ÂfCY6Âg)CZÂqB	CZ(ÂsA;CZ""ÂuCZ(ÃACZ:ÃACZ:ÃDC[ ÃL%C[ÃO
CO'	ÃO0CPÃPCPÃPCPÃPCPÃP!CP7ÃP6CP7ÃP:CQ	ÃQCQ	ÃQ
CQ+	ÃQ.
CQ>ÃR
CR	ÃR
CR"	ÃR%
CR4	ÃR/CR7ÃR4CR7ÃR7CSÃSCSÃS

CS	ÃSCSÃSCS0ÃS/CS0ÃS3
CT	ÃTCT ÃTCT ÃT-
CT;ÃT:CT;ÃU
CU	ÃU
CU.	ÃU6
CV	ÃV
CV!	ÃV/
CYÃV9BCYÃYCYÃY
CY-	ÃY6 CZÃZCZÃZ"CZ(ÃZ(
CZ7	Ã[ 
C[)NNNN)rù  rÒ   TFN©Tr  )rÔ   )Ú3867)Nr£  )rL   )rQ   F)rB   )rB   rH   rÿ  )DrX  rY  rZ  r[  r©  rë  rï  rõ  r  r/  rY  r]  ra  rs  r|  r�  rß  rÊ  rÈ  r  r  rD  ry  rp  rv  r‰  r¦  r¯  rÐ  rÆ  rØ  rß  r  rë  rú  r  rS  r£  rW  rò  rÄ  rN  rR  r<  r|  rˆ  r¸  r´  r�  r&  r3  r…  rH  rK  rT  rb  rf  rA  ri  rx  rÓ  r–  rb  r¸  r  rª  r]  Ú__classcell__)rÔ  s   @rS   r�  r�    sd  ø† ÷8ò<jò?òKò<ô(*lòV	#ò
òGò$Fò Kò%&òLiòTôKò"ô,^ô :(òvYòò>
òò<ò2Jò@ô,ò0%ò,ð €Dòò":ô0)òT"ò%ò$FôNôNò`òlô%ò(ô&Tò(<ò&AòD%ò(XNòr ò ô*83òròuò ò(ò
3òLôõ4òfòB/ò
/òQ÷C?ð C?rR   r�  Ú__main__z--turnsrù  )r˜  rl   z--seedrÒ   z--namerL   rk   z
--rememberzBwrite a stopped game down after all: --remember play_1023_175153_1)rl   Úhelpz--startzObegin from a whole saved build (the crew's erased.ldr) instead of a first piecez	--requestz%what it is building, and nothing elsez/runs/rÒ  )r  rÒ  zwritten down:Ú	imagine_sr   )rÑ  rÓ   r,  )rQ   NNr  )rQ   r¦  rŽ  )ar\  r�  r[   rY   r½   r�   Úargparser7  r:  ÚnumpyrÜ   r\   rí  ÚabspathÚ__file__rm   r‘  r  r�  Úgrowr  Úconcurrent.futuresr   rº   r’  r»   rì   ró   rô   r&  rZ   rM   r]   Ú_LCrq   r|  r9  r~  rö   r'  ÚreversedrÎ  rÇ  rÉ  r  rÊ  r  ÚLockrü  rŒ  Úmodulesr^   r+  r  r   r=  rs   r  rN   rT   rW   r{   rŸ   rÌ   r  r  r  rr   rp   rC  r{  r‚  r  r¹   r›  ÚReefr�  rX  ÚArgumentParserÚapÚadd_argumentró  Ú
parse_argsrË   rÒ  rÏ  r±  r  rÊ   r«  Úexitr˜   rÑ  Úbudgetr!  rU  rÄ   )r!  rý   s   00rS   Ú<module>rC     s  ðñt÷ B× A× A× AÛ Ø	‡w�w‡��r—w‘w—‘ xÓ0Ó1€°3·8±8·?±?À1ÀdÔ3Kß Ó Ý 1Ø€ B§G¡G×$6Ñ$6Ð7LÓ$M˜cð 	�ŠÒ"Ó#€¨b¯hªhÒ7IÓ.J VÚSÚTÚRÚZÚ,¸ÀÐ7GØ�:¨ xÒ:eÚDÈxÐYaÐNbÚ,°v¸vÐ6Fñ	H€ð ‡i‚i‘�R—W‘W—\‘\ "§'¡'§/¡/°"·'±'·/±/À(Ó2KÓ"LÐNaÓbÓcÓd€ÙˆC�‰KÓ€Ù��V‘Ó€	Ø 	× Ñ °"À2ÐPRÐ\_ÐkmÐ|}Ø35ÀCÐX[ñ$]ß]bÑ]bÓ]dð$eô |ò $e™4˜1ØhiÐqzÑhzó �!’$ñ $eò |ô }á"¡4¨	¯©Ó(9Ó#:Ô;Ô<Ò;‘$�!ˆŠÑ;Ò<€Ø ‡�˜s 6™{×0Ñ0Ô2Ô3Ò2‘t�qˆaŠdÑ2Ò3Ô 4Ø€ð €ð €
Û ¨*¯/ª/Ó*; É'ÐRU×R]ÑR]×RaÑRaÐbuÓRvÐx~ð  AEó  KF÷  K[ð  JT÷  JYò  JYó  J[¸Zðb€ð$ €
Ø	D€òX€	ð 
‡w�w‡|�|�D˜+Ó&€Ø‡W�W‡\�\�$˜Ó €òò/ò
bôEò(ò2ð. 
€ò òVôX÷/ñ /ñ “€ôð8P€òôôv?ˆd�i‰iô v?ðn9 ˆzÔØ	×	 Ò	 Ó	"€B B§O¡O°IÀCÐQS OÑ$TÐVX×VeÑVeÐfnÐuxð  CDÐVeñ  WEð  GI÷  GVñ  GVð  W_ð  ikð  GVñ  GlØ‡O�O�L¨"Ð3w€OÑxØ‡O�O�I rð  1B€Oñ  CØ‡O�O�K¨Ð2Y€OÑZØ
�‰‹€AØ‡w‡wÙ�A—F‘F˜t˜f F¨1¯6©6×+<°WÐ*=Ð>ÈÏ	É	×HYÐUYÐab×ahÑahÑiˆÐkl×kqÑkqÐrs×ryÑryÔkzÐ|÷  }Eò  }Eô  }GØ‡z‡z‘> !§*¡*Ô-©u°_ÀaÇjÁjÔ/QÐSV×S[ÒS[ÔS]Ø�6‰6×)�y §¡ Ð)€D¸dÀAÇGÁGÈQÐ+;¨5°&¸!Ø
�1‹*Ù�A—F‘F˜Q‘J 4 &¨¨t¨fÐ 5ÆA¸1¸Q¸C¹È2Ñ NÐV[Ñ\ˆØ—‘�v“ˆ ©#¨a¯j©j«/Ñ 9 ¸1À¹6¸1Þ�eð �1�*ð ùó{@|ùã<ùÛ3s   ÆT
Æ(T
ÇTÈT
